shaka-ts 5.2.10 → 5.2.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/shaka-player.min.js +86 -86
package/shaka-player.min.js
CHANGED
|
@@ -34,7 +34,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
34
34
|
* Shaka Player
|
|
35
35
|
* Copyright 2016 Google LLC
|
|
36
36
|
* SPDX-License-Identifier: Apache-2.0
|
|
37
|
-
*/var
|
|
37
|
+
*/var U=class y{static equal(e,t){if(!e&&!t)return!0;if(!e||!t||e.byteLength!=t.byteLength)return!1;if(y.unsafeGetArrayBuffer_(e)==y.unsafeGetArrayBuffer_(t)&&(e.byteOffset||0)==(t.byteOffset||0))return!0;let i=y.toUint8(e),r=y.toUint8(t);for(let s=0;s<e.byteLength;s++)if(i[s]!=r[s])return!1;return!0}static unsafeGetArrayBuffer_(e){return ArrayBuffer.isView(e)?e.buffer:e}static toArrayBuffer(e){if(ArrayBuffer.isView(e)){let t=e;return t.byteOffset==0&&t.byteLength==t.buffer.byteLength?t.buffer:new Uint8Array(t).buffer}else return e}static toUint8(e,t=0,i=1/0){return y.view_(e,t,i,Uint8Array)}static toUint16(e,t=0,i=1/0){return y.view_(e,t,i,Uint16Array)}static toDataView(e,t=0,i=1/0){return y.view_(e,t,i,DataView)}static view_(e,t,i,r){let s=y.unsafeGetArrayBuffer_(e),n=1;"BYTES_PER_ELEMENT"in r&&(n=r.BYTES_PER_ELEMENT);let a=((e.byteOffset||0)+e.byteLength)/n,o=((e.byteOffset||0)+t)/n,c=Math.floor(Math.max(0,Math.min(o,a))),d=Math.floor(Math.min(c+Math.max(i,0),a));return new r(s,c,d-c)}};/*! @license
|
|
38
38
|
* Shaka Player
|
|
39
39
|
* Copyright 2016 Google LLC
|
|
40
40
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -42,15 +42,15 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
42
42
|
* Shaka Player
|
|
43
43
|
* Copyright 2016 Google LLC
|
|
44
44
|
* SPDX-License-Identifier: Apache-2.0
|
|
45
|
-
*/var q=class y{static fromUTF8(e){if(!e)return"";let t=
|
|
45
|
+
*/var q=class y{static fromUTF8(e){if(!e)return"";let t=U.toUint8(e);if(t[0]==239&&t[1]==187&&t[2]==191&&(t=t.subarray(3)),self.TextDecoder&&!j.getDevice().shouldAvoidUseTextDecoderEncoder()){let r=new TextDecoder().decode(t);return r.includes("\uFFFD")&&p.alwaysError('Decoded string contains an "unknown character" codepoint. That probably means the UTF8 encoding was incorrect!'),r}else{let i="";for(let r=0;r<t.length;++r){let s=65533;if((t[r]&128)==0?s=t[r]:t.length>=r+2&&(t[r]&224)==192&&(t[r+1]&192)==128?(s=(t[r]&31)<<6|t[r+1]&63,r+=1):t.length>=r+3&&(t[r]&240)==224&&(t[r+1]&192)==128&&(t[r+2]&192)==128?(s=(t[r]&15)<<12|(t[r+1]&63)<<6|t[r+2]&63,r+=2):t.length>=r+4&&(t[r]&241)==240&&(t[r+1]&192)==128&&(t[r+2]&192)==128&&(t[r+3]&192)==128&&(s=(t[r]&7)<<18|(t[r+1]&63)<<12|(t[r+2]&63)<<6|t[r+3]&63,r+=3),s<=65535)i+=String.fromCharCode(s);else{let n=s-65536,a=n>>10,o=n&1023;i+=String.fromCharCode(55296+a),i+=String.fromCharCode(56320+o)}}return i}}static fromUTF16(e,t,i){if(!e)return"";if(!i&&e.byteLength%2!=0)throw p.error("Data has an incorrect length, must be even."),new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.BAD_ENCODING);let r=Math.floor(e.byteLength/2),s=new Uint16Array(r),n=U.toDataView(e);for(let a=0;a<r;a++)s[a]=n.getUint16(a*2,t);return y.fromCharCode(s)}static fromBytesAutoDetect(e){if(!e)return"";let t=U.toUint8(e);if(t[0]==239&&t[1]==187&&t[2]==191)return y.fromUTF8(t);if(t[0]==254&&t[1]==255)return y.fromUTF16(t.subarray(2),!1);if(t[0]==255&&t[1]==254)return y.fromUTF16(t.subarray(2),!0);let i=r=>t.byteLength<=r||t[r]>=9&&t[r]<=126;if(p.debug("Unable to find byte-order-mark, making an educated guess."),t[0]==0&&t[2]==0)return y.fromUTF16(e,!1);if(t[1]==0&&t[3]==0)return y.fromUTF16(e,!0);if(i(0)&&i(1)&&i(2)&&i(3))return y.fromUTF8(e);throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.UNABLE_TO_DETECT_ENCODING)}static toUTF8(e){if(self.TextEncoder&&!j.getDevice().shouldAvoidUseTextDecoderEncoder()){let t=new TextEncoder;return U.toArrayBuffer(t.encode(e))}else{let t=encodeURIComponent(e),i=unescape(t),r=new Uint8Array(i.length);for(let s=0;s<i.length;s++){let n=i[s];r[s]=n.charCodeAt(0)}return U.toArrayBuffer(r)}}static toUTF16(e,t){let i=new ArrayBuffer(e.length*2),r=new DataView(i);for(let s=0;s<e.length;++s){let n=e.charCodeAt(s);r.setUint16(s*2,n,t)}return i}static fromCharCode(e){return y.fromCharCodeImpl_.value()(e)}static resetFromCharCode(){y.fromCharCodeImpl_.reset()}static htmlUnescape(e){let t={"&":"&","<":"<",">":">",""":'"',"'":"'"," ":"\xA0","‎":"\u200E","‏":"\u200F"},i=/&(?:amp|lt|gt|quot|apos|nbsp|lrm|rlm|#[xX]?[0-9a-fA-F]+);/g,r=RegExp(i.source);return e&&r.test(e)?e.replace(i,s=>{if(s[1]=="#"){let n=0;return s[2]=="x"||s[2]=="X"?n=parseInt(s.substring(3),16):n=parseInt(s.substring(2),10),n>=0&&n<=1114111?String.fromCodePoint(n):""}return t[s]||"'"}):e||""}};q.fromCharCodeImpl_=new _e(()=>{let y=e=>{try{let t=new Uint8Array(e),i=String.fromCharCode.apply(null,t);return v.assert(i,"Should get value"),i.length>0}catch(t){return!1}};for(let e=64*1024;e>0;e/=2)if(y(e))return t=>{let i="";for(let r=0;r<t.length;r+=e){let s=t.subarray(r,r+e);i+=String.fromCharCode.apply(null,s)}return i};return v.assert(!1,"Unable to create a fromCharCode method"),null});/*! @license
|
|
46
46
|
* Shaka Player
|
|
47
47
|
* Copyright 2016 Google LLC
|
|
48
48
|
* SPDX-License-Identifier: Apache-2.0
|
|
49
|
-
*/var ne=class y{static toStandardBase64(e){let t=
|
|
49
|
+
*/var ne=class y{static toStandardBase64(e){let t=U.toUint8(e);if(!Uint8Array.prototype.toBase64){let i=q.fromCharCode(t);return btoa(i)}return t.toBase64({alphabet:"base64",omitPadding:!1})}static toBase64(e,t){if(t=t==null?!0:t,!Uint8Array.prototype.toBase64){let r=y.toStandardBase64(e).replace(/\+/g,"-").replace(/\//g,"_");return t?r:r.replace(/[=]*$/,"")}return U.toUint8(e).toBase64({alphabet:"base64url",omitPadding:!t})}static fromBase64(e){if(!("fromBase64"in Uint8Array)){let r=self.atob(e.replace(/-/g,"+").replace(/_/g,"/")),s=new Uint8Array(r.length);for(let n=0;n<r.length;++n)s[n]=r.charCodeAt(n);return s}let t=e.replace(/\s+/g,""),i=/[-_]/.test(t);return Uint8Array.fromBase64(t,{alphabet:i?"base64url":"base64"})}static fromHex(e){if(!("fromHex"in Uint8Array)){let t=e.length/2,i=new Uint8Array(t);for(let r=0;r<t;r++)i[r]=parseInt(e.substr(r*2,2),16);return i}return Uint8Array.fromHex(e)}static toHex(e){let t=U.toUint8(e);if(!Uint8Array.prototype.toHex){let i="";for(let r of t)r=r.toString(16),r.length==1&&(r="0"+r),i+=r;return i}return t.toHex()}static concat(...e){return y.concatRange(e,0,e.length)}static concatRange(e,t=0,i=e.length){let r=0;for(let a=t;a<i;++a)r+=e[a].byteLength;let s=new Uint8Array(r),n=0;for(let a=t;a<i;++a){let o=e[a];ArrayBuffer.isView(o)&&o.BYTES_PER_ELEMENT===1?s.set(o,n):s.set(U.toUint8(o),n),n+=o.byteLength}return s}static removeEmulationPreventionBytes(e){let t=new Uint8Array(e.length),i=0,r=0;for(let s=0;s<e.length;s++){let n=e[s];if(i>=2&&n==3){i=0;continue}t[r++]=n,n==0?i++:i=0}return t.subarray(0,r)}};/*! @license
|
|
50
50
|
* Shaka Player
|
|
51
51
|
* Copyright 2016 Google LLC
|
|
52
52
|
* SPDX-License-Identifier: Apache-2.0
|
|
53
|
-
*/var Ft=class Ft{static isBrowserSupported(){return!!window.MediaKeys&&!!window.navigator&&!!window.navigator.requestMediaKeySystemAccess&&!!window.MediaKeySystemAccess&&!!window.MediaKeySystemAccess.prototype.getConfiguration}static areDrmCompatible(e,t){if(e===t||!e.length||!t.length)return!0;for(let i of e){if(Ft.isClearKeyWihRawKey(i))return!0;for(let r of t)if(i.keySystem===r.keySystem||Ft.isClearKeyWihRawKey(r))return!0}return!1}static getCommonDrmInfos(e,t){if(!e.length)return t;if(!t.length)return e;let i=[];for(let r of e)for(let s of t)if(r.keySystem==s.keySystem){let n=new Map,a=(r.initData||[]).concat(s.initData||[]);for(let u of a)n.set(u.keyId,u);let o=Array.from(n.values()),c=r.keyIds&&s.keyIds?new Set([...r.keyIds,...s.keyIds]):r.keyIds||s.keyIds,d={keySystem:r.keySystem,licenseServerUri:r.licenseServerUri||s.licenseServerUri,distinctiveIdentifierRequired:r.distinctiveIdentifierRequired||s.distinctiveIdentifierRequired,persistentStateRequired:r.persistentStateRequired||s.persistentStateRequired,videoRobustness:r.videoRobustness||s.videoRobustness,audioRobustness:r.audioRobustness||s.audioRobustness,serverCertificate:r.serverCertificate||s.serverCertificate,serverCertificateUri:r.serverCertificateUri||s.serverCertificateUri,initData:o,keyIds:c};i.push(d);break}else Ft.isClearKeyWihRawKey(r)?i.push(r):Ft.isClearKeyWihRawKey(s)&&i.push(s);return i}static keySystem(e){return e?e.keySystem:""}static isClearKeySystem(e){return e==="org.w3.clearkey"}static isWidevineKeySystem(e){return e?!!e.match(/^com\.widevine\.alpha/):!1}static isPlayReadyKeySystem(e){return e?!!e.match(/^com\.(microsoft|chromecast)\.playready/):!1}static isFairPlayKeySystem(e){return e?!!e.match(/^com\.apple\.fps/):!1}static isWisePlayKeySystem(e){return e==="com.huawei.wiseplay"}static isClearKeyWihRawKey(e){let t=e.licenseServerUri;return t?t.startsWith("data:application/json;base64,"):!1}static generateKeySystemCacheKey_(e,t,i,r){let n=[...new Set(r)].sort().join("#");return`${e}#${t}#${i}#${n}`}static hasMediaKeySystemAccess(e,t,i,r){let s=Ft.generateKeySystemCacheKey_(e,t,i,r);return Ft.memoizedMediaKeySystemAccessRequests_.has(s)}static getMediaKeySystemAccess(e,t,i,r){let s=Ft.generateKeySystemCacheKey_(e,t,i,r);return Ft.memoizedMediaKeySystemAccessRequests_.get(s)||null}static setMediaKeySystemAccess(e,t,i,r,s){let n=Ft.generateKeySystemCacheKey_(e,t,i,r);Ft.memoizedMediaKeySystemAccessRequests_.set(n,s)}static clearMediaKeySystemAccessMap(){Ft.memoizedMediaKeySystemAccessRequests_.clear()}static isMediaKeysPolyfilled(e){return e===window.shakaMediaKeysPolyfill}static getUuidMap(e=!1,t=!1){let i={"1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","e2719d58-a985-b3c9-781a-b030af78d30e":"org.w3.clearkey","edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready","94ce86fb-07ff-4f43-adb8-93d2fa968ca2":"com.apple.fps","3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c":"com.huawei.wiseplay"};if(!e&&!t)return i;let r={};for(let s in i){let n=i[s],a=s;t?a="urn:uuid:"+s:e&&(a=s.replace(/-/g,"")),r[a]=n}return r}static normalizeClearKeyValue(e){return e.length===Ft.CLEAR_KEY_BASE64URL_LENGTH_?e:ne.toBase64(ne.fromHex(e),!1)}};l(Ft,"memoizedMediaKeySystemAccessRequests_",new Map),l(Ft,"CLEAR_KEY_BASE64URL_LENGTH_",22);var de=Ft;de.DUMMY_KEY_ID=new _e(()=>
|
|
53
|
+
*/var Ft=class Ft{static isBrowserSupported(){return!!window.MediaKeys&&!!window.navigator&&!!window.navigator.requestMediaKeySystemAccess&&!!window.MediaKeySystemAccess&&!!window.MediaKeySystemAccess.prototype.getConfiguration}static areDrmCompatible(e,t){if(e===t||!e.length||!t.length)return!0;for(let i of e){if(Ft.isClearKeyWihRawKey(i))return!0;for(let r of t)if(i.keySystem===r.keySystem||Ft.isClearKeyWihRawKey(r))return!0}return!1}static getCommonDrmInfos(e,t){if(!e.length)return t;if(!t.length)return e;let i=[];for(let r of e)for(let s of t)if(r.keySystem==s.keySystem){let n=new Map,a=(r.initData||[]).concat(s.initData||[]);for(let u of a)n.set(u.keyId,u);let o=Array.from(n.values()),c=r.keyIds&&s.keyIds?new Set([...r.keyIds,...s.keyIds]):r.keyIds||s.keyIds,d={keySystem:r.keySystem,licenseServerUri:r.licenseServerUri||s.licenseServerUri,distinctiveIdentifierRequired:r.distinctiveIdentifierRequired||s.distinctiveIdentifierRequired,persistentStateRequired:r.persistentStateRequired||s.persistentStateRequired,videoRobustness:r.videoRobustness||s.videoRobustness,audioRobustness:r.audioRobustness||s.audioRobustness,serverCertificate:r.serverCertificate||s.serverCertificate,serverCertificateUri:r.serverCertificateUri||s.serverCertificateUri,initData:o,keyIds:c};i.push(d);break}else Ft.isClearKeyWihRawKey(r)?i.push(r):Ft.isClearKeyWihRawKey(s)&&i.push(s);return i}static keySystem(e){return e?e.keySystem:""}static isClearKeySystem(e){return e==="org.w3.clearkey"}static isWidevineKeySystem(e){return e?!!e.match(/^com\.widevine\.alpha/):!1}static isPlayReadyKeySystem(e){return e?!!e.match(/^com\.(microsoft|chromecast)\.playready/):!1}static isFairPlayKeySystem(e){return e?!!e.match(/^com\.apple\.fps/):!1}static isWisePlayKeySystem(e){return e==="com.huawei.wiseplay"}static isClearKeyWihRawKey(e){let t=e.licenseServerUri;return t?t.startsWith("data:application/json;base64,"):!1}static generateKeySystemCacheKey_(e,t,i,r){let n=[...new Set(r)].sort().join("#");return`${e}#${t}#${i}#${n}`}static hasMediaKeySystemAccess(e,t,i,r){let s=Ft.generateKeySystemCacheKey_(e,t,i,r);return Ft.memoizedMediaKeySystemAccessRequests_.has(s)}static getMediaKeySystemAccess(e,t,i,r){let s=Ft.generateKeySystemCacheKey_(e,t,i,r);return Ft.memoizedMediaKeySystemAccessRequests_.get(s)||null}static setMediaKeySystemAccess(e,t,i,r,s){let n=Ft.generateKeySystemCacheKey_(e,t,i,r);Ft.memoizedMediaKeySystemAccessRequests_.set(n,s)}static clearMediaKeySystemAccessMap(){Ft.memoizedMediaKeySystemAccessRequests_.clear()}static isMediaKeysPolyfilled(e){return e===window.shakaMediaKeysPolyfill}static getUuidMap(e=!1,t=!1){let i={"1077efec-c0b2-4d02-ace3-3c1e52e2fb4b":"org.w3.clearkey","e2719d58-a985-b3c9-781a-b030af78d30e":"org.w3.clearkey","edef8ba9-79d6-4ace-a3c8-27dcd51d21ed":"com.widevine.alpha","9a04f079-9840-4286-ab92-e65be0885f95":"com.microsoft.playready","79f0049a-4098-8642-ab92-e65be0885f95":"com.microsoft.playready","94ce86fb-07ff-4f43-adb8-93d2fa968ca2":"com.apple.fps","3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c":"com.huawei.wiseplay"};if(!e&&!t)return i;let r={};for(let s in i){let n=i[s],a=s;t?a="urn:uuid:"+s:e&&(a=s.replace(/-/g,"")),r[a]=n}return r}static normalizeClearKeyValue(e){return e.length===Ft.CLEAR_KEY_BASE64URL_LENGTH_?e:ne.toBase64(ne.fromHex(e),!1)}};l(Ft,"memoizedMediaKeySystemAccessRequests_",new Map),l(Ft,"CLEAR_KEY_BASE64URL_LENGTH_",22);var de=Ft;de.DUMMY_KEY_ID=new _e(()=>U.toArrayBuffer(new Uint8Array([0])));/*! @license
|
|
54
54
|
* Shaka Player
|
|
55
55
|
* Copyright 2016 Google LLC
|
|
56
56
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -66,7 +66,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
66
66
|
* Shaka Player
|
|
67
67
|
* Copyright 2016 Google LLC
|
|
68
68
|
* SPDX-License-Identifier: Apache-2.0
|
|
69
|
-
*/var vs=class vs{constructor(e,t){l(this,"bubbles");l(this,"cancelable");l(this,"defaultPrevented");l(this,"timeStamp");l(this,"type");l(this,"isTrusted");l(this,"currentTarget");l(this,"target");l(this,"stopped");if(t)if(t instanceof Map)for(let i of t.keys())Object.defineProperty(this,i,{value:t.get(i),writable:!0,enumerable:!0});else{let i=vs.recastDictAsObject_(t);for(let r in i)Object.defineProperty(this,r,{value:i[r],writable:!0,enumerable:!0})}this.bubbles=!1,this.cancelable=!1,this.defaultPrevented=!1,this.timeStamp=window.performance&&window.performance.now?window.performance.now():Date.now(),this.type=e,this.isTrusted=!1,this.currentTarget=null,this.target=null,this.stopped=!1}static fromRealEvent(e){let t=new vs(e.type);for(let i in e)Object.defineProperty(t,i,{value:e[i],writable:!0,enumerable:!0});return t}static recastDictAsObject_(e){return v.assert(!(e instanceof Map),"dict should not be a map"),e}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.stopped=!0}stopPropagation(){}};l(vs,"EventName",{AbrStatusChanged:"abrstatuschanged",Adaptation:"adaptation",AudioTrackChanged:"audiotrackchanged",AudioTracksChanged:"audiotrackschanged",BoundaryCrossed:"boundarycrossed",Buffering:"buffering",BufferAppending:"bufferappending",CanUpdateStartTime:"canupdatestarttime",Complete:"complete",ConfigurationChanged:"configurationchanged",CurrentItemChanged:"currentitemchanged",DownloadCompleted:"downloadcompleted",DownloadFailed:"downloadfailed",DownloadHeadersReceived:"downloadheadersreceived",DrmSessionUpdate:"drmsessionupdate",Emsg:"emsg",ItemsInserted:"itemsinserted",ItemsRemoved:"itemsremoved",Prft:"prft",Error:"error",ExpirationUpdated:"expirationupdated",FirstQuartile:"firstquartile",GapJumped:"gapjumped",KeyStatusChanged:"keystatuschanged",Loaded:"loaded",Loading:"loading",ManifestParsed:"manifestparsed",ManifestUpdated:"manifestupdated",MediaQualityChanged:"mediaqualitychanged",MediaSourceRecovered:"mediasourcerecovered",MetadataAdded:"metadataadded",Metadata:"metadata",Midpoint:"midpoint",NoSpatialVideoInfoEvent:"nospatialvideoinfo",OnStateChange:"onstatechange",ProgramInformation:"programinformation",RateChange:"ratechange",SegmentAppended:"segmentappended",SessionDataEvent:"sessiondata",SpatialVideoInfoEvent:"spatialvideoinfo",StallDetected:"stalldetected",Started:"started",StateChanged:"statechanged",Streaming:"streaming",TextChanged:"textchanged",ThirdQuartile:"thirdquartile",TimelineChanged:"timelinechange",TimelineRegionAdded:"timelineregionadded",TimelineRegionEnter:"timelineregionenter",TimelineRegionExit:"timelineregionexit",TracksChanged:"trackschanged",Unloading:"unloading",VariantChanged:"variantchanged"});var
|
|
69
|
+
*/var vs=class vs{constructor(e,t){l(this,"bubbles");l(this,"cancelable");l(this,"defaultPrevented");l(this,"timeStamp");l(this,"type");l(this,"isTrusted");l(this,"currentTarget");l(this,"target");l(this,"stopped");if(t)if(t instanceof Map)for(let i of t.keys())Object.defineProperty(this,i,{value:t.get(i),writable:!0,enumerable:!0});else{let i=vs.recastDictAsObject_(t);for(let r in i)Object.defineProperty(this,r,{value:i[r],writable:!0,enumerable:!0})}this.bubbles=!1,this.cancelable=!1,this.defaultPrevented=!1,this.timeStamp=window.performance&&window.performance.now?window.performance.now():Date.now(),this.type=e,this.isTrusted=!1,this.currentTarget=null,this.target=null,this.stopped=!1}static fromRealEvent(e){let t=new vs(e.type);for(let i in e)Object.defineProperty(t,i,{value:e[i],writable:!0,enumerable:!0});return t}static recastDictAsObject_(e){return v.assert(!(e instanceof Map),"dict should not be a map"),e}preventDefault(){this.cancelable&&(this.defaultPrevented=!0)}stopImmediatePropagation(){this.stopped=!0}stopPropagation(){}};l(vs,"EventName",{AbrStatusChanged:"abrstatuschanged",Adaptation:"adaptation",AudioTrackChanged:"audiotrackchanged",AudioTracksChanged:"audiotrackschanged",BoundaryCrossed:"boundarycrossed",Buffering:"buffering",BufferAppending:"bufferappending",CanUpdateStartTime:"canupdatestarttime",Complete:"complete",ConfigurationChanged:"configurationchanged",CurrentItemChanged:"currentitemchanged",DownloadCompleted:"downloadcompleted",DownloadFailed:"downloadfailed",DownloadHeadersReceived:"downloadheadersreceived",DrmSessionUpdate:"drmsessionupdate",Emsg:"emsg",ItemsInserted:"itemsinserted",ItemsRemoved:"itemsremoved",Prft:"prft",Error:"error",ExpirationUpdated:"expirationupdated",FirstQuartile:"firstquartile",GapJumped:"gapjumped",KeyStatusChanged:"keystatuschanged",Loaded:"loaded",Loading:"loading",ManifestParsed:"manifestparsed",ManifestUpdated:"manifestupdated",MediaQualityChanged:"mediaqualitychanged",MediaSourceRecovered:"mediasourcerecovered",MetadataAdded:"metadataadded",Metadata:"metadata",Midpoint:"midpoint",NoSpatialVideoInfoEvent:"nospatialvideoinfo",OnStateChange:"onstatechange",ProgramInformation:"programinformation",RateChange:"ratechange",SegmentAppended:"segmentappended",SessionDataEvent:"sessiondata",SpatialVideoInfoEvent:"spatialvideoinfo",StallDetected:"stalldetected",Started:"started",StateChanged:"statechanged",Streaming:"streaming",TextChanged:"textchanged",ThirdQuartile:"thirdquartile",TimelineChanged:"timelinechange",TimelineRegionAdded:"timelineregionadded",TimelineRegionEnter:"timelineregionenter",TimelineRegionExit:"timelineregionexit",TracksChanged:"trackschanged",Unloading:"unloading",VariantChanged:"variantchanged"});var L=vs;/*! @license
|
|
70
70
|
* Shaka Player
|
|
71
71
|
* Copyright 2016 Google LLC
|
|
72
72
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -78,7 +78,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
78
78
|
* Shaka Player
|
|
79
79
|
* Copyright 2016 Google LLC
|
|
80
80
|
* SPDX-License-Identifier: Apache-2.0
|
|
81
|
-
*/var Ss=class Ss{constructor(){l(this,"listeners_");l(this,"dispatchTarget");this.listeners_=new or,this.dispatchTarget=this}addEventListener(e,t,i){this.listeners_&&this.listeners_.push(e,t)}listenToAllEvents(e){this.addEventListener(Ss.ALL_EVENTS,e)}removeEventListener(e,t,i){this.listeners_&&this.listeners_.remove(e,t)}dispatchEvent(e){if(v.assert(e instanceof
|
|
81
|
+
*/var Ss=class Ss{constructor(){l(this,"listeners_");l(this,"dispatchTarget");this.listeners_=new or,this.dispatchTarget=this}addEventListener(e,t,i){this.listeners_&&this.listeners_.push(e,t)}listenToAllEvents(e){this.addEventListener(Ss.ALL_EVENTS,e)}removeEventListener(e,t,i){this.listeners_&&this.listeners_.remove(e,t)}dispatchEvent(e){if(v.assert(e instanceof L,"FakeEventTarget can only dispatch FakeEvents!"),!this.listeners_)return!0;let t=this.listeners_.get(e.type)||[],i=this.listeners_.get(Ss.ALL_EVENTS);i&&(t=t.concat(i));for(let r of t){e.target=this.dispatchTarget,e.currentTarget=this.dispatchTarget;try{r.handleEvent?r.handleEvent(e):r.call(this,e)}catch(s){p.error("Uncaught exception in event handler",s,s?s.message:null,s?s.stack:null)}if(e.stopped)break}return e.defaultPrevented}release(){this.listeners_=null}};l(Ss,"ALL_EVENTS","__shaka_all_events__");var Be=Ss;/*! @license
|
|
82
82
|
* Shaka Player
|
|
83
83
|
* Copyright 2016 Google LLC
|
|
84
84
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -102,7 +102,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
102
102
|
* Shaka Player
|
|
103
103
|
* Copyright 2016 Google LLC
|
|
104
104
|
* SPDX-License-Identifier: Apache-2.0
|
|
105
|
-
*/var gi=class gi extends Be{constructor(t,i,r,s,n,a,o){super();l(this,"config_");l(this,"destroyed_");l(this,"operationManager_");l(this,"requestFilters_");l(this,"responseFilters_");l(this,"onProgressUpdated_");l(this,"onHeadersReceived_");l(this,"onDownloadCompleted_");l(this,"onDownloadFailed_");l(this,"onRequest_");l(this,"onRetry_");l(this,"onResponse_");l(this,"hostCommonAccessTokenMap_");this.config_=null,this.destroyed_=!1,this.operationManager_=new fi,this.requestFilters_=new Set,this.responseFilters_=new Set,this.onProgressUpdated_=t||null,this.onHeadersReceived_=i||null,this.onDownloadCompleted_=r||null,this.onDownloadFailed_=s||null,this.onRequest_=n||null,this.onRetry_=a||null,this.onResponse_=o||null,this.hostCommonAccessTokenMap_=new Map}configure(t){this.config_=t}static registerScheme(t,i,r,s=!1){v.assert(r==null||r>0,"explicit priority must be > 0"),r=r||gi.PluginPriority.APPLICATION;let n=gi.schemes_.get(t);(!n||r>=n.priority)&&gi.schemes_.set(t,{priority:r,plugin:i,progressSupport:s})}static unregisterScheme(t){gi.schemes_.delete(t)}copyFiltersInto(t){for(let i of this.requestFilters_)t.requestFilters_.add(i);for(let i of this.responseFilters_)t.responseFilters_.add(i)}registerRequestFilter(t){this.requestFilters_.add(t)}unregisterRequestFilter(t){this.requestFilters_.delete(t)}clearAllRequestFilters(){this.requestFilters_.clear()}registerResponseFilter(t){this.responseFilters_.add(t)}unregisterResponseFilter(t){this.responseFilters_.delete(t)}clearAllResponseFilters(){this.responseFilters_.clear()}clearCommonAccessTokenMap(){this.hostCommonAccessTokenMap_.clear()}static defaultRetryParameters(){return wr.defaultRetryParameters()}static makeRequest(t,i,r=null){return{uris:t,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:i,licenseRequestType:null,sessionId:null,drmInfo:null,initData:null,initDataType:null,streamDataCallback:r,attempt:0}}destroy(){return this.destroyed_=!0,this.requestFilters_.clear(),this.responseFilters_.clear(),this.hostCommonAccessTokenMap_.clear(),super.release(),this.operationManager_.destroy()}request(t,i,r){let s=new gi.NumBytesRemainingClass;if(this.destroyed_){let m=Promise.reject(new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED));return m.catch(()=>{}),new en(m,()=>Promise.resolve(),s)}v.assert(i.uris&&i.uris.length,"Request without URIs!"),i.method=i.method||"GET",i.headers=i.headers||{};let n=Fe.cloneObject(i.headers);i.retryParameters=i.retryParameters?Fe.cloneObject(i.retryParameters):gi.defaultRetryParameters(),i.uris=Fe.cloneObject(i.uris),i.attempt=0;let a=this.makeRequestWithRetry_(t,i,r,s,n),o=a.chain(m=>this.filterResponse_(t,m,r)),c=0;a.promise.then(()=>{c=Date.now()},()=>{});let d=o.chain(m=>{let f=Date.now()-c,g=m.response;if(g.timeMs+=f,!m.gotProgress&&this.onProgressUpdated_&&!g.fromCache&&i.method!="HEAD"&&t==Ao.SEGMENT){let _=this.allowSwitch_(r);this.onProgressUpdated_(g.timeMs,g.data.byteLength,_,i,r)}return this.onResponse_&&this.onResponse_(t,g,r),g},m=>{throw m&&(v.assert(m instanceof h,"Wrong error type"),m.severity=h.Severity.CRITICAL),m}),u=new en(d.promise,()=>d.abort(),s);return this.operationManager_.manage(u),u}filterRequest_(t,i,r){let s=Ye.completed(void 0),n=a=>{s=s.chain(()=>(i.body&&(i.body=
|
|
105
|
+
*/var gi=class gi extends Be{constructor(t,i,r,s,n,a,o){super();l(this,"config_");l(this,"destroyed_");l(this,"operationManager_");l(this,"requestFilters_");l(this,"responseFilters_");l(this,"onProgressUpdated_");l(this,"onHeadersReceived_");l(this,"onDownloadCompleted_");l(this,"onDownloadFailed_");l(this,"onRequest_");l(this,"onRetry_");l(this,"onResponse_");l(this,"hostCommonAccessTokenMap_");this.config_=null,this.destroyed_=!1,this.operationManager_=new fi,this.requestFilters_=new Set,this.responseFilters_=new Set,this.onProgressUpdated_=t||null,this.onHeadersReceived_=i||null,this.onDownloadCompleted_=r||null,this.onDownloadFailed_=s||null,this.onRequest_=n||null,this.onRetry_=a||null,this.onResponse_=o||null,this.hostCommonAccessTokenMap_=new Map}configure(t){this.config_=t}static registerScheme(t,i,r,s=!1){v.assert(r==null||r>0,"explicit priority must be > 0"),r=r||gi.PluginPriority.APPLICATION;let n=gi.schemes_.get(t);(!n||r>=n.priority)&&gi.schemes_.set(t,{priority:r,plugin:i,progressSupport:s})}static unregisterScheme(t){gi.schemes_.delete(t)}copyFiltersInto(t){for(let i of this.requestFilters_)t.requestFilters_.add(i);for(let i of this.responseFilters_)t.responseFilters_.add(i)}registerRequestFilter(t){this.requestFilters_.add(t)}unregisterRequestFilter(t){this.requestFilters_.delete(t)}clearAllRequestFilters(){this.requestFilters_.clear()}registerResponseFilter(t){this.responseFilters_.add(t)}unregisterResponseFilter(t){this.responseFilters_.delete(t)}clearAllResponseFilters(){this.responseFilters_.clear()}clearCommonAccessTokenMap(){this.hostCommonAccessTokenMap_.clear()}static defaultRetryParameters(){return wr.defaultRetryParameters()}static makeRequest(t,i,r=null){return{uris:t,method:"GET",body:null,headers:{},allowCrossSiteCredentials:!1,retryParameters:i,licenseRequestType:null,sessionId:null,drmInfo:null,initData:null,initDataType:null,streamDataCallback:r,attempt:0}}destroy(){return this.destroyed_=!0,this.requestFilters_.clear(),this.responseFilters_.clear(),this.hostCommonAccessTokenMap_.clear(),super.release(),this.operationManager_.destroy()}request(t,i,r){let s=new gi.NumBytesRemainingClass;if(this.destroyed_){let m=Promise.reject(new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED));return m.catch(()=>{}),new en(m,()=>Promise.resolve(),s)}v.assert(i.uris&&i.uris.length,"Request without URIs!"),i.method=i.method||"GET",i.headers=i.headers||{};let n=Fe.cloneObject(i.headers);i.retryParameters=i.retryParameters?Fe.cloneObject(i.retryParameters):gi.defaultRetryParameters(),i.uris=Fe.cloneObject(i.uris),i.attempt=0;let a=this.makeRequestWithRetry_(t,i,r,s,n),o=a.chain(m=>this.filterResponse_(t,m,r)),c=0;a.promise.then(()=>{c=Date.now()},()=>{});let d=o.chain(m=>{let f=Date.now()-c,g=m.response;if(g.timeMs+=f,!m.gotProgress&&this.onProgressUpdated_&&!g.fromCache&&i.method!="HEAD"&&t==Ao.SEGMENT){let _=this.allowSwitch_(r);this.onProgressUpdated_(g.timeMs,g.data.byteLength,_,i,r)}return this.onResponse_&&this.onResponse_(t,g,r),g},m=>{throw m&&(v.assert(m instanceof h,"Wrong error type"),m.severity=h.Severity.CRITICAL),m}),u=new en(d.promise,()=>d.abort(),s);return this.operationManager_.manage(u),u}filterRequest_(t,i,r){let s=Ye.completed(void 0),n=a=>{s=s.chain(()=>(i.body&&(i.body=U.toArrayBuffer(i.body)),a(t,i,r)))};this.onRequest_&&n(this.onRequest_);for(let a of this.requestFilters_)n(a);return s.chain(void 0,a=>{throw a instanceof h&&a.code==h.Code.OPERATION_ABORTED?a:new h(h.Severity.CRITICAL,h.Category.NETWORK,h.Code.REQUEST_FILTER_ERROR,a)})}makeRequestWithRetry_(t,i,r,s,n){let a=new wr(i.retryParameters,!1);return this.send_(t,i,r,a,null,s,n)}send_(t,i,r,s,n,a,o){v.assert(this.config_,"Config must not be null!");let c=i.attempt%i.uris.length;i.headers=Fe.cloneObject(o);let d=this.filterRequest_(t,i,r),u=Date.now(),m=0;if(d.promise.then(()=>{m=Date.now()-u},()=>{}),this.config_.forceHTTP&&(i.uris[c]=i.uris[c].replace("https://","http://")),this.config_.forceHTTPS&&(i.uris[c]=i.uris[c].replace("http://","https://")),c>0&&this.onRetry_){let D=i.uris[c],V=i.uris[c-1];this.onRetry_(t,r,D,V)}let f=fe.getScheme(i.uris[c]),g=!1;f||(f=gi.getLocationProtocol_(),v.assert(f[f.length-1]==":","location.protocol expected to end with a colon!"),f=f.slice(0,-1),i.uris[c]=fe.setScheme(i.uris[c],f)),f=f.toLowerCase();let _=gi.schemes_.get(f),T=_?_.plugin:null;if(!T)return Ye.failed(new h(h.Severity.CRITICAL,h.Category.NETWORK,h.Code.UNSUPPORTED_SCHEME,i.uris[c]));let b=_.progressSupport,S=this.hostCommonAccessTokenMap_.get(fe.getDomain(i.uris[c]));S&&(i.headers[this.config_.commonAccessTokenHeaderName]=S);let E=d.chain(()=>{let D=s.attempt();return new Ye(D,()=>(s.stop(),D.catch(()=>{})))}),w=null,A=null,x=!1,M=!1,C;return E.chain(()=>{if(this.destroyed_)return Ye.aborted();C=Date.now();let D=Ao.SEGMENT,V=0,ee=(Z,ce,W)=>{if(w&&w.stop(),A&&A.tickAfter(J/1e3),this.onProgressUpdated_&&t==D){V++,i.packetNumber=V;let z=this.allowSwitch_(r);this.onProgressUpdated_(Z,ce,z,i,r),g=!0,a.setBytes(W)}},oe=Z=>{M=!0,i.timeToFirstByte=Date.now()-i.requestStartTime,this.onHeadersReceived_&&this.onHeadersReceived_(Z,i,t)};i.requestStartTime=Date.now();let le=T(i.uris[c],i,t,ee,oe,{minBytesForProgressEvents:this.config_.minBytesForProgressEvents});if(!b)return le;let G=i.retryParameters.connectionTimeout;G&&(w=new ae(()=>{x=!0,le.abort()}),w.tickAfter(G/1e3));let J=i.retryParameters.stallTimeout;return J&&(A=new ae(()=>{x=!0,le.abort()})),le}).chain(D=>{w&&w.stop(),A&&A.stop(),D.timeMs==null&&(D.timeMs=Date.now()-C,D.timeMs+=m);let V=D.headers[this.config_.commonAccessTokenHeaderName];V&&this.hostCommonAccessTokenMap_.set(fe.getDomain(D.uri),V);let ee={response:D,gotProgress:g};return M||this.onHeadersReceived_&&this.onHeadersReceived_(D.headers,i,t),this.onDownloadCompleted_&&this.onDownloadCompleted_(t,i,r,D),ee},D=>{if(w&&w.stop(),A&&A.stop(),this.onDownloadFailed_){let V=null,ee=0;D instanceof h&&(V=D,D.code==h.Code.BAD_HTTP_STATUS&&(ee=D.data[1])),this.onDownloadFailed_(t,i,r,V,ee,x)}if(this.destroyed_)return Ye.aborted();if(x&&(D=new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.TIMEOUT,i.uris[c],t)),D instanceof h){if(D.code==h.Code.OPERATION_ABORTED)throw D;if(D.code==h.Code.ATTEMPTS_EXHAUSTED)throw v.assert(n,"Should have last error"),n;if(D.severity==h.Severity.RECOVERABLE){let V=new Map().set("error",D),ee=new L("retry",V);if(ee.cancelable=!0,this.dispatchEvent(ee),ee.defaultPrevented)throw D;return++i.attempt,this.send_(t,i,r,s,D,a,o)}}throw D})}filterResponse_(t,i,r){let s=Ye.completed(void 0);for(let n of this.responseFilters_)s=s.chain(()=>{let a=i.response;return a.data&&(a.data=U.toArrayBuffer(a.data)),n(t,a,r)});return s.chain(()=>i,n=>{let a=h.Severity.CRITICAL;if(n instanceof h){if(n.code==h.Code.OPERATION_ABORTED)throw n;a=n.severity}throw new h(a,h.Category.NETWORK,h.Code.RESPONSE_FILTER_ERROR,n)})}allowSwitch_(t){if(t){let i=t.segment,r=t.stream;if(i&&r&&r.fastSwitching&&i.isPartial())return!1}return!0}static getLocationProtocol_(){return location.protocol}};l(gi,"PluginPriority",{FALLBACK:1,PREFERRED:2,APPLICATION:3}),l(gi,"schemes_",new Map);var K=gi;K.NumBytesRemainingClass=class{constructor(){this.bytesToLoad_=0}setBytes(y){this.bytesToLoad_=y}getBytes(){return this.bytesToLoad_}};var en=class extends Ye{constructor(t,i,r){super(t,i);l(this,"bytesRemaining_");this.bytesRemaining_=r}getBytesRemaining(){return this.bytesRemaining_.getBytes()}},Ao={MANIFEST:0,SEGMENT:1,LICENSE:2,APP:3,TIMING:4,SERVER_CERTIFICATE:5,KEY:6,ADS:7,CONTENT_STEERING:8,CMCD:9,SESSION_DATA:10,FINGERPRINT:11,PLAYLIST:12,EVENT_CALLBACK:13};/*! @license
|
|
106
106
|
* Shaka Player
|
|
107
107
|
* Copyright 2016 Google LLC
|
|
108
108
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -126,7 +126,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
126
126
|
* Shaka Player
|
|
127
127
|
* Copyright 2016 Google LLC
|
|
128
128
|
* SPDX-License-Identifier: Apache-2.0
|
|
129
|
-
*/var Ci=class Ci{static createDrmInfo(e,t,i,r=void 0,s=void 0){let n={keySystem:e,encryptionScheme:t,licenseServerUri:"",distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",sessionType:"",initData:i||[],keyIds:new Set,mediaTypes:s};return r&&(n.keySystemUris=new Set([r])),!i&&de.isFairPlayKeySystem(e)&&n.initData.push({initDataType:"sinf",initData:new Uint8Array(0),keyId:null}),n}static createDrmInfoFromClearKeys(e,t="cenc"){let i=[],r=[],s=[],n=new Map;e.forEach((m,f)=>{let g=de.normalizeClearKeyValue(f),_=de.normalizeClearKeyValue(m),T={kty:"oct",kid:g,k:_};i.push(T),r.push(T.kid),s.push(f),n.set(g,_)});let o=JSON.stringify({keys:i}),c=JSON.stringify({kids:r}),u=[{initData:
|
|
129
|
+
*/var Ci=class Ci{static createDrmInfo(e,t,i,r=void 0,s=void 0){let n={keySystem:e,encryptionScheme:t,licenseServerUri:"",distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",sessionType:"",initData:i||[],keyIds:new Set,mediaTypes:s};return r&&(n.keySystemUris=new Set([r])),!i&&de.isFairPlayKeySystem(e)&&n.initData.push({initDataType:"sinf",initData:new Uint8Array(0),keyId:null}),n}static createDrmInfoFromClearKeys(e,t="cenc"){let i=[],r=[],s=[],n=new Map;e.forEach((m,f)=>{let g=de.normalizeClearKeyValue(f),_=de.normalizeClearKeyValue(m),T={kty:"oct",kid:g,k:_};i.push(T),r.push(T.kid),s.push(f),n.set(g,_)});let o=JSON.stringify({keys:i}),c=JSON.stringify({kids:r}),u=[{initData:U.toUint8(q.toUTF8(c)),initDataType:"keyids"}];return{keySystem:"org.w3.clearkey",encryptionScheme:t,licenseServerUri:"data:application/json;base64,"+window.btoa(o),distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",sessionType:"",initData:u,keyIds:new Set(s),clearKeys:n}}static guessCodecs(e,t){if(t.length==1)return t[0];let i=Ci.guessCodecsSafe(e,t);if(i!=null)return i;throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_COULD_NOT_GUESS_CODECS,t)}static guessCodecsSafe(e,t){let i=Ci.CODEC_REGEXPS_BY_CONTENT_TYPE_.get(e);for(let r of i)for(let s of t)if(r.test(s.trim()))return s.trim();return e==Ci.ContentType.TEXT?"":null}static parseCEA608Captions(e,t){if(!e){t.set("CC1","und");return}let i=1,r=e.split(";");for(let s of r){let n,a;if(!s.includes("="))n=`CC${i}`,i+=r.length==2?2:1,a=s;else{let o=s.split("=");n=o[0].startsWith("CC")?o[0]:`CC${o[0]}`,a=o[1]||"und"}t.set(n,Se.normalize(a))}}static parseCEA708Captions(e,t){if(!e){t.set("svc1","und");return}let i=1;for(let r of e.split(";")){let s,n;if(!r.includes("="))s=`svc${i}`,i++,n=r;else{let a=r.split("=");s=`svc${a[0]}`,n=a[1].split(",")[0].split(":").pop()}t.set(s,Se.normalize(n))}}static guessAllCodecsSafe(e,t){let i=[],r=Ci.CODEC_REGEXPS_BY_CONTENT_TYPE_.get(e);for(let s of r)for(let n of t)s.test(n.trim())&&i.push(n.trim());return i}};l(Ci,"ContentType",{VIDEO:"video",AUDIO:"audio",TEXT:"text",IMAGE:"image",APPLICATION:"application",CHAPTER:"chapter"}),l(Ci,"TextStreamKind",{SUBTITLE:"subtitle",CLOSED_CAPTION:"caption"}),l(Ci,"VIDEO_CODEC_REGEXPS",[/^avc/,/^hev/,/^hvc/,/^vvc/,/^vvi/,/^vp0?[89]/,/^av0[12]/,/^mp2v/,/^dvh/,/^dva/,/^dav/]),l(Ci,"AUDIO_CODEC_REGEXPS",[/^vorbis$/,/^Opus$/,/^opus$/,/^fLaC$/,/^flac$/,/^mp4a/,/^[ae]c-3$/,/^ac-4/,/^dts[cehx]?$/,/^iamf/,/^mhm[12]/,/^ac3$/,/^eac3$/,/^apac$/]),l(Ci,"TEXT_CODEC_REGEXPS",[/^vtt$/,/^wvtt/,/^stpp/]);var R=Ci;R.GAP_OVERLAP_TOLERANCE_SECONDS=1/15;R.CODEC_REGEXPS_BY_CONTENT_TYPE_=new Map().set("audio",R.AUDIO_CODEC_REGEXPS).set("video",R.VIDEO_CODEC_REGEXPS).set("text",R.TEXT_CODEC_REGEXPS);/*! @license
|
|
130
130
|
* Shaka Player
|
|
131
131
|
* Copyright 2016 Google LLC
|
|
132
132
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -134,7 +134,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
134
134
|
* Shaka Player
|
|
135
135
|
* Copyright 2016 Google LLC
|
|
136
136
|
* SPDX-License-Identifier: Apache-2.0
|
|
137
|
-
*/var tn=class tn{constructor(e,t){l(this,"dataView_");l(this,"littleEndian_");l(this,"position_");this.dataView_=
|
|
137
|
+
*/var tn=class tn{constructor(e,t){l(this,"dataView_");l(this,"littleEndian_");l(this,"position_");this.dataView_=U.toDataView(e),this.littleEndian_=t==tn.Endianness.LITTLE_ENDIAN,this.position_=0}getDataView(){return this.dataView_}hasMoreData(){return this.position_<this.dataView_.byteLength}getPosition(){return this.position_}getLength(){return this.dataView_.byteLength}readUint8(){try{let e=this.dataView_.getUint8(this.position_);return this.position_+=1,e}catch(e){throw this.outOfBounds_()}}readUint16(){try{let e=this.dataView_.getUint16(this.position_,this.littleEndian_);return this.position_+=2,e}catch(e){throw this.outOfBounds_()}}readUint32(){try{let e=this.dataView_.getUint32(this.position_,this.littleEndian_);return this.position_+=4,e}catch(e){throw this.outOfBounds_()}}readInt32(){try{let e=this.dataView_.getInt32(this.position_,this.littleEndian_);return this.position_+=4,e}catch(e){throw this.outOfBounds_()}}readUint64(){let e,t;try{this.littleEndian_?(e=this.dataView_.getUint32(this.position_,!0),t=this.dataView_.getUint32(this.position_+4,!0)):(t=this.dataView_.getUint32(this.position_,!1),e=this.dataView_.getUint32(this.position_+4,!1))}catch(i){throw this.outOfBounds_()}if(t>2097151)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.JS_INTEGER_OVERFLOW);return this.position_+=8,t*Math.pow(2,32)+e}readBytes(e,t){if(v.assert(e>=0,"Bad call to DataViewReader.readBytes"),this.position_+e>this.dataView_.byteLength)throw this.outOfBounds_();let i=U.toUint8(this.dataView_,this.position_,e);return this.position_+=e,t?new Uint8Array(i):i}skip(e){if(e<0||this.position_+e>this.dataView_.byteLength)throw this.outOfBounds_();this.position_+=e}rewind(e){if(e<0||this.position_<e)throw this.outOfBounds_();this.position_-=e}seek(e){if(v.assert(e>=0,"Bad call to DataViewReader.seek"),e<0||e>this.dataView_.byteLength)throw this.outOfBounds_();this.position_=e}readTerminatedString(){let e=this.position_;for(;this.hasMoreData()&&this.dataView_.getUint8(this.position_)!=0;)this.position_+=1;let t=U.toUint8(this.dataView_,e,this.position_-e);return this.position_+=1,q.fromUTF8(t)}outOfBounds_(){return new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.BUFFER_READ_OUT_OF_BOUNDS)}};l(tn,"Endianness",{BIG_ENDIAN:0,LITTLE_ENDIAN:1});var bt=tn;/*! @license
|
|
138
138
|
* Shaka Player
|
|
139
139
|
* Copyright 2016 Google LLC
|
|
140
140
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -142,7 +142,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
142
142
|
* Shaka Player
|
|
143
143
|
* Copyright 2016 Google LLC
|
|
144
144
|
* SPDX-License-Identifier: Apache-2.0
|
|
145
|
-
*/var ti=class y{constructor(e){l(this,"systemIds");l(this,"data");this.systemIds=[],this.data=[],new F().boxes(["moov","moof"],F.children).fullBox("pssh",t=>this.parsePsshBox_(t)).parse(e),this.data.length==0&&p.v2("No pssh box found!")}parsePsshBox_(e){if(v.assert(e.version!=null,"PSSH boxes are full boxes and must have a valid version"),v.assert(e.flags!=null,"PSSH boxes are full boxes and must have a valid flag"),e.version>1){p.warning("Unrecognized PSSH version found!");return}let t=e.reader.getDataView();v.assert(t.byteOffset>=12,"DataView at incorrect position");let i=
|
|
145
|
+
*/var ti=class y{constructor(e){l(this,"systemIds");l(this,"data");this.systemIds=[],this.data=[],new F().boxes(["moov","moof"],F.children).fullBox("pssh",t=>this.parsePsshBox_(t)).parse(e),this.data.length==0&&p.v2("No pssh box found!")}parsePsshBox_(e){if(v.assert(e.version!=null,"PSSH boxes are full boxes and must have a valid version"),v.assert(e.flags!=null,"PSSH boxes are full boxes and must have a valid flag"),e.version>1){p.warning("Unrecognized PSSH version found!");return}let t=e.reader.getDataView();v.assert(t.byteOffset>=12,"DataView at incorrect position");let i=U.toUint8(t,-12,e.size);this.data.push(i);let r=e.reader.readBytes(16,!1);this.systemIds.push(ne.toHex(r))}static createPssh(e,t,i,r){v.assert(t.byteLength==16,"Invalid system ID length");let s=e.length,n=12+t.length+4+s;r>0&&(n+=4+16*i.size);let a=new Uint8Array(n),o=U.toDataView(a),c=0;if(o.setUint32(c,n),c+=4,o.setUint32(c,1886614376),c+=4,r<1?o.setUint32(c,0):o.setUint32(c,16777216),c+=4,a.set(t,c),c+=t.length,r>0){o.setUint32(c,i.size),c+=4;for(let d of i){let u=ne.fromHex(d);a.set(u,c),c+=u.length}}return o.setUint32(c,s),c+=4,a.set(e,c),c+=s,v.assert(c===n,"PSSH invalid length."),a}static getPsshData(e){let t=8,i=U.toDataView(e),r=i.getUint8(t);return t+=20,r>0&&(t+=4+16*i.getUint32(t)),t+=4,U.toUint8(i,t)}static normaliseInitData(e){if(!e)return e;let t=new y(e);if(t.data.length<=1)return e;let i=[];for(let r of t.data)i.some(n=>U.equal(n,r))||i.push(r);return ne.concat(...i)}};/*! @license
|
|
146
146
|
* Shaka Player
|
|
147
147
|
* Copyright 2016 Google LLC
|
|
148
148
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -162,7 +162,7 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
162
162
|
* Shaka Player
|
|
163
163
|
* Copyright 2016 Google LLC
|
|
164
164
|
* SPDX-License-Identifier: Apache-2.0
|
|
165
|
-
*/var Vt=class Vt{constructor(e){l(this,"decoderCache_");l(this,"currentContinuityTimeline_");l(this,"ceaParser_");l(this,"ceaDecoder_");this.decoderCache_=new Map,this.currentContinuityTimeline_=0,this.ceaParser_=new sn;let t=Vt.findParser(e.toLowerCase());t&&(this.ceaParser_=t()),this.ceaDecoder_=new rn;let i=Vt.findDecoder();i&&(this.ceaDecoder_=i(),this.decoderCache_.set(this.currentContinuityTimeline_,this.ceaDecoder_))}init(e,t=!1,i=-1){p.debug("Passing new init segment to CEA parser"),i!=-1&&this.currentContinuityTimeline_!=i?this.updateDecoder_(i):t||this.reset(),this.ceaParser_.init(e),i!=-1&&(this.currentContinuityTimeline_=i)}parseFrom(e){let t=this.ceaParser_.parse(e);for(let i of t){let r=
|
|
165
|
+
*/var Vt=class Vt{constructor(e){l(this,"decoderCache_");l(this,"currentContinuityTimeline_");l(this,"ceaParser_");l(this,"ceaDecoder_");this.decoderCache_=new Map,this.currentContinuityTimeline_=0,this.ceaParser_=new sn;let t=Vt.findParser(e.toLowerCase());t&&(this.ceaParser_=t()),this.ceaDecoder_=new rn;let i=Vt.findDecoder();i&&(this.ceaDecoder_=i(),this.decoderCache_.set(this.currentContinuityTimeline_,this.ceaDecoder_))}init(e,t=!1,i=-1){p.debug("Passing new init segment to CEA parser"),i!=-1&&this.currentContinuityTimeline_!=i?this.updateDecoder_(i):t||this.reset(),this.ceaParser_.init(e),i!=-1&&(this.currentContinuityTimeline_=i)}parseFrom(e){let t=this.ceaParser_.parse(e);for(let i of t){let r=U.toUint8(i.packet);if(r.length>0)switch(i.format){case Vt.CaptionPacketFormat.SEI:this.ceaDecoder_.extract(r,i.pts);break;case Vt.CaptionPacketFormat.RAW608:this.ceaDecoder_.extractRaw608(r,i.pts);break}}return this.ceaDecoder_.decode()}updateDecoder_(e){this.decoderCache_.set(this.currentContinuityTimeline_,this.ceaDecoder_),this.ceaDecoder_=this.decoderCache_.getOrInsertComputed(e,()=>{let t=Vt.findDecoder();return t?t():this.ceaDecoder_})}reset(){this.ceaDecoder_.clear()}remove(e=[]){let t=new Set(e);for(let i of this.decoderCache_.keys())if(!t.has(i)){let r=this.decoderCache_.get(i);r&&r.clear(),this.decoderCache_.delete(i)}}getStreams(){return this.ceaDecoder_.getStreams()}static registerParser(e,t){Vt.parserMap_.set(e,t)}static unregisterParser(e){Vt.parserMap_.delete(e)}static findParser(e){return Vt.parserMap_.get(e)}static registerDecoder(e){Vt.decoderFactory_=e}static unregisterDecoder(){Vt.decoderFactory_=null}static findDecoder(){return Vt.decoderFactory_}};l(Vt,"parserMap_",new Map),l(Vt,"decoderFactory_",null),l(Vt,"CaptionPacketFormat",{SEI:"sei",RAW608:"raw608"});var Mt=Vt;/*! @license
|
|
166
166
|
* Shaka Player
|
|
167
167
|
* Copyright 2016 Google LLC
|
|
168
168
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -174,13 +174,13 @@ var Co=Object.defineProperty,wo=Object.defineProperties;var xo=Object.getOwnProp
|
|
|
174
174
|
* tXml
|
|
175
175
|
* Copyright 2015 Tobias Nickel
|
|
176
176
|
* SPDX-License-Identifier: MIT
|
|
177
|
-
*/var Et=class Et{static parseXml(e,t,i=!1){let r=q.fromBytesAutoDetect(e);return Et.parseXmlString(r,t,i)}static parseXmlString(e,t,i=!1){let r=Et.parse(e,i);if(!t&&r.length)return r[0];let s=t.split(","),n=r.find(a=>s.includes(a.tagName));return n||(p.error("parseXml root element not found!"),null)}static getKnownNameSpace(e){return Et.uriToNameSpace_.has(e)?Et.uriToNameSpace_.get(e):""}static getKnownSchema(e){return Et.nameSpaceToUri_.has(e)?Et.nameSpaceToUri_.get(e):""}static setKnownNameSpace(e,t){Et.uriToNameSpace_.set(e,t),Et.nameSpaceToUri_.set(t,e)}static parse(e,t){let i=0,r=0,s="<",n=60,a=">",o=62,c=45,d=47,u=33,m=39,f=34,g=91;function _(A,x=!1){let M=[];for(;e[i];)if(e.charCodeAt(i)==n){if(e.charCodeAt(i+1)===d){let k=i+2;i=e.indexOf(a,i);let
|
|
177
|
+
*/var Et=class Et{static parseXml(e,t,i=!1){let r=q.fromBytesAutoDetect(e);return Et.parseXmlString(r,t,i)}static parseXmlString(e,t,i=!1){let r=Et.parse(e,i);if(!t&&r.length)return r[0];let s=t.split(","),n=r.find(a=>s.includes(a.tagName));return n||(p.error("parseXml root element not found!"),null)}static getKnownNameSpace(e){return Et.uriToNameSpace_.has(e)?Et.uriToNameSpace_.get(e):""}static getKnownSchema(e){return Et.nameSpaceToUri_.has(e)?Et.nameSpaceToUri_.get(e):""}static setKnownNameSpace(e,t){Et.uriToNameSpace_.set(e,t),Et.nameSpaceToUri_.set(t,e)}static parse(e,t){let i=0,r=0,s="<",n=60,a=">",o=62,c=45,d=47,u=33,m=39,f=34,g=91;function _(A,x=!1){let M=[];for(;e[i];)if(e.charCodeAt(i)==n){if(e.charCodeAt(i+1)===d){let k=i+2;i=e.indexOf(a,i);let D=e.substring(k,i),V=D.indexOf(A);if(V==-1){let ee=A.indexOf(".");if(ee>0){let oe=A.substring(0,ee);V=D.indexOf(oe)}}if(V==-1){let ee=e.substring(0,i).split(`
|
|
178
178
|
`);throw new Error(`Unexpected close tag
|
|
179
179
|
Line: `+(ee.length-1)+`
|
|
180
180
|
Column: `+(ee[ee.length-1].length+1)+`
|
|
181
181
|
Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeAt(i+2)==c){for(;i!==-1&&!(e.charCodeAt(i)===o&&e.charCodeAt(i-1)==c&&e.charCodeAt(i-2)==c&&i!=-1);)i=e.indexOf(a,i+1);i===-1&&(i=e.length)}else if(e.charCodeAt(i+2)===g&&e.charCodeAt(i+8)===g&&e.substr(i+3,5).toLowerCase()==="cdata"){let k=e.indexOf("]]>",i);k==-1?(M.push(e.substr(i+9)),i=e.length):(M.push(e.substring(i+9,k)),i=k+3);continue}i++;continue}if(r>512)throw new Error("XML is too deeply nested");r++;let C=E(x);if(r--,M.push(C),typeof C=="string")return M;C.tagName[0]==="?"&&C.children&&(M.push(...C.children),C.children=[])}else{let C=T();x?C.length>0&&M.push(C):(M.length&&C.length==1&&C[0]==`
|
|
182
182
|
`||C.trim().length>0)&&M.push(C),i++}return M}function T(){let A=i;return i=e.indexOf(s,i)-1,i===-2&&(i=e.length),(" "+e.slice(A,i+1)).slice(1)}let b=`\r
|
|
183
|
-
>/= `;function S(){let A=i;for(;b.indexOf(e[i])===-1&&e[i];)i++;return(" "+e.slice(A,i)).slice(1)}function E(A){i++;let x=S(),M={},C=[];for(;e.charCodeAt(i)!==o&&e[i];){let V=e.charCodeAt(i);if(V>64&&V<91||V>96&&V<123){let ee=S(),oe=e.charCodeAt(i);for(;oe&&oe!==m&&oe!==f&&!(oe>64&&oe<91||oe>96&&oe<123)&&oe!==o;)i++,oe=e.charCodeAt(i);let le=w();if(oe===m||oe===f){if(i===-1){let G={tagName:x,attributes:M,children:C,parent:null};if(t)for(let J=0;J<C.length;J++)typeof C[J]!="string"&&(C[J].parent=G);return G}}else le=null,i--;if(ee.startsWith("xmlns:")){let G=ee.split(":");Et.setKnownNameSpace(le,G[1])}x==="tt"&&ee==="xml:space"&&le==="preserve"&&(A=!0),M[ee]=le}i++}e.charCodeAt(i-1)!==d?(i++,C=_(x,A)):i++;let k={tagName:x,attributes:M,children:C,parent:null},
|
|
183
|
+
>/= `;function S(){let A=i;for(;b.indexOf(e[i])===-1&&e[i];)i++;return(" "+e.slice(A,i)).slice(1)}function E(A){i++;let x=S(),M={},C=[];for(;e.charCodeAt(i)!==o&&e[i];){let V=e.charCodeAt(i);if(V>64&&V<91||V>96&&V<123){let ee=S(),oe=e.charCodeAt(i);for(;oe&&oe!==m&&oe!==f&&!(oe>64&&oe<91||oe>96&&oe<123)&&oe!==o;)i++,oe=e.charCodeAt(i);let le=w();if(oe===m||oe===f){if(i===-1){let G={tagName:x,attributes:M,children:C,parent:null};if(t)for(let J=0;J<C.length;J++)typeof C[J]!="string"&&(C[J].parent=G);return G}}else le=null,i--;if(ee.startsWith("xmlns:")){let G=ee.split(":");Et.setKnownNameSpace(le,G[1])}x==="tt"&&ee==="xml:space"&&le==="preserve"&&(A=!0),M[ee]=le}i++}e.charCodeAt(i-1)!==d?(i++,C=_(x,A)):i++;let k={tagName:x,attributes:M,children:C,parent:null},D=C.length;for(let V=0;V<D;V++){let ee=C[V];typeof ee!="string"?t&&(ee.parent=k):V==D-1&&ee==`
|
|
184
184
|
`&&C.pop()}return k}function w(){let A=e[i],x=i+1;return i=e.indexOf(A,x),(" "+e.slice(x,i)).slice(1)}return _("")}static isNode(e){return!!e.tagName}static isText(e){return typeof e=="string"}static getChildNodes(e){let t=[];if(!e.children)return[];for(let i of e.children)typeof i!="string"&&t.push(i);return t}static findChildren(e,t){let i=[];if(!e.children)return[];for(let r of e.children)r.tagName===t&&i.push(r);return i}static getTextContents(e){if(typeof e=="string")return q.htmlUnescape(e);let t=[];for(let r of e.children)typeof r=="string"&&t.push(r);let i=t.join("");return i===""?null:q.htmlUnescape(i)}static getContents(e){for(let i of e.children)if(typeof i!="string")return null;let t=Et.getTextContents(e);return t&&(t=t.trim()),t}static getElementsByTagName(e,t,i=[]){if(e.tagName===t&&i.push(e),e.children)for(let r of e.children)Et.getElementsByTagName(r,t,i);return i}static findChild(e,t){let i=Et.findChildren(e,t);return i.length!=1?null:i[0]}static findChildNS(e,t,i){let r=Et.findChildrenNS(e,t,i);return r.length!=1?null:r[0]}static parseAttr(e,t,i,r=null){let s=null,n=e.attributes[t];return n!=null&&(n!==""||r===null)&&(s=i(n)),s==null?r:s}static getAttributeNS(e,t,i){let r=Et.getKnownNameSpace(t);return e.attributes[`${r}:${i}`]||null}static findChildrenNS(e,t,i){let r=Et.getKnownNameSpace(t),s=[];if(e.children){let n=r?`${r}:${i}`:i;for(let a of e.children)a&&a.tagName===n&&s.push(a)}return s}static getAttributeNSList(e,t,i){for(let r of t){let s=Et.getAttributeNS(e,r,i);if(s)return s}return null}static parseDate(e){if(!e)return null;/^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e)&&(e+="Z");let t=Date.parse(e);return isNaN(t)?null:t/1e3}static parseDuration(e){if(!e)return null;let t="^P(?:([0-9]*)Y)?(?:([0-9]*)M)?(?:([0-9]*)D)?(?:T(?:([0-9]*)H)?(?:([0-9]*)M)?(?:([0-9.]*)S)?)?$",i=new RegExp(t,"i").exec(e);if(!i)return p.warning("Invalid duration string:",e),null;let r=Number(i[1]||null),s=Number(i[2]||null),n=Number(i[3]||null),a=Number(i[4]||null),o=Number(i[5]||null),c=Number(i[6]||null),d=3600*24*365*r+3600*24*30*s+3600*24*n+3600*a+60*o+c;return isFinite(d)?d:null}static parseRange(e){let t=/([0-9]+)-([0-9]+)/.exec(e);if(!t)return null;let i=Number(t[1]);if(!isFinite(i))return null;let r=Number(t[2]);return isFinite(r)?{start:i,end:r}:null}static parseInt(e){let t=Number(e);return t%1===0?t:null}static parsePositiveInt(e){let t=Number(e);return t%1===0&&t>0?t:null}static parseNonNegativeInt(e){let t=Number(e);return t%1===0&&t>=0?t:null}static parseFloat(e){let t=Number(e);return isNaN(t)?null:t}static parseBoolean(e){return e?e.toLowerCase()==="true":!1}static evalDivision(e){let t,i;return(t=e.match(/^(\d+)\/(\d+)$/))?i=Number(t[1])/Number(t[2]):i=Number(e),isNaN(i)?null:i}static parseXpath(e){let t=[],i=q.htmlUnescape(e).split(/\/+(?=(?:[^'"]*['"][^'"]*['"])*[^'"]*$)/);for(let r of i){let s=r.match(/^([\w]+)/);if(s){let n=r.match(/(@id='(.*?)')/),a=r.match(/(@t='(\d+)')/),o=r.match(/(@n='(\d+)')/),c=r.match(/\[(\d+)\]/);t.push({name:s[0],id:n?n[0].match(/'(.*?)'/)[0].replace(/'/gm,""):null,t:a?Number(a[0].match(/'(.*?)'/)[0].replace(/'/gm,"")):null,n:o?Number(o[0].match(/'(.*?)'/)[0].replace(/'/gm,"")):null,position:c?Number(c[1])-1:null,attribute:r.split("/@")[1]||null})}else r.startsWith("@")&&t.length&&(t[t.length-1].attribute=r.slice(1))}return t}static modifyNodes(e,t){let i=shaka.util.TXml,r=i.parseXpath(t.attributes.sel||"");if(!r.length)return;let s=r[r.length-1],n=t.attributes.pos||null,a=s.position;a==null&&(s.t!==null&&(a=i.nodePositionByAttribute_(e,"t",s.t)),s.n!==null&&(a=i.nodePositionByAttribute_(e,"n",s.n))),a===null?a=n==="prepend"?0:e.length:n==="prepend"?--a:n==="after"&&++a;let o=t.tagName,c=s.attribute;if(c&&e[a])i.modifyNodeAttribute(e[a],o,c,i.getContents(t)||"");else if((o==="remove"||o==="replace")&&e.splice(a,1),o==="add"||o==="replace"){let d=t.children;e.splice(a,0,...d)}}static nodePositionByAttribute_(e,t,i){let r=0;for(let s of e){let n=s.attributes;if(Number(n[t])===i)return r;r++}return null}static modifyNodeAttribute(e,t,i,r){t==="remove"?delete e.attributes[i]:(t==="add"||t==="replace")&&(e.attributes[i]=r)}static cloneNode(e){if(!e)return null;let t={tagName:e.tagName,attributes:shaka.util.ObjectUtils.shallowCloneObject(e.attributes),children:[],parent:null};for(let i of e.children)if(typeof i=="string")t.children.push(i);else{let r=Et.cloneNode(i);r.parent=t,t.children.push(r)}return t}};l(Et,"uriToNameSpace_",new Map),l(Et,"nameSpaceToUri_",new Map);var I=Et;/*! @license
|
|
185
185
|
* Shaka Player
|
|
186
186
|
* Copyright 2016 Google LLC
|
|
@@ -198,15 +198,15 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
198
198
|
* Shaka Player
|
|
199
199
|
* Copyright 2016 Google LLC
|
|
200
200
|
* SPDX-License-Identifier: Apache-2.0
|
|
201
|
-
*/var lr=class lr{constructor(e,t=me.UNKNOWN){l(this,"parser_");l(this,"displayer_");l(this,"manifestType_");l(this,"segmentRelativeVttTiming_");l(this,"containerIsMpegTs_");l(this,"external_");l(this,"timestampOffsetMap_");l(this,"deferredAppends_");l(this,"appendWindowStart_");l(this,"appendWindowEnd_");l(this,"bufferStart_");l(this,"bufferEnd_");l(this,"selectedClosedCaptionId_");l(this,"modifyCueCallback_");l(this,"closedCaptionsMap_");this.parser_=null,this.displayer_=e,this.manifestType_=t,this.segmentRelativeVttTiming_=!1,this.containerIsMpegTs_=!1,this.external_=!1,this.timestampOffsetMap_=new Map,this.deferredAppends_=new Map,this.appendWindowStart_=0,this.appendWindowEnd_=1/0,this.bufferStart_=null,this.bufferEnd_=null,this.selectedClosedCaptionId_="",this.modifyCueCallback_=(i,r)=>{},this.closedCaptionsMap_=new Map}static registerParser(e,t){lr.parserMap_.set(e,t)}static unregisterParser(e){lr.parserMap_.delete(e)}static findParser(e){return lr.parserMap_.get(e)}static isTypeSupported(e){return lr.parserMap_.has(e)?!0:e==O.CEA608_CLOSED_CAPTION_MIMETYPE||e==O.CEA708_CLOSED_CAPTION_MIMETYPE?!!Mt.findDecoder():!1}destroy(){return this.parser_=null,this.displayer_=null,this.timestampOffsetMap_.clear(),this.deferredAppends_.clear(),this.closedCaptionsMap_.clear(),Promise.resolve()}setDisplayer(e){this.displayer_=e}initParser(e,t,i){if(e==O.CEA608_CLOSED_CAPTION_MIMETYPE||e==O.CEA708_CLOSED_CAPTION_MIMETYPE){this.parser_=null;return}let r=lr.parserMap_.get(e);v.assert(r,"Text type negotiation should have happened already"),this.parser_=r(),this.parser_.setManifestType(this.manifestType_),this.segmentRelativeVttTiming_=i,this.external_=t}setModifyCueCallback(e){this.modifyCueCallback_=e}async appendBuffer(e,t,i,r,s=-1){if(v.assert(this.parser_,"The parser should already be initialized"),!this.external_&&!this.timestampOffsetMap_.has(s)){let u=this.deferredAppends_.get(s)||[];u.push({buffer:e,startTime:t,endTime:i,uri:r,disco:s}),this.deferredAppends_.set(s,u);return}if(await Promise.resolve(),!this.parser_||!this.displayer_)return;if(t==null||i==null){this.parser_.parseInit(
|
|
201
|
+
*/var lr=class lr{constructor(e,t=me.UNKNOWN){l(this,"parser_");l(this,"displayer_");l(this,"manifestType_");l(this,"segmentRelativeVttTiming_");l(this,"containerIsMpegTs_");l(this,"external_");l(this,"timestampOffsetMap_");l(this,"deferredAppends_");l(this,"appendWindowStart_");l(this,"appendWindowEnd_");l(this,"bufferStart_");l(this,"bufferEnd_");l(this,"selectedClosedCaptionId_");l(this,"modifyCueCallback_");l(this,"closedCaptionsMap_");this.parser_=null,this.displayer_=e,this.manifestType_=t,this.segmentRelativeVttTiming_=!1,this.containerIsMpegTs_=!1,this.external_=!1,this.timestampOffsetMap_=new Map,this.deferredAppends_=new Map,this.appendWindowStart_=0,this.appendWindowEnd_=1/0,this.bufferStart_=null,this.bufferEnd_=null,this.selectedClosedCaptionId_="",this.modifyCueCallback_=(i,r)=>{},this.closedCaptionsMap_=new Map}static registerParser(e,t){lr.parserMap_.set(e,t)}static unregisterParser(e){lr.parserMap_.delete(e)}static findParser(e){return lr.parserMap_.get(e)}static isTypeSupported(e){return lr.parserMap_.has(e)?!0:e==O.CEA608_CLOSED_CAPTION_MIMETYPE||e==O.CEA708_CLOSED_CAPTION_MIMETYPE?!!Mt.findDecoder():!1}destroy(){return this.parser_=null,this.displayer_=null,this.timestampOffsetMap_.clear(),this.deferredAppends_.clear(),this.closedCaptionsMap_.clear(),Promise.resolve()}setDisplayer(e){this.displayer_=e}initParser(e,t,i){if(e==O.CEA608_CLOSED_CAPTION_MIMETYPE||e==O.CEA708_CLOSED_CAPTION_MIMETYPE){this.parser_=null;return}let r=lr.parserMap_.get(e);v.assert(r,"Text type negotiation should have happened already"),this.parser_=r(),this.parser_.setManifestType(this.manifestType_),this.segmentRelativeVttTiming_=i,this.external_=t}setModifyCueCallback(e){this.modifyCueCallback_=e}async appendBuffer(e,t,i,r,s=-1){if(v.assert(this.parser_,"The parser should already be initialized"),!this.external_&&!this.timestampOffsetMap_.has(s)){let u=this.deferredAppends_.get(s)||[];u.push({buffer:e,startTime:t,endTime:i,uri:r,disco:s}),this.deferredAppends_.set(s,u);return}if(await Promise.resolve(),!this.parser_||!this.displayer_)return;if(t==null||i==null){this.parser_.parseInit(U.toUint8(e));return}let n=this.external_?0:this.timestampOffsetMap_.get(s),a=this.segmentRelativeVttTiming_||this.external_?t:this.timestampOffsetMap_.get(s),o={periodStart:n,segmentStart:t,segmentEnd:i,vttOffset:a,isMpegTs:this.containerIsMpegTs_},c=this.parser_.parseMedia(U.toUint8(e),o,r,[]);for(let u of c)this.modifyCueCallback_(u,r||null,o);let d=c.filter(u=>u.startTime>=this.appendWindowStart_&&u.startTime<this.appendWindowEnd_);this.displayer_.append(d),this.bufferStart_==null?this.bufferStart_=Math.max(t,this.appendWindowStart_):(v.assert(this.bufferEnd_!=null,"There should already be a buffered range end."),v.assert(t-this.bufferEnd_<=1,"There should not be a gap in text references >1s")),this.bufferEnd_=Math.min(i,this.appendWindowEnd_)}async remove(e,t,i=!1){if(await Promise.resolve(),e>=t||i&&(this.removeClosedCaptions_(e,t),this.selectedClosedCaptionId_===""))return;let r=s=>s.startTime<t&&s.endTime>e;for(let s of this.deferredAppends_.keys()){let n=this.deferredAppends_.get(s),a=[];for(let o=0;o<n.length;o++){let c=n[o];r(c)||a.push(c)}this.deferredAppends_.set(s,a)}this.displayer_&&this.displayer_.remove(e,t)&&(this.bufferStart_==null?v.assert(this.bufferEnd_==null,"end must be null if startTime is null"):(v.assert(this.bufferEnd_!=null,"end must be non-null if startTime is non-null"),t<=this.bufferStart_||e>=this.bufferEnd_||(e<=this.bufferStart_&&t>=this.bufferEnd_?this.bufferStart_=this.bufferEnd_=null:e<=this.bufferStart_&&t<this.bufferEnd_?this.bufferStart_=t:e>this.bufferStart_&&t>=this.bufferEnd_?this.bufferEnd_=e:v.assert(!1,"removal from the middle is not supported by TextEngine")),this.updateRangesWithClosedCaptions_()))}setTimestampOffset(e,t=-1){(!this.timestampOffsetMap_.has(t)||this.manifestType_!==me.HLS||this.manifestType_===me.HLS&&t===-1&&this.timestampOffsetMap_.get(t)===0)&&this.timestampOffsetMap_.set(t,e);let r=this.deferredAppends_.get(t)||[];for(let s=0;s<r.length;s++){let{buffer:n,startTime:a,endTime:o,uri:c,disco:d}=r[s];this.appendBuffer(n,a,o,c,d)}this.deferredAppends_.set(t,[])}setContainerIsMpegTs(e){this.containerIsMpegTs_=e}setAppendWindow(e,t){this.appendWindowStart_=e,this.appendWindowEnd_=t}bufferStart(){return this.bufferStart_}bufferEnd(){return this.bufferEnd_}isBuffered(e){return this.bufferStart_==null||this.bufferEnd_==null?!1:e>=this.bufferStart_&&e<this.bufferEnd_}bufferedAheadOf(e){return this.bufferEnd_==null||this.bufferEnd_<e?0:(v.assert(this.bufferStart_!=null,"start should not be null if end is not null"),this.bufferEnd_-Math.max(e,this.bufferStart_))}bufferedBehindOf(e){return this.bufferStart_==null||this.bufferStart_>e?0:(v.assert(this.bufferEnd_!=null,"end should not be null if start is not null"),Math.min(e,this.bufferEnd_)-this.bufferStart_)}setSelectedClosedCaptionId(e,t){this.selectedClosedCaptionId_=e;let i=this.closedCaptionsMap_.get(e);if(i){let r=i.filter(s=>s.endTime<=t);r.length&&this.displayer_.append(r)}}applyVideoTimestampOffsetRecursive_(e,t){e.startTime+=t,e.endTime+=t;for(let i of e.nestedCues)this.applyVideoTimestampOffsetRecursive_(i,t)}storeAndAppendClosedCaptions(e,t){let i=new Map;for(let r of e){let s=r.stream,n=r.cue;i.getOrInsert(s,[]),this.applyVideoTimestampOffsetRecursive_(n,t),n.startTime>=this.appendWindowStart_&&n.startTime<this.appendWindowEnd_&&(i.get(s).push(n),s==this.selectedClosedCaptionId_&&this.displayer_.append([n]))}for(let r of i.keys()){let s=this.closedCaptionsMap_.getOrInsertComputed(r,()=>[]);for(let n of i.get(r))s.push(n)}this.updateRangesWithClosedCaptions_()}removeClosedCaptions_(e,t){for(let i of this.closedCaptionsMap_.keys()){let r=this.closedCaptionsMap_.get(i);r=r.filter(s=>s.startTime<e||s.endTime>=t),this.closedCaptionsMap_.set(i,r)}}updateRangesWithClosedCaptions_(){let e=1/0,t=-1/0;for(let i of this.closedCaptionsMap_.values())for(let r of i)e=Math.min(e,r.startTime),t=Math.max(t,r.endTime);e===1/0||t===-1/0||(this.bufferStart_==null?this.bufferStart_=Math.max(e,this.appendWindowStart_):this.bufferStart_=Math.min(this.bufferStart_,Math.max(e,this.appendWindowStart_)),this.bufferEnd_=Math.max(this.bufferEnd_,Math.min(t,this.appendWindowEnd_)))}getNumberOfClosedCaptionChannels(){return this.closedCaptionsMap_.size}getNumberOfClosedCaptionsInChannel(e){let t=this.closedCaptionsMap_.get(e);return t?t.length:0}};l(lr,"parserMap_",new Map);var Oe=lr;/*! @license
|
|
202
202
|
* Shaka Player
|
|
203
203
|
* Copyright 2016 Google LLC
|
|
204
204
|
* SPDX-License-Identifier: Apache-2.0
|
|
205
|
-
*/var Ce=class Ce{static chooseCodecsAndFilterManifest(e,t,i,r,s){if(s.length){let f=e.textStreams;for(let g of s){let _=f.filter(T=>!!(T.codecs.startsWith(g)||T.mimeType.startsWith(g)));if(_.length){f=_;break}}e.textStreams=f}let n=e.variants;if((t.length||i.length)&&(n=Ce.choosePreferredCodecs(n,t,i)),r.length){let f=new or;for(let _ of n)f.push(String(_.video.width||0),_);let g=[];f.forEach((_,T)=>{let b=0,S=[];for(let E of T){let w=r.filter(A=>E.decodingInfos[0][A]).length;w>b?(b=w,S=[E]):w==b&&S.push(E)}g.push(...S)}),n=g}let a=new Set;for(let f of n)f.video&&a.add(f.video);if(!a.size){e.variants=n;return}let o={vp8:1,avc:1,"dovi-avc":.95,vp9:.9,vp09:.9,hevc:.85,"dovi-hevc":.8,"dovi-p5":.75,av01:.7,"dovi-av1":.65,vvc:.6},c=Array.from(a).sort((f,g)=>{if(f.bandwidth&&g.bandwidth&&f.bandwidth!=g.bandwidth)return f.bandwidth-g.bandwidth;if(f.width!=g.width)return f.width-g.width;if(f.codecs&&g.codecs){let _=O.getNormalizedCodec(f.codecs),T=O.getNormalizedCodec(g.codecs),b=o[_]||1,S=o[T]||1;return b-S}return 0}),d=[],u=new Map,m=f=>{let g=[String(f.width||""),String(f.height||""),String(Math.round(f.frameRate||0)),f.hdr||"",f.fastSwitching];return f.dependencyStream&&g.push(f.dependencyStream.baseOriginalId||""),f.roles&&g.push(f.roles.sort().join("_")),g.join(";")};for(let f of c){let g=m(f),_=u.get(g)||[];if(!_.length)_.push(f),d.push(f.id);else{let T=_[_.length-1],b=O.getNormalizedCodec(T.codecs),S=O.getNormalizedCodec(f.codecs);b==S&&(_.push(f),d.push(f.id))}u.set(g,_)}e.variants=n.filter(f=>{let g=f.video;return g&&!d.includes(g.id)?(p.debug("Dropping Variant (better codec available)",f),!1):!0})}static choosePreferredCodecs(e,t,i){let r=e;for(let s of t){let n=r.filter(a=>a.video&&a.video.codecs.startsWith(s));if(n.length){r=n;break}}for(let s of i){let n=r.filter(a=>a.audio&&a.audio.codecs.startsWith(s));if(n.length){r=n;break}}return r}static filterByRestrictions(e,t,i){e.variants=e.variants.filter(r=>Ce.meetsRestrictions(r,t,i))}static meetsRestrictions(e,t,i){let r=(s,n,a)=>s>=n&&s<=a;if(e&&e.video&&e.video.width&&e.video.height){let s=e.video.width,n=e.video.height;if(n>s&&([s,n]=[n,s]),!r(s,t.minWidth,Math.min(t.maxWidth,i.width))||!r(n,t.minHeight,Math.min(t.maxHeight,i.height))||!r(s*n,t.minPixels,t.maxPixels))return!1}return!(e&&e.video&&e.video.frameRate&&!r(e.video.frameRate,t.minFrameRate,t.maxFrameRate)||e&&e.audio&&e.audio.channelsCount&&!r(e.audio.channelsCount,t.minChannelsCount,t.maxChannelsCount)||!r(e.bandwidth,t.minBandwidth,t.maxBandwidth))}static applyRestrictions(e,t,i){let r=!1;for(let s of e){let n=s.allowedByApplication;s.allowedByApplication=Ce.meetsRestrictions(s,t,i),n!=s.allowedByApplication&&(r=!0)}return r}static async filterManifest(e,t,i=[],r={}){await Ce.filterManifestByMediaCapabilities(e,t,t.offlineSessionIds.length>0,i,r),Ce.filterTextStreams_(t),await Ce.filterImageStreams_(t)}static async filterManifestByMediaCapabilities(e,t,i,r,s){v.assert(navigator.mediaCapabilities,"MediaCapabilities should be valid."),j.getDevice().shouldOverrideDolbyVisionCodecs()&&Ce.overrideDolbyVisionCodecs(t.variants),await Ce.getDecodingInfosForVariants(t.variants,i,!1,r);let n=null;if(e){let a=e.getDrmInfo();a&&(n=a.keySystem)}t.variants=t.variants.filter(a=>{let o=Ce.checkVariantSupported_(a,n,s);return o||p.debug("Dropping variant - not compatible with platform",Ce.getVariantSummaryString_(a)),o})}static overrideDolbyVisionCodecs(e){let t=new Map().set("dvav","avc3").set("dva1","avc1").set("dvhe","hev1").set("dvh1","hvc1").set("dvc1","vvc1").set("dvi1","vvi1"),i=new Set;for(let r of e)r.video&&i.add(r.video);for(let r of i)for(let[s,n]of t)if(r.codecs.includes(s)){r.codecs=r.codecs.replace(s,n);break}}static checkVariantSupported_(e,t,i){if(!e.decodingInfos.some(g=>{if(!g.supported)return!1;if(t){let _=g.keySystemAccess;if(_&&(i[_.keySystem]||_.keySystem)!=t)return!1}return!0}))return!1;let s=j.getDevice(),n=s.getDeviceName()==="Xbox",a=s.getDeviceType()===ie.DeviceType.MOBILE&&s.getBrowserEngine()===ie.BrowserEngine.GECKO,o=e.video,c=o&&o.width||0,d=o&&o.height||0;if(n&&o&&(c>1920||d>1080)&&(o.codecs.includes("avc1.")||o.codecs.includes("avc3.")))return!1;let u=o&&o.dependencyStream;if(u&&!xr.isStreamSupported(u))return!1;let m=e.audio;return!(a&&m&&m.encrypted&&m.codecs.toLowerCase().includes("opus")||m&&m.dependencyStream)}static async getDecodingInfosForVariant_(e,t){let i=(n,a)=>{if(n){let o=Fe.shallowCloneObject(n);return o.supported=n.supported&&a.supported,o.powerEfficient=n.powerEfficient&&a.powerEfficient,o.smooth=n.smooth&&a.smooth,a.keySystemAccess&&!o.keySystemAccess&&(o.keySystemAccess=a.keySystemAccess),o}else return a},r=null,s=[];for(let n of t){let a=Fe.alphabeticalKeyOrderStringify(n),o=Ce.decodingConfigCache_;o.has(a)?(p.v2("Using cached results of mediaCapabilities.decodingInfo","for key",a),r=i(r,o.get(a))):s.push(Ce.checkEachDecodingConfigCombination_(n).then(c=>{let d=null;for(let u of c||[])d=i(d,u);d&&(o.set(a,d),r=i(r,d))}))}await Promise.all(s),r&&e.decodingInfos.push(r)}static checkEachDecodingConfigCombination_(e){let t=[""];e.video&&(t=O.getCodecs(e.video.contentType).split(","));let i=[""];e.audio&&(i=O.getCodecs(e.audio.contentType).split(","));let r=[];for(let s of t)for(let n of i){let a=Fe.cloneObject(e);if(e.video){let o=O.getBasicType(a.video.contentType);a.video.contentType=O.getFullType(o,s)}if(e.audio){let o=O.getBasicType(a.audio.contentType);a.audio.contentType=O.getFullType(o,n)}r.push(new Promise((o,c)=>{let u;j.getDevice().getDeviceType()==ie.DeviceType.MOBILE?u=it.promiseWithTimeout(5,navigator.mediaCapabilities.decodingInfo(a)):u=navigator.mediaCapabilities.decodingInfo(a),u.then(f=>{o(f)}).catch(c)}))}return Promise.all(r).catch(s=>(p.info("MediaCapabilities.decodingInfo() failed.",JSON.stringify(e),s),null))}static async getDecodingInfosForVariants(e,t,i,r){if(e.some(n=>n.decodingInfos.length)){p.debug("Already got the variants' decodingInfo.");return}for(let n of r){let a=!1;for(let o of e){let c=Ce.getDecodingConfigs_(o,t,i).filter(d=>{let u=d[0],m=u.keySystemConfiguration&&u.keySystemConfiguration.keySystem;return!m||m===n});for(let d of c)await Ce.getDecodingInfosForVariant_(o,d);o.decodingInfos.some(d=>d.supported)&&(a=!0)}if(a)return}for(let n of e){let a=Ce.getDecodingConfigs_(n,t,i).filter(o=>{let c=o[0],d=c.keySystemConfiguration&&c.keySystemConfiguration.keySystem;return!d||!r.includes(d)});for(let o of a)await Ce.getDecodingInfosForVariant_(n,o)}}static getDecodingConfigs_(e,t,i){let r=e.audio,s=e.video,n=R.ContentType,a=[],o=[];if(s)for(let b of s.fullMimeTypes){let S=O.getCodecs(b);if(S.includes(",")&&!r){let A=S.split(","),x=O.getBasicType(b);S=R.guessCodecs(n.VIDEO,A);let M=R.guessCodecs(n.AUDIO,A);M=O.getCorrectAudioCodecs(M,x);let C=O.getFullOrConvertedType(x,M,n.AUDIO);o.push({contentType:C,channels:2,bitrate:e.bandwidth||1,samplerate:1,spatialRendering:!1})}S=O.getCorrectVideoCodecs(S);let w={contentType:O.getFullOrConvertedType(O.getBasicType(b),S,n.VIDEO),width:s.width||64,height:s.height||64,bitrate:s.bandwidth||e.bandwidth||1,framerate:s.frameRate||30};if(s.hdr)switch(s.hdr){case"PQ":w.transferFunction="pq";break;case"HLG":w.transferFunction="hlg";break}s.colorGamut&&(w.colorGamut=s.colorGamut),a.push(w)}if(r)for(let b of r.fullMimeTypes){let S=O.getBasicType(b),E=O.getCorrectAudioCodecs(O.getCodecs(b),S),w=O.getFullOrConvertedType(S,E,n.AUDIO);o.push({contentType:w,channels:r.channelsCount||2,bitrate:r.bandwidth||e.bandwidth||1,samplerate:r.audioSamplingRate||1,spatialRendering:r.spatialAudio})}let c=[];a.length==0&&a.push(null),o.length==0&&o.push(null);for(let b of a)for(let S of o){let E={type:i?"file":"media-source"};b&&(E.video=b),S&&(E.audio=S),c.push(E)}let d=e.video?e.video.drmInfos:[],u=e.audio?e.audio.drmInfos:[],m=d.concat(u);if(!m.length)return[c];let f=[],g=new Map;for(let b of m)g.get(b.keySystem)||g.set(b.keySystem,[]),g.get(b.keySystem).push(b);let _=t?"required":"optional",T=t?["persistent-license"]:["temporary"];for(let b of g.keys()){let S=g.get(b),E=new Map;for(let w of S){let A=`${w.videoRobustness},${w.audioRobustness}`;E.get(A)||E.set(A,[]),E.get(A).push(w)}for(let w of E.values()){let A=[];for(let x of c){let M=Object.assign({},x),C={keySystem:b,initDataType:"cenc",persistentState:_,distinctiveIdentifier:"optional",sessionTypes:T};for(let k of w){if(k.initData&&k.initData.length){let L=new Set;for(let V of k.initData)L.add(V.initDataType);L.size>1&&p.v2("DrmInfo contains more than one initDataType,","and we use the initDataType of the first initData.",k),C.initDataType=k.initData[0].initDataType}k.distinctiveIdentifierRequired&&(C.distinctiveIdentifier="required"),k.persistentStateRequired&&(C.persistentState="required"),k.sessionType&&(C.sessionTypes=[k.sessionType]),r&&(C.audio?(k.encryptionScheme&&(C.audio.encryptionScheme=C.audio.encryptionScheme||k.encryptionScheme),C.audio.robustness=C.audio.robustness||k.audioRobustness):(C.audio={robustness:k.audioRobustness},k.encryptionScheme&&(C.audio.encryptionScheme=k.encryptionScheme)),C.audio.robustness==""&&delete C.audio.robustness),s&&(C.video?(k.encryptionScheme&&(C.video.encryptionScheme=C.video.encryptionScheme||k.encryptionScheme),C.video.robustness=C.video.robustness||k.videoRobustness):(C.video={robustness:k.videoRobustness},k.encryptionScheme&&(C.video.encryptionScheme=k.encryptionScheme)),C.video.robustness==""&&delete C.video.robustness)}M.keySystemConfiguration=C,A.push(M)}f.push(A)}}return f}static filterManifestByCurrentVariant(e,t){t.variants=t.variants.filter(i=>{let r=i.audio,s=i.video;return r&&e&&e.audio&&!Ce.areStreamsCompatible_(r,e.audio)?(p.debug("Dropping variant - not compatible with active audio","active audio",Ce.getStreamSummaryString_(e.audio),"variant.audio",Ce.getStreamSummaryString_(r)),!1):s&&e&&e.video&&!Ce.areStreamsCompatible_(s,e.video)?(p.debug("Dropping variant - not compatible with active video","active video",Ce.getStreamSummaryString_(e.video),"variant.video",Ce.getStreamSummaryString_(s)),!1):!0})}static filterTextStreams_(e){e.textStreams=e.textStreams.filter(t=>{let i=O.getFullType(t.mimeType,t.codecs),r=Oe.isTypeSupported(i);return r||p.debug("Dropping text stream. Is not supported by the platform.",t),r})}static async filterImageStreams_(e){let t=[];for(let i of e.imageStreams){let r=i.mimeType;if(r=="application/mp4"&&i.codecs=="mjpg"&&(r="image/jpg"),!Ce.supportedImageMimeTypes_.has(r)){let n=Ce.minImage_.get(r);if(n){let a=await Ce.isImageSupported_(n);Ce.supportedImageMimeTypes_.set(r,a)}else Ce.supportedImageMimeTypes_.set(r,!1)}Ce.supportedImageMimeTypes_.get(r)?t.push(i):p.debug("Dropping image stream. Is not supported by the platform.",i)}e.imageStreams=t}static isImageSupported_(e){return new Promise(t=>{let i=new Image;i.src=e,"decode"in i?i.decode().then(()=>{t(!0)}).catch(()=>{t(!1)}):i.onload=i.onerror=()=>{t(i.height===2)}})}static areStreamsCompatible_(e,t){return!(e.mimeType!=t.mimeType||e.codecs.split(".")[0]!=t.codecs.split(".")[0])}static variantToTrack(e){let t=R.ContentType,i=e.audio,r=e.video,s=i?i.mimeType:null,n=r?r.mimeType:null,a=i?i.codecs:null,o=r?r.codecs:null,c=i?i.groupId:null,d=[];r&&d.push(r.mimeType),i&&d.push(i.mimeType);let u=d[0]||null,m=[];i&&m.push(i.kind),r&&m.push(r.kind);let f=m[0]||null,g=new Set;if(i)for(let b of i.roles)g.add(b);if(r)for(let b of r.roles)g.add(b);let _={id:e.id,active:!1,type:"variant",bandwidth:e.bandwidth,language:e.language,label:null,videoLabel:null,kind:f,width:null,height:null,frameRate:null,pixelAspectRatio:null,hdr:null,colorGamut:null,videoLayout:null,mimeType:u,audioMimeType:s,videoMimeType:n,codecs:"",audioCodec:a,videoCodec:o,primary:e.primary,roles:Array.from(g),audioRoles:null,videoRoles:null,audioLanguage:null,videoLanguage:null,forced:!1,videoId:null,audioId:null,audioGroupId:c,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,tilesLayout:null,audioBandwidth:null,videoBandwidth:null,originalVideoId:null,originalAudioId:null,originalTextId:null,originalImageId:null,accessibilityPurpose:null,originalLanguage:null};if(r){_.videoId=r.id,_.originalVideoId=r.originalId,_.width=r.width||null,_.height=r.height||null,_.frameRate=r.frameRate||null,_.pixelAspectRatio=r.pixelAspectRatio||null,_.videoBandwidth=r.bandwidth||null,_.hdr=r.hdr||null,_.colorGamut=r.colorGamut||null,_.videoLayout=r.videoLayout||null,_.videoRoles=r.roles,_.videoLanguage=r.language||null,_.videoLabel=r.label;let b=r.dependencyStream;if(b&&(_.width=b.width||_.width,_.height=b.height||_.height,_.videoCodec=b.codecs||_.videoCodec,_.pixelAspectRatio=b.pixelAspectRatio||_.pixelAspectRatio,_.videoBandwidth&&b.bandwidth&&(_.videoBandwidth+=b.bandwidth)),o.includes(",")){_.channelsCount=r.channelsCount,_.audioSamplingRate=r.audioSamplingRate,_.spatialAudio=r.spatialAudio,_.originalLanguage=r.originalLanguage,_.audioMimeType=n;let S=o.split(",");try{_.videoCodec=R.guessCodecs(t.VIDEO,S),_.audioCodec=R.guessCodecs(t.AUDIO,S)}catch(E){}}}if(i){_.audioId=i.id,_.originalAudioId=i.originalId,_.channelsCount=i.channelsCount,_.audioSamplingRate=i.audioSamplingRate,_.audioBandwidth=i.bandwidth||null,_.spatialAudio=i.spatialAudio,_.label=i.label,_.audioRoles=i.roles,_.audioLanguage=i.language||null,_.accessibilityPurpose=i.accessibilityPurpose,_.originalLanguage=i.originalLanguage;let b=i.dependencyStream;b&&(_.audioCodec=b.codecs||_.audioCodec,_.audioBandwidth&&b.bandwidth&&(_.audioBandwidth+=b.bandwidth))}r&&!_.videoBandwidth&&(i?_.audioBandwidth&&(_.videoBandwidth=_.bandwidth-_.audioBandwidth):_.videoBandwidth=_.bandwidth),i&&!_.audioBandwidth&&(r?_.videoBandwidth&&(_.audioBandwidth=_.bandwidth-_.videoBandwidth):_.audioBandwidth=_.bandwidth);let T=[];return _.videoCodec&&T.push(_.videoCodec),_.audioCodec&&T.push(_.audioCodec),_.codecs=T.join(", "),_}static textStreamToTrack(e){let t=R.ContentType;return{id:e.id,active:!1,type:t.TEXT,bandwidth:e.bandwidth||0,language:e.language,label:e.label,kind:e.kind||null,mimeType:e.mimeType,codecs:e.codecs||null,primary:e.primary,roles:e.roles,accessibilityPurpose:e.accessibilityPurpose,forced:e.forced,originalTextId:e.originalId,originalLanguage:e.originalLanguage}}static imageStreamToTrack(e){let t=R.ContentType,i=e.width||null,r=e.height||null,s=null;e.segmentIndex&&(s=e.segmentIndex.earliestReference());let n=e.tilesLayout;return s&&(n=s.getTilesLayout()||n),n&&i!=null&&(i/=Number(n.split("x")[0])),n&&r!=null&&(r/=Number(n.split("x")[1])),{id:e.id,type:t.IMAGE,bandwidth:e.bandwidth||0,width:i,height:r,mimeType:e.mimeType,codecs:e.codecs||null,tilesLayout:n||null,originalImageId:e.originalId}}static chapterStreamToTrack(e){let t=R.ContentType;return{id:e.id,type:t.CHAPTER,bandwidth:e.bandwidth||0,language:e.language}}static html5TrackId(e){return e.__shaka_id==null&&(e.__shaka_id=Ce.nextTrackId_++),e.__shaka_id}static html5TextTrackToTrack(e,t=!1){let i=R.ContentType,r={id:Ce.html5TrackId(e),active:t&&e.mode!="disabled",type:i.TEXT,bandwidth:0,language:Se.normalize(e.language||"und"),label:e.label,kind:e.kind,mimeType:null,codecs:null,primary:!1,roles:[],accessibilityPurpose:null,forced:e.kind=="forced",originalTextId:e.id,originalLanguage:e.language};return e.kind=="captions"&&(r.mimeType="unknown"),e.kind=="subtitles"&&(r.mimeType="text/vtt"),e.kind&&(r.roles=[e.kind]),r}static html5TextTrackToChapterTrack(e){let t=R.ContentType;return{id:Ce.html5TrackId(e),type:t.CHAPTER,bandwidth:0,language:Se.normalize(e.language||"und")}}static html5AudioTrackToTrack(e){let t=e.language,i={id:Ce.html5TrackId(e),active:e.enabled,language:Se.normalize(t||"und"),label:e.label,mimeType:null,codecs:null,primary:e.kind=="main",roles:[],accessibilityPurpose:null,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,originalLanguage:t};return e.kind&&(e.kind=="description"&&(i.accessibilityPurpose=me.AccessibilityPurpose.VISUALLY_IMPAIRED),i.roles.push(e.kind)),e.configuration&&(e.configuration.codec&&(i.codecs=e.configuration.codec),e.configuration.sampleRate&&(i.audioSamplingRate=e.configuration.sampleRate),e.configuration.numberOfChannels&&(i.channelsCount=e.configuration.numberOfChannels)),i}static html5TrackToShakaTrack(e,t){v.assert(e||t,"There must be at least audioTrack or videoTrack.");let i=e?e.language:null,r={id:Ce.html5TrackId(e||t),active:e?e.enabled:t.selected,type:"variant",bandwidth:0,language:Se.normalize(i||"und"),label:e?e.label:null,videoLabel:null,kind:e?e.kind:null,width:null,height:null,frameRate:null,pixelAspectRatio:null,hdr:null,colorGamut:null,videoLayout:null,mimeType:null,audioMimeType:null,videoMimeType:null,codecs:null,audioCodec:null,videoCodec:null,primary:e?e.kind=="main":!1,roles:[],forced:!1,audioRoles:null,videoRoles:null,audioLanguage:e?Se.normalize(e.language||"und"):null,videoLanguage:t?Se.normalize(t.language||"und"):null,videoId:null,audioId:null,audioGroupId:null,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,tilesLayout:null,audioBandwidth:null,videoBandwidth:null,originalVideoId:t?t.id:null,originalAudioId:e?e.id:null,originalTextId:null,originalImageId:null,accessibilityPurpose:null,originalLanguage:i};if(e&&e.kind&&(r.roles=[e.kind],r.audioRoles=[e.kind]),e&&e.configuration&&(e.configuration.codec&&(r.audioCodec=e.configuration.codec,r.codecs=r.audioCodec),e.configuration.bitrate&&(r.audioBandwidth=e.configuration.bitrate,r.bandwidth+=r.audioBandwidth),e.configuration.sampleRate&&(r.audioSamplingRate=e.configuration.sampleRate),e.configuration.numberOfChannels&&(r.channelsCount=e.configuration.numberOfChannels)),t&&t.configuration&&(t.configuration.codec&&(r.videoCodec=t.configuration.codec,r.codecs?r.codecs+=","+r.videoCodec:r.codecs=r.videoCodec),t.configuration.bitrate&&(r.videoBandwidth=t.configuration.bitrate,r.bandwidth+=r.videoBandwidth),t.configuration.framerate&&(r.frameRate=t.configuration.framerate),t.configuration.width&&(r.width=t.configuration.width),t.configuration.height&&(r.height=t.configuration.height),t.configuration.colorSpace&&t.configuration.colorSpace.transfer))switch(t.configuration.colorSpace.transfer){case"pq":r.hdr="PQ";break;case"hlg":r.hdr="HLG";break;case"bt709":r.hdr="SDR";break}return r}static isPlayable(e){return e.allowedByApplication&&e.allowedByKeySystem&&e.disabledUntilTime==0}static getPlayableVariants(e){return e.filter(t=>Ce.isPlayable(t))}static filterStreamsByLanguageAndRole(e,t,i,r){if(!t)return[];let s=e,n=e.filter(d=>d.primary);n.length&&(s=n);let a=s.length?s[0].language:"";if(s=s.filter(d=>d.language==a),t){let d=Se.findClosestLocale(Se.normalize(t),e.map(u=>u.language));if(d)s=e.filter(u=>Se.normalize(u.language)==d);else return[]}if(s=s.filter(d=>d.forced==r),i)return Ce.filterStreamsByRole_(s,i);let o=s.filter(d=>d.roles.length==0);if(o.length)return o;let c=s.map(d=>d.roles).reduce((d,u)=>d.concat(u),[]);return c.length?Ce.filterStreamsByRole_(s,c[0]):s}static filterStreamsByTextPreferences(e,t){for(let i of t){if(!i.language)continue;let r=Ce.filterStreamsByLanguageAndRole(e,i.language,i.role||"",i.forced||!1);if(r.length)return r}return[]}static filterStreamsByRole_(e,t){return e.filter(i=>i.roles.includes(t))}static isAudio(e){let t=R.ContentType;return e.type==t.AUDIO}static isVideo(e){let t=R.ContentType;return e.type==t.VIDEO}static getVariantStreams(e){let t=[];return e.audio&&t.push(e.audio),e.video&&t.push(e.video),t}static isFastSwitching(e){return!!(e.audio&&e.audio.fastSwitching||e.video&&e.video.fastSwitching)}static setBetterIFrameStream(e,t){if(!t.length)return;let i=t.filter(r=>O.getNormalizedCodec(e.codecs)==O.getNormalizedCodec(r.codecs)).sort((r,s)=>!r.bandwidth||!s.bandwidth||r.bandwidth==s.bandwidth?(r.width||0)-(s.width||0):r.bandwidth-s.bandwidth);if(e.trickModeVideo=i[0],i.length>1){let r=i.find(s=>e.width==s.width&&e.height==s.height);r&&(e.trickModeVideo=r)}}static getVariantSummaryString_(e){let t=[];return e.audio&&t.push(Ce.getStreamSummaryString_(e.audio)),e.video&&t.push(Ce.getStreamSummaryString_(e.video)),t.join(", ")}static getStreamSummaryString_(e){return Ce.isAudio(e)?"type=audio codecs="+e.codecs+" bandwidth="+e.bandwidth+" channelsCount="+e.channelsCount+" audioSamplingRate="+e.audioSamplingRate:Ce.isVideo(e)?"type=video codecs="+e.codecs+" bandwidth="+e.bandwidth+" frameRate="+e.frameRate+" width="+e.width+" height="+e.height:"unexpected stream type"}static clearDecodingConfigCache(){Ce.decodingConfigCache_.clear()}static createStream(e){let t={id:0,originalId:null,groupId:null,createSegmentIndex:()=>Promise.resolve(),segmentIndex:null,mimeType:"",codecs:"",supplementalCodecs:"",encrypted:!1,drmInfos:[],keyIds:new Set,language:"",originalLanguage:null,label:null,type:"",primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],accessibilityPurpose:null,forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,external:!1,fastSwitching:!1,fullMimeTypes:new Set,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1};return Object.assign(t,e),t.mimeType&&t.fullMimeTypes.add(O.getFullType(t.mimeType,t.codecs)),t}static createEmptyVariant(e){let t=R.ContentType,i={id:0,language:"und",disabledUntilTime:0,primary:!1,audio:null,video:null,bandwidth:100,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]};for(let r of e){let s=Ce.createStream({mimeType:r?O.getBasicType(r):"",codecs:r?O.getCodecs(r):"",encrypted:!0,language:"und",type:t.VIDEO});r.startsWith("audio/")?(s.type=t.AUDIO,i.audio=s):i.video=s}return i}};l(Ce,"decodingConfigCache_",new Map),l(Ce,"nextTrackId_",0),l(Ce,"DecodingAttributes",{SMOOTH:"smooth",POWER:"powerEfficient"});var re=Ce;re.supportedImageMimeTypes_=new Map().set("image/svg+xml",!0).set("image/png",!0).set("image/jpeg",!0).set("image/jpg",!0);re.minWebPImage_="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA";re.minAvifImage_="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=";re.minImage_=new Map().set("image/webp",re.minWebPImage_).set("image/avif",re.minAvifImage_);/*! @license
|
|
205
|
+
*/var Ce=class Ce{static chooseCodecsAndFilterManifest(e,t,i,r,s){if(s.length){let f=e.textStreams;for(let g of s){let _=f.filter(T=>!!(T.codecs.startsWith(g)||T.mimeType.startsWith(g)));if(_.length){f=_;break}}e.textStreams=f}let n=e.variants;if((t.length||i.length)&&(n=Ce.choosePreferredCodecs(n,t,i)),r.length){let f=new or;for(let _ of n)f.push(String(_.video.width||0),_);let g=[];f.forEach((_,T)=>{let b=0,S=[];for(let E of T){let w=r.filter(A=>E.decodingInfos[0][A]).length;w>b?(b=w,S=[E]):w==b&&S.push(E)}g.push(...S)}),n=g}let a=new Set;for(let f of n)f.video&&a.add(f.video);if(!a.size){e.variants=n;return}let o={vp8:1,avc:1,"dovi-avc":.95,vp9:.9,vp09:.9,hevc:.85,"dovi-hevc":.8,"dovi-p5":.75,av01:.7,"dovi-av1":.65,vvc:.6},c=Array.from(a).sort((f,g)=>{if(f.bandwidth&&g.bandwidth&&f.bandwidth!=g.bandwidth)return f.bandwidth-g.bandwidth;if(f.width!=g.width)return f.width-g.width;if(f.codecs&&g.codecs){let _=O.getNormalizedCodec(f.codecs),T=O.getNormalizedCodec(g.codecs),b=o[_]||1,S=o[T]||1;return b-S}return 0}),d=[],u=new Map,m=f=>{let g=[String(f.width||""),String(f.height||""),String(Math.round(f.frameRate||0)),f.hdr||"",f.fastSwitching];return f.dependencyStream&&g.push(f.dependencyStream.baseOriginalId||""),f.roles&&g.push(f.roles.sort().join("_")),g.join(";")};for(let f of c){let g=m(f),_=u.get(g)||[];if(!_.length)_.push(f),d.push(f.id);else{let T=_[_.length-1],b=O.getNormalizedCodec(T.codecs),S=O.getNormalizedCodec(f.codecs);b==S&&(_.push(f),d.push(f.id))}u.set(g,_)}e.variants=n.filter(f=>{let g=f.video;return g&&!d.includes(g.id)?(p.debug("Dropping Variant (better codec available)",f),!1):!0})}static choosePreferredCodecs(e,t,i){let r=e;for(let s of t){let n=r.filter(a=>a.video&&a.video.codecs.startsWith(s));if(n.length){r=n;break}}for(let s of i){let n=r.filter(a=>a.audio&&a.audio.codecs.startsWith(s));if(n.length){r=n;break}}return r}static filterByRestrictions(e,t,i){e.variants=e.variants.filter(r=>Ce.meetsRestrictions(r,t,i))}static meetsRestrictions(e,t,i){let r=(s,n,a)=>s>=n&&s<=a;if(e&&e.video&&e.video.width&&e.video.height){let s=e.video.width,n=e.video.height;if(n>s&&([s,n]=[n,s]),!r(s,t.minWidth,Math.min(t.maxWidth,i.width))||!r(n,t.minHeight,Math.min(t.maxHeight,i.height))||!r(s*n,t.minPixels,t.maxPixels))return!1}return!(e&&e.video&&e.video.frameRate&&!r(e.video.frameRate,t.minFrameRate,t.maxFrameRate)||e&&e.audio&&e.audio.channelsCount&&!r(e.audio.channelsCount,t.minChannelsCount,t.maxChannelsCount)||!r(e.bandwidth,t.minBandwidth,t.maxBandwidth))}static applyRestrictions(e,t,i){let r=!1;for(let s of e){let n=s.allowedByApplication;s.allowedByApplication=Ce.meetsRestrictions(s,t,i),n!=s.allowedByApplication&&(r=!0)}return r}static async filterManifest(e,t,i=[],r={}){await Ce.filterManifestByMediaCapabilities(e,t,t.offlineSessionIds.length>0,i,r),Ce.filterTextStreams_(t),await Ce.filterImageStreams_(t)}static async filterManifestByMediaCapabilities(e,t,i,r,s){v.assert(navigator.mediaCapabilities,"MediaCapabilities should be valid."),j.getDevice().shouldOverrideDolbyVisionCodecs()&&Ce.overrideDolbyVisionCodecs(t.variants),await Ce.getDecodingInfosForVariants(t.variants,i,!1,r);let n=null;if(e){let a=e.getDrmInfo();a&&(n=a.keySystem)}t.variants=t.variants.filter(a=>{let o=Ce.checkVariantSupported_(a,n,s);return o||p.debug("Dropping variant - not compatible with platform",Ce.getVariantSummaryString_(a)),o})}static overrideDolbyVisionCodecs(e){let t=new Map().set("dvav","avc3").set("dva1","avc1").set("dvhe","hev1").set("dvh1","hvc1").set("dvc1","vvc1").set("dvi1","vvi1"),i=new Set;for(let r of e)r.video&&i.add(r.video);for(let r of i)for(let[s,n]of t)if(r.codecs.includes(s)){r.codecs=r.codecs.replace(s,n);break}}static checkVariantSupported_(e,t,i){if(!e.decodingInfos.some(g=>{if(!g.supported)return!1;if(t){let _=g.keySystemAccess;if(_&&(i[_.keySystem]||_.keySystem)!=t)return!1}return!0}))return!1;let s=j.getDevice(),n=s.getDeviceName()==="Xbox",a=s.getDeviceType()===ie.DeviceType.MOBILE&&s.getBrowserEngine()===ie.BrowserEngine.GECKO,o=e.video,c=o&&o.width||0,d=o&&o.height||0;if(n&&o&&(c>1920||d>1080)&&(o.codecs.includes("avc1.")||o.codecs.includes("avc3.")))return!1;let u=o&&o.dependencyStream;if(u&&!xr.isStreamSupported(u))return!1;let m=e.audio;return!(a&&m&&m.encrypted&&m.codecs.toLowerCase().includes("opus")||m&&m.dependencyStream)}static async getDecodingInfosForVariant_(e,t){let i=(n,a)=>{if(n){let o=Fe.shallowCloneObject(n);return o.supported=n.supported&&a.supported,o.powerEfficient=n.powerEfficient&&a.powerEfficient,o.smooth=n.smooth&&a.smooth,a.keySystemAccess&&!o.keySystemAccess&&(o.keySystemAccess=a.keySystemAccess),o}else return a},r=null,s=[];for(let n of t){let a=Fe.alphabeticalKeyOrderStringify(n),o=Ce.decodingConfigCache_;o.has(a)?(p.v2("Using cached results of mediaCapabilities.decodingInfo","for key",a),r=i(r,o.get(a))):s.push(Ce.checkEachDecodingConfigCombination_(n).then(c=>{let d=null;for(let u of c||[])d=i(d,u);d&&(o.set(a,d),r=i(r,d))}))}await Promise.all(s),r&&e.decodingInfos.push(r)}static checkEachDecodingConfigCombination_(e){let t=[""];e.video&&(t=O.getCodecs(e.video.contentType).split(","));let i=[""];e.audio&&(i=O.getCodecs(e.audio.contentType).split(","));let r=[];for(let s of t)for(let n of i){let a=Fe.cloneObject(e);if(e.video){let o=O.getBasicType(a.video.contentType);a.video.contentType=O.getFullType(o,s)}if(e.audio){let o=O.getBasicType(a.audio.contentType);a.audio.contentType=O.getFullType(o,n)}r.push(new Promise((o,c)=>{let u;j.getDevice().getDeviceType()==ie.DeviceType.MOBILE?u=it.promiseWithTimeout(5,navigator.mediaCapabilities.decodingInfo(a)):u=navigator.mediaCapabilities.decodingInfo(a),u.then(f=>{o(f)}).catch(c)}))}return Promise.all(r).catch(s=>(p.info("MediaCapabilities.decodingInfo() failed.",JSON.stringify(e),s),null))}static async getDecodingInfosForVariants(e,t,i,r){if(e.some(n=>n.decodingInfos.length)){p.debug("Already got the variants' decodingInfo.");return}for(let n of r){let a=!1;for(let o of e){let c=Ce.getDecodingConfigs_(o,t,i).filter(d=>{let u=d[0],m=u.keySystemConfiguration&&u.keySystemConfiguration.keySystem;return!m||m===n});for(let d of c)await Ce.getDecodingInfosForVariant_(o,d);o.decodingInfos.some(d=>d.supported)&&(a=!0)}if(a)return}for(let n of e){let a=Ce.getDecodingConfigs_(n,t,i).filter(o=>{let c=o[0],d=c.keySystemConfiguration&&c.keySystemConfiguration.keySystem;return!d||!r.includes(d)});for(let o of a)await Ce.getDecodingInfosForVariant_(n,o)}}static getDecodingConfigs_(e,t,i){let r=e.audio,s=e.video,n=R.ContentType,a=[],o=[];if(s)for(let b of s.fullMimeTypes){let S=O.getCodecs(b);if(S.includes(",")&&!r){let A=S.split(","),x=O.getBasicType(b);S=R.guessCodecs(n.VIDEO,A);let M=R.guessCodecs(n.AUDIO,A);M=O.getCorrectAudioCodecs(M,x);let C=O.getFullOrConvertedType(x,M,n.AUDIO);o.push({contentType:C,channels:2,bitrate:e.bandwidth||1,samplerate:1,spatialRendering:!1})}S=O.getCorrectVideoCodecs(S);let w={contentType:O.getFullOrConvertedType(O.getBasicType(b),S,n.VIDEO),width:s.width||64,height:s.height||64,bitrate:s.bandwidth||e.bandwidth||1,framerate:s.frameRate||30};if(s.hdr)switch(s.hdr){case"PQ":w.transferFunction="pq";break;case"HLG":w.transferFunction="hlg";break}s.colorGamut&&(w.colorGamut=s.colorGamut),a.push(w)}if(r)for(let b of r.fullMimeTypes){let S=O.getBasicType(b),E=O.getCorrectAudioCodecs(O.getCodecs(b),S),w=O.getFullOrConvertedType(S,E,n.AUDIO);o.push({contentType:w,channels:r.channelsCount||2,bitrate:r.bandwidth||e.bandwidth||1,samplerate:r.audioSamplingRate||1,spatialRendering:r.spatialAudio})}let c=[];a.length==0&&a.push(null),o.length==0&&o.push(null);for(let b of a)for(let S of o){let E={type:i?"file":"media-source"};b&&(E.video=b),S&&(E.audio=S),c.push(E)}let d=e.video?e.video.drmInfos:[],u=e.audio?e.audio.drmInfos:[],m=d.concat(u);if(!m.length)return[c];let f=[],g=new Map;for(let b of m)g.get(b.keySystem)||g.set(b.keySystem,[]),g.get(b.keySystem).push(b);let _=t?"required":"optional",T=t?["persistent-license"]:["temporary"];for(let b of g.keys()){let S=g.get(b),E=new Map;for(let w of S){let A=`${w.videoRobustness},${w.audioRobustness}`;E.get(A)||E.set(A,[]),E.get(A).push(w)}for(let w of E.values()){let A=[];for(let x of c){let M=Object.assign({},x),C={keySystem:b,initDataType:"cenc",persistentState:_,distinctiveIdentifier:"optional",sessionTypes:T};for(let k of w){if(k.initData&&k.initData.length){let D=new Set;for(let V of k.initData)D.add(V.initDataType);D.size>1&&p.v2("DrmInfo contains more than one initDataType,","and we use the initDataType of the first initData.",k),C.initDataType=k.initData[0].initDataType}k.distinctiveIdentifierRequired&&(C.distinctiveIdentifier="required"),k.persistentStateRequired&&(C.persistentState="required"),k.sessionType&&(C.sessionTypes=[k.sessionType]),r&&(C.audio?(k.encryptionScheme&&(C.audio.encryptionScheme=C.audio.encryptionScheme||k.encryptionScheme),C.audio.robustness=C.audio.robustness||k.audioRobustness):(C.audio={robustness:k.audioRobustness},k.encryptionScheme&&(C.audio.encryptionScheme=k.encryptionScheme)),C.audio.robustness==""&&delete C.audio.robustness),s&&(C.video?(k.encryptionScheme&&(C.video.encryptionScheme=C.video.encryptionScheme||k.encryptionScheme),C.video.robustness=C.video.robustness||k.videoRobustness):(C.video={robustness:k.videoRobustness},k.encryptionScheme&&(C.video.encryptionScheme=k.encryptionScheme)),C.video.robustness==""&&delete C.video.robustness)}M.keySystemConfiguration=C,A.push(M)}f.push(A)}}return f}static filterManifestByCurrentVariant(e,t){t.variants=t.variants.filter(i=>{let r=i.audio,s=i.video;return r&&e&&e.audio&&!Ce.areStreamsCompatible_(r,e.audio)?(p.debug("Dropping variant - not compatible with active audio","active audio",Ce.getStreamSummaryString_(e.audio),"variant.audio",Ce.getStreamSummaryString_(r)),!1):s&&e&&e.video&&!Ce.areStreamsCompatible_(s,e.video)?(p.debug("Dropping variant - not compatible with active video","active video",Ce.getStreamSummaryString_(e.video),"variant.video",Ce.getStreamSummaryString_(s)),!1):!0})}static filterTextStreams_(e){e.textStreams=e.textStreams.filter(t=>{let i=O.getFullType(t.mimeType,t.codecs),r=Oe.isTypeSupported(i);return r||p.debug("Dropping text stream. Is not supported by the platform.",t),r})}static async filterImageStreams_(e){let t=[];for(let i of e.imageStreams){let r=i.mimeType;if(r=="application/mp4"&&i.codecs=="mjpg"&&(r="image/jpg"),!Ce.supportedImageMimeTypes_.has(r)){let n=Ce.minImage_.get(r);if(n){let a=await Ce.isImageSupported_(n);Ce.supportedImageMimeTypes_.set(r,a)}else Ce.supportedImageMimeTypes_.set(r,!1)}Ce.supportedImageMimeTypes_.get(r)?t.push(i):p.debug("Dropping image stream. Is not supported by the platform.",i)}e.imageStreams=t}static isImageSupported_(e){return new Promise(t=>{let i=new Image;i.src=e,"decode"in i?i.decode().then(()=>{t(!0)}).catch(()=>{t(!1)}):i.onload=i.onerror=()=>{t(i.height===2)}})}static areStreamsCompatible_(e,t){return!(e.mimeType!=t.mimeType||e.codecs.split(".")[0]!=t.codecs.split(".")[0])}static variantToTrack(e){let t=R.ContentType,i=e.audio,r=e.video,s=i?i.mimeType:null,n=r?r.mimeType:null,a=i?i.codecs:null,o=r?r.codecs:null,c=i?i.groupId:null,d=[];r&&d.push(r.mimeType),i&&d.push(i.mimeType);let u=d[0]||null,m=[];i&&m.push(i.kind),r&&m.push(r.kind);let f=m[0]||null,g=new Set;if(i)for(let b of i.roles)g.add(b);if(r)for(let b of r.roles)g.add(b);let _={id:e.id,active:!1,type:"variant",bandwidth:e.bandwidth,language:e.language,label:null,videoLabel:null,kind:f,width:null,height:null,frameRate:null,pixelAspectRatio:null,hdr:null,colorGamut:null,videoLayout:null,mimeType:u,audioMimeType:s,videoMimeType:n,codecs:"",audioCodec:a,videoCodec:o,primary:e.primary,roles:Array.from(g),audioRoles:null,videoRoles:null,audioLanguage:null,videoLanguage:null,forced:!1,videoId:null,audioId:null,audioGroupId:c,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,tilesLayout:null,audioBandwidth:null,videoBandwidth:null,originalVideoId:null,originalAudioId:null,originalTextId:null,originalImageId:null,accessibilityPurpose:null,originalLanguage:null};if(r){_.videoId=r.id,_.originalVideoId=r.originalId,_.width=r.width||null,_.height=r.height||null,_.frameRate=r.frameRate||null,_.pixelAspectRatio=r.pixelAspectRatio||null,_.videoBandwidth=r.bandwidth||null,_.hdr=r.hdr||null,_.colorGamut=r.colorGamut||null,_.videoLayout=r.videoLayout||null,_.videoRoles=r.roles,_.videoLanguage=r.language||null,_.videoLabel=r.label;let b=r.dependencyStream;if(b&&(_.width=b.width||_.width,_.height=b.height||_.height,_.videoCodec=b.codecs||_.videoCodec,_.pixelAspectRatio=b.pixelAspectRatio||_.pixelAspectRatio,_.videoBandwidth&&b.bandwidth&&(_.videoBandwidth+=b.bandwidth)),o.includes(",")){_.channelsCount=r.channelsCount,_.audioSamplingRate=r.audioSamplingRate,_.spatialAudio=r.spatialAudio,_.originalLanguage=r.originalLanguage,_.audioMimeType=n;let S=o.split(",");try{_.videoCodec=R.guessCodecs(t.VIDEO,S),_.audioCodec=R.guessCodecs(t.AUDIO,S)}catch(E){}}}if(i){_.audioId=i.id,_.originalAudioId=i.originalId,_.channelsCount=i.channelsCount,_.audioSamplingRate=i.audioSamplingRate,_.audioBandwidth=i.bandwidth||null,_.spatialAudio=i.spatialAudio,_.label=i.label,_.audioRoles=i.roles,_.audioLanguage=i.language||null,_.accessibilityPurpose=i.accessibilityPurpose,_.originalLanguage=i.originalLanguage;let b=i.dependencyStream;b&&(_.audioCodec=b.codecs||_.audioCodec,_.audioBandwidth&&b.bandwidth&&(_.audioBandwidth+=b.bandwidth))}r&&!_.videoBandwidth&&(i?_.audioBandwidth&&(_.videoBandwidth=_.bandwidth-_.audioBandwidth):_.videoBandwidth=_.bandwidth),i&&!_.audioBandwidth&&(r?_.videoBandwidth&&(_.audioBandwidth=_.bandwidth-_.videoBandwidth):_.audioBandwidth=_.bandwidth);let T=[];return _.videoCodec&&T.push(_.videoCodec),_.audioCodec&&T.push(_.audioCodec),_.codecs=T.join(", "),_}static textStreamToTrack(e){let t=R.ContentType;return{id:e.id,active:!1,type:t.TEXT,bandwidth:e.bandwidth||0,language:e.language,label:e.label,kind:e.kind||null,mimeType:e.mimeType,codecs:e.codecs||null,primary:e.primary,roles:e.roles,accessibilityPurpose:e.accessibilityPurpose,forced:e.forced,originalTextId:e.originalId,originalLanguage:e.originalLanguage}}static imageStreamToTrack(e){let t=R.ContentType,i=e.width||null,r=e.height||null,s=null;e.segmentIndex&&(s=e.segmentIndex.earliestReference());let n=e.tilesLayout;return s&&(n=s.getTilesLayout()||n),n&&i!=null&&(i/=Number(n.split("x")[0])),n&&r!=null&&(r/=Number(n.split("x")[1])),{id:e.id,type:t.IMAGE,bandwidth:e.bandwidth||0,width:i,height:r,mimeType:e.mimeType,codecs:e.codecs||null,tilesLayout:n||null,originalImageId:e.originalId}}static chapterStreamToTrack(e){let t=R.ContentType;return{id:e.id,type:t.CHAPTER,bandwidth:e.bandwidth||0,language:e.language}}static html5TrackId(e){return e.__shaka_id==null&&(e.__shaka_id=Ce.nextTrackId_++),e.__shaka_id}static html5TextTrackToTrack(e,t=!1){let i=R.ContentType,r={id:Ce.html5TrackId(e),active:t&&e.mode!="disabled",type:i.TEXT,bandwidth:0,language:Se.normalize(e.language||"und"),label:e.label,kind:e.kind,mimeType:null,codecs:null,primary:!1,roles:[],accessibilityPurpose:null,forced:e.kind=="forced",originalTextId:e.id,originalLanguage:e.language};return e.kind=="captions"&&(r.mimeType="unknown"),e.kind=="subtitles"&&(r.mimeType="text/vtt"),e.kind&&(r.roles=[e.kind]),r}static html5TextTrackToChapterTrack(e){let t=R.ContentType;return{id:Ce.html5TrackId(e),type:t.CHAPTER,bandwidth:0,language:Se.normalize(e.language||"und")}}static html5AudioTrackToTrack(e){let t=e.language,i={id:Ce.html5TrackId(e),active:e.enabled,language:Se.normalize(t||"und"),label:e.label,mimeType:null,codecs:null,primary:e.kind=="main",roles:[],accessibilityPurpose:null,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,originalLanguage:t};return e.kind&&(e.kind=="description"&&(i.accessibilityPurpose=me.AccessibilityPurpose.VISUALLY_IMPAIRED),i.roles.push(e.kind)),e.configuration&&(e.configuration.codec&&(i.codecs=e.configuration.codec),e.configuration.sampleRate&&(i.audioSamplingRate=e.configuration.sampleRate),e.configuration.numberOfChannels&&(i.channelsCount=e.configuration.numberOfChannels)),i}static html5TrackToShakaTrack(e,t){v.assert(e||t,"There must be at least audioTrack or videoTrack.");let i=e?e.language:null,r={id:Ce.html5TrackId(e||t),active:e?e.enabled:t.selected,type:"variant",bandwidth:0,language:Se.normalize(i||"und"),label:e?e.label:null,videoLabel:null,kind:e?e.kind:null,width:null,height:null,frameRate:null,pixelAspectRatio:null,hdr:null,colorGamut:null,videoLayout:null,mimeType:null,audioMimeType:null,videoMimeType:null,codecs:null,audioCodec:null,videoCodec:null,primary:e?e.kind=="main":!1,roles:[],forced:!1,audioRoles:null,videoRoles:null,audioLanguage:e?Se.normalize(e.language||"und"):null,videoLanguage:t?Se.normalize(t.language||"und"):null,videoId:null,audioId:null,audioGroupId:null,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,tilesLayout:null,audioBandwidth:null,videoBandwidth:null,originalVideoId:t?t.id:null,originalAudioId:e?e.id:null,originalTextId:null,originalImageId:null,accessibilityPurpose:null,originalLanguage:i};if(e&&e.kind&&(r.roles=[e.kind],r.audioRoles=[e.kind]),e&&e.configuration&&(e.configuration.codec&&(r.audioCodec=e.configuration.codec,r.codecs=r.audioCodec),e.configuration.bitrate&&(r.audioBandwidth=e.configuration.bitrate,r.bandwidth+=r.audioBandwidth),e.configuration.sampleRate&&(r.audioSamplingRate=e.configuration.sampleRate),e.configuration.numberOfChannels&&(r.channelsCount=e.configuration.numberOfChannels)),t&&t.configuration&&(t.configuration.codec&&(r.videoCodec=t.configuration.codec,r.codecs?r.codecs+=","+r.videoCodec:r.codecs=r.videoCodec),t.configuration.bitrate&&(r.videoBandwidth=t.configuration.bitrate,r.bandwidth+=r.videoBandwidth),t.configuration.framerate&&(r.frameRate=t.configuration.framerate),t.configuration.width&&(r.width=t.configuration.width),t.configuration.height&&(r.height=t.configuration.height),t.configuration.colorSpace&&t.configuration.colorSpace.transfer))switch(t.configuration.colorSpace.transfer){case"pq":r.hdr="PQ";break;case"hlg":r.hdr="HLG";break;case"bt709":r.hdr="SDR";break}return r}static isPlayable(e){return e.allowedByApplication&&e.allowedByKeySystem&&e.disabledUntilTime==0}static getPlayableVariants(e){return e.filter(t=>Ce.isPlayable(t))}static filterStreamsByLanguageAndRole(e,t,i,r){if(!t)return[];let s=e,n=e.filter(d=>d.primary);n.length&&(s=n);let a=s.length?s[0].language:"";if(s=s.filter(d=>d.language==a),t){let d=Se.findClosestLocale(Se.normalize(t),e.map(u=>u.language));if(d)s=e.filter(u=>Se.normalize(u.language)==d);else return[]}if(s=s.filter(d=>d.forced==r),i)return Ce.filterStreamsByRole_(s,i);let o=s.filter(d=>d.roles.length==0);if(o.length)return o;let c=s.map(d=>d.roles).reduce((d,u)=>d.concat(u),[]);return c.length?Ce.filterStreamsByRole_(s,c[0]):s}static filterStreamsByTextPreferences(e,t){for(let i of t){if(!i.language)continue;let r=Ce.filterStreamsByLanguageAndRole(e,i.language,i.role||"",i.forced||!1);if(r.length)return r}return[]}static filterStreamsByRole_(e,t){return e.filter(i=>i.roles.includes(t))}static isAudio(e){let t=R.ContentType;return e.type==t.AUDIO}static isVideo(e){let t=R.ContentType;return e.type==t.VIDEO}static getVariantStreams(e){let t=[];return e.audio&&t.push(e.audio),e.video&&t.push(e.video),t}static isFastSwitching(e){return!!(e.audio&&e.audio.fastSwitching||e.video&&e.video.fastSwitching)}static setBetterIFrameStream(e,t){if(!t.length)return;let i=t.filter(r=>O.getNormalizedCodec(e.codecs)==O.getNormalizedCodec(r.codecs)).sort((r,s)=>!r.bandwidth||!s.bandwidth||r.bandwidth==s.bandwidth?(r.width||0)-(s.width||0):r.bandwidth-s.bandwidth);if(e.trickModeVideo=i[0],i.length>1){let r=i.find(s=>e.width==s.width&&e.height==s.height);r&&(e.trickModeVideo=r)}}static getVariantSummaryString_(e){let t=[];return e.audio&&t.push(Ce.getStreamSummaryString_(e.audio)),e.video&&t.push(Ce.getStreamSummaryString_(e.video)),t.join(", ")}static getStreamSummaryString_(e){return Ce.isAudio(e)?"type=audio codecs="+e.codecs+" bandwidth="+e.bandwidth+" channelsCount="+e.channelsCount+" audioSamplingRate="+e.audioSamplingRate:Ce.isVideo(e)?"type=video codecs="+e.codecs+" bandwidth="+e.bandwidth+" frameRate="+e.frameRate+" width="+e.width+" height="+e.height:"unexpected stream type"}static clearDecodingConfigCache(){Ce.decodingConfigCache_.clear()}static createStream(e){let t={id:0,originalId:null,groupId:null,createSegmentIndex:()=>Promise.resolve(),segmentIndex:null,mimeType:"",codecs:"",supplementalCodecs:"",encrypted:!1,drmInfos:[],keyIds:new Set,language:"",originalLanguage:null,label:null,type:"",primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,roles:[],accessibilityPurpose:null,forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,external:!1,fastSwitching:!1,fullMimeTypes:new Set,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1};return Object.assign(t,e),t.mimeType&&t.fullMimeTypes.add(O.getFullType(t.mimeType,t.codecs)),t}static createEmptyVariant(e){let t=R.ContentType,i={id:0,language:"und",disabledUntilTime:0,primary:!1,audio:null,video:null,bandwidth:100,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]};for(let r of e){let s=Ce.createStream({mimeType:r?O.getBasicType(r):"",codecs:r?O.getCodecs(r):"",encrypted:!0,language:"und",type:t.VIDEO});r.startsWith("audio/")?(s.type=t.AUDIO,i.audio=s):i.video=s}return i}};l(Ce,"decodingConfigCache_",new Map),l(Ce,"nextTrackId_",0),l(Ce,"DecodingAttributes",{SMOOTH:"smooth",POWER:"powerEfficient"});var re=Ce;re.supportedImageMimeTypes_=new Map().set("image/svg+xml",!0).set("image/png",!0).set("image/jpeg",!0).set("image/jpg",!0);re.minWebPImage_="data:image/webp;base64,UklGRjoAAABXRUJQVlA4IC4AAACyAgCdASoCAAIALmk0mk0iIiIiIgBoSygABc6WWgAA/veff/0PP8bA//LwYAAA";re.minAvifImage_="data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A=";re.minImage_=new Map().set("image/webp",re.minWebPImage_).set("image/avif",re.minAvifImage_);/*! @license
|
|
206
206
|
* Shaka Player
|
|
207
207
|
* Copyright 2016 Google LLC
|
|
208
208
|
* SPDX-License-Identifier: Apache-2.0
|
|
209
|
-
*/var _i=class _i{constructor(e){l(this,"playerInterface_");l(this,"mediaKeys_");l(this,"video_");l(this,"initialized_");l(this,"initializedForStorage_");l(this,"licenseTimeSeconds_");l(this,"currentDrmInfo_");l(this,"eventManager_");l(this,"activeSessions_");l(this,"activeRequests_");l(this,"storedPersistentSessions_");l(this,"hasInitData_");l(this,"allSessionsLoaded_");l(this,"config_");l(this,"onError_");l(this,"keyStatusByKeyId_");l(this,"announcedKeyStatusByKeyId_");l(this,"keyStatusTimer_");l(this,"usePersistentLicenses_");l(this,"mediaKeyMessageEvents_");l(this,"initialRequestsSent_");l(this,"expirationTimer_");l(this,"destroyer_");l(this,"srcEquals_");l(this,"mediaKeysAttached_");l(this,"manifestInitData_");l(this,"isPreload_");this.playerInterface_=e,this.mediaKeys_=null,this.video_=null,this.initialized_=!1,this.initializedForStorage_=!1,this.licenseTimeSeconds_=0,this.currentDrmInfo_=null,this.eventManager_=new ue,this.activeSessions_=new Map,this.activeRequests_=[],this.storedPersistentSessions_=new Map,this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.config_=null,this.onError_=i=>{i.severity==h.Severity.CRITICAL&&this.allSessionsLoaded_.reject(i),e.onError(i)},this.keyStatusByKeyId_=new Map,this.announcedKeyStatusByKeyId_=new Map,this.keyStatusTimer_=new ae(()=>this.processKeyStatusChanges_()),this.usePersistentLicenses_=!1,this.mediaKeyMessageEvents_=[],this.initialRequestsSent_=!1,this.expirationTimer_=new ae(()=>{this.pollExpiration_()});let t=()=>{};this.allSessionsLoaded_.promise.catch(t),this.destroyer_=new ci(()=>this.destroyNow_()),this.srcEquals_=!1,this.mediaKeysAttached_=null,this.manifestInitData_=null,this.isPreload_=()=>!1}destroy(){return this.destroyer_.destroy()}async destroyNow_(){if(this.eventManager_.release(),this.eventManager_=null,this.allSessionsLoaded_.reject(),this.expirationTimer_.stop(),this.expirationTimer_=null,this.keyStatusTimer_.stop(),this.keyStatusTimer_=null,await this.closeOpenSessions_(),this.video_){de.isMediaKeysPolyfilled("webkit")||v.assert(!this.video_.src&&!this.video_.getElementsByTagName("source").length,"video src must be removed first!");try{await this.video_.setMediaKeys(null)}catch(e){p.alwaysWarn("DrmEngine.destroyNow_ exception",e)}this.video_=null}this.currentDrmInfo_=null,this.mediaKeys_=null,this.storedPersistentSessions_=new Map,this.config_=null,this.onError_=()=>{},this.playerInterface_=null,this.srcEquals_=!1,this.mediaKeysAttached_=null}configure(e,t){this.config_=e,t&&(this.isPreload_=t),this.expirationTimer_&&this.initialized_&&this.currentDrmInfo_&&this.expirationTimer_.tickEvery(this.config_.updateExpirationTime)}setSrcEquals(e){this.srcEquals_=e}initForStorage(e,t){return this.initializedForStorage_=!0,this.storedPersistentSessions_=new Map,this.usePersistentLicenses_=t,this.init_(e,!1)}initForPlayback(e,t,i=!0){this.storedPersistentSessions_=new Map;for(let r of t)this.storedPersistentSessions_.set(r,{initData:null,initDataType:null});for(let r of this.config_.persistentSessionsMetadata)this.storedPersistentSessions_.set(r.sessionId,{initData:r.initData,initDataType:r.initDataType});return this.usePersistentLicenses_=this.storedPersistentSessions_.size>0,this.init_(e,i)}async initForRemoval(e,t,i,r,s){let n=[];s.length&&n.push(s[0].contentType),r.length&&n.push(r[0].contentType);let a=r.length&&r[0].robustness||"",o=s.length&&s[0].robustness||"",c=u=>{let m=R.createDrmInfo(e,u,null);return m.licenseServerUri=t,m.serverCertificate=i,m.persistentStateRequired=!0,m.sessionType="persistent-license",m.audioRobustness=a,m.videoRobustness=o,m},d=re.createEmptyVariant(n);if(d.video){let u=c(s[0].encryptionScheme||"");d.video.drmInfos.push(u)}if(d.audio){let u=c(r[0].encryptionScheme||"");d.audio.drmInfos.push(u)}return await re.getDecodingInfosForVariants([d],!0,this.srcEquals_,[]),this.destroyer_.ensureNotDestroyed(),this.queryMediaKeys_([d])}async init_(e,t){v.assert(this.config_,"DrmEngine configure() must be called before init()!"),_i.configureClearKey(this.config_.clearKeys,e);let i=e.some(u=>!!(u.video&&u.video.drmInfos.length||u.audio&&u.audio.drmInfos.length)),r=ei.asMap(this.config_.servers),s=ei.asMap(this.config_.advanced||{});!i&&t&&_i.replaceDrmInfo_(e,r);let n=new WeakSet;for(let u of e){let m=this.getVariantDrmInfos_(u);for(let f of m)n.has(f)||(n.add(f),_i.fillInDrmInfoDefaults_(f,r,s,this.config_.keySystemsMapping))}let a=(u,m)=>{let f=[];for(let g of u){let _=g[m]||s.has(g.keySystem)&&s.get(g.keySystem)[m]||"";if(_==""&&de.isWidevineKeySystem(g.keySystem)&&(m=="audioRobustness"?_=[this.config_.defaultAudioRobustnessForWidevine]:m=="videoRobustness"&&(_=[this.config_.defaultVideoRobustnessForWidevine])),typeof _=="string")f.push(g);else if(Array.isArray(_)){_.length===0&&(_=[""]);for(let T of _)f.push(Object.assign({},g,{[m]:T}))}}return f},o=new WeakSet;for(let u of e)u.video&&!o.has(u.video)&&(u.video.drmInfos=a(u.video.drmInfos,"videoRobustness"),u.video.drmInfos=a(u.video.drmInfos,"audioRobustness"),o.add(u.video)),u.audio&&!o.has(u.audio)&&(u.audio.drmInfos=a(u.audio.drmInfos,"videoRobustness"),u.audio.drmInfos=a(u.audio.drmInfos,"audioRobustness"),o.add(u.audio));if(await re.getDecodingInfosForVariants(e,this.usePersistentLicenses_,this.srcEquals_,this.config_.preferredKeySystems),this.destroyer_.ensureNotDestroyed(),!(i||r.size>0))return this.initialized_=!0,Promise.resolve();let d=this.queryMediaKeys_(e);return i?d:d.catch(()=>{})}async attachMediaKeys_(){if(!this.video_.mediaKeys){if(this.mediaKeysAttached_){await this.mediaKeysAttached_,this.destroyer_.ensureNotDestroyed();return}try{this.mediaKeysAttached_=this.video_.setMediaKeys(this.mediaKeys_),await this.mediaKeysAttached_}catch(e){v.assert(e instanceof Error,"Wrong error type!"),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_ATTACH_TO_VIDEO,e.message))}this.destroyer_.ensureNotDestroyed()}}async onEncryptedEvent_(e){await this.attachMediaKeys_(),this.newInitData(e.initDataType,D.toUint8(e.initData))}async attach(e){if(this.video_===e)return;if(!this.mediaKeys_){this.eventManager_.listenOnce(e,"encrypted",n=>{this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.ENCRYPTED_CONTENT_WITHOUT_DRM_INFO))});return}let t=j.getDevice();this.video_=e,this.config_.delayLicenseRequestUntilPlayed&&this.eventManager_.listenOnce(this.video_,"play",()=>this.onPlay_());let i=t.getRemote(this.video_);i?this.eventManager_.listenMulti(i,["connect","connecting","disconnect"],()=>{this.closeOpenSessions_()}):"webkitCurrentPlaybackTargetIsWireless"in this.video_&&this.eventManager_.listen(this.video_,"webkitcurrentplaybacktargetiswirelesschanged",()=>this.closeOpenSessions_()),this.manifestInitData_=this.currentDrmInfo_&&this.currentDrmInfo_.initData.find(n=>n.initData.length>0)||null;let r=this.currentDrmInfo_.keySystem,s=t.needWaitForEncryptedEvent(r);!s&&(this.manifestInitData_||this.currentDrmInfo_.keySystem!=="com.apple.fps"||this.storedPersistentSessions_.size)&&await this.attachMediaKeys_(),this.createOrLoad().catch(()=>{}),(s||!this.manifestInitData_&&!this.storedPersistentSessions_.size&&!this.config_.parseInbandPsshEnabled)&&this.eventManager_.listen(this.video_,"encrypted",n=>this.onEncryptedEvent_(n))}hasManifestInitData(){return!!this.manifestInitData_}async setServerCertificate(){if(v.assert(this.initialized_,"Must call init() before setServerCertificate"),!(!this.mediaKeys_||!this.currentDrmInfo_)){if(this.currentDrmInfo_.serverCertificateUri&&(!this.currentDrmInfo_.serverCertificate||!this.currentDrmInfo_.serverCertificate.length)){let e=K.makeRequest([this.currentDrmInfo_.serverCertificateUri],this.config_.retryParameters);try{let i=await this.playerInterface_.netEngine.request(K.RequestType.SERVER_CERTIFICATE,e,{isPreload:this.isPreload_()}).promise;this.currentDrmInfo_.serverCertificate=D.toUint8(i.data)}catch(t){throw v.assert(t instanceof h,"Wrong NetworkingEngine error type!"),new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.SERVER_CERTIFICATE_REQUEST_FAILED,t)}if(this.destroyer_.destroyed())return}if(!(!this.currentDrmInfo_.serverCertificate||!this.currentDrmInfo_.serverCertificate.length))try{await this.mediaKeys_.setServerCertificate(this.currentDrmInfo_.serverCertificate)||p.warning("Server certificates are not supported by the key system. The server certificate has been ignored.")}catch(e){throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.INVALID_SERVER_CERTIFICATE,e.message)}}}async removeSession(e){v.assert(this.mediaKeys_,"Must call init() before removeSession");let t=await this.loadOfflineSession_(e,{initData:null,initDataType:null});if(!t)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to load session for removal: "+e);let i=[],r=this.activeSessions_.get(t);r&&(r.updatePromise=Promise.withResolvers(),i.push(r.updatePromise.promise)),p.v2("Attempting to remove session",e),i.push(t.remove()),await Promise.all(i),this.activeSessions_.delete(t)}async createOrLoad(){if(this.storedPersistentSessions_.size){if(this.storedPersistentSessions_.forEach((i,r)=>{this.loadOfflineSession_(r,i)}),await this.allSessionsLoaded_.promise,(this.currentDrmInfo_&&this.currentDrmInfo_.keyIds||new Set([])).size>0&&this.areAllKeysUsable_())return this.allSessionsLoaded_.promise;this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.allSessionsLoaded_.promise.catch(()=>{})}let e=(this.currentDrmInfo_?this.currentDrmInfo_.initData:[])||[];for(let t of e)this.newInitData(t.initDataType,t.initData);return this.areAllSessionsLoaded_()&&this.allSessionsLoaded_.resolve(),this.allSessionsLoaded_.promise}updateCurrentDrmInfo(e){this.currentDrmInfo_&&(this.currentDrmInfo_.mediaTypes!==e.mediaTypes&&(this.currentDrmInfo_.mediaTypes=e.mediaTypes),de.isClearKeyWihRawKey(e)&&(this.currentDrmInfo_=this.createDrmInfoByInfos_(this.currentDrmInfo_.keySystem,[this.currentDrmInfo_,e])))}newInitData(e,t){if(t.length){try{t=this.config_.initDataTransform(t,e,this.currentDrmInfo_)}catch(i){let r=i;i instanceof h||(r=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.INIT_DATA_TRANSFORM_ERROR,i)),this.onError_(r);return}if(this.config_.ignoreDuplicateInitData){let i=this.activeSessions_.values();for(let s of i)if(D.equal(t,s.initData)){p.debug("Ignoring duplicate init data.");return}let r=!1;if(this.storedPersistentSessions_.forEach((s,n)=>{!r&&D.equal(t,s.initData)&&(r=!0)}),r){p.debug("Ignoring duplicate init data.");return}}this.hasInitData_=!0,this.activeSessions_.size>0&&this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.allSessionsLoaded_.promise.catch(()=>{})),this.createSession(e,t,this.currentDrmInfo_.sessionType)}}initialized(){return this.initialized_}getSessionIds(){let e=this.activeSessions_.keys(),t=Qi.map(e,i=>i.sessionId);return Array.from(t)}getActiveSessionsMetadata(){let e=this.activeSessions_.keys(),t=Qi.map(e,i=>{let r=this.activeSessions_.get(i);return{sessionId:i.sessionId,sessionType:r.type,initData:r.initData,initDataType:r.initDataType}});return Array.from(t)}renewLicense(e){this.activeSessions_.forEach((t,i)=>{(e==null||i.sessionId==e)&&this.triggerRenewal_(i)})}async retryLicensing(e,t=.1){this.destroyer_.ensureNotDestroyed(),p.info("Retrying licensing for session",e.sessionId);let i=null,r=null;if(this.activeSessions_.forEach((a,o)=>{o.sessionId===e.sessionId&&(i=o,r=a)}),!i||!r)return p.warning("Session not found for retry:",e.sessionId),!1;if(!this.currentDrmInfo_)return p.warning("No DRM info available for retry"),!1;if(!r.initData||!r.initDataType)return p.error("Missing initData or initDataType for session retry"),!1;let s=r.initData,n=r.initDataType;t>0&&await it.delay(t);try{this.activeSessions_.delete(i),await this.closeSession_(i);let a=this.createSession(n,s,this.currentDrmInfo_.sessionType,!1);if(!a)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to create new session for license retry");return p.info("Successfully created new session for retry:",a.sessionId),!0}catch(a){return p.error("Failed to retry licensing:",a),!1}}getExpiration(){let e=1/0,t=this.activeSessions_.keys();for(let i of t)isNaN(i.expiration)||(e=Math.min(e,i.expiration));return e}getLicenseTime(){return this.licenseTimeSeconds_?this.licenseTimeSeconds_:NaN}getDrmInfo(){return this.currentDrmInfo_}getMediaKeys(){return this.mediaKeys_}getKeyStatuses(){return ei.asObject(this.announcedKeyStatusByKeyId_)}async queryMediaKeys_(e){let t=new Map,i=this.getKeySystemAccessFromVariants_(e,t);if(!i)throw navigator.requestMediaKeySystemAccess?new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE):new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.MISSING_EME_SUPPORT);this.destroyer_.ensureNotDestroyed();try{let r=i.getConfiguration();p.v2("Got MediaKeySystemAccess with configuration",r);let s=this.config_.keySystemsMapping[i.keySystem]||i.keySystem;if(this.currentDrmInfo_=this.createDrmInfoByInfos_(s,t.get(s)),!this.currentDrmInfo_.licenseServerUri)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.NO_LICENSE_SERVER_GIVEN,this.currentDrmInfo_.keySystem);let n=await i.createMediaKeys();if(this.destroyer_.ensureNotDestroyed(),p.info("Created MediaKeys object for key system",this.currentDrmInfo_.keySystem),this.mediaKeys_=n,this.config_.minHdcpVersion!=""&&"getStatusForPolicy"in this.mediaKeys_)try{if(await this.mediaKeys_.getStatusForPolicy({minHdcpVersion:this.config_.minHdcpVersion})!="usable")throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.MIN_HDCP_VERSION_NOT_MATCH);this.destroyer_.ensureNotDestroyed()}catch(a){throw a instanceof h?a:new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.ERROR_CHECKING_HDCP_VERSION,a.message)}this.initialized_=!0,this.expirationTimer_.tickEvery(this.config_.updateExpirationTime),await this.setServerCertificate(),this.destroyer_.ensureNotDestroyed()}catch(r){throw this.destroyer_.ensureNotDestroyed(r),this.currentDrmInfo_=null,r instanceof h?r:new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_CDM,r.message)}}getKeySystemAccessFromVariants_(e,t){for(let r of e){let s=this.getVariantDrmInfos_(r);for(let n of s)t.getOrInsertComputed(n.keySystem,()=>[]).push(n)}if(t.size==1&&t.has(""))throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.NO_RECOGNIZED_KEY_SYSTEMS);let i=this.config_.preferredKeySystems;if(!i.length){let r=ei.asMap(this.config_.servers);r.size==1&&(i=Array.from(r.keys()))}for(let r of i)for(let s of e){let n=s.decodingInfos.find(a=>a.supported&&a.keySystemAccess!=null&&a.keySystemAccess.keySystem==r);if(n)return n.keySystemAccess}for(let r of[!0,!1])for(let s of e)for(let n of s.decodingInfos){if(!n.supported||!n.keySystemAccess)continue;let a=n.keySystemAccess.keySystem;if(i.includes(a))continue;let o=t.get(a);!o&&this.config_.keySystemsMapping[a]&&(o=t.get(this.config_.keySystemsMapping[a]));for(let c of o)if(!!c.licenseServerUri==r)return n.keySystemAccess}return null}checkSessionsLoaded_(){this.areAllSessionsLoaded_()&&this.allSessionsLoaded_.resolve()}setLoadSessionTimeoutTimer_(e){new ae(()=>{e.loaded=!0,this.checkSessionsLoaded_()}).tickAfter(_i.SESSION_LOAD_TIMEOUT_)}async loadOfflineSession_(e,t){let i,r="persistent-license";try{p.v1("Attempting to load an offline session",e),i=this.mediaKeys_.createSession(r)}catch(n){let a=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,n.message);return this.onError_(a),Promise.reject(a)}this.eventManager_.listen(i,"message",(n=>this.onSessionMessage_(n))),this.eventManager_.listen(i,"keystatuseschange",n=>this.onKeyStatusesChange_(n));let s={initData:t.initData,initDataType:t.initDataType,loaded:!1,oldExpiration:1/0,updatePromise:null,type:r,lastRenewalTime:0,isRenewal:!1};this.activeSessions_.set(i,s);try{let n=await i.load(e);if(this.destroyer_.ensureNotDestroyed(),p.v2("Loaded offline session",e,n),!n){this.activeSessions_.delete(i);let a=this.config_.persistentSessionOnlinePlayback?h.Severity.RECOVERABLE:h.Severity.CRITICAL;this.onError_(new h(a,h.Category.DRM,h.Code.OFFLINE_SESSION_REMOVED)),s.loaded=!0}return this.setLoadSessionTimeoutTimer_(s),this.checkSessionsLoaded_(),i}catch(n){this.destroyer_.ensureNotDestroyed(n),this.activeSessions_.delete(i);let a=this.config_.persistentSessionOnlinePlayback?h.Severity.RECOVERABLE:h.Severity.CRITICAL;this.onError_(new h(a,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,n.message)),s.loaded=!0,this.checkSessionsLoaded_()}return Promise.resolve()}createSession(e,t,i,r=!1){v.assert(this.mediaKeys_,"mediaKeys_ should be valid when creating temporary session.");let s;try{p.info("Creating new",i,"session"),s=this.mediaKeys_.createSession(i)}catch(a){return this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,a.message)),null}this.eventManager_.listen(s,"message",(a=>this.onSessionMessage_(a))),this.eventManager_.listen(s,"keystatuseschange",a=>this.onKeyStatusesChange_(a));let n={initData:t,initDataType:e,loaded:!1,oldExpiration:1/0,updatePromise:null,type:i,lastRenewalTime:0,isRenewal:r};if(this.activeSessions_.set(s,n),s.closed.then(a=>{if(this.destroyer_.destroyed())return;let o=this.activeSessions_.get(s);o&&this.onSessionClosed_(s,o,a||"unknown")}).catch(a=>{p.warning("session.closed rejected:",a)}),this.config_.logLicenseExchange){let a=ne.toBase64(t);p.info("EME init data: type=",e,"data=",a)}return s.generateRequest(e,t).catch(a=>{if(this.destroyer_.destroyed())return;v.assert(a instanceof Error,"Wrong error type!"),this.activeSessions_.delete(s);let o=a.errorCode,c;o&&o.systemCode&&(c=o.systemCode,c<0&&(c+=Math.pow(2,32)),c="0x"+c.toString(16)),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_GENERATE_LICENSE_REQUEST,a.message,a,c))}),s}onSessionMessage_(e){this.delayLicenseRequest_()?this.mediaKeyMessageEvents_.push(e):this.sendLicenseRequest_(e)}delayLicenseRequest_(){return this.video_?this.config_.delayLicenseRequestUntilPlayed&&this.video_.paused&&!this.initialRequestsSent_:!this.initializedForStorage_&&this.config_.delayLicenseRequestUntilPlayed}async waitForActiveRequests(){this.hasInitData_&&!this.delayLicenseRequest_()&&(await this.allSessionsLoaded_.promise,await Promise.all(this.activeRequests_.map(e=>e.promise)))}async sendLicenseRequest_(e){let t=e.target;if(p.v1("Sending license request for session",t.sessionId,"of type",e.messageType),this.config_.logLicenseExchange){let m=ne.toBase64(e.message);p.info("EME license request",m)}let i=this.activeSessions_.get(t),r=this.currentDrmInfo_.licenseServerUri,s=this.config_.advanced[this.currentDrmInfo_.keySystem];e.messageType=="individualization-request"&&s&&s.individualizationServer&&(r=s.individualizationServer);let n=K.RequestType.LICENSE,a=K.makeRequest([r],this.config_.retryParameters);if(a.body=e.message,a.method="POST",a.licenseRequestType=e.messageType,a.sessionId=t.sessionId,a.drmInfo=this.currentDrmInfo_,i&&(a.initData=i.initData,a.initDataType=i.initDataType,i.isRenewal&&(a.licenseRequestType="license-renewal")),s&&s.headers)for(let m in s.headers)a.headers[m]=s.headers[m];let o=de.isClearKeySystem(this.currentDrmInfo_.keySystem);o&&this.fixClearKeyRequest_(a,this.currentDrmInfo_),de.isPlayReadyKeySystem(this.currentDrmInfo_.keySystem)&&this.unpackPlayReadyRequest_(a);let c=Date.now(),d;try{let m=this.playerInterface_.netEngine.request(n,a,{isPreload:this.isPreload_()});this.activeRequests_.push(m),d=await m.promise,ye.remove(this.activeRequests_,m)}catch(m){if(this.destroyer_.destroyed())return;v.assert(m instanceof h,"Wrong NetworkingEngine error type!");let f={sessionId:t.sessionId,sessionType:i.type,initData:i.initData,initDataType:i.initDataType},g=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.LICENSE_REQUEST_FAILED,m,f);if(this.config_.failureCallback)try{this.config_.failureCallback(g)}catch(_){p.error("Error in failureCallback:",_)}if(g.handled){p.info("License request failure handled by failureCallback"),i&&i.updatePromise&&i.updatePromise.reject(g);return}this.activeSessions_.size==1?(this.onError_(g),i&&i.updatePromise&&i.updatePromise.reject(g)):(i&&i.updatePromise&&i.updatePromise.reject(g),this.activeSessions_.delete(t),this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.keyStatusTimer_.tickAfter(.1)));return}if(this.destroyer_.destroyed())return;if(this.licenseTimeSeconds_+=(Date.now()-c)/1e3,this.config_.logLicenseExchange){let m=ne.toBase64(d.data);p.info("EME license response",m)}o&&this.processClearKeyResponse_(d);try{p.v1("Updating session",t.sessionId),await t.update(d.data),i&&(i.lastRenewalTime=Date.now()/1e3)}catch(m){let f=m&&m.message||String(m),g=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.LICENSE_RESPONSE_REJECTED,f);this.onError_(g),i&&i.updatePromise&&i.updatePromise.reject(g);return}if(this.destroyer_.destroyed())return;let u=new U("drmsessionupdate");this.playerInterface_.onEvent(u),i&&(i.updatePromise&&i.updatePromise.resolve(),this.setLoadSessionTimeoutTimer_(i))}processClearKeyResponse_(e){let t=q.fromUTF8(e.data);try{let i=JSON.parse(t),r=new Map(i.keys.map(({kid:s,k:n})=>[de.normalizeClearKeyValue(s),de.normalizeClearKeyValue(n)]));if(!this.currentDrmInfo_.clearKeys)this.currentDrmInfo_.clearKeys=r;else for(let[s,n]of r)this.currentDrmInfo_.clearKeys.set(s,n)}catch(i){}}unpackPlayReadyRequest_(e){let t=q.fromUTF16(e.body,!0,!0);if(!t.includes("PlayReadyKeyMessage")){p.debug("PlayReady request is already unwrapped."),e.headers["Content-Type"]="text/xml; charset=utf-8";return}p.debug("Unwrapping PlayReady request.");let i=I.parseXmlString(t,"PlayReadyKeyMessage");v.assert(i,"Failed to parse PlayReady XML!");let r=I.getElementsByTagName(i,"HttpHeader");for(let n of r){let a=I.getElementsByTagName(n,"name")[0],o=I.getElementsByTagName(n,"value")[0];v.assert(a&&o,"Malformed PlayReady headers!"),e.headers[I.getTextContents(a)]=I.getTextContents(o)}let s=I.getElementsByTagName(i,"Challenge")[0];v.assert(s,"Malformed PlayReady challenge!"),v.assert(s.attributes.encoding=="base64encoded","Unexpected PlayReady challenge encoding!"),e.body=ne.fromBase64(I.getTextContents(s))}fixClearKeyRequest_(e,t){try{let i=q.fromBytesAutoDetect(e.body);if(i){let r=JSON.parse(i);r.type||(r.type=t.sessionType,e.body=q.toUTF8(JSON.stringify(r)))}}catch(i){p.info("Error unpacking ClearKey license",i)}}onKeyStatusesChange_(e){let t=e.target;p.v2("Key status changed for session",t.sessionId);let i=this.activeSessions_.get(t),r=t.keyStatuses,s=!1;r.forEach((a,o)=>{if(typeof o=="string"){let u=o;o=a,a=u}let c=j.getDevice();if(de.isPlayReadyKeySystem(this.currentDrmInfo_.keySystem)&&o.byteLength==16&&c.returnLittleEndianUsingPlayReady()){let u=D.toDataView(o),m=u.getUint32(0,!0),f=u.getUint16(4,!0),g=u.getUint16(6,!0);u.setUint32(0,m,!1),u.setUint16(4,f,!1),u.setUint16(6,g,!1)}i&&a!="status-pending"&&(i.loaded=!0),i||v.assert(a!="usable","Usable keys found in closed session"),a=="expired"&&(s=!0);let d=ne.toHex(o).slice(0,32);this.keyStatusByKeyId_.set(d,a)});let n=t.expiration-Date.now();(n<0||s&&n<1e3)&&i&&!i.updatePromise&&(p.debug("Session has expired",t.sessionId),this.activeSessions_.delete(t),this.closeSession_(t)),this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.keyStatusTimer_.tickAfter(_i.KEY_STATUS_BATCH_TIME))}processKeyStatusChanges_(){let e=this.keyStatusByKeyId_,t=this.announcedKeyStatusByKeyId_;t.clear(),e.forEach((s,n)=>t.set(n,s));let i=Array.from(t.values());i.length&&i.every(s=>s=="expired")&&this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.EXPIRED)),this.playerInterface_.onKeyStatus(ei.asObject(t))}static async probeSupport(){let e=["org.w3.clearkey","com.widevine.alpha","com.microsoft.playready","com.microsoft.playready.hardware","com.microsoft.playready.recommendation","com.microsoft.playready.recommendation.3000","com.microsoft.playready.recommendation.3000.clearlead","com.chromecast.playready","com.apple.fps.1_0","com.apple.fps","com.huawei.wiseplay"];if(!de.isBrowserSupported()){let _={};for(let T of e)_[T]=null;return _}let t=["1.0","1.1","1.2","1.3","1.4","2.0","2.1","2.2","2.3"],i=["SW_SECURE_CRYPTO","SW_SECURE_DECODE","HW_SECURE_CRYPTO","HW_SECURE_DECODE","HW_SECURE_ALL"],s={"com.widevine.alpha":i,"com.widevine.alpha.experiment":i,"com.microsoft.playready.recommendation":["150","2000","3000"]},o={videoCapabilities:[{contentType:'video/mp4; codecs="avc1.42E01E"'},{contentType:'video/webm; codecs="vp8"'}],audioCapabilities:[{contentType:'audio/mp4; codecs="mp4a.40.2"'},{contentType:'audio/webm; codecs="opus"'}],initDataTypes:["cenc","sinf","skd","keyids"]},c=[null,"cenc","cbcs"],d=new Map,u=j.getDevice(),m=async(_,T,b)=>{let S;try{if(u.createMediaKeysWhenCheckingSupport())S=await T.createMediaKeys();else throw new Error("Suppressing Firefox Windows DRM in testing!")}catch(V){return}let E=T.getConfiguration().sessionTypes,w=E?E.includes("persistent-license"):!1;u.misreportsSupportForPersistentLicenses()&&(w=!1);let A=T.getConfiguration().videoCapabilities,x=T.getConfiguration().audioCapabilities,M={persistentState:w,encryptionSchemes:[],videoRobustnessLevels:[],audioRobustnessLevels:[],minHdcpVersions:[]};d.get(_)?M=d.get(_):d.set(_,M);let C=A[0].encryptionScheme;C&&!M.encryptionSchemes.includes(C)&&M.encryptionSchemes.push(C);let k=A[0].robustness;k&&!M.videoRobustnessLevels.includes(k)&&M.videoRobustnessLevels.push(k);let L=x[0].robustness;if(L&&!M.audioRobustnessLevels.includes(L)&&M.audioRobustnessLevels.push(L),b&&"getStatusForPolicy"in S)for(let V of t){if(M.minHdcpVersions.includes(V))continue;if(await S.getStatusForPolicy({minHdcpVersion:V})=="usable")M.minHdcpVersions.includes(V)||M.minHdcpVersions.push(V);else break}},f=async(_,T,b,S,E=!1)=>{try{let w=Fe.cloneObject(o);for(let L of w.videoCapabilities)L.encryptionScheme=T,L.robustness=b;for(let L of w.audioCapabilities)L.encryptionScheme=T,L.robustness=S;let A=Fe.cloneObject(w);A.persistentState="required",A.sessionTypes=["persistent-license"];let x=[A,w],M=5,C;j.getDevice().getDeviceType()==ie.DeviceType.MOBILE?C=await it.promiseWithTimeout(M,navigator.requestMediaKeySystemAccess(_,x)):C=await navigator.requestMediaKeySystemAccess(_,x),await m(_,C,E)}catch(w){}},g=[];for(let _ of e){d.set(_,null);let T=!0;for(let b of c)g.push(f(_,b,"","",T)),T=!1;for(let b of s[_]||[])g.push(f(_,null,b,"")),g.push(f(_,null,"",b))}return await Promise.all(g),ei.asObject(d)}onPlay_(){for(let e of this.mediaKeyMessageEvents_)this.sendLicenseRequest_(e);this.initialRequestsSent_=!0,this.mediaKeyMessageEvents_=[]}async closeSession_(e){let t=null;try{t=(await it.promiseWithTimeout(_i.CLOSE_TIMEOUT_,Promise.all([e.close().catch(()=>{}),e.closed])))[1]}catch(i){p.warning("Timeout waiting for session close")}t&&this.handleSessionCloseReason_(e,t)}processSessionCloseReason_(e,t){e==="internal-error"?(p.error("CDM internal error. Cannot create new sessions."),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"CDM reported internal error"))):e==="closed-by-application"?p.v1("Session closed by application"):e==="release-acknowledged"?p.v1("Session closed: license release acknowledged"):e==="resource-evicted"?p.warning("Session closed: resources evicted"):e==="hardware-context-reset"?t?(p.warning("Hardware context reset detected. Recreating session..."),this.recreateSessionAfterHardwareReset_(t)):p.warning("Hardware context reset detected during app close"):p.warning("Session closed with unknown reason:",e)}handleSessionCloseReason_(e,t){p.info("Session closed with reason",t,"sessionId",e.sessionId),t!=="unknown"&&this.processSessionCloseReason_(t)}onSessionClosed_(e,t,i){i!=="unknown"&&(p.info("CDM closed session with reason",i,"sessionId",e.sessionId),this.activeSessions_.delete(e),this.processSessionCloseReason_(i,t))}recreateSessionAfterHardwareReset_(e){if(p.info("Recreating session after hardware context reset","initDataType",e.initDataType),!e.initDataType||!e.initData){p.error("Cannot recreate session: missing initData or initDataType"),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Cannot recreate session after hardware reset: missing metadata"));return}try{this.createSession(e.initDataType,e.initData,e.type),p.info("Session successfully recreated after hardware reset")}catch(t){p.error("Failed to recreate session after hardware reset:",t),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to recreate session after hardware context reset: "+t.message))}}async closeOpenSessions_(){let e=Array.from(this.activeSessions_.entries());this.activeSessions_.clear(),await Promise.all(e.map(async([t,i])=>{try{!this.initializedForStorage_&&!this.storedPersistentSessions_.has(t.sessionId)&&i.type==="persistent-license"&&!this.config_.persistentSessionOnlinePlayback?(p.v1("Removing session",t.sessionId),await t.remove()):(p.v1("Closing session",t.sessionId,i),await this.closeSession_(t))}catch(r){p.error("Failed to close or remove the session",r)}}))}getVariantDrmInfos_(e){let t=e.video?e.video.drmInfos:[],i=e.audio?e.audio.drmInfos:[];return t.concat(i)}pollExpiration_(){let e=Date.now()/1e3;this.activeSessions_.forEach((t,i)=>{let r=t.oldExpiration,s=i.expiration;if(isNaN(s)&&(s=1/0),s!=r&&(this.playerInterface_.onExpirationUpdated(i.sessionId,s),t.oldExpiration=s),this.config_.renewalIntervalSec>0){let n=e-t.lastRenewalTime;t.lastRenewalTime>0&&n>=this.config_.renewalIntervalSec&&this.triggerRenewal_(i)}})}async triggerRenewal_(e){p.info("Triggering license renewal for session",e.sessionId);let t=this.activeSessions_.get(e);if(t&&(t.lastRenewalTime=Date.now()/1e3),!this.currentDrmInfo_)return;let i=this.currentDrmInfo_.keySystem,r=e,s={sessionId:e.sessionId,sessionType:this.currentDrmInfo_.sessionType,initData:t?t.initData:null,initDataType:t?t.initDataType:null};try{if(de.isFairPlayKeySystem(i)){let c=q.toUTF8("renew");await e.update(c)}else if(de.isPlayReadyKeySystem(i)&&t&&t.initData&&t.initDataType)r=await this.requestPlayReadyLicenseForRenewal_(e,t);else{p.alwaysWarn("Manual license renewal is not supported for "+i);return}}catch(c){p.error("Failed to renew license:",c);return}let n=this.activeSessions_.get(r),a={sessionId:r.sessionId,sessionType:this.currentDrmInfo_.sessionType,initData:n?n.initData:null,initDataType:n?n.initDataType:null},o=new U("licenserenewal",new Map().set("oldSessionMetadata",s).set("newSessionMetadata",a));this.playerInterface_.onEvent(o)}async requestPlayReadyLicenseForRenewal_(e,t){v.assert(t.initDataType,"initDataType must be defined"),v.assert(t.initData,"initData must be defined"),this.activeSessions_.delete(e),await this.closeSession_(e);let i=this.createSession(t.initDataType,t.initData,this.currentDrmInfo_.sessionType,!0);if(!i)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to create new session for renewal");return i}areAllSessionsLoaded_(){let e=this.activeSessions_.values();return Qi.every(e,t=>t.loaded)}areAllKeysUsable_(){let e=this.currentDrmInfo_&&this.currentDrmInfo_.keyIds||new Set([]);for(let t of e)if(this.keyStatusByKeyId_.get(t)!=="usable")return!1;return!0}static replaceDrmInfo_(e,t){let i=[];t.forEach((r,s)=>{i.push({keySystem:s,licenseServerUri:r,distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",initData:[],keyIds:new Set})});for(let r of e)r.video&&(r.video.drmInfos=i),r.audio&&(r.audio.drmInfos=i)}createDrmInfoByInfos_(e,t){let i=[],r=[],s=[],n=[],a=[],o=new Set,c=new Set;_i.processDrmInfos_(t,i,r,n,s,a,o,c),i.length>1&&p.warning("Multiple unique encryption schemes found! Only the first will be used."),n.length>1&&p.warning("Multiple unique server certificates found! Only the first will be used."),r.length>1&&p.warning("Multiple unique license server URIs found! Only the first will be used."),s.length>1&&p.warning("Multiple unique server certificate URIs found! Only the first will be used.");let d=this.usePersistentLicenses_?"persistent-license":"temporary",u={keySystem:e,encryptionScheme:i[0],licenseServerUri:r[0],distinctiveIdentifierRequired:t[0].distinctiveIdentifierRequired,persistentStateRequired:t[0].persistentStateRequired,sessionType:t[0].sessionType||d,audioRobustness:t[0].audioRobustness||"",videoRobustness:t[0].videoRobustness||"",serverCertificate:n[0],serverCertificateUri:s[0],initData:a,keyIds:o,mediaTypes:t[0].mediaTypes};c.size>0&&(u.keySystemUris=c);for(let m of t)m.distinctiveIdentifierRequired&&(u.distinctiveIdentifierRequired=m.distinctiveIdentifierRequired),m.persistentStateRequired&&(u.persistentStateRequired=m.persistentStateRequired);return u}static processDrmInfos_(e,t,i,r,s,n,a,o){let c=(m,f)=>m.keyId&&m.keyId==f.keyId?!0:m.initDataType==f.initDataType&&D.equal(m.initData,f.initData),d="data:application/json;base64,",u=[];for(let m of e){if(t.includes(m.encryptionScheme)||t.push(m.encryptionScheme),de.isClearKeySystem(m.keySystem)&&m.licenseServerUri.startsWith(d)?u.includes(m.licenseServerUri)||u.push(m.licenseServerUri):i.includes(m.licenseServerUri)||i.push(m.licenseServerUri),s.includes(m.serverCertificateUri)||s.push(m.serverCertificateUri),m.serverCertificate&&(r.some(g=>D.equal(g,m.serverCertificate))||r.push(m.serverCertificate)),m.initData)for(let f of m.initData)n.some(_=>c(_,f))||n.push(f);if(m.keyIds)for(let f of m.keyIds)a.add(f);if(m.keySystemUris&&o)for(let f of m.keySystemUris)o.add(f)}if(u.length==1)i.push(u[0]);else if(u.length>0){let m=[];for(let _ of u){let T=window.atob(_.split(d).pop()),b=JSON.parse(T);m.push(...b.keys)}let g=JSON.stringify({keys:m});i.push(d+window.btoa(g))}}static fillInDrmInfoDefaults_(e,t,i,r){let s=e.keySystem;if(!s||de.isClearKeySystem(s)&&e.licenseServerUri)return;if(t.size&&t.get(s)){let a=t.get(s);e.licenseServerUri=a}e.keyIds||(e.keyIds=new Set);let n=i.get(s);n&&(e.distinctiveIdentifierRequired||(e.distinctiveIdentifierRequired=n.distinctiveIdentifierRequired),e.persistentStateRequired||(e.persistentStateRequired=n.persistentStateRequired),e.serverCertificate||(e.serverCertificate=n.serverCertificate),n.sessionType&&(e.sessionType=n.sessionType),e.serverCertificateUri||(e.serverCertificateUri=n.serverCertificateUri)),r[s]&&(e.keySystem=r[s]),window.cast&&window.cast.__platform__&&s=="com.microsoft.playready"&&(e.keySystem="com.chromecast.playready")}parseInbandPssh(e,t){if(!this.config_.parseInbandPsshEnabled||this.manifestInitData_)return Promise.resolve();let i=R.ContentType;if(![i.AUDIO,i.VIDEO].includes(e))return Promise.resolve();let r=new ti(D.toUint8(t)),s=0;for(let o of r.data)s+=o.length;if(s==0)return Promise.resolve();let n=new Uint8Array(s),a=0;for(let o of r.data)n.set(o,a),a+=o.length;return this.newInitData("cenc",n),this.allSessionsLoaded_.promise}static configureClearKey(e,t){let i=ei.asMap(e);if(i.size==0)return;let r=R.createDrmInfoFromClearKeys(i);for(let s of t)s.video&&(s.video.drmInfos=[r]),s.audio&&(s.audio.drmInfos=[r])}};l(_i,"CLOSE_TIMEOUT_",1),l(_i,"SESSION_LOAD_TIMEOUT_",5),l(_i,"KEY_STATUS_BATCH_TIME",.5);var Bi=_i;/*! @license
|
|
209
|
+
*/var _i=class _i{constructor(e){l(this,"playerInterface_");l(this,"mediaKeys_");l(this,"video_");l(this,"initialized_");l(this,"initializedForStorage_");l(this,"licenseTimeSeconds_");l(this,"currentDrmInfo_");l(this,"eventManager_");l(this,"activeSessions_");l(this,"activeRequests_");l(this,"storedPersistentSessions_");l(this,"hasInitData_");l(this,"allSessionsLoaded_");l(this,"config_");l(this,"onError_");l(this,"keyStatusByKeyId_");l(this,"announcedKeyStatusByKeyId_");l(this,"keyStatusTimer_");l(this,"usePersistentLicenses_");l(this,"mediaKeyMessageEvents_");l(this,"initialRequestsSent_");l(this,"expirationTimer_");l(this,"destroyer_");l(this,"srcEquals_");l(this,"mediaKeysAttached_");l(this,"manifestInitData_");l(this,"isPreload_");this.playerInterface_=e,this.mediaKeys_=null,this.video_=null,this.initialized_=!1,this.initializedForStorage_=!1,this.licenseTimeSeconds_=0,this.currentDrmInfo_=null,this.eventManager_=new ue,this.activeSessions_=new Map,this.activeRequests_=[],this.storedPersistentSessions_=new Map,this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.config_=null,this.onError_=i=>{i.severity==h.Severity.CRITICAL&&this.allSessionsLoaded_.reject(i),e.onError(i)},this.keyStatusByKeyId_=new Map,this.announcedKeyStatusByKeyId_=new Map,this.keyStatusTimer_=new ae(()=>this.processKeyStatusChanges_()),this.usePersistentLicenses_=!1,this.mediaKeyMessageEvents_=[],this.initialRequestsSent_=!1,this.expirationTimer_=new ae(()=>{this.pollExpiration_()});let t=()=>{};this.allSessionsLoaded_.promise.catch(t),this.destroyer_=new ci(()=>this.destroyNow_()),this.srcEquals_=!1,this.mediaKeysAttached_=null,this.manifestInitData_=null,this.isPreload_=()=>!1}destroy(){return this.destroyer_.destroy()}async destroyNow_(){if(this.eventManager_.release(),this.eventManager_=null,this.allSessionsLoaded_.reject(),this.expirationTimer_.stop(),this.expirationTimer_=null,this.keyStatusTimer_.stop(),this.keyStatusTimer_=null,await this.closeOpenSessions_(),this.video_){de.isMediaKeysPolyfilled("webkit")||v.assert(!this.video_.src&&!this.video_.getElementsByTagName("source").length,"video src must be removed first!");try{await this.video_.setMediaKeys(null)}catch(e){p.alwaysWarn("DrmEngine.destroyNow_ exception",e)}this.video_=null}this.currentDrmInfo_=null,this.mediaKeys_=null,this.storedPersistentSessions_=new Map,this.config_=null,this.onError_=()=>{},this.playerInterface_=null,this.srcEquals_=!1,this.mediaKeysAttached_=null}configure(e,t){this.config_=e,t&&(this.isPreload_=t),this.expirationTimer_&&this.initialized_&&this.currentDrmInfo_&&this.expirationTimer_.tickEvery(this.config_.updateExpirationTime)}setSrcEquals(e){this.srcEquals_=e}initForStorage(e,t){return this.initializedForStorage_=!0,this.storedPersistentSessions_=new Map,this.usePersistentLicenses_=t,this.init_(e,!1)}initForPlayback(e,t,i=!0){this.storedPersistentSessions_=new Map;for(let r of t)this.storedPersistentSessions_.set(r,{initData:null,initDataType:null});for(let r of this.config_.persistentSessionsMetadata)this.storedPersistentSessions_.set(r.sessionId,{initData:r.initData,initDataType:r.initDataType});return this.usePersistentLicenses_=this.storedPersistentSessions_.size>0,this.init_(e,i)}async initForRemoval(e,t,i,r,s){let n=[];s.length&&n.push(s[0].contentType),r.length&&n.push(r[0].contentType);let a=r.length&&r[0].robustness||"",o=s.length&&s[0].robustness||"",c=u=>{let m=R.createDrmInfo(e,u,null);return m.licenseServerUri=t,m.serverCertificate=i,m.persistentStateRequired=!0,m.sessionType="persistent-license",m.audioRobustness=a,m.videoRobustness=o,m},d=re.createEmptyVariant(n);if(d.video){let u=c(s[0].encryptionScheme||"");d.video.drmInfos.push(u)}if(d.audio){let u=c(r[0].encryptionScheme||"");d.audio.drmInfos.push(u)}return await re.getDecodingInfosForVariants([d],!0,this.srcEquals_,[]),this.destroyer_.ensureNotDestroyed(),this.queryMediaKeys_([d])}async init_(e,t){v.assert(this.config_,"DrmEngine configure() must be called before init()!"),_i.configureClearKey(this.config_.clearKeys,e);let i=e.some(u=>!!(u.video&&u.video.drmInfos.length||u.audio&&u.audio.drmInfos.length)),r=ei.asMap(this.config_.servers),s=ei.asMap(this.config_.advanced||{});!i&&t&&_i.replaceDrmInfo_(e,r);let n=new WeakSet;for(let u of e){let m=this.getVariantDrmInfos_(u);for(let f of m)n.has(f)||(n.add(f),_i.fillInDrmInfoDefaults_(f,r,s,this.config_.keySystemsMapping))}let a=(u,m)=>{let f=[];for(let g of u){let _=g[m]||s.has(g.keySystem)&&s.get(g.keySystem)[m]||"";if(_==""&&de.isWidevineKeySystem(g.keySystem)&&(m=="audioRobustness"?_=[this.config_.defaultAudioRobustnessForWidevine]:m=="videoRobustness"&&(_=[this.config_.defaultVideoRobustnessForWidevine])),typeof _=="string")f.push(g);else if(Array.isArray(_)){_.length===0&&(_=[""]);for(let T of _)f.push(Object.assign({},g,{[m]:T}))}}return f},o=new WeakSet;for(let u of e)u.video&&!o.has(u.video)&&(u.video.drmInfos=a(u.video.drmInfos,"videoRobustness"),u.video.drmInfos=a(u.video.drmInfos,"audioRobustness"),o.add(u.video)),u.audio&&!o.has(u.audio)&&(u.audio.drmInfos=a(u.audio.drmInfos,"videoRobustness"),u.audio.drmInfos=a(u.audio.drmInfos,"audioRobustness"),o.add(u.audio));if(await re.getDecodingInfosForVariants(e,this.usePersistentLicenses_,this.srcEquals_,this.config_.preferredKeySystems),this.destroyer_.ensureNotDestroyed(),!(i||r.size>0))return this.initialized_=!0,Promise.resolve();let d=this.queryMediaKeys_(e);return i?d:d.catch(()=>{})}async attachMediaKeys_(){if(!this.video_.mediaKeys){if(this.mediaKeysAttached_){await this.mediaKeysAttached_,this.destroyer_.ensureNotDestroyed();return}try{this.mediaKeysAttached_=this.video_.setMediaKeys(this.mediaKeys_),await this.mediaKeysAttached_}catch(e){v.assert(e instanceof Error,"Wrong error type!"),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_ATTACH_TO_VIDEO,e.message))}this.destroyer_.ensureNotDestroyed()}}async onEncryptedEvent_(e){await this.attachMediaKeys_(),this.newInitData(e.initDataType,U.toUint8(e.initData))}async attach(e){if(this.video_===e)return;if(!this.mediaKeys_){this.eventManager_.listenOnce(e,"encrypted",n=>{this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.ENCRYPTED_CONTENT_WITHOUT_DRM_INFO))});return}let t=j.getDevice();this.video_=e,this.config_.delayLicenseRequestUntilPlayed&&this.eventManager_.listenOnce(this.video_,"play",()=>this.onPlay_());let i=t.getRemote(this.video_);i?this.eventManager_.listenMulti(i,["connect","connecting","disconnect"],()=>{this.closeOpenSessions_()}):"webkitCurrentPlaybackTargetIsWireless"in this.video_&&this.eventManager_.listen(this.video_,"webkitcurrentplaybacktargetiswirelesschanged",()=>this.closeOpenSessions_()),this.manifestInitData_=this.currentDrmInfo_&&this.currentDrmInfo_.initData.find(n=>n.initData.length>0)||null;let r=this.currentDrmInfo_.keySystem,s=t.needWaitForEncryptedEvent(r);!s&&(this.manifestInitData_||this.currentDrmInfo_.keySystem!=="com.apple.fps"||this.storedPersistentSessions_.size)&&await this.attachMediaKeys_(),this.createOrLoad().catch(()=>{}),(s||!this.manifestInitData_&&!this.storedPersistentSessions_.size&&!this.config_.parseInbandPsshEnabled)&&this.eventManager_.listen(this.video_,"encrypted",n=>this.onEncryptedEvent_(n))}hasManifestInitData(){return!!this.manifestInitData_}async setServerCertificate(){if(v.assert(this.initialized_,"Must call init() before setServerCertificate"),!(!this.mediaKeys_||!this.currentDrmInfo_)){if(this.currentDrmInfo_.serverCertificateUri&&(!this.currentDrmInfo_.serverCertificate||!this.currentDrmInfo_.serverCertificate.length)){let e=K.makeRequest([this.currentDrmInfo_.serverCertificateUri],this.config_.retryParameters);try{let i=await this.playerInterface_.netEngine.request(K.RequestType.SERVER_CERTIFICATE,e,{isPreload:this.isPreload_()}).promise;this.currentDrmInfo_.serverCertificate=U.toUint8(i.data)}catch(t){throw v.assert(t instanceof h,"Wrong NetworkingEngine error type!"),new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.SERVER_CERTIFICATE_REQUEST_FAILED,t)}if(this.destroyer_.destroyed())return}if(!(!this.currentDrmInfo_.serverCertificate||!this.currentDrmInfo_.serverCertificate.length))try{await this.mediaKeys_.setServerCertificate(this.currentDrmInfo_.serverCertificate)||p.warning("Server certificates are not supported by the key system. The server certificate has been ignored.")}catch(e){throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.INVALID_SERVER_CERTIFICATE,e.message)}}}async removeSession(e){v.assert(this.mediaKeys_,"Must call init() before removeSession");let t=await this.loadOfflineSession_(e,{initData:null,initDataType:null});if(!t)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to load session for removal: "+e);let i=[],r=this.activeSessions_.get(t);r&&(r.updatePromise=Promise.withResolvers(),i.push(r.updatePromise.promise)),p.v2("Attempting to remove session",e),i.push(t.remove()),await Promise.all(i),this.activeSessions_.delete(t)}async createOrLoad(){if(this.storedPersistentSessions_.size){if(this.storedPersistentSessions_.forEach((i,r)=>{this.loadOfflineSession_(r,i)}),await this.allSessionsLoaded_.promise,(this.currentDrmInfo_&&this.currentDrmInfo_.keyIds||new Set([])).size>0&&this.areAllKeysUsable_())return this.allSessionsLoaded_.promise;this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.allSessionsLoaded_.promise.catch(()=>{})}let e=(this.currentDrmInfo_?this.currentDrmInfo_.initData:[])||[];for(let t of e)this.newInitData(t.initDataType,t.initData);return this.areAllSessionsLoaded_()&&this.allSessionsLoaded_.resolve(),this.allSessionsLoaded_.promise}updateCurrentDrmInfo(e){this.currentDrmInfo_&&(this.currentDrmInfo_.mediaTypes!==e.mediaTypes&&(this.currentDrmInfo_.mediaTypes=e.mediaTypes),de.isClearKeyWihRawKey(e)&&(this.currentDrmInfo_=this.createDrmInfoByInfos_(this.currentDrmInfo_.keySystem,[this.currentDrmInfo_,e])))}newInitData(e,t){if(t.length){try{t=this.config_.initDataTransform(t,e,this.currentDrmInfo_)}catch(i){let r=i;i instanceof h||(r=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.INIT_DATA_TRANSFORM_ERROR,i)),this.onError_(r);return}if(this.config_.ignoreDuplicateInitData){let i=this.activeSessions_.values();for(let s of i)if(U.equal(t,s.initData)){p.debug("Ignoring duplicate init data.");return}let r=!1;if(this.storedPersistentSessions_.forEach((s,n)=>{!r&&U.equal(t,s.initData)&&(r=!0)}),r){p.debug("Ignoring duplicate init data.");return}}this.hasInitData_=!0,this.activeSessions_.size>0&&this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.hasInitData_=!1,this.allSessionsLoaded_=Promise.withResolvers(),this.allSessionsLoaded_.promise.catch(()=>{})),this.createSession(e,t,this.currentDrmInfo_.sessionType)}}initialized(){return this.initialized_}getSessionIds(){let e=this.activeSessions_.keys(),t=Qi.map(e,i=>i.sessionId);return Array.from(t)}getActiveSessionsMetadata(){let e=this.activeSessions_.keys(),t=Qi.map(e,i=>{let r=this.activeSessions_.get(i);return{sessionId:i.sessionId,sessionType:r.type,initData:r.initData,initDataType:r.initDataType}});return Array.from(t)}renewLicense(e){this.activeSessions_.forEach((t,i)=>{(e==null||i.sessionId==e)&&this.triggerRenewal_(i)})}async retryLicensing(e,t=.1){this.destroyer_.ensureNotDestroyed(),p.info("Retrying licensing for session",e.sessionId);let i=null,r=null;if(this.activeSessions_.forEach((a,o)=>{o.sessionId===e.sessionId&&(i=o,r=a)}),!i||!r)return p.warning("Session not found for retry:",e.sessionId),!1;if(!this.currentDrmInfo_)return p.warning("No DRM info available for retry"),!1;if(!r.initData||!r.initDataType)return p.error("Missing initData or initDataType for session retry"),!1;let s=r.initData,n=r.initDataType;t>0&&await it.delay(t);try{this.activeSessions_.delete(i),await this.closeSession_(i);let a=this.createSession(n,s,this.currentDrmInfo_.sessionType,!1);if(!a)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to create new session for license retry");return p.info("Successfully created new session for retry:",a.sessionId),!0}catch(a){return p.error("Failed to retry licensing:",a),!1}}getExpiration(){let e=1/0,t=this.activeSessions_.keys();for(let i of t)isNaN(i.expiration)||(e=Math.min(e,i.expiration));return e}getLicenseTime(){return this.licenseTimeSeconds_?this.licenseTimeSeconds_:NaN}getDrmInfo(){return this.currentDrmInfo_}getMediaKeys(){return this.mediaKeys_}getKeyStatuses(){return ei.asObject(this.announcedKeyStatusByKeyId_)}async queryMediaKeys_(e){let t=new Map,i=this.getKeySystemAccessFromVariants_(e,t);if(!i)throw navigator.requestMediaKeySystemAccess?new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.REQUESTED_KEY_SYSTEM_CONFIG_UNAVAILABLE):new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.MISSING_EME_SUPPORT);this.destroyer_.ensureNotDestroyed();try{let r=i.getConfiguration();p.v2("Got MediaKeySystemAccess with configuration",r);let s=this.config_.keySystemsMapping[i.keySystem]||i.keySystem;if(this.currentDrmInfo_=this.createDrmInfoByInfos_(s,t.get(s)),!this.currentDrmInfo_.licenseServerUri)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.NO_LICENSE_SERVER_GIVEN,this.currentDrmInfo_.keySystem);let n=await i.createMediaKeys();if(this.destroyer_.ensureNotDestroyed(),p.info("Created MediaKeys object for key system",this.currentDrmInfo_.keySystem),this.mediaKeys_=n,this.config_.minHdcpVersion!=""&&"getStatusForPolicy"in this.mediaKeys_)try{if(await this.mediaKeys_.getStatusForPolicy({minHdcpVersion:this.config_.minHdcpVersion})!="usable")throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.MIN_HDCP_VERSION_NOT_MATCH);this.destroyer_.ensureNotDestroyed()}catch(a){throw a instanceof h?a:new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.ERROR_CHECKING_HDCP_VERSION,a.message)}this.initialized_=!0,this.expirationTimer_.tickEvery(this.config_.updateExpirationTime),await this.setServerCertificate(),this.destroyer_.ensureNotDestroyed()}catch(r){throw this.destroyer_.ensureNotDestroyed(r),this.currentDrmInfo_=null,r instanceof h?r:new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_CDM,r.message)}}getKeySystemAccessFromVariants_(e,t){for(let r of e){let s=this.getVariantDrmInfos_(r);for(let n of s)t.getOrInsertComputed(n.keySystem,()=>[]).push(n)}if(t.size==1&&t.has(""))throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.NO_RECOGNIZED_KEY_SYSTEMS);let i=this.config_.preferredKeySystems;if(!i.length){let r=ei.asMap(this.config_.servers);r.size==1&&(i=Array.from(r.keys()))}for(let r of i)for(let s of e){let n=s.decodingInfos.find(a=>a.supported&&a.keySystemAccess!=null&&a.keySystemAccess.keySystem==r);if(n)return n.keySystemAccess}for(let r of[!0,!1])for(let s of e)for(let n of s.decodingInfos){if(!n.supported||!n.keySystemAccess)continue;let a=n.keySystemAccess.keySystem;if(i.includes(a))continue;let o=t.get(a);!o&&this.config_.keySystemsMapping[a]&&(o=t.get(this.config_.keySystemsMapping[a]));for(let c of o)if(!!c.licenseServerUri==r)return n.keySystemAccess}return null}checkSessionsLoaded_(){this.areAllSessionsLoaded_()&&this.allSessionsLoaded_.resolve()}setLoadSessionTimeoutTimer_(e){new ae(()=>{e.loaded=!0,this.checkSessionsLoaded_()}).tickAfter(_i.SESSION_LOAD_TIMEOUT_)}async loadOfflineSession_(e,t){let i,r="persistent-license";try{p.v1("Attempting to load an offline session",e),i=this.mediaKeys_.createSession(r)}catch(n){let a=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,n.message);return this.onError_(a),Promise.reject(a)}this.eventManager_.listen(i,"message",(n=>this.onSessionMessage_(n))),this.eventManager_.listen(i,"keystatuseschange",n=>this.onKeyStatusesChange_(n));let s={initData:t.initData,initDataType:t.initDataType,loaded:!1,oldExpiration:1/0,updatePromise:null,type:r,lastRenewalTime:0,isRenewal:!1};this.activeSessions_.set(i,s);try{let n=await i.load(e);if(this.destroyer_.ensureNotDestroyed(),p.v2("Loaded offline session",e,n),!n){this.activeSessions_.delete(i);let a=this.config_.persistentSessionOnlinePlayback?h.Severity.RECOVERABLE:h.Severity.CRITICAL;this.onError_(new h(a,h.Category.DRM,h.Code.OFFLINE_SESSION_REMOVED)),s.loaded=!0}return this.setLoadSessionTimeoutTimer_(s),this.checkSessionsLoaded_(),i}catch(n){this.destroyer_.ensureNotDestroyed(n),this.activeSessions_.delete(i);let a=this.config_.persistentSessionOnlinePlayback?h.Severity.RECOVERABLE:h.Severity.CRITICAL;this.onError_(new h(a,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,n.message)),s.loaded=!0,this.checkSessionsLoaded_()}return Promise.resolve()}createSession(e,t,i,r=!1){v.assert(this.mediaKeys_,"mediaKeys_ should be valid when creating temporary session.");let s;try{p.info("Creating new",i,"session"),s=this.mediaKeys_.createSession(i)}catch(a){return this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,a.message)),null}this.eventManager_.listen(s,"message",(a=>this.onSessionMessage_(a))),this.eventManager_.listen(s,"keystatuseschange",a=>this.onKeyStatusesChange_(a));let n={initData:t,initDataType:e,loaded:!1,oldExpiration:1/0,updatePromise:null,type:i,lastRenewalTime:0,isRenewal:r};if(this.activeSessions_.set(s,n),s.closed.then(a=>{if(this.destroyer_.destroyed())return;let o=this.activeSessions_.get(s);o&&this.onSessionClosed_(s,o,a||"unknown")}).catch(a=>{p.warning("session.closed rejected:",a)}),this.config_.logLicenseExchange){let a=ne.toBase64(t);p.info("EME init data: type=",e,"data=",a)}return s.generateRequest(e,t).catch(a=>{if(this.destroyer_.destroyed())return;v.assert(a instanceof Error,"Wrong error type!"),this.activeSessions_.delete(s);let o=a.errorCode,c;o&&o.systemCode&&(c=o.systemCode,c<0&&(c+=Math.pow(2,32)),c="0x"+c.toString(16)),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_GENERATE_LICENSE_REQUEST,a.message,a,c))}),s}onSessionMessage_(e){this.delayLicenseRequest_()?this.mediaKeyMessageEvents_.push(e):this.sendLicenseRequest_(e)}delayLicenseRequest_(){return this.video_?this.config_.delayLicenseRequestUntilPlayed&&this.video_.paused&&!this.initialRequestsSent_:!this.initializedForStorage_&&this.config_.delayLicenseRequestUntilPlayed}async waitForActiveRequests(){this.hasInitData_&&!this.delayLicenseRequest_()&&(await this.allSessionsLoaded_.promise,await Promise.all(this.activeRequests_.map(e=>e.promise)))}async sendLicenseRequest_(e){let t=e.target;if(p.v1("Sending license request for session",t.sessionId,"of type",e.messageType),this.config_.logLicenseExchange){let m=ne.toBase64(e.message);p.info("EME license request",m)}let i=this.activeSessions_.get(t),r=this.currentDrmInfo_.licenseServerUri,s=this.config_.advanced[this.currentDrmInfo_.keySystem];e.messageType=="individualization-request"&&s&&s.individualizationServer&&(r=s.individualizationServer);let n=K.RequestType.LICENSE,a=K.makeRequest([r],this.config_.retryParameters);if(a.body=e.message,a.method="POST",a.licenseRequestType=e.messageType,a.sessionId=t.sessionId,a.drmInfo=this.currentDrmInfo_,i&&(a.initData=i.initData,a.initDataType=i.initDataType,i.isRenewal&&(a.licenseRequestType="license-renewal")),s&&s.headers)for(let m in s.headers)a.headers[m]=s.headers[m];let o=de.isClearKeySystem(this.currentDrmInfo_.keySystem);o&&this.fixClearKeyRequest_(a,this.currentDrmInfo_),de.isPlayReadyKeySystem(this.currentDrmInfo_.keySystem)&&this.unpackPlayReadyRequest_(a);let c=Date.now(),d;try{let m=this.playerInterface_.netEngine.request(n,a,{isPreload:this.isPreload_()});this.activeRequests_.push(m),d=await m.promise,ye.remove(this.activeRequests_,m)}catch(m){if(this.destroyer_.destroyed())return;v.assert(m instanceof h,"Wrong NetworkingEngine error type!");let f={sessionId:t.sessionId,sessionType:i.type,initData:i.initData,initDataType:i.initDataType},g=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.LICENSE_REQUEST_FAILED,m,f);if(this.config_.failureCallback)try{this.config_.failureCallback(g)}catch(_){p.error("Error in failureCallback:",_)}if(g.handled){p.info("License request failure handled by failureCallback"),i&&i.updatePromise&&i.updatePromise.reject(g);return}this.activeSessions_.size==1?(this.onError_(g),i&&i.updatePromise&&i.updatePromise.reject(g)):(i&&i.updatePromise&&i.updatePromise.reject(g),this.activeSessions_.delete(t),this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.keyStatusTimer_.tickAfter(.1)));return}if(this.destroyer_.destroyed())return;if(this.licenseTimeSeconds_+=(Date.now()-c)/1e3,this.config_.logLicenseExchange){let m=ne.toBase64(d.data);p.info("EME license response",m)}o&&this.processClearKeyResponse_(d);try{p.v1("Updating session",t.sessionId),await t.update(d.data),i&&(i.lastRenewalTime=Date.now()/1e3)}catch(m){let f=m&&m.message||String(m),g=new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.LICENSE_RESPONSE_REJECTED,f);this.onError_(g),i&&i.updatePromise&&i.updatePromise.reject(g);return}if(this.destroyer_.destroyed())return;let u=new L("drmsessionupdate");this.playerInterface_.onEvent(u),i&&(i.updatePromise&&i.updatePromise.resolve(),this.setLoadSessionTimeoutTimer_(i))}processClearKeyResponse_(e){let t=q.fromUTF8(e.data);try{let i=JSON.parse(t),r=new Map(i.keys.map(({kid:s,k:n})=>[de.normalizeClearKeyValue(s),de.normalizeClearKeyValue(n)]));if(!this.currentDrmInfo_.clearKeys)this.currentDrmInfo_.clearKeys=r;else for(let[s,n]of r)this.currentDrmInfo_.clearKeys.set(s,n)}catch(i){}}unpackPlayReadyRequest_(e){let t=q.fromUTF16(e.body,!0,!0);if(!t.includes("PlayReadyKeyMessage")){p.debug("PlayReady request is already unwrapped."),e.headers["Content-Type"]="text/xml; charset=utf-8";return}p.debug("Unwrapping PlayReady request.");let i=I.parseXmlString(t,"PlayReadyKeyMessage");v.assert(i,"Failed to parse PlayReady XML!");let r=I.getElementsByTagName(i,"HttpHeader");for(let n of r){let a=I.getElementsByTagName(n,"name")[0],o=I.getElementsByTagName(n,"value")[0];v.assert(a&&o,"Malformed PlayReady headers!"),e.headers[I.getTextContents(a)]=I.getTextContents(o)}let s=I.getElementsByTagName(i,"Challenge")[0];v.assert(s,"Malformed PlayReady challenge!"),v.assert(s.attributes.encoding=="base64encoded","Unexpected PlayReady challenge encoding!"),e.body=ne.fromBase64(I.getTextContents(s))}fixClearKeyRequest_(e,t){try{let i=q.fromBytesAutoDetect(e.body);if(i){let r=JSON.parse(i);r.type||(r.type=t.sessionType,e.body=q.toUTF8(JSON.stringify(r)))}}catch(i){p.info("Error unpacking ClearKey license",i)}}onKeyStatusesChange_(e){let t=e.target;p.v2("Key status changed for session",t.sessionId);let i=this.activeSessions_.get(t),r=t.keyStatuses,s=!1;r.forEach((a,o)=>{if(typeof o=="string"){let u=o;o=a,a=u}let c=j.getDevice();if(de.isPlayReadyKeySystem(this.currentDrmInfo_.keySystem)&&o.byteLength==16&&c.returnLittleEndianUsingPlayReady()){let u=U.toDataView(o),m=u.getUint32(0,!0),f=u.getUint16(4,!0),g=u.getUint16(6,!0);u.setUint32(0,m,!1),u.setUint16(4,f,!1),u.setUint16(6,g,!1)}i&&a!="status-pending"&&(i.loaded=!0),i||v.assert(a!="usable","Usable keys found in closed session"),a=="expired"&&(s=!0);let d=ne.toHex(o).slice(0,32);this.keyStatusByKeyId_.set(d,a)});let n=t.expiration-Date.now();(n<0||s&&n<1e3)&&i&&!i.updatePromise&&(p.debug("Session has expired",t.sessionId),this.activeSessions_.delete(t),this.closeSession_(t)),this.areAllSessionsLoaded_()&&(this.allSessionsLoaded_.resolve(),this.keyStatusTimer_.tickAfter(_i.KEY_STATUS_BATCH_TIME))}processKeyStatusChanges_(){let e=this.keyStatusByKeyId_,t=this.announcedKeyStatusByKeyId_;t.clear(),e.forEach((s,n)=>t.set(n,s));let i=Array.from(t.values());i.length&&i.every(s=>s=="expired")&&this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.EXPIRED)),this.playerInterface_.onKeyStatus(ei.asObject(t))}static async probeSupport(){let e=["org.w3.clearkey","com.widevine.alpha","com.microsoft.playready","com.microsoft.playready.hardware","com.microsoft.playready.recommendation","com.microsoft.playready.recommendation.3000","com.microsoft.playready.recommendation.3000.clearlead","com.chromecast.playready","com.apple.fps.1_0","com.apple.fps","com.huawei.wiseplay"];if(!de.isBrowserSupported()){let _={};for(let T of e)_[T]=null;return _}let t=["1.0","1.1","1.2","1.3","1.4","2.0","2.1","2.2","2.3"],i=["SW_SECURE_CRYPTO","SW_SECURE_DECODE","HW_SECURE_CRYPTO","HW_SECURE_DECODE","HW_SECURE_ALL"],s={"com.widevine.alpha":i,"com.widevine.alpha.experiment":i,"com.microsoft.playready.recommendation":["150","2000","3000"]},o={videoCapabilities:[{contentType:'video/mp4; codecs="avc1.42E01E"'},{contentType:'video/webm; codecs="vp8"'}],audioCapabilities:[{contentType:'audio/mp4; codecs="mp4a.40.2"'},{contentType:'audio/webm; codecs="opus"'}],initDataTypes:["cenc","sinf","skd","keyids"]},c=[null,"cenc","cbcs"],d=new Map,u=j.getDevice(),m=async(_,T,b)=>{let S;try{if(u.createMediaKeysWhenCheckingSupport())S=await T.createMediaKeys();else throw new Error("Suppressing Firefox Windows DRM in testing!")}catch(V){return}let E=T.getConfiguration().sessionTypes,w=E?E.includes("persistent-license"):!1;u.misreportsSupportForPersistentLicenses()&&(w=!1);let A=T.getConfiguration().videoCapabilities,x=T.getConfiguration().audioCapabilities,M={persistentState:w,encryptionSchemes:[],videoRobustnessLevels:[],audioRobustnessLevels:[],minHdcpVersions:[]};d.get(_)?M=d.get(_):d.set(_,M);let C=A[0].encryptionScheme;C&&!M.encryptionSchemes.includes(C)&&M.encryptionSchemes.push(C);let k=A[0].robustness;k&&!M.videoRobustnessLevels.includes(k)&&M.videoRobustnessLevels.push(k);let D=x[0].robustness;if(D&&!M.audioRobustnessLevels.includes(D)&&M.audioRobustnessLevels.push(D),b&&"getStatusForPolicy"in S)for(let V of t){if(M.minHdcpVersions.includes(V))continue;if(await S.getStatusForPolicy({minHdcpVersion:V})=="usable")M.minHdcpVersions.includes(V)||M.minHdcpVersions.push(V);else break}},f=async(_,T,b,S,E=!1)=>{try{let w=Fe.cloneObject(o);for(let D of w.videoCapabilities)D.encryptionScheme=T,D.robustness=b;for(let D of w.audioCapabilities)D.encryptionScheme=T,D.robustness=S;let A=Fe.cloneObject(w);A.persistentState="required",A.sessionTypes=["persistent-license"];let x=[A,w],M=5,C;j.getDevice().getDeviceType()==ie.DeviceType.MOBILE?C=await it.promiseWithTimeout(M,navigator.requestMediaKeySystemAccess(_,x)):C=await navigator.requestMediaKeySystemAccess(_,x),await m(_,C,E)}catch(w){}},g=[];for(let _ of e){d.set(_,null);let T=!0;for(let b of c)g.push(f(_,b,"","",T)),T=!1;for(let b of s[_]||[])g.push(f(_,null,b,"")),g.push(f(_,null,"",b))}return await Promise.all(g),ei.asObject(d)}onPlay_(){for(let e of this.mediaKeyMessageEvents_)this.sendLicenseRequest_(e);this.initialRequestsSent_=!0,this.mediaKeyMessageEvents_=[]}async closeSession_(e){let t=null;try{t=(await it.promiseWithTimeout(_i.CLOSE_TIMEOUT_,Promise.all([e.close().catch(()=>{}),e.closed])))[1]}catch(i){p.warning("Timeout waiting for session close")}t&&this.handleSessionCloseReason_(e,t)}processSessionCloseReason_(e,t){e==="internal-error"?(p.error("CDM internal error. Cannot create new sessions."),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"CDM reported internal error"))):e==="closed-by-application"?p.v1("Session closed by application"):e==="release-acknowledged"?p.v1("Session closed: license release acknowledged"):e==="resource-evicted"?p.warning("Session closed: resources evicted"):e==="hardware-context-reset"?t?(p.warning("Hardware context reset detected. Recreating session..."),this.recreateSessionAfterHardwareReset_(t)):p.warning("Hardware context reset detected during app close"):p.warning("Session closed with unknown reason:",e)}handleSessionCloseReason_(e,t){p.info("Session closed with reason",t,"sessionId",e.sessionId),t!=="unknown"&&this.processSessionCloseReason_(t)}onSessionClosed_(e,t,i){i!=="unknown"&&(p.info("CDM closed session with reason",i,"sessionId",e.sessionId),this.activeSessions_.delete(e),this.processSessionCloseReason_(i,t))}recreateSessionAfterHardwareReset_(e){if(p.info("Recreating session after hardware context reset","initDataType",e.initDataType),!e.initDataType||!e.initData){p.error("Cannot recreate session: missing initData or initDataType"),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Cannot recreate session after hardware reset: missing metadata"));return}try{this.createSession(e.initDataType,e.initData,e.type),p.info("Session successfully recreated after hardware reset")}catch(t){p.error("Failed to recreate session after hardware reset:",t),this.onError_(new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to recreate session after hardware context reset: "+t.message))}}async closeOpenSessions_(){let e=Array.from(this.activeSessions_.entries());this.activeSessions_.clear(),await Promise.all(e.map(async([t,i])=>{try{!this.initializedForStorage_&&!this.storedPersistentSessions_.has(t.sessionId)&&i.type==="persistent-license"&&!this.config_.persistentSessionOnlinePlayback?(p.v1("Removing session",t.sessionId),await t.remove()):(p.v1("Closing session",t.sessionId,i),await this.closeSession_(t))}catch(r){p.error("Failed to close or remove the session",r)}}))}getVariantDrmInfos_(e){let t=e.video?e.video.drmInfos:[],i=e.audio?e.audio.drmInfos:[];return t.concat(i)}pollExpiration_(){let e=Date.now()/1e3;this.activeSessions_.forEach((t,i)=>{let r=t.oldExpiration,s=i.expiration;if(isNaN(s)&&(s=1/0),s!=r&&(this.playerInterface_.onExpirationUpdated(i.sessionId,s),t.oldExpiration=s),this.config_.renewalIntervalSec>0){let n=e-t.lastRenewalTime;t.lastRenewalTime>0&&n>=this.config_.renewalIntervalSec&&this.triggerRenewal_(i)}})}async triggerRenewal_(e){p.info("Triggering license renewal for session",e.sessionId);let t=this.activeSessions_.get(e);if(t&&(t.lastRenewalTime=Date.now()/1e3),!this.currentDrmInfo_)return;let i=this.currentDrmInfo_.keySystem,r=e,s={sessionId:e.sessionId,sessionType:this.currentDrmInfo_.sessionType,initData:t?t.initData:null,initDataType:t?t.initDataType:null};try{if(de.isFairPlayKeySystem(i)){let c=q.toUTF8("renew");await e.update(c)}else if(de.isPlayReadyKeySystem(i)&&t&&t.initData&&t.initDataType)r=await this.requestPlayReadyLicenseForRenewal_(e,t);else{p.alwaysWarn("Manual license renewal is not supported for "+i);return}}catch(c){p.error("Failed to renew license:",c);return}let n=this.activeSessions_.get(r),a={sessionId:r.sessionId,sessionType:this.currentDrmInfo_.sessionType,initData:n?n.initData:null,initDataType:n?n.initDataType:null},o=new L("licenserenewal",new Map().set("oldSessionMetadata",s).set("newSessionMetadata",a));this.playerInterface_.onEvent(o)}async requestPlayReadyLicenseForRenewal_(e,t){v.assert(t.initDataType,"initDataType must be defined"),v.assert(t.initData,"initData must be defined"),this.activeSessions_.delete(e),await this.closeSession_(e);let i=this.createSession(t.initDataType,t.initData,this.currentDrmInfo_.sessionType,!0);if(!i)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.FAILED_TO_CREATE_SESSION,"Failed to create new session for renewal");return i}areAllSessionsLoaded_(){let e=this.activeSessions_.values();return Qi.every(e,t=>t.loaded)}areAllKeysUsable_(){let e=this.currentDrmInfo_&&this.currentDrmInfo_.keyIds||new Set([]);for(let t of e)if(this.keyStatusByKeyId_.get(t)!=="usable")return!1;return!0}static replaceDrmInfo_(e,t){let i=[];t.forEach((r,s)=>{i.push({keySystem:s,licenseServerUri:r,distinctiveIdentifierRequired:!1,persistentStateRequired:!1,audioRobustness:"",videoRobustness:"",serverCertificate:null,serverCertificateUri:"",initData:[],keyIds:new Set})});for(let r of e)r.video&&(r.video.drmInfos=i),r.audio&&(r.audio.drmInfos=i)}createDrmInfoByInfos_(e,t){let i=[],r=[],s=[],n=[],a=[],o=new Set,c=new Set;_i.processDrmInfos_(t,i,r,n,s,a,o,c),i.length>1&&p.warning("Multiple unique encryption schemes found! Only the first will be used."),n.length>1&&p.warning("Multiple unique server certificates found! Only the first will be used."),r.length>1&&p.warning("Multiple unique license server URIs found! Only the first will be used."),s.length>1&&p.warning("Multiple unique server certificate URIs found! Only the first will be used.");let d=this.usePersistentLicenses_?"persistent-license":"temporary",u={keySystem:e,encryptionScheme:i[0],licenseServerUri:r[0],distinctiveIdentifierRequired:t[0].distinctiveIdentifierRequired,persistentStateRequired:t[0].persistentStateRequired,sessionType:t[0].sessionType||d,audioRobustness:t[0].audioRobustness||"",videoRobustness:t[0].videoRobustness||"",serverCertificate:n[0],serverCertificateUri:s[0],initData:a,keyIds:o,mediaTypes:t[0].mediaTypes};c.size>0&&(u.keySystemUris=c);for(let m of t)m.distinctiveIdentifierRequired&&(u.distinctiveIdentifierRequired=m.distinctiveIdentifierRequired),m.persistentStateRequired&&(u.persistentStateRequired=m.persistentStateRequired);return u}static processDrmInfos_(e,t,i,r,s,n,a,o){let c=(m,f)=>m.keyId&&m.keyId==f.keyId?!0:m.initDataType==f.initDataType&&U.equal(m.initData,f.initData),d="data:application/json;base64,",u=[];for(let m of e){if(t.includes(m.encryptionScheme)||t.push(m.encryptionScheme),de.isClearKeySystem(m.keySystem)&&m.licenseServerUri.startsWith(d)?u.includes(m.licenseServerUri)||u.push(m.licenseServerUri):i.includes(m.licenseServerUri)||i.push(m.licenseServerUri),s.includes(m.serverCertificateUri)||s.push(m.serverCertificateUri),m.serverCertificate&&(r.some(g=>U.equal(g,m.serverCertificate))||r.push(m.serverCertificate)),m.initData)for(let f of m.initData)n.some(_=>c(_,f))||n.push(f);if(m.keyIds)for(let f of m.keyIds)a.add(f);if(m.keySystemUris&&o)for(let f of m.keySystemUris)o.add(f)}if(u.length==1)i.push(u[0]);else if(u.length>0){let m=[];for(let _ of u){let T=window.atob(_.split(d).pop()),b=JSON.parse(T);m.push(...b.keys)}let g=JSON.stringify({keys:m});i.push(d+window.btoa(g))}}static fillInDrmInfoDefaults_(e,t,i,r){let s=e.keySystem;if(!s||de.isClearKeySystem(s)&&e.licenseServerUri)return;if(t.size&&t.get(s)){let a=t.get(s);e.licenseServerUri=a}e.keyIds||(e.keyIds=new Set);let n=i.get(s);n&&(e.distinctiveIdentifierRequired||(e.distinctiveIdentifierRequired=n.distinctiveIdentifierRequired),e.persistentStateRequired||(e.persistentStateRequired=n.persistentStateRequired),e.serverCertificate||(e.serverCertificate=n.serverCertificate),n.sessionType&&(e.sessionType=n.sessionType),e.serverCertificateUri||(e.serverCertificateUri=n.serverCertificateUri)),r[s]&&(e.keySystem=r[s]),window.cast&&window.cast.__platform__&&s=="com.microsoft.playready"&&(e.keySystem="com.chromecast.playready")}parseInbandPssh(e,t){if(!this.config_.parseInbandPsshEnabled||this.manifestInitData_)return Promise.resolve();let i=R.ContentType;if(![i.AUDIO,i.VIDEO].includes(e))return Promise.resolve();let r=new ti(U.toUint8(t)),s=0;for(let o of r.data)s+=o.length;if(s==0)return Promise.resolve();let n=new Uint8Array(s),a=0;for(let o of r.data)n.set(o,a),a+=o.length;return this.newInitData("cenc",n),this.allSessionsLoaded_.promise}static configureClearKey(e,t){let i=ei.asMap(e);if(i.size==0)return;let r=R.createDrmInfoFromClearKeys(i);for(let s of t)s.video&&(s.video.drmInfos=[r]),s.audio&&(s.audio.drmInfos=[r])}};l(_i,"CLOSE_TIMEOUT_",1),l(_i,"SESSION_LOAD_TIMEOUT_",5),l(_i,"KEY_STATUS_BATCH_TIME",.5);var Bi=_i;/*! @license
|
|
210
210
|
* Shaka Player
|
|
211
211
|
* Copyright 2016 Google LLC
|
|
212
212
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -230,7 +230,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
230
230
|
* Shaka Player
|
|
231
231
|
* Copyright 2016 Google LLC
|
|
232
232
|
* SPDX-License-Identifier: Apache-2.0
|
|
233
|
-
*/var Es=class Es{constructor(){l(this,"drmInfo_");l(this,"keyMap_");l(this,"keyMapPromise_");l(this,"lastInit_");this.drmInfo_=null,this.keyMap_=new Map,this.keyMapPromise_=null,this.lastInit_=null}async decrypt(e,t,i){let r=
|
|
233
|
+
*/var Es=class Es{constructor(){l(this,"drmInfo_");l(this,"keyMap_");l(this,"keyMapPromise_");l(this,"lastInit_");this.drmInfo_=null,this.keyMap_=new Map,this.keyMapPromise_=null,this.lastInit_=null}async decrypt(e,t,i){let r=U.toUint8(e);return t?(this.lastInit_=r,this.stripEncryptionFromInit_(r)):this.lastInit_?(this.drmInfo_!==i&&(this.drmInfo_=i,this.keyMapPromise_=this.buildKeyMap_(this.drmInfo_),this.keyMap_=await this.keyMapPromise_,this.keyMapPromise_=null),this.decryptSegment_(r,this.lastInit_)):r}async destroy(){if(this.keyMapPromise_)try{await this.keyMapPromise_}catch(e){}this.drmInfo_=null,this.keyMap_.clear(),this.keyMapPromise_=null,this.lastInit_=null}async buildKeyMap_(e){let t=new Map;if(!e.clearKeys)return t;let i=await Promise.all([...e.clearKeys.entries()].map(([r,s])=>{let n=ne.fromBase64(s),a=ne.fromBase64(r);return Promise.all([crypto.subtle.importKey("raw",n,{name:"AES-CBC"},!1,["decrypt","encrypt"]),crypto.subtle.importKey("raw",n,{name:"AES-CTR"},!1,["decrypt"])]).then(([o,c])=>({kidHex:ne.toHex(a),cbc:o,ctr:c}))}));for(let{kidHex:r,cbc:s,ctr:n}of i)t.set(r,{cbc:s,ctr:n});return t}async decryptSegment_(e,t){let i=this.parseInitSegment_(t),r=this.parseMediaSegment_(e,i),s=r.fragments.map(o=>{let c=i.get(o.trackId)||i.values().next().value;return this.decryptFragment_(o,e,c)}),n=await Promise.all(s),a=[e.slice(0,r.firstFragmentOffset),...n];return ne.concat(...a)}stripEncryptionFromInit_(e){let t=U.toUint8(e).slice(),i=U.toDataView(t),r=[],s=-1,n=a=>{r.push(()=>{i.setUint32(a.start+4,Es.BOX_TYPE_FREE_,!1),t.fill(0,a.start+8,a.start+a.size)})};new F().boxes(F.SAMPLE_TABLE_PATH,F.children).fullBox("stsd",F.sampleDescription).box("encv",a=>{s=a.start,F.visualSampleEntry(a)}).box("enca",a=>{s=a.start,F.audioSampleEntry(a)}).box("sinf",a=>{n(a),F.children(a)}).box("frma",a=>{let{codec:o}=pe.parseFRMA(a.reader),c=s;c!==-1&&o&&r.push(()=>{for(let d=0;d<4;++d)i.setUint8(c+4+d,o.charCodeAt(d))})}).fullBox("sgpd",n).box("pssh",n).parse(t,!0);for(let a of r)a();return t}parseInitSegment_(e){let t=new Map,i=0;return new F().boxes(["moov","mdia","minf","stbl"],F.children).box("trak",r=>{i=0,F.children(r)}).fullBox("tkhd",r=>{v.assert(r.version!=null,"TKHD is a full box and should have a valid version."),i=pe.parseTKHD(r.reader,r.version).trackId,t.getOrInsert(i,{defaultKID:"",encryptionScheme:"cenc",defaultIVSize:8,defaultConstantIV:null,defaultCryptByteBlock:0,defaultSkipByteBlock:0})}).fullBox("stsd",F.sampleDescription).box("encv",F.visualSampleEntry).box("enca",F.audioSampleEntry).box("sinf",F.children).fullBox("schm",r=>{let s=pe.parseSCHM(r.reader),n=t.get(i);n&&(n.encryptionScheme=s.encryptionScheme.toLowerCase())}).box("schi",F.children).fullBox("tenc",r=>{v.assert(r.version!=null,"TENC is a full box and should have a valid version.");let s=pe.parseTENC(r.reader,r.version),n=t.get(i);n&&(n.defaultKID=s.defaultKID,n.defaultIVSize=s.defaultPerSampleIVSize,n.defaultConstantIV=s.defaultConstantIV,n.defaultCryptByteBlock=s.defaultCryptByteBlock,n.defaultSkipByteBlock=s.defaultSkipByteBlock)}).parse(e,!0),t}parseMediaSegment_(e,t){let i=[],r=0,s=null,n=a=>{s&&s.boxesToFree.push({start:a.start,size:a.size})};return new F().box("moof",a=>{i.length||(r=a.start),s={moofStart:a.start,moofSize:a.size,mdatStart:-1,mdatSize:-1,sencInfo:null,tfhdDefaultSize:0,trackId:0,trunSamples:[],boxesToFree:[]},F.children(a)}).box("traf",F.children).fullBox("tfhd",a=>{if(!s)return;v.assert(a.flags!=null,"TFHD is a full box and should have valid flags.");let o=pe.parseTFHD(a.reader,a.flags);s.trackId=o.trackId,s.tfhdDefaultSize=o.defaultSampleSize||0}).fullBox("trun",a=>{if(!s)return;v.assert(a.version!=null&&a.flags!=null,"TRUN is a full box and should have a valid version & flags.");let o=pe.parseTRUN(a.reader,a.version,a.flags);for(let c of o.sampleData)s.trunSamples.push({size:c.sampleSize||s.tfhdDefaultSize})}).fullBox("senc",a=>{if(!s)return;v.assert(a.flags!=null,"SENC is a full box and should have valid flags.");let o=t.get(s.trackId);o&&(s.sencInfo=pe.parseSENC(a.reader,a.flags,o.defaultIVSize,o.defaultConstantIV)),n(a)}).fullBoxes(["saiz","saio","sgpd","sbgp"],n).box("pssh",n).box("mdat",a=>{s&&(s.mdatStart=a.start,s.mdatSize=a.size,i.push(s),s=null)}).parse(e),{fragments:i,firstFragmentOffset:r}}async decryptFragment_(e,t,i){let r=i.defaultKID,s=this.keyMap_.get(r);if(!s)return p.warning("[ClearKeyDecryptor] No key found for KID:",r),t.slice(e.moofStart,e.mdatStart+e.mdatSize);let n=i.encryptionScheme,a=e.sencInfo;if(a&&i.defaultIVSize!==8){let _=t.subarray(e.moofStart,e.moofStart+e.moofSize);new F().boxes(F.FRAGMENT_PATH,F.children).fullBox("senc",T=>{v.assert(T.flags!=null,"SENC is a full box and should have valid flags."),a=pe.parseSENC(T.reader,T.flags,i.defaultIVSize,i.defaultConstantIV)}).parse(_,!1)}let o=e.mdatStart+8,c=t.subarray(o,o+e.mdatSize-8),d=await this.decryptMdat_(c,e.trunSamples.map(_=>_.size),a,i,s,n),u=t.slice(e.moofStart,e.moofStart+e.moofSize),m=U.toDataView(u);if(e.boxesToFree)for(let _ of e.boxesToFree){let T=_.start-e.moofStart;T>=0&&T+_.size<=u.byteLength&&(m.setUint32(T+4,Es.BOX_TYPE_FREE_,!1),u.fill(0,T+8,T+_.size))}let f=8+d.byteLength,g=new Uint8Array(f);return U.toDataView(g).setUint32(0,f,!1),g.set([109,100,97,116],4),g.set(d,8),ne.concat(u,g)}async decryptMdat_(e,t,i,r,s,n){let a=new Uint8Array(e.byteLength),o=0,c=t.map((u,m)=>{let f=o;o+=u;let g=e.subarray(f,f+u);if(i&&i.samples[m]){let _=i.samples[m],T=r.defaultIVSize===16?16:8,b=new Uint8Array(16);if(b.set(_.iv.slice(0,T),0),n==="cenc")return this.decryptSampleCenc_(g,b,_.subsamples,s).then(E=>({offset:f,dec:E}));let S=r.defaultConstantIV||b;return this.decryptSampleCbcs_(g,S,_.subsamples,r,s).then(E=>({offset:f,dec:E}))}return n==="cbcs"&&r.defaultConstantIV?this.decryptSampleCbcs_(g,r.defaultConstantIV,null,r,s).then(_=>({offset:f,dec:_})):Promise.resolve({offset:f,dec:g})}),d=await Promise.all(c);for(let{offset:u,dec:m}of d)a.set(m,u);return a}async decryptSampleCenc_(e,t,i,r){if(!i||!i.length)return U.toUint8(await crypto.subtle.decrypt({name:"AES-CTR",counter:t,length:64},r.ctr,e));let s=new Uint8Array(e.byteLength),n=0,a=0,o=i.map(d=>{let u=n;if(n+=d.clearBytes,d.encryptedBytes===0)return Promise.resolve({clearStart:u,clearLen:d.clearBytes,encStart:n,encLen:0,decrypted:null});let m=t.slice();this.addCounterOffset_(m,a);let f=n;n+=d.encryptedBytes,a+=Math.ceil(d.encryptedBytes/16);let g=e.subarray(f,f+d.encryptedBytes);return crypto.subtle.decrypt({name:"AES-CTR",counter:m,length:64},r.ctr,g).then(_=>({clearStart:u,clearLen:d.clearBytes,encStart:f,encLen:d.encryptedBytes,decrypted:U.toUint8(_)}))}),c=await Promise.all(o);for(let d of c)s.set(e.subarray(d.clearStart,d.clearStart+d.clearLen),d.clearStart),d.decrypted&&s.set(d.decrypted,d.encStart);return s}async decryptSampleCbcs_(e,t,i,r,s){let n=r.defaultCryptByteBlock,a=r.defaultSkipByteBlock;n===0&&(n=1,a=0);let o=new Uint8Array(e.byteLength),c=[],d=t,u=(m,f)=>{let g=m,_=m+f;for(;g<_;){let T=_-g,b=Math.min(n*16,T);if(b>=16){let E=Math.floor(b/16)*16,w=g,A=b-E,x=g+E,M=d;c.push(this.rawCBCDecrypt_(e.subarray(w,w+E),M,s.cbc).then(C=>{o.set(C,w),A>0&&o.set(e.subarray(x,x+A),x)})),d=e.slice(w+E-16,w+E),g+=E+A}else o.set(e.subarray(g,g+b),g),g+=b;let S=Math.min(a*16,_-g);S>0&&(o.set(e.subarray(g,g+S),g),g+=S)}};if(!i||!i.length)u(0,e.byteLength);else{let m=0;for(let f of i){let g=m;if(m+=f.clearBytes,o.set(e.subarray(g,g+f.clearBytes),g),f.encryptedBytes>0){let _=m;m+=f.encryptedBytes,u(_,f.encryptedBytes)}}}return await Promise.all(c),o}async rawCBCDecrypt_(e,t,i){if(!e||!e.byteLength||e.byteLength%16!==0)return new Uint8Array(0);let r=e.byteLength/16,n=e.subarray((r-1)*16,r*16).map(m=>16^m),a=new Uint8Array(16),o=await crypto.subtle.encrypt({name:"AES-CBC",iv:a},i,n),c=new Uint8Array(o,0,16),d=new Uint8Array(e.byteLength+16);d.set(e,0),d.set(c,e.byteLength);let u=await crypto.subtle.decrypt({name:"AES-CBC",iv:t},i,d);return U.toUint8(u)}addCounterOffset_(e,t){let i=t;for(let r=15;r>=8&&i>0;r--)i+=e[r],e[r]=i&255,i>>>=8}static shouldUse(e){var t;return!e||!((t=window.crypto)!=null&&t.subtle)||!de.isClearKeySystem(e.keySystem)?!1:!j.getDevice().hasWorkingClearKeySupport()}};l(Es,"BOX_TYPE_FREE_",1718773093);var As=Es;/*! @license
|
|
234
234
|
* Shaka Player
|
|
235
235
|
* Copyright 2016 Google LLC
|
|
236
236
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -238,15 +238,15 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
238
238
|
* Shaka Player
|
|
239
239
|
* Copyright 2016 Google LLC
|
|
240
240
|
* SPDX-License-Identifier: Apache-2.0
|
|
241
|
-
*/var te=class te{constructor(e=[]){l(this,"streamInfos_");this.streamInfos_=e}initSegment(){let e=this.moov_(),t=te.FTYP_.value(),i=t.byteLength+e.byteLength,r=new Uint8Array(i);return r.set(t),r.set(e,t.byteLength),r}moov_(){if(this.streamInfos_.length===0)throw new Error("StreamInfos must have elements");let e=[];for(let i of this.streamInfos_)e.push(this.trak_(i));let t=this.streamInfos_[0];return te.box("moov",this.mvhd_(t),...e,this.mvex_(),this.psshs(t.stream))}mvhd_(e){let t=e.duration*e.timescale,i=Math.floor(t/(te.UINT32_MAX_+1)),r=Math.floor(t%(te.UINT32_MAX_+1)),s=te.MVHD_TEMPLATE_.value();return this.writeUint32_(s,e.timescale,20),this.writeUint32_(s,i,24),this.writeUint32_(s,r,28),te.box("mvhd",s)}trak_(e){return te.box("trak",this.tkhd_(e),this.mdia_(e))}tkhd_(e){let t=R.ContentType,i=e.id+1,r=e.stream.width||0,s=e.stream.height||0;e.type==t.AUDIO&&(r=0,s=0);let n=e.duration*e.timescale,a=Math.floor(n/(te.UINT32_MAX_+1)),o=Math.floor(n%(te.UINT32_MAX_+1)),c=te.TKHD_TEMPLATE_.value();return this.writeUint32_(c,i,20),this.writeUint32_(c,a,28),this.writeUint32_(c,o,32),this.writeUint16_(c,r,88),this.writeUint16_(c,s,92),te.box("tkhd",c)}mdia_(e){return te.box("mdia",this.mdhd_(e),this.hdlr_(e),this.minf_(e))}mdhd_(e){let t=e.duration*e.timescale,i=Math.floor(t/(te.UINT32_MAX_+1)),r=Math.floor(t%(te.UINT32_MAX_+1)),s=e.stream.language,n=s.charCodeAt(0)-96<<10|s.charCodeAt(1)-96<<5|s.charCodeAt(2)-96,a=te.MDHD_TEMPLATE_.value();return this.writeUint32_(a,e.timescale,20),this.writeUint32_(a,i,24),this.writeUint32_(a,r,28),this.writeUint16_(a,n,32),te.box("mdhd",a)}hdlr_(e){let t=R.ContentType,i=new Uint8Array([]);switch(e.type){case t.VIDEO:i=te.HDLR_TYPES_.video.value();break;case t.AUDIO:i=te.HDLR_TYPES_.audio.value();break}return te.box("hdlr",i)}minf_(e){let t=R.ContentType;switch(e.type){case t.VIDEO:return te.box("minf",te.box("vmhd",te.VMHD_.value()),te.DINF_.value(),this.stbl_(e));case t.AUDIO:return te.box("minf",te.box("smhd",te.SMHD_.value()),te.DINF_.value(),this.stbl_(e))}return new Uint8Array([])}stbl_(e){return te.box("stbl",this.stsd_(e),te.STTS_BOX_.value(),te.STSC_BOX_.value(),te.STSZ_BOX_.value(),te.STCO_BOX_.value())}stsd_(e){let t=R.ContentType,i="aac";e.codecs.includes("mp3")?i="mp3":e.codecs.includes("ac-3")?j.getDevice().requiresEC3InitSegments()?i="ec-3":i="ac-3":e.codecs.includes("ec-3")?i="ec-3":e.codecs.includes("opus")&&(i="opus");let r=new Uint8Array([]);switch(e.type){case t.VIDEO:e.codecs.includes("avc1")?r=this.avc1_(e):e.codecs.includes("hvc1")&&(r=this.hvc1_(e));break;case t.AUDIO:i=="mp3"?r=this.mp3_(e):i=="ac-3"?r=this.ac3_(e):i=="ec-3"?r=this.ec3_(e):i=="opus"?r=this.opus_(e):r=this.mp4a_(e);break}return te.box("stsd",te.STSD_.value(),r)}videoSampleEntry_(e,t,i){let r=e.stream.width||0,s=e.stream.height||0,n=new Uint8Array([]);e.mediaConfig.byteLength>0&&(n=te.box(i,e.mediaConfig));let a=te.VIDEO_SAMPLE_ENTRY_TEMPLATE_.value();this.writeUint16_(a,r,24),this.writeUint16_(a,s,26);let o=this.pasp_(e),c=new Uint8Array([]),d=t;return te.isStreamEncrypted_(e.stream)&&(c=this.sinf(e.stream,e.codecs),d="encv"),te.box(d,a,n,o,c)}avc1_(e){return this.videoSampleEntry_(e,"avc1","avcC")}hvc1_(e){return this.videoSampleEntry_(e,"hvc1","hvcC")}pasp_(e){if(!e.hSpacing&&!e.vSpacing)return new Uint8Array([]);let t=e.hSpacing||0,i=e.vSpacing||0,r=te.allocBox_("pasp",8);return this.writeUint32_(r,t,te.BOX_HEADER_SIZE_),this.writeUint32_(r,i,te.BOX_HEADER_SIZE_+4),r}audioStsd_(e){let t=e.stream.channelsCount||2,i=e.stream.audioSamplingRate||44100,r=te.AUDIO_STSD_TEMPLATE_.value();return r[17]=t,this.writeUint16_(r,i,24),r}mp3_(e){return te.box(".mp3",this.audioStsd_(e))}ac3_(e){let t=te.box("dac3",e.mediaConfig),i="ac-3",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}ec3_(e){let t=te.box("dec3",e.mediaConfig),i="ec-3",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}opus_(e){let t=te.box("dOps",e.mediaConfig),i="Opus",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}mp4a_(e){let t;e.mediaConfig.byteLength>0?t=te.box("esds",e.mediaConfig):t=te.box("esds",this.esds_(e));let i="mp4a",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}esds_(e){let t=R.ContentType,i=e.id+1,r=e.stream.channelsCount||2,s=e.stream.audioSamplingRate||44100,n=R.guessCodecs(t.AUDIO,e.codecs.split(",")),a={96e3:0,88200:1,64e3:2,48e3:3,44100:4,32e3:5,24e3:6,22050:7,16e3:8,12e3:9,11025:10,8e3:11,7350:12},o=a[s];(n==="mp4a.40.5"||n==="mp4a.40.29")&&(o=a[s*2]);let c=parseInt(n.split(".").pop(),10),d=te.ESDS_TEMPLATE_.value();return this.writeUint16_(d,i,6),d[26]=c<<3|o>>>1,d[27]=o<<7|r<<3,d}mvex_(){let e=[];for(let t of this.streamInfos_)e.push(this.trex_(t));return te.box("mvex",...e)}trex_(e){let t=e.id+1,i=te.TREX_TEMPLATE_.value();return this.writeUint32_(i,t,4),te.box("trex",i)}psshs(e){let t=[];if(!te.isStreamEncrypted_(e))return new Uint8Array([]);for(let r of e.drmInfos)if(r.initData)for(let s of r.initData)t.push(s.initData);return ne.concat(...t)}sinf(e,t){return te.box("sinf",this.frma_(t),this.schm_(e),this.schi_(e))}frma_(e){let t=e.split(".")[0],i=te.BOX_HEADER_SIZE_,r=te.allocBox_("frma",4);return this.writeUint32_(r,this.stringToCharCode_(t),i),r}schm_(e){let t="cenc",i=e.drmInfos[0];i&&i.encryptionScheme&&(t=i.encryptionScheme);let r=te.SCHM_TEMPLATE_.value();return this.writeUint32_(r,this.stringToCharCode_(t),4),te.box("schm",r)}schi_(e){return te.box("schi",this.tenc_(e))}tenc_(e){let t=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);for(let i of e.drmInfos)if(i&&i.keyIds&&i.keyIds.size)for(let r of i.keyIds)t=this.hexStringToBuffer_(r);return v.assert(t,"Default KID should be non-null"),te.box("tenc",te.TENC_HEADER_.value(),t)}segmentData(){let e=te.BOX_HEADER_SIZE_,t=[],i=0;for(let n of this.streamInfos_){let a=this.moof_(n),o=n.data?n.data.samples:[],c=0;for(let u of o)c+=u.data.byteLength;let d=e+c;t.push({moof:a,samples:o,mdatSize:d}),i+=a.byteLength+d}let r=D.toUint8(new ArrayBuffer(i)),s=0;for(let{moof:n,samples:a,mdatSize:o}of t){r.set(n,s),s+=n.byteLength,this.writeUint32_(r,o,s),r.set(te.MDAT_TYPE_.value(),s+4),s+=e;for(let c of a)r.set(c.data,s),s+=c.data.byteLength}return r}moof_(e){return te.box("moof",this.mfhd_(e),this.traf_(e))}mfhd_(e){let t=e.data?e.data.sequenceNumber:0,i=te.allocBox_("mfhd",8);return this.writeUint32_(i,t,te.BOX_HEADER_SIZE_+4),i}traf_(e){let t=this.sdtp_(e),i=t.length+32+20+8+16+8+8;return te.box("traf",this.tfhd_(e),this.tfdt_(e),this.trun_(e,i),t)}sdtp_(e){let t=e.data?e.data.samples:[],i=te.allocBox_("sdtp",4+t.length),r=te.BOX_HEADER_SIZE_+4;for(let s=0;s<t.length;s++){let n=t[s].flags;i[s+r]=n.dependsOn<<4|n.isDependedOn<<2|n.hasRedundancy}return i}tfhd_(e){let t=e.id+1,i=te.TFHD_TEMPLATE_.value();return this.writeUint32_(i,t,4),te.box("tfhd",i)}tfdt_(e){let t=te.BOX_HEADER_SIZE_,i=e.data?e.data.baseMediaDecodeTime:0,r=Math.floor(i/(te.UINT32_MAX_+1)),s=Math.floor(i%(te.UINT32_MAX_+1)),n=te.allocBox_("tfdt",12);return n[t]=1,this.writeUint32_(n,r,t+4),this.writeUint32_(n,s,t+8),n}trun_(e,t){let i=R.ContentType,r=e.data?e.data.samples:[],s=r.length,n=12+16*s,a=te.allocBox_("trun",n);t+=te.BOX_HEADER_SIZE_+n;let o=e.type===i.VIDEO;a[te.BOX_HEADER_SIZE_]=o?1:0,a[te.BOX_HEADER_SIZE_+1]=0,a[te.BOX_HEADER_SIZE_+2]=15,a[te.BOX_HEADER_SIZE_+3]=1,this.writeUint32_(a,s,te.BOX_HEADER_SIZE_+4),this.writeUint32_(a,t,te.BOX_HEADER_SIZE_+8);for(let c=0;c<s;c++){let d=r[c],u=d.flags,m=te.BOX_HEADER_SIZE_+12+16*c;this.writeUint32_(a,d.duration,m),this.writeUint32_(a,d.size,m+4),a[m+8]=u.isLeading<<2|u.dependsOn,a[m+9]=u.isDependedOn<<6|u.hasRedundancy<<4|u.isNonSync,a[m+10]=u.degradPrio&61440,a[m+11]=u.degradPrio&15,this.writeUint32_(a,d.cts,m+12)}return a}writeUint32_(e,t,i){e[i]=t>>>24&255,e[i+1]=t>>>16&255,e[i+2]=t>>>8&255,e[i+3]=t&255}writeUint16_(e,t,i){e[i]=t>>>8&255,e[i+1]=t&255}hexStringToBuffer_(e){let t=new Uint8Array(e.length/2);for(let i=0;i<e.length/2;i+=1)t[i]=parseInt(String(e[i*2]+e[i*2+1]),16);return t}stringToCharCode_(e){let t=0;for(let i=0;i<e.length;i+=1)t|=e.charCodeAt(i)<<(e.length-i-1)*8;return t}static box(e,...t){let i=0;for(let n of t)i+=n.byteLength;let r=te.allocBox_(e,i),s=te.BOX_HEADER_SIZE_;for(let n=0;n<t.length;n++)r.set(t[n],s),s+=t[n].byteLength;return r}static allocBox_(e,t){let i=te.BOX_TYPES_.get(e);i||(i=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)],te.BOX_TYPES_.set(e,i));let r=te.BOX_HEADER_SIZE_+t,s=new Uint8Array(r);return s[0]=r>>24&255,s[1]=r>>16&255,s[2]=r>>8&255,s[3]=r&255,s.set(i,4),s}static isStreamEncrypted_(e){return e.encrypted&&e.drmInfos.length>0}};l(te,"BOX_TYPES_",new Map),l(te,"BOX_HEADER_SIZE_",8);var xe=te;xe.UINT32_MAX_=Math.pow(2,32)-1;xe.MDAT_TYPE_=new _e(()=>new Uint8Array([109,100,97,116]));xe.MVHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]));xe.TKHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0]));xe.MDHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));xe.TREX_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]));xe.TFHD_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,58,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]));xe.ESDS_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,3,25,0,0,0,4,17,64,21,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,6,1,2]));xe.AUDIO_STSD_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0]));xe.VIDEO_SAMPLE_ENTRY_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]));xe.TENC_HEADER_=new _e(()=>new Uint8Array([0,0,0,0,0,0,1,8]));xe.SCHM_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,0,1,0,0]));xe.HDLR_TYPES_={video:new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0])),audio:new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]))};xe.VMHD_=new _e(()=>new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]));xe.SMHD_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0]));xe.STSD_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1]));xe.FTYP_=new _e(()=>{let y=new Uint8Array([105,115,111,109]),e=new Uint8Array([97,118,99,49]),t=new Uint8Array([0,0,0,1]);return xe.box("ftyp",y,t,y,e)});xe.DINF_=new _e(()=>{let y=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e=xe.box("dref",y);return xe.box("dinf",e)});xe.STTS_BOX_=new _e(()=>xe.allocBox_("stts",8));xe.STSC_BOX_=new _e(()=>xe.allocBox_("stsc",8));xe.STSZ_BOX_=new _e(()=>xe.allocBox_("stsz",12));xe.STCO_BOX_=new _e(()=>xe.allocBox_("stco",8));/*! @license
|
|
241
|
+
*/var te=class te{constructor(e=[]){l(this,"streamInfos_");this.streamInfos_=e}initSegment(){let e=this.moov_(),t=te.FTYP_.value(),i=t.byteLength+e.byteLength,r=new Uint8Array(i);return r.set(t),r.set(e,t.byteLength),r}moov_(){if(this.streamInfos_.length===0)throw new Error("StreamInfos must have elements");let e=[];for(let i of this.streamInfos_)e.push(this.trak_(i));let t=this.streamInfos_[0];return te.box("moov",this.mvhd_(t),...e,this.mvex_(),this.psshs(t.stream))}mvhd_(e){let t=e.duration*e.timescale,i=Math.floor(t/(te.UINT32_MAX_+1)),r=Math.floor(t%(te.UINT32_MAX_+1)),s=te.MVHD_TEMPLATE_.value();return this.writeUint32_(s,e.timescale,20),this.writeUint32_(s,i,24),this.writeUint32_(s,r,28),te.box("mvhd",s)}trak_(e){return te.box("trak",this.tkhd_(e),this.mdia_(e))}tkhd_(e){let t=R.ContentType,i=e.id+1,r=e.stream.width||0,s=e.stream.height||0;e.type==t.AUDIO&&(r=0,s=0);let n=e.duration*e.timescale,a=Math.floor(n/(te.UINT32_MAX_+1)),o=Math.floor(n%(te.UINT32_MAX_+1)),c=te.TKHD_TEMPLATE_.value();return this.writeUint32_(c,i,20),this.writeUint32_(c,a,28),this.writeUint32_(c,o,32),this.writeUint16_(c,r,88),this.writeUint16_(c,s,92),te.box("tkhd",c)}mdia_(e){return te.box("mdia",this.mdhd_(e),this.hdlr_(e),this.minf_(e))}mdhd_(e){let t=e.duration*e.timescale,i=Math.floor(t/(te.UINT32_MAX_+1)),r=Math.floor(t%(te.UINT32_MAX_+1)),s=e.stream.language,n=s.charCodeAt(0)-96<<10|s.charCodeAt(1)-96<<5|s.charCodeAt(2)-96,a=te.MDHD_TEMPLATE_.value();return this.writeUint32_(a,e.timescale,20),this.writeUint32_(a,i,24),this.writeUint32_(a,r,28),this.writeUint16_(a,n,32),te.box("mdhd",a)}hdlr_(e){let t=R.ContentType,i=new Uint8Array([]);switch(e.type){case t.VIDEO:i=te.HDLR_TYPES_.video.value();break;case t.AUDIO:i=te.HDLR_TYPES_.audio.value();break}return te.box("hdlr",i)}minf_(e){let t=R.ContentType;switch(e.type){case t.VIDEO:return te.box("minf",te.box("vmhd",te.VMHD_.value()),te.DINF_.value(),this.stbl_(e));case t.AUDIO:return te.box("minf",te.box("smhd",te.SMHD_.value()),te.DINF_.value(),this.stbl_(e))}return new Uint8Array([])}stbl_(e){return te.box("stbl",this.stsd_(e),te.STTS_BOX_.value(),te.STSC_BOX_.value(),te.STSZ_BOX_.value(),te.STCO_BOX_.value())}stsd_(e){let t=R.ContentType,i="aac";e.codecs.includes("mp3")?i="mp3":e.codecs.includes("ac-3")?j.getDevice().requiresEC3InitSegments()?i="ec-3":i="ac-3":e.codecs.includes("ec-3")?i="ec-3":e.codecs.includes("opus")&&(i="opus");let r=new Uint8Array([]);switch(e.type){case t.VIDEO:e.codecs.includes("avc1")?r=this.avc1_(e):e.codecs.includes("hvc1")&&(r=this.hvc1_(e));break;case t.AUDIO:i=="mp3"?r=this.mp3_(e):i=="ac-3"?r=this.ac3_(e):i=="ec-3"?r=this.ec3_(e):i=="opus"?r=this.opus_(e):r=this.mp4a_(e);break}return te.box("stsd",te.STSD_.value(),r)}videoSampleEntry_(e,t,i){let r=e.stream.width||0,s=e.stream.height||0,n=new Uint8Array([]);e.mediaConfig.byteLength>0&&(n=te.box(i,e.mediaConfig));let a=te.VIDEO_SAMPLE_ENTRY_TEMPLATE_.value();this.writeUint16_(a,r,24),this.writeUint16_(a,s,26);let o=this.pasp_(e),c=new Uint8Array([]),d=t;return te.isStreamEncrypted_(e.stream)&&(c=this.sinf(e.stream,e.codecs),d="encv"),te.box(d,a,n,o,c)}avc1_(e){return this.videoSampleEntry_(e,"avc1","avcC")}hvc1_(e){return this.videoSampleEntry_(e,"hvc1","hvcC")}pasp_(e){if(!e.hSpacing&&!e.vSpacing)return new Uint8Array([]);let t=e.hSpacing||0,i=e.vSpacing||0,r=te.allocBox_("pasp",8);return this.writeUint32_(r,t,te.BOX_HEADER_SIZE_),this.writeUint32_(r,i,te.BOX_HEADER_SIZE_+4),r}audioStsd_(e){let t=e.stream.channelsCount||2,i=e.stream.audioSamplingRate||44100,r=te.AUDIO_STSD_TEMPLATE_.value();return r[17]=t,this.writeUint16_(r,i,24),r}mp3_(e){return te.box(".mp3",this.audioStsd_(e))}ac3_(e){let t=te.box("dac3",e.mediaConfig),i="ac-3",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}ec3_(e){let t=te.box("dec3",e.mediaConfig),i="ec-3",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}opus_(e){let t=te.box("dOps",e.mediaConfig),i="Opus",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}mp4a_(e){let t;e.mediaConfig.byteLength>0?t=te.box("esds",e.mediaConfig):t=te.box("esds",this.esds_(e));let i="mp4a",r=new Uint8Array([]);return te.isStreamEncrypted_(e.stream)&&(r=this.sinf(e.stream,e.codecs),i="enca"),te.box(i,this.audioStsd_(e),t,r)}esds_(e){let t=R.ContentType,i=e.id+1,r=e.stream.channelsCount||2,s=e.stream.audioSamplingRate||44100,n=R.guessCodecs(t.AUDIO,e.codecs.split(",")),a={96e3:0,88200:1,64e3:2,48e3:3,44100:4,32e3:5,24e3:6,22050:7,16e3:8,12e3:9,11025:10,8e3:11,7350:12},o=a[s];(n==="mp4a.40.5"||n==="mp4a.40.29")&&(o=a[s*2]);let c=parseInt(n.split(".").pop(),10),d=te.ESDS_TEMPLATE_.value();return this.writeUint16_(d,i,6),d[26]=c<<3|o>>>1,d[27]=o<<7|r<<3,d}mvex_(){let e=[];for(let t of this.streamInfos_)e.push(this.trex_(t));return te.box("mvex",...e)}trex_(e){let t=e.id+1,i=te.TREX_TEMPLATE_.value();return this.writeUint32_(i,t,4),te.box("trex",i)}psshs(e){let t=[];if(!te.isStreamEncrypted_(e))return new Uint8Array([]);for(let r of e.drmInfos)if(r.initData)for(let s of r.initData)t.push(s.initData);return ne.concat(...t)}sinf(e,t){return te.box("sinf",this.frma_(t),this.schm_(e),this.schi_(e))}frma_(e){let t=e.split(".")[0],i=te.BOX_HEADER_SIZE_,r=te.allocBox_("frma",4);return this.writeUint32_(r,this.stringToCharCode_(t),i),r}schm_(e){let t="cenc",i=e.drmInfos[0];i&&i.encryptionScheme&&(t=i.encryptionScheme);let r=te.SCHM_TEMPLATE_.value();return this.writeUint32_(r,this.stringToCharCode_(t),4),te.box("schm",r)}schi_(e){return te.box("schi",this.tenc_(e))}tenc_(e){let t=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);for(let i of e.drmInfos)if(i&&i.keyIds&&i.keyIds.size)for(let r of i.keyIds)t=this.hexStringToBuffer_(r);return v.assert(t,"Default KID should be non-null"),te.box("tenc",te.TENC_HEADER_.value(),t)}segmentData(){let e=te.BOX_HEADER_SIZE_,t=[],i=0;for(let n of this.streamInfos_){let a=this.moof_(n),o=n.data?n.data.samples:[],c=0;for(let u of o)c+=u.data.byteLength;let d=e+c;t.push({moof:a,samples:o,mdatSize:d}),i+=a.byteLength+d}let r=U.toUint8(new ArrayBuffer(i)),s=0;for(let{moof:n,samples:a,mdatSize:o}of t){r.set(n,s),s+=n.byteLength,this.writeUint32_(r,o,s),r.set(te.MDAT_TYPE_.value(),s+4),s+=e;for(let c of a)r.set(c.data,s),s+=c.data.byteLength}return r}moof_(e){return te.box("moof",this.mfhd_(e),this.traf_(e))}mfhd_(e){let t=e.data?e.data.sequenceNumber:0,i=te.allocBox_("mfhd",8);return this.writeUint32_(i,t,te.BOX_HEADER_SIZE_+4),i}traf_(e){let t=this.sdtp_(e),i=t.length+32+20+8+16+8+8;return te.box("traf",this.tfhd_(e),this.tfdt_(e),this.trun_(e,i),t)}sdtp_(e){let t=e.data?e.data.samples:[],i=te.allocBox_("sdtp",4+t.length),r=te.BOX_HEADER_SIZE_+4;for(let s=0;s<t.length;s++){let n=t[s].flags;i[s+r]=n.dependsOn<<4|n.isDependedOn<<2|n.hasRedundancy}return i}tfhd_(e){let t=e.id+1,i=te.TFHD_TEMPLATE_.value();return this.writeUint32_(i,t,4),te.box("tfhd",i)}tfdt_(e){let t=te.BOX_HEADER_SIZE_,i=e.data?e.data.baseMediaDecodeTime:0,r=Math.floor(i/(te.UINT32_MAX_+1)),s=Math.floor(i%(te.UINT32_MAX_+1)),n=te.allocBox_("tfdt",12);return n[t]=1,this.writeUint32_(n,r,t+4),this.writeUint32_(n,s,t+8),n}trun_(e,t){let i=R.ContentType,r=e.data?e.data.samples:[],s=r.length,n=12+16*s,a=te.allocBox_("trun",n);t+=te.BOX_HEADER_SIZE_+n;let o=e.type===i.VIDEO;a[te.BOX_HEADER_SIZE_]=o?1:0,a[te.BOX_HEADER_SIZE_+1]=0,a[te.BOX_HEADER_SIZE_+2]=15,a[te.BOX_HEADER_SIZE_+3]=1,this.writeUint32_(a,s,te.BOX_HEADER_SIZE_+4),this.writeUint32_(a,t,te.BOX_HEADER_SIZE_+8);for(let c=0;c<s;c++){let d=r[c],u=d.flags,m=te.BOX_HEADER_SIZE_+12+16*c;this.writeUint32_(a,d.duration,m),this.writeUint32_(a,d.size,m+4),a[m+8]=u.isLeading<<2|u.dependsOn,a[m+9]=u.isDependedOn<<6|u.hasRedundancy<<4|u.isNonSync,a[m+10]=u.degradPrio&61440,a[m+11]=u.degradPrio&15,this.writeUint32_(a,d.cts,m+12)}return a}writeUint32_(e,t,i){e[i]=t>>>24&255,e[i+1]=t>>>16&255,e[i+2]=t>>>8&255,e[i+3]=t&255}writeUint16_(e,t,i){e[i]=t>>>8&255,e[i+1]=t&255}hexStringToBuffer_(e){let t=new Uint8Array(e.length/2);for(let i=0;i<e.length/2;i+=1)t[i]=parseInt(String(e[i*2]+e[i*2+1]),16);return t}stringToCharCode_(e){let t=0;for(let i=0;i<e.length;i+=1)t|=e.charCodeAt(i)<<(e.length-i-1)*8;return t}static box(e,...t){let i=0;for(let n of t)i+=n.byteLength;let r=te.allocBox_(e,i),s=te.BOX_HEADER_SIZE_;for(let n=0;n<t.length;n++)r.set(t[n],s),s+=t[n].byteLength;return r}static allocBox_(e,t){let i=te.BOX_TYPES_.get(e);i||(i=[e.charCodeAt(0),e.charCodeAt(1),e.charCodeAt(2),e.charCodeAt(3)],te.BOX_TYPES_.set(e,i));let r=te.BOX_HEADER_SIZE_+t,s=new Uint8Array(r);return s[0]=r>>24&255,s[1]=r>>16&255,s[2]=r>>8&255,s[3]=r&255,s.set(i,4),s}static isStreamEncrypted_(e){return e.encrypted&&e.drmInfos.length>0}};l(te,"BOX_TYPES_",new Map),l(te,"BOX_HEADER_SIZE_",8);var xe=te;xe.UINT32_MAX_=Math.pow(2,32)-1;xe.MDAT_TYPE_=new _e(()=>new Uint8Array([109,100,97,116]));xe.MVHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]));xe.TKHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,7,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0]));xe.MDHD_TEMPLATE_=new _e(()=>new Uint8Array([1,0,0,0,0,0,0,0,0,0,0,2,0,0,0,0,0,0,0,3,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]));xe.TREX_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]));xe.TFHD_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,58,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0]));xe.ESDS_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,3,25,0,0,0,4,17,64,21,0,0,0,0,0,0,0,0,0,0,0,5,2,0,0,6,1,2]));xe.AUDIO_STSD_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0]));xe.VIDEO_SAMPLE_ENTRY_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,72,0,0,0,72,0,0,0,0,0,0,0,1,19,118,105,100,101,111,106,115,45,99,111,110,116,114,105,98,45,104,108,115,0,0,0,0,0,0,0,0,0,0,0,0,0,24,17,17]));xe.TENC_HEADER_=new _e(()=>new Uint8Array([0,0,0,0,0,0,1,8]));xe.SCHM_TEMPLATE_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,0,1,0,0]));xe.HDLR_TYPES_={video:new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0])),audio:new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]))};xe.VMHD_=new _e(()=>new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0]));xe.SMHD_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,0]));xe.STSD_=new _e(()=>new Uint8Array([0,0,0,0,0,0,0,1]));xe.FTYP_=new _e(()=>{let y=new Uint8Array([105,115,111,109]),e=new Uint8Array([97,118,99,49]),t=new Uint8Array([0,0,0,1]);return xe.box("ftyp",y,t,y,e)});xe.DINF_=new _e(()=>{let y=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e=xe.box("dref",y);return xe.box("dinf",e)});xe.STTS_BOX_=new _e(()=>xe.allocBox_("stts",8));xe.STSC_BOX_=new _e(()=>xe.allocBox_("stsc",8));xe.STSZ_BOX_=new _e(()=>xe.allocBox_("stsz",12));xe.STCO_BOX_=new _e(()=>xe.allocBox_("stco",8));/*! @license
|
|
242
242
|
* Shaka Player
|
|
243
243
|
* Copyright 2016 Google LLC
|
|
244
244
|
* SPDX-License-Identifier: Apache-2.0
|
|
245
|
-
*/var ke=class ke{static correctEnca(e){let t=
|
|
245
|
+
*/var ke=class ke{static correctEnca(e){let t=U.toUint8(e),i=t,r=16,s=null;return new F().boxes(F.SAMPLE_TABLE_PATH,F.children).fullBox("stsd",F.sampleDescription).box("enca",n=>(s=n.reader.getDataView(),F.audioSampleEntry(n))).box("sinf",F.children).box("frma",n=>{n.parser.stop();let{codec:a}=pe.parseFRMA(n.reader);a==="ec-3"&&s&&s.getUint16(r)!==2&&s.setUint16(r,2)}).parse(t),i}static freeDvvcBox(e){let t=U.toUint8(e),i=null,r=-1;return new F().boxes(F.SAMPLE_TABLE_PATH,F.children).fullBox("stsd",F.sampleDescription).boxes(["encv","hvc1"],s=>(i=s.reader.getDataView(),r=s.start,F.visualSampleEntry(s))).box("dvvC",s=>{s.parser.stop();let n=s.start-r-4;i.setUint32(n,ke.BOX_TYPE_FREE_)}).parse(t),t}static fakeEncryption(e,t,i,r){let s=U.toUint8(t),n=s,a=!1,o,c=[],d=T=>{c.push(T),F.children(T)},u=T=>{a=!0,T.parser.stop()},m=[],f=T=>{m.push({box:T,newType:ke.BOX_TYPE_ENCV_})},g=T=>{m.push({box:T,newType:ke.BOX_TYPE_ENCA_})};if(new F().boxes(F.SAMPLE_TABLE_PATH,d).fullBox("stsd",T=>{o=T,c.push(T),F.sampleDescription(T)}).boxes(["encv","enca"],u).boxes(F.AVC_HEVC_VVC_DV,f).boxes([...F.GENERIC_AUDIO_SAMPLE_ENTRIES,"mp4a"],g).parse(s),a)return p.debug("Init segment already indicates encryption."),s;if(m.length==0||!o)throw p.error("Failed to find boxes needed to fake encryption!"),p.v2("Failed init segment (hex):",ne.toHex(s)),new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.CONTENT_TRANSFORMATION_FAILED,i);m.reverse();for(let T of m){let b=F.typeToString(T.newType);p.debug(`Inserting "${b}" box into init segment.`),n=ke.insertEncryptionMetadata_(e,n,o,T.box,c,T.newType,r)}if(n=ke.insertPsshBoxes_(e,n),j.getDevice().requiresClearAndEncryptedInitSegments(r)){let T=new Uint8Array(s.byteLength+n.byteLength);return T.set(n),T.set(s,n.byteLength),T}return n}static fakeMediaEncryption(e){let t=U.toUint8(e),i=[];new F().box("mdat",s=>{i.push(s)}).parse(t);let r=[];for(let s=0;s<i.length;s++){let n=i[s-1],a=i[s],o=n?n.start+n.size:0,c=a.start+a.size,d=t.subarray(o,c);r.push(ke.fakeMediaEncryptionInChunk_(d))}return ne.concat(...r)}static fakeMediaEncryptionInChunk_(e){let i,r,s,n,a=[],o=u=>{a.push(u),F.children(u)},c=u=>{i=u,s=pe.parseTFHD(u.reader,u.flags)},d=u=>{r=u,n=pe.parseTRUN(u.reader,u.version,u.flags)};if(new F().boxes(F.FRAGMENT_PATH,o).fullBox("tfhd",c).fullBox("trun",d).parse(e),s&&s.sampleDescriptionIndex!==2){let u=i.start+F.headerSize(i)+4+(s.baseDataOffset!==null?8:0),m=U.toDataView(e);if(s.sampleDescriptionIndex!==null)m.setUint32(u,2);else{ke.updateBoxSize_(e,i.start,i.size+4);let g=m.getUint32(i.start+8);if(m.setUint32(i.start+8,g|2),n&&n.dataOffset!==null){let S=n.dataOffset+4,E=r.start+F.headerSize(r)+4;m.setInt32(E,S)}let _=e.subarray(0,u),T=e.subarray(u);e=new Uint8Array(e.byteLength+4),e.set(_);let b=[];for(let S=3;S>=0;S--)b.push(2>>8*S&255);e.set(new Uint8Array(b),u),e.set(T,u+4);for(let S of a)ke.updateBoxSize_(e,S.start,S.size+4)}}return e}static insertEncryptionMetadata_(e,t,i,r,s,n,a){let o=ke.createEncryptionMetadata_(e,t,r,n),c=new Uint8Array(t.byteLength+o.byteLength),u=j.getDevice().insertEncryptionDataBeforeClear(a)?r.start:r.start+r.size,m=t.subarray(0,u),f=t.subarray(u);c.set(m),c.set(o,u),c.set(f,u+o.byteLength);for(let b of s)v.assert(b.start<u,"Ancestor MP4 box found in the wrong location! Modified init segment will not make sense!"),ke.updateBoxSize_(c,b.start,b.size+o.byteLength);let g=U.toDataView(c,i.start),_=F.headerSize(i),T=g.getUint32(_);return g.setUint32(_,T+1),c}static createEncryptionMetadata_(e,t,i,r){let n=new xe().sinf(e,i.name),a=t.subarray(i.start,i.start+i.size),o=new Uint8Array(i.size+n.byteLength);return o.set(a,0),U.toDataView(o).setUint32(ke.BOX_TYPE_OFFSET_,r),o.set(n,i.size),ke.updateBoxSize_(o,0,o.byteLength),o}static insertPsshBoxes_(e,t){let i=new xe().psshs(e);if(i.byteLength===0)return t;let r=0,s=0;new F().box("moov",u=>{r=u.start,s=u.size,u.parser.stop()}).parse(t);let n=s+i.byteLength,a=r+s;ke.updateBoxSize_(t,r,n);let o=new Uint8Array(t.byteLength+i.byteLength),c=t.subarray(0,a),d=t.subarray(a);return o.set(c),o.set(i,a),o.set(d,a+i.byteLength),o}static updateBoxSize_(e,t,i){let r=U.toDataView(e,t),s=r.getUint32(ke.BOX_SIZE_OFFSET_);s==0||(s==1?(r.setUint32(ke.BOX_SIZE_64_OFFSET_,i>>32),r.setUint32(ke.BOX_SIZE_64_OFFSET_+4,i&4294967295)):r.setUint32(ke.BOX_SIZE_OFFSET_,i))}static fakeEC3(e){let t=U.toUint8(e),i=[],r=s=>{i.push({start:s.start,size:s.size}),F.children(s)};return new F().boxes(F.SAMPLE_TABLE_PATH,r).box("stsd",s=>{i.push({start:s.start,size:s.size});let n=U.toDataView(t,s.start);for(let a=0;a<s.size-3;a++){let o=n.getUint32(a);o==ke.BOX_TYPE_AC_3_?n.setUint32(a,ke.BOX_TYPE_EC_3_):o==ke.BOX_TYPE_DAC3_&&n.setUint32(a,ke.BOX_TYPE_DEC3_)}}).parse(t),t}static fixBrokenIframes(e){let t=U.toUint8(e),i=[],r=[],s=[],n=[],a=!1;if(new F().box("moof",W=>{i.push(W),F.children(W)}).box("traf",W=>{r.push(W),F.children(W)}).fullBox("tfhd",W=>{s.push(W)}).fullBox("trun",W=>{n.push(W)}).boxes(["senc","saiz","saio"],()=>{a=!0}).parse(t,!1,!0),a||i.length!=1||r.length!=1||s.length!=1||n.length!=1)return t;let o=i[0],c=r[0],d=s[0],u=n[0];v.assert(d.flags!=null,"TFHD should have valid flags"),v.assert(u.flags!=null,"TRUN should have valid flags"),v.assert(u.version!=null,"TRUN should have a valid version");let m=u.flags,f=pe.parseTFHD(d.reader,d.flags),g=pe.parseTRUN(u.reader,u.version,u.flags);if(f.baseDataOffset!=null||!(m&1)||g.dataOffset==null)return t;let _=o.start+o.size,T=U.toDataView(t);if(_+8>t.byteLength||T.getUint32(_+ke.BOX_TYPE_OFFSET_)!=ke.BOX_TYPE_MDAT_)return t;let b=T.getUint32(_),S=8;if(b==1)return t;b==0&&(b=t.byteLength-_);let E=t.byteLength-(_+S),w=b-S;if(E>=w)return t;let A=0,x=0;for(let W of g.sampleData){let z=W.sampleSize!=null?W.sampleSize:f.defaultSampleSize;if(z==null)return t;if(A+z>E)break;A+=z,x++}if(x!=1||x>=g.sampleCount)return t;let M=(m&256)!=0,C=0;for(let W of g.sampleData){let z=M?W.sampleDuration:f.defaultSampleDuration;if(z==null)return t;C+=z}let k=F.headerSize(u),D=u.start+k+4;D+=4,m&4&&(D+=4);let V=0;m&256&&(V+=4),m&512&&(V+=4),m&1024&&(V+=4),m&2048&&(V+=4);let oe=(g.sampleCount-x)*V,le=D+x*V;if(le+oe!=_)return t;let G=t.slice(0,le),J=U.toDataView(G);if(J.setUint32(u.start+k,x),J.setInt32(u.start+k+4,g.dataOffset-oe),M)J.setUint32(D,C);else{let W=d.start+F.headerSize(d)+4;f.sampleDescriptionIndex!=null&&(W+=4),J.setUint32(W,C)}ke.updateBoxSize_(G,u.start,u.size-oe),ke.updateBoxSize_(G,c.start,c.size-oe),ke.updateBoxSize_(G,o.start,o.size-oe);let Z=t.slice(_,_+S);ke.updateBoxSize_(Z,0,S+A);let ce=t.subarray(_+S,_+S+A);return ne.concat(G,Z,ce)}};l(ke,"BOX_SIZE_OFFSET_",0),l(ke,"BOX_TYPE_OFFSET_",4),l(ke,"BOX_SIZE_64_OFFSET_",8),l(ke,"BOX_TYPE_MDAT_",1835295092),l(ke,"BOX_TYPE_ENCV_",1701733238),l(ke,"BOX_TYPE_ENCA_",1701733217),l(ke,"BOX_TYPE_AC_3_",1633889587),l(ke,"BOX_TYPE_DAC3_",1684103987),l(ke,"BOX_TYPE_EC_3_",1700998451),l(ke,"BOX_TYPE_FREE_",1718773093),l(ke,"BOX_TYPE_DEC3_",1684366131);var Zi=ke;/*! @license
|
|
246
246
|
* Shaka Player
|
|
247
247
|
* Copyright 2016 Google LLC
|
|
248
248
|
* SPDX-License-Identifier: Apache-2.0
|
|
249
|
-
*/var Tt=class{constructor(e,t,i,r=null,s=null,n=null,a=null,o=!1){l(this,"getUris");l(this,"startByte");l(this,"endByte");l(this,"mediaQuality");l(this,"timescale");l(this,"segmentData");l(this,"aesKey");l(this,"codecs");l(this,"mimeType");l(this,"boundaryEnd");l(this,"encrypted");this.getUris=e,this.startByte=t,this.endByte=i,this.mediaQuality=r,this.timescale=s,this.segmentData=n,this.aesKey=a,this.codecs=null,this.mimeType=null,this.boundaryEnd=null,this.encrypted=o}getStartByte(){return this.startByte}getEndByte(){return this.endByte}getSize(){return this.endByte?this.endByte+1-this.startByte:null}getMediaQuality(){return this.mediaQuality}setSegmentData(e){this.segmentData=e}getSegmentData(){return this.segmentData}static equal(e,t){return e===t?!0:!e||!t?e==t:e.getStartByte()==t.getStartByte()&&e.getEndByte()==t.getEndByte()&&ye.equal(e.getUris().sort(),t.getUris().sort())&&
|
|
249
|
+
*/var Tt=class{constructor(e,t,i,r=null,s=null,n=null,a=null,o=!1){l(this,"getUris");l(this,"startByte");l(this,"endByte");l(this,"mediaQuality");l(this,"timescale");l(this,"segmentData");l(this,"aesKey");l(this,"codecs");l(this,"mimeType");l(this,"boundaryEnd");l(this,"encrypted");this.getUris=e,this.startByte=t,this.endByte=i,this.mediaQuality=r,this.timescale=s,this.segmentData=n,this.aesKey=a,this.codecs=null,this.mimeType=null,this.boundaryEnd=null,this.encrypted=o}getStartByte(){return this.startByte}getEndByte(){return this.endByte}getSize(){return this.endByte?this.endByte+1-this.startByte:null}getMediaQuality(){return this.mediaQuality}setSegmentData(e){this.segmentData=e}getSegmentData(){return this.segmentData}static equal(e,t){return e===t?!0:!e||!t?e==t:e.getStartByte()==t.getStartByte()&&e.getEndByte()==t.getEndByte()&&ye.equal(e.getUris().sort(),t.getUris().sort())&&U.equal(e.getSegmentData(),t.getSegmentData())}},Is=class Is{constructor(e,t,i,r,s,n,a,o,c,d=[],u="",m=null,f=null,g=Is.Status.AVAILABLE,_=null,T=!1){l(this,"startTime");l(this,"endTime");l(this,"trueEndTime");l(this,"getUrisInner");l(this,"startByte");l(this,"endByte");l(this,"initSegmentReference");l(this,"timestampOffset");l(this,"appendWindowStart");l(this,"appendWindowEnd");l(this,"partialReferences");l(this,"tilesLayout");l(this,"tileDuration");l(this,"syncTime");l(this,"status");l(this,"preload");l(this,"independent");l(this,"byterangeOptimization");l(this,"aesKey");l(this,"thumbnailSprite");l(this,"discontinuitySequence");l(this,"allPartialSegments");l(this,"partial");l(this,"lastPartial");l(this,"codecs");l(this,"mimeType");l(this,"bandwidth");l(this,"segmentData");l(this,"removeSegmentDataOnGet");l(this,"metadata_");v.assert(e<=t,"startTime must be less than or equal to endTime"),v.assert(s==null||r<s,"startByte must be < endByte"),this.startTime=e,this.endTime=t,this.trueEndTime=t,this.getUrisInner=i,this.startByte=r,this.endByte=s,this.initSegmentReference=n,this.timestampOffset=a,this.appendWindowStart=o,this.appendWindowEnd=c,this.partialReferences=d,this.tilesLayout=u,this.tileDuration=m,this.syncTime=f,this.status=g,this.preload=!1,this.independent=!0,this.byterangeOptimization=!1,this.aesKey=_,this.thumbnailSprite=null,this.discontinuitySequence=-1,this.allPartialSegments=T,this.partial=!1,this.lastPartial=!1;for(let b of this.partialReferences)b.markAsPartial();this.allPartialSegments&&this.partialReferences.length&&this.partialReferences[this.partialReferences.length-1].markAsLastPartial(),this.codecs=null,this.mimeType=null,this.bandwidth=null,this.segmentData=null,this.removeSegmentDataOnGet=!1,this.metadata_=null}getUris(){return this.getUrisInner()}getStartTime(){return this.startTime}getEndTime(){return this.endTime}getStartByte(){return this.startByte}getEndByte(){return this.endByte}getSize(){if(this.endByte)return this.endByte+1-this.startByte;if(this.bandwidth){let e=this.bandwidth*(this.endTime-this.startTime);if(!isNaN(e)&&e>0)return e}if(this.hasPartialSegments()&&this.hasAllPartialSegments()){let e=0;for(let t of this.partialReferences){let i=t.getSize();return i&&(e+=i),null}if(e)return e}return null}hasPartialSegments(){return this.partialReferences.length>0}hasAllPartialSegments(){return this.allPartialSegments}getTilesLayout(){return this.tilesLayout}getTileDuration(){return this.tileDuration}getStatus(){return this.status}markAsUnavailable(){this.status=Is.Status.UNAVAILABLE}markAsPreload(){this.preload=!0}isPreload(){return this.preload}markAsNonIndependent(){this.independent=!1}isIndependent(){return this.independent}markAsPartial(){this.partial=!0}isPartial(){return this.partial}markAsLastPartial(){this.lastPartial=!0}isLastPartial(){return this.lastPartial}markAsByterangeOptimization(){this.byterangeOptimization=!0}hasByterangeOptimization(){return this.byterangeOptimization}setThumbnailSprite(e){this.thumbnailSprite=e}getThumbnailSprite(){return this.thumbnailSprite}offset(e){this.startTime+=e,this.endTime+=e,this.trueEndTime+=e;for(let t of this.partialReferences)t.startTime+=e,t.endTime+=e,t.trueEndTime+=e}syncAgainst(e){if(this.syncTime==null){p.alwaysError("Sync attempted without sync time!");return}let i=this.syncTime-e-this.startTime;Math.abs(i)>=.001&&this.offset(i)}setSegmentData(e,t=!1){this.segmentData=e,this.removeSegmentDataOnGet=t}getSegmentData(e=!0){let t=this.segmentData;return e&&this.removeSegmentDataOnGet&&(this.segmentData=null),t}updateInitSegmentReference(e){this.initSegmentReference=e;for(let t of this.partialReferences)t.updateInitSegmentReference(e)}setMetadata(e){this.metadata_=e}getMetadata(){return this.metadata_}};l(Is,"Status",{AVAILABLE:0,UNAVAILABLE:1,MISSING:2});var Te=Is;/*! @license
|
|
250
250
|
* Shaka Player
|
|
251
251
|
* Copyright 2016 Google LLC
|
|
252
252
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -258,11 +258,11 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
258
258
|
* Shaka Player
|
|
259
259
|
* Copyright 2016 Google LLC
|
|
260
260
|
* SPDX-License-Identifier: Apache-2.0
|
|
261
|
-
*/var De=class De{static isHeader_(e,t){return t+10<=e.length&&e[t]===73&&e[t+1]===68&&e[t+2]===51&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}static isFooter_(e,t){return t+10<=e.length&&e[t]===51&&e[t+1]===68&&e[t+2]===73&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}static readSize_(e,t){let i=0;return i=(e[t]&127)<<21,i|=(e[t+1]&127)<<14,i|=(e[t+2]&127)<<7,i|=e[t+3]&127,i}static readSizeBE_(e,t){let i=0;return i=e[t]<<24,i|=e[t+1]<<16,i|=e[t+2]<<8,i|=e[t+3],i>>>0}static decodeString_(e,t){switch(t){case De.LATIN1_encoding:return Array.from(e).map(i=>String.fromCharCode(i)).join("");case De.UTF16BOM_encoding:return q.fromBytesAutoDetect(e);case De.UTF16BE_encoding:return q.fromUTF16(e,!1);case De.UTF8_encoding:return q.fromUTF8(e);default:return""}}static nullTermSize_(e){return e===De.UTF16BOM_encoding||e===De.UTF16BE_encoding?2:1}static findNull_(e,t,i=0){if(t===De.UTF16BOM_encoding||t===De.UTF16BE_encoding){for(let r=i;r+1<e.length;r+=2)if(e[r]===0&&e[r+1]===0)return r;return-1}return e.indexOf(0,i)}static getFrameData_(e,t){let i=String.fromCharCode(e[0],e[1],e[2],e[3]),r=t>=4?De.readSize_(e,4):De.readSizeBE_(e,4),s=10;return{type:i,size:r,data:e.subarray(s,s+r)}}static decodeFrame_(e){let t={key:e.type,description:"",data:"",mimeType:null,pictureType:null};if(e.type==="APIC"){if(e.size<2)return null;let i=e.data[0],r=e.data.subarray(1).indexOf(0);if(r===-1)return null;let s=q.fromUTF8(
|
|
261
|
+
*/var De=class De{static isHeader_(e,t){return t+10<=e.length&&e[t]===73&&e[t+1]===68&&e[t+2]===51&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}static isFooter_(e,t){return t+10<=e.length&&e[t]===51&&e[t+1]===68&&e[t+2]===73&&e[t+3]<255&&e[t+4]<255&&e[t+6]<128&&e[t+7]<128&&e[t+8]<128&&e[t+9]<128}static readSize_(e,t){let i=0;return i=(e[t]&127)<<21,i|=(e[t+1]&127)<<14,i|=(e[t+2]&127)<<7,i|=e[t+3]&127,i}static readSizeBE_(e,t){let i=0;return i=e[t]<<24,i|=e[t+1]<<16,i|=e[t+2]<<8,i|=e[t+3],i>>>0}static decodeString_(e,t){switch(t){case De.LATIN1_encoding:return Array.from(e).map(i=>String.fromCharCode(i)).join("");case De.UTF16BOM_encoding:return q.fromBytesAutoDetect(e);case De.UTF16BE_encoding:return q.fromUTF16(e,!1);case De.UTF8_encoding:return q.fromUTF8(e);default:return""}}static nullTermSize_(e){return e===De.UTF16BOM_encoding||e===De.UTF16BE_encoding?2:1}static findNull_(e,t,i=0){if(t===De.UTF16BOM_encoding||t===De.UTF16BE_encoding){for(let r=i;r+1<e.length;r+=2)if(e[r]===0&&e[r+1]===0)return r;return-1}return e.indexOf(0,i)}static getFrameData_(e,t){let i=String.fromCharCode(e[0],e[1],e[2],e[3]),r=t>=4?De.readSize_(e,4):De.readSizeBE_(e,4),s=10;return{type:i,size:r,data:e.subarray(s,s+r)}}static decodeFrame_(e){let t={key:e.type,description:"",data:"",mimeType:null,pictureType:null};if(e.type==="APIC"){if(e.size<2)return null;let i=e.data[0],r=e.data.subarray(1).indexOf(0);if(r===-1)return null;let s=q.fromUTF8(U.toUint8(e.data,1,r)),n=e.data[2+r],a=3+r,o=De.findNull_(e.data,i,a);if(o===-1)return null;let c=De.decodeString_(e.data.subarray(a,o),i),d=De.nullTermSize_(i),u=o+d,m;return s==="-->"?m=q.fromUTF8(e.data.subarray(u)):m=U.toArrayBuffer(e.data.subarray(u)),t.mimeType=s,t.pictureType=n,t.description=c,t.data=m,t}else if(e.type==="COMM"){if(e.size<5)return null;let i=e.data[0],r=q.fromUTF8(e.data.subarray(1,4)).replace(/\0/g,""),s=4,n=De.findNull_(e.data,i,s);if(n===-1)return null;let a=De.decodeString_(e.data.subarray(s,n),i),o=De.nullTermSize_(i),c=De.decodeString_(e.data.subarray(n+o),i).replace(/\0*$/,"");return t.description=a||r,t.data=c,t}else if(e.type==="TXXX"){if(e.size<2)return null;let i=e.data[0],r=De.findNull_(e.data,i,1);if(r===-1)return null;let s=De.decodeString_(e.data.subarray(1,r),i),n=De.nullTermSize_(i),a=De.decodeString_(e.data.subarray(r+n),i).replace(/^\ufeff/,"").replace(/\0*$/,"");return t.description=s,t.data=a,t}else if(e.type==="WXXX"){if(e.size<2)return null;let i=e.data[0],r=De.findNull_(e.data,i,1);if(r===-1)return null;let s=De.decodeString_(e.data.subarray(1,r),i),n=De.nullTermSize_(i),a=q.fromUTF8(e.data.subarray(r+n)).replace(/\0*$/,"");return t.description=s,t.data=a,t}else if(e.type==="PRIV"){if(e.size<2)return null;let i=e.data.indexOf(0);if(i===-1)return null;let r=q.fromUTF8(U.toUint8(e.data,0,i));if(t.description=r,r=="com.apple.streaming.transportStreamTimestamp"){let s=e.data.subarray(r.length+1),n=s[3]&1,a=(s[4]<<23)+(s[5]<<15)+(s[6]<<7)+s[7];a/=45,n&&(a+=4772185884e-2),t.data=a}else{let s=U.toArrayBuffer(e.data.subarray(r.length+1));t.data=s}return t}else if(e.type==="UFID"){let i=e.data.indexOf(0);if(i===-1)return null;let r=q.fromUTF8(U.toUint8(e.data,0,i));return t.description=r,t.data=U.toArrayBuffer(e.data.subarray(i+1)),t}else if(e.type[0]==="T"){if(e.size<2)return null;let i=e.data[0],s=De.decodeString_(e.data.subarray(1),i).replace(/\0+$/,"").split("\0").map(n=>n.replace(/^\ufeff/,"")).filter(n=>n.length>0).join(" / ");return t.data=s,t}else if(e.type[0]==="W"){let i=q.fromUTF8(e.data).replace(/\0*$/,"");return t.data=i,t}else if(e.data)return p.warning("Unrecognized ID3 frame type:",e.type),t.data=U.toArrayBuffer(e.data),t;return null}static getID3Frames(e){let t=0,i=[];for(;De.isHeader_(e,t);){let r=e[t+3],s=De.readSize_(e,t+6);e[t+5]>>6&1&&(t+=10),t+=10;let n=t+s;for(;t+10<n&&e[t]!==0;){let a=De.getFrameData_(e.subarray(t),r),o=De.decodeFrame_(a);o&&i.push(o),t+=a.size+10}De.isFooter_(e,t)&&(t+=10)}return i}static getID3Data(e,t=0){let i=t,r=0;for(;De.isHeader_(e,t);){e[t+5]>>6&1&&(r+=10),r+=10;let s=De.readSize_(e,t+6);r+=s,De.isFooter_(e,t+10)&&(r+=10),t+=r}return r>0?e.subarray(i,i+r):new Uint8Array([])}parse(e){return De.getID3Frames(e)}};l(De,"LATIN1_encoding",0),l(De,"UTF16BOM_encoding",1),l(De,"UTF16BE_encoding",2),l(De,"UTF8_encoding",3);var At=De;for(let y of O.RAW_FORMATS)Pt.registerParserByMime(y,()=>new At);/*! @license
|
|
262
262
|
* Shaka Player
|
|
263
263
|
* Copyright 2016 Google LLC
|
|
264
264
|
* SPDX-License-Identifier: Apache-2.0
|
|
265
|
-
*/var rt=class rt{constructor(e,t=""){l(this,"innerTransmuxer_");l(this,"workerUrl_");l(this,"workerFailed_");l(this,"nextReqId_");l(this,"pendingRequests_");l(this,"id_");l(this,"workerReady_");l(this,"attachedToWorker_");this.innerTransmuxer_=e,this.workerUrl_=t,this.workerFailed_=!1,this.nextReqId_=0,this.pendingRequests_=new Map,this.id_=rt.nextId_++,this.workerReady_=!1,this.attachedToWorker_=!1}destroy(){for(let e of this.pendingRequests_.values())e.timer.stop(),e.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,"Worker transmuxer destroyed"));this.pendingRequests_.clear(),this.attachedToWorker_&&(rt.sharedWorker_&&rt.sharedWorker_.postMessage({cmd:"destroy",id:this.id_}),rt.activeInstances_.delete(this.id_),this.attachedToWorker_=!1,rt.activeInstances_.size===0&&rt.sharedWorker_&&(rt.sharedWorker_.terminate(),rt.sharedWorker_=null)),this.innerTransmuxer_.destroy()}isSupported(e,t){return this.innerTransmuxer_.isSupported(e,t)}convertCodecs(e,t){return this.innerTransmuxer_.convertCodecs(e,t)}getOriginalMimeType(){return this.innerTransmuxer_.getOriginalMimeType()}async transmux(e,t,i,r,s){if(this.workerFailed_)return this.innerTransmuxer_.transmux(e,t,i,r,s);if(!this.attachedToWorker_){if(!rt.getOrCreateWorker_(this.workerUrl_))return this.workerFailed_=!0,this.innerTransmuxer_.transmux(e,t,i,r,s);rt.activeInstances_.set(this.id_,this),this.attachedToWorker_=!0}let n=rt.sharedWorker_;if(!n)return this.workerFailed_=!0,this.innerTransmuxer_.transmux(e,t,i,r,s);if(!this.workerReady_){let E=this.innerTransmuxer_.getOriginalMimeType();n.postMessage({cmd:"init",id:this.id_,mimeType:E}),this.workerReady_=!0}let a=this.nextReqId_++,o={id:t.id,codecs:t.codecs,channelsCount:t.channelsCount,audioSamplingRate:t.audioSamplingRate,height:t.height,width:t.width,language:t.language},c=i?{discontinuitySequence:i.discontinuitySequence,startTime:i.startTime,endTime:i.endTime,uris:i.getUris()}:null,d=
|
|
265
|
+
*/var rt=class rt{constructor(e,t=""){l(this,"innerTransmuxer_");l(this,"workerUrl_");l(this,"workerFailed_");l(this,"nextReqId_");l(this,"pendingRequests_");l(this,"id_");l(this,"workerReady_");l(this,"attachedToWorker_");this.innerTransmuxer_=e,this.workerUrl_=t,this.workerFailed_=!1,this.nextReqId_=0,this.pendingRequests_=new Map,this.id_=rt.nextId_++,this.workerReady_=!1,this.attachedToWorker_=!1}destroy(){for(let e of this.pendingRequests_.values())e.timer.stop(),e.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,"Worker transmuxer destroyed"));this.pendingRequests_.clear(),this.attachedToWorker_&&(rt.sharedWorker_&&rt.sharedWorker_.postMessage({cmd:"destroy",id:this.id_}),rt.activeInstances_.delete(this.id_),this.attachedToWorker_=!1,rt.activeInstances_.size===0&&rt.sharedWorker_&&(rt.sharedWorker_.terminate(),rt.sharedWorker_=null)),this.innerTransmuxer_.destroy()}isSupported(e,t){return this.innerTransmuxer_.isSupported(e,t)}convertCodecs(e,t){return this.innerTransmuxer_.convertCodecs(e,t)}getOriginalMimeType(){return this.innerTransmuxer_.getOriginalMimeType()}async transmux(e,t,i,r,s){if(this.workerFailed_)return this.innerTransmuxer_.transmux(e,t,i,r,s);if(!this.attachedToWorker_){if(!rt.getOrCreateWorker_(this.workerUrl_))return this.workerFailed_=!0,this.innerTransmuxer_.transmux(e,t,i,r,s);rt.activeInstances_.set(this.id_,this),this.attachedToWorker_=!0}let n=rt.sharedWorker_;if(!n)return this.workerFailed_=!0,this.innerTransmuxer_.transmux(e,t,i,r,s);if(!this.workerReady_){let E=this.innerTransmuxer_.getOriginalMimeType();n.postMessage({cmd:"init",id:this.id_,mimeType:E}),this.workerReady_=!0}let a=this.nextReqId_++,o={id:t.id,codecs:t.codecs,channelsCount:t.channelsCount,audioSamplingRate:t.audioSamplingRate,height:t.height,width:t.width,language:t.language},c=i?{discontinuitySequence:i.discontinuitySequence,startTime:i.startTime,endTime:i.endTime,uris:i.getUris()}:null,d=U.toArrayBuffer(ne.concat(e)),{promise:u,resolve:m,reject:f}=Promise.withResolvers(),g=!1,_=new ae(()=>{this.pendingRequests_.has(a)&&(this.pendingRequests_.delete(a),this.workerFailed_=!0,g=!0,m(null))});_.tickAfter(rt.TIMEOUT_MS_/1e3),this.pendingRequests_.set(a,{resolve:m,reject:f,timer:_});try{n.postMessage({cmd:"transmux",id:this.id_,reqId:a,data:d,streamProps:o,refProps:c,duration:r,contentType:s},[d])}catch(E){return _.stop(),this.pendingRequests_.delete(a),p.warning("Failed to post message to worker, falling back to main thread",E),rt.terminateWorker_("Worker postMessage failed"),this.innerTransmuxer_.transmux(e,t,i,r,s)}let T=await u;if(g||T===null)return p.alwaysWarn("Worker transmux unavailable; falling back to main-thread transmuxing"),this.innerTransmuxer_.transmux(e,t,i,r,s);let b=T.streamMutations;if(b&&Object.keys(b).length>0)for(let E of Object.keys(b))t[E]=b[E];let S=T.output;return S.type==="raw"?U.toUint8(S.data):{data:U.toUint8(S.data),init:S.init?U.toUint8(S.init):null}}onWorkerMessage_(e){let t=e.cmd;if(t==="transmuxed"||t==="error"){let i=e.reqId,r=this.pendingRequests_.get(i);if(!r)return;if(r.timer.stop(),this.pendingRequests_.delete(i),t==="error"){let s=e.error;r.reject(new h(s.severity,s.category,s.code,...s.data))}else r.resolve(e)}}};l(rt,"nextId_",0),l(rt,"TIMEOUT_MS_",3e4),l(rt,"sharedWorker_",null),l(rt,"activeInstances_",new Map),l(rt,"getOrCreateWorker_",e=>{if(rt.sharedWorker_)return rt.sharedWorker_;if(!j.getDevice().supportsWorkerTransmux())return p.info("Device does not support worker transmuxing; falling back to main-thread transmuxing"),null;if(!e)return p.warning("Transmuxer worker URL is not configured (mediaSource.transmuxWorkerUrl); falling back to main-thread transmuxing"),null;try{let i=new Worker(e);return i.addEventListener("message",r=>{let s=r.data,n=s.cmd;if(n==="transmuxed"||n==="error"){let a=rt.activeInstances_.get(s.id);a&&a.onWorkerMessage_(s)}}),i.addEventListener("error",r=>{p.warning("Transmuxer worker error:",r),rt.terminateWorker_("Worker error")}),rt.sharedWorker_=i,i}catch(i){return p.warning("Failed to create transmuxer worker, falling back to main thread",i),null}}),l(rt,"terminateWorker_",e=>{p.warning("Transmuxer worker terminated, falling back to main thread:",e);for(let t of rt.activeInstances_.values()){t.workerFailed_=!0;for(let i of t.pendingRequests_.values())i.timer.stop(),i.resolve(null);t.pendingRequests_.clear()}rt.sharedWorker_=null,rt.activeInstances_.clear()});var Cs=rt;/*! @license
|
|
266
266
|
* Shaka Player
|
|
267
267
|
* Copyright 2016 Google LLC
|
|
268
268
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -297,7 +297,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
297
297
|
* Shaka Player
|
|
298
298
|
* Copyright 2016 Google LLC
|
|
299
299
|
* SPDX-License-Identifier: Apache-2.0
|
|
300
|
-
*/var $t=class $t{constructor(e,t,i,r,s){l(this,"video_");l(this,"playerInterface_");l(this,"config_");l(this,"textDisplayer_");l(this,"sourceBuffers_");l(this,"sourceBufferTypes_");l(this,"expectedEncryption_");l(this,"textEngine_");l(this,"segmentRelativeVttTiming_");l(this,"lcevcDec_");l(this,"queues_");l(this,"eventManager_");l(this,"transmuxers_");l(this,"captionParser_");l(this,"mediaSourceOpen_");l(this,"url_");l(this,"playbackHasBegun_");l(this,"streamingAllowed_");l(this,"usingRemotePlayback_");l(this,"source_");l(this,"secondarySource_");l(this,"mediaSource_");l(this,"reloadingMediaSource_");l(this,"playAfterReset_");l(this,"destroyer_");l(this,"sequenceMode_");l(this,"manifestType_");l(this,"ignoreManifestTimestampsInSegmentsMode_");l(this,"attemptTimestampOffsetCalculation_");l(this,"needSplitMuxedContent_");l(this,"lastDuration_");l(this,"tsParsers_");l(this,"firstVideoTimestamp_");l(this,"firstVideoReferenceStartTime_");l(this,"firstAudioTimestamp_");l(this,"firstAudioReferenceStartTime_");l(this,"audioCompensation_");l(this,"usesLiveSeekableRange_");l(this,"clearKeyDecryptors_");this.video_=e,this.playerInterface_=i,this.config_=r,this.textDisplayer_=t,this.sourceBuffers_=new Map,this.sourceBufferTypes_=new Map,this.expectedEncryption_=new Map,this.textEngine_=null,this.segmentRelativeVttTiming_=!1,this.lcevcDec_=s||null,this.queues_=new Map,this.eventManager_=new ue,this.transmuxers_=new Map,this.captionParser_=null,this.mediaSourceOpen_=Promise.withResolvers(),this.url_="",this.playbackHasBegun_=!1,this.streamingAllowed_=!0,this.usingRemotePlayback_=!1,this.source_=null,this.secondarySource_=null,this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),this.reloadingMediaSource_=!1,this.playAfterReset_=!1,this.destroyer_=new ci(()=>this.doDestroy_()),this.sequenceMode_=!1,this.manifestType_=me.UNKNOWN,this.ignoreManifestTimestampsInSegmentsMode_=!1,this.attemptTimestampOffsetCalculation_=!1,this.needSplitMuxedContent_=!1,this.lastDuration_=null,this.tsParsers_=new Map,this.firstVideoTimestamp_=null,this.firstVideoReferenceStartTime_=null,this.firstAudioTimestamp_=null,this.firstAudioReferenceStartTime_=null,this.audioCompensation_=Promise.withResolvers();let a=j.getDevice().getRemote(this.video_);a&&(this.usingRemotePlayback_=a.state!="disconnected",this.eventManager_.listenMulti(a,["connect","connecting","disconnect"],()=>{this.usingRemotePlayback_=a.state!="disconnected"})),this.usesLiveSeekableRange_=!1,this.clearKeyDecryptors_=new Map}createMediaSource(e){this.streamingAllowed_=!0;let t;return window.ManagedMediaSource?(this.secondarySource_||(this.video_.disableRemotePlayback=!0),t=new ManagedMediaSource,this.eventManager_.listen(t,"startstreaming",()=>{p.info("MMS startstreaming"),this.streamingAllowed_=!0}),this.eventManager_.listen(t,"endstreaming",()=>{p.info("MMS endstreaming"),this.streamingAllowed_=!1})):t=new MediaSource,this.eventManager_.listenOnce(t,"sourceopen",()=>this.onSourceOpen_(e)),this.eventManager_.listenOnce(this.video_,"playing",()=>{this.playbackHasBegun_=!0}),this.url_=$t.createObjectURL(t),this.removeSources_(),this.config_.useSourceElements?(this.source_=Ke.createSourceElement(this.url_),this.video_.appendChild(this.source_),this.secondarySource_&&this.video_.appendChild(this.secondarySource_),this.video_.load()):this.video_.src=this.url_,t}addSecondarySource(e,t){var i;if(!this.video_||!window.ManagedMediaSource||!this.mediaSource_){p.warning("Secondary source is used only with ManagedMediaSource");return}this.config_.useSourceElements&&(((i=this.secondarySource_)==null?void 0:i.parentElement)===this.video_&&this.video_.removeChild(this.secondarySource_),this.secondarySource_=Ke.createSourceElement(e,t),this.video_.appendChild(this.secondarySource_),this.video_.disableRemotePlayback=!1)}onSourceOpen_(e){v.assert(this.url_,"Must have object URL"),URL.revokeObjectURL(this.url_),e.resolve()}static probeSupport(){let e=['video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc3.42E01E"','video/mp4; codecs="hev1.1.6.L93.90"','video/mp4; codecs="hvc1.1.6.L93.90"','video/mp4; codecs="hev1.2.4.L153.B0"; eotf="smpte2084"','video/mp4; codecs="hvc1.2.4.L153.B0"; eotf="smpte2084"','video/mp4; codecs="hvc1.2.20000000.L153.B0"','video/mp4; codecs="hvc1.2.4.L120.b0"','video/mp4; codecs="hvc1.2.4.L123.b0"','video/mp4; codecs="vp9"','video/mp4; codecs="vp09.00.10.08"','video/mp4; codecs="av01.0.01M.08"','video/mp4; codecs="av01.0.31M.10.0.111.09.16.09.0"','video/mp4; codecs="av01.0.31M.10.0.112.09.18.09.0"','video/mp4; codecs="dvh1.05.01"','video/mp4; codecs="dvh1.08.01"','video/mp4; codecs="dav1.10.01"','video/mp4; codecs="dvh1.20.01"','audio/mp4; codecs="mp4a.40.2"','audio/mp4; codecs="ac-3"','audio/mp4; codecs="ec-3"','audio/mp4; codecs="ac-4.02.01.03"','audio/mp4; codecs="opus"','audio/mp4; codecs="flac"','audio/mp4; codecs="dtsc"','audio/mp4; codecs="dtse"','audio/mp4; codecs="dtsx"','audio/mp4; codecs="apac.31.00"','video/webm; codecs="vp8"','video/webm; codecs="vp9"','video/webm; codecs="vp09.00.10.08"','audio/webm; codecs="vorbis"','audio/webm; codecs="opus"','video/mp2t; codecs="avc1.42E01E"','video/mp2t; codecs="avc3.42E01E"','video/mp2t; codecs="hvc1.1.6.L93.90"','video/mp2t; codecs="mp4a.40.2"','video/mp2t; codecs="ac-3"','video/mp2t; codecs="ec-3"',"text/vtt",'application/mp4; codecs="wvtt"',"application/ttml+xml",'application/mp4; codecs="stpp"',...O.RAW_FORMATS],t={},i=j.getDevice();for(let r of e){if(Oe.isTypeSupported(r))t[r]=!0;else if(i.supportsMediaSource()){let n=O.getBasicType(r),a=O.getCorrectAudioCodecs(O.getCodecs(r),n),o=O.getFullType(n,a);t[r]=qe.isTypeSupported(o)||Ne.isSupported(o)}else t[r]=i.supportsMediaType(r);let s=r.split(";")[0];t[s]=t[s]||t[r]}return t}destroy(){return this.destroyer_.destroy()}async doDestroy_(){let e=[];for(let[t,i]of this.queues_){let r=i[0],s=t;this.queues_.set(s,i.slice(0,1)),r&&e.push(r.p.promise.catch(()=>{}));for(let n of i.slice(1))n.p.reject(ci.destroyedError())}this.textEngine_&&e.push(this.textEngine_.destroy()),await Promise.all(e),e=[];for(let t of this.transmuxers_.values())t.destroy();for(let t of this.clearKeyDecryptors_.values())e.push(t.destroy());if(this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.video_&&(this.removeSources_(),this.video_.load(),this.video_.disableRemotePlayback=!1),this.video_=null,this.source_=null,this.secondarySource_=null,this.config_=null,this.mediaSource_=null,this.textEngine_=null,this.textDisplayer_=null,this.sourceBuffers_.clear(),this.expectedEncryption_.clear(),this.clearKeyDecryptors_.clear(),this.transmuxers_.clear(),this.captionParser_=null,Ve)for(let[t,i]of this.queues_)v.assert(i.length==0,t+" queue should be empty after destroy!");this.queues_.clear(),this.lcevcDec_=null,this.tsParsers_.clear(),this.playerInterface_=null,await Promise.all(e)}removeSources_(){var e,t;this.video_&&(this.video_.removeAttribute("src"),((e=this.source_)==null?void 0:e.parentElement)===this.video_&&this.video_.removeChild(this.source_),((t=this.secondarySource_)==null?void 0:t.parentElement)===this.video_&&this.video_.removeChild(this.secondarySource_))}open(){return this.mediaSourceOpen_.promise}async init(e,t=!1,i=me.UNKNOWN,r=!1){let s=R.ContentType;await this.mediaSourceOpen_.promise,(this.ended()||this.closed())&&(p.alwaysError("Expected MediaSource to be open during init(); reopening the media source."),this.mediaSourceOpen_=Promise.withResolvers(),this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),await this.mediaSourceOpen_.promise),this.sequenceMode_=t,this.manifestType_=i,this.ignoreManifestTimestampsInSegmentsMode_=r,this.attemptTimestampOffsetCalculation_=!this.sequenceMode_&&this.manifestType_==me.HLS&&!this.ignoreManifestTimestampsInSegmentsMode_,this.tsParsers_.clear(),this.firstVideoTimestamp_=null,this.firstVideoReferenceStartTime_=null,this.firstAudioTimestamp_=null,this.firstAudioReferenceStartTime_=null,this.audioCompensation_=Promise.withResolvers();for(let a of e.keys()){let o=e.get(a);this.initSourceBuffer_(a,o,o.codecs),this.needSplitMuxedContent_?(this.queues_.set(s.AUDIO,[]),this.queues_.set(s.VIDEO,[])):this.queues_.set(a,[])}let n=e.get(s.AUDIO);n&&n.isAudioMuxedInVideo&&(this.needSplitMuxedContent_=!0)}initSourceBuffer_(e,t,i){var n;let r=R.ContentType;e==r.AUDIO&&i&&(i=O.getCorrectAudioCodecs(i,t.mimeType)),e==r.VIDEO&&i&&t.mimeType=="video/mp4"&&(i=O.getCorrectCodecs(i,t.mimeType));let s=O.getFullType(t.mimeType,i);if(e==r.TEXT)this.reinitText(s,t.external);else{let a=this.config_.forceTransmux;(!qe.isTypeSupported(s)||!this.sequenceMode_&&O.RAW_FORMATS.includes(s))&&(a=!0);let o=O.getFullTypeWithAllCodecs(t.mimeType,i);if(a){let m=R.guessCodecsSafe(r.AUDIO,(i||"").split(",")),f=R.guessCodecsSafe(r.VIDEO,(i||"").split(","));if(m&&f){this.needSplitMuxedContent_=!0,this.initSourceBuffer_(r.AUDIO,t,m),this.initSourceBuffer_(r.VIDEO,t,f);return}let g=Ne.findTransmuxer(o);if(g){let _=new Cs(g(),this.config_.transmuxWorkerUrl);this.transmuxers_.set(e,_),s=_.convertCodecs(e,o)}}let c=this.addExtraFeaturesToMimeType_(s);this.destroyer_.ensureNotDestroyed();let d;try{d=this.mediaSource_.addSourceBuffer(c)}catch(m){throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,m,"The mediaSource_ status was "+this.mediaSource_.readyState+" expected 'open'",null)}this.sequenceMode_&&(d.mode=$t.SourceBufferMode_.SEQUENCE),this.eventManager_.listen(d,"error",()=>this.onError_(e)),this.eventManager_.listen(d,"updateend",()=>this.onUpdateEnd_(e)),this.sourceBuffers_.set(e,d),this.sourceBufferTypes_.set(e,s),this.expectedEncryption_.set(e,!!t.drmInfos.length);let u=this.playerInterface_.getDrmInfo();if(As.shouldUse(u)){let m=new As;this.clearKeyDecryptors_.set(e,m)}else(n=this.clearKeyDecryptors_.get(e))==null||n.destroy(),this.clearKeyDecryptors_.delete(e)}}configure(e){this.config_=e,this.textEngine_&&this.textEngine_.setModifyCueCallback(e.modifyCueCallback)}isStreamingAllowed(){return this.streamingAllowed_&&!this.usingRemotePlayback_&&!this.reloadingMediaSource_}isReloadingMediaSource(){return this.reloadingMediaSource_}reinitText(e,t){this.textEngine_||(this.textEngine_=new Oe(this.textDisplayer_,this.manifestType_),this.textEngine_&&this.textEngine_.setModifyCueCallback(this.config_.modifyCueCallback)),this.textEngine_.initParser(e,t,this.segmentRelativeVttTiming_)}ended(){return this.reloadingMediaSource_?!1:this.mediaSource_?this.mediaSource_.readyState=="ended":!0}closed(){return this.reloadingMediaSource_?!1:this.mediaSource_?this.mediaSource_.readyState=="closed":!0}bufferStart(e){if(!this.sourceBuffers_.size)return null;let t=R.ContentType;return e==t.TEXT?this.textEngine_.bufferStart():Je.bufferStart(this.getBuffered_(e))}bufferEnd(e){if(!this.sourceBuffers_.size)return null;let t=R.ContentType;return e==t.TEXT?this.textEngine_.bufferEnd():Je.bufferEnd(this.getBuffered_(e))}isBuffered(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.isBuffered(t);{let r=this.getBuffered_(e);return Je.isBuffered(r,t)}}bufferedAheadOf(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.bufferedAheadOf(t);{let r=this.getBuffered_(e);return Je.bufferedAheadOf(r,t)}}bufferedBehindOf(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.bufferedBehindOf(t);{let r=this.getBuffered_(e);return Je.bufferedBehindOf(r,t)}}getBufferedInfo(){let e=R.ContentType,t={total:this.reloadingMediaSource_?[]:Je.getBufferedInfo(this.video_.buffered),audio:Je.getBufferedInfo(this.getBuffered_(e.AUDIO)),video:Je.getBufferedInfo(this.getBuffered_(e.VIDEO)),text:[]};if(this.textEngine_){let i=this.textEngine_.bufferStart(),r=this.textEngine_.bufferEnd();i!=null&&r!=null&&t.text.push({start:i,end:r})}return t}hasSourceBufferFor(e){return this.sourceBuffers_.has(e)}getBuffered_(e){if(!this.canPerformOperations_())return null;try{return this.sourceBuffers_.get(e).buffered}catch(t){return this.sourceBuffers_.has(e)&&p.error("failed to get buffered range for "+e,t),null}}getCaptionParser(e){return new Mt(e)}getTimestampAndDispatchMetadata(e,t,i,r,s,n=!1){let a=null,o=[],c=D.toUint8(t);if(O.RAW_FORMATS.includes(s)){let d=At.getID3Frames(c);if(d.length&&i){let u=d.find(f=>f.description==="com.apple.streaming.transportStreamTimestamp");u&&typeof u.data=="number"&&(a=Math.round(u.data)/1e3);let m={cueTime:i.startTime,data:c,frames:d,dts:i.startTime,pts:i.startTime};this.playerInterface_.onMetadata([m],0,i.endTime)}}else if(s.includes("/mp4")&&i&&i.initSegmentReference){let d=new F,u=r.emsgSchemeIdUris!=null&&r.emsgSchemeIdUris.length>0||this.config_.dispatchAllEmsgBoxes,m=[];u&&d.fullBox("emsg",b=>{let S=this.parseEMSG_(i,r.emsgSchemeIdUris,b);S&&m.push(S)});let f=i.initSegmentReference.timescale,g=f&&!isNaN(f),_=0,T=!1;g&&d.fullBox("prft",b=>{v.assert(typeof f=="number","Timescale should be a number!"),this.parsePrft_(f,b)}).boxes(F.FRAGMENT_PATH,F.children).fullBox("tfdt",b=>{T||(v.assert(b.version==0||b.version==1,"TFDT version can only be 0 or 1"),v.assert(typeof f=="number","Timescale should be a number!"),_=pe.parseTFDTInaccurate(b.reader,b.version).baseMediaDecodeTime/f,T=!0,u||b.parser.stop())}),(u||g)&&d.parse(t,!1,n),T&&i.timestampOffset==0&&(a=_);for(let b of m)this.dispatchEmsg_(b,i,a)}else if(!s.includes("/mp4")&&!s.includes("/webm")&&mt.probe(c)){let d=this.tsParsers_.getOrInsertComputed(e,()=>new mt);d.clearData(),d.setDiscontinuitySequence(i.discontinuitySequence),d.parse(c);let u=d.getStartTimeFromPesHeaders(e);u!=null&&(a=u),o=d.getMetadata()}return{timestamp:a,metadata:o}}parseEMSG_(e,t,i){let r,s,n,a,o,c,d;i.version===0?(a=i.reader.readTerminatedString(),d=i.reader.readTerminatedString(),r=i.reader.readUint32(),c=i.reader.readUint32(),n=i.reader.readUint32(),s=i.reader.readUint32(),o=e.startTime+c/r):(r=i.reader.readUint32(),o=i.reader.readUint64()/r+e.timestampOffset,c=o-e.startTime,n=i.reader.readUint32(),s=i.reader.readUint32(),a=i.reader.readTerminatedString(),d=i.reader.readTerminatedString());let u=i.reader.readBytes(i.reader.getLength()-i.reader.getPosition(),!0);if(t&&t.includes(a)||this.config_.dispatchAllEmsgBoxes)if(a=="urn:mpeg:dash:event:2012")this.playerInterface_.onManifestUpdate();else{let m=o;return(a!=="https://aomedia.org/emsg/ID3"||n!==4294967295)&&(m+=n/r),{startTime:o,endTime:m,schemeIdUri:a,value:d,timescale:r,presentationTimeDelta:c,eventDuration:n,id:s,messageData:u}}return null}dispatchEmsg_(e,t,i){let r=qt.isFloatEqual(e.startTime,t.startTime+e.presentationTimeDelta/e.timescale);if(i&&this.manifestType_==me.HLS&&!r){let s=-i+t.startTime;e.startTime=e.startTime+s,e.endTime=e.endTime+s}if(this.playerInterface_.onEmsg(e),e.messageData&&(e.schemeIdUri=="https://aomedia.org/emsg/ID3"||e.schemeIdUri=="https://developer.apple.com/streaming/emsg-id3")){let s=At.getID3Frames(e.messageData);if(s.length){let n=e.startTime,a={cueTime:n,data:e.messageData,frames:s,dts:n,pts:n};this.playerInterface_.onMetadata([a],0,e.endTime)}}}parsePrft_(e,t){v.assert(t.version==0||t.version==1,"PRFT version can only be 0 or 1");let i=pe.parsePRFTInaccurate(t.reader,t.version),r=Wr.convertNtp(i.ntpTimestamp),s=new Date(r-i.mediaTime/e*1e3),n={wallClockTime:r,programStartDate:s},a=U.EventName.Prft,o=new Map().set("detail",n),c=new U(a,o);this.playerInterface_.onEvent(c)}dispatchBufferAppending_(e,t,i=!1){let r=U.EventName.BufferAppending,s=new Map().set("data",t).set("contentType",e).set("isInitData",i),n=new U(r,s);this.playerInterface_.onEvent(n)}async appendBuffer(e,t,i,r,s,n=!1,a=!1,o=!1,c=!1,d){let u=R.ContentType;if(e==u.TEXT)return await this.textEngine_.appendBuffer(t,i?i.startTime:null,i?i.endTime:null,i?i.getUris()[0]:null,i?i.discontinuitySequence:-1),{mediaTimestamp:null};if(!c&&this.needSplitMuxedContent_){let b=await this.appendBuffer(u.VIDEO,t,i,r,s,n,a,o,!0),S=await this.appendBuffer(u.AUDIO,t,i,r,s,n,a,o,!0);return b.mediaTimestamp!=null?b:S}if(!this.sourceBuffers_.has(e))return p.warning("Attempted to restore a non-existent source buffer"),{mediaTimestamp:null};let m=this.sourceBuffers_.get(e).timestampOffset,f=null;this.ended()&&this.enqueueOperation_(e,()=>this.reopenMediaSource_(e),null);let g=this.sourceBufferTypes_.get(e);if(this.transmuxers_.has(e)&&(g=this.transmuxers_.get(e).getOriginalMimeType()),i){let{timestamp:b,metadata:S}=this.getTimestampAndDispatchMetadata(e,t,i,r,g,o);if(b!=null){if(f=b,this.firstVideoTimestamp_==null&&e==u.VIDEO&&(this.firstVideoTimestamp_=b,this.firstVideoReferenceStartTime_=i.startTime,this.firstAudioTimestamp_!=null)){let C=0;this.firstVideoReferenceStartTime_==this.firstAudioReferenceStartTime_&&(C=this.firstVideoTimestamp_-this.firstAudioTimestamp_),this.audioCompensation_.resolve(C)}if(this.firstAudioTimestamp_==null&&e==u.AUDIO&&(this.firstAudioTimestamp_=b,this.firstAudioReferenceStartTime_=i.startTime,this.firstVideoTimestamp_!=null)){let C=0;this.firstVideoReferenceStartTime_==this.firstAudioReferenceStartTime_&&(C=this.firstVideoTimestamp_-this.firstAudioTimestamp_),this.audioCompensation_.resolve(C)}let E,w=$t.SourceBufferMode_;if(e==u.AUDIO&&this.needSplitMuxedContent_&&!this.sequenceMode_&&this.firstVideoTimestamp_!=null&&this.sourceBuffers_.has(u.VIDEO)&&this.sourceBuffers_.get(u.AUDIO).mode==w.SEGMENTS){let C=this.sourceBuffers_.get(u.VIDEO).timestampOffset,k=await this.audioCompensation_.promise;E=C+k}else{let C=b,k=O.RAW_FORMATS;!this.sequenceMode_&&k.includes(this.sourceBufferTypes_.get(e))&&(C=0),E=i.startTime-C}(Math.abs(m-E)>=.001||n||a)&&(!o||E>0||!m)&&(m=E,this.attemptTimestampOffsetCalculation_&&(this.enqueueOperation_(e,()=>this.abort_(e),null),this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,m),null))),(e==u.VIDEO||!this.sourceBuffers_.has(u.VIDEO))&&this.textEngine_&&(this.textEngine_.setTimestampOffset(m,i.discontinuitySequence),this.textEngine_.setContainerIsMpegTs((g||"").includes("mp2t")))}S.length&&this.playerInterface_.onMetadata(S,m,i?i.endTime:null)}let _=null;if(this.transmuxers_.has(e)){let b=await this.transmuxers_.get(e).transmux(t,r,i,this.mediaSource_.duration,e);if(ArrayBuffer.isView(b))t=b;else{let S=b;if(S.init!=null){let E=S.init;_=E,this.enqueueOperation_(e,()=>{this.append_(e,E,m,r,!0)},i?i.getUris()[0]:null)}t=S.data}}if(s&&e==u.VIDEO){if(this.textEngine_||this.reinitText(O.CEA608_CLOSED_CAPTION_MIMETYPE,!1),!this.captionParser_){let b=this.sourceBufferTypes_.get(e)||g;this.captionParser_=this.getCaptionParser(b.split(";",1)[0])}if((_||!i)&&this.captionParser_.init(_||t,a,d),i){let b=this.captionParser_.parseFrom(t);b.length&&this.textEngine_.storeAndAppendClosedCaptions(b,m)}}if(t=this.workAroundBrokenPlatforms_(r,t,i,e),this.clearKeyDecryptors_.has(e)){let b=O.getContainerType(this.sourceBufferTypes_.get(e))=="mp4",S=this.playerInterface_.getDrmInfo();if(b&&S){let E=i===null;t=await this.clearKeyDecryptors_.get(e).decrypt(t,E,S)}}if(i&&this.sequenceMode_&&e!=u.TEXT&&(n||a)){let b=i.startTime;if(this.manifestType_==me.HLS&&!this.needSplitMuxedContent_&&e==u.AUDIO&&this.sourceBuffers_.has(u.VIDEO)){let S=await this.audioCompensation_.promise;Math.abs(S)>.15&&(b-=S)}this.enqueueOperation_(e,()=>this.abort_(e),null),this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,b),null)}let T=null;if(await this.enqueueOperation_(e,()=>{Ve&&i&&!i.isPreload()&&!o&&(T=this.getBuffered_(e)),this.append_(e,t,m,r,!i)},i?i.getUris()[0]:null),Ve&&i&&!i.isPreload()&&!o&&this.manifestType_!==me.MSF){let b=this.getBuffered_(e),S=Je.computeAddedRange(T,b);if(S){let E=i.endTime-i.startTime,w=S.end-S.start,A=Math.abs(S.end-i.endTime);E>.1&&(A>E/2||Math.abs(E-w)>.03)&&p.error("Possible encoding problem detected!","Unexpected buffered range for reference",i,"from URIs",i.getUris(),"should be",{start:i.startTime,end:i.endTime},"but got",S)}}return{mediaTimestamp:f}}setSelectedClosedCaptionId(e){let t=R.ContentType.VIDEO,i=this.bufferEnd(t)||0;this.textEngine_.setSelectedClosedCaptionId(e,i)}clearSelectedClosedCaptionId(){this.textEngine_&&this.textEngine_.setSelectedClosedCaptionId("",0)}async remove(e,t,i,r){let s=R.ContentType;if(e==s.VIDEO&&this.captionParser_){this.captionParser_.remove(r);let n=this.textEngine_.bufferStart()||0;this.textEngine_.remove(n,i,!0)}e==s.TEXT?await this.textEngine_.remove(t,i):i>t&&(await this.enqueueOperation_(e,()=>this.remove_(e,t,i),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(s.AUDIO,()=>this.remove_(s.AUDIO,t,i),null))}async clear(e){let t=R.ContentType;if(e==t.TEXT){if(!this.textEngine_)return;await this.textEngine_.remove(0,1/0)}else e===t.VIDEO&&this.captionParser_&&this.textEngine_&&await this.textEngine_.remove(0,1/0,!0),await this.enqueueOperation_(e,()=>this.remove_(e,0,this.mediaSource_.duration),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(t.AUDIO,()=>this.remove_(t.AUDIO,0,this.mediaSource_.duration),null)}resetCaptionParser(){this.captionParser_&&this.captionParser_.reset()}async flush(e){let t=R.ContentType;e!=t.TEXT&&(await this.enqueueOperation_(e,()=>this.flush_(e),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(t.AUDIO,()=>this.flush_(t.AUDIO),null))}async setStreamProperties(e,t,i,r,s,n,a,o){let c=R.ContentType;if(e==c.TEXT){s||this.textEngine_.setTimestampOffset(t),this.textEngine_.setAppendWindow(i,r);return}let d=[];await this.codecSwitchIfNecessary_(e,n,a,o)||(d.push(this.enqueueOperation_(e,()=>this.abort_(e),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.abort_(c.AUDIO),null))),s||(d.push(this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,t),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.setTimestampOffset_(c.AUDIO,t),null))),(i!=0||r!=1/0)&&(d.push(this.enqueueOperation_(e,()=>this.setAppendWindow_(e,i,r),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.setAppendWindow_(c.AUDIO,i,r),null))),d.length&&await Promise.all(d)}async resync(e,t){let i=R.ContentType;if(e==i.TEXT||!this.sequenceMode_)return;let r=this.bufferEnd(e);r&&Math.abs(r-t)<.15||(this.enqueueOperation_(e,()=>this.abort_(e),null),this.needSplitMuxedContent_&&this.enqueueOperation_(i.AUDIO,()=>this.abort_(i.AUDIO),null),await this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,t),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(i.AUDIO,()=>this.setTimestampOffset_(i.AUDIO,t),null))}async endOfStream(e){await this.enqueueBlockingOperation_(()=>{this.ended()||this.closed()||(e?this.mediaSource_.endOfStream(e):this.mediaSource_.endOfStream())})}async setDuration(e){await this.enqueueBlockingOperation_(()=>{if(this.config_.durationReductionEmitsUpdateEnd&&e<this.mediaSource_.duration)for(let t of this.sourceBuffers_.keys()){let i={start:()=>{},p:Promise.withResolvers(),uri:null};this.queues_.get(t).unshift(i)}this.mediaSource_.duration=e,this.lastDuration_=e})}getDuration(){return this.mediaSource_.duration}async setLiveSeekableRange(e,t){!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||(v.assert("setLiveSeekableRange"in this.mediaSource_,"Using setLiveSeekableRange on not supported platform"),this.usesLiveSeekableRange_=!0,await this.enqueueBlockingOperation_(()=>{!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||this.mediaSource_.setLiveSeekableRange(e,t)}))}async clearLiveSeekableRange(){!this.canPerformOperations_()||!this.usesLiveSeekableRange_||this.mediaSource_.duration!==1/0||(v.assert("clearLiveSeekableRange"in this.mediaSource_,"Using clearLiveSeekableRange on not supported platform"),this.usesLiveSeekableRange_=!1,await this.enqueueBlockingOperation_(()=>{!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||this.mediaSource_.clearLiveSeekableRange()}))}appendDependency(e,t,i){this.lcevcDec_&&this.lcevcDec_.appendBuffer(e,t,i)}removeDependency(e,t,i){this.lcevcDec_&&this.lcevcDec_.removeBuffer(e,t,i)}append_(e,t,i,r,s=!1){this.appendDependency(t,i,r),this.dispatchBufferAppending_(e,t,s),this.sourceBuffers_.get(e).appendBuffer(t)}remove_(e,t,i){if(i<=t){this.onUpdateEnd_(e);return}this.removeDependency(e,t,i),this.sourceBuffers_.get(e).remove(t,i)}abort_(e){let t=this.sourceBuffers_.get(e),i=t.appendWindowStart,r=t.appendWindowEnd;t.abort(),t.appendWindowStart=i,t.appendWindowEnd=r,this.onUpdateEnd_(e)}reopenMediaSource_(e){let t=this.sourceBuffers_.get(e);if(!this.ended()){this.onUpdateEnd_(e);return}let i=t.buffered,r=i.length?i.end(i.length-1):0;t.remove(r,r+.001)}flush_(e){v.assert(this.video_.buffered.length==0,"MediaSourceEngine.flush_ should only be used after clearing all data!"),this.video_.currentTime-=.001,this.onUpdateEnd_(e)}setTimestampOffset_(e,t){t<0&&(t+=.001),this.sourceBuffers_.get(e).timestampOffset=t,this.onUpdateEnd_(e)}setAppendWindow_(e,t,i){let r=this.sourceBuffers_.get(e);(r.appendWindowEnd!==i||r.appendWindowStart!==t)&&(r.appendWindowStart=0,r.appendWindowEnd=i,r.appendWindowStart=t),this.onUpdateEnd_(e)}onError_(e){let t=this.queues_.get(e)[0];v.assert(t,"Spurious error event!"),v.assert(!this.sourceBuffers_.get(e).updating,"SourceBuffer should not be updating on error!");let i=this.video_.error?this.video_.error.code:0;t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_FAILED,i,t.uri))}onUpdateEnd_(e){if(this.reloadingMediaSource_||this.destroyer_.destroyed()){let i=this.queues_.get(e);if(i&&i.length){let r=i[0];r&&r.p&&r.p.resolve(),this.queues_.set(e,[])}return}let t=this.queues_.get(e)[0];v.assert(t,"Spurious updateend event!"),t&&(v.assert(!this.sourceBuffers_.get(e).updating,"SourceBuffer should not be updating on updateend!"),t.p.resolve(),this.popFromQueue_(e))}enqueueOperation_(e,t,i){this.destroyer_.ensureNotDestroyed();let r={start:t,p:Promise.withResolvers(),uri:i};return this.queues_.get(e).push(r),this.queues_.get(e).length==1&&this.startOperation_(e),r.p.promise}async enqueueBlockingOperation_(e){this.destroyer_.ensureNotDestroyed();let t=[],i=Array.from(this.sourceBuffers_.keys()),r=new Map;for(let s of i){let n=Promise.withResolvers(),a={start:()=>n.resolve(),p:n,uri:null},o=this.queues_.get(s);o.push(a),t.push(n.promise),r.set(s,a),o.length==1&&a.start()}try{await Promise.all(t)}catch(s){if(this.destroyer_.destroyed()){for(let n of i){let a=this.queues_.get(n);r.has(n)&&ye.remove(a,r.get(n))}return}throw s}if(Ve)for(let s of i)v.assert(this.sourceBuffers_.get(s).updating==!1,"SourceBuffers should not be updating after a blocking op!");try{await e()}catch(s){let n=this.video_.error?h.getMediaElementErrorDetails(this.video_.error):"No error in the media element";throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,s,n,null)}finally{for(let s of i)this.popFromQueue_(s)}}popFromQueue_(e){v.assert(this.queues_.has(e),"Queue should exist"),this.queues_.get(e).shift(),this.startOperation_(e)}startOperation_(e){let t=this.queues_.get(e)[0];if(t)try{t.start()}catch(i){if(i.name=="QuotaExceededError")t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.QUOTA_EXCEEDED_ERROR,e));else if(!this.isStreamingAllowed())t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.STREAMING_NOT_ALLOWED,e));else{let r=this.video_.error?h.getMediaElementErrorDetails(this.video_.error):"No error in the media element";t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,i,r,t.uri))}this.popFromQueue_(e)}}getTextDisplayer(){return v.assert(this.textDisplayer_,"TextDisplayer should only be null when this is destroyed"),this.textDisplayer_}setTextDisplayer(e){this.textDisplayer_=e,this.textEngine_&&this.textEngine_.setDisplayer(e)}setSegmentRelativeVttTiming(e){this.segmentRelativeVttTiming_=e}workAroundBrokenPlatforms_(e,t,i,r){let s=R.ContentType;if(!(O.getContainerType(this.sourceBufferTypes_.get(r))=="mp4"))return t;let a=i===null,o=this.expectedEncryption_.get(r),c=this.playerInterface_.getKeySystem(),d=!1;i&&i.initSegmentReference&&(d=i.initSegmentReference.encrypted);let u=i?i.getUris()[0]:null,m=j.getDevice();return this.config_.correctEc3Enca&&a&&r===s.AUDIO&&(t=Zi.correctEnca(t)),a&&m.requiresDvvcWorkaround(e)&&(t=Zi.freeDvvcBox(t)),this.config_.insertFakeEncryptionInInit&&o&&m.requiresEncryptionInfoInAllInitSegments(c,r)&&(a?(p.debug("Forcing fake encryption information in init segment."),t=Zi.fakeEncryption(e,t,u,c)):!d&&m.requiresTfhdFix(r)&&(p.debug("Forcing fake encryption information in media segment."),t=Zi.fakeMediaEncryption(t))),a&&m.requiresEC3InitSegments()&&(p.debug("Forcing fake EC-3 information in init segment."),t=Zi.fakeEC3(t)),!a&&e.isIframe&&this.config_.repairIFrames&&(t=Zi.fixBrokenIframes(t)),t}change_(e,t,i){let r=R.ContentType;if(e===r.TEXT){p.debug(`Change not supported for ${e}`);return}let s=this.sourceBufferTypes_.get(e);p.debug(`Change Type: ${s} -> ${t}`);let n=j.getDevice(),a=this.playerInterface_.getKeySystem();if(n.supportsSmoothCodecSwitching(a)){this.transmuxers_.has(e)&&(this.transmuxers_.get(e).destroy(),this.transmuxers_.delete(e)),i&&this.transmuxers_.set(e,i);let o=this.addExtraFeaturesToMimeType_(t);this.sourceBuffers_.get(e).changeType(o),this.sourceBufferTypes_.set(e,t)}else p.debug("Change Type not supported");this.onUpdateEnd_(e)}changeType(e,t,i){return this.enqueueOperation_(e,()=>this.change_(e,t,i),null)}async reset_(e){if(this.reloadingMediaSource_||this.usingRemotePlayback_)return;let t=R.ContentType;this.reloadingMediaSource_=!0,this.needSplitMuxedContent_=!1;let i=this.video_.currentTime,r=this.video_.autoplay;this.video_.paused||(this.playAfterReset_=!0),this.playbackHasBegun_&&(this.video_.autoplay=!1);try{this.eventManager_.removeAll();for(let m of this.transmuxers_.values())m.destroy();for(let m of this.clearKeyDecryptors_.values())m.destroy();for(let m of this.sourceBuffers_.values())try{this.mediaSource_.removeSourceBuffer(m)}catch(f){p.debug("Exception on removeSourceBuffer",f)}this.transmuxers_.clear(),this.sourceBuffers_.clear(),this.clearKeyDecryptors_.clear();let s=this.mediaSource_.duration;this.mediaSourceOpen_=Promise.withResolvers(),this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),await this.mediaSourceOpen_.promise,!isNaN(s)&&s?this.mediaSource_.duration=s:!isNaN(this.lastDuration_)&&this.lastDuration_&&(this.mediaSource_.duration=this.lastDuration_);let n=Promise.withResolvers(),a=this.mediaSource_.sourceBuffers,o=e.size,c=0,d=()=>{c++,c===o&&(n.resolve(),this.eventManager_.unlisten(a,"addsourcebuffer",d))};this.eventManager_.listen(a,"addsourcebuffer",d);for(let m of e.keys()){let f=e.get(m);this.initSourceBuffer_(m,f,f.codecs)}let u=e.get(t.AUDIO);u&&u.isAudioMuxedInVideo&&(this.needSplitMuxedContent_=!0),this.needSplitMuxedContent_&&!this.queues_.has(t.AUDIO)&&this.queues_.set(t.AUDIO,[]),await n.promise}finally{this.reloadingMediaSource_=!1,this.destroyer_.ensureNotDestroyed(),this.eventManager_.listenOnce(this.video_,Gt.LOADED_METADATA,()=>{this.destroyer_.destroyed()||(this.video_.currentTime=i)}),this.eventManager_.listenOnce(this.video_,Gt.CAN_PLAY_THROUGH,()=>{this.destroyer_.destroyed()||(this.video_.autoplay=r,this.playAfterReset_&&(this.playAfterReset_=!1,this.video_.play()))})}}reset(e){return this.enqueueBlockingOperation_(()=>this.reset_(e))}getRealInfo_(e,t,i){let r=R.ContentType;t=="video/mp4"&&(i=O.getCorrectCodecs(i,t));let s,n=!1,a=R.guessCodecsSafe(r.AUDIO,(i||"").split(",")),o=R.guessCodecsSafe(r.VIDEO,(i||"").split(",")),c=o;e==r.AUDIO&&(c=a),c||(c=i);let d=O.getFullType(t,c),u=O.getBasicType(this.sourceBufferTypes_.get(e)),m=this.config_.forceTransmux;if(!qe.isTypeSupported(d)||!this.sequenceMode_&&O.RAW_FORMATS.includes(d)?m=!0:!m&&t!=u&&(m=!j.getDevice().supportsContainerChangeType()&&O.RAW_FORMATS.includes(t)),m){let _=O.getFullTypeWithAllCodecs(t,c),T=Ne.findTransmuxer(_);T&&(s=new Cs(T(),this.config_.transmuxWorkerUrl),a&&o&&(n=!0),d=s.convertCodecs(e,_))}!s&&e===r.VIDEO&&a&&(d=O.getFullType(t,i));let f=O.getNormalizedCodec(O.getCodecs(d)),g=O.getBasicType(d);return{transmuxer:s,transmuxerMuxed:n,basicType:g,codec:f,mimeType:d}}getInfoAboutResetOrChangeType_(e,t,i,r){let s=R.ContentType;if(e==s.TEXT)return{type:$t.ResetMode_.NONE,newMimeType:t,transmuxer:null};let n=O.getNormalizedCodec(O.getCodecs(this.sourceBufferTypes_.get(e))),a=O.getBasicType(this.sourceBufferTypes_.get(e)),o=this.getRealInfo_(e,t,i),c=o.transmuxer,d=o.transmuxerMuxed,u=o.basicType,m=o.codec,f=o.mimeType,g=!0;if(d&&this.sourceBufferTypes_.has(s.AUDIO)){let S=this.getRealInfo_(s.AUDIO,t,i),E=O.getNormalizedCodec(O.getCodecs(this.sourceBufferTypes_.get(s.AUDIO))),w=O.getBasicType(this.sourceBufferTypes_.get(s.AUDIO));g=E==S.codec&&w==S.basicType,S.transmuxer&&S.transmuxer.destroy()}if(n===m&&a===u&&g)return{type:$t.ResetMode_.NONE,newMimeType:f,transmuxer:c};let _=!0;(this.needSplitMuxedContent_&&!r.has(s.AUDIO)||d&&c&&!this.transmuxers_.has(e))&&(_=!1);let T=j.getDevice(),b=this.playerInterface_.getKeySystem();return _&&this.config_.codecSwitchingStrategy===Pr.SMOOTH&&T.supportsSmoothCodecSwitching(b)?{type:$t.ResetMode_.CHANGE_TYPE,newMimeType:f,transmuxer:c}:(c&&c.destroy(),{type:$t.ResetMode_.RESET,newMimeType:f,transmuxer:null})}async codecSwitchIfNecessary_(e,t,i,r){let s=R.ContentType,{type:n,transmuxer:a,newMimeType:o}=this.getInfoAboutResetOrChangeType_(e,t,i,r),c=r.get(s.AUDIO);return c&&(this.needSplitMuxedContent_=c.isAudioMuxedInVideo),n==$t.ResetMode_.NONE?(this.transmuxers_.has(e)&&!a?(this.transmuxers_.get(e).destroy(),this.transmuxers_.delete(e)):!this.transmuxers_.has(e)&&a?this.transmuxers_.set(e,a):a&&(this.transmuxers_.has(e)&&this.transmuxers_.get(e).transmux!==a.transmux?(this.transmuxers_.get(e).destroy(),this.transmuxers_.set(e,a)):a.destroy()),!1):(n==$t.ResetMode_.CHANGE_TYPE?await this.changeType(e,o,a):n==$t.ResetMode_.RESET&&(a&&a.destroy(),await this.reset(r)),!0)}isResetMediaSourceNecessary(e,t,i,r){let s=this.getInfoAboutResetOrChangeType_(e,t,i,r);return s.transmuxer&&s.transmuxer.destroy(),s.type==$t.ResetMode_.RESET}updateLcevcDec(e){this.lcevcDec_=e}addExtraFeaturesToMimeType_(e){let t=this.config_.addExtraFeaturesToSourceBuffer(e),i=e+t;return p.debug("Using full mime type",i),i}canPerformOperations_(){return!(!this.mediaSource_||this.destroyer_.destroyed()||this.video_.error||this.usingRemotePlayback_||this.reloadingMediaSource_||this.closed())}};l($t,"SourceBufferMode_",{SEQUENCE:"sequence",SEGMENTS:"segments"}),l($t,"ResetMode_",{NONE:"none",RESET:"reset",CHANGE_TYPE:"changeType"});var cr=$t;cr.createObjectURL=window.URL.createObjectURL;/*! @license
|
|
300
|
+
*/var $t=class $t{constructor(e,t,i,r,s){l(this,"video_");l(this,"playerInterface_");l(this,"config_");l(this,"textDisplayer_");l(this,"sourceBuffers_");l(this,"sourceBufferTypes_");l(this,"expectedEncryption_");l(this,"textEngine_");l(this,"segmentRelativeVttTiming_");l(this,"lcevcDec_");l(this,"queues_");l(this,"eventManager_");l(this,"transmuxers_");l(this,"captionParser_");l(this,"mediaSourceOpen_");l(this,"url_");l(this,"playbackHasBegun_");l(this,"streamingAllowed_");l(this,"usingRemotePlayback_");l(this,"source_");l(this,"secondarySource_");l(this,"mediaSource_");l(this,"reloadingMediaSource_");l(this,"playAfterReset_");l(this,"destroyer_");l(this,"sequenceMode_");l(this,"manifestType_");l(this,"ignoreManifestTimestampsInSegmentsMode_");l(this,"attemptTimestampOffsetCalculation_");l(this,"needSplitMuxedContent_");l(this,"lastDuration_");l(this,"tsParsers_");l(this,"firstVideoTimestamp_");l(this,"firstVideoReferenceStartTime_");l(this,"firstAudioTimestamp_");l(this,"firstAudioReferenceStartTime_");l(this,"audioCompensation_");l(this,"usesLiveSeekableRange_");l(this,"clearKeyDecryptors_");this.video_=e,this.playerInterface_=i,this.config_=r,this.textDisplayer_=t,this.sourceBuffers_=new Map,this.sourceBufferTypes_=new Map,this.expectedEncryption_=new Map,this.textEngine_=null,this.segmentRelativeVttTiming_=!1,this.lcevcDec_=s||null,this.queues_=new Map,this.eventManager_=new ue,this.transmuxers_=new Map,this.captionParser_=null,this.mediaSourceOpen_=Promise.withResolvers(),this.url_="",this.playbackHasBegun_=!1,this.streamingAllowed_=!0,this.usingRemotePlayback_=!1,this.source_=null,this.secondarySource_=null,this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),this.reloadingMediaSource_=!1,this.playAfterReset_=!1,this.destroyer_=new ci(()=>this.doDestroy_()),this.sequenceMode_=!1,this.manifestType_=me.UNKNOWN,this.ignoreManifestTimestampsInSegmentsMode_=!1,this.attemptTimestampOffsetCalculation_=!1,this.needSplitMuxedContent_=!1,this.lastDuration_=null,this.tsParsers_=new Map,this.firstVideoTimestamp_=null,this.firstVideoReferenceStartTime_=null,this.firstAudioTimestamp_=null,this.firstAudioReferenceStartTime_=null,this.audioCompensation_=Promise.withResolvers();let a=j.getDevice().getRemote(this.video_);a&&(this.usingRemotePlayback_=a.state!="disconnected",this.eventManager_.listenMulti(a,["connect","connecting","disconnect"],()=>{this.usingRemotePlayback_=a.state!="disconnected"})),this.usesLiveSeekableRange_=!1,this.clearKeyDecryptors_=new Map}createMediaSource(e){this.streamingAllowed_=!0;let t;return window.ManagedMediaSource?(this.secondarySource_||(this.video_.disableRemotePlayback=!0),t=new ManagedMediaSource,this.eventManager_.listen(t,"startstreaming",()=>{p.info("MMS startstreaming"),this.streamingAllowed_=!0}),this.eventManager_.listen(t,"endstreaming",()=>{p.info("MMS endstreaming"),this.streamingAllowed_=!1})):t=new MediaSource,this.eventManager_.listenOnce(t,"sourceopen",()=>this.onSourceOpen_(e)),this.eventManager_.listenOnce(this.video_,"playing",()=>{this.playbackHasBegun_=!0}),this.url_=$t.createObjectURL(t),this.removeSources_(),this.config_.useSourceElements?(this.source_=Ke.createSourceElement(this.url_),this.video_.appendChild(this.source_),this.secondarySource_&&this.video_.appendChild(this.secondarySource_),this.video_.load()):this.video_.src=this.url_,t}addSecondarySource(e,t){var i;if(!this.video_||!window.ManagedMediaSource||!this.mediaSource_){p.warning("Secondary source is used only with ManagedMediaSource");return}this.config_.useSourceElements&&(((i=this.secondarySource_)==null?void 0:i.parentElement)===this.video_&&this.video_.removeChild(this.secondarySource_),this.secondarySource_=Ke.createSourceElement(e,t),this.video_.appendChild(this.secondarySource_),this.video_.disableRemotePlayback=!1)}onSourceOpen_(e){v.assert(this.url_,"Must have object URL"),URL.revokeObjectURL(this.url_),e.resolve()}static probeSupport(){let e=['video/mp4; codecs="avc1.42E01E"','video/mp4; codecs="avc3.42E01E"','video/mp4; codecs="hev1.1.6.L93.90"','video/mp4; codecs="hvc1.1.6.L93.90"','video/mp4; codecs="hev1.2.4.L153.B0"; eotf="smpte2084"','video/mp4; codecs="hvc1.2.4.L153.B0"; eotf="smpte2084"','video/mp4; codecs="hvc1.2.20000000.L153.B0"','video/mp4; codecs="hvc1.2.4.L120.b0"','video/mp4; codecs="hvc1.2.4.L123.b0"','video/mp4; codecs="vp9"','video/mp4; codecs="vp09.00.10.08"','video/mp4; codecs="av01.0.01M.08"','video/mp4; codecs="av01.0.31M.10.0.111.09.16.09.0"','video/mp4; codecs="av01.0.31M.10.0.112.09.18.09.0"','video/mp4; codecs="dvh1.05.01"','video/mp4; codecs="dvh1.08.01"','video/mp4; codecs="dav1.10.01"','video/mp4; codecs="dvh1.20.01"','audio/mp4; codecs="mp4a.40.2"','audio/mp4; codecs="ac-3"','audio/mp4; codecs="ec-3"','audio/mp4; codecs="ac-4.02.01.03"','audio/mp4; codecs="opus"','audio/mp4; codecs="flac"','audio/mp4; codecs="dtsc"','audio/mp4; codecs="dtse"','audio/mp4; codecs="dtsx"','audio/mp4; codecs="apac.31.00"','video/webm; codecs="vp8"','video/webm; codecs="vp9"','video/webm; codecs="vp09.00.10.08"','audio/webm; codecs="vorbis"','audio/webm; codecs="opus"','video/mp2t; codecs="avc1.42E01E"','video/mp2t; codecs="avc3.42E01E"','video/mp2t; codecs="hvc1.1.6.L93.90"','video/mp2t; codecs="mp4a.40.2"','video/mp2t; codecs="ac-3"','video/mp2t; codecs="ec-3"',"text/vtt",'application/mp4; codecs="wvtt"',"application/ttml+xml",'application/mp4; codecs="stpp"',...O.RAW_FORMATS],t={},i=j.getDevice();for(let r of e){if(Oe.isTypeSupported(r))t[r]=!0;else if(i.supportsMediaSource()){let n=O.getBasicType(r),a=O.getCorrectAudioCodecs(O.getCodecs(r),n),o=O.getFullType(n,a);t[r]=qe.isTypeSupported(o)||Ne.isSupported(o)}else t[r]=i.supportsMediaType(r);let s=r.split(";")[0];t[s]=t[s]||t[r]}return t}destroy(){return this.destroyer_.destroy()}async doDestroy_(){let e=[];for(let[t,i]of this.queues_){let r=i[0],s=t;this.queues_.set(s,i.slice(0,1)),r&&e.push(r.p.promise.catch(()=>{}));for(let n of i.slice(1))n.p.reject(ci.destroyedError())}this.textEngine_&&e.push(this.textEngine_.destroy()),await Promise.all(e),e=[];for(let t of this.transmuxers_.values())t.destroy();for(let t of this.clearKeyDecryptors_.values())e.push(t.destroy());if(this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.video_&&(this.removeSources_(),this.video_.load(),this.video_.disableRemotePlayback=!1),this.video_=null,this.source_=null,this.secondarySource_=null,this.config_=null,this.mediaSource_=null,this.textEngine_=null,this.textDisplayer_=null,this.sourceBuffers_.clear(),this.expectedEncryption_.clear(),this.clearKeyDecryptors_.clear(),this.transmuxers_.clear(),this.captionParser_=null,Ve)for(let[t,i]of this.queues_)v.assert(i.length==0,t+" queue should be empty after destroy!");this.queues_.clear(),this.lcevcDec_=null,this.tsParsers_.clear(),this.playerInterface_=null,await Promise.all(e)}removeSources_(){var e,t;this.video_&&(this.video_.removeAttribute("src"),((e=this.source_)==null?void 0:e.parentElement)===this.video_&&this.video_.removeChild(this.source_),((t=this.secondarySource_)==null?void 0:t.parentElement)===this.video_&&this.video_.removeChild(this.secondarySource_))}open(){return this.mediaSourceOpen_.promise}async init(e,t=!1,i=me.UNKNOWN,r=!1){let s=R.ContentType;await this.mediaSourceOpen_.promise,(this.ended()||this.closed())&&(p.alwaysError("Expected MediaSource to be open during init(); reopening the media source."),this.mediaSourceOpen_=Promise.withResolvers(),this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),await this.mediaSourceOpen_.promise),this.sequenceMode_=t,this.manifestType_=i,this.ignoreManifestTimestampsInSegmentsMode_=r,this.attemptTimestampOffsetCalculation_=!this.sequenceMode_&&this.manifestType_==me.HLS&&!this.ignoreManifestTimestampsInSegmentsMode_,this.tsParsers_.clear(),this.firstVideoTimestamp_=null,this.firstVideoReferenceStartTime_=null,this.firstAudioTimestamp_=null,this.firstAudioReferenceStartTime_=null,this.audioCompensation_=Promise.withResolvers();for(let a of e.keys()){let o=e.get(a);this.initSourceBuffer_(a,o,o.codecs),this.needSplitMuxedContent_?(this.queues_.set(s.AUDIO,[]),this.queues_.set(s.VIDEO,[])):this.queues_.set(a,[])}let n=e.get(s.AUDIO);n&&n.isAudioMuxedInVideo&&(this.needSplitMuxedContent_=!0)}initSourceBuffer_(e,t,i){var n;let r=R.ContentType;e==r.AUDIO&&i&&(i=O.getCorrectAudioCodecs(i,t.mimeType)),e==r.VIDEO&&i&&t.mimeType=="video/mp4"&&(i=O.getCorrectCodecs(i,t.mimeType));let s=O.getFullType(t.mimeType,i);if(e==r.TEXT)this.reinitText(s,t.external);else{let a=this.config_.forceTransmux;(!qe.isTypeSupported(s)||!this.sequenceMode_&&O.RAW_FORMATS.includes(s))&&(a=!0);let o=O.getFullTypeWithAllCodecs(t.mimeType,i);if(a){let m=R.guessCodecsSafe(r.AUDIO,(i||"").split(",")),f=R.guessCodecsSafe(r.VIDEO,(i||"").split(","));if(m&&f){this.needSplitMuxedContent_=!0,this.initSourceBuffer_(r.AUDIO,t,m),this.initSourceBuffer_(r.VIDEO,t,f);return}let g=Ne.findTransmuxer(o);if(g){let _=new Cs(g(),this.config_.transmuxWorkerUrl);this.transmuxers_.set(e,_),s=_.convertCodecs(e,o)}}let c=this.addExtraFeaturesToMimeType_(s);this.destroyer_.ensureNotDestroyed();let d;try{d=this.mediaSource_.addSourceBuffer(c)}catch(m){throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,m,"The mediaSource_ status was "+this.mediaSource_.readyState+" expected 'open'",null)}this.sequenceMode_&&(d.mode=$t.SourceBufferMode_.SEQUENCE),this.eventManager_.listen(d,"error",()=>this.onError_(e)),this.eventManager_.listen(d,"updateend",()=>this.onUpdateEnd_(e)),this.sourceBuffers_.set(e,d),this.sourceBufferTypes_.set(e,s),this.expectedEncryption_.set(e,!!t.drmInfos.length);let u=this.playerInterface_.getDrmInfo();if(As.shouldUse(u)){let m=new As;this.clearKeyDecryptors_.set(e,m)}else(n=this.clearKeyDecryptors_.get(e))==null||n.destroy(),this.clearKeyDecryptors_.delete(e)}}configure(e){this.config_=e,this.textEngine_&&this.textEngine_.setModifyCueCallback(e.modifyCueCallback)}isStreamingAllowed(){return this.streamingAllowed_&&!this.usingRemotePlayback_&&!this.reloadingMediaSource_}isReloadingMediaSource(){return this.reloadingMediaSource_}reinitText(e,t){this.textEngine_||(this.textEngine_=new Oe(this.textDisplayer_,this.manifestType_),this.textEngine_&&this.textEngine_.setModifyCueCallback(this.config_.modifyCueCallback)),this.textEngine_.initParser(e,t,this.segmentRelativeVttTiming_)}ended(){return this.reloadingMediaSource_?!1:this.mediaSource_?this.mediaSource_.readyState=="ended":!0}closed(){return this.reloadingMediaSource_?!1:this.mediaSource_?this.mediaSource_.readyState=="closed":!0}bufferStart(e){if(!this.sourceBuffers_.size)return null;let t=R.ContentType;return e==t.TEXT?this.textEngine_.bufferStart():Je.bufferStart(this.getBuffered_(e))}bufferEnd(e){if(!this.sourceBuffers_.size)return null;let t=R.ContentType;return e==t.TEXT?this.textEngine_.bufferEnd():Je.bufferEnd(this.getBuffered_(e))}isBuffered(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.isBuffered(t);{let r=this.getBuffered_(e);return Je.isBuffered(r,t)}}bufferedAheadOf(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.bufferedAheadOf(t);{let r=this.getBuffered_(e);return Je.bufferedAheadOf(r,t)}}bufferedBehindOf(e,t){let i=R.ContentType;if(e==i.TEXT)return this.textEngine_.bufferedBehindOf(t);{let r=this.getBuffered_(e);return Je.bufferedBehindOf(r,t)}}getBufferedInfo(){let e=R.ContentType,t={total:this.reloadingMediaSource_?[]:Je.getBufferedInfo(this.video_.buffered),audio:Je.getBufferedInfo(this.getBuffered_(e.AUDIO)),video:Je.getBufferedInfo(this.getBuffered_(e.VIDEO)),text:[]};if(this.textEngine_){let i=this.textEngine_.bufferStart(),r=this.textEngine_.bufferEnd();i!=null&&r!=null&&t.text.push({start:i,end:r})}return t}hasSourceBufferFor(e){return this.sourceBuffers_.has(e)}getBuffered_(e){if(!this.canPerformOperations_())return null;try{return this.sourceBuffers_.get(e).buffered}catch(t){return this.sourceBuffers_.has(e)&&p.error("failed to get buffered range for "+e,t),null}}getCaptionParser(e){return new Mt(e)}getTimestampAndDispatchMetadata(e,t,i,r,s,n=!1){let a=null,o=[],c=U.toUint8(t);if(O.RAW_FORMATS.includes(s)){let d=At.getID3Frames(c);if(d.length&&i){let u=d.find(f=>f.description==="com.apple.streaming.transportStreamTimestamp");u&&typeof u.data=="number"&&(a=Math.round(u.data)/1e3);let m={cueTime:i.startTime,data:c,frames:d,dts:i.startTime,pts:i.startTime};this.playerInterface_.onMetadata([m],0,i.endTime)}}else if(s.includes("/mp4")&&i&&i.initSegmentReference){let d=new F,u=r.emsgSchemeIdUris!=null&&r.emsgSchemeIdUris.length>0||this.config_.dispatchAllEmsgBoxes,m=[];u&&d.fullBox("emsg",b=>{let S=this.parseEMSG_(i,r.emsgSchemeIdUris,b);S&&m.push(S)});let f=i.initSegmentReference.timescale,g=f&&!isNaN(f),_=0,T=!1;g&&d.fullBox("prft",b=>{v.assert(typeof f=="number","Timescale should be a number!"),this.parsePrft_(f,b)}).boxes(F.FRAGMENT_PATH,F.children).fullBox("tfdt",b=>{T||(v.assert(b.version==0||b.version==1,"TFDT version can only be 0 or 1"),v.assert(typeof f=="number","Timescale should be a number!"),_=pe.parseTFDTInaccurate(b.reader,b.version).baseMediaDecodeTime/f,T=!0,u||b.parser.stop())}),(u||g)&&d.parse(t,!1,n),T&&i.timestampOffset==0&&(a=_);for(let b of m)this.dispatchEmsg_(b,i,a)}else if(!s.includes("/mp4")&&!s.includes("/webm")&&mt.probe(c)){let d=this.tsParsers_.getOrInsertComputed(e,()=>new mt);d.clearData(),d.setDiscontinuitySequence(i.discontinuitySequence),d.parse(c);let u=d.getStartTimeFromPesHeaders(e);u!=null&&(a=u),o=d.getMetadata()}return{timestamp:a,metadata:o}}parseEMSG_(e,t,i){let r,s,n,a,o,c,d;i.version===0?(a=i.reader.readTerminatedString(),d=i.reader.readTerminatedString(),r=i.reader.readUint32(),c=i.reader.readUint32(),n=i.reader.readUint32(),s=i.reader.readUint32(),o=e.startTime+c/r):(r=i.reader.readUint32(),o=i.reader.readUint64()/r+e.timestampOffset,c=o-e.startTime,n=i.reader.readUint32(),s=i.reader.readUint32(),a=i.reader.readTerminatedString(),d=i.reader.readTerminatedString());let u=i.reader.readBytes(i.reader.getLength()-i.reader.getPosition(),!0);if(t&&t.includes(a)||this.config_.dispatchAllEmsgBoxes)if(a=="urn:mpeg:dash:event:2012")this.playerInterface_.onManifestUpdate();else{let m=o;return(a!=="https://aomedia.org/emsg/ID3"||n!==4294967295)&&(m+=n/r),{startTime:o,endTime:m,schemeIdUri:a,value:d,timescale:r,presentationTimeDelta:c,eventDuration:n,id:s,messageData:u}}return null}dispatchEmsg_(e,t,i){let r=qt.isFloatEqual(e.startTime,t.startTime+e.presentationTimeDelta/e.timescale);if(i&&this.manifestType_==me.HLS&&!r){let s=-i+t.startTime;e.startTime=e.startTime+s,e.endTime=e.endTime+s}if(this.playerInterface_.onEmsg(e),e.messageData&&(e.schemeIdUri=="https://aomedia.org/emsg/ID3"||e.schemeIdUri=="https://developer.apple.com/streaming/emsg-id3")){let s=At.getID3Frames(e.messageData);if(s.length){let n=e.startTime,a={cueTime:n,data:e.messageData,frames:s,dts:n,pts:n};this.playerInterface_.onMetadata([a],0,e.endTime)}}}parsePrft_(e,t){v.assert(t.version==0||t.version==1,"PRFT version can only be 0 or 1");let i=pe.parsePRFTInaccurate(t.reader,t.version),r=Wr.convertNtp(i.ntpTimestamp),s=new Date(r-i.mediaTime/e*1e3),n={wallClockTime:r,programStartDate:s},a=L.EventName.Prft,o=new Map().set("detail",n),c=new L(a,o);this.playerInterface_.onEvent(c)}dispatchBufferAppending_(e,t,i=!1){let r=L.EventName.BufferAppending,s=new Map().set("data",t).set("contentType",e).set("isInitData",i),n=new L(r,s);this.playerInterface_.onEvent(n)}async appendBuffer(e,t,i,r,s,n=!1,a=!1,o=!1,c=!1,d){let u=R.ContentType;if(e==u.TEXT)return await this.textEngine_.appendBuffer(t,i?i.startTime:null,i?i.endTime:null,i?i.getUris()[0]:null,i?i.discontinuitySequence:-1),{mediaTimestamp:null};if(!c&&this.needSplitMuxedContent_){let b=await this.appendBuffer(u.VIDEO,t,i,r,s,n,a,o,!0),S=await this.appendBuffer(u.AUDIO,t,i,r,s,n,a,o,!0);return b.mediaTimestamp!=null?b:S}if(!this.sourceBuffers_.has(e))return p.warning("Attempted to restore a non-existent source buffer"),{mediaTimestamp:null};let m=this.sourceBuffers_.get(e).timestampOffset,f=null;this.ended()&&this.enqueueOperation_(e,()=>this.reopenMediaSource_(e),null);let g=this.sourceBufferTypes_.get(e);if(this.transmuxers_.has(e)&&(g=this.transmuxers_.get(e).getOriginalMimeType()),i){let{timestamp:b,metadata:S}=this.getTimestampAndDispatchMetadata(e,t,i,r,g,o);if(b!=null){if(f=b,this.firstVideoTimestamp_==null&&e==u.VIDEO&&(this.firstVideoTimestamp_=b,this.firstVideoReferenceStartTime_=i.startTime,this.firstAudioTimestamp_!=null)){let C=0;this.firstVideoReferenceStartTime_==this.firstAudioReferenceStartTime_&&(C=this.firstVideoTimestamp_-this.firstAudioTimestamp_),this.audioCompensation_.resolve(C)}if(this.firstAudioTimestamp_==null&&e==u.AUDIO&&(this.firstAudioTimestamp_=b,this.firstAudioReferenceStartTime_=i.startTime,this.firstVideoTimestamp_!=null)){let C=0;this.firstVideoReferenceStartTime_==this.firstAudioReferenceStartTime_&&(C=this.firstVideoTimestamp_-this.firstAudioTimestamp_),this.audioCompensation_.resolve(C)}let E,w=$t.SourceBufferMode_;if(e==u.AUDIO&&this.needSplitMuxedContent_&&!this.sequenceMode_&&this.firstVideoTimestamp_!=null&&this.sourceBuffers_.has(u.VIDEO)&&this.sourceBuffers_.get(u.AUDIO).mode==w.SEGMENTS){let C=this.sourceBuffers_.get(u.VIDEO).timestampOffset,k=await this.audioCompensation_.promise;E=C+k}else{let C=b,k=O.RAW_FORMATS;!this.sequenceMode_&&k.includes(this.sourceBufferTypes_.get(e))&&(C=0),E=i.startTime-C}(Math.abs(m-E)>=.001||n||a)&&(!o||E>0||!m)&&(m=E,this.attemptTimestampOffsetCalculation_&&(this.enqueueOperation_(e,()=>this.abort_(e),null),this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,m),null))),(e==u.VIDEO||!this.sourceBuffers_.has(u.VIDEO))&&this.textEngine_&&(this.textEngine_.setTimestampOffset(m,i.discontinuitySequence),this.textEngine_.setContainerIsMpegTs((g||"").includes("mp2t")))}S.length&&this.playerInterface_.onMetadata(S,m,i?i.endTime:null)}let _=null;if(this.transmuxers_.has(e)){let b=await this.transmuxers_.get(e).transmux(t,r,i,this.mediaSource_.duration,e);if(ArrayBuffer.isView(b))t=b;else{let S=b;if(S.init!=null){let E=S.init;_=E,this.enqueueOperation_(e,()=>{this.append_(e,E,m,r,!0)},i?i.getUris()[0]:null)}t=S.data}}if(s&&e==u.VIDEO){if(this.textEngine_||this.reinitText(O.CEA608_CLOSED_CAPTION_MIMETYPE,!1),!this.captionParser_){let b=this.sourceBufferTypes_.get(e)||g;this.captionParser_=this.getCaptionParser(b.split(";",1)[0])}if((_||!i)&&this.captionParser_.init(_||t,a,d),i){let b=this.captionParser_.parseFrom(t);b.length&&this.textEngine_.storeAndAppendClosedCaptions(b,m)}}if(t=this.workAroundBrokenPlatforms_(r,t,i,e),this.clearKeyDecryptors_.has(e)){let b=O.getContainerType(this.sourceBufferTypes_.get(e))=="mp4",S=this.playerInterface_.getDrmInfo();if(b&&S){let E=i===null;t=await this.clearKeyDecryptors_.get(e).decrypt(t,E,S)}}if(i&&this.sequenceMode_&&e!=u.TEXT&&(n||a)){let b=i.startTime;if(this.manifestType_==me.HLS&&!this.needSplitMuxedContent_&&e==u.AUDIO&&this.sourceBuffers_.has(u.VIDEO)){let S=await this.audioCompensation_.promise;Math.abs(S)>.15&&(b-=S)}this.enqueueOperation_(e,()=>this.abort_(e),null),this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,b),null)}let T=null;if(await this.enqueueOperation_(e,()=>{Ve&&i&&!i.isPreload()&&!o&&(T=this.getBuffered_(e)),this.append_(e,t,m,r,!i)},i?i.getUris()[0]:null),Ve&&i&&!i.isPreload()&&!o&&this.manifestType_!==me.MSF){let b=this.getBuffered_(e),S=Je.computeAddedRange(T,b);if(S){let E=i.endTime-i.startTime,w=S.end-S.start,A=Math.abs(S.end-i.endTime);E>.1&&(A>E/2||Math.abs(E-w)>.03)&&p.error("Possible encoding problem detected!","Unexpected buffered range for reference",i,"from URIs",i.getUris(),"should be",{start:i.startTime,end:i.endTime},"but got",S)}}return{mediaTimestamp:f}}setSelectedClosedCaptionId(e){let t=R.ContentType.VIDEO,i=this.bufferEnd(t)||0;this.textEngine_.setSelectedClosedCaptionId(e,i)}clearSelectedClosedCaptionId(){this.textEngine_&&this.textEngine_.setSelectedClosedCaptionId("",0)}async remove(e,t,i,r){let s=R.ContentType;if(e==s.VIDEO&&this.captionParser_){this.captionParser_.remove(r);let n=this.textEngine_.bufferStart()||0;this.textEngine_.remove(n,i,!0)}e==s.TEXT?await this.textEngine_.remove(t,i):i>t&&(await this.enqueueOperation_(e,()=>this.remove_(e,t,i),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(s.AUDIO,()=>this.remove_(s.AUDIO,t,i),null))}async clear(e){let t=R.ContentType;if(e==t.TEXT){if(!this.textEngine_)return;await this.textEngine_.remove(0,1/0)}else e===t.VIDEO&&this.captionParser_&&this.textEngine_&&await this.textEngine_.remove(0,1/0,!0),await this.enqueueOperation_(e,()=>this.remove_(e,0,this.mediaSource_.duration),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(t.AUDIO,()=>this.remove_(t.AUDIO,0,this.mediaSource_.duration),null)}resetCaptionParser(){this.captionParser_&&this.captionParser_.reset()}async flush(e){let t=R.ContentType;e!=t.TEXT&&(await this.enqueueOperation_(e,()=>this.flush_(e),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(t.AUDIO,()=>this.flush_(t.AUDIO),null))}async setStreamProperties(e,t,i,r,s,n,a,o){let c=R.ContentType;if(e==c.TEXT){s||this.textEngine_.setTimestampOffset(t),this.textEngine_.setAppendWindow(i,r);return}let d=[];await this.codecSwitchIfNecessary_(e,n,a,o)||(d.push(this.enqueueOperation_(e,()=>this.abort_(e),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.abort_(c.AUDIO),null))),s||(d.push(this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,t),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.setTimestampOffset_(c.AUDIO,t),null))),(i!=0||r!=1/0)&&(d.push(this.enqueueOperation_(e,()=>this.setAppendWindow_(e,i,r),null)),this.needSplitMuxedContent_&&d.push(this.enqueueOperation_(c.AUDIO,()=>this.setAppendWindow_(c.AUDIO,i,r),null))),d.length&&await Promise.all(d)}async resync(e,t){let i=R.ContentType;if(e==i.TEXT||!this.sequenceMode_)return;let r=this.bufferEnd(e);r&&Math.abs(r-t)<.15||(this.enqueueOperation_(e,()=>this.abort_(e),null),this.needSplitMuxedContent_&&this.enqueueOperation_(i.AUDIO,()=>this.abort_(i.AUDIO),null),await this.enqueueOperation_(e,()=>this.setTimestampOffset_(e,t),null),this.needSplitMuxedContent_&&await this.enqueueOperation_(i.AUDIO,()=>this.setTimestampOffset_(i.AUDIO,t),null))}async endOfStream(e){await this.enqueueBlockingOperation_(()=>{this.ended()||this.closed()||(e?this.mediaSource_.endOfStream(e):this.mediaSource_.endOfStream())})}async setDuration(e){await this.enqueueBlockingOperation_(()=>{if(this.config_.durationReductionEmitsUpdateEnd&&e<this.mediaSource_.duration)for(let t of this.sourceBuffers_.keys()){let i={start:()=>{},p:Promise.withResolvers(),uri:null};this.queues_.get(t).unshift(i)}this.mediaSource_.duration=e,this.lastDuration_=e})}getDuration(){return this.mediaSource_.duration}async setLiveSeekableRange(e,t){!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||(v.assert("setLiveSeekableRange"in this.mediaSource_,"Using setLiveSeekableRange on not supported platform"),this.usesLiveSeekableRange_=!0,await this.enqueueBlockingOperation_(()=>{!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||this.mediaSource_.setLiveSeekableRange(e,t)}))}async clearLiveSeekableRange(){!this.canPerformOperations_()||!this.usesLiveSeekableRange_||this.mediaSource_.duration!==1/0||(v.assert("clearLiveSeekableRange"in this.mediaSource_,"Using clearLiveSeekableRange on not supported platform"),this.usesLiveSeekableRange_=!1,await this.enqueueBlockingOperation_(()=>{!this.canPerformOperations_()||this.mediaSource_.duration!==1/0||this.mediaSource_.clearLiveSeekableRange()}))}appendDependency(e,t,i){this.lcevcDec_&&this.lcevcDec_.appendBuffer(e,t,i)}removeDependency(e,t,i){this.lcevcDec_&&this.lcevcDec_.removeBuffer(e,t,i)}append_(e,t,i,r,s=!1){this.appendDependency(t,i,r),this.dispatchBufferAppending_(e,t,s),this.sourceBuffers_.get(e).appendBuffer(t)}remove_(e,t,i){if(i<=t){this.onUpdateEnd_(e);return}this.removeDependency(e,t,i),this.sourceBuffers_.get(e).remove(t,i)}abort_(e){let t=this.sourceBuffers_.get(e),i=t.appendWindowStart,r=t.appendWindowEnd;t.abort(),t.appendWindowStart=i,t.appendWindowEnd=r,this.onUpdateEnd_(e)}reopenMediaSource_(e){let t=this.sourceBuffers_.get(e);if(!this.ended()){this.onUpdateEnd_(e);return}let i=t.buffered,r=i.length?i.end(i.length-1):0;t.remove(r,r+.001)}flush_(e){v.assert(this.video_.buffered.length==0,"MediaSourceEngine.flush_ should only be used after clearing all data!"),this.video_.currentTime-=.001,this.onUpdateEnd_(e)}setTimestampOffset_(e,t){t<0&&(t+=.001),this.sourceBuffers_.get(e).timestampOffset=t,this.onUpdateEnd_(e)}setAppendWindow_(e,t,i){let r=this.sourceBuffers_.get(e);(r.appendWindowEnd!==i||r.appendWindowStart!==t)&&(r.appendWindowStart=0,r.appendWindowEnd=i,r.appendWindowStart=t),this.onUpdateEnd_(e)}onError_(e){let t=this.queues_.get(e)[0];v.assert(t,"Spurious error event!"),v.assert(!this.sourceBuffers_.get(e).updating,"SourceBuffer should not be updating on error!");let i=this.video_.error?this.video_.error.code:0;t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_FAILED,i,t.uri))}onUpdateEnd_(e){if(this.reloadingMediaSource_||this.destroyer_.destroyed()){let i=this.queues_.get(e);if(i&&i.length){let r=i[0];r&&r.p&&r.p.resolve(),this.queues_.set(e,[])}return}let t=this.queues_.get(e)[0];v.assert(t,"Spurious updateend event!"),t&&(v.assert(!this.sourceBuffers_.get(e).updating,"SourceBuffer should not be updating on updateend!"),t.p.resolve(),this.popFromQueue_(e))}enqueueOperation_(e,t,i){this.destroyer_.ensureNotDestroyed();let r={start:t,p:Promise.withResolvers(),uri:i};return this.queues_.get(e).push(r),this.queues_.get(e).length==1&&this.startOperation_(e),r.p.promise}async enqueueBlockingOperation_(e){this.destroyer_.ensureNotDestroyed();let t=[],i=Array.from(this.sourceBuffers_.keys()),r=new Map;for(let s of i){let n=Promise.withResolvers(),a={start:()=>n.resolve(),p:n,uri:null},o=this.queues_.get(s);o.push(a),t.push(n.promise),r.set(s,a),o.length==1&&a.start()}try{await Promise.all(t)}catch(s){if(this.destroyer_.destroyed()){for(let n of i){let a=this.queues_.get(n);r.has(n)&&ye.remove(a,r.get(n))}return}throw s}if(Ve)for(let s of i)v.assert(this.sourceBuffers_.get(s).updating==!1,"SourceBuffers should not be updating after a blocking op!");try{await e()}catch(s){let n=this.video_.error?h.getMediaElementErrorDetails(this.video_.error):"No error in the media element";throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,s,n,null)}finally{for(let s of i)this.popFromQueue_(s)}}popFromQueue_(e){v.assert(this.queues_.has(e),"Queue should exist"),this.queues_.get(e).shift(),this.startOperation_(e)}startOperation_(e){let t=this.queues_.get(e)[0];if(t)try{t.start()}catch(i){if(i.name=="QuotaExceededError")t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.QUOTA_EXCEEDED_ERROR,e));else if(!this.isStreamingAllowed())t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.STREAMING_NOT_ALLOWED,e));else{let r=this.video_.error?h.getMediaElementErrorDetails(this.video_.error):"No error in the media element";t.p.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.MEDIA_SOURCE_OPERATION_THREW,i,r,t.uri))}this.popFromQueue_(e)}}getTextDisplayer(){return v.assert(this.textDisplayer_,"TextDisplayer should only be null when this is destroyed"),this.textDisplayer_}setTextDisplayer(e){this.textDisplayer_=e,this.textEngine_&&this.textEngine_.setDisplayer(e)}setSegmentRelativeVttTiming(e){this.segmentRelativeVttTiming_=e}workAroundBrokenPlatforms_(e,t,i,r){let s=R.ContentType;if(!(O.getContainerType(this.sourceBufferTypes_.get(r))=="mp4"))return t;let a=i===null,o=this.expectedEncryption_.get(r),c=this.playerInterface_.getKeySystem(),d=!1;i&&i.initSegmentReference&&(d=i.initSegmentReference.encrypted);let u=i?i.getUris()[0]:null,m=j.getDevice();return this.config_.correctEc3Enca&&a&&r===s.AUDIO&&(t=Zi.correctEnca(t)),a&&m.requiresDvvcWorkaround(e)&&(t=Zi.freeDvvcBox(t)),this.config_.insertFakeEncryptionInInit&&o&&m.requiresEncryptionInfoInAllInitSegments(c,r)&&(a?(p.debug("Forcing fake encryption information in init segment."),t=Zi.fakeEncryption(e,t,u,c)):!d&&m.requiresTfhdFix(r)&&(p.debug("Forcing fake encryption information in media segment."),t=Zi.fakeMediaEncryption(t))),a&&m.requiresEC3InitSegments()&&(p.debug("Forcing fake EC-3 information in init segment."),t=Zi.fakeEC3(t)),!a&&e.isIframe&&this.config_.repairIFrames&&(t=Zi.fixBrokenIframes(t)),t}change_(e,t,i){let r=R.ContentType;if(e===r.TEXT){p.debug(`Change not supported for ${e}`);return}let s=this.sourceBufferTypes_.get(e);p.debug(`Change Type: ${s} -> ${t}`);let n=j.getDevice(),a=this.playerInterface_.getKeySystem();if(n.supportsSmoothCodecSwitching(a)){this.transmuxers_.has(e)&&(this.transmuxers_.get(e).destroy(),this.transmuxers_.delete(e)),i&&this.transmuxers_.set(e,i);let o=this.addExtraFeaturesToMimeType_(t);this.sourceBuffers_.get(e).changeType(o),this.sourceBufferTypes_.set(e,t)}else p.debug("Change Type not supported");this.onUpdateEnd_(e)}changeType(e,t,i){return this.enqueueOperation_(e,()=>this.change_(e,t,i),null)}async reset_(e){if(this.reloadingMediaSource_||this.usingRemotePlayback_)return;let t=R.ContentType;this.reloadingMediaSource_=!0,this.needSplitMuxedContent_=!1;let i=this.video_.currentTime,r=this.video_.autoplay;this.video_.paused||(this.playAfterReset_=!0),this.playbackHasBegun_&&(this.video_.autoplay=!1);try{this.eventManager_.removeAll();for(let m of this.transmuxers_.values())m.destroy();for(let m of this.clearKeyDecryptors_.values())m.destroy();for(let m of this.sourceBuffers_.values())try{this.mediaSource_.removeSourceBuffer(m)}catch(f){p.debug("Exception on removeSourceBuffer",f)}this.transmuxers_.clear(),this.sourceBuffers_.clear(),this.clearKeyDecryptors_.clear();let s=this.mediaSource_.duration;this.mediaSourceOpen_=Promise.withResolvers(),this.mediaSource_=this.createMediaSource(this.mediaSourceOpen_),await this.mediaSourceOpen_.promise,!isNaN(s)&&s?this.mediaSource_.duration=s:!isNaN(this.lastDuration_)&&this.lastDuration_&&(this.mediaSource_.duration=this.lastDuration_);let n=Promise.withResolvers(),a=this.mediaSource_.sourceBuffers,o=e.size,c=0,d=()=>{c++,c===o&&(n.resolve(),this.eventManager_.unlisten(a,"addsourcebuffer",d))};this.eventManager_.listen(a,"addsourcebuffer",d);for(let m of e.keys()){let f=e.get(m);this.initSourceBuffer_(m,f,f.codecs)}let u=e.get(t.AUDIO);u&&u.isAudioMuxedInVideo&&(this.needSplitMuxedContent_=!0),this.needSplitMuxedContent_&&!this.queues_.has(t.AUDIO)&&this.queues_.set(t.AUDIO,[]),await n.promise}finally{this.reloadingMediaSource_=!1,this.destroyer_.ensureNotDestroyed(),this.eventManager_.listenOnce(this.video_,Gt.LOADED_METADATA,()=>{this.destroyer_.destroyed()||(this.video_.currentTime=i)}),this.eventManager_.listenOnce(this.video_,Gt.CAN_PLAY_THROUGH,()=>{this.destroyer_.destroyed()||(this.video_.autoplay=r,this.playAfterReset_&&(this.playAfterReset_=!1,this.video_.play()))})}}reset(e){return this.enqueueBlockingOperation_(()=>this.reset_(e))}getRealInfo_(e,t,i){let r=R.ContentType;t=="video/mp4"&&(i=O.getCorrectCodecs(i,t));let s,n=!1,a=R.guessCodecsSafe(r.AUDIO,(i||"").split(",")),o=R.guessCodecsSafe(r.VIDEO,(i||"").split(",")),c=o;e==r.AUDIO&&(c=a),c||(c=i);let d=O.getFullType(t,c),u=O.getBasicType(this.sourceBufferTypes_.get(e)),m=this.config_.forceTransmux;if(!qe.isTypeSupported(d)||!this.sequenceMode_&&O.RAW_FORMATS.includes(d)?m=!0:!m&&t!=u&&(m=!j.getDevice().supportsContainerChangeType()&&O.RAW_FORMATS.includes(t)),m){let _=O.getFullTypeWithAllCodecs(t,c),T=Ne.findTransmuxer(_);T&&(s=new Cs(T(),this.config_.transmuxWorkerUrl),a&&o&&(n=!0),d=s.convertCodecs(e,_))}!s&&e===r.VIDEO&&a&&(d=O.getFullType(t,i));let f=O.getNormalizedCodec(O.getCodecs(d)),g=O.getBasicType(d);return{transmuxer:s,transmuxerMuxed:n,basicType:g,codec:f,mimeType:d}}getInfoAboutResetOrChangeType_(e,t,i,r){let s=R.ContentType;if(e==s.TEXT)return{type:$t.ResetMode_.NONE,newMimeType:t,transmuxer:null};let n=O.getNormalizedCodec(O.getCodecs(this.sourceBufferTypes_.get(e))),a=O.getBasicType(this.sourceBufferTypes_.get(e)),o=this.getRealInfo_(e,t,i),c=o.transmuxer,d=o.transmuxerMuxed,u=o.basicType,m=o.codec,f=o.mimeType,g=!0;if(d&&this.sourceBufferTypes_.has(s.AUDIO)){let S=this.getRealInfo_(s.AUDIO,t,i),E=O.getNormalizedCodec(O.getCodecs(this.sourceBufferTypes_.get(s.AUDIO))),w=O.getBasicType(this.sourceBufferTypes_.get(s.AUDIO));g=E==S.codec&&w==S.basicType,S.transmuxer&&S.transmuxer.destroy()}if(n===m&&a===u&&g)return{type:$t.ResetMode_.NONE,newMimeType:f,transmuxer:c};let _=!0;(this.needSplitMuxedContent_&&!r.has(s.AUDIO)||d&&c&&!this.transmuxers_.has(e))&&(_=!1);let T=j.getDevice(),b=this.playerInterface_.getKeySystem();return _&&this.config_.codecSwitchingStrategy===Pr.SMOOTH&&T.supportsSmoothCodecSwitching(b)?{type:$t.ResetMode_.CHANGE_TYPE,newMimeType:f,transmuxer:c}:(c&&c.destroy(),{type:$t.ResetMode_.RESET,newMimeType:f,transmuxer:null})}async codecSwitchIfNecessary_(e,t,i,r){let s=R.ContentType,{type:n,transmuxer:a,newMimeType:o}=this.getInfoAboutResetOrChangeType_(e,t,i,r),c=r.get(s.AUDIO);return c&&(this.needSplitMuxedContent_=c.isAudioMuxedInVideo),n==$t.ResetMode_.NONE?(this.transmuxers_.has(e)&&!a?(this.transmuxers_.get(e).destroy(),this.transmuxers_.delete(e)):!this.transmuxers_.has(e)&&a?this.transmuxers_.set(e,a):a&&(this.transmuxers_.has(e)&&this.transmuxers_.get(e).transmux!==a.transmux?(this.transmuxers_.get(e).destroy(),this.transmuxers_.set(e,a)):a.destroy()),!1):(n==$t.ResetMode_.CHANGE_TYPE?await this.changeType(e,o,a):n==$t.ResetMode_.RESET&&(a&&a.destroy(),await this.reset(r)),!0)}isResetMediaSourceNecessary(e,t,i,r){let s=this.getInfoAboutResetOrChangeType_(e,t,i,r);return s.transmuxer&&s.transmuxer.destroy(),s.type==$t.ResetMode_.RESET}updateLcevcDec(e){this.lcevcDec_=e}addExtraFeaturesToMimeType_(e){let t=this.config_.addExtraFeaturesToSourceBuffer(e),i=e+t;return p.debug("Using full mime type",i),i}canPerformOperations_(){return!(!this.mediaSource_||this.destroyer_.destroyed()||this.video_.error||this.usingRemotePlayback_||this.reloadingMediaSource_||this.closed())}};l($t,"SourceBufferMode_",{SEQUENCE:"sequence",SEGMENTS:"segments"}),l($t,"ResetMode_",{NONE:"none",RESET:"reset",CHANGE_TYPE:"changeType"});var cr=$t;cr.createObjectURL=window.URL.createObjectURL;/*! @license
|
|
301
301
|
* Shaka Player
|
|
302
302
|
* Copyright 2016 Google LLC
|
|
303
303
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -305,7 +305,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
305
305
|
* Shaka Player
|
|
306
306
|
* Copyright 2016 Google LLC
|
|
307
307
|
* SPDX-License-Identifier: Apache-2.0
|
|
308
|
-
*/var on=class on{constructor(e,t,i,r,s){l(this,"onEvent_");l(this,"getPlaybackRate_");l(this,"video_");l(this,"timeline_");l(this,"config_");l(this,"eventManager_");l(this,"started_");l(this,"seekingEventReceived_");l(this,"startTime_");l(this,"isJumpingGap_");l(this,"gapsJumped_");l(this,"stallsDetected_");l(this,"stallDetector_");l(this,"hadSegmentAppended_");l(this,"gapJumpTimer_");this.onEvent_=r,this.getPlaybackRate_=s||(()=>e.playbackRate),this.video_=e,this.timeline_=t,this.config_=i,this.eventManager_=new ue,this.started_=!1,this.seekingEventReceived_=!1,this.startTime_=0,this.isJumpingGap_=!1,this.gapsJumped_=0,this.stallsDetected_=0,this.stallDetector_=this.createStallDetector_(),this.hadSegmentAppended_=!1,this.eventManager_.listen(e,"waiting",()=>this.onPollGapJump_()),this.gapJumpTimer_=new ae(()=>{this.onPollGapJump_()}).tickEvery(this.config_.gapJumpTimerTime)}release(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.gapJumpTimer_!=null&&(this.gapJumpTimer_.stop(),this.gapJumpTimer_=null),this.stallDetector_&&(this.stallDetector_.release(),this.stallDetector_=null),this.onEvent_=null,this.timeline_=null,this.video_=null}onSegmentAppended(){this.hadSegmentAppended_=!0,this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}onStarted(e){this.video_.seeking&&!this.seekingEventReceived_&&(this.seekingEventReceived_=!0,this.startTime_=e),this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}onSeeking(){this.seekingEventReceived_=!0,this.hadSegmentAppended_=!1,this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}getGapsJumped(){return this.gapsJumped_}getStallsDetected(){return this.stallsDetected_}getIsJumpingGap(){return this.isJumpingGap_}onPollGapJump_(){if(this.video_.readyState==0)return;if(this.video_.seeking){if(!this.seekingEventReceived_)return}else this.seekingEventReceived_=!1;if(this.video_.paused&&(this.video_.currentTime!=this.startTime_||!this.video_.autoplay&&this.video_.currentTime==this.startTime_)||this.stallDetector_&&this.stallDetector_.poll())return;let e=this.video_.currentTime,t=this.video_.buffered,i=this.config_.gapDetectionThreshold;if(this.getPlaybackRate_()<0)return;let r=Je.getGapIndex(t,e,i);if(r==null&&this.stallDetector_&&!this.stallDetector_.poll()){let c=Je.getBufferedInfo(t);for(let d=0;d<c.length-1;d++)if(Math.abs(e-c[d].end)<.1&&c[d+1].start>c[d].end){r=d+1;break}}if(r==null||r==0&&!this.hadSegmentAppended_)return;let s=t.start(r),n=this.config_.gapPadding;n&&(s=Math.ceil((s+n)*100)/100);let a=this.timeline_.getSeekRangeEnd();if(s>=a)return;let o=s-e;o<on.BROWSER_GAP_TOLERANCE||(r==0?p.info("Jumping forward",o,"seconds because of gap before start time of",s):p.info("Jumping forward",o,"seconds because of gap starting at",t.end(r-1),"and ending at",s),this.seek_(s),e==this.startTime_&&(this.startTime_=s),this.gapsJumped_++,this.onEvent_(new
|
|
308
|
+
*/var on=class on{constructor(e,t,i,r,s){l(this,"onEvent_");l(this,"getPlaybackRate_");l(this,"video_");l(this,"timeline_");l(this,"config_");l(this,"eventManager_");l(this,"started_");l(this,"seekingEventReceived_");l(this,"startTime_");l(this,"isJumpingGap_");l(this,"gapsJumped_");l(this,"stallsDetected_");l(this,"stallDetector_");l(this,"hadSegmentAppended_");l(this,"gapJumpTimer_");this.onEvent_=r,this.getPlaybackRate_=s||(()=>e.playbackRate),this.video_=e,this.timeline_=t,this.config_=i,this.eventManager_=new ue,this.started_=!1,this.seekingEventReceived_=!1,this.startTime_=0,this.isJumpingGap_=!1,this.gapsJumped_=0,this.stallsDetected_=0,this.stallDetector_=this.createStallDetector_(),this.hadSegmentAppended_=!1,this.eventManager_.listen(e,"waiting",()=>this.onPollGapJump_()),this.gapJumpTimer_=new ae(()=>{this.onPollGapJump_()}).tickEvery(this.config_.gapJumpTimerTime)}release(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.gapJumpTimer_!=null&&(this.gapJumpTimer_.stop(),this.gapJumpTimer_=null),this.stallDetector_&&(this.stallDetector_.release(),this.stallDetector_=null),this.onEvent_=null,this.timeline_=null,this.video_=null}onSegmentAppended(){this.hadSegmentAppended_=!0,this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}onStarted(e){this.video_.seeking&&!this.seekingEventReceived_&&(this.seekingEventReceived_=!0,this.startTime_=e),this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}onSeeking(){this.seekingEventReceived_=!0,this.hadSegmentAppended_=!1,this.gapJumpTimer_&&this.gapJumpTimer_.tickEvery(this.config_.gapJumpTimerTime),this.onPollGapJump_()}getGapsJumped(){return this.gapsJumped_}getStallsDetected(){return this.stallsDetected_}getIsJumpingGap(){return this.isJumpingGap_}onPollGapJump_(){if(this.video_.readyState==0)return;if(this.video_.seeking){if(!this.seekingEventReceived_)return}else this.seekingEventReceived_=!1;if(this.video_.paused&&(this.video_.currentTime!=this.startTime_||!this.video_.autoplay&&this.video_.currentTime==this.startTime_)||this.stallDetector_&&this.stallDetector_.poll())return;let e=this.video_.currentTime,t=this.video_.buffered,i=this.config_.gapDetectionThreshold;if(this.getPlaybackRate_()<0)return;let r=Je.getGapIndex(t,e,i);if(r==null&&this.stallDetector_&&!this.stallDetector_.poll()){let c=Je.getBufferedInfo(t);for(let d=0;d<c.length-1;d++)if(Math.abs(e-c[d].end)<.1&&c[d+1].start>c[d].end){r=d+1;break}}if(r==null||r==0&&!this.hadSegmentAppended_)return;let s=t.start(r),n=this.config_.gapPadding;n&&(s=Math.ceil((s+n)*100)/100);let a=this.timeline_.getSeekRangeEnd();if(s>=a)return;let o=s-e;o<on.BROWSER_GAP_TOLERANCE||(r==0?p.info("Jumping forward",o,"seconds because of gap before start time of",s):p.info("Jumping forward",o,"seconds because of gap starting at",t.end(r-1),"and ending at",s),this.seek_(s),e==this.startTime_&&(this.startTime_=s),this.gapsJumped_++,this.onEvent_(new L(L.EventName.GapJumped)))}seek_(e){this.isJumpingGap_=!0,this.eventManager_.listenOnce(this.video_,"seeked",()=>{this.isJumpingGap_=!1}),this.video_.currentTime=e}createStallDetector_(){if(!this.config_.stallEnabled)return null;v.assert(this.video_,"Must have video");let e=this.config_.stallThreshold,t=this.config_.stallSkip,i=async(s,n,a)=>{if(v.assert(this.video_,"Must have video"),!!Je.getBufferedInfo(this.video_.buffered).length){if(p.debug(`Stall detected at ${s} for ${n} seconds (attempt ${a+1}).`),t)p.debug(`Seeking forward ${t} seconds to break stall.`),this.video_.currentTime+=t;else{if(p.debug("Wait for play to avoid reject a possible other play call."),await this.video_.play(),!this.video_)return;p.debug("Pausing and unpausing to break stall."),this.video_.pause(),this.video_.play()}a==0&&(this.stallsDetected_++,this.onEvent_(new L(L.EventName.StallDetected)))}};return new $a(new Qa(this.video_),e,i)}};l(on,"BROWSER_GAP_TOLERANCE",.001);var ws=on,ln=class ln{constructor(e,t,i){l(this,"implementation_");l(this,"wasMakingProgress_");l(this,"value_");l(this,"lastUpdateSeconds_");l(this,"stallAttempts_");l(this,"lastAttemptSeconds_");l(this,"stallThresholdSeconds_");l(this,"onStall_");this.implementation_=e,this.wasMakingProgress_=e.shouldBeMakingProgress(),this.value_=e.getPresentationSeconds(),this.lastUpdateSeconds_=e.getWallSeconds(),this.stallAttempts_=0,this.lastAttemptSeconds_=0,this.stallThresholdSeconds_=t,this.onStall_=i}release(){this.implementation_&&this.implementation_.release(),this.implementation_=null,this.onStall_=null}poll(){let e=this.implementation_,t=e.shouldBeMakingProgress(),i=e.getPresentationSeconds(),r=e.getWallSeconds();(this.value_!=i||this.wasMakingProgress_!=t)&&(this.lastUpdateSeconds_=r,this.value_=i,this.wasMakingProgress_=t,this.stallAttempts_=0);let n=r-this.lastUpdateSeconds_,a=1+ln.MAX_STALL_RETRIES,o=n>=this.stallThresholdSeconds_&&t&&this.stallAttempts_<a&&(this.stallAttempts_==0||r-this.lastAttemptSeconds_>=this.stallThresholdSeconds_);return o&&(this.onStall_&&this.onStall_(this.value_,n,this.stallAttempts_),this.stallAttempts_++,this.lastAttemptSeconds_=r,this.value_=e.getPresentationSeconds()),o}};l(ln,"MAX_STALL_RETRIES",2);var $a=ln;var Qa=class{constructor(e){l(this,"mediaElement_");l(this,"audioEventManager_");l(this,"audioFocusPaused_");this.mediaElement_=e,this.audioEventManager_=new ue,this.audioFocusPaused_=!1,this.audioEventManager_.listen(this.mediaElement_,"audiofocuspaused",()=>{p.info("Audio focus paused"),this.audioFocusPaused_=!0}),this.audioEventManager_.listen(this.mediaElement_,"audiofocusgranted",()=>{p.info("Audio focus granted"),this.audioFocusPaused_=!1}),this.audioEventManager_.listen(this.mediaElement_,"audiofocuslost",()=>{p.info("Audio focus lost"),this.audioFocusPaused_=!0})}shouldBeMakingProgress(){return this.mediaElement_.paused||this.mediaElement_.playbackRate==0||this.audioFocusPaused_||this.mediaElement_.buffered.length==0?!1:this.hasContentFor_(this.mediaElement_.buffered,this.mediaElement_.currentTime)}getPresentationSeconds(){return this.mediaElement_.currentTime}getWallSeconds(){return Date.now()/1e3}hasContentFor_(e,t){for(let{start:i,end:r}of Je.getBufferedInfo(e))if(!(t<i-.1)&&!(t>r-.5))return!0;return!1}release(){this.audioEventManager_&&this.audioEventManager_.release(),this.audioEventManager_=null}};/*! @license
|
|
309
309
|
* Shaka Player
|
|
310
310
|
* Copyright 2016 Google LLC
|
|
311
311
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -313,7 +313,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
313
313
|
* Shaka Player
|
|
314
314
|
* Copyright 2016 Google LLC
|
|
315
315
|
* SPDX-License-Identifier: Apache-2.0
|
|
316
|
-
*/var cn=class{constructor(e,t,i,r){l(this,"video_");l(this,"onSeek_");l(this,"onStarted_");l(this,"startTime_");l(this,"getStartTime_");l(this,"started_");l(this,"eventManager_");l(this,"mover_");this.video_=e,this.onSeek_=t,this.onStarted_=i,this.startTime_=null,this.getStartTime_=()=>(this.startTime_==null&&(this.startTime_=r()),this.startTime_),this.started_=!1,this.eventManager_=new ue,this.mover_=new Ja(e,10),di.waitForReadyState(this.video_,HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{this.setStartTime_(this.getStartTime_())})}release(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.mover_!=null&&(this.mover_.release(),this.mover_=null),this.onSeek_=()=>{},this.video_=null}getTime(){return this.started_?this.video_.currentTime:this.getStartTime_()}setTime(e){this.video_.readyState>0?this.mover_.moveTo(e):(this.startTime_=e,di.waitForReadyState(this.video_,HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{this.setStartTime_(this.getStartTime_())}))}setStartTime_(e){if(Math.abs(this.video_.currentTime-e)<.001){this.startListeningToSeeks_();return}this.eventManager_.listenOnce(this.video_,"seeking",()=>{this.startListeningToSeeks_()}),this.mover_.moveTo(e)}startListeningToSeeks_(){v.assert(this.video_.readyState>0,"The media element should be ready before we listen for seeking."),this.started_=!0,this.eventManager_.listen(this.video_,"seeking",()=>this.onSeek_()),this.onStarted_(this.video_.currentTime)}},Ja=class{constructor(e,t){l(this,"mediaElement_");l(this,"maxAttempts_");l(this,"remainingAttempts_");l(this,"originTime_");l(this,"targetTime_");l(this,"timer_");this.mediaElement_=e,this.maxAttempts_=t,this.remainingAttempts_=0,this.originTime_=0,this.targetTime_=0,this.timer_=new ae(()=>this.onTick_())}release(){this.timer_&&(this.timer_.stop(),this.timer_=null),this.mediaElement_=null}moveTo(e){this.originTime_=this.mediaElement_.currentTime,this.targetTime_=e,this.remainingAttempts_=this.maxAttempts_,this.mediaElement_.currentTime=e,this.timer_.tickEvery(.1)}onTick_(){if(this.remainingAttempts_<=0){p.warning(["Failed to move playhead from",this.originTime_,"to",this.targetTime_].join(" ")),this.timer_.stop();return}if(this.mediaElement_.currentTime!=this.originTime_||this.mediaElement_.currentTime===this.targetTime_){this.timer_.stop();return}this.mediaElement_.currentTime=this.targetTime_,this.remainingAttempts_--}};/*! @license
|
|
316
|
+
*/var cn=class{constructor(e,t,i,r){l(this,"video_");l(this,"onSeek_");l(this,"onStarted_");l(this,"startTime_");l(this,"getStartTime_");l(this,"started_");l(this,"wasEnded_");l(this,"eventManager_");l(this,"mover_");this.video_=e,this.onSeek_=t,this.onStarted_=i,this.startTime_=null,this.getStartTime_=()=>(this.startTime_==null&&(this.startTime_=r()),this.startTime_),this.started_=!1,this.wasEnded_=!1,this.eventManager_=new ue,this.mover_=new Ja(e,10),di.waitForReadyState(this.video_,HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{this.setStartTime_(this.getStartTime_())})}release(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.mover_!=null&&(this.mover_.release(),this.mover_=null),this.onSeek_=()=>{},this.video_=null}getTime(){return this.started_?this.video_.currentTime:this.getStartTime_()}setTime(e){this.video_.readyState>0?this.mover_.moveTo(e):(this.startTime_=e,di.waitForReadyState(this.video_,HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{this.setStartTime_(this.getStartTime_())}))}setStartTime_(e){if(Math.abs(this.video_.currentTime-e)<.001){this.startListeningToSeeks_();return}this.eventManager_.listenOnce(this.video_,"seeking",()=>{this.startListeningToSeeks_()}),this.mover_.moveTo(e)}startListeningToSeeks_(){v.assert(this.video_.readyState>0,"The media element should be ready before we listen for seeking."),this.started_=!0,this.eventManager_.listen(this.video_,"seeking",()=>{(this.wasEnded_||this.video_.ended)&&this.video_.paused&&this.video_.pause(),this.wasEnded_=!1,this.onSeek_()}),this.eventManager_.listen(this.video_,"ended",()=>{this.wasEnded_=!0}),this.eventManager_.listen(this.video_,"play",()=>{this.wasEnded_=!1}),this.onStarted_(this.video_.currentTime)}},Ja=class{constructor(e,t){l(this,"mediaElement_");l(this,"maxAttempts_");l(this,"remainingAttempts_");l(this,"originTime_");l(this,"targetTime_");l(this,"timer_");this.mediaElement_=e,this.maxAttempts_=t,this.remainingAttempts_=0,this.originTime_=0,this.targetTime_=0,this.timer_=new ae(()=>this.onTick_())}release(){this.timer_&&(this.timer_.stop(),this.timer_=null),this.mediaElement_=null}moveTo(e){let t=this.mediaElement_.ended,i=this.mediaElement_.paused;this.originTime_=this.mediaElement_.currentTime,this.targetTime_=e,this.remainingAttempts_=this.maxAttempts_,this.mediaElement_.currentTime=e,t&&i&&this.mediaElement_.pause(),this.timer_.tickEvery(.1)}onTick_(){if(this.remainingAttempts_<=0){p.warning(["Failed to move playhead from",this.originTime_,"to",this.targetTime_].join(" ")),this.timer_.stop();return}if(this.mediaElement_.currentTime!=this.originTime_||this.mediaElement_.currentTime===this.targetTime_){this.timer_.stop();return}this.mediaElement_.currentTime=this.targetTime_,this.remainingAttempts_--}};/*! @license
|
|
317
317
|
* Shaka Player
|
|
318
318
|
* Copyright 2016 Google LLC
|
|
319
319
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -333,11 +333,11 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
333
333
|
* Shaka Player
|
|
334
334
|
* Copyright 2016 Google LLC
|
|
335
335
|
* SPDX-License-Identifier: Apache-2.0
|
|
336
|
-
*/var dr=class y extends Be{constructor(t){super();l(this,"contentTypeStates_");l(this,"getBufferedInfo_");this.contentTypeStates_=new Map,this.getBufferedInfo_=t}release(){this.contentTypeStates_.clear(),super.release()}getContentTypeState_(t){let i=this.contentTypeStates_.get(t);return i||(i={qualityChangePositions:[],currentQuality:null,contentType:t},this.contentTypeStates_.set(t,i)),i}addMediaQualityChange(t,i){let r=this.getContentTypeState_(t.contentType);this.purgeQualityChangePositions_(r);let s={mediaQuality:t,position:i},n=r.qualityChangePositions,a=n.findIndex(o=>o.position>=i);if(a>=0){let o=n[a].position==i?1:0;n.splice(a,o,s)}else n.push(s)}static getMediaQualityAtPosition_(t,i){let r=i.qualityChangePositions;for(let s=r.length-1;s>=0;s--){let n=r[s];if(n.position<=t)return n.mediaQuality}return null}static mediaQualitiesAreTheSame_(t,i){return t===i?!0:!t||!i?!1:t.bandwidth==i.bandwidth&&t.audioSamplingRate==i.audioSamplingRate&&t.codecs==i.codecs&&t.contentType==i.contentType&&t.frameRate==i.frameRate&&t.height==i.height&&t.mimeType==i.mimeType&&t.channelsCount==i.channelsCount&&t.pixelAspectRatio==i.pixelAspectRatio&&t.width==i.width}poll(t,i){for(let r of this.contentTypeStates_.values()){let s=r.currentQuality,n=y.getMediaQualityAtPosition_(t,r),a=n&&!y.mediaQualitiesAreTheSame_(s,n),o=n&&s&&n.label&&s.label&&s.label!==n.label,c=n&&s&&n.language&&s.language&&s.language!==n.language,d=n&&s&&n.roles&&s.roles&&!ye.equal(s.roles,n.roles);if((o||c||d)&&this.positionIsBuffered_(t,n.contentType)){r.currentQuality=n;let u=new
|
|
336
|
+
*/var dr=class y extends Be{constructor(t){super();l(this,"contentTypeStates_");l(this,"getBufferedInfo_");this.contentTypeStates_=new Map,this.getBufferedInfo_=t}release(){this.contentTypeStates_.clear(),super.release()}getContentTypeState_(t){let i=this.contentTypeStates_.get(t);return i||(i={qualityChangePositions:[],currentQuality:null,contentType:t},this.contentTypeStates_.set(t,i)),i}addMediaQualityChange(t,i){let r=this.getContentTypeState_(t.contentType);this.purgeQualityChangePositions_(r);let s={mediaQuality:t,position:i},n=r.qualityChangePositions,a=n.findIndex(o=>o.position>=i);if(a>=0){let o=n[a].position==i?1:0;n.splice(a,o,s)}else n.push(s)}static getMediaQualityAtPosition_(t,i){let r=i.qualityChangePositions;for(let s=r.length-1;s>=0;s--){let n=r[s];if(n.position<=t)return n.mediaQuality}return null}static mediaQualitiesAreTheSame_(t,i){return t===i?!0:!t||!i?!1:t.bandwidth==i.bandwidth&&t.audioSamplingRate==i.audioSamplingRate&&t.codecs==i.codecs&&t.contentType==i.contentType&&t.frameRate==i.frameRate&&t.height==i.height&&t.mimeType==i.mimeType&&t.channelsCount==i.channelsCount&&t.pixelAspectRatio==i.pixelAspectRatio&&t.width==i.width}poll(t,i){for(let r of this.contentTypeStates_.values()){let s=r.currentQuality,n=y.getMediaQualityAtPosition_(t,r),a=n&&!y.mediaQualitiesAreTheSame_(s,n),o=n&&s&&n.label&&s.label&&s.label!==n.label,c=n&&s&&n.language&&s.language&&s.language!==n.language,d=n&&s&&n.roles&&s.roles&&!ye.equal(s.roles,n.roles);if((o||c||d)&&this.positionIsBuffered_(t,n.contentType)){r.currentQuality=n;let u=new L("audiotrackchange",new Map([["quality",n],["position",t]]));this.dispatchEvent(u)}if(a&&this.positionIsBuffered_(t,n.contentType)){r.currentQuality=n,p.debug("Media quality changed at position "+t+" "+JSON.stringify(n));let u=new L("qualitychange",new Map([["quality",n],["position",t]]));this.dispatchEvent(u)}}}positionIsBuffered_(t,i){let s=this.getBufferedInfo_()[i];if(s&&s.length>0){let n=s[0].start,a=s[s.length-1].end;if(t>=n&&t<a)return!0}return!1}purgeQualityChangePositions_(t){let r=this.getBufferedInfo_()[t.contentType];if(r&&r.length>0){let s=r[0].start,n=r[r.length-1].end,a=t.qualityChangePositions;t.qualityChangePositions=a.filter((o,c)=>!(o.position<=s&&c+1<a.length&&a[c+1].position<=s||o.position>=n))}else t.qualityChangePositions=[]}static createQualityInfo(t){let i={bandwidth:t.bandwidth||0,audioSamplingRate:null,codecs:t.codecs,contentType:t.type,frameRate:null,height:null,mimeType:t.mimeType,channelsCount:null,pixelAspectRatio:null,width:null,label:null,roles:t.roles,language:null};return t.type==R.ContentType.VIDEO&&(i.frameRate=t.frameRate||null,i.height=t.height||null,i.pixelAspectRatio=t.pixelAspectRatio||null,i.width=t.width||null),t.type==R.ContentType.AUDIO&&(i.audioSamplingRate=t.audioSamplingRate,i.channelsCount=t.channelsCount,i.label=t.label||null,i.language=t.language),i}};/*! @license
|
|
337
337
|
* Shaka Player
|
|
338
338
|
* Copyright 2016 Google LLC
|
|
339
339
|
* SPDX-License-Identifier: Apache-2.0
|
|
340
|
-
*/var mn=class mn extends Be{constructor(t){super();l(this,"regions_");l(this,"getFilterRange_");l(this,"filterTimer_");this.regions_=new Map,this.getFilterRange_=t,this.filterTimer_=null}release(){this.regions_.clear(),this.releaseTimer_(),super.release()}addRegion(t){let i=this.generateKey_(t);if(!this.regions_.has(i)){this.regions_.set(i,t);let r=new
|
|
340
|
+
*/var mn=class mn extends Be{constructor(t){super();l(this,"regions_");l(this,"getFilterRange_");l(this,"filterTimer_");this.regions_=new Map,this.getFilterRange_=t,this.filterTimer_=null}release(){this.regions_.clear(),this.releaseTimer_(),super.release()}addRegion(t){let i=this.generateKey_(t);if(!this.regions_.has(i)){this.regions_.set(i,t);let r=new L("regionadd",new Map([["region",t]]));this.dispatchEvent(r),this.setupTimer_()}}filterByRange_(){let t=this.getFilterRange_();for(let[i,r]of this.regions_)if(r.endTime<t.start){this.regions_.delete(i);let s=new L("regionremove",new Map([["region",r]]));this.dispatchEvent(s)}this.regions_.size||this.releaseTimer_()}setupTimer_(){this.filterTimer_||(this.filterTimer_=new ae(()=>{this.filterByRange_()}).tickEvery(mn.REGION_FILTER_INTERVAL))}releaseTimer_(){this.filterTimer_&&(this.filterTimer_.stop(),this.filterTimer_=null)}regions(){return this.regions_.values()}generateKey_(t){return`${t.schemeIdUri}_${t.id}_${t.startTime.toFixed(1)}_${t.endTime.toFixed(1)}`}};l(mn,"REGION_FILTER_INTERVAL",2);var zr=mn;/*! @license
|
|
341
341
|
* Shaka Player
|
|
342
342
|
* Copyright 2016 Google LLC
|
|
343
343
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -349,11 +349,11 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
349
349
|
* Shaka Player
|
|
350
350
|
* Copyright 2016 Google LLC
|
|
351
351
|
* SPDX-License-Identifier: Apache-2.0
|
|
352
|
-
*/var Vi=class Vi{static parseMsProRecords_(e,t){let i=[];for(;t<e.byteLength-1;){let r=e.getUint16(t,!0);t+=2;let s=e.getUint16(t,!0);if(t+=2,(s&1)!=0||s+t>e.byteLength)return p.warning("Malformed MS PRO object"),[];let n=
|
|
352
|
+
*/var Vi=class Vi{static parseMsProRecords_(e,t){let i=[];for(;t<e.byteLength-1;){let r=e.getUint16(t,!0);t+=2;let s=e.getUint16(t,!0);if(t+=2,(s&1)!=0||s+t>e.byteLength)return p.warning("Malformed MS PRO object"),[];let n=U.toUint8(e,t,s);i.push({type:r,value:n}),t+=s}return i}static parseMsPro_(e){let t=0,i=U.toDataView(e),r=i.getUint32(t,!0);return t+=4,r!=e.byteLength?(p.warning("PlayReady Object with invalid length encountered."),[]):(t+=2,Vi.parseMsProRecords_(i,t))}static getLaurl_(e){for(let t of I.getElementsByTagName(e,"DATA"))if(t.children){for(let i of t.children)if(i.tagName=="LA_URL")return I.getTextContents(i)}return""}static getPlayReadyHeaderObject_(e){let t=Vi.PLAYREADY_RECORD_TYPES,r=Vi.parseMsPro_(e).find(a=>a.type===t.RIGHTS_MANAGEMENT);if(!r)return null;let s=q.fromUTF16(r.value,!0),n=I.parseXmlString(s,"WRMHEADER");return n||null}static getLicenseUrl(e){let t=ne.fromBase64(I.getTextContents(e));return Vi.getLicenseFromHeader_(t)}static getLicenseUrlFromPssh(e){let t=ti.getPsshData(e);return Vi.getLicenseFromHeader_(t)}static getLicenseFromHeader_(e){try{let t=Vi.getPlayReadyHeaderObject_(e);return t?Vi.getLaurl_(t):""}catch(t){return""}}};l(Vi,"PLAYREADY_RECORD_TYPES",{RIGHTS_MANAGEMENT:1,RESERVED:2,EMBEDDED_LICENSE:3});var Ri=Vi;/*! @license
|
|
353
353
|
* Shaka Player
|
|
354
354
|
* Copyright 2016 Google LLC
|
|
355
355
|
* SPDX-License-Identifier: Apache-2.0
|
|
356
|
-
*/var _t=class y{static getBasicInfoFromMimeType(e){let t=O.getBasicType(e),i=t.split("/")[0],r=O.getCodecs(e);return{type:i,mimeType:t,codecs:r,language:null,height:null,width:null,channelCount:null,sampleRate:null,closedCaptions:new Map,videoRange:null,colorGamut:null,frameRate:null,timescale:null,drmInfos:[]}}static getBasicInfoFromTs(e,t,i,r){let s=
|
|
356
|
+
*/var _t=class y{static getBasicInfoFromMimeType(e){let t=O.getBasicType(e),i=t.split("/")[0],r=O.getCodecs(e);return{type:i,mimeType:t,codecs:r,language:null,height:null,width:null,channelCount:null,sampleRate:null,closedCaptions:new Map,videoRange:null,colorGamut:null,frameRate:null,timescale:null,drmInfos:[]}}static getBasicInfoFromTs(e,t,i,r){let s=U.toUint8(e),n=new mt().parse(s),a=n.getCodecs(),o=n.getVideoInfo(),c=[],d=!1,u=!1;if(!t)switch(a.audio){case"aac":case"aac-loas":n.getAudioData().length&&(c.push("mp4a.40.2"),d=!0);break;case"mp3":n.getAudioData().length&&(c.push("mp4a.40.34"),d=!0);break;case"ac3":n.getAudioData().length&&(c.push("ac-3"),d=!0);break;case"ec3":n.getAudioData().length&&(c.push("ec-3"),d=!0);break;case"opus":n.getAudioData().length&&(c.push("opus"),d=!0);break}if(!i)switch(a.video){case"avc":o.codec?c.push(o.codec):c.push("avc1.42E01E"),u=!0;break;case"hvc":o.codec?c.push(o.codec):c.push("hvc1.1.6.L93.90"),u=!0;break;case"av1":c.push("av01.0.01M.08"),u=!0;break}if(!c.length)return null;let m=d&&!u,f=new Map;if(u&&!r){let g=new Mt("video/mp2t");g.parseFrom(e);for(let _ of g.getStreams())f.set(_,_);g.reset()}return{type:m?"audio":"video",mimeType:"video/mp2t",codecs:c.join(", "),language:null,height:o.height,width:o.width,channelCount:null,sampleRate:null,closedCaptions:f,videoRange:null,colorGamut:null,frameRate:o.frameRate,timescale:null,drmInfos:[]}}static getBasicInfoFromMp4(e,t,i){var X;v.assert(e!=null||t!=null,"Either initData or data must be non-null.");let r=[],s=[],n=[],a=!1,o=!1,c=!1,d=N=>{let $=N.toLowerCase();switch($){case"avc1":case"avc3":s.push($+".42E01E"),o=!0;break;case"hev1":case"hvc1":s.push($+".1.6.L93.90"),o=!0;break;case"dvh1":case"dvhe":s.push($+".05.04"),o=!0;break;case"vp09":s.push($+".00.10.08"),o=!0;break;case"av01":s.push($+".0.01M.08"),o=!0;break;case"mp4a":r.push("mp4a.40.2"),a=!0;break;case"ac-3":case"ec-3":case"ac-4":case"opus":case"flac":r.push($),a=!0;break;case"apac":r.push("apac.31.00"),a=!0;break}},u=N=>d(N.name),m=null,f=null,g=null,_=null,T=null,b=null,S=null,E=null,w=null,A=new Map,x=new Set,M=null,C=null,k,D=0,V=[],ee=new Map,oe=null,le=new Map,G;if(e&&t){let N=U.toUint8(e),$=U.toUint8(t);G=ne.concat(N,$)}else t?G=U.toUint8(t):e&&(G=U.toUint8(e));let J=N=>{let $=pe.audioSampleEntry(N.reader);_=$.channelCount,T=$.sampleRate,u(N),N.reader.hasMoreData()&&F.children(N)},Z=N=>{k=N.name;let $=pe.visualSampleEntry(N.reader);g=String($.width),f=String($.height),N.reader.hasMoreData()&&F.children(N)},ce;if(new F().boxes([...F.SAMPLE_TABLE_PATH,...F.FRAGMENT_PATH],F.children).fullBox("tkhd",N=>{v.assert(N.version!=null,"TKHD is a full box and should have a valid version."),oe=pe.parseTKHD(N.reader,N.version).trackId}).fullBox("mdhd",N=>{v.assert(N.version!=null,"MDHD is a full box and should have a valid version.");let $=pe.parseMDHD(N.reader,N.version);m=$.language,oe!==null&&ee.set(oe,$.timescale)}).fullBox("stsd",F.sampleDescription).fullBox("tfhd",N=>{v.assert(N.flags!=null,"A TFHD box should have a valid flags value");let $=pe.parseTFHD(N.reader,N.flags);$.defaultSampleDuration&&(D=$.defaultSampleDuration)}).fullBox("trun",N=>{v.assert(N.version!=null,"A TRUN box should have a valid version value"),v.assert(N.flags!=null,"A TRUN box should have a valid flags value"),V=pe.parseTRUN(N.reader,N.version,N.flags).sampleData}).box("mp4a",N=>{let $=pe.audioSampleEntry(N.reader);_=$.channelCount,T=$.sampleRate,N.reader.hasMoreData()?F.children(N):u(N)}).box("esds",N=>{let $=pe.parseESDS(N.reader);r.push($.codec),a=!0}).boxes(F.GENERIC_AUDIO_SAMPLE_ENTRIES,J).boxes([...F.AVC_HEVC_DV,"vp09","av01"],Z).box("avcC",N=>{let $=k||"";switch(k){case"dvav":$="avc3";break;case"dva1":$="avc1";break}let Ie=pe.parseAVCC($,N.reader);s.push(Ie.codec),o=!0}).box("hvcC",N=>{let $=k||"";switch(k){case"dvh1":$="hvc1";break;case"dvhe":$="hev1";break}let Ie=pe.parseHVCC($,N.reader);s.push(Ie.codec),o=!0}).box("dvcC",N=>{let $=k||"";switch(k){case"hvc1":$="dvh1";break;case"hev1":$="dvhe";break;case"avc1":$="dva1";break;case"avc3":$="dvav";break;case"av01":$="dav1";break}let Ie=pe.parseDVCC($,N.reader);s.push(Ie.codec),o=!0}).box("dvvC",N=>{let $=k||"";switch(k){case"hvc1":$="dvh1";break;case"hev1":$="dvhe";break;case"avc1":$="dva1";break;case"avc3":$="dvav";break;case"av01":$="dav1";break}let Ie=pe.parseDVVC($,N.reader);s.push(Ie.codec),o=!0}).fullBox("vpcC",N=>{let $=k||"",Ie=pe.parseVPCC($,N.reader);s.push(Ie.codec),o=!0}).box("av1C",N=>{let $=k||"";k==="dav1"&&($="av01");let Ie=pe.parseAV1C($,N.reader);s.push(Ie.codec),o=!0}).boxes(["wvtt","stpp"],N=>{n.push(N.name),c=!0}).box("c608",()=>{le.set("CC1","CC1"),oe!==null&&ee.delete(oe)}).box("enca",J).box("encv",Z).box("sinf",F.children).box("frma",N=>{let{codec:$}=pe.parseFRMA(N.reader);d($)}).box("colr",N=>{s=s.map(tt=>tt.startsWith("av01.")?pe.updateAV1CodecWithCOLRBox(tt,N.reader):tt);let{videoRange:$,colorGamut:Ie}=pe.parseCOLR(N.reader);b=$,S=Ie}).fullBox("schm",N=>{M=pe.parseSCHM(N.reader).encryptionScheme}).box("schi",F.children).fullBox("tenc",N=>{v.assert(N.version!=null,"TENC is a full box and should have a valid version."),C=pe.parseTENC(N.reader,N.version).defaultKID}).fullBox("pssh",N=>{v.assert(N.version!=null,"PSSH is a full box and should have a valid version.");let $=N.reader.getDataView();v.assert($.byteOffset>=12,"DataView at incorrect position");let Ie=U.toUint8($,-12,N.size),tt=ne.toHex(Ie);if(x.has(tt))return;x.add(tt);let gt=N.reader.readBytes(16,!1),St=ne.toHex(gt);ce||(ce=de.getUuidMap(!0));let yt=ce[St.toLowerCase()];if(!yt)return;let Ct=R.createDrmInfo(yt,"cenc",[{initDataType:"cenc",initData:Ie}]);if(de.isPlayReadyKeySystem(yt)&&(Ct.licenseServerUri=Ri.getLicenseUrlFromPssh(Ie)),N.version>0){let bi=N.reader.readUint32();for(let we=0;we<bi;we++){let Bt=N.reader.readBytes(16,!1);Ct.keyIds.add(ne.toHex(Bt))}}A.set(yt,Ct)}).parse(G,!0,!0),!r.length&&!s.length&&!n.length)return null;w=ee.values().next().value;let W=a&&!o;if(o&&!i&&t&&!le.size){let N=new Mt("video/mp4");e&&N.init(e);try{N.parseFrom(t);for(let $ of N.getStreams())le.set($,$)}catch($){p.debug("Error detecting CC streams",$)}N.reset()}let z=r.concat(s).concat(n);M==="cbcs"&&C&&!A.has("com.apple.fps")&&A.set("com.apple.fps",R.createDrmInfo("com.apple.fps",M,null));for(let N of A.values())M&&(N.encryptionScheme=M),C&&N.keyIds.add(C);let ge="video",Y="video/mp4";if(c?(ge="text",Y="application/mp4"):W&&(ge="audio",Y="audio/mp4"),ge==="video"&&w!=null&&V.length){let N=w,$=0;for(let Ie of V)$+=(X=Ie.sampleDuration)!=null?X:D;$>0&&(E=N*V.length/$)}return{type:ge,mimeType:Y,codecs:y.codecsFiltering(z).join(", "),language:m,height:f,width:g,channelCount:_,sampleRate:T,closedCaptions:le,videoRange:b,colorGamut:S,frameRate:E,timescale:w,drmInfos:Array.from(A.values())}}static codecsFiltering(e){let t=R.ContentType,i=y.filterDuplicateCodecs_(e),r=R.guessAllCodecsSafe(t.AUDIO,i),s=R.guessAllCodecsSafe(t.VIDEO,i),n=R.guessAllCodecsSafe(t.TEXT,i),a=y.chooseBetterCodecs_(s),o=r.concat(a).concat(n);return i.length&&!o.length?i:o}static getStartTimeAndDurationFromMp4(e,t){var o;let i=0,r=0,s=[];new F().boxes(F.FRAGMENT_PATH,F.children).fullBox("tfhd",c=>{v.assert(c.flags!=null,"A TFHD box should have a valid flags value"),r=pe.parseTFHD(c.reader,c.flags).defaultSampleDuration}).fullBox("tfdt",c=>{v.assert(c.version==0||c.version==1,"TFDT version can only be 0 or 1"),i=pe.parseTFDTInaccurate(c.reader,c.version).baseMediaDecodeTime/t}).fullBox("trun",c=>{v.assert(c.version!=null,"A TRUN box should have a valid version value"),v.assert(c.flags!=null,"A TRUN box should have a valid flags value"),s=pe.parseTRUN(c.reader,c.version,c.flags).sampleData,c.parser.stop()}).parse(e);let n=0;for(let c of s)n+=(o=c.sampleDuration)!=null?o:r;let a=n/t;return{startTime:i,duration:a}}static filterDuplicateCodecs_(e){let t=new Set,i=[];for(let r of e){let s=O.getCodecBase(r);t.has(s)?p.debug("Ignoring duplicate codec"):(i.push(r),t.add(s))}return i}static chooseBetterCodecs_(e){if(e.length<=1)return e;let t=e.find(r=>r.startsWith("dvav.")||r.startsWith("dva1.")||r.startsWith("dvh1.")||r.startsWith("dvhe.")||r.startsWith("dav1.")||r.startsWith("dvc1.")||r.startsWith("dvi1."));if(!t)return e;let i=`video/mp4; codecs="${t}"`;return qe.isTypeSupported(i)?[t]:e.filter(r=>r!=t)}static getDefaultKID(e){let t=null;return new F().boxes([...F.SAMPLE_TABLE_PATH,"sinf","schi"],F.children).fullBox("stsd",F.sampleDescription).box("encv",F.visualSampleEntry).box("enca",F.audioSampleEntry).fullBox("tenc",i=>{v.assert(i.version!=null,"TENC is a full box and should have a valid version."),t=pe.parseTENC(i.reader,i.version).defaultKID}).parse(e,!0),t}static async aesDecrypt(e,t,i){let r=t;if(r.cryptoKey||(v.assert(r.fetchKey,"If AES cryptoKey was not preloaded, fetchKey function should be provided"),await r.fetchKey(),v.assert(r.cryptoKey,"AES cryptoKey should now be set")),t.blockCipherMode=="GCM"&&t.bitsKey==256){let a=U.toUint8(e);if(a.byteLength<32)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_GCM_SEGMENT);let o=a.slice(0,16),c=a.slice(16),d={name:"AES-GCM",iv:o,tagLength:128};return window.crypto.subtle.decrypt(d,r.cryptoKey,c)}let s=r.iv;if(!s){s=U.toUint8(new ArrayBuffer(16));let a=r.firstMediaSequenceNumber+i;for(let o=s.byteLength-1;o>=0;o--)s[o]=a&255,a>>=8}let n;return t.blockCipherMode=="CBC"?n={name:"AES-CBC",iv:s}:n={name:"AES-CTR",counter:s,length:64},window.crypto.subtle.decrypt(n,r.cryptoKey,e)}};/*! @license
|
|
357
357
|
* Shaka Player
|
|
358
358
|
* Copyright 2016 Google LLC
|
|
359
359
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -361,7 +361,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
361
361
|
* Shaka Player
|
|
362
362
|
* Copyright 2016 Google LLC
|
|
363
363
|
* SPDX-License-Identifier: Apache-2.0
|
|
364
|
-
*/var Ue=class Ue{constructor(e,t){l(this,"playerInterface_");l(this,"manifest_");l(this,"config_");l(this,"deferredCloseSegmentIndex_");l(this,"bufferingScale_");l(this,"currentVariant_");l(this,"currentTextStream_");l(this,"textStreamSequenceId_");l(this,"mediaStates_");l(this,"startupComplete_");l(this,"failureCallbackBackoff_");l(this,"fatalError_");l(this,"destroyer_");l(this,"lastMediaSourceReset_");l(this,"audioPrefetchMap_");l(this,"spatialVideoInfo_");l(this,"playRangeStart_");l(this,"playRangeEnd_");l(this,"lastTextMediaStateBeforeUnload_");l(this,"requestedDependencySegments_");l(this,"liveSeekableRangeEventManager_");l(this,"updateLiveSeekableRangeTimer_");l(this,"boundaryTime_");l(this,"crossBoundarySeekTarget_");l(this,"crossBoundaryResetPending_");l(this,"crossBoundaryTimer_");l(this,"crossBoundaryEventManager_");this.playerInterface_=t,this.manifest_=e,this.config_=null,this.deferredCloseSegmentIndex_=new Map,this.bufferingScale_=1,this.currentVariant_=null,this.currentTextStream_=null,this.textStreamSequenceId_=0,this.mediaStates_=new Map,this.startupComplete_=!1,this.failureCallbackBackoff_=null,this.fatalError_=!1,this.destroyer_=new ci(()=>this.doDestroy_()),this.lastMediaSourceReset_=Date.now()/1e3,this.audioPrefetchMap_=new Map,this.spatialVideoInfo_={projection:null,hfov:null},this.playRangeStart_=0,this.playRangeEnd_=1/0,this.lastTextMediaStateBeforeUnload_=null,this.requestedDependencySegments_=[],this.liveSeekableRangeEventManager_=new ue,this.updateLiveSeekableRangeTimer_=new ae(()=>{if(!this.manifest_||!this.playerInterface_){this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop();return}if(!this.manifest_.presentationTimeline.isDynamic()){this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange(),this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop();return}let i=this.manifest_.presentationTimeline.getSeekRangeStart(),r=this.manifest_.presentationTimeline.getSeekRangeEnd();r-i>1?this.playerInterface_.mediaSourceEngine.setLiveSeekableRange(i,r):this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange()}),this.boundaryTime_=null,this.crossBoundarySeekTarget_=null,this.crossBoundaryResetPending_=!1,this.crossBoundaryTimer_=new ae(()=>{let i=this.playerInterface_.video;i.ended||this.boundaryTime_&&(p.info("Crossing boundary at",this.boundaryTime_),this.crossBoundarySeekTarget_=this.boundaryTime_,this.crossBoundaryResetPending_=!0,i.currentTime=this.boundaryTime_,this.boundaryTime_=null)}),this.crossBoundaryEventManager_=new ue}destroy(){return this.destroyer_.destroy()}async doDestroy_(){var t,i,r,s;(t=this.updateLiveSeekableRangeTimer_)==null||t.stop(),this.updateLiveSeekableRangeTimer_=null,(i=this.liveSeekableRangeEventManager_)==null||i.release(),this.liveSeekableRangeEventManager_=null,(r=this.crossBoundaryTimer_)==null||r.stop(),this.crossBoundaryTimer_=null,(s=this.crossBoundaryEventManager_)==null||s.release(),this.crossBoundaryEventManager_=null;let e=[];for(let n of this.mediaStates_.values())this.cancelUpdate_(n),e.push(this.abortOperations_(n)),n.segmentPrefetch&&(n.segmentPrefetch.clearAll(),n.segmentPrefetch=null);for(let n of this.audioPrefetchMap_.values())n.clearAll();await Promise.all(e),this.mediaStates_.clear(),this.audioPrefetchMap_.clear(),this.playerInterface_=null,this.manifest_=null,this.config_=null,this.boundaryTime_=null}configure(e){this.config_=e;let t={maxAttempts:Math.max(e.retryParameters.maxAttempts,2),baseDelay:e.retryParameters.baseDelay,backoffFactor:e.retryParameters.backoffFactor,fuzzFactor:e.retryParameters.fuzzFactor,timeout:0,stallTimeout:0,connectionTimeout:0},i=!0;this.failureCallbackBackoff_=new wr(t,i);let r=R.ContentType;if(e.disableAudioPrefetch){let s=this.mediaStates_.get(r.AUDIO);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null);for(let n of this.audioPrefetchMap_.keys())this.audioPrefetchMap_.get(n).clearAll(),this.audioPrefetchMap_.delete(n)}if(e.disableTextPrefetch){let s=this.mediaStates_.get(r.TEXT);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null)}if(e.disableVideoPrefetch){let s=this.mediaStates_.get(r.VIDEO);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null)}for(let s of this.mediaStates_.keys()){let n=this.mediaStates_.get(s);n.segmentPrefetch?(n.segmentPrefetch.resetLimit(e.segmentPrefetchLimit),e.segmentPrefetchLimit>0||(n.segmentPrefetch.clearAll(),n.segmentPrefetch=null)):e.segmentPrefetchLimit>0&&(n.segmentPrefetch=this.createSegmentPrefetch_(n.stream))}e.disableAudioPrefetch||this.updatePrefetchMapForAudio_()}applyPlayRange(e,t){this.manifest_.presentationTimeline.isDynamic()||(this.playRangeStart_=e,this.playRangeEnd_=t)}async start(e){v.assert(this.config_,"StreamingEngine configure() must be called before init()!"),await this.initStreams_(e||new Map),this.destroyer_.ensureNotDestroyed(),p.debug("init: completed initial Stream setup"),this.startupComplete_=!0}getCurrentVariant(){return this.currentVariant_}getCurrentTextStream(){return this.currentTextStream_}async loadNewTextStream_(e){let t=R.ContentType;v.assert(!this.mediaStates_.has(t.TEXT),"Should not call loadNewTextStream_ while streaming text!"),this.textStreamSequenceId_++;let i=this.textStreamSequenceId_;try{await this.playerInterface_.mediaSourceEngine.clear(t.TEXT)}catch(a){this.playerInterface_&&this.playerInterface_.onError(a)}let r=O.getFullType(e.mimeType,e.codecs);if(this.playerInterface_.mediaSourceEngine.reinitText(r,e.external),this.playerInterface_.mediaSourceEngine.getTextDisplayer().isTextVisible()&&this.textStreamSequenceId_==i){let a=this.createMediaState_(e);this.mediaStates_.set(t.TEXT,a),this.scheduleUpdate_(a,0)}}unloadTextStream(){let e=R.ContentType,t=this.mediaStates_.get(e.TEXT);t&&(this.cancelUpdate_(t),this.abortOperations_(t).catch(()=>{}),this.lastTextMediaStateBeforeUnload_=this.mediaStates_.get(e.TEXT),this.mediaStates_.delete(e.TEXT),t.stream&&t.stream.closeSegmentIndex&&t.stream.closeSegmentIndex()),this.currentTextStream_=null}setTrickPlay(e){let t=R.ContentType;this.updateSegmentIteratorReverse_();let i=this.mediaStates_.get(t.VIDEO);if(!i)return;let r=i.stream;if(r)if(p.debug("setTrickPlay",e),e){let s=r.trickModeVideo;if(!s||i.restoreStreamAfterTrickPlay)return;p.debug("Engaging trick mode stream",s),this.switchInternal_(s,!1,0,!1),i.restoreStreamAfterTrickPlay=r}else{let s=i.restoreStreamAfterTrickPlay;if(!s)return;p.debug("Restoring non-trick-mode stream",s),i.restoreStreamAfterTrickPlay=null,this.switchInternal_(s,!0,0,!1)}}switchVariant(e,t=!1,i=0,r=!1,s=!1){this.currentVariant_=e,this.startupComplete_&&(e.video&&this.switchInternal_(e.video,t,i,r,s),e.audio&&this.switchInternal_(e.audio,t,i,r,s))}async switchTextStream(e){if(this.lastTextMediaStateBeforeUnload_=null,this.currentTextStream_=e,!this.startupComplete_)return;let t=R.ContentType;v.assert(e&&e.type==t.TEXT,"Wrong stream type passed to switchTextStream!"),e.segmentIndex||await e.createSegmentIndex(),this.switchInternal_(e,!0,0,!1)}reloadTextStream(){let e=R.ContentType,t=this.mediaStates_.get(e.TEXT);t&&this.switchInternal_(t.stream,!0,0,!0)}handleDeferredCloseSegmentIndexes_(e){for(let[t,i]of this.deferredCloseSegmentIndex_.entries()){let r=t,s=i;r.includes(e.type)&&(s(),this.deferredCloseSegmentIndex_.delete(r))}}switchInternal_(e,t,i,r,s){let n=R.ContentType,a=e.type,o=this.mediaStates_.get(a);if(!o&&e.type==n.TEXT){this.loadNewTextStream_(e);return}if(v.assert(o,"switch: expected mediaState to exist"),!o)return;if(o.restoreStreamAfterTrickPlay&&(p.debug("switch during trick play mode",e),e.trickModeVideo?(o.restoreStreamAfterTrickPlay=e,e=e.trickModeVideo,p.debug("switch found trick play stream",e)):(o.restoreStreamAfterTrickPlay=null,p.debug("switch found no special trick play stream"))),o.stream==e&&!r){let u=Ue.logPrefix_(o);p.debug("switch: Stream "+u+" already active");return}if(this.audioPrefetchMap_.has(e)?o.segmentPrefetch=this.audioPrefetchMap_.get(e):o.segmentPrefetch&&o.segmentPrefetch.switchStream(e),e.type==n.TEXT&&o.stream!=e){let u=O.getFullType(e.mimeType,e.codecs);this.playerInterface_.mediaSourceEngine.reinitText(u,e.external)}if(!this.audioPrefetchMap_.has(o.stream)&&o.stream.closeSegmentIndex)if(o.performingUpdate){let u=Ue.logPrefix_(o);this.deferredCloseSegmentIndex_.getOrInsert(u,o.stream.closeSegmentIndex)}else o.stream.closeSegmentIndex();let c=o.stream.isAudioMuxedInVideo!=e.isAudioMuxedInVideo;o.stream=e,o.segmentIterator=null,o.adaptation=!!s,e.dependencyStream?o.dependencyMediaState=this.createMediaState_(e.dependencyStream):o.dependencyMediaState=null,this.setupCrossBoundaryListeners_();let d=Ue.logPrefix_(o);if(p.debug("switch: switching to Stream "+d),c&&(o.lastInitSegmentReference=null,o.lastAppendWindowStart=null,o.lastAppendWindowEnd=null,e.isAudioMuxedInVideo)){let u=null;o.type===n.VIDEO?u=this.mediaStates_.get(n.AUDIO):o.type===n.AUDIO&&(u=this.mediaStates_.get(n.VIDEO)),u&&(this.abortOperations_(u).catch(()=>{}),u.lastInitSegmentReference=null,u.lastAppendWindowStart=null,u.lastAppendWindowEnd=null,this.forceClearBuffer_(u),this.makeAbortDecision_(u).catch(m=>{this.playerInterface_&&(v.assert(m instanceof h,"Wrong error type!"),this.playerInterface_.onError(m))}))}t?o.clearingBuffer?o.waitingToFlushBuffer=!0:o.performingUpdate?(o.waitingToClearBuffer=!0,o.clearBufferSafeMargin=i,o.waitingToFlushBuffer=!0):(this.cancelUpdate_(o),this.clearBuffer_(o,!0,i).catch(u=>{this.playerInterface_&&(v.assert(u instanceof h,"Wrong error type!"),this.playerInterface_.onError(u))})):!o.performingUpdate&&!o.updateTimer&&this.scheduleUpdate_(o,0),this.makeAbortDecision_(o).catch(u=>{this.playerInterface_&&(v.assert(u instanceof h,"Wrong error type!"),this.playerInterface_.onError(u))})}async makeAbortDecision_(e){if(!e.operation)return;let t=e.stream,i=e.operation;t.segmentIndex||await t.createSegmentIndex();let r=t.dependencyStream;r&&!r.segmentIndex&&await r.createSegmentIndex(),e.operation==i&&e.stream==t&&(v.assert(e.stream.segmentIndex,"Segment index should exist by now!"),this.shouldAbortCurrentRequest_(e)&&(p.info("Aborting current segment request."),e.operation.abort()))}shouldAbortCurrentRequest_(e){v.assert(e.operation,"Abort logic requires an ongoing operation!"),v.assert(e.stream&&e.stream.segmentIndex,"Abort logic requires a segment index");let t=this.playerInterface_.getPresentationTime(),i=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type),r=this.getTimeNeeded_(e,t),s=e.stream.segmentIndex.find(r),n=s==null?null:e.stream.segmentIndex.get(s),a=n?n.getSize():null;if(n&&!a){let _=n.getEndTime()-n.getStartTime(),T=e.stream.bandwidth||this.currentVariant_.bandwidth;a=_*T/8}if(!a)return!0;let o=n.initSegmentReference;o&&(a+=o.getSize()||0);let c=this.playerInterface_.getBandwidthEstimate(),d=a*8/c,u=(i||0)-t,m=this.config_.rebufferingGoal,f=u-m;return d<f||e.operation.getBytesRemaining()>a}seeked(){if(!this.playerInterface_)return;let e=this.playerInterface_.getPresentationTime(),t=this.crossBoundarySeekTarget_!=null&&qt.isFloatEqual(e,this.crossBoundarySeekTarget_,Ue.CROSS_BOUNDARY_SEEK_TOLERANCE_);this.crossBoundarySeekTarget_=null,t||(this.crossBoundaryResetPending_=!1);let i=R.ContentType,r=n=>this.playerInterface_.mediaSourceEngine.isBuffered(n,e),s=!1;for(let n of this.mediaStates_.keys()){let a=this.mediaStates_.get(n),o=Ue.logPrefix_(a);if(!t&&!r(n)){if(this.lastMediaSourceReset_=0,a.segmentPrefetch&&a.segmentPrefetch.resetPosition(),a.type===i.AUDIO)for(let u of this.audioPrefetchMap_.values())u.resetPosition();a.segmentIterator=null,(this.playerInterface_.mediaSourceEngine.bufferEnd(n)!=null||a.performingUpdate)&&(this.forceClearBuffer_(a),s=!0),a.operation&&(a.operation.abort(),p.debug(o,"Aborting operation due to seek"),a.operation=null),n===i.TEXT&&this.playerInterface_.mediaSourceEngine.resetCaptionParser(),a.seeked=!0}t&&!a.clearingBuffer&&!a.performingUpdate&&!a.updateTimer&&this.scheduleUpdate_(a,0)}this.shouldUseCrossBoundaryLogic_()&&this.forwardTimeForCrossBoundary_(),s||p.debug("(all): seeked: buffered seek: presentationTime="+e)}forceClearBuffer_(e){let t=Ue.logPrefix_(e);if(e.clearingBuffer){p.debug(t,"clear: already clearing the buffer");return}if(e.waitingToClearBuffer){p.debug(t,"clear: already waiting");return}if(e.performingUpdate){p.debug(t,"clear: currently updating"),e.waitingToClearBuffer=!0,e.clearBufferSafeMargin=0;return}let i=e.type;if(this.playerInterface_.mediaSourceEngine.bufferStart(i)==null){p.debug(t,"clear: nothing buffered"),e.updateTimer==null&&this.scheduleUpdate_(e,0);return}p.debug(t,"clear: handling right now"),this.cancelUpdate_(e),this.clearBuffer_(e,!1,0).catch(r=>{this.playerInterface_&&(v.assert(r instanceof h,"Wrong error type!"),this.playerInterface_.onError(r))})}async initStreams_(e){if(v.assert(this.config_,"StreamingEngine configure() must be called before init()!"),!this.currentVariant_)throw p.error("init: no Streams chosen"),new h(h.Severity.CRITICAL,h.Category.STREAMING,h.Code.STREAMING_ENGINE_STARTUP_INVALID_STATE);let t=this.getStreamsByType_(!0);await this.playerInterface_.mediaSourceEngine.init(t,this.manifest_.sequenceMode,this.manifest_.type,this.manifest_.ignoreManifestTimestampsInSegmentsMode),this.destroyer_.ensureNotDestroyed(),this.updateDuration().catch(()=>{});for(let r of t.keys()){let s=t.get(r);if(!this.mediaStates_.has(r)){let n=this.createMediaState_(s),a=e.get(s.id);a&&(a.replaceFetchDispatcher((o,c,d)=>this.dispatchFetch_(o,c,d)),n.segmentPrefetch=a),this.mediaStates_.set(r,n),this.scheduleUpdate_(n,0)}}this.setupCrossBoundaryListeners_()}createMediaState_(e){let t={stream:e,type:e.type,segmentIterator:null,segmentPrefetch:this.createSegmentPrefetch_(e),lastSegmentReference:null,lastInitSegmentReference:null,lastTimestampOffset:null,lastAppendWindowStart:null,lastAppendWindowEnd:null,lastCodecs:null,lastMimeType:null,restoreStreamAfterTrickPlay:null,endOfStream:!1,performingUpdate:!1,updateTimer:null,waitingToClearBuffer:!1,clearBufferSafeMargin:0,waitingToFlushBuffer:!1,clearingBuffer:!1,seeked:!0,adaptation:!1,recovering:!1,hasError:!1,operation:null,dependencyMediaState:null};return e.dependencyStream&&(t.dependencyMediaState=this.createMediaState_(e.dependencyStream)),t}createSegmentPrefetch_(e){let t=R.ContentType;if(this.manifest_.type==me.MSF||e.type===t.VIDEO&&this.config_.disableVideoPrefetch||e.type===t.AUDIO&&this.config_.disableAudioPrefetch)return null;let i=O.CEA608_CLOSED_CAPTION_MIMETYPE,r=O.CEA708_CLOSED_CAPTION_MIMETYPE;if(e.type===t.TEXT&&(e.mimeType==i||e.mimeType==r)||e.type===t.TEXT&&this.config_.disableTextPrefetch)return null;if(this.audioPrefetchMap_.has(e))return this.audioPrefetchMap_.get(e);let s=e.type,n=this.mediaStates_.get(s),a=n&&n.segmentPrefetch;if(a&&e===a.getStream())return a;if(this.config_.segmentPrefetchLimit>0){let o=this.playerInterface_.getPlaybackRate()<0;return new Xr(this.config_.segmentPrefetchLimit,e,(c,d,u)=>this.dispatchFetch_(c,d,u),o,this.playerInterface_.shouldPrefetchNextSegment,this.playerInterface_.getPlaybackRate)}return null}updatePrefetchMapForAudio_(){let e=this.config_.segmentPrefetchLimit,t=this.config_.prefetchAudioLanguages;for(let i of this.manifest_.variants){if(!i.audio)continue;if(this.audioPrefetchMap_.has(i.audio)){let s=this.audioPrefetchMap_.get(i.audio);if(s.resetLimit(e),!(e>0)||!t.some(n=>Se.areLanguageCompatible(i.audio.language,n))){let n=i.audio.type,a=this.mediaStates_.get(n),o=a&&a.segmentPrefetch;s!==o&&s.clearAll(),this.audioPrefetchMap_.delete(i.audio)}continue}if(e<=0||!t.some(s=>Se.areLanguageCompatible(i.audio.language,s)))continue;let r=this.createSegmentPrefetch_(i.audio);r&&(i.audio.segmentIndex||i.audio.createSegmentIndex(),this.audioPrefetchMap_.set(i.audio,r))}}async updateDuration(){let e=qe.isInfiniteLiveStreamDurationSupported(),t=this.manifest_.presentationTimeline.getDuration();this.liveSeekableRangeEventManager_.removeAll(),t<1/0?(e&&(this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop(),this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange()),await this.playerInterface_.mediaSourceEngine.setDuration(t)):e?(await this.playerInterface_.mediaSourceEngine.setDuration(1/0),this.updateLiveSeekableRangeTimer_&&(this.updateLiveSeekableRangeTimer_.tickNow(),this.liveSeekableRangeEventManager_.listenOnce(this.playerInterface_.video,"timeupdate",()=>{this.updateLiveSeekableRangeTimer_.tickNow().tickEvery(.5)}))):this.playerInterface_.mediaSourceEngine.setDuration(Math.pow(2,32))}async onUpdate_(e){this.destroyer_.ensureNotDestroyed();let t=R.ContentType,i=Ue.logPrefix_(e);if(v.assert(!e.performingUpdate&&e.updateTimer!=null,i+" unexpected call to onUpdate_()"),e.performingUpdate||e.updateTimer==null||(v.assert(!e.clearingBuffer,i+" onUpdate_() should not be called when clearing the buffer"),e.clearingBuffer))return;if(e.updateTimer=null,e.waitingToClearBuffer){p.debug(i,"skipping update and clearing the buffer"),await this.clearBuffer_(e,e.waitingToFlushBuffer,e.clearBufferSafeMargin);return}if(this.handleDeferredCloseSegmentIndexes_(e),!e.stream.segmentIndex){let a=e.stream,o=e.stream.codecs,c=e.stream.mimeType;try{await e.stream.createSegmentIndex()}catch(d){await this.handleStreamingError_(e,d);return}if(e.type===t.TEXT&&(o!=e.stream.codecs||c!=e.stream.mimeType)){let d=O.getFullType(e.stream.mimeType,e.stream.codecs);this.playerInterface_.mediaSourceEngine.reinitText(d,e.stream.external)}if(a!=e.stream){a.closeSegmentIndex&&(v.assert(!e.stream.segmentIndex,"mediaState.stream should not have segmentIndex yet."),a.closeSegmentIndex()),!e.performingUpdate&&!e.updateTimer&&this.scheduleUpdate_(e,0);return}}if(e.dependencyMediaState&&!e.dependencyMediaState.stream.segmentIndex)try{await e.dependencyMediaState.stream.createSegmentIndex()}catch(a){p.warning("Could not create segment index for dependency",a)}try{let a=this.update_(e);a!=null&&(this.scheduleUpdate_(e,a),e.hasError=!1)}catch(a){await this.handleStreamingError_(e,a);return}if(e.type===t.TEXT)return;let r=[];e.stream&&!e.stream.isAudioMuxedInVideo&&r.push(e);let s=e.type===t.AUDIO?t.VIDEO:t.AUDIO,n=this.mediaStates_.get(s);if(n&&n.stream&&!n.stream.isAudioMuxedInVideo&&r.push(n),this.startupComplete_&&r.every(a=>a.endOfStream)){p.v1(i,"calling endOfStream()..."),await this.playerInterface_.mediaSourceEngine.endOfStream(),this.destroyer_.ensureNotDestroyed();let a=this.playerInterface_.mediaSourceEngine.getDuration();a!=0&&a<this.manifest_.presentationTimeline.getDuration()&&this.manifest_.presentationTimeline.setDuration(a)}}update_(e){v.assert(this.manifest_,"manifest_ should not be null"),v.assert(this.config_,"config_ should not be null");let t=R.ContentType;if(Ue.isEmbeddedText_(e))return this.playerInterface_.mediaSourceEngine.setSelectedClosedCaptionId(e.stream.originalId||""),null;if(e.type==t.TEXT&&this.playerInterface_.mediaSourceEngine.clearSelectedClosedCaptionId(),e.stream.isAudioMuxedInVideo&&e.type==t.AUDIO)return null;if(e.type!=t.TEXT&&this.playerInterface_.mediaSourceEngine.closed())return this.resetMediaSource(!0),null;let i=this.config_.updateIntervalSeconds/Math.max(1,Math.abs(this.playerInterface_.getPlaybackRate()));if(!this.playerInterface_.mediaSourceEngine.isStreamingAllowed()&&e.type!=t.TEXT)return i/2;let r=Ue.logPrefix_(e),s=this.playerInterface_.getPresentationTime(),n=this.playerInterface_.getPlaybackRate()<0;if(e.type===t.AUDIO)for(let k of this.audioPrefetchMap_.keys()){let L=this.audioPrefetchMap_.get(k);L.evict(s,!0),L.prefetchSegmentsByTime(s)}let a=this.getTimeNeeded_(e,s);p.v2(r,"timeNeeded="+a);let o=n?this.playerInterface_.mediaSourceEngine.bufferedBehindOf(e.type,s):this.playerInterface_.mediaSourceEngine.bufferedAheadOf(e.type,s);if(e.type==t.VIDEO&&!this.mediaStates_.has(t.AUDIO)&&this.playerInterface_.mediaSourceEngine.hasSourceBufferFor(t.AUDIO)){let k=n?this.playerInterface_.mediaSourceEngine.bufferedBehindOf(t.AUDIO,s):this.playerInterface_.mediaSourceEngine.bufferedAheadOf(t.AUDIO,s);o=Math.min(o,k)}p.v2(r,"update_:","presentationTime="+s,"bufferedAhead="+o);let c=Math.max(this.config_.rebufferingGoal,this.config_.bufferingGoal),d=Math.max(1,c*this.bufferingScale_),u=this.manifest_.presentationTimeline.isDynamic()?1/0:this.manifest_.presentationTimeline.getDuration()-a,m=1e-6,f=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type);if(!n&&u<m&&f){if(p.debug(r,"buffered to end of presentation"),e.endOfStream=!0,e.type==t.VIDEO){let k=this.mediaStates_.get(t.TEXT);k&&Ue.isEmbeddedText_(k)&&(k.endOfStream=!0);let L=this.mediaStates_.get(t.AUDIO);L&&L.stream.isAudioMuxedInVideo&&(L.endOfStream=!0)}return null}if(e.endOfStream=!1,n){let k=this.manifest_.presentationTimeline.getSeekRangeStart();if(f!=null&&a<=k+m)return p.debug(r,"buffered to start of presentation"),null}if(o>0&&this.config_.stopFetchingOnPause&&this.playerInterface_.video.paused)return p.v2(r,"video paused"),i/2;if(o>=d)return p.v2(r,"buffering goal met"),i/2;let g=!e.segmentIterator,_=this.getSegmentReferenceNeeded_(e,s,f);if(!_){if(!this.manifest_.presentationTimeline.isDynamic()&&u<m){if(p.info(r,"Close to end with no buffer and no segment reference.","Marking as end of stream."),e.endOfStream=!0,e.type==t.VIDEO){let V=this.mediaStates_.get(t.TEXT);V&&Ue.isEmbeddedText_(V)&&(V.endOfStream=!0)}return null}let k=1/0,L=e.lastSegmentReference;return L&&(k=L.endTime-L.startTime),Math.min(k/2,i)}let T=e.lastInitSegmentReference,b=_.initSegmentReference;T&&b&&Tt.equal(b,T)&&(T.boundaryEnd=b.boundaryEnd);let S=!1;g&&e.adaptation&&(S=!0,e.adaptation=!1);let E=1/0,w=-1/0;for(let k of this.mediaStates_.values()){if(Ue.isEmbeddedText_(k)||k.stream.isAudioMuxedInVideo||k.segmentIterator&&!k.segmentIterator.current())continue;let L=this.getTimeNeeded_(k,s);E=Math.min(E,L),w=Math.max(w,L)}let A=this.manifest_.presentationTimeline.getMaxSegmentDuration(),x=Math.max(A*Ue.MAX_RUN_AHEAD_SEGMENTS_,Ue.MIN_RUN_AHEAD_SECONDS_);return(n?w-a:a-E)>=x?(p.v2(r,"waiting for other streams to buffer"),i):(e.segmentPrefetch&&e.segmentIterator&&!this.audioPrefetchMap_.has(e.stream)&&(e.segmentPrefetch.evict(_.startTime+.001),e.segmentPrefetch.prefetchSegmentsByTime(_.startTime).catch(()=>{})),this.shouldUseCrossBoundaryLogic_()&&this.discardReferenceByBoundary_(e,_)||(this.fetchAndAppend_(e,s,_,S).catch(()=>{}),e.dependencyMediaState&&this.fetchAndAppendDependency_(e.dependencyMediaState,s,d)),null)}getTimeNeeded_(e,t){return e.lastSegmentReference?this.playerInterface_.getPlaybackRate()<0?e.lastSegmentReference.startTime:e.lastSegmentReference.endTime:t}getSegmentReferenceNeeded_(e,t,i){var s,n;let r=Ue.logPrefix_(e);if(v.assert(e.stream.segmentIndex,"segment index should have been generated already"),e.segmentIterator){let a=e.segmentIterator.current();if(a&&e.lastSegmentReference){let o=e.lastSegmentReference.startTime,c=e.lastSegmentReference.endTime;qt.isFloatEqual(o,a.startTime,.002)&&qt.isFloatEqual(c,a.endTime,.002)&&(a=e.segmentIterator.next().value)}return a}else if(e.lastSegmentReference||i){let a=this.playerInterface_.getPlaybackRate()<0,o;if(a){let d=this.playerInterface_.mediaSourceEngine.bufferStart(e.type),u=e.lastSegmentReference?e.lastSegmentReference.startTime:null,m=d;u!=null&&(m==null||u<m)&&(m=u),o=m!=null?m-.001:i}else o=e.lastSegmentReference?e.lastSegmentReference.endTime:i;v.assert(o!=null,"Should have a time to search"),p.v1(r,"looking up segment from new stream endTime:",o),e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(o,!1,a));let c=e.segmentIterator&&e.segmentIterator.next().value;return c==null&&p.warning(r,"cannot find segment","endTime:",o),c}else{let a=this.manifest_.sequenceMode||this.shouldUseCrossBoundaryLogic_()||this.manifest_.type===me.MSF?0:this.config_.inaccurateManifestTolerance,o=Math.max(t-a,0),c=this.playerInterface_.mediaSourceEngine.getDuration(),d=Ue.LOOKUP_TIME_DURATION_THRESHOLD_;Math.abs(o-c)<d&&(a=d,o=Math.max(t-a,0)),p.v1(r,"looking up segment","lookupTime:",o,"presentationTime:",t);let u=this.playerInterface_.getPlaybackRate()<0,m=null;for(a&&(e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(o,!1,u)),m=e.segmentIterator&&e.segmentIterator.next().value),m||(e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(t,!1,u)),m=e.segmentIterator&&e.segmentIterator.next().value);(m==null?void 0:m.getStatus())===Te.Status.MISSING;)m=(n=(s=e.segmentIterator)==null?void 0:s.next().value)!=null?n:null;return m==null&&p.warning(r,"cannot find segment","lookupTime:",o,"presentationTime:",t),m}}async fetchAndAppend_(e,t,i,r){let s=R.ContentType,n=Ue.logPrefix_(e);p.v1(n,"fetchAndAppend_:","presentationTime="+t,"reference.startTime="+i.startTime,"reference.endTime="+i.endTime);let a=e.stream,o=e.segmentIterator;e.performingUpdate=!0;try{if(i.getStatus()==Te.Status.MISSING)throw new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.SEGMENT_MISSING);if(await this.initSourceBuffer_(e,i,r),this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;p.v2(n,"fetching segment");let c=a.mimeType=="video/mp4"||a.mimeType=="audio/mp4",d=window.ReadableStream,u=this.config_.lowLatencyMode&&this.manifest_.isLowLatency,m={mediaTimestamp:null};if(u&&d&&c&&(this.manifest_.type!=me.HLS||i.hasByterangeOptimization())){let T=new Uint8Array(0),b=!1,S=!1,E,w=async x=>{if(!b&&(S=!0,this.destroyer_.ensureNotDestroyed(),!this.fatalError_))try{T=ne.concat(T,x);let M=!1,C=0;if(new F().box("mdat",k=>{C=k.size+k.start,M=!0}).parse(T,!1,!0),M){let k=T.subarray(0,C);T=T.subarray(C);let L=await this.append_(e,t,a,i,k,!0,r);m.mediaTimestamp==null&&(m=L),e.segmentPrefetch&&e.segmentIterator&&e.segmentPrefetch.prefetchSegmentsByTime(i.startTime,!0)}}catch(M){E=M}},A=await this.fetch_(e,i,w);if(E)throw E;if(!S){if(b=!0,this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;if(e.waitingToClearBuffer){p.info(n,"waitingToClearBuffer, skip append"),e.performingUpdate=!1,this.scheduleUpdate_(e,0);return}m=await this.append_(e,t,a,i,A,!1,r)}e.segmentPrefetch&&e.segmentIterator&&e.segmentPrefetch.prefetchSegmentsByTime(i.startTime,!0)}else{u&&!d&&p.warning("Low latency streaming mode is enabled, but ReadableStream is not supported by the browser.");let b=await this.fetch_(e,i);if(this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;if(this.destroyer_.ensureNotDestroyed(),e.waitingToClearBuffer){p.info(n,"waitingToClearBuffer, skip append"),e.performingUpdate=!1,this.scheduleUpdate_(e,0);return}m=await this.append_(e,t,a,i,b,!1,r)}if(this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;e.lastSegmentReference=i;let f=o.next().value;p.v2(n,"advancing to next segment",f),e.performingUpdate=!1,e.recovering=!1;let _=this.playerInterface_.mediaSourceEngine.getBufferedInfo()[e.type];if(p.v1(n,"finished fetch and append",JSON.stringify(_)),!e.waitingToClearBuffer){let T=null;e.type===s.VIDEO?T=this.mediaStates_.get(s.AUDIO):e.type===s.AUDIO&&(T=this.mediaStates_.get(s.VIDEO)),T&&T.type==s.AUDIO?this.playerInterface_.onSegmentAppended(i,e.stream,T.stream.isAudioMuxedInVideo,!1,m.mediaTimestamp):this.playerInterface_.onSegmentAppended(i,e.stream,e.stream.codecs.includes(","),!1,m.mediaTimestamp)}this.cancelUpdate_(e),this.scheduleUpdate_(e,0)}catch(c){if(this.destroyer_.ensureNotDestroyed(c),this.fatalError_)return;v.assert(c instanceof h,"Should only receive a Shaka error"),e.performingUpdate=!1,c.code==h.Code.OPERATION_ABORTED?(e.performingUpdate=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0)):e.type==s.TEXT&&this.config_.ignoreTextStreamFailures?(c.code==h.Code.BAD_HTTP_STATUS?p.warning(n,"Text stream failed to download. Proceeding without it."):p.warning(n,"Text stream failed to parse. Proceeding without it."),this.mediaStates_.delete(s.TEXT)):c.code==h.Code.QUOTA_EXCEEDED_ERROR?await this.handleQuotaExceeded_(e,c):(p.error(n,"failed fetch and append: code="+c.code),e.hasError=!0,c.category==h.Category.NETWORK&&e.segmentPrefetch&&e.segmentPrefetch.removeReference(i),c.severity=h.Severity.CRITICAL,await this.handleStreamingError_(e,c))}}async fetchAndAppendDependency_(e,t,i){let r=R.ContentType,s=e.stream,n=s.segmentIndex,a=n&&n.getIteratorForTime(t),o=a&&a.next().value;for(;o&&this.requestedDependencySegments_.includes(o.startTime);)o=a&&a.next().value;if(o){let c=o.initSegmentReference;if(c&&!Tt.equal(c,e.lastInitSegmentReference)){e.lastInitSegmentReference=c;try{let d=await this.fetch_(e,c);if(!this.playerInterface_)return;this.playerInterface_.mediaSourceEngine.appendDependency(d,0,s),this.requestedDependencySegments_=[]}catch(d){throw e.lastInitSegmentReference=null,d}}if(!e.lastSegmentReference||e.lastSegmentReference!=o){e.lastSegmentReference=o;try{let m=await this.fetch_(e,o);if(!this.playerInterface_)return;this.playerInterface_.mediaSourceEngine.appendDependency(m,0,s),this.requestedDependencySegments_.push(o.startTime)}catch(m){throw e.lastSegmentReference=null,m}if(!this.playerInterface_)return;if(!e.waitingToClearBuffer){let m=null;e.type===r.VIDEO?m=this.mediaStates_.get(r.AUDIO):e.type===r.AUDIO&&(m=this.mediaStates_.get(r.VIDEO)),m&&m.type==r.AUDIO?this.playerInterface_.onSegmentAppended(o,e.stream,m.stream.isAudioMuxedInVideo,!0,null):this.playerInterface_.onSegmentAppended(o,e.stream,e.stream.codecs.includes(","),!0,null)}let d=Math.max(0,...this.requestedDependencySegments_);this.playerInterface_.getPresentationTime()+i>d&&await this.fetchAndAppendDependency_(e,o.startTime,i)}}}retry(e){if(this.destroyer_.destroyed())return p.error("Unable to retry after StreamingEngine is destroyed!"),!1;if(this.fatalError_)return p.error("Unable to retry after StreamingEngine encountered a fatal error!"),!1;for(let t of this.mediaStates_.values()){let i=Ue.logPrefix_(t);t.hasError&&!t.performingUpdate&&!t.updateTimer&&(p.info(i,"Retrying after failure..."),t.hasError=!1,this.scheduleUpdate_(t,e))}return!0}async handleQuotaExceeded_(e,t){let i=Ue.logPrefix_(e),r=!1;for(let s of this.mediaStates_.values())if(s!=e&&s.recovering){r=!0;break}if(r)p.debug(i,"MediaSource threw QuotaExceededError:","waiting for another stream to recover...");else{if(this.config_.avoidEvictionOnQuotaExceededError){let o=this.getDisabledTime_(t);if(o&&p.debug(i,"Disabling stream due to quota",t),this.playerInterface_.disableStream(e.stream,o))return;this.scheduleUpdate_(e,4);return}let s=Math.round(100*this.bufferingScale_);if(s>20)this.bufferingScale_-=.2;else if(s>4)this.bufferingScale_-=.04;else{let o=this.getDisabledTime_(t);if(o&&p.debug(i,"Disabling stream due to quota",t),this.playerInterface_.disableStream(e.stream,o)){this.bufferingScale_=1;let d=this.playerInterface_.getPresentationTime();await this.evict_(e,d)}else p.error(i,"MediaSource threw QuotaExceededError too many times"),e.hasError=!0,this.fatalError_=!0,this.playerInterface_.onError(t);return}let n=Math.round(100*this.bufferingScale_);p.warning(i,"MediaSource threw QuotaExceededError:","reducing buffering goals by "+(100-n)+"%"),e.recovering=!0;let a=this.playerInterface_.getPresentationTime();await this.evict_(e,a)}this.scheduleUpdate_(e,4)}async initSourceBuffer_(e,t,i){let r=R.ContentType,s=Ue.logPrefix_(e),n=e.lastSegmentReference==null,a=[],o=Math.max(0,Math.max(t.appendWindowStart,this.playRangeStart_)-Ue.APPEND_WINDOW_START_FUDGE_),c=Math.min(t.appendWindowEnd,this.playRangeEnd_)+Ue.APPEND_WINDOW_END_FUDGE_;if(this.config_.clampAppendWindowToDuration){let _=this.manifest_.presentationTimeline.getDuration();_<1/0&&(c=Math.min(c,_))}v.assert(t.startTime<=c,s+" segment should start before append window end");let d=t.codecs||e.stream.codecs,u=O.getCodecBase(d),m=O.getBasicType(t.mimeType||e.stream.mimeType),f=t.timestampOffset;if(f!=e.lastTimestampOffset||o!=e.lastAppendWindowStart||c!=e.lastAppendWindowEnd||u!=e.lastCodecs||m!=e.lastMimeType){if(p.v1(s,"setting timestamp offset to "+f),p.v1(s,"setting append window start to "+o),p.v1(s,"setting append window end to "+c),e.lastCodecs&&e.lastMimeType&&this.playerInterface_.mediaSourceEngine.isResetMediaSourceNecessary(e.type,m,d,this.getStreamsByType_())){let T=null;e.type===r.VIDEO?T=this.mediaStates_.get(r.AUDIO):e.type===r.AUDIO&&(T=this.mediaStates_.get(r.VIDEO)),T&&(await this.abortOperations_(T).catch(()=>{}),T.lastInitSegmentReference=null,T.lastAppendWindowStart=null,T.lastAppendWindowEnd=null,this.forceClearBuffer_(T))}await this.setProperties_(e,f,o,c,t,u,m)}if(!Tt.equal(t.initSegmentReference,e.lastInitSegmentReference)&&(e.lastInitSegmentReference=t.initSegmentReference,t.isIndependent()&&t.initSegmentReference)){p.v1(s,"fetching init segment");let _=this.fetch_(e,t.initSegmentReference),T=async()=>{try{let S=await _;this.destroyer_.ensureNotDestroyed();let E=null,w=new Map,A={projection:null,hfov:null};if(e.stream){let L=e.stream.videoLayout;if(L){let V=L.split("/");V.includes("PROJ-RECT")?A.projection="rect":V.includes("PROJ-EQUI")?A.projection="equi":V.includes("PROJ-HEQU")?A.projection="hequ":V.includes("PROJ-PRIM")?A.projection="prim":V.includes("PROJ-AIV")&&(A.projection="aiv")}}let x=new F;x.boxes(["moov","trak","mdia"],F.children).fullBox("mdhd",L=>{v.assert(L.version!=null,"MDHD is a full box and should have a valid version."),E=pe.parseMDHD(L.reader,L.version).timescale}).fullBox("hdlr",L=>{switch(v.assert(L.version!=null,"HDLR is a full box and should have a valid version."),pe.parseHDLR(L.reader).handlerType){case"soun":w.set(r.AUDIO,E);break;case"vide":w.set(r.VIDEO,E);break}E=null}),e.type===r.VIDEO&&!A.projection&&x.boxes(["minf","stbl"],F.children).fullBox("stsd",F.sampleDescription).boxes([...F.AVC_HEVC_VVC_DV,"encv"],F.visualSampleEntry).boxes(["vexu","proj"],F.children).fullBox("prji",L=>{let V=pe.parsePRJI(L.reader);A.projection=V.projection}).box("hfov",L=>{let V=pe.parseHFOV(L.reader);A.hfov=V.hfov}),x.parse(S,!0,!0),e.type===r.VIDEO&&this.updateSpatialVideoInfo_(A),w.has(e.type)?t.initSegmentReference.timescale=w.get(e.type):E!=null&&(t.initSegmentReference.timescale=E);let M=e.stream.segmentIndex,C;M instanceof Mi&&(C=M.getTimelineForTime(t.startTime)),p.v1(s,"appending init segment");let k=e.stream.closedCaptions&&e.stream.closedCaptions.size>0;await this.playerInterface_.beforeAppendSegment(e.type,S),await this.playerInterface_.mediaSourceEngine.appendBuffer(e.type,S,null,e.stream,k,e.seeked,i,!1,!1,C)}catch(S){throw e.lastInitSegmentReference=null,S}},b=t.startTime;if(n){let S=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type);S!=null&&(b=S)}this.playerInterface_.onInitSegmentAppended(b,t.initSegmentReference),a.push(T())}let g=e.lastSegmentReference?e.lastSegmentReference.discontinuitySequence:-1;t.discontinuitySequence!=g&&a.push(this.playerInterface_.mediaSourceEngine.resync(e.type,t.startTime)),await Promise.all(a)}async setProperties_(e,t,i,r,s,n,a){let o=R.ContentType,c=this.getStreamsByType_();try{e.lastAppendWindowStart=i,e.lastAppendWindowEnd=r,n&&(e.lastCodecs=n),a&&(e.lastMimeType=a),e.lastTimestampOffset=t;let d=this.manifest_.sequenceMode||this.manifest_.type==me.HLS,u=null;e.type===o.VIDEO?u=this.mediaStates_.get(o.AUDIO):e.type===o.AUDIO&&(u=this.mediaStates_.get(o.VIDEO)),u&&u.stream&&u.stream.isAudioMuxedInVideo&&await this.playerInterface_.mediaSourceEngine.setStreamProperties(u.type,t,i,r,d,u.stream.mimeType,u.stream.codecs,c),await this.playerInterface_.mediaSourceEngine.setStreamProperties(e.type,t,i,r,d,s.mimeType||e.stream.mimeType,s.codecs||e.stream.codecs,c)}catch(d){throw e.lastAppendWindowStart=null,e.lastAppendWindowEnd=null,e.lastCodecs=null,e.lastMimeType=null,e.lastTimestampOffset=null,d}}async append_(e,t,i,r,s,n=!1,a=!1){let o=Ue.logPrefix_(e),c=i.closedCaptions&&i.closedCaptions.size>0;if(this.config_.shouldFixTimestampOffset){let m=i.mimeType=="video/mp4"||i.mimeType=="audio/mp4",f=null;r.initSegmentReference&&(f=r.initSegmentReference.timescale),m&&f&&i.type===R.ContentType.VIDEO&&this.manifest_.type==me.DASH&&new F().boxes(F.FRAGMENT_PATH,F.children).fullBox("tfdt",async _=>{v.assert(_.version!=null,"TFDT is a full box and should have a valid version.");let b=pe.parseTFDTInaccurate(_.reader,_.version).baseMediaDecodeTime;if(!b)return;v.assert(typeof f=="number","Should be an number!");let S=-b/f;if((Number(e.lastTimestampOffset)||0)<S){let w=e.lastAppendWindowStart,A=e.lastAppendWindowEnd;v.assert(typeof w=="number","Should be an number!"),v.assert(typeof A=="number","Should be an number!"),await this.setProperties_(e,S,w,A,r)}}).parse(s,!1,n)}await this.evict_(e,t),this.destroyer_.ensureNotDestroyed();let d=e.seeked;e.seeked=!1,await this.playerInterface_.beforeAppendSegment(e.type,s);let u=await this.playerInterface_.mediaSourceEngine.appendBuffer(e.type,s,r,i,c,d,a,n);return this.destroyer_.ensureNotDestroyed(),p.v2(o,"appended media segment"),u}async evict_(e,t){this.lastTextMediaStateBeforeUnload_==e&&(this.lastTextMediaStateBeforeUnload_=null);let i=e.stream.segmentIndex,r;i instanceof Mi&&(i.evict(this.manifest_.presentationTimeline.getSegmentAvailabilityStart()),r=[],i.forEachIndex(g=>{r.push(g.continuityTimeline())}));let s=Ue.logPrefix_(e);p.v2(s,"checking buffer length");let n=Math.max(this.config_.bufferBehind*this.bufferingScale_,this.manifest_.presentationTimeline.getMaxSegmentDuration()),a=this.playerInterface_.mediaSourceEngine.bufferStart(e.type);if(a==null){p.v2(s,"buffer behind okay because nothing buffered:","presentationTime="+t,"bufferBehind="+n);return}let o=t-a,c=this.config_.evictionGoal,d=this.manifest_.presentationTimeline.getSeekRangeStart(),m=this.manifest_.presentationTimeline.getSeekRangeEnd()-d,f=o-n;if(m>c&&(f=Math.max(o-n,d-c-a)),f<=c){p.v2(s,"buffer behind okay:","presentationTime="+t,"bufferedBehind="+o,"bufferBehind="+n,"evictionGoal="+c,"underflow="+Math.abs(f));return}p.v1(s,"buffer behind too large:","presentationTime="+t,"bufferedBehind="+o,"bufferBehind="+n,"evictionGoal="+c,"overflow="+f),await this.playerInterface_.mediaSourceEngine.remove(e.type,a,a+f,r),this.destroyer_.ensureNotDestroyed(),p.v1(s,"evicted "+f+" seconds"),this.lastTextMediaStateBeforeUnload_&&(await this.evict_(this.lastTextMediaStateBeforeUnload_,t),this.destroyer_.ensureNotDestroyed())}static isEmbeddedText_(e){let t=O.CEA608_CLOSED_CAPTION_MIMETYPE,i=O.CEA708_CLOSED_CAPTION_MIMETYPE;return e&&e.type==R.ContentType.TEXT&&(e.stream.mimeType==t||e.stream.mimeType==i)}async fetch_(e,t,i){let r=t.getSegmentData();if(r)return r;let s=null;e.segmentPrefetch&&(s=e.segmentPrefetch.getPrefetchedSegment(t,i)),s||(s=this.dispatchFetch_(t,e.stream,i));let n=0;e.segmentIterator&&(n=e.segmentIterator.currentPosition()),e.operation=s;let a=await s.promise;e.operation=null;let o=a.data;return t.aesKey&&(o=await _t.aesDecrypt(o,t.aesKey,n)),o}dispatchFetch_(e,t,i,r=!1){return v.assert(this.playerInterface_.netEngine,"Must have net engine"),Ue.dispatchFetch(e,t,i||null,this.config_.retryParameters,this.playerInterface_.netEngine)}static dispatchFetch(e,t,i,r,s,n=!1){let a=K.RequestType.SEGMENT,o=e instanceof Te?e:void 0,c=o?K.AdvancedRequestType.MEDIA_SEGMENT:K.AdvancedRequestType.INIT_SEGMENT,d=ct.createSegmentRequest(e.getUris(),e.startByte,e.endByte,r,i);return d.contentType=t.type,p.v2("fetching: reference=",e),s.request(a,d,{type:c,stream:t,segment:o,isPreload:n})}async clearBuffer_(e,t,i){let r=Ue.logPrefix_(e);if(v.assert(!e.performingUpdate&&e.updateTimer==null,r+" unexpected call to clearBuffer_()"),e.waitingToClearBuffer=!1,e.waitingToFlushBuffer=!1,e.clearBufferSafeMargin=0,e.clearingBuffer=!0,e.lastSegmentReference=null,e.segmentIterator=null,p.debug(r,"clearing buffer"),e.segmentPrefetch&&!this.audioPrefetchMap_.has(e.stream)&&e.segmentPrefetch.clearAll(!1),i){let s=this.playerInterface_.getPresentationTime(),n=this.playerInterface_.mediaSourceEngine.getDuration();await this.playerInterface_.mediaSourceEngine.remove(e.type,s+i,n)}else await this.playerInterface_.mediaSourceEngine.clear(e.type),this.destroyer_.ensureNotDestroyed(),t&&await this.playerInterface_.mediaSourceEngine.flush(e.type);this.destroyer_.ensureNotDestroyed(),p.debug(r,"cleared buffer"),e.clearingBuffer=!1,e.endOfStream=!1,!e.performingUpdate&&!e.updateTimer&&this.scheduleUpdate_(e,0)}scheduleUpdate_(e,t){let i=Ue.logPrefix_(e),r=e.type;if(r==R.ContentType.TEXT&&!this.mediaStates_.has(r)){p.v1(i,"Text stream is unloaded. No update is needed.");return}p.v2(i,"updating in "+t+" seconds"),v.assert(e.updateTimer==null,i+" did not expect update to be scheduled"),e.updateTimer=new ae(async()=>{try{await this.onUpdate_(e)}catch(s){this.playerInterface_&&this.playerInterface_.onError(s)}}).tickAfter(t)}cancelUpdate_(e){e.updateTimer!=null&&(e.updateTimer.stop(),e.updateTimer=null)}async abortOperations_(e){e.operation&&await e.operation.abort()}async handleStreamingError_(e,t){let i=Ue.logPrefix_(e);if(t.code==h.Code.STREAMING_NOT_ALLOWED){e.performingUpdate=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0);return}if(await this.failureCallbackBackoff_.attempt(),this.destroyer_.ensureNotDestroyed(),t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||t.category===h.Category.NETWORK&&t.code!=h.Code.TIMEOUT){if(e.restoreStreamAfterTrickPlay){this.setTrickPlay(!1);return}let r=!1;if(t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED){r=await this.resetMediaSource(!0);for(let a of this.mediaStates_.values())this.cancelUpdate_(a);this.destroyer_.ensureNotDestroyed()}let s=this.getDisabledTime_(t);s&&p.debug(i,"Disabling stream due to error",t);let n=this.playerInterface_.disableStream(e.stream,s);t.handled=n||r,n&&(t.severity=h.Severity.RECOVERABLE)}if(!t.handled&&t.code==h.Code.SEGMENT_MISSING){let r=this.playerInterface_.getPresentationTime(),s=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type),n=this.getSegmentReferenceNeeded_(e,r,s);for(;(n==null?void 0:n.getStatus())===Te.Status.MISSING;)e.lastSegmentReference=n,n=this.getSegmentReferenceNeeded_(e,r,s);if(n){await this.playerInterface_.mediaSourceEngine.resync(e.type,n.startTime),e.performingUpdate=!1,e.hasError=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0);return}}(!t.handled||t.code!=h.Code.SEGMENT_MISSING)&&this.playerInterface_.onError(t),t.handled||this.config_.failureCallback(t)}getDisabledTime_(e){return this.config_.maxDisabledTime===0&&e.code==h.Code.SEGMENT_MISSING?1:e.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||e.code==h.Code.MEDIA_SOURCE_OPERATION_THREW?1/0:this.config_.maxDisabledTime}async resetMediaSource(e=!1,t=!0){let i=Date.now()/1e3,r=this.config_.minTimeBetweenRecoveries;if(!e&&(!this.config_.allowMediaSourceRecoveries||i-this.lastMediaSourceReset_<r))return!1;this.lastMediaSourceReset_=i;let s=R.ContentType,n=this.mediaStates_.get(s.AUDIO);n&&(this.cancelUpdate_(n),n.operation&&(n.operation.abort(),n.operation=null),n.lastInitSegmentReference=null,n.lastAppendWindowStart=null,n.lastAppendWindowEnd=null,n.lastInitSegmentReference=null,n.lastAppendWindowStart=null,n.lastAppendWindowEnd=null,n.performingUpdate=!1,n.waitingToClearBuffer=!1,n.clearBufferSafeMargin=0,n.waitingToFlushBuffer=!1,n.clearingBuffer=!1,n.segmentIterator&&n.segmentIterator.resetToLastIndependent());let a=this.mediaStates_.get(s.VIDEO);a&&(this.cancelUpdate_(a),a.operation&&(a.operation.abort(),a.operation=null),a.lastInitSegmentReference=null,a.lastAppendWindowStart=null,a.lastAppendWindowEnd=null,a.performingUpdate=!1,a.waitingToClearBuffer=!1,a.clearBufferSafeMargin=0,a.waitingToFlushBuffer=!1,a.clearingBuffer=!1,a.segmentIterator&&a.segmentIterator.resetToLastIndependent());let o=this.playerInterface_.video.paused;return await this.playerInterface_.mediaSourceEngine.reset(this.getStreamsByType_()),a&&!a.clearingBuffer&&!a.performingUpdate&&!a.updateTimer&&this.scheduleUpdate_(a,0),n&&!n.clearingBuffer&&!n.performingUpdate&&!n.updateTimer&&this.scheduleUpdate_(n,0),o||this.playerInterface_.video.play(),!0}updateSpatialVideoInfo_(e){if(this.spatialVideoInfo_.projection!=e.projection||this.spatialVideoInfo_.hfov!=e.hfov){let t=U.EventName,i;if(e.projection!=null||e.hfov!=null){let r=t.SpatialVideoInfoEvent,s=new Map().set("detail",e);i=new U(r,s)}else{let r=t.NoSpatialVideoInfoEvent;i=new U(r)}i.cancelable=!0,this.playerInterface_.onEvent(i),this.spatialVideoInfo_=e}}updateSegmentIteratorReverse_(){let e=this.playerInterface_.getPlaybackRate()<0;for(let t of this.mediaStates_.values())t.segmentIterator&&t.segmentIterator.setReverse(e),t.segmentPrefetch&&t.segmentPrefetch.setReverse(e),e&&(t.segmentIterator=null,t.endOfStream=!1,!t.performingUpdate&&!t.updateTimer&&!t.clearingBuffer&&!t.waitingToClearBuffer&&this.scheduleUpdate_(t,0));for(let t of this.audioPrefetchMap_.values())t.setReverse(e)}shouldUseCrossBoundaryLogic_(){if(this.config_.crossBoundaryStrategy!==yi.KEEP)return!0;let e=j.getDevice(),t=this.playerInterface_.getKeySystem();if(e.supportsSmoothCodecSwitching(t)){if(!e.supportsContainerChangeType())for(let i of this.mediaStates_.keys()){let r=this.mediaStates_.get(i),s=R.ContentType;if(r.type===s.TEXT)continue;let n=r.stream;if(n&&n.fullMimeTypes&&n.fullMimeTypes.size>1){let a=new Set;for(let o of n.fullMimeTypes)a.add(O.getContainerType(o));return a.size>1}}}else for(let i of this.mediaStates_.keys()){let r=this.mediaStates_.get(i),s=R.ContentType;if(r.type===s.TEXT)continue;let n=r.stream;if(n&&n.fullMimeTypes&&n.fullMimeTypes.size>1)return!0}return!1}setupCrossBoundaryListeners_(){this.crossBoundaryEventManager_.removeAll(),this.shouldUseCrossBoundaryLogic_()&&this.crossBoundaryEventManager_.listenMulti(this.playerInterface_.video,["waiting","timeupdate"],()=>{this.forwardTimeForCrossBoundary_()})}forwardTimeForCrossBoundary_(){if(!this.shouldUseCrossBoundaryLogic_())return;this.crossBoundaryTimer_.stop();let e=this.playerInterface_.getPresentationTime(),t=R.ContentType,i=this.mediaStates_.get(t.VIDEO)||this.mediaStates_.get(t.AUDIO);if(!i)return;let r=i.lastInitSegmentReference;if(!r||r.boundaryEnd===null)return;let s=Ue.CROSS_BOUNDARY_END_THRESHOLD_,n=r.boundaryEnd-e;n<0||n>s||(this.boundaryTime_=r.boundaryEnd+Ue.APPEND_WINDOW_END_FUDGE_,this.crossBoundaryTimer_.tickAfter(n))}discardReferenceByBoundary_(e,t){let i=R.ContentType;if(e.type===i.TEXT)return!1;let r=e.lastInitSegmentReference;if(!r)return!1;let s=Ue.logPrefix_(e),n=t.initSegmentReference,a=r.boundaryEnd!==n.boundaryEnd,o=a;if(this.config_.crossBoundaryStrategy===yi.RESET_TO_ENCRYPTED&&(!r.encrypted&&!n.encrypted&&(o=!1),r.encrypted&&(p.debug(s,"stream is encrypted, discard crossBoundaryStrategy"),this.config_.crossBoundaryStrategy=yi.KEEP)),this.config_.crossBoundaryStrategy===yi.RESET_ON_ENCRYPTION_CHANGE&&r.encrypted==n.encrypted&&(o=!1),this.config_.crossBoundaryStrategy===yi.KEEP&&r.mimeType&&n.mimeType){let u=O.getNormalizedCodec(O.getCodecs(r.mimeType)),m=O.getNormalizedCodec(O.getCodecs(n.mimeType));r.mimeType==n.mimeType&&u==m&&(o=!1)}let c=(this.mediaStates_.get(i.VIDEO)||this.mediaStates_.get(i.AUDIO))===e,d=c&&a&&this.crossBoundaryResetPending_;return d&&(this.crossBoundaryResetPending_=!1),c&&o&&(d||e.seeked)&&(p.debug(s,"reset mediaSource","from=",e.lastInitSegmentReference,"to=",t.initSegmentReference),this.resetMediaSource(!0).then(()=>{let u=U.EventName.BoundaryCrossed,m=new Map().set("oldEncrypted",r.encrypted).set("newEncrypted",n.encrypted);this.playerInterface_.onEvent(new U(u,m))})),o}getStreamsByType_(e=!1){let t=R.ContentType,i=a=>{if(a.fullMimeTypes&&a.fullMimeTypes.size>1&&this.mediaStates_.has(a.type)){let o=this.mediaStates_.get(a.type),c=this.playerInterface_.mediaSourceEngine.bufferEnd(o.type),d=this.playerInterface_.getPresentationTime(),u=this.getSegmentReferenceNeeded_(o,d,c);u&&u.codecs&&u.mimeType&&(a.codecs=u.codecs,a.mimeType=u.mimeType)}},r=new Map,s=this.currentVariant_.audio;s&&(i(s),r.set(t.AUDIO,s));let n=this.currentVariant_.video;return n&&(i(n),r.set(t.VIDEO,n)),e&&this.currentTextStream_&&r.set(t.TEXT,this.currentTextStream_),r}static logPrefix_(e){return"("+e.type+":"+e.stream.id+")"}};l(Ue,"APPEND_WINDOW_START_FUDGE_",.1),l(Ue,"APPEND_WINDOW_END_FUDGE_",.1),l(Ue,"MAX_RUN_AHEAD_SEGMENTS_",1),l(Ue,"MIN_RUN_AHEAD_SECONDS_",.5),l(Ue,"CROSS_BOUNDARY_END_THRESHOLD_",1),l(Ue,"CROSS_BOUNDARY_SEEK_TOLERANCE_",.1),l(Ue,"LOOKUP_TIME_DURATION_THRESHOLD_",1);var jr=Ue;/*! @license
|
|
364
|
+
*/var Ue=class Ue{constructor(e,t){l(this,"playerInterface_");l(this,"manifest_");l(this,"config_");l(this,"deferredCloseSegmentIndex_");l(this,"bufferingScale_");l(this,"currentVariant_");l(this,"currentTextStream_");l(this,"textStreamSequenceId_");l(this,"mediaStates_");l(this,"startupComplete_");l(this,"failureCallbackBackoff_");l(this,"fatalError_");l(this,"destroyer_");l(this,"lastMediaSourceReset_");l(this,"audioPrefetchMap_");l(this,"spatialVideoInfo_");l(this,"playRangeStart_");l(this,"playRangeEnd_");l(this,"lastTextMediaStateBeforeUnload_");l(this,"requestedDependencySegments_");l(this,"liveSeekableRangeEventManager_");l(this,"updateLiveSeekableRangeTimer_");l(this,"boundaryTime_");l(this,"crossBoundarySeekTarget_");l(this,"crossBoundaryResetPending_");l(this,"crossBoundaryTimer_");l(this,"crossBoundaryEventManager_");this.playerInterface_=t,this.manifest_=e,this.config_=null,this.deferredCloseSegmentIndex_=new Map,this.bufferingScale_=1,this.currentVariant_=null,this.currentTextStream_=null,this.textStreamSequenceId_=0,this.mediaStates_=new Map,this.startupComplete_=!1,this.failureCallbackBackoff_=null,this.fatalError_=!1,this.destroyer_=new ci(()=>this.doDestroy_()),this.lastMediaSourceReset_=Date.now()/1e3,this.audioPrefetchMap_=new Map,this.spatialVideoInfo_={projection:null,hfov:null},this.playRangeStart_=0,this.playRangeEnd_=1/0,this.lastTextMediaStateBeforeUnload_=null,this.requestedDependencySegments_=[],this.liveSeekableRangeEventManager_=new ue,this.updateLiveSeekableRangeTimer_=new ae(()=>{if(!this.manifest_||!this.playerInterface_){this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop();return}if(!this.manifest_.presentationTimeline.isDynamic()){this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange(),this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop();return}let i=this.manifest_.presentationTimeline.getSeekRangeStart(),r=this.manifest_.presentationTimeline.getSeekRangeEnd();r-i>1?this.playerInterface_.mediaSourceEngine.setLiveSeekableRange(i,r):this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange()}),this.boundaryTime_=null,this.crossBoundarySeekTarget_=null,this.crossBoundaryResetPending_=!1,this.crossBoundaryTimer_=new ae(()=>{let i=this.playerInterface_.video;i.ended||this.boundaryTime_&&(p.info("Crossing boundary at",this.boundaryTime_),this.crossBoundarySeekTarget_=this.boundaryTime_,this.crossBoundaryResetPending_=!0,i.currentTime=this.boundaryTime_,this.boundaryTime_=null)}),this.crossBoundaryEventManager_=new ue}destroy(){return this.destroyer_.destroy()}async doDestroy_(){var t,i,r,s;(t=this.updateLiveSeekableRangeTimer_)==null||t.stop(),this.updateLiveSeekableRangeTimer_=null,(i=this.liveSeekableRangeEventManager_)==null||i.release(),this.liveSeekableRangeEventManager_=null,(r=this.crossBoundaryTimer_)==null||r.stop(),this.crossBoundaryTimer_=null,(s=this.crossBoundaryEventManager_)==null||s.release(),this.crossBoundaryEventManager_=null;let e=[];for(let n of this.mediaStates_.values())this.cancelUpdate_(n),e.push(this.abortOperations_(n)),n.segmentPrefetch&&(n.segmentPrefetch.clearAll(),n.segmentPrefetch=null);for(let n of this.audioPrefetchMap_.values())n.clearAll();await Promise.all(e),this.mediaStates_.clear(),this.audioPrefetchMap_.clear(),this.playerInterface_=null,this.manifest_=null,this.config_=null,this.boundaryTime_=null}configure(e){this.config_=e;let t={maxAttempts:Math.max(e.retryParameters.maxAttempts,2),baseDelay:e.retryParameters.baseDelay,backoffFactor:e.retryParameters.backoffFactor,fuzzFactor:e.retryParameters.fuzzFactor,timeout:0,stallTimeout:0,connectionTimeout:0},i=!0;this.failureCallbackBackoff_=new wr(t,i);let r=R.ContentType;if(e.disableAudioPrefetch){let s=this.mediaStates_.get(r.AUDIO);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null);for(let n of this.audioPrefetchMap_.keys())this.audioPrefetchMap_.get(n).clearAll(),this.audioPrefetchMap_.delete(n)}if(e.disableTextPrefetch){let s=this.mediaStates_.get(r.TEXT);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null)}if(e.disableVideoPrefetch){let s=this.mediaStates_.get(r.VIDEO);s&&s.segmentPrefetch&&(s.segmentPrefetch.clearAll(),s.segmentPrefetch=null)}for(let s of this.mediaStates_.keys()){let n=this.mediaStates_.get(s);n.segmentPrefetch?(n.segmentPrefetch.resetLimit(e.segmentPrefetchLimit),e.segmentPrefetchLimit>0||(n.segmentPrefetch.clearAll(),n.segmentPrefetch=null)):e.segmentPrefetchLimit>0&&(n.segmentPrefetch=this.createSegmentPrefetch_(n.stream))}e.disableAudioPrefetch||this.updatePrefetchMapForAudio_()}applyPlayRange(e,t){this.manifest_.presentationTimeline.isDynamic()||(this.playRangeStart_=e,this.playRangeEnd_=t)}async start(e){v.assert(this.config_,"StreamingEngine configure() must be called before init()!"),await this.initStreams_(e||new Map),this.destroyer_.ensureNotDestroyed(),p.debug("init: completed initial Stream setup"),this.startupComplete_=!0}getCurrentVariant(){return this.currentVariant_}getCurrentTextStream(){return this.currentTextStream_}async loadNewTextStream_(e){let t=R.ContentType;v.assert(!this.mediaStates_.has(t.TEXT),"Should not call loadNewTextStream_ while streaming text!"),this.textStreamSequenceId_++;let i=this.textStreamSequenceId_;try{await this.playerInterface_.mediaSourceEngine.clear(t.TEXT)}catch(a){this.playerInterface_&&this.playerInterface_.onError(a)}let r=O.getFullType(e.mimeType,e.codecs);if(this.playerInterface_.mediaSourceEngine.reinitText(r,e.external),this.playerInterface_.mediaSourceEngine.getTextDisplayer().isTextVisible()&&this.textStreamSequenceId_==i){let a=this.createMediaState_(e);this.mediaStates_.set(t.TEXT,a),this.scheduleUpdate_(a,0)}}unloadTextStream(){let e=R.ContentType,t=this.mediaStates_.get(e.TEXT);t&&(this.cancelUpdate_(t),this.abortOperations_(t).catch(()=>{}),this.lastTextMediaStateBeforeUnload_=this.mediaStates_.get(e.TEXT),this.mediaStates_.delete(e.TEXT),t.stream&&t.stream.closeSegmentIndex&&t.stream.closeSegmentIndex()),this.currentTextStream_=null}setTrickPlay(e){let t=R.ContentType;this.updateSegmentIteratorReverse_();let i=this.mediaStates_.get(t.VIDEO);if(!i)return;let r=i.stream;if(r)if(p.debug("setTrickPlay",e),e){let s=r.trickModeVideo;if(!s||i.restoreStreamAfterTrickPlay)return;p.debug("Engaging trick mode stream",s),this.switchInternal_(s,!1,0,!1),i.restoreStreamAfterTrickPlay=r}else{let s=i.restoreStreamAfterTrickPlay;if(!s)return;p.debug("Restoring non-trick-mode stream",s),i.restoreStreamAfterTrickPlay=null,this.switchInternal_(s,!0,0,!1)}}switchVariant(e,t=!1,i=0,r=!1,s=!1){this.currentVariant_=e,this.startupComplete_&&(e.video&&this.switchInternal_(e.video,t,i,r,s),e.audio&&this.switchInternal_(e.audio,t,i,r,s))}async switchTextStream(e){if(this.lastTextMediaStateBeforeUnload_=null,this.currentTextStream_=e,!this.startupComplete_)return;let t=R.ContentType;v.assert(e&&e.type==t.TEXT,"Wrong stream type passed to switchTextStream!"),e.segmentIndex||await e.createSegmentIndex(),this.switchInternal_(e,!0,0,!1)}reloadTextStream(){let e=R.ContentType,t=this.mediaStates_.get(e.TEXT);t&&this.switchInternal_(t.stream,!0,0,!0)}handleDeferredCloseSegmentIndexes_(e){for(let[t,i]of this.deferredCloseSegmentIndex_.entries()){let r=t,s=i;r.includes(e.type)&&(s(),this.deferredCloseSegmentIndex_.delete(r))}}switchInternal_(e,t,i,r,s){let n=R.ContentType,a=e.type,o=this.mediaStates_.get(a);if(!o&&e.type==n.TEXT){this.loadNewTextStream_(e);return}if(v.assert(o,"switch: expected mediaState to exist"),!o)return;if(o.restoreStreamAfterTrickPlay&&(p.debug("switch during trick play mode",e),e.trickModeVideo?(o.restoreStreamAfterTrickPlay=e,e=e.trickModeVideo,p.debug("switch found trick play stream",e)):(o.restoreStreamAfterTrickPlay=null,p.debug("switch found no special trick play stream"))),o.stream==e&&!r){let u=Ue.logPrefix_(o);p.debug("switch: Stream "+u+" already active");return}if(this.audioPrefetchMap_.has(e)?o.segmentPrefetch=this.audioPrefetchMap_.get(e):o.segmentPrefetch&&o.segmentPrefetch.switchStream(e),e.type==n.TEXT&&o.stream!=e){let u=O.getFullType(e.mimeType,e.codecs);this.playerInterface_.mediaSourceEngine.reinitText(u,e.external)}if(!this.audioPrefetchMap_.has(o.stream)&&o.stream.closeSegmentIndex)if(o.performingUpdate){let u=Ue.logPrefix_(o);this.deferredCloseSegmentIndex_.getOrInsert(u,o.stream.closeSegmentIndex)}else o.stream.closeSegmentIndex();let c=o.stream.isAudioMuxedInVideo!=e.isAudioMuxedInVideo;o.stream=e,o.segmentIterator=null,o.adaptation=!!s,e.dependencyStream?o.dependencyMediaState=this.createMediaState_(e.dependencyStream):o.dependencyMediaState=null,this.setupCrossBoundaryListeners_();let d=Ue.logPrefix_(o);if(p.debug("switch: switching to Stream "+d),c&&(o.lastInitSegmentReference=null,o.lastAppendWindowStart=null,o.lastAppendWindowEnd=null,e.isAudioMuxedInVideo)){let u=null;o.type===n.VIDEO?u=this.mediaStates_.get(n.AUDIO):o.type===n.AUDIO&&(u=this.mediaStates_.get(n.VIDEO)),u&&(this.abortOperations_(u).catch(()=>{}),u.lastInitSegmentReference=null,u.lastAppendWindowStart=null,u.lastAppendWindowEnd=null,this.forceClearBuffer_(u),this.makeAbortDecision_(u).catch(m=>{this.playerInterface_&&(v.assert(m instanceof h,"Wrong error type!"),this.playerInterface_.onError(m))}))}t?o.clearingBuffer?o.waitingToFlushBuffer=!0:o.performingUpdate?(o.waitingToClearBuffer=!0,o.clearBufferSafeMargin=i,o.waitingToFlushBuffer=!0):(this.cancelUpdate_(o),this.clearBuffer_(o,!0,i).catch(u=>{this.playerInterface_&&(v.assert(u instanceof h,"Wrong error type!"),this.playerInterface_.onError(u))})):!o.performingUpdate&&!o.updateTimer&&this.scheduleUpdate_(o,0),this.makeAbortDecision_(o).catch(u=>{this.playerInterface_&&(v.assert(u instanceof h,"Wrong error type!"),this.playerInterface_.onError(u))})}async makeAbortDecision_(e){if(!e.operation)return;let t=e.stream,i=e.operation;t.segmentIndex||await t.createSegmentIndex();let r=t.dependencyStream;r&&!r.segmentIndex&&await r.createSegmentIndex(),e.operation==i&&e.stream==t&&(v.assert(e.stream.segmentIndex,"Segment index should exist by now!"),this.shouldAbortCurrentRequest_(e)&&(p.info("Aborting current segment request."),e.operation.abort()))}shouldAbortCurrentRequest_(e){v.assert(e.operation,"Abort logic requires an ongoing operation!"),v.assert(e.stream&&e.stream.segmentIndex,"Abort logic requires a segment index");let t=this.playerInterface_.getPresentationTime(),i=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type),r=this.getTimeNeeded_(e,t),s=e.stream.segmentIndex.find(r),n=s==null?null:e.stream.segmentIndex.get(s),a=n?n.getSize():null;if(n&&!a){let _=n.getEndTime()-n.getStartTime(),T=e.stream.bandwidth||this.currentVariant_.bandwidth;a=_*T/8}if(!a)return!0;let o=n.initSegmentReference;o&&(a+=o.getSize()||0);let c=this.playerInterface_.getBandwidthEstimate(),d=a*8/c,u=(i||0)-t,m=this.config_.rebufferingGoal,f=u-m;return d<f||e.operation.getBytesRemaining()>a}seeked(){if(!this.playerInterface_)return;let e=this.playerInterface_.getPresentationTime(),t=this.crossBoundarySeekTarget_!=null&&qt.isFloatEqual(e,this.crossBoundarySeekTarget_,Ue.CROSS_BOUNDARY_SEEK_TOLERANCE_);this.crossBoundarySeekTarget_=null,t||(this.crossBoundaryResetPending_=!1);let i=R.ContentType,r=n=>this.playerInterface_.mediaSourceEngine.isBuffered(n,e),s=!1;for(let n of this.mediaStates_.keys()){let a=this.mediaStates_.get(n),o=Ue.logPrefix_(a);if(!t&&!r(n)){if(this.lastMediaSourceReset_=0,a.segmentPrefetch&&a.segmentPrefetch.resetPosition(),a.type===i.AUDIO)for(let u of this.audioPrefetchMap_.values())u.resetPosition();a.segmentIterator=null,(this.playerInterface_.mediaSourceEngine.bufferEnd(n)!=null||a.performingUpdate)&&(this.forceClearBuffer_(a),s=!0),a.operation&&(a.operation.abort(),p.debug(o,"Aborting operation due to seek"),a.operation=null),n===i.TEXT&&this.playerInterface_.mediaSourceEngine.resetCaptionParser(),a.seeked=!0}t&&!a.clearingBuffer&&!a.performingUpdate&&!a.updateTimer&&this.scheduleUpdate_(a,0)}this.shouldUseCrossBoundaryLogic_()&&this.forwardTimeForCrossBoundary_(),s||p.debug("(all): seeked: buffered seek: presentationTime="+e)}forceClearBuffer_(e){let t=Ue.logPrefix_(e);if(e.clearingBuffer){p.debug(t,"clear: already clearing the buffer");return}if(e.waitingToClearBuffer){p.debug(t,"clear: already waiting");return}if(e.performingUpdate){p.debug(t,"clear: currently updating"),e.waitingToClearBuffer=!0,e.clearBufferSafeMargin=0;return}let i=e.type;if(this.playerInterface_.mediaSourceEngine.bufferStart(i)==null){p.debug(t,"clear: nothing buffered"),e.updateTimer==null&&this.scheduleUpdate_(e,0);return}p.debug(t,"clear: handling right now"),this.cancelUpdate_(e),this.clearBuffer_(e,!1,0).catch(r=>{this.playerInterface_&&(v.assert(r instanceof h,"Wrong error type!"),this.playerInterface_.onError(r))})}async initStreams_(e){if(v.assert(this.config_,"StreamingEngine configure() must be called before init()!"),!this.currentVariant_)throw p.error("init: no Streams chosen"),new h(h.Severity.CRITICAL,h.Category.STREAMING,h.Code.STREAMING_ENGINE_STARTUP_INVALID_STATE);let t=this.getStreamsByType_(!0);await this.playerInterface_.mediaSourceEngine.init(t,this.manifest_.sequenceMode,this.manifest_.type,this.manifest_.ignoreManifestTimestampsInSegmentsMode),this.destroyer_.ensureNotDestroyed(),this.updateDuration().catch(()=>{});for(let r of t.keys()){let s=t.get(r);if(!this.mediaStates_.has(r)){let n=this.createMediaState_(s),a=e.get(s.id);a&&(a.replaceFetchDispatcher((o,c,d)=>this.dispatchFetch_(o,c,d)),n.segmentPrefetch=a),this.mediaStates_.set(r,n),this.scheduleUpdate_(n,0)}}this.setupCrossBoundaryListeners_()}createMediaState_(e){let t={stream:e,type:e.type,segmentIterator:null,segmentPrefetch:this.createSegmentPrefetch_(e),lastSegmentReference:null,lastInitSegmentReference:null,lastTimestampOffset:null,lastAppendWindowStart:null,lastAppendWindowEnd:null,lastCodecs:null,lastMimeType:null,restoreStreamAfterTrickPlay:null,endOfStream:!1,performingUpdate:!1,updateTimer:null,waitingToClearBuffer:!1,clearBufferSafeMargin:0,waitingToFlushBuffer:!1,clearingBuffer:!1,seeked:!0,adaptation:!1,recovering:!1,hasError:!1,operation:null,dependencyMediaState:null};return e.dependencyStream&&(t.dependencyMediaState=this.createMediaState_(e.dependencyStream)),t}createSegmentPrefetch_(e){let t=R.ContentType;if(this.manifest_.type==me.MSF||e.type===t.VIDEO&&this.config_.disableVideoPrefetch||e.type===t.AUDIO&&this.config_.disableAudioPrefetch)return null;let i=O.CEA608_CLOSED_CAPTION_MIMETYPE,r=O.CEA708_CLOSED_CAPTION_MIMETYPE;if(e.type===t.TEXT&&(e.mimeType==i||e.mimeType==r)||e.type===t.TEXT&&this.config_.disableTextPrefetch)return null;if(this.audioPrefetchMap_.has(e))return this.audioPrefetchMap_.get(e);let s=e.type,n=this.mediaStates_.get(s),a=n&&n.segmentPrefetch;if(a&&e===a.getStream())return a;if(this.config_.segmentPrefetchLimit>0){let o=this.playerInterface_.getPlaybackRate()<0;return new Xr(this.config_.segmentPrefetchLimit,e,(c,d,u)=>this.dispatchFetch_(c,d,u),o,this.playerInterface_.shouldPrefetchNextSegment,this.playerInterface_.getPlaybackRate)}return null}updatePrefetchMapForAudio_(){let e=this.config_.segmentPrefetchLimit,t=this.config_.prefetchAudioLanguages;for(let i of this.manifest_.variants){if(!i.audio)continue;if(this.audioPrefetchMap_.has(i.audio)){let s=this.audioPrefetchMap_.get(i.audio);if(s.resetLimit(e),!(e>0)||!t.some(n=>Se.areLanguageCompatible(i.audio.language,n))){let n=i.audio.type,a=this.mediaStates_.get(n),o=a&&a.segmentPrefetch;s!==o&&s.clearAll(),this.audioPrefetchMap_.delete(i.audio)}continue}if(e<=0||!t.some(s=>Se.areLanguageCompatible(i.audio.language,s)))continue;let r=this.createSegmentPrefetch_(i.audio);r&&(i.audio.segmentIndex||i.audio.createSegmentIndex(),this.audioPrefetchMap_.set(i.audio,r))}}async updateDuration(){let e=qe.isInfiniteLiveStreamDurationSupported(),t=this.manifest_.presentationTimeline.getDuration();this.liveSeekableRangeEventManager_.removeAll(),t<1/0?(e&&(this.updateLiveSeekableRangeTimer_&&this.updateLiveSeekableRangeTimer_.stop(),this.playerInterface_.mediaSourceEngine.clearLiveSeekableRange()),await this.playerInterface_.mediaSourceEngine.setDuration(t)):e?(await this.playerInterface_.mediaSourceEngine.setDuration(1/0),this.updateLiveSeekableRangeTimer_&&(this.updateLiveSeekableRangeTimer_.tickNow(),this.liveSeekableRangeEventManager_.listenOnce(this.playerInterface_.video,"timeupdate",()=>{this.updateLiveSeekableRangeTimer_.tickNow().tickEvery(.5)}))):this.playerInterface_.mediaSourceEngine.setDuration(Math.pow(2,32))}async onUpdate_(e){this.destroyer_.ensureNotDestroyed();let t=R.ContentType,i=Ue.logPrefix_(e);if(v.assert(!e.performingUpdate&&e.updateTimer!=null,i+" unexpected call to onUpdate_()"),e.performingUpdate||e.updateTimer==null||(v.assert(!e.clearingBuffer,i+" onUpdate_() should not be called when clearing the buffer"),e.clearingBuffer))return;if(e.updateTimer=null,e.waitingToClearBuffer){p.debug(i,"skipping update and clearing the buffer"),await this.clearBuffer_(e,e.waitingToFlushBuffer,e.clearBufferSafeMargin);return}if(this.handleDeferredCloseSegmentIndexes_(e),!e.stream.segmentIndex){let a=e.stream,o=e.stream.codecs,c=e.stream.mimeType;try{await e.stream.createSegmentIndex()}catch(d){await this.handleStreamingError_(e,d);return}if(e.type===t.TEXT&&(o!=e.stream.codecs||c!=e.stream.mimeType)){let d=O.getFullType(e.stream.mimeType,e.stream.codecs);this.playerInterface_.mediaSourceEngine.reinitText(d,e.stream.external)}if(a!=e.stream){a.closeSegmentIndex&&(v.assert(!e.stream.segmentIndex,"mediaState.stream should not have segmentIndex yet."),a.closeSegmentIndex()),!e.performingUpdate&&!e.updateTimer&&this.scheduleUpdate_(e,0);return}}if(e.dependencyMediaState&&!e.dependencyMediaState.stream.segmentIndex)try{await e.dependencyMediaState.stream.createSegmentIndex()}catch(a){p.warning("Could not create segment index for dependency",a)}try{let a=this.update_(e);a!=null&&(this.scheduleUpdate_(e,a),e.hasError=!1)}catch(a){await this.handleStreamingError_(e,a);return}if(e.type===t.TEXT)return;let r=[];e.stream&&!e.stream.isAudioMuxedInVideo&&r.push(e);let s=e.type===t.AUDIO?t.VIDEO:t.AUDIO,n=this.mediaStates_.get(s);if(n&&n.stream&&!n.stream.isAudioMuxedInVideo&&r.push(n),this.startupComplete_&&r.every(a=>a.endOfStream)){p.v1(i,"calling endOfStream()..."),await this.playerInterface_.mediaSourceEngine.endOfStream(),this.destroyer_.ensureNotDestroyed();let a=this.playerInterface_.mediaSourceEngine.getDuration();a!=0&&a<this.manifest_.presentationTimeline.getDuration()&&this.manifest_.presentationTimeline.setDuration(a)}}update_(e){v.assert(this.manifest_,"manifest_ should not be null"),v.assert(this.config_,"config_ should not be null");let t=R.ContentType;if(Ue.isEmbeddedText_(e))return this.playerInterface_.mediaSourceEngine.setSelectedClosedCaptionId(e.stream.originalId||""),null;if(e.type==t.TEXT&&this.playerInterface_.mediaSourceEngine.clearSelectedClosedCaptionId(),e.stream.isAudioMuxedInVideo&&e.type==t.AUDIO)return null;if(e.type!=t.TEXT&&this.playerInterface_.mediaSourceEngine.closed())return this.resetMediaSource(!0),null;let i=this.config_.updateIntervalSeconds/Math.max(1,Math.abs(this.playerInterface_.getPlaybackRate()));if(!this.playerInterface_.mediaSourceEngine.isStreamingAllowed()&&e.type!=t.TEXT)return i/2;let r=Ue.logPrefix_(e),s=this.playerInterface_.getPresentationTime(),n=this.playerInterface_.getPlaybackRate()<0;if(e.type===t.AUDIO)for(let k of this.audioPrefetchMap_.keys()){let D=this.audioPrefetchMap_.get(k);D.evict(s,!0),D.prefetchSegmentsByTime(s)}let a=this.getTimeNeeded_(e,s);p.v2(r,"timeNeeded="+a);let o=n?this.playerInterface_.mediaSourceEngine.bufferedBehindOf(e.type,s):this.playerInterface_.mediaSourceEngine.bufferedAheadOf(e.type,s);if(e.type==t.VIDEO&&!this.mediaStates_.has(t.AUDIO)&&this.playerInterface_.mediaSourceEngine.hasSourceBufferFor(t.AUDIO)){let k=n?this.playerInterface_.mediaSourceEngine.bufferedBehindOf(t.AUDIO,s):this.playerInterface_.mediaSourceEngine.bufferedAheadOf(t.AUDIO,s);o=Math.min(o,k)}p.v2(r,"update_:","presentationTime="+s,"bufferedAhead="+o);let c=Math.max(this.config_.rebufferingGoal,this.config_.bufferingGoal),d=Math.max(1,c*this.bufferingScale_),u=this.manifest_.presentationTimeline.isDynamic()?1/0:this.manifest_.presentationTimeline.getDuration()-a,m=1e-6,f=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type);if(!n&&u<m&&f){if(p.debug(r,"buffered to end of presentation"),e.endOfStream=!0,e.type==t.VIDEO){let k=this.mediaStates_.get(t.TEXT);k&&Ue.isEmbeddedText_(k)&&(k.endOfStream=!0);let D=this.mediaStates_.get(t.AUDIO);D&&D.stream.isAudioMuxedInVideo&&(D.endOfStream=!0)}return null}if(e.endOfStream=!1,n){let k=this.manifest_.presentationTimeline.getSeekRangeStart();if(f!=null&&a<=k+m)return p.debug(r,"buffered to start of presentation"),null}if(o>0&&this.config_.stopFetchingOnPause&&this.playerInterface_.video.paused)return p.v2(r,"video paused"),i/2;if(o>=d)return p.v2(r,"buffering goal met"),i/2;let g=!e.segmentIterator,_=this.getSegmentReferenceNeeded_(e,s,f);if(!_){if(!this.manifest_.presentationTimeline.isDynamic()&&u<m){if(p.info(r,"Close to end with no buffer and no segment reference.","Marking as end of stream."),e.endOfStream=!0,e.type==t.VIDEO){let V=this.mediaStates_.get(t.TEXT);V&&Ue.isEmbeddedText_(V)&&(V.endOfStream=!0)}return null}let k=1/0,D=e.lastSegmentReference;return D&&(k=D.endTime-D.startTime),Math.min(k/2,i)}let T=e.lastInitSegmentReference,b=_.initSegmentReference;T&&b&&Tt.equal(b,T)&&(T.boundaryEnd=b.boundaryEnd);let S=!1;g&&e.adaptation&&(S=!0,e.adaptation=!1);let E=1/0,w=-1/0;for(let k of this.mediaStates_.values()){if(Ue.isEmbeddedText_(k)||k.stream.isAudioMuxedInVideo||k.segmentIterator&&!k.segmentIterator.current())continue;let D=this.getTimeNeeded_(k,s);E=Math.min(E,D),w=Math.max(w,D)}let A=this.manifest_.presentationTimeline.getMaxSegmentDuration(),x=Math.max(A*Ue.MAX_RUN_AHEAD_SEGMENTS_,Ue.MIN_RUN_AHEAD_SECONDS_);return(n?w-a:a-E)>=x?(p.v2(r,"waiting for other streams to buffer"),i):(e.segmentPrefetch&&e.segmentIterator&&!this.audioPrefetchMap_.has(e.stream)&&(e.segmentPrefetch.evict(_.startTime+.001),e.segmentPrefetch.prefetchSegmentsByTime(_.startTime).catch(()=>{})),this.shouldUseCrossBoundaryLogic_()&&this.discardReferenceByBoundary_(e,_)||(this.fetchAndAppend_(e,s,_,S).catch(()=>{}),e.dependencyMediaState&&this.fetchAndAppendDependency_(e.dependencyMediaState,s,d)),null)}getTimeNeeded_(e,t){return e.lastSegmentReference?this.playerInterface_.getPlaybackRate()<0?e.lastSegmentReference.startTime:e.lastSegmentReference.endTime:t}getSegmentReferenceNeeded_(e,t,i){var s,n;let r=Ue.logPrefix_(e);if(v.assert(e.stream.segmentIndex,"segment index should have been generated already"),e.segmentIterator){let a=e.segmentIterator.current();if(a&&e.lastSegmentReference){let o=e.lastSegmentReference.startTime,c=e.lastSegmentReference.endTime;qt.isFloatEqual(o,a.startTime,.002)&&qt.isFloatEqual(c,a.endTime,.002)&&(a=e.segmentIterator.next().value)}return a}else if(e.lastSegmentReference||i){let a=this.playerInterface_.getPlaybackRate()<0,o;if(a){let d=this.playerInterface_.mediaSourceEngine.bufferStart(e.type),u=e.lastSegmentReference?e.lastSegmentReference.startTime:null,m=d;u!=null&&(m==null||u<m)&&(m=u),o=m!=null?m-.001:i}else o=e.lastSegmentReference?e.lastSegmentReference.endTime:i;v.assert(o!=null,"Should have a time to search"),p.v1(r,"looking up segment from new stream endTime:",o),e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(o,!1,a));let c=e.segmentIterator&&e.segmentIterator.next().value;return c==null&&p.warning(r,"cannot find segment","endTime:",o),c}else{let a=this.manifest_.sequenceMode||this.shouldUseCrossBoundaryLogic_()||this.manifest_.type===me.MSF?0:this.config_.inaccurateManifestTolerance,o=Math.max(t-a,0),c=this.playerInterface_.mediaSourceEngine.getDuration(),d=Ue.LOOKUP_TIME_DURATION_THRESHOLD_;Math.abs(o-c)<d&&(a=d,o=Math.max(t-a,0)),p.v1(r,"looking up segment","lookupTime:",o,"presentationTime:",t);let u=this.playerInterface_.getPlaybackRate()<0,m=null;for(a&&(e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(o,!1,u)),m=e.segmentIterator&&e.segmentIterator.next().value),m||(e.stream.segmentIndex&&(e.segmentIterator=e.stream.segmentIndex.getIteratorForTime(t,!1,u)),m=e.segmentIterator&&e.segmentIterator.next().value);(m==null?void 0:m.getStatus())===Te.Status.MISSING;)m=(n=(s=e.segmentIterator)==null?void 0:s.next().value)!=null?n:null;return m==null&&p.warning(r,"cannot find segment","lookupTime:",o,"presentationTime:",t),m}}async fetchAndAppend_(e,t,i,r){let s=R.ContentType,n=Ue.logPrefix_(e);p.v1(n,"fetchAndAppend_:","presentationTime="+t,"reference.startTime="+i.startTime,"reference.endTime="+i.endTime);let a=e.stream,o=e.segmentIterator;e.performingUpdate=!0;try{if(i.getStatus()==Te.Status.MISSING)throw new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.SEGMENT_MISSING);if(await this.initSourceBuffer_(e,i,r),this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;p.v2(n,"fetching segment");let c=a.mimeType=="video/mp4"||a.mimeType=="audio/mp4",d=window.ReadableStream,u=this.config_.lowLatencyMode&&this.manifest_.isLowLatency,m={mediaTimestamp:null};if(u&&d&&c&&(this.manifest_.type!=me.HLS||i.hasByterangeOptimization())){let T=new Uint8Array(0),b=!1,S=!1,E,w=async x=>{if(!b&&(S=!0,this.destroyer_.ensureNotDestroyed(),!this.fatalError_))try{T=ne.concat(T,x);let M=!1,C=0;if(new F().box("mdat",k=>{C=k.size+k.start,M=!0}).parse(T,!1,!0),M){let k=T.subarray(0,C);T=T.subarray(C);let D=await this.append_(e,t,a,i,k,!0,r);m.mediaTimestamp==null&&(m=D),e.segmentPrefetch&&e.segmentIterator&&e.segmentPrefetch.prefetchSegmentsByTime(i.startTime,!0)}}catch(M){E=M}},A=await this.fetch_(e,i,w);if(E)throw E;if(!S){if(b=!0,this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;if(e.waitingToClearBuffer){p.info(n,"waitingToClearBuffer, skip append"),e.performingUpdate=!1,this.scheduleUpdate_(e,0);return}m=await this.append_(e,t,a,i,A,!1,r)}e.segmentPrefetch&&e.segmentIterator&&e.segmentPrefetch.prefetchSegmentsByTime(i.startTime,!0)}else{u&&!d&&p.warning("Low latency streaming mode is enabled, but ReadableStream is not supported by the browser.");let b=await this.fetch_(e,i);if(this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;if(this.destroyer_.ensureNotDestroyed(),e.waitingToClearBuffer){p.info(n,"waitingToClearBuffer, skip append"),e.performingUpdate=!1,this.scheduleUpdate_(e,0);return}m=await this.append_(e,t,a,i,b,!1,r)}if(this.destroyer_.ensureNotDestroyed(),this.fatalError_)return;e.lastSegmentReference=i;let f=o.next().value;p.v2(n,"advancing to next segment",f),e.performingUpdate=!1,e.recovering=!1;let _=this.playerInterface_.mediaSourceEngine.getBufferedInfo()[e.type];if(p.v1(n,"finished fetch and append",JSON.stringify(_)),!e.waitingToClearBuffer){let T=null;e.type===s.VIDEO?T=this.mediaStates_.get(s.AUDIO):e.type===s.AUDIO&&(T=this.mediaStates_.get(s.VIDEO)),T&&T.type==s.AUDIO?this.playerInterface_.onSegmentAppended(i,e.stream,T.stream.isAudioMuxedInVideo,!1,m.mediaTimestamp):this.playerInterface_.onSegmentAppended(i,e.stream,e.stream.codecs.includes(","),!1,m.mediaTimestamp)}this.cancelUpdate_(e),this.scheduleUpdate_(e,0)}catch(c){if(this.destroyer_.ensureNotDestroyed(c),this.fatalError_)return;v.assert(c instanceof h,"Should only receive a Shaka error"),e.performingUpdate=!1,c.code==h.Code.OPERATION_ABORTED?(e.performingUpdate=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0)):e.type==s.TEXT&&this.config_.ignoreTextStreamFailures?(c.code==h.Code.BAD_HTTP_STATUS?p.warning(n,"Text stream failed to download. Proceeding without it."):p.warning(n,"Text stream failed to parse. Proceeding without it."),this.mediaStates_.delete(s.TEXT)):c.code==h.Code.QUOTA_EXCEEDED_ERROR?await this.handleQuotaExceeded_(e,c):(p.error(n,"failed fetch and append: code="+c.code),e.hasError=!0,c.category==h.Category.NETWORK&&e.segmentPrefetch&&e.segmentPrefetch.removeReference(i),c.severity=h.Severity.CRITICAL,await this.handleStreamingError_(e,c))}}async fetchAndAppendDependency_(e,t,i){let r=R.ContentType,s=e.stream,n=s.segmentIndex,a=n&&n.getIteratorForTime(t),o=a&&a.next().value;for(;o&&this.requestedDependencySegments_.includes(o.startTime);)o=a&&a.next().value;if(o){let c=o.initSegmentReference;if(c&&!Tt.equal(c,e.lastInitSegmentReference)){e.lastInitSegmentReference=c;try{let d=await this.fetch_(e,c);if(!this.playerInterface_)return;this.playerInterface_.mediaSourceEngine.appendDependency(d,0,s),this.requestedDependencySegments_=[]}catch(d){throw e.lastInitSegmentReference=null,d}}if(!e.lastSegmentReference||e.lastSegmentReference!=o){e.lastSegmentReference=o;try{let m=await this.fetch_(e,o);if(!this.playerInterface_)return;this.playerInterface_.mediaSourceEngine.appendDependency(m,0,s),this.requestedDependencySegments_.push(o.startTime)}catch(m){throw e.lastSegmentReference=null,m}if(!this.playerInterface_)return;if(!e.waitingToClearBuffer){let m=null;e.type===r.VIDEO?m=this.mediaStates_.get(r.AUDIO):e.type===r.AUDIO&&(m=this.mediaStates_.get(r.VIDEO)),m&&m.type==r.AUDIO?this.playerInterface_.onSegmentAppended(o,e.stream,m.stream.isAudioMuxedInVideo,!0,null):this.playerInterface_.onSegmentAppended(o,e.stream,e.stream.codecs.includes(","),!0,null)}let d=Math.max(0,...this.requestedDependencySegments_);this.playerInterface_.getPresentationTime()+i>d&&await this.fetchAndAppendDependency_(e,o.startTime,i)}}}retry(e){if(this.destroyer_.destroyed())return p.error("Unable to retry after StreamingEngine is destroyed!"),!1;if(this.fatalError_)return p.error("Unable to retry after StreamingEngine encountered a fatal error!"),!1;for(let t of this.mediaStates_.values()){let i=Ue.logPrefix_(t);t.hasError&&!t.performingUpdate&&!t.updateTimer&&(p.info(i,"Retrying after failure..."),t.hasError=!1,this.scheduleUpdate_(t,e))}return!0}async handleQuotaExceeded_(e,t){let i=Ue.logPrefix_(e),r=!1;for(let s of this.mediaStates_.values())if(s!=e&&s.recovering){r=!0;break}if(r)p.debug(i,"MediaSource threw QuotaExceededError:","waiting for another stream to recover...");else{if(this.config_.avoidEvictionOnQuotaExceededError){let o=this.getDisabledTime_(t);if(o&&p.debug(i,"Disabling stream due to quota",t),this.playerInterface_.disableStream(e.stream,o))return;this.scheduleUpdate_(e,4);return}let s=Math.round(100*this.bufferingScale_);if(s>20)this.bufferingScale_-=.2;else if(s>4)this.bufferingScale_-=.04;else{let o=this.getDisabledTime_(t);if(o&&p.debug(i,"Disabling stream due to quota",t),this.playerInterface_.disableStream(e.stream,o)){this.bufferingScale_=1;let d=this.playerInterface_.getPresentationTime();await this.evict_(e,d)}else p.error(i,"MediaSource threw QuotaExceededError too many times"),e.hasError=!0,this.fatalError_=!0,this.playerInterface_.onError(t);return}let n=Math.round(100*this.bufferingScale_);p.warning(i,"MediaSource threw QuotaExceededError:","reducing buffering goals by "+(100-n)+"%"),e.recovering=!0;let a=this.playerInterface_.getPresentationTime();await this.evict_(e,a)}this.scheduleUpdate_(e,4)}async initSourceBuffer_(e,t,i){let r=R.ContentType,s=Ue.logPrefix_(e),n=e.lastSegmentReference==null,a=[],o=Math.max(0,Math.max(t.appendWindowStart,this.playRangeStart_)-Ue.APPEND_WINDOW_START_FUDGE_),c=Math.min(t.appendWindowEnd,this.playRangeEnd_)+Ue.APPEND_WINDOW_END_FUDGE_;if(this.config_.clampAppendWindowToDuration){let _=this.manifest_.presentationTimeline.getDuration();_<1/0&&(c=Math.min(c,_))}v.assert(t.startTime<=c,s+" segment should start before append window end");let d=t.codecs||e.stream.codecs,u=O.getCodecBase(d),m=O.getBasicType(t.mimeType||e.stream.mimeType),f=t.timestampOffset;if(f!=e.lastTimestampOffset||o!=e.lastAppendWindowStart||c!=e.lastAppendWindowEnd||u!=e.lastCodecs||m!=e.lastMimeType){if(p.v1(s,"setting timestamp offset to "+f),p.v1(s,"setting append window start to "+o),p.v1(s,"setting append window end to "+c),e.lastCodecs&&e.lastMimeType&&this.playerInterface_.mediaSourceEngine.isResetMediaSourceNecessary(e.type,m,d,this.getStreamsByType_())){let T=null;e.type===r.VIDEO?T=this.mediaStates_.get(r.AUDIO):e.type===r.AUDIO&&(T=this.mediaStates_.get(r.VIDEO)),T&&(await this.abortOperations_(T).catch(()=>{}),T.lastInitSegmentReference=null,T.lastAppendWindowStart=null,T.lastAppendWindowEnd=null,this.forceClearBuffer_(T))}await this.setProperties_(e,f,o,c,t,u,m)}if(!Tt.equal(t.initSegmentReference,e.lastInitSegmentReference)&&(e.lastInitSegmentReference=t.initSegmentReference,t.isIndependent()&&t.initSegmentReference)){p.v1(s,"fetching init segment");let _=this.fetch_(e,t.initSegmentReference),T=async()=>{try{let S=await _;this.destroyer_.ensureNotDestroyed();let E=null,w=new Map,A={projection:null,hfov:null};if(e.stream){let D=e.stream.videoLayout;if(D){let V=D.split("/");V.includes("PROJ-RECT")?A.projection="rect":V.includes("PROJ-EQUI")?A.projection="equi":V.includes("PROJ-HEQU")?A.projection="hequ":V.includes("PROJ-PRIM")?A.projection="prim":V.includes("PROJ-AIV")&&(A.projection="aiv")}}let x=new F;x.boxes(["moov","trak","mdia"],F.children).fullBox("mdhd",D=>{v.assert(D.version!=null,"MDHD is a full box and should have a valid version."),E=pe.parseMDHD(D.reader,D.version).timescale}).fullBox("hdlr",D=>{switch(v.assert(D.version!=null,"HDLR is a full box and should have a valid version."),pe.parseHDLR(D.reader).handlerType){case"soun":w.set(r.AUDIO,E);break;case"vide":w.set(r.VIDEO,E);break}E=null}),e.type===r.VIDEO&&!A.projection&&x.boxes(["minf","stbl"],F.children).fullBox("stsd",F.sampleDescription).boxes([...F.AVC_HEVC_VVC_DV,"encv"],F.visualSampleEntry).boxes(["vexu","proj"],F.children).fullBox("prji",D=>{let V=pe.parsePRJI(D.reader);A.projection=V.projection}).box("hfov",D=>{let V=pe.parseHFOV(D.reader);A.hfov=V.hfov}),x.parse(S,!0,!0),e.type===r.VIDEO&&this.updateSpatialVideoInfo_(A),w.has(e.type)?t.initSegmentReference.timescale=w.get(e.type):E!=null&&(t.initSegmentReference.timescale=E);let M=e.stream.segmentIndex,C;M instanceof Mi&&(C=M.getTimelineForTime(t.startTime)),p.v1(s,"appending init segment");let k=e.stream.closedCaptions&&e.stream.closedCaptions.size>0;await this.playerInterface_.beforeAppendSegment(e.type,S),await this.playerInterface_.mediaSourceEngine.appendBuffer(e.type,S,null,e.stream,k,e.seeked,i,!1,!1,C)}catch(S){throw e.lastInitSegmentReference=null,S}},b=t.startTime;if(n){let S=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type);S!=null&&(b=S)}this.playerInterface_.onInitSegmentAppended(b,t.initSegmentReference),a.push(T())}let g=e.lastSegmentReference?e.lastSegmentReference.discontinuitySequence:-1;t.discontinuitySequence!=g&&a.push(this.playerInterface_.mediaSourceEngine.resync(e.type,t.startTime)),await Promise.all(a)}async setProperties_(e,t,i,r,s,n,a){let o=R.ContentType,c=this.getStreamsByType_();try{e.lastAppendWindowStart=i,e.lastAppendWindowEnd=r,n&&(e.lastCodecs=n),a&&(e.lastMimeType=a),e.lastTimestampOffset=t;let d=this.manifest_.sequenceMode||this.manifest_.type==me.HLS,u=null;e.type===o.VIDEO?u=this.mediaStates_.get(o.AUDIO):e.type===o.AUDIO&&(u=this.mediaStates_.get(o.VIDEO)),u&&u.stream&&u.stream.isAudioMuxedInVideo&&await this.playerInterface_.mediaSourceEngine.setStreamProperties(u.type,t,i,r,d,u.stream.mimeType,u.stream.codecs,c),await this.playerInterface_.mediaSourceEngine.setStreamProperties(e.type,t,i,r,d,s.mimeType||e.stream.mimeType,s.codecs||e.stream.codecs,c)}catch(d){throw e.lastAppendWindowStart=null,e.lastAppendWindowEnd=null,e.lastCodecs=null,e.lastMimeType=null,e.lastTimestampOffset=null,d}}async append_(e,t,i,r,s,n=!1,a=!1){let o=Ue.logPrefix_(e),c=i.closedCaptions&&i.closedCaptions.size>0;if(this.config_.shouldFixTimestampOffset){let m=i.mimeType=="video/mp4"||i.mimeType=="audio/mp4",f=null;r.initSegmentReference&&(f=r.initSegmentReference.timescale),m&&f&&i.type===R.ContentType.VIDEO&&this.manifest_.type==me.DASH&&new F().boxes(F.FRAGMENT_PATH,F.children).fullBox("tfdt",async _=>{v.assert(_.version!=null,"TFDT is a full box and should have a valid version.");let b=pe.parseTFDTInaccurate(_.reader,_.version).baseMediaDecodeTime;if(!b)return;v.assert(typeof f=="number","Should be an number!");let S=-b/f;if((Number(e.lastTimestampOffset)||0)<S){let w=e.lastAppendWindowStart,A=e.lastAppendWindowEnd;v.assert(typeof w=="number","Should be an number!"),v.assert(typeof A=="number","Should be an number!"),await this.setProperties_(e,S,w,A,r)}}).parse(s,!1,n)}await this.evict_(e,t),this.destroyer_.ensureNotDestroyed();let d=e.seeked;e.seeked=!1,await this.playerInterface_.beforeAppendSegment(e.type,s);let u=await this.playerInterface_.mediaSourceEngine.appendBuffer(e.type,s,r,i,c,d,a,n);return this.destroyer_.ensureNotDestroyed(),p.v2(o,"appended media segment"),u}async evict_(e,t){this.lastTextMediaStateBeforeUnload_==e&&(this.lastTextMediaStateBeforeUnload_=null);let i=e.stream.segmentIndex,r;i instanceof Mi&&(i.evict(this.manifest_.presentationTimeline.getSegmentAvailabilityStart()),r=[],i.forEachIndex(g=>{r.push(g.continuityTimeline())}));let s=Ue.logPrefix_(e);p.v2(s,"checking buffer length");let n=Math.max(this.config_.bufferBehind*this.bufferingScale_,this.manifest_.presentationTimeline.getMaxSegmentDuration()),a=this.playerInterface_.mediaSourceEngine.bufferStart(e.type);if(a==null){p.v2(s,"buffer behind okay because nothing buffered:","presentationTime="+t,"bufferBehind="+n);return}let o=t-a,c=this.config_.evictionGoal,d=this.manifest_.presentationTimeline.getSeekRangeStart(),m=this.manifest_.presentationTimeline.getSeekRangeEnd()-d,f=o-n;if(m>c&&(f=Math.max(o-n,d-c-a)),f<=c){p.v2(s,"buffer behind okay:","presentationTime="+t,"bufferedBehind="+o,"bufferBehind="+n,"evictionGoal="+c,"underflow="+Math.abs(f));return}p.v1(s,"buffer behind too large:","presentationTime="+t,"bufferedBehind="+o,"bufferBehind="+n,"evictionGoal="+c,"overflow="+f),await this.playerInterface_.mediaSourceEngine.remove(e.type,a,a+f,r),this.destroyer_.ensureNotDestroyed(),p.v1(s,"evicted "+f+" seconds"),this.lastTextMediaStateBeforeUnload_&&(await this.evict_(this.lastTextMediaStateBeforeUnload_,t),this.destroyer_.ensureNotDestroyed())}static isEmbeddedText_(e){let t=O.CEA608_CLOSED_CAPTION_MIMETYPE,i=O.CEA708_CLOSED_CAPTION_MIMETYPE;return e&&e.type==R.ContentType.TEXT&&(e.stream.mimeType==t||e.stream.mimeType==i)}async fetch_(e,t,i){let r=t.getSegmentData();if(r)return r;let s=null;e.segmentPrefetch&&(s=e.segmentPrefetch.getPrefetchedSegment(t,i)),s||(s=this.dispatchFetch_(t,e.stream,i));let n=0;e.segmentIterator&&(n=e.segmentIterator.currentPosition()),e.operation=s;let a=await s.promise;e.operation=null;let o=a.data;return t.aesKey&&(o=await _t.aesDecrypt(o,t.aesKey,n)),o}dispatchFetch_(e,t,i,r=!1){return v.assert(this.playerInterface_.netEngine,"Must have net engine"),Ue.dispatchFetch(e,t,i||null,this.config_.retryParameters,this.playerInterface_.netEngine)}static dispatchFetch(e,t,i,r,s,n=!1){let a=K.RequestType.SEGMENT,o=e instanceof Te?e:void 0,c=o?K.AdvancedRequestType.MEDIA_SEGMENT:K.AdvancedRequestType.INIT_SEGMENT,d=ct.createSegmentRequest(e.getUris(),e.startByte,e.endByte,r,i);return d.contentType=t.type,p.v2("fetching: reference=",e),s.request(a,d,{type:c,stream:t,segment:o,isPreload:n})}async clearBuffer_(e,t,i){let r=Ue.logPrefix_(e);if(v.assert(!e.performingUpdate&&e.updateTimer==null,r+" unexpected call to clearBuffer_()"),e.waitingToClearBuffer=!1,e.waitingToFlushBuffer=!1,e.clearBufferSafeMargin=0,e.clearingBuffer=!0,e.lastSegmentReference=null,e.segmentIterator=null,p.debug(r,"clearing buffer"),e.segmentPrefetch&&!this.audioPrefetchMap_.has(e.stream)&&e.segmentPrefetch.clearAll(!1),i){let s=this.playerInterface_.getPresentationTime(),n=this.playerInterface_.mediaSourceEngine.getDuration();await this.playerInterface_.mediaSourceEngine.remove(e.type,s+i,n)}else await this.playerInterface_.mediaSourceEngine.clear(e.type),this.destroyer_.ensureNotDestroyed(),t&&await this.playerInterface_.mediaSourceEngine.flush(e.type);this.destroyer_.ensureNotDestroyed(),p.debug(r,"cleared buffer"),e.clearingBuffer=!1,e.endOfStream=!1,!e.performingUpdate&&!e.updateTimer&&this.scheduleUpdate_(e,0)}scheduleUpdate_(e,t){let i=Ue.logPrefix_(e),r=e.type;if(r==R.ContentType.TEXT&&!this.mediaStates_.has(r)){p.v1(i,"Text stream is unloaded. No update is needed.");return}p.v2(i,"updating in "+t+" seconds"),v.assert(e.updateTimer==null,i+" did not expect update to be scheduled"),e.updateTimer=new ae(async()=>{try{await this.onUpdate_(e)}catch(s){this.playerInterface_&&this.playerInterface_.onError(s)}}).tickAfter(t)}cancelUpdate_(e){e.updateTimer!=null&&(e.updateTimer.stop(),e.updateTimer=null)}async abortOperations_(e){e.operation&&await e.operation.abort()}async handleStreamingError_(e,t){let i=Ue.logPrefix_(e);if(t.code==h.Code.STREAMING_NOT_ALLOWED){e.performingUpdate=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0);return}if(await this.failureCallbackBackoff_.attempt(),this.destroyer_.ensureNotDestroyed(),t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||t.category===h.Category.NETWORK&&t.code!=h.Code.TIMEOUT){if(e.restoreStreamAfterTrickPlay){this.setTrickPlay(!1);return}let r=!1;if(t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED){r=await this.resetMediaSource(!0);for(let a of this.mediaStates_.values())this.cancelUpdate_(a);this.destroyer_.ensureNotDestroyed()}let s=this.getDisabledTime_(t);s&&p.debug(i,"Disabling stream due to error",t);let n=this.playerInterface_.disableStream(e.stream,s);t.handled=n||r,n&&(t.severity=h.Severity.RECOVERABLE)}if(!t.handled&&t.code==h.Code.SEGMENT_MISSING){let r=this.playerInterface_.getPresentationTime(),s=this.playerInterface_.mediaSourceEngine.bufferEnd(e.type),n=this.getSegmentReferenceNeeded_(e,r,s);for(;(n==null?void 0:n.getStatus())===Te.Status.MISSING;)e.lastSegmentReference=n,n=this.getSegmentReferenceNeeded_(e,r,s);if(n){await this.playerInterface_.mediaSourceEngine.resync(e.type,n.startTime),e.performingUpdate=!1,e.hasError=!1,this.cancelUpdate_(e),this.scheduleUpdate_(e,0);return}}(!t.handled||t.code!=h.Code.SEGMENT_MISSING)&&this.playerInterface_.onError(t),t.handled||this.config_.failureCallback(t)}getDisabledTime_(e){return this.config_.maxDisabledTime===0&&e.code==h.Code.SEGMENT_MISSING?1:e.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||e.code==h.Code.MEDIA_SOURCE_OPERATION_THREW?1/0:this.config_.maxDisabledTime}async resetMediaSource(e=!1,t=!0){let i=Date.now()/1e3,r=this.config_.minTimeBetweenRecoveries;if(!e&&(!this.config_.allowMediaSourceRecoveries||i-this.lastMediaSourceReset_<r))return!1;this.lastMediaSourceReset_=i;let s=R.ContentType,n=this.mediaStates_.get(s.AUDIO);n&&(this.cancelUpdate_(n),n.operation&&(n.operation.abort(),n.operation=null),n.lastInitSegmentReference=null,n.lastAppendWindowStart=null,n.lastAppendWindowEnd=null,n.lastInitSegmentReference=null,n.lastAppendWindowStart=null,n.lastAppendWindowEnd=null,n.performingUpdate=!1,n.waitingToClearBuffer=!1,n.clearBufferSafeMargin=0,n.waitingToFlushBuffer=!1,n.clearingBuffer=!1,n.segmentIterator&&n.segmentIterator.resetToLastIndependent());let a=this.mediaStates_.get(s.VIDEO);a&&(this.cancelUpdate_(a),a.operation&&(a.operation.abort(),a.operation=null),a.lastInitSegmentReference=null,a.lastAppendWindowStart=null,a.lastAppendWindowEnd=null,a.performingUpdate=!1,a.waitingToClearBuffer=!1,a.clearBufferSafeMargin=0,a.waitingToFlushBuffer=!1,a.clearingBuffer=!1,a.segmentIterator&&a.segmentIterator.resetToLastIndependent());let o=this.playerInterface_.video.paused;return await this.playerInterface_.mediaSourceEngine.reset(this.getStreamsByType_()),a&&!a.clearingBuffer&&!a.performingUpdate&&!a.updateTimer&&this.scheduleUpdate_(a,0),n&&!n.clearingBuffer&&!n.performingUpdate&&!n.updateTimer&&this.scheduleUpdate_(n,0),o||this.playerInterface_.video.play(),!0}updateSpatialVideoInfo_(e){if(this.spatialVideoInfo_.projection!=e.projection||this.spatialVideoInfo_.hfov!=e.hfov){let t=L.EventName,i;if(e.projection!=null||e.hfov!=null){let r=t.SpatialVideoInfoEvent,s=new Map().set("detail",e);i=new L(r,s)}else{let r=t.NoSpatialVideoInfoEvent;i=new L(r)}i.cancelable=!0,this.playerInterface_.onEvent(i),this.spatialVideoInfo_=e}}updateSegmentIteratorReverse_(){let e=this.playerInterface_.getPlaybackRate()<0;for(let t of this.mediaStates_.values())t.segmentIterator&&t.segmentIterator.setReverse(e),t.segmentPrefetch&&t.segmentPrefetch.setReverse(e),e&&(t.segmentIterator=null,t.endOfStream=!1,!t.performingUpdate&&!t.updateTimer&&!t.clearingBuffer&&!t.waitingToClearBuffer&&this.scheduleUpdate_(t,0));for(let t of this.audioPrefetchMap_.values())t.setReverse(e)}shouldUseCrossBoundaryLogic_(){if(this.config_.crossBoundaryStrategy!==yi.KEEP)return!0;let e=j.getDevice(),t=this.playerInterface_.getKeySystem();if(e.supportsSmoothCodecSwitching(t)){if(!e.supportsContainerChangeType())for(let i of this.mediaStates_.keys()){let r=this.mediaStates_.get(i),s=R.ContentType;if(r.type===s.TEXT)continue;let n=r.stream;if(n&&n.fullMimeTypes&&n.fullMimeTypes.size>1){let a=new Set;for(let o of n.fullMimeTypes)a.add(O.getContainerType(o));return a.size>1}}}else for(let i of this.mediaStates_.keys()){let r=this.mediaStates_.get(i),s=R.ContentType;if(r.type===s.TEXT)continue;let n=r.stream;if(n&&n.fullMimeTypes&&n.fullMimeTypes.size>1)return!0}return!1}setupCrossBoundaryListeners_(){this.crossBoundaryEventManager_.removeAll(),this.shouldUseCrossBoundaryLogic_()&&this.crossBoundaryEventManager_.listenMulti(this.playerInterface_.video,["waiting","timeupdate"],()=>{this.forwardTimeForCrossBoundary_()})}forwardTimeForCrossBoundary_(){if(!this.shouldUseCrossBoundaryLogic_())return;this.crossBoundaryTimer_.stop();let e=this.playerInterface_.getPresentationTime(),t=R.ContentType,i=this.mediaStates_.get(t.VIDEO)||this.mediaStates_.get(t.AUDIO);if(!i)return;let r=i.lastInitSegmentReference;if(!r||r.boundaryEnd===null)return;let s=Ue.CROSS_BOUNDARY_END_THRESHOLD_,n=r.boundaryEnd-e;n<0||n>s||(this.boundaryTime_=r.boundaryEnd+Ue.APPEND_WINDOW_END_FUDGE_,this.crossBoundaryTimer_.tickAfter(n))}discardReferenceByBoundary_(e,t){let i=R.ContentType;if(e.type===i.TEXT)return!1;let r=e.lastInitSegmentReference;if(!r)return!1;let s=Ue.logPrefix_(e),n=t.initSegmentReference,a=r.boundaryEnd!==n.boundaryEnd,o=a;if(this.config_.crossBoundaryStrategy===yi.RESET_TO_ENCRYPTED&&(!r.encrypted&&!n.encrypted&&(o=!1),r.encrypted&&(p.debug(s,"stream is encrypted, discard crossBoundaryStrategy"),this.config_.crossBoundaryStrategy=yi.KEEP)),this.config_.crossBoundaryStrategy===yi.RESET_ON_ENCRYPTION_CHANGE&&r.encrypted==n.encrypted&&(o=!1),this.config_.crossBoundaryStrategy===yi.KEEP&&r.mimeType&&n.mimeType){let u=O.getNormalizedCodec(O.getCodecs(r.mimeType)),m=O.getNormalizedCodec(O.getCodecs(n.mimeType));r.mimeType==n.mimeType&&u==m&&(o=!1)}let c=(this.mediaStates_.get(i.VIDEO)||this.mediaStates_.get(i.AUDIO))===e,d=c&&a&&this.crossBoundaryResetPending_;return d&&(this.crossBoundaryResetPending_=!1),c&&o&&(d||e.seeked)&&(p.debug(s,"reset mediaSource","from=",e.lastInitSegmentReference,"to=",t.initSegmentReference),this.resetMediaSource(!0).then(()=>{let u=L.EventName.BoundaryCrossed,m=new Map().set("oldEncrypted",r.encrypted).set("newEncrypted",n.encrypted);this.playerInterface_.onEvent(new L(u,m))})),o}getStreamsByType_(e=!1){let t=R.ContentType,i=a=>{if(a.fullMimeTypes&&a.fullMimeTypes.size>1&&this.mediaStates_.has(a.type)){let o=this.mediaStates_.get(a.type),c=this.playerInterface_.mediaSourceEngine.bufferEnd(o.type),d=this.playerInterface_.getPresentationTime(),u=this.getSegmentReferenceNeeded_(o,d,c);u&&u.codecs&&u.mimeType&&(a.codecs=u.codecs,a.mimeType=u.mimeType)}},r=new Map,s=this.currentVariant_.audio;s&&(i(s),r.set(t.AUDIO,s));let n=this.currentVariant_.video;return n&&(i(n),r.set(t.VIDEO,n)),e&&this.currentTextStream_&&r.set(t.TEXT,this.currentTextStream_),r}static logPrefix_(e){return"("+e.type+":"+e.stream.id+")"}};l(Ue,"APPEND_WINDOW_START_FUDGE_",.1),l(Ue,"APPEND_WINDOW_END_FUDGE_",.1),l(Ue,"MAX_RUN_AHEAD_SEGMENTS_",1),l(Ue,"MIN_RUN_AHEAD_SECONDS_",.5),l(Ue,"CROSS_BOUNDARY_END_THRESHOLD_",1),l(Ue,"CROSS_BOUNDARY_SEEK_TOLERANCE_",.1),l(Ue,"LOOKUP_TIME_DURATION_THRESHOLD_",1);var jr=Ue;/*! @license
|
|
365
365
|
* Shaka Player
|
|
366
366
|
* Copyright 2016 Google LLC
|
|
367
367
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -397,7 +397,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
397
397
|
* Shaka Player
|
|
398
398
|
* Copyright 2016 Google LLC
|
|
399
399
|
* SPDX-License-Identifier: Apache-2.0
|
|
400
|
-
*/var ur=class y{static async isFairPlaySupported(){let e={initDataTypes:["cenc","sinf","skd"],videoCapabilities:[{contentType:'video/mp4; codecs="avc1.42E01E"'}]};try{return await navigator.requestMediaKeySystemAccess("com.apple.fps",[e]),!0}catch(t){return!1}}static defaultGetContentId(e){let t=q.fromBytesAutoDetect(e);return fe.getDomain(t)}static defaultGetKeyId(e){let i=fe.getDomain(e).replace(/-/g,"").toLowerCase();return i.length===32&&/^[0-9a-f]+$/.test(i)?i:null}static initDataTransform(e,t,i){if(!i||!i.byteLength)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.SERVER_CERTIFICATE_REQUIRED);let r;typeof t=="string"?r=q.toUTF16(t,!0):r=t;let s=q.fromBytesAutoDetect(e),n=q.toUTF16(s,!0),a=new Uint8Array(12+n.byteLength+r.byteLength+i.byteLength),o=0,c=u=>{a.set(
|
|
400
|
+
*/var ur=class y{static async isFairPlaySupported(){let e={initDataTypes:["cenc","sinf","skd"],videoCapabilities:[{contentType:'video/mp4; codecs="avc1.42E01E"'}]};try{return await navigator.requestMediaKeySystemAccess("com.apple.fps",[e]),!0}catch(t){return!1}}static defaultGetContentId(e){let t=q.fromBytesAutoDetect(e);return fe.getDomain(t)}static defaultGetKeyId(e){let i=fe.getDomain(e).replace(/-/g,"").toLowerCase();return i.length===32&&/^[0-9a-f]+$/.test(i)?i:null}static initDataTransform(e,t,i){if(!i||!i.byteLength)throw new h(h.Severity.CRITICAL,h.Category.DRM,h.Code.SERVER_CERTIFICATE_REQUIRED);let r;typeof t=="string"?r=q.toUTF16(t,!0):r=t;let s=q.fromBytesAutoDetect(e),n=q.toUTF16(s,!0),a=new Uint8Array(12+n.byteLength+r.byteLength+i.byteLength),o=0,c=u=>{a.set(U.toUint8(u),o),o+=u.byteLength},d=u=>{let m=U.toDataView(a),f=u.byteLength;m.setUint32(o,f,!0),o+=4,c(u)};return d(n),d(r),d(i),v.assert(o==a.length,"Inconsistent init data length"),a}static basicInitDataTransform_(e,t,i){if(t!=="skd")return e;let r=i.serverCertificate,n=q.fromBytesAutoDetect(e).split("skd://").pop();return y.initDataTransform(e,n,r)}static verimatrixInitDataTransform(e,t,i){return y.basicInitDataTransform_(e,t,i)}static ezdrmInitDataTransform(e,t,i){if(t!=="skd")return e;let r=i.serverCertificate,n=q.fromBytesAutoDetect(e).split(";").pop();return y.initDataTransform(e,n,r)}static conaxInitDataTransform(e,t,i){if(t!=="skd")return e;let r=i.serverCertificate,n=q.fromBytesAutoDetect(e).split("skd://").pop().split("?").shift(),o=(c=>{let d=new ArrayBuffer(c.length*2),u=U.toUint16(d);for(let m=0,f=c.length;m<f;m++)u[m]=c.charCodeAt(m);return u})(window.atob(n));return y.initDataTransform(e,o,r)}static expressplayInitDataTransform(e,t,i){return y.basicInitDataTransform_(e,t,i)}static muxInitDataTransform(e,t,i){return y.basicInitDataTransform_(e,t,i)}static verimatrixFairPlayRequest(e,t,i){if(e!==K.RequestType.LICENSE||t.attempt>0)return;let r=t.drmInfo;if(!r||!de.isFairPlayKeySystem(r.keySystem))return;let s=t.body,n=U.toUint8(s),a=ne.toBase64(n);t.headers["Content-Type"]="application/x-www-form-urlencoded",t.body=q.toUTF8("spc="+a)}static octetStreamFairPlayRequest_(e,t,i){if(e!==K.RequestType.LICENSE||t.attempt>0)return;let r=t.drmInfo;!r||!de.isFairPlayKeySystem(r.keySystem)||(t.headers["Content-Type"]="application/octet-stream")}static ezdrmFairPlayRequest(e,t,i){y.octetStreamFairPlayRequest_(e,t)}static conaxFairPlayRequest(e,t,i){y.octetStreamFairPlayRequest_(e,t)}static expressplayFairPlayRequest(e,t,i){y.octetStreamFairPlayRequest_(e,t)}static muxFairPlayRequest(e,t,i){y.octetStreamFairPlayRequest_(e,t)}static gumletFairPlayRequest(e,t,i){if(e!==K.RequestType.LICENSE||t.attempt>0)return;let r=t.drmInfo;if(!r||!de.isFairPlayKeySystem(r.keySystem)||!t.body)return;let s=U.toUint8(t.body),n=ne.toBase64(s);t.body=q.toUTF8(JSON.stringify({spc:n})),t.headers["Content-Type"]="application/json"}static commonFairPlayResponse(e,t,i){if(e!==K.RequestType.LICENSE)return;let r=t.originalRequest.drmInfo;if(!r||!de.isFairPlayKeySystem(r.keySystem))return;let s;try{s=q.fromUTF8(t.data)}catch(a){return}let n=!1;if(s=s.trim(),s.substr(0,5)==="<ckc>"&&s.substr(-6)==="</ckc>"&&(s=s.slice(5,-6),n=!0),!n)try{let a=JSON.parse(s);a.ckc&&(s=a.ckc,n=!0),a.CkcMessage&&(s=a.CkcMessage,n=!0),a.License&&(s=a.License,n=!0)}catch(a){}n&&(t.data=U.toArrayBuffer(ne.fromBase64(s)))}};/*! @license
|
|
401
401
|
* Shaka Player
|
|
402
402
|
* Copyright 2016 Google LLC
|
|
403
403
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -425,15 +425,15 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
425
425
|
* Shaka Player
|
|
426
426
|
* Copyright 2016 Google LLC
|
|
427
427
|
* SPDX-License-Identifier: Apache-2.0
|
|
428
|
-
*/var ks=class y extends Be{constructor(t,i,r,s){super();l(this,"assetUri_");l(this,"mimeType_");l(this,"networkingEngine_");l(this,"startTime_");l(this,"currentAdaptationSetCriteria_");l(this,"startTimeOfDrm_");l(this,"createDrmEngine_");l(this,"manifestFilterer_");l(this,"manifestPlayerInterface_");l(this,"config_");l(this,"manifest_");l(this,"parserFactory_");l(this,"parser_");l(this,"parserEntrusted_");l(this,"regionTimeline_");l(this,"regionTimelineEntrusted_");l(this,"drmEngine_");l(this,"drmEngineEntrusted_");l(this,"abrManager_");l(this,"segmentPrefetchById_");l(this,"segmentPrefetchEntrusted_");l(this,"qualityObserver_");l(this,"stats_");l(this,"manifestPromise_");l(this,"successPromise_");l(this,"eventHandoffTarget_");l(this,"destroyed_");l(this,"allowPrefetch_");l(this,"prefetchedVariant_");l(this,"prefetchedTextStream_");l(this,"hasBeenAttached_");l(this,"queuedOperations_");l(this,"latePhaseQueuedOperations_");l(this,"isPreload_");let n=s;this.assetUri_=t,this.mimeType_=i,this.networkingEngine_=n.networkingEngine,this.startTime_=r,this.currentAdaptationSetCriteria_=null,this.startTimeOfDrm_=0,this.createDrmEngine_=n.createDrmEngine,this.manifestFilterer_=n.manifestFilterer,this.manifestPlayerInterface_=n.manifestPlayerInterface,this.config_=n.config,this.manifest_=null,this.parserFactory_=null,this.parser_=null,this.parserEntrusted_=!1,this.regionTimeline_=n.regionTimeline,this.regionTimelineEntrusted_=!1,this.drmEngine_=null,this.drmEngineEntrusted_=!1,this.abrManager_=null,this.segmentPrefetchById_=new Map,this.segmentPrefetchEntrusted_=!1,this.qualityObserver_=n.qualityObserver,this.stats_=new tr,this.manifestPromise_=Promise.withResolvers(),this.successPromise_=Promise.withResolvers(),this.eventHandoffTarget_=null,this.destroyed_=!1,this.allowPrefetch_=n.allowPrefetch,this.prefetchedVariant_=null,this.prefetchedTextStream_=null,this.hasBeenAttached_=!1,this.queuedOperations_=[],this.latePhaseQueuedOperations_=[],this.isPreload_=!0}markIsLoad(){this.isPreload_=!1}addQueuedOperation(t,i){let r=t?this.latePhaseQueuedOperations_:this.queuedOperations_;r?r.push(i):i()}stopQueuingLatePhaseQueuedOperations(){if(this.latePhaseQueuedOperations_)for(let t of this.latePhaseQueuedOperations_)t();this.latePhaseQueuedOperations_=null}setEventHandoffTarget(t){if(this.eventHandoffTarget_=t,this.hasBeenAttached_=!0,this.queuedOperations_)for(let i of this.queuedOperations_)i();this.queuedOperations_=null}setOffsetToStartTime(t){this.startTime_&&t&&(typeof this.startTime_=="number"?this.startTime_+=t:this.startTime_.setTime(this.startTime_.getTime()+t*1e3))}getStartTime(){return this.startTime_}getStartTimeOfDRM(){return this.startTimeOfDrm_}getMimeType(){return this.mimeType_}getAssetUri(){return this.assetUri_}getManifest(){return this.manifest_}getParserFactory(){return this.parserFactory_}getCurrentAdaptationSetCriteria(){return this.currentAdaptationSetCriteria_}receiveParser(){return this.parserEntrusted_=!0,this.parser_}getParser(){return this.parser_}receiveRegionTimeline(){return this.regionTimelineEntrusted_=!0,this.regionTimeline_}getRegionTimeline(){return this.regionTimeline_}getQualityObserver(){return this.qualityObserver_}getStats(){return this.stats_}getManifestFilterer(){return this.manifestFilterer_}receiveDrmEngine(){return this.drmEngineEntrusted_=!0,this.drmEngine_}getDrmEngine(){return this.drmEngine_}setPrefetchVariant(t){this.prefetchedVariant_=t}getPrefetchedVariant(){return this.prefetchedVariant_}getPrefetchedVariantTrack(){return this.prefetchedVariant_?re.variantToTrack(this.prefetchedVariant_):null}getPrefetchedTextTrack(){return this.prefetchedTextStream_?re.textStreamToTrack(this.prefetchedTextStream_):null}receiveSegmentPrefetchesById(){return this.segmentPrefetchEntrusted_=!0,this.segmentPrefetchById_}attachAdaptationSetCriteria(t){this.currentAdaptationSetCriteria_=t}attachManifest(t,i,r){this.manifest_=t,this.parser_=i,this.parserFactory_=r}start(){(async()=>{await Promise.resolve();try{await this.parseManifestInner_(),this.throwIfDestroyed_(),de.isMediaKeysPolyfilled("webkit")||(await this.initializeDrm(),this.throwIfDestroyed_()),await this.validatePrefetchedVariant_(),this.throwIfDestroyed_(),this.allowPrefetch_&&(await this.prefetchInner_(),this.throwIfDestroyed_()),this.allowPrefetch_&&this.drmEngine_&&(await this.drmEngine_.waitForActiveRequests(),this.throwIfDestroyed_()),this.successPromise_.resolve()}catch(t){(!(t instanceof h)||t.code!=h.Code.OPERATION_ABORTED&&t.code!=h.Code.OBJECT_DESTROYED)&&this.successPromise_.reject(t)}})()}dispatchEvent(t){return this.eventHandoffTarget_?this.eventHandoffTarget_.dispatchEvent(t):super.dispatchEvent(t)}onError(t){t.severity===h.Severity.CRITICAL&&(this.successPromise_.reject(t),this.destroy());let i=U.EventName.Error,r=this.makeEvent_(i,new Map().set("detail",t));this.dispatchEvent(r),r.defaultPrevented&&(t.handled=!0)}throwIfDestroyed_(){if(this.isDestroyed())throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OBJECT_DESTROYED)}makeStateChangeEvent_(t){this.dispatchEvent(new U(U.EventName.OnStateChange,new Map().set("state",t)))}makeEvent_(t,i){return new U(t,i)}async parseManifestInner_(){this.makeStateChangeEvent_("manifest-parser"),this.parser_||(this.parserFactory_=me.getFactory(this.assetUri_,this.mimeType_),v.assert(this.parserFactory_,"Must have manifest parser"),this.parser_=this.parserFactory_(),this.parser_.configure(this.config_.manifest,()=>this.isPreload_));let t=Date.now()/1e3;this.makeStateChangeEvent_("manifest"),this.manifest_||(this.manifest_=await this.parser_.start(this.assetUri_,this.manifestPlayerInterface_),y.filterForAVVariants_(this.manifest_),await this.chooseInitialVariant_()),this.manifestPromise_.resolve();let i=this.makeEvent_(U.EventName.ManifestParsed);if(await Promise.resolve(),this.dispatchEvent(i),this.manifest_.variants.length==0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.NO_VARIANTS);if(y.filterForAVVariants_(this.manifest_),this.manifestFilterer_.applyRestrictions(this.manifest_)){let a=this.makeEvent_(U.EventName.TracksChanged);await Promise.resolve(),this.throwIfDestroyed_(),this.dispatchEvent(a)}let n=Date.now()/1e3-t;this.stats_.setManifestTime(n)}async initializeDrm(t){if(!this.manifest_||this.drmEngine_)return;this.makeStateChangeEvent_("drm-engine"),this.startTimeOfDrm_=Date.now()/1e3,this.drmEngine_=this.createDrmEngine_(),this.manifestFilterer_.setDrmEngine(this.drmEngine_),this.drmEngine_.configure(this.config_.drm,()=>this.isPreload_);let i=re.getPlayableVariants(this.manifest_.variants),r=!0;if(this.manifest_&&this.manifest_.presentationTimeline&&(r=this.manifest_.presentationTimeline.isDynamic()),await this.drmEngine_.initForPlayback(i,this.manifest_.offlineSessionIds,r),this.throwIfDestroyed_(),t&&(await this.drmEngine_.attach(t),this.throwIfDestroyed_()),this.currentAdaptationSetCriteria_){let n=this.currentAdaptationSetCriteria_.getConfiguration();n.keySystem=this.keySystem_(),this.currentAdaptationSetCriteria_.configure(n)}if(await this.manifestFilterer_.filterManifest(this.manifest_)){let n=this.makeEvent_(U.EventName.TracksChanged);await Promise.resolve(),this.dispatchEvent(n)}}reconfigure(t){this.config_=t}configure(t,i){let r=Rt.convertToConfigObject(t,i);st.mergeConfigObjects(this.config_,r),this.reconfigurePrefetched_()}getConfiguration(){return Fe.cloneObject(this.config_)}async chooseInitialVariant_(){if(!this.currentAdaptationSetCriteria_){this.currentAdaptationSetCriteria_=this.config_.adaptationSetCriteriaFactory();let t={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem_()};st.addDeprecatedConfigFields(t),this.currentAdaptationSetCriteria_.configure(t)}this.shouldCreateSegmentIndexBeforeDrmEngineInitialization_()&&(this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_(),this.prefetchedVariant_&&await this.createSegmentIndexFromVariant_(this.prefetchedVariant_))}shouldCreateSegmentIndexBeforeDrmEngineInitialization_(){return this.prefetchedVariant_||(v.assert(this.manifest_,"The manifest should already be parsed."),!this.manifest_.variants.length)?!1:this.manifest_.variants.length==1||this.manifest_.type==me.HLS}async validatePrefetchedVariant_(){this.prefetchedVariant_&&!this.manifest_.variants.includes(this.prefetchedVariant_)&&(await this.closeSegmentIndexFromVariant_(this.prefetchedVariant_),this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_(),this.prefetchedVariant_&&await this.createSegmentIndexFromVariant_(this.prefetchedVariant_))}async prefetchInner_(){if(!this.prefetchedVariant_){let t=this.configureAbrManagerAndChooseVariant_();t&&(this.prefetchedVariant_=t)}if(this.prefetchedVariant_){let t=this.manifest_.presentationTimeline.isLive(),i=[],r=this.prefetchedVariant_;r.video&&i.push(this.prefetchStream_(r.video,t)),r.audio&&i.push(this.prefetchStream_(r.audio,t));let s=this.chooseTextStream_(r);s&&(i.push(this.prefetchStream_(s,t)),this.prefetchedTextStream_=s),await Promise.all(i)}}configureAbrManagerAndChooseVariant_(){if(v.assert(this.currentAdaptationSetCriteria_,"Must have an AdaptationSetCriteria"),!this.abrManager_){let s=this.config_.abrFactory;this.abrManager_=s(),this.abrManager_.configure(this.config_.abr)}let t=this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode,i=re.getPlayableVariants(this.manifest_.variants),r=this.currentAdaptationSetCriteria_.create(i);return this.abrManager_.setVariants(Array.from(r.values()),t),this.abrManager_.chooseVariant(!0)}chooseTextStream_(t){let i=null,r=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);return r.length&&(i=r[0]),!i&&(t!=null&&t.audio)&&this.config_.accessibility.handleForcedSubtitlesAutomatically&&(r=re.filterStreamsByLanguageAndRole(this.manifest_.textStreams,t.audio.language,"",!0),r.length&&(i=r[0])),i}async prefetchStream_(t,i){let r=this.config_.streaming.segmentPrefetchLimit||2,s=new Xr(r,t,(c,d,u)=>jr.dispatchFetch(c,d,u||null,this.config_.streaming.retryParameters,this.networkingEngine_,this.isPreload_),!1);this.segmentPrefetchById_.set(t.id,s),t.segmentIndex||await t.createSegmentIndex();let n=typeof this.startTime_=="number"?this.startTime_:0,a=t.segmentIndex.getIteratorForTime(n),o=null;a&&(o=a.current(),o||(o=a.next().value)),o||(o=t.segmentIndex.earliestReference()),o&&(i?o.initSegmentReference&&await s.prefetchInitSegment(o.initSegmentReference):await s.prefetchSegmentsByTime(o.startTime))}async reconfigurePrefetched_(){if(!this.prefetchedVariant_)return;let t=this.manifest_.presentationTimeline.isLive(),i=[],r=d=>{d&&(this.segmentPrefetchById_.has(d.id)&&(this.segmentPrefetchById_.get(d.id).clearAll(),this.segmentPrefetchById_.delete(d.id)),d.segmentIndex&&d.closeSegmentIndex&&i.push(d.closeSegmentIndex()))},s=()=>{let d=this.prefetchedVariant_;for(let u of[d.video,d.audio])r(u);this.prefetchedTextStream_=null},n=()=>{r(this.prefetchedTextStream_),this.prefetchedTextStream_=null},a=this.currentAdaptationSetCriteria_.getConfiguration(),o={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem_()};if(st.addDeprecatedConfigFields(o),Fe.alphabeticalKeyOrderStringify(a)!=Fe.alphabeticalKeyOrderStringify(o)&&(this.currentAdaptationSetCriteria_.configure(o),s(),this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_()),this.prefetchedVariant_){let d=this.chooseTextStream_(this.prefetchedVariant_);d?d!=this.prefetchedTextStream_&&(n(),this.prefetchedTextStream_=d):n()}else n();await Promise.all(i);let c=[];if(this.prefetchedVariant_){let d=this.prefetchedVariant_;for(let u of[d.video,d.audio])c.push(this.prefetchStream_(u,t));this.prefetchedTextStream_&&c.push(this.prefetchStream_(this.prefetchedTextStream_,t))}await Promise.all(c)}async createSegmentIndexFromVariant_(t){let i=[];for(let r of[t.video,t.audio])r&&!r.segmentIndex&&i.push(r.createSegmentIndex());i.length>0&&await Promise.all(i)}async closeSegmentIndexFromVariant_(t){let i=[];for(let r of[t.video,t.audio])r&&r.segmentIndex&&r.closeSegmentIndex&&i.push(r.closeSegmentIndex());i.length>0&&await Promise.all(i)}waitForFinish(){return this.successPromise_.promise}waitForManifest(){let t=[this.manifestPromise_.promise,this.successPromise_.promise];return Promise.race(t)}async destroy(){if(this.destroyed_=!0,this.parser_&&!this.parserEntrusted_&&await this.parser_.stop(),this.abrManager_&&this.abrManager_.release(),this.regionTimeline_&&!this.regionTimelineEntrusted_&&this.regionTimeline_.release(),this.drmEngine_&&!this.drmEngineEntrusted_&&await this.drmEngine_.destroy(),this.segmentPrefetchById_.size>0&&!this.segmentPrefetchEntrusted_)for(let t of this.segmentPrefetchById_.values())t.clearAll()}isDestroyed(){return this.destroyed_}hasBeenAttached(){return this.hasBeenAttached_}keySystem_(){return de.keySystem(this.drmEngine_?this.drmEngine_.getDrmInfo():null)}static filterForAVVariants_(t){let i=r=>r.video&&r.audio||r.video&&r.video.codecs.includes(",");t.variants.some(i)&&(p.debug("Found variant with audio and video content, so filtering out audio-only content."),t.variants=t.variants.filter(i))}};/*! @license
|
|
428
|
+
*/var ks=class y extends Be{constructor(t,i,r,s){super();l(this,"assetUri_");l(this,"mimeType_");l(this,"networkingEngine_");l(this,"startTime_");l(this,"currentAdaptationSetCriteria_");l(this,"startTimeOfDrm_");l(this,"createDrmEngine_");l(this,"manifestFilterer_");l(this,"manifestPlayerInterface_");l(this,"config_");l(this,"manifest_");l(this,"parserFactory_");l(this,"parser_");l(this,"parserEntrusted_");l(this,"regionTimeline_");l(this,"regionTimelineEntrusted_");l(this,"drmEngine_");l(this,"drmEngineEntrusted_");l(this,"abrManager_");l(this,"segmentPrefetchById_");l(this,"segmentPrefetchEntrusted_");l(this,"qualityObserver_");l(this,"stats_");l(this,"manifestPromise_");l(this,"successPromise_");l(this,"eventHandoffTarget_");l(this,"destroyed_");l(this,"allowPrefetch_");l(this,"prefetchedVariant_");l(this,"prefetchedTextStream_");l(this,"hasBeenAttached_");l(this,"queuedOperations_");l(this,"latePhaseQueuedOperations_");l(this,"isPreload_");let n=s;this.assetUri_=t,this.mimeType_=i,this.networkingEngine_=n.networkingEngine,this.startTime_=r,this.currentAdaptationSetCriteria_=null,this.startTimeOfDrm_=0,this.createDrmEngine_=n.createDrmEngine,this.manifestFilterer_=n.manifestFilterer,this.manifestPlayerInterface_=n.manifestPlayerInterface,this.config_=n.config,this.manifest_=null,this.parserFactory_=null,this.parser_=null,this.parserEntrusted_=!1,this.regionTimeline_=n.regionTimeline,this.regionTimelineEntrusted_=!1,this.drmEngine_=null,this.drmEngineEntrusted_=!1,this.abrManager_=null,this.segmentPrefetchById_=new Map,this.segmentPrefetchEntrusted_=!1,this.qualityObserver_=n.qualityObserver,this.stats_=new tr,this.manifestPromise_=Promise.withResolvers(),this.successPromise_=Promise.withResolvers(),this.eventHandoffTarget_=null,this.destroyed_=!1,this.allowPrefetch_=n.allowPrefetch,this.prefetchedVariant_=null,this.prefetchedTextStream_=null,this.hasBeenAttached_=!1,this.queuedOperations_=[],this.latePhaseQueuedOperations_=[],this.isPreload_=!0}markIsLoad(){this.isPreload_=!1}addQueuedOperation(t,i){let r=t?this.latePhaseQueuedOperations_:this.queuedOperations_;r?r.push(i):i()}stopQueuingLatePhaseQueuedOperations(){if(this.latePhaseQueuedOperations_)for(let t of this.latePhaseQueuedOperations_)t();this.latePhaseQueuedOperations_=null}setEventHandoffTarget(t){if(this.eventHandoffTarget_=t,this.hasBeenAttached_=!0,this.queuedOperations_)for(let i of this.queuedOperations_)i();this.queuedOperations_=null}setOffsetToStartTime(t){this.startTime_&&t&&(typeof this.startTime_=="number"?this.startTime_+=t:this.startTime_.setTime(this.startTime_.getTime()+t*1e3))}getStartTime(){return this.startTime_}getStartTimeOfDRM(){return this.startTimeOfDrm_}getMimeType(){return this.mimeType_}getAssetUri(){return this.assetUri_}getManifest(){return this.manifest_}getParserFactory(){return this.parserFactory_}getCurrentAdaptationSetCriteria(){return this.currentAdaptationSetCriteria_}receiveParser(){return this.parserEntrusted_=!0,this.parser_}getParser(){return this.parser_}receiveRegionTimeline(){return this.regionTimelineEntrusted_=!0,this.regionTimeline_}getRegionTimeline(){return this.regionTimeline_}getQualityObserver(){return this.qualityObserver_}getStats(){return this.stats_}getManifestFilterer(){return this.manifestFilterer_}receiveDrmEngine(){return this.drmEngineEntrusted_=!0,this.drmEngine_}getDrmEngine(){return this.drmEngine_}setPrefetchVariant(t){this.prefetchedVariant_=t}getPrefetchedVariant(){return this.prefetchedVariant_}getPrefetchedVariantTrack(){return this.prefetchedVariant_?re.variantToTrack(this.prefetchedVariant_):null}getPrefetchedTextTrack(){return this.prefetchedTextStream_?re.textStreamToTrack(this.prefetchedTextStream_):null}receiveSegmentPrefetchesById(){return this.segmentPrefetchEntrusted_=!0,this.segmentPrefetchById_}attachAdaptationSetCriteria(t){this.currentAdaptationSetCriteria_=t}attachManifest(t,i,r){this.manifest_=t,this.parser_=i,this.parserFactory_=r}start(){(async()=>{await Promise.resolve();try{await this.parseManifestInner_(),this.throwIfDestroyed_(),de.isMediaKeysPolyfilled("webkit")||(await this.initializeDrm(),this.throwIfDestroyed_()),await this.validatePrefetchedVariant_(),this.throwIfDestroyed_(),this.allowPrefetch_&&(await this.prefetchInner_(),this.throwIfDestroyed_()),this.allowPrefetch_&&this.drmEngine_&&(await this.drmEngine_.waitForActiveRequests(),this.throwIfDestroyed_()),this.successPromise_.resolve()}catch(t){(!(t instanceof h)||t.code!=h.Code.OPERATION_ABORTED&&t.code!=h.Code.OBJECT_DESTROYED)&&this.successPromise_.reject(t)}})()}dispatchEvent(t){return this.eventHandoffTarget_?this.eventHandoffTarget_.dispatchEvent(t):super.dispatchEvent(t)}onError(t){t.severity===h.Severity.CRITICAL&&(this.successPromise_.reject(t),this.destroy());let i=L.EventName.Error,r=this.makeEvent_(i,new Map().set("detail",t));this.dispatchEvent(r),r.defaultPrevented&&(t.handled=!0)}throwIfDestroyed_(){if(this.isDestroyed())throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OBJECT_DESTROYED)}makeStateChangeEvent_(t){this.dispatchEvent(new L(L.EventName.OnStateChange,new Map().set("state",t)))}makeEvent_(t,i){return new L(t,i)}async parseManifestInner_(){this.makeStateChangeEvent_("manifest-parser"),this.parser_||(this.parserFactory_=me.getFactory(this.assetUri_,this.mimeType_),v.assert(this.parserFactory_,"Must have manifest parser"),this.parser_=this.parserFactory_(),this.parser_.configure(this.config_.manifest,()=>this.isPreload_));let t=Date.now()/1e3;this.makeStateChangeEvent_("manifest"),this.manifest_||(this.manifest_=await this.parser_.start(this.assetUri_,this.manifestPlayerInterface_),y.filterForAVVariants_(this.manifest_),await this.chooseInitialVariant_()),this.manifestPromise_.resolve();let i=this.makeEvent_(L.EventName.ManifestParsed);if(await Promise.resolve(),this.dispatchEvent(i),this.manifest_.variants.length==0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.NO_VARIANTS);if(y.filterForAVVariants_(this.manifest_),this.manifestFilterer_.applyRestrictions(this.manifest_)){let a=this.makeEvent_(L.EventName.TracksChanged);await Promise.resolve(),this.throwIfDestroyed_(),this.dispatchEvent(a)}let n=Date.now()/1e3-t;this.stats_.setManifestTime(n)}async initializeDrm(t){if(!this.manifest_||this.drmEngine_)return;this.makeStateChangeEvent_("drm-engine"),this.startTimeOfDrm_=Date.now()/1e3,this.drmEngine_=this.createDrmEngine_(),this.manifestFilterer_.setDrmEngine(this.drmEngine_),this.drmEngine_.configure(this.config_.drm,()=>this.isPreload_);let i=re.getPlayableVariants(this.manifest_.variants),r=!0;if(this.manifest_&&this.manifest_.presentationTimeline&&(r=this.manifest_.presentationTimeline.isDynamic()),await this.drmEngine_.initForPlayback(i,this.manifest_.offlineSessionIds,r),this.throwIfDestroyed_(),t&&(await this.drmEngine_.attach(t),this.throwIfDestroyed_()),this.currentAdaptationSetCriteria_){let n=this.currentAdaptationSetCriteria_.getConfiguration();n.keySystem=this.keySystem_(),this.currentAdaptationSetCriteria_.configure(n)}if(await this.manifestFilterer_.filterManifest(this.manifest_)){let n=this.makeEvent_(L.EventName.TracksChanged);await Promise.resolve(),this.dispatchEvent(n)}}reconfigure(t){this.config_=t}configure(t,i){let r=Rt.convertToConfigObject(t,i);st.mergeConfigObjects(this.config_,r),this.reconfigurePrefetched_()}getConfiguration(){return Fe.cloneObject(this.config_)}async chooseInitialVariant_(){if(!this.currentAdaptationSetCriteria_){this.currentAdaptationSetCriteria_=this.config_.adaptationSetCriteriaFactory();let t={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem_()};st.addDeprecatedConfigFields(t),this.currentAdaptationSetCriteria_.configure(t)}this.shouldCreateSegmentIndexBeforeDrmEngineInitialization_()&&(this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_(),this.prefetchedVariant_&&await this.createSegmentIndexFromVariant_(this.prefetchedVariant_))}shouldCreateSegmentIndexBeforeDrmEngineInitialization_(){return this.prefetchedVariant_||(v.assert(this.manifest_,"The manifest should already be parsed."),!this.manifest_.variants.length)?!1:this.manifest_.variants.length==1||this.manifest_.type==me.HLS}async validatePrefetchedVariant_(){this.prefetchedVariant_&&!this.manifest_.variants.includes(this.prefetchedVariant_)&&(await this.closeSegmentIndexFromVariant_(this.prefetchedVariant_),this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_(),this.prefetchedVariant_&&await this.createSegmentIndexFromVariant_(this.prefetchedVariant_))}async prefetchInner_(){if(!this.prefetchedVariant_){let t=this.configureAbrManagerAndChooseVariant_();t&&(this.prefetchedVariant_=t)}if(this.prefetchedVariant_){let t=this.manifest_.presentationTimeline.isLive(),i=[],r=this.prefetchedVariant_;r.video&&i.push(this.prefetchStream_(r.video,t)),r.audio&&i.push(this.prefetchStream_(r.audio,t));let s=this.chooseTextStream_(r);s&&(i.push(this.prefetchStream_(s,t)),this.prefetchedTextStream_=s),await Promise.all(i)}}configureAbrManagerAndChooseVariant_(){if(v.assert(this.currentAdaptationSetCriteria_,"Must have an AdaptationSetCriteria"),!this.abrManager_){let s=this.config_.abrFactory;this.abrManager_=s(),this.abrManager_.configure(this.config_.abr)}let t=this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode,i=re.getPlayableVariants(this.manifest_.variants),r=this.currentAdaptationSetCriteria_.create(i);return this.abrManager_.setVariants(Array.from(r.values()),t),this.abrManager_.chooseVariant(!0)}chooseTextStream_(t){let i=null,r=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);return r.length&&(i=r[0]),!i&&(t!=null&&t.audio)&&this.config_.accessibility.handleForcedSubtitlesAutomatically&&(r=re.filterStreamsByLanguageAndRole(this.manifest_.textStreams,t.audio.language,"",!0),r.length&&(i=r[0])),i}async prefetchStream_(t,i){let r=this.config_.streaming.segmentPrefetchLimit||2,s=new Xr(r,t,(c,d,u)=>jr.dispatchFetch(c,d,u||null,this.config_.streaming.retryParameters,this.networkingEngine_,this.isPreload_),!1);this.segmentPrefetchById_.set(t.id,s),t.segmentIndex||await t.createSegmentIndex();let n=typeof this.startTime_=="number"?this.startTime_:0,a=t.segmentIndex.getIteratorForTime(n),o=null;a&&(o=a.current(),o||(o=a.next().value)),o||(o=t.segmentIndex.earliestReference()),o&&(i?o.initSegmentReference&&await s.prefetchInitSegment(o.initSegmentReference):await s.prefetchSegmentsByTime(o.startTime))}async reconfigurePrefetched_(){if(!this.prefetchedVariant_)return;let t=this.manifest_.presentationTimeline.isLive(),i=[],r=d=>{d&&(this.segmentPrefetchById_.has(d.id)&&(this.segmentPrefetchById_.get(d.id).clearAll(),this.segmentPrefetchById_.delete(d.id)),d.segmentIndex&&d.closeSegmentIndex&&i.push(d.closeSegmentIndex()))},s=()=>{let d=this.prefetchedVariant_;for(let u of[d.video,d.audio])r(u);this.prefetchedTextStream_=null},n=()=>{r(this.prefetchedTextStream_),this.prefetchedTextStream_=null},a=this.currentAdaptationSetCriteria_.getConfiguration(),o={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem_()};if(st.addDeprecatedConfigFields(o),Fe.alphabeticalKeyOrderStringify(a)!=Fe.alphabeticalKeyOrderStringify(o)&&(this.currentAdaptationSetCriteria_.configure(o),s(),this.prefetchedVariant_=this.configureAbrManagerAndChooseVariant_()),this.prefetchedVariant_){let d=this.chooseTextStream_(this.prefetchedVariant_);d?d!=this.prefetchedTextStream_&&(n(),this.prefetchedTextStream_=d):n()}else n();await Promise.all(i);let c=[];if(this.prefetchedVariant_){let d=this.prefetchedVariant_;for(let u of[d.video,d.audio])c.push(this.prefetchStream_(u,t));this.prefetchedTextStream_&&c.push(this.prefetchStream_(this.prefetchedTextStream_,t))}await Promise.all(c)}async createSegmentIndexFromVariant_(t){let i=[];for(let r of[t.video,t.audio])r&&!r.segmentIndex&&i.push(r.createSegmentIndex());i.length>0&&await Promise.all(i)}async closeSegmentIndexFromVariant_(t){let i=[];for(let r of[t.video,t.audio])r&&r.segmentIndex&&r.closeSegmentIndex&&i.push(r.closeSegmentIndex());i.length>0&&await Promise.all(i)}waitForFinish(){return this.successPromise_.promise}waitForManifest(){let t=[this.manifestPromise_.promise,this.successPromise_.promise];return Promise.race(t)}async destroy(){if(this.destroyed_=!0,this.parser_&&!this.parserEntrusted_&&await this.parser_.stop(),this.abrManager_&&this.abrManager_.release(),this.regionTimeline_&&!this.regionTimelineEntrusted_&&this.regionTimeline_.release(),this.drmEngine_&&!this.drmEngineEntrusted_&&await this.drmEngine_.destroy(),this.segmentPrefetchById_.size>0&&!this.segmentPrefetchEntrusted_)for(let t of this.segmentPrefetchById_.values())t.clearAll()}isDestroyed(){return this.destroyed_}hasBeenAttached(){return this.hasBeenAttached_}keySystem_(){return de.keySystem(this.drmEngine_?this.drmEngine_.getDrmInfo():null)}static filterForAVVariants_(t){let i=r=>r.video&&r.audio||r.video&&r.video.codecs.includes(",");t.variants.some(i)&&(p.debug("Found variant with audio and video content, so filtering out audio-only content."),t.variants=t.variants.filter(i))}};/*! @license
|
|
429
429
|
* Shaka Player
|
|
430
430
|
* Copyright 2016 Google LLC
|
|
431
431
|
* SPDX-License-Identifier: Apache-2.0
|
|
432
|
-
*/var Tn=class extends Be{constructor(t){super();l(this,"timeline_");l(this,"previousBase_");this.timeline_=t,this.previousBase_=null}release(){this.timeline_=null,super.release()}poll(t,i){if(!this.timeline_)return;let r=this.timeline_.getProgramDateTimeRegionForTime(t);if(!r)return;let s=r.pdt-r.start;if(this.previousBase_==null){this.previousBase_=s;return}Math.abs(s-this.previousBase_)>.5&&this.dispatchEvent(new
|
|
432
|
+
*/var Tn=class extends Be{constructor(t){super();l(this,"timeline_");l(this,"previousBase_");this.timeline_=t,this.previousBase_=null}release(){this.timeline_=null,super.release()}poll(t,i){if(!this.timeline_)return;let r=this.timeline_.getProgramDateTimeRegionForTime(t);if(!r)return;let s=r.pdt-r.start;if(this.previousBase_==null){this.previousBase_=s;return}Math.abs(s-this.previousBase_)>.5&&this.dispatchEvent(new L("change",new Map([["programDateTime",new Date(r.pdt*1e3)],["timestamp",r.start]]))),this.previousBase_=s}};/*! @license
|
|
433
433
|
* Shaka Player
|
|
434
434
|
* Copyright 2016 Google LLC
|
|
435
435
|
* SPDX-License-Identifier: Apache-2.0
|
|
436
|
-
*/var $r=class $r extends Be{constructor(t,i){super();l(this,"timeline_");l(this,"startsPastZero_");l(this,"oldPosition_");l(this,"rules_");l(this,"eventManager_");this.timeline_=t,this.startsPastZero_=i,this.oldPosition_=new Map;let r=$r.RelativePosition_,s=r.BEFORE_THE_REGION,n=r.IN_THE_REGION,a=r.AFTER_THE_REGION;this.rules_=[{weWere:null,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:s,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:a,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:n,weAre:s,invoke:(o,c)=>this.onEvent_("exit",o,c)},{weWere:n,weAre:a,invoke:(o,c)=>this.onEvent_("exit",o,c)},{weWere:s,weAre:a,invoke:(o,c)=>{c?this.onEvent_("skip",o,c):(this.onEvent_("enter",o,c),this.onEvent_("exit",o,c))}},{weWere:a,weAre:s,invoke:(o,c)=>this.onEvent_("skip",o,c)}],this.eventManager_=new ue,this.eventManager_.listen(this.timeline_,"regionremove",o=>{let c=o.region;this.oldPosition_.delete(c)})}release(){this.timeline_=null,this.oldPosition_.clear(),this.eventManager_.release(),this.eventManager_=null,super.release()}poll(t,i){if(!(this.startsPastZero_&&t==0)){this.startsPastZero_=!1;for(let r of this.timeline_.regions()){let s=this.oldPosition_.get(r),n=$r.determinePositionRelativeTo_(r,t);this.oldPosition_.set(r,n);for(let a of this.rules_)a.weWere==s&&a.weAre==n&&a.invoke(r,i)}}}onEvent_(t,i,r){let s=new
|
|
436
|
+
*/var $r=class $r extends Be{constructor(t,i){super();l(this,"timeline_");l(this,"startsPastZero_");l(this,"oldPosition_");l(this,"rules_");l(this,"eventManager_");this.timeline_=t,this.startsPastZero_=i,this.oldPosition_=new Map;let r=$r.RelativePosition_,s=r.BEFORE_THE_REGION,n=r.IN_THE_REGION,a=r.AFTER_THE_REGION;this.rules_=[{weWere:null,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:s,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:a,weAre:n,invoke:(o,c)=>this.onEvent_("enter",o,c)},{weWere:n,weAre:s,invoke:(o,c)=>this.onEvent_("exit",o,c)},{weWere:n,weAre:a,invoke:(o,c)=>this.onEvent_("exit",o,c)},{weWere:s,weAre:a,invoke:(o,c)=>{c?this.onEvent_("skip",o,c):(this.onEvent_("enter",o,c),this.onEvent_("exit",o,c))}},{weWere:a,weAre:s,invoke:(o,c)=>this.onEvent_("skip",o,c)}],this.eventManager_=new ue,this.eventManager_.listen(this.timeline_,"regionremove",o=>{let c=o.region;this.oldPosition_.delete(c)})}release(){this.timeline_=null,this.oldPosition_.clear(),this.eventManager_.release(),this.eventManager_=null,super.release()}poll(t,i){if(!(this.startsPastZero_&&t==0)){this.startsPastZero_=!1;for(let r of this.timeline_.regions()){let s=this.oldPosition_.get(r),n=$r.determinePositionRelativeTo_(r,t);this.oldPosition_.set(r,n);for(let a of this.rules_)a.weWere==s&&a.weAre==n&&a.invoke(r,i)}}}onEvent_(t,i,r){let s=new L(t,new Map([["region",i],["seeking",r]]));this.dispatchEvent(s)}static determinePositionRelativeTo_(t,i){let r=$r.RelativePosition_;return i<t.startTime?r.BEFORE_THE_REGION:i>t.endTime?r.AFTER_THE_REGION:r.IN_THE_REGION}};l($r,"RelativePosition_",{BEFORE_THE_REGION:1,IN_THE_REGION:2,AFTER_THE_REGION:3});var Ur=$r;/*! @license
|
|
437
437
|
* Shaka Player
|
|
438
438
|
* Copyright 2016 Google LLC
|
|
439
439
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -446,11 +446,11 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
446
446
|
* Shaka Player
|
|
447
447
|
* Copyright 2016 Google LLC
|
|
448
448
|
* SPDX-License-Identifier: Apache-2.0
|
|
449
|
-
*/var Ds=class Ds{constructor(e){l(this,"player_");l(this,"eventManager_");l(this,"loadEventManager_");l(this,"config_");l(this,"video_");l(this,"trackNodes_");l(this,"trackId_");l(this,"visible_");l(this,"timer_");this.player_=e,this.eventManager_=new ue,this.loadEventManager_=new ue,this.config_=null,this.video_=null,this.trackNodes_=new Map,this.trackId_=-1,this.visible_=!1,this.timer_=null,this.eventManager_.listen(e,
|
|
449
|
+
*/var Ds=class Ds{constructor(e){l(this,"player_");l(this,"eventManager_");l(this,"loadEventManager_");l(this,"config_");l(this,"video_");l(this,"trackNodes_");l(this,"trackId_");l(this,"visible_");l(this,"timer_");this.player_=e,this.eventManager_=new ue,this.loadEventManager_=new ue,this.config_=null,this.video_=null,this.trackNodes_=new Map,this.trackId_=-1,this.visible_=!1,this.timer_=null,this.eventManager_.listen(e,L.EventName.Loaded,()=>this.checkMsePlayback_()),this.checkMsePlayback_()}configure(e){this.config_=e}remove(e,t){if(!this.player_)return!1;let i=this.getActiveTrack_();return i&&si.removeCuesFromTextTrack(i,r=>r.startTime<t&&r.endTime>e),!0}append(e){var s,n;let t=this.getActiveTrack_();if(!t)return;let i=(n=(s=this.config_)==null?void 0:s.subtitleDelay)!=null?n:0,r=i!==0?e.map(a=>{let o=a.clone();return o.startTime=Math.max(0,o.startTime+i),o.endTime=Math.max(0,o.endTime+i),o}):e;si.appendCuesToTextTrack(t,r)}destroy(){var e,t,i;return this.player_&&(this.video_&&this.onUnloading_(),this.player_=null),(e=this.timer_)==null||e.stop(),this.timer_=null,(t=this.eventManager_)==null||t.release(),this.eventManager_=null,(i=this.loadEventManager_)==null||i.release(),this.loadEventManager_=null,Promise.resolve()}isTextVisible(){return this.visible_}setTextVisibility(e){this.visible_=e;let t=this.getActiveTrack_();if(t){this.applyVisibilityToTrack_(t,e);return}this.isSrcEqualsMode_()&&this.applyVisibilityToSrcEqualsTracks_(e)}setTextLanguage(e){}onUnloading_(){var e,t;(e=this.timer_)==null||e.stop(),this.timer_=null,(t=this.loadEventManager_)==null||t.removeAll();for(let i of this.trackNodes_.values())i.remove();this.trackNodes_.clear(),this.trackId_=-1,this.video_=null}onTextChanged_(){let e=new Map,t=this.player_.getTextTracks();for(let i of t){let r=this.trackNodes_.has(i.id)?this.reuseTrackNode_(i):this.createTrackNode_(i);e.set(i.id,r),i.active&&(this.trackId_=i.id)}for(let i of this.trackNodes_.values())i.remove();this.trackNodes_=e,this.activateCurrentTrack_()}onChange_(){if(this.timer_)return;let e=this.video_;this.timer_=new ae(()=>{if(this.timer_=null,this.video_!==e)return;let t=this.resolveActiveTrackId_();this.disableAllTracksExcept_(t),this.trackId_!==t&&(this.trackId_=t,this.syncTrackSelectionWithPlayer_(t))}).tickAfter(0)}getActiveTrack_(){return this.trackNodes_.has(this.trackId_)?this.trackNodes_.get(this.trackId_).track:null}applyVisibilityToTrack_(e,t){if(e.mode==="disabled")return;let i=t?"showing":"hidden";e.mode!==i&&(e.mode=i)}isSrcEqualsMode_(){if(!this.player_)return!1;let e=Ds.LoadMode;return this.player_.getLoadMode()===e.SRC_EQUALS}applyVisibilityToSrcEqualsTracks_(e){let t=Array.from(this.player_.getMediaElement().textTracks).filter(i=>["captions","subtitles","forced"].includes(i.kind));if(e){if(!t.some(r=>r.mode==="showing")){let r=t.find(s=>s.mode==="hidden");r&&(r.mode="showing")}}else for(let i of t)i.mode==="showing"&&(i.mode="hidden")}reuseTrackNode_(e){let t=this.trackNodes_.get(e.id);return!e.active&&t.track.mode!=="disabled"&&(t.track.mode="disabled"),this.trackNodes_.delete(e.id),t}createTrackNode_(e){let t=this.video_.ownerDocument.createElement("track");return t.kind=this.getTrackKind_(e),t.label=this.getTrackLabel_(e),t.srclang=this.resolveTrackLanguage_(e),t.src="data:,WEBVTT",t.track.mode="disabled",this.video_.appendChild(t),t}resolveTrackLanguage_(e){var t;return e.language?e.language in Lr?e.language:(t=Se.getBase(e.language))!=null?t:"und":"und"}activateCurrentTrack_(){if(this.trackId_<=-1)return;if(!this.trackNodes_.has(this.trackId_)){this.trackId_=-1;return}let e=this.trackNodes_.get(this.trackId_).track;e.mode==="disabled"&&(e.mode=this.visible_?"showing":"hidden")}resolveActiveTrackId_(){let e=-1;if(this.trackNodes_.has(this.trackId_)){let t=this.trackNodes_.get(this.trackId_).track.mode;if(t==="showing")return this.trackId_;t==="hidden"&&(e=this.trackId_)}for(let t of this.trackNodes_.keys()){let i=this.trackNodes_.get(t);if(i.track.mode==="showing")return t;e<0&&i.track.mode==="hidden"&&(e=t)}return e}disableAllTracksExcept_(e){let t=this.trackNodes_.get(e);for(let i of this.trackNodes_.values())i!==t&&i.track.mode!=="disabled"&&(i.track.mode="disabled")}syncTrackSelectionWithPlayer_(e){if(e>-1){let t=this.player_.getTextTracks().find(i=>i.id===e);if(t){this.player_.selectTextTrack(t);return}}this.player_.selectTextTrack(null)}checkMsePlayback_(){if(this.video_||!this.player_)return;let e=Ds.LoadMode;if(this.player_.getLoadMode()!==e.MEDIA_SOURCE)return;this.video_=this.player_.getMediaElement();let t=L.EventName;this.eventManager_.listenOnce(this.player_,t.Unloading,()=>this.onUnloading_()),this.loadEventManager_.listen(this.player_,t.TextChanged,()=>this.onTextChanged_()),this.loadEventManager_.listen(this.video_.textTracks,"change",()=>this.onChange_()),this.onTextChanged_()}getTrackKind_(e){let t=j.getDevice();return e.forced&&t.getBrowserEngine()===ie.BrowserEngine.WEBKIT?"forced":e.kind===R.TextStreamKind.CLOSED_CAPTION?"captions":"subtitles"}getTrackLabel_(e){var i;if(e.label)return e.label;if(e.language){let r=Se.getBase(e.language);if(window.Intl&&"DisplayNames"in Intl)try{let o=new Intl.DisplayNames(e.language,{type:"language",languageDisplay:"standard"}).of(e.language);if(o&&o.toLowerCase()!=e.language.toLowerCase())return o.charAt(0).toUpperCase()+o.slice(1)}catch(a){}let s=Lr[e.language];if(s)return s;let n=r&&Lr[r];if(n)return r===e.language?n:`${n} (${e.language})`}let t=String((i=e.originalTextId)!=null?i:"");return e.language&&e.language!==e.originalTextId?`${t} (${e.language})`:t}};l(Ds,"LoadMode",{MEDIA_SOURCE:2,SRC_EQUALS:3});var hr=Ds;/*! @license
|
|
450
450
|
* Shaka Player
|
|
451
451
|
* Copyright 2016 Google LLC
|
|
452
452
|
* SPDX-License-Identifier: Apache-2.0
|
|
453
|
-
*/var Us=class Us{constructor(e){l(this,"player_");l(this,"config_");l(this,"eventManager_");l(this,"supported_");l(this,"textContainer_");l(this,"enabled_");l(this,"translatorController_");l(this,"recognitionTimer_");l(this,"nextTextTrackId_");l(this,"basicTextTrack_");l(this,"textTracks_");l(this,"activeTrackId_");l(this,"renderer_");l(this,"lastSourceLanguage_");l(this,"lastTargetLanguage_");l(this,"recognitionController_");this.player_=e,this.config_=null,this.eventManager_=new ue,this.supported_=Us.isMediaStreamTrackSupported.value(),this.textContainer_=null,this.enabled_=!1,this.translatorController_=new io,this.recognitionTimer_=new ae(()=>{this.initRecognition_()}),this.nextTextTrackId_=1e15,this.basicTextTrack_=this.createTextTrack_(),this.textTracks_=[this.basicTextTrack_],this.activeTrackId_=null,this.renderer_=null,this.lastSourceLanguage_=null,this.lastTargetLanguage_=null,this.recognitionController_=new to(this.translatorController_,this.recognitionTimer_,t=>{var r;if(!this.enabled_||!this.textContainer_)return;let i=this.truncateLastWords_(t,this.config_.maxTextLength);(r=this.renderer_)==null||r.render(i)},()=>{var t;(t=this.renderer_)==null||t.clear()})}configure(e){this.config_=e,this.checkTextTrackChanges_()}release(){var e;this.activeTrackId_=null,this.eventManager_.removeAll(),this.stopRecognition_(),this.player_=null,this.eventManager_.release(),(e=this.renderer_)==null||e.release(),this.textContainer_&&this.textContainer_.parentElement&&(this.textContainer_.remove(),this.textContainer_=null)}enable(e){if(!this.supported_||(this.textContainer_||(this.textContainer_=this.getTextContainer_()),!this.textContainer_)||(this.renderer_||(this.renderer_=new eo(this.textContainer_)),this.enabled_&&e.id==this.activeTrackId_))return;this.enabled_=!0,this.activeTrackId_=e.id,this.eventManager_.listen(this.player_,"audiotrackschanged",()=>{this.initRecognition_()});let t=this.player_.getMediaElement();this.eventManager_.listen(t,"seeking",()=>{this.initRecognition_()}),this.eventManager_.listen(t,"pause",()=>{this.stopRecognition_(!1)}),this.eventManager_.listen(t,"play",()=>{this.initRecognition_()}),t.paused||this.initRecognition_()}disable(){var e;this.enabled_&&(this.enabled_=!1,this.activeTrackId_=null,this.eventManager_.removeAll(),this.stopRecognition_(),(e=this.renderer_)==null||e.release(),this.renderer_=null,this.translatorController_.release(),this.recognitionController_.release())}isEnabled(){return this.enabled_}isSupported(){return!(!this.supported_||(this.textContainer_||(this.textContainer_=this.getTextContainer_()),!this.textContainer_))}getTextTracks(){if(!this.isSupported())return[];for(let e of this.textTracks_)e.active=e.id==this.activeTrackId_;return this.textTracks_}async initRecognition_(){var a;v.assert(this.config_,"Config must not be null!"),(a=this.renderer_)==null||a.clear();let e=this.player_.getAudioTracks();if(!e.length)return;let t=this.getAudioTrackFromMediaElement_();if(!t)return;let i=e.find(o=>o.active),r="en";i&&i.language&&i.language!="und"&&(r=i.language);let s=this.textTracks_.find(o=>o.id==this.activeTrackId_),n="";if(s&&s.language&&s.language!="und"&&(n=s.language),this.recognitionController_.isActive()&&this.lastSourceLanguage_===r&&this.lastTargetLanguage_!==n){this.lastTargetLanguage_=n,await this.translatorController_.setup(r,n);return}this.stopRecognition_();try{await this.translatorController_.setup(r,n)}catch(o){if(o.name=="NotSupportedError")return}await this.recognitionController_.start(t,r,this.config_.processLocally),this.lastSourceLanguage_=r,this.lastTargetLanguage_=n}stopRecognition_(e=!0){this.recognitionController_.stop(e)}truncateLastWords_(e,t){if(e.length<=t)return e;let i=e.length-t;for(;i>0&&e[i-1]!==" ";)i--;return"..."+e.slice(i).trimStart()}getAudioTrackFromMediaElement_(){let e=this.player_.getMediaElement();return e?Us.audioObjectMap_.getOrInsertComputed(e,()=>{let i=window.AudioContext||window.webkitAudioContext,r=new i;v.assert(e,"MediaElement should be null");let s=r.createMediaElementSource(e),n=r.createMediaStreamDestination();s.connect(n),s.connect(r.destination);let a=n.stream.getAudioTracks()[0];return{audioContext:r,sourceNode:s,destinationNode:n,audioTrack:a}}).audioTrack:null}getTextContainer_(){let e=this.player_.getVideoContainer();if(!e)return null;let t=Ke.createHTMLElement("div");return t.classList.add("shaka-speech-to-text-container"),t.style.textAlign="center",t.style.display="flex",t.style.flexDirection="column",t.style.alignItems="center",t.style.justifyContent="flex-end",e.appendChild(t),t}checkTextTrackChanges_(){v.assert(this.config_,"Config must not be null!");let e=this.textTracks_.map(i=>i.language).filter(i=>i);if(!ye.hasSameElements(this.config_.languagesToTranslate,e)&&"Translator"in window){this.textTracks_=this.textTracks_.filter(r=>r.id==this.basicTextTrack_.id||this.config_.languagesToTranslate.includes(r.language)?!0:(r.id==this.activeTrackId_&&this.disable(),!1));for(let r of this.config_.languagesToTranslate){let s=this.textTracks_.find(n=>n.language==r);s||(s=this.createTextTrack_(),s.language=r,this.textTracks_.push(s))}let i=new
|
|
453
|
+
*/var Us=class Us{constructor(e){l(this,"player_");l(this,"config_");l(this,"eventManager_");l(this,"supported_");l(this,"textContainer_");l(this,"enabled_");l(this,"translatorController_");l(this,"recognitionTimer_");l(this,"nextTextTrackId_");l(this,"basicTextTrack_");l(this,"textTracks_");l(this,"activeTrackId_");l(this,"renderer_");l(this,"lastSourceLanguage_");l(this,"lastTargetLanguage_");l(this,"recognitionController_");this.player_=e,this.config_=null,this.eventManager_=new ue,this.supported_=Us.isMediaStreamTrackSupported.value(),this.textContainer_=null,this.enabled_=!1,this.translatorController_=new io,this.recognitionTimer_=new ae(()=>{this.initRecognition_()}),this.nextTextTrackId_=1e15,this.basicTextTrack_=this.createTextTrack_(),this.textTracks_=[this.basicTextTrack_],this.activeTrackId_=null,this.renderer_=null,this.lastSourceLanguage_=null,this.lastTargetLanguage_=null,this.recognitionController_=new to(this.translatorController_,this.recognitionTimer_,t=>{var r;if(!this.enabled_||!this.textContainer_)return;let i=this.truncateLastWords_(t,this.config_.maxTextLength);(r=this.renderer_)==null||r.render(i)},()=>{var t;(t=this.renderer_)==null||t.clear()})}configure(e){this.config_=e,this.checkTextTrackChanges_()}release(){var e;this.activeTrackId_=null,this.eventManager_.removeAll(),this.stopRecognition_(),this.player_=null,this.eventManager_.release(),(e=this.renderer_)==null||e.release(),this.textContainer_&&this.textContainer_.parentElement&&(this.textContainer_.remove(),this.textContainer_=null)}enable(e){if(!this.supported_||(this.textContainer_||(this.textContainer_=this.getTextContainer_()),!this.textContainer_)||(this.renderer_||(this.renderer_=new eo(this.textContainer_)),this.enabled_&&e.id==this.activeTrackId_))return;this.enabled_=!0,this.activeTrackId_=e.id,this.eventManager_.listen(this.player_,"audiotrackschanged",()=>{this.initRecognition_()});let t=this.player_.getMediaElement();this.eventManager_.listen(t,"seeking",()=>{this.initRecognition_()}),this.eventManager_.listen(t,"pause",()=>{this.stopRecognition_(!1)}),this.eventManager_.listen(t,"play",()=>{this.initRecognition_()}),t.paused||this.initRecognition_()}disable(){var e;this.enabled_&&(this.enabled_=!1,this.activeTrackId_=null,this.eventManager_.removeAll(),this.stopRecognition_(),(e=this.renderer_)==null||e.release(),this.renderer_=null,this.translatorController_.release(),this.recognitionController_.release())}isEnabled(){return this.enabled_}isSupported(){return!(!this.supported_||(this.textContainer_||(this.textContainer_=this.getTextContainer_()),!this.textContainer_))}getTextTracks(){if(!this.isSupported())return[];for(let e of this.textTracks_)e.active=e.id==this.activeTrackId_;return this.textTracks_}async initRecognition_(){var a;v.assert(this.config_,"Config must not be null!"),(a=this.renderer_)==null||a.clear();let e=this.player_.getAudioTracks();if(!e.length)return;let t=this.getAudioTrackFromMediaElement_();if(!t)return;let i=e.find(o=>o.active),r="en";i&&i.language&&i.language!="und"&&(r=i.language);let s=this.textTracks_.find(o=>o.id==this.activeTrackId_),n="";if(s&&s.language&&s.language!="und"&&(n=s.language),this.recognitionController_.isActive()&&this.lastSourceLanguage_===r&&this.lastTargetLanguage_!==n){this.lastTargetLanguage_=n,await this.translatorController_.setup(r,n);return}this.stopRecognition_();try{await this.translatorController_.setup(r,n)}catch(o){if(o.name=="NotSupportedError")return}await this.recognitionController_.start(t,r,this.config_.processLocally),this.lastSourceLanguage_=r,this.lastTargetLanguage_=n}stopRecognition_(e=!0){this.recognitionController_.stop(e)}truncateLastWords_(e,t){if(e.length<=t)return e;let i=e.length-t;for(;i>0&&e[i-1]!==" ";)i--;return"..."+e.slice(i).trimStart()}getAudioTrackFromMediaElement_(){let e=this.player_.getMediaElement();return e?Us.audioObjectMap_.getOrInsertComputed(e,()=>{let i=window.AudioContext||window.webkitAudioContext,r=new i;v.assert(e,"MediaElement should be null");let s=r.createMediaElementSource(e),n=r.createMediaStreamDestination();s.connect(n),s.connect(r.destination);let a=n.stream.getAudioTracks()[0];return{audioContext:r,sourceNode:s,destinationNode:n,audioTrack:a}}).audioTrack:null}getTextContainer_(){let e=this.player_.getVideoContainer();if(!e)return null;let t=Ke.createHTMLElement("div");return t.classList.add("shaka-speech-to-text-container"),t.style.textAlign="center",t.style.display="flex",t.style.flexDirection="column",t.style.alignItems="center",t.style.justifyContent="flex-end",e.appendChild(t),t}checkTextTrackChanges_(){v.assert(this.config_,"Config must not be null!");let e=this.textTracks_.map(i=>i.language).filter(i=>i);if(!ye.hasSameElements(this.config_.languagesToTranslate,e)&&"Translator"in window){this.textTracks_=this.textTracks_.filter(r=>r.id==this.basicTextTrack_.id||this.config_.languagesToTranslate.includes(r.language)?!0:(r.id==this.activeTrackId_&&this.disable(),!1));for(let r of this.config_.languagesToTranslate){let s=this.textTracks_.find(n=>n.language==r);s||(s=this.createTextTrack_(),s.language=r,this.textTracks_.push(s))}let i=new L(L.EventName.TextChanged);this.player_.dispatchEvent(i)}}createTextTrack_(){return{id:this.nextTextTrackId_++,active:!1,type:R.ContentType.TEXT,bandwidth:0,language:"",label:null,kind:null,mimeType:null,codecs:null,primary:!1,roles:[],accessibilityPurpose:null,forced:!1,originalTextId:null,originalLanguage:"speech-to-text"}}};l(Us,"audioObjectMap_",new Map);var Qr=Us;Qr.isMediaStreamTrackSupported=new _e(()=>{let y=Ke.asHTMLIFrameElement(document.body.appendChild(document.createElement("iframe"))),e=y.contentWindow,t=e.SpeechRecognition||e.webkitSpeechRecognition;if(!t)return y.remove(),!1;let i=new t;y.remove();try{return i.start(0),i.stop(),!1}catch(r){return r.name=="TypeError"}});var eo=class{constructor(e){l(this,"container_");l(this,"span_");this.container_=e,this.span_=null}render(e){this.container_&&(this.span_||(this.span_=Ke.createHTMLElement("span"),this.span_.setAttribute("translate","no"),this.span_.style.backgroundColor="rgba(0,0,0,0.8)",this.span_.style.padding="0px 5px",this.span_.style.margin="2.5% 5%",this.container_.appendChild(this.span_)),this.span_.textContent=e)}clear(){this.span_&&(this.span_.textContent="")}release(){this.container_&&Ke.removeAllChildren(this.container_),this.span_=null}},to=class{constructor(e,t,i,r){l(this,"translatorController_");l(this,"timer_");l(this,"onText_");l(this,"onClear_");l(this,"eventManager_");l(this,"recognition_");l(this,"version_");l(this,"active_");this.translatorController_=e,this.timer_=t,this.onText_=i,this.onClear_=r,this.eventManager_=new ue,this.recognition_=null,this.version_=0,this.active_=!1}async start(e,t,i){this.stop(),this.version_++;let r=this.version_;this.active_=!0;let s=window.SpeechRecognition||window.webkitSpeechRecognition,n=new s;if(this.recognition_=n,n.lang=t,n.continuous=!0,n.interimResults=!0,i&&"install"in s&&"available"in s)try{switch(await s.available({langs:[t],processLocally:!0})){case"available":n.processLocally=!0;break;case"downloading":case"downloadable":await s.install({langs:[t],processLocally:!0}),n.processLocally=!0;break;default:return}}catch(o){p.error("SpeechRecognition processLocally error",o)}if(r!==this.version_)return;let a=!1;this.eventManager_.listen(n,"start",()=>{r===this.version_&&this.timer_.tickAfter(5)}),this.eventManager_.listen(n,"result",async o=>{if(r!==this.version_)return;let c=o,d="";for(let m=c.resultIndex;m<c.results.length;m++)d+=c.results[m][0].transcript;let u=await this.translatorController_.translate(d);u===null||r!==this.version_||(this.onText_(u),this.timer_.tickAfter(.75))}),this.eventManager_.listen(n,"error",o=>{if(r!==this.version_)return;a=!0,this.onClear_(),o.error=="network"&&this.timer_.tickAfter(30)}),this.eventManager_.listen(n,"end",()=>{!this.active_||r!==this.version_||a||this.start(e,t,i)}),n.start(e)}stop(e=!0){this.version_++,this.active_=!1,this.eventManager_.removeAll(),this.timer_.stop(),this.recognition_&&(this.recognition_.stop(),this.recognition_=null),e&&this.onClear_()}release(){this.stop(),this.translatorController_.release()}isActive(){return this.active_}},io=class{constructor(){l(this,"translator_");l(this,"abortController_");l(this,"setupVersion_");l(this,"translationVersion_");l(this,"lastSource_");l(this,"lastTarget_");this.translator_=null,this.abortController_=null,this.setupVersion_=0,this.translationVersion_=0,this.lastSource_=null,this.lastTarget_=null}async setup(e,t){if(this.lastSource_===e&&this.lastTarget_===t&&this.translator_)return;this.release(),this.setupVersion_++;let i=this.setupVersion_;if(!(!t||e==t||!("Translator"in window))){this.abortController_=new AbortController;try{let r=await Translator.create({sourceLanguage:e,targetLanguage:t,signal:this.abortController_.signal});if(i!==this.setupVersion_){r.destroy();return}this.translator_=r,this.lastSource_=e,this.lastTarget_=t}catch(r){if(r.name=="NotSupportedError")throw r}}}async translate(e){if(!this.translator_)return e;this.translationVersion_++;let t=this.translationVersion_;try{let i=await this.translator_.translate(e);return t!==this.translationVersion_?null:i}catch(i){return null}}release(){var e,t;(e=this.abortController_)==null||e.abort(),this.abortController_=null,(t=this.translator_)==null||t.destroy(),this.translator_=null,this.lastSource_=null,this.lastTarget_=null}};/*! @license
|
|
454
454
|
* Shaka Player
|
|
455
455
|
* Copyright 2016 Google LLC
|
|
456
456
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -487,7 +487,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
487
487
|
* Shaka Player
|
|
488
488
|
* Copyright 2016 Google LLC
|
|
489
489
|
* SPDX-License-Identifier: Apache-2.0
|
|
490
|
-
*/var Q=class Q extends Be{constructor(t,i=null,r){super();l(this,"loadMode_");l(this,"video_");l(this,"videoContainer_");l(this,"isTextVisible_");l(this,"globalEventManager_");l(this,"attachEventManager_");l(this,"loadEventManager_");l(this,"trickPlayEventManager_");l(this,"adManagerEventManager_");l(this,"networkingEngine_");l(this,"drmEngine_");l(this,"mediaSourceEngine_");l(this,"playhead_");l(this,"operationId_");l(this,"mutex_");l(this,"playheadObservers_");l(this,"playRateController_");l(this,"bufferPoller_");l(this,"bufferObserver_");l(this,"regionTimeline_");l(this,"metadataRegionTimeline_");l(this,"emsgRegionTimeline_");l(this,"cmcdManager_");l(this,"cmsdManager_");l(this,"lcevcCanvas_");l(this,"lcevcDec_");l(this,"qualityObserver_");l(this,"streamingEngine_");l(this,"parser_");l(this,"parserFactory_");l(this,"manifest_");l(this,"assetUri_");l(this,"mimeType_");l(this,"startTime_");l(this,"fullyLoaded_");l(this,"abrManager_");l(this,"abrManagerFactory_");l(this,"nextExternalStreamId_");l(this,"externalSrcEqualsThumbnailsStreams_");l(this,"deferredCloseSegmentIndex_");l(this,"externalSrcEqualsChapterStreams_");l(this,"completionPercent_");l(this,"config_");l(this,"lowLatencyConfig_");l(this,"currentTargetLatency_");l(this,"rebufferingCount_");l(this,"targetLatencyReached_");l(this,"maxHwRes_");l(this,"manifestFilterer_");l(this,"createdPreloadManagers_");l(this,"stats_");l(this,"currentAdaptationSetCriteria_");l(this,"cleanupOnUnload_");l(this,"adManager_");l(this,"queueManager_");l(this,"preloadDueAdManager_");l(this,"preloadDueAdManagerVideo_");l(this,"preloadDueAdManagerVideoEnded_");l(this,"externalSrcEqualsTextTracks_");l(this,"preloadDueAdManagerTimer_");l(this,"checkVariantsTimer_");l(this,"preloadNextUrl_");l(this,"textDisplayer_");l(this,"speechToText_");l(this,"pendingExtraTrackPromises_");l(this,"frameHandler_");l(this,"operationManager_");l(this,"playbackObjectUrl_");l(this,"lastTextFactory_");this.loadMode_=Q.LoadMode.NOT_LOADED,this.video_=null,this.videoContainer_=i,this.isTextVisible_=!1,this.globalEventManager_=new ue,this.attachEventManager_=new ue,this.loadEventManager_=new ue,this.trickPlayEventManager_=new ue,this.adManagerEventManager_=new ue,this.networkingEngine_=null,this.drmEngine_=null,this.mediaSourceEngine_=null,this.playhead_=null,this.operationId_=0,this.mutex_=new Zr,this.playheadObservers_=null,this.playRateController_=null,this.bufferPoller_=null,this.bufferObserver_=null,this.regionTimeline_=null,this.metadataRegionTimeline_=null,this.emsgRegionTimeline_=null,this.cmcdManager_=null,this.cmsdManager_=null,this.lcevcCanvas_=null,this.lcevcDec_=null,this.qualityObserver_=null,this.streamingEngine_=null,this.parser_=null,this.parserFactory_=null,this.manifest_=null,this.assetUri_=null,this.mimeType_=null,this.startTime_=null,this.fullyLoaded_=!1,this.abrManager_=null,this.abrManagerFactory_=null,this.nextExternalStreamId_=1e9,this.externalSrcEqualsThumbnailsStreams_=[],this.deferredCloseSegmentIndex_=new Map,this.externalSrcEqualsChapterStreams_=[],this.completionPercent_=-1,this.config_=this.defaultConfig_(),this.lowLatencyConfig_=st.createDefaultForLL(),this.currentTargetLatency_=null,this.rebufferingCount_=-1,this.targetLatencyReached_=null,this.lastTextFactory_,this.maxHwRes_={width:1/0,height:1/0},this.manifestFilterer_=new Rr(this.config_,this.maxHwRes_,null),this.createdPreloadManagers_=[],this.stats_=null,this.currentAdaptationSetCriteria_=this.config_.adaptationSetCriteriaFactory();let s={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem()};st.addDeprecatedConfigFields(s),this.currentAdaptationSetCriteria_.configure(s),this.cleanupOnUnload_=[],r&&r(this),this.cmcdManager_=this.createCmcd_(),this.cmsdManager_=this.createCmsd_(),this.networkingEngine_=this.createNetworkingEngine(),this.adManager_=null,this.queueManager_=null,this.preloadDueAdManager_=null,this.preloadDueAdManagerVideo_=null,this.preloadDueAdManagerVideoEnded_=!1,this.externalSrcEqualsTextTracks_=[],this.preloadDueAdManagerTimer_=new ae(async()=>{this.preloadDueAdManager_&&(v.assert(this.preloadDueAdManagerVideo_,"Must have video"),await this.attach(this.preloadDueAdManagerVideo_,!0),await this.load(this.preloadDueAdManager_),this.preloadDueAdManagerVideoEnded_?this.preloadDueAdManagerVideo_.pause():this.preloadDueAdManagerVideo_.play(),this.preloadDueAdManager_=null,this.preloadDueAdManagerVideoEnded_=!1)}),Q.adManagerFactory_&&(this.adManager_=Q.adManagerFactory_(this),this.adManager_.configure(this.config_.ads),this.adManagerEventManager_.listen(this.adManager_,"ad-content-pause-requested",async n=>{if(this.preloadDueAdManagerTimer_.stop(),!this.preloadDueAdManager_){this.preloadDueAdManagerVideo_=this.video_,this.preloadDueAdManagerVideoEnded_=this.isEnded();let a=n.saveLivePosition||!1,o=!0;this.isLive()&&(o=a),this.preloadDueAdManager_=await this.detachAndSavePreload(!0,o)}}),this.adManagerEventManager_.listen(this.adManager_,"ad-content-resume-requested",n=>{let a=n.offset||0;this.preloadDueAdManager_&&this.preloadDueAdManager_.setOffsetToStartTime(a),this.preloadDueAdManagerTimer_.tickAfter(.1)}),this.adManagerEventManager_.listen(this.adManager_,"ad-content-attach-requested",async n=>{!this.video_&&this.preloadDueAdManagerVideo_&&(await this.attach(this.preloadDueAdManagerVideo_,!0),this.preloadDueAdManagerVideo_=null)})),Q.queueManagerFactory_&&(this.queueManager_=Q.queueManagerFactory_(this),this.queueManager_.configure(this.config_.queue)),this.globalEventManager_.listen(window,"online",()=>{this.restoreDisabledVariants_(),this.retryStreaming()}),this.checkVariantsTimer_=new ae(()=>this.checkVariants_()),this.preloadNextUrl_=null,this.textDisplayer_=null,this.speechToText_=null,this.pendingExtraTrackPromises_=new Set,this.frameHandler_=null,this.operationManager_=new fi,this.playbackObjectUrl_=null,t&&(p.alwaysWarn("Please migrate from initializing Player with a mediaElement; use the attach method instead."),this.attach(t,!0))}createLcevcDec_(t,i){this.lcevcDec_==null&&(this.lcevcDec_=new xr(this.video_,this.lcevcCanvas_,t,i),this.mediaSourceEngine_&&this.mediaSourceEngine_.updateLcevcDec(this.lcevcDec_))}closeLcevcDec_(){this.lcevcDec_!=null&&(this.lcevcDec_.hideCanvas(),this.lcevcDec_.release(),this.lcevcDec_=null)}setupLcevc_(t,i){i||t.lcevc.enabled?(this.closeLcevcDec_(),this.createLcevcDec_(t.lcevc,i)):this.closeLcevcDec_()}static makeEvent_(t,i){return new U(t,i)}async destroy(){if(this.loadMode_==Q.LoadMode.DESTROYED)return;this.closeLcevcDec_();let t=this.detach();this.loadMode_=Q.LoadMode.DESTROYED,await t,await this.destroyAllPreloads(),this.globalEventManager_&&(this.globalEventManager_.release(),this.globalEventManager_=null),this.attachEventManager_&&(this.attachEventManager_.release(),this.attachEventManager_=null),this.loadEventManager_&&(this.loadEventManager_.release(),this.loadEventManager_=null),this.trickPlayEventManager_&&(this.trickPlayEventManager_.release(),this.trickPlayEventManager_=null),this.adManagerEventManager_&&(this.adManagerEventManager_.release(),this.adManagerEventManager_=null),this.abrManagerFactory_=null,this.config_=null,this.stats_=null,this.videoContainer_=null,this.cmcdManager_=null,this.cmsdManager_=null,this.networkingEngine_&&(await this.networkingEngine_.destroy(),this.networkingEngine_=null),this.abrManager_&&(this.abrManager_.release(),this.abrManager_=null),this.queueManager_&&(this.queueManager_.destroy(),this.queueManager_=null),this.speechToText_&&(this.speechToText_.release(),this.speechToText_=null),this.frameHandler_&&(this.frameHandler_.release(),this.frameHandler_=null),super.release()}static registerSupportPlugin(t,i){Q.supportPlugins_.set(t,i)}static setAdManagerFactory(t){Q.adManagerFactory_=t}static setQueueManagerFactory(t){Q.queueManagerFactory_=t}static isBrowserSupported(){if(window.Promise||p.alwaysWarn("A Promise implementation or polyfill is required"),!(!!window.Promise&&!!window.Uint8Array&&!!Array.prototype.forEach)||(navigator.userAgent||"").includes("Trident/"))return!1;let r=j.getDevice();return r.supportsMediaSource()?!0:r.supportsMediaType("application/x-mpegurl")}static async probeSupport(t=!0){v.assert(Q.isBrowserSupported(),"Must have basic support");let i={};t&&(i=await Bi.probeSupport());let r=me.probeSupport(),s=cr.probeSupport(),n=j.getDevice();v.assert(n,"device must be non-null");let a=await n.detectMaxHardwareResolution(),o={manifest:r,media:s,drm:i,hardwareResolution:a};return Q.supportPlugins_.forEach((d,u)=>{o[u]=d()}),o}makeStateChangeEvent_(t){this.dispatchEvent(Q.makeEvent_(U.EventName.OnStateChange,new Map().set("state",t)))}async attach(t,i=!0){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();let r=this.video_&&this.video_==t;if(this.video_&&this.video_!=t&&await this.detach(),!await this.atomicOperationAcquireMutex_("attach"))try{if(!r){this.makeStateChangeEvent_("attach");let n=a=>this.onVideoError_(a);this.attachEventManager_.listen(t,"error",n),this.video_=t,this.cmcdManager_&&this.cmcdManager_.setMediaElement(t)}let s=j.getDevice();i&&s.supportsMediaSource()&&!this.mediaSourceEngine_&&await this.initializeMediaSourceEngineInner_()}catch(s){throw await this.detach(),s}finally{this.mutex_.release()}}attachCanvas(t){this.lcevcCanvas_=t}async detach(t=!1,i=!1){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();if(await this.unload(!1,t,i),!await this.atomicOperationAcquireMutex_("detach"))try{this.video_&&(this.attachEventManager_.removeAll(),this.video_=null),this.makeStateChangeEvent_("detach"),this.adManager_&&!t&&this.adManager_.release()}finally{this.mutex_.release()}}async atomicOperationAcquireMutex_(t){let i=++this.operationId_;return await this.mutex_.acquire(t),i!=this.operationId_?(this.mutex_.release(),!0):!1}async unload(t=!0,i=!1,r=!1){if(this.loadMode_!=Q.LoadMode.DESTROYED&&(this.loadMode_=Q.LoadMode.NOT_LOADED),await this.atomicOperationAcquireMutex_("unload"))return;try{this.fullyLoaded_=!1,this.makeStateChangeEvent_("unload"),this.closeLcevcDec_();let n=this.cleanupOnUnload_.map(o=>o());this.cleanupOnUnload_=[],await Promise.all(n);let a=new Map().set("isSwitchingContent",r);if(this.dispatchEvent(Q.makeEvent_(U.EventName.Unloading,a)),this.regionTimeline_&&(this.regionTimeline_.release(),this.regionTimeline_=null),this.metadataRegionTimeline_&&(this.metadataRegionTimeline_.release(),this.metadataRegionTimeline_=null),this.emsgRegionTimeline_&&(this.emsgRegionTimeline_.release(),this.emsgRegionTimeline_=null),this.video_&&(this.loadEventManager_.removeAll(),this.trickPlayEventManager_.removeAll()),this.checkVariantsTimer_.stop(),this.playheadObservers_&&(this.playheadObservers_.release(),this.playheadObservers_=null),this.bufferPoller_&&(this.bufferPoller_.stop(),this.bufferPoller_=null),this.parser_&&(await this.parser_.stop(),this.parser_=null,this.parserFactory_=null),this.abrManager_&&this.abrManager_.stop(),this.streamingEngine_&&(await this.streamingEngine_.destroy(),this.streamingEngine_=null),this.playRateController_&&(this.playRateController_.release(),this.playRateController_=null),this.playhead_&&(this.playhead_.release(),this.playhead_=null),de.isMediaKeysPolyfilled("webkit")&&this.drmEngine_&&(await this.drmEngine_.destroy(),this.drmEngine_=null),this.mediaSourceEngine_&&(await this.mediaSourceEngine_.destroy(),this.mediaSourceEngine_=null),this.adManager_&&!i&&this.adManager_.onAssetUnload(),this.preloadDueAdManager_&&!i&&(this.preloadDueAdManager_.destroy(),this.preloadDueAdManager_=null),i||this.preloadDueAdManagerTimer_.stop(),this.cmcdManager_&&this.cmcdManager_.reset(),this.cmsdManager_&&this.cmsdManager_.reset(),this.textDisplayer_&&(await this.textDisplayer_.destroy(),this.textDisplayer_=null),this.isTextVisible_=!1,this.speechToText_&&this.speechToText_.disable(),this.pendingExtraTrackPromises_.clear(),this.frameHandler_&&(this.frameHandler_.release(),this.frameHandler_=null),await this.operationManager_.destroy(),this.video_){for(let o of this.externalSrcEqualsTextTracks_)o.src.startsWith("blob:")&&URL.revokeObjectURL(o.src),o.remove();this.externalSrcEqualsTextTracks_=[],Ke.clearSourceFromVideo(this.video_)&&this.video_.load()}if(this.drmEngine_&&(await this.drmEngine_.destroy(),this.drmEngine_=null),this.preloadNextUrl_&&this.assetUri_!=this.preloadNextUrl_.getAssetUri()&&(this.preloadNextUrl_.isDestroyed()||this.preloadNextUrl_.destroy(),this.preloadNextUrl_=null),this.assetUri_=null,this.mimeType_=null,this.bufferObserver_=null,this.manifest_){for(let o of this.manifest_.variants)for(let c of[o.audio,o.video])c&&c.segmentIndex&&c.segmentIndex.release();for(let o of this.manifest_.textStreams)o.segmentIndex&&o.segmentIndex.release()}this.config_&&this.config_.streaming.clearDecodingCache&&(re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap()),this.manifest_=null,this.stats_=new tr,this.lastTextFactory_=null,this.targetLatencyReached_=null,this.currentTargetLatency_=null,this.rebufferingCount_=-1,this.externalSrcEqualsThumbnailsStreams_=[];for(let o of this.deferredCloseSegmentIndex_.values())o.stop();this.deferredCloseSegmentIndex_.clear(),this.externalSrcEqualsChapterStreams_=[],this.completionPercent_=-1,this.networkingEngine_&&this.networkingEngine_.clearCommonAccessTokenMap(),this.playbackObjectUrl_&&(URL.revokeObjectURL(this.playbackObjectUrl_),this.playbackObjectUrl_=null),this.updateBufferState_()}finally{this.mutex_.release()}let s=j.getDevice();t&&s.supportsMediaSource()&&!this.mediaSourceEngine_&&this.video_&&await this.initializeMediaSourceEngineInner_()}updateStartTime(t){this.startTime_=t}async load(t,i=null,r){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();!this.video_&&this.preloadDueAdManagerVideo_&&(await this.attach(this.preloadDueAdManagerVideo_,!0),this.preloadDueAdManagerVideo_=null);let s=null,n="";if(r=r==null?void 0:r.toLowerCase(),t instanceof ks){if(t.isDestroyed())throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.PRELOAD_DESTROYED);s=t,n=s.getAssetUri()||""}else n=t||"";if(await this.mutex_.acquire("load"),this.mutex_.release(),!this.video_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.NO_VIDEO_ELEMENT);this.assetUri_&&(this.assetUri_=n,await this.unload(!1,!1,!0)),this.cmcdManager_&&this.cmcdManager_.onLoad();let a=++this.operationId_,o=async()=>{if(this.operationId_!=a)throw s&&await s.destroy(),this.createAbortLoadError_()},c=async(d,u)=>{try{await this.mutex_.acquire(u),await o(),await d(),await o(),s&&this.config_&&s.reconfigure(this.config_)}finally{this.mutex_.release()}};try{i==null&&s&&(i=s.getStartTime()),this.startTime_=i,this.fullyLoaded_=!1,this.assetUri_=n,this.dispatchEvent(Q.makeEvent_(U.EventName.Loading)),s?r=s.getMimeType():r||await c(async()=>{r=await this.guessMimeType_(n)},"guessMimeType_");let d=!!s;s?(s.setEventHandoffTarget(this),this.stats_=s.getStats()):(s=await this.preloadInner_(n,i,r,!0,this.config_),s?(s.markIsLoad(),s.setEventHandoffTarget(this),this.stats_=s.getStats(),s.start(),s.waitForFinish().catch(()=>{})):this.stats_=new tr);let u=!s,m=Date.now()/1e3;this.stats_=s?s.getStats():new tr,this.mimeType_=r||null,this.updateBufferState_();let f=()=>{let g=this.video_?this.video_.buffered:null;return{start:Je.bufferStart(g)||0,end:Je.bufferEnd(g)||0}};if(this.metadataRegionTimeline_=new zr(f),this.metadataRegionTimeline_.addEventListener("regionadd",g=>{let _=g.region;this.dispatchMetadataEvent_(_,U.EventName.MetadataAdded)}),u)await c(async()=>{v.assert(r,"We should know the mimeType by now!"),await this.initializeSrcEqualsDrmInner_(r)},"initializeSrcEqualsDrmInner_"),await c(async()=>{v.assert(r,"We should know the mimeType by now!"),await this.srcEqualsInner_(m,r)},"srcEqualsInner_");else{this.emsgRegionTimeline_=new zr(f),await c(async()=>{await s.waitForManifest(),this.parserFactory_=s.getParserFactory(),this.parser_=s.receiveParser(),this.manifest_=s.getManifest()},"waitForFinish"),this.mediaSourceEngine_||await c(async()=>{await this.initializeMediaSourceEngineInner_()},"initializeMediaSourceEngineInner_"),await c(async()=>{await s.waitForFinish()},"waitForFinish"),this.config_=s.getConfiguration(),this.manifestFilterer_=s.getManifestFilterer(),this.parser_&&this.parser_.setMediaElement&&this.video_&&this.parser_.setMediaElement(this.video_),this.regionTimeline_=s.receiveRegionTimeline(),this.qualityObserver_=s.getQualityObserver();let g=s.getCurrentAdaptationSetCriteria();if(g&&(this.currentAdaptationSetCriteria_=g),d&&this.video_&&this.video_.nodeName==="AUDIO"&&(this.makeManifestAudioOnly_(),this.configure("manifest.disableVideo",!0)),s.getDrmEngine()||await c(async()=>{await s.initializeDrm(this.video_)},"drmEngine_.init"),this.drmEngine_=s.receiveDrmEngine(),await c(async()=>{await this.drmEngine_.attach(this.video_)},"drmEngine_.attach"),this.currentAdaptationSetCriteria_){let S=this.currentAdaptationSetCriteria_.getConfiguration();S.keySystem=this.keySystem(),this.currentAdaptationSetCriteria_.configure(S)}let _=this.config_.abrFactory;(!this.abrManager_||this.abrManagerFactory_!=_)&&(this.abrManagerFactory_=_,this.abrManager_&&this.abrManager_.release(),this.abrManager_=_(),this.abrManager_.configure(this.config_.abr));let T=s.receiveSegmentPrefetchesById(),b=s.getPrefetchedVariant();await c(async()=>{await this.loadInner_(m,b,T)},"loadInner_"),s.stopQueuingLatePhaseQueuedOperations(),this.mimeType_&&j.getDevice().supportsAirPlay()&&O.isHlsType(this.mimeType_)&&this.mediaSourceEngine_.addSecondarySource(this.assetUri_,this.mimeType_)}this.dispatchEvent(Q.makeEvent_(U.EventName.Loaded))}catch(d){throw d&&d.code!=h.Code.LOAD_INTERRUPTED&&await this.unload(!1),d}finally{s&&await s.destroy(),this.preloadNextUrl_=null}}makeManifestAudioOnly_(){for(let t of this.manifest_.variants)t.video&&(t.video.closeSegmentIndex(),t.video=null),t.audio&&t.audio.bandwidth?t.bandwidth=t.audio.bandwidth:t.bandwidth=0;this.manifest_.variants=this.manifest_.variants.filter(t=>t.audio)}async unloadAndSavePreload(t=!0,i=!1,r=!1,s=!1){let n=await this.savePreload_(r);return await this.unload(t,i,s),n}async detachAndSavePreload(t=!1,i=!1,r=!1){let s=await this.savePreload_(i);return await this.detach(t,r),s}async savePreload_(t=!1){let i=null;if(this.manifest_&&this.parser_&&this.parserFactory_&&this.assetUri_&&this.config_){let r=this.video_.currentTime;t||(r=null),i=await this.makePreloadManager_(this.assetUri_,r,this.mimeType_,this.config_,!0,!1),this.createdPreloadManagers_.push(i),this.parser_&&this.parser_.setMediaElement&&this.parser_.setMediaElement(null);let s=this.streamingEngine_?this.streamingEngine_.getCurrentVariant():null;s&&i.setPrefetchVariant(s),i.attachManifest(this.manifest_,this.parser_,this.parserFactory_),i.attachAdaptationSetCriteria(this.currentAdaptationSetCriteria_),i.start(),this.manifest_=null,this.parser_=null,this.parserFactory_=null,this.abrManager_=null,this.abrManagerFactory_=null}return i}async preload(t,i=null,r,s,n=!1){v.assert(this.config_,"Config must not be null!"),r=r==null?void 0:r.toLowerCase();let a=this.defaultConfig_();st.mergeConfigObjects(a,s||this.config_,this.defaultConfig_());let o=await this.preloadInner_(t,i,r,!1,a);if(o)o.start();else{let c=new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.SRC_EQUALS_PRELOAD_NOT_SUPPORTED);if(n)throw c;this.onError_(c)}return o}async destroyAllPreloads(){let t=[];for(let i of this.createdPreloadManagers_)i.isDestroyed()||t.push(i.destroy());this.createdPreloadManagers_=[],await Promise.all(t)}async preloadInner_(t,i,r,s=!1,n){if(v.assert(this.networkingEngine_,"Should have a net engine!"),v.assert(this.config_,"Config must not be null!"),r||(r=await this.guessMimeType_(t)),this.shouldUseSrcEquals_(r))return null;let o=n||this.config_,c=!1;s&&this.video_&&this.video_.nodeName==="AUDIO"&&(c=!0);let d=this.makePreloadManager_(t,i,r||null,o,!s,c);return s?d=d.then(u=>(u.markIsLoad(),u)):d=d.then(u=>(this.createdPreloadManagers_.push(u),u)),d}async makePreloadManager_(t,i,r,s,n=!0,a=!1){v.assert(this.networkingEngine_,"Must have net engine");let o=null,c=Fe.cloneObject(s);a&&(c.manifest.disableVideo=!0);let d=()=>(v.assert(o,"Must have preload manager"),o.hasBeenAttached()&&o.isDestroyed()?null:o),u=()=>d()?d().getConfiguration():this.config_;if(this.maxHwRes_.width==1/0&&this.maxHwRes_.height==1/0&&!this.config_.ignoreHardwareResolution){let A=j.getDevice();v.assert(A,"device must be non-null");let x=await A.detectMaxHardwareResolution();this.maxHwRes_.width=x.width,this.maxHwRes_.height=x.height}let m=new Rr(c,this.maxHwRes_,null),f={networkingEngine:this.networkingEngine_,filter:async A=>{if(await m.filterManifest(A)){let M=Q.makeEvent_(U.EventName.TracksChanged);await Promise.resolve(),o.dispatchEvent(M)}},makeTextStreamsForClosedCaptions:A=>this.makeTextStreamsForClosedCaptions_(A),onTimelineRegionAdded:A=>{o.getRegionTimeline().addRegion(A)},onEvent:A=>o.dispatchEvent(A),onError:A=>o.onError(A),isLowLatencyMode:()=>u().streaming.lowLatencyMode,updateDuration:()=>{this.streamingEngine_&&o.hasBeenAttached()&&this.streamingEngine_.updateDuration()},newDrmInfo:A=>{let x=o.getDrmEngine(),M=x?x.getDrmInfo():null;M&&x.getMediaKeys()&&m.processDrmInfos(M.keySystem,A)},onManifestUpdated:()=>{let A=U.EventName.ManifestUpdated,x=new Map().set("isLive",this.isLive()).set("isInProgress",this.isInProgress());o.dispatchEvent(Q.makeEvent_(A,x)),o.addQueuedOperation(!1,()=>{this.adManager_&&this.adManager_.onManifestUpdated(this.isDynamic())})},getBandwidthEstimate:()=>this.abrManager_.getBandwidthEstimate(),onMetadata:(A,x,M,C)=>{let k=A;(A=="com.apple.hls.interstitial"||A=="com.apple.hls.overlay")&&(k="com.apple.quicktime.HLS");let L={type:k,startTime:x,endTime:M,values:C},V=new Promise(ee=>{o.addQueuedOperation(!1,async()=>{if(this.adManager_){if(this.video_)try{await this.adManager_.onHLSMetadata(L)}catch(oe){}ee()}})});for(let ee of C)ee.name!="ID"&&o.addQueuedOperation(!1,()=>{this.addMetadataToRegionTimeline_(x,M,k,ee)});return V},disableStream:A=>this.disableStream(A,this.config_.streaming.maxDisabledTime),addFont:(A,x)=>this.addFont(A,x),getStreamingRetryParameters:()=>this.config_.streaming.retryParameters,onSegmentReceived:(A,x)=>{o.addQueuedOperation(!1,()=>{var M;(M=this.abrManager_)==null||M.segmentDownloaded(A,x,!0)})}},g=new zr(()=>this.seekRange());g.addEventListener("regionadd",A=>{let x=A.region;this.onRegionEvent_(U.EventName.TimelineRegionAdded,x,o),o.addQueuedOperation(!1,()=>{this.adManager_&&this.adManager_.onDASHMetadata(x)})});let _=null;c.streaming.observeQualityChanges&&(_=new dr(()=>this.getBufferedInfo()),_.addEventListener("qualitychange",A=>{let x=A.quality,M=A.position;this.onMediaQualityChange_(x,M)}),_.addEventListener("audiotrackchange",A=>{let x=A.quality,M=A.position;this.onMediaQualityChange_(x,M,!0)}));let T=!0,b={netEngine:this.networkingEngine_,onError:A=>o.onError(A),onKeyStatus:A=>{o.addQueuedOperation(!0,()=>{this.drmEngine_&&this.onKeyStatus_(A)})},onExpirationUpdated:(A,x)=>{let M=Q.makeEvent_(U.EventName.ExpirationUpdated);o.dispatchEvent(M);let C=o.getParser();C&&C.onExpirationUpdated&&C.onExpirationUpdated(A,x)},onEvent:A=>{if(o.dispatchEvent(A),A.type==U.EventName.DrmSessionUpdate&&T){T=!1;let M=Date.now()/1e3-o.getStartTimeOfDRM();(this.stats_||o.getStats()).setDrmTime(M),this.lcevcDec_&&this.lcevcDec_.hideCanvas()}}},S=this.createNetworkingEngine(d);this.networkingEngine_.copyFiltersInto(S);let w={config:c,manifestPlayerInterface:f,regionTimeline:g,qualityObserver:_,createDrmEngine:()=>this.createDrmEngine(b),manifestFilterer:m,networkingEngine:S,allowPrefetch:n};return o=new ks(t,r,i,w),o}async guessMimeType_(t){v.assert(this.networkingEngine_,"Should have a net engine!");let i=this.config_.manifest.retryParameters,r=await ct.getMimeType(t,this.networkingEngine_,i);return O.isHlsType(r)?j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(r="application/vnd.apple.mpegurl"):r==="video/quicktime"&&j.getDevice().getBrowserEngine()===ie.BrowserEngine.CHROMIUM&&(r="video/mp4"),r}shouldUseSrcEquals_(t){if(!j.getDevice().supportsMediaSource())return!0;if(t){let s=(this.video_||Ke.anyMediaElement()).canPlayType(t)!="";if(!s)return!1;let n=me.isSupported(t);return n?(v.assert(s&&n,"Both native and MSE playback should be possible!"),O.isHlsType(t)?j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(this.config_.drm.servers["com.apple.fps"]||this.config_.drm.servers["com.apple.fps.1_0"])?this.config_.streaming.useNativeHlsForFairPlay:this.config_.streaming.preferNativeHls:O.isDashType(t)?this.config_.streaming.preferNativeDash:!1):!0}return!1}createAndConfigureTextDisplayer_(t=!1){let i=this.config_.textDisplayFactory;if(this.lastTextFactory_!==i||t){let r=this.textDisplayer_;this.textDisplayer_=i(this),this.textDisplayer_.configure(this.config_.textDisplayer),r?(this.textDisplayer_.setTextVisibility(r.isTextVisible()),r.destroy().catch(()=>{})):this.textDisplayer_.setTextVisibility(this.isTextVisible_),this.mediaSourceEngine_&&this.mediaSourceEngine_.setTextDisplayer(this.textDisplayer_),this.lastTextFactory_=i,this.streamingEngine_&&this.streamingEngine_.reloadTextStream()}else this.textDisplayer_&&this.textDisplayer_.configure(this.config_.textDisplayer)}async initializeMediaSourceEngineInner_(){let t=j.getDevice();v.assert(t.supportsMediaSource(),"We should not be initializing media source on a platform that does not support media source."),v.assert(this.video_,"We should have a media element when initializing media source."),v.assert(this.mediaSourceEngine_==null,"We should not have a media source engine yet."),this.makeStateChangeEvent_("media-source"),this.config_.mediaSource.useSourceElements&&Ke.clearSourceFromVideo(this.video_),this.createAndConfigureTextDisplayer_(),v.assert(this.textDisplayer_,"Text displayer should be created already");let i=this.createMediaSourceEngine(this.video_,this.textDisplayer_,{getKeySystem:()=>this.keySystem(),onMetadata:(s,n,a)=>{this.processTimedMetadataMediaSrc_(s,n,a)},onEmsg:s=>{this.addEmsgToRegionTimeline_(s)},onEvent:s=>this.dispatchEvent(s),onManifestUpdate:()=>this.onManifestUpdate_(),getDrmInfo:()=>this.drmInfo()},this.lcevcDec_,this.config_.mediaSource),{segmentRelativeVttTiming:r}=this.config_.manifest;i.setSegmentRelativeVttTiming(r),await i.open(),this.mediaSourceEngine_=i}setupPlayRateController_(t){this.playRateController_=new hn({getRate:()=>t.playbackRate,getDefaultRate:()=>t.defaultPlaybackRate,setRate:i=>{t.playbackRate=i},movePlayhead:i=>{let r=t.currentTime;if(!Je.isBuffered(t.buffered,r)||t.readyState<=HTMLMediaElement.HAVE_CURRENT_DATA)return;let s=r+i,n=this.seekRange();if(s<n.start)r!==n.start&&(t.currentTime=n.start);else if(s>n.end)r!==n.end&&(t.currentTime=n.end);else{if(i<0){let o=Je.getBufferedInfo(t.buffered);for(let c=o.length-1;c>=0;c--)if(s>=o[c].start){s>o[c].end&&(s=Math.max(o[c].start,o[c].end-.5));break}}t.currentTime=s}},isPaused:()=>t.paused})}addBasicMediaListeners_(t,i){this.loadEventManager_.listenMulti(t,[Gt.PLAYING,Gt.PAUSE,Gt.ENDED],()=>{this.updateStateHistory_()}),this.loadEventManager_.listen(t,"ratechange",()=>{this.onRateChange_()});let s=j.getDevice().getRemote(t);s&&(this.loadEventManager_.listen(s,"connect",()=>{this.streamingEngine_&&s.state=="connected"&&this.onTextChanged_(),this.onTracksChanged_()}),this.loadEventManager_.listen(s,"connecting",()=>this.onTracksChanged_()),this.loadEventManager_.listen(s,"disconnect",async()=>{this.streamingEngine_&&s.state=="disconnected"&&(await this.streamingEngine_.resetMediaSource(),this.onTextChanged_()),this.onTracksChanged_()})),t.audioTracks&&this.loadEventManager_.listenMulti(t.audioTracks,["addtrack","removetrack","change"],()=>{this.onTracksChanged_()}),t.videoTracks&&this.loadEventManager_.listenMulti(t.videoTracks,["addtrack","removetrack","change"],()=>{this.onTracksChanged_()});let n=t;if((n.webkitPresentationMode||n.webkitSupportsFullscreen)&&this.loadEventManager_.listen(n,"webkitpresentationmodechanged",()=>{this.videoContainer_&&this.createAndConfigureTextDisplayer_(!0)}),t.textTracks){let a=()=>{this.loadMode_===Q.LoadMode.SRC_EQUALS&&this.textDisplayer_ instanceof hr&&this.onTextChanged_(),this.onTracksChanged_()};this.loadEventManager_.listen(t.textTracks,"addtrack",o=>{let c=o;if(c.track){let d=c.track;switch(v.assert(d instanceof TextTrack,"Wrong track type!"),d.kind){case"metadata":this.processTimedMetadata_(d);break;case"chapters":this.activateChaptersTrack_(d);break;default:a();break}}}),this.loadEventManager_.listenMulti(t.textTracks,["removetrack","change"],a)}t.preload!="none"&&(this.loadEventManager_.listenOnce(t,"loadedmetadata",()=>{let o=Date.now()/1e3-i;this.stats_.setLoadLatency(o)}),this.isAudioOnly()||(this.frameHandler_=new es(t),this.frameHandler_.start(()=>{this.frameHandler_.release(),this.frameHandler_=null;let c=Date.now()/1e3-i;this.stats_.setTimeToFirstFrame(c)},!0)||this.loadEventManager_.listenOnce(t,"loadeddata",()=>{let c=Date.now()/1e3-i;this.stats_.setTimeToFirstFrame(c)})))}async loadInner_(t,i,r){v.assert(this.video_,"We should have a media element by now."),v.assert(this.manifest_,"The manifest should already be parsed."),v.assert(this.assetUri_,"We should have an asset uri by now."),v.assert(this.abrManager_,"We should have an abr manager by now."),this.makeStateChangeEvent_("load");let s=this.video_;this.setupPlayRateController_(s),this.addBasicMediaListeners_(s,t),"onchange"in window.screen&&this.loadEventManager_.listen(window.screen,"change",()=>{if(this.currentAdaptationSetCriteria_.getConfiguration){let g=this.currentAdaptationSetCriteria_.getConfiguration();g.preferredVideo.some(T=>T.hdrLevel=="AUTO")?this.updateAbrManagerVariants_():this.config_.preferredVideo.some(b=>b.hdrLevel=="AUTO")&&this.config_.abr.enabled&&(g.preferredVideo=this.config_.preferredVideo,st.addDeprecatedConfigFields(g),this.currentAdaptationSetCriteria_.configure(g),this.updateAbrManagerVariants_())}});let n=!1;for(let g of this.manifest_.variants){let _=g.video&&g.video.dependencyStream;_&&(n=xr.isStreamSupported(_))}this.setupLcevc_(this.config_,n),Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.abrManager_.init((g,_,T)=>this.switch_(g,_,T),(g,_)=>{var S;let T=(S=this.streamingEngine_)==null?void 0:S.getCurrentVariant(),b=T&&T[g];b&&this.disableStream(b,_)}),this.abrManager_.setMediaElement(s),this.abrManager_.setCmsdManager(this.cmsdManager_),this.streamingEngine_=this.createStreamingEngine(),this.streamingEngine_.configure(this.config_.streaming),this.loadMode_=Q.LoadMode.MEDIA_SOURCE,this.dispatchEvent(Q.makeEvent_(U.EventName.Streaming));let a=i,o,c;do{if(c=this.streamingEngine_.getCurrentVariant(),!c){let _=this.chooseVariant_(!0);i||(a=_),v.assert(a,"Must choose an initial variant!")}let g=[];o=c||a;for(let _ of[o.video,o.audio])_&&!_.segmentIndex&&(g.push(_.createSegmentIndex()),_.dependencyStream&&g.push(_.dependencyStream.createSegmentIndex()));g.length>0&&await Promise.all(g)}while(!o||o.disabledUntilTime!=0);this.updateAbrManagerVariants_(),this.parser_&&this.parser_.onInitialVariantChosen&&this.parser_.onInitialVariantChosen(o),this.manifest_.isLowLatency&&(this.config_.streaming.lowLatencyMode?this.configure(this.lowLatencyConfig_):p.alwaysWarn("Low-latency live stream detected, but low-latency streaming mode is not enabled in Shaka Player. Set streaming.lowLatencyMode configuration to true, and see https://bit.ly/3clctcj for details.")),this.cmcdManager_&&(this.cmcdManager_.setLowLatency(this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode),this.cmcdManager_.setStartTimeOfLoad(t*1e3)),Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.streamingEngine_.applyPlayRange(this.config_.playRangeStart,this.config_.playRangeEnd),await this.waitForPendingExtraTrackPromises_(),this.fullyLoaded_=!0,this.dispatchEvent(Q.makeEvent_(U.EventName.CanUpdateStartTime));let d=g=>{this.playhead_=this.createPlayhead(g),this.playheadObservers_=this.createPlayheadObserversForMSE_(g),this.startBufferManagement_(s,!1)};if(!this.config_.streaming.startAtSegmentBoundary){let g=this.startTime_;g==null&&this.manifest_.startTime&&(g=this.manifest_.startTime),d(g)}if(!c){if(v.assert(a,"Must have chosen an initial variant!"),this.config_.streaming.startAtSegmentBoundary){let g=this.manifest_.presentationTimeline,_;if(this.startTime_ instanceof Date){let E=g.getInitialProgramDateTime()||g.getPresentationStartTime();v.assert(E!=null,"Presentation start time should not be null!");let w=this.startTime_.getTime()/1e3-E;w!=null&&(_=w)}_==null&&(_=typeof this.startTime_=="number"?this.startTime_:this.isLive()?1/0:this.video_.currentTime),this.startTime_==null&&this.manifest_.startTime&&(_=this.manifest_.startTime);let T=g.getSeekRangeStart(),b=g.getSeekRangeEnd();_<T?_=T:_>b&&(_=b);let S=await this.adjustStartTime_(a,_);d(S)}this.switchVariant_(a,!0,!1,0)}if(this.playhead_.ready(),!this.getTextTracks().find(g=>g.active)){v.assert(a,"Must have chosen an initial variant!");let g=this.chooseTextStream_(a);g&&(this.addTextStreamToSwitchHistory_(g,!0),this.setInitialTextState_(g)),g&&this.isTextVisible_&&(this.streamingEngine_.switchTextStream(g),this.setTextDisplayerLanguage_())}await this.streamingEngine_.start(r),this.config_.abr.enabled&&(this.abrManager_.enable(),this.onAbrStatusChanged_()),this.onTracksChanged_();let m=this.manifest_.variants.some(g=>g.primary);!this.config_.preferredAudio.length&&!m&&p.warning("No preferred audio language set. We have chosen an arbitrary language initially");let f=this.isDynamic();if(f&&(this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled||this.manifest_.serviceDescription||this.config_.streaming.liveSync.panicMode)||this.config_.streaming.vodDynamicPlaybackRate){let g=()=>this.onTimeUpdate_();this.loadEventManager_.listen(s,"timeupdate",g)}if(!f){let g=()=>this.onVideoProgress_();if(this.loadEventManager_.listen(s,"timeupdate",g),this.onVideoProgress_(),this.manifest_.nextUrl){if(this.config_.streaming.preloadNextUrlWindow>0){let _=async()=>{let T=this.seekRange().end-this.video_.currentTime;isNaN(T)||T<=this.config_.streaming.preloadNextUrlWindow&&(this.loadEventManager_.unlisten(s,"timeupdate",_),v.assert(this.manifest_.nextUrl,"this.manifest_.nextUrl should be valid."),this.preloadNextUrl_=await this.preload(this.manifest_.nextUrl))};this.loadEventManager_.listen(s,"timeupdate",_)}this.loadEventManager_.listen(s,"ended",()=>{this.load(this.preloadNextUrl_||this.manifest_.nextUrl)})}}this.adManager_&&this.adManager_.onManifestUpdated(f)}async initializeSrcEqualsDrmInner_(t){v.assert(this.networkingEngine_,"|onInitializeSrcEqualsDrm_| should never be called after |destroy|"),v.assert(this.config_,"|onInitializeSrcEqualsDrm_| should never be called after |destroy|");let i=Date.now()/1e3,r=!0;this.drmEngine_=this.createDrmEngine({netEngine:this.networkingEngine_,onError:n=>{this.onError_(n)},onKeyStatus:n=>{},onExpirationUpdated:(n,a)=>{let o=Q.makeEvent_(U.EventName.ExpirationUpdated);this.dispatchEvent(o)},onEvent:n=>{if(this.dispatchEvent(n),n.type==U.EventName.DrmSessionUpdate&&r){r=!1;let o=Date.now()/1e3-i;this.stats_.setDrmTime(o)}}}),this.drmEngine_.configure(this.config_.drm);let s=re.createEmptyVariant([t]);this.drmEngine_.setSrcEquals(!0),await this.drmEngine_.initForPlayback([s],[]),await this.drmEngine_.attach(this.video_)}async srcEqualsInner_(t,i){this.makeStateChangeEvent_("src-equals"),v.assert(this.video_,"We should have a media element when loading."),v.assert(this.assetUri_,"We should have a valid uri when loading.");let r=this.video_;this.playhead_=new dn(r);let s=!1;if(this.cleanupOnUnload_.push(()=>{s=!0}),this.dispatchEvent(Q.makeEvent_(U.EventName.CanUpdateStartTime)),this.startTime_!=null&&this.playhead_.setStartTime(this.startTime_),this.playheadObservers_=this.createPlayheadObserversForSrcEquals_(this.startTime_||0),this.setupPlayRateController_(r),this.startBufferManagement_(r,!0),r.textTracks){this.createAndConfigureTextDisplayer_();let m=T=>{if(!(this.textDisplayer_ instanceof hr)){let b=this.getFilteredTextTracks_().find(S=>S.mode!=="disabled");b&&(b.mode=T?"showing":"hidden")}};this.loadEventManager_.listen(r,"enterpictureinpicture",()=>m(!0)),this.loadEventManager_.listen(r,"leavepictureinpicture",()=>m(!1));let g=j.getDevice().getRemote(r);g?this.loadEventManager_.listenMulti(g,["connect","connecting","disconnect"],()=>{m(!1)}):"webkitCurrentPlaybackTargetIsWireless"in r&&this.loadEventManager_.listen(r,"webkitcurrentplaybacktargetiswirelesschanged",()=>m(!1));let _=r;(_.webkitPresentationMode||_.webkitSupportsFullscreen)&&this.loadEventManager_.listen(_,"webkitpresentationmodechanged",()=>{_.webkitPresentationMode?m(_.webkitPresentationMode!=="inline"):_.webkitSupportsFullscreen&&m(_.webkitDisplayingFullscreen)})}this.addBasicMediaListeners_(r,t);let n=this.cmcdManager_.appendSrcData(this.assetUri_,i),a;if(this.mimeType_&&this.config_.streaming.processSrcEqualMetadata&&Pt.supports(this.mimeType_)){let m=!1,f=K.RequestType.MANIFEST,g=this.config_.streaming.retryParameters,_=K.makeRequest([n],g),T=this.networkingEngine_.request(f,_);this.operationManager_.manage(T);let b=S=>{if(S.request===_){let E=S.headers;E["content-length"]&&!E["icy-br"]&&!E["icy-description"]&&!E["icy-genre"]&&!E["icy-name"]&&!E["icy-url"]||(m=!0,T.abort())}};this.addEventListener(U.EventName.DownloadHeadersReceived,b);try{let S=await T.promise;a=D.toUint8(S.data);let E=new Blob([S.data],{type:this.mimeType_});n=URL.createObjectURL(E),this.playbackObjectUrl_=n}catch(S){if(!m)throw S}finally{this.removeEventListener(U.EventName.DownloadHeadersReceived,b)}}!n.includes("#t=")&&(this.config_.playRangeStart>0||isFinite(this.config_.playRangeEnd))&&(n+="#t=",this.config_.playRangeStart>0&&(n+=this.config_.playRangeStart),isFinite(this.config_.playRangeEnd)&&(n+=","+this.config_.playRangeEnd)),this.mediaSourceEngine_&&(await this.mediaSourceEngine_.destroy(),this.mediaSourceEngine_=null),Ke.clearSourceFromVideo(r),r.src=n;let o=j.getDevice();o.getDeviceType()==ie.DeviceType.TV&&r.load(),r.preload!="none"&&!r.autoplay&&O.isHlsType(i)&&o.getBrowserEngine()===ie.BrowserEngine.WEBKIT&&r.load(),this.loadMode_=Q.LoadMode.SRC_EQUALS,this.dispatchEvent(Q.makeEvent_(U.EventName.Streaming));let c=()=>new Promise(m=>{let g=new ae(m);this.loadEventManager_.listen(r.textTracks,"change",()=>g.tickAfter(.5)),g.tickAfter(.5)}),d=Promise.withResolvers();di.waitForReadyState(r,HTMLMediaElement.HAVE_METADATA,this.loadEventManager_,async()=>{this.playhead_.ready(),!this.mimeType_||!O.isHlsType(this.mimeType_)||await c(),d.resolve()}),di.waitForReadyState(r,HTMLMediaElement.HAVE_CURRENT_DATA,this.loadEventManager_,async()=>{if(await c(),s)return;this.setupPreferredAudioOnSrc_();let m=this.getFilteredTextTracks_();if(m.some(f=>f.mode==="showing")&&(this.isTextVisible_=!0,this.textDisplayer_.setTextVisibility(!0)),!(this.textDisplayer_ instanceof hr)){let f=!1;for(let g of m)g.mode!=="disabled"&&(f?(g.mode="disabled",p.alwaysWarn("Found more than one enabled text track, disabling it",g)):(this.enableNativeTrack_(g),f=!0))}this.setupPreferredTextOnSrc_()}),r.error?d.reject(this.videoErrorToShakaError_()):r.preload=="none"&&(p.alwaysWarn('With <video preload="none">, the browser will not load anything until play() is called. We are unable to measure load latency in a meaningful way, and we cannot provide track info yet. Please do not use preload="none" with Shaka Player.'),d.resolve()),this.loadEventManager_.listenOnce(r,"error",()=>{d.reject(this.videoErrorToShakaError_())}),await it.promiseWithTimeout(this.config_.streaming.loadTimeout,d.promise);let u=this.isDynamic();if(u&&(this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled||this.config_.streaming.liveSync.panicMode)||this.config_.streaming.vodDynamicPlaybackRate){let m=()=>this.onTimeUpdate_();this.loadEventManager_.listen(r,"timeupdate",m)}if(!u){let m=()=>this.onVideoProgress_();this.loadEventManager_.listen(r,"timeupdate",m),this.onVideoProgress_()}if(this.adManager_&&(this.adManager_.onManifestUpdated(u),u)){let m=this.seekRange().end;this.loadEventManager_.listen(r,"progress",()=>{let f=this.seekRange().end;m!=f&&(this.adManager_.onManifestUpdated(this.isDynamic()),m=f)})}if(this.mimeType_&&a){let m=Pt.getMetadataFrames(a,this.mimeType_);if(m.length){let g=this.video_.duration,_="org.id3";for(let T of m)this.addMetadataToRegionTimeline_(0,g,_,T)}}await this.waitForPendingExtraTrackPromises_(),this.fullyLoaded_=!0}setupPreferredAudioOnSrc_(){let t=this.config_.preferredAudio;if(t.length&&this.video_&&this.video_.audioTracks){let i=this.getVariantTracks();for(let r of t){if(!r.language)continue;let s=re.filterStreamsByLanguageAndRole(i,r.language,r.role,!1)[0];if(s){this.selectVariantTrack(s);return}}}}setupPreferredTextOnSrc_(){let t=this.getTextTracks();if(t.some(r=>r.active))return;let i=re.filterStreamsByTextPreferences(t,this.config_.preferredText);if(i.length){this.selectTextTrack(i[0]);return}if(this.video_&&this.video_.audioTracks&&this.config_.accessibility.handleForcedSubtitlesAutomatically){let s=Array.from(this.video_.audioTracks).find(n=>n.enabled);if(s&&(i=re.filterStreamsByLanguageAndRole(t,s.language,"",!0),i.length)){this.selectTextTrack(i[0]);return}}this.selectTextTrack(null)}processTimedMetadata_(t){if(t.kind!="metadata")return;t.mode="hidden";let i=()=>{if(t.cues){let s=[];for(let n of t.cues)if(n.startTime!=null&&"type"in n){let a=s.find(o=>o.startTime==n.startTime&&o.endTime==n.endTime);a||(a={type:n.type,startTime:n.startTime,endTime:n.endTime,values:[]},s.push(a)),n.value&&n.value.key=="X-AD-CREATIVE-SIGNALING"&&(a.type="urn:svta:advertising-wg:ad-creative-signaling"),a.values.push(n.value)}for(let n of s)if(this.adManager_){if(n.values.some(o=>o.key=="X-ASSET-URI"||o.key=="X-ASSET-LIST")){let o=n.startTime==0&&!this.isDynamic();n.values.push({key:"CUE",description:"",data:o?"ONCE,PRE":"ONCE",mimeType:null,pictureType:null})}this.adManager_.onHLSMetadata(n)}}};this.loadEventManager_.listen(t,"cuechange",s=>{if(t.activeCues)for(let n of t.activeCues)this.addMetadataToRegionTimeline_(n.startTime,n.endTime,n.type,n.value),this.adManager_&&this.adManager_.onCueMetadataChange(n.value);i()}),i();let r=new ae(()=>{let s=this.getMetadataTracks_();for(let n of s)n.mode="hidden"}).tickNow().tickAfter(.5);this.cleanupOnUnload_.push(()=>{r.stop()})}processTimedMetadataMediaSrc_(t,i,r){for(let s of t)if(s.data&&typeof s.cueTime=="number"&&s.frames){let n=s.cueTime+i,a=r;a&&n>a&&(a=n);let o="org.id3";for(let c of s.frames){let d=c;this.addMetadataToRegionTimeline_(n,a,o,d)}this.adManager_&&this.adManager_.onHlsTimedMetadata(s,n)}}dispatchMetadataEvent_(t,i){let r=new Map().set("startTime",t.startTime).set("endTime",t.endTime).set("metadataType",t.schemeIdUri).set("payload",t.payload);this.dispatchEvent(Q.makeEvent_(i,r))}addMetadataToRegionTimeline_(t,i,r,s){if(!this.metadataRegionTimeline_)return;v.assert(!i||t<=i,"Metadata start time should be less or equal to the end time!");let n={schemeIdUri:r,startTime:t,endTime:i||1/0,id:"",payload:s};n.id=JSON.stringify(n),this.metadataRegionTimeline_.addRegion(n)}dispatchEmsgEvent_(t){let i=U.EventName.Emsg,r=t.emsg,s=new Map().set("detail",r);this.dispatchEvent(Q.makeEvent_(i,s))}addEmsgToRegionTimeline_(t){if(!this.emsgRegionTimeline_)return;let i={schemeIdUri:t.schemeIdUri,startTime:t.startTime,endTime:t.endTime,id:String(t.id),emsg:t};this.emsgRegionTimeline_.addRegion(i)}activateChaptersTrack_(t){if(!t||t.kind!="chapters")return;t.mode="hidden";let i=new ae(()=>{t.mode="hidden"}).tickNow().tickAfter(.5);this.cleanupOnUnload_.push(()=>{i.stop()})}releaseAllMutexes(){this.mutex_.releaseAll()}createDrmEngine(t){return new Bi(t)}createNetworkingEngine(t){t||(t=()=>null);let i=()=>t()?t().getParser():this.parser_,r=_=>{t()?t().addQueuedOperation(!0,_):_()},s=_=>{t()?t().dispatchEvent(_):this.dispatchEvent(_)},n=()=>t()?t().getStats():this.stats_,a=(_,T,b,S,E)=>{r(()=>{this.abrManager_&&this.abrManager_.segmentDownloaded(_,T,b,S,E)})},o=(_,T,b)=>{let S=U.EventName.DownloadHeadersReceived,E=new Map().set("headers",_).set("request",T).set("requestType",b);s(Q.makeEvent_(S,E)),r(()=>{this.cmsdManager_&&this.cmsdManager_.processHeaders(_)})},c=(_,T,b,S)=>{let E=U.EventName.DownloadCompleted,w=new Map().set("requestType",_).set("request",T).set("context",b).set("response",S);s(Q.makeEvent_(E,w))},d=(_,T,b,S,E,w)=>{let A=U.EventName.DownloadFailed,x=new Map().set("requestType",_).set("request",T).set("context",b).set("error",S).set("httpResponseCode",E).set("aborted",w);s(Q.makeEvent_(A,x))},u=(_,T,b)=>{r(()=>{this.cmcdManager_&&this.cmcdManager_.applyRequestData(_,T,b)})},m=(_,T,b,S)=>{let E=i();E&&E.banLocation&&E.banLocation(S)},f=(_,T,b)=>{if(T.data){let S=T.data.byteLength,E=n();E&&(E.addBytesDownloaded(S),_===K.RequestType.MANIFEST&&E.setManifestSize(S)),this.cmcdManager_.applyResponseData(_,T,b)}},g=new K(a,o,c,d,u,m,f);return g.configure(this.config_.networking),g}createPlayhead(t){return v.assert(this.manifest_,"Must have manifest"),v.assert(this.video_,"Must have video"),new un(this.video_,this.manifest_,this.config_.streaming,t,()=>this.onSeek_(),i=>this.dispatchEvent(i),()=>this.getPlaybackRate())}createPlayheadObserversForMSE_(t){v.assert(this.manifest_,"Must have manifest"),v.assert(this.regionTimeline_,"Must have region timeline"),v.assert(this.metadataRegionTimeline_,"Must have metadata region timeline"),v.assert(this.emsgRegionTimeline_,"Must have emsg region timeline"),v.assert(this.video_,"Must have video element");let i=this.isDynamic()||typeof t=="number"&&t>0,r=new Ur(this.regionTimeline_,i);r.addEventListener("enter",c=>{let d=c.region;this.onRegionEvent_(U.EventName.TimelineRegionEnter,d),this.sendEventStreamCallback_(d)}),r.addEventListener("exit",c=>{let d=c.region;this.onRegionEvent_(U.EventName.TimelineRegionExit,d)}),r.addEventListener("skip",c=>{let d=c.region;c.seeking||(this.onRegionEvent_(U.EventName.TimelineRegionEnter,d),this.onRegionEvent_(U.EventName.TimelineRegionExit,d))});let s=new Ur(this.metadataRegionTimeline_,i);s.addEventListener("enter",c=>{let d=c.region;this.dispatchMetadataEvent_(d,U.EventName.Metadata)});let n=new Ur(this.emsgRegionTimeline_,i);n.addEventListener("enter",c=>{let d=c.region;this.dispatchEmsgEvent_(d)});let a=new Tn(this.manifest_.presentationTimeline);a.addEventListener("change",c=>{this.dispatchEvent(Q.makeEvent_(U.EventName.TimelineChanged,new Map([["programDateTime",c.programDateTime],["timestamp",c.timestamp]])))});let o=new xs(this.video_);return o.manage(r),o.manage(s),o.manage(n),o.manage(a),this.qualityObserver_&&o.manage(this.qualityObserver_),o}createPlayheadObserversForSrcEquals_(t){v.assert(this.metadataRegionTimeline_,"Must have metadata region timeline"),v.assert(this.video_,"Must have video element");let i=t instanceof Date||t>0,r=new Ur(this.metadataRegionTimeline_,i);r.addEventListener("enter",n=>{let a=n.region;this.dispatchMetadataEvent_(a,U.EventName.Metadata)});let s=new xs(this.video_);return s.manage(r),s}startBufferManagement_(t,i){let r=Gt;v.assert(!this.bufferObserver_,"No buffering observer should exist before initialization."),v.assert(!this.bufferPoller_,"No buffer timer should exist before initialization."),this.bufferObserver_=new Mr(1,2),this.bufferObserver_.setState(Mr.State.STARVING),this.updateBufferingSettings_(),this.updateBufferState_(),this.bufferPoller_=new ae(()=>{this.pollBufferState_()}),this.config_.streaming.rebufferingGoal&&this.bufferPoller_.tickEvery(.25),this.loadEventManager_.listen(t,r.WAITING,s=>this.pollBufferState_(r.WAITING)),this.loadEventManager_.listen(t,r.CAN_PLAY_THROUGH,s=>this.pollBufferState_(r.CAN_PLAY_THROUGH)),this.loadEventManager_.listen(t,r.PLAYING,s=>this.pollBufferState_(r.PLAYING)),this.loadEventManager_.listen(t,r.SEEKED,s=>this.pollBufferState_(r.SEEKED)),this.loadEventManager_.listen(t,r.TIME_UPDATE,s=>this.pollBufferState_(r.TIME_UPDATE)),i&&(this.loadEventManager_.listen(t,r.PROGRESS,s=>this.pollBufferState_(r.PROGRESS)),this.loadEventManager_.listen(t,r.STALLED,s=>this.pollBufferState_(r.STALLED)))}updateBufferingSettings_(){let t=this.config_.streaming.rebufferingGoal,i=t,r=Math.min(Q.TYPICAL_BUFFERING_THRESHOLD_,t/2);this.bufferObserver_.setThresholds(i,r)}pollBufferState_(t){if(v.assert(this.video_,"Need a media element to update the buffering observer"),v.assert(this.bufferObserver_,"Need a buffering observer to update"),!this.config_.streaming.rebufferingGoal){t&&this.bufferObserver_.reportEvent(t,this.video_.currentTime)&&this.updateBufferState_();return}let i=this.mediaSourceEngine_?this.mediaSourceEngine_.ended():!1,r=this.isEnded()||i||this.playhead_.isBufferedToEnd(),s=this.getPlaybackRate()<0?Je.bufferedBehindOf(this.video_.buffered,this.video_.currentTime):Je.bufferedAheadOf(this.video_.buffered,this.video_.currentTime);this.bufferObserver_.update(s,r)&&this.updateBufferState_()}createMediaSourceEngine(t,i,r,s,n){return new cr(t,i,r,n,s)}createCmcd_(){return new Or(this,this.config_.cmcd)}createCmsd_(){return new Sn(this.config_.cmsd)}createStreamingEngine(){v.assert(this.abrManager_&&this.mediaSourceEngine_&&this.manifest_&&this.video_,"Must not be destroyed");let t={getPresentationTime:()=>this.playhead_?this.playhead_.getTime():0,getBandwidthEstimate:()=>this.abrManager_.getBandwidthEstimate(),getPlaybackRate:()=>this.getPlaybackRate(),video:this.video_,mediaSourceEngine:this.mediaSourceEngine_,netEngine:this.networkingEngine_,onError:i=>this.onError_(i),onEvent:i=>this.dispatchEvent(i),onSegmentAppended:(i,r,s,n,a)=>{this.onSegmentAppended_(i.startTime,i.endTime,r.type,s,n,a),this.abrManager_&&r.fastSwitching&&i.isPartial()&&i.isLastPartial()&&this.abrManager_.trySuggestStreams()},onInitSegmentAppended:(i,r)=>{let s=r.getMediaQuality();s&&this.qualityObserver_&&this.qualityObserver_.addMediaQualityChange(s,i)},beforeAppendSegment:(i,r)=>this.drmEngine_.parseInbandPssh(i,r),disableStream:(i,r)=>this.disableStream(i,r),shouldPrefetchNextSegment:(i,r)=>!this.config_.abr.enabled||!r.fastSwitching||!i.isPartial()||!i.isLastPartial(),getKeySystem:()=>this.keySystem()};return new jr(this.manifest_,t)}configure(t,i){v.assert(this.config_,"Config must not be null!"),v.assert(typeof t=="object"||arguments.length==2,"String configs should have values!");let r=this.getConfiguration();arguments.length==2&&typeof t=="string"&&(t=Rt.convertToConfigObject(t,i)),v.assert(typeof t=="object","Should be an object!"),t.manifest&&t.manifest.dash&&"disableXlinkProcessing"in t.manifest.dash&&(Cr.deprecateFeature(6,"manifest.dash.disableXlinkProcessing configuration","It is now automatically detected if the manifest has Xlink."),delete t.manifest.dash.disableXlinkProcessing),t.textDisplayer&&"captionsUpdatePeriod"in t.textDisplayer&&(Cr.deprecateFeature(6,"textDisplayer.captionsUpdatePeriod configuration","Captions are now updated based on the cue timings, so this configuration is no longer needed."),delete t.textDisplayer.captionsUpdatePeriod),Q.convertLegacyPreferences_(t);let s=st.mergeConfigObjects(this.config_,t,this.defaultConfig_());return this.applyConfig_(r),s}configurationForLowLatency(t){this.lowLatencyConfig_=t}applyConfig_(t){if(this.manifestFilterer_=new Rr(this.config_,this.maxHwRes_,this.drmEngine_),this.parser_){let s=Fe.cloneObject(this.config_.manifest);this.video_&&this.video_.nodeName==="AUDIO"&&(s.disableVideo=!0),this.parser_.configure(s)}if(this.drmEngine_&&this.drmEngine_.configure(this.config_.drm),this.streamingEngine_){this.streamingEngine_.configure(this.config_.streaming);try{this.loadMode_!=Q.LoadMode.DESTROYED&&this.manifestFilterer_.filterManifestWithRestrictions(this.manifest_)&&this.onTracksChanged_()}catch(n){this.onError_(n)}this.abrManager_&&this.updateAbrManagerVariants_();let s=this.streamingEngine_.getCurrentVariant();s&&(!s.allowedByApplication||!s.allowedByKeySystem)&&(p.debug("Choosing new variant after changing configuration"),this.chooseVariantAndSwitch_())}if(this.networkingEngine_&&this.networkingEngine_.configure(this.config_.networking),this.mediaSourceEngine_){this.mediaSourceEngine_.configure(this.config_.mediaSource);let{segmentRelativeVttTiming:s}=this.config_.manifest;this.mediaSourceEngine_.setSegmentRelativeVttTiming(s)}this.textDisplayer_&&this.createAndConfigureTextDisplayer_(),this.abrManager_&&(this.abrManager_.configure(this.config_.abr),this.config_.abr.enabled?this.abrManager_.enable():this.abrManager_.disable(),this.onAbrStatusChanged_()),this.bufferObserver_&&this.updateBufferingSettings_(),this.bufferPoller_&&(this.config_.streaming.rebufferingGoal?this.bufferPoller_.tickEvery(.25):this.bufferPoller_.stop()),this.manifest_&&Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.adManager_&&this.adManager_.configure(this.config_.ads),this.cmcdManager_&&this.cmcdManager_.configure(this.config_.cmcd),this.cmsdManager_&&this.cmsdManager_.configure(this.config_.cmsd),this.queueManager_&&this.queueManager_.configure(this.config_.queue);let i=this.loadMode_==Q.LoadMode.MEDIA_SOURCE||this.loadMode_==Q.LoadMode.SRC_EQUALS;this.config_.accessibility.speechToText.enabled?this.speechToText_?this.speechToText_.configure(this.config_.accessibility.speechToText):(this.speechToText_=new Qr(this),this.speechToText_.configure(this.config_.accessibility.speechToText),i&&this.onTextChanged_()):this.speechToText_&&(this.speechToText_.release(),this.speechToText_=null,i&&this.onTextChanged_()),this.applyCriteriaConfigChanges_(t);let r=Q.makeEvent_(U.EventName.ConfigurationChanged);this.dispatchEvent(r)}applyCriteriaConfigChanges_(t){if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE||!this.currentAdaptationSetCriteria_.getConfiguration)return;let i=this.currentAdaptationSetCriteria_.getConfiguration();v.assert(i,"criteriaConfig must not be null!");let r=!1,s=n=>Fe.alphabeticalKeyOrderStringify(n);s(t.preferredVideo)!=s(this.config_.preferredVideo)&&(i.preferredVideo=this.config_.preferredVideo,r=!0),s(t.preferredAudio)!=s(this.config_.preferredAudio)&&(i.preferredAudio=this.config_.preferredAudio,r=!0),r&&(st.addDeprecatedConfigFields(i),this.currentAdaptationSetCriteria_.configure(i),this.chooseVariantAndSwitch_())}getConfiguration(){v.assert(this.config_,"Config must not be null!");let t=this.defaultConfig_();return st.mergeConfigObjects(t,this.config_,this.defaultConfig_()),t}getConfigurationForLowLatency(){return this.lowLatencyConfig_}getNonDefaultConfiguration(){v.assert(this.config_,"Config must not be null!");let t=this.defaultConfig_();return st.mergeConfigObjects(t,this.config_,this.defaultConfig_()),Rt.getDifferenceFromConfigObjects(this.config_,this.defaultConfig_())}getSharedConfiguration(){return v.assert(this.config_,"Cannot call getSharedConfiguration after call destroy!"),this.config_}getBufferFullness(){if(this.video_){let t=this.video_.buffered.length,i=t?this.video_.buffered.end(t-1):0,r=this.config_.streaming.bufferingGoal,s=Math.min(this.video_.currentTime+r,this.seekRange().end);if(i>=s)return 1;if(i<=this.video_.currentTime)return 0;if(i<s)return(i-this.video_.currentTime)/(s-this.video_.currentTime)}return 0}resetConfiguration(){v.assert(this.config_,"Cannot be destroyed");let t=this.getConfiguration();for(let i in this.config_)delete this.config_[i];st.mergeConfigObjects(this.config_,this.defaultConfig_(),this.defaultConfig_()),this.applyConfig_(t)}getLoadMode(){return this.loadMode_}getManifestType(){return this.manifest_?this.manifest_.type:null}getMediaElement(){return this.video_}getNetworkingEngine(){return this.networkingEngine_}getAssetUri(){return this.assetUri_}getMimeType(){return this.mimeType_}getAllMetadataRegions(){var t;return Array.from(((t=this.metadataRegionTimeline_)==null?void 0:t.regions())||[])}getAllEmsgRegions(){var t;return Array.from(((t=this.emsgRegionTimeline_)==null?void 0:t.regions())||[])}getAllTimelineRegions(){var t;return Array.from(((t=this.regionTimeline_)==null?void 0:t.regions())||[])}getAdManager(){return this.adManager_?this.adManager_:null}getQueueManager(){return this.queueManager_?this.queueManager_:null}isLive(){return this.manifest_&&!this.isRemotePlayback()?this.manifest_.presentationTimeline.isLive():this.video_&&(this.video_.src||this.isRemotePlayback())?this.video_.duration==1/0:!1}isInProgress(){return this.manifest_?this.manifest_.presentationTimeline.isInProgress():!1}isDynamic(){return this.isLive()||this.isInProgress()}isAudioOnly(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.variants;return t.length?!t[0].video:!1}else return this.video_&&(this.video_.src||this.isRemotePlayback())?this.video_.videoTracks?this.video_.videoTracks.length==0:this.video_.videoHeight==0:!1}isVideoOnly(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.variants;if(!t.length)return!1;let i=t[0];return i.audio||!i.video?!1:!i.video.codecs.includes(",")}else if(this.video_&&(this.video_.src||this.isRemotePlayback())&&this.video_.audioTracks)return this.video_.audioTracks.length==0;return!1}seekRange(){if(this.manifest_&&!this.isRemotePlayback()){if(!this.fullyLoaded_&&this.manifest_.type==me.HLS)return{start:0,end:0};let t=this.manifest_.presentationTimeline;return{start:t.getSeekRangeStart(),end:t.getSeekRangeEnd()}}if(this.video_&&(this.video_.src||this.isRemotePlayback())){let t=this.video_.seekable;if(t&&t.length){let i=this.config_?this.config_.playRangeStart:0,r=Math.max(t.start(0),i),s=this.config_?this.config_.playRangeEnd:1/0,n=Math.min(t.end(t.length-1),s);return{start:r,end:n}}}return{start:0,end:0}}goToLive(){this.isDynamic()?this.video_.currentTime=this.seekRange().end:p.warning("goToLive is for live streams!")}isFullyLoaded(){return this.fullyLoaded_}keySystem(){return de.keySystem(this.drmInfo())}drmInfo(){return this.drmEngine_?this.drmEngine_.getDrmInfo():null}getDrmEngine(){return this.drmEngine_}getExpiration(){return this.drmEngine_?this.drmEngine_.getExpiration():1/0}getActiveSessionsMetadata(){return this.drmEngine_?this.drmEngine_.getActiveSessionsMetadata():[]}renewLicense(t){this.drmEngine_&&this.drmEngine_.renewLicense(t)}async retryLicensing(t,i){return this.drmEngine_?await this.drmEngine_.retryLicensing(t,i):!1}getKeyStatuses(){return this.drmEngine_?this.drmEngine_.getKeyStatuses():{}}isBuffering(){let t=Mr.State;return this.bufferObserver_?this.bufferObserver_.getState()==t.STARVING:!!this.assetUri_}getPlaybackRate(){return this.video_?this.playRateController_?this.playRateController_.getRealRate():1:0}useTrickPlayTrackIfAvailable(t){this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&this.streamingEngine_&&this.streamingEngine_.setTrickPlay(t)}trickPlay(t,i=!0){if(v.assert(t!=0,"Should never set a trick play rate of 0!"),t==0){p.alwaysWarn("A trick play rate of 0 is unsupported!");return}let r=this.video_.playbackRate,s=this.playRateController_.getRealRate();this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&(this.abrManager_.playbackRateChanged(t),this.useTrickPlayTrackIfAvailable(i&&t!=1)),this.setupTrickPlayEventListeners_(t),r===0&&this.video_.playbackRate===0&&t!=s&&this.onRateChange_()}cancelTrickPlay(){let t=this.playRateController_.getDefaultRate();this.loadMode_==Q.LoadMode.SRC_EQUALS&&this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&(this.playRateController_.set(t),this.abrManager_.playbackRateChanged(t),this.useTrickPlayTrackIfAvailable(!1)),this.trickPlayEventManager_.removeAll()}getVariantTracks(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.streamingEngine_?this.streamingEngine_.getCurrentVariant():null,i=[],r=0;for(let s of this.manifest_.variants){if(!re.isPlayable(s))continue;let n=re.variantToTrack(s);n.active=s==t,!n.active&&r!=1&&t!=null&&s.video==t.video&&s.audio==t.audio&&(n.active=!0),n.active&&r++,i.push(n)}return v.assert(r<=1,"It should only have one active track"),i}else if(this.video_&&this.video_.audioTracks){let t=this.getActiveHtml5VideoTrack_(),i=Array.from(this.video_.audioTracks);return i.length?i.map(r=>re.html5TrackToShakaTrack(r,t)):t?[re.html5TrackToShakaTrack(null,t)]:[]}else return[]}getTextTracks(){if(this.manifest_){if(this.isRemotePlayback())return[];{let t=this.streamingEngine_?this.streamingEngine_.getCurrentTextStream():null,i=[];for(let r of this.manifest_.textStreams){let s=re.textStreamToTrack(r);s.active=r==t,i.push(s)}return this.speechToText_&&i.push(...this.speechToText_.getTextTracks()),i}}else if(this.video_&&this.video_.src&&this.video_.textTracks){let t=this.getFilteredTextTracks_(),i=this.textDisplayer_.isTextVisible(),r=t.map(s=>re.html5TextTrackToTrack(s,i));return this.speechToText_&&r.push(...this.speechToText_.getTextTracks()),r}else return[]}getImageTracks(){let t=this.externalSrcEqualsThumbnailsStreams_;return this.manifest_&&(t=this.manifest_.imageStreams),t.map(i=>re.imageStreamToTrack(i))}async getAllThumbnails(t){let i=await this.getBestImageStream_(t);if(!i)return null;let r=[];return i.segmentIndex.forEachTopLevelReference(s=>{let n=this.parseTilesLayout_(s.getTilesLayout()||i.tilesLayout);if(n){let a=n.rows*n.columns,c=(s.trueEndTime-s.startTime)/a;for(let d=0;d<a;d++){let u=s.startTime+d*c,m=this.getThumbnailByReference_(s,i,u,n);if(!m)break;r.push(m)}}}),r}parseTilesLayout_(t){if(!t)return null;let i=/(\d+)x(\d+)/.exec(t);if(!i)return p.warning("Tiles layout does not contain a valid format (columns x rows)"),null;let r=parseInt(i[1],10),s=parseInt(i[2],10);return{columns:r,rows:s}}async getThumbnails(t,i){let r=await this.getBestImageStream_(t);if(!r)return null;let s=r.segmentIndex.find(i);if(s==null)return null;let n=r.segmentIndex.get(s),a=this.parseTilesLayout_(n.getTilesLayout()||r.tilesLayout);return a?this.getThumbnailByReference_(n,r,i,a):null}async getBestImageStream_(t){if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)return null;let i=this.externalSrcEqualsThumbnailsStreams_;this.manifest_&&(i=this.manifest_.imageStreams);let r=i[0];if(!r||(t!=null&&(r=i.find(s=>s.id==t)),!r))return null;if(r.segmentIndex||await r.createSegmentIndex(),r.closeSegmentIndex){if(!this.deferredCloseSegmentIndex_.has(r)){let s=new ae(()=>{r&&(r.closeSegmentIndex(),this.deferredCloseSegmentIndex_.delete(r))});this.deferredCloseSegmentIndex_.set(r,s)}this.deferredCloseSegmentIndex_.get(r).tickAfter(5)}return r}getThumbnailByReference_(t,i,r,s){let n=t.getUris();if(!n.length)return null;let a=1e-4,o=i.width||0,c=i.height||0,d=o/s.columns,u=c/s.rows,m=s.columns*s.rows,f=t.trueEndTime-t.startTime,g=t.getTileDuration()||f/m,_=t.startTime,T=0,b=0;if(m>1){let w=(r-t.startTime)/g,A=Math.floor(w+a);_=t.startTime+A*g,T=A%s.columns*d,b=Math.floor(A/s.columns)*u}if(_>=t.endTime||qt.isFloatEqual(_,t.endTime,a))return null;let S=!1,E=t.getThumbnailSprite();return E&&(S=!0,u=E.height,T=E.positionX,b=E.positionY,d=E.width),{segment:t,imageHeight:c,imageWidth:o,height:u,positionX:T,positionY:b,startTime:_,duration:g,uris:n,startByte:t.getStartByte(),endByte:t.getEndByte(),width:d,sprite:S,mimeType:t.mimeType||i.mimeType,codecs:t.codecs||i.codecs}}selectTextTrack(t){let i=!1;if(this.speechToText_&&t&&(i=this.speechToText_.getTextTracks().includes(t)),this.speechToText_&&!i&&this.speechToText_.disable(),!t||i){this.speechToText_&&i&&t&&this.speechToText_.enable(t),this.onTextChanged_(),this.setTextTrackVisibility_(!1);return}let r=()=>{let n=this.manifest_.textStreams.find(a=>a.id==t.id);if(!n){this.isRemotePlayback()||p.error("No stream with id",t.id);return}if(n==this.streamingEngine_.getCurrentTextStream()){p.debug("Text track already selected.");return}this.addTextStreamToSwitchHistory_(n,!1),this.streamingEngine_.switchTextStream(n),this.onTextChanged_(),this.setTextDisplayerLanguage_(),this.setTextTrackVisibility_(!0)},s=()=>{if(this.video_&&this.video_.textTracks){let n=this.getFilteredTextTracks_(),a=n.find(o=>re.html5TrackId(o)===t.id);if(!a){p.error("No track with id",t.id);return}if(this.textDisplayer_ instanceof hr)for(let o of n){let c=o===a?this.isTextVisible_?"showing":"hidden":"disabled";o.mode!==c&&(o.mode=c)}else{let o=n.find(c=>c.mode!=="disabled");o!==a&&(o&&(o.mode="disabled",this.loadEventManager_.unlisten(o,"cuechange"),this.textDisplayer_.remove(0,1/0)),a&&this.enableNativeTrack_(a))}this.onTextChanged_(),this.setTextDisplayerLanguage_(),this.setTextTrackVisibility_(!0)}};this.manifest_&&this.playhead_&&(r(),!this.isRemotePlayback())||s()}enableNativeTrack_(t){this.loadEventManager_.listen(t,"cuechange",()=>{let i=Math.max(0,this.video_.currentTime-this.config_.streaming.bufferBehind);this.textDisplayer_.remove(0,i);let r={periodStart:0,segmentStart:0,segmentEnd:this.video_.duration,vttOffset:0,isMpegTs:!1},s=[],n=Array.from(t.activeCues||[]);for(let a of n){let o=si.mapNativeCueToShakaCue(a);if(o){let c=this.config_.mediaSource.modifyCueCallback;c&&c(o,null,r),s.push(o)}}this.textDisplayer_.append(s)}),t.mode=document.pictureInPictureElement?"showing":"hidden"}selectVariantTrack(t,i=!1,r=0){let s=()=>{let a=this.manifest_.variants.find(m=>m.id==t.id);if(!a){this.isRemotePlayback()||p.error("No variant with id",t.id);return}if(!re.isPlayable(a)){p.error("Unable to switch to restricted track",t.id);return}let o=this.streamingEngine_.getCurrentVariant();this.config_.abr.enabled&&(o.video!=a.video||o.audio&&a.audio&&o.audio.language==a.audio.language&&o.audio.channelsCount==a.audio.channelsCount&&o.audio.label==a.audio.label)&&p.alwaysWarn("Changing tracks while abr manager is enabled will likely result in the selected track being overridden. Consider disabling abr before calling selectVariantTrack()."),this.isRemotePlayback()?this.switchVariant_(a,!1,!1,0):this.switchVariant_(a,!1,i||!1,r||0);let c={language:a.language||"",role:a.audio&&a.audio.roles&&a.audio.roles[0]||"",label:a.audio&&a.audio.label||"",channelCount:a.audio&&a.audio.channelsCount||0,codec:a.audio&&a.audio.codecs||"",spatialAudio:a.audio&&a.audio.spatialAudio?a.audio.spatialAudio:!1},d={label:a.video&&a.video.label||"",role:a.video&&a.video.roles&&a.video.roles[0]||"",language:a.video&&a.video.language||"",codec:a.video&&a.video.codecs||"",hdrLevel:a.video&&a.video.hdr||"",layout:a.video&&a.video.videoLayout||""},u={preferredAudio:[c],preferredVideo:[d],language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:a.audio&&a.audio.codecs?a.audio.codecs:"",activeAudioCodec:o.audio&&o.audio.codecs?o.audio.codecs:"",activeAudioChannelCount:o.audio&&o.audio.channelsCount?o.audio.channelsCount:0,keySystem:this.keySystem()};st.addDeprecatedConfigFields(u),this.currentAdaptationSetCriteria_.configure(u),this.updateAbrManagerVariants_()},n=()=>{if(t.originalAudioId&&this.video_&&this.video_.audioTracks){let a=Array.from(this.video_.audioTracks);for(let o of a)if(re.html5TrackId(o)==t.id){this.switchHtml5Track_(o);return}}};this.manifest_&&this.playhead_&&(s(),!this.isRemotePlayback())||n()}selectAudioTrack(t,i=0){let r=(a,o)=>{if(a==o||!this.config_.accessibility.handleForcedSubtitlesAutomatically)return;let c=this.getTextTracks(),d=c.find(g=>g.active),u=d?Se.normalize(d.language):null,m=Se.normalize(a),f=Se.normalize(o);if(!d||u==m&&u!=f&&d.forced){let g=re.filterStreamsByLanguageAndRole(c,f,"",!0);g.length&&this.selectTextTrack(g[0])}},s=()=>{let a=this.currentAdaptationSetCriteria_.getConfiguration();a.audioCodec=t.codecs||"",a.preferredAudio=[{language:t.language,role:t.roles[0]||"",label:t.label||"",channelCount:t.channelsCount||0,codec:"",spatialAudio:t.spatialAudio}];let o=this.streamingEngine_.getCurrentVariant(),c=o&&o.audio;c&&(a.activeAudioCodec=c.codecs||"",a.activeAudioChannelCount=c.channelsCount||0,r(c.language,t.language)),st.addDeprecatedConfigFields(a),this.currentAdaptationSetCriteria_.configure(a),this.chooseVariantAndSwitch_(!0,i,!1,!1)},n=()=>{if(this.video_&&this.video_.audioTracks){let a=Se.normalize(t.language),o=Array.from(this.video_.audioTracks),c=null,d=null;t.id!=null&&(c=o.find(u=>re.html5TrackId(u)===t.id));for(let u of o){if(!c){let m=u.language||"und",f=u.kind||"",g=t.roles&&t.roles.length?t.roles[0]:"";(u.label||"")==(t.label||"")&&Se.normalize(m)==a&&f==g&&(c=u)}u.enabled&&(d=u)}c&&(d&&r(d.language,c.language),this.switchHtml5Track_(c))}};this.manifest_&&this.playhead_&&(s(),!this.isRemotePlayback())||n()}getAudioTracks(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.getVariantTracks();if(!t.length)return[];let i=t.find(n=>n.active);if(!i)return[];let r=t;if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&!this.isRemotePlayback()&&(r=t.filter(n=>n.originalVideoId===i.originalVideoId&&(n.audioCodec||O.RAW_FORMATS.includes(n.audioMimeType||"")))),!r.length)return[];let s=new Map;for(let n of r){let a=[n.language,n.originalLanguage,n.label||"",(n.audioRoles||[]).join(","),n.channelsCount,n.spatialAudio,n.audioCodec||"",n.accessibilityPurpose||""].join("_"),o={active:n.active,language:n.language,label:n.label,mimeType:n.audioMimeType,codecs:n.audioCodec,primary:n.primary,roles:n.audioRoles||[],accessibilityPurpose:n.accessibilityPurpose,channelsCount:n.channelsCount,audioSamplingRate:n.audioSamplingRate,spatialAudio:n.spatialAudio,originalLanguage:n.originalLanguage};s.has(a)?!s.get(a).active&&o.active&&s.set(a,o):s.set(a,o)}return Array.from(s.values())}else return this.video_&&this.video_.audioTracks?Array.from(this.video_.audioTracks).map(t=>re.html5AudioTrackToTrack(t)):[]}selectVideoTrack(t,i=!1,r=0){let s=this.getVariantTracks();if(!s.length)return;let n=s.find(c=>c.active);if(!n)return;let a=s.filter(c=>(c.videoBandwidth||c.bandwidth)==t.bandwidth&&c.width==t.width&&c.height==t.height&&c.frameRate==t.frameRate&&c.pixelAspectRatio==t.pixelAspectRatio&&c.hdr==t.hdr&&c.colorGamut==t.colorGamut&&c.videoLayout==t.videoLayout&&c.videoMimeType==t.mimeType&&c.videoCodec==t.codecs&&ye.equal(c.videoRoles,t.roles)&&(c.videoLanguage||"und")==(t.language||"und")&&c.videoLabel==t.label),o;a.length==1?o=a[0]:o=a.find(c=>c.audioId===n.audioId),o||(o=a.find(c=>c.language==n.language&&c.label===n.label&&c.channelsCount===n.channelsCount&&c.spatialAudio===n.spatialAudio&&c.audioMimeType===n.audioMimeType&&O.getNormalizedCodec(c.audioCodec||"")===O.getNormalizedCodec(n.audioCodec||"")&&ye.equal(c.audioRoles,n.audioRoles))),o&&!o.active&&this.selectVariantTrack(o,i,r)}getVideoTracks(){if(this.loadMode_==Q.LoadMode.SRC_EQUALS||this.isRemotePlayback())return[];let t=this.getVariantTracks();if(!t.length)return[];let i=t.find(n=>n.active);if(!i)return[];let r=t;if(this.isVideoOnly()||(r=t.filter(n=>!n.videoCodec||n.audioGroupId!==i.audioGroupId||n.originalAudioId!==i.originalAudioId?!1:n.audioId===i.audioId?!0:n.language===i.language&&n.label===i.label&&n.channelsCount===i.channelsCount&&n.spatialAudio===i.spatialAudio&&n.audioMimeType===i.audioMimeType&&O.getNormalizedCodec(n.audioCodec||"")===O.getNormalizedCodec(i.audioCodec||"")&&ye.equal(n.audioRoles,i.audioRoles))),!r.length)return[];let s=new Map;for(let n of r){let a=n.originalVideoId;if(!a&&n.videoId!=null&&(a=String(n.videoId)),!a)continue;let o={active:n.active,language:n.videoLanguage||"und",bandwidth:n.videoBandwidth||n.bandwidth,width:n.width,height:n.height,frameRate:n.frameRate,pixelAspectRatio:n.pixelAspectRatio,hdr:n.hdr,colorGamut:n.colorGamut,videoLayout:n.videoLayout,mimeType:n.videoMimeType,codecs:n.videoCodec,roles:n.videoRoles||[],label:n.videoLabel};s.set(a,o)}return Array.from(s.values())}getChaptersTracks(){let t=this.externalSrcEqualsChapterStreams_;this.manifest_&&(t=this.manifest_.chapterStreams);let i=t.map(s=>re.chapterStreamToTrack(s)),r=this.getChaptersTracks_();return r.length&&i.push(...r.map(s=>re.html5TextTrackToChapterTrack(s))),i}async getChaptersAsync(t){var c,d;let i=this.getNativeChapters_(t);if(i.length)return i;let r=this.externalSrcEqualsChapterStreams_;if(this.manifest_&&(r=this.manifest_.chapterStreams),!r.length)return[];let s=Se.normalize(t),n=r.filter(u=>Se.normalize(u.language)==s);if(!n.length)return[];let a=[],o=new Set;for(let u of n){u.segmentIndex||await u.createSegmentIndex();let m=0;if(this.isLive()&&((c=this.manifest_)==null?void 0:c.type)===me.HLS){let f=this.manifest_.presentationTimeline;m=Math.max(0,(d=f.getInitialProgramDateTime())!=null?d:f.getPresentationStartTime())}u.segmentIndex.forEachTopLevelReference(f=>{let g=f.getMetadata();if(!g)return;let _=g.title,T=f.startTime+"-"+f.endTime+"-"+_;m>0&&f.endTime-m<0&&(m=0);let b={id:T,title:_,startTime:Math.max(0,f.startTime-m),endTime:Math.max(0,f.endTime-m),images:g.images};o.has(T)||(a.push(b),o.add(T))})}return a}getNativeChapters_(t){let i=this.getChaptersTracks_();if(!i.length)return[];let r=Se.normalize(t),s=i.filter(o=>Se.normalize(o.language)==r);if(!s||!s.length)return[];let n=[],a=new Set;for(let o of s)if(o&&o.cues)for(let c of o.cues){let d=c.id;(!d||d=="")&&(d=c.startTime+"-"+c.endTime+"-"+c.text);let u={id:d,title:c.text,startTime:c.startTime,endTime:c.endTime,images:[]};a.has(d)||(n.push(u),a.add(d))}return n}getFilteredTextTracks_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).filter(t=>t.kind!="metadata"&&t.kind!="chapters"&&t.label!=Q.TextTrackLabel)}getGeneratedTextTrack_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).find(t=>t.label==Q.TextTrackLabel)}getMetadataTracks_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).filter(t=>t.kind=="metadata")}getChaptersTracks_(){return!this.video_||!this.video_.textTracks?[]:Array.from(this.video_.textTracks).filter(t=>t.kind=="chapters")}setTextTrackVisibility_(t){let i=this.isTextVisible_,r=!!t;if(i!=r)if(this.isTextVisible_=r,this.loadMode_==Q.LoadMode.MEDIA_SOURCE)if(this.textDisplayer_.setTextVisibility(r),r){if(!this.streamingEngine_.getCurrentTextStream()){let s=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);s.length>0&&(this.streamingEngine_.switchTextStream(s[0]),this.onTextChanged_(),this.setTextDisplayerLanguage_())}}else this.streamingEngine_.unloadTextStream();else this.video_&&this.video_.src&&this.video_.textTracks&&this.textDisplayer_.setTextVisibility(r)}getPlayheadTimeAsDate(){let t=0;if(this.playhead_)t=this.playhead_.getTime();else{if(this.startTime_==null)return new Date;if(this.startTime_ instanceof Date)return this.startTime_;t=this.startTime_}if(this.manifest_&&!this.isRemotePlayback()){let i=this.manifest_.presentationTimeline,r=i.getProgramDateTimeForTime(t);if(r!=null)return new Date(r*1e3);let s=i.getPresentationStartTime();return new Date((s+t)*1e3)}else if(this.video_&&this.video_.getStartDate){let i=this.video_.getStartDate();return!(i instanceof Date)||isNaN(i.getTime())?(p.warning("EXT-X-PROGRAM-DATETIME required to get playhead time as Date!"),null):new Date(i.getTime()+t*1e3)}else return p.warning("No way to get playhead time as Date!"),null}getPresentationStartTimeAsDate(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.presentationTimeline,i=t.getInitialProgramDateTime()||t.getPresentationStartTime();return i===null?(p.info("Manifest appears to have no PDT or PST"),null):new Date(i*1e3)}else if(this.video_&&this.video_.getStartDate){let t=this.video_.getStartDate();return!(t instanceof Date)||isNaN(t.getTime())?(p.warning("EXT-X-PROGRAM-DATETIME required to get presentation start time as Date!"),null):t}else return p.warning("No way to get presentation start time as Date!"),null}getSegmentAvailabilityDuration(){return this.isLive()?this.manifest_?this.manifest_.presentationTimeline.getSegmentAvailabilityDuration():(p.warning("No way to get segment segment availability duration!"),null):(p.warning("getSegmentAvailabilityDuration is for live streams!"),null)}getBufferedInfo(){if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE)return this.mediaSourceEngine_.getBufferedInfo();let t={total:[],audio:[],video:[],text:[]};return this.loadMode_==Q.LoadMode.SRC_EQUALS&&(t.total=Je.getBufferedInfo(this.video_.buffered)),t}getLiveLatency(){if(!this.video_||!this.video_.currentTime)return null;let t=this.getPresentationStartTimeAsDate();if(!t)return null;let i=t.getTime()+this.video_.currentTime*1e3;return Math.floor(Date.now()-i)}getBandwidthEstimate(){return this.abrManager_?this.abrManager_.getBandwidthEstimate():NaN}getStats(){if(!(this.loadMode_==Q.LoadMode.MEDIA_SOURCE||this.loadMode_==Q.LoadMode.SRC_EQUALS))return tr.getEmptyBlob();this.updateStateHistory_(),v.assert(this.video_,"If we have stats, we should have video_");let i=this.video_,r=i.currentTime/i.duration;if(!isNaN(r)&&!this.isDynamic()&&this.stats_.setCompletionPercent(Math.round(100*r)),this.playhead_&&(this.stats_.setGapsJumped(this.playhead_.getGapsJumped()),this.stats_.setStallsDetected(this.playhead_.getStallsDetected())),i.getVideoPlaybackQuality){let d=i.getVideoPlaybackQuality();this.stats_.setDroppedFrames(Number(d.droppedVideoFrames),Number(d.totalVideoFrames)),this.stats_.setCorruptedFrames(Number(d.corruptedVideoFrames))}let s=this.drmEngine_?this.drmEngine_.getLicenseTime():NaN;if(this.stats_.setLicenseTime(s),this.stats_.setResolution(i.videoWidth||NaN,i.videoHeight||NaN),this.stats_.setCodecs(""),this.isDynamic()){let d=this.getLiveLatency();d!=null&&this.stats_.setLiveLatency(d/1e3)}let a=this.getVariantTracks().find(d=>d.active),c=this.getTextTracks().find(d=>d.active);if(a){if(a.bandwidth){let u=this.playRateController_?this.playRateController_.getRealRate():1,f=u*a.bandwidth;c&&c.bandwidth&&(f+=u*c.bandwidth),this.stats_.setCurrentStreamBandwidth(f)}a.width&&a.height&&this.stats_.setResolution(a.width||NaN,a.height||NaN);let d=a.codecs;c&&(d+=","+(c.codecs||c.mimeType)),d&&this.stats_.setCodecs(d)}if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&!this.isRemotePlayback()){if(this.manifest_&&(this.stats_.setManifestPeriodCount(this.manifest_.periodCount),this.stats_.setManifestGapCount(this.manifest_.gapCount),this.manifest_.presentationTimeline)){let u=this.manifest_.presentationTimeline.getMaxSegmentDuration();this.stats_.setMaxSegmentDuration(u)}let d=this.abrManager_.getBandwidthEstimate();this.stats_.setBandwidthEstimate(d)}return this.loadMode_==Q.LoadMode.SRC_EQUALS&&this.stats_.addBytesDownloaded(NaN),this.stats_.getBlob()}addTextTrackAsync(t,i,r,s,n,a,o=!1){let c=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding text tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);r!="subtitles"&&r!="captions"&&p.alwaysWarn("Using a kind value different of `subtitles` or `captions` can cause unwanted issues."),s||(s=await this.getTextMimetype_(t));let d=[];if(this.adManager_&&(d=this.adManager_.getCuePoints()),this.loadMode_==Q.LoadMode.SRC_EQUALS){let b=j.getDevice();o&&b.getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(r="forced");let S=await this.addSrcTrackElement_(t,i,r,s,a||"",d);if(S.track)return this.onTracksChanged_(),this.onTextChanged_(),re.html5TextTrackToTrack(S.track,this.textDisplayer_.isTextVisible());throw p.error("Cannot add this text when loaded with src="),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS)}let u=R.ContentType,m=this.seekRange(),f=m.end-m.start;if(this.manifest_&&(f=this.manifest_.presentationTimeline.getDuration()),f==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM);if(d.length){let b=await this.getTextData_(t),S=this.convertToWebVTT_(b,s,d),E=new Blob([S],{type:"text/vtt"});t=cr.createObjectURL(E),s="text/vtt"}let g=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:Ze.forSingleSegment(0,f,[t]),mimeType:s||"",codecs:n||"",kind:r,language:i,originalLanguage:i,label:a||null,type:u.TEXT,forced:!!o,external:!0}),_=O.getFullType(g.mimeType,g.codecs);if(!Oe.isTypeSupported(_))throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,s);return this.manifest_.textStreams.push(g),this.onTracksChanged_(),this.onTextChanged_(),re.textStreamToTrack(g)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(c),c}addThumbnailsTrack(t,i){let r=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding image tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);if(i||(i=await this.getTextMimetype_(t)),i!="text/vtt")throw new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,t);let s=R.ContentType,n=this.seekRange(),a=n.end-n.start;if(this.manifest_&&(a=this.manifest_.presentationTimeline.getDuration()),a==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM);let o=await this.getTextData_(t),c=Oe.findParser(i);if(!c)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i);let d=c(),u={periodStart:0,segmentStart:0,segmentEnd:a,vttOffset:0,isMpegTs:!1},m=D.toUint8(o),f=d.parseMedia(m,u,t,[]),g=[];for(let b of f){let S=null,E=()=>(S==null&&(S=fe.resolveUris([t],[b.payload])),S||[]),w=new Te(b.startTime,b.endTime,E,0,null,null,0,0,1/0);if(b.payload.includes("#xywh")){let A=b.payload.split("#xywh=")[1].split(",");A.length===4&&w.setThumbnailSprite({height:parseInt(A[3],10),positionX:parseInt(A[0],10),positionY:parseInt(A[1],10),width:parseInt(A[2],10)})}g.push(w)}let _=i;g.length&&(_=await this.getTextMimetype_(g[0].getUris()[0]));let T=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(g),mimeType:_||"",kind:"",language:"und",type:s.IMAGE,tilesLayout:"1x1",external:!0});return this.loadMode_==Q.LoadMode.SRC_EQUALS?this.externalSrcEqualsThumbnailsStreams_.push(T):this.manifest_.imageStreams.push(T),this.onTracksChanged_(),re.imageStreamToTrack(T)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(r),r}addChaptersTrack(t,i,r){let s=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding chapters tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);r||(r=await this.getTextMimetype_(t));let n=R.ContentType,a=this.seekRange(),o=a.end-a.start;if(this.manifest_&&(o=this.manifest_.presentationTimeline.getDuration()),o==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_CHAPTERS_TO_LIVE_STREAM);let c=Oe.findParser(r);if(!c)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,r);let d=await this.getTextData_(t),u=c(),m={periodStart:0,segmentStart:0,segmentEnd:o,vttOffset:0,isMpegTs:!1},f=D.toUint8(d),g=u.parseMedia(f,m,t,[]),_=[];for(let S of g){let E=new Te(S.startTime,S.endTime,()=>[],0,null,null,0,0,1/0),w={title:S.payload,images:[]};E.setMetadata(w),_.push(E)}let b=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(_),mimeType:"text/plain",kind:"",language:i,originalLanguage:i,type:n.CHAPTER,external:!0});return this.loadMode_==Q.LoadMode.MEDIA_SOURCE?this.manifest_.chapterStreams.push(b):this.externalSrcEqualsChapterStreams_.push(b),this.onTracksChanged_(),re.chapterStreamToTrack(b)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(s),s}async getTextMimetype_(t){let i;try{v.assert(this.networkingEngine_,"Need networking engine."),i=await ct.getMimeType(t,this.networkingEngine_,this.config_.streaming.retryParameters)}catch(r){}if(i)return i;throw p.error("The mimeType has not been provided and it could not be deduced from its uri."),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,t)}async addSrcTrackElement_(t,i,r,s,n,a){if(s!="text/vtt"||a.length){let c=await this.getTextData_(t),d=this.convertToWebVTT_(c,s,a),u=new Blob([d],{type:"text/vtt"});t=cr.createObjectURL(u),s="text/vtt"}let o=document.createElement("track");return o.src=this.cmcdManager_.appendTextTrackData(t),o.label=n,o.kind=r,o.srclang=i,this.video_.getAttribute("crossorigin")||this.video_.setAttribute("crossorigin","anonymous"),this.video_.appendChild(o),this.externalSrcEqualsTextTracks_.push(o),o}async getTextData_(t){v.assert(this.networkingEngine_,"Need networking engine.");let i=K.RequestType.SEGMENT,r=this.config_.streaming.retryParameters,s=K.makeRequest([t],r);return s.method="GET",this.cmcdManager_.applyTextData(s),(await this.networkingEngine_.request(i,s).promise).data}convertToWebVTT_(t,i,r){let s=Oe.findParser(i);if(s){let n=s(),a={periodStart:0,segmentStart:0,segmentEnd:this.video_.duration,vttOffset:0,isMpegTs:!1},o=D.toUint8(t),c=n.parseMedia(o,a,null,[]);return Ls.convert(c,r)}throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i)}setMaxHardwareResolution(t,i){this.maxHwRes_.width=t,this.maxHwRes_.height=i}retryStreaming(t=.1){return this.loadMode_==Q.LoadMode.MEDIA_SOURCE?this.streamingEngine_.retry(t):!1}getManifest(){return p.alwaysWarn("Shaka Player's internal Manifest structure is NOT covered by semantic versioning compatibility guarantees. It may change at any time! Please consider filing a feature request for whatever you use getManifest() for."),this.manifest_}getManifestParserFactory(){return this.parserFactory_}getFetchedPlaybackInfo(){var a,o,c;let t={video:null,audio:null,text:null};if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE)return t;let i=R.ContentType,r=this.streamingEngine_.getCurrentVariant(),s=this.streamingEngine_.getCurrentTextStream(),n=this.video_.currentTime;for(let d of[r.video,r.audio,s]){if(!d||!d.segmentIndex)continue;let u=d.segmentIndex.find(n),m=d.segmentIndex.get(u),f={codecs:(a=m==null?void 0:m.codecs)!=null?a:d.codecs,mimeType:(o=m==null?void 0:m.mimeType)!=null?o:d.mimeType,bandwidth:(c=m==null?void 0:m.bandwidth)!=null?c:d.bandwidth};d.type==i.VIDEO?(f.width=d.width,f.height=d.height,t.video=f):d.type==i.AUDIO?t.audio=f:d.type==i.TEXT&&(t.text=f)}return t}addVariantToSwitchHistory_(t,i){this.stats_.getSwitchHistory().updateCurrentVariant(t,i)}addTextStreamToSwitchHistory_(t,i){this.stats_.getSwitchHistory().updateCurrentText(t,i)}defaultConfig_(){let t=st.createDefault();return t.streaming.failureCallback=i=>{this.defaultStreamingFailureCallback_(i)},t.textDisplayFactory=i=>(()=>{if(!this.videoContainer_)return!1;let s=this.video_;return!(s.webkitDisplayingFullscreen||s.webkitPresentationMode&&s.webkitPresentationMode!="inline")})()?new Jr(i):"track"in document.createElement("track")?new hr(i):(p.warning("Text tracks are not supported by the browser, disabling."),new vn),t}setVideoContainer(t){this.videoContainer_=t}getVideoContainer(){return this.videoContainer_}getTextDisplayer(){return this.textDisplayer_}defaultStreamingFailureCallback_(t){if(!this.isDynamic())return;let i=null;t.code==h.Code.BAD_HTTP_STATUS||t.code==h.Code.HTTP_ERROR?(i=1,this.config_.streaming.lowLatencyMode&&(i=.1)):t.code==h.Code.TIMEOUT&&(i=.1),i!=null&&(t.severity=h.Severity.RECOVERABLE,p.warning("Live streaming error. Retrying automatically..."),this.retryStreaming(i))}makeTextStreamsForClosedCaptions_(t){let i=R.ContentType,r=R.TextStreamKind,s=O.CEA608_CLOSED_CAPTION_MIMETYPE,n=O.CEA708_CLOSED_CAPTION_MIMETYPE,a=new Set;for(let o of t.textStreams)(o.mimeType==s||o.mimeType==n)&&a.add(o.originalId);for(let o of t.variants){let c=o.video;if(c&&c.closedCaptions){for(let d of c.closedCaptions.keys())if(!a.has(d)){let u=d.startsWith("CC")?s:n,m=new Mi,f=c.closedCaptions.get(d),g=re.createStream({id:this.nextExternalStreamId_++,originalId:d,segmentIndex:m,mimeType:u,kind:r.CLOSED_CAPTION,language:f,originalLanguage:f,type:i.TEXT,roles:c.roles});t.textStreams.push(g),a.add(d)}}}}async adjustStartTime_(t,i){let r=t.audio,s=t.video,n=async(c,d)=>{if(!c)return null;c.segmentIndex||await c.createSegmentIndex();let u=c.segmentIndex.getIteratorForTime(d),m=u?u.next().value:null;if(!m)return null;let f=m.startTime;return v.assert(f<=d,"Segment should start before target time!"),f},a=await n(r,i),o=await n(s,i);return o!=null&&a!=null?Math.max(o,a):o!=null?o:a!=null?a:i}updateBufferState_(){let t=this.isBuffering();if(p.v2("Player changing buffering state to",t),this.stats_&&this.bufferObserver_&&this.playhead_){this.config_.streaming.rebufferingGoal==0?this.playRateController_.setBuffering(!1):this.playRateController_.setBuffering(t),this.cmcdManager_&&this.cmcdManager_.setBuffering(t),this.updateStateHistory_();let n=this.config_.streaming.liveSync.dynamicTargetLatency.enabled,a=this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;if(n&&t&&this.rebufferingCount_<a){let o=this.config_.streaming.liveSync.dynamicTargetLatency.maxLatency,c=this.config_.streaming.liveSync.targetLatencyTolerance,d=this.config_.streaming.liveSync.dynamicTargetLatency.rebufferIncrement;this.currentTargetLatency_&&(this.currentTargetLatency_=Math.min(this.currentTargetLatency_+ ++this.rebufferingCount_*d,o-c))}}let r=U.EventName.Buffering,s=new Map().set("buffering",t);this.dispatchEvent(Q.makeEvent_(r,s))}onRateChange_(){let t=this.video_.playbackRate;if(t==0){let r=this.getPlaybackRate();if(r!==0&&r!==1){let s=Q.makeEvent_(U.EventName.RateChange);this.dispatchEvent(s)}return}this.playRateController_&&(this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&this.abrManager_.playbackRateChanged(t),this.setupTrickPlayEventListeners_(t));let i=Q.makeEvent_(U.EventName.RateChange);this.dispatchEvent(i)}setupTrickPlayEventListeners_(t){this.trickPlayEventManager_.removeAll(),this.trickPlayEventManager_.listen(this.video_,"timeupdate",()=>{let i=this.video_.currentTime,r=this.seekRange(),s=this.isDynamic(),n=s?this.config_.streaming.safeSeekOffset:0;t>0?s&&t>1&&Math.floor(i)>=Math.floor(r.end)&&this.cancelTrickPlay():Math.floor(i)<=Math.floor(r.start+n)&&this.cancelTrickPlay()})}updateStateHistory_(){if(!this.stats_||!this.bufferObserver_)return;let t=Mr.State,i=this.stats_.getStateHistory(),r="playing";if(this.bufferObserver_.getState()==t.STARVING?r="buffering":this.isEnded()?r="ended":this.video_.paused&&(r="paused"),i.update(r)){let n=U.EventName.StateChanged,a=new Map().set("newstate",r);this.dispatchEvent(Q.makeEvent_(n,a))}}onTimeUpdate_(){let t=this.video_.playbackRate,i=this.isDynamic();if(this.config_.streaming.vodDynamicPlaybackRate&&!i){let w=this.config_.streaming.vodDynamicPlaybackRateLowBufferRate,A=this.getBufferFullness(),x=this.config_.streaming.vodDynamicPlaybackRateBufferRatio;A<=x?t!=w&&(p.debug("Buffer fullness ratio ("+A+") is less than the vodDynamicPlaybackRateBufferRatio ("+x+"). Updating playbackRate to "+w),this.trickPlay(w,!1)):A==1&&t!==this.playRateController_.getDefaultRate()&&(p.debug("Buffer is full. Cancel trick play."),this.cancelTrickPlay())}if(!i)return;let r=this.seekRange();if(!Number.isFinite(r.end)||this.video_.currentTime<r.start||this.video_.paused)return;let n,a,o,c,d,u=this.config_.streaming.liveSync.targetLatencyTolerance,m=this.config_.streaming.liveSync.dynamicTargetLatency.enabled,f=this.config_.streaming.liveSync.dynamicTargetLatency.stabilityThreshold;this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled?(n=this.config_.streaming.liveSync.targetLatency,a=n+u,c=Math.max(0,n-u),o=this.config_.streaming.liveSync.maxPlaybackRate,d=this.config_.streaming.liveSync.minPlaybackRate):this.manifest_&&this.manifest_.serviceDescription&&(n=this.manifest_.serviceDescription.targetLatency,this.manifest_.serviceDescription.targetLatency!=null?a=this.manifest_.serviceDescription.targetLatency+u:this.manifest_.serviceDescription.maxLatency!=null&&(a=this.manifest_.serviceDescription.maxLatency),this.manifest_.serviceDescription.targetLatency!=null?c=Math.max(0,this.manifest_.serviceDescription.targetLatency-u):this.manifest_.serviceDescription.minLatency!=null&&(c=this.manifest_.serviceDescription.minLatency),o=this.manifest_.serviceDescription.maxPlaybackRate||this.config_.streaming.liveSync.maxPlaybackRate,d=this.manifest_.serviceDescription.minPlaybackRate||this.config_.streaming.liveSync.minPlaybackRate),!this.currentTargetLatency_&&typeof n=="number"&&(this.currentTargetLatency_=n);let g=this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;if(m&&this.targetLatencyReached_&&this.currentTargetLatency_!==null&&typeof n=="number"&&this.rebufferingCount_<g&&Date.now()-this.targetLatencyReached_>f*1e3){let w=this.config_.streaming.liveSync.dynamicTargetLatency.minLatency,A=(n-w)/2;this.currentTargetLatency_=Math.max(this.currentTargetLatency_-A,w+u),this.targetLatencyReached_=Date.now()}m&&this.currentTargetLatency_!==null&&(a=this.currentTargetLatency_+u,c=this.currentTargetLatency_-u);let _=r.end-this.video_.currentTime,T=0;if(this.loadMode_==Q.LoadMode.SRC_EQUALS){let w=this.video_.buffered;if(w.length>0){let A=w.end(w.length-1);T=Math.max(o,A-r.end)}}let b=this.config_.streaming.liveSync.panicMode,S=this.config_.streaming.liveSync.panicThreshold*1e3,E=Date.now()-this.bufferObserver_.getLastRebufferTime();b&&!d&&(d=this.config_.streaming.liveSync.minPlaybackRate),b&&d&&E<=S?t!=d&&(p.debug("Time since last rebuffer ("+E+"s) is less than the live sync panicThreshold ("+S+"s). Updating playbackRate to "+d),this.trickPlay(d,!1)):a!=null&&o&&_-T>a?(t!=o&&(p.debug("Latency ("+_+"s) is greater than live sync maxLatency ("+a+"s). Updating playbackRate to "+o),this.trickPlay(o,!1)),this.targetLatencyReached_=null):c!=null&&d&&_-T<c?(t!=d&&(p.debug("Latency ("+_+"s) is smaller than live sync minLatency ("+c+"s). Updating playbackRate to "+d),this.trickPlay(d,!1)),this.targetLatencyReached_=null):t!==this.playRateController_.getDefaultRate()&&(this.cancelTrickPlay(),this.targetLatencyReached_=Date.now())}isQuartile_(t,i){return(qt.isFloatEqual(t,i,.01)||i>t)&&this.completionPercent_<t?(this.completionPercent_=t,!0):!1}checkEnded_(){this.config_&&this.config_.playRangeEnd!=1/0&&this.isEnded()&&this.video_.pause()}onVideoProgress_(){if(!this.video_)return;let t=this.seekRange(),i=t.end-t.start,r=i>0?this.video_.currentTime/i:0;if(isNaN(r))return;let s=r*100,n;this.isQuartile_(0,s)?n=Q.makeEvent_(U.EventName.Started):this.isQuartile_(25,s)?n=Q.makeEvent_(U.EventName.FirstQuartile):this.isQuartile_(50,s)?n=Q.makeEvent_(U.EventName.Midpoint):this.isQuartile_(75,s)?n=Q.makeEvent_(U.EventName.ThirdQuartile):this.isQuartile_(100,s)||s>100?(n=Q.makeEvent_(U.EventName.Complete),this.checkEnded_()):this.checkEnded_(),n&&this.dispatchEvent(n)}onSeek_(){this.playheadObservers_&&this.playheadObservers_.notifyOfSeek(!this.playhead_.getIsJumpingGap()),this.streamingEngine_&&this.streamingEngine_.seeked(),this.bufferObserver_&&this.pollBufferState_(Gt.SEEKING)}updateAbrManagerVariants_(){try{v.assert(this.manifest_,"Manifest should exist by now!"),this.manifestFilterer_.checkRestrictedVariants(this.manifest_)}catch(n){return this.onError_(n),!1}let t=this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode,i=re.getPlayableVariants(this.manifest_.variants),r=this.currentAdaptationSetCriteria_.create(i),s=this.abrManager_.setVariants(Array.from(r.values()),t);return typeof s=="boolean"?s:!0}chooseVariant_(t=!1){if(this.updateAbrManagerVariants_()){if(this.config_.abr.enabled)return this.abrManager_.chooseVariant(t);{let r=this.currentAdaptationSetCriteria_.getLastAdaptationSet();if(r){let s=Array.from(r.values());if(s.length){let n=this.streamingEngine_.getCurrentVariant();if(n&&n.video){let a=s.find(o=>o.video==n.video);if(a)return a}}}return this.abrManager_.chooseVariant(t)}}else return null}checkVariants_(){v.assert(this.manifest_,"Should have manifest!");let t=Date.now()/1e3,i=!1,r=n=>{let a="";return n.video&&(a+="video:"+n.video.id),n.audio&&(a+=a?"&":"",a+="audio:"+n.audio.id),a},s=!0;for(let n of this.manifest_.variants)n.disabledUntilTime>0&&n.disabledUntilTime<=t&&(n.disabledUntilTime=0,i=!0,p.v2("Re-enabled variant with "+r(n))),n.disabledUntilTime>0&&(s=!1);s&&this.checkVariantsTimer_.stop(),i&&this.chooseVariantAndSwitch_(!1,void 0,!1,!1)}chooseTextStream_(t){let i=null,r=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);return r.length&&(i=r[0]),!i&&t.audio&&this.config_.accessibility.handleForcedSubtitlesAutomatically&&(r=re.filterStreamsByLanguageAndRole(this.manifest_.textStreams,t.audio.language,"",!0),r.length&&(i=r[0])),i}chooseVariantAndSwitch_(t=!0,i=0,r=!1,s=!0){v.assert(this.config_,"Must not be destroyed");let n=this.chooseVariant_();n&&this.switchVariant_(n,s,t,i,r)}switchVariant_(t,i,r,s,n=!1){let a=this.streamingEngine_.getCurrentVariant();if(t==a){p.debug("Variant already selected."),r&&this.streamingEngine_.switchVariant(t,r,s,!0);return}this.addVariantToSwitchHistory_(t,i),this.streamingEngine_.switchVariant(t,r,s,n,i);let o=null;a&&(o=re.variantToTrack(a));let c=re.variantToTrack(t);c.active=!0,this.lcevcDec_&&this.lcevcDec_.updateVariant(t,this.getManifestType()),i?this.onAdaptation_(o,c):this.onVariantChanged_(o,c),this.checkAudioTracksChanged_(o,c)}switchHtml5Track_(t){v.assert(this.video_&&this.video_.audioTracks,"Video and video.audioTracks should not be null!");let i=Array.from(this.video_.audioTracks),r=i.find(o=>o.enabled);for(let o of i)o!==t&&(o.enabled=!1);t.enabled=!0;let s=this.getActiveHtml5VideoTrack_(),n=r?re.html5TrackToShakaTrack(r,s):null,a=re.html5TrackToShakaTrack(t,s);this.onVariantChanged_(n,a),this.checkAudioTracksChanged_(n,a)}getActiveHtml5VideoTrack_(){return this.video_&&this.video_.videoTracks?Array.from(this.video_.videoTracks).find(i=>i.selected):null}setInitialTextState_(t){t?(this.isTextVisible_=!0,this.textDisplayer_.setTextVisibility(!0)):(this.isTextVisible_=!1,this.textDisplayer_.setTextVisibility(!1))}onManifestUpdate_(){this.parser_&&this.parser_.update&&this.parser_.update()}onSegmentAppended_(t,i,r,s,n,a){let o=R.ContentType;if(r!=o.TEXT){if(this.playhead_){this.playhead_.notifyOfBufferingChange();let d=this.mediaSourceEngine_.bufferStart(r);!this.isDynamic()&&this.video_.paused&&!this.video_.seeking&&!this.mediaSourceEngine_.isReloadingMediaSource()&&d!=null&&d>0&&this.playhead_.getTime()<d&&!qt.isFloatEqual(this.playhead_.getTime(),d,.001)&&this.playhead_.setStartTime(d)}this.pollBufferState_()}let c=new Map().set("start",t).set("end",i).set("contentType",r).set("isMuxed",s).set("isDependency",n).set("mediaTimestamp",a);this.dispatchEvent(Q.makeEvent_(U.EventName.SegmentAppended,c))}switch_(t,i=!1,r=0){p.debug("switch_"),v.assert(this.config_.abr.enabled,"AbrManager should not call switch while disabled!"),this.manifest_&&this.streamingEngine_&&t!=this.streamingEngine_.getCurrentVariant()&&this.switchVariant_(t,!0,i,r)}onAdaptation_(t,i){let r=new Map().set("oldTrack",t).set("newTrack",i),s=Q.makeEvent_(U.EventName.Adaptation,r);this.delayDispatchEvent_(s)}onTracksChanged_(){let t=Q.makeEvent_(U.EventName.TracksChanged);this.delayDispatchEvent_(t),this.onAudioTracksChanged_()}onVariantChanged_(t,i){let r=new Map().set("oldTrack",t).set("newTrack",i),s=Q.makeEvent_(U.EventName.VariantChanged,r);this.delayDispatchEvent_(s)}checkAudioTracksChanged_(t,i){let r=!1;(!t||t.audioId!=i.audioId||t.audioGroupId!=i.audioGroupId)&&(r=!0),r&&this.onAudioTracksChanged_()}onAudioTracksChanged_(){let t=Q.makeEvent_(U.EventName.AudioTracksChanged);this.delayDispatchEvent_(t)}onTextChanged_(){let t=Q.makeEvent_(U.EventName.TextChanged);this.delayDispatchEvent_(t)}onAbrStatusChanged_(){this.config_.abr.enabled||this.restoreDisabledVariants_();let t=new Map().set("newStatus",this.config_.abr.enabled);this.delayDispatchEvent_(Q.makeEvent_(U.EventName.AbrStatusChanged,t))}setTextDisplayerLanguage_(){let t=this.getTextTracks().find(i=>i.active);t&&this.textDisplayer_&&this.textDisplayer_.setTextLanguage(t.language)}restoreDisabledVariants_(t=!0){if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE){v.assert(this.manifest_,"Should have manifest!"),p.v2("Restoring all disabled streams..."),this.checkVariantsTimer_.stop();for(let i of this.manifest_.variants)isFinite(i.disabledUntilTime)&&(i.disabledUntilTime=0);t&&this.updateAbrManagerVariants_()}}disableStream(t,i){if(!this.config_.abr.enabled||this.loadMode_===Q.LoadMode.DESTROYED||!navigator.onLine||i==0||!this.manifest_)return!1;if(this.manifest_.variants.some(s=>{let n=s[t.type];return n&&n.id!==t.id&&!s.disabledUntilTime?re.isAudio(t)?t.language===n.language:!0:!1})){let s=!1,n=!1;for(let c of this.manifest_.variants){let d=c[t.type];d&&(d.id===t.id?(c.disabledUntilTime=Date.now()/1e3+i,s=!0,p.v2("Disabled stream "+t.type+":"+t.id+" for "+i+" seconds...")):d.trickModeVideo&&d.trickModeVideo.id==t.id&&(n=!0))}if(!s&&n)return!1;v.assert(s,"Must have disabled stream"),this.checkVariantsTimer_.tickEvery(1);let{video:a}=this.getBufferedInfo(),o=a.reduce((c,{start:d,end:u})=>c+u-d,0);return this.chooseVariantAndSwitch_(!1,o,!0,!1),!0}return p.warning("No alternate stream found for active "+t.type+" stream. Will ignore request to disable stream..."),!1}async onError_(t){if(v.assert(t instanceof h,"Wrong error type!"),this.loadMode_==Q.LoadMode.DESTROYED)return;if(t.severity===h.Severity.RECOVERABLE&&this.stats_.addNonFatalError(),this.manifest_&&this.streamingEngine_&&!t.handled&&(t.code==h.Code.VIDEO_ERROR||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.STREAMING_NOT_ALLOWED||t.code==h.Code.TRANSMUXING_FAILED)&&(re.getPlayableVariants(this.manifest_.variants).length>1||this.fullyLoaded_)){if(j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&t.code==h.Code.VIDEO_ERROR)return;try{if(await this.streamingEngine_.resetMediaSource()){let o=Q.makeEvent_(U.EventName.MediaSourceRecovered);this.dispatchEvent(o);return}}catch(a){}}t.severity===h.Severity.CRITICAL&&this.restoreDisabledVariants_(!1);let i=U.EventName.Error,r=Q.makeEvent_(i,new Map().set("detail",t));this.dispatchEvent(r),r.defaultPrevented&&(t.handled=!0)}addFont(t,i){return Ke.addFont(t,i)}onRegionEvent_(t,i,r=this){let s={schemeIdUri:i.schemeIdUri,value:i.value,startTime:i.startTime,endTime:i.endTime,id:i.id,timescale:i.timescale,eventNode:i.eventNode,urlParams:i.urlParams,values:i.values},n=new Map().set("detail",s);r.dispatchEvent(Q.makeEvent_(t,n))}sendEventStreamCallback_(t){if(t.schemeIdUri!=="urn:mpeg:dash:event:callback:2015"||!t.eventNode)return;let i=I.getTextContents(t.eventNode);if(!i)return;let r=i.trim();if(!r)return;r=fe.applyUrlParams(r,t.urlParams);let s=K.RequestType.EVENT_CALLBACK,n=K.makeRequest([r],K.defaultRetryParameters());this.networkingEngine_.request(s,n).promise.catch(()=>{})}onMediaQualityChange_(t,i,r=!1){let s={bandwidth:t.bandwidth,audioSamplingRate:t.audioSamplingRate,codecs:t.codecs,contentType:t.contentType,frameRate:t.frameRate,height:t.height,mimeType:t.mimeType,channelsCount:t.channelsCount,pixelAspectRatio:t.pixelAspectRatio,width:t.width,label:t.label,roles:t.roles,language:t.language},n=new Map().set("mediaQuality",s).set("position",i);this.dispatchEvent(Q.makeEvent_(r?U.EventName.AudioTrackChanged:U.EventName.MediaQualityChanged,n))}videoErrorToShakaError_(t=!0){if(v.assert(this.video_.error,"Video error expected, but missing!"),!this.video_.error)return t?new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.VIDEO_ERROR):null;let{code:i,extended:r,message:s}=h.getMediaElementErrorDetails(this.video_.error);return!t&&i===MediaError.MEDIA_ERR_ABORTED?null:new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.VIDEO_ERROR,i,r,s)}onVideoError_(t){let i=this.videoErrorToShakaError_(!1);i&&this.onError_(i)}onKeyStatus_(t){if(!this.streamingEngine_)return;let i=Q.makeEvent_(U.EventName.KeyStatusChanged);this.dispatchEvent(i);let r=Object.keys(t);r.length==0&&p.warning("Got a key status event without any key statuses, so we don't know the real key statuses. If we don't have all the keys, you'll need to set restrictions so we don't select those tracks."),r.length==1&&r[0]==""&&(r=["00"],t={"00":t[""]});let s=r.length==1&&r[0]=="00";s&&p.warning("Got a synthetic key status event, so we don't know the real key statuses. If we don't have all the keys, you'll need to set restrictions so we don't select those tracks.");let n=Rr.restrictedStatuses,a=!1;if(v.assert(this.drmEngine_,"drmEngine should be non-null here."),r.length){let o=this.keySystem(),c=ei.asMap(this.config_.drm.clearKeys),d=(u,m)=>{u.allowedByKeySystem=!0;for(let f of m){let g=t[s?"00":f];(g||this.drmEngine_.hasManifestInitData())&&(u.allowedByKeySystem=u.allowedByKeySystem&&!!g&&!n.includes(g))}};for(let u of this.manifest_.variants){let m=re.getVariantStreams(u);for(let f of m){let g=u.allowedByKeySystem;if(f.keyIds.size)if(f.drmInfos.length&&!c.size&&this.manifest_.type==me.HLS)for(let _ of f.drmInfos)_.keySystem==o&&(_.keyIds.size?d(u,_.keyIds):d(u,f.keyIds));else d(u,f.keyIds);g!=u.allowedByKeySystem&&(a=!0)}}}if(a){this.onTracksChanged_();let o=this.streamingEngine_.getCurrentVariant();o&&!o.allowedByKeySystem?(p.debug("Choosing new streams after key status changed"),this.chooseVariantAndSwitch_()):this.updateAbrManagerVariants_()}}static applyPlayRange_(t,i,r){i>0&&(t.isDynamic()?p.warning("|playRangeStart| has been configured for live content. Ignoring the setting."):t.setUserSeekStart(i));let s=t.getDuration();r<s&&(t.isDynamic()?p.warning("|playRangeEnd| has been configured for live content. Ignoring the setting."):t.setDuration(r))}async delayDispatchEvent_(t){await Promise.resolve(),this.loadMode_!=Q.LoadMode.DESTROYED&&this.dispatchEvent(t)}createAbortLoadError_(){return new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.LOAD_INTERRUPTED)}isRemotePlayback(){if(!this.video_)return!1;let i=j.getDevice().getRemote(this.video_);return i?i.state!="disconnected":!1}isEnded(){return!this.video_||this.video_.ended?!0:this.fullyLoaded_&&!this.isDynamic()&&this.video_.currentTime>=this.seekRange().end}static convertLegacyPreferences_(t){let i=(d,u)=>{p.alwaysWarn(d,"has been deprecated. Please use",u,"instead.")},r={preferredAudioLanguage:"language",preferredAudioRole:"role",preferredAudioLabel:"label",preferredAudioChannelCount:"channelCount",preferSpatialAudio:"spatialAudio"};if(Object.keys(r).some(d=>d in t)){let d={language:"",role:"",label:"",channelCount:0,codec:""};for(let[u,m]of Object.entries(r))u in t&&(i(u,"preferredAudio"),d[m]=t[u],delete t[u]);t.preferredAudio||(t.preferredAudio=[d])}if("preferredAudioCodecs"in t){i("preferredAudioCodecs","preferredAudio");let d=t.preferredAudioCodecs;Array.isArray(d)&&d.length&&(t.preferredAudio||(t.preferredAudio=d.map(u=>({language:"",role:"",label:"",channelCount:0,codec:u})))),delete t.preferredAudioCodecs}let n={preferredTextLanguage:"language",preferredTextRole:"role",preferForcedSubs:"forced"};if(Object.keys(n).some(d=>d in t)){let d={language:"",role:"",format:""};for(let[u,m]of Object.entries(n))u in t&&(i(u,"preferredText"),d[m]=t[u],delete t[u]);t.preferredText||(t.preferredText=[d])}if("preferredTextFormats"in t){i("preferredTextFormats","preferredText");let d=t.preferredTextFormats;Array.isArray(d)&&d.length&&(t.preferredText||(t.preferredText=d.map(u=>({language:"",role:"",format:u})))),delete t.preferredTextFormats}let o={preferredVideoLabel:"label",preferredVideoRole:"role",preferredVideoHdrLevel:"hdrLevel",preferredVideoLayout:"layout"};if(Object.keys(o).some(d=>d in t)){let d={label:"",role:"",language:"",codec:"",hdrLevel:"",layout:""};for(let[u,m]of Object.entries(o))u in t&&(i(u,"preferredVideo"),d[m]=t[u],delete t[u]);t.preferredVideo||(t.preferredVideo=[d])}if("preferredVideoCodecs"in t){i("preferredVideoCodecs","preferredVideo");let d=t.preferredVideoCodecs;Array.isArray(d)&&d.length&&(t.preferredVideo||(t.preferredVideo=d.map(u=>({label:"",role:"",language:"",codec:u,hdrLevel:"",layout:""})))),delete t.preferredVideoCodecs}}registerExtraTrackPromise_(t){this.pendingExtraTrackPromises_.add(t),t.finally(()=>this.pendingExtraTrackPromises_.delete(t))}async waitForPendingExtraTrackPromises_(){this.pendingExtraTrackPromises_.size&&await Promise.all([...this.pendingExtraTrackPromises_])}};l(Q,"LoadMode",{DESTROYED:0,NOT_LOADED:1,MEDIA_SOURCE:2,SRC_EQUALS:3}),l(Q,"TYPICAL_BUFFERING_THRESHOLD_",.5),l(Q,"supportPlugins_",new Map),l(Q,"adManagerFactory_",null),l(Q,"queueManagerFactory_",null),l(Q,"TextTrackLabel","Shaka Player TextTrack");var dt=Q;dt.version=goog.define("shaka.Player.version","v5.2.10-uncompiled");Cr.init(dt.version);/*! @license
|
|
490
|
+
*/var Q=class Q extends Be{constructor(t,i=null,r){super();l(this,"loadMode_");l(this,"video_");l(this,"videoContainer_");l(this,"isTextVisible_");l(this,"globalEventManager_");l(this,"attachEventManager_");l(this,"loadEventManager_");l(this,"trickPlayEventManager_");l(this,"adManagerEventManager_");l(this,"networkingEngine_");l(this,"drmEngine_");l(this,"mediaSourceEngine_");l(this,"playhead_");l(this,"operationId_");l(this,"mutex_");l(this,"playheadObservers_");l(this,"playRateController_");l(this,"bufferPoller_");l(this,"bufferObserver_");l(this,"regionTimeline_");l(this,"metadataRegionTimeline_");l(this,"emsgRegionTimeline_");l(this,"cmcdManager_");l(this,"cmsdManager_");l(this,"lcevcCanvas_");l(this,"lcevcDec_");l(this,"qualityObserver_");l(this,"streamingEngine_");l(this,"parser_");l(this,"parserFactory_");l(this,"manifest_");l(this,"assetUri_");l(this,"mimeType_");l(this,"startTime_");l(this,"fullyLoaded_");l(this,"abrManager_");l(this,"abrManagerFactory_");l(this,"nextExternalStreamId_");l(this,"externalSrcEqualsThumbnailsStreams_");l(this,"deferredCloseSegmentIndex_");l(this,"externalSrcEqualsChapterStreams_");l(this,"completionPercent_");l(this,"config_");l(this,"lowLatencyConfig_");l(this,"currentTargetLatency_");l(this,"rebufferingCount_");l(this,"targetLatencyReached_");l(this,"maxHwRes_");l(this,"manifestFilterer_");l(this,"createdPreloadManagers_");l(this,"stats_");l(this,"currentAdaptationSetCriteria_");l(this,"cleanupOnUnload_");l(this,"adManager_");l(this,"queueManager_");l(this,"preloadDueAdManager_");l(this,"preloadDueAdManagerVideo_");l(this,"preloadDueAdManagerVideoEnded_");l(this,"externalSrcEqualsTextTracks_");l(this,"preloadDueAdManagerTimer_");l(this,"checkVariantsTimer_");l(this,"preloadNextUrl_");l(this,"textDisplayer_");l(this,"speechToText_");l(this,"pendingExtraTrackPromises_");l(this,"frameHandler_");l(this,"operationManager_");l(this,"playbackObjectUrl_");l(this,"lastTextFactory_");this.loadMode_=Q.LoadMode.NOT_LOADED,this.video_=null,this.videoContainer_=i,this.isTextVisible_=!1,this.globalEventManager_=new ue,this.attachEventManager_=new ue,this.loadEventManager_=new ue,this.trickPlayEventManager_=new ue,this.adManagerEventManager_=new ue,this.networkingEngine_=null,this.drmEngine_=null,this.mediaSourceEngine_=null,this.playhead_=null,this.operationId_=0,this.mutex_=new Zr,this.playheadObservers_=null,this.playRateController_=null,this.bufferPoller_=null,this.bufferObserver_=null,this.regionTimeline_=null,this.metadataRegionTimeline_=null,this.emsgRegionTimeline_=null,this.cmcdManager_=null,this.cmsdManager_=null,this.lcevcCanvas_=null,this.lcevcDec_=null,this.qualityObserver_=null,this.streamingEngine_=null,this.parser_=null,this.parserFactory_=null,this.manifest_=null,this.assetUri_=null,this.mimeType_=null,this.startTime_=null,this.fullyLoaded_=!1,this.abrManager_=null,this.abrManagerFactory_=null,this.nextExternalStreamId_=1e9,this.externalSrcEqualsThumbnailsStreams_=[],this.deferredCloseSegmentIndex_=new Map,this.externalSrcEqualsChapterStreams_=[],this.completionPercent_=-1,this.config_=this.defaultConfig_(),this.lowLatencyConfig_=st.createDefaultForLL(),this.currentTargetLatency_=null,this.rebufferingCount_=-1,this.targetLatencyReached_=null,this.lastTextFactory_,this.maxHwRes_={width:1/0,height:1/0},this.manifestFilterer_=new Rr(this.config_,this.maxHwRes_,null),this.createdPreloadManagers_=[],this.stats_=null,this.currentAdaptationSetCriteria_=this.config_.adaptationSetCriteriaFactory();let s={preferredAudio:this.config_.preferredAudio,preferredVideo:this.config_.preferredVideo,language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:"",activeAudioCodec:"",activeAudioChannelCount:0,keySystem:this.keySystem()};st.addDeprecatedConfigFields(s),this.currentAdaptationSetCriteria_.configure(s),this.cleanupOnUnload_=[],r&&r(this),this.cmcdManager_=this.createCmcd_(),this.cmsdManager_=this.createCmsd_(),this.networkingEngine_=this.createNetworkingEngine(),this.adManager_=null,this.queueManager_=null,this.preloadDueAdManager_=null,this.preloadDueAdManagerVideo_=null,this.preloadDueAdManagerVideoEnded_=!1,this.externalSrcEqualsTextTracks_=[],this.preloadDueAdManagerTimer_=new ae(async()=>{this.preloadDueAdManager_&&(v.assert(this.preloadDueAdManagerVideo_,"Must have video"),await this.attach(this.preloadDueAdManagerVideo_,!0),await this.load(this.preloadDueAdManager_),this.preloadDueAdManagerVideoEnded_?this.preloadDueAdManagerVideo_.pause():this.preloadDueAdManagerVideo_.play(),this.preloadDueAdManager_=null,this.preloadDueAdManagerVideoEnded_=!1)}),Q.adManagerFactory_&&(this.adManager_=Q.adManagerFactory_(this),this.adManager_.configure(this.config_.ads),this.adManagerEventManager_.listen(this.adManager_,"ad-content-pause-requested",async n=>{if(this.preloadDueAdManagerTimer_.stop(),!this.preloadDueAdManager_){this.preloadDueAdManagerVideo_=this.video_,this.preloadDueAdManagerVideoEnded_=this.isEnded();let a=n.saveLivePosition||!1,o=!0;this.isLive()&&(o=a),this.preloadDueAdManager_=await this.detachAndSavePreload(!0,o)}}),this.adManagerEventManager_.listen(this.adManager_,"ad-content-resume-requested",n=>{let a=n.offset||0;this.preloadDueAdManager_&&this.preloadDueAdManager_.setOffsetToStartTime(a),this.preloadDueAdManagerTimer_.tickAfter(.1)}),this.adManagerEventManager_.listen(this.adManager_,"ad-content-attach-requested",async n=>{!this.video_&&this.preloadDueAdManagerVideo_&&(await this.attach(this.preloadDueAdManagerVideo_,!0),this.preloadDueAdManagerVideo_=null)})),Q.queueManagerFactory_&&(this.queueManager_=Q.queueManagerFactory_(this),this.queueManager_.configure(this.config_.queue)),this.globalEventManager_.listen(window,"online",()=>{this.restoreDisabledVariants_(),this.retryStreaming()}),this.checkVariantsTimer_=new ae(()=>this.checkVariants_()),this.preloadNextUrl_=null,this.textDisplayer_=null,this.speechToText_=null,this.pendingExtraTrackPromises_=new Set,this.frameHandler_=null,this.operationManager_=new fi,this.playbackObjectUrl_=null,t&&(p.alwaysWarn("Please migrate from initializing Player with a mediaElement; use the attach method instead."),this.attach(t,!0))}createLcevcDec_(t,i){this.lcevcDec_==null&&(this.lcevcDec_=new xr(this.video_,this.lcevcCanvas_,t,i),this.mediaSourceEngine_&&this.mediaSourceEngine_.updateLcevcDec(this.lcevcDec_))}closeLcevcDec_(){this.lcevcDec_!=null&&(this.lcevcDec_.hideCanvas(),this.lcevcDec_.release(),this.lcevcDec_=null)}setupLcevc_(t,i){i||t.lcevc.enabled?(this.closeLcevcDec_(),this.createLcevcDec_(t.lcevc,i)):this.closeLcevcDec_()}static makeEvent_(t,i){return new L(t,i)}async destroy(){if(this.loadMode_==Q.LoadMode.DESTROYED)return;this.closeLcevcDec_();let t=this.detach();this.loadMode_=Q.LoadMode.DESTROYED,await t,await this.destroyAllPreloads(),this.globalEventManager_&&(this.globalEventManager_.release(),this.globalEventManager_=null),this.attachEventManager_&&(this.attachEventManager_.release(),this.attachEventManager_=null),this.loadEventManager_&&(this.loadEventManager_.release(),this.loadEventManager_=null),this.trickPlayEventManager_&&(this.trickPlayEventManager_.release(),this.trickPlayEventManager_=null),this.adManagerEventManager_&&(this.adManagerEventManager_.release(),this.adManagerEventManager_=null),this.abrManagerFactory_=null,this.config_=null,this.stats_=null,this.videoContainer_=null,this.cmcdManager_=null,this.cmsdManager_=null,this.networkingEngine_&&(await this.networkingEngine_.destroy(),this.networkingEngine_=null),this.abrManager_&&(this.abrManager_.release(),this.abrManager_=null),this.queueManager_&&(this.queueManager_.destroy(),this.queueManager_=null),this.speechToText_&&(this.speechToText_.release(),this.speechToText_=null),this.frameHandler_&&(this.frameHandler_.release(),this.frameHandler_=null),super.release()}static registerSupportPlugin(t,i){Q.supportPlugins_.set(t,i)}static setAdManagerFactory(t){Q.adManagerFactory_=t}static setQueueManagerFactory(t){Q.queueManagerFactory_=t}static isBrowserSupported(){if(window.Promise||p.alwaysWarn("A Promise implementation or polyfill is required"),!(!!window.Promise&&!!window.Uint8Array&&!!Array.prototype.forEach)||(navigator.userAgent||"").includes("Trident/"))return!1;let r=j.getDevice();return r.supportsMediaSource()?!0:r.supportsMediaType("application/x-mpegurl")}static async probeSupport(t=!0){v.assert(Q.isBrowserSupported(),"Must have basic support");let i={};t&&(i=await Bi.probeSupport());let r=me.probeSupport(),s=cr.probeSupport(),n=j.getDevice();v.assert(n,"device must be non-null");let a=await n.detectMaxHardwareResolution(),o={manifest:r,media:s,drm:i,hardwareResolution:a};return Q.supportPlugins_.forEach((d,u)=>{o[u]=d()}),o}makeStateChangeEvent_(t){this.dispatchEvent(Q.makeEvent_(L.EventName.OnStateChange,new Map().set("state",t)))}async attach(t,i=!0){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();let r=this.video_&&this.video_==t;if(this.video_&&this.video_!=t&&await this.detach(),!await this.atomicOperationAcquireMutex_("attach"))try{if(!r){this.makeStateChangeEvent_("attach");let n=a=>this.onVideoError_(a);this.attachEventManager_.listen(t,"error",n),this.video_=t,this.cmcdManager_&&this.cmcdManager_.setMediaElement(t)}let s=j.getDevice();i&&s.supportsMediaSource()&&!this.mediaSourceEngine_&&await this.initializeMediaSourceEngineInner_()}catch(s){throw await this.detach(),s}finally{this.mutex_.release()}}attachCanvas(t){this.lcevcCanvas_=t}async detach(t=!1,i=!1){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();if(await this.unload(!1,t,i),!await this.atomicOperationAcquireMutex_("detach"))try{this.video_&&(this.attachEventManager_.removeAll(),this.video_=null),this.makeStateChangeEvent_("detach"),this.adManager_&&!t&&this.adManager_.release()}finally{this.mutex_.release()}}async atomicOperationAcquireMutex_(t){let i=++this.operationId_;return await this.mutex_.acquire(t),i!=this.operationId_?(this.mutex_.release(),!0):!1}async unload(t=!0,i=!1,r=!1){if(this.loadMode_!=Q.LoadMode.DESTROYED&&(this.loadMode_=Q.LoadMode.NOT_LOADED),await this.atomicOperationAcquireMutex_("unload"))return;try{this.fullyLoaded_=!1,this.makeStateChangeEvent_("unload"),this.closeLcevcDec_();let n=this.cleanupOnUnload_.map(o=>o());this.cleanupOnUnload_=[],await Promise.all(n);let a=new Map().set("isSwitchingContent",r);if(this.dispatchEvent(Q.makeEvent_(L.EventName.Unloading,a)),this.regionTimeline_&&(this.regionTimeline_.release(),this.regionTimeline_=null),this.metadataRegionTimeline_&&(this.metadataRegionTimeline_.release(),this.metadataRegionTimeline_=null),this.emsgRegionTimeline_&&(this.emsgRegionTimeline_.release(),this.emsgRegionTimeline_=null),this.video_&&(this.loadEventManager_.removeAll(),this.trickPlayEventManager_.removeAll()),this.checkVariantsTimer_.stop(),this.playheadObservers_&&(this.playheadObservers_.release(),this.playheadObservers_=null),this.bufferPoller_&&(this.bufferPoller_.stop(),this.bufferPoller_=null),this.parser_&&(await this.parser_.stop(),this.parser_=null,this.parserFactory_=null),this.abrManager_&&this.abrManager_.stop(),this.streamingEngine_&&(await this.streamingEngine_.destroy(),this.streamingEngine_=null),this.playRateController_&&(this.playRateController_.release(),this.playRateController_=null),this.playhead_&&(this.playhead_.release(),this.playhead_=null),de.isMediaKeysPolyfilled("webkit")&&this.drmEngine_&&(await this.drmEngine_.destroy(),this.drmEngine_=null),this.mediaSourceEngine_&&(await this.mediaSourceEngine_.destroy(),this.mediaSourceEngine_=null),this.adManager_&&!i&&this.adManager_.onAssetUnload(),this.preloadDueAdManager_&&!i&&(this.preloadDueAdManager_.destroy(),this.preloadDueAdManager_=null),i||this.preloadDueAdManagerTimer_.stop(),this.cmcdManager_&&this.cmcdManager_.reset(),this.cmsdManager_&&this.cmsdManager_.reset(),this.textDisplayer_&&(await this.textDisplayer_.destroy(),this.textDisplayer_=null),this.isTextVisible_=!1,this.speechToText_&&this.speechToText_.disable(),this.pendingExtraTrackPromises_.clear(),this.frameHandler_&&(this.frameHandler_.release(),this.frameHandler_=null),await this.operationManager_.destroy(),this.video_){for(let o of this.externalSrcEqualsTextTracks_)o.src.startsWith("blob:")&&URL.revokeObjectURL(o.src),o.remove();this.externalSrcEqualsTextTracks_=[],Ke.clearSourceFromVideo(this.video_)&&this.video_.load()}if(this.drmEngine_&&(await this.drmEngine_.destroy(),this.drmEngine_=null),this.preloadNextUrl_&&this.assetUri_!=this.preloadNextUrl_.getAssetUri()&&(this.preloadNextUrl_.isDestroyed()||this.preloadNextUrl_.destroy(),this.preloadNextUrl_=null),this.assetUri_=null,this.mimeType_=null,this.bufferObserver_=null,this.manifest_){for(let o of this.manifest_.variants)for(let c of[o.audio,o.video])c&&c.segmentIndex&&c.segmentIndex.release();for(let o of this.manifest_.textStreams)o.segmentIndex&&o.segmentIndex.release()}this.config_&&this.config_.streaming.clearDecodingCache&&(re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap()),this.manifest_=null,this.stats_=new tr,this.lastTextFactory_=null,this.targetLatencyReached_=null,this.currentTargetLatency_=null,this.rebufferingCount_=-1,this.externalSrcEqualsThumbnailsStreams_=[];for(let o of this.deferredCloseSegmentIndex_.values())o.stop();this.deferredCloseSegmentIndex_.clear(),this.externalSrcEqualsChapterStreams_=[],this.completionPercent_=-1,this.networkingEngine_&&this.networkingEngine_.clearCommonAccessTokenMap(),this.playbackObjectUrl_&&(URL.revokeObjectURL(this.playbackObjectUrl_),this.playbackObjectUrl_=null),this.updateBufferState_()}finally{this.mutex_.release()}let s=j.getDevice();t&&s.supportsMediaSource()&&!this.mediaSourceEngine_&&this.video_&&await this.initializeMediaSourceEngineInner_()}updateStartTime(t){this.startTime_=t}async load(t,i=null,r){if(this.loadMode_==Q.LoadMode.DESTROYED)throw this.createAbortLoadError_();!this.video_&&this.preloadDueAdManagerVideo_&&(await this.attach(this.preloadDueAdManagerVideo_,!0),this.preloadDueAdManagerVideo_=null);let s=null,n="";if(r=r==null?void 0:r.toLowerCase(),t instanceof ks){if(t.isDestroyed())throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.PRELOAD_DESTROYED);s=t,n=s.getAssetUri()||""}else n=t||"";if(await this.mutex_.acquire("load"),this.mutex_.release(),!this.video_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.NO_VIDEO_ELEMENT);this.assetUri_&&(this.assetUri_=n,await this.unload(!1,!1,!0)),this.cmcdManager_&&this.cmcdManager_.onLoad();let a=++this.operationId_,o=async()=>{if(this.operationId_!=a)throw s&&await s.destroy(),this.createAbortLoadError_()},c=async(d,u)=>{try{await this.mutex_.acquire(u),await o(),await d(),await o(),s&&this.config_&&s.reconfigure(this.config_)}finally{this.mutex_.release()}};try{i==null&&s&&(i=s.getStartTime()),this.startTime_=i,this.fullyLoaded_=!1,this.assetUri_=n,this.dispatchEvent(Q.makeEvent_(L.EventName.Loading)),s?r=s.getMimeType():r||await c(async()=>{r=await this.guessMimeType_(n)},"guessMimeType_");let d=!!s;s?(s.setEventHandoffTarget(this),this.stats_=s.getStats()):(s=await this.preloadInner_(n,i,r,!0,this.config_),s?(s.markIsLoad(),s.setEventHandoffTarget(this),this.stats_=s.getStats(),s.start(),s.waitForFinish().catch(()=>{})):this.stats_=new tr);let u=!s,m=Date.now()/1e3;this.stats_=s?s.getStats():new tr,this.mimeType_=r||null,this.updateBufferState_();let f=()=>{let g=this.video_?this.video_.buffered:null;return{start:Je.bufferStart(g)||0,end:Je.bufferEnd(g)||0}};if(this.metadataRegionTimeline_=new zr(f),this.metadataRegionTimeline_.addEventListener("regionadd",g=>{let _=g.region;this.dispatchMetadataEvent_(_,L.EventName.MetadataAdded)}),u)await c(async()=>{v.assert(r,"We should know the mimeType by now!"),await this.initializeSrcEqualsDrmInner_(r)},"initializeSrcEqualsDrmInner_"),await c(async()=>{v.assert(r,"We should know the mimeType by now!"),await this.srcEqualsInner_(m,r)},"srcEqualsInner_");else{this.emsgRegionTimeline_=new zr(f),await c(async()=>{await s.waitForManifest(),this.parserFactory_=s.getParserFactory(),this.parser_=s.receiveParser(),this.manifest_=s.getManifest()},"waitForFinish"),this.mediaSourceEngine_||await c(async()=>{await this.initializeMediaSourceEngineInner_()},"initializeMediaSourceEngineInner_"),await c(async()=>{await s.waitForFinish()},"waitForFinish"),this.config_=s.getConfiguration(),this.manifestFilterer_=s.getManifestFilterer(),this.parser_&&this.parser_.setMediaElement&&this.video_&&this.parser_.setMediaElement(this.video_),this.regionTimeline_=s.receiveRegionTimeline(),this.qualityObserver_=s.getQualityObserver();let g=s.getCurrentAdaptationSetCriteria();if(g&&(this.currentAdaptationSetCriteria_=g),d&&this.video_&&this.video_.nodeName==="AUDIO"&&(this.makeManifestAudioOnly_(),this.configure("manifest.disableVideo",!0)),s.getDrmEngine()||await c(async()=>{await s.initializeDrm(this.video_)},"drmEngine_.init"),this.drmEngine_=s.receiveDrmEngine(),await c(async()=>{await this.drmEngine_.attach(this.video_)},"drmEngine_.attach"),this.currentAdaptationSetCriteria_){let S=this.currentAdaptationSetCriteria_.getConfiguration();S.keySystem=this.keySystem(),this.currentAdaptationSetCriteria_.configure(S)}let _=this.config_.abrFactory;(!this.abrManager_||this.abrManagerFactory_!=_)&&(this.abrManagerFactory_=_,this.abrManager_&&this.abrManager_.release(),this.abrManager_=_(),this.abrManager_.configure(this.config_.abr));let T=s.receiveSegmentPrefetchesById(),b=s.getPrefetchedVariant();await c(async()=>{await this.loadInner_(m,b,T)},"loadInner_"),s.stopQueuingLatePhaseQueuedOperations(),this.mimeType_&&j.getDevice().supportsAirPlay()&&O.isHlsType(this.mimeType_)&&this.mediaSourceEngine_.addSecondarySource(this.assetUri_,this.mimeType_)}this.dispatchEvent(Q.makeEvent_(L.EventName.Loaded))}catch(d){throw d&&d.code!=h.Code.LOAD_INTERRUPTED&&await this.unload(!1),d}finally{s&&await s.destroy(),this.preloadNextUrl_=null}}makeManifestAudioOnly_(){for(let t of this.manifest_.variants)t.video&&(t.video.closeSegmentIndex(),t.video=null),t.audio&&t.audio.bandwidth?t.bandwidth=t.audio.bandwidth:t.bandwidth=0;this.manifest_.variants=this.manifest_.variants.filter(t=>t.audio)}async unloadAndSavePreload(t=!0,i=!1,r=!1,s=!1){let n=await this.savePreload_(r);return await this.unload(t,i,s),n}async detachAndSavePreload(t=!1,i=!1,r=!1){let s=await this.savePreload_(i);return await this.detach(t,r),s}async savePreload_(t=!1){let i=null;if(this.manifest_&&this.parser_&&this.parserFactory_&&this.assetUri_&&this.config_){let r=this.video_.currentTime;t||(r=null),i=await this.makePreloadManager_(this.assetUri_,r,this.mimeType_,this.config_,!0,!1),this.createdPreloadManagers_.push(i),this.parser_&&this.parser_.setMediaElement&&this.parser_.setMediaElement(null);let s=this.streamingEngine_?this.streamingEngine_.getCurrentVariant():null;s&&i.setPrefetchVariant(s),i.attachManifest(this.manifest_,this.parser_,this.parserFactory_),i.attachAdaptationSetCriteria(this.currentAdaptationSetCriteria_),i.start(),this.manifest_=null,this.parser_=null,this.parserFactory_=null,this.abrManager_=null,this.abrManagerFactory_=null}return i}async preload(t,i=null,r,s,n=!1){v.assert(this.config_,"Config must not be null!"),r=r==null?void 0:r.toLowerCase();let a=this.defaultConfig_();st.mergeConfigObjects(a,s||this.config_,this.defaultConfig_());let o=await this.preloadInner_(t,i,r,!1,a);if(o)o.start();else{let c=new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.SRC_EQUALS_PRELOAD_NOT_SUPPORTED);if(n)throw c;this.onError_(c)}return o}async destroyAllPreloads(){let t=[];for(let i of this.createdPreloadManagers_)i.isDestroyed()||t.push(i.destroy());this.createdPreloadManagers_=[],await Promise.all(t)}async preloadInner_(t,i,r,s=!1,n){if(v.assert(this.networkingEngine_,"Should have a net engine!"),v.assert(this.config_,"Config must not be null!"),r||(r=await this.guessMimeType_(t)),this.shouldUseSrcEquals_(r))return null;let o=n||this.config_,c=!1;s&&this.video_&&this.video_.nodeName==="AUDIO"&&(c=!0);let d=this.makePreloadManager_(t,i,r||null,o,!s,c);return s?d=d.then(u=>(u.markIsLoad(),u)):d=d.then(u=>(this.createdPreloadManagers_.push(u),u)),d}async makePreloadManager_(t,i,r,s,n=!0,a=!1){v.assert(this.networkingEngine_,"Must have net engine");let o=null,c=Fe.cloneObject(s);a&&(c.manifest.disableVideo=!0);let d=()=>(v.assert(o,"Must have preload manager"),o.hasBeenAttached()&&o.isDestroyed()?null:o),u=()=>d()?d().getConfiguration():this.config_;if(this.maxHwRes_.width==1/0&&this.maxHwRes_.height==1/0&&!this.config_.ignoreHardwareResolution){let A=j.getDevice();v.assert(A,"device must be non-null");let x=await A.detectMaxHardwareResolution();this.maxHwRes_.width=x.width,this.maxHwRes_.height=x.height}let m=new Rr(c,this.maxHwRes_,null),f={networkingEngine:this.networkingEngine_,filter:async A=>{if(await m.filterManifest(A)){let M=Q.makeEvent_(L.EventName.TracksChanged);await Promise.resolve(),o.dispatchEvent(M)}},makeTextStreamsForClosedCaptions:A=>this.makeTextStreamsForClosedCaptions_(A),onTimelineRegionAdded:A=>{o.getRegionTimeline().addRegion(A)},onEvent:A=>o.dispatchEvent(A),onError:A=>o.onError(A),isLowLatencyMode:()=>u().streaming.lowLatencyMode,updateDuration:()=>{this.streamingEngine_&&o.hasBeenAttached()&&this.streamingEngine_.updateDuration()},newDrmInfo:A=>{let x=o.getDrmEngine(),M=x?x.getDrmInfo():null;M&&x.getMediaKeys()&&m.processDrmInfos(M.keySystem,A)},onManifestUpdated:()=>{let A=L.EventName.ManifestUpdated,x=new Map().set("isLive",this.isLive()).set("isInProgress",this.isInProgress());o.dispatchEvent(Q.makeEvent_(A,x)),o.addQueuedOperation(!1,()=>{this.adManager_&&this.adManager_.onManifestUpdated(this.isDynamic())})},getBandwidthEstimate:()=>this.abrManager_.getBandwidthEstimate(),onMetadata:(A,x,M,C)=>{let k=A;(A=="com.apple.hls.interstitial"||A=="com.apple.hls.overlay")&&(k="com.apple.quicktime.HLS");let D={type:k,startTime:x,endTime:M,values:C},V=new Promise(ee=>{o.addQueuedOperation(!1,async()=>{if(this.adManager_){if(this.video_)try{await this.adManager_.onHLSMetadata(D)}catch(oe){}ee()}})});for(let ee of C)ee.name!="ID"&&o.addQueuedOperation(!1,()=>{this.addMetadataToRegionTimeline_(x,M,k,ee)});return V},disableStream:A=>this.disableStream(A,this.config_.streaming.maxDisabledTime),addFont:(A,x)=>this.addFont(A,x),getStreamingRetryParameters:()=>this.config_.streaming.retryParameters,onSegmentReceived:(A,x)=>{o.addQueuedOperation(!1,()=>{var M;(M=this.abrManager_)==null||M.segmentDownloaded(A,x,!0)})}},g=new zr(()=>this.seekRange());g.addEventListener("regionadd",A=>{let x=A.region;this.onRegionEvent_(L.EventName.TimelineRegionAdded,x,o),o.addQueuedOperation(!1,()=>{this.adManager_&&this.adManager_.onDASHMetadata(x)})});let _=null;c.streaming.observeQualityChanges&&(_=new dr(()=>this.getBufferedInfo()),_.addEventListener("qualitychange",A=>{let x=A.quality,M=A.position;this.onMediaQualityChange_(x,M)}),_.addEventListener("audiotrackchange",A=>{let x=A.quality,M=A.position;this.onMediaQualityChange_(x,M,!0)}));let T=!0,b={netEngine:this.networkingEngine_,onError:A=>o.onError(A),onKeyStatus:A=>{o.addQueuedOperation(!0,()=>{this.drmEngine_&&this.onKeyStatus_(A)})},onExpirationUpdated:(A,x)=>{let M=Q.makeEvent_(L.EventName.ExpirationUpdated);o.dispatchEvent(M);let C=o.getParser();C&&C.onExpirationUpdated&&C.onExpirationUpdated(A,x)},onEvent:A=>{if(o.dispatchEvent(A),A.type==L.EventName.DrmSessionUpdate&&T){T=!1;let M=Date.now()/1e3-o.getStartTimeOfDRM();(this.stats_||o.getStats()).setDrmTime(M),this.lcevcDec_&&this.lcevcDec_.hideCanvas()}}},S=this.createNetworkingEngine(d);this.networkingEngine_.copyFiltersInto(S);let w={config:c,manifestPlayerInterface:f,regionTimeline:g,qualityObserver:_,createDrmEngine:()=>this.createDrmEngine(b),manifestFilterer:m,networkingEngine:S,allowPrefetch:n};return o=new ks(t,r,i,w),o}async guessMimeType_(t){v.assert(this.networkingEngine_,"Should have a net engine!");let i=this.config_.manifest.retryParameters,r=await ct.getMimeType(t,this.networkingEngine_,i);return O.isHlsType(r)?j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(r="application/vnd.apple.mpegurl"):r==="video/quicktime"&&j.getDevice().getBrowserEngine()===ie.BrowserEngine.CHROMIUM&&(r="video/mp4"),r}shouldUseSrcEquals_(t){if(!j.getDevice().supportsMediaSource())return!0;if(t){let s=(this.video_||Ke.anyMediaElement()).canPlayType(t)!="";if(!s)return!1;let n=me.isSupported(t);return n?(v.assert(s&&n,"Both native and MSE playback should be possible!"),O.isHlsType(t)?j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(this.config_.drm.servers["com.apple.fps"]||this.config_.drm.servers["com.apple.fps.1_0"])?this.config_.streaming.useNativeHlsForFairPlay:this.config_.streaming.preferNativeHls:O.isDashType(t)?this.config_.streaming.preferNativeDash:!1):!0}return!1}createAndConfigureTextDisplayer_(t=!1){let i=this.config_.textDisplayFactory;if(this.lastTextFactory_!==i||t){let r=this.textDisplayer_;this.textDisplayer_=i(this),this.textDisplayer_.configure(this.config_.textDisplayer),r?(this.textDisplayer_.setTextVisibility(r.isTextVisible()),r.destroy().catch(()=>{})):this.textDisplayer_.setTextVisibility(this.isTextVisible_),this.mediaSourceEngine_&&this.mediaSourceEngine_.setTextDisplayer(this.textDisplayer_),this.lastTextFactory_=i,this.streamingEngine_&&this.streamingEngine_.reloadTextStream()}else this.textDisplayer_&&this.textDisplayer_.configure(this.config_.textDisplayer)}async initializeMediaSourceEngineInner_(){let t=j.getDevice();v.assert(t.supportsMediaSource(),"We should not be initializing media source on a platform that does not support media source."),v.assert(this.video_,"We should have a media element when initializing media source."),v.assert(this.mediaSourceEngine_==null,"We should not have a media source engine yet."),this.makeStateChangeEvent_("media-source"),this.config_.mediaSource.useSourceElements&&Ke.clearSourceFromVideo(this.video_),this.createAndConfigureTextDisplayer_(),v.assert(this.textDisplayer_,"Text displayer should be created already");let i=this.createMediaSourceEngine(this.video_,this.textDisplayer_,{getKeySystem:()=>this.keySystem(),onMetadata:(s,n,a)=>{this.processTimedMetadataMediaSrc_(s,n,a)},onEmsg:s=>{this.addEmsgToRegionTimeline_(s)},onEvent:s=>this.dispatchEvent(s),onManifestUpdate:()=>this.onManifestUpdate_(),getDrmInfo:()=>this.drmInfo()},this.lcevcDec_,this.config_.mediaSource),{segmentRelativeVttTiming:r}=this.config_.manifest;i.setSegmentRelativeVttTiming(r),await i.open(),this.mediaSourceEngine_=i}setupPlayRateController_(t){this.playRateController_=new hn({getRate:()=>t.playbackRate,getDefaultRate:()=>t.defaultPlaybackRate,setRate:i=>{t.playbackRate=i},movePlayhead:i=>{let r=t.currentTime;if(!Je.isBuffered(t.buffered,r)||t.readyState<=HTMLMediaElement.HAVE_CURRENT_DATA)return;let s=r+i,n=this.seekRange();if(s<n.start)r!==n.start&&(t.currentTime=n.start);else if(s>n.end)r!==n.end&&(t.currentTime=n.end);else{if(i<0){let o=Je.getBufferedInfo(t.buffered);for(let c=o.length-1;c>=0;c--)if(s>=o[c].start){s>o[c].end&&(s=Math.max(o[c].start,o[c].end-.5));break}}t.currentTime=s}},isPaused:()=>t.paused})}addBasicMediaListeners_(t,i){this.loadEventManager_.listenMulti(t,[Gt.PLAYING,Gt.PAUSE,Gt.ENDED],()=>{this.updateStateHistory_()}),this.loadEventManager_.listen(t,"ratechange",()=>{this.onRateChange_()});let s=j.getDevice().getRemote(t);s&&(this.loadEventManager_.listen(s,"connect",()=>{this.streamingEngine_&&s.state=="connected"&&this.onTextChanged_(),this.onTracksChanged_()}),this.loadEventManager_.listen(s,"connecting",()=>this.onTracksChanged_()),this.loadEventManager_.listen(s,"disconnect",async()=>{this.streamingEngine_&&s.state=="disconnected"&&(await this.streamingEngine_.resetMediaSource(),this.onTextChanged_()),this.onTracksChanged_()})),t.audioTracks&&this.loadEventManager_.listenMulti(t.audioTracks,["addtrack","removetrack","change"],()=>{this.onTracksChanged_()}),t.videoTracks&&this.loadEventManager_.listenMulti(t.videoTracks,["addtrack","removetrack","change"],()=>{this.onTracksChanged_()});let n=t;if((n.webkitPresentationMode||n.webkitSupportsFullscreen)&&this.loadEventManager_.listen(n,"webkitpresentationmodechanged",()=>{this.videoContainer_&&this.createAndConfigureTextDisplayer_(!0)}),t.textTracks){let a=()=>{this.loadMode_===Q.LoadMode.SRC_EQUALS&&this.textDisplayer_ instanceof hr&&this.onTextChanged_(),this.onTracksChanged_()};this.loadEventManager_.listen(t.textTracks,"addtrack",o=>{let c=o;if(c.track){let d=c.track;switch(v.assert(d instanceof TextTrack,"Wrong track type!"),d.kind){case"metadata":this.processTimedMetadata_(d);break;case"chapters":this.activateChaptersTrack_(d);break;default:a();break}}}),this.loadEventManager_.listenMulti(t.textTracks,["removetrack","change"],a)}t.preload!="none"&&(this.loadEventManager_.listenOnce(t,"loadedmetadata",()=>{let o=Date.now()/1e3-i;this.stats_.setLoadLatency(o)}),this.isAudioOnly()||(this.frameHandler_=new es(t),this.frameHandler_.start(()=>{this.frameHandler_.release(),this.frameHandler_=null;let c=Date.now()/1e3-i;this.stats_.setTimeToFirstFrame(c)},!0)||this.loadEventManager_.listenOnce(t,"loadeddata",()=>{let c=Date.now()/1e3-i;this.stats_.setTimeToFirstFrame(c)})))}async loadInner_(t,i,r){v.assert(this.video_,"We should have a media element by now."),v.assert(this.manifest_,"The manifest should already be parsed."),v.assert(this.assetUri_,"We should have an asset uri by now."),v.assert(this.abrManager_,"We should have an abr manager by now."),this.makeStateChangeEvent_("load");let s=this.video_;this.setupPlayRateController_(s),this.addBasicMediaListeners_(s,t),"onchange"in window.screen&&this.loadEventManager_.listen(window.screen,"change",()=>{if(this.currentAdaptationSetCriteria_.getConfiguration){let g=this.currentAdaptationSetCriteria_.getConfiguration();g.preferredVideo.some(T=>T.hdrLevel=="AUTO")?this.updateAbrManagerVariants_():this.config_.preferredVideo.some(b=>b.hdrLevel=="AUTO")&&this.config_.abr.enabled&&(g.preferredVideo=this.config_.preferredVideo,st.addDeprecatedConfigFields(g),this.currentAdaptationSetCriteria_.configure(g),this.updateAbrManagerVariants_())}});let n=!1;for(let g of this.manifest_.variants){let _=g.video&&g.video.dependencyStream;_&&(n=xr.isStreamSupported(_))}this.setupLcevc_(this.config_,n),Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.abrManager_.init((g,_,T)=>this.switch_(g,_,T),(g,_)=>{var S;let T=(S=this.streamingEngine_)==null?void 0:S.getCurrentVariant(),b=T&&T[g];b&&this.disableStream(b,_)}),this.abrManager_.setMediaElement(s),this.abrManager_.setCmsdManager(this.cmsdManager_),this.streamingEngine_=this.createStreamingEngine(),this.streamingEngine_.configure(this.config_.streaming),this.loadMode_=Q.LoadMode.MEDIA_SOURCE,this.dispatchEvent(Q.makeEvent_(L.EventName.Streaming));let a=i,o,c;do{if(c=this.streamingEngine_.getCurrentVariant(),!c){let _=this.chooseVariant_(!0);i||(a=_),v.assert(a,"Must choose an initial variant!")}let g=[];o=c||a;for(let _ of[o.video,o.audio])_&&!_.segmentIndex&&(g.push(_.createSegmentIndex()),_.dependencyStream&&g.push(_.dependencyStream.createSegmentIndex()));g.length>0&&await Promise.all(g)}while(!o||o.disabledUntilTime!=0);this.updateAbrManagerVariants_(),this.parser_&&this.parser_.onInitialVariantChosen&&this.parser_.onInitialVariantChosen(o),this.manifest_.isLowLatency&&(this.config_.streaming.lowLatencyMode?this.configure(this.lowLatencyConfig_):p.alwaysWarn("Low-latency live stream detected, but low-latency streaming mode is not enabled in Shaka Player. Set streaming.lowLatencyMode configuration to true, and see https://bit.ly/3clctcj for details.")),this.cmcdManager_&&(this.cmcdManager_.setLowLatency(this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode),this.cmcdManager_.setStartTimeOfLoad(t*1e3)),Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.streamingEngine_.applyPlayRange(this.config_.playRangeStart,this.config_.playRangeEnd),await this.waitForPendingExtraTrackPromises_(),this.fullyLoaded_=!0,this.dispatchEvent(Q.makeEvent_(L.EventName.CanUpdateStartTime));let d=g=>{this.playhead_=this.createPlayhead(g),this.playheadObservers_=this.createPlayheadObserversForMSE_(g),this.startBufferManagement_(s,!1)};if(!this.config_.streaming.startAtSegmentBoundary){let g=this.startTime_;g==null&&this.manifest_.startTime&&(g=this.manifest_.startTime),d(g)}if(!c){if(v.assert(a,"Must have chosen an initial variant!"),this.config_.streaming.startAtSegmentBoundary){let g=this.manifest_.presentationTimeline,_;if(this.startTime_ instanceof Date){let E=g.getInitialProgramDateTime()||g.getPresentationStartTime();v.assert(E!=null,"Presentation start time should not be null!");let w=this.startTime_.getTime()/1e3-E;w!=null&&(_=w)}_==null&&(_=typeof this.startTime_=="number"?this.startTime_:this.isLive()?1/0:this.video_.currentTime),this.startTime_==null&&this.manifest_.startTime&&(_=this.manifest_.startTime);let T=g.getSeekRangeStart(),b=g.getSeekRangeEnd();_<T?_=T:_>b&&(_=b);let S=await this.adjustStartTime_(a,_);d(S)}this.switchVariant_(a,!0,!1,0)}if(this.playhead_.ready(),!this.getTextTracks().find(g=>g.active)){v.assert(a,"Must have chosen an initial variant!");let g=this.chooseTextStream_(a);g&&(this.addTextStreamToSwitchHistory_(g,!0),this.setInitialTextState_(g)),g&&this.isTextVisible_&&(this.streamingEngine_.switchTextStream(g),this.setTextDisplayerLanguage_())}await this.streamingEngine_.start(r),this.config_.abr.enabled&&(this.abrManager_.enable(),this.onAbrStatusChanged_()),this.onTracksChanged_();let m=this.manifest_.variants.some(g=>g.primary);!this.config_.preferredAudio.length&&!m&&p.warning("No preferred audio language set. We have chosen an arbitrary language initially");let f=this.isDynamic();if(f&&(this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled||this.manifest_.serviceDescription||this.config_.streaming.liveSync.panicMode)||this.config_.streaming.vodDynamicPlaybackRate){let g=()=>this.onTimeUpdate_();this.loadEventManager_.listen(s,"timeupdate",g)}if(!f){let g=()=>this.onVideoProgress_();if(this.loadEventManager_.listen(s,"timeupdate",g),this.onVideoProgress_(),this.manifest_.nextUrl){if(this.config_.streaming.preloadNextUrlWindow>0){let _=async()=>{let T=this.seekRange().end-this.video_.currentTime;isNaN(T)||T<=this.config_.streaming.preloadNextUrlWindow&&(this.loadEventManager_.unlisten(s,"timeupdate",_),v.assert(this.manifest_.nextUrl,"this.manifest_.nextUrl should be valid."),this.preloadNextUrl_=await this.preload(this.manifest_.nextUrl))};this.loadEventManager_.listen(s,"timeupdate",_)}this.loadEventManager_.listen(s,"ended",()=>{this.load(this.preloadNextUrl_||this.manifest_.nextUrl)})}}this.adManager_&&this.adManager_.onManifestUpdated(f)}async initializeSrcEqualsDrmInner_(t){v.assert(this.networkingEngine_,"|onInitializeSrcEqualsDrm_| should never be called after |destroy|"),v.assert(this.config_,"|onInitializeSrcEqualsDrm_| should never be called after |destroy|");let i=Date.now()/1e3,r=!0;this.drmEngine_=this.createDrmEngine({netEngine:this.networkingEngine_,onError:n=>{this.onError_(n)},onKeyStatus:n=>{},onExpirationUpdated:(n,a)=>{let o=Q.makeEvent_(L.EventName.ExpirationUpdated);this.dispatchEvent(o)},onEvent:n=>{if(this.dispatchEvent(n),n.type==L.EventName.DrmSessionUpdate&&r){r=!1;let o=Date.now()/1e3-i;this.stats_.setDrmTime(o)}}}),this.drmEngine_.configure(this.config_.drm);let s=re.createEmptyVariant([t]);this.drmEngine_.setSrcEquals(!0),await this.drmEngine_.initForPlayback([s],[]),await this.drmEngine_.attach(this.video_)}async srcEqualsInner_(t,i){this.makeStateChangeEvent_("src-equals"),v.assert(this.video_,"We should have a media element when loading."),v.assert(this.assetUri_,"We should have a valid uri when loading.");let r=this.video_;this.playhead_=new dn(r);let s=!1;if(this.cleanupOnUnload_.push(()=>{s=!0}),this.dispatchEvent(Q.makeEvent_(L.EventName.CanUpdateStartTime)),this.startTime_!=null&&this.playhead_.setStartTime(this.startTime_),this.playheadObservers_=this.createPlayheadObserversForSrcEquals_(this.startTime_||0),this.setupPlayRateController_(r),this.startBufferManagement_(r,!0),r.textTracks){this.createAndConfigureTextDisplayer_();let m=T=>{if(!(this.textDisplayer_ instanceof hr)){let b=this.getFilteredTextTracks_().find(S=>S.mode!=="disabled");b&&(b.mode=T?"showing":"hidden")}};this.loadEventManager_.listen(r,"enterpictureinpicture",()=>m(!0)),this.loadEventManager_.listen(r,"leavepictureinpicture",()=>m(!1));let g=j.getDevice().getRemote(r);g?this.loadEventManager_.listenMulti(g,["connect","connecting","disconnect"],()=>{m(!1)}):"webkitCurrentPlaybackTargetIsWireless"in r&&this.loadEventManager_.listen(r,"webkitcurrentplaybacktargetiswirelesschanged",()=>m(!1));let _=r;(_.webkitPresentationMode||_.webkitSupportsFullscreen)&&this.loadEventManager_.listen(_,"webkitpresentationmodechanged",()=>{_.webkitPresentationMode?m(_.webkitPresentationMode!=="inline"):_.webkitSupportsFullscreen&&m(_.webkitDisplayingFullscreen)})}this.addBasicMediaListeners_(r,t);let n=this.cmcdManager_.appendSrcData(this.assetUri_,i),a;if(this.mimeType_&&this.config_.streaming.processSrcEqualMetadata&&Pt.supports(this.mimeType_)){let m=!1,f=K.RequestType.MANIFEST,g=this.config_.streaming.retryParameters,_=K.makeRequest([n],g),T=this.networkingEngine_.request(f,_);this.operationManager_.manage(T);let b=S=>{if(S.request===_){let E=S.headers;E["content-length"]&&!E["icy-br"]&&!E["icy-description"]&&!E["icy-genre"]&&!E["icy-name"]&&!E["icy-url"]||(m=!0,T.abort())}};this.addEventListener(L.EventName.DownloadHeadersReceived,b);try{let S=await T.promise;a=U.toUint8(S.data);let E=new Blob([S.data],{type:this.mimeType_});n=URL.createObjectURL(E),this.playbackObjectUrl_=n}catch(S){if(!m)throw S}finally{this.removeEventListener(L.EventName.DownloadHeadersReceived,b)}}!n.includes("#t=")&&(this.config_.playRangeStart>0||isFinite(this.config_.playRangeEnd))&&(n+="#t=",this.config_.playRangeStart>0&&(n+=this.config_.playRangeStart),isFinite(this.config_.playRangeEnd)&&(n+=","+this.config_.playRangeEnd)),this.mediaSourceEngine_&&(await this.mediaSourceEngine_.destroy(),this.mediaSourceEngine_=null),Ke.clearSourceFromVideo(r),r.src=n;let o=j.getDevice();o.getDeviceType()==ie.DeviceType.TV&&r.load(),r.preload!="none"&&!r.autoplay&&O.isHlsType(i)&&o.getBrowserEngine()===ie.BrowserEngine.WEBKIT&&r.load(),this.loadMode_=Q.LoadMode.SRC_EQUALS,this.dispatchEvent(Q.makeEvent_(L.EventName.Streaming));let c=()=>new Promise(m=>{let g=new ae(m);this.loadEventManager_.listen(r.textTracks,"change",()=>g.tickAfter(.5)),g.tickAfter(.5)}),d=Promise.withResolvers();di.waitForReadyState(r,HTMLMediaElement.HAVE_METADATA,this.loadEventManager_,async()=>{this.playhead_.ready(),!this.mimeType_||!O.isHlsType(this.mimeType_)||await c(),d.resolve()}),di.waitForReadyState(r,HTMLMediaElement.HAVE_CURRENT_DATA,this.loadEventManager_,async()=>{if(await c(),s)return;this.setupPreferredAudioOnSrc_();let m=this.getFilteredTextTracks_();if(m.some(f=>f.mode==="showing")&&(this.isTextVisible_=!0,this.textDisplayer_.setTextVisibility(!0)),!(this.textDisplayer_ instanceof hr)){let f=!1;for(let g of m)g.mode!=="disabled"&&(f?(g.mode="disabled",p.alwaysWarn("Found more than one enabled text track, disabling it",g)):(this.enableNativeTrack_(g),f=!0))}this.setupPreferredTextOnSrc_()}),r.error?d.reject(this.videoErrorToShakaError_()):r.preload=="none"&&(p.alwaysWarn('With <video preload="none">, the browser will not load anything until play() is called. We are unable to measure load latency in a meaningful way, and we cannot provide track info yet. Please do not use preload="none" with Shaka Player.'),d.resolve()),this.loadEventManager_.listenOnce(r,"error",()=>{d.reject(this.videoErrorToShakaError_())}),await it.promiseWithTimeout(this.config_.streaming.loadTimeout,d.promise);let u=this.isDynamic();if(u&&(this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled||this.config_.streaming.liveSync.panicMode)||this.config_.streaming.vodDynamicPlaybackRate){let m=()=>this.onTimeUpdate_();this.loadEventManager_.listen(r,"timeupdate",m)}if(!u){let m=()=>this.onVideoProgress_();this.loadEventManager_.listen(r,"timeupdate",m),this.onVideoProgress_()}if(this.adManager_&&(this.adManager_.onManifestUpdated(u),u)){let m=this.seekRange().end;this.loadEventManager_.listen(r,"progress",()=>{let f=this.seekRange().end;m!=f&&(this.adManager_.onManifestUpdated(this.isDynamic()),m=f)})}if(this.mimeType_&&a){let m=Pt.getMetadataFrames(a,this.mimeType_);if(m.length){let g=this.video_.duration,_="org.id3";for(let T of m)this.addMetadataToRegionTimeline_(0,g,_,T)}}await this.waitForPendingExtraTrackPromises_(),this.fullyLoaded_=!0}setupPreferredAudioOnSrc_(){let t=this.config_.preferredAudio;if(t.length&&this.video_&&this.video_.audioTracks){let i=this.getVariantTracks();for(let r of t){if(!r.language)continue;let s=re.filterStreamsByLanguageAndRole(i,r.language,r.role,!1)[0];if(s){this.selectVariantTrack(s);return}}}}setupPreferredTextOnSrc_(){let t=this.getTextTracks();if(t.some(r=>r.active))return;let i=re.filterStreamsByTextPreferences(t,this.config_.preferredText);if(i.length){this.selectTextTrack(i[0]);return}if(this.video_&&this.video_.audioTracks&&this.config_.accessibility.handleForcedSubtitlesAutomatically){let s=Array.from(this.video_.audioTracks).find(n=>n.enabled);if(s&&(i=re.filterStreamsByLanguageAndRole(t,s.language,"",!0),i.length)){this.selectTextTrack(i[0]);return}}this.selectTextTrack(null)}processTimedMetadata_(t){if(t.kind!="metadata")return;t.mode="hidden";let i=()=>{if(t.cues){let s=[];for(let n of t.cues)if(n.startTime!=null&&"type"in n){let a=s.find(o=>o.startTime==n.startTime&&o.endTime==n.endTime);a||(a={type:n.type,startTime:n.startTime,endTime:n.endTime,values:[]},s.push(a)),n.value&&n.value.key=="X-AD-CREATIVE-SIGNALING"&&(a.type="urn:svta:advertising-wg:ad-creative-signaling"),a.values.push(n.value)}for(let n of s)if(this.adManager_){if(n.values.some(o=>o.key=="X-ASSET-URI"||o.key=="X-ASSET-LIST")){let o=n.startTime==0&&!this.isDynamic();n.values.push({key:"CUE",description:"",data:o?"ONCE,PRE":"ONCE",mimeType:null,pictureType:null})}this.adManager_.onHLSMetadata(n)}}};this.loadEventManager_.listen(t,"cuechange",s=>{if(t.activeCues)for(let n of t.activeCues)this.addMetadataToRegionTimeline_(n.startTime,n.endTime,n.type,n.value),this.adManager_&&this.adManager_.onCueMetadataChange(n.value);i()}),i();let r=new ae(()=>{let s=this.getMetadataTracks_();for(let n of s)n.mode="hidden"}).tickNow().tickAfter(.5);this.cleanupOnUnload_.push(()=>{r.stop()})}processTimedMetadataMediaSrc_(t,i,r){for(let s of t)if(s.data&&typeof s.cueTime=="number"&&s.frames){let n=s.cueTime+i,a=r;a&&n>a&&(a=n);let o="org.id3";for(let c of s.frames){let d=c;this.addMetadataToRegionTimeline_(n,a,o,d)}this.adManager_&&this.adManager_.onHlsTimedMetadata(s,n)}}dispatchMetadataEvent_(t,i){let r=new Map().set("startTime",t.startTime).set("endTime",t.endTime).set("metadataType",t.schemeIdUri).set("payload",t.payload);this.dispatchEvent(Q.makeEvent_(i,r))}addMetadataToRegionTimeline_(t,i,r,s){if(!this.metadataRegionTimeline_)return;v.assert(!i||t<=i,"Metadata start time should be less or equal to the end time!");let n={schemeIdUri:r,startTime:t,endTime:i||1/0,id:"",payload:s};n.id=JSON.stringify(n),this.metadataRegionTimeline_.addRegion(n)}dispatchEmsgEvent_(t){let i=L.EventName.Emsg,r=t.emsg,s=new Map().set("detail",r);this.dispatchEvent(Q.makeEvent_(i,s))}addEmsgToRegionTimeline_(t){if(!this.emsgRegionTimeline_)return;let i={schemeIdUri:t.schemeIdUri,startTime:t.startTime,endTime:t.endTime,id:String(t.id),emsg:t};this.emsgRegionTimeline_.addRegion(i)}activateChaptersTrack_(t){if(!t||t.kind!="chapters")return;t.mode="hidden";let i=new ae(()=>{t.mode="hidden"}).tickNow().tickAfter(.5);this.cleanupOnUnload_.push(()=>{i.stop()})}releaseAllMutexes(){this.mutex_.releaseAll()}createDrmEngine(t){return new Bi(t)}createNetworkingEngine(t){t||(t=()=>null);let i=()=>t()?t().getParser():this.parser_,r=_=>{t()?t().addQueuedOperation(!0,_):_()},s=_=>{t()?t().dispatchEvent(_):this.dispatchEvent(_)},n=()=>t()?t().getStats():this.stats_,a=(_,T,b,S,E)=>{r(()=>{this.abrManager_&&this.abrManager_.segmentDownloaded(_,T,b,S,E)})},o=(_,T,b)=>{let S=L.EventName.DownloadHeadersReceived,E=new Map().set("headers",_).set("request",T).set("requestType",b);s(Q.makeEvent_(S,E)),r(()=>{this.cmsdManager_&&this.cmsdManager_.processHeaders(_)})},c=(_,T,b,S)=>{let E=L.EventName.DownloadCompleted,w=new Map().set("requestType",_).set("request",T).set("context",b).set("response",S);s(Q.makeEvent_(E,w))},d=(_,T,b,S,E,w)=>{let A=L.EventName.DownloadFailed,x=new Map().set("requestType",_).set("request",T).set("context",b).set("error",S).set("httpResponseCode",E).set("aborted",w);s(Q.makeEvent_(A,x))},u=(_,T,b)=>{r(()=>{this.cmcdManager_&&this.cmcdManager_.applyRequestData(_,T,b)})},m=(_,T,b,S)=>{let E=i();E&&E.banLocation&&E.banLocation(S)},f=(_,T,b)=>{if(T.data){let S=T.data.byteLength,E=n();E&&(E.addBytesDownloaded(S),_===K.RequestType.MANIFEST&&E.setManifestSize(S)),this.cmcdManager_.applyResponseData(_,T,b)}},g=new K(a,o,c,d,u,m,f);return g.configure(this.config_.networking),g}createPlayhead(t){return v.assert(this.manifest_,"Must have manifest"),v.assert(this.video_,"Must have video"),new un(this.video_,this.manifest_,this.config_.streaming,t,()=>this.onSeek_(),i=>this.dispatchEvent(i),()=>this.getPlaybackRate())}createPlayheadObserversForMSE_(t){v.assert(this.manifest_,"Must have manifest"),v.assert(this.regionTimeline_,"Must have region timeline"),v.assert(this.metadataRegionTimeline_,"Must have metadata region timeline"),v.assert(this.emsgRegionTimeline_,"Must have emsg region timeline"),v.assert(this.video_,"Must have video element");let i=this.isDynamic()||typeof t=="number"&&t>0,r=new Ur(this.regionTimeline_,i);r.addEventListener("enter",c=>{let d=c.region;this.onRegionEvent_(L.EventName.TimelineRegionEnter,d),this.sendEventStreamCallback_(d)}),r.addEventListener("exit",c=>{let d=c.region;this.onRegionEvent_(L.EventName.TimelineRegionExit,d)}),r.addEventListener("skip",c=>{let d=c.region;c.seeking||(this.onRegionEvent_(L.EventName.TimelineRegionEnter,d),this.onRegionEvent_(L.EventName.TimelineRegionExit,d))});let s=new Ur(this.metadataRegionTimeline_,i);s.addEventListener("enter",c=>{let d=c.region;this.dispatchMetadataEvent_(d,L.EventName.Metadata)});let n=new Ur(this.emsgRegionTimeline_,i);n.addEventListener("enter",c=>{let d=c.region;this.dispatchEmsgEvent_(d)});let a=new Tn(this.manifest_.presentationTimeline);a.addEventListener("change",c=>{this.dispatchEvent(Q.makeEvent_(L.EventName.TimelineChanged,new Map([["programDateTime",c.programDateTime],["timestamp",c.timestamp]])))});let o=new xs(this.video_);return o.manage(r),o.manage(s),o.manage(n),o.manage(a),this.qualityObserver_&&o.manage(this.qualityObserver_),o}createPlayheadObserversForSrcEquals_(t){v.assert(this.metadataRegionTimeline_,"Must have metadata region timeline"),v.assert(this.video_,"Must have video element");let i=t instanceof Date||t>0,r=new Ur(this.metadataRegionTimeline_,i);r.addEventListener("enter",n=>{let a=n.region;this.dispatchMetadataEvent_(a,L.EventName.Metadata)});let s=new xs(this.video_);return s.manage(r),s}startBufferManagement_(t,i){let r=Gt;v.assert(!this.bufferObserver_,"No buffering observer should exist before initialization."),v.assert(!this.bufferPoller_,"No buffer timer should exist before initialization."),this.bufferObserver_=new Mr(1,2),this.bufferObserver_.setState(Mr.State.STARVING),this.updateBufferingSettings_(),this.updateBufferState_(),this.bufferPoller_=new ae(()=>{this.pollBufferState_()}),this.config_.streaming.rebufferingGoal&&this.bufferPoller_.tickEvery(.25),this.loadEventManager_.listen(t,r.WAITING,s=>this.pollBufferState_(r.WAITING)),this.loadEventManager_.listen(t,r.CAN_PLAY_THROUGH,s=>this.pollBufferState_(r.CAN_PLAY_THROUGH)),this.loadEventManager_.listen(t,r.PLAYING,s=>this.pollBufferState_(r.PLAYING)),this.loadEventManager_.listen(t,r.SEEKED,s=>this.pollBufferState_(r.SEEKED)),this.loadEventManager_.listen(t,r.TIME_UPDATE,s=>this.pollBufferState_(r.TIME_UPDATE)),i&&(this.loadEventManager_.listen(t,r.PROGRESS,s=>this.pollBufferState_(r.PROGRESS)),this.loadEventManager_.listen(t,r.STALLED,s=>this.pollBufferState_(r.STALLED)))}updateBufferingSettings_(){let t=this.config_.streaming.rebufferingGoal,i=t,r=Math.min(Q.TYPICAL_BUFFERING_THRESHOLD_,t/2);this.bufferObserver_.setThresholds(i,r)}pollBufferState_(t){if(v.assert(this.video_,"Need a media element to update the buffering observer"),v.assert(this.bufferObserver_,"Need a buffering observer to update"),!this.config_.streaming.rebufferingGoal){t&&this.bufferObserver_.reportEvent(t,this.video_.currentTime)&&this.updateBufferState_();return}let i=this.mediaSourceEngine_?this.mediaSourceEngine_.ended():!1,r=this.isEnded()||i||this.playhead_.isBufferedToEnd(),s=this.getPlaybackRate()<0?Je.bufferedBehindOf(this.video_.buffered,this.video_.currentTime):Je.bufferedAheadOf(this.video_.buffered,this.video_.currentTime);this.bufferObserver_.update(s,r)&&this.updateBufferState_()}createMediaSourceEngine(t,i,r,s,n){return new cr(t,i,r,n,s)}createCmcd_(){return new Or(this,this.config_.cmcd)}createCmsd_(){return new Sn(this.config_.cmsd)}createStreamingEngine(){v.assert(this.abrManager_&&this.mediaSourceEngine_&&this.manifest_&&this.video_,"Must not be destroyed");let t={getPresentationTime:()=>this.playhead_?this.playhead_.getTime():0,getBandwidthEstimate:()=>this.abrManager_.getBandwidthEstimate(),getPlaybackRate:()=>this.getPlaybackRate(),video:this.video_,mediaSourceEngine:this.mediaSourceEngine_,netEngine:this.networkingEngine_,onError:i=>this.onError_(i),onEvent:i=>this.dispatchEvent(i),onSegmentAppended:(i,r,s,n,a)=>{this.onSegmentAppended_(i.startTime,i.endTime,r.type,s,n,a),this.abrManager_&&r.fastSwitching&&i.isPartial()&&i.isLastPartial()&&this.abrManager_.trySuggestStreams()},onInitSegmentAppended:(i,r)=>{let s=r.getMediaQuality();s&&this.qualityObserver_&&this.qualityObserver_.addMediaQualityChange(s,i)},beforeAppendSegment:(i,r)=>this.drmEngine_.parseInbandPssh(i,r),disableStream:(i,r)=>this.disableStream(i,r),shouldPrefetchNextSegment:(i,r)=>!this.config_.abr.enabled||!r.fastSwitching||!i.isPartial()||!i.isLastPartial(),getKeySystem:()=>this.keySystem()};return new jr(this.manifest_,t)}configure(t,i){v.assert(this.config_,"Config must not be null!"),v.assert(typeof t=="object"||arguments.length==2,"String configs should have values!");let r=this.getConfiguration();arguments.length==2&&typeof t=="string"&&(t=Rt.convertToConfigObject(t,i)),v.assert(typeof t=="object","Should be an object!"),t.manifest&&t.manifest.dash&&"disableXlinkProcessing"in t.manifest.dash&&(Cr.deprecateFeature(6,"manifest.dash.disableXlinkProcessing configuration","It is now automatically detected if the manifest has Xlink."),delete t.manifest.dash.disableXlinkProcessing),t.textDisplayer&&"captionsUpdatePeriod"in t.textDisplayer&&(Cr.deprecateFeature(6,"textDisplayer.captionsUpdatePeriod configuration","Captions are now updated based on the cue timings, so this configuration is no longer needed."),delete t.textDisplayer.captionsUpdatePeriod),Q.convertLegacyPreferences_(t);let s=st.mergeConfigObjects(this.config_,t,this.defaultConfig_());return this.applyConfig_(r),s}configurationForLowLatency(t){this.lowLatencyConfig_=t}applyConfig_(t){if(this.manifestFilterer_=new Rr(this.config_,this.maxHwRes_,this.drmEngine_),this.parser_){let s=Fe.cloneObject(this.config_.manifest);this.video_&&this.video_.nodeName==="AUDIO"&&(s.disableVideo=!0),this.parser_.configure(s)}if(this.drmEngine_&&this.drmEngine_.configure(this.config_.drm),this.streamingEngine_){this.streamingEngine_.configure(this.config_.streaming);try{this.loadMode_!=Q.LoadMode.DESTROYED&&this.manifestFilterer_.filterManifestWithRestrictions(this.manifest_)&&this.onTracksChanged_()}catch(n){this.onError_(n)}this.abrManager_&&this.updateAbrManagerVariants_();let s=this.streamingEngine_.getCurrentVariant();s&&(!s.allowedByApplication||!s.allowedByKeySystem)&&(p.debug("Choosing new variant after changing configuration"),this.chooseVariantAndSwitch_())}if(this.networkingEngine_&&this.networkingEngine_.configure(this.config_.networking),this.mediaSourceEngine_){this.mediaSourceEngine_.configure(this.config_.mediaSource);let{segmentRelativeVttTiming:s}=this.config_.manifest;this.mediaSourceEngine_.setSegmentRelativeVttTiming(s)}this.textDisplayer_&&this.createAndConfigureTextDisplayer_(),this.abrManager_&&(this.abrManager_.configure(this.config_.abr),this.config_.abr.enabled?this.abrManager_.enable():this.abrManager_.disable(),this.onAbrStatusChanged_()),this.bufferObserver_&&this.updateBufferingSettings_(),this.bufferPoller_&&(this.config_.streaming.rebufferingGoal?this.bufferPoller_.tickEvery(.25):this.bufferPoller_.stop()),this.manifest_&&Q.applyPlayRange_(this.manifest_.presentationTimeline,this.config_.playRangeStart,this.config_.playRangeEnd),this.adManager_&&this.adManager_.configure(this.config_.ads),this.cmcdManager_&&this.cmcdManager_.configure(this.config_.cmcd),this.cmsdManager_&&this.cmsdManager_.configure(this.config_.cmsd),this.queueManager_&&this.queueManager_.configure(this.config_.queue);let i=this.loadMode_==Q.LoadMode.MEDIA_SOURCE||this.loadMode_==Q.LoadMode.SRC_EQUALS;this.config_.accessibility.speechToText.enabled?this.speechToText_?this.speechToText_.configure(this.config_.accessibility.speechToText):(this.speechToText_=new Qr(this),this.speechToText_.configure(this.config_.accessibility.speechToText),i&&this.onTextChanged_()):this.speechToText_&&(this.speechToText_.release(),this.speechToText_=null,i&&this.onTextChanged_()),this.applyCriteriaConfigChanges_(t);let r=Q.makeEvent_(L.EventName.ConfigurationChanged);this.dispatchEvent(r)}applyCriteriaConfigChanges_(t){if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE||!this.currentAdaptationSetCriteria_.getConfiguration)return;let i=this.currentAdaptationSetCriteria_.getConfiguration();v.assert(i,"criteriaConfig must not be null!");let r=!1,s=n=>Fe.alphabeticalKeyOrderStringify(n);s(t.preferredVideo)!=s(this.config_.preferredVideo)&&(i.preferredVideo=this.config_.preferredVideo,r=!0),s(t.preferredAudio)!=s(this.config_.preferredAudio)&&(i.preferredAudio=this.config_.preferredAudio,r=!0),r&&(st.addDeprecatedConfigFields(i),this.currentAdaptationSetCriteria_.configure(i),this.chooseVariantAndSwitch_())}getConfiguration(){v.assert(this.config_,"Config must not be null!");let t=this.defaultConfig_();return st.mergeConfigObjects(t,this.config_,this.defaultConfig_()),t}getConfigurationForLowLatency(){return this.lowLatencyConfig_}getNonDefaultConfiguration(){v.assert(this.config_,"Config must not be null!");let t=this.defaultConfig_();return st.mergeConfigObjects(t,this.config_,this.defaultConfig_()),Rt.getDifferenceFromConfigObjects(this.config_,this.defaultConfig_())}getSharedConfiguration(){return v.assert(this.config_,"Cannot call getSharedConfiguration after call destroy!"),this.config_}getBufferFullness(){if(this.video_){let t=this.video_.buffered.length,i=t?this.video_.buffered.end(t-1):0,r=this.config_.streaming.bufferingGoal,s=Math.min(this.video_.currentTime+r,this.seekRange().end);if(i>=s)return 1;if(i<=this.video_.currentTime)return 0;if(i<s)return(i-this.video_.currentTime)/(s-this.video_.currentTime)}return 0}resetConfiguration(){v.assert(this.config_,"Cannot be destroyed");let t=this.getConfiguration();for(let i in this.config_)delete this.config_[i];st.mergeConfigObjects(this.config_,this.defaultConfig_(),this.defaultConfig_()),this.applyConfig_(t)}getLoadMode(){return this.loadMode_}getManifestType(){return this.manifest_?this.manifest_.type:null}getMediaElement(){return this.video_}getNetworkingEngine(){return this.networkingEngine_}getAssetUri(){return this.assetUri_}getMimeType(){return this.mimeType_}getAllMetadataRegions(){var t;return Array.from(((t=this.metadataRegionTimeline_)==null?void 0:t.regions())||[])}getAllEmsgRegions(){var t;return Array.from(((t=this.emsgRegionTimeline_)==null?void 0:t.regions())||[])}getAllTimelineRegions(){var t;return Array.from(((t=this.regionTimeline_)==null?void 0:t.regions())||[])}getAdManager(){return this.adManager_?this.adManager_:null}getQueueManager(){return this.queueManager_?this.queueManager_:null}isLive(){return this.manifest_&&!this.isRemotePlayback()?this.manifest_.presentationTimeline.isLive():this.video_&&(this.video_.src||this.isRemotePlayback())?this.video_.duration==1/0:!1}isInProgress(){return this.manifest_?this.manifest_.presentationTimeline.isInProgress():!1}isDynamic(){return this.isLive()||this.isInProgress()}isAudioOnly(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.variants;return t.length?!t[0].video:!1}else return this.video_&&(this.video_.src||this.isRemotePlayback())?this.video_.videoTracks?this.video_.videoTracks.length==0:this.video_.videoHeight==0:!1}isVideoOnly(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.variants;if(!t.length)return!1;let i=t[0];return i.audio||!i.video?!1:!i.video.codecs.includes(",")}else if(this.video_&&(this.video_.src||this.isRemotePlayback())&&this.video_.audioTracks)return this.video_.audioTracks.length==0;return!1}seekRange(){if(this.manifest_&&!this.isRemotePlayback()){if(!this.fullyLoaded_&&this.manifest_.type==me.HLS)return{start:0,end:0};let t=this.manifest_.presentationTimeline;return{start:t.getSeekRangeStart(),end:t.getSeekRangeEnd()}}if(this.video_&&(this.video_.src||this.isRemotePlayback())){let t=this.video_.seekable;if(t&&t.length){let i=this.config_?this.config_.playRangeStart:0,r=Math.max(t.start(0),i),s=this.config_?this.config_.playRangeEnd:1/0,n=Math.min(t.end(t.length-1),s);return{start:r,end:n}}}return{start:0,end:0}}goToLive(){this.isDynamic()?this.video_.currentTime=this.seekRange().end:p.warning("goToLive is for live streams!")}isFullyLoaded(){return this.fullyLoaded_}keySystem(){return de.keySystem(this.drmInfo())}drmInfo(){return this.drmEngine_?this.drmEngine_.getDrmInfo():null}getDrmEngine(){return this.drmEngine_}getExpiration(){return this.drmEngine_?this.drmEngine_.getExpiration():1/0}getActiveSessionsMetadata(){return this.drmEngine_?this.drmEngine_.getActiveSessionsMetadata():[]}renewLicense(t){this.drmEngine_&&this.drmEngine_.renewLicense(t)}async retryLicensing(t,i){return this.drmEngine_?await this.drmEngine_.retryLicensing(t,i):!1}getKeyStatuses(){return this.drmEngine_?this.drmEngine_.getKeyStatuses():{}}isBuffering(){let t=Mr.State;return this.bufferObserver_?this.bufferObserver_.getState()==t.STARVING:!!this.assetUri_}getPlaybackRate(){return this.video_?this.playRateController_?this.playRateController_.getRealRate():1:0}useTrickPlayTrackIfAvailable(t){this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&this.streamingEngine_&&this.streamingEngine_.setTrickPlay(t)}trickPlay(t,i=!0){if(v.assert(t!=0,"Should never set a trick play rate of 0!"),t==0){p.alwaysWarn("A trick play rate of 0 is unsupported!");return}let r=this.video_.playbackRate,s=this.playRateController_.getRealRate();this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&(this.abrManager_.playbackRateChanged(t),this.useTrickPlayTrackIfAvailable(i&&t!=1)),this.setupTrickPlayEventListeners_(t),r===0&&this.video_.playbackRate===0&&t!=s&&this.onRateChange_()}cancelTrickPlay(){let t=this.playRateController_.getDefaultRate();this.loadMode_==Q.LoadMode.SRC_EQUALS&&this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&(this.playRateController_.set(t),this.abrManager_.playbackRateChanged(t),this.useTrickPlayTrackIfAvailable(!1)),this.trickPlayEventManager_.removeAll()}getVariantTracks(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.streamingEngine_?this.streamingEngine_.getCurrentVariant():null,i=[],r=0;for(let s of this.manifest_.variants){if(!re.isPlayable(s))continue;let n=re.variantToTrack(s);n.active=s==t,!n.active&&r!=1&&t!=null&&s.video==t.video&&s.audio==t.audio&&(n.active=!0),n.active&&r++,i.push(n)}return v.assert(r<=1,"It should only have one active track"),i}else if(this.video_&&this.video_.audioTracks){let t=this.getActiveHtml5VideoTrack_(),i=Array.from(this.video_.audioTracks);return i.length?i.map(r=>re.html5TrackToShakaTrack(r,t)):t?[re.html5TrackToShakaTrack(null,t)]:[]}else return[]}getTextTracks(){if(this.manifest_){if(this.isRemotePlayback())return[];{let t=this.streamingEngine_?this.streamingEngine_.getCurrentTextStream():null,i=[];for(let r of this.manifest_.textStreams){let s=re.textStreamToTrack(r);s.active=r==t,i.push(s)}return this.speechToText_&&i.push(...this.speechToText_.getTextTracks()),i}}else if(this.video_&&this.video_.src&&this.video_.textTracks){let t=this.getFilteredTextTracks_(),i=this.textDisplayer_.isTextVisible(),r=t.map(s=>re.html5TextTrackToTrack(s,i));return this.speechToText_&&r.push(...this.speechToText_.getTextTracks()),r}else return[]}getImageTracks(){let t=this.externalSrcEqualsThumbnailsStreams_;return this.manifest_&&(t=this.manifest_.imageStreams),t.map(i=>re.imageStreamToTrack(i))}async getAllThumbnails(t){let i=await this.getBestImageStream_(t);if(!i)return null;let r=[];return i.segmentIndex.forEachTopLevelReference(s=>{let n=this.parseTilesLayout_(s.getTilesLayout()||i.tilesLayout);if(n){let a=n.rows*n.columns,c=(s.trueEndTime-s.startTime)/a;for(let d=0;d<a;d++){let u=s.startTime+d*c,m=this.getThumbnailByReference_(s,i,u,n);if(!m)break;r.push(m)}}}),r}parseTilesLayout_(t){if(!t)return null;let i=/(\d+)x(\d+)/.exec(t);if(!i)return p.warning("Tiles layout does not contain a valid format (columns x rows)"),null;let r=parseInt(i[1],10),s=parseInt(i[2],10);return{columns:r,rows:s}}async getThumbnails(t,i){let r=await this.getBestImageStream_(t);if(!r)return null;let s=r.segmentIndex.find(i);if(s==null)return null;let n=r.segmentIndex.get(s),a=this.parseTilesLayout_(n.getTilesLayout()||r.tilesLayout);return a?this.getThumbnailByReference_(n,r,i,a):null}async getBestImageStream_(t){if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)return null;let i=this.externalSrcEqualsThumbnailsStreams_;this.manifest_&&(i=this.manifest_.imageStreams);let r=i[0];if(!r||(t!=null&&(r=i.find(s=>s.id==t)),!r))return null;if(r.segmentIndex||await r.createSegmentIndex(),r.closeSegmentIndex){if(!this.deferredCloseSegmentIndex_.has(r)){let s=new ae(()=>{r&&(r.closeSegmentIndex(),this.deferredCloseSegmentIndex_.delete(r))});this.deferredCloseSegmentIndex_.set(r,s)}this.deferredCloseSegmentIndex_.get(r).tickAfter(5)}return r}getThumbnailByReference_(t,i,r,s){let n=t.getUris();if(!n.length)return null;let a=1e-4,o=i.width||0,c=i.height||0,d=o/s.columns,u=c/s.rows,m=s.columns*s.rows,f=t.trueEndTime-t.startTime,g=t.getTileDuration()||f/m,_=t.startTime,T=0,b=0;if(m>1){let w=(r-t.startTime)/g,A=Math.floor(w+a);_=t.startTime+A*g,T=A%s.columns*d,b=Math.floor(A/s.columns)*u}if(_>=t.endTime||qt.isFloatEqual(_,t.endTime,a))return null;let S=!1,E=t.getThumbnailSprite();return E&&(S=!0,u=E.height,T=E.positionX,b=E.positionY,d=E.width),{segment:t,imageHeight:c,imageWidth:o,height:u,positionX:T,positionY:b,startTime:_,duration:g,uris:n,startByte:t.getStartByte(),endByte:t.getEndByte(),width:d,sprite:S,mimeType:t.mimeType||i.mimeType,codecs:t.codecs||i.codecs}}selectTextTrack(t){let i=!1;if(this.speechToText_&&t&&(i=this.speechToText_.getTextTracks().includes(t)),this.speechToText_&&!i&&this.speechToText_.disable(),!t||i){this.speechToText_&&i&&t&&this.speechToText_.enable(t),this.onTextChanged_(),this.setTextTrackVisibility_(!1);return}let r=()=>{let n=this.manifest_.textStreams.find(a=>a.id==t.id);if(!n){this.isRemotePlayback()||p.error("No stream with id",t.id);return}if(n==this.streamingEngine_.getCurrentTextStream()){p.debug("Text track already selected.");return}this.addTextStreamToSwitchHistory_(n,!1),this.streamingEngine_.switchTextStream(n),this.onTextChanged_(),this.setTextDisplayerLanguage_(),this.setTextTrackVisibility_(!0)},s=()=>{if(this.video_&&this.video_.textTracks){let n=this.getFilteredTextTracks_(),a=n.find(o=>re.html5TrackId(o)===t.id);if(!a){p.error("No track with id",t.id);return}if(this.textDisplayer_ instanceof hr)for(let o of n){let c=o===a?this.isTextVisible_?"showing":"hidden":"disabled";o.mode!==c&&(o.mode=c)}else{let o=n.find(c=>c.mode!=="disabled");o!==a&&(o&&(o.mode="disabled",this.loadEventManager_.unlisten(o,"cuechange"),this.textDisplayer_.remove(0,1/0)),a&&this.enableNativeTrack_(a))}this.onTextChanged_(),this.setTextDisplayerLanguage_(),this.setTextTrackVisibility_(!0)}};this.manifest_&&this.playhead_&&(r(),!this.isRemotePlayback())||s()}enableNativeTrack_(t){this.loadEventManager_.listen(t,"cuechange",()=>{let i=Math.max(0,this.video_.currentTime-this.config_.streaming.bufferBehind);this.textDisplayer_.remove(0,i);let r={periodStart:0,segmentStart:0,segmentEnd:this.video_.duration,vttOffset:0,isMpegTs:!1},s=[],n=Array.from(t.activeCues||[]);for(let a of n){let o=si.mapNativeCueToShakaCue(a);if(o){let c=this.config_.mediaSource.modifyCueCallback;c&&c(o,null,r),s.push(o)}}this.textDisplayer_.append(s)}),t.mode=document.pictureInPictureElement?"showing":"hidden"}selectVariantTrack(t,i=!1,r=0){let s=()=>{let a=this.manifest_.variants.find(m=>m.id==t.id);if(!a){this.isRemotePlayback()||p.error("No variant with id",t.id);return}if(!re.isPlayable(a)){p.error("Unable to switch to restricted track",t.id);return}let o=this.streamingEngine_.getCurrentVariant();this.config_.abr.enabled&&(o.video!=a.video||o.audio&&a.audio&&o.audio.language==a.audio.language&&o.audio.channelsCount==a.audio.channelsCount&&o.audio.label==a.audio.label)&&p.alwaysWarn("Changing tracks while abr manager is enabled will likely result in the selected track being overridden. Consider disabling abr before calling selectVariantTrack()."),this.isRemotePlayback()?this.switchVariant_(a,!1,!1,0):this.switchVariant_(a,!1,i||!1,r||0);let c={language:a.language||"",role:a.audio&&a.audio.roles&&a.audio.roles[0]||"",label:a.audio&&a.audio.label||"",channelCount:a.audio&&a.audio.channelsCount||0,codec:a.audio&&a.audio.codecs||"",spatialAudio:a.audio&&a.audio.spatialAudio?a.audio.spatialAudio:!1},d={label:a.video&&a.video.label||"",role:a.video&&a.video.roles&&a.video.roles[0]||"",language:a.video&&a.video.language||"",codec:a.video&&a.video.codecs||"",hdrLevel:a.video&&a.video.hdr||"",layout:a.video&&a.video.videoLayout||""},u={preferredAudio:[c],preferredVideo:[d],language:"",role:"",videoRole:"",channelCount:0,hdrLevel:"",spatialAudio:!1,videoLayout:"",audioLabel:"",videoLabel:"",preferredAudioCodecs:[],preferredAudioChannelCount:0,codecSwitchingStrategy:this.config_.mediaSource.codecSwitchingStrategy,audioCodec:a.audio&&a.audio.codecs?a.audio.codecs:"",activeAudioCodec:o.audio&&o.audio.codecs?o.audio.codecs:"",activeAudioChannelCount:o.audio&&o.audio.channelsCount?o.audio.channelsCount:0,keySystem:this.keySystem()};st.addDeprecatedConfigFields(u),this.currentAdaptationSetCriteria_.configure(u),this.updateAbrManagerVariants_()},n=()=>{if(t.originalAudioId&&this.video_&&this.video_.audioTracks){let a=Array.from(this.video_.audioTracks);for(let o of a)if(re.html5TrackId(o)==t.id){this.switchHtml5Track_(o);return}}};this.manifest_&&this.playhead_&&(s(),!this.isRemotePlayback())||n()}selectAudioTrack(t,i=0){let r=(a,o)=>{if(a==o||!this.config_.accessibility.handleForcedSubtitlesAutomatically)return;let c=this.getTextTracks(),d=c.find(g=>g.active),u=d?Se.normalize(d.language):null,m=Se.normalize(a),f=Se.normalize(o);if(!d||u==m&&u!=f&&d.forced){let g=re.filterStreamsByLanguageAndRole(c,f,"",!0);g.length&&this.selectTextTrack(g[0])}},s=()=>{let a=this.currentAdaptationSetCriteria_.getConfiguration();a.audioCodec=t.codecs||"",a.preferredAudio=[{language:t.language,role:t.roles[0]||"",label:t.label||"",channelCount:t.channelsCount||0,codec:"",spatialAudio:t.spatialAudio}];let o=this.streamingEngine_.getCurrentVariant(),c=o&&o.audio;c&&(a.activeAudioCodec=c.codecs||"",a.activeAudioChannelCount=c.channelsCount||0,r(c.language,t.language)),st.addDeprecatedConfigFields(a),this.currentAdaptationSetCriteria_.configure(a),this.chooseVariantAndSwitch_(!0,i,!1,!1)},n=()=>{if(this.video_&&this.video_.audioTracks){let a=Se.normalize(t.language),o=Array.from(this.video_.audioTracks),c=null,d=null;t.id!=null&&(c=o.find(u=>re.html5TrackId(u)===t.id));for(let u of o){if(!c){let m=u.language||"und",f=u.kind||"",g=t.roles&&t.roles.length?t.roles[0]:"";(u.label||"")==(t.label||"")&&Se.normalize(m)==a&&f==g&&(c=u)}u.enabled&&(d=u)}c&&(d&&r(d.language,c.language),this.switchHtml5Track_(c))}};this.manifest_&&this.playhead_&&(s(),!this.isRemotePlayback())||n()}getAudioTracks(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.getVariantTracks();if(!t.length)return[];let i=t.find(n=>n.active);if(!i)return[];let r=t;if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&!this.isRemotePlayback()&&(r=t.filter(n=>n.originalVideoId===i.originalVideoId&&(n.audioCodec||O.RAW_FORMATS.includes(n.audioMimeType||"")))),!r.length)return[];let s=new Map;for(let n of r){let a=[n.language,n.originalLanguage,n.label||"",(n.audioRoles||[]).join(","),n.channelsCount,n.spatialAudio,n.audioCodec||"",n.accessibilityPurpose||""].join("_"),o={active:n.active,language:n.language,label:n.label,mimeType:n.audioMimeType,codecs:n.audioCodec,primary:n.primary,roles:n.audioRoles||[],accessibilityPurpose:n.accessibilityPurpose,channelsCount:n.channelsCount,audioSamplingRate:n.audioSamplingRate,spatialAudio:n.spatialAudio,originalLanguage:n.originalLanguage};s.has(a)?!s.get(a).active&&o.active&&s.set(a,o):s.set(a,o)}return Array.from(s.values())}else return this.video_&&this.video_.audioTracks?Array.from(this.video_.audioTracks).map(t=>re.html5AudioTrackToTrack(t)):[]}selectVideoTrack(t,i=!1,r=0){let s=this.getVariantTracks();if(!s.length)return;let n=s.find(c=>c.active);if(!n)return;let a=s.filter(c=>(c.videoBandwidth||c.bandwidth)==t.bandwidth&&c.width==t.width&&c.height==t.height&&c.frameRate==t.frameRate&&c.pixelAspectRatio==t.pixelAspectRatio&&c.hdr==t.hdr&&c.colorGamut==t.colorGamut&&c.videoLayout==t.videoLayout&&c.videoMimeType==t.mimeType&&c.videoCodec==t.codecs&&ye.equal(c.videoRoles,t.roles)&&(c.videoLanguage||"und")==(t.language||"und")&&c.videoLabel==t.label),o;a.length==1?o=a[0]:o=a.find(c=>c.audioId===n.audioId),o||(o=a.find(c=>c.language==n.language&&c.label===n.label&&c.channelsCount===n.channelsCount&&c.spatialAudio===n.spatialAudio&&c.audioMimeType===n.audioMimeType&&O.getNormalizedCodec(c.audioCodec||"")===O.getNormalizedCodec(n.audioCodec||"")&&ye.equal(c.audioRoles,n.audioRoles))),o&&!o.active&&this.selectVariantTrack(o,i,r)}getVideoTracks(){if(this.loadMode_==Q.LoadMode.SRC_EQUALS||this.isRemotePlayback())return[];let t=this.getVariantTracks();if(!t.length)return[];let i=t.find(n=>n.active);if(!i)return[];let r=t;if(this.isVideoOnly()||(r=t.filter(n=>!n.videoCodec||n.audioGroupId!==i.audioGroupId||n.originalAudioId!==i.originalAudioId?!1:n.audioId===i.audioId?!0:n.language===i.language&&n.label===i.label&&n.channelsCount===i.channelsCount&&n.spatialAudio===i.spatialAudio&&n.audioMimeType===i.audioMimeType&&O.getNormalizedCodec(n.audioCodec||"")===O.getNormalizedCodec(i.audioCodec||"")&&ye.equal(n.audioRoles,i.audioRoles))),!r.length)return[];let s=new Map;for(let n of r){let a=n.originalVideoId;if(!a&&n.videoId!=null&&(a=String(n.videoId)),!a)continue;let o={active:n.active,language:n.videoLanguage||"und",bandwidth:n.videoBandwidth||n.bandwidth,width:n.width,height:n.height,frameRate:n.frameRate,pixelAspectRatio:n.pixelAspectRatio,hdr:n.hdr,colorGamut:n.colorGamut,videoLayout:n.videoLayout,mimeType:n.videoMimeType,codecs:n.videoCodec,roles:n.videoRoles||[],label:n.videoLabel};s.set(a,o)}return Array.from(s.values())}getChaptersTracks(){let t=this.externalSrcEqualsChapterStreams_;this.manifest_&&(t=this.manifest_.chapterStreams);let i=t.map(s=>re.chapterStreamToTrack(s)),r=this.getChaptersTracks_();return r.length&&i.push(...r.map(s=>re.html5TextTrackToChapterTrack(s))),i}async getChaptersAsync(t){var c,d;let i=this.getNativeChapters_(t);if(i.length)return i;let r=this.externalSrcEqualsChapterStreams_;if(this.manifest_&&(r=this.manifest_.chapterStreams),!r.length)return[];let s=Se.normalize(t),n=r.filter(u=>Se.normalize(u.language)==s);if(!n.length)return[];let a=[],o=new Set;for(let u of n){u.segmentIndex||await u.createSegmentIndex();let m=0;if(this.isLive()&&((c=this.manifest_)==null?void 0:c.type)===me.HLS){let f=this.manifest_.presentationTimeline;m=Math.max(0,(d=f.getInitialProgramDateTime())!=null?d:f.getPresentationStartTime())}u.segmentIndex.forEachTopLevelReference(f=>{let g=f.getMetadata();if(!g)return;let _=g.title,T=f.startTime+"-"+f.endTime+"-"+_;m>0&&f.endTime-m<0&&(m=0);let b={id:T,title:_,startTime:Math.max(0,f.startTime-m),endTime:Math.max(0,f.endTime-m),images:g.images};o.has(T)||(a.push(b),o.add(T))})}return a}getNativeChapters_(t){let i=this.getChaptersTracks_();if(!i.length)return[];let r=Se.normalize(t),s=i.filter(o=>Se.normalize(o.language)==r);if(!s||!s.length)return[];let n=[],a=new Set;for(let o of s)if(o&&o.cues)for(let c of o.cues){let d=c.id;(!d||d=="")&&(d=c.startTime+"-"+c.endTime+"-"+c.text);let u={id:d,title:c.text,startTime:c.startTime,endTime:c.endTime,images:[]};a.has(d)||(n.push(u),a.add(d))}return n}getFilteredTextTracks_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).filter(t=>t.kind!="metadata"&&t.kind!="chapters"&&t.label!=Q.TextTrackLabel)}getGeneratedTextTrack_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).find(t=>t.label==Q.TextTrackLabel)}getMetadataTracks_(){return v.assert(this.video_.textTracks,"TextTracks should be valid."),Array.from(this.video_.textTracks).filter(t=>t.kind=="metadata")}getChaptersTracks_(){return!this.video_||!this.video_.textTracks?[]:Array.from(this.video_.textTracks).filter(t=>t.kind=="chapters")}setTextTrackVisibility_(t){let i=this.isTextVisible_,r=!!t;if(i!=r)if(this.isTextVisible_=r,this.loadMode_==Q.LoadMode.MEDIA_SOURCE)if(this.textDisplayer_.setTextVisibility(r),r){if(!this.streamingEngine_.getCurrentTextStream()){let s=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);s.length>0&&(this.streamingEngine_.switchTextStream(s[0]),this.onTextChanged_(),this.setTextDisplayerLanguage_())}}else this.streamingEngine_.unloadTextStream();else this.video_&&this.video_.src&&this.video_.textTracks&&this.textDisplayer_.setTextVisibility(r)}getPlayheadTimeAsDate(){let t=0;if(this.playhead_)t=this.playhead_.getTime();else{if(this.startTime_==null)return new Date;if(this.startTime_ instanceof Date)return this.startTime_;t=this.startTime_}if(this.manifest_&&!this.isRemotePlayback()){let i=this.manifest_.presentationTimeline,r=i.getProgramDateTimeForTime(t);if(r!=null)return new Date(r*1e3);let s=i.getPresentationStartTime();return new Date((s+t)*1e3)}else if(this.video_&&this.video_.getStartDate){let i=this.video_.getStartDate();return!(i instanceof Date)||isNaN(i.getTime())?(p.warning("EXT-X-PROGRAM-DATETIME required to get playhead time as Date!"),null):new Date(i.getTime()+t*1e3)}else return p.warning("No way to get playhead time as Date!"),null}getPresentationStartTimeAsDate(){if(this.manifest_&&!this.isRemotePlayback()){let t=this.manifest_.presentationTimeline,i=t.getInitialProgramDateTime()||t.getPresentationStartTime();return i===null?(p.info("Manifest appears to have no PDT or PST"),null):new Date(i*1e3)}else if(this.video_&&this.video_.getStartDate){let t=this.video_.getStartDate();return!(t instanceof Date)||isNaN(t.getTime())?(p.warning("EXT-X-PROGRAM-DATETIME required to get presentation start time as Date!"),null):t}else return p.warning("No way to get presentation start time as Date!"),null}getSegmentAvailabilityDuration(){return this.isLive()?this.manifest_?this.manifest_.presentationTimeline.getSegmentAvailabilityDuration():(p.warning("No way to get segment segment availability duration!"),null):(p.warning("getSegmentAvailabilityDuration is for live streams!"),null)}getBufferedInfo(){if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE)return this.mediaSourceEngine_.getBufferedInfo();let t={total:[],audio:[],video:[],text:[]};return this.loadMode_==Q.LoadMode.SRC_EQUALS&&(t.total=Je.getBufferedInfo(this.video_.buffered)),t}getLiveLatency(){if(!this.video_||!this.video_.currentTime)return null;let t=this.getPresentationStartTimeAsDate();if(!t)return null;let i=t.getTime()+this.video_.currentTime*1e3;return Math.floor(Date.now()-i)}getBandwidthEstimate(){return this.abrManager_?this.abrManager_.getBandwidthEstimate():NaN}getStats(){if(!(this.loadMode_==Q.LoadMode.MEDIA_SOURCE||this.loadMode_==Q.LoadMode.SRC_EQUALS))return tr.getEmptyBlob();this.updateStateHistory_(),v.assert(this.video_,"If we have stats, we should have video_");let i=this.video_,r=i.currentTime/i.duration;if(!isNaN(r)&&!this.isDynamic()&&this.stats_.setCompletionPercent(Math.round(100*r)),this.playhead_&&(this.stats_.setGapsJumped(this.playhead_.getGapsJumped()),this.stats_.setStallsDetected(this.playhead_.getStallsDetected())),i.getVideoPlaybackQuality){let d=i.getVideoPlaybackQuality();this.stats_.setDroppedFrames(Number(d.droppedVideoFrames),Number(d.totalVideoFrames)),this.stats_.setCorruptedFrames(Number(d.corruptedVideoFrames))}let s=this.drmEngine_?this.drmEngine_.getLicenseTime():NaN;if(this.stats_.setLicenseTime(s),this.stats_.setResolution(i.videoWidth||NaN,i.videoHeight||NaN),this.stats_.setCodecs(""),this.isDynamic()){let d=this.getLiveLatency();d!=null&&this.stats_.setLiveLatency(d/1e3)}let a=this.getVariantTracks().find(d=>d.active),c=this.getTextTracks().find(d=>d.active);if(a){if(a.bandwidth){let u=this.playRateController_?this.playRateController_.getRealRate():1,f=u*a.bandwidth;c&&c.bandwidth&&(f+=u*c.bandwidth),this.stats_.setCurrentStreamBandwidth(f)}a.width&&a.height&&this.stats_.setResolution(a.width||NaN,a.height||NaN);let d=a.codecs;c&&(d+=","+(c.codecs||c.mimeType)),d&&this.stats_.setCodecs(d)}if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&!this.isRemotePlayback()){if(this.manifest_&&(this.stats_.setManifestPeriodCount(this.manifest_.periodCount),this.stats_.setManifestGapCount(this.manifest_.gapCount),this.manifest_.presentationTimeline)){let u=this.manifest_.presentationTimeline.getMaxSegmentDuration();this.stats_.setMaxSegmentDuration(u)}let d=this.abrManager_.getBandwidthEstimate();this.stats_.setBandwidthEstimate(d)}return this.loadMode_==Q.LoadMode.SRC_EQUALS&&this.stats_.addBytesDownloaded(NaN),this.stats_.getBlob()}addTextTrackAsync(t,i,r,s,n,a,o=!1){let c=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding text tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);r!="subtitles"&&r!="captions"&&p.alwaysWarn("Using a kind value different of `subtitles` or `captions` can cause unwanted issues."),s||(s=await this.getTextMimetype_(t));let d=[];if(this.adManager_&&(d=this.adManager_.getCuePoints()),this.loadMode_==Q.LoadMode.SRC_EQUALS){let b=j.getDevice();o&&b.getBrowserEngine()===ie.BrowserEngine.WEBKIT&&(r="forced");let S=await this.addSrcTrackElement_(t,i,r,s,a||"",d);if(S.track)return this.onTracksChanged_(),this.onTextChanged_(),re.html5TextTrackToTrack(S.track,this.textDisplayer_.isTextVisible());throw p.error("Cannot add this text when loaded with src="),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_SRC_EQUALS)}let u=R.ContentType,m=this.seekRange(),f=m.end-m.start;if(this.manifest_&&(f=this.manifest_.presentationTimeline.getDuration()),f==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_TEXT_TO_LIVE_STREAM);if(d.length){let b=await this.getTextData_(t),S=this.convertToWebVTT_(b,s,d),E=new Blob([S],{type:"text/vtt"});t=cr.createObjectURL(E),s="text/vtt"}let g=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:Ze.forSingleSegment(0,f,[t]),mimeType:s||"",codecs:n||"",kind:r,language:i,originalLanguage:i,label:a||null,type:u.TEXT,forced:!!o,external:!0}),_=O.getFullType(g.mimeType,g.codecs);if(!Oe.isTypeSupported(_))throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,s);return this.manifest_.textStreams.push(g),this.onTracksChanged_(),this.onTextChanged_(),re.textStreamToTrack(g)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(c),c}addThumbnailsTrack(t,i){let r=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding image tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);if(i||(i=await this.getTextMimetype_(t)),i!="text/vtt")throw new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,t);let s=R.ContentType,n=this.seekRange(),a=n.end-n.start;if(this.manifest_&&(a=this.manifest_.presentationTimeline.getDuration()),a==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_THUMBNAILS_TO_LIVE_STREAM);let o=await this.getTextData_(t),c=Oe.findParser(i);if(!c)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i);let d=c(),u={periodStart:0,segmentStart:0,segmentEnd:a,vttOffset:0,isMpegTs:!1},m=U.toUint8(o),f=d.parseMedia(m,u,t,[]),g=[];for(let b of f){let S=null,E=()=>(S==null&&(S=fe.resolveUris([t],[b.payload])),S||[]),w=new Te(b.startTime,b.endTime,E,0,null,null,0,0,1/0);if(b.payload.includes("#xywh")){let A=b.payload.split("#xywh=")[1].split(",");A.length===4&&w.setThumbnailSprite({height:parseInt(A[3],10),positionX:parseInt(A[0],10),positionY:parseInt(A[1],10),width:parseInt(A[2],10)})}g.push(w)}let _=i;g.length&&(_=await this.getTextMimetype_(g[0].getUris()[0]));let T=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(g),mimeType:_||"",kind:"",language:"und",type:s.IMAGE,tilesLayout:"1x1",external:!0});return this.loadMode_==Q.LoadMode.SRC_EQUALS?this.externalSrcEqualsThumbnailsStreams_.push(T):this.manifest_.imageStreams.push(T),this.onTracksChanged_(),re.imageStreamToTrack(T)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(r),r}addChaptersTrack(t,i,r){let s=(async()=>{if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE&&this.loadMode_!=Q.LoadMode.SRC_EQUALS)throw p.error("Must call load() and wait for it to resolve before adding chapters tracks."),new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.CONTENT_NOT_LOADED);r||(r=await this.getTextMimetype_(t));let n=R.ContentType,a=this.seekRange(),o=a.end-a.start;if(this.manifest_&&(o=this.manifest_.presentationTimeline.getDuration()),o==1/0)throw new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.CANNOT_ADD_EXTERNAL_CHAPTERS_TO_LIVE_STREAM);let c=Oe.findParser(r);if(!c)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,r);let d=await this.getTextData_(t),u=c(),m={periodStart:0,segmentStart:0,segmentEnd:o,vttOffset:0,isMpegTs:!1},f=U.toUint8(d),g=u.parseMedia(f,m,t,[]),_=[];for(let S of g){let E=new Te(S.startTime,S.endTime,()=>[],0,null,null,0,0,1/0),w={title:S.payload,images:[]};E.setMetadata(w),_.push(E)}let b=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(_),mimeType:"text/plain",kind:"",language:i,originalLanguage:i,type:n.CHAPTER,external:!0});return this.loadMode_==Q.LoadMode.MEDIA_SOURCE?this.manifest_.chapterStreams.push(b):this.externalSrcEqualsChapterStreams_.push(b),this.onTracksChanged_(),re.chapterStreamToTrack(b)})();return this.fullyLoaded_||this.registerExtraTrackPromise_(s),s}async getTextMimetype_(t){let i;try{v.assert(this.networkingEngine_,"Need networking engine."),i=await ct.getMimeType(t,this.networkingEngine_,this.config_.streaming.retryParameters)}catch(r){}if(i)return i;throw p.error("The mimeType has not been provided and it could not be deduced from its uri."),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,t)}async addSrcTrackElement_(t,i,r,s,n,a){if(s!="text/vtt"||a.length){let c=await this.getTextData_(t),d=this.convertToWebVTT_(c,s,a),u=new Blob([d],{type:"text/vtt"});t=cr.createObjectURL(u),s="text/vtt"}let o=document.createElement("track");return o.src=this.cmcdManager_.appendTextTrackData(t),o.label=n,o.kind=r,o.srclang=i,this.video_.getAttribute("crossorigin")||this.video_.setAttribute("crossorigin","anonymous"),this.video_.appendChild(o),this.externalSrcEqualsTextTracks_.push(o),o}async getTextData_(t){v.assert(this.networkingEngine_,"Need networking engine.");let i=K.RequestType.SEGMENT,r=this.config_.streaming.retryParameters,s=K.makeRequest([t],r);return s.method="GET",this.cmcdManager_.applyTextData(s),(await this.networkingEngine_.request(i,s).promise).data}convertToWebVTT_(t,i,r){let s=Oe.findParser(i);if(s){let n=s(),a={periodStart:0,segmentStart:0,segmentEnd:this.video_.duration,vttOffset:0,isMpegTs:!1},o=U.toUint8(t),c=n.parseMedia(o,a,null,[]);return Ls.convert(c,r)}throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i)}setMaxHardwareResolution(t,i){this.maxHwRes_.width=t,this.maxHwRes_.height=i}retryStreaming(t=.1){return this.loadMode_==Q.LoadMode.MEDIA_SOURCE?this.streamingEngine_.retry(t):!1}getManifest(){return p.alwaysWarn("Shaka Player's internal Manifest structure is NOT covered by semantic versioning compatibility guarantees. It may change at any time! Please consider filing a feature request for whatever you use getManifest() for."),this.manifest_}getManifestParserFactory(){return this.parserFactory_}getFetchedPlaybackInfo(){var a,o,c;let t={video:null,audio:null,text:null};if(this.loadMode_!=Q.LoadMode.MEDIA_SOURCE)return t;let i=R.ContentType,r=this.streamingEngine_.getCurrentVariant(),s=this.streamingEngine_.getCurrentTextStream(),n=this.video_.currentTime;for(let d of[r.video,r.audio,s]){if(!d||!d.segmentIndex)continue;let u=d.segmentIndex.find(n),m=d.segmentIndex.get(u),f={codecs:(a=m==null?void 0:m.codecs)!=null?a:d.codecs,mimeType:(o=m==null?void 0:m.mimeType)!=null?o:d.mimeType,bandwidth:(c=m==null?void 0:m.bandwidth)!=null?c:d.bandwidth};d.type==i.VIDEO?(f.width=d.width,f.height=d.height,t.video=f):d.type==i.AUDIO?t.audio=f:d.type==i.TEXT&&(t.text=f)}return t}addVariantToSwitchHistory_(t,i){this.stats_.getSwitchHistory().updateCurrentVariant(t,i)}addTextStreamToSwitchHistory_(t,i){this.stats_.getSwitchHistory().updateCurrentText(t,i)}defaultConfig_(){let t=st.createDefault();return t.streaming.failureCallback=i=>{this.defaultStreamingFailureCallback_(i)},t.textDisplayFactory=i=>(()=>{if(!this.videoContainer_)return!1;let s=this.video_;return!(s.webkitDisplayingFullscreen||s.webkitPresentationMode&&s.webkitPresentationMode!="inline")})()?new Jr(i):"track"in document.createElement("track")?new hr(i):(p.warning("Text tracks are not supported by the browser, disabling."),new vn),t}setVideoContainer(t){this.videoContainer_=t}getVideoContainer(){return this.videoContainer_}getTextDisplayer(){return this.textDisplayer_}defaultStreamingFailureCallback_(t){if(!this.isDynamic())return;let i=null;t.code==h.Code.BAD_HTTP_STATUS||t.code==h.Code.HTTP_ERROR?(i=1,this.config_.streaming.lowLatencyMode&&(i=.1)):t.code==h.Code.TIMEOUT&&(i=.1),i!=null&&(t.severity=h.Severity.RECOVERABLE,p.warning("Live streaming error. Retrying automatically..."),this.retryStreaming(i))}makeTextStreamsForClosedCaptions_(t){let i=R.ContentType,r=R.TextStreamKind,s=O.CEA608_CLOSED_CAPTION_MIMETYPE,n=O.CEA708_CLOSED_CAPTION_MIMETYPE,a=new Set;for(let o of t.textStreams)(o.mimeType==s||o.mimeType==n)&&a.add(o.originalId);for(let o of t.variants){let c=o.video;if(c&&c.closedCaptions){for(let d of c.closedCaptions.keys())if(!a.has(d)){let u=d.startsWith("CC")?s:n,m=new Mi,f=c.closedCaptions.get(d),g=re.createStream({id:this.nextExternalStreamId_++,originalId:d,segmentIndex:m,mimeType:u,kind:r.CLOSED_CAPTION,language:f,originalLanguage:f,type:i.TEXT,roles:c.roles});t.textStreams.push(g),a.add(d)}}}}async adjustStartTime_(t,i){let r=t.audio,s=t.video,n=async(c,d)=>{if(!c)return null;c.segmentIndex||await c.createSegmentIndex();let u=c.segmentIndex.getIteratorForTime(d),m=u?u.next().value:null;if(!m)return null;let f=m.startTime;return v.assert(f<=d,"Segment should start before target time!"),f},a=await n(r,i),o=await n(s,i);return o!=null&&a!=null?Math.max(o,a):o!=null?o:a!=null?a:i}updateBufferState_(){let t=this.isBuffering();if(p.v2("Player changing buffering state to",t),this.stats_&&this.bufferObserver_&&this.playhead_){this.config_.streaming.rebufferingGoal==0?this.playRateController_.setBuffering(!1):this.playRateController_.setBuffering(t),this.cmcdManager_&&this.cmcdManager_.setBuffering(t),this.updateStateHistory_();let n=this.config_.streaming.liveSync.dynamicTargetLatency.enabled,a=this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;if(n&&t&&this.rebufferingCount_<a){let o=this.config_.streaming.liveSync.dynamicTargetLatency.maxLatency,c=this.config_.streaming.liveSync.targetLatencyTolerance,d=this.config_.streaming.liveSync.dynamicTargetLatency.rebufferIncrement;this.currentTargetLatency_&&(this.currentTargetLatency_=Math.min(this.currentTargetLatency_+ ++this.rebufferingCount_*d,o-c))}}let r=L.EventName.Buffering,s=new Map().set("buffering",t);this.dispatchEvent(Q.makeEvent_(r,s))}onRateChange_(){let t=this.video_.playbackRate;if(t==0){let r=this.getPlaybackRate();if(r!==0&&r!==1){let s=Q.makeEvent_(L.EventName.RateChange);this.dispatchEvent(s)}return}this.playRateController_&&(this.playRateController_.set(t),this.loadMode_==Q.LoadMode.MEDIA_SOURCE&&this.abrManager_.playbackRateChanged(t),this.setupTrickPlayEventListeners_(t));let i=Q.makeEvent_(L.EventName.RateChange);this.dispatchEvent(i)}setupTrickPlayEventListeners_(t){this.trickPlayEventManager_.removeAll(),this.trickPlayEventManager_.listen(this.video_,"timeupdate",()=>{let i=this.video_.currentTime,r=this.seekRange(),s=this.isDynamic(),n=s?this.config_.streaming.safeSeekOffset:0;t>0?s&&t>1&&Math.floor(i)>=Math.floor(r.end)&&this.cancelTrickPlay():Math.floor(i)<=Math.floor(r.start+n)&&this.cancelTrickPlay()})}updateStateHistory_(){if(!this.stats_||!this.bufferObserver_)return;let t=Mr.State,i=this.stats_.getStateHistory(),r="playing";if(this.bufferObserver_.getState()==t.STARVING?r="buffering":this.isEnded()?r="ended":this.video_.paused&&(r="paused"),i.update(r)){let n=L.EventName.StateChanged,a=new Map().set("newstate",r);this.dispatchEvent(Q.makeEvent_(n,a))}}onTimeUpdate_(){let t=this.video_.playbackRate,i=this.isDynamic();if(this.config_.streaming.vodDynamicPlaybackRate&&!i){let w=this.config_.streaming.vodDynamicPlaybackRateLowBufferRate,A=this.getBufferFullness(),x=this.config_.streaming.vodDynamicPlaybackRateBufferRatio;A<=x?t!=w&&(p.debug("Buffer fullness ratio ("+A+") is less than the vodDynamicPlaybackRateBufferRatio ("+x+"). Updating playbackRate to "+w),this.trickPlay(w,!1)):A==1&&t!==this.playRateController_.getDefaultRate()&&(p.debug("Buffer is full. Cancel trick play."),this.cancelTrickPlay())}if(!i)return;let r=this.seekRange();if(!Number.isFinite(r.end)||this.video_.currentTime<r.start||this.video_.paused)return;let n,a,o,c,d,u=this.config_.streaming.liveSync.targetLatencyTolerance,m=this.config_.streaming.liveSync.dynamicTargetLatency.enabled,f=this.config_.streaming.liveSync.dynamicTargetLatency.stabilityThreshold;this.config_.streaming.liveSync&&this.config_.streaming.liveSync.enabled?(n=this.config_.streaming.liveSync.targetLatency,a=n+u,c=Math.max(0,n-u),o=this.config_.streaming.liveSync.maxPlaybackRate,d=this.config_.streaming.liveSync.minPlaybackRate):this.manifest_&&this.manifest_.serviceDescription&&(n=this.manifest_.serviceDescription.targetLatency,this.manifest_.serviceDescription.targetLatency!=null?a=this.manifest_.serviceDescription.targetLatency+u:this.manifest_.serviceDescription.maxLatency!=null&&(a=this.manifest_.serviceDescription.maxLatency),this.manifest_.serviceDescription.targetLatency!=null?c=Math.max(0,this.manifest_.serviceDescription.targetLatency-u):this.manifest_.serviceDescription.minLatency!=null&&(c=this.manifest_.serviceDescription.minLatency),o=this.manifest_.serviceDescription.maxPlaybackRate||this.config_.streaming.liveSync.maxPlaybackRate,d=this.manifest_.serviceDescription.minPlaybackRate||this.config_.streaming.liveSync.minPlaybackRate),!this.currentTargetLatency_&&typeof n=="number"&&(this.currentTargetLatency_=n);let g=this.config_.streaming.liveSync.dynamicTargetLatency.maxAttempts;if(m&&this.targetLatencyReached_&&this.currentTargetLatency_!==null&&typeof n=="number"&&this.rebufferingCount_<g&&Date.now()-this.targetLatencyReached_>f*1e3){let w=this.config_.streaming.liveSync.dynamicTargetLatency.minLatency,A=(n-w)/2;this.currentTargetLatency_=Math.max(this.currentTargetLatency_-A,w+u),this.targetLatencyReached_=Date.now()}m&&this.currentTargetLatency_!==null&&(a=this.currentTargetLatency_+u,c=this.currentTargetLatency_-u);let _=r.end-this.video_.currentTime,T=0;if(this.loadMode_==Q.LoadMode.SRC_EQUALS){let w=this.video_.buffered;if(w.length>0){let A=w.end(w.length-1);T=Math.max(o,A-r.end)}}let b=this.config_.streaming.liveSync.panicMode,S=this.config_.streaming.liveSync.panicThreshold*1e3,E=Date.now()-this.bufferObserver_.getLastRebufferTime();b&&!d&&(d=this.config_.streaming.liveSync.minPlaybackRate),b&&d&&E<=S?t!=d&&(p.debug("Time since last rebuffer ("+E+"s) is less than the live sync panicThreshold ("+S+"s). Updating playbackRate to "+d),this.trickPlay(d,!1)):a!=null&&o&&_-T>a?(t!=o&&(p.debug("Latency ("+_+"s) is greater than live sync maxLatency ("+a+"s). Updating playbackRate to "+o),this.trickPlay(o,!1)),this.targetLatencyReached_=null):c!=null&&d&&_-T<c?(t!=d&&(p.debug("Latency ("+_+"s) is smaller than live sync minLatency ("+c+"s). Updating playbackRate to "+d),this.trickPlay(d,!1)),this.targetLatencyReached_=null):t!==this.playRateController_.getDefaultRate()&&(this.cancelTrickPlay(),this.targetLatencyReached_=Date.now())}isQuartile_(t,i){return(qt.isFloatEqual(t,i,.01)||i>t)&&this.completionPercent_<t?(this.completionPercent_=t,!0):!1}checkEnded_(){this.config_&&this.config_.playRangeEnd!=1/0&&this.isEnded()&&this.video_.pause()}onVideoProgress_(){if(!this.video_)return;let t=this.seekRange(),i=t.end-t.start,r=i>0?this.video_.currentTime/i:0;if(isNaN(r))return;let s=r*100,n;this.isQuartile_(0,s)?n=Q.makeEvent_(L.EventName.Started):this.isQuartile_(25,s)?n=Q.makeEvent_(L.EventName.FirstQuartile):this.isQuartile_(50,s)?n=Q.makeEvent_(L.EventName.Midpoint):this.isQuartile_(75,s)?n=Q.makeEvent_(L.EventName.ThirdQuartile):this.isQuartile_(100,s)||s>100?(n=Q.makeEvent_(L.EventName.Complete),this.checkEnded_()):this.checkEnded_(),n&&this.dispatchEvent(n)}onSeek_(){this.playheadObservers_&&this.playheadObservers_.notifyOfSeek(!this.playhead_.getIsJumpingGap()),this.streamingEngine_&&this.streamingEngine_.seeked(),this.bufferObserver_&&this.pollBufferState_(Gt.SEEKING)}updateAbrManagerVariants_(){try{v.assert(this.manifest_,"Manifest should exist by now!"),this.manifestFilterer_.checkRestrictedVariants(this.manifest_)}catch(n){return this.onError_(n),!1}let t=this.manifest_.isLowLatency&&this.config_.streaming.lowLatencyMode,i=re.getPlayableVariants(this.manifest_.variants),r=this.currentAdaptationSetCriteria_.create(i),s=this.abrManager_.setVariants(Array.from(r.values()),t);return typeof s=="boolean"?s:!0}chooseVariant_(t=!1){if(this.updateAbrManagerVariants_()){if(this.config_.abr.enabled)return this.abrManager_.chooseVariant(t);{let r=this.currentAdaptationSetCriteria_.getLastAdaptationSet();if(r){let s=Array.from(r.values());if(s.length){let n=this.streamingEngine_.getCurrentVariant();if(n&&n.video){let a=s.find(o=>o.video==n.video);if(a)return a}}}return this.abrManager_.chooseVariant(t)}}else return null}checkVariants_(){v.assert(this.manifest_,"Should have manifest!");let t=Date.now()/1e3,i=!1,r=n=>{let a="";return n.video&&(a+="video:"+n.video.id),n.audio&&(a+=a?"&":"",a+="audio:"+n.audio.id),a},s=!0;for(let n of this.manifest_.variants)n.disabledUntilTime>0&&n.disabledUntilTime<=t&&(n.disabledUntilTime=0,i=!0,p.v2("Re-enabled variant with "+r(n))),n.disabledUntilTime>0&&(s=!1);s&&this.checkVariantsTimer_.stop(),i&&this.chooseVariantAndSwitch_(!1,void 0,!1,!1)}chooseTextStream_(t){let i=null,r=re.filterStreamsByTextPreferences(this.manifest_.textStreams,this.config_.preferredText);return r.length&&(i=r[0]),!i&&t.audio&&this.config_.accessibility.handleForcedSubtitlesAutomatically&&(r=re.filterStreamsByLanguageAndRole(this.manifest_.textStreams,t.audio.language,"",!0),r.length&&(i=r[0])),i}chooseVariantAndSwitch_(t=!0,i=0,r=!1,s=!0){v.assert(this.config_,"Must not be destroyed");let n=this.chooseVariant_();n&&this.switchVariant_(n,s,t,i,r)}switchVariant_(t,i,r,s,n=!1){let a=this.streamingEngine_.getCurrentVariant();if(t==a){p.debug("Variant already selected."),r&&this.streamingEngine_.switchVariant(t,r,s,!0);return}this.addVariantToSwitchHistory_(t,i),this.streamingEngine_.switchVariant(t,r,s,n,i);let o=null;a&&(o=re.variantToTrack(a));let c=re.variantToTrack(t);c.active=!0,this.lcevcDec_&&this.lcevcDec_.updateVariant(t,this.getManifestType()),i?this.onAdaptation_(o,c):this.onVariantChanged_(o,c),this.checkAudioTracksChanged_(o,c)}switchHtml5Track_(t){v.assert(this.video_&&this.video_.audioTracks,"Video and video.audioTracks should not be null!");let i=Array.from(this.video_.audioTracks),r=i.find(o=>o.enabled);for(let o of i)o!==t&&(o.enabled=!1);t.enabled=!0;let s=this.getActiveHtml5VideoTrack_(),n=r?re.html5TrackToShakaTrack(r,s):null,a=re.html5TrackToShakaTrack(t,s);this.onVariantChanged_(n,a),this.checkAudioTracksChanged_(n,a)}getActiveHtml5VideoTrack_(){return this.video_&&this.video_.videoTracks?Array.from(this.video_.videoTracks).find(i=>i.selected):null}setInitialTextState_(t){t?(this.isTextVisible_=!0,this.textDisplayer_.setTextVisibility(!0)):(this.isTextVisible_=!1,this.textDisplayer_.setTextVisibility(!1))}onManifestUpdate_(){this.parser_&&this.parser_.update&&this.parser_.update()}onSegmentAppended_(t,i,r,s,n,a){let o=R.ContentType;if(r!=o.TEXT){if(this.playhead_){this.playhead_.notifyOfBufferingChange();let d=this.mediaSourceEngine_.bufferStart(r);!this.isDynamic()&&this.video_.paused&&!this.video_.seeking&&!this.mediaSourceEngine_.isReloadingMediaSource()&&d!=null&&d>0&&this.playhead_.getTime()<d&&!qt.isFloatEqual(this.playhead_.getTime(),d,.001)&&this.playhead_.setStartTime(d)}this.pollBufferState_()}let c=new Map().set("start",t).set("end",i).set("contentType",r).set("isMuxed",s).set("isDependency",n).set("mediaTimestamp",a);this.dispatchEvent(Q.makeEvent_(L.EventName.SegmentAppended,c))}switch_(t,i=!1,r=0){p.debug("switch_"),v.assert(this.config_.abr.enabled,"AbrManager should not call switch while disabled!"),this.manifest_&&this.streamingEngine_&&t!=this.streamingEngine_.getCurrentVariant()&&this.switchVariant_(t,!0,i,r)}onAdaptation_(t,i){let r=new Map().set("oldTrack",t).set("newTrack",i),s=Q.makeEvent_(L.EventName.Adaptation,r);this.delayDispatchEvent_(s)}onTracksChanged_(){let t=Q.makeEvent_(L.EventName.TracksChanged);this.delayDispatchEvent_(t),this.onAudioTracksChanged_()}onVariantChanged_(t,i){let r=new Map().set("oldTrack",t).set("newTrack",i),s=Q.makeEvent_(L.EventName.VariantChanged,r);this.delayDispatchEvent_(s)}checkAudioTracksChanged_(t,i){let r=!1;(!t||t.audioId!=i.audioId||t.audioGroupId!=i.audioGroupId)&&(r=!0),r&&this.onAudioTracksChanged_()}onAudioTracksChanged_(){let t=Q.makeEvent_(L.EventName.AudioTracksChanged);this.delayDispatchEvent_(t)}onTextChanged_(){let t=Q.makeEvent_(L.EventName.TextChanged);this.delayDispatchEvent_(t)}onAbrStatusChanged_(){this.config_.abr.enabled||this.restoreDisabledVariants_();let t=new Map().set("newStatus",this.config_.abr.enabled);this.delayDispatchEvent_(Q.makeEvent_(L.EventName.AbrStatusChanged,t))}setTextDisplayerLanguage_(){let t=this.getTextTracks().find(i=>i.active);t&&this.textDisplayer_&&this.textDisplayer_.setTextLanguage(t.language)}restoreDisabledVariants_(t=!0){if(this.loadMode_==Q.LoadMode.MEDIA_SOURCE){v.assert(this.manifest_,"Should have manifest!"),p.v2("Restoring all disabled streams..."),this.checkVariantsTimer_.stop();for(let i of this.manifest_.variants)isFinite(i.disabledUntilTime)&&(i.disabledUntilTime=0);t&&this.updateAbrManagerVariants_()}}disableStream(t,i){if(!this.config_.abr.enabled||this.loadMode_===Q.LoadMode.DESTROYED||!navigator.onLine||i==0||!this.manifest_||!this.abrManager_)return!1;if(this.manifest_.variants.some(s=>{let n=s[t.type];return n&&n.id!==t.id&&!s.disabledUntilTime?re.isAudio(t)?t.language===n.language:!0:!1})){let s=!1,n=!1;for(let c of this.manifest_.variants){let d=c[t.type];d&&(d.id===t.id?(c.disabledUntilTime=Date.now()/1e3+i,s=!0,p.v2("Disabled stream "+t.type+":"+t.id+" for "+i+" seconds...")):d.trickModeVideo&&d.trickModeVideo.id==t.id&&(n=!0))}if(!s&&n)return!1;v.assert(s,"Must have disabled stream"),this.checkVariantsTimer_.tickEvery(1);let{video:a}=this.getBufferedInfo(),o=a.reduce((c,{start:d,end:u})=>c+u-d,0);return this.chooseVariantAndSwitch_(!1,o,!0,!1),!0}return p.warning("No alternate stream found for active "+t.type+" stream. Will ignore request to disable stream..."),!1}async onError_(t){if(v.assert(t instanceof h,"Wrong error type!"),this.loadMode_==Q.LoadMode.DESTROYED)return;if(t.severity===h.Severity.RECOVERABLE&&this.stats_.addNonFatalError(),this.manifest_&&this.streamingEngine_&&!t.handled&&(t.code==h.Code.VIDEO_ERROR||t.code==h.Code.MEDIA_SOURCE_OPERATION_FAILED||t.code==h.Code.MEDIA_SOURCE_OPERATION_THREW||t.code==h.Code.STREAMING_NOT_ALLOWED||t.code==h.Code.TRANSMUXING_FAILED)&&(re.getPlayableVariants(this.manifest_.variants).length>1||this.fullyLoaded_)){if(j.getDevice().getBrowserEngine()===ie.BrowserEngine.WEBKIT&&t.code==h.Code.VIDEO_ERROR)return;try{if(await this.streamingEngine_.resetMediaSource()){let o=Q.makeEvent_(L.EventName.MediaSourceRecovered);this.dispatchEvent(o);return}}catch(a){}}t.severity===h.Severity.CRITICAL&&this.restoreDisabledVariants_(!1);let i=L.EventName.Error,r=Q.makeEvent_(i,new Map().set("detail",t));this.dispatchEvent(r),r.defaultPrevented&&(t.handled=!0)}addFont(t,i){return Ke.addFont(t,i)}onRegionEvent_(t,i,r=this){let s={schemeIdUri:i.schemeIdUri,value:i.value,startTime:i.startTime,endTime:i.endTime,id:i.id,timescale:i.timescale,eventNode:i.eventNode,urlParams:i.urlParams,values:i.values},n=new Map().set("detail",s);r.dispatchEvent(Q.makeEvent_(t,n))}sendEventStreamCallback_(t){if(t.schemeIdUri!=="urn:mpeg:dash:event:callback:2015"||!t.eventNode)return;let i=I.getTextContents(t.eventNode);if(!i)return;let r=i.trim();if(!r)return;r=fe.applyUrlParams(r,t.urlParams);let s=K.RequestType.EVENT_CALLBACK,n=K.makeRequest([r],K.defaultRetryParameters());this.networkingEngine_.request(s,n).promise.catch(()=>{})}onMediaQualityChange_(t,i,r=!1){let s={bandwidth:t.bandwidth,audioSamplingRate:t.audioSamplingRate,codecs:t.codecs,contentType:t.contentType,frameRate:t.frameRate,height:t.height,mimeType:t.mimeType,channelsCount:t.channelsCount,pixelAspectRatio:t.pixelAspectRatio,width:t.width,label:t.label,roles:t.roles,language:t.language},n=new Map().set("mediaQuality",s).set("position",i);this.dispatchEvent(Q.makeEvent_(r?L.EventName.AudioTrackChanged:L.EventName.MediaQualityChanged,n))}videoErrorToShakaError_(t=!0){if(v.assert(this.video_.error,"Video error expected, but missing!"),!this.video_.error)return t?new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.VIDEO_ERROR):null;let{code:i,extended:r,message:s}=h.getMediaElementErrorDetails(this.video_.error);return!t&&i===MediaError.MEDIA_ERR_ABORTED?null:new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.VIDEO_ERROR,i,r,s)}onVideoError_(t){let i=this.videoErrorToShakaError_(!1);i&&this.onError_(i)}onKeyStatus_(t){if(!this.streamingEngine_)return;let i=Q.makeEvent_(L.EventName.KeyStatusChanged);this.dispatchEvent(i);let r=Object.keys(t);r.length==0&&p.warning("Got a key status event without any key statuses, so we don't know the real key statuses. If we don't have all the keys, you'll need to set restrictions so we don't select those tracks."),r.length==1&&r[0]==""&&(r=["00"],t={"00":t[""]});let s=r.length==1&&r[0]=="00";s&&p.warning("Got a synthetic key status event, so we don't know the real key statuses. If we don't have all the keys, you'll need to set restrictions so we don't select those tracks.");let n=Rr.restrictedStatuses,a=!1;if(v.assert(this.drmEngine_,"drmEngine should be non-null here."),r.length){let o=this.keySystem(),c=ei.asMap(this.config_.drm.clearKeys),d=(u,m)=>{u.allowedByKeySystem=!0;for(let f of m){let g=t[s?"00":f];(g||this.drmEngine_.hasManifestInitData())&&(u.allowedByKeySystem=u.allowedByKeySystem&&!!g&&!n.includes(g))}};for(let u of this.manifest_.variants){let m=re.getVariantStreams(u);for(let f of m){let g=u.allowedByKeySystem;if(f.keyIds.size)if(f.drmInfos.length&&!c.size&&this.manifest_.type==me.HLS)for(let _ of f.drmInfos)_.keySystem==o&&(_.keyIds.size?d(u,_.keyIds):d(u,f.keyIds));else d(u,f.keyIds);g!=u.allowedByKeySystem&&(a=!0)}}}if(a){this.onTracksChanged_();let o=this.streamingEngine_.getCurrentVariant();o&&!o.allowedByKeySystem?(p.debug("Choosing new streams after key status changed"),this.chooseVariantAndSwitch_()):this.updateAbrManagerVariants_()}}static applyPlayRange_(t,i,r){i>0&&(t.isDynamic()?p.warning("|playRangeStart| has been configured for live content. Ignoring the setting."):t.setUserSeekStart(i));let s=t.getDuration();r<s&&(t.isDynamic()?p.warning("|playRangeEnd| has been configured for live content. Ignoring the setting."):t.setDuration(r))}async delayDispatchEvent_(t){await Promise.resolve(),this.loadMode_!=Q.LoadMode.DESTROYED&&this.dispatchEvent(t)}createAbortLoadError_(){return new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.LOAD_INTERRUPTED)}isRemotePlayback(){if(!this.video_)return!1;let i=j.getDevice().getRemote(this.video_);return i?i.state!="disconnected":!1}isEnded(){return!this.video_||this.video_.ended?!0:this.fullyLoaded_&&!this.isDynamic()&&this.video_.currentTime>=this.seekRange().end}static convertLegacyPreferences_(t){let i=(d,u)=>{p.alwaysWarn(d,"has been deprecated. Please use",u,"instead.")},r={preferredAudioLanguage:"language",preferredAudioRole:"role",preferredAudioLabel:"label",preferredAudioChannelCount:"channelCount",preferSpatialAudio:"spatialAudio"};if(Object.keys(r).some(d=>d in t)){let d={language:"",role:"",label:"",channelCount:0,codec:""};for(let[u,m]of Object.entries(r))u in t&&(i(u,"preferredAudio"),d[m]=t[u],delete t[u]);t.preferredAudio||(t.preferredAudio=[d])}if("preferredAudioCodecs"in t){i("preferredAudioCodecs","preferredAudio");let d=t.preferredAudioCodecs;Array.isArray(d)&&d.length&&(t.preferredAudio||(t.preferredAudio=d.map(u=>({language:"",role:"",label:"",channelCount:0,codec:u})))),delete t.preferredAudioCodecs}let n={preferredTextLanguage:"language",preferredTextRole:"role",preferForcedSubs:"forced"};if(Object.keys(n).some(d=>d in t)){let d={language:"",role:"",format:""};for(let[u,m]of Object.entries(n))u in t&&(i(u,"preferredText"),d[m]=t[u],delete t[u]);t.preferredText||(t.preferredText=[d])}if("preferredTextFormats"in t){i("preferredTextFormats","preferredText");let d=t.preferredTextFormats;Array.isArray(d)&&d.length&&(t.preferredText||(t.preferredText=d.map(u=>({language:"",role:"",format:u})))),delete t.preferredTextFormats}let o={preferredVideoLabel:"label",preferredVideoRole:"role",preferredVideoHdrLevel:"hdrLevel",preferredVideoLayout:"layout"};if(Object.keys(o).some(d=>d in t)){let d={label:"",role:"",language:"",codec:"",hdrLevel:"",layout:""};for(let[u,m]of Object.entries(o))u in t&&(i(u,"preferredVideo"),d[m]=t[u],delete t[u]);t.preferredVideo||(t.preferredVideo=[d])}if("preferredVideoCodecs"in t){i("preferredVideoCodecs","preferredVideo");let d=t.preferredVideoCodecs;Array.isArray(d)&&d.length&&(t.preferredVideo||(t.preferredVideo=d.map(u=>({label:"",role:"",language:"",codec:u,hdrLevel:"",layout:""})))),delete t.preferredVideoCodecs}}registerExtraTrackPromise_(t){this.pendingExtraTrackPromises_.add(t),t.finally(()=>this.pendingExtraTrackPromises_.delete(t))}async waitForPendingExtraTrackPromises_(){this.pendingExtraTrackPromises_.size&&await Promise.all([...this.pendingExtraTrackPromises_])}};l(Q,"LoadMode",{DESTROYED:0,NOT_LOADED:1,MEDIA_SOURCE:2,SRC_EQUALS:3}),l(Q,"TYPICAL_BUFFERING_THRESHOLD_",.5),l(Q,"supportPlugins_",new Map),l(Q,"adManagerFactory_",null),l(Q,"queueManagerFactory_",null),l(Q,"TextTrackLabel","Shaka Player TextTrack");var dt=Q;dt.version=goog.define("shaka.Player.version","v5.2.11-uncompiled");Cr.init(dt.version);/*! @license
|
|
491
491
|
* Shaka Player
|
|
492
492
|
* Copyright 2016 Google LLC
|
|
493
493
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -507,7 +507,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
507
507
|
* Shaka Player
|
|
508
508
|
* Copyright 2016 Google LLC
|
|
509
509
|
* SPDX-License-Identifier: Apache-2.0
|
|
510
|
-
*/var En=class{constructor(e,t,i,r,s){l(this,"adContainer_");l(this,"video_");l(this,"videoPlayed_");l(this,"config_");l(this,"resizeObserver_");l(this,"requestAdsStartTime_");l(this,"onEvent_");l(this,"ad_");l(this,"eventManager_");l(this,"adDisplayContainer_");l(this,"adsLoader_");l(this,"imaAdsManager_");l(this,"adsRenderingSettings_");this.adContainer_=e,this.video_=t,this.videoPlayed_=!1,this.config_=null,this.resizeObserver_=null,this.requestAdsStartTime_=NaN,this.onEvent_=s,this.ad_=null,this.eventManager_=new ue,google.ima.settings.setLocale(i),google.ima.settings.setDisableCustomPlaybackForIOS10Plus(!0),this.adDisplayContainer_=new google.ima.AdDisplayContainer(this.adContainer_,this.video_),this.adDisplayContainer_.initialize(),this.adsLoader_=new google.ima.AdsLoader(this.adDisplayContainer_),this.adsLoader_.getSettings().setPlayerType("shaka-player"),this.adsLoader_.getSettings().setPlayerVersion(dt.version),this.imaAdsManager_=null,this.adsRenderingSettings_=r||new google.ima.AdsRenderingSettings,this.eventManager_.listen(this.adsLoader_,google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,n=>{this.onAdsManagerLoaded_(n)}),this.eventManager_.listen(this.adsLoader_,google.ima.AdErrorEvent.Type.AD_ERROR,n=>{this.onAdError_(n)}),this.eventManager_.listen(this.video_,"ended",()=>{this.adsLoader_.contentComplete()}),this.eventManager_.listenOnce(this.video_,"play",()=>{this.videoPlayed_=!0})}configure(e){this.config_=e}requestAds(e){v.assert(e.adTagUrl||e.adsResponse,"The ad tag needs to be set up before requesting ads, or adsResponse must be filled."),this.imaAdsManager_&&this.imaAdsManager_.destroy(),this.adsLoader_&&this.adsLoader_.contentComplete(),this.requestAdsStartTime_=Date.now()/1e3,this.adsLoader_.requestAds(e)}updateAdsRenderingSettings(e){this.adsRenderingSettings_=e,this.imaAdsManager_&&this.imaAdsManager_.updateAdsRenderingSettings(this.adsRenderingSettings_)}stop(){this.imaAdsManager_&&this.imaAdsManager_.stop(),this.adContainer_&&Ke.removeAllChildren(this.adContainer_)}release(){this.stop(),this.resizeObserver_&&this.resizeObserver_.disconnect(),this.eventManager_&&this.eventManager_.release(),this.imaAdsManager_&&this.imaAdsManager_.destroy(),this.adsLoader_.destroy(),this.adDisplayContainer_.destroy()}onAdError_(e){p.warning("There was an ad error from the IMA SDK: "+e.getError()),p.warning("Resuming playback.");let t=new Map().set("originalEvent",e);this.onEvent_(new
|
|
510
|
+
*/var En=class{constructor(e,t,i,r,s){l(this,"adContainer_");l(this,"video_");l(this,"videoPlayed_");l(this,"config_");l(this,"resizeObserver_");l(this,"requestAdsStartTime_");l(this,"onEvent_");l(this,"ad_");l(this,"eventManager_");l(this,"adDisplayContainer_");l(this,"adsLoader_");l(this,"imaAdsManager_");l(this,"adsRenderingSettings_");this.adContainer_=e,this.video_=t,this.videoPlayed_=!1,this.config_=null,this.resizeObserver_=null,this.requestAdsStartTime_=NaN,this.onEvent_=s,this.ad_=null,this.eventManager_=new ue,google.ima.settings.setLocale(i),google.ima.settings.setDisableCustomPlaybackForIOS10Plus(!0),this.adDisplayContainer_=new google.ima.AdDisplayContainer(this.adContainer_,this.video_),this.adDisplayContainer_.initialize(),this.adsLoader_=new google.ima.AdsLoader(this.adDisplayContainer_),this.adsLoader_.getSettings().setPlayerType("shaka-player"),this.adsLoader_.getSettings().setPlayerVersion(dt.version),this.imaAdsManager_=null,this.adsRenderingSettings_=r||new google.ima.AdsRenderingSettings,this.eventManager_.listen(this.adsLoader_,google.ima.AdsManagerLoadedEvent.Type.ADS_MANAGER_LOADED,n=>{this.onAdsManagerLoaded_(n)}),this.eventManager_.listen(this.adsLoader_,google.ima.AdErrorEvent.Type.AD_ERROR,n=>{this.onAdError_(n)}),this.eventManager_.listen(this.video_,"ended",()=>{this.adsLoader_.contentComplete()}),this.eventManager_.listenOnce(this.video_,"play",()=>{this.videoPlayed_=!0})}configure(e){this.config_=e}requestAds(e){v.assert(e.adTagUrl||e.adsResponse,"The ad tag needs to be set up before requesting ads, or adsResponse must be filled."),this.imaAdsManager_&&this.imaAdsManager_.destroy(),this.adsLoader_&&this.adsLoader_.contentComplete(),this.requestAdsStartTime_=Date.now()/1e3,this.adsLoader_.requestAds(e)}updateAdsRenderingSettings(e){this.adsRenderingSettings_=e,this.imaAdsManager_&&this.imaAdsManager_.updateAdsRenderingSettings(this.adsRenderingSettings_)}stop(){this.imaAdsManager_&&this.imaAdsManager_.stop(),this.adContainer_&&Ke.removeAllChildren(this.adContainer_)}release(){this.stop(),this.resizeObserver_&&this.resizeObserver_.disconnect(),this.eventManager_&&this.eventManager_.release(),this.imaAdsManager_&&this.imaAdsManager_.destroy(),this.adsLoader_.destroy(),this.adDisplayContainer_.destroy()}onAdError_(e){p.warning("There was an ad error from the IMA SDK: "+e.getError()),p.warning("Resuming playback.");let t=new Map().set("originalEvent",e);this.onEvent_(new L(H.AD_ERROR,t)),this.onAdComplete_(null),this.onEvent_(new L(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",[])))}onAdsManagerLoaded_(e){v.assert(this.video_!=null,"Video should not be null!");let i=Date.now()/1e3-this.requestAdsStartTime_;if(this.onEvent_(new L(H.ADS_LOADED,new Map().set("loadTime",i))),!this.config_.customPlayheadTracker)this.imaAdsManager_=e.getAdsManager(this.video_,this.adsRenderingSettings_);else{let s={currentTime:this.video_.currentTime};this.imaAdsManager_=e.getAdsManager(s,this.adsRenderingSettings_),this.video_.muted?this.imaAdsManager_.setVolume(0):this.imaAdsManager_.setVolume(this.video_.volume),this.eventManager_.listen(this.video_,"timeupdate",()=>{this.video_.duration&&(s.currentTime=this.video_.currentTime)}),this.eventManager_.listen(this.video_,"volumechange",()=>{this.ad_&&(this.ad_.setVolume(this.video_.volume),this.video_.muted&&this.ad_.setMuted(!0))})}this.onEvent_(new L(H.IMA_AD_MANAGER_LOADED,new Map().set("imaAdManager",this.imaAdsManager_)));let r=this.imaAdsManager_.getCuePoints();if(r.length){let s=[];for(let n of r){let a={start:n,end:null};s.push(a)}this.onEvent_(new L(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",s)))}this.addImaEventListeners_();try{this.imaAdsManager_.init(this.video_.offsetWidth,this.video_.offsetHeight),this.eventManager_.listen(this.video_,"loadeddata",()=>{this.imaAdsManager_.resize(this.video_.offsetWidth,this.video_.offsetHeight)}),"ResizeObserver"in window?(this.resizeObserver_=new ResizeObserver(()=>{this.imaAdsManager_.resize(this.video_.offsetWidth,this.video_.offsetHeight)}),this.resizeObserver_.observe(this.video_)):this.eventManager_.listen(document,"fullscreenchange",()=>{this.imaAdsManager_.resize(this.video_.offsetWidth,this.video_.offsetHeight)}),this.videoPlayed_||this.config_.skipPlayDetection?this.imaAdsManager_.start():this.eventManager_.listenOnce(this.video_,"play",()=>{this.videoPlayed_=!0,this.imaAdsManager_.start()})}catch(s){this.onAdComplete_(null)}}addImaEventListeners_(){let e=(t,i)=>{let r=new Map().set("originalEvent",t);this.onEvent_(new L(i,r))};this.eventManager_.listen(this.imaAdsManager_,google.ima.AdErrorEvent.Type.AD_ERROR,t=>{this.onAdError_(t)}),this.eventManager_.listenMulti(this.imaAdsManager_,[google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED,google.ima.AdEvent.Type.STARTED],t=>{this.onAdStart_(t)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.FIRST_QUARTILE,t=>{e(t,H.AD_FIRST_QUARTILE)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.MIDPOINT,t=>{e(t,H.AD_MIDPOINT)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.THIRD_QUARTILE,t=>{e(t,H.AD_THIRD_QUARTILE)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.COMPLETE,t=>{e(t,H.AD_COMPLETE)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED,t=>{this.onAdComplete_(t)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.ALL_ADS_COMPLETED,t=>{e(t,H.ALL_ADS_COMPLETED),this.onAdComplete_(t)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.SKIPPED,t=>{e(t,H.AD_SKIPPED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.VOLUME_CHANGED,t=>{e(t,H.AD_VOLUME_CHANGED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.VOLUME_MUTED,t=>{e(t,H.AD_MUTED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.PAUSED,t=>{this.ad_&&(this.ad_.setPaused(!0),e(t,H.AD_PAUSED))}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.RESUMED,t=>{this.ad_&&(this.ad_.setPaused(!1),e(t,H.AD_RESUMED))}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.SKIPPABLE_STATE_CHANGED,t=>{this.ad_&&e(t,H.AD_SKIP_STATE_CHANGED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.CLICK,t=>{e(t,H.AD_CLICKED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.AD_PROGRESS,t=>{e(t,H.AD_PROGRESS)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.AD_BUFFERING,t=>{e(t,H.AD_BUFFERING)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.IMPRESSION,t=>{e(t,H.AD_IMPRESSION)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.DURATION_CHANGE,t=>{e(t,H.AD_DURATION_CHANGED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.USER_CLOSE,t=>{e(t,H.AD_CLOSED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.LOADED,t=>{e(t,H.AD_LOADED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.LINEAR_CHANGED,t=>{e(t,H.AD_LINEAR_CHANGED)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.AD_METADATA,t=>{e(t,H.AD_METADATA)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.LOG,t=>{e(t,H.AD_RECOVERABLE_ERROR)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.AD_BREAK_READY,t=>{e(t,H.AD_BREAK_READY)}),this.eventManager_.listen(this.imaAdsManager_,google.ima.AdEvent.Type.INTERACTION,t=>{e(t,H.AD_INTERACTION)})}onAdStart_(e){v.assert(this.imaAdsManager_,"Should have an ads manager at this point!");let t=e.getAd();if(!t){p.alwaysWarn("The IMA SDK fired a "+e.type+" event with no associated ad. Unable to play ad!");return}this.ad_=new bn(t,this.imaAdsManager_,this.video_),e.type==google.ima.AdEvent.Type.CONTENT_PAUSE_REQUESTED&&!this.config_.supportsMultipleMediaElements&&this.onEvent_(new L(H.AD_CONTENT_PAUSE_REQUESTED));let i=new Map().set("ad",this.ad_).set("sdkAdObject",t).set("originalEvent",e);this.onEvent_(new L(H.AD_STARTED,i)),this.ad_.isLinear()&&(this.adContainer_.setAttribute("ad-active","true"),this.config_.customPlayheadTracker||this.video_.pause(),this.video_.muted?this.ad_.setInitialMuted(this.video_.volume):this.ad_.setVolume(this.video_.volume))}onAdComplete_(e){e&&e.type==google.ima.AdEvent.Type.CONTENT_RESUME_REQUESTED&&!this.config_.supportsMultipleMediaElements&&this.onEvent_(new L(H.AD_CONTENT_RESUME_REQUESTED)),this.onEvent_(new L(H.AD_STOPPED,new Map().set("originalEvent",e))),this.ad_&&this.ad_.isLinear()&&(this.adContainer_.removeAttribute("ad-active"),!this.config_.customPlayheadTracker&&!this.video_.ended&&this.video_.play())}};/*! @license
|
|
511
511
|
* Shaka Player
|
|
512
512
|
* Copyright 2016 Google LLC
|
|
513
513
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -527,7 +527,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
527
527
|
* Shaka Player
|
|
528
528
|
* Copyright 2016 Google LLC
|
|
529
529
|
* SPDX-License-Identifier: Apache-2.0
|
|
530
|
-
*/var is=class is{constructor(e,t,i){l(this,"config_");l(this,"adContainer_");l(this,"basePlayer_");l(this,"baseVideo_");l(this,"adVideo_");l(this,"usingBaseVideo_");l(this,"video_");l(this,"onEvent_");l(this,"hlsMetadataIds_");l(this,"interstitialIds_");l(this,"interstitials_");l(this,"sortedInterstitials_");l(this,"unresolvedAssetLists_");l(this,"preloadOffsets_");l(this,"preloadTasks_");l(this,"preloadOnDomElements_");l(this,"player_");l(this,"eventManager_");l(this,"adEventManager_");l(this,"isEnded_");l(this,"playingAd_");l(this,"lastTime_");l(this,"lastPlayedAd_");l(this,"playingAdStartTime_");l(this,"playoutLimitTimer_");l(this,"lastOnSkip_");l(this,"usingListeners_");l(this,"videoCallbackId_");l(this,"videoFrameCallbackHandler_");l(this,"sessionId_");l(this,"assetStartOffsets_");l(this,"checkForInterstitials_");l(this,"onTimeUpdate_");l(this,"onSeeked_");l(this,"timeUpdateTimer_");l(this,"pollTimer_");this.config_=null,this.adContainer_=e,this.basePlayer_=t,this.baseVideo_=t.getMediaElement(),this.adVideo_=null,this.usingBaseVideo_=!0,this.video_=this.baseVideo_,this.onEvent_=i,this.hlsMetadataIds_=new Set,this.interstitialIds_=new Set,this.interstitials_=new Set,this.sortedInterstitials_=null,this.unresolvedAssetLists_=new Set,this.preloadOffsets_=new Map,this.preloadTasks_=new Map,this.preloadOnDomElements_=new Map,this.player_=new dt,this.updatePlayerConfig_(),this.eventManager_=new ue,this.adEventManager_=new ue,this.isEnded_=!1,this.playingAd_=!1,this.lastTime_=null,this.lastPlayedAd_=null,this.playingAdStartTime_=null,this.playoutLimitTimer_=null,this.lastOnSkip_=null,this.usingListeners_=!1,this.videoCallbackId_=-1,this.videoFrameCallbackHandler_=null,this.sessionId_=null,this.assetStartOffsets_=new Map;let r=s=>s?s.overlay?!0:this.isEnded_?s.post:!this.baseVideo_.paused:!1;this.checkForInterstitials_=()=>{if(this.playingAd_||!this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended,this.lastTime_=this.baseVideo_.currentTime;let s=this.getCurrentInterstitial_();s&&r(s)&&this.setupAd_(s,1,1,Date.now())},this.onTimeUpdate_=()=>{if(this.playingAd_||this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended,this.baseVideo_.paused||(this.lastTime_=this.baseVideo_.currentTime);let s;this.lastPlayedAd_||(s=this.getCurrentInterstitial_(!0)),s||(s=this.getCurrentInterstitial_()),s&&r(s)&&this.setupAd_(s,1,1,Date.now())},this.onSeeked_=()=>{if(this.playingAd_||!this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended;let s=this.baseVideo_.currentTime;this.lastPlayedAd_&&!this.lastPlayedAd_.pre&&!this.lastPlayedAd_.post&&s<this.lastPlayedAd_.startTime&&(this.lastPlayedAd_=null),this.maybeResetAssetListsOnSeek_(s)},this.timeUpdateTimer_=new ae(this.checkForInterstitials_),this.pollTimer_=new ae(()=>{if(!this.playingAd_&&this.lastTime_!=null&&(this.interstitials_.size||this.unresolvedAssetLists_.size)){let s=this.basePlayer_.getLoadMode();if(s==dt.LoadMode.DESTROYED||s==dt.LoadMode.NOT_LOADED)return;let n=!1,a=this.basePlayer_.seekRange();for(let c of Array.from(this.unresolvedAssetLists_)){let d=c.endTime||c.startTime;a.start-d>=1?(this.unresolvedAssetLists_.delete(c),this.removeEventListeners_(),n=!0):!c.resolving&&!c.resolved&&this.shouldResolveAssetListNow_(c)&&(c.resolving=!0,this.resolveAssetListDescriptor_(c))}let o=Array.from(this.interstitials_);for(let c of o){if(c==this.lastPlayedAd_)continue;let d=c.endTime||c.startTime;if(a.start-d>=1)this.removeInterstitial_(c),this.removeEventListeners_(),c.overlay||(n=!0);else if(this.isWithinPreloadWindow_(c)){if(!this.preloadTasks_.has(c)&&this.isPreloadAllowed_(c)){v.assert(this.player_,"Need a player");let u=new wn(this.player_,c,(m,f)=>{this.sendEvent_(m,f)});this.preloadTasks_.set(c,u)}this.checkPreloadOnDomElements_(c)}}n&&this.cuepointsChanged_()}}),this.configure(this.basePlayer_.getConfiguration().ads)}configure(e){this.config_=e,this.playingAd_||this.determineIfUsingBaseVideo_()}addEventListeners_(){var t;if(this.usingListeners_||!this.interstitials_.size&&!this.unresolvedAssetLists_.size)return;this.eventManager_.listenMulti(this.baseVideo_,["playing","timeupdate"],this.onTimeUpdate_),this.eventManager_.listen(this.baseVideo_,"seeked",this.onSeeked_),this.eventManager_.listen(this.baseVideo_,"ended",this.checkForInterstitials_);let e=!0;if(!this.isSmartTV_()){(t=this.videoFrameCallbackHandler_)==null||t.release();let i=this.baseVideo_;this.videoFrameCallbackHandler_=new es(i),e=!this.videoFrameCallbackHandler_.start(()=>{this.checkForInterstitials_()})}e&&this.timeUpdateTimer_.tickEvery(.025),this.pollTimer_&&this.pollTimer_.tickEvery(1),this.usingListeners_=!0}removeEventListeners_(){var e,t,i;!this.usingListeners_||this.interstitials_.size||this.unresolvedAssetLists_.size||(this.eventManager_.unlisten(this.baseVideo_,"playing",this.onTimeUpdate_),this.eventManager_.unlisten(this.baseVideo_,"timeupdate",this.onTimeUpdate_),this.eventManager_.unlisten(this.baseVideo_,"seeked",this.onSeeked_),this.eventManager_.unlisten(this.baseVideo_,"ended",this.checkForInterstitials_),(e=this.videoFrameCallbackHandler_)==null||e.release(),this.videoFrameCallbackHandler_=null,(t=this.timeUpdateTimer_)==null||t.stop(),(i=this.pollTimer_)==null||i.stop(),this.usingListeners_=!1)}determineIfUsingBaseVideo_(e=!1){if(!this.adContainer_||!this.config_){this.usingBaseVideo_=!0;return}let t=this.config_.supportsMultipleMediaElements,i=this.baseVideo_;(i.controls||i.webkitPresentationMode&&i.webkitPresentationMode!=="inline"||i.webkitDisplayingFullscreen)&&(t=!1),!(!e&&this.usingBaseVideo_!=t)&&(this.usingBaseVideo_=!t,this.usingBaseVideo_?(this.video_=this.baseVideo_,this.adVideo_&&(this.adVideo_.parentElement&&this.adContainer_.removeChild(this.adVideo_),this.adVideo_=null)):(e&&this.adVideo_&&(this.adVideo_.parentElement&&this.adContainer_.removeChild(this.adVideo_),this.adVideo_=null),this.adVideo_||(this.adVideo_=this.createMediaElement_()),this.video_=this.adVideo_))}stop(){this.adEventManager_&&this.adEventManager_.removeAll(),this.hlsMetadataIds_.clear(),this.interstitialIds_.clear(),this.interstitials_.clear(),this.sortedInterstitials_=null,this.unresolvedAssetLists_.clear(),this.preloadOffsets_.clear(),this.player_.destroyAllPreloads();let e=Array.from(this.preloadTasks_.values());for(let t of e)t.release();if(this.preloadTasks_.clear(),this.preloadOnDomElements_.size){let t=Array.from(this.preloadOnDomElements_.keys());for(let i of t)this.removePreloadOnDomElements_(i)}this.preloadOnDomElements_.clear(),this.assetStartOffsets_.clear(),this.player_.detach(),this.isEnded_=!1,this.playingAd_=!1,this.lastTime_=null,this.lastPlayedAd_=null,this.playingAdStartTime_=null,this.usingBaseVideo_=!0,this.video_=this.baseVideo_,this.adVideo_=null,this.sessionId_=null,this.removeBaseStyles_(),this.removeEventListeners_(),this.adContainer_&&Ke.removeAllChildren(this.adContainer_),this.playoutLimitTimer_&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null)}release(){this.stop(),this.eventManager_&&this.eventManager_.release(),this.adEventManager_&&this.adEventManager_.release(),this.timeUpdateTimer_&&(this.timeUpdateTimer_.stop(),this.timeUpdateTimer_=null),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null),this.player_.destroy()}getPlayer(){return this.player_}async addMetadata(e){let t=this.getMetadataValue_(e,"ID");if(t){if(this.hlsMetadataIds_.has(t)){this.updateInterstitials_(e,t);return}this.hlsMetadataIds_.add(t)}this.updatePlayerConfig_();let i=[];this.getMetadataValue_(e,"X-OVERLAY-ID")!=null?i=this.getOverlaysInfo_(e):i=await this.getInterstitialsInfo_(e),i.length&&await this.addInterstitials(i)}updateInterstitials_(e,t){let i=this.getMetadataValue_(e,"X-PLAYOUT-LIMIT");if(i==null)return;let r=parseFloat(i);if(!isNaN(r)){for(let s of this.interstitials_)(s.id===t||s.groupId===t)&&this.applyUpdatedPlayoutLimit_(s,r);for(let s of this.unresolvedAssetLists_)s.id===t&&s.playoutLimit==null&&(s.playoutLimit=r)}}applyUpdatedPlayoutLimit_(e,t){var a;if(e.playoutLimit!=null)return;e.playoutLimit=t;let i=this.playingAd_&&this.lastPlayedAd_!=null&&(this.lastPlayedAd_===e||e.groupId!=null&&this.lastPlayedAd_.groupId===e.groupId),r=!e.overlay&&!(e.mimeType&&(e.mimeType.startsWith("image/")||e.mimeType==="text/html"));if(!i||!r||this.playingAdStartTime_==null)return;let s=(Date.now()-this.playingAdStartTime_)/1e3,n=t-s;(a=this.playoutLimitTimer_)==null||a.stop(),this.playoutLimitTimer_=null,n<=0?this.lastOnSkip_&&this.lastOnSkip_():(this.playoutLimitTimer_=new ae(()=>{this.lastOnSkip_&&this.lastOnSkip_()}).tickAfter(n),this.player_.configure("playRangeEnd",t))}addPreloadMetadata(e){let t=this.getMetadataValue_(e,"ID");if(t){if(this.hlsMetadataIds_.has(t))return;this.hlsMetadataIds_.add(t)}let i=this.getMetadataValue_(e,"X-TARGET-ID");if(i){this.preloadOffsets_.set(i,e.startTime);for(let r of this.interstitials_)this.applyPreloadOffset_(r);for(let r of this.unresolvedAssetLists_)this.applyPreloadOffset_(r)}}applyPreloadOffset_(e){let t=null;e.id!=null&&this.preloadOffsets_.has(e.id)?t=this.preloadOffsets_.get(e.id):e.groupId!=null&&this.preloadOffsets_.has(e.groupId)&&(t=this.preloadOffsets_.get(e.groupId)),t!=null&&(e.resolutionTimeOffset=Math.max(0,e.startTime-t))}async addAdUrlInterstitial(e){let t={type:K.AdvancedRequestType.INTERSTITIAL_AD_URL},i=await this.makeAdRequest_(e,t).promise,r=I.parseXml(i.data,"VAST,vmap:VMAP");if(!r)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.VAST_INVALID_XML);let s=[];if(r.tagName=="VAST")s=ts.parseVastToInterstitials(r,this.lastTime_);else if(r.tagName=="vmap:VMAP"){let n=async o=>{let c=await this.makeAdRequest_(o.uri,t).promise,d=I.parseXml(c.data,"VAST");if(!d)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.VAST_INVALID_XML);s.push(...ts.parseVastToInterstitials(d,o.time))},a=[];for(let o of ts.parseVMAP(r))a.push(n(o));a.length&&await Promise.all(a)}this.addInterstitials(s)}async addInterstitials(e){let t=!1;for(let i of e){if(!i.uri){p.alwaysWarn("Missing URL in interstitial",i);continue}if(!i.mimeType)try{let s=this.player_.getNetworkingEngine();v.assert(s,"Need networking engine"),i.mimeType=await ct.getMimeType(i.uri,s,this.basePlayer_.getConfiguration().streaming.retryParameters)}catch(s){}let r=this.interstitialId_(i);if(!this.interstitialIds_.has(r)&&(i.loop&&!i.overlay&&p.alwaysWarn("Loop is only supported in overlay interstitials",i),i.overlay||(t=!0),this.interstitialIds_.add(r),this.interstitials_.add(i),this.sortedInterstitials_=null,this.applyPreloadOffset_(i),this.isWithinPreloadWindow_(i))){if(!this.preloadTasks_.has(i)&&this.isPreloadAllowed_(i)){v.assert(this.player_,"Need a player");let s=new wn(this.player_,i,(n,a)=>{this.sendEvent_(n,a)});this.preloadTasks_.set(i,s)}this.checkPreloadOnDomElements_(i)}}t&&this.cuepointsChanged_(),this.addEventListeners_()}createMediaElement_(){let e=document.createElement(this.baseVideo_.tagName);return e.autoplay=!0,e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.display="none",e.setAttribute("playsinline",""),e}getSortedInterstitials_(){return this.sortedInterstitials_||(this.sortedInterstitials_=Array.from(this.interstitials_).sort((e,t)=>t.startTime-e.startTime)),this.sortedInterstitials_}getCurrentInterstitial_(e=!1,t=null){let i=0,r=null;if(this.interstitials_.size&&this.lastTime_!=null){let s=this.getSortedInterstitials_(),n=o=>Math.round(o*1e3)/1e3,a=s;e?a=s.filter(o=>o.pre):this.isEnded_?a=s.filter(o=>o.post):a=s.filter(o=>!o.pre&&!o.post);for(let o of a){let c=!1;if(e)c=o.pre;else if(this.isEnded_)c=o.post;else if(!o.pre&&!o.post){let d=this.lastTime_-n(o.startTime),u=1;this.config_.allowStartInMiddleOfInterstitial&&o.endTime&&o.endTime!=1/0&&(u=o.endTime-o.startTime),(d>0||d==0&&this.lastTime_==0)&&(d<=u||!o.canJump)&&(t==null&&this.lastPlayedAd_&&!this.lastPlayedAd_.pre&&!this.lastPlayedAd_.post&&this.lastPlayedAd_.startTime>=o.startTime?c=!1:c=!0)}if(c&&(!this.lastPlayedAd_||o.startTime>=this.lastPlayedAd_.startTime)){if(i==(t||0))r=o;else if(r&&!o.canJump){let d=n(r.startTime);n(o.startTime)-d>.001&&(r=o,i=0)}i++}}}return r}setupAd_(e,t,i,r,s=0){if(p.info("Starting interstitial",e.startTime,"at",this.lastTime_),this.lastPlayedAd_=e,this.determineIfUsingBaseVideo_(),v.assert(this.video_,"Must have video"),!this.usingBaseVideo_&&this.adContainer_&&!this.video_.parentElement&&this.adContainer_.appendChild(this.video_),i==1&&t==1&&(t=Array.from(this.interstitials_).filter(n=>e.pre?n.pre==e.pre:e.post?n.post==e.post:Math.abs(n.startTime-e.startTime)<.001).length),e.once&&(s++,this.interstitials_.delete(e),this.sortedInterstitials_=null,this.removeEventListeners_(),e.overlay||this.cuepointsChanged_()),e.mimeType&&(e.mimeType.startsWith("image/")||e.mimeType==="text/html")){if(!e.overlay){p.alwaysWarn("Unsupported interstitial",e);return}p.info("Starting interstitial",e),this.setupStaticAd_(e,t,i,s);return}if(this.usingBaseVideo_&&e.overlay){p.alwaysWarn("Unsupported interstitial",e);return}p.info("Starting interstitial",e),this.setupVideoAd_(e,t,i,r,s)}setupStaticAd_(e,t,i,r){let s=this.getTimeOffset_(e);if(!this.playingAd_){this.playingAdStartTime_=Date.now();let m=new Map().set("timeOffset",s).set("startedAt",this.lastTime_);this.sendEvent_(H.AD_BREAK_STARTED,m)}this.playingAd_=!0;let n=e.overlay;v.assert(n,"Must have overlay");let a=e.mimeType=="text/html"?"iframe":"img",o=document.createElement(a);o.style.objectFit="contain",o.style.position="absolute",o.style.border="none",this.setBaseStyles_(e);let c=()=>{this.playoutLimitTimer_&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null),this.adContainer_.removeChild(o),this.removeBaseStyles_(e),this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll();let m=this.getCurrentInterstitial_(e.pre,i-r);m?this.setupAd_(m,t,++i,Date.now(),r):this.playingAd_=!1,this.playingAd_||this.sendEvent_(H.AD_BREAK_ENDED,new Map().set("timeOffset",s))},d=new In(e,t,i);this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",d)),a=="iframe"?o.src=e.uri:(o.src=e.uri,o.onerror=m=>{this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",m)),c()}),n.viewport.x==0&&n.viewport.y==0?(o.width=n.size.x,o.height=n.size.y,o.style.bottom="10%",o.style.left="0",o.style.right="0",o.style.width="100%",!n.size.y&&a=="iframe"&&(o.style.height="auto")):this.applyOverlayPosition_(o,n),this.adContainer_.appendChild(o);let u=Date.now();this.playoutLimitTimer_&&this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=new ae(()=>{e.playoutLimit&&(Date.now()-u)/1e3>e.playoutLimit?(this.sendEvent_(H.AD_COMPLETE),c()):e.endTime&&this.baseVideo_.currentTime>e.endTime?(this.sendEvent_(H.AD_COMPLETE),c()):this.baseVideo_.currentTime<e.startTime&&(this.sendEvent_(H.AD_SKIPPED),c())}),e.playoutLimit&&!e.endTime?this.playoutLimitTimer_.tickAfter(e.playoutLimit):e.endTime&&this.playoutLimitTimer_.tickEvery(.025),this.adEventManager_.listen(this.baseVideo_,"seeked",()=>{let m=this.baseVideo_.currentTime;(m<e.startTime||e.endTime&&m>e.endTime)&&(this.playoutLimitTimer_&&this.playoutLimitTimer_.stop(),this.sendEvent_(H.AD_SKIPPED),c())}),e.clickThroughUrl&&this.adEventManager_.listen(o,"click",m=>{if(e.clickThroughUrl){if(this.sendEvent_(H.AD_CLICKED),!is.isSafeClickThroughUri_(e.clickThroughUrl)){p.warning("Ignoring click-through with unsupported URI scheme:",e.clickThroughUrl);return}window.open(e.clickThroughUrl,"_blank")}})}async setupVideoAd_(e,t,i,r,s){var b;v.assert(this.video_,"Must have video");let n=Date.now(),a=this.getTimeOffset_(e);if(!this.playingAd_){this.playingAdStartTime_=Date.now();let S=new Map().set("timeOffset",a).set("startedAt",this.lastTime_);this.sendEvent_(H.AD_BREAK_STARTED,S)}this.playingAd_=!0;let o=!1,c=()=>{if(!this.usingBaseVideo_&&!e.overlay&&e.resumeOffset==null)if(e.timelineRange&&e.endTime&&e.endTime!=1/0)this.baseVideo_.currentTime!=e.endTime&&(this.baseVideo_.currentTime=e.endTime);else{let S=Date.now();this.baseVideo_.currentTime+=(S-r)/1e3,r=S}},d=async(S,E)=>{var A;E||c();let w=this.getCurrentInterstitial_(e.pre,i-s);if(S&&e.groupId)for(;w&&w.groupId==e.groupId;)i++,w=this.getCurrentInterstitial_(e.pre,i-s);if(this.playoutLimitTimer_&&(!e.groupId||w&&w.groupId!=e.groupId)&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null),this.removeBaseStyles_(e),!w||w.overlay){if(e.post&&(this.lastTime_=null,this.lastPlayedAd_=null),this.usingBaseVideo_?await this.player_.detach():await this.player_.unload(),this.usingBaseVideo_){let x=e.resumeOffset;x==null&&(e.timelineRange&&e.endTime&&e.endTime!=1/0?x=e.endTime-(this.lastTime_||0):x=(Date.now()-r)/1e3),this.sendEvent_(H.AD_CONTENT_RESUME_REQUESTED,new Map().set("offset",x))}else this.basePlayer_.isLive()&&e.resumeOffset!=null&&e.resumeOffset!=0&&(this.baseVideo_.currentTime+=e.resumeOffset);this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll(),this.playingAd_=!1,this.usingBaseVideo_?this.cuepointsChanged_():(this.video_.style.display="none",E||c(),this.isEnded_||this.baseVideo_.play())}w&&this.usingBaseVideo_&&this.isSmartTV_()?(await this.player_.detach(),this.determineIfUsingBaseVideo_(!0)):this.determineIfUsingBaseVideo_(),w&&(this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll(),this.setupAd_(w,t,++i,r,s)),this.playingAd_||(this.sendEvent_(H.AD_BREAK_ENDED,new Map().set("timeOffset",a)),(A=this.playoutLimitTimer_)==null||A.stop(),this.playoutLimitTimer_=null)},u=async(S,E)=>{if(o)return;o=!0;let w=E&&S.code===h.Code.BAD_HTTP_STATUS;this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",S)),await d(!1,w)},m=async()=>{o||(o=!0,await d(!1,!1),this.sendEvent_(H.AD_COMPLETE))};this.lastOnSkip_=async()=>{o||(o=!0,this.sendEvent_(H.AD_SKIPPED),await d(!0,!1))};let f=new An(this.video_,e,this.lastOnSkip_,t,i,!this.usingBaseVideo_);this.usingBaseVideo_||(f.setMuted(this.baseVideo_.muted),f.setVolume(this.baseVideo_.volume)),this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",f));let g=f.canSkipNow();g&&this.sendEvent_(H.AD_SKIP_STATE_CHANGED);let _=()=>{let S=f.canSkipNow();g!=S&&(g=S,this.sendEvent_(H.AD_SKIP_STATE_CHANGED))};if(this.preloadTasks_.has(e)){let E=this.preloadTasks_.get(e).getInitialError();if(E){this.preloadTasks_.delete(e),u(E,!0);return}}this.adEventManager_.listenOnce(this.player_,"error",S=>{u(S.detail,!1)}),this.adEventManager_.listenOnce(this.video_,"loadedmetadata",()=>{f.markMediaReady(),_()}),this.adEventManager_.listen(this.video_,"timeupdate",()=>{this.video_.duration&&(f.getRemainingTime()>0&&f.getDuration()>0&&_(),!this.usingBaseVideo_&&!e.overlay&&e.resumeOffset==null&&e.timelineRange&&e.endTime&&e.endTime!=1/0&&this.baseVideo_.currentTime!=e.endTime&&this.basePlayer_.seekRange().end>=e.endTime&&(this.baseVideo_.currentTime=e.endTime))}),this.adEventManager_.listenOnce(this.player_,"firstquartile",()=>{c(),this.sendEvent_(H.AD_FIRST_QUARTILE)}),this.adEventManager_.listenOnce(this.player_,"midpoint",()=>{c(),this.sendEvent_(H.AD_MIDPOINT)}),this.adEventManager_.listenOnce(this.player_,"thirdquartile",()=>{c(),this.sendEvent_(H.AD_THIRD_QUARTILE)}),this.adEventManager_.listenOnce(this.player_,"complete",m);let T=!1;if(this.adEventManager_.listen(this.video_,"play",()=>{T?this.sendEvent_(H.AD_RESUMED):(T=!0,this.sendEvent_(H.AD_PLAYING,new Map().set("ad",f)))}),this.adEventManager_.listen(this.video_,"pause",()=>{let S=this.player_.getConfiguration();if(this.video_.currentTime>=S.playRangeEnd){m();return}this.sendEvent_(H.AD_PAUSED)}),this.adEventManager_.listen(this.video_,"volumechange",()=>{this.video_.muted?this.sendEvent_(H.AD_MUTED):this.sendEvent_(H.AD_VOLUME_CHANGED),this.usingBaseVideo_||(this.baseVideo_.volume=this.video_.volume,this.baseVideo_.muted=this.video_.muted)}),e.clickThroughUrl){let S=this.adContainer_||this.video_;this.adEventManager_.listen(S,"click",E=>{if(e.clickThroughUrl){if(f.isPaused()||f.pause(),!is.isSafeClickThroughUri_(e.clickThroughUrl)){p.warning("Ignoring click-through with unsupported URI scheme:",e.clickThroughUrl);return}window.open(e.clickThroughUrl,"_blank")}})}if(this.usingBaseVideo_&&i==1){this.sendEvent_(H.AD_CONTENT_PAUSE_REQUESTED,new Map().set("saveLivePosition",!0));let S=Promise.withResolvers(),E=async w=>{w.state=="detach"&&(this.isSmartTV_()&&await it.delay(.1),S.resolve(),this.adEventManager_.unlisten(this.basePlayer_,"onstatechange",E))};this.adEventManager_.listen(this.basePlayer_,"onstatechange",E),await S.promise}this.setBaseStyles_(e),this.usingBaseVideo_||(this.video_.style.display="",e.overlay?(this.video_.loop=e.loop,this.applyOverlayPosition_(this.video_,e.overlay)):(this.baseVideo_.pause(),this.basePlayer_.isLive()||e.resumeOffset!=null&&e.resumeOffset!=0&&(this.baseVideo_.currentTime+=e.resumeOffset),this.video_.loop=!1,this.video_.style.height="100%",this.video_.style.left="0",this.video_.style.top="0",this.video_.style.width="100%"));try{if(this.updatePlayerConfig_(),e.startTime&&e.endTime&&e.endTime!=1/0&&e.startTime!=e.endTime){let A=e.endTime-e.startTime;A>0&&this.player_.configure("playRangeEnd",A)}let S=null;if(i==1&&!e.pre&&!e.post&&this.config_.allowStartInMiddleOfInterstitial&&this.lastTime_!=null&&e.startTime<=this.lastTime_&&(!e.endTime||e.endTime>this.lastTime_))if(e.id&&this.assetStartOffsets_.has(e.id)){let A=this.assetStartOffsets_.get(e.id);this.assetStartOffsets_.delete(e.id),Math.abs(A)>.25&&(S=A)}else{let A=this.lastTime_-e.startTime;Math.abs(A)>.25&&(S=A)}i==1&&((b=this.playoutLimitTimer_)==null||b.stop(),this.playoutLimitTimer_=null);let E=e.playoutLimit;if(E&&!this.playoutLimitTimer_){S&&(E-=S);let A=E,x=is.PLAYOUT_LIMIT_TOLERANCE_;this.playoutLimitTimer_=new ae(()=>{this.video_.ended||this.video_.currentTime>=A?m():this.lastOnSkip_()}).tickAfter(E+x),this.player_.configure("playRangeEnd",E)}if(this.player_.getMediaElement()!==this.video_&&await this.player_.attach(this.video_),this.preloadTasks_.has(e)){let A=this.preloadTasks_.get(e);this.preloadTasks_.delete(e);let x=A.getInitialError();if(x)throw x;let M=A.getPreloadManager();M?await this.player_.load(M,S):await this.player_.load(e.uri,S,e.mimeType||void 0)}else await this.player_.load(e.uri,S,e.mimeType||void 0);f.markMediaReady(),_(),!e.overlay||!this.baseVideo_.paused?this.video_.play():this.video_.pause();let w=(Date.now()-n)/1e3;if(this.sendEvent_(H.ADS_LOADED,new Map().set("loadTime",w)),this.usingBaseVideo_&&this.baseVideo_.play(),e.overlay){if(!e.pre&&!e.post&&(!this.basePlayer_.isLive()||e.startTime>0)){let A=()=>{let x=this.baseVideo_.currentTime-e.startTime;Math.abs(x-this.video_.currentTime)>.1&&(this.video_.currentTime=x)};this.adEventManager_.listenOnce(this.video_,"playing",A),this.adEventManager_.listen(this.baseVideo_,"seeking",A)}this.adEventManager_.listen(this.baseVideo_,"seeked",()=>{let A=this.baseVideo_.currentTime;(A<e.startTime||e.endTime&&A>e.endTime)&&this.lastOnSkip_()})}}catch(S){if(!this.playingAd_)return;u(S,!0)}}applyOverlayPosition_(e,t){let i=t.viewport,r=t.topLeft,s=t.size;e.style.height=s.y/i.y*100+"%",e.style.left=r.x/i.x*100+"%",e.style.top=r.y/i.y*100+"%",e.style.width=s.x/i.x*100+"%"}setBaseStyles_(e){if(e.displayOnBackground&&(this.baseVideo_.style.zIndex="1"),e.currentVideo!=null){let t=e.currentVideo;this.baseVideo_.style.transformOrigin="top left";let i=!0,r=[],s=t.topLeft.x/t.viewport.x*100;s>0&&s<=100&&(r.push(`translateX(${s}%)`),i=!1);let n=t.topLeft.y/t.viewport.y*100;n>0&&n<=100&&(r.push(`translateY(${n}%)`),i=!1);let a=t.size.x/t.viewport.x;a<1&&r.push(`scaleX(${a})`);let o=t.size.y/t.viewport.y;a<1&&r.push(`scaleY(${o})`),r.length&&(this.baseVideo_.style.transform=r.join(" ")),i&&(this.baseVideo_.style.transition="transform 250ms")}this.adContainer_&&(e.clickThroughUrl?(this.adContainer_.setAttribute("ad-active","true"),this.adContainer_.style.pointerEvents=""):this.adContainer_.style.pointerEvents="none",e.background&&(this.adContainer_.style.background=e.background)),this.adVideo_&&(e.overlay?this.adVideo_.style.background="":this.adVideo_.style.background="rgb(0, 0, 0)")}removeBaseStyles_(e){(!e||e.displayOnBackground)&&(this.baseVideo_.style.zIndex=""),(!e||e.currentVideo!=null)&&(this.baseVideo_.style.transformOrigin="",this.baseVideo_.style.transition="",this.baseVideo_.style.transform=""),this.adContainer_&&(this.adContainer_.removeAttribute("ad-active"),this.adContainer_.style.pointerEvents="",(!e||e.background)&&(this.adContainer_.style.background="")),this.adVideo_&&(this.adVideo_.style.background="")}async getInterstitialsInfo_(e){let t=[];if(!e)return t;let i=this.getMetadataValue_(e,"X-ASSET-URI"),r=this.getMetadataValue_(e,"X-ASSET-LIST");if(!i&&!r)return t;let s=this.getMetadataValue_(e,"ID"),{startTime:n,endTime:a}=this.getInterstitialTimes_(e,s),o=this.getMetadataValue_(e,"X-RESTRICT"),c=!0,d=!0;o!=null&&(c=!o.includes("SKIP"),d=!o.includes("JUMP"));let u=c?0:null,m=this.getMetadataValue_(e,"X-SKIP-CONTROL-OFFSET");m!=null&&(u=parseFloat(m),isNaN(u)&&(u=c?0:null));let f=null,g=this.getMetadataValue_(e,"X-SKIP-CONTROL-DURATION");g!=null&&(f=parseFloat(g),isNaN(u)&&(f=null));let _=null,T=this.getMetadataValue_(e,"X-RESUME-OFFSET");T!=null&&(_=parseFloat(T),isNaN(_)&&(_=null)),_!=null&&_!=0&&a&&a!=1/0&&qt.isFloatEqual(n+_,a)&&(_=null);let b=null,S=this.getMetadataValue_(e,"X-PLAYOUT-LIMIT");S!=null&&(b=parseFloat(S),isNaN(b)&&(b=null));let{once:E,pre:w,post:A}=this.parseCue_(e),x=!1,M=this.getMetadataValue_(e,"X-TIMELINE-OCCUPIES");if(M!=null?x=M.includes("RANGE"):T==null&&this.basePlayer_.isLive()&&(x=!w&&!A),i!=null){if(!i)return t;t.push({id:s,groupId:null,startTime:n,endTime:a,uri:this.getUriWithHlsParams_(i),mimeType:null,isSkippable:c,skipOffset:u,skipFor:f,canJump:d,resumeOffset:_,playoutLimit:b,once:E,pre:w,post:A,timelineRange:x,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null,clickThroughUrl:null,tracking:null})}else if(r!=null){if(!r)return t;let C={id:s,groupId:null,startTime:n,endTime:a,assetListUri:r,isSkippable:c,skipOffset:u,skipFor:f,canJump:d,resumeOffset:_,playoutLimit:b,once:E,pre:w,post:A,timelineRange:x,resolving:!1,resolved:!1};if(this.applyPreloadOffset_(C),this.shouldResolveAssetListNow_(C)){let k=await this.resolveAssetList_(C);return k.length&&this.maybeRetainResolvedAssetList_(C),k}this.addUnresolvedAssetList_(C)}return t}async resolveAssetList_(e){var s;let t=[],i=e.skipOffset,r=e.skipFor;try{let n={type:K.AdvancedRequestType.INTERSTITIAL_ASSET_LIST},a=0;!e.pre&&!e.post&&this.config_.allowStartInMiddleOfInterstitial&&this.basePlayer_.isLive()&&(a=((s=this.lastTime_)!=null?s:this.baseVideo_.currentTime)-e.startTime);let o=this.getUriWithHlsParams_(e.assetListUri,a),c=await this.makeAdRequest_(o,n).promise,d=q.fromUTF8(c.data),u=JSON.parse(d),m=u["SKIP-CONTROL"];if(m){let g=m.OFFSET;typeof g=="number"&&(i=parseFloat(g),isNaN(g)&&(i=e.isSkippable?0:null));let _=m.DURATION;typeof _=="number"&&(r=parseFloat(_),isNaN(r)&&(r=null))}let f=0;for(let g=0;g<u.ASSETS.length;g++){let _=u.ASSETS[g],T=_.URI,b=parseFloat(_.DURATION)||0;if(a>0&&b>0){let S=f+b;if(S<=a){f=S;continue}}if(T){let S=fe.resolve(c.uri,T),E={id:e.id+"_shaka_asset_"+g,groupId:e.id,startTime:e.startTime,endTime:e.endTime,uri:this.getUriWithHlsParams_(S),mimeType:null,isSkippable:e.isSkippable,skipOffset:i,skipFor:r,canJump:e.canJump,resumeOffset:e.resumeOffset,playoutLimit:e.playoutLimit,once:e.once,pre:e.pre,post:e.post,timelineRange:e.timelineRange,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null,clickThroughUrl:null,tracking:null},w=_["X-AD-CREATIVE-SIGNALING"];if(w){let A=w.payload&&w.payload[0];A&&(E.clickThroughUrl=A.clickThrough,A.tracking&&(E.tracking=H.createTrackingFromEvents(A.tracking)))}if(a>0&&f<a){let A=a-f;this.assetStartOffsets_.set(E.id,A)}t.push(E)}f+=b}}catch(n){p.warning("Failed to resolve interstitial asset list",e.assetListUri,n)}return t}addUnresolvedAssetList_(e){this.unresolvedAssetLists_.add(e),this.cuepointsChanged_(),this.addEventListeners_()}async resolveAssetListDescriptor_(e){let t=await this.resolveAssetList_(e);e.resolving=!1,t.length?(this.maybeRetainResolvedAssetList_(e),await this.addInterstitials(t)):(this.unresolvedAssetLists_.delete(e),this.cuepointsChanged_(),this.removeEventListeners_())}maybeRetainResolvedAssetList_(e){this.shouldRetainAssetList_()?(e.resolved=!0,this.unresolvedAssetLists_.add(e)):this.unresolvedAssetLists_.delete(e)}shouldRetainAssetList_(){return!!this.config_&&this.config_.allowStartInMiddleOfInterstitial&&this.basePlayer_.isLive()}maybeResetAssetListsOnSeek_(e){if(this.shouldRetainAssetList_())for(let t of this.unresolvedAssetLists_){if(!t.resolved)continue;let i=t.endTime;e>=t.startTime&&(i==null||i==1/0||e<i)&&(t.resolved=!1,this.removeResolvedAssetListGroup_(t.id))}}removeResolvedAssetListGroup_(e){if(e!=null)for(let t of Array.from(this.interstitials_))t.groupId===e&&this.removeInterstitial_(t)}removeInterstitial_(e){this.preloadTasks_.has(e)&&(this.preloadTasks_.get(e).release(),this.preloadTasks_.delete(e)),this.removePreloadOnDomElements_(e);let t=this.interstitialId_(e);this.interstitialIds_.delete(t),this.interstitials_.delete(e),this.sortedInterstitials_=null,this.lastPlayedAd_===e&&(this.lastPlayedAd_=null)}resolutionAheadTime_(e){return e.resolutionTimeOffset||this.config_.interstitialPreloadAheadTime}shouldResolveAssetListNow_(e){if(e.pre||e.post||e.startTime==0&&!e.canJump)return!0;let t=this.lastTime_!=null?this.lastTime_:this.baseVideo_.currentTime,i=1/0;if(!this.playingAd_&&this.baseVideo_.duration&&(i=this.baseVideo_.duration),Math.min(e.startTime,i)-t>this.resolutionAheadTime_(e))return!1;let s=e.endTime;return!(s!=null&&s!=1/0&&t>=s)}getOverlaysInfo_(e){let t=[];if(!e)return t;let i=this.getMetadataValue_(e,"X-ASSET-URI");if(!i)return t;let r=this.getMetadataValue_(e,"X-OVERLAY-ID"),{startTime:s,endTime:n}=this.getInterstitialTimes_(e,r),{once:a,pre:o,post:c}=this.parseCue_(e),d=this.getMetadataValue_(e,"X-ASSET-MIMETYPE"),u=this.getMetadataValue_(e,"X-LOOP")=="YES",m=1,f=this.getMetadataValue_(e,"X-DEPTH");f!=null&&(m=parseFloat(f),isNaN(m)&&(m=1));let g=this.getMetadataValue_(e,"X-BACKGROUND"),_={x:1920,y:1080},T=this.getMetadataValue_(e,"X-VIEWPORT");if(T!=null){let x=T.split("x");if(x.length!=2)return t;_.x=parseFloat(x[0]),_.y=parseFloat(x[1])}let b={viewport:{x:_.x,y:_.y},topLeft:{x:0,y:0},size:{x:_.x,y:_.y}},S=this.getMetadataValue_(e,"X-OVERLAY-POSITION");if(S!=null){let x=S.split("x");if(x.length!=2)return t;b.topLeft.x=parseFloat(x[0]),b.topLeft.y=parseFloat(x[1])}let E=this.getMetadataValue_(e,"X-OVERLAY-SIZE");if(E!=null){let x=E.split("x");if(x.length!=2)return t;b.size.x=parseFloat(x[0]),b.size.y=parseFloat(x[1])}let w=null,A=this.getMetadataValue_(e,"X-SQUEEZECURRENT");if(A!=null){let x=parseFloat(A);isNaN(x)&&(x=1),w={viewport:{x:1920,y:1080},topLeft:{x:0,y:0},size:{x:1920*x,y:1080*x}};let M=this.getMetadataValue_(e,"X-SQUEEZECURRENT-POSITION");if(M!=null){let C=M.split("x");if(C.length!=2)return t;w.topLeft.x=parseFloat(C[0]),w.topLeft.y=parseFloat(C[1])}}return t.push({id:r,groupId:null,startTime:s,endTime:n,uri:this.getUriWithHlsParams_(i),mimeType:d,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:null,playoutLimit:null,once:a,pre:o,post:c,timelineRange:!0,loop:u,overlay:b,displayOnBackground:m==-1,currentVideo:w,background:g,clickThroughUrl:null,tracking:null}),t}getUriWithHlsParams_(e,t=0){if(e.startsWith("data:"))return e;this.sessionId_||(this.sessionId_=window.crypto.randomUUID());let i=new Map;if(i.set("_HLS_primary_id",this.sessionId_),t>0){let r=Math.round(t*1e3)/1e3;i.set("_HLS_start_offset",String(r))}return fe.appendParams(e,i)}cuepointsChanged_(){let e=[],t=(i,r)=>{!e.find(n=>i==n.start&&r==n.end)&&e.push({start:i,end:r})};for(let i of this.interstitials_)i.overlay||(i.pre?t(0,null):i.post?t(-1,null):i.timelineRange?t(i.startTime,i.endTime):t(i.startTime,null));for(let i of this.unresolvedAssetLists_)i.pre?t(0,null):i.post?t(-1,null):i.timelineRange?t(i.startTime,i.endTime):t(i.startTime,null);this.sendEvent_(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",e))}updatePlayerConfig_(){v.assert(this.player_,"Must have player"),v.assert(this.basePlayer_,"Must have base player"),this.player_.configure(this.basePlayer_.getNonDefaultConfiguration()),this.player_.configure("ads.disableHLSInterstitial",!0),this.player_.configure("ads.disableDASHInterstitial",!0),this.player_.configure("playRangeEnd",1/0);let e=this.player_.getNetworkingEngine();v.assert(e,"Need networking engine"),this.basePlayer_.getNetworkingEngine().copyFiltersInto(e)}makeAdRequest_(e,t){let i=K.RequestType.ADS,r=K.makeRequest([e],K.defaultRetryParameters());return this.basePlayer_.getNetworkingEngine().request(i,r,t)}getMetadataValue_(e,t){let i=e.values.find(r=>r.key==t);return i?i.data:null}getInterstitialTimes_(e,t){let i=t==null?Math.floor(e.startTime*10)/10:e.startTime,r=e.endTime;return e.endTime&&e.endTime!=1/0&&typeof e.endTime=="number"&&(r=t==null?Math.floor(e.endTime*10)/10:e.endTime),{startTime:i,endTime:r}}parseCue_(e){let t=this.getMetadataValue_(e,"CUE")||this.getMetadataValue_(e,"X-CUE");return{once:t!=null&&t.includes("ONCE"),pre:t!=null&&t.includes("PRE"),post:t!=null&&t.includes("POST")}}interstitialId_(e){return e.id||JSON.stringify(e)}getTimeOffset_(e){return e.pre?0:e.post?-1:e.startTime}isPreloadAllowed_(e){let t=e.mimeType;return t?!t.startsWith("image/")&&t!=="text/html":!0}getInterstitials(){return Array.from(this.interstitials_)}isSmartTV_(){let t=j.getDevice().getDeviceType();return t==ie.DeviceType.TV||t==ie.DeviceType.CONSOLE||t==ie.DeviceType.CAST}checkPreloadOnDomElements_(e){if(this.preloadOnDomElements_.has(e)||this.config_&&!this.config_.allowPreloadOnDomElements)return;let t=r=>{let s=document.createElement("link");return s.rel="preload",s.href=r,s.as="image",document.head.appendChild(s),s},i=[];if(e.background){let r=/url\(('|")?([^'"()]+)('|")\)?/,s=e.background.match(r);s&&i.push(t(s[2]))}e.mimeType&&e.mimeType.startsWith("image/")&&i.push(t(e.uri)),this.preloadOnDomElements_.set(e,i)}removePreloadOnDomElements_(e){if(!this.preloadOnDomElements_.has(e))return;let t=this.preloadOnDomElements_.get(e);for(let i of t)i.parentNode.removeChild(i);this.preloadOnDomElements_.delete(e)}sendEvent_(e,t){p.info("Interstitial event",e,t),this.onEvent_(new U(e,t)),this.processTrackingEvent_(e)}processTrackingEvent_(e){if(this.config_.disableTrackingEvents)return;let t=this.lastPlayedAd_&&this.lastPlayedAd_.tracking;H.fireTrackingEvents(t,e,this.basePlayer_.getNetworkingEngine())}isWithinPreloadWindow_(e){if(e.pre&&this.lastTime_==null)return!0;if(e.startTime==0&&!e.canJump)return!0;if(this.lastTime_!=null){let t=1/0;!this.playingAd_&&this.baseVideo_.duration&&(t=this.baseVideo_.duration);let i=Math.min(e.startTime,t)-this.lastTime_;if(i>0&&i<=this.resolutionAheadTime_(e))return!0}return!1}static isSafeClickThroughUri_(e){let t=e.replace(/[\u0000-\u0020]+/g,""),i=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(t);if(!i)return!0;let r=i[1].toLowerCase();return r=="http"||r=="https"}};l(is,"PLAYOUT_LIMIT_TOLERANCE_",.5);var Cn=is,wn=class{constructor(e,t,i=null){l(this,"player_");l(this,"preloadManager_");l(this,"initialError_");l(this,"released_");l(this,"sendEvent_");this.player_=e,this.preloadManager_=null,this.initialError_=null,this.released_=!1,this.sendEvent_=i,this.start_(t)}async start_(e){try{this.sendEvent_&&this.sendEvent_(H.AD_INTERSTITIAL_PRELOAD,new Map().set("interstitial",e));let t=await this.player_.preload(e.uri,null,e.mimeType||void 0);if(this.released_){if(t)try{await t.destroy()}catch(i){p.error("Error destroying preloadManager",i)}return}this.preloadManager_=t,t&&this.sendEvent_&&this.sendEvent_(H.AD_INTERSTITIAL_PRELOADED,new Map().set("interstitial",e))}catch(t){this.initialError_=t instanceof h?t:null}}getPreloadManager(){return this.preloadManager_}getInitialError(){return this.initialError_}release(){this.released_=!0,this.preloadManager_&&(this.preloadManager_.destroy(),this.preloadManager_=null)}};/*! @license
|
|
530
|
+
*/var is=class is{constructor(e,t,i){l(this,"config_");l(this,"adContainer_");l(this,"basePlayer_");l(this,"baseVideo_");l(this,"adVideo_");l(this,"usingBaseVideo_");l(this,"video_");l(this,"onEvent_");l(this,"hlsMetadataIds_");l(this,"interstitialIds_");l(this,"interstitials_");l(this,"sortedInterstitials_");l(this,"unresolvedAssetLists_");l(this,"preloadOffsets_");l(this,"preloadTasks_");l(this,"preloadOnDomElements_");l(this,"player_");l(this,"eventManager_");l(this,"adEventManager_");l(this,"isEnded_");l(this,"playingAd_");l(this,"lastTime_");l(this,"lastPlayedAd_");l(this,"playingAdStartTime_");l(this,"playoutLimitTimer_");l(this,"lastOnSkip_");l(this,"usingListeners_");l(this,"videoCallbackId_");l(this,"videoFrameCallbackHandler_");l(this,"sessionId_");l(this,"assetStartOffsets_");l(this,"checkForInterstitials_");l(this,"onTimeUpdate_");l(this,"onSeeked_");l(this,"timeUpdateTimer_");l(this,"pollTimer_");this.config_=null,this.adContainer_=e,this.basePlayer_=t,this.baseVideo_=t.getMediaElement(),this.adVideo_=null,this.usingBaseVideo_=!0,this.video_=this.baseVideo_,this.onEvent_=i,this.hlsMetadataIds_=new Set,this.interstitialIds_=new Set,this.interstitials_=new Set,this.sortedInterstitials_=null,this.unresolvedAssetLists_=new Set,this.preloadOffsets_=new Map,this.preloadTasks_=new Map,this.preloadOnDomElements_=new Map,this.player_=new dt,this.updatePlayerConfig_(),this.eventManager_=new ue,this.adEventManager_=new ue,this.isEnded_=!1,this.playingAd_=!1,this.lastTime_=null,this.lastPlayedAd_=null,this.playingAdStartTime_=null,this.playoutLimitTimer_=null,this.lastOnSkip_=null,this.usingListeners_=!1,this.videoCallbackId_=-1,this.videoFrameCallbackHandler_=null,this.sessionId_=null,this.assetStartOffsets_=new Map;let r=s=>s?s.overlay?!0:this.isEnded_?s.post:!this.baseVideo_.paused:!1;this.checkForInterstitials_=()=>{if(this.playingAd_||!this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended,this.lastTime_=this.baseVideo_.currentTime;let s=this.getCurrentInterstitial_();s&&r(s)&&this.setupAd_(s,1,1,Date.now())},this.onTimeUpdate_=()=>{if(this.playingAd_||this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended,this.baseVideo_.paused||(this.lastTime_=this.baseVideo_.currentTime);let s;this.lastPlayedAd_||(s=this.getCurrentInterstitial_(!0)),s||(s=this.getCurrentInterstitial_()),s&&r(s)&&this.setupAd_(s,1,1,Date.now())},this.onSeeked_=()=>{if(this.playingAd_||!this.lastTime_||this.basePlayer_.isRemotePlayback())return;this.isEnded_=this.baseVideo_.ended;let s=this.baseVideo_.currentTime;this.lastPlayedAd_&&!this.lastPlayedAd_.pre&&!this.lastPlayedAd_.post&&s<this.lastPlayedAd_.startTime&&(this.lastPlayedAd_=null),this.maybeResetAssetListsOnSeek_(s)},this.timeUpdateTimer_=new ae(this.checkForInterstitials_),this.pollTimer_=new ae(()=>{if(!this.playingAd_&&this.lastTime_!=null&&(this.interstitials_.size||this.unresolvedAssetLists_.size)){let s=this.basePlayer_.getLoadMode();if(s==dt.LoadMode.DESTROYED||s==dt.LoadMode.NOT_LOADED)return;let n=!1,a=this.basePlayer_.seekRange();for(let c of Array.from(this.unresolvedAssetLists_)){let d=c.endTime||c.startTime;a.start-d>=1?(this.unresolvedAssetLists_.delete(c),this.removeEventListeners_(),n=!0):!c.resolving&&!c.resolved&&this.shouldResolveAssetListNow_(c)&&(c.resolving=!0,this.resolveAssetListDescriptor_(c))}let o=Array.from(this.interstitials_);for(let c of o){if(c==this.lastPlayedAd_)continue;let d=c.endTime||c.startTime;if(a.start-d>=1)this.removeInterstitial_(c),this.removeEventListeners_(),c.overlay||(n=!0);else if(this.isWithinPreloadWindow_(c)){if(!this.preloadTasks_.has(c)&&this.isPreloadAllowed_(c)){v.assert(this.player_,"Need a player");let u=new wn(this.player_,c,(m,f)=>{this.sendEvent_(m,f)});this.preloadTasks_.set(c,u)}this.checkPreloadOnDomElements_(c)}}n&&this.cuepointsChanged_()}}),this.configure(this.basePlayer_.getConfiguration().ads)}configure(e){this.config_=e,this.playingAd_||this.determineIfUsingBaseVideo_()}addEventListeners_(){var t;if(this.usingListeners_||!this.interstitials_.size&&!this.unresolvedAssetLists_.size)return;this.eventManager_.listenMulti(this.baseVideo_,["playing","timeupdate"],this.onTimeUpdate_),this.eventManager_.listen(this.baseVideo_,"seeked",this.onSeeked_),this.eventManager_.listen(this.baseVideo_,"ended",this.checkForInterstitials_);let e=!0;if(!this.isSmartTV_()){(t=this.videoFrameCallbackHandler_)==null||t.release();let i=this.baseVideo_;this.videoFrameCallbackHandler_=new es(i),e=!this.videoFrameCallbackHandler_.start(()=>{this.checkForInterstitials_()})}e&&this.timeUpdateTimer_.tickEvery(.025),this.pollTimer_&&this.pollTimer_.tickEvery(1),this.usingListeners_=!0}removeEventListeners_(){var e,t,i;!this.usingListeners_||this.interstitials_.size||this.unresolvedAssetLists_.size||(this.eventManager_.unlisten(this.baseVideo_,"playing",this.onTimeUpdate_),this.eventManager_.unlisten(this.baseVideo_,"timeupdate",this.onTimeUpdate_),this.eventManager_.unlisten(this.baseVideo_,"seeked",this.onSeeked_),this.eventManager_.unlisten(this.baseVideo_,"ended",this.checkForInterstitials_),(e=this.videoFrameCallbackHandler_)==null||e.release(),this.videoFrameCallbackHandler_=null,(t=this.timeUpdateTimer_)==null||t.stop(),(i=this.pollTimer_)==null||i.stop(),this.usingListeners_=!1)}determineIfUsingBaseVideo_(e=!1){if(!this.adContainer_||!this.config_){this.usingBaseVideo_=!0;return}let t=this.config_.supportsMultipleMediaElements,i=this.baseVideo_;(i.controls||i.webkitPresentationMode&&i.webkitPresentationMode!=="inline"||i.webkitDisplayingFullscreen)&&(t=!1),!(!e&&this.usingBaseVideo_!=t)&&(this.usingBaseVideo_=!t,this.usingBaseVideo_?(this.video_=this.baseVideo_,this.adVideo_&&(this.adVideo_.parentElement&&this.adContainer_.removeChild(this.adVideo_),this.adVideo_=null)):(e&&this.adVideo_&&(this.adVideo_.parentElement&&this.adContainer_.removeChild(this.adVideo_),this.adVideo_=null),this.adVideo_||(this.adVideo_=this.createMediaElement_()),this.video_=this.adVideo_))}stop(){this.adEventManager_&&this.adEventManager_.removeAll(),this.hlsMetadataIds_.clear(),this.interstitialIds_.clear(),this.interstitials_.clear(),this.sortedInterstitials_=null,this.unresolvedAssetLists_.clear(),this.preloadOffsets_.clear(),this.player_.destroyAllPreloads();let e=Array.from(this.preloadTasks_.values());for(let t of e)t.release();if(this.preloadTasks_.clear(),this.preloadOnDomElements_.size){let t=Array.from(this.preloadOnDomElements_.keys());for(let i of t)this.removePreloadOnDomElements_(i)}this.preloadOnDomElements_.clear(),this.assetStartOffsets_.clear(),this.player_.detach(),this.isEnded_=!1,this.playingAd_=!1,this.lastTime_=null,this.lastPlayedAd_=null,this.playingAdStartTime_=null,this.usingBaseVideo_=!0,this.video_=this.baseVideo_,this.adVideo_=null,this.sessionId_=null,this.removeBaseStyles_(),this.removeEventListeners_(),this.adContainer_&&Ke.removeAllChildren(this.adContainer_),this.playoutLimitTimer_&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null)}release(){this.stop(),this.eventManager_&&this.eventManager_.release(),this.adEventManager_&&this.adEventManager_.release(),this.timeUpdateTimer_&&(this.timeUpdateTimer_.stop(),this.timeUpdateTimer_=null),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null),this.player_.destroy()}getPlayer(){return this.player_}async addMetadata(e){let t=this.getMetadataValue_(e,"ID");if(t){if(this.hlsMetadataIds_.has(t)){this.updateInterstitials_(e,t);return}this.hlsMetadataIds_.add(t)}this.updatePlayerConfig_();let i=[];this.getMetadataValue_(e,"X-OVERLAY-ID")!=null?i=this.getOverlaysInfo_(e):i=await this.getInterstitialsInfo_(e),i.length&&await this.addInterstitials(i)}updateInterstitials_(e,t){let i=this.getMetadataValue_(e,"X-PLAYOUT-LIMIT");if(i==null)return;let r=parseFloat(i);if(!isNaN(r)){for(let s of this.interstitials_)(s.id===t||s.groupId===t)&&this.applyUpdatedPlayoutLimit_(s,r);for(let s of this.unresolvedAssetLists_)s.id===t&&s.playoutLimit==null&&(s.playoutLimit=r)}}applyUpdatedPlayoutLimit_(e,t){var a;if(e.playoutLimit!=null)return;e.playoutLimit=t;let i=this.playingAd_&&this.lastPlayedAd_!=null&&(this.lastPlayedAd_===e||e.groupId!=null&&this.lastPlayedAd_.groupId===e.groupId),r=!e.overlay&&!(e.mimeType&&(e.mimeType.startsWith("image/")||e.mimeType==="text/html"));if(!i||!r||this.playingAdStartTime_==null)return;let s=(Date.now()-this.playingAdStartTime_)/1e3,n=t-s;(a=this.playoutLimitTimer_)==null||a.stop(),this.playoutLimitTimer_=null,n<=0?this.lastOnSkip_&&this.lastOnSkip_():(this.playoutLimitTimer_=new ae(()=>{this.lastOnSkip_&&this.lastOnSkip_()}).tickAfter(n),this.player_.configure("playRangeEnd",t))}addPreloadMetadata(e){let t=this.getMetadataValue_(e,"ID");if(t){if(this.hlsMetadataIds_.has(t))return;this.hlsMetadataIds_.add(t)}let i=this.getMetadataValue_(e,"X-TARGET-ID");if(i){this.preloadOffsets_.set(i,e.startTime);for(let r of this.interstitials_)this.applyPreloadOffset_(r);for(let r of this.unresolvedAssetLists_)this.applyPreloadOffset_(r)}}applyPreloadOffset_(e){let t=null;e.id!=null&&this.preloadOffsets_.has(e.id)?t=this.preloadOffsets_.get(e.id):e.groupId!=null&&this.preloadOffsets_.has(e.groupId)&&(t=this.preloadOffsets_.get(e.groupId)),t!=null&&(e.resolutionTimeOffset=Math.max(0,e.startTime-t))}async addAdUrlInterstitial(e){let t={type:K.AdvancedRequestType.INTERSTITIAL_AD_URL},i=await this.makeAdRequest_(e,t).promise,r=I.parseXml(i.data,"VAST,vmap:VMAP");if(!r)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.VAST_INVALID_XML);let s=[];if(r.tagName=="VAST")s=ts.parseVastToInterstitials(r,this.lastTime_);else if(r.tagName=="vmap:VMAP"){let n=async o=>{let c=await this.makeAdRequest_(o.uri,t).promise,d=I.parseXml(c.data,"VAST");if(!d)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.VAST_INVALID_XML);s.push(...ts.parseVastToInterstitials(d,o.time))},a=[];for(let o of ts.parseVMAP(r))a.push(n(o));a.length&&await Promise.all(a)}this.addInterstitials(s)}async addInterstitials(e){let t=!1;for(let i of e){if(!i.uri){p.alwaysWarn("Missing URL in interstitial",i);continue}if(!i.mimeType)try{let s=this.player_.getNetworkingEngine();v.assert(s,"Need networking engine"),i.mimeType=await ct.getMimeType(i.uri,s,this.basePlayer_.getConfiguration().streaming.retryParameters)}catch(s){}let r=this.interstitialId_(i);if(!this.interstitialIds_.has(r)&&(i.loop&&!i.overlay&&p.alwaysWarn("Loop is only supported in overlay interstitials",i),i.overlay||(t=!0),this.interstitialIds_.add(r),this.interstitials_.add(i),this.sortedInterstitials_=null,this.applyPreloadOffset_(i),this.isWithinPreloadWindow_(i))){if(!this.preloadTasks_.has(i)&&this.isPreloadAllowed_(i)){v.assert(this.player_,"Need a player");let s=new wn(this.player_,i,(n,a)=>{this.sendEvent_(n,a)});this.preloadTasks_.set(i,s)}this.checkPreloadOnDomElements_(i)}}t&&this.cuepointsChanged_(),this.addEventListeners_()}createMediaElement_(){let e=document.createElement(this.baseVideo_.tagName);return e.autoplay=!0,e.style.position="absolute",e.style.top="0",e.style.left="0",e.style.width="100%",e.style.height="100%",e.style.display="none",e.setAttribute("playsinline",""),e}getSortedInterstitials_(){return this.sortedInterstitials_||(this.sortedInterstitials_=Array.from(this.interstitials_).sort((e,t)=>t.startTime-e.startTime)),this.sortedInterstitials_}getCurrentInterstitial_(e=!1,t=null){let i=0,r=null;if(this.interstitials_.size&&this.lastTime_!=null){let s=this.getSortedInterstitials_(),n=o=>Math.round(o*1e3)/1e3,a=s;e?a=s.filter(o=>o.pre):this.isEnded_?a=s.filter(o=>o.post):a=s.filter(o=>!o.pre&&!o.post);for(let o of a){let c=!1;if(e)c=o.pre;else if(this.isEnded_)c=o.post;else if(!o.pre&&!o.post){let d=this.lastTime_-n(o.startTime),u=1;this.config_.allowStartInMiddleOfInterstitial&&o.endTime&&o.endTime!=1/0&&(u=o.endTime-o.startTime),(d>0||d==0&&this.lastTime_==0)&&(d<=u||!o.canJump)&&(t==null&&this.lastPlayedAd_&&!this.lastPlayedAd_.pre&&!this.lastPlayedAd_.post&&this.lastPlayedAd_.startTime>=o.startTime?c=!1:c=!0)}if(c&&(!this.lastPlayedAd_||o.startTime>=this.lastPlayedAd_.startTime)){if(i==(t||0))r=o;else if(r&&!o.canJump){let d=n(r.startTime);n(o.startTime)-d>.001&&(r=o,i=0)}i++}}}return r}setupAd_(e,t,i,r,s=0){if(p.info("Starting interstitial",e.startTime,"at",this.lastTime_),this.lastPlayedAd_=e,this.determineIfUsingBaseVideo_(),v.assert(this.video_,"Must have video"),!this.usingBaseVideo_&&this.adContainer_&&!this.video_.parentElement&&this.adContainer_.appendChild(this.video_),i==1&&t==1&&(t=Array.from(this.interstitials_).filter(n=>e.pre?n.pre==e.pre:e.post?n.post==e.post:Math.abs(n.startTime-e.startTime)<.001).length),e.once&&(s++,this.interstitials_.delete(e),this.sortedInterstitials_=null,this.removeEventListeners_(),e.overlay||this.cuepointsChanged_()),e.mimeType&&(e.mimeType.startsWith("image/")||e.mimeType==="text/html")){if(!e.overlay){p.alwaysWarn("Unsupported interstitial",e);return}p.info("Starting interstitial",e),this.setupStaticAd_(e,t,i,s);return}if(this.usingBaseVideo_&&e.overlay){p.alwaysWarn("Unsupported interstitial",e);return}p.info("Starting interstitial",e),this.setupVideoAd_(e,t,i,r,s)}setupStaticAd_(e,t,i,r){let s=this.getTimeOffset_(e);if(!this.playingAd_){this.playingAdStartTime_=Date.now();let m=new Map().set("timeOffset",s).set("startedAt",this.lastTime_);this.sendEvent_(H.AD_BREAK_STARTED,m)}this.playingAd_=!0;let n=e.overlay;v.assert(n,"Must have overlay");let a=e.mimeType=="text/html"?"iframe":"img",o=document.createElement(a);o.style.objectFit="contain",o.style.position="absolute",o.style.border="none",this.setBaseStyles_(e);let c=()=>{this.playoutLimitTimer_&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null),this.adContainer_.removeChild(o),this.removeBaseStyles_(e),this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll();let m=this.getCurrentInterstitial_(e.pre,i-r);m?this.setupAd_(m,t,++i,Date.now(),r):this.playingAd_=!1,this.playingAd_||this.sendEvent_(H.AD_BREAK_ENDED,new Map().set("timeOffset",s))},d=new In(e,t,i);this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",d)),a=="iframe"?o.src=e.uri:(o.src=e.uri,o.onerror=m=>{this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",m)),c()}),n.viewport.x==0&&n.viewport.y==0?(o.width=n.size.x,o.height=n.size.y,o.style.bottom="10%",o.style.left="0",o.style.right="0",o.style.width="100%",!n.size.y&&a=="iframe"&&(o.style.height="auto")):this.applyOverlayPosition_(o,n),this.adContainer_.appendChild(o);let u=Date.now();this.playoutLimitTimer_&&this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=new ae(()=>{e.playoutLimit&&(Date.now()-u)/1e3>e.playoutLimit?(this.sendEvent_(H.AD_COMPLETE),c()):e.endTime&&this.baseVideo_.currentTime>e.endTime?(this.sendEvent_(H.AD_COMPLETE),c()):this.baseVideo_.currentTime<e.startTime&&(this.sendEvent_(H.AD_SKIPPED),c())}),e.playoutLimit&&!e.endTime?this.playoutLimitTimer_.tickAfter(e.playoutLimit):e.endTime&&this.playoutLimitTimer_.tickEvery(.025),this.adEventManager_.listen(this.baseVideo_,"seeked",()=>{let m=this.baseVideo_.currentTime;(m<e.startTime||e.endTime&&m>e.endTime)&&(this.playoutLimitTimer_&&this.playoutLimitTimer_.stop(),this.sendEvent_(H.AD_SKIPPED),c())}),e.clickThroughUrl&&this.adEventManager_.listen(o,"click",m=>{if(e.clickThroughUrl){if(this.sendEvent_(H.AD_CLICKED),!is.isSafeClickThroughUri_(e.clickThroughUrl)){p.warning("Ignoring click-through with unsupported URI scheme:",e.clickThroughUrl);return}window.open(e.clickThroughUrl,"_blank")}})}async setupVideoAd_(e,t,i,r,s){var b;v.assert(this.video_,"Must have video");let n=Date.now(),a=this.getTimeOffset_(e);if(!this.playingAd_){this.playingAdStartTime_=Date.now();let S=new Map().set("timeOffset",a).set("startedAt",this.lastTime_);this.sendEvent_(H.AD_BREAK_STARTED,S)}this.playingAd_=!0;let o=!1,c=()=>{if(!this.usingBaseVideo_&&!e.overlay&&e.resumeOffset==null)if(e.timelineRange&&e.endTime&&e.endTime!=1/0)this.baseVideo_.currentTime!=e.endTime&&(this.baseVideo_.currentTime=e.endTime);else{let S=Date.now();this.baseVideo_.currentTime+=(S-r)/1e3,r=S}},d=async(S,E)=>{var A;E||c();let w=this.getCurrentInterstitial_(e.pre,i-s);if(S&&e.groupId)for(;w&&w.groupId==e.groupId;)i++,w=this.getCurrentInterstitial_(e.pre,i-s);if(this.playoutLimitTimer_&&(!e.groupId||w&&w.groupId!=e.groupId)&&(this.playoutLimitTimer_.stop(),this.playoutLimitTimer_=null),this.removeBaseStyles_(e),!w||w.overlay){if(e.post&&(this.lastTime_=null,this.lastPlayedAd_=null),this.usingBaseVideo_?await this.player_.detach():await this.player_.unload(),this.usingBaseVideo_){let x=e.resumeOffset;x==null&&(e.timelineRange&&e.endTime&&e.endTime!=1/0?x=e.endTime-(this.lastTime_||0):x=(Date.now()-r)/1e3),this.sendEvent_(H.AD_CONTENT_RESUME_REQUESTED,new Map().set("offset",x))}else this.basePlayer_.isLive()&&e.resumeOffset!=null&&e.resumeOffset!=0&&(this.baseVideo_.currentTime+=e.resumeOffset);this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll(),this.playingAd_=!1,this.usingBaseVideo_?this.cuepointsChanged_():(this.video_.style.display="none",E||c(),this.isEnded_||this.baseVideo_.play())}w&&this.usingBaseVideo_&&this.isSmartTV_()?(await this.player_.detach(),this.determineIfUsingBaseVideo_(!0)):this.determineIfUsingBaseVideo_(),w&&(this.sendEvent_(H.AD_STOPPED),this.adEventManager_.removeAll(),this.setupAd_(w,t,++i,r,s)),this.playingAd_||(this.sendEvent_(H.AD_BREAK_ENDED,new Map().set("timeOffset",a)),(A=this.playoutLimitTimer_)==null||A.stop(),this.playoutLimitTimer_=null)},u=async(S,E)=>{if(o)return;o=!0;let w=E&&S.code===h.Code.BAD_HTTP_STATUS;this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",S)),await d(!1,w)},m=async()=>{o||(o=!0,await d(!1,!1),this.sendEvent_(H.AD_COMPLETE))};this.lastOnSkip_=async()=>{o||(o=!0,this.sendEvent_(H.AD_SKIPPED),await d(!0,!1))};let f=new An(this.video_,e,this.lastOnSkip_,t,i,!this.usingBaseVideo_);this.usingBaseVideo_||(f.setMuted(this.baseVideo_.muted),f.setVolume(this.baseVideo_.volume)),this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",f));let g=f.canSkipNow();g&&this.sendEvent_(H.AD_SKIP_STATE_CHANGED);let _=()=>{let S=f.canSkipNow();g!=S&&(g=S,this.sendEvent_(H.AD_SKIP_STATE_CHANGED))};if(this.preloadTasks_.has(e)){let E=this.preloadTasks_.get(e).getInitialError();if(E){this.preloadTasks_.delete(e),u(E,!0);return}}this.adEventManager_.listenOnce(this.player_,"error",S=>{u(S.detail,!1)}),this.adEventManager_.listenOnce(this.video_,"loadedmetadata",()=>{f.markMediaReady(),_()}),this.adEventManager_.listen(this.video_,"timeupdate",()=>{this.video_.duration&&(f.getRemainingTime()>0&&f.getDuration()>0&&_(),!this.usingBaseVideo_&&!e.overlay&&e.resumeOffset==null&&e.timelineRange&&e.endTime&&e.endTime!=1/0&&this.baseVideo_.currentTime!=e.endTime&&this.basePlayer_.seekRange().end>=e.endTime&&(this.baseVideo_.currentTime=e.endTime))}),this.adEventManager_.listenOnce(this.player_,"firstquartile",()=>{c(),this.sendEvent_(H.AD_FIRST_QUARTILE)}),this.adEventManager_.listenOnce(this.player_,"midpoint",()=>{c(),this.sendEvent_(H.AD_MIDPOINT)}),this.adEventManager_.listenOnce(this.player_,"thirdquartile",()=>{c(),this.sendEvent_(H.AD_THIRD_QUARTILE)}),this.adEventManager_.listenOnce(this.player_,"complete",m);let T=!1;if(this.adEventManager_.listen(this.video_,"play",()=>{T?this.sendEvent_(H.AD_RESUMED):(T=!0,this.sendEvent_(H.AD_PLAYING,new Map().set("ad",f)))}),this.adEventManager_.listen(this.video_,"pause",()=>{let S=this.player_.getConfiguration();if(this.video_.currentTime>=S.playRangeEnd){m();return}this.sendEvent_(H.AD_PAUSED)}),this.adEventManager_.listen(this.video_,"volumechange",()=>{this.video_.muted?this.sendEvent_(H.AD_MUTED):this.sendEvent_(H.AD_VOLUME_CHANGED),this.usingBaseVideo_||(this.baseVideo_.volume=this.video_.volume,this.baseVideo_.muted=this.video_.muted)}),e.clickThroughUrl){let S=this.adContainer_||this.video_;this.adEventManager_.listen(S,"click",E=>{if(e.clickThroughUrl){if(f.isPaused()||f.pause(),!is.isSafeClickThroughUri_(e.clickThroughUrl)){p.warning("Ignoring click-through with unsupported URI scheme:",e.clickThroughUrl);return}window.open(e.clickThroughUrl,"_blank")}})}if(this.usingBaseVideo_&&i==1){this.sendEvent_(H.AD_CONTENT_PAUSE_REQUESTED,new Map().set("saveLivePosition",!0));let S=Promise.withResolvers(),E=async w=>{w.state=="detach"&&(this.isSmartTV_()&&await it.delay(.1),S.resolve(),this.adEventManager_.unlisten(this.basePlayer_,"onstatechange",E))};this.adEventManager_.listen(this.basePlayer_,"onstatechange",E),await S.promise}this.setBaseStyles_(e),this.usingBaseVideo_||(this.video_.style.display="",e.overlay?(this.video_.loop=e.loop,this.applyOverlayPosition_(this.video_,e.overlay)):(this.baseVideo_.pause(),this.basePlayer_.isLive()||e.resumeOffset!=null&&e.resumeOffset!=0&&(this.baseVideo_.currentTime+=e.resumeOffset),this.video_.loop=!1,this.video_.style.height="100%",this.video_.style.left="0",this.video_.style.top="0",this.video_.style.width="100%"));try{if(this.updatePlayerConfig_(),e.startTime&&e.endTime&&e.endTime!=1/0&&e.startTime!=e.endTime){let A=e.endTime-e.startTime;A>0&&this.player_.configure("playRangeEnd",A)}let S=null;if(i==1&&!e.pre&&!e.post&&this.config_.allowStartInMiddleOfInterstitial&&this.lastTime_!=null&&e.startTime<=this.lastTime_&&(!e.endTime||e.endTime>this.lastTime_))if(e.id&&this.assetStartOffsets_.has(e.id)){let A=this.assetStartOffsets_.get(e.id);this.assetStartOffsets_.delete(e.id),Math.abs(A)>.25&&(S=A)}else{let A=this.lastTime_-e.startTime;Math.abs(A)>.25&&(S=A)}i==1&&((b=this.playoutLimitTimer_)==null||b.stop(),this.playoutLimitTimer_=null);let E=e.playoutLimit;if(E&&!this.playoutLimitTimer_){S&&(E-=S);let A=E,x=is.PLAYOUT_LIMIT_TOLERANCE_;this.playoutLimitTimer_=new ae(()=>{this.video_.ended||this.video_.currentTime>=A?m():this.lastOnSkip_()}).tickAfter(E+x),this.player_.configure("playRangeEnd",E)}if(this.player_.getMediaElement()!==this.video_&&await this.player_.attach(this.video_),this.preloadTasks_.has(e)){let A=this.preloadTasks_.get(e);this.preloadTasks_.delete(e);let x=A.getInitialError();if(x)throw x;let M=A.getPreloadManager();M?await this.player_.load(M,S):await this.player_.load(e.uri,S,e.mimeType||void 0)}else await this.player_.load(e.uri,S,e.mimeType||void 0);f.markMediaReady(),_(),!e.overlay||!this.baseVideo_.paused?this.video_.play():this.video_.pause();let w=(Date.now()-n)/1e3;if(this.sendEvent_(H.ADS_LOADED,new Map().set("loadTime",w)),this.usingBaseVideo_&&this.baseVideo_.play(),e.overlay){if(!e.pre&&!e.post&&(!this.basePlayer_.isLive()||e.startTime>0)){let A=()=>{let x=this.baseVideo_.currentTime-e.startTime;Math.abs(x-this.video_.currentTime)>.1&&(this.video_.currentTime=x)};this.adEventManager_.listenOnce(this.video_,"playing",A),this.adEventManager_.listen(this.baseVideo_,"seeking",A)}this.adEventManager_.listen(this.baseVideo_,"seeked",()=>{let A=this.baseVideo_.currentTime;(A<e.startTime||e.endTime&&A>e.endTime)&&this.lastOnSkip_()})}}catch(S){if(!this.playingAd_)return;u(S,!0)}}applyOverlayPosition_(e,t){let i=t.viewport,r=t.topLeft,s=t.size;e.style.height=s.y/i.y*100+"%",e.style.left=r.x/i.x*100+"%",e.style.top=r.y/i.y*100+"%",e.style.width=s.x/i.x*100+"%"}setBaseStyles_(e){if(e.displayOnBackground&&(this.baseVideo_.style.zIndex="1"),e.currentVideo!=null){let t=e.currentVideo;this.baseVideo_.style.transformOrigin="top left";let i=!0,r=[],s=t.topLeft.x/t.viewport.x*100;s>0&&s<=100&&(r.push(`translateX(${s}%)`),i=!1);let n=t.topLeft.y/t.viewport.y*100;n>0&&n<=100&&(r.push(`translateY(${n}%)`),i=!1);let a=t.size.x/t.viewport.x;a<1&&r.push(`scaleX(${a})`);let o=t.size.y/t.viewport.y;a<1&&r.push(`scaleY(${o})`),r.length&&(this.baseVideo_.style.transform=r.join(" ")),i&&(this.baseVideo_.style.transition="transform 250ms")}this.adContainer_&&(e.clickThroughUrl?(this.adContainer_.setAttribute("ad-active","true"),this.adContainer_.style.pointerEvents=""):this.adContainer_.style.pointerEvents="none",e.background&&(this.adContainer_.style.background=e.background)),this.adVideo_&&(e.overlay?this.adVideo_.style.background="":this.adVideo_.style.background="rgb(0, 0, 0)")}removeBaseStyles_(e){(!e||e.displayOnBackground)&&(this.baseVideo_.style.zIndex=""),(!e||e.currentVideo!=null)&&(this.baseVideo_.style.transformOrigin="",this.baseVideo_.style.transition="",this.baseVideo_.style.transform=""),this.adContainer_&&(this.adContainer_.removeAttribute("ad-active"),this.adContainer_.style.pointerEvents="",(!e||e.background)&&(this.adContainer_.style.background="")),this.adVideo_&&(this.adVideo_.style.background="")}async getInterstitialsInfo_(e){let t=[];if(!e)return t;let i=this.getMetadataValue_(e,"X-ASSET-URI"),r=this.getMetadataValue_(e,"X-ASSET-LIST");if(!i&&!r)return t;let s=this.getMetadataValue_(e,"ID"),{startTime:n,endTime:a}=this.getInterstitialTimes_(e,s),o=this.getMetadataValue_(e,"X-RESTRICT"),c=!0,d=!0;o!=null&&(c=!o.includes("SKIP"),d=!o.includes("JUMP"));let u=c?0:null,m=this.getMetadataValue_(e,"X-SKIP-CONTROL-OFFSET");m!=null&&(u=parseFloat(m),isNaN(u)&&(u=c?0:null));let f=null,g=this.getMetadataValue_(e,"X-SKIP-CONTROL-DURATION");g!=null&&(f=parseFloat(g),isNaN(u)&&(f=null));let _=null,T=this.getMetadataValue_(e,"X-RESUME-OFFSET");T!=null&&(_=parseFloat(T),isNaN(_)&&(_=null)),_!=null&&_!=0&&a&&a!=1/0&&qt.isFloatEqual(n+_,a)&&(_=null);let b=null,S=this.getMetadataValue_(e,"X-PLAYOUT-LIMIT");S!=null&&(b=parseFloat(S),isNaN(b)&&(b=null));let{once:E,pre:w,post:A}=this.parseCue_(e),x=!1,M=this.getMetadataValue_(e,"X-TIMELINE-OCCUPIES");if(M!=null?x=M.includes("RANGE"):T==null&&this.basePlayer_.isLive()&&(x=!w&&!A),i!=null){if(!i)return t;t.push({id:s,groupId:null,startTime:n,endTime:a,uri:this.getUriWithHlsParams_(i),mimeType:null,isSkippable:c,skipOffset:u,skipFor:f,canJump:d,resumeOffset:_,playoutLimit:b,once:E,pre:w,post:A,timelineRange:x,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null,clickThroughUrl:null,tracking:null})}else if(r!=null){if(!r)return t;let C={id:s,groupId:null,startTime:n,endTime:a,assetListUri:r,isSkippable:c,skipOffset:u,skipFor:f,canJump:d,resumeOffset:_,playoutLimit:b,once:E,pre:w,post:A,timelineRange:x,resolving:!1,resolved:!1};if(this.applyPreloadOffset_(C),this.shouldResolveAssetListNow_(C)){let k=await this.resolveAssetList_(C);return k.length&&this.maybeRetainResolvedAssetList_(C),k}this.addUnresolvedAssetList_(C)}return t}async resolveAssetList_(e){var s;let t=[],i=e.skipOffset,r=e.skipFor;try{let n={type:K.AdvancedRequestType.INTERSTITIAL_ASSET_LIST},a=0;!e.pre&&!e.post&&this.config_.allowStartInMiddleOfInterstitial&&this.basePlayer_.isLive()&&(a=((s=this.lastTime_)!=null?s:this.baseVideo_.currentTime)-e.startTime);let o=this.getUriWithHlsParams_(e.assetListUri,a),c=await this.makeAdRequest_(o,n).promise,d=q.fromUTF8(c.data),u=JSON.parse(d),m=u["SKIP-CONTROL"];if(m){let g=m.OFFSET;typeof g=="number"&&(i=parseFloat(g),isNaN(g)&&(i=e.isSkippable?0:null));let _=m.DURATION;typeof _=="number"&&(r=parseFloat(_),isNaN(r)&&(r=null))}let f=0;for(let g=0;g<u.ASSETS.length;g++){let _=u.ASSETS[g],T=_.URI,b=parseFloat(_.DURATION)||0;if(a>0&&b>0){let S=f+b;if(S<=a){f=S;continue}}if(T){let S=fe.resolve(c.uri,T),E={id:e.id+"_shaka_asset_"+g,groupId:e.id,startTime:e.startTime,endTime:e.endTime,uri:this.getUriWithHlsParams_(S),mimeType:null,isSkippable:e.isSkippable,skipOffset:i,skipFor:r,canJump:e.canJump,resumeOffset:e.resumeOffset,playoutLimit:e.playoutLimit,once:e.once,pre:e.pre,post:e.post,timelineRange:e.timelineRange,loop:!1,overlay:null,displayOnBackground:!1,currentVideo:null,background:null,clickThroughUrl:null,tracking:null},w=_["X-AD-CREATIVE-SIGNALING"];if(w){let A=w.payload&&w.payload[0];A&&(E.clickThroughUrl=A.clickThrough,A.tracking&&(E.tracking=H.createTrackingFromEvents(A.tracking)))}if(a>0&&f<a){let A=a-f;this.assetStartOffsets_.set(E.id,A)}t.push(E)}f+=b}}catch(n){p.warning("Failed to resolve interstitial asset list",e.assetListUri,n)}return t}addUnresolvedAssetList_(e){this.unresolvedAssetLists_.add(e),this.cuepointsChanged_(),this.addEventListeners_()}async resolveAssetListDescriptor_(e){let t=await this.resolveAssetList_(e);e.resolving=!1,t.length?(this.maybeRetainResolvedAssetList_(e),await this.addInterstitials(t)):(this.unresolvedAssetLists_.delete(e),this.cuepointsChanged_(),this.removeEventListeners_())}maybeRetainResolvedAssetList_(e){this.shouldRetainAssetList_()?(e.resolved=!0,this.unresolvedAssetLists_.add(e)):this.unresolvedAssetLists_.delete(e)}shouldRetainAssetList_(){return!!this.config_&&this.config_.allowStartInMiddleOfInterstitial&&this.basePlayer_.isLive()}maybeResetAssetListsOnSeek_(e){if(this.shouldRetainAssetList_())for(let t of this.unresolvedAssetLists_){if(!t.resolved)continue;let i=t.endTime;e>=t.startTime&&(i==null||i==1/0||e<i)&&(t.resolved=!1,this.removeResolvedAssetListGroup_(t.id))}}removeResolvedAssetListGroup_(e){if(e!=null)for(let t of Array.from(this.interstitials_))t.groupId===e&&this.removeInterstitial_(t)}removeInterstitial_(e){this.preloadTasks_.has(e)&&(this.preloadTasks_.get(e).release(),this.preloadTasks_.delete(e)),this.removePreloadOnDomElements_(e);let t=this.interstitialId_(e);this.interstitialIds_.delete(t),this.interstitials_.delete(e),this.sortedInterstitials_=null,this.lastPlayedAd_===e&&(this.lastPlayedAd_=null)}resolutionAheadTime_(e){return e.resolutionTimeOffset||this.config_.interstitialPreloadAheadTime}shouldResolveAssetListNow_(e){if(e.pre||e.post||e.startTime==0&&!e.canJump)return!0;let t=this.lastTime_!=null?this.lastTime_:this.baseVideo_.currentTime,i=1/0;if(!this.playingAd_&&this.baseVideo_.duration&&(i=this.baseVideo_.duration),Math.min(e.startTime,i)-t>this.resolutionAheadTime_(e))return!1;let s=e.endTime;return!(s!=null&&s!=1/0&&t>=s)}getOverlaysInfo_(e){let t=[];if(!e)return t;let i=this.getMetadataValue_(e,"X-ASSET-URI");if(!i)return t;let r=this.getMetadataValue_(e,"X-OVERLAY-ID"),{startTime:s,endTime:n}=this.getInterstitialTimes_(e,r),{once:a,pre:o,post:c}=this.parseCue_(e),d=this.getMetadataValue_(e,"X-ASSET-MIMETYPE"),u=this.getMetadataValue_(e,"X-LOOP")=="YES",m=1,f=this.getMetadataValue_(e,"X-DEPTH");f!=null&&(m=parseFloat(f),isNaN(m)&&(m=1));let g=this.getMetadataValue_(e,"X-BACKGROUND"),_={x:1920,y:1080},T=this.getMetadataValue_(e,"X-VIEWPORT");if(T!=null){let x=T.split("x");if(x.length!=2)return t;_.x=parseFloat(x[0]),_.y=parseFloat(x[1])}let b={viewport:{x:_.x,y:_.y},topLeft:{x:0,y:0},size:{x:_.x,y:_.y}},S=this.getMetadataValue_(e,"X-OVERLAY-POSITION");if(S!=null){let x=S.split("x");if(x.length!=2)return t;b.topLeft.x=parseFloat(x[0]),b.topLeft.y=parseFloat(x[1])}let E=this.getMetadataValue_(e,"X-OVERLAY-SIZE");if(E!=null){let x=E.split("x");if(x.length!=2)return t;b.size.x=parseFloat(x[0]),b.size.y=parseFloat(x[1])}let w=null,A=this.getMetadataValue_(e,"X-SQUEEZECURRENT");if(A!=null){let x=parseFloat(A);isNaN(x)&&(x=1),w={viewport:{x:1920,y:1080},topLeft:{x:0,y:0},size:{x:1920*x,y:1080*x}};let M=this.getMetadataValue_(e,"X-SQUEEZECURRENT-POSITION");if(M!=null){let C=M.split("x");if(C.length!=2)return t;w.topLeft.x=parseFloat(C[0]),w.topLeft.y=parseFloat(C[1])}}return t.push({id:r,groupId:null,startTime:s,endTime:n,uri:this.getUriWithHlsParams_(i),mimeType:d,isSkippable:!1,skipOffset:null,skipFor:null,canJump:!0,resumeOffset:null,playoutLimit:null,once:a,pre:o,post:c,timelineRange:!0,loop:u,overlay:b,displayOnBackground:m==-1,currentVideo:w,background:g,clickThroughUrl:null,tracking:null}),t}getUriWithHlsParams_(e,t=0){if(e.startsWith("data:"))return e;this.sessionId_||(this.sessionId_=window.crypto.randomUUID());let i=new Map;if(i.set("_HLS_primary_id",this.sessionId_),t>0){let r=Math.round(t*1e3)/1e3;i.set("_HLS_start_offset",String(r))}return fe.appendParams(e,i)}cuepointsChanged_(){let e=[],t=(i,r)=>{!e.find(n=>i==n.start&&r==n.end)&&e.push({start:i,end:r})};for(let i of this.interstitials_)i.overlay||(i.pre?t(0,null):i.post?t(-1,null):i.timelineRange?t(i.startTime,i.endTime):t(i.startTime,null));for(let i of this.unresolvedAssetLists_)i.pre?t(0,null):i.post?t(-1,null):i.timelineRange?t(i.startTime,i.endTime):t(i.startTime,null);this.sendEvent_(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",e))}updatePlayerConfig_(){v.assert(this.player_,"Must have player"),v.assert(this.basePlayer_,"Must have base player"),this.player_.configure(this.basePlayer_.getNonDefaultConfiguration()),this.player_.configure("ads.disableHLSInterstitial",!0),this.player_.configure("ads.disableDASHInterstitial",!0),this.player_.configure("playRangeEnd",1/0);let e=this.player_.getNetworkingEngine();v.assert(e,"Need networking engine"),this.basePlayer_.getNetworkingEngine().copyFiltersInto(e)}makeAdRequest_(e,t){let i=K.RequestType.ADS,r=K.makeRequest([e],K.defaultRetryParameters());return this.basePlayer_.getNetworkingEngine().request(i,r,t)}getMetadataValue_(e,t){let i=e.values.find(r=>r.key==t);return i?i.data:null}getInterstitialTimes_(e,t){let i=t==null?Math.floor(e.startTime*10)/10:e.startTime,r=e.endTime;return e.endTime&&e.endTime!=1/0&&typeof e.endTime=="number"&&(r=t==null?Math.floor(e.endTime*10)/10:e.endTime),{startTime:i,endTime:r}}parseCue_(e){let t=this.getMetadataValue_(e,"CUE")||this.getMetadataValue_(e,"X-CUE");return{once:t!=null&&t.includes("ONCE"),pre:t!=null&&t.includes("PRE"),post:t!=null&&t.includes("POST")}}interstitialId_(e){return e.id||JSON.stringify(e)}getTimeOffset_(e){return e.pre?0:e.post?-1:e.startTime}isPreloadAllowed_(e){let t=e.mimeType;return t?!t.startsWith("image/")&&t!=="text/html":!0}getInterstitials(){return Array.from(this.interstitials_)}isSmartTV_(){let t=j.getDevice().getDeviceType();return t==ie.DeviceType.TV||t==ie.DeviceType.CONSOLE||t==ie.DeviceType.CAST}checkPreloadOnDomElements_(e){if(this.preloadOnDomElements_.has(e)||this.config_&&!this.config_.allowPreloadOnDomElements)return;let t=r=>{let s=document.createElement("link");return s.rel="preload",s.href=r,s.as="image",document.head.appendChild(s),s},i=[];if(e.background){let r=/url\(('|")?([^'"()]+)('|")\)?/,s=e.background.match(r);s&&i.push(t(s[2]))}e.mimeType&&e.mimeType.startsWith("image/")&&i.push(t(e.uri)),this.preloadOnDomElements_.set(e,i)}removePreloadOnDomElements_(e){if(!this.preloadOnDomElements_.has(e))return;let t=this.preloadOnDomElements_.get(e);for(let i of t)i.parentNode.removeChild(i);this.preloadOnDomElements_.delete(e)}sendEvent_(e,t){p.info("Interstitial event",e,t),this.onEvent_(new L(e,t)),this.processTrackingEvent_(e)}processTrackingEvent_(e){if(this.config_.disableTrackingEvents)return;let t=this.lastPlayedAd_&&this.lastPlayedAd_.tracking;H.fireTrackingEvents(t,e,this.basePlayer_.getNetworkingEngine())}isWithinPreloadWindow_(e){if(e.pre&&this.lastTime_==null)return!0;if(e.startTime==0&&!e.canJump)return!0;if(this.lastTime_!=null){let t=1/0;!this.playingAd_&&this.baseVideo_.duration&&(t=this.baseVideo_.duration);let i=Math.min(e.startTime,t)-this.lastTime_;if(i>0&&i<=this.resolutionAheadTime_(e))return!0}return!1}static isSafeClickThroughUri_(e){let t=e.replace(/[\u0000-\u0020]+/g,""),i=/^([a-zA-Z][a-zA-Z0-9+.-]*):/.exec(t);if(!i)return!0;let r=i[1].toLowerCase();return r=="http"||r=="https"}};l(is,"PLAYOUT_LIMIT_TOLERANCE_",.5);var Cn=is,wn=class{constructor(e,t,i=null){l(this,"player_");l(this,"preloadManager_");l(this,"initialError_");l(this,"released_");l(this,"sendEvent_");this.player_=e,this.preloadManager_=null,this.initialError_=null,this.released_=!1,this.sendEvent_=i,this.start_(t)}async start_(e){try{this.sendEvent_&&this.sendEvent_(H.AD_INTERSTITIAL_PRELOAD,new Map().set("interstitial",e));let t=await this.player_.preload(e.uri,null,e.mimeType||void 0);if(this.released_){if(t)try{await t.destroy()}catch(i){p.error("Error destroying preloadManager",i)}return}this.preloadManager_=t,t&&this.sendEvent_&&this.sendEvent_(H.AD_INTERSTITIAL_PRELOADED,new Map().set("interstitial",e))}catch(t){this.initialError_=t instanceof h?t:null}}getPreloadManager(){return this.preloadManager_}getInitialError(){return this.initialError_}release(){this.released_=!0,this.preloadManager_&&(this.preloadManager_.destroy(),this.preloadManager_=null)}};/*! @license
|
|
531
531
|
* Shaka Player
|
|
532
532
|
* Copyright 2016 Google LLC
|
|
533
533
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -535,7 +535,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
535
535
|
* Shaka Player
|
|
536
536
|
* Copyright 2016 Google LLC
|
|
537
537
|
* SPDX-License-Identifier: Apache-2.0
|
|
538
|
-
*/var be=class be{constructor(e,t,i,r){l(this,"adContainer_");l(this,"networkingEngine_");l(this,"config_");l(this,"video_");l(this,"streamPromise_");l(this,"streamRequestStartTime_");l(this,"onEvent_");l(this,"isLive_");l(this,"snapForwardTime_");l(this,"adBreaks_");l(this,"playedAds_");l(this,"ad_");l(this,"mediaTailorAd_");l(this,"mediaTailorAdBreak_");l(this,"staticResources_");l(this,"adListeners_");l(this,"eventsSent_");l(this,"trackingUrl_");l(this,"firstTrackingRequest_");l(this,"backupUrl_");l(this,"currentCuePoints_");l(this,"eventManager_");l(this,"adBreakListenersAttached_");this.adContainer_=e,this.networkingEngine_=t,this.config_=null,this.video_=i,this.streamPromise_=null,this.streamRequestStartTime_=NaN,this.onEvent_=r,this.isLive_=!1,this.snapForwardTime_=null,this.adBreaks_=[],this.playedAds_=new Set,this.ad_=null,this.mediaTailorAd_=null,this.mediaTailorAdBreak_=null,this.staticResources_=new Map,this.adListeners_=[],this.eventsSent_=new Set,this.trackingUrl_="",this.firstTrackingRequest_=!0,this.backupUrl_="",this.currentCuePoints_=[],this.eventManager_=new ue,this.adBreakListenersAttached_=!1}configure(e){this.config_=e}streamRequest(e,t,i){return this.streamPromise_?Promise.reject(new h(h.Severity.RECOVERABLE,h.Category.ADS,h.Code.CURRENT_DAI_REQUEST_NOT_FINISHED)):(this.streamPromise_=Promise.withResolvers(),this.requestSessionInfo_(e,t),this.backupUrl_=i||"",this.streamRequestStartTime_=Date.now()/1e3,this.streamPromise_.promise)}addTrackingUrl(e){this.trackingUrl_=e,this.onEvent_(new U(H.ADS_LOADED,new Map().set("loadTime",0)))}stop(){for(let e of this.adListeners_)this.eventManager_.unlisten(e.target,e.type,e.listener);this.onEnded_(),this.adListeners_=[],this.eventsSent_.clear(),this.trackingUrl_="",this.firstTrackingRequest_=!0,this.backupUrl_="",this.snapForwardTime_=null,this.adBreaks_=[],this.playedAds_.clear(),this.staticResources_.clear(),this.streamPromise_=null,this.adBreakListenersAttached_=!1}release(){this.stop(),this.eventManager_&&this.eventManager_.release()}onManifestUpdated(e){this.isLive_=e,this.trackingUrl_!=""&&(this.requestTrackingInfo_(this.trackingUrl_,this.firstTrackingRequest_),this.firstTrackingRequest_=!1)}getCuePoints(){let e=new Map;for(let t of this.adBreaks_)for(let i of t.ads){let r=i.startTimeInSeconds,s=r+i.durationInSeconds;if(!isFinite(r)||!isFinite(s)||s<=r)continue;let n=`${r.toFixed(1)}|${s.toFixed(1)}`;e.has(n)||e.set(n,{start:r,end:s})}return Array.from(e.values()).sort((t,i)=>t.start-i.start)}async requestSessionInfo_(e,t){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_SESSION_INFO},s=K.makeRequest([e],K.defaultRetryParameters());if(s.method="POST",t){let a=JSON.stringify(t);s.body=q.toUTF8(a)}let n=this.networkingEngine_.request(i,s,r);try{let a=await n.promise,o=q.fromUTF8(a.data),c=JSON.parse(o);if(c.manifestUrl&&c.trackingUrl){this.trackingUrl_=fe.resolve(e,c.trackingUrl);let u=Date.now()/1e3-this.streamRequestStartTime_;this.onEvent_(new U(H.ADS_LOADED,new Map().set("loadTime",u)));let m=fe.resolve(e,c.manifestUrl);this.streamPromise_.resolve(m),this.streamPromise_=null}else throw new Error("Insufficient data from MediaTailor.")}catch(a){if(!this.backupUrl_.length){this.streamPromise_.reject(new h(h.Severity.RECOVERABLE,h.Category.ADS,h.Code.MEDIATAILOR_REQUEST_FAILED)),this.streamPromise_=null;return}p.warning("MediaTailor request returned an error. Falling back to the backup asset uri."),this.streamPromise_.resolve(this.backupUrl_),this.streamPromise_=null}}async requestTrackingInfo_(e,t){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_TRACKING_INFO},s=K.makeRequest([e],K.defaultRetryParameters()),n=this.networkingEngine_.request(i,s,r);try{let a=await n.promise,o=[],c=q.fromUTF8(a.data),d=JSON.parse(c);if(d.avails.length>0){if(Fe.alphabeticalKeyOrderStringify(this.adBreaks_)!=Fe.alphabeticalKeyOrderStringify(d.avails)){this.adBreaks_=d.avails;for(let u of this.adBreaks_)for(let m of u.nonLinearAdsList)for(let f of m.nonLinearAdList)this.requestStaticResource_(f);o=this.getCuePoints(),this.onEvent_(new U(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",o)))}}else this.adBreaks_.length&&this.onEvent_(new U(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",o))),this.onEnded_(),this.adBreaks_=[];t&&(this.isLive_||o.length>0)&&this.setupAdBreakListeners_()}catch(a){p.warning("Error fetching tracking info",a)}}async requestStaticResource_(e){if(!e.staticResource)return;let t=this.getCacheKeyForNonLinear_(e);if(this.staticResources_.has(t))return;let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_STATIC_RESOURCE},s=K.makeRequest([e.staticResource],K.defaultRetryParameters()),n=this.networkingEngine_.request(i,s,r);try{this.staticResources_.set(t,[]);let a=await n.promise,o=q.fromUTF8(a.data),d=JSON.parse(o).apps;this.staticResources_.set(t,d)}catch(a){this.staticResources_.delete(t)}}getCacheKeyForNonLinear_(e){return[e.adId,e.adParameters,e.adSystem,e.adTitle,e.creativeAdId,e.creativeId,e.creativeSequence,e.height,e.width,e.staticResource].join("|")}setupAdBreakListeners_(){this.adBreakListenersAttached_||(this.adBreakListenersAttached_=!0,this.onTimeupdate_(),this.isLive_||(this.checkForSnapback_(),this.eventManager_.listen(this.video_,"seeked",()=>{this.checkForSnapback_()}),this.eventManager_.listen(this.video_,"ended",()=>{this.onEnded_()})),this.eventManager_.listen(this.video_,"timeupdate",()=>{this.onTimeupdate_()}))}checkForSnapback_(){let e=this.video_.currentTime;if(this.config_&&this.config_.disableSnapback||e==0||this.snapForwardTime_!=null)return;let t,i;for(let r of this.adBreaks_)for(let s of r.ads)if(!i)s.startTimeInSeconds<e&&(i=s,t=r);else if(i.durationInSeconds>0&&s.startTimeInSeconds<e&&s.startTimeInSeconds>i.startTimeInSeconds+i.durationInSeconds){i=s,t=r;break}t&&i&&!this.playedAds_.has(i.adId)&&(p.info("Seeking back to the start of the ad break at "+t.startTimeInSeconds+" and will return to "+e),this.snapForwardTime_=e,this.video_.currentTime=t.startTimeInSeconds)}onAdBreakEnded_(){let e=this.video_.currentTime;this.snapForwardTime_&&this.snapForwardTime_>e&&(this.video_.currentTime=this.snapForwardTime_),this.snapForwardTime_=null}onTimeupdate_(){if(!this.video_.duration||!this.ad_&&!this.adBreaks_.length)return;let e=this.video_.currentTime,t=!1;if(this.ad_){t=!0,v.assert(this.mediaTailorAd_,"Ad should be defined"),this.sendInProgressEvents_(e,this.mediaTailorAd_);let i=this.ad_.getRemainingTime(),r=this.ad_.getDuration();this.ad_.canSkipNow()&&i>0&&r>0&&this.sendTrackingEvent_(be.SKIP_STATE_CHANGED_),r>0&&(i<=0||i>r)&&this.onEnded_()}(!this.ad_||!this.ad_.isLinear())&&(this.checkLinearAds_(e),!this.ad_&&this.adContainer_&&this.checkNonLinearAds_(e),t&&!this.ad_&&this.onAdBreakEnded_())}sendInProgressEvents_(e,t){let i=t.startTimeInSeconds+.25*t.durationInSeconds,r=t.startTimeInSeconds+.5*t.durationInSeconds,s=t.startTimeInSeconds+.75*t.durationInSeconds;e>=i&&!this.eventsSent_.has(be.FIRSTQUARTILE_)?(this.eventsSent_.add(be.FIRSTQUARTILE_),this.sendTrackingEvent_(be.FIRSTQUARTILE_)):e>=r&&!this.eventsSent_.has(be.MIDPOINT_)?(this.eventsSent_.add(be.MIDPOINT_),this.sendTrackingEvent_(be.MIDPOINT_)):e>=s&&!this.eventsSent_.has(be.THIRDQUARTILE_)&&(this.eventsSent_.add(be.THIRDQUARTILE_),this.sendTrackingEvent_(be.THIRDQUARTILE_))}checkLinearAds_(e){for(let t of this.adBreaks_){if(this.ad_&&this.ad_.isLinear())break;for(let i=0;i<t.ads.length;i++){let r=t.ads[i],s=r.startTimeInSeconds,n=r.startTimeInSeconds+r.durationInSeconds;if(s<=e&&n>e){if(!(this.config_&&this.config_.disablePlayedLinearAdSkip)&&this.playedAds_.has(r.adId)){if(this.video_.ended)continue;this.video_.currentTime=n;return}this.onEnded_(),this.mediaTailorAdBreak_=t,this.ad_=new Bs(r,i+1,t.ads.length,!0,this.video_),this.mediaTailorAd_=r,i===0&&this.sendTrackingEvent_(be.BREAK_START_),this.setupCurrentAdListeners_();break}}}}checkNonLinearAds_(e){for(let t of this.adBreaks_){if(this.ad_)break;for(let i=0;i<t.nonLinearAdsList.length;i++){let r=t.nonLinearAdsList[i];if(!r.nonLinearAdList.length)continue;let s=t.startTimeInSeconds,n=this.getCacheKeyForNonLinear_(r.nonLinearAdList[0]),a=this.staticResources_.get(n);if(s<=e&&a&&a.length){this.onEnded_(),this.displayNonLinearAd_(a),this.mediaTailorAdBreak_=t,this.ad_=new Bs(r,i+1,t.ads.length,!1,this.video_),this.mediaTailorAd_=r,i===0&&this.sendTrackingEvent_(be.BREAK_START_),this.setupCurrentAdListeners_();break}}}}displayNonLinearAd_(e){for(let t of e){if(!t.data.source.length)continue;let i=document.createElement("img");i.src=t.data.source[0].url,i.style.top=(t.placeholder.top||0)+"%",i.style.height=100-(t.placeholder.top||0)+"%",i.style.left=(t.placeholder.left||0)+"%",i.style.maxWidth=100-(t.placeholder.left||0)+"%",i.style.objectFit="contain",i.style.position="absolute",this.adContainer_.appendChild(i)}}onEnded_(){if(this.ad_&&this.mediaTailorAd_){this.adContainer_&&Ke.removeAllChildren(this.adContainer_),this.isLive_||this.playedAds_.add(this.mediaTailorAd_.adId),this.removeCurrentAdListeners_(this.ad_.isSkipped());let e=this.ad_.getPositionInSequence(),t=this.ad_.getSequenceLength();e===t&&this.sendTrackingEvent_(be.BREAK_END_),this.ad_=null,this.mediaTailorAd_=null,this.mediaTailorAdBreak_=null}}setupCurrentAdListeners_(){let e=!1;this.video_.paused?e=!0:(this.sendTrackingEvent_(be.IMPRESSION_),this.sendTrackingEvent_(be.START_)),this.adListeners_.push({target:this.video_,type:"volumechange",listener:()=>{this.sendTrackingEvent_(this.video_.muted?be.MUTE_:be.UNMUTE_)}}),this.adListeners_.push({target:this.video_,type:"play",listener:()=>{e?(this.sendTrackingEvent_(be.IMPRESSION_),this.sendTrackingEvent_(be.START_),e=!1):this.sendTrackingEvent_(be.RESUME_)}}),this.adListeners_.push({target:this.video_,type:"pause",listener:()=>{this.sendTrackingEvent_(be.PAUSE_)}});for(let t of this.adListeners_)this.eventManager_.listen(t.target,t.type,t.listener)}removeCurrentAdListeners_(e=!1){e?this.sendTrackingEvent_(be.SKIPPED_):this.sendTrackingEvent_(be.COMPLETE_);for(let t of this.adListeners_)this.eventManager_.unlisten(t.target,t.type,t.listener);this.adListeners_=[],this.eventsSent_.clear()}sendTrackingEvent_(e){if(!this.mediaTailorAd_||!this.mediaTailorAdBreak_)return;let t=this.mediaTailorAd_.trackingEvents.find(i=>i.eventType==e);if(t||(t=this.mediaTailorAdBreak_.adBreakTrackingEvents.find(i=>i.eventType==e)),t&&this.config_&&!this.config_.disableTrackingEvents&&!(this.config_.disableTrackingForPlayedLinearAds&&this.mediaTailorAd_&&this.playedAds_.has(this.mediaTailorAd_.adId))){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_TRACKING_EVENT};for(let s of t.beaconUrls){if(!s||s=="")continue;let n=K.makeRequest([s],K.defaultRetryParameters());n.method="POST",this.networkingEngine_.request(i,n,r)}}switch(e){case be.IMPRESSION_:this.onEvent_(new U(H.AD_IMPRESSION));break;case be.START_:this.onEvent_(new U(H.AD_STARTED,new Map().set("ad",this.ad_)));break;case be.MUTE_:this.onEvent_(new U(H.AD_MUTED));break;case be.UNMUTE_:this.onEvent_(new U(H.AD_VOLUME_CHANGED));break;case be.RESUME_:this.onEvent_(new U(H.AD_RESUMED));break;case be.PAUSE_:this.onEvent_(new U(H.AD_PAUSED));break;case be.FIRSTQUARTILE_:this.onEvent_(new U(H.AD_FIRST_QUARTILE));break;case be.MIDPOINT_:this.onEvent_(new U(H.AD_MIDPOINT));break;case be.THIRDQUARTILE_:this.onEvent_(new U(H.AD_THIRD_QUARTILE));break;case be.COMPLETE_:this.onEvent_(new U(H.AD_COMPLETE)),this.onEvent_(new U(H.AD_STOPPED));break;case be.SKIPPED_:this.onEvent_(new U(H.AD_SKIPPED)),this.onEvent_(new U(H.AD_STOPPED));break;case be.BREAK_START_:this.adContainer_&&this.adContainer_.setAttribute("ad-active","true");break;case be.BREAK_END_:this.adContainer_&&this.adContainer_.removeAttribute("ad-active");break;case be.SKIP_STATE_CHANGED_:this.onEvent_(new U(H.AD_SKIP_STATE_CHANGED));break}}};l(be,"IMPRESSION_","impression"),l(be,"START_","start"),l(be,"MUTE_","mute"),l(be,"UNMUTE_","unmute"),l(be,"RESUME_","resume"),l(be,"PAUSE_","pause"),l(be,"FIRSTQUARTILE_","firstQuartile"),l(be,"MIDPOINT_","midpoint"),l(be,"THIRDQUARTILE_","thirdQuartile"),l(be,"COMPLETE_","complete"),l(be,"SKIPPED_","skip"),l(be,"BREAK_START_","breakStart"),l(be,"BREAK_END_","breakEnd"),l(be,"SKIP_STATE_CHANGED_","skipStateChanged");var xn=be;/*! @license
|
|
538
|
+
*/var be=class be{constructor(e,t,i,r){l(this,"adContainer_");l(this,"networkingEngine_");l(this,"config_");l(this,"video_");l(this,"streamPromise_");l(this,"streamRequestStartTime_");l(this,"onEvent_");l(this,"isLive_");l(this,"snapForwardTime_");l(this,"adBreaks_");l(this,"playedAds_");l(this,"ad_");l(this,"mediaTailorAd_");l(this,"mediaTailorAdBreak_");l(this,"staticResources_");l(this,"adListeners_");l(this,"eventsSent_");l(this,"trackingUrl_");l(this,"firstTrackingRequest_");l(this,"backupUrl_");l(this,"currentCuePoints_");l(this,"eventManager_");l(this,"adBreakListenersAttached_");this.adContainer_=e,this.networkingEngine_=t,this.config_=null,this.video_=i,this.streamPromise_=null,this.streamRequestStartTime_=NaN,this.onEvent_=r,this.isLive_=!1,this.snapForwardTime_=null,this.adBreaks_=[],this.playedAds_=new Set,this.ad_=null,this.mediaTailorAd_=null,this.mediaTailorAdBreak_=null,this.staticResources_=new Map,this.adListeners_=[],this.eventsSent_=new Set,this.trackingUrl_="",this.firstTrackingRequest_=!0,this.backupUrl_="",this.currentCuePoints_=[],this.eventManager_=new ue,this.adBreakListenersAttached_=!1}configure(e){this.config_=e}streamRequest(e,t,i){return this.streamPromise_?Promise.reject(new h(h.Severity.RECOVERABLE,h.Category.ADS,h.Code.CURRENT_DAI_REQUEST_NOT_FINISHED)):(this.streamPromise_=Promise.withResolvers(),this.requestSessionInfo_(e,t),this.backupUrl_=i||"",this.streamRequestStartTime_=Date.now()/1e3,this.streamPromise_.promise)}addTrackingUrl(e){this.trackingUrl_=e,this.onEvent_(new L(H.ADS_LOADED,new Map().set("loadTime",0)))}stop(){for(let e of this.adListeners_)this.eventManager_.unlisten(e.target,e.type,e.listener);this.onEnded_(),this.adListeners_=[],this.eventsSent_.clear(),this.trackingUrl_="",this.firstTrackingRequest_=!0,this.backupUrl_="",this.snapForwardTime_=null,this.adBreaks_=[],this.playedAds_.clear(),this.staticResources_.clear(),this.streamPromise_=null,this.adBreakListenersAttached_=!1}release(){this.stop(),this.eventManager_&&this.eventManager_.release()}onManifestUpdated(e){this.isLive_=e,this.trackingUrl_!=""&&(this.requestTrackingInfo_(this.trackingUrl_,this.firstTrackingRequest_),this.firstTrackingRequest_=!1)}getCuePoints(){let e=new Map;for(let t of this.adBreaks_)for(let i of t.ads){let r=i.startTimeInSeconds,s=r+i.durationInSeconds;if(!isFinite(r)||!isFinite(s)||s<=r)continue;let n=`${r.toFixed(1)}|${s.toFixed(1)}`;e.has(n)||e.set(n,{start:r,end:s})}return Array.from(e.values()).sort((t,i)=>t.start-i.start)}async requestSessionInfo_(e,t){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_SESSION_INFO},s=K.makeRequest([e],K.defaultRetryParameters());if(s.method="POST",t){let a=JSON.stringify(t);s.body=q.toUTF8(a)}let n=this.networkingEngine_.request(i,s,r);try{let a=await n.promise,o=q.fromUTF8(a.data),c=JSON.parse(o);if(c.manifestUrl&&c.trackingUrl){this.trackingUrl_=fe.resolve(e,c.trackingUrl);let u=Date.now()/1e3-this.streamRequestStartTime_;this.onEvent_(new L(H.ADS_LOADED,new Map().set("loadTime",u)));let m=fe.resolve(e,c.manifestUrl);this.streamPromise_.resolve(m),this.streamPromise_=null}else throw new Error("Insufficient data from MediaTailor.")}catch(a){if(!this.backupUrl_.length){this.streamPromise_.reject(new h(h.Severity.RECOVERABLE,h.Category.ADS,h.Code.MEDIATAILOR_REQUEST_FAILED)),this.streamPromise_=null;return}p.warning("MediaTailor request returned an error. Falling back to the backup asset uri."),this.streamPromise_.resolve(this.backupUrl_),this.streamPromise_=null}}async requestTrackingInfo_(e,t){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_TRACKING_INFO},s=K.makeRequest([e],K.defaultRetryParameters()),n=this.networkingEngine_.request(i,s,r);try{let a=await n.promise,o=[],c=q.fromUTF8(a.data),d=JSON.parse(c);if(d.avails.length>0){if(Fe.alphabeticalKeyOrderStringify(this.adBreaks_)!=Fe.alphabeticalKeyOrderStringify(d.avails)){this.adBreaks_=d.avails;for(let u of this.adBreaks_)for(let m of u.nonLinearAdsList)for(let f of m.nonLinearAdList)this.requestStaticResource_(f);o=this.getCuePoints(),this.onEvent_(new L(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",o)))}}else this.adBreaks_.length&&this.onEvent_(new L(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",o))),this.onEnded_(),this.adBreaks_=[];t&&(this.isLive_||o.length>0)&&this.setupAdBreakListeners_()}catch(a){p.warning("Error fetching tracking info",a)}}async requestStaticResource_(e){if(!e.staticResource)return;let t=this.getCacheKeyForNonLinear_(e);if(this.staticResources_.has(t))return;let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_STATIC_RESOURCE},s=K.makeRequest([e.staticResource],K.defaultRetryParameters()),n=this.networkingEngine_.request(i,s,r);try{this.staticResources_.set(t,[]);let a=await n.promise,o=q.fromUTF8(a.data),d=JSON.parse(o).apps;this.staticResources_.set(t,d)}catch(a){this.staticResources_.delete(t)}}getCacheKeyForNonLinear_(e){return[e.adId,e.adParameters,e.adSystem,e.adTitle,e.creativeAdId,e.creativeId,e.creativeSequence,e.height,e.width,e.staticResource].join("|")}setupAdBreakListeners_(){this.adBreakListenersAttached_||(this.adBreakListenersAttached_=!0,this.onTimeupdate_(),this.isLive_||(this.checkForSnapback_(),this.eventManager_.listen(this.video_,"seeked",()=>{this.checkForSnapback_()}),this.eventManager_.listen(this.video_,"ended",()=>{this.onEnded_()})),this.eventManager_.listen(this.video_,"timeupdate",()=>{this.onTimeupdate_()}))}checkForSnapback_(){let e=this.video_.currentTime;if(this.config_&&this.config_.disableSnapback||e==0||this.snapForwardTime_!=null)return;let t,i;for(let r of this.adBreaks_)for(let s of r.ads)if(!i)s.startTimeInSeconds<e&&(i=s,t=r);else if(i.durationInSeconds>0&&s.startTimeInSeconds<e&&s.startTimeInSeconds>i.startTimeInSeconds+i.durationInSeconds){i=s,t=r;break}t&&i&&!this.playedAds_.has(i.adId)&&(p.info("Seeking back to the start of the ad break at "+t.startTimeInSeconds+" and will return to "+e),this.snapForwardTime_=e,this.video_.currentTime=t.startTimeInSeconds)}onAdBreakEnded_(){let e=this.video_.currentTime;this.snapForwardTime_&&this.snapForwardTime_>e&&(this.video_.currentTime=this.snapForwardTime_),this.snapForwardTime_=null}onTimeupdate_(){if(!this.video_.duration||!this.ad_&&!this.adBreaks_.length)return;let e=this.video_.currentTime,t=!1;if(this.ad_){t=!0,v.assert(this.mediaTailorAd_,"Ad should be defined"),this.sendInProgressEvents_(e,this.mediaTailorAd_);let i=this.ad_.getRemainingTime(),r=this.ad_.getDuration();this.ad_.canSkipNow()&&i>0&&r>0&&this.sendTrackingEvent_(be.SKIP_STATE_CHANGED_),r>0&&(i<=0||i>r)&&this.onEnded_()}(!this.ad_||!this.ad_.isLinear())&&(this.checkLinearAds_(e),!this.ad_&&this.adContainer_&&this.checkNonLinearAds_(e),t&&!this.ad_&&this.onAdBreakEnded_())}sendInProgressEvents_(e,t){let i=t.startTimeInSeconds+.25*t.durationInSeconds,r=t.startTimeInSeconds+.5*t.durationInSeconds,s=t.startTimeInSeconds+.75*t.durationInSeconds;e>=i&&!this.eventsSent_.has(be.FIRSTQUARTILE_)?(this.eventsSent_.add(be.FIRSTQUARTILE_),this.sendTrackingEvent_(be.FIRSTQUARTILE_)):e>=r&&!this.eventsSent_.has(be.MIDPOINT_)?(this.eventsSent_.add(be.MIDPOINT_),this.sendTrackingEvent_(be.MIDPOINT_)):e>=s&&!this.eventsSent_.has(be.THIRDQUARTILE_)&&(this.eventsSent_.add(be.THIRDQUARTILE_),this.sendTrackingEvent_(be.THIRDQUARTILE_))}checkLinearAds_(e){for(let t of this.adBreaks_){if(this.ad_&&this.ad_.isLinear())break;for(let i=0;i<t.ads.length;i++){let r=t.ads[i],s=r.startTimeInSeconds,n=r.startTimeInSeconds+r.durationInSeconds;if(s<=e&&n>e){if(!(this.config_&&this.config_.disablePlayedLinearAdSkip)&&this.playedAds_.has(r.adId)){if(this.video_.ended)continue;this.video_.currentTime=n;return}this.onEnded_(),this.mediaTailorAdBreak_=t,this.ad_=new Bs(r,i+1,t.ads.length,!0,this.video_),this.mediaTailorAd_=r,i===0&&this.sendTrackingEvent_(be.BREAK_START_),this.setupCurrentAdListeners_();break}}}}checkNonLinearAds_(e){for(let t of this.adBreaks_){if(this.ad_)break;for(let i=0;i<t.nonLinearAdsList.length;i++){let r=t.nonLinearAdsList[i];if(!r.nonLinearAdList.length)continue;let s=t.startTimeInSeconds,n=this.getCacheKeyForNonLinear_(r.nonLinearAdList[0]),a=this.staticResources_.get(n);if(s<=e&&a&&a.length){this.onEnded_(),this.displayNonLinearAd_(a),this.mediaTailorAdBreak_=t,this.ad_=new Bs(r,i+1,t.ads.length,!1,this.video_),this.mediaTailorAd_=r,i===0&&this.sendTrackingEvent_(be.BREAK_START_),this.setupCurrentAdListeners_();break}}}}displayNonLinearAd_(e){for(let t of e){if(!t.data.source.length)continue;let i=document.createElement("img");i.src=t.data.source[0].url,i.style.top=(t.placeholder.top||0)+"%",i.style.height=100-(t.placeholder.top||0)+"%",i.style.left=(t.placeholder.left||0)+"%",i.style.maxWidth=100-(t.placeholder.left||0)+"%",i.style.objectFit="contain",i.style.position="absolute",this.adContainer_.appendChild(i)}}onEnded_(){if(this.ad_&&this.mediaTailorAd_){this.adContainer_&&Ke.removeAllChildren(this.adContainer_),this.isLive_||this.playedAds_.add(this.mediaTailorAd_.adId),this.removeCurrentAdListeners_(this.ad_.isSkipped());let e=this.ad_.getPositionInSequence(),t=this.ad_.getSequenceLength();e===t&&this.sendTrackingEvent_(be.BREAK_END_),this.ad_=null,this.mediaTailorAd_=null,this.mediaTailorAdBreak_=null}}setupCurrentAdListeners_(){let e=!1;this.video_.paused?e=!0:(this.sendTrackingEvent_(be.IMPRESSION_),this.sendTrackingEvent_(be.START_)),this.adListeners_.push({target:this.video_,type:"volumechange",listener:()=>{this.sendTrackingEvent_(this.video_.muted?be.MUTE_:be.UNMUTE_)}}),this.adListeners_.push({target:this.video_,type:"play",listener:()=>{e?(this.sendTrackingEvent_(be.IMPRESSION_),this.sendTrackingEvent_(be.START_),e=!1):this.sendTrackingEvent_(be.RESUME_)}}),this.adListeners_.push({target:this.video_,type:"pause",listener:()=>{this.sendTrackingEvent_(be.PAUSE_)}});for(let t of this.adListeners_)this.eventManager_.listen(t.target,t.type,t.listener)}removeCurrentAdListeners_(e=!1){e?this.sendTrackingEvent_(be.SKIPPED_):this.sendTrackingEvent_(be.COMPLETE_);for(let t of this.adListeners_)this.eventManager_.unlisten(t.target,t.type,t.listener);this.adListeners_=[],this.eventsSent_.clear()}sendTrackingEvent_(e){if(!this.mediaTailorAd_||!this.mediaTailorAdBreak_)return;let t=this.mediaTailorAd_.trackingEvents.find(i=>i.eventType==e);if(t||(t=this.mediaTailorAdBreak_.adBreakTrackingEvents.find(i=>i.eventType==e)),t&&this.config_&&!this.config_.disableTrackingEvents&&!(this.config_.disableTrackingForPlayedLinearAds&&this.mediaTailorAd_&&this.playedAds_.has(this.mediaTailorAd_.adId))){let i=K.RequestType.ADS,r={type:K.AdvancedRequestType.MEDIATAILOR_TRACKING_EVENT};for(let s of t.beaconUrls){if(!s||s=="")continue;let n=K.makeRequest([s],K.defaultRetryParameters());n.method="POST",this.networkingEngine_.request(i,n,r)}}switch(e){case be.IMPRESSION_:this.onEvent_(new L(H.AD_IMPRESSION));break;case be.START_:this.onEvent_(new L(H.AD_STARTED,new Map().set("ad",this.ad_)));break;case be.MUTE_:this.onEvent_(new L(H.AD_MUTED));break;case be.UNMUTE_:this.onEvent_(new L(H.AD_VOLUME_CHANGED));break;case be.RESUME_:this.onEvent_(new L(H.AD_RESUMED));break;case be.PAUSE_:this.onEvent_(new L(H.AD_PAUSED));break;case be.FIRSTQUARTILE_:this.onEvent_(new L(H.AD_FIRST_QUARTILE));break;case be.MIDPOINT_:this.onEvent_(new L(H.AD_MIDPOINT));break;case be.THIRDQUARTILE_:this.onEvent_(new L(H.AD_THIRD_QUARTILE));break;case be.COMPLETE_:this.onEvent_(new L(H.AD_COMPLETE)),this.onEvent_(new L(H.AD_STOPPED));break;case be.SKIPPED_:this.onEvent_(new L(H.AD_SKIPPED)),this.onEvent_(new L(H.AD_STOPPED));break;case be.BREAK_START_:this.adContainer_&&this.adContainer_.setAttribute("ad-active","true");break;case be.BREAK_END_:this.adContainer_&&this.adContainer_.removeAttribute("ad-active");break;case be.SKIP_STATE_CHANGED_:this.onEvent_(new L(H.AD_SKIP_STATE_CHANGED));break}}};l(be,"IMPRESSION_","impression"),l(be,"START_","start"),l(be,"MUTE_","mute"),l(be,"UNMUTE_","unmute"),l(be,"RESUME_","resume"),l(be,"PAUSE_","pause"),l(be,"FIRSTQUARTILE_","firstQuartile"),l(be,"MIDPOINT_","midpoint"),l(be,"THIRDQUARTILE_","thirdQuartile"),l(be,"COMPLETE_","complete"),l(be,"SKIPPED_","skip"),l(be,"BREAK_START_","breakStart"),l(be,"BREAK_END_","breakEnd"),l(be,"SKIP_STATE_CHANGED_","skipStateChanged");var xn=be;/*! @license
|
|
539
539
|
* Shaka Player
|
|
540
540
|
* Copyright 2016 Google LLC
|
|
541
541
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -543,7 +543,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
543
543
|
* Shaka Player
|
|
544
544
|
* Copyright 2016 Google LLC
|
|
545
545
|
* SPDX-License-Identifier: Apache-2.0
|
|
546
|
-
*/var Rn=class{constructor(e,t,i,r){l(this,"adContainer_");l(this,"video_");l(this,"config_");l(this,"streamPromise_");l(this,"streamRequestStartTime_");l(this,"onEvent_");l(this,"isLiveContent_");l(this,"snapForwardTime_");l(this,"ad_");l(this,"adProgressData_");l(this,"backupUrl_");l(this,"currentCuePoints_");l(this,"eventManager_");l(this,"streamManager_");this.adContainer_=e,this.video_=t,this.config_=null,this.streamPromise_=null,this.streamRequestStartTime_=NaN,this.onEvent_=r,this.isLiveContent_=!1,this.snapForwardTime_=null,this.ad_=null,this.adProgressData_=null,this.backupUrl_="",this.currentCuePoints_=[],this.eventManager_=new ue;let s=new google.ima.dai.api.UiSettings;s.setLocale(i),this.streamManager_=new google.ima.dai.api.StreamManager(this.video_,this.adContainer_,s),this.onEvent_(new
|
|
546
|
+
*/var Rn=class{constructor(e,t,i,r){l(this,"adContainer_");l(this,"video_");l(this,"config_");l(this,"streamPromise_");l(this,"streamRequestStartTime_");l(this,"onEvent_");l(this,"isLiveContent_");l(this,"snapForwardTime_");l(this,"ad_");l(this,"adProgressData_");l(this,"backupUrl_");l(this,"currentCuePoints_");l(this,"eventManager_");l(this,"streamManager_");this.adContainer_=e,this.video_=t,this.config_=null,this.streamPromise_=null,this.streamRequestStartTime_=NaN,this.onEvent_=r,this.isLiveContent_=!1,this.snapForwardTime_=null,this.ad_=null,this.adProgressData_=null,this.backupUrl_="",this.currentCuePoints_=[],this.eventManager_=new ue;let s=new google.ima.dai.api.UiSettings;s.setLocale(i),this.streamManager_=new google.ima.dai.api.StreamManager(this.video_,this.adContainer_,s),this.onEvent_(new L(H.IMA_STREAM_MANAGER_LOADED,new Map().set("imaStreamManager",this.streamManager_))),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.LOADED,n=>{p.info("Ad SS Loaded"),this.onLoaded_(n)}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.ERROR,()=>{p.info("Ad SS Error"),this.onError_()}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.AD_BREAK_STARTED,()=>{p.info("Ad Break Started")}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.STARTED,n=>{p.info("Ad Started"),this.onAdStart_(n)}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.AD_BREAK_ENDED,()=>{p.info("Ad Break Ended"),this.onAdBreakEnded_()}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.AD_PROGRESS,n=>{this.onAdProgress_(n)}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.FIRST_QUARTILE,()=>{p.info("Ad event: First Quartile"),this.onEvent_(new L(H.AD_FIRST_QUARTILE))}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.MIDPOINT,()=>{p.info("Ad event: Midpoint"),this.onEvent_(new L(H.AD_MIDPOINT))}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.THIRD_QUARTILE,()=>{p.info("Ad event: Third Quartile"),this.onEvent_(new L(H.AD_THIRD_QUARTILE))}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.COMPLETE,()=>{p.info("Ad event: Complete"),this.onEvent_(new L(H.AD_COMPLETE)),this.onEvent_(new L(H.AD_STOPPED)),this.adContainer_.removeAttribute("ad-active"),this.ad_=null}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.SKIPPED,()=>{p.info("Ad event: Skipped"),this.onEvent_(new L(H.AD_SKIPPED)),this.onEvent_(new L(H.AD_STOPPED))}),this.eventManager_.listen(this.streamManager_,google.ima.dai.api.StreamEvent.Type.CUEPOINTS_CHANGED,n=>{p.info("Ad event: Cue points changed"),this.onCuePointsChanged_(n)})}configure(e){this.config_=e}streamRequest(e,t){return this.streamPromise_?Promise.reject(new h(h.Severity.RECOVERABLE,h.Category.ADS,h.Code.CURRENT_DAI_REQUEST_NOT_FINISHED)):(e instanceof google.ima.dai.api.LiveStreamRequest&&(this.isLiveContent_=!0),this.streamPromise_=Promise.withResolvers(),this.streamManager_.requestStream(e),this.backupUrl_=t||"",this.streamRequestStartTime_=Date.now()/1e3,this.streamPromise_.promise)}replaceAdTagParameters(e){this.streamManager_.replaceAdTagParameters(e)}stop(){this.streamManager_.reset(),this.backupUrl_="",this.snapForwardTime_=null,this.currentCuePoints_=[]}release(){this.stop(),this.eventManager_&&this.eventManager_.release()}onTimedMetadata(e,t,i){this.streamManager_.processMetadata(e,t,i)}onCueMetadataChange(e){if(e.key&&e.data){let t={};t[e.key]=e.data,this.streamManager_.onTimedMetadata(t)}}getCuePoints(){return this.currentCuePoints_}checkForSnapback_(){let e=this.video_.currentTime;if(this.config_&&this.config_.disableSnapback||e==0)return;this.streamManager_.streamTimeForContentTime(e);let t=this.streamManager_.previousCuePointForStreamTime(e);t&&!t.played&&(p.info("Seeking back to the start of the ad break at "+t.start+" and will return to "+e),this.snapForwardTime_=e,this.video_.currentTime=t.start)}onAdStart_(e){v.assert(this.streamManager_,"Should have a stream manager at this point!");let t=e.getAd();this.ad_=new Mn(t,this.video_),this.adProgressData_&&this.ad_.setProgressData(this.adProgressData_),this.onEvent_(new L(H.AD_STARTED,new Map().set("ad",this.ad_))),this.adContainer_.setAttribute("ad-active","true")}onAdBreakEnded_(){this.adContainer_.removeAttribute("ad-active");let e=this.video_.currentTime;this.snapForwardTime_&&this.snapForwardTime_>e&&(this.video_.currentTime=this.snapForwardTime_,this.snapForwardTime_=null)}onLoaded_(e){let i=Date.now()/1e3-this.streamRequestStartTime_;this.onEvent_(new L(H.ADS_LOADED,new Map().set("loadTime",i)));let s=e.getStreamData().url;this.streamPromise_.resolve(s),this.streamPromise_=null,this.isLiveContent_||this.eventManager_.listen(this.video_,"seeked",()=>{this.checkForSnapback_()})}onError_(){if(!this.backupUrl_.length){this.streamPromise_.reject("IMA Stream request returned an error and there was no backup asset uri provided."),this.streamPromise_=null;return}p.warning("IMA stream request returned an error. Falling back to the backup asset uri."),this.streamPromise_.resolve(this.backupUrl_),this.streamPromise_=null}onAdProgress_(e){let i=e.getStreamData().adProgressData;this.adProgressData_=i,this.ad_&&this.ad_.setProgressData(this.adProgressData_)}onCuePointsChanged_(e){let t=e.getStreamData(),i=[];for(let r of t.cuepoints){let s={start:r.start,end:r.end};i.push(s)}this.currentCuePoints_=i,this.onEvent_(new L(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",i)))}};/*! @license
|
|
547
547
|
* Shaka Player
|
|
548
548
|
* Copyright 2016 Google LLC
|
|
549
549
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -551,27 +551,27 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
551
551
|
* Shaka Player
|
|
552
552
|
* Copyright 2016 Google LLC
|
|
553
553
|
* SPDX-License-Identifier: Apache-2.0
|
|
554
|
-
*/var Nr=class y{constructor(e,t){l(this,"config_");l(this,"player_");l(this,"onEvent_");l(this,"video_");l(this,"playbackStarted_");l(this,"trackings_");l(this,"currentTracking_");l(this,"adPaused_");l(this,"eventManager_");l(this,"playbackEventManager_");l(this,"trackingEventManager_");l(this,"pollTimer_");this.config_=null,this.player_=e,this.onEvent_=t,this.video_=null,this.playbackStarted_=!1,this.trackings_=new Map,this.currentTracking_=null,this.adPaused_=!1,this.eventManager_=new ue,this.playbackEventManager_=new ue,this.trackingEventManager_=new ue,this.eventManager_.listen(this.player_,"loading",()=>{this.playbackStart_()}),this.eventManager_.listen(this.player_,"unloading",()=>{this.playbackEnd_()}),this.pollTimer_=new ae(()=>{if(this.trackings_.size){let i=this.player_.getLoadMode();if(i==dt.LoadMode.DESTROYED||i==dt.LoadMode.NOT_LOADED)return;let r=!1,s=Array.from(this.trackings_.values()),n=this.player_.seekRange();for(let a of s){if(a==this.currentTracking_)continue;let o=a.endTime||a.startTime;if(n.start-o>=1){let c=JSON.stringify(a);this.trackings_.delete(c),r=!0}}r&&this.cuepointsChanged_()}}),this.player_.getAssetUri()&&this.playbackStart_()}configure(e){this.config_=e}stop(){this.playbackEnd_()}release(){this.stop(),this.player_=null,this.eventManager_&&this.eventManager_.release(),this.playbackEventManager_&&this.playbackEventManager_.release(),this.trackingEventManager_&&this.trackingEventManager_.release(),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null)}addMetadata(e){if(!this.startPlaybackIfNeeded_()||!y.validSchemes_.has(e.type))return;let t=e.values.find(n=>n.key=="X-AD-CREATIVE-SIGNALING");if(!t)return;let i=t.data,r;try{r=JSON.parse(window.atob(i))}catch(n){return}if(!r.payload)return;let s=[];for(let n=0;n<r.payload.length;n++){let a=r.payload[n];v.assert(typeof e.startTime=="number","startTime must not be null!");let o=e.startTime+a.start||0,c=a.duration?e.startTime+a.duration:e.endTime;if(a&&a.tracking){let d={startTime:o,endTime:c,tracking:H.createTrackingFromEvents(a.tracking),position:n+1,sequenceLength:r.payload.length};s.push(d)}}this.addTracking_(s)}addRegion(e){if(!this.startPlaybackIfNeeded_()||!y.validSchemes_.has(e.schemeIdUri)||!e.eventNode)return;let t=I.getTextContents(e.eventNode);if(!t)return;let i;try{i=JSON.parse(t)}catch(s){return}if(!i.payload)return;let r=[];for(let s=0;s<i.payload.length;s++){let n=i.payload[s],a=e.startTime+n.start||0,o=n.duration?e.startTime+n.duration:e.endTime;if(n&&n.tracking){let c={startTime:a,endTime:o,tracking:H.createTrackingFromEvents(n.tracking),position:s+1,sequenceLength:i.payload.length};r.push(c)}}this.addTracking_(r)}addTracking_(e){if(!this.playbackStarted_||!e.length)return;if(!this.player_.isFullyLoaded()){this.playbackEventManager_.listenOnce(this.player_,"loaded",()=>{this.addTracking_(e)});return}let t=!1;for(let i of e){let r=JSON.stringify(i);this.trackings_.getOrInsert(r,i)===i&&(t=!0)}t&&this.cuepointsChanged_(),this.setupCurrentTracking_(),this.playbackEventManager_.listen(this.video_,"timeupdate",()=>this.setupCurrentTracking_()),this.pollTimer_&&this.player_.isLive()&&this.pollTimer_.tickEvery(1)}playbackStart_(){if(this.playbackStarted_)return;let e=this.player_.getMediaElement();e&&(this.playbackStarted_=!0,this.video_=e)}startPlaybackIfNeeded_(){return!this.playbackStarted_&&this.player_.getAssetUri()&&this.playbackStart_(),this.playbackStarted_}playbackEnd_(){this.playbackStarted_&&(this.playbackStarted_=!1,this.video_=null,this.playbackEventManager_.removeAll(),this.trackings_.clear(),this.unSetupCurrentTracking_(),this.trackingEventManager_.removeAll(),this.pollTimer_&&this.pollTimer_.stop())}setupCurrentTracking_(){if(!this.trackings_.size||this.currentTracking_||!this.video_.duration)return;let e=this.video_.currentTime;for(let i of this.trackings_.values())if(i.startTime<=e&&i.endTime&&e<=i.endTime&&!this.player_.isEnded()){this.currentTracking_=i;break}if(!this.currentTracking_)return;p.info("Found tracking",this.currentTracking_);let t=!1;if(!this.player_.isLive()){let i=this.player_.seekRange();t=i.start===this.currentTracking_.startTime&&i.end===this.currentTracking_.endTime}this.createBaseSetupTracking_(),t?this.createSingleSetupTracking_():this.createSlidingSetupTracking_()}unSetupCurrentTracking_(e=!1){this.currentTracking_&&(e||(this.sendEvent_(H.AD_SKIPPED),this.sendEvent_(H.AD_STOPPED)),this.trackingEventManager_.removeAll(),this.currentTracking_=null,this.adPaused_=!1)}createBaseSetupTracking_(){v.assert(this.currentTracking_,"AdTrackingInfo must not be null!");let e=new Pn(this.video_,this.currentTracking_);this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",e)),this.trackingEventManager_.listen(this.player_,"error",t=>{this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",t))}),this.adPaused_=!1,this.trackingEventManager_.listen(this.video_,"play",()=>{this.adPaused_&&(this.adPaused_=!1,this.sendEvent_(H.AD_RESUMED))}),this.trackingEventManager_.listen(this.video_,"pause",()=>{this.adPaused_||(this.adPaused_=!0,this.sendEvent_(H.AD_PAUSED))}),this.trackingEventManager_.listen(this.video_,"volumechange",()=>{this.video_.muted?this.sendEvent_(H.AD_MUTED):this.sendEvent_(H.AD_VOLUME_CHANGED)})
|
|
554
|
+
*/var Nr=class y{constructor(e,t){l(this,"config_");l(this,"player_");l(this,"onEvent_");l(this,"video_");l(this,"playbackStarted_");l(this,"trackings_");l(this,"currentTracking_");l(this,"adPaused_");l(this,"eventManager_");l(this,"playbackEventManager_");l(this,"trackingEventManager_");l(this,"pollTimer_");this.config_=null,this.player_=e,this.onEvent_=t,this.video_=null,this.playbackStarted_=!1,this.trackings_=new Map,this.currentTracking_=null,this.adPaused_=!1,this.eventManager_=new ue,this.playbackEventManager_=new ue,this.trackingEventManager_=new ue,this.eventManager_.listen(this.player_,"loading",()=>{this.playbackStart_()}),this.eventManager_.listen(this.player_,"unloading",()=>{this.playbackEnd_()}),this.pollTimer_=new ae(()=>{if(this.trackings_.size){let i=this.player_.getLoadMode();if(i==dt.LoadMode.DESTROYED||i==dt.LoadMode.NOT_LOADED)return;let r=!1,s=Array.from(this.trackings_.values()),n=this.player_.seekRange();for(let a of s){if(a==this.currentTracking_)continue;let o=a.endTime||a.startTime;if(n.start-o>=1){let c=JSON.stringify(a);this.trackings_.delete(c),r=!0}}r&&this.cuepointsChanged_()}}),this.player_.getAssetUri()&&this.playbackStart_()}configure(e){this.config_=e}stop(){this.playbackEnd_()}release(){this.stop(),this.player_=null,this.eventManager_&&this.eventManager_.release(),this.playbackEventManager_&&this.playbackEventManager_.release(),this.trackingEventManager_&&this.trackingEventManager_.release(),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null)}addMetadata(e){if(!this.startPlaybackIfNeeded_()||!y.validSchemes_.has(e.type))return;let t=e.values.find(n=>n.key=="X-AD-CREATIVE-SIGNALING");if(!t)return;let i=t.data,r;try{r=JSON.parse(window.atob(i))}catch(n){return}if(!r.payload)return;let s=[];for(let n=0;n<r.payload.length;n++){let a=r.payload[n];v.assert(typeof e.startTime=="number","startTime must not be null!");let o=e.startTime+a.start||0,c=a.duration?e.startTime+a.duration:e.endTime;if(a&&a.tracking){let d={startTime:o,endTime:c,tracking:H.createTrackingFromEvents(a.tracking),position:n+1,sequenceLength:r.payload.length};s.push(d)}}this.addTracking_(s)}addRegion(e){if(!this.startPlaybackIfNeeded_()||!y.validSchemes_.has(e.schemeIdUri)||!e.eventNode)return;let t=I.getTextContents(e.eventNode);if(!t)return;let i;try{i=JSON.parse(t)}catch(s){return}if(!i.payload)return;let r=[];for(let s=0;s<i.payload.length;s++){let n=i.payload[s],a=e.startTime+n.start||0,o=n.duration?e.startTime+n.duration:e.endTime;if(n&&n.tracking){let c={startTime:a,endTime:o,tracking:H.createTrackingFromEvents(n.tracking),position:s+1,sequenceLength:i.payload.length};r.push(c)}}this.addTracking_(r)}addTracking_(e){if(!this.playbackStarted_||!e.length)return;if(!this.player_.isFullyLoaded()){this.playbackEventManager_.listenOnce(this.player_,"loaded",()=>{this.addTracking_(e)});return}let t=!1;for(let i of e){let r=JSON.stringify(i);this.trackings_.getOrInsert(r,i)===i&&(t=!0)}t&&this.cuepointsChanged_(),this.setupCurrentTracking_(),this.playbackEventManager_.listen(this.video_,"timeupdate",()=>this.setupCurrentTracking_()),this.pollTimer_&&this.player_.isLive()&&this.pollTimer_.tickEvery(1)}playbackStart_(){if(this.playbackStarted_)return;let e=this.player_.getMediaElement();e&&(this.playbackStarted_=!0,this.video_=e)}startPlaybackIfNeeded_(){return!this.playbackStarted_&&this.player_.getAssetUri()&&this.playbackStart_(),this.playbackStarted_}playbackEnd_(){this.playbackStarted_&&(this.playbackStarted_=!1,this.video_=null,this.playbackEventManager_.removeAll(),this.trackings_.clear(),this.unSetupCurrentTracking_(),this.trackingEventManager_.removeAll(),this.pollTimer_&&this.pollTimer_.stop())}setupCurrentTracking_(){if(!this.trackings_.size||this.currentTracking_||!this.video_.duration)return;let e=this.video_.currentTime;for(let i of this.trackings_.values())if(i.startTime<=e&&i.endTime&&e<=i.endTime&&!this.player_.isEnded()){this.currentTracking_=i;break}if(!this.currentTracking_)return;p.info("Found tracking",this.currentTracking_);let t=!1;if(!this.player_.isLive()){let i=this.player_.seekRange();t=i.start===this.currentTracking_.startTime&&i.end===this.currentTracking_.endTime}this.createBaseSetupTracking_(),t?this.createSingleSetupTracking_():this.createSlidingSetupTracking_()}unSetupCurrentTracking_(e=!1){this.currentTracking_&&(e||(this.sendEvent_(H.AD_SKIPPED),this.sendEvent_(H.AD_STOPPED)),this.trackingEventManager_.removeAll(),this.currentTracking_=null,this.adPaused_=!1)}createBaseSetupTracking_(){v.assert(this.currentTracking_,"AdTrackingInfo must not be null!");let e=new Pn(this.video_,this.currentTracking_);this.sendEvent_(H.AD_IMPRESSION),this.sendEvent_(H.AD_STARTED,new Map().set("ad",e)),this.trackingEventManager_.listen(this.player_,"error",t=>{this.sendEvent_(H.AD_ERROR,new Map().set("originalEvent",t))}),this.adPaused_=!1,this.trackingEventManager_.listen(this.video_,"play",()=>{this.adPaused_&&(this.adPaused_=!1,this.sendEvent_(H.AD_RESUMED))}),this.trackingEventManager_.listen(this.video_,"pause",()=>{this.adPaused_||(this.adPaused_=!0,this.sendEvent_(H.AD_PAUSED))}),this.trackingEventManager_.listen(this.video_,"volumechange",()=>{this.video_.muted?this.sendEvent_(H.AD_MUTED):this.sendEvent_(H.AD_VOLUME_CHANGED)}),this.trackingEventManager_.listen(this.player_,"complete",()=>{this.currentTracking_&&(this.sendEvent_(H.AD_STOPPED),this.sendEvent_(H.AD_COMPLETE),this.unSetupCurrentTracking_(!0))})}createSingleSetupTracking_(){this.trackingEventManager_.listenOnce(this.player_,"firstquartile",()=>{this.sendEvent_(H.AD_FIRST_QUARTILE)}),this.trackingEventManager_.listenOnce(this.player_,"midpoint",()=>{this.sendEvent_(H.AD_MIDPOINT)}),this.trackingEventManager_.listenOnce(this.player_,"thirdquartile",()=>{this.sendEvent_(H.AD_THIRD_QUARTILE)})}createSlidingSetupTracking_(){let e=this.currentTracking_.endTime;if(!this.player_.isLive()||!e){let s=this.player_.seekRange();e=Math.min(s.end,this.currentTracking_.endTime||1/0)}let t=e-this.currentTracking_.startTime,i=-1,r=(s,n)=>(qt.isFloatEqual(s,n)||n>s)&&i<s?(i=s,!0):!1;this.trackingEventManager_.listen(this.video_,"timeupdate",()=>{let n=(this.video_.currentTime-this.currentTracking_.startTime)/t;if(isNaN(n))return;let a=n*100;r(25,a)?this.sendEvent_(H.AD_FIRST_QUARTILE):r(50,a)?this.sendEvent_(H.AD_MIDPOINT):r(75,a)?this.sendEvent_(H.AD_THIRD_QUARTILE):(r(100,a)||a>100)&&(this.sendEvent_(H.AD_STOPPED),this.sendEvent_(H.AD_COMPLETE),this.unSetupCurrentTracking_(!0))}),this.trackingEventManager_.listenOnce(this.video_,"ended",()=>{i<100&&(i=100,this.sendEvent_(H.AD_STOPPED),this.sendEvent_(H.AD_COMPLETE),this.unSetupCurrentTracking_(!0))})}sendEvent_(e,t){p.info("SVTA event",e),this.onEvent_(new L(e,t)),this.processTrackingEvent_(e)}processTrackingEvent_(e){if(this.config_.disableTrackingEvents)return;let t=this.currentTracking_&&this.currentTracking_.tracking;H.fireTrackingEvents(t,e,this.player_.getNetworkingEngine())}cuepointsChanged_(){let e=[];if(this.trackings_.size)for(let t of this.trackings_.values()){let i={start:t.startTime,end:t.endTime};!e.find(s=>i.start==s.start&&i.end==s.end)&&e.push(i)}this.sendEvent_(H.CUEPOINTS_CHANGED,new Map().set("cuepoints",e))}static isValidRegion(e){return!(!y.validSchemes_.has(e.schemeIdUri)||!e.eventNode)}static isValidMetadata(e){return!!y.validSchemes_.has(e.type)}};Nr.validSchemes_=new Set().add("urn:svta:advertising-wg:ad-id-signaling").add("urn:svta:advertising-wg:ad-creative-signaling");/*! @license
|
|
555
555
|
* Shaka Player
|
|
556
556
|
* Copyright 2016 Google LLC
|
|
557
557
|
* SPDX-License-Identifier: Apache-2.0
|
|
558
|
-
*/var kn=class extends Be{constructor(t){super();l(this,"player_");l(this,"interstitialAdManager_");l(this,"csAdManager_");l(this,"mtAdManager_");l(this,"ssAdManager_");l(this,"svtaAdManager_");l(this,"stats_");l(this,"locale_");l(this,"config_");l(this,"currentAd_");l(this,"clientSideAdContainer_");l(this,"serverSideAdContainer_");this.player_=t,this.interstitialAdManager_=null,this.csAdManager_=null,this.mtAdManager_=null,this.ssAdManager_=null,this.svtaAdManager_=null,this.stats_=new Os,this.locale_=navigator.language,this.config_=null,this.currentAd_=null,this.clientSideAdContainer_=null,this.serverSideAdContainer_=null}setLocale(t){this.locale_=t}setContainers(t,i){this.clientSideAdContainer_=t,this.serverSideAdContainer_=i}configure(t){this.config_=t,this.interstitialAdManager_&&this.interstitialAdManager_.configure(this.config_),this.csAdManager_&&this.csAdManager_.configure(this.config_),this.ssAdManager_&&this.ssAdManager_.configure(this.config_),this.svtaAdManager_&&this.svtaAdManager_.configure(this.config_),this.mtAdManager_&&this.mtAdManager_.configure(this.config_)}release(){this.csAdManager_&&(this.csAdManager_.release(),this.csAdManager_=null),this.ssAdManager_&&(this.ssAdManager_.release(),this.ssAdManager_=null),this.mtAdManager_&&(this.mtAdManager_.release(),this.mtAdManager_=null),this.interstitialAdManager_&&(this.interstitialAdManager_.release(),this.interstitialAdManager_=null),this.svtaAdManager_&&(this.svtaAdManager_.release(),this.svtaAdManager_=null),super.release()}onAssetUnload(){this.csAdManager_&&(this.csAdManager_.release(),this.csAdManager_=null),this.ssAdManager_&&this.ssAdManager_.stop(),this.mtAdManager_&&this.mtAdManager_.stop(),this.interstitialAdManager_&&this.interstitialAdManager_.stop(),this.svtaAdManager_&&this.svtaAdManager_.stop(),this.currentAd_&&(this.processAndDispatchEvent_(new
|
|
558
|
+
*/var kn=class extends Be{constructor(t){super();l(this,"player_");l(this,"interstitialAdManager_");l(this,"csAdManager_");l(this,"mtAdManager_");l(this,"ssAdManager_");l(this,"svtaAdManager_");l(this,"stats_");l(this,"locale_");l(this,"config_");l(this,"currentAd_");l(this,"clientSideAdContainer_");l(this,"serverSideAdContainer_");this.player_=t,this.interstitialAdManager_=null,this.csAdManager_=null,this.mtAdManager_=null,this.ssAdManager_=null,this.svtaAdManager_=null,this.stats_=new Os,this.locale_=navigator.language,this.config_=null,this.currentAd_=null,this.clientSideAdContainer_=null,this.serverSideAdContainer_=null}setLocale(t){this.locale_=t}setContainers(t,i){this.clientSideAdContainer_=t,this.serverSideAdContainer_=i}configure(t){this.config_=t,this.interstitialAdManager_&&this.interstitialAdManager_.configure(this.config_),this.csAdManager_&&this.csAdManager_.configure(this.config_),this.ssAdManager_&&this.ssAdManager_.configure(this.config_),this.svtaAdManager_&&this.svtaAdManager_.configure(this.config_),this.mtAdManager_&&this.mtAdManager_.configure(this.config_)}release(){this.csAdManager_&&(this.csAdManager_.release(),this.csAdManager_=null),this.ssAdManager_&&(this.ssAdManager_.release(),this.ssAdManager_=null),this.mtAdManager_&&(this.mtAdManager_.release(),this.mtAdManager_=null),this.interstitialAdManager_&&(this.interstitialAdManager_.release(),this.interstitialAdManager_=null),this.svtaAdManager_&&(this.svtaAdManager_.release(),this.svtaAdManager_=null),super.release()}onAssetUnload(){this.csAdManager_&&(this.csAdManager_.release(),this.csAdManager_=null),this.ssAdManager_&&this.ssAdManager_.stop(),this.mtAdManager_&&this.mtAdManager_.stop(),this.interstitialAdManager_&&this.interstitialAdManager_.stop(),this.svtaAdManager_&&this.svtaAdManager_.stop(),this.currentAd_&&(this.processAndDispatchEvent_(new L(H.AD_STOPPED)),this.processAndDispatchEvent_(new L(H.AD_CONTENT_ATTACH_REQUESTED))),this.stats_=new Os}initClientSide_(t){if(!window.google||!google.ima||!google.ima.AdsLoader)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.CS_IMA_SDK_MISSING);if(this.csAdManager_&&this.csAdManager_.release(),!this.clientSideAdContainer_)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.CS_AD_CONTAINER_MISSING);let i=this.player_.getMediaElement();v.assert(i,"Video must not be null!"),this.csAdManager_=new En(this.clientSideAdContainer_,i,this.locale_,t,r=>this.processAndDispatchEvent_(r)),v.assert(this.config_,"Config must not be null!"),this.csAdManager_.configure(this.config_)}requestClientSideAds(t,i){this.csAdManager_||this.initClientSide_(i),this.csAdManager_.requestAds(t)}updateClientSideAdsRenderingSettings(t){this.csAdManager_||this.initClientSide_(t),this.csAdManager_.updateAdsRenderingSettings(t)}initServerSide_(){if(!window.google||!google.ima||!google.ima.dai)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.SS_IMA_SDK_MISSING);if(this.ssAdManager_&&this.ssAdManager_.release(),!this.serverSideAdContainer_)throw new h(h.Severity.CRITICAL,h.Category.ADS,h.Code.SS_AD_CONTAINER_MISSING);let t=this.player_.getMediaElement();v.assert(t,"Video must not be null!"),this.ssAdManager_=new Rn(this.serverSideAdContainer_,t,this.locale_,i=>this.processAndDispatchEvent_(i)),v.assert(this.config_,"Config must not be null!"),this.ssAdManager_.configure(this.config_)}requestServerSideStream(t,i=""){this.ssAdManager_||this.initServerSide_(),t.adTagParameters||(t.adTagParameters={});let r=t.adTagParameters;return(r.mpt||r.mpv)&&p.alwaysWarn('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.'),t.adTagParameters.mpt="shaka-player",t.adTagParameters.mpv=dt.version,this.ssAdManager_.streamRequest(t,i)}replaceServerSideAdTagParameters(t){this.ssAdManager_||this.initServerSide_(),(t.mpt||t.mpv)&&p.alwaysWarn('You have attempted to set "mpt" and/or "mpv" parameters of the ad tag. Please note that those parameters are used for Shaka adoption tracking and will be overridden.'),t.mpt="Shaka Player",t.mpv=dt.version,this.ssAdManager_.replaceAdTagParameters(t)}initMediaTailor_(){this.mtAdManager_&&this.mtAdManager_.release();let t=this.serverSideAdContainer_;t||p.warning("Init Media Tailor without a container causes overlays to not be displayed.");let i=this.player_.getMediaElement();v.assert(i,"Video must not be null!");let r=this.player_.getNetworkingEngine();v.assert(r,"There should be a net engine."),this.mtAdManager_=new xn(t,r,i,s=>this.processAndDispatchEvent_(s)),v.assert(this.config_,"Config must not be null!"),this.mtAdManager_.configure(this.config_)}requestMediaTailorStream(t,i,r=""){return this.mtAdManager_||this.initMediaTailor_(),this.mtAdManager_.streamRequest(t,i,r)}addMediaTailorTrackingUrl(t){this.mtAdManager_||this.initMediaTailor_(),this.mtAdManager_.addTrackingUrl(t)}initInterstitial_(){let t=this.clientSideAdContainer_;t||p.info("Initializing interstitials without ad container"),this.interstitialAdManager_&&this.interstitialAdManager_.release(),this.interstitialAdManager_=new Cn(t,this.player_,i=>this.processAndDispatchEvent_(i)),v.assert(this.config_,"Config must not be null!"),this.interstitialAdManager_.configure(this.config_)}addCustomInterstitial(t){this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_.addInterstitials([t])}addAdUrlInterstitial(t){return this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_.addAdUrlInterstitial(t)}getInterstitialPlayer(){return this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_.getPlayer()}initSVTA_(){this.svtaAdManager_&&this.svtaAdManager_.release(),this.svtaAdManager_=new Nr(this.player_,t=>this.processAndDispatchEvent_(t)),v.assert(this.config_,"Config must not be null!"),this.svtaAdManager_.configure(this.config_)}getCuePoints(){let t=[];return this.ssAdManager_&&(t=t.concat(this.ssAdManager_.getCuePoints())),this.mtAdManager_&&(t=t.concat(this.mtAdManager_.getCuePoints())),t}getStats(){return this.stats_.getBlob()}onManifestUpdated(t){this.mtAdManager_&&this.mtAdManager_.onManifestUpdated(t)}onHlsTimedMetadata(t,i){this.ssAdManager_&&this.ssAdManager_.onTimedMetadata("ID3",t.data,i)}onCueMetadataChange(t){this.ssAdManager_&&this.ssAdManager_.onCueMetadataChange(t)}async onHLSMetadata(t){if(t.type=="com.apple.quicktime.HLS"){if(this.config_&&this.config_.disableHLSInterstitial)return;this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_&&await this.interstitialAdManager_.addMetadata(t)}else if(t.type=="com.apple.hls.preload"){if(this.config_&&this.config_.disableHLSInterstitial)return;this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_&&this.interstitialAdManager_.addPreloadMetadata(t)}else Nr.isValidMetadata(t)&&(this.svtaAdManager_||this.initSVTA_(),this.svtaAdManager_.addMetadata(t))}onDASHMetadata(t){if(t.schemeIdUri=="urn:google:dai:2018"){if(this.ssAdManager_){let r=t.schemeIdUri,s=t.eventNode?t.eventNode.attributes.messageData:null,n=t.startTime;this.ssAdManager_.onTimedMetadata(r,s,n)}}else if(Ns.isInterstitialRegion(t)){if(this.config_&&this.config_.disableDASHInterstitial)return;if(this.interstitialAdManager_||this.initInterstitial_(),this.interstitialAdManager_){let r=Ns.parseRegion(t);r&&this.interstitialAdManager_.addInterstitials([r])}}else Nr.isValidRegion(t)&&(this.svtaAdManager_||this.initSVTA_(),this.svtaAdManager_.addRegion(t))}getCurrentAd(){return this.currentAd_}processAndDispatchEvent_(t){if(t&&t.type)switch(t.type){case H.ADS_LOADED:{let i=t.loadTime;this.stats_.addLoadTime(i);break}case H.AD_STARTED:{this.stats_.incrementStarted(),this.currentAd_=t.ad,this.currentAd_&&!this.currentAd_.isLinear()&&this.stats_.incrementOverlayAds();break}case H.AD_STOPPED:this.currentAd_=null;break;case H.AD_COMPLETE:this.stats_.incrementPlayedCompletely();break;case H.AD_SKIPPED:this.stats_.incrementSkipped();break;case H.AD_ERROR:this.stats_.incrementErrors();break}this.dispatchEvent(t)}};dt.setAdManagerFactory(y=>new kn(y));/*! @license
|
|
559
559
|
* Shaka Player
|
|
560
560
|
* Copyright 2016 Google LLC
|
|
561
561
|
* SPDX-License-Identifier: Apache-2.0
|
|
562
|
-
*/var ft=class ft{static serialize(e){return JSON.stringify(e,(t,i)=>{if(typeof i=="function")return;let r=i instanceof
|
|
562
|
+
*/var ft=class ft{static serialize(e){return JSON.stringify(e,(t,i)=>{if(typeof i=="function")return;let r=i instanceof L;if(i instanceof Event||r){let s={};for(let n in i){let a=i[n];a&&typeof a=="object"?n=="detail"?s[n]=a:a instanceof Event||a instanceof L?s[n]=ft.unpackEvent_(a):r&&Array.isArray(a)&&(s[n]=a):n in Event||(s[n]=a)}return s}return i instanceof Error?ft.unpackError_(i):i instanceof TimeRanges?ft.unpackTimeRanges_(i):ArrayBuffer.isView(i)&&i.BYTES_PER_ELEMENT===1?ft.unpackUint8Array_(i):typeof i=="number"?isNaN(i)?"NaN":isFinite(i)?i:i<0?"-Infinity":"Infinity":i})}static deserialize(e){return JSON.parse(e,(t,i)=>i=="NaN"?NaN:i=="-Infinity"?-1/0:i=="Infinity"?1/0:i&&typeof i=="object"&&i.__type__=="TimeRanges"?ft.simulateTimeRanges_(i):i&&typeof i=="object"&&i.__type__=="Uint8Array"?ft.makeUint8Array_(i):i&&typeof i=="object"&&i.__type__=="Error"?ft.makeError_(i):i&&typeof i=="object"&&i.__type__=="Event"?ft.makeEvent_(i):i)}static unpackTimeRanges_(e){let t={__type__:"TimeRanges",length:e.length,start:[],end:[]};for(let{start:i,end:r}of Je.getBufferedInfo(e))t.start.push(i),t.end.push(r);return t}static simulateTimeRanges_(e){return{length:e.length,start:t=>e.start[t],end:t=>e.end[t]}}static unpackUint8Array_(e){return{__type__:"Uint8Array",entries:Array.from(e)}}static makeUint8Array_(e){return new Uint8Array(e.entries)}static unpackEvent_(e){return{__type__:"Event",event:ft.serialize(e)}}static makeEvent_(e){return ft.deserialize(e.event)}static unpackError_(e){let t=new Set(["name","message","stack"]);for(let r in e)t.add(r);for(let r of Object.getOwnPropertyNames(e))t.add(r);let i={};for(let r of t)i[r]=e[r];return{__type__:"Error",contents:i}}static makeError_(e){let t=e.contents,i=new Error(t.message);for(let r in t)i[r]=t[r];return i}};l(ft,"VideoEvents",["ended","play","playing","pause","pausing","ratechange","seeked","seeking","timeupdate","volumechange"]),l(ft,"VideoAttributes",["buffered","currentTime","duration","ended","loop","muted","paused","playbackRate","seeking","videoHeight","videoWidth","volume"]),l(ft,"VideoInitStateAttributes",["loop","playbackRate"]),l(ft,"VideoVoidMethods",["pause","play"]),l(ft,"PlayerInitState",[["getNonDefaultConfiguration","configure","getConfigurationForLowLatency","configurationForLowLatency"]]),l(ft,"PlayerVoidMethods",["cancelTrickPlay","configure","configurationForLowLatency","resetConfiguration","retryStreaming","selectAudioTrack","selectTextTrack","selectVariantTrack","selectVideoTrack","trickPlay","updateStartTime","goToLive","useTrickPlayTrackIfAvailable","setMaxHardwareResolution","renewLicense","retryLicensing"]),l(ft,"PlayerPromiseMethods",["addChaptersTrack","addTextTrackAsync","addThumbnailsTrack","getAllThumbnails","getChaptersAsync","getThumbnails","attach","attachCanvas","detach","load","unload"]),l(ft,"AdManagerVoidMethods",["setLocale","configure","requestClientSideAds","updateClientSideAdsRenderingSettings","addMediaTailorTrackingUrl","replaceServerSideAdTagParameters","addCustomInterstitial"]),l(ft,"AdManagerPromiseMethods",["requestMediaTailorStream","requestServerSideStream","addAdUrlInterstitial"]),l(ft,"CurrentAdVoidMethods",["skip","play","pause","setVolume","setMuted","resize"]),l(ft,"SHAKA_MESSAGE_NAMESPACE","urn:x-cast:com.google.shaka.v2"),l(ft,"GENERIC_MESSAGE_NAMESPACE","urn:x-cast:com.google.cast.media");var Me=ft;Me.PlayerGetterMethods=new Map().set("getAssetUri",2).set("getMimeType",2).set("getBufferFullness",1).set("getBufferedInfo",2).set("getExpiration",2).set("getKeyStatuses",2).set("getPlaybackRate",2).set("isAudioOnly",10).set("isBuffering",1).set("isInProgress",1).set("isLive",10).set("isDynamic",10).set("isVideoOnly",10).set("keySystem",10).set("seekRange",1).set("getLoadMode",10).set("getManifestType",10).set("isFullyLoaded",1).set("isEnded",1).set("getBandwidthEstimate",1).set("isRemotePlayback",1);Me.LargePlayerGetterMethods=new Map().set("getConfiguration",4).set("getNonDefaultConfiguration",4).set("getConfigurationForLowLatency",4).set("getStats",5).set("getAudioTracks",2).set("getChaptersTracks",2).set("getImageTracks",2).set("getVideoTracks",2).set("getTextTracks",2).set("getVariantTracks",2).set("getFetchedPlaybackInfo",2).set("getAllMetadataRegions",1).set("getAllEmsgRegions",1).set("getAllTimelineRegions",1);Me.PlayerGetterMethodsThatRequireLive=new Map().set("getPlayheadTimeAsDate",1).set("getPresentationStartTimeAsDate",20).set("getSegmentAvailabilityDuration",20).set("getLiveLatency",1);Me.LargeAdManagerGetterMethods=new Map().set("getCuePoints",4).set("getStats",5);Me.CurrentAdGetterMethods=new Map().set("needsSkipUI",20).set("isClientRendering",20).set("hasCustomClick",20).set("isUsingAnotherMediaElement",20).set("getDuration",1).set("getMinSuggestedDuration",1).set("getRemainingTime",1).set("getTimeUntilSkippable",1).set("isPaused",1).set("isSkippable",1).set("canSkipNow",1).set("getVolume",1).set("isMuted",1).set("isLinear",20).set("getSequenceLength",20).set("getPositionInSequence",20).set("getTitle",20).set("getDescription",20).set("getVastMediaBitrate",20).set("getVastMediaHeight",20).set("getVastMediaWidth",20).set("getVastAdId",20).set("getAdId",20).set("getCreativeAdId",20).set("getAdvertiserName",20).set("getMediaUrl",20).set("getTimeOffset",20).set("getPodIndex",20);/*! @license
|
|
563
563
|
* Shaka Player
|
|
564
564
|
* Copyright 2016 Google LLC
|
|
565
565
|
* SPDX-License-Identifier: Apache-2.0
|
|
566
|
-
*/var Le=class Le{constructor(e,t,i,r,s,n,a){l(this,"receiverAppId_");l(this,"androidReceiverCompatible_");l(this,"statusChangeTimer_");l(this,"onFirstCastStateUpdate_");l(this,"hasJoinedExistingSession_");l(this,"onRemoteEvent_");l(this,"onResumeLocal_");l(this,"onInitStateRequired_");l(this,"apiReady_");l(this,"isCasting_");l(this,"receiverName_");l(this,"appData_");l(this,"onConnectionStatusChangedBound_");l(this,"onMessageReceivedBound_");l(this,"cachedProperties_");l(this,"nextAsyncCallId_");l(this,"asyncCallPromises_");l(this,"castPromise_");this.receiverAppId_=e,this.androidReceiverCompatible_=a,this.statusChangeTimer_=new ae(t),this.onFirstCastStateUpdate_=i,this.hasJoinedExistingSession_=!1,this.onRemoteEvent_=r,this.onResumeLocal_=s,this.onInitStateRequired_=n,this.apiReady_=!1,this.isCasting_=!1,this.receiverName_="",this.appData_=null,this.onConnectionStatusChangedBound_=()=>this.onConnectionStatusChanged_(),this.onMessageReceivedBound_=(o,c)=>this.onMessageReceived_(o,c),this.cachedProperties_={video:{},player:{},adManager:{},currentAd:{}},this.nextAsyncCallId_=0,this.asyncCallPromises_=new Map,this.castPromise_=null,Le.instances_.add(this)}destroy(){return Le.instances_.delete(this),this.rejectAllPromises_(),Le.session_&&this.removeListeners_(),this.statusChangeTimer_&&(this.statusChangeTimer_.stop(),this.statusChangeTimer_=null),this.onRemoteEvent_=null,this.onResumeLocal_=null,this.apiReady_=!1,this.isCasting_=!1,this.appData_=null,this.cachedProperties_=null,this.asyncCallPromises_=null,this.castPromise_=null,this.onConnectionStatusChangedBound_=null,this.onMessageReceivedBound_=null,Promise.resolve()}apiReady(){return this.apiReady_}hasReceivers(){return Le.hasReceivers_}isCasting(){return this.isCasting_}receiverName(){return this.receiverName_}hasRemoteProperties(){return Object.keys(this.cachedProperties_.video).length!=0}init(){if(!this.receiverAppId_.length)return;if(!window.chrome||!chrome.cast||!chrome.cast.isAvailable){window.__onGCastApiAvailable!==Le.onGCastApiAvailable_&&(Le.__onGCastApiAvailable_=window.__onGCastApiAvailable||null,window.__onGCastApiAvailable=Le.onGCastApiAvailable_);return}this.apiReady_=!0,this.statusChangeTimer_.tickNow();let e=new chrome.cast.SessionRequest(this.receiverAppId_,[],null,this.androidReceiverCompatible_,null),t=new chrome.cast.ApiConfig(e,r=>Le.onExistingSessionJoined_(r),r=>Le.onReceiverStatusChanged_(r),"origin_scoped");chrome.cast.initialize(t,()=>{p.debug("CastSender: init")},r=>{p.error("CastSender: init error",r)}),Le.hasReceivers_&&this.statusChangeTimer_.tickAfter(Le.STATUS_DELAY);let i=Le.session_;i&&i.status!=chrome.cast.SessionStatus.STOPPED?(p.debug("CastSender: re-using existing connection"),this.onExistingSessionJoined_(i)):Le.session_=null}setAppData(e){this.appData_=e,this.isCasting_&&this.sendMessage_({type:"appData",appData:this.appData_})}async cast(){if(!this.apiReady_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.CAST_API_UNAVAILABLE);if(!Le.hasReceivers_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.NO_CAST_RECEIVERS);if(this.isCasting_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.ALREADY_CASTING);this.castPromise_=Promise.withResolvers(),chrome.cast.requestSession(e=>this.onSessionInitiated_(e),e=>this.onConnectionError_(e)),await this.castPromise_.promise}showDisconnectDialog(){this.isCasting_&&chrome.cast.requestSession(e=>this.onSessionInitiated_(e),e=>this.onConnectionError_(e))}forceDisconnect(){if(this.isCasting_){if(this.rejectAllPromises_(),Le.session_){this.removeListeners_();try{Le.session_.stop(()=>{},()=>{})}catch(e){}Le.session_=null}this.onConnectionStatusChanged_()}}get(e,t){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name");let r={video:{voidMethods:Me.VideoVoidMethods},player:{voidMethods:Me.PlayerVoidMethods,promiseMethods:Me.PlayerPromiseMethods,getterMethods:[Me.PlayerGetterMethods,Me.LargePlayerGetterMethods],requiresLiveMap:Me.PlayerGetterMethodsThatRequireLive},adManager:{voidMethods:Me.AdManagerVoidMethods,promiseMethods:Me.AdManagerPromiseMethods,getterMethods:[Me.LargeAdManagerGetterMethods]},currentAd:{voidMethods:Me.CurrentAdVoidMethods,getterMethods:[Me.CurrentAdGetterMethods]}}[e];if(r.requiresLiveMap&&r.requiresLiveMap.has(t)){let s=this.get("player","isLive")();if(v.assert(s,t+" should be called on a live stream!"),!s)return()=>{}}return r.voidMethods&&r.voidMethods.includes(t)?(...s)=>this.remoteCall_(e,t,...s):r.promiseMethods&&r.promiseMethods.includes(t)?(...s)=>this.remoteAsyncCall_(e,t,...s):r.getterMethods&&r.getterMethods.some(s=>s.has(t))?()=>this.propertyGetter_(e,t):this.propertyGetter_(e,t)}set(e,t,i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.cachedProperties_[e][t]=i,this.sendMessage_({type:"set",targetName:e,property:t,value:i})}onSessionInitiated_(e){p.debug("CastSender: onSessionInitiated");let t=this.onInitStateRequired_();this.onSessionCreated_(e),this.sendMessage_({type:"init",initState:t,appData:this.appData_}),this.castPromise_.resolve()}onConnectionError_(e){let t=h.Code.UNEXPECTED_CAST_ERROR;switch(e.code){case"cancel":t=h.Code.CAST_CANCELED_BY_USER;break;case"timeout":t=h.Code.CAST_CONNECTION_TIMED_OUT;break;case"receiver_unavailable":t=h.Code.CAST_RECEIVER_APP_UNAVAILABLE;break}this.castPromise_.reject(new h(h.Severity.CRITICAL,h.Category.CAST,t,e))}propertyGetter_(e,t){return v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.cachedProperties_[e][t]}remoteCall_(e,t,...i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.sendMessage_({type:"call",targetName:e,methodName:t,args:i})}remoteAsyncCall_(e,t,...i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name");let r=Promise.withResolvers(),s=this.nextAsyncCallId_.toString();this.nextAsyncCallId_++,this.asyncCallPromises_.set(s,r);try{this.sendMessage_({type:"asyncCall",targetName:e,methodName:t,args:i,id:s})}catch(n){r.reject(n)}return r.promise}static onExistingSessionJoined_(e){for(let t of Le.instances_)t.onExistingSessionJoined_(e)}onExistingSessionJoined_(e){p.debug("CastSender: onExistingSessionJoined"),this.castPromise_=Promise.withResolvers(),this.hasJoinedExistingSession_=!0,this.onSessionInitiated_(e)}static onReceiverStatusChanged_(e){for(let t of Le.instances_)t.onReceiverStatusChanged_(e)}onReceiverStatusChanged_(e){p.debug("CastSender: receiver status",e),Le.hasReceivers_=e=="available",this.statusChangeTimer_.tickNow()}onSessionCreated_(e){Le.session_=e,e.addUpdateListener(this.onConnectionStatusChangedBound_),e.addMessageListener(Me.SHAKA_MESSAGE_NAMESPACE,this.onMessageReceivedBound_),this.onConnectionStatusChanged_()}removeListeners_(){let e=Le.session_;e.removeUpdateListener(this.onConnectionStatusChangedBound_),e.removeMessageListener(Me.SHAKA_MESSAGE_NAMESPACE,this.onMessageReceivedBound_)}onConnectionStatusChanged_(){let e=Le.session_?Le.session_.status=="connected":!1;if(p.info("CastSender: connection status",e),this.isCasting_&&!e){this.onResumeLocal_();for(let t in this.cachedProperties_)this.cachedProperties_[t]={};this.rejectAllPromises_()}this.isCasting_=e,this.receiverName_=e?Le.session_.receiver.friendlyName:"",this.statusChangeTimer_.tickNow(),this.receiverName_&&p.info("CastSender: connected to",this.receiverName_)}rejectAllPromises_(){if(this.asyncCallPromises_)for(let e of this.asyncCallPromises_.keys()){let t=this.asyncCallPromises_.get(e);this.asyncCallPromises_.delete(e),t.reject(new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.LOAD_INTERRUPTED))}}onMessageReceived_(e,t){let i=Me.deserialize(t);switch(p.v2("CastSender: message",i),i.type){case"event":{let r=i.targetName,s=i.event,n=
|
|
566
|
+
*/var Le=class Le{constructor(e,t,i,r,s,n,a){l(this,"receiverAppId_");l(this,"androidReceiverCompatible_");l(this,"statusChangeTimer_");l(this,"onFirstCastStateUpdate_");l(this,"hasJoinedExistingSession_");l(this,"onRemoteEvent_");l(this,"onResumeLocal_");l(this,"onInitStateRequired_");l(this,"apiReady_");l(this,"isCasting_");l(this,"receiverName_");l(this,"appData_");l(this,"onConnectionStatusChangedBound_");l(this,"onMessageReceivedBound_");l(this,"cachedProperties_");l(this,"nextAsyncCallId_");l(this,"asyncCallPromises_");l(this,"castPromise_");this.receiverAppId_=e,this.androidReceiverCompatible_=a,this.statusChangeTimer_=new ae(t),this.onFirstCastStateUpdate_=i,this.hasJoinedExistingSession_=!1,this.onRemoteEvent_=r,this.onResumeLocal_=s,this.onInitStateRequired_=n,this.apiReady_=!1,this.isCasting_=!1,this.receiverName_="",this.appData_=null,this.onConnectionStatusChangedBound_=()=>this.onConnectionStatusChanged_(),this.onMessageReceivedBound_=(o,c)=>this.onMessageReceived_(o,c),this.cachedProperties_={video:{},player:{},adManager:{},currentAd:{}},this.nextAsyncCallId_=0,this.asyncCallPromises_=new Map,this.castPromise_=null,Le.instances_.add(this)}destroy(){return Le.instances_.delete(this),this.rejectAllPromises_(),Le.session_&&this.removeListeners_(),this.statusChangeTimer_&&(this.statusChangeTimer_.stop(),this.statusChangeTimer_=null),this.onRemoteEvent_=null,this.onResumeLocal_=null,this.apiReady_=!1,this.isCasting_=!1,this.appData_=null,this.cachedProperties_=null,this.asyncCallPromises_=null,this.castPromise_=null,this.onConnectionStatusChangedBound_=null,this.onMessageReceivedBound_=null,Promise.resolve()}apiReady(){return this.apiReady_}hasReceivers(){return Le.hasReceivers_}isCasting(){return this.isCasting_}receiverName(){return this.receiverName_}hasRemoteProperties(){return Object.keys(this.cachedProperties_.video).length!=0}init(){if(!this.receiverAppId_.length)return;if(!window.chrome||!chrome.cast||!chrome.cast.isAvailable){window.__onGCastApiAvailable!==Le.onGCastApiAvailable_&&(Le.__onGCastApiAvailable_=window.__onGCastApiAvailable||null,window.__onGCastApiAvailable=Le.onGCastApiAvailable_);return}this.apiReady_=!0,this.statusChangeTimer_.tickNow();let e=new chrome.cast.SessionRequest(this.receiverAppId_,[],null,this.androidReceiverCompatible_,null),t=new chrome.cast.ApiConfig(e,r=>Le.onExistingSessionJoined_(r),r=>Le.onReceiverStatusChanged_(r),"origin_scoped");chrome.cast.initialize(t,()=>{p.debug("CastSender: init")},r=>{p.error("CastSender: init error",r)}),Le.hasReceivers_&&this.statusChangeTimer_.tickAfter(Le.STATUS_DELAY);let i=Le.session_;i&&i.status!=chrome.cast.SessionStatus.STOPPED?(p.debug("CastSender: re-using existing connection"),this.onExistingSessionJoined_(i)):Le.session_=null}setAppData(e){this.appData_=e,this.isCasting_&&this.sendMessage_({type:"appData",appData:this.appData_})}async cast(){if(!this.apiReady_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.CAST_API_UNAVAILABLE);if(!Le.hasReceivers_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.NO_CAST_RECEIVERS);if(this.isCasting_)throw new h(h.Severity.RECOVERABLE,h.Category.CAST,h.Code.ALREADY_CASTING);this.castPromise_=Promise.withResolvers(),chrome.cast.requestSession(e=>this.onSessionInitiated_(e),e=>this.onConnectionError_(e)),await this.castPromise_.promise}showDisconnectDialog(){this.isCasting_&&chrome.cast.requestSession(e=>this.onSessionInitiated_(e),e=>this.onConnectionError_(e))}forceDisconnect(){if(this.isCasting_){if(this.rejectAllPromises_(),Le.session_){this.removeListeners_();try{Le.session_.stop(()=>{},()=>{})}catch(e){}Le.session_=null}this.onConnectionStatusChanged_()}}get(e,t){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name");let r={video:{voidMethods:Me.VideoVoidMethods},player:{voidMethods:Me.PlayerVoidMethods,promiseMethods:Me.PlayerPromiseMethods,getterMethods:[Me.PlayerGetterMethods,Me.LargePlayerGetterMethods],requiresLiveMap:Me.PlayerGetterMethodsThatRequireLive},adManager:{voidMethods:Me.AdManagerVoidMethods,promiseMethods:Me.AdManagerPromiseMethods,getterMethods:[Me.LargeAdManagerGetterMethods]},currentAd:{voidMethods:Me.CurrentAdVoidMethods,getterMethods:[Me.CurrentAdGetterMethods]}}[e];if(r.requiresLiveMap&&r.requiresLiveMap.has(t)){let s=this.get("player","isLive")();if(v.assert(s,t+" should be called on a live stream!"),!s)return()=>{}}return r.voidMethods&&r.voidMethods.includes(t)?(...s)=>this.remoteCall_(e,t,...s):r.promiseMethods&&r.promiseMethods.includes(t)?(...s)=>this.remoteAsyncCall_(e,t,...s):r.getterMethods&&r.getterMethods.some(s=>s.has(t))?()=>this.propertyGetter_(e,t):this.propertyGetter_(e,t)}set(e,t,i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.cachedProperties_[e][t]=i,this.sendMessage_({type:"set",targetName:e,property:t,value:i})}onSessionInitiated_(e){p.debug("CastSender: onSessionInitiated");let t=this.onInitStateRequired_();this.onSessionCreated_(e),this.sendMessage_({type:"init",initState:t,appData:this.appData_}),this.castPromise_.resolve()}onConnectionError_(e){let t=h.Code.UNEXPECTED_CAST_ERROR;switch(e.code){case"cancel":t=h.Code.CAST_CANCELED_BY_USER;break;case"timeout":t=h.Code.CAST_CONNECTION_TIMED_OUT;break;case"receiver_unavailable":t=h.Code.CAST_RECEIVER_APP_UNAVAILABLE;break}this.castPromise_.reject(new h(h.Severity.CRITICAL,h.Category.CAST,t,e))}propertyGetter_(e,t){return v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.cachedProperties_[e][t]}remoteCall_(e,t,...i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name"),this.sendMessage_({type:"call",targetName:e,methodName:t,args:i})}remoteAsyncCall_(e,t,...i){v.assert(e=="video"||e=="player"||e=="adManager"||e=="currentAd","Unexpected target name");let r=Promise.withResolvers(),s=this.nextAsyncCallId_.toString();this.nextAsyncCallId_++,this.asyncCallPromises_.set(s,r);try{this.sendMessage_({type:"asyncCall",targetName:e,methodName:t,args:i,id:s})}catch(n){r.reject(n)}return r.promise}static onExistingSessionJoined_(e){for(let t of Le.instances_)t.onExistingSessionJoined_(e)}onExistingSessionJoined_(e){p.debug("CastSender: onExistingSessionJoined"),this.castPromise_=Promise.withResolvers(),this.hasJoinedExistingSession_=!0,this.onSessionInitiated_(e)}static onReceiverStatusChanged_(e){for(let t of Le.instances_)t.onReceiverStatusChanged_(e)}onReceiverStatusChanged_(e){p.debug("CastSender: receiver status",e),Le.hasReceivers_=e=="available",this.statusChangeTimer_.tickNow()}onSessionCreated_(e){Le.session_=e,e.addUpdateListener(this.onConnectionStatusChangedBound_),e.addMessageListener(Me.SHAKA_MESSAGE_NAMESPACE,this.onMessageReceivedBound_),this.onConnectionStatusChanged_()}removeListeners_(){let e=Le.session_;e.removeUpdateListener(this.onConnectionStatusChangedBound_),e.removeMessageListener(Me.SHAKA_MESSAGE_NAMESPACE,this.onMessageReceivedBound_)}onConnectionStatusChanged_(){let e=Le.session_?Le.session_.status=="connected":!1;if(p.info("CastSender: connection status",e),this.isCasting_&&!e){this.onResumeLocal_();for(let t in this.cachedProperties_)this.cachedProperties_[t]={};this.rejectAllPromises_()}this.isCasting_=e,this.receiverName_=e?Le.session_.receiver.friendlyName:"",this.statusChangeTimer_.tickNow(),this.receiverName_&&p.info("CastSender: connected to",this.receiverName_)}rejectAllPromises_(){if(this.asyncCallPromises_)for(let e of this.asyncCallPromises_.keys()){let t=this.asyncCallPromises_.get(e);this.asyncCallPromises_.delete(e),t.reject(new h(h.Severity.RECOVERABLE,h.Category.PLAYER,h.Code.LOAD_INTERRUPTED))}}onMessageReceived_(e,t){let i=Me.deserialize(t);switch(p.v2("CastSender: message",i),i.type){case"event":{let r=i.targetName,s=i.event,n=L.fromRealEvent(s);this.onRemoteEvent_(r,n);break}case"update":{let r=i.update;for(let s in r){let n=this.cachedProperties_[s]||{};for(let a in r[s])n[a]=r[s][a]}this.hasJoinedExistingSession_&&(this.onFirstCastStateUpdate_(),this.hasJoinedExistingSession_=!1);break}case"asyncComplete":{let r=i.id,s=i.error,n=i.res,a=this.asyncCallPromises_.get(r);if(this.asyncCallPromises_.delete(r),v.assert(a,"Unexpected async id"),!a)break;if(s){let o=new h(s.severity,s.category,s.code);for(let c in s)o[c]=s[c];a.reject(o)}else a.resolve(n);break}}}sendMessage_(e){let t=Me.serialize(e),i=Le.session_;try{i.sendMessage(Me.SHAKA_MESSAGE_NAMESPACE,t,()=>{},p.error)}catch(r){p.error("Cast session sendMessage threw",r);let s=new h(h.Severity.CRITICAL,h.Category.CAST,h.Code.CAST_CONNECTION_TIMED_OUT,r),n=new L("error",new Map().set("detail",s));throw this.onRemoteEvent_("player",n),this.forceDisconnect(),s}}};l(Le,"STATUS_DELAY",.02),l(Le,"hasReceivers_",!1),l(Le,"session_",null),l(Le,"__onGCastApiAvailable_",null),l(Le,"instances_",new Set),l(Le,"onSdkLoaded_",e=>{if(e)for(let t of Le.instances_)t.init()}),l(Le,"onGCastApiAvailable_",e=>{Le.__onGCastApiAvailable_?window.__onGCastApiAvailable=Le.__onGCastApiAvailable_:delete window.__onGCastApiAvailable,Le.__onGCastApiAvailable_=null,Le.onSdkLoaded_(e),typeof window.__onGCastApiAvailable=="function"&&window.__onGCastApiAvailable(e)});var Fs=Le;/*! @license
|
|
567
567
|
* Shaka Player
|
|
568
568
|
* Copyright 2016 Google LLC
|
|
569
569
|
* SPDX-License-Identifier: Apache-2.0
|
|
570
|
-
*/var ro=class extends Be{constructor(t,i,r,s=!1){super();l(this,"localVideo_");l(this,"localPlayer_");l(this,"localAdManager_");l(this,"videoProxy_");l(this,"playerProxy_");l(this,"adManagerProxy_");l(this,"currentAdProxy_");l(this,"videoEventTarget_");l(this,"playerEventTarget_");l(this,"adManagerEventTarget_");l(this,"eventManager_");l(this,"receiverAppId_");l(this,"androidReceiverCompatible_");l(this,"trackedCalls_");l(this,"playerCompiledToExternNames_");l(this,"adManagerCompiledToExternNames_");l(this,"sender_");this.localVideo_=t,this.localPlayer_=i,this.localAdManager_=this.localPlayer_.getAdManager(),this.videoProxy_=null,this.playerProxy_=null,this.adManagerProxy_=null,this.currentAdProxy_=null,this.videoEventTarget_=null,this.playerEventTarget_=null,this.adManagerEventTarget_=null,this.eventManager_=null,this.receiverAppId_=r,this.androidReceiverCompatible_=s,this.trackedCalls_={addThumbnailsTrack:[],addTextTrackAsync:[],addChaptersTrack:[]},this.playerCompiledToExternNames_=new Map,this.adManagerCompiledToExternNames_=new Map,this.sender_=null,this.shouldInitCastSender_()?(this.sender_=new Fs(r,()=>this.onCastStatusChanged_(),()=>this.onFirstCastStateUpdate_(),(n,a)=>this.onRemoteEvent_(n,a),()=>this.onResumeLocal_(),()=>this.getInitState_(),s),this.init_()):this.initWithoutSender_()}destroy(t=!1){this.sender_&&t&&this.sender_.forceDisconnect(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null);let i=[];return this.localPlayer_&&(i.push(this.localPlayer_.destroy()),this.localPlayer_=null),this.sender_&&(i.push(this.sender_.destroy()),this.sender_=null),this.localVideo_=null,this.localAdManager_=null,this.videoProxy_=null,this.playerProxy_=null,this.adManagerProxy_=null,this.currentAdProxy_=null,super.release(),Promise.all(i)}getVideo(){return this.videoProxy_}getPlayer(){return this.playerProxy_}getAdManager(){return this.adManagerProxy_}canCast(){return this.sender_?this.sender_.apiReady()&&this.sender_.hasReceivers():!1}isCasting(){return this.sender_?this.sender_.isCasting():!1}receiverName(){return this.sender_?this.sender_.receiverName():""}async cast(){this.sender_&&(await this.sender_.cast(),this.localPlayer_&&await this.localPlayer_.unload())}setAppData(t){this.sender_&&this.sender_.setAppData(t)}suggestDisconnect(){this.sender_&&this.sender_.showDisconnectDialog()}forceDisconnect(){this.sender_&&this.sender_.forceDisconnect()}async changeReceiverId(t,i=!1){t==this.receiverAppId_&&i==this.androidReceiverCompatible_||(this.receiverAppId_=t,this.androidReceiverCompatible_=i,this.sender_&&(this.sender_.forceDisconnect(),await this.sender_.destroy(),this.sender_=null,this.sender_=new Fs(t,()=>this.onCastStatusChanged_(),()=>this.onFirstCastStateUpdate_(),(r,s)=>this.onRemoteEvent_(r,s),()=>this.onResumeLocal_(),()=>this.getInitState_(),i),this.sender_.init()))}initWithoutSender_(){this.videoProxy_=this.localVideo_,this.playerProxy_=this.localPlayer_,this.adManagerProxy_=this.localAdManager_}init_(){this.sender_.init(),this.eventManager_=new ue;for(let t of Me.VideoEvents)this.eventManager_.listen(this.localVideo_,t,i=>this.videoProxyLocalEvent_(i));this.eventManager_.listen(this.localPlayer_,Be.ALL_EVENTS,t=>this.playerProxyLocalEvent_(t)),this.localAdManager_&&this.eventManager_.listen(this.localAdManager_,Be.ALL_EVENTS,t=>this.adManagerProxyLocalEvent_(t)),this.videoProxy_=new Proxy(this.localVideo_,{get:(t,i)=>typeof i!="string"?t[i]:this.videoProxyGet_(i),set:(t,i,r)=>typeof i!="string"?(t[i]=r,!0):(this.videoProxySet_(i,r),!0)}),this.playerProxy_=new Proxy(this.localPlayer_,{get:(t,i)=>typeof i!="string"?t[i]:this.playerProxyGet_(i)}),this.localAdManager_&&(this.adManagerProxy_=new Proxy(this.localAdManager_,{get:(t,i)=>typeof i!="string"?t[i]:this.adManagerProxyGet_(i)})),COMPILED&&(this.mapCompiledToUncompiledMethodNames_(t=>this.iterateOverPlayerMethods_(t),this.playerCompiledToExternNames_),this.mapCompiledToUncompiledMethodNames_(t=>this.iterateOverAdManagerMethods_(t),this.adManagerCompiledToExternNames_)),this.videoEventTarget_=new Be,this.videoEventTarget_.dispatchTarget=this.videoProxy_,this.playerEventTarget_=new Be,this.playerEventTarget_.dispatchTarget=this.playerProxy_,this.adManagerEventTarget_=new Be,this.adManagerEventTarget_.dispatchTarget=this.adManagerProxy_,this.eventManager_.listen(this.localPlayer_,U.EventName.Unloading,()=>{this.sender_&&this.sender_.isCasting()||this.resetExternalTracks()})}mapCompiledToUncompiledMethodNames_(t,i){let r=new Map;t((s,n)=>{if(r.has(n)){let a=r.get(n);s.length<a.length?i.set(s,a):i.set(a,s)}else r.set(n,s)})}iterateOverPlayerMethods_(t){v.assert(this.localPlayer_,"Must have player!");let i=this.localPlayer_;this.iterateOverClassMethods_(t,i)}iterateOverAdManagerMethods_(t){v.assert(this.localAdManager_,"Must have ad manager!");let i=this.localAdManager_;this.iterateOverClassMethods_(t,i)}iterateOverClassMethods_(t,i){let r=new Set;function s(o){return o=="constructor"||typeof i[o]!="function"?!1:!r.has(o)}for(let o in i)s(o)&&(r.add(o),t(o,i[o]));let n=Object.getPrototypeOf(i),a=Object.getPrototypeOf({});for(;n&&n!=a;){for(let o of Object.getOwnPropertyNames(n))s(o)&&(r.add(o),t(o,i[o]));n=Object.getPrototypeOf(n)}}getInitState_(){let t={video:{},player:{},manifest:this.localPlayer_.getAssetUri(),startTime:null,mimeType:this.localPlayer_.getMimeType(),addThumbnailsTrackCalls:this.trackedCalls_.addThumbnailsTrack,addTextTrackAsyncCalls:this.trackedCalls_.addTextTrackAsync,addChaptersTrackCalls:this.trackedCalls_.addChaptersTrack};this.localVideo_.pause();for(let i of Me.VideoInitStateAttributes)t.video[i]=this.localVideo_[i];this.localVideo_.ended||(t.startTime=this.localVideo_.currentTime);for(let i of Me.PlayerInitState){let r=i[0],s=i[1],n=this.localPlayer_[r]();t.player[s]=n}return t}onCastStatusChanged_(){let t=new U("caststatuschanged");this.dispatchEvent(t)}onFirstCastStateUpdate_(){let t=this.videoProxy_.paused?"pause":"play",i=new U(t);this.videoEventTarget_.dispatchEvent(i)}onResumeLocal_(){for(let f of Me.PlayerInitState){let g=f[0],_=f[1],T=this.sender_.get("player",g)();this.localPlayer_[_](T)}let t=this.trackedCalls_.addThumbnailsTrack,i=this.trackedCalls_.addTextTrackAsync,r=this.trackedCalls_.addChaptersTrack;this.resetExternalTracks();let s=this.sender_.get("player","getAssetUri")(),n=this.sender_.get("video","ended"),a=Promise.resolve(),o=this.localVideo_.autoplay,c=null;n||(c=this.sender_.get("video","currentTime"));let d,u=this.sender_.get("player","getTextTracks")();u&&u.length&&(d=u.find(f=>f.active)),s&&(this.localVideo_.autoplay=!1,a=this.localPlayer_.load(s,c));let m={};for(let f of Me.VideoInitStateAttributes)m[f]=this.sender_.get("video",f);a.then(()=>{if(this.localVideo_){for(let f of t)this.getPlayer().addThumbnailsTrack(...f);for(let f of i)this.getPlayer().addTextTrackAsync(...f);for(let f of r)this.getPlayer().addChaptersTrack(...f);for(let f of Me.VideoInitStateAttributes)this.localVideo_[f]=m[f];if(d){let g=this.localPlayer_.getTextTracks().find(_=>_.language==d.language&&ye.equal(_.roles,d.roles)&&_.forced==d.forced);this.localPlayer_.selectTextTrack(g)}else this.localPlayer_.selectTextTrack();this.localVideo_.autoplay=o,s&&this.localVideo_.play()}},f=>{v.assert(f instanceof h,"Wrong error type!");let g=U.EventName.Error,_=new Map().set("detail",f),T=new U(g,_);this.localPlayer_.dispatchEvent(T)})}getLocalOrRemote_(t,i,r){if(!this.sender_.isCasting()){let s=t[r];return typeof s=="function"?s.bind(t):s}return r=="getCurrentAd"?()=>this.currentAdProxy_:this.sender_.get(i,r)}videoProxyGet_(t){if(t=="addEventListener")return(i,r,s)=>this.videoEventTarget_.addEventListener(i,r,s);if(t=="removeEventListener")return(i,r,s)=>this.videoEventTarget_.removeEventListener(i,r,s);if(this.sender_.isCasting()&&!this.sender_.hasRemoteProperties()){let i=this.localVideo_[t];if(typeof i!="function")return i}return this.getLocalOrRemote_(this.localVideo_,"video",t)}videoProxySet_(t,i){if(!this.sender_.isCasting()){this.localVideo_[t]=i;return}this.sender_.set("video",t,i)}videoProxyLocalEvent_(t){if(this.sender_.isCasting())return;let i=U.fromRealEvent(t);this.videoEventTarget_.dispatchEvent(i)}playerProxyGet_(t,i=!1){if(this.playerCompiledToExternNames_.has(t)&&(t=this.playerCompiledToExternNames_.get(t)),t=="addEventListener")return(r,s,n)=>this.playerEventTarget_.addEventListener(r,s,n);if(t=="removeEventListener")return(r,s,n)=>this.playerEventTarget_.removeEventListener(r,s,n);if(t=="getMediaElement")return()=>this.videoProxy_;if(t=="getSharedConfiguration")return p.warning("Can't share configuration across a network. Returning copy."),this.sender_.get("player","getConfiguration");if(t=="getNetworkingEngine")return this.sender_.isCasting()&&p.warning("NOTE: getNetworkingEngine() is always local!"),()=>this.localPlayer_.getNetworkingEngine();if(t=="getDrmEngine")return this.sender_.isCasting()&&p.warning("NOTE: getDrmEngine() is always local!"),()=>this.localPlayer_.getDrmEngine();if(t=="getAdManager")return()=>this.adManagerProxy_;if(t=="getQueueManager")return()=>this.localPlayer_.getQueueManager();if(t=="setVideoContainer")return this.sender_.isCasting()&&p.warning("NOTE: setVideoContainer() is always local!"),r=>this.localPlayer_.setVideoContainer(r);if(!i){if(t=="addThumbnailsTrack")return(...r)=>(this.trackedCalls_.addThumbnailsTrack.push(r),this.playerProxyGet_(t,!0)(...r));if(t=="addTextTrackAsync")return(...r)=>(this.trackedCalls_.addTextTrackAsync.push(r),this.playerProxyGet_(t,!0)(...r));if(t=="addChaptersTrack")return(...r)=>(this.trackedCalls_.addChaptersTrack.push(r),this.playerProxyGet_(t,!0)(...r))}if(this.sender_.isCasting()){if(t=="getManifest"||t=="drmInfo")return()=>(p.alwaysWarn(t+"() does not work while casting!"),null);if(t=="attach"||t=="detach")return()=>(p.alwaysWarn(t+"() does not work while casting!"),Promise.resolve())}if(this.sender_.isCasting()&&!this.sender_.hasRemoteProperties()&&(Me.PlayerGetterMethods.has(t)||Me.LargePlayerGetterMethods.has(t))){let r=this.localPlayer_[t];return typeof r!="function"?r:r.bind(this.localPlayer_)}return this.getLocalOrRemote_(this.localPlayer_,"player",t)}playerProxyLocalEvent_(t){this.sender_.isCasting()||this.playerEventTarget_.dispatchEvent(t)}adManagerProxyGet_(t){return this.adManagerCompiledToExternNames_.has(t)&&(t=this.adManagerCompiledToExternNames_.get(t)),t=="addEventListener"?(i,r,s)=>this.adManagerEventTarget_.addEventListener(i,r,s):t=="removeEventListener"?(i,r,s)=>this.adManagerEventTarget_.removeEventListener(i,r,s):this.getLocalOrRemote_(this.localAdManager_,"adManager",t)}adManagerProxyLocalEvent_(t){this.sender_.isCasting()||this.adManagerEventTarget_.dispatchEvent(t)}currentAdProxyGet_(t){return this.sender_.isCasting()?this.sender_.get("currentAd",t):null}onRemoteEvent_(t,i){v.assert(this.sender_.isCasting(),"Should only receive remote events while casting"),this.sender_.isCasting()&&(t=="video"?this.videoEventTarget_.dispatchEvent(i):t=="player"?(i.type==U.EventName.Unloading&&this.resetExternalTracks(),this.playerEventTarget_.dispatchEvent(i)):t=="adManager"&&(i.type=="ad-started"?this.currentAdProxy_=new Proxy(new so,{get:(r,s)=>typeof s!="string"?r[s]:this.currentAdProxyGet_(s)}):i.type=="ad-stopped"&&(this.currentAdProxy_=null),this.adManagerEventTarget_.dispatchEvent(i)))}resetExternalTracks(){this.trackedCalls_.addThumbnailsTrack=[],this.trackedCalls_.addTextTrackAsync=[],this.trackedCalls_.addChaptersTrack=[]}shouldInitCastSender_(){return!(!window.chrome||typeof Proxy=="undefined"||j.getDevice().getDeviceType()==ie.DeviceType.CAST)}},so=class extends Wt{};/*! @license
|
|
570
|
+
*/var ro=class extends Be{constructor(t,i,r,s=!1){super();l(this,"localVideo_");l(this,"localPlayer_");l(this,"localAdManager_");l(this,"videoProxy_");l(this,"playerProxy_");l(this,"adManagerProxy_");l(this,"currentAdProxy_");l(this,"videoEventTarget_");l(this,"playerEventTarget_");l(this,"adManagerEventTarget_");l(this,"eventManager_");l(this,"receiverAppId_");l(this,"androidReceiverCompatible_");l(this,"trackedCalls_");l(this,"playerCompiledToExternNames_");l(this,"adManagerCompiledToExternNames_");l(this,"sender_");this.localVideo_=t,this.localPlayer_=i,this.localAdManager_=this.localPlayer_.getAdManager(),this.videoProxy_=null,this.playerProxy_=null,this.adManagerProxy_=null,this.currentAdProxy_=null,this.videoEventTarget_=null,this.playerEventTarget_=null,this.adManagerEventTarget_=null,this.eventManager_=null,this.receiverAppId_=r,this.androidReceiverCompatible_=s,this.trackedCalls_={addThumbnailsTrack:[],addTextTrackAsync:[],addChaptersTrack:[]},this.playerCompiledToExternNames_=new Map,this.adManagerCompiledToExternNames_=new Map,this.sender_=null,this.shouldInitCastSender_()?(this.sender_=new Fs(r,()=>this.onCastStatusChanged_(),()=>this.onFirstCastStateUpdate_(),(n,a)=>this.onRemoteEvent_(n,a),()=>this.onResumeLocal_(),()=>this.getInitState_(),s),this.init_()):this.initWithoutSender_()}destroy(t=!1){this.sender_&&t&&this.sender_.forceDisconnect(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null);let i=[];return this.localPlayer_&&(i.push(this.localPlayer_.destroy()),this.localPlayer_=null),this.sender_&&(i.push(this.sender_.destroy()),this.sender_=null),this.localVideo_=null,this.localAdManager_=null,this.videoProxy_=null,this.playerProxy_=null,this.adManagerProxy_=null,this.currentAdProxy_=null,super.release(),Promise.all(i)}getVideo(){return this.videoProxy_}getPlayer(){return this.playerProxy_}getAdManager(){return this.adManagerProxy_}canCast(){return this.sender_?this.sender_.apiReady()&&this.sender_.hasReceivers():!1}isCasting(){return this.sender_?this.sender_.isCasting():!1}receiverName(){return this.sender_?this.sender_.receiverName():""}async cast(){this.sender_&&(await this.sender_.cast(),this.localPlayer_&&await this.localPlayer_.unload())}setAppData(t){this.sender_&&this.sender_.setAppData(t)}suggestDisconnect(){this.sender_&&this.sender_.showDisconnectDialog()}forceDisconnect(){this.sender_&&this.sender_.forceDisconnect()}async changeReceiverId(t,i=!1){t==this.receiverAppId_&&i==this.androidReceiverCompatible_||(this.receiverAppId_=t,this.androidReceiverCompatible_=i,this.sender_&&(this.sender_.forceDisconnect(),await this.sender_.destroy(),this.sender_=null,this.sender_=new Fs(t,()=>this.onCastStatusChanged_(),()=>this.onFirstCastStateUpdate_(),(r,s)=>this.onRemoteEvent_(r,s),()=>this.onResumeLocal_(),()=>this.getInitState_(),i),this.sender_.init()))}initWithoutSender_(){this.videoProxy_=this.localVideo_,this.playerProxy_=this.localPlayer_,this.adManagerProxy_=this.localAdManager_}init_(){this.sender_.init(),this.eventManager_=new ue;for(let t of Me.VideoEvents)this.eventManager_.listen(this.localVideo_,t,i=>this.videoProxyLocalEvent_(i));this.eventManager_.listen(this.localPlayer_,Be.ALL_EVENTS,t=>this.playerProxyLocalEvent_(t)),this.localAdManager_&&this.eventManager_.listen(this.localAdManager_,Be.ALL_EVENTS,t=>this.adManagerProxyLocalEvent_(t)),this.videoProxy_=new Proxy(this.localVideo_,{get:(t,i)=>typeof i!="string"?t[i]:this.videoProxyGet_(i),set:(t,i,r)=>typeof i!="string"?(t[i]=r,!0):(this.videoProxySet_(i,r),!0)}),this.playerProxy_=new Proxy(this.localPlayer_,{get:(t,i)=>typeof i!="string"?t[i]:this.playerProxyGet_(i)}),this.localAdManager_&&(this.adManagerProxy_=new Proxy(this.localAdManager_,{get:(t,i)=>typeof i!="string"?t[i]:this.adManagerProxyGet_(i)})),COMPILED&&(this.mapCompiledToUncompiledMethodNames_(t=>this.iterateOverPlayerMethods_(t),this.playerCompiledToExternNames_),this.mapCompiledToUncompiledMethodNames_(t=>this.iterateOverAdManagerMethods_(t),this.adManagerCompiledToExternNames_)),this.videoEventTarget_=new Be,this.videoEventTarget_.dispatchTarget=this.videoProxy_,this.playerEventTarget_=new Be,this.playerEventTarget_.dispatchTarget=this.playerProxy_,this.adManagerEventTarget_=new Be,this.adManagerEventTarget_.dispatchTarget=this.adManagerProxy_,this.eventManager_.listen(this.localPlayer_,L.EventName.Unloading,()=>{this.sender_&&this.sender_.isCasting()||this.resetExternalTracks()})}mapCompiledToUncompiledMethodNames_(t,i){let r=new Map;t((s,n)=>{if(r.has(n)){let a=r.get(n);s.length<a.length?i.set(s,a):i.set(a,s)}else r.set(n,s)})}iterateOverPlayerMethods_(t){v.assert(this.localPlayer_,"Must have player!");let i=this.localPlayer_;this.iterateOverClassMethods_(t,i)}iterateOverAdManagerMethods_(t){v.assert(this.localAdManager_,"Must have ad manager!");let i=this.localAdManager_;this.iterateOverClassMethods_(t,i)}iterateOverClassMethods_(t,i){let r=new Set;function s(o){return o=="constructor"||typeof i[o]!="function"?!1:!r.has(o)}for(let o in i)s(o)&&(r.add(o),t(o,i[o]));let n=Object.getPrototypeOf(i),a=Object.getPrototypeOf({});for(;n&&n!=a;){for(let o of Object.getOwnPropertyNames(n))s(o)&&(r.add(o),t(o,i[o]));n=Object.getPrototypeOf(n)}}getInitState_(){let t={video:{},player:{},manifest:this.localPlayer_.getAssetUri(),startTime:null,mimeType:this.localPlayer_.getMimeType(),addThumbnailsTrackCalls:this.trackedCalls_.addThumbnailsTrack,addTextTrackAsyncCalls:this.trackedCalls_.addTextTrackAsync,addChaptersTrackCalls:this.trackedCalls_.addChaptersTrack};this.localVideo_.pause();for(let i of Me.VideoInitStateAttributes)t.video[i]=this.localVideo_[i];this.localVideo_.ended||(t.startTime=this.localVideo_.currentTime);for(let i of Me.PlayerInitState){let r=i[0],s=i[1],n=this.localPlayer_[r]();t.player[s]=n}return t}onCastStatusChanged_(){let t=new L("caststatuschanged");this.dispatchEvent(t)}onFirstCastStateUpdate_(){let t=this.videoProxy_.paused?"pause":"play",i=new L(t);this.videoEventTarget_.dispatchEvent(i)}onResumeLocal_(){for(let f of Me.PlayerInitState){let g=f[0],_=f[1],T=this.sender_.get("player",g)();this.localPlayer_[_](T)}let t=this.trackedCalls_.addThumbnailsTrack,i=this.trackedCalls_.addTextTrackAsync,r=this.trackedCalls_.addChaptersTrack;this.resetExternalTracks();let s=this.sender_.get("player","getAssetUri")(),n=this.sender_.get("video","ended"),a=Promise.resolve(),o=this.localVideo_.autoplay,c=null;n||(c=this.sender_.get("video","currentTime"));let d,u=this.sender_.get("player","getTextTracks")();u&&u.length&&(d=u.find(f=>f.active)),s&&(this.localVideo_.autoplay=!1,a=this.localPlayer_.load(s,c));let m={};for(let f of Me.VideoInitStateAttributes)m[f]=this.sender_.get("video",f);a.then(()=>{if(this.localVideo_){for(let f of t)this.getPlayer().addThumbnailsTrack(...f);for(let f of i)this.getPlayer().addTextTrackAsync(...f);for(let f of r)this.getPlayer().addChaptersTrack(...f);for(let f of Me.VideoInitStateAttributes)this.localVideo_[f]=m[f];if(d){let g=this.localPlayer_.getTextTracks().find(_=>_.language==d.language&&ye.equal(_.roles,d.roles)&&_.forced==d.forced);this.localPlayer_.selectTextTrack(g)}else this.localPlayer_.selectTextTrack();this.localVideo_.autoplay=o,s&&this.localVideo_.play()}},f=>{v.assert(f instanceof h,"Wrong error type!");let g=L.EventName.Error,_=new Map().set("detail",f),T=new L(g,_);this.localPlayer_.dispatchEvent(T)})}getLocalOrRemote_(t,i,r){if(!this.sender_.isCasting()){let s=t[r];return typeof s=="function"?s.bind(t):s}return r=="getCurrentAd"?()=>this.currentAdProxy_:this.sender_.get(i,r)}videoProxyGet_(t){if(t=="addEventListener")return(i,r,s)=>this.videoEventTarget_.addEventListener(i,r,s);if(t=="removeEventListener")return(i,r,s)=>this.videoEventTarget_.removeEventListener(i,r,s);if(this.sender_.isCasting()&&!this.sender_.hasRemoteProperties()){let i=this.localVideo_[t];if(typeof i!="function")return i}return this.getLocalOrRemote_(this.localVideo_,"video",t)}videoProxySet_(t,i){if(!this.sender_.isCasting()){this.localVideo_[t]=i;return}this.sender_.set("video",t,i)}videoProxyLocalEvent_(t){if(this.sender_.isCasting())return;let i=L.fromRealEvent(t);this.videoEventTarget_.dispatchEvent(i)}playerProxyGet_(t,i=!1){if(this.playerCompiledToExternNames_.has(t)&&(t=this.playerCompiledToExternNames_.get(t)),t=="addEventListener")return(r,s,n)=>this.playerEventTarget_.addEventListener(r,s,n);if(t=="removeEventListener")return(r,s,n)=>this.playerEventTarget_.removeEventListener(r,s,n);if(t=="getMediaElement")return()=>this.videoProxy_;if(t=="getSharedConfiguration")return p.warning("Can't share configuration across a network. Returning copy."),this.sender_.get("player","getConfiguration");if(t=="getNetworkingEngine")return this.sender_.isCasting()&&p.warning("NOTE: getNetworkingEngine() is always local!"),()=>this.localPlayer_.getNetworkingEngine();if(t=="getDrmEngine")return this.sender_.isCasting()&&p.warning("NOTE: getDrmEngine() is always local!"),()=>this.localPlayer_.getDrmEngine();if(t=="getAdManager")return()=>this.adManagerProxy_;if(t=="getQueueManager")return()=>this.localPlayer_.getQueueManager();if(t=="setVideoContainer")return this.sender_.isCasting()&&p.warning("NOTE: setVideoContainer() is always local!"),r=>this.localPlayer_.setVideoContainer(r);if(!i){if(t=="addThumbnailsTrack")return(...r)=>(this.trackedCalls_.addThumbnailsTrack.push(r),this.playerProxyGet_(t,!0)(...r));if(t=="addTextTrackAsync")return(...r)=>(this.trackedCalls_.addTextTrackAsync.push(r),this.playerProxyGet_(t,!0)(...r));if(t=="addChaptersTrack")return(...r)=>(this.trackedCalls_.addChaptersTrack.push(r),this.playerProxyGet_(t,!0)(...r))}if(this.sender_.isCasting()){if(t=="getManifest"||t=="drmInfo")return()=>(p.alwaysWarn(t+"() does not work while casting!"),null);if(t=="attach"||t=="detach")return()=>(p.alwaysWarn(t+"() does not work while casting!"),Promise.resolve())}if(this.sender_.isCasting()&&!this.sender_.hasRemoteProperties()&&(Me.PlayerGetterMethods.has(t)||Me.LargePlayerGetterMethods.has(t))){let r=this.localPlayer_[t];return typeof r!="function"?r:r.bind(this.localPlayer_)}return this.getLocalOrRemote_(this.localPlayer_,"player",t)}playerProxyLocalEvent_(t){this.sender_.isCasting()||this.playerEventTarget_.dispatchEvent(t)}adManagerProxyGet_(t){return this.adManagerCompiledToExternNames_.has(t)&&(t=this.adManagerCompiledToExternNames_.get(t)),t=="addEventListener"?(i,r,s)=>this.adManagerEventTarget_.addEventListener(i,r,s):t=="removeEventListener"?(i,r,s)=>this.adManagerEventTarget_.removeEventListener(i,r,s):this.getLocalOrRemote_(this.localAdManager_,"adManager",t)}adManagerProxyLocalEvent_(t){this.sender_.isCasting()||this.adManagerEventTarget_.dispatchEvent(t)}currentAdProxyGet_(t){return this.sender_.isCasting()?this.sender_.get("currentAd",t):null}onRemoteEvent_(t,i){v.assert(this.sender_.isCasting(),"Should only receive remote events while casting"),this.sender_.isCasting()&&(t=="video"?this.videoEventTarget_.dispatchEvent(i):t=="player"?(i.type==L.EventName.Unloading&&this.resetExternalTracks(),this.playerEventTarget_.dispatchEvent(i)):t=="adManager"&&(i.type=="ad-started"?this.currentAdProxy_=new Proxy(new so,{get:(r,s)=>typeof s!="string"?r[s]:this.currentAdProxyGet_(s)}):i.type=="ad-stopped"&&(this.currentAdProxy_=null),this.adManagerEventTarget_.dispatchEvent(i)))}resetExternalTracks(){this.trackedCalls_.addThumbnailsTrack=[],this.trackedCalls_.addTextTrackAsync=[],this.trackedCalls_.addChaptersTrack=[]}shouldInitCastSender_(){return!(!window.chrome||typeof Proxy=="undefined"||j.getDevice().getDeviceType()==ie.DeviceType.CAST)}},so=class extends Wt{};/*! @license
|
|
571
571
|
* Shaka Player
|
|
572
572
|
* Copyright 2016 Google LLC
|
|
573
573
|
* SPDX-License-Identifier: Apache-2.0
|
|
574
|
-
*/var mr=class mr extends Be{constructor(t,i,r,s){super();l(this,"video_");l(this,"player_");l(this,"adManager_");l(this,"currentAd_");l(this,"eventManager_");l(this,"targets_");l(this,"appDataCallback_");l(this,"contentIdCallback_");l(this,"metadata_");l(this,"isConnected_");l(this,"isIdle_");l(this,"updateNumber_");l(this,"startUpdatingUpdateNumber_");l(this,"initialStatusUpdatePending_");l(this,"shakaBus_");l(this,"genericBus_");l(this,"pollTimer_");this.video_=t,this.player_=i,this.adManager_=i.getAdManager(),this.currentAd_=null,this.eventManager_=new ue,this.targets_={video:t,player:i,adManager:this.adManager_,currentAd:this.currentAd_},this.appDataCallback_=r||(()=>{}),this.contentIdCallback_=s||(n=>n),this.metadata_=null,this.isConnected_=!1,this.isIdle_=!0,this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!0,this.shakaBus_=null,this.genericBus_=null,this.pollTimer_=new ae(()=>{this.pollAttributes_()}),this.init_()}isConnected(){return this.isConnected_}isIdle(){return this.isIdle_}setContentMetadata(t){this.metadata_=t}clearContentMetadata(){this.metadata_=null}setContentTitle(t){this.ensureMetadata_(),this.metadata_.title=t}setContentImage(t){this.ensureMetadata_(),this.metadata_.images=[{url:t}]}setContentArtist(t){this.ensureMetadata_(),this.metadata_.artist=t,this.metadata_.metadataType=cast.receiver.media.MetadataType.MUSIC_TRACK}setContentAlbumName(t){this.ensureMetadata_(),this.metadata_.albumName=t,this.metadata_.metadataType=cast.receiver.media.MetadataType.MUSIC_TRACK}ensureMetadata_(){this.metadata_||(this.metadata_={metadataType:cast.receiver.media.MetadataType.GENERIC})}async destroy(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null);let t=[];this.player_&&(t.push(this.player_.destroy()),this.player_=null),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null),this.video_=null,this.adManager_=null,this.targets_=null,this.appDataCallback_=null,this.isConnected_=!1,this.isIdle_=!0,this.shakaBus_=null,this.genericBus_=null,super.release(),await Promise.all(t),cast.receiver.CastReceiverManager.getInstance().stop()}init_(){let t=cast.receiver.CastReceiverManager.getInstance();t.onSenderConnected=()=>this.onSendersChanged_(),t.onSenderDisconnected=()=>this.onSendersChanged_(),t.onSystemVolumeChanged=()=>this.fakeVolumeChangeEvent_(),this.genericBus_=t.getCastMessageBus(Me.GENERIC_MESSAGE_NAMESPACE),this.genericBus_.onMessage=i=>this.onGenericMessage_(i),this.shakaBus_=t.getCastMessageBus(Me.SHAKA_MESSAGE_NAMESPACE),this.shakaBus_.onMessage=i=>this.onShakaMessage_(i),Ve?j.getDevice().getDeviceType()===ie.DeviceType.CAST&&t.start():t.start();for(let i of Me.VideoEvents)this.eventManager_.listen(this.video_,i,r=>this.proxyEvent_("video",r));this.eventManager_.listen(this.player_,Be.ALL_EVENTS,i=>this.proxyEvent_("player",i)),this.adManager_&&this.eventManager_.listen(this.adManager_,Be.ALL_EVENTS,i=>{i.type=="ad-started"?(this.currentAd_=this.adManager_.getCurrentAd(),this.updateNumber_=0,this.targets_.currentAd=this.currentAd_):i.type=="ad-stopped"&&(this.currentAd_=null,this.targets_.currentAd=this.currentAd_),this.proxyEvent_("adManager",i)}),this.eventManager_.listen(this.video_,"loadeddata",()=>{this.startUpdatingUpdateNumber_=!0}),this.eventManager_.listen(this.player_,"loading",()=>{this.isIdle_=!1,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"playing",()=>{this.isIdle_=!1,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"pause",()=>{this.onCastStatusChanged_()}),this.eventManager_.listen(this.player_,"unloading",()=>{this.isIdle_=!0,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"ended",()=>{new ae(()=>{this.video_&&this.video_.ended&&(this.isIdle_=!0,this.onCastStatusChanged_())}).tickAfter(mr.IDLE_INTERVAL)})}onSendersChanged_(){this.updateNumber_=0,this.initialStatusUpdatePending_=!0;let t=cast.receiver.CastReceiverManager.getInstance();this.isConnected_=t.getSenders().length!=0,this.onCastStatusChanged_()}async onCastStatusChanged_(){if(await Promise.resolve(),!this.player_)return;let t=new U("caststatuschanged");this.dispatchEvent(t),this.maybeSendMediaInfoMessage_()||this.sendMediaStatus_()}async initState_(t,i){for(let s in t.player){let n=t.player[s];this.player_[s](n)}this.appDataCallback_(i);let r=this.video_.autoplay;if(t.manifest){this.video_.autoplay=!1;try{if(await this.player_.load(t.manifest,t.startTime,t.mimeType),t.addThumbnailsTrackCalls)for(let s of t.addThumbnailsTrackCalls)this.player_.addThumbnailsTrack(...s);if(t.addTextTrackAsyncCalls)for(let s of t.addTextTrackAsyncCalls)this.player_.addTextTrackAsync(...s);if(t.addChaptersTrackCalls)for(let s of t.addChaptersTrackCalls)this.player_.addChaptersTrack(...s)}catch(s){v.assert(s instanceof h,"Wrong error type! Error: "+s);let n=U.EventName.Error,a=new Map().set("detail",s),o=new U(n,a);this.player_&&this.player_.dispatchEvent(o);return}}else await Promise.resolve();if(this.player_){for(let s in t.video){let n=t.video[s];this.video_[s]=n}this.video_.autoplay=r,t.manifest&&(this.video_.play(),this.sendMediaStatus_())}}proxyEvent_(t,i){this.player_&&(this.pollAttributes_(),this.sendMessage_({type:"event",targetName:t,event:i},this.shakaBus_))}pollAttributes_(){this.pollTimer_.tickAfter(mr.POLL_INTERVAL);let t={video:{},player:{},currentAd:{}};for(let s of Me.VideoAttributes)t.video[s]=this.video_[s];this.player_.isLive()&&Me.PlayerGetterMethodsThatRequireLive.forEach((n,a)=>{this.updateNumber_%n==0&&(t.player[a]=this.player_[a]())}),Me.PlayerGetterMethods.forEach((s,n)=>{this.updateNumber_%s==0&&(t.player[n]=this.player_[n]())}),this.currentAd_&&Me.CurrentAdGetterMethods.forEach((s,n)=>{this.updateNumber_%s==0&&(t.currentAd[n]=this.currentAd_[n]())});let r=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();r&&(t.video.volume=r.level,t.video.muted=r.muted),this.sendMessage_({type:"update",update:t},this.shakaBus_),Me.LargePlayerGetterMethods.forEach((s,n)=>{if(this.updateNumber_%s==0){let a={player:{}};a.player[n]=this.player_[n](),this.sendMessage_({type:"update",update:a},this.shakaBus_)}}),this.adManager_&&Me.LargeAdManagerGetterMethods.forEach((s,n)=>{if(this.updateNumber_%s==0){let a={adManager:{}};a.adManager[n]=this.adManager_[n](),this.sendMessage_({type:"update",update:a},this.shakaBus_)}}),this.startUpdatingUpdateNumber_&&(this.updateNumber_+=1),this.maybeSendMediaInfoMessage_()}maybeSendMediaInfoMessage_(){return this.initialStatusUpdatePending_&&(this.video_.duration||this.player_.isLive())?(this.sendMediaInfoMessage_(),this.initialStatusUpdatePending_=!1,!0):!1}sendMediaInfoMessage_(t=0){let i={contentId:this.player_.getAssetUri(),streamType:this.player_.isLive()?"LIVE":"BUFFERED",contentType:""};this.player_.isLive()||(i.duration=this.video_.duration),this.metadata_&&(i.metadata=this.metadata_),this.sendMediaStatus_(t,i)}fakeVolumeChangeEvent_(){let i=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();v.assert(i,"System volume should not be null!"),i&&this.sendMessage_({type:"update",update:{video:{volume:i.level,muted:i.muted}}},this.shakaBus_),this.sendMessage_({type:"event",targetName:"video",event:{type:"volumechange"}},this.shakaBus_)}onShakaMessage_(t){let i=Me.deserialize(t.data);switch(p.debug("CastReceiver: message",i),i.type){case"init":this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!0,this.initState_(i.initState,i.appData),this.pollAttributes_();break;case"appData":this.appDataCallback_(i.appData);break;case"set":{let r=i.targetName,s=i.property,n=i.value;if(r=="video"){let a=cast.receiver.CastReceiverManager.getInstance();if(s=="volume"){a.setSystemVolumeLevel(n);break}else if(s=="muted"){a.setSystemVolumeMuted(n);break}}this.targets_[r]&&(this.targets_[r][s]=n);break}case"call":{let r=i.targetName,s=i.methodName,n=i.args,a=this.targets_[r];a&&a[s].apply(a,n);break}case"asyncCall":{let r=i.targetName,s=i.methodName;r=="player"&&s=="load"&&(this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1);let n=i.args,a=i.id,o=t.senderId,c=this.targets_[r],d=c[s].apply(c,n);r=="player"&&s=="load"&&(d=d.then(()=>{this.initialStatusUpdatePending_=!0})),d.then(u=>this.sendAsyncComplete_(o,a,null,u),u=>this.sendAsyncComplete_(o,a,u,null));break}}}onGenericMessage_(t){let i=Me.deserialize(t.data);switch(p.debug("CastReceiver: message",i),i.type){case"PLAY":this.video_.play(),this.sendMediaStatus_();break;case"PAUSE":this.video_.pause(),this.sendMediaStatus_();break;case"SEEK":{let r=i.currentTime,s=i.resumeState;r!=null&&(this.video_.currentTime=Number(r)),s&&s=="PLAYBACK_START"?(this.video_.play(),this.sendMediaStatus_()):s&&s=="PLAYBACK_PAUSE"&&(this.video_.pause(),this.sendMediaStatus_());break}case"STOP":this.player_.unload().then(()=>{this.player_&&this.sendMediaStatus_()});break;case"GET_STATUS":this.sendMediaInfoMessage_(Number(i.requestId));break;case"VOLUME":{let r=i.volume,s=r.level,n=r.muted,a=this.video_.volume,o=this.video_.muted;s!=null&&(this.video_.volume=Number(s)),n!=null&&(this.video_.muted=n),(a!=this.video_.volume||o!=this.video_.muted)&&this.sendMediaStatus_();break}case"LOAD":{this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!1;let r=i.media,s=r.contentId,n=i.currentTime,a=this.contentIdCallback_(s),o=i.autoplay||!0,c=r.customData;this.appDataCallback_(c),o&&(this.video_.autoplay=!0),this.player_.load(a,n).then(()=>{this.player_&&this.sendMediaInfoMessage_()}).catch(d=>{v.assert(d instanceof h,"Wrong error type!");let u="LOAD_FAILED";d.category==h.Category.PLAYER&&d.code==h.Code.LOAD_INTERRUPTED&&(u="LOAD_CANCELLED"),this.sendMessage_({requestId:Number(i.requestId),type:u},this.genericBus_)});break}default:p.warning("Unrecognized message type from the generic Chromecast controller!",i.type),this.sendMessage_({requestId:Number(i.requestId),type:"INVALID_REQUEST",reason:"INVALID_COMMAND"},this.genericBus_);break}}sendAsyncComplete_(t,i,r,s){this.player_&&this.sendMessage_({type:"asyncComplete",id:i,error:r,res:s},this.shakaBus_,t)}sendMessage_(t,i,r){if(!this.isConnected_)return;let s=Me.serialize(t);r?i.getCastChannel(r).send(s):i.broadcast(s)}getPlayState_(){let t=mr.PLAY_STATE;return this.isIdle_?t.IDLE:this.player_.isBuffering()?t.BUFFERING:this.video_.paused?t.PAUSED:t.PLAYING}sendMediaStatus_(t=0,i=null){let r={mediaSessionId:0,playbackRate:this.video_.playbackRate,playerState:this.getPlayState_(),currentTime:this.video_.currentTime,supportedMediaCommands:63,volume:{level:this.video_.volume,muted:this.video_.muted}};i&&(r.media=i);let s={requestId:t,type:"MEDIA_STATUS",status:[r]};this.sendMessage_(s,this.genericBus_)}};l(mr,"POLL_INTERVAL",.5),l(mr,"IDLE_INTERVAL",5),l(mr,"PLAY_STATE",{IDLE:"IDLE",PLAYING:"PLAYING",BUFFERING:"BUFFERING",PAUSED:"PAUSED"});var no=mr;/*! @license
|
|
574
|
+
*/var mr=class mr extends Be{constructor(t,i,r,s){super();l(this,"video_");l(this,"player_");l(this,"adManager_");l(this,"currentAd_");l(this,"eventManager_");l(this,"targets_");l(this,"appDataCallback_");l(this,"contentIdCallback_");l(this,"metadata_");l(this,"isConnected_");l(this,"isIdle_");l(this,"updateNumber_");l(this,"startUpdatingUpdateNumber_");l(this,"initialStatusUpdatePending_");l(this,"shakaBus_");l(this,"genericBus_");l(this,"pollTimer_");this.video_=t,this.player_=i,this.adManager_=i.getAdManager(),this.currentAd_=null,this.eventManager_=new ue,this.targets_={video:t,player:i,adManager:this.adManager_,currentAd:this.currentAd_},this.appDataCallback_=r||(()=>{}),this.contentIdCallback_=s||(n=>n),this.metadata_=null,this.isConnected_=!1,this.isIdle_=!0,this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!0,this.shakaBus_=null,this.genericBus_=null,this.pollTimer_=new ae(()=>{this.pollAttributes_()}),this.init_()}isConnected(){return this.isConnected_}isIdle(){return this.isIdle_}setContentMetadata(t){this.metadata_=t}clearContentMetadata(){this.metadata_=null}setContentTitle(t){this.ensureMetadata_(),this.metadata_.title=t}setContentImage(t){this.ensureMetadata_(),this.metadata_.images=[{url:t}]}setContentArtist(t){this.ensureMetadata_(),this.metadata_.artist=t,this.metadata_.metadataType=cast.receiver.media.MetadataType.MUSIC_TRACK}setContentAlbumName(t){this.ensureMetadata_(),this.metadata_.albumName=t,this.metadata_.metadataType=cast.receiver.media.MetadataType.MUSIC_TRACK}ensureMetadata_(){this.metadata_||(this.metadata_={metadataType:cast.receiver.media.MetadataType.GENERIC})}async destroy(){this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null);let t=[];this.player_&&(t.push(this.player_.destroy()),this.player_=null),this.pollTimer_&&(this.pollTimer_.stop(),this.pollTimer_=null),this.video_=null,this.adManager_=null,this.targets_=null,this.appDataCallback_=null,this.isConnected_=!1,this.isIdle_=!0,this.shakaBus_=null,this.genericBus_=null,super.release(),await Promise.all(t),cast.receiver.CastReceiverManager.getInstance().stop()}init_(){let t=cast.receiver.CastReceiverManager.getInstance();t.onSenderConnected=()=>this.onSendersChanged_(),t.onSenderDisconnected=()=>this.onSendersChanged_(),t.onSystemVolumeChanged=()=>this.fakeVolumeChangeEvent_(),this.genericBus_=t.getCastMessageBus(Me.GENERIC_MESSAGE_NAMESPACE),this.genericBus_.onMessage=i=>this.onGenericMessage_(i),this.shakaBus_=t.getCastMessageBus(Me.SHAKA_MESSAGE_NAMESPACE),this.shakaBus_.onMessage=i=>this.onShakaMessage_(i),Ve?j.getDevice().getDeviceType()===ie.DeviceType.CAST&&t.start():t.start();for(let i of Me.VideoEvents)this.eventManager_.listen(this.video_,i,r=>this.proxyEvent_("video",r));this.eventManager_.listen(this.player_,Be.ALL_EVENTS,i=>this.proxyEvent_("player",i)),this.adManager_&&this.eventManager_.listen(this.adManager_,Be.ALL_EVENTS,i=>{i.type=="ad-started"?(this.currentAd_=this.adManager_.getCurrentAd(),this.updateNumber_=0,this.targets_.currentAd=this.currentAd_):i.type=="ad-stopped"&&(this.currentAd_=null,this.targets_.currentAd=this.currentAd_),this.proxyEvent_("adManager",i)}),this.eventManager_.listen(this.video_,"loadeddata",()=>{this.startUpdatingUpdateNumber_=!0}),this.eventManager_.listen(this.player_,"loading",()=>{this.isIdle_=!1,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"playing",()=>{this.isIdle_=!1,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"pause",()=>{this.onCastStatusChanged_()}),this.eventManager_.listen(this.player_,"unloading",()=>{this.isIdle_=!0,this.onCastStatusChanged_()}),this.eventManager_.listen(this.video_,"ended",()=>{new ae(()=>{this.video_&&this.video_.ended&&(this.isIdle_=!0,this.onCastStatusChanged_())}).tickAfter(mr.IDLE_INTERVAL)})}onSendersChanged_(){this.updateNumber_=0,this.initialStatusUpdatePending_=!0;let t=cast.receiver.CastReceiverManager.getInstance();this.isConnected_=t.getSenders().length!=0,this.onCastStatusChanged_()}async onCastStatusChanged_(){if(await Promise.resolve(),!this.player_)return;let t=new L("caststatuschanged");this.dispatchEvent(t),this.maybeSendMediaInfoMessage_()||this.sendMediaStatus_()}async initState_(t,i){for(let s in t.player){let n=t.player[s];this.player_[s](n)}this.appDataCallback_(i);let r=this.video_.autoplay;if(t.manifest){this.video_.autoplay=!1;try{if(await this.player_.load(t.manifest,t.startTime,t.mimeType),t.addThumbnailsTrackCalls)for(let s of t.addThumbnailsTrackCalls)this.player_.addThumbnailsTrack(...s);if(t.addTextTrackAsyncCalls)for(let s of t.addTextTrackAsyncCalls)this.player_.addTextTrackAsync(...s);if(t.addChaptersTrackCalls)for(let s of t.addChaptersTrackCalls)this.player_.addChaptersTrack(...s)}catch(s){v.assert(s instanceof h,"Wrong error type! Error: "+s);let n=L.EventName.Error,a=new Map().set("detail",s),o=new L(n,a);this.player_&&this.player_.dispatchEvent(o);return}}else await Promise.resolve();if(this.player_){for(let s in t.video){let n=t.video[s];this.video_[s]=n}this.video_.autoplay=r,t.manifest&&(this.video_.play(),this.sendMediaStatus_())}}proxyEvent_(t,i){this.player_&&(this.pollAttributes_(),this.sendMessage_({type:"event",targetName:t,event:i},this.shakaBus_))}pollAttributes_(){this.pollTimer_.tickAfter(mr.POLL_INTERVAL);let t={video:{},player:{},currentAd:{}};for(let s of Me.VideoAttributes)t.video[s]=this.video_[s];this.player_.isLive()&&Me.PlayerGetterMethodsThatRequireLive.forEach((n,a)=>{this.updateNumber_%n==0&&(t.player[a]=this.player_[a]())}),Me.PlayerGetterMethods.forEach((s,n)=>{this.updateNumber_%s==0&&(t.player[n]=this.player_[n]())}),this.currentAd_&&Me.CurrentAdGetterMethods.forEach((s,n)=>{this.updateNumber_%s==0&&(t.currentAd[n]=this.currentAd_[n]())});let r=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();r&&(t.video.volume=r.level,t.video.muted=r.muted),this.sendMessage_({type:"update",update:t},this.shakaBus_),Me.LargePlayerGetterMethods.forEach((s,n)=>{if(this.updateNumber_%s==0){let a={player:{}};a.player[n]=this.player_[n](),this.sendMessage_({type:"update",update:a},this.shakaBus_)}}),this.adManager_&&Me.LargeAdManagerGetterMethods.forEach((s,n)=>{if(this.updateNumber_%s==0){let a={adManager:{}};a.adManager[n]=this.adManager_[n](),this.sendMessage_({type:"update",update:a},this.shakaBus_)}}),this.startUpdatingUpdateNumber_&&(this.updateNumber_+=1),this.maybeSendMediaInfoMessage_()}maybeSendMediaInfoMessage_(){return this.initialStatusUpdatePending_&&(this.video_.duration||this.player_.isLive())?(this.sendMediaInfoMessage_(),this.initialStatusUpdatePending_=!1,!0):!1}sendMediaInfoMessage_(t=0){let i={contentId:this.player_.getAssetUri(),streamType:this.player_.isLive()?"LIVE":"BUFFERED",contentType:""};this.player_.isLive()||(i.duration=this.video_.duration),this.metadata_&&(i.metadata=this.metadata_),this.sendMediaStatus_(t,i)}fakeVolumeChangeEvent_(){let i=cast.receiver.CastReceiverManager.getInstance().getSystemVolume();v.assert(i,"System volume should not be null!"),i&&this.sendMessage_({type:"update",update:{video:{volume:i.level,muted:i.muted}}},this.shakaBus_),this.sendMessage_({type:"event",targetName:"video",event:{type:"volumechange"}},this.shakaBus_)}onShakaMessage_(t){let i=Me.deserialize(t.data);switch(p.debug("CastReceiver: message",i),i.type){case"init":this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!0,this.initState_(i.initState,i.appData),this.pollAttributes_();break;case"appData":this.appDataCallback_(i.appData);break;case"set":{let r=i.targetName,s=i.property,n=i.value;if(r=="video"){let a=cast.receiver.CastReceiverManager.getInstance();if(s=="volume"){a.setSystemVolumeLevel(n);break}else if(s=="muted"){a.setSystemVolumeMuted(n);break}}this.targets_[r]&&(this.targets_[r][s]=n);break}case"call":{let r=i.targetName,s=i.methodName,n=i.args,a=this.targets_[r];a&&a[s].apply(a,n);break}case"asyncCall":{let r=i.targetName,s=i.methodName;r=="player"&&s=="load"&&(this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1);let n=i.args,a=i.id,o=t.senderId,c=this.targets_[r],d=c[s].apply(c,n);r=="player"&&s=="load"&&(d=d.then(()=>{this.initialStatusUpdatePending_=!0})),d.then(u=>this.sendAsyncComplete_(o,a,null,u),u=>this.sendAsyncComplete_(o,a,u,null));break}}}onGenericMessage_(t){let i=Me.deserialize(t.data);switch(p.debug("CastReceiver: message",i),i.type){case"PLAY":this.video_.play(),this.sendMediaStatus_();break;case"PAUSE":this.video_.pause(),this.sendMediaStatus_();break;case"SEEK":{let r=i.currentTime,s=i.resumeState;r!=null&&(this.video_.currentTime=Number(r)),s&&s=="PLAYBACK_START"?(this.video_.play(),this.sendMediaStatus_()):s&&s=="PLAYBACK_PAUSE"&&(this.video_.pause(),this.sendMediaStatus_());break}case"STOP":this.player_.unload().then(()=>{this.player_&&this.sendMediaStatus_()});break;case"GET_STATUS":this.sendMediaInfoMessage_(Number(i.requestId));break;case"VOLUME":{let r=i.volume,s=r.level,n=r.muted,a=this.video_.volume,o=this.video_.muted;s!=null&&(this.video_.volume=Number(s)),n!=null&&(this.video_.muted=n),(a!=this.video_.volume||o!=this.video_.muted)&&this.sendMediaStatus_();break}case"LOAD":{this.updateNumber_=0,this.startUpdatingUpdateNumber_=!1,this.initialStatusUpdatePending_=!1;let r=i.media,s=r.contentId,n=i.currentTime,a=this.contentIdCallback_(s),o=i.autoplay||!0,c=r.customData;this.appDataCallback_(c),o&&(this.video_.autoplay=!0),this.player_.load(a,n).then(()=>{this.player_&&this.sendMediaInfoMessage_()}).catch(d=>{v.assert(d instanceof h,"Wrong error type!");let u="LOAD_FAILED";d.category==h.Category.PLAYER&&d.code==h.Code.LOAD_INTERRUPTED&&(u="LOAD_CANCELLED"),this.sendMessage_({requestId:Number(i.requestId),type:u},this.genericBus_)});break}default:p.warning("Unrecognized message type from the generic Chromecast controller!",i.type),this.sendMessage_({requestId:Number(i.requestId),type:"INVALID_REQUEST",reason:"INVALID_COMMAND"},this.genericBus_);break}}sendAsyncComplete_(t,i,r,s){this.player_&&this.sendMessage_({type:"asyncComplete",id:i,error:r,res:s},this.shakaBus_,t)}sendMessage_(t,i,r){if(!this.isConnected_)return;let s=Me.serialize(t);r?i.getCastChannel(r).send(s):i.broadcast(s)}getPlayState_(){let t=mr.PLAY_STATE;return this.isIdle_?t.IDLE:this.player_.isBuffering()?t.BUFFERING:this.video_.paused?t.PAUSED:t.PLAYING}sendMediaStatus_(t=0,i=null){let r={mediaSessionId:0,playbackRate:this.video_.playbackRate,playerState:this.getPlayState_(),currentTime:this.video_.currentTime,supportedMediaCommands:63,volume:{level:this.video_.volume,muted:this.video_.muted}};i&&(r.media=i);let s={requestId:t,type:"MEDIA_STATUS",status:[r]};this.sendMessage_(s,this.genericBus_)}};l(mr,"POLL_INTERVAL",.5),l(mr,"IDLE_INTERVAL",5),l(mr,"PLAY_STATE",{IDLE:"IDLE",PLAYING:"PLAYING",BUFFERING:"BUFFERING",PAUSED:"PAUSED"});var no=mr;/*! @license
|
|
575
575
|
* Shaka Player
|
|
576
576
|
* Copyright 2016 Google LLC
|
|
577
577
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -587,7 +587,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
587
587
|
* Shaka Player
|
|
588
588
|
* Copyright 2016 Google LLC
|
|
589
589
|
* SPDX-License-Identifier: Apache-2.0
|
|
590
|
-
*/var rs=class rs{constructor(e){l(this,"dataView_");l(this,"reader_");this.dataView_=
|
|
590
|
+
*/var rs=class rs{constructor(e){l(this,"dataView_");l(this,"reader_");this.dataView_=U.toDataView(e),this.reader_=new bt(this.dataView_,bt.Endianness.BIG_ENDIAN)}hasMoreData(){return this.reader_.hasMoreData()}parseElement(){let e=this.parseId_(),t=this.parseVint_(),i;rs.isDynamicSizeValue_(t)?i=this.dataView_.byteLength-this.reader_.getPosition():i=rs.getVintValue_(t);let r=this.reader_.getPosition()+i<=this.dataView_.byteLength?i:this.dataView_.byteLength-this.reader_.getPosition(),s=U.toDataView(this.dataView_,this.reader_.getPosition(),r);return this.reader_.skip(r),new ao(e,s)}parseId_(){let e=this.parseVint_();if(e.length>7)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.EBML_OVERFLOW);let t=0;for(let i of e)t=256*t+i;return t}parseVint_(){let e=this.reader_.getPosition(),t=this.reader_.readUint8();if(t==0)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.EBML_OVERFLOW);let r=8-Math.floor(Math.log2(t));return v.assert(r<=8&&r>=1,"Incorrect log2 value"),this.reader_.skip(r-1),U.toUint8(this.dataView_,e,r)}static getVintValue_(e){if(e.length==8&&e[1]&224)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.JS_INTEGER_OVERFLOW);let t=0;for(let i=0;i<e.length;i++){let r=e[i];if(i==0){let s=1<<8-e.length;t=r&s-1}else t=256*t+r}return t}static isDynamicSizeValue_(e){for(let t of rs.DYNAMIC_SIZES)if(U.equal(e,new Uint8Array(t)))return!0;return!1}};l(rs,"DYNAMIC_SIZES",[[255],[127,255],[63,255,255],[31,255,255,255],[15,255,255,255,255],[7,255,255,255,255,255],[3,255,255,255,255,255,255],[1,255,255,255,255,255,255,255]]);var ss=rs,ao=class{constructor(e,t){l(this,"id");l(this,"dataView_");this.id=e,this.dataView_=t}getOffset(){return this.dataView_.byteOffset}createParser(){return new ss(this.dataView_)}getUint(){if(this.dataView_.byteLength>8)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.EBML_OVERFLOW);if(this.dataView_.byteLength==8&&this.dataView_.getUint8(0)&224)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.JS_INTEGER_OVERFLOW);let e=0;for(let t=0;t<this.dataView_.byteLength;t++){let i=this.dataView_.getUint8(t);e=256*e+i}return e}getFloat(){if(this.dataView_.byteLength==4)return this.dataView_.getFloat32(0);if(this.dataView_.byteLength==8)return this.dataView_.getFloat64(0);throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.EBML_BAD_FLOATING_POINT_SIZE)}};/*! @license
|
|
591
591
|
* Shaka Player
|
|
592
592
|
* Copyright 2016 Google LLC
|
|
593
593
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -595,7 +595,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
595
595
|
* Shaka Player
|
|
596
596
|
* Copyright 2016 Google LLC
|
|
597
597
|
* SPDX-License-Identifier: Apache-2.0
|
|
598
|
-
*/var Hi=class y{static createInitSegment(e,t,i){let r=Re.inheritChild(e,t,"Initialization");if(!r)return null;let s=e.representation.getBaseUris(),n=r.attributes.sourceURL;n&&(s=fe.resolveUris(s,[q.htmlUnescape(n)],e.urlParams()));let a=0,o=null,c=I.parseAttr(r,"range",I.parseRange);c&&(a=c.start,o=c.end);let d=()=>s,u=y.createQualityInfo(e),m=e.adaptationSet.encrypted,f=new Tt(d,a,o,u,null,null,i,m);return f.codecs=e.representation.codecs,f.mimeType=e.representation.mimeType,e.periodInfo&&!e.periodInfo.isLastPeriod&&(f.boundaryEnd=e.periodInfo.start+e.periodInfo.duration),f}static createStreamInfo(e,t,i){v.assert(e.representation.segmentBase,"Should only be called with SegmentBase");let r=Number(Re.inheritAttribute(e,y.fromInheritance_,"presentationTimeOffset"))||0,s=Re.inheritAttribute(e,y.fromInheritance_,"timescale"),n=1;s&&(n=I.parsePositiveInt(s)||1);let a=r/n||0,o=y.createInitSegment(e,y.fromInheritance_,i);y.checkSegmentIndexRangeSupport_(e,o);let c=Fe.shallowCloneObject(e);return{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndex_(c,t,o,a),timescale:n}}static async generateSegmentIndexFromUris(e,t,i,r,s,n,a){let o=e.presentationTimeline,c=!e.dynamic||!e.periodInfo.isLastPeriod,d=e.periodInfo.start,u=e.periodInfo.duration,m=e.representation.mimeType.split("/")[1],f=t,g=null,_=[f(r,s,n,!1),m=="webm"?f(i.getUris(),i.startByte,i.endByte,!0):null];f=null;let T=await Promise.all(_),b=T[0],S=T[1]||null,E=null,w=d-a,A=d,x=u?d+u:1/0,M=e.representation.getBaseUris(),C=M.length!=r.length||M.some((k,
|
|
598
|
+
*/var Hi=class y{static createInitSegment(e,t,i){let r=Re.inheritChild(e,t,"Initialization");if(!r)return null;let s=e.representation.getBaseUris(),n=r.attributes.sourceURL;n&&(s=fe.resolveUris(s,[q.htmlUnescape(n)],e.urlParams()));let a=0,o=null,c=I.parseAttr(r,"range",I.parseRange);c&&(a=c.start,o=c.end);let d=()=>s,u=y.createQualityInfo(e),m=e.adaptationSet.encrypted,f=new Tt(d,a,o,u,null,null,i,m);return f.codecs=e.representation.codecs,f.mimeType=e.representation.mimeType,e.periodInfo&&!e.periodInfo.isLastPeriod&&(f.boundaryEnd=e.periodInfo.start+e.periodInfo.duration),f}static createStreamInfo(e,t,i){v.assert(e.representation.segmentBase,"Should only be called with SegmentBase");let r=Number(Re.inheritAttribute(e,y.fromInheritance_,"presentationTimeOffset"))||0,s=Re.inheritAttribute(e,y.fromInheritance_,"timescale"),n=1;s&&(n=I.parsePositiveInt(s)||1);let a=r/n||0,o=y.createInitSegment(e,y.fromInheritance_,i);y.checkSegmentIndexRangeSupport_(e,o);let c=Fe.shallowCloneObject(e);return{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndex_(c,t,o,a),timescale:n}}static async generateSegmentIndexFromUris(e,t,i,r,s,n,a){let o=e.presentationTimeline,c=!e.dynamic||!e.periodInfo.isLastPeriod,d=e.periodInfo.start,u=e.periodInfo.duration,m=e.representation.mimeType.split("/")[1],f=t,g=null,_=[f(r,s,n,!1),m=="webm"?f(i.getUris(),i.startByte,i.endByte,!0):null];f=null;let T=await Promise.all(_),b=T[0],S=T[1]||null,E=null,w=d-a,A=d,x=u?d+u:1/0,M=e.representation.getBaseUris(),C=M.length!=r.length||M.some((k,D)=>k!=r[D]);m=="mp4"?E=Dn.parse(b,s,M,i,w,A,x,C):(v.assert(S,"WebM requires init data"),E=Un.parse(b,S,M,i,w,A,x));for(let k of E)k.codecs=e.representation.codecs,k.mimeType=e.representation.mimeType,k.bandwidth=e.bandwidth;return o.notifySegments(E),v.assert(!g,"Should not call generateSegmentIndex twice"),g=new Ze(E),c&&g.fit(A,x,!0),g}static fromInheritance_(e){return e.segmentBase}static computeIndexRange_(e){let t=Re.inheritChild(e,y.fromInheritance_,"RepresentationIndex"),i=Re.inheritAttribute(e,y.fromInheritance_,"indexRange"),r=I.parseRange(i||"");return t&&(r=I.parseAttr(t,"range",I.parseRange,r)),r}static computeIndexUris_(e){let t=Re.inheritChild(e,y.fromInheritance_,"RepresentationIndex"),i=e.representation.getBaseUris();if(t){let r=q.htmlUnescape(t.attributes.sourceURL);r&&(i=fe.resolveUris(i,[r],e.urlParams()))}return i}static checkSegmentIndexRangeSupport_(e,t){if(y.checkSegmentIndexSupport(e,t),!y.computeIndexRange_(e))throw p.error("SegmentBase does not contain sufficient segment information:","the SegmentBase does not contain @indexRange","or a RepresentationIndex element.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_NO_SEGMENT_INFO)}static checkSegmentIndexSupport(e,t){let i=R.ContentType,r=e.representation.contentType,s=e.representation.mimeType.split("/")[1];if(r!=i.TEXT&&s!="mp4"&&s!="webm")throw p.error("SegmentBase specifies an unsupported container type.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_UNSUPPORTED_CONTAINER);if(s=="webm"&&!t)throw p.error("SegmentBase does not contain sufficient segment information:","the SegmentBase uses a WebM container,","but does not contain an Initialization element.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_WEBM_MISSING_INIT)}static generateSegmentIndex_(e,t,i,r){let s=y.computeIndexUris_(e),n=y.computeIndexRange_(e);return v.assert(n,"Index range should not be null!"),y.generateSegmentIndexFromUris(e,t,i,s,n.start,n.end,r)}static createQualityInfo(e){let t=e.representation;return{bandwidth:e.bandwidth,audioSamplingRate:t.audioSamplingRate,codecs:t.codecs,contentType:t.contentType,frameRate:t.frameRate||null,height:t.height||null,mimeType:t.mimeType,channelsCount:t.numChannels,pixelAspectRatio:t.pixelAspectRatio||null,width:t.width||null,label:e.adaptationSet.label||null,roles:e.roles||null,language:e.adaptationSet.language||null}}};/*! @license
|
|
599
599
|
* Shaka Player
|
|
600
600
|
* Copyright 2016 Google LLC
|
|
601
601
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -603,7 +603,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
603
603
|
* Shaka Player
|
|
604
604
|
* Copyright 2016 Google LLC
|
|
605
605
|
* SPDX-License-Identifier: Apache-2.0
|
|
606
|
-
*/var pr=class y{static createStreamInfo(e,t,i,r,s,n,a,o,c,d){v.assert(e.representation.segmentTemplate,"Should only be called with SegmentTemplate or segment info defined"),!c&&!e.representation.initialization&&(e.representation.initialization=Re.inheritAttribute(e,y.fromInheritance_,"initialization"));let u=e.representation.initialization?y.createInitSegment_(e,a):null,m=y.parseSegmentTemplateInfo_(e);y.checkSegmentTemplateInfo_(e,m);let f=Fe.shallowCloneObject(e);if(m.indexTemplate)return Hi.checkSegmentIndexSupport(e,u),{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndexFromIndexTemplate_(f,t,u,m),timescale:m.timescale};if(m.segmentDuration){if(!r&&e.adaptationSet.contentType!=="image"&&e.adaptationSet.contentType!=="text"){let g=e.periodInfo.start,_=e.period.id,T=e.periodInfo.duration,b=_!=null&&n.get(_)||T,S=b?g+b:1/0;e.presentationTimeline.notifyMaxSegmentDuration(m.segmentDuration),e.presentationTimeline.notifyPeriodDuration(g,S)}return{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndexFromDuration_(f,m,s,u,n,a,o,e.representation.segmentSequenceCadence),timescale:m.timescale}}else{let g=null,_=null,T=null;e.period.id&&e.representation.id&&(_=e.period.id+","+e.representation.id,T=i.get(_),T&&(g=T.segmentIndex));let b=e.periodInfo.start,S=e.periodInfo.duration?b+e.periodInfo.duration:1/0;if(p.debug(`New manifest ${b} - ${S}`),g){let M=g;M.appendTemplateInfo(m,b,S,u,e.dynamic);let C=e.presentationTimeline.getSegmentAvailabilityStart();M.evict(C)}else{let M=0,C=-1;if(e.period.id!=null&&e.representation.id!=null){let k=d.get(e.period.id);if(k)C=k.timeline;else for(let L of d.values()){let V=R.GAP_OVERLAP_TOLERANCE_SECONDS;if(Math.abs(m.scaledPresentationTimeOffset-L.endTime)<=V&&L.reps.includes(e.representation.id)){C=L.timeline;break}else L.timeline>=M&&(M=L.timeline+1)}}C==-1&&(C=M),p.debug(`Creating TSI with end ${S}`),g=new Vs(e.dynamic,m,e.representation.originalId,e.bandwidth,e.representation.getBaseUris,e.urlParams,b,S,u,a,e.representation.segmentSequenceCadence,C)}if(m.timeline&&e.adaptationSet.contentType!=="image"&&e.adaptationSet.contentType!=="text"){let C=g.getTimeline();e.presentationTimeline.notifyTimeRange(C,b)}T&&e.dynamic&&(T.segmentIndex=g);let E=m.timeline,w=E&&E[E.length-1],A=w?w.end+m.scaledPresentationTimeOffset:-1,x=-1;return g instanceof Vs&&(x=g.continuityTimeline()),{endTime:A,timeline:x,generateSegmentIndex:()=>(g instanceof Vs&&g.isEmpty()&&g.appendTemplateInfo(m,b,S,u,e.dynamic),Promise.resolve(g)),timescale:m.timescale}}}static modifyTimepoints(e,t){let i=Re.inheritChild(e,y.fromInheritance_,"SegmentTimeline");v.assert(i,"timeline node not found");let r=I.findChildren(i,"S");v.assert(r,"timepoints should exist"),I.modifyNodes(r,t),i.children=r}static removeTimepoints(e){let t=Re.inheritChild(e,y.fromInheritance_,"SegmentTimeline");v.assert(t,"timeline node not found"),t.children=[]}static fromInheritance_(e){return e.segmentTemplate}static parseSegmentTemplateInfo_(e){let t=Re.parseSegmentInfo(e,y.fromInheritance_),i=Re.inheritAttribute(e,y.fromInheritance_,"media"),r=Re.inheritAttribute(e,y.fromInheritance_,"index"),s=Re.inheritAttribute(e,y.fromInheritance_,"k"),n=0;return s&&(n=parseInt(s,10)),{unscaledSegmentDuration:t.unscaledSegmentDuration,segmentDuration:t.segmentDuration,timescale:t.timescale,startNumber:t.startNumber,scaledPresentationTimeOffset:t.scaledPresentationTimeOffset,unscaledPresentationTimeOffset:t.unscaledPresentationTimeOffset,timeline:t.timeline,mediaTemplate:i&&q.htmlUnescape(i),indexTemplate:r,mimeType:e.representation.mimeType,codecs:e.representation.codecs,bandwidth:e.bandwidth,numChunks:n}}static checkSegmentTemplateInfo_(e,t){let i=0;if(i+=t.indexTemplate?1:0,i+=t.timeline?1:0,i+=t.segmentDuration?1:0,i==0)throw p.error("SegmentTemplate does not contain any segment information:","the SegmentTemplate must contain either an index URL template","a SegmentTimeline, or a segment duration.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_NO_SEGMENT_INFO);if(i!=1&&(p.warning("SegmentTemplate contains multiple segment information sources:","the SegmentTemplate should only contain an index URL template,","a SegmentTimeline or a segment duration.",e.representation),t.indexTemplate?(p.info("Using the index URL template by default."),t.timeline=null,t.unscaledSegmentDuration=null,t.segmentDuration=null):(v.assert(t.timeline,"There should be a timeline"),p.info("Using the SegmentTimeline by default."),t.unscaledSegmentDuration=null,t.segmentDuration=null)),!t.indexTemplate&&!t.mediaTemplate)throw p.error("SegmentTemplate does not contain sufficient segment information:","the SegmentTemplate's media URL template is missing.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_NO_SEGMENT_INFO)}static generateSegmentIndexFromIndexTemplate_(e,t,i,r){v.assert(r.indexTemplate,"must be using index template");let s=Re.fillUriTemplate(r.indexTemplate,e.representation.originalId,null,null,e.bandwidth||null,null),n=fe.resolveUris(e.representation.getBaseUris(),[s]);return Hi.generateSegmentIndexFromUris(e,t,i,n,0,null,r.scaledPresentationTimeOffset)}static generateSegmentIndexFromDuration_(e,t,i,r,s,n,a,o){v.assert(t.mediaTemplate,"There should be a media template with duration");let c=e.presentationTimeline,d=e.periodInfo.start,u=e.period.id,m=e.periodInfo.duration,f=()=>{let G=u!=null&&s.get(u)||m;return G?d+G:1/0},g=t.segmentDuration;v.assert(g!=null,"Segment duration must not be null!");let _=t.startNumber,T=t.mediaTemplate,b=e.bandwidth||null,S=e.representation.originalId,E=e.representation.getBaseUris,w=e.urlParams,A=d-t.scaledPresentationTimeOffset,x=()=>[Math.max(c.getSegmentAvailabilityStart(),d),Math.min(c.getSegmentAvailabilityEnd(),f())],M=()=>{let G=x();v.assert(G.every(isFinite),"Available presentation times must be finite!"),v.assert(G.every(W=>W>=0),"Available presentation times must be positive!"),v.assert(g!=null,"Segment duration must not be null!");let J=G.map(W=>W-d),Z=[Math.ceil(J[0]/g),Math.ceil(J[1]/g)-1];return e.representation.availabilityTimeOffset&&Z[1]++,Z.map(W=>W+_)},C=M(),k=e.dynamic?Math.max(C[0],C[1]-i+1):C[0],L=a||C[1],V=G=>{v.assert(g!=null,"Segment duration must not be null!");let J=G-_,Z=J*g,ce=t.unscaledSegmentDuration;v.assert(ce!=null,"Segment duration must not be null!");let W=J*ce;"BigInt"in window&&W>Number.MAX_SAFE_INTEGER&&(W=BigInt(J)*BigInt(ce));let z=Z+d,ge=z+g,Y=Math.min(ge,f());v.assert(z<Y,"Generated a segment outside of the period!");let X=[],N=t.numChunks;if(N){let tt=(Y-z)/N;for(let gt=0;gt<N;gt++){let St=z+tt*gt,yt=St+tt,Ct=gt,bi=()=>{let Bt=Re.fillUriTemplate(T,S,G,Ct,b,W);return fe.resolveUris(E(),[Bt],w())},we=new Te(St,yt,bi,0,null,r,A,d,f(),[],"",null,null,Te.Status.AVAILABLE,n);we.codecs=e.representation.codecs,we.mimeType=e.representation.mimeType,o==0?gt>0&&we.markAsNonIndependent():gt%o!=0&&we.markAsNonIndependent(),X.push(we)}}let $=()=>{if(N)return[];let tt=Re.fillUriTemplate(T,S,G,null,b,W);return fe.resolveUris(E(),[tt],w())},Ie=new Te(z,Y,$,0,null,r,A,d,f(),X,"",null,null,Te.Status.AVAILABLE,n,X.length>0);return Ie.codecs=e.representation.codecs,Ie.mimeType=e.representation.mimeType,Ie.bandwidth=e.bandwidth,Ie.trueEndTime=ge,Ie},ee=new y.FixedDurationSegmentIndex_(k,L,_,d,g,V),oe=c.getSegmentAvailabilityEnd()<f(),le=c.isLive();if(oe||le){let G=Math.max(k,L+1),J=g;e.representation.availabilityTimeOffset&&(J=.1),ee.updateEvery(J,()=>{let Z=c.getSegmentAvailabilityStart();ee.evict(Z);let[ce,W]=M(),z=[];for(;G<=W;){let ge=V(G);z.push(ge),G++}return Z>f()&&!z.length?null:z})}return Promise.resolve(ee)}static createInitSegment_(e,t){let i=e.representation.initialization;if(i||(i=Re.inheritAttribute(e,y.fromInheritance_,"initialization")),!i)return null;i=q.htmlUnescape(i);let r=e.representation.originalId,s=e.bandwidth||null,n=e.representation.getBaseUris,a=e.urlParams,o=()=>{v.assert(i,"Should have returned earlier");let m=Re.fillUriTemplate(i,r,null,null,s,null);return fe.resolveUris(n(),[m],a())},c=Hi.createQualityInfo(e),d=e.adaptationSet.encrypted,u=new Tt(o,0,null,c,null,null,t,d);return u.codecs=e.representation.codecs,u.mimeType=e.representation.mimeType,e.periodInfo&&!e.periodInfo.isLastPeriod&&(u.boundaryEnd=e.periodInfo.start+e.periodInfo.duration),u}};pr.FixedDurationSegmentIndex_=class extends Ze{constructor(y,e,t,i,r,s){let n=Math.max(0,e-y+1);super(new Array(n)),this.minPosition_=y,this.startNumber_=t,this.periodStart_=i,this.segmentDuration_=r,this.createReference_=s}find(y){let e=this.references.length-1;if(e<0)return null;let t=this.get(this.numEvicted_);if(!t)return null;if(y<t.startTime)return this.numEvicted_;let r=Math.floor((y-this.periodStart_)/this.segmentDuration_)+this.startNumber_-this.minPosition_;if(r<this.numEvicted_)return null;let s=this.get(r);if(!s)return null;let a=r-this.numEvicted_<e?this.get(r+1):null,o=a?a.startTime:s.endTime;return y>=s.startTime&&y<o?r:null}get(y){let e=y-this.numEvicted_;if(e<0||e>=this.references.length)return null;let t=this.references[e];return t||(t=this.createReference_(this.minPosition_+y),this.references[e]=t),t}earliestReference(){return this.get(this.numEvicted_)}forEachTopLevelReference(y){for(let e=0;e<this.references.length;e++){let t=this.get(e+this.numEvicted_);t&&y(t)}}evict(y){if(this.getIsImmutable())return;let e=this.references.length-1;if(e<0)return;let t=this.get(this.numEvicted_);if(!t||t.endTime>y)return;let i=this.numEvicted_+e,r=this.get(i),s=r&&r.endTime<=y?this.references.length:Math.max(0,Math.min(this.references.length,Math.floor((y-this.periodStart_)/this.segmentDuration_+this.startNumber_-1)-(this.minPosition_+this.numEvicted_)+1));s>0&&(this.numEvicted_+=s,this.references=this.references.slice(s))}};var Vs=class y extends Ze{constructor(t,i,r,s,n,a,o,c,d,u,m,f){super([]);l(this,"dynamic_");l(this,"templateInfo_");l(this,"representationId_");l(this,"bandwidth_");l(this,"getBaseUris_");l(this,"urlParams_");l(this,"periodStart_");l(this,"periodEnd_");l(this,"initSegmentReference_");l(this,"aesKey_");l(this,"segmentSequenceCadence_");l(this,"timeline_");l(this,"references");this.dynamic_=t,this.templateInfo_=i,this.representationId_=r,this.bandwidth_=s,this.getBaseUris_=n,this.urlParams_=a,this.periodStart_=o,this.periodEnd_=c,this.initSegmentReference_=d,this.aesKey_=u,this.segmentSequenceCadence_=m,this.timeline_=f,this.fitTimeline()}getNumReferences(){return this.templateInfo_?this.templateInfo_.timeline.length:0}release(){super.release(),this.templateInfo_=null}evict(t){if(!this.templateInfo_)return;p.debug(`${this.representationId_} Evicting at ${t}`);let i=this.templateInfo_.timeline;if(!i)return;let r=0;for(;r<i.length&&i[r].end+this.periodStart_<=t;)r++;r>0&&(this.templateInfo_.timeline=i.slice(r),this.references.length>=r&&(this.references=this.references.slice(r)),this.numEvicted_+=r,this.getNumReferences()===0&&this.release())}appendTemplateInfo(t,i,r,s,n){if(this.updateInitSegmentReference(s),this.dynamic_=n,!this.templateInfo_)this.templateInfo_=t,this.periodStart_=i,this.periodEnd_=r;else{if(this.templateInfo_.unscaledPresentationTimeOffset!==t.unscaledPresentationTimeOffset){let c=t.unscaledPresentationTimeOffset-this.templateInfo_.unscaledPresentationTimeOffset;p.error("Possibly suboptimal manifest detected!","presentationTimeOffset is "+t.unscaledPresentationTimeOffset,"which differs "+c+" from the cache template.");for(let d=0;d<t.timeline.length;d++){let u=t.timeline[d];u.unscaledStart+=c,u.unscaledEnd+=c,u.start=(u.unscaledStart+c)/t.timescale,u.end=(u.unscaledEnd+c)/t.timescale}}this.templateInfo_.mediaTemplate!==t.mediaTemplate&&(this.templateInfo_.mediaTemplate=t.mediaTemplate);let a=this.templateInfo_.timeline,o;if(a.length){let c=a[a.length-1];o=t.timeline.filter(d=>d.end>c.end)}else o=t.timeline.slice();o.length>0&&(p.debug(`Appending ${o.length} entries`),this.templateInfo_.timeline.push(...o)),this.periodEnd_!==r&&(this.periodEnd_=r)}this.fitTimeline()}updateInitSegmentReference(t){if(this.initSegmentReference_!==t){this.initSegmentReference_=t;for(let i of this.references)i&&i.updateInitSegmentReference(t)}}isBeforeFirstEntry(t){if(this.templateInfo_&&this.templateInfo_.timeline&&this.templateInfo_.timeline.length){let r=this.templateInfo_.timeline;return t<r[0].start+this.periodStart_}else return!1}fitTimeline(){if(!this.templateInfo_||this.getIsImmutable())return;let t=this.templateInfo_.timeline;v.assert(t,"Timeline should be non-null!");let i=[];for(let r of t)r.start>=this.periodEnd_||r.end<=0||i.push(r);this.templateInfo_.timeline=i,this.evict(this.periodStart_)}getTimeline(){if(!this.templateInfo_)return[];let t=this.templateInfo_.timeline;return v.assert(t,"Timeline should be non-null!"),t}find(t){if(p.debug(`Find ${t}`),this.isBeforeFirstEntry(t))return this.numEvicted_;if(!this.templateInfo_)return null;let i=this.templateInfo_.timeline;if(t<this.periodStart_||t>=this.periodEnd_)return null;let r=i.length-1,s=ye.binarySearch(i,c=>c.start+this.periodStart_<=t)-1;if(s<0)return null;let n=i[s],a=n.start+this.periodStart_,o;return s<r?o=i[s+1].start+this.periodStart_:this.periodEnd_===1/0?o=n.end+this.periodStart_:o=this.periodEnd_,t>=a&&t<o?s+this.numEvicted_:null}get(t){let i=t-this.numEvicted_;if(i<0||i>=this.getNumReferences()||!this.templateInfo_)return null;let r=this.references[i];if(!r){let s=this.templateInfo_.timeline[i],n=s.segmentPosition,a=s.unscaledStart+this.templateInfo_.unscaledPresentationTimeOffset,o=this.periodStart_-this.templateInfo_.scaledPresentationTimeOffset,c=this.periodStart_+s.end,d=c;i===this.getNumReferences()-1&&this.periodEnd_!==1/0&&(this.dynamic_&&Math.abs(d-this.periodEnd_)>.1?d=Math.min(d,this.periodEnd_):d=this.periodEnd_);let u=this.templateInfo_.codecs,m=this.templateInfo_.mimeType,f=this.templateInfo_.bandwidth,g=[],_=!1;if(s.partialSegments&&this.templateInfo_&&this.templateInfo_.mediaTemplate&&(_=this.templateInfo_.mediaTemplate.includes("$SubNumber$")),_){let b=(s.end-s.start)/s.partialSegments;for(let S=0;S<s.partialSegments;S++){let E=s.start+b*S,w=E+b,A=S,x=null,M=()=>this.templateInfo_?(x==null&&(x=y.createUris_(this.templateInfo_.mediaTemplate,this.representationId_,n,this.bandwidth_,a,A,this.getBaseUris_,this.urlParams_)),x):[],C=new Te(this.periodStart_+E,this.periodStart_+w,M,0,null,this.initSegmentReference_,o,this.periodStart_,this.periodEnd_,[],"",null,null,Te.Status.AVAILABLE,this.aesKey_);C.codecs=u,C.mimeType=m,C.bandwidth=f,this.segmentSequenceCadence_==0?S>0&&C.markAsNonIndependent():S%this.segmentSequenceCadence_!=0&&C.markAsNonIndependent(),g.push(C)}}let T=()=>g.length>0||!this.templateInfo_?[]:y.createUris_(this.templateInfo_.mediaTemplate,this.representationId_,n,this.bandwidth_,a,null,this.getBaseUris_,this.urlParams_);r=new Te(this.periodStart_+s.start,d,T,0,null,this.initSegmentReference_,o,this.periodStart_,this.periodEnd_,g,"",null,null,Te.Status.AVAILABLE,this.aesKey_,g.length>0),r.codecs=u,r.mimeType=m,r.trueEndTime=c,r.bandwidth=f,this.references[i]=r}return r}forEachTopLevelReference(t){this.fitTimeline();for(let i=0;i<this.getNumReferences();i++){let r=this.get(i+this.numEvicted_);r&&t(r)}}static createUris_(t,i,r,s,n,a,o,c){let d=Re.fillUriTemplate(t,i,r,a,s||null,n);return fe.resolveUris(o(),[d],c())}continuityTimeline(){return this.timeline_}};/*! @license
|
|
606
|
+
*/var pr=class y{static createStreamInfo(e,t,i,r,s,n,a,o,c,d){v.assert(e.representation.segmentTemplate,"Should only be called with SegmentTemplate or segment info defined"),!c&&!e.representation.initialization&&(e.representation.initialization=Re.inheritAttribute(e,y.fromInheritance_,"initialization"));let u=e.representation.initialization?y.createInitSegment_(e,a):null,m=y.parseSegmentTemplateInfo_(e);y.checkSegmentTemplateInfo_(e,m);let f=Fe.shallowCloneObject(e);if(m.indexTemplate)return Hi.checkSegmentIndexSupport(e,u),{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndexFromIndexTemplate_(f,t,u,m),timescale:m.timescale};if(m.segmentDuration){if(!r&&e.adaptationSet.contentType!=="image"&&e.adaptationSet.contentType!=="text"){let g=e.periodInfo.start,_=e.period.id,T=e.periodInfo.duration,b=_!=null&&n.get(_)||T,S=b?g+b:1/0;e.presentationTimeline.notifyMaxSegmentDuration(m.segmentDuration),e.presentationTimeline.notifyPeriodDuration(g,S)}return{endTime:-1,timeline:-1,generateSegmentIndex:()=>y.generateSegmentIndexFromDuration_(f,m,s,u,n,a,o,e.representation.segmentSequenceCadence),timescale:m.timescale}}else{let g=null,_=null,T=null;e.period.id&&e.representation.id&&(_=e.period.id+","+e.representation.id,T=i.get(_),T&&(g=T.segmentIndex));let b=e.periodInfo.start,S=e.periodInfo.duration?b+e.periodInfo.duration:1/0;if(p.debug(`New manifest ${b} - ${S}`),g){let M=g;M.appendTemplateInfo(m,b,S,u,e.dynamic);let C=e.presentationTimeline.getSegmentAvailabilityStart();M.evict(C)}else{let M=0,C=-1;if(e.period.id!=null&&e.representation.id!=null){let k=d.get(e.period.id);if(k)C=k.timeline;else for(let D of d.values()){let V=R.GAP_OVERLAP_TOLERANCE_SECONDS;if(Math.abs(m.scaledPresentationTimeOffset-D.endTime)<=V&&D.reps.includes(e.representation.id)){C=D.timeline;break}else D.timeline>=M&&(M=D.timeline+1)}}C==-1&&(C=M),p.debug(`Creating TSI with end ${S}`),g=new Vs(e.dynamic,m,e.representation.originalId,e.bandwidth,e.representation.getBaseUris,e.urlParams,b,S,u,a,e.representation.segmentSequenceCadence,C)}if(m.timeline&&e.adaptationSet.contentType!=="image"&&e.adaptationSet.contentType!=="text"){let C=g.getTimeline();e.presentationTimeline.notifyTimeRange(C,b)}T&&e.dynamic&&(T.segmentIndex=g);let E=m.timeline,w=E&&E[E.length-1],A=w?w.end+m.scaledPresentationTimeOffset:-1,x=-1;return g instanceof Vs&&(x=g.continuityTimeline()),{endTime:A,timeline:x,generateSegmentIndex:()=>(g instanceof Vs&&g.isEmpty()&&g.appendTemplateInfo(m,b,S,u,e.dynamic),Promise.resolve(g)),timescale:m.timescale}}}static modifyTimepoints(e,t){let i=Re.inheritChild(e,y.fromInheritance_,"SegmentTimeline");v.assert(i,"timeline node not found");let r=I.findChildren(i,"S");v.assert(r,"timepoints should exist"),I.modifyNodes(r,t),i.children=r}static removeTimepoints(e){let t=Re.inheritChild(e,y.fromInheritance_,"SegmentTimeline");v.assert(t,"timeline node not found"),t.children=[]}static fromInheritance_(e){return e.segmentTemplate}static parseSegmentTemplateInfo_(e){let t=Re.parseSegmentInfo(e,y.fromInheritance_),i=Re.inheritAttribute(e,y.fromInheritance_,"media"),r=Re.inheritAttribute(e,y.fromInheritance_,"index"),s=Re.inheritAttribute(e,y.fromInheritance_,"k"),n=0;return s&&(n=parseInt(s,10)),{unscaledSegmentDuration:t.unscaledSegmentDuration,segmentDuration:t.segmentDuration,timescale:t.timescale,startNumber:t.startNumber,scaledPresentationTimeOffset:t.scaledPresentationTimeOffset,unscaledPresentationTimeOffset:t.unscaledPresentationTimeOffset,timeline:t.timeline,mediaTemplate:i&&q.htmlUnescape(i),indexTemplate:r,mimeType:e.representation.mimeType,codecs:e.representation.codecs,bandwidth:e.bandwidth,numChunks:n}}static checkSegmentTemplateInfo_(e,t){let i=0;if(i+=t.indexTemplate?1:0,i+=t.timeline?1:0,i+=t.segmentDuration?1:0,i==0)throw p.error("SegmentTemplate does not contain any segment information:","the SegmentTemplate must contain either an index URL template","a SegmentTimeline, or a segment duration.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_NO_SEGMENT_INFO);if(i!=1&&(p.warning("SegmentTemplate contains multiple segment information sources:","the SegmentTemplate should only contain an index URL template,","a SegmentTimeline or a segment duration.",e.representation),t.indexTemplate?(p.info("Using the index URL template by default."),t.timeline=null,t.unscaledSegmentDuration=null,t.segmentDuration=null):(v.assert(t.timeline,"There should be a timeline"),p.info("Using the SegmentTimeline by default."),t.unscaledSegmentDuration=null,t.segmentDuration=null)),!t.indexTemplate&&!t.mediaTemplate)throw p.error("SegmentTemplate does not contain sufficient segment information:","the SegmentTemplate's media URL template is missing.",e.representation),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_NO_SEGMENT_INFO)}static generateSegmentIndexFromIndexTemplate_(e,t,i,r){v.assert(r.indexTemplate,"must be using index template");let s=Re.fillUriTemplate(r.indexTemplate,e.representation.originalId,null,null,e.bandwidth||null,null),n=fe.resolveUris(e.representation.getBaseUris(),[s]);return Hi.generateSegmentIndexFromUris(e,t,i,n,0,null,r.scaledPresentationTimeOffset)}static generateSegmentIndexFromDuration_(e,t,i,r,s,n,a,o){v.assert(t.mediaTemplate,"There should be a media template with duration");let c=e.presentationTimeline,d=e.periodInfo.start,u=e.period.id,m=e.periodInfo.duration,f=()=>{let G=u!=null&&s.get(u)||m;return G?d+G:1/0},g=t.segmentDuration;v.assert(g!=null,"Segment duration must not be null!");let _=t.startNumber,T=t.mediaTemplate,b=e.bandwidth||null,S=e.representation.originalId,E=e.representation.getBaseUris,w=e.urlParams,A=d-t.scaledPresentationTimeOffset,x=()=>[Math.max(c.getSegmentAvailabilityStart(),d),Math.min(c.getSegmentAvailabilityEnd(),f())],M=()=>{let G=x();v.assert(G.every(isFinite),"Available presentation times must be finite!"),v.assert(G.every(W=>W>=0),"Available presentation times must be positive!"),v.assert(g!=null,"Segment duration must not be null!");let J=G.map(W=>W-d),Z=[Math.ceil(J[0]/g),Math.ceil(J[1]/g)-1];return e.representation.availabilityTimeOffset&&Z[1]++,Z.map(W=>W+_)},C=M(),k=e.dynamic?Math.max(C[0],C[1]-i+1):C[0],D=a||C[1],V=G=>{v.assert(g!=null,"Segment duration must not be null!");let J=G-_,Z=J*g,ce=t.unscaledSegmentDuration;v.assert(ce!=null,"Segment duration must not be null!");let W=J*ce;"BigInt"in window&&W>Number.MAX_SAFE_INTEGER&&(W=BigInt(J)*BigInt(ce));let z=Z+d,ge=z+g,Y=Math.min(ge,f());v.assert(z<Y,"Generated a segment outside of the period!");let X=[],N=t.numChunks;if(N){let tt=(Y-z)/N;for(let gt=0;gt<N;gt++){let St=z+tt*gt,yt=St+tt,Ct=gt,bi=()=>{let Bt=Re.fillUriTemplate(T,S,G,Ct,b,W);return fe.resolveUris(E(),[Bt],w())},we=new Te(St,yt,bi,0,null,r,A,d,f(),[],"",null,null,Te.Status.AVAILABLE,n);we.codecs=e.representation.codecs,we.mimeType=e.representation.mimeType,o==0?gt>0&&we.markAsNonIndependent():gt%o!=0&&we.markAsNonIndependent(),X.push(we)}}let $=()=>{if(N)return[];let tt=Re.fillUriTemplate(T,S,G,null,b,W);return fe.resolveUris(E(),[tt],w())},Ie=new Te(z,Y,$,0,null,r,A,d,f(),X,"",null,null,Te.Status.AVAILABLE,n,X.length>0);return Ie.codecs=e.representation.codecs,Ie.mimeType=e.representation.mimeType,Ie.bandwidth=e.bandwidth,Ie.trueEndTime=ge,Ie},ee=new y.FixedDurationSegmentIndex_(k,D,_,d,g,V),oe=c.getSegmentAvailabilityEnd()<f(),le=c.isLive();if(oe||le){let G=Math.max(k,D+1),J=g;e.representation.availabilityTimeOffset&&(J=.1),ee.updateEvery(J,()=>{let Z=c.getSegmentAvailabilityStart();ee.evict(Z);let[ce,W]=M(),z=[];for(;G<=W;){let ge=V(G);z.push(ge),G++}return Z>f()&&!z.length?null:z})}return Promise.resolve(ee)}static createInitSegment_(e,t){let i=e.representation.initialization;if(i||(i=Re.inheritAttribute(e,y.fromInheritance_,"initialization")),!i)return null;i=q.htmlUnescape(i);let r=e.representation.originalId,s=e.bandwidth||null,n=e.representation.getBaseUris,a=e.urlParams,o=()=>{v.assert(i,"Should have returned earlier");let m=Re.fillUriTemplate(i,r,null,null,s,null);return fe.resolveUris(n(),[m],a())},c=Hi.createQualityInfo(e),d=e.adaptationSet.encrypted,u=new Tt(o,0,null,c,null,null,t,d);return u.codecs=e.representation.codecs,u.mimeType=e.representation.mimeType,e.periodInfo&&!e.periodInfo.isLastPeriod&&(u.boundaryEnd=e.periodInfo.start+e.periodInfo.duration),u}};pr.FixedDurationSegmentIndex_=class extends Ze{constructor(y,e,t,i,r,s){let n=Math.max(0,e-y+1);super(new Array(n)),this.minPosition_=y,this.startNumber_=t,this.periodStart_=i,this.segmentDuration_=r,this.createReference_=s}find(y){let e=this.references.length-1;if(e<0)return null;let t=this.get(this.numEvicted_);if(!t)return null;if(y<t.startTime)return this.numEvicted_;let r=Math.floor((y-this.periodStart_)/this.segmentDuration_)+this.startNumber_-this.minPosition_;if(r<this.numEvicted_)return null;let s=this.get(r);if(!s)return null;let a=r-this.numEvicted_<e?this.get(r+1):null,o=a?a.startTime:s.endTime;return y>=s.startTime&&y<o?r:null}get(y){let e=y-this.numEvicted_;if(e<0||e>=this.references.length)return null;let t=this.references[e];return t||(t=this.createReference_(this.minPosition_+y),this.references[e]=t),t}earliestReference(){return this.get(this.numEvicted_)}forEachTopLevelReference(y){for(let e=0;e<this.references.length;e++){let t=this.get(e+this.numEvicted_);t&&y(t)}}evict(y){if(this.getIsImmutable())return;let e=this.references.length-1;if(e<0)return;let t=this.get(this.numEvicted_);if(!t||t.endTime>y)return;let i=this.numEvicted_+e,r=this.get(i),s=r&&r.endTime<=y?this.references.length:Math.max(0,Math.min(this.references.length,Math.floor((y-this.periodStart_)/this.segmentDuration_+this.startNumber_-1)-(this.minPosition_+this.numEvicted_)+1));s>0&&(this.numEvicted_+=s,this.references=this.references.slice(s))}};var Vs=class y extends Ze{constructor(t,i,r,s,n,a,o,c,d,u,m,f){super([]);l(this,"dynamic_");l(this,"templateInfo_");l(this,"representationId_");l(this,"bandwidth_");l(this,"getBaseUris_");l(this,"urlParams_");l(this,"periodStart_");l(this,"periodEnd_");l(this,"initSegmentReference_");l(this,"aesKey_");l(this,"segmentSequenceCadence_");l(this,"timeline_");l(this,"references");this.dynamic_=t,this.templateInfo_=i,this.representationId_=r,this.bandwidth_=s,this.getBaseUris_=n,this.urlParams_=a,this.periodStart_=o,this.periodEnd_=c,this.initSegmentReference_=d,this.aesKey_=u,this.segmentSequenceCadence_=m,this.timeline_=f,this.fitTimeline()}getNumReferences(){return this.templateInfo_?this.templateInfo_.timeline.length:0}release(){super.release(),this.templateInfo_=null}evict(t){if(!this.templateInfo_)return;p.debug(`${this.representationId_} Evicting at ${t}`);let i=this.templateInfo_.timeline;if(!i)return;let r=0;for(;r<i.length&&i[r].end+this.periodStart_<=t;)r++;r>0&&(this.templateInfo_.timeline=i.slice(r),this.references.length>=r&&(this.references=this.references.slice(r)),this.numEvicted_+=r,this.getNumReferences()===0&&this.release())}appendTemplateInfo(t,i,r,s,n){if(this.updateInitSegmentReference(s),this.dynamic_=n,!this.templateInfo_)this.templateInfo_=t,this.periodStart_=i,this.periodEnd_=r;else{if(this.templateInfo_.unscaledPresentationTimeOffset!==t.unscaledPresentationTimeOffset){let c=t.unscaledPresentationTimeOffset-this.templateInfo_.unscaledPresentationTimeOffset;p.error("Possibly suboptimal manifest detected!","presentationTimeOffset is "+t.unscaledPresentationTimeOffset,"which differs "+c+" from the cache template.");for(let d=0;d<t.timeline.length;d++){let u=t.timeline[d];u.unscaledStart+=c,u.unscaledEnd+=c,u.start=(u.unscaledStart+c)/t.timescale,u.end=(u.unscaledEnd+c)/t.timescale}}this.templateInfo_.mediaTemplate!==t.mediaTemplate&&(this.templateInfo_.mediaTemplate=t.mediaTemplate);let a=this.templateInfo_.timeline,o;if(a.length){let c=a[a.length-1];o=t.timeline.filter(d=>d.end>c.end)}else o=t.timeline.slice();o.length>0&&(p.debug(`Appending ${o.length} entries`),this.templateInfo_.timeline.push(...o)),this.periodEnd_!==r&&(this.periodEnd_=r)}this.fitTimeline()}updateInitSegmentReference(t){if(this.initSegmentReference_!==t){this.initSegmentReference_=t;for(let i of this.references)i&&i.updateInitSegmentReference(t)}}isBeforeFirstEntry(t){if(this.templateInfo_&&this.templateInfo_.timeline&&this.templateInfo_.timeline.length){let r=this.templateInfo_.timeline;return t<r[0].start+this.periodStart_}else return!1}fitTimeline(){if(!this.templateInfo_||this.getIsImmutable())return;let t=this.templateInfo_.timeline;v.assert(t,"Timeline should be non-null!");let i=[];for(let r of t)r.start>=this.periodEnd_||r.end<=0||i.push(r);this.templateInfo_.timeline=i,this.evict(this.periodStart_)}getTimeline(){if(!this.templateInfo_)return[];let t=this.templateInfo_.timeline;return v.assert(t,"Timeline should be non-null!"),t}find(t){if(p.debug(`Find ${t}`),this.isBeforeFirstEntry(t))return this.numEvicted_;if(!this.templateInfo_)return null;let i=this.templateInfo_.timeline;if(t<this.periodStart_||t>=this.periodEnd_)return null;let r=i.length-1,s=ye.binarySearch(i,c=>c.start+this.periodStart_<=t)-1;if(s<0)return null;let n=i[s],a=n.start+this.periodStart_,o;return s<r?o=i[s+1].start+this.periodStart_:this.periodEnd_===1/0?o=n.end+this.periodStart_:o=this.periodEnd_,t>=a&&t<o?s+this.numEvicted_:null}get(t){let i=t-this.numEvicted_;if(i<0||i>=this.getNumReferences()||!this.templateInfo_)return null;let r=this.references[i];if(!r){let s=this.templateInfo_.timeline[i],n=s.segmentPosition,a=s.unscaledStart+this.templateInfo_.unscaledPresentationTimeOffset,o=this.periodStart_-this.templateInfo_.scaledPresentationTimeOffset,c=this.periodStart_+s.end,d=c;i===this.getNumReferences()-1&&this.periodEnd_!==1/0&&(this.dynamic_&&Math.abs(d-this.periodEnd_)>.1?d=Math.min(d,this.periodEnd_):d=this.periodEnd_);let u=this.templateInfo_.codecs,m=this.templateInfo_.mimeType,f=this.templateInfo_.bandwidth,g=[],_=!1;if(s.partialSegments&&this.templateInfo_&&this.templateInfo_.mediaTemplate&&(_=this.templateInfo_.mediaTemplate.includes("$SubNumber$")),_){let b=(s.end-s.start)/s.partialSegments;for(let S=0;S<s.partialSegments;S++){let E=s.start+b*S,w=E+b,A=S,x=null,M=()=>this.templateInfo_?(x==null&&(x=y.createUris_(this.templateInfo_.mediaTemplate,this.representationId_,n,this.bandwidth_,a,A,this.getBaseUris_,this.urlParams_)),x):[],C=new Te(this.periodStart_+E,this.periodStart_+w,M,0,null,this.initSegmentReference_,o,this.periodStart_,this.periodEnd_,[],"",null,null,Te.Status.AVAILABLE,this.aesKey_);C.codecs=u,C.mimeType=m,C.bandwidth=f,this.segmentSequenceCadence_==0?S>0&&C.markAsNonIndependent():S%this.segmentSequenceCadence_!=0&&C.markAsNonIndependent(),g.push(C)}}let T=()=>g.length>0||!this.templateInfo_?[]:y.createUris_(this.templateInfo_.mediaTemplate,this.representationId_,n,this.bandwidth_,a,null,this.getBaseUris_,this.urlParams_);r=new Te(this.periodStart_+s.start,d,T,0,null,this.initSegmentReference_,o,this.periodStart_,this.periodEnd_,g,"",null,null,Te.Status.AVAILABLE,this.aesKey_,g.length>0),r.codecs=u,r.mimeType=m,r.trueEndTime=c,r.bandwidth=f,this.references[i]=r}return r}forEachTopLevelReference(t){this.fitTimeline();for(let i=0;i<this.getNumReferences();i++){let r=this.get(i+this.numEvicted_);r&&t(r)}}static createUris_(t,i,r,s,n,a,o,c){let d=Re.fillUriTemplate(t,i,r,a,s||null,n);return fe.resolveUris(o(),[d],c())}continuityTimeline(){return this.timeline_}};/*! @license
|
|
607
607
|
* Shaka Player
|
|
608
608
|
* Copyright 2016 Google LLC
|
|
609
609
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -611,15 +611,15 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
611
611
|
* Shaka Player
|
|
612
612
|
* Copyright 2016 Google LLC
|
|
613
613
|
* SPDX-License-Identifier: Apache-2.0
|
|
614
|
-
*/var se=class se{constructor(){l(this,"variants_");l(this,"audioStreams_");l(this,"videoStreams_");l(this,"textStreams_");l(this,"imageStreams_");l(this,"useStreamOnce_");l(this,"usedPeriodIds_");l(this,"streamCollections_");this.variants_=[],this.audioStreams_=[],this.videoStreams_=[],this.textStreams_=[],this.imageStreams_=[],this.useStreamOnce_=!1,this.usedPeriodIds_=new Set;let e=R.ContentType;this.streamCollections_=new Map().set(e.AUDIO,this.audioStreams_).set(e.VIDEO,this.videoStreams_).set(e.TEXT,this.textStreams_).set(e.IMAGE,this.imageStreams_)}release(){let e=this.audioStreams_.concat(this.videoStreams_,this.textStreams_,this.imageStreams_);for(let t of e)t.segmentIndex&&t.segmentIndex.release();this.audioStreams_=[],this.videoStreams_=[],this.textStreams_=[],this.imageStreams_=[],this.variants_=[],this.useStreamOnce_=!1,this.usedPeriodIds_.clear(),this.streamCollections_.clear()}getVariants(){return this.variants_}getTextStreams(){return this.textStreams_.slice()}getImageStreams(){return this.imageStreams_}deleteStream(e,t){if(!e)return;let i=this.streamCollections_.get(e.type)||[];for(let r of i){se.removeFromMatchedStreams_(r,e);let s=se.getOptionalStreams(r);for(let n of s)se.removeFromMatchedStreams_(n,e)}e.segmentIndex&&e.closeSegmentIndex(),this.usedPeriodIds_.delete(t)}static removeFromMatchedStreams_(e,t){var i;e.matchedStreams=(i=e.matchedStreams)==null?void 0:i.filter(r=>r!==t)}static toStreamMap_(e,t){return new Map(e.map(i=>[t(i),i]))}getStreamsPerPeriod_(e,t){let i=R.ContentType,r=[],s=[],n=[],a=[];for(let o of e){let c=se.toStreamMap_(o.audioStreams,se.generateAudioKey_),d=se.toStreamMap_(o.videoStreams,se.generateVideoKey_),u=se.toStreamMap_(o.textStreams,se.generateTextKey_),m=se.toStreamMap_(o.imageStreams,se.generateImageKey_);if(t){let f=se.dummyStream_(i.TEXT);u.set(se.generateTextKey_(f),f);let g=se.dummyStream_(i.IMAGE);m.set(se.generateImageKey_(g),g)}r.push(c),s.push(d),n.push(u),a.push(m)}return{audioStreamsPerPeriod:r,videoStreamsPerPeriod:s,textStreamsPerPeriod:n,imageStreamsPerPeriod:a}}async combinePeriods(e,t,i=!1){let r=R.ContentType;if(!t&&e.length==1){let{audioStreamsPerPeriod:a,videoStreamsPerPeriod:o,textStreamsPerPeriod:c,imageStreamsPerPeriod:d}=this.getStreamsPerPeriod_(e,!1);this.audioStreams_=Array.from(a[0].values()),this.videoStreams_=Array.from(o[0].values()),this.textStreams_=Array.from(c[0].values()),this.imageStreams_=Array.from(d[0].values())}else{let a=i?this.usedPeriodIds_.size:0,o=-1;for(let f=0;f<e.length;f++){let g=e[f];this.usedPeriodIds_.has(g.id)||(this.usedPeriodIds_.add(g.id),o==-1&&(o=f))}if(o==-1)return;let{audioStreamsPerPeriod:c,videoStreamsPerPeriod:d,textStreamsPerPeriod:u,imageStreamsPerPeriod:m}=this.getStreamsPerPeriod_(e,!0);await Promise.all([this.combine_(this.audioStreams_,c,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.videoStreams_,d,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.textStreams_,u,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.imageStreams_,m,o,se.cloneStream_,se.concatenateStreams_,a)])}let s=0,n=[];if(!this.videoStreams_.length||!this.audioStreams_.length){let a=this.videoStreams_.length?this.videoStreams_:this.audioStreams_;for(let o of a){let c=s++,d=o.bandwidth||0;o.dependencyStream&&(d+=o.dependencyStream.bandwidth||0),n.push({id:c,language:o.language,disabledUntilTime:0,primary:o.primary,audio:o.type==r.AUDIO?o:null,video:o.type==r.VIDEO?o:null,bandwidth:d,drmInfos:o.drmInfos,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}}else for(let a of this.audioStreams_)for(let o of this.videoStreams_){let c=de.getCommonDrmInfos(a.drmInfos,o.drmInfos);if(a.drmInfos.length&&o.drmInfos.length&&!c.length){p.warning("Incompatible DRM in audio & video, skipping variant creation.",a,o);continue}let d=(a.bandwidth||0)+(o.bandwidth||0);a.dependencyStream&&(d+=a.dependencyStream.bandwidth||0),o.dependencyStream&&(d+=o.dependencyStream.bandwidth||0);let u=s++;n.push({id:u,language:a.language,disabledUntilTime:0,primary:a.primary,audio:a,video:o,bandwidth:d,drmInfos:c,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}this.variants_=n}static async combineDbStreams(e){let t=R.ContentType;if(e.length==1)return e[0];let i=e.map(f=>new Map(f.filter(g=>g.type===t.AUDIO).map(g=>[se.generateAudioKey_(g),g]))),r=e.map(f=>new Map(f.filter(g=>g.type===t.VIDEO).map(g=>[se.generateVideoKey_(g),g]))),s=e.map(f=>new Map(f.filter(g=>g.type===t.TEXT).map(g=>[se.generateTextKey_(g),g]))),n=e.map(f=>new Map(f.filter(g=>g.type===t.IMAGE).map(g=>[se.generateImageKey_(g),g])));for(let f of s){let g=se.dummyStreamDB_(t.TEXT);f.set(se.generateTextKey_(g),g)}for(let f of n){let g=se.dummyStreamDB_(t.IMAGE);f.set(se.generateImageKey_(g),g)}let a=new se,[o,c,d,u]=await Promise.all([i,r,s,n].map(f=>a.combine_([],f,0,se.cloneStreamDB_,se.concatenateStreamDBs_,0))),m=0;if(!c.length||!o.length){let f=c.concat(o);for(let g of f)g.variantIds=[m++]}else for(let f of o)for(let g of c){let _=m++;g.variantIds.push(_),f.variantIds.push(_)}return c.concat(o).concat(d).concat(u)}async combine_(e,t,i,r,s,n){let a=[];for(let o=0;o<t.length;o++)o>=i?a.push(new Set(t[o].values())):a.push(new Set);for(let o of e)if(!await this.extendExistingOutputStream_(o,t,i,s,a,n))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.PERIOD_FLATTENING_FAILED);for(let o of a)for(let c of o){let d=this.createNewOutputStream_(e,c,t,r,s,a);d&&e.push(d)}for(let o of a)for(let c of o)if(!(se.isDummy_(c)||!e.some(u=>this.areAVStreamsCompatible_(c,u))))throw p.error("Unused stream in period-flattening!",c,e),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.PERIOD_FLATTENING_FAILED);return e}async extendExistingOutputStream_(e,t,i,r,s,n){return this.findMatchesInAllPeriods_(t,e,n>0),v.assert(e.createSegmentIndex,"outputStream should be a Stream type!"),e.matchedStreams?(e.segmentIndex&&await se.extendOutputSegmentIndex_(e,i+n),se.extendOutputStream_(e,i,r,s,n),!0):(p.error("No matches extending output stream!",e,t),!1)}static async extendOutputSegmentIndex_(e,t){let i=[],r=e.matchedStreams;v.assert(r,"matched streams should be valid");for(let s=t;s<r.length;s++){let n=r[s];i.push(n.createSegmentIndex());let a=se.getOptionalStreams(n);for(let o of a)o.segmentIndex||i.push(o.createSegmentIndex())}if(await Promise.all(i),e.segmentIndex instanceof Mi)for(let s=t;s<r.length;s++){let n=r[s];v.assert(n.segmentIndex,"stream should have a segmentIndex."),n.segmentIndex&&e.segmentIndex.appendSegmentIndex(n.segmentIndex)}}createNewOutputStream_(e,t,i,r,s,n){if(se.isDummy_(t))return null;let a=r(t);return this.findMatchesInAllPeriods_(i,a),a.createSegmentIndex&&(a.createSegmentIndex=async()=>{a.segmentIndex||(a.segmentIndex=new Mi,await se.extendOutputSegmentIndex_(a,0))},a.closeSegmentIndex=()=>{if(a.segmentIndex&&(a.segmentIndex.release(),a.segmentIndex=null),a.matchedStreams)for(let o of a.matchedStreams)o.segmentIndex&&!se.isStreamActivelyUsed_(o,a,e)&&(o.segmentIndex.release(),o.segmentIndex=null)}),!a.matchedStreams||!a.matchedStreams.length?null:(se.extendOutputStream_(a,0,s,n,0),a)}static extendOutputStream_(e,t,i,r,s){let n=R.ContentType,a=e.matchedStreams;v.assert(e.matchedStreams,"matchedStreams should be non-null");let o=t+s;for(let c=o;c<a.length;c++){let d=a[c];i(e,d);let u=!0;if(e.type==n.AUDIO&&Se.relatedness(e.language,d.language)==0&&(u=!1),u){let m=r[c-s];if(m&&m.delete(d),d.fullMimeTypes)for(let f of d.fullMimeTypes.values())e.fullMimeTypes.add(f)}}}static cloneStream_(e){let t=Object.assign({},e);return t.originalId=null,t.createSegmentIndex=()=>Promise.resolve(),t.closeSegmentIndex=()=>{},t.roles=t.roles.slice(),t.segmentIndex=null,t.emsgSchemeIdUris=[],t.keyIds=new Set(e.keyIds),t.closedCaptions=e.closedCaptions?new Map(e.closedCaptions):null,t.trickModeVideo=null,t.dependencyStream=null,t}static cloneStreamDB_(e){let t=Object.assign({},e);return t.roles=t.roles.slice(),t.keyIds=new Set(e.keyIds),t.segments=[],t.variantIds=[],t.closedCaptions=e.closedCaptions?new Map(e.closedCaptions):null,t}static combineArrays_(e,t){e||(e=[]);for(let i of t)e.includes(i)||e.push(i);return e}static concatenateStreams_(e,t){e.roles=se.combineArrays_(e.roles,t.roles),t.emsgSchemeIdUris&&(e.emsgSchemeIdUris=se.combineArrays_(e.emsgSchemeIdUris,t.emsgSchemeIdUris));for(let r of t.keyIds)e.keyIds.add(r);if(e.originalId==null)e.originalId=t.originalId;else{let r=t.originalId||"";r&&!e.originalId.endsWith(r)&&(e.originalId+=","+r)}let i=de.getCommonDrmInfos(e.drmInfos,t.drmInfos);if(t.drmInfos.length&&e.drmInfos.length&&!i.length)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.INCONSISTENT_DRM_ACROSS_PERIODS);if(e.drmInfos=i,e.encrypted=e.encrypted||t.encrypted,t.closedCaptions){e.closedCaptions||(e.closedCaptions=new Map);for(let[r,s]of t.closedCaptions)e.closedCaptions.set(r,s)}e.bandwidth&&t.bandwidth&&(e.bandwidth=Math.max(e.bandwidth,t.bandwidth));for(let r of se.OptionalStreamTypes_)se.combineOptionalStream_(e,t,r)}static combineOptionalStream_(e,t,i){let r=t[i]||null,s=e[i]||null;r?(s||(s=se.cloneStream_(r),s.matchedStreams=[],s.createSegmentIndex=async()=>{if(s.segmentIndex)return;let n=new Mi;v.assert(s.matchedStreams,`${i} matched streams should exist`);for(let a of s.matchedStreams)a.segmentIndex||await a.createSegmentIndex(),v.assert(a.segmentIndex,`${i} segment index should exist`),n.appendSegmentIndex(a.segmentIndex);s.segmentIndex=n},e[i]=s),s.matchedStreams.push(r),se.concatenateStreams_(s,r)):s&&(s.matchedStreams.push(t),se.concatenateStreams_(s,t))}static concatenateStreamDBs_(e,t){e.roles=se.combineArrays_(e.roles,t.roles);for(let i of t.keyIds)e.keyIds.add(i);if(e.encrypted=e.encrypted&&t.encrypted,e.segments.push(...t.segments),t.closedCaptions){e.closedCaptions||(e.closedCaptions=new Map);for(let[i,r]of t.closedCaptions)e.closedCaptions.set(i,r)}}findMatchesInAllPeriods_(e,t,i=!1){let r=i?t.matchedStreams:[];for(let s of e){let n=this.findBestMatchInPeriod_(s,t);if(!n)return;r.push(n)}t.matchedStreams=r}findBestMatchInPeriod_(e,t){let i={audio:se.generateAudioKey_,video:se.generateVideoKey_,text:se.generateTextKey_,image:se.generateImageKey_}[t.type],r=null,s=i(t);if(e.has(s))r=e.get(s);else{let n={audio:(o,c)=>this.areAVStreamsCompatible_(o,c),video:(o,c)=>this.areAVStreamsCompatible_(o,c),text:se.areTextStreamsCompatible_,image:se.areImageStreamsCompatible_}[t.type],a={audio:se.isAudioStreamBetterMatch_,video:se.isVideoStreamBetterMatch_,text:se.isTextStreamBetterMatch_,image:se.isImageStreamBetterMatch_}[t.type];for(let o of e.values())n(t,o)&&t.fastSwitching==o.fastSwitching&&(!r||a(t,r,o))&&(r=o)}return this.useStreamOnce_&&!se.isDummy_(r)&&e.delete(i(r)),r}static areAVStreamsExactMatch_(e,t){return e.mimeType===t.mimeType&&e.codecs===t.codecs}static areAVStreamsCodecsCompatible_(e,t){return e.mimeType!=t.mimeType?!1:se.getCodec_(e.codecs)===se.getCodec_(t.codecs)}setUseStreamOnce(e){this.useStreamOnce_=e}areAVStreamsCompatible_(e,t){return!(e.drmInfos&&!de.areDrmCompatible(e.drmInfos,t.drmInfos))}static areTextStreamsCompatible_(e,t){return t.language?!(e.forced!==t.forced||Se.relatedness(e.language,t.language)==0||t.kind!=e.kind):!0}static areImageStreamsCompatible_(e,t){return!0}static isAudioStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareCodecs_(e,t,i);if(a===r)return!0;if(a===n)return!1;let o=Se.relatedness(e.language,t.language),c=Se.relatedness(e.language,i.language);if(c>o)return!0;if(c<o)return!1;if(t.label!==i.label){if(e.label===t.label)return!1;if(e.label===i.label)return!0}if(e.roles.length){let m=t.roles.filter(g=>e.roles.includes(g)),f=i.roles.filter(g=>e.roles.includes(g));if(f.length>m.length)return!0;if(f.length<m.length)return!1;if(i.roles.length!==t.roles.length)return i.roles.length<t.roles.length}else{if(!i.roles.length&&t.roles.length)return!0;if(i.roles.length&&!t.roles.length)return!1}if(!t.primary&&i.primary)return!0;if(t.primary&&!i.primary)return!1;let d=se.compareClosestPreferLower(e.channelsCount,t.channelsCount,i.channelsCount);if(d==r)return!0;if(d==n)return!1;let u=se.compareClosestPreferLower(e.audioSamplingRate,t.audioSamplingRate,i.audioSamplingRate);if(u==r)return!0;if(u==n)return!1;if(e.bandwidth){let m=se.compareClosestPreferMinimalAbsDiff_(e.bandwidth,t.bandwidth,i.bandwidth);if(m==r)return!0;if(m==n)return!1}return!1}static isVideoStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareCodecs_(e,t,i);if(a===r)return!0;if(a===n)return!1;let o=se.compareClosestPreferLower(e.width*e.height,t.width*t.height,i.width*i.height);if(o==r)return!0;if(o==n)return!1;if(e.frameRate){let c=se.compareClosestPreferLower(e.frameRate,t.frameRate,i.frameRate);if(c==r)return!0;if(c==n)return!1}if(e.bandwidth){let c=se.compareClosestPreferMinimalAbsDiff_(e.bandwidth,t.bandwidth,i.bandwidth);if(c==r)return!0;if(c==n)return!1}return!1}static isTextStreamBetterMatch_(e,t,i){let r=Se.relatedness(e.language,t.language),s=Se.relatedness(e.language,i.language);if(s>r)return!0;if(s<r)return!1;if(!t.primary&&i.primary)return!0;if(t.primary&&!i.primary)return!1;if(t.label!==i.label){if(e.label===t.label)return!1;if(e.label===i.label)return!0}if(e.roles.length){let n=t.roles.filter(o=>e.roles.includes(o)),a=i.roles.filter(o=>e.roles.includes(o));if(a.length>n.length)return!0;if(a.length<n.length)return!1}else{if(!i.roles.length&&t.roles.length)return!0;if(i.roles.length&&!t.roles.length)return!1}return i.mimeType==e.mimeType&&i.codecs==e.codecs&&(t.mimeType!=e.mimeType||t.codecs!=e.codecs)}static isImageStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareClosestPreferLower(e.width*e.height,t.width*t.height,i.width*i.height);return a==r?!0:(a==n,!1)}static dummyStreamDB_(e){return{id:0,originalId:"",groupId:null,primary:!1,type:e,mimeType:"",codecs:"",supplementalCodecs:"",language:"",originalLanguage:null,label:null,width:null,height:null,encrypted:!1,keyIds:new Set,segments:[],variantIds:[],roles:[],forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,external:!1,fastSwitching:!1,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1}}static dummyStream_(e){return re.createStream({originalId:"",segmentIndex:new Ze([]),type:e})}static compareClosestPreferLower(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse;if(t==e&&e!=i)return n;if(i==e&&e!=t)return r;if(t>e){if(i<=e||i-e<t-e)return r;if(i-e>t-e)return n}else{if(i>e)return n;if(e-i<e-t)return r;if(e-i>e-t)return n}return s}static compareCodecs_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.areAVStreamsExactMatch_(e,t),o=se.areAVStreamsExactMatch_(e,i);if(a&&!o)return n;if(!a&&o)return r;let c=se.areAVStreamsCodecsCompatible_(e,t),d=se.areAVStreamsCodecsCompatible_(e,i);return c&&!d?n:!c&&d?r:s}static compareClosestPreferMinimalAbsDiff_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=Math.abs(e-t),o=Math.abs(e-i);return o<a?r:a<o?n:s}static isDummy_(e){let t=R.ContentType;switch(e.type){case t.TEXT:return!e.language;case t.IMAGE:return!e.tilesLayout;default:return!1}}static generateVideoKey_(e){var t,i;return se.generateKey_([e.fastSwitching,e.width,e.frameRate,e.codecs,e.mimeType,e.label,e.roles,e.closedCaptions?Array.from(e.closedCaptions.entries()):null,e.bandwidth,(i=(t=e.dependencyStream)==null?void 0:t.baseOriginalId)!=null?i:e.baseOriginalId,Array.from(e.keyIds)])}static generateAudioKey_(e){var t,i;return se.generateKey_([e.fastSwitching,e.channelsCount,e.language,e.bandwidth,e.label,e.codecs,e.mimeType,e.roles,e.audioSamplingRate,e.primary,(i=(t=e.dependencyStream)==null?void 0:t.baseOriginalId)!=null?i:e.baseOriginalId,Array.from(e.keyIds)])}static generateTextKey_(e){return se.generateKey_([e.language,e.label,e.codecs,e.mimeType,e.bandwidth,e.roles])}static generateImageKey_(e){return se.generateKey_([e.width,e.codecs,e.mimeType])}static generateKey_(e){return JSON.stringify(e)}static getCodec_(e){return se.memoizedCodecs.getOrInsertComputed(e,()=>O.getNormalizedCodec(e))}static isStreamActivelyUsed_(e,t,i){for(let r of i)if(r!==t&&r.segmentIndex&&r.matchedStreams&&r.matchedStreams.includes(e))return p.v2(`Stream ${e.id} is already used in output stream ${r.id}, cannot close it now.`),!0;return p.v2(`Stream ${e.id} not used anywhere else besides ${t.id}, good to close.`),!1}static getOptionalStreams(e){let t=[];for(let i of se.OptionalStreamTypes_){let r=e[i];r&&t.push(r)}return t}};l(se,"OptionalStreamTypes_",["trickModeVideo","dependencyStream"]),l(se,"BetterOrWorse",{BETTER:1,EQUAL:0,WORSE:-1}),l(se,"memoizedCodecs",new Map);var fr=se;/*! @license
|
|
614
|
+
*/var se=class se{constructor(){l(this,"variants_");l(this,"audioStreams_");l(this,"videoStreams_");l(this,"textStreams_");l(this,"imageStreams_");l(this,"useStreamOnce_");l(this,"usedPeriodIds_");l(this,"streamCollections_");this.variants_=[],this.audioStreams_=[],this.videoStreams_=[],this.textStreams_=[],this.imageStreams_=[],this.useStreamOnce_=!1,this.usedPeriodIds_=new Set;let e=R.ContentType;this.streamCollections_=new Map().set(e.AUDIO,this.audioStreams_).set(e.VIDEO,this.videoStreams_).set(e.TEXT,this.textStreams_).set(e.IMAGE,this.imageStreams_)}release(){let e=this.audioStreams_.concat(this.videoStreams_,this.textStreams_,this.imageStreams_);for(let t of e)t.segmentIndex&&t.segmentIndex.release();this.audioStreams_=[],this.videoStreams_=[],this.textStreams_=[],this.imageStreams_=[],this.variants_=[],this.useStreamOnce_=!1,this.usedPeriodIds_.clear(),this.streamCollections_.clear()}getVariants(){return this.variants_}getTextStreams(){return this.textStreams_.slice()}getImageStreams(){return this.imageStreams_}deleteStream(e,t){if(!e)return;let i=this.streamCollections_.get(e.type)||[];for(let r of i){se.removeFromMatchedStreams_(r,e);let s=se.getOptionalStreams(r);for(let n of s)se.removeFromMatchedStreams_(n,e)}e.segmentIndex&&e.closeSegmentIndex(),this.usedPeriodIds_.delete(t)}static removeFromMatchedStreams_(e,t){var i;e.matchedStreams=(i=e.matchedStreams)==null?void 0:i.filter(r=>r!==t)}static toStreamMap_(e,t){return new Map(e.map(i=>[t(i),i]))}getStreamsPerPeriod_(e,t){let i=R.ContentType,r=[],s=[],n=[],a=[];for(let o of e){let c=se.toStreamMap_(o.audioStreams,se.generateAudioKey_),d=se.toStreamMap_(o.videoStreams,se.generateVideoKey_),u=se.toStreamMap_(o.textStreams,se.generateTextKey_),m=se.toStreamMap_(o.imageStreams,se.generateImageKey_);if(t){let f=se.dummyStream_(i.TEXT);u.set(se.generateTextKey_(f),f);let g=se.dummyStream_(i.IMAGE);m.set(se.generateImageKey_(g),g)}r.push(c),s.push(d),n.push(u),a.push(m)}return{audioStreamsPerPeriod:r,videoStreamsPerPeriod:s,textStreamsPerPeriod:n,imageStreamsPerPeriod:a}}async combinePeriods(e,t,i=!1){let r=R.ContentType;if(!t&&e.length==1){let{audioStreamsPerPeriod:a,videoStreamsPerPeriod:o,textStreamsPerPeriod:c,imageStreamsPerPeriod:d}=this.getStreamsPerPeriod_(e,!1);this.audioStreams_=Array.from(a[0].values()),this.videoStreams_=Array.from(o[0].values()),this.textStreams_=Array.from(c[0].values()),this.imageStreams_=Array.from(d[0].values())}else{let a=i?this.usedPeriodIds_.size:0,o=-1;for(let f=0;f<e.length;f++){let g=e[f];this.usedPeriodIds_.has(g.id)||(this.usedPeriodIds_.add(g.id),o==-1&&(o=f))}if(o==-1)return;let{audioStreamsPerPeriod:c,videoStreamsPerPeriod:d,textStreamsPerPeriod:u,imageStreamsPerPeriod:m}=this.getStreamsPerPeriod_(e,!0);await Promise.all([this.combine_(this.audioStreams_,c,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.videoStreams_,d,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.textStreams_,u,o,se.cloneStream_,se.concatenateStreams_,a),this.combine_(this.imageStreams_,m,o,se.cloneStream_,se.concatenateStreams_,a)])}let s=0,n=[];if(!this.videoStreams_.length||!this.audioStreams_.length){let a=this.videoStreams_.length?this.videoStreams_:this.audioStreams_;for(let o of a){let c=s++,d=o.bandwidth||0;o.dependencyStream&&(d+=o.dependencyStream.bandwidth||0),n.push({id:c,language:o.language,disabledUntilTime:0,primary:o.primary,audio:o.type==r.AUDIO?o:null,video:o.type==r.VIDEO?o:null,bandwidth:d,drmInfos:o.drmInfos,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}}else for(let a of this.audioStreams_)for(let o of this.videoStreams_){let c=de.getCommonDrmInfos(a.drmInfos,o.drmInfos);if(a.drmInfos.length&&o.drmInfos.length&&!c.length){p.warning("Incompatible DRM in audio & video, skipping variant creation.",a,o);continue}let d=(a.bandwidth||0)+(o.bandwidth||0);a.dependencyStream&&(d+=a.dependencyStream.bandwidth||0),o.dependencyStream&&(d+=o.dependencyStream.bandwidth||0);let u=s++;n.push({id:u,language:a.language,disabledUntilTime:0,primary:a.primary,audio:a,video:o,bandwidth:d,drmInfos:c,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}this.variants_=n}static async combineDbStreams(e){let t=R.ContentType;if(e.length==1)return e[0];let i=e.map(f=>new Map(f.filter(g=>g.type===t.AUDIO).map(g=>[se.generateAudioKey_(g),g]))),r=e.map(f=>new Map(f.filter(g=>g.type===t.VIDEO).map(g=>[se.generateVideoKey_(g),g]))),s=e.map(f=>new Map(f.filter(g=>g.type===t.TEXT).map(g=>[se.generateTextKey_(g),g]))),n=e.map(f=>new Map(f.filter(g=>g.type===t.IMAGE).map(g=>[se.generateImageKey_(g),g])));for(let f of s){let g=se.dummyStreamDB_(t.TEXT);f.set(se.generateTextKey_(g),g)}for(let f of n){let g=se.dummyStreamDB_(t.IMAGE);f.set(se.generateImageKey_(g),g)}let a=new se,[o,c,d,u]=await Promise.all([i,r,s,n].map(f=>a.combine_([],f,0,se.cloneStreamDB_,se.concatenateStreamDBs_,0))),m=0;if(!c.length||!o.length){let f=c.concat(o);for(let g of f)g.variantIds=[m++]}else for(let f of o)for(let g of c){let _=m++;g.variantIds.push(_),f.variantIds.push(_)}return c.concat(o).concat(d).concat(u)}async combine_(e,t,i,r,s,n){let a=[];for(let o=0;o<t.length;o++)o>=i?a.push(new Set(t[o].values())):a.push(new Set);for(let o of e)if(!await this.extendExistingOutputStream_(o,t,i,s,a,n))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.PERIOD_FLATTENING_FAILED);for(let o of a)for(let c of o){let d=this.createNewOutputStream_(e,c,t,r,s,a);d&&e.push(d)}for(let o of a)for(let c of o)if(!(se.isDummy_(c)||!e.some(u=>this.areAVStreamsCompatible_(c,u))))throw p.error("Unused stream in period-flattening!",c,e),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.PERIOD_FLATTENING_FAILED);return e}async extendExistingOutputStream_(e,t,i,r,s,n){return this.findMatchesInAllPeriods_(t,e,n>0),v.assert(e.createSegmentIndex,"outputStream should be a Stream type!"),e.matchedStreams?(e.segmentIndex&&await se.extendOutputSegmentIndex_(e,i+n),se.extendOutputStream_(e,i,r,s,n),!0):(p.error("No matches extending output stream!",e,t),!1)}static async extendOutputSegmentIndex_(e,t){let i=[],r=e.matchedStreams;v.assert(r,"matched streams should be valid");for(let s=t;s<r.length;s++){let n=r[s];i.push(n.createSegmentIndex());let a=se.getOptionalStreams(n);for(let o of a)o.segmentIndex||i.push(o.createSegmentIndex())}if(await Promise.all(i),e.segmentIndex instanceof Mi)for(let s=t;s<r.length;s++){let n=r[s];v.assert(n.segmentIndex,"stream should have a segmentIndex."),n.segmentIndex&&e.segmentIndex.appendSegmentIndex(n.segmentIndex)}}createNewOutputStream_(e,t,i,r,s,n){if(se.isDummy_(t))return null;let a=r(t);return this.findMatchesInAllPeriods_(i,a),a.createSegmentIndex&&(a.createSegmentIndex=async()=>{a.segmentIndex||(a.segmentIndex=new Mi,await se.extendOutputSegmentIndex_(a,0))},a.closeSegmentIndex=()=>{if(a.segmentIndex&&(a.segmentIndex.release(),a.segmentIndex=null),a.matchedStreams)for(let o of a.matchedStreams)o.segmentIndex&&!se.isStreamActivelyUsed_(o,a,e)&&(o.segmentIndex.release(),o.segmentIndex=null)}),!a.matchedStreams||!a.matchedStreams.length?null:(se.extendOutputStream_(a,0,s,n,0),a)}static extendOutputStream_(e,t,i,r,s){let n=R.ContentType,a=e.matchedStreams;v.assert(e.matchedStreams,"matchedStreams should be non-null");let o=t+s;for(let c=o;c<a.length;c++){let d=a[c];i(e,d);let u=!0;if(e.type==n.AUDIO&&Se.relatedness(e.language,d.language)==0&&(u=!1),u){let m=r[c-s];if(m&&m.delete(d),d.fullMimeTypes)for(let f of d.fullMimeTypes.values())e.fullMimeTypes.add(f)}}}static cloneStream_(e){let t=Object.assign({},e);return t.originalId=null,t.createSegmentIndex=()=>Promise.resolve(),t.closeSegmentIndex=()=>{},t.roles=t.roles.slice(),t.segmentIndex=null,t.emsgSchemeIdUris=[],t.keyIds=new Set(e.keyIds),t.closedCaptions=e.closedCaptions?new Map(e.closedCaptions):null,t.trickModeVideo=null,t.dependencyStream=null,t}static cloneStreamDB_(e){let t=Object.assign({},e);return t.roles=t.roles.slice(),t.keyIds=new Set(e.keyIds),t.segments=[],t.variantIds=[],t.closedCaptions=e.closedCaptions?new Map(e.closedCaptions):null,t}static combineArrays_(e,t){e||(e=[]);for(let i of t)e.includes(i)||e.push(i);return e}static concatenateStreams_(e,t){e.roles=se.combineArrays_(e.roles,t.roles),t.emsgSchemeIdUris&&(e.emsgSchemeIdUris=se.combineArrays_(e.emsgSchemeIdUris,t.emsgSchemeIdUris));for(let r of t.keyIds)e.keyIds.add(r);if(e.originalId==null)e.originalId=t.originalId;else{let r=t.originalId||"";r&&!e.originalId.endsWith(r)&&(e.originalId+=","+r)}let i=de.getCommonDrmInfos(e.drmInfos,t.drmInfos);if(t.drmInfos.length&&e.drmInfos.length&&!i.length)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.INCONSISTENT_DRM_ACROSS_PERIODS);if(e.drmInfos=i,e.encrypted=e.encrypted||t.encrypted,t.closedCaptions){e.closedCaptions||(e.closedCaptions=new Map);for(let[r,s]of t.closedCaptions)e.closedCaptions.set(r,s)}e.bandwidth&&t.bandwidth&&(e.bandwidth=Math.max(e.bandwidth,t.bandwidth));for(let r of se.OptionalStreamTypes_)se.combineOptionalStream_(e,t,r)}static combineOptionalStream_(e,t,i){let r=t[i]||null,s=e[i]||null;r?(s||(s=se.cloneStream_(r),s.matchedStreams=[],s.createSegmentIndex=async()=>{if(s.segmentIndex)return;let n=new Mi;v.assert(s.matchedStreams,`${i} matched streams should exist`);for(let a of s.matchedStreams)a.segmentIndex||await a.createSegmentIndex(),v.assert(a.segmentIndex,`${i} segment index should exist`),n.appendSegmentIndex(a.segmentIndex);s.segmentIndex=n},e[i]=s),s.matchedStreams.push(r),se.concatenateStreams_(s,r)):s&&(s.matchedStreams.push(t),se.concatenateStreams_(s,t))}static concatenateStreamDBs_(e,t){e.roles=se.combineArrays_(e.roles,t.roles);for(let i of t.keyIds)e.keyIds.add(i);if(e.encrypted=e.encrypted&&t.encrypted,e.segments.push(...t.segments),t.closedCaptions){e.closedCaptions||(e.closedCaptions=new Map);for(let[i,r]of t.closedCaptions)e.closedCaptions.set(i,r)}}findMatchesInAllPeriods_(e,t,i=!1){let r=i?t.matchedStreams:[];for(let s of e){let n=this.findBestMatchInPeriod_(s,t);if(!n)return;r.push(n)}t.matchedStreams=r}findBestMatchInPeriod_(e,t){let i={audio:se.generateAudioKey_,video:se.generateVideoKey_,text:se.generateTextKey_,image:se.generateImageKey_}[t.type],r=null,s=i(t);if(e.has(s))r=e.get(s);else{let n={audio:(o,c)=>this.areAVStreamsCompatible_(o,c),video:(o,c)=>this.areAVStreamsCompatible_(o,c),text:se.areTextStreamsCompatible_,image:se.areImageStreamsCompatible_}[t.type],a={audio:se.isAudioStreamBetterMatch_,video:se.isVideoStreamBetterMatch_,text:se.isTextStreamBetterMatch_,image:se.isImageStreamBetterMatch_}[t.type];for(let o of e.values())n(t,o)&&t.fastSwitching==o.fastSwitching&&(!r||a(t,r,o))&&(r=o)}return this.useStreamOnce_&&!se.isDummy_(r)&&e.delete(i(r)),r}static areAVStreamsExactMatch_(e,t){return e.mimeType===t.mimeType&&e.codecs===t.codecs}static areAVStreamsCodecsCompatible_(e,t){return e.mimeType!=t.mimeType?!1:se.getCodec_(e.codecs)===se.getCodec_(t.codecs)}setUseStreamOnce(e){this.useStreamOnce_=e}areAVStreamsCompatible_(e,t){return!(e.drmInfos&&!de.areDrmCompatible(e.drmInfos,t.drmInfos))}static areTextStreamsCompatible_(e,t){return t.language?!(e.forced!==t.forced||Se.relatedness(e.language,t.language)==0):!0}static areImageStreamsCompatible_(e,t){return!0}static isAudioStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareCodecs_(e,t,i);if(a===r)return!0;if(a===n)return!1;let o=Se.relatedness(e.language,t.language),c=Se.relatedness(e.language,i.language);if(c>o)return!0;if(c<o)return!1;if(t.label!==i.label){if(e.label===t.label)return!1;if(e.label===i.label)return!0}if(e.roles.length){let m=t.roles.filter(g=>e.roles.includes(g)),f=i.roles.filter(g=>e.roles.includes(g));if(f.length>m.length)return!0;if(f.length<m.length)return!1;if(i.roles.length!==t.roles.length)return i.roles.length<t.roles.length}else{if(!i.roles.length&&t.roles.length)return!0;if(i.roles.length&&!t.roles.length)return!1}if(!t.primary&&i.primary)return!0;if(t.primary&&!i.primary)return!1;let d=se.compareClosestPreferLower(e.channelsCount,t.channelsCount,i.channelsCount);if(d==r)return!0;if(d==n)return!1;let u=se.compareClosestPreferLower(e.audioSamplingRate,t.audioSamplingRate,i.audioSamplingRate);if(u==r)return!0;if(u==n)return!1;if(e.bandwidth){let m=se.compareClosestPreferMinimalAbsDiff_(e.bandwidth,t.bandwidth,i.bandwidth);if(m==r)return!0;if(m==n)return!1}return!1}static isVideoStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareCodecs_(e,t,i);if(a===r)return!0;if(a===n)return!1;let o=se.compareClosestPreferLower(e.width*e.height,t.width*t.height,i.width*i.height);if(o==r)return!0;if(o==n)return!1;if(e.frameRate){let c=se.compareClosestPreferLower(e.frameRate,t.frameRate,i.frameRate);if(c==r)return!0;if(c==n)return!1}if(e.bandwidth){let c=se.compareClosestPreferMinimalAbsDiff_(e.bandwidth,t.bandwidth,i.bandwidth);if(c==r)return!0;if(c==n)return!1}return!1}static isTextStreamBetterMatch_(e,t,i){let r=Se.relatedness(e.language,t.language),s=Se.relatedness(e.language,i.language);if(s>r)return!0;if(s<r)return!1;let n=t.kind==e.kind,a=i.kind==e.kind;if(a&&!n)return!0;if(!a&&n)return!1;if(!t.primary&&i.primary)return!0;if(t.primary&&!i.primary)return!1;if(t.label!==i.label){if(e.label===t.label)return!1;if(e.label===i.label)return!0}if(e.roles.length){let o=t.roles.filter(d=>e.roles.includes(d)),c=i.roles.filter(d=>e.roles.includes(d));if(c.length>o.length)return!0;if(c.length<o.length)return!1}else{if(!i.roles.length&&t.roles.length)return!0;if(i.roles.length&&!t.roles.length)return!1}return i.mimeType==e.mimeType&&i.codecs==e.codecs&&(t.mimeType!=e.mimeType||t.codecs!=e.codecs)}static isImageStreamBetterMatch_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.compareClosestPreferLower(e.width*e.height,t.width*t.height,i.width*i.height);return a==r?!0:(a==n,!1)}static dummyStreamDB_(e){return{id:0,originalId:"",groupId:null,primary:!1,type:e,mimeType:"",codecs:"",supplementalCodecs:"",language:"",originalLanguage:null,label:null,width:null,height:null,encrypted:!1,keyIds:new Set,segments:[],variantIds:[],roles:[],forced:!1,channelsCount:null,audioSamplingRate:null,spatialAudio:!1,closedCaptions:null,external:!1,fastSwitching:!1,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1}}static dummyStream_(e){return re.createStream({originalId:"",segmentIndex:new Ze([]),type:e})}static compareClosestPreferLower(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse;if(t==e&&e!=i)return n;if(i==e&&e!=t)return r;if(t>e){if(i<=e||i-e<t-e)return r;if(i-e>t-e)return n}else{if(i>e)return n;if(e-i<e-t)return r;if(e-i>e-t)return n}return s}static compareCodecs_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=se.areAVStreamsExactMatch_(e,t),o=se.areAVStreamsExactMatch_(e,i);if(a&&!o)return n;if(!a&&o)return r;let c=se.areAVStreamsCodecsCompatible_(e,t),d=se.areAVStreamsCodecsCompatible_(e,i);return c&&!d?n:!c&&d?r:s}static compareClosestPreferMinimalAbsDiff_(e,t,i){let{BETTER:r,EQUAL:s,WORSE:n}=se.BetterOrWorse,a=Math.abs(e-t),o=Math.abs(e-i);return o<a?r:a<o?n:s}static isDummy_(e){let t=R.ContentType;switch(e.type){case t.TEXT:return!e.language;case t.IMAGE:return!e.tilesLayout;default:return!1}}static generateVideoKey_(e){var t,i;return se.generateKey_([e.fastSwitching,e.width,e.frameRate,e.codecs,e.mimeType,e.label,e.roles,e.closedCaptions?Array.from(e.closedCaptions.entries()):null,e.bandwidth,(i=(t=e.dependencyStream)==null?void 0:t.baseOriginalId)!=null?i:e.baseOriginalId,Array.from(e.keyIds)])}static generateAudioKey_(e){var t,i;return se.generateKey_([e.fastSwitching,e.channelsCount,e.language,e.bandwidth,e.label,e.codecs,e.mimeType,e.roles,e.audioSamplingRate,e.primary,(i=(t=e.dependencyStream)==null?void 0:t.baseOriginalId)!=null?i:e.baseOriginalId,Array.from(e.keyIds)])}static generateTextKey_(e){return se.generateKey_([e.language,e.label,e.codecs,e.mimeType,e.bandwidth,e.roles])}static generateImageKey_(e){return se.generateKey_([e.width,e.codecs,e.mimeType])}static generateKey_(e){return JSON.stringify(e)}static getCodec_(e){return se.memoizedCodecs.getOrInsertComputed(e,()=>O.getNormalizedCodec(e))}static isStreamActivelyUsed_(e,t,i){for(let r of i)if(r!==t&&r.segmentIndex&&r.matchedStreams&&r.matchedStreams.includes(e))return p.v2(`Stream ${e.id} is already used in output stream ${r.id}, cannot close it now.`),!0;return p.v2(`Stream ${e.id} not used anywhere else besides ${t.id}, good to close.`),!1}static getOptionalStreams(e){let t=[];for(let i of se.OptionalStreamTypes_){let r=e[i];r&&t.push(r)}return t}};l(se,"OptionalStreamTypes_",["trickModeVideo","dependencyStream"]),l(se,"BetterOrWorse",{BETTER:1,EQUAL:0,WORSE:-1}),l(se,"memoizedCodecs",new Map);var fr=se;/*! @license
|
|
615
615
|
* Shaka Player
|
|
616
616
|
* Copyright 2016 Google LLC
|
|
617
617
|
* SPDX-License-Identifier: Apache-2.0
|
|
618
|
-
*/var pt=class pt{constructor(){l(this,"config_");l(this,"playerInterface_");l(this,"manifestUris_");l(this,"manifest_");l(this,"globalId_");l(this,"patchLocationNodes_");l(this,"manifestPatchContext_");l(this,"contextCache_");l(this,"continuityCache_");l(this,"parsedPeriodCache_");l(this,"streamMap_");l(this,"indexStreamMap_");l(this,"periodDurations_");l(this,"periodCombiner_");l(this,"updatePeriod_");l(this,"averageUpdateDuration_");l(this,"updateTimer_");l(this,"operationManager_");l(this,"largestPeriodStartTime_");l(this,"lastManifestUpdatePeriodIds_");l(this,"minTotalAvailabilityTimeOffset_");l(this,"lowLatencyMode_");l(this,"contentSteeringManager_");l(this,"gapCount_");l(this,"isLowLatency_");l(this,"eventManager_");l(this,"mediaElement_");l(this,"isTransitionFromDynamicToStatic_");l(this,"lastManifestQueryParams_");l(this,"mpdpatchUrlParamsFn_");l(this,"mpdUrlParamsFn_");l(this,"isPreloadFn_");l(this,"lastCalculatedBaseUris_");l(this,"parsedPrftNodes_");l(this,"contentProtection_");this.config_=null,this.playerInterface_=null,this.manifestUris_=[],this.manifest_=null,this.globalId_=1,this.patchLocationNodes_=[],this.manifestPatchContext_={mpdId:"",type:"",profiles:[],mediaPresentationDuration:null,availabilityTimeOffset:0,getBaseUris:null,publishTime:0},this.contextCache_=new Map,this.continuityCache_=new Map,this.parsedPeriodCache_=new Map,this.streamMap_=new Map,this.indexStreamMap_=new Map,this.periodDurations_=new Map,this.periodCombiner_=new fr,this.updatePeriod_=0,this.averageUpdateDuration_=new er(5),this.updateTimer_=new ae(()=>{if(this.mediaElement_&&!this.config_.continueLoadingWhenPaused&&(this.eventManager_.unlisten(this.mediaElement_,"timeupdate"),this.mediaElement_.paused)){this.eventManager_.listenOnce(this.mediaElement_,"timeupdate",()=>this.onUpdate_());return}this.onUpdate_()}),this.operationManager_=new fi,this.largestPeriodStartTime_=null,this.lastManifestUpdatePeriodIds_=[],this.minTotalAvailabilityTimeOffset_=1/0,this.lowLatencyMode_=!1,this.contentSteeringManager_=null,this.gapCount_=0,this.isLowLatency_=!1,this.eventManager_=new ue,this.mediaElement_=null,this.isTransitionFromDynamicToStatic_=!1,this.lastManifestQueryParams_="",this.mpdpatchUrlParamsFn_=null,this.mpdUrlParamsFn_=null,this.isPreloadFn_=()=>!1,this.lastCalculatedBaseUris_=[],this.parsedPrftNodes_=new Set,this.contentProtection_=new Ti}configure(e,t){v.assert(e.dash!=null,"DashManifestConfiguration should not be null!");let i=this.playerInterface_&&e.updatePeriod!=this.config_.updatePeriod&&e.updatePeriod>=0;this.config_=e,t&&(this.isPreloadFn_=t),i&&this.manifest_&&this.manifest_.presentationTimeline.isLive()&&this.updateNow_(),this.contentSteeringManager_&&this.contentSteeringManager_.configure(this.config_),this.periodCombiner_&&this.periodCombiner_.setUseStreamOnce(this.config_.dash.useStreamOnceInPeriodFlattening)}async start(e,t){v.assert(this.config_,"Must call configure() before start()!"),this.lowLatencyMode_=t.isLowLatencyMode(),this.manifestUris_=[e],this.playerInterface_=t;let i=await this.requestManifest_();if(this.playerInterface_&&this.setUpdateTimer_(i),!this.playerInterface_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);return v.assert(this.manifest_,"Manifest should be non-null!"),this.manifest_}stop(){for(let e of this.streamMap_.values())e.segmentIndex&&e.segmentIndex.release();return this.periodCombiner_&&this.periodCombiner_.release(),this.playerInterface_=null,this.config_=null,this.manifestUris_=[],this.manifest_=null,this.streamMap_.clear(),this.indexStreamMap_.clear(),this.contextCache_.clear(),this.continuityCache_.clear(),this.parsedPeriodCache_.clear(),this.manifestPatchContext_={mpdId:"",type:"",profiles:[],mediaPresentationDuration:null,availabilityTimeOffset:0,getBaseUris:null,publishTime:0},this.periodCombiner_=null,this.updateTimer_!=null&&(this.updateTimer_.stop(),this.updateTimer_=null),this.contentSteeringManager_&&this.contentSteeringManager_.destroy(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.parsedPrftNodes_.clear(),this.contentProtection_.release(),this.operationManager_.destroy()}async update(){try{await this.requestManifest_()}catch(e){if(!this.playerInterface_||!e)return;v.assert(e instanceof h,"Bad error type"),this.playerInterface_.onError(e)}}onExpirationUpdated(e,t){}onInitialVariantChosen(e){if(this.manifest_&&this.manifest_.presentationTimeline.isLive()){let t=e.video||e.audio;if(t&&t.segmentIndex){let i=this.manifest_.presentationTimeline.getSegmentAvailabilityEnd(),r=t.segmentIndex.find(i);if(r==null)return;let s=t.segmentIndex.get(r);if(!s)return;this.updatePeriod_=s.endTime-i,this.setUpdateTimer_(0)}}}banLocation(e){this.contentSteeringManager_&&this.contentSteeringManager_.banLocation(e)}setMediaElement(e){this.mediaElement_=e}async requestManifest_(){let e=K.RequestType.MANIFEST,t=K.AdvancedRequestType.MPD,i="MPD",r=this.getPatchLocationUris_(),s=this.manifestUris_;if(r.length)s=r.map(m=>fe.applyUrlParams(m,this.mpdpatchUrlParamsFn_)),i="Patch",t=K.AdvancedRequestType.MPD_PATCH;else{if(this.manifestUris_.length>1&&this.contentSteeringManager_){let m=this.contentSteeringManager_.getLocations("Location",!0);m.length&&(s=m)}this.mpdUrlParamsFn_&&(s=s.map(m=>fe.applyUrlParams(m,this.mpdUrlParamsFn_)))}let n=K.makeRequest(s,this.config_.retryParameters),a=Date.now(),o=await this.makeNetworkRequest_(n,e,{type:t});if(!this.playerInterface_)return 0;o.uri&&o.uri!=o.originalUri&&!this.manifestUris_.includes(o.uri)&&this.manifestUris_.unshift(o.uri);let c=new URL(o.uri);this.lastManifestQueryParams_=c.searchParams.toString(),await this.parseManifest(o.data,o.uri,i);let u=(Date.now()-a)/1e3;return this.averageUpdateDuration_.sample(1,u),this.parsedPrftNodes_.clear(),u}parseManifest(e,t,i){let r=I.parseXml(e,i);return this.processParsedMpd(r,t,i)}async processParsedMpd(e,t,i){if(!e)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_INVALID_XML,t);let r=this.config_.dash.manifestPreprocessorTXml,s=st.defaultManifestPreprocessorTXml;if(r!=s&&r(e),i==="Patch")return this.processPatchManifest_(e);let n=e;if(Re.hasLinkedPeriods(n)){let d=Re.processLinkedPeriods(n,t,this.config_.retryParameters,this.playerInterface_.networkingEngine);this.operationManager_.manage(d),n=await d.promise}if(!Re.hasXlinks(n))return this.processManifest_(n,t);let a=this.config_.dash.xlinkFailGracefully,o=Re.processXlinks(n,this.config_.retryParameters,a,t,this.playerInterface_.networkingEngine);this.operationManager_.manage(o);let c=await o.promise;return this.processManifest_(c,t)}async processManifest_(e,t){v.assert(this.config_,"Must call configure() before processManifest_()!"),this.contentSteeringManager_&&this.contentSteeringManager_.clearPreviousLocations(),this.checkMpdEssentialProperties_(e);let i=[t],r=[],s=new Map,n=I.findChildren(e,"Location");for(let z of n){let ge=z.attributes.serviceLocation,Y=I.getContents(z);if(!Y)continue;let X=fe.resolveUris(i,[Y])[0];ge&&(this.contentSteeringManager_?this.contentSteeringManager_.addLocation("Location",ge,X):s.set(ge,X)),r.push(X)}if(this.contentSteeringManager_){let z=this.contentSteeringManager_.getLocations("Location",!0);z.length>0&&(this.manifestUris_=z,i=z)}else r.length&&(this.manifestUris_=r,i=r);this.manifestPatchContext_.mpdId=e.attributes.id||"",this.manifestPatchContext_.publishTime=I.parseAttr(e,"publishTime",I.parseDate)||0,this.patchLocationNodes_=I.findChildren(e,"PatchLocation"),this.mpdpatchUrlParamsFn_=this.findRequestParamFn_(e,"mpdpatch")||null,this.mpdUrlParamsFn_=this.findRequestParamFn_(e,"mpd")||null;let a=Promise.resolve(),o=I.findChild(e,"ContentSteering");if(o&&this.playerInterface_){let z=o.attributes.defaultServiceLocation;if(this.contentSteeringManager_)this.contentSteeringManager_.setBaseUris(i),this.contentSteeringManager_.setDefaultPathwayId(z);else{this.contentSteeringManager_=new ns(this.playerInterface_),this.contentSteeringManager_.configure(this.config_),this.contentSteeringManager_.setManifestType(me.DASH),this.contentSteeringManager_.setBaseUris(i),this.contentSteeringManager_.setDefaultPathwayId(z);let ge=I.getContents(o);ge&&(ge=fe.applyUrlParams(ge,this.findRequestParamFn_(e,"steering")),I.parseAttr(o,"queryBeforeStart",I.parseBoolean,!1)?a=this.contentSteeringManager_.requestInfo(ge):this.contentSteeringManager_.requestInfo(ge))}for(let ge of s.keys()){let Y=s.get(ge);this.contentSteeringManager_.addLocation("Location",ge,Y)}}let c=I.findChildren(e,"BaseURL"),d=!1;if(this.contentSteeringManager_)for(let z of c){let ge=z.attributes.serviceLocation,Y=I.getContents(z);ge&&Y&&(this.contentSteeringManager_.addLocation("BaseURL",ge,Y),d=!0)}if(this.lastCalculatedBaseUris_.splice(0),!d||!this.contentSteeringManager_){let z=c.map(I.getContents);this.lastCalculatedBaseUris_.push(...fe.resolveUris(i,z))}let u=this.contentSteeringManager_,m=this.lastCalculatedBaseUris_,g=pt.makeBaseUriGetter_.call(pt,u,d,m);this.manifestPatchContext_.getBaseUris=g;let _=0;c&&c.length&&(_=I.parseAttr(c[0],"availabilityTimeOffset",I.parseFloat)||0),this.manifestPatchContext_.availabilityTimeOffset=_,this.updatePeriod_=I.parseAttr(e,"minimumUpdatePeriod",I.parseDuration,-1);let T=I.parseAttr(e,"availabilityStartTime",I.parseDate),b=I.parseAttr(e,"timeShiftBufferDepth",I.parseDuration),S=this.config_.dash.ignoreSuggestedPresentationDelay,E=null;S||(E=I.parseAttr(e,"suggestedPresentationDelay",I.parseDuration));let w=this.config_.dash.ignoreMaxSegmentDuration,A=null;w||(A=I.parseAttr(e,"maxSegmentDuration",I.parseDuration));let x=e.attributes.type||"static",M=x=="static"||x=="list";this.manifest_&&this.manifest_.presentationTimeline&&(this.isTransitionFromDynamicToStatic_=this.manifest_.presentationTimeline.isLive()&&M),this.manifestPatchContext_.type=x;let C;if(this.manifest_){C=this.manifest_.presentationTimeline;let z=C.getSegmentAvailabilityStart();for(let ge of this.streamMap_.values())ge.segmentIndex&&ge.segmentIndex.evict(z)}else{let z=this.config_.dash.ignoreMinBufferTime,ge=0;z||(ge=I.parseAttr(e,"minBufferTime",I.parseDuration)||0);let Y=0;E!=null?Y=Math.min(E,b||1/0):this.config_.defaultPresentationDelay>0?Y=this.config_.defaultPresentationDelay:Y=Math.min(ge*1.5,b||1/0),C=new xi(T,Y,this.config_.dash.autoCorrectDrift)}C.setStatic(M),C.isLive()&&!isNaN(this.config_.availabilityWindowOverride)&&(b=this.config_.availabilityWindowOverride),b==null&&(b=1/0),C.setSegmentAvailabilityDuration(b);let L=e.attributes.profiles||"";this.manifestPatchContext_.profiles=L.split(",");let V={dynamic:!M,presentationTimeline:C,period:null,periodInfo:null,adaptationSet:null,representation:null,bandwidth:0,indexRangeWarningGiven:!1,availabilityTimeOffset:_,mediaPresentationDuration:null,profiles:L.split(","),roles:null,urlParams:pt.defaultUrlParams_,name:""};await a;let ee=Re.parseEssentialProperties(e),oe=Re.parseSupplementalProperties(e),le=z=>pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(z.schemeIdUri),G=ee.find(le)||oe.find(le);if(G){let z=this.getURLParametersFunction_(G.element);z&&(V.urlParams=z)}let J=this.findRequestParamFn_(e,"segment");J&&(V.urlParams=J),this.gapCount_=0;let Z=this.parsePeriods_(V,g,e,!1),ce=Z.duration,W=Z.periods;if((M&&!this.isTransitionFromDynamicToStatic_||!Z.durationDerivedFromPeriods)&&C.setDuration(ce||1/0),this.isLowLatency_&&this.lowLatencyMode_&&C.setAvailabilityTimeOffset(this.minTotalAvailabilityTimeOffset_),C.notifyMaxSegmentDuration(A||1),Ve&&!this.isTransitionFromDynamicToStatic_&&C.assertIsValid(),this.isLowLatency_&&this.lowLatencyMode_){let z=E!=null?E:this.config_.defaultPresentationDelay;C.setDelay(z)}if(this.manifest_)this.manifest_.periodCount=W.length,this.manifest_.gapCount=this.gapCount_,await this.postPeriodProcessing_(W,!1);else{if(await this.periodCombiner_.combinePeriods(W,V.dynamic),this.manifest_={presentationTimeline:C,variants:this.periodCombiner_.getVariants(),textStreams:this.periodCombiner_.getTextStreams(),imageStreams:this.periodCombiner_.getImageStreams(),chapterStreams:[],offlineSessionIds:[],sequenceMode:this.config_.dash.sequenceMode,ignoreManifestTimestampsInSegmentsMode:!1,type:me.DASH,serviceDescription:this.parseServiceDescription_(e),nextUrl:this.parseMpdChaining_(e),periodCount:W.length,gapCount:this.gapCount_,isLowLatency:this.isLowLatency_,startTime:null},C.usingPresentationStartTime()){let ge=I.findChildren(e,"UTCTiming"),Y=await this.parseUtcTiming_(g,ge);if(!this.playerInterface_)return;C.setClockOffset(Y)}C.lockStartTime(),this.periodCombiner_&&!this.manifest_.presentationTimeline.isLive()&&this.periodCombiner_.release();let z=I.findChild(e,"ProgramInformation");if(z){let ge=U.EventName.ProgramInformation,Y=new Map().set("detail",z),X=new U(ge,Y);this.playerInterface_.onEvent(X)}}this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_),this.cleanStreamMap_(),this.cleanContinuityCache_(W)}async postPeriodProcessing_(e,t){await this.periodCombiner_.combinePeriods(e,!0,t),this.manifest_.variants=this.periodCombiner_.getVariants();let i=this.periodCombiner_.getTextStreams();i.length>0&&(this.manifest_.textStreams=i),this.manifest_.imageStreams=this.periodCombiner_.getImageStreams(),this.playerInterface_.filter(this.manifest_)}async processPatchManifest_(e){let t=e.attributes.mpdId,i=I.parseAttr(e,"originalPublishTime",I.parseDate);if(!t||t!==this.manifestPatchContext_.mpdId||i!==this.manifestPatchContext_.publishTime)throw this.patchLocationNodes_=[],new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.DASH_INVALID_PATCH);let r=[],s=[],n=new Set;for(let a of I.getChildNodes(e)){let o=!0,c=I.parseXpath(a.attributes.sel||""),d=c[c.length-1],u=I.getContents(a)||"";if(d.name==="MPD")if(d.attribute==="mediaPresentationDuration"){let m=I.getContents(a)||"";this.parsePatchMediaPresentationDurationChange_(m)}else d.attribute==="type"?this.parsePatchMpdTypeChange_(u):d.attribute==="publishTime"?this.manifestPatchContext_.publishTime=I.parseDate(u)||0:d.attribute===null&&a.tagName==="add"?s.push(a):o=!1;else if(d.name==="PatchLocation")this.updatePatchLocationNodes_(a);else if(d.name==="Period")a.tagName==="add"?s.push(a):a.tagName==="remove"&&d.id&&this.removePatchPeriod_(d.id);else if(d.name==="SegmentTemplate"){let m=this.modifySegmentTemplate_(a);for(let f of m)n.add(f)}else if(d.name==="SegmentTimeline"||d.name==="S"){let m=this.modifyTimepoints_(a);for(let f of m)n.add(f)}else o=!1;o||p.warning("Unhandled "+a.tagName+" operation",a.attributes.sel)}for(let a of n)this.parsePatchSegment_(a);for(let a of s)r.push(...this.parsePatchPeriod_(a));if(r.length&&(this.manifest_.periodCount+=r.length,this.manifest_.gapCount=this.gapCount_,await this.postPeriodProcessing_(r,!0)),this.manifestPatchContext_.type=="static"){let a=this.manifestPatchContext_.mediaPresentationDuration;this.manifest_.presentationTimeline.setDuration(a||1/0)}}parsePatchMpdTypeChange_(e){this.manifest_.presentationTimeline.setStatic(e=="static"),this.manifestPatchContext_.type=e;for(let t of this.contextCache_.values())t.dynamic=e=="dynamic";e=="static"&&(this.updatePeriod_=-1)}parsePatchMediaPresentationDurationChange_(e){let t=I.parseDuration(e);if(t!=null){this.manifestPatchContext_.mediaPresentationDuration=t;for(let i of this.contextCache_.values())i.mediaPresentationDuration=t}}parsePatchPeriod_(e){v.assert(this.manifestPatchContext_.getBaseUris,"Must provide getBaseUris on manifestPatchContext_");let t={dynamic:this.manifestPatchContext_.type=="dynamic",presentationTimeline:this.manifest_.presentationTimeline,period:null,periodInfo:null,adaptationSet:null,representation:null,bandwidth:0,indexRangeWarningGiven:!1,availabilityTimeOffset:this.manifestPatchContext_.availabilityTimeOffset,profiles:this.manifestPatchContext_.profiles,mediaPresentationDuration:this.manifestPatchContext_.mediaPresentationDuration,roles:null,urlParams:pt.defaultUrlParams_,name:""};return this.parsePeriods_(t,this.manifestPatchContext_.getBaseUris,e,!0).periods}removePatchPeriod_(e){this.manifest_.periodCount--;for(let i of this.contextCache_.keys())if(i.startsWith(e)){let r=this.contextCache_.get(i);pr.removeTimepoints(r),this.parsePatchSegment_(i),this.contextCache_.delete(i)}let t=this.lastManifestUpdatePeriodIds_.filter(i=>i!==e);this.lastManifestUpdatePeriodIds_=t,this.parsedPeriodCache_.delete(e)}getContextIdsFromPath_(e){let t="",i="",r=-1,s="";for(let a of e)a.name==="Period"?t=a.id:a.name==="AdaptationSet"?(i=a.id,a.position!==null&&(r=a.position)):a.name==="Representation"&&(s=a.id);let n=[];if(s)n.push(t+","+s);else if(i)for(let a of this.contextCache_.values())a.period.id===t&&a.adaptationSet.id===i&&a.representation.id&&n.push(t+","+a.representation.id);else if(r>-1)for(let a of this.contextCache_.values())a.period.id===t&&a.adaptationSet.position===r&&a.representation.id&&n.push(t+","+a.representation.id);return n}modifySegmentTemplate_(e){let t=I.parseXpath(e.attributes.sel||""),i=t[t.length-1];if(!i.attribute)return[];let r=this.getContextIdsFromPath_(t),s=I.getContents(e)||"";for(let n of r){let a=this.contextCache_.get(n);v.assert(a&&a.representation.segmentTemplate,"cannot modify segment template"),I.modifyNodeAttribute(a.representation.segmentTemplate,e.tagName,i.attribute,s)}return r}modifyTimepoints_(e){let t=I.parseXpath(e.attributes.sel||""),i=this.getContextIdsFromPath_(t);for(let r of i){let s=this.contextCache_.get(r);pr.modifyTimepoints(s,e)}return i}parsePatchSegment_(e){let t=this.contextCache_.get(e),i=this.streamMap_.get(e);v.assert(i,"stream should exist"),i.segmentIndex&&i.segmentIndex.evict(this.manifest_.presentationTimeline.getSegmentAvailabilityStart());try{let r=(n,a,o,c)=>this.requestSegment_(n,a,o,c),s=pr.createStreamInfo(t,r,this.streamMap_,!0,this.config_.dash.initialSegmentLimit,this.periodDurations_,t.representation.aesKey,null,!0,this.continuityCache_);i.createSegmentIndex=async()=>{i.segmentIndex||(i.segmentIndex=await s.generateSegmentIndex())}}catch(r){let s=R.ContentType,n=t.representation.contentType,a=n==s.TEXT||n==s.APPLICATION,o=n==s.IMAGE;if(!(a||o)||r.code!=h.Code.DASH_NO_SEGMENT_INFO)throw r}}parseServiceDescription_(e){let t=I.findChild(e,"ServiceDescription");if(!t)return null;let i=I.findChild(t,"Latency"),r=I.findChild(t,"PlaybackRate");if(!i&&!r)return null;let s={};return i&&("target"in i.attributes&&(s.targetLatency=parseInt(i.attributes.target,10)/1e3),"max"in i.attributes&&(s.maxLatency=parseInt(i.attributes.max,10)/1e3),"min"in i.attributes&&(s.minLatency=parseInt(i.attributes.min,10)/1e3)),r&&("max"in r.attributes&&(s.maxPlaybackRate=parseFloat(r.attributes.max)),"min"in r.attributes&&(s.minPlaybackRate=parseFloat(r.attributes.min))),s}checkMpdEssentialProperties_(e){let t=pt.SUPPORTED_ESSENTIAL_PROPERTIES_,i=Re.parseEssentialProperties(e);if(!i.length)return;let r=new Map,s=0;for(let n of i){let a=n.id!=null?"id:"+n.id:"no-id:"+s++;r.getOrInsert(a,[]).push(n)}for(let n of r.values())if(!n.some(o=>t.has(o.schemeIdUri)))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_UNSUPPORTED_ESSENTIAL_PROPERTY,n.map(o=>o.schemeIdUri))}parseMpdChaining_(e){let t=Re.parseSupplementalProperties(e),i=Re.getDescriptor(t,"urn:mpeg:dash:chaining:2016");return!i||!i.value?null:fe.applyUrlParams(i.value,this.findRequestParamFn_(e,"chaining"))}parsePeriods_(e,t,i,r){let s=e.mediaPresentationDuration;s||(s=I.parseAttr(i,"mediaPresentationDuration",I.parseDuration),this.manifestPatchContext_.mediaPresentationDuration=s);let n=0;this.manifest_&&this.manifest_.presentationTimeline&&this.isTransitionFromDynamicToStatic_&&(n=this.manifest_.presentationTimeline.getSeekRangeStart());let a=[],o=n,c=I.findChildren(i,"Period"),d=e.dynamic;d||this.parsedPeriodCache_.clear();let u=0,m=d&&!r?new Set(this.lastManifestUpdatePeriodIds_.slice(1,-1)):null;for(let f=0;f<c.length;f++){let g=c[f],_=c[f+1],T=I.parseAttr(g,"start",I.parseDuration,null),b=g.attributes.id,S=I.parseAttr(g,"duration",I.parseDuration);f==0&&this.isTransitionFromDynamicToStatic_&&(u=n-(T||0)),T==null?T=o:this.isTransitionFromDynamicToStatic_&&(T=T+u);let E=null;if(_){let C=I.parseAttr(_,"start",I.parseDuration);C!=null&&(E=C-T+n)}else s!=null&&(E=s-T+n);let w=R.GAP_OVERLAP_TOLERANCE_SECONDS;if(E&&S&&Math.abs(E-S)>w&&(p.warning("There is a gap/overlap between Periods",g),E>S&&this.gapCount_++),E==null&&(E=S),this.largestPeriodStartTime_!==null&&b!=null&&T!==null&&T<this.largestPeriodStartTime_&&!this.lastManifestUpdatePeriodIds_.includes(b)&&f+1!=c.length){p.debug(`Skipping Period with ID ${b} as its start time is smaller than the largest period start time that has been seen, and ID is unseen before`);continue}T!==null&&(this.largestPeriodStartTime_===null||T>this.largestPeriodStartTime_)&&(this.largestPeriodStartTime_=T);let A={start:T,duration:E,node:g,isLastPeriod:E==null||!_},x=null,M=f>0&&f<c.length-1;if(d&&m&&M&&!r&&(b!=null||(b=this.periodIdFallback_(T)),m.has(b))){let C=this.parsedPeriodCache_.get(b);C&&(x=C)}if(x||(x=this.parsePeriod_(e,t,A),d&&x.id&&this.parsedPeriodCache_.set(x.id,x)),a.push(x),x.id&&E&&this.periodDurations_.set(x.id,E),E==null){_&&p.warning("Skipping Period",f+1,"and any subsequent Periods:","Period",f+1,"does not have a valid start time.",_),o=null;break}o=T+E}if(d&&!r&&this.prunePeriodCache_(a),r)for(let f of a){let g=f.id;this.lastManifestUpdatePeriodIds_.includes(g)||this.lastManifestUpdatePeriodIds_.push(g)}else this.lastManifestUpdatePeriodIds_=a.map(f=>f.id);if(s!=null){if(o!=null){let f=R.GAP_OVERLAP_TOLERANCE_SECONDS,g=o-n-s;Math.abs(g)>f&&p.warning("@mediaPresentationDuration does not match the total duration ","of all Periods.")}return{periods:a,duration:s+n,durationDerivedFromPeriods:!1}}else return{periods:a,duration:o,durationDerivedFromPeriods:!0}}prunePeriodCache_(e){let t=new Set(e.map(i=>i.id));for(let i of Array.from(this.parsedPeriodCache_.keys()))t.has(i)||this.parsedPeriodCache_.delete(i)}periodIdFallback_(e){return"__shaka_period_"+e}cleanStreamMap_(){let t=Array.from(this.indexStreamMap_.keys()).filter(i=>!this.lastManifestUpdatePeriodIds_.includes(i));for(let i of t){let r=!0;for(let s of this.indexStreamMap_.get(i)){let n=this.streamMap_.get(s);if(n){if(n.segmentIndex&&!n.segmentIndex.isEmpty()){r=!1;continue}this.periodCombiner_&&this.periodCombiner_.deleteStream(n,i),this.streamMap_.delete(s)}}r&&this.indexStreamMap_.delete(i)}}cleanContinuityCache_(e){let t=new Set(e.map(i=>i.id));for(let i of this.continuityCache_.keys())t.has(i)||this.continuityCache_.delete(i)}parsePeriod_(e,t,i){let r=R.ContentType;v.assert(i.node,"periodInfo.node should exist"),e.period=this.createFrame_(i.node,null,t),e.periodInfo=i,e.period.availabilityTimeOffset=e.availabilityTimeOffset,e.period.id||(p.info("No Period ID given for Period with start time "+i.start+", Assigning a default"),e.period.id=this.periodIdFallback_(i.start));let s=I.findChildren(i.node,"EventStream"),n=e.presentationTimeline.getSegmentAvailabilityStart();for(let b of s)this.parseEventStream_(i.start,i.duration,b,n);let a=Re.parseSupplementalProperties(i.node);for(let b of a)if(pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(b.schemeIdUri)){let S=this.getURLParametersFunction_(b.element);S&&(e.urlParams=S)}let o=this.findRequestParamFn_(i.node,"segment");o&&(e.urlParams=o);let c=I.findChildren(i.node,"AdaptationSet").map((b,S)=>this.parseAdaptationSet_(e,S,b)).filter(it.isNotNull);if(e.dynamic){let b=new Set,S=0;for(let E=0;E<c.length;E++){let w=c[E].representationIds;for(let A=0;A<w.length;A++)b.add(w[A]),S++}if(S!=b.size)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_DUPLICATE_REPRESENTATION_ID)}let d=new Map;for(let b of c)for(let[S,E]of b.dependencyStreamMap)d.set(S,E);if(d.size){let b=new Map;for(let S=0;S<c.length;S++){let E=c[S].streams;for(let w=0;w<E.length;w++)d.has(E[w].originalId)&&(b.has(S)||b.set(S,[]),b.get(S).push(E[w].originalId))}if(b.size){let S=I.findChildren(i.node,"AdaptationSet"),E=e.name;e.name="dependencyStream",b.forEach((w,A)=>{let x=S[A];if(!x)return;let M=this.parseAdaptationSet_(e,A,x);if(!M)return;let C=[];for(let k=0;k<w.length;k++){let L=w[k],V=M.streams.find(ee=>ee.originalId==L);if(V){let ee=d.get(V.originalId||"");V.dependencyStream=ee,V.originalId+=ee.originalId,V.baseOriginalId=ee.baseOriginalId,C.push(V)}}C.length&&c[A].streams.push(...C)}),e.name=E}}let[u,m]=ye.partition(c,b=>!!b.trickModeFor);for(let b of u)for(let S of b.streams)S.isIframe=!0;if(!this.config_.disableIFrames)for(let b of u){let S=b.trickModeFor.split(" ");for(let E of m)if(S.includes(E.id))for(let w of E.streams)re.setBetterIFrameStream(w,b.streams)}let f=this.getStreamsFromSets_(this.config_.disableAudio,m,r.AUDIO),g=this.getStreamsFromSets_(this.config_.disableVideo,m,r.VIDEO),_=this.getStreamsFromSets_(this.config_.disableText,m,r.TEXT),T=this.getStreamsFromSets_(this.config_.disableThumbnails,m,r.IMAGE);if(g.length===0&&f.length===0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_EMPTY_PERIOD);return{id:e.period.id,audioStreams:f,videoStreams:g,textStreams:_,imageStreams:T}}getStreamsFromSets_(e,t,i){return e||!t.length?[]:t.reduce((r,s)=>(s.contentType!=i||r.push(...s.streams),r),[])}parseAdaptationSet_(e,t,i){let r=R.ContentType;e.adaptationSet=this.createFrame_(i,e.period,null),e.adaptationSet.position=t;let s=!1,n=I.findChildren(i,"Role"),a=n.map(Y=>Y.attributes.value).filter(it.isNotNull),o,c=e.adaptationSet.contentType==r.TEXT;c&&(o=R.TextStreamKind.SUBTITLE);for(let Y of n){let X=Y.attributes.schemeIdUri;if(X==null||X=="urn:mpeg:dash:role:2011"){let N=Y.attributes.value;switch(N){case"main":s=!0;break;case"caption":case"subtitle":o=N;break}}}let d,u,m="urn:mpeg:mpegB:cicp",f=`${m}:TransferCharacteristics`,g=`${m}:ColourPrimaries`,_=Y=>{switch(Y){case 1:case 6:case 13:case 14:case 15:return"SDR";case 16:return"PQ";case 18:return"HLG"}},T=Y=>{switch(Y){case 1:case 5:case 6:case 7:return"srgb";case 9:return"rec2020";case 11:case 12:return"p3"}},b=Y=>{let X=Y.attributes["dvb:fontFamily"],N=Y.attributes["dvb:url"];if(X&&N){let $=fe.resolveUris(e.adaptationSet.getBaseUris(),[N],e.urlParams());this.playerInterface_.addFont(X,$[0])}},S=Re.parseEssentialProperties(i),E=Re.parseSupplementalProperties(i),w=null,A=!1,x=null,M=!1;for(let Y of S){let X=Y.schemeIdUri;if(!pt.SUPPORTED_ESSENTIAL_PROPERTIES_.has(X)){M=!0;continue}X=="http://dashif.org/guidelines/trickmode"?w=Y.value:X==f?d=_(parseInt(Y.value,10)):X==g?u=T(parseInt(Y.value,10)):X=="urn:mpeg:dash:ssr:2023"?this.config_.dash.enableFastSwitching?A=!0:M=!0:X=="urn:dvb:dash:fontdownload:2014"?b(Y.element):pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(X)&&(x=this.getURLParametersFunction_(Y.element),x||(M=!0))}if(M)return null;let C=null;for(let Y of E){let X=Y.schemeIdUri;X=="http://dashif.org/guidelines/last-segment-number"?C=parseInt(Y.value,10)-1:X==f?d=_(parseInt(Y.value,10)):X==g?u=T(parseInt(Y.value,10)):X=="urn:dvb:dash:fontdownload:2014"?b(Y.element):pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(X)&&(x=this.getURLParametersFunction_(Y.element))}let k=this.findRequestParamFn_(i,"segment");k&&(x=k),x&&(e.urlParams=x);let L=I.findChildren(i,"Accessibility"),V=new Map,ee;for(let Y of L){let X=Y.attributes.schemeIdUri,N=Y.attributes.value;X=="urn:scte:dash:cc:cea-608:2015"&&!this.config_.disableText?R.parseCEA608Captions(N,V):X=="urn:scte:dash:cc:cea-708:2015"&&!this.config_.disableText?R.parseCEA708Captions(N,V):X=="urn:mpeg:dash:role:2011"?N!=null&&(a.push(N),N=="captions"&&(o=R.TextStreamKind.CLOSED_CAPTION)):X=="urn:tva:metadata:cs:AudioPurposeCS:2007"&&(N=="1"?ee=me.AccessibilityPurpose.VISUALLY_IMPAIRED:N=="2"?ee=me.AccessibilityPurpose.HARD_OF_HEARING:N=="9"&&(ee=me.AccessibilityPurpose.SPOKEN_SUBTITLES))}let oe=I.findChildren(i,"ContentProtection"),le=this.contentProtection_.parseFromAdaptationSet(oe,this.config_.ignoreDrmInfo,this.config_.dash.keySystemsByURI);e.adaptationSet.encrypted=oe.length>0;let G=Se.normalize(e.adaptationSet.language||"und"),J=e.adaptationSet.label,Z=new Map,ce=I.findChildren(i,"Representation");if(!this.config_.ignoreSupplementalCodecs){let Y=[];for(let X of ce){let N=I.getAttributeNS(X,pt.SCTE214_,"supplementalCodecs");if(N){let $=Fe.cloneObject(X);$.attributes.codecs=N.split(" ").join(","),$.attributes.id&&($.attributes.supplementalId=$.attributes.id+"_supplementalCodecs"),Y.push($)}}ce.push(...Y)}let W=ce.map(Y=>{let X=this.parseRepresentation_(e,le,o,G,J,s,a,V,Y,ee,C);if(X){X.hdr=X.hdr||d,X.colorGamut=X.colorGamut||u,X.fastSwitching=A;let N=Y.attributes.dependencyId;if(N)return X.baseOriginalId=N,Z.set(N,X),null}return X}).filter(Y=>!!Y);if(W.length==0&&Z.size==0){let Y=e.adaptationSet.contentType==r.IMAGE;if(this.config_.dash.ignoreEmptyAdaptationSet||c||Y)return null;throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_EMPTY_ADAPTATION_SET)}if(!e.adaptationSet.contentType||e.adaptationSet.contentType==r.APPLICATION){let Y=W[0].mimeType,X=W[0].codecs;e.adaptationSet.contentType=pt.guessContentType_(Y,X);for(let N of W)N.type=e.adaptationSet.contentType}let z=e.adaptationSet.id||"__fake__"+this.globalId_++;for(let Y of W){for(let X of le.drmInfos)X.keyIds=X.keyIds&&Y.keyIds?new Set([...X.keyIds,...Y.keyIds]):X.keyIds||Y.keyIds;this.config_.enableAudioGroups&&(Y.groupId=z)}let ge=ce.map(Y=>Y.attributes.supplementalId||Y.attributes.id).filter(it.isNotNull);return{id:z,contentType:e.adaptationSet.contentType,language:G,main:s,streams:W,drmInfos:le.drmInfos,trickModeFor:w,representationIds:ge,dependencyStreamMap:Z}}getURLParametersFunction_(e){let t=I.findChildNS(e,pt.UP_NAMESPACE_2014_,"UrlQueryInfo")||I.findChildNS(e,pt.UP_NAMESPACE_2016_,"ExtUrlQueryInfo");return t?this.buildUrlQueryFn_(t):null}findRequestParamFn_(e,t){let i;for(let r of I.findChildren(e,"RequestParam")){let s=(r.attributes.includeInRequests||"segment").split(/\s+/);if(s.includes(t)||s.includes("*")){let n=this.buildUrlQueryFn_(r);n&&(i=n)}}return i}buildUrlQueryFn_(e){let t=I.parseAttr(e,"useMPDUrlQuery",I.parseBoolean,!1),i=q.htmlUnescape(e.attributes.queryString||""),r=q.htmlUnescape(e.attributes.queryTemplate||"");return!r||!t&&!i?null:()=>{let s=[];t&&this.lastManifestQueryParams_&&s.push(this.lastManifestQueryParams_),i&&s.push(i);let n=s.join("&");if(r=="$querypart$")return n;let a;return r.split("&").map(c=>{if(c=="$querypart$")return n;let d=/\$query:(.*?)\$/.exec(c);if(d){let u=d[1];a||(a=new URLSearchParams(n));let m=a.get(u);return m?`${u}=${m}`:""}return c.replace(/\$\$|\$[^$]+\$/g,u=>u==="$$"?"$":"")}).filter(Boolean).join("&")}}parseRepresentation_(e,t,i,r,s,n,a,o,c,d,u){let m=R.ContentType,f=e.period.id;e.representation=this.createFrame_(c,e.adaptationSet,null);let g=e.representation.id;if(this.minTotalAvailabilityTimeOffset_=Math.min(this.minTotalAvailabilityTimeOffset_,e.representation.availabilityTimeOffset),this.isLowLatency_=this.minTotalAvailabilityTimeOffset_>0,!this.verifyRepresentation_(e.representation))return p.warning("Skipping Representation",e.representation),null;let _=e.periodInfo.start;e.bandwidth=I.parseAttr(c,"bandwidth",I.parsePositiveInt)||0,e.roles=a;let T=Re.parseEssentialProperties(c),b=Re.parseSupplementalProperties(c),S=I.findChildren(c,"ContentProtection"),E=N=>pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(N.schemeIdUri),w=null,A=T.find(E)||b.find(E);A&&(w=this.getURLParametersFunction_(A.element));let x=this.findRequestParamFn_(c,"segment");x&&(w=x),w&&(e.urlParams=w);let M,C=e.representation.contentType,k=C==m.TEXT||C==m.APPLICATION,L=C==m.IMAGE;S.length&&(e.adaptationSet.encrypted=!0);try{let N;if(t.aes128Info){let Ie=e.representation.getBaseUris,tt=e.urlParams,gt=fe.resolveUris(Ie(),[t.aes128Info.keyUri],tt()),St=K.RequestType.KEY,yt=K.makeRequest(gt,this.config_.retryParameters);N={bitsKey:128,blockCipherMode:"CBC",iv:t.aes128Info.iv,firstMediaSequenceNumber:0},N.fetchKey=async()=>{let Ct=await this.makeNetworkRequest_(yt,St);if(!Ct.data||Ct.data.byteLength!=16)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_KEY_LENGTH);let bi={name:"AES-CBC"};N.cryptoKey=await window.crypto.subtle.importKey("raw",Ct.data,bi,!0,["decrypt"]),N.fetchKey=void 0}}e.representation.aesKey=N;let $=(Ie,tt,gt,St)=>this.requestSegment_(Ie,tt,gt,St);if(e.representation.segmentBase)M=Hi.createStreamInfo(e,$,N);else if(e.representation.segmentList)M=Ln.createStreamInfo(e,this.streamMap_,N);else if(e.representation.segmentTemplate){let Ie=!!this.manifest_;M=pr.createStreamInfo(e,$,this.streamMap_,Ie,this.config_.dash.initialSegmentLimit,this.periodDurations_,N,u,!1,this.continuityCache_)}else{v.assert(k,"Must have Segment* with non-text streams.");let Ie=e.periodInfo.duration||0,tt=e.representation.getBaseUris,gt=e.representation.mimeType,St=e.representation.codecs;M={endTime:-1,timeline:-1,generateSegmentIndex:()=>{let yt=Ze.forSingleSegment(_,Ie,tt());return yt.forEachTopLevelReference(Ct=>{Ct.mimeType=gt,Ct.codecs=St}),Promise.resolve(yt)},timescale:1}}}catch(N){if((k||L)&&N.code==h.Code.DASH_NO_SEGMENT_INFO)return null;throw N}let V=this.contentProtection_.parseFromRepresentation(S,t,this.config_.ignoreDrmInfo,this.config_.dash.keySystemsByURI),ee=new Set(V?[V]:[]),oe=Re.hasDescriptor(b,"tag:dolby.com,2018:dash:EC3_ExtensionType:2018","JOC"),le=Re.hasDescriptor(b,"tag:dolby.com,2016:dash:virtualized_content:2016","1"),G=oe||le,J=!1;k&&(J=a.includes("forced_subtitle")||a.includes("forced-subtitle"));let Z;if(L){let N=["http://dashif.org/thumbnail_tile","http://dashif.org/guidelines/thumbnail_tile"],$=T.find(Ie=>N.includes(Ie.schemeIdUri));if($&&(Z=$.value),!Z)return null}let ce,W=e.profiles,z=e.representation.codecs;W.includes("http://dashif.org/guidelines/dash-if-uhd#hevc-hdr-pq10")&&(z.includes("hvc1.2.4.L153.B0")||z.includes("hev1.2.4.L153.B0"))&&(ce="PQ");let Y=g?f+","+g:"";if(Y&&e.name&&(Y+=e.name),this.patchLocationNodes_.length&&Y&&this.contextCache_.set(Y,this.cloneContext_(e)),e.representation.producerReferenceTime&&this.parseProducerReferenceTime_(e.representation.producerReferenceTime,M,e.presentationTimeline),M.endTime!=-1&&f!=null&&g!=null){let N=this.continuityCache_.get(f);if(N)N.endTime=M.endTime,N.reps.includes(g)||N.reps.push(g),this.continuityCache_.set(f,N);else{let $={endTime:M.endTime,timeline:M.timeline,reps:[g]};this.continuityCache_.set(f,$)}}let X;return Y&&this.streamMap_.has(Y)?X=this.streamMap_.get(Y):X={id:this.globalId_++,originalId:g,groupId:null,createSegmentIndex:()=>Promise.resolve(),closeSegmentIndex:()=>{X.segmentIndex&&(X.segmentIndex.release(),X.segmentIndex=null)},segmentIndex:null,mimeType:e.representation.mimeType,codecs:z,supplementalCodecs:e.representation.supplementalCodecs,frameRate:e.representation.frameRate,pixelAspectRatio:e.representation.pixelAspectRatio,bandwidth:e.bandwidth,width:e.representation.width,height:e.representation.height,kind:i,encrypted:t.drmInfos.length>0,drmInfos:t.drmInfos,keyIds:ee,language:r,originalLanguage:e.adaptationSet.language,label:s,type:e.adaptationSet.contentType,primary:n,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:e.representation.emsgSchemeIdUris,roles:a,forced:J,channelsCount:e.representation.numChannels,audioSamplingRate:e.representation.audioSamplingRate,spatialAudio:G,closedCaptions:o,hdr:ce,colorGamut:void 0,videoLayout:void 0,tilesLayout:Z,accessibilityPurpose:d,external:!1,fastSwitching:!1,fullMimeTypes:new Set([O.getFullType(e.representation.mimeType,e.representation.codecs)]),isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1},X.createSegmentIndex=async()=>{X.segmentIndex||(X.segmentIndex=await M.generateSegmentIndex())},Y&&e.dynamic&&!this.streamMap_.has(Y)&&(this.streamMap_.set(Y,X),this.indexStreamMap_.getOrInsertComputed(f||"",()=>[]).push(Y)),X}parseProducerReferenceTime_(e,t,i){if(this.parsedPrftNodes_.has(e))return;this.parsedPrftNodes_.add(e);let r=I.parseAttr(e,"presentationTime",I.parseNonNegativeInt)||0,s=I.findChild(e,"UTCTiming"),n;if(!s||!s.attributes.schemeIdUri||pt.isNtpScheme_(s.attributes.schemeIdUri)){let d=I.parseAttr(e,"wallClockTime",I.parseNonNegativeInt)||0;n=Wr.convertNtp(d)}else n=(I.parseAttr(e,"wallClockTime",I.parseDate)||0)*1e3;let o=new Date(n-r/t.timescale*1e3),c=o.getTime()/1e3;if(!isNaN(c)){i.isStartTimeLocked()||i.setInitialProgramDateTime(c);let d={wallClockTime:n,programStartDate:o},u=U.EventName.Prft,m=new Map().set("detail",d),f=new U(u,m);this.playerInterface_.onEvent(f)}}cloneContext_(e){let t=r=>{if(!r)return null;let s=Fe.shallowCloneObject(r);return s.segmentBase=null,s.segmentList=null,s.segmentTemplate=I.cloneNode(s.segmentTemplate),s.producerReferenceTime=null,s},i=Fe.shallowCloneObject(e);return i.period=t(i.period),i.adaptationSet=t(i.adaptationSet),i.representation=t(i.representation),i.periodInfo&&(i.periodInfo=Fe.shallowCloneObject(i.periodInfo),i.periodInfo.node=null),i}async onUpdate_(){v.assert(this.updatePeriod_>=0,"There should be an update period"),p.info("Updating manifest...");let e=0;try{e=await this.requestManifest_()}catch(t){if(v.assert(t instanceof h,"Should only receive a Shaka error"),this.playerInterface_){if(this.config_.raiseFatalErrorOnManifestUpdateRequestFailure){this.playerInterface_.onError(t);return}t.severity=h.Severity.RECOVERABLE,this.playerInterface_.onError(t)}}this.playerInterface_&&(this.playerInterface_.onManifestUpdated(),this.setUpdateTimer_(e))}updateNow_(){this.updateTimer_.tickNow()}setUpdateTimer_(e){if(this.updatePeriod_<0)return;let t=this.updatePeriod_;this.config_.updatePeriod>=0&&(t=this.config_.updatePeriod);let i=Math.max(t-e,this.averageUpdateDuration_.getEstimate());this.updateTimer_.tickAfter(i)}createFrame_(e,t,i){v.assert(t||i,"Must provide either parent or getBaseUris"),t=t||{contentType:"",mimeType:"",codecs:"",supplementalCodecs:"",emsgSchemeIdUris:[],frameRate:void 0,pixelAspectRatio:void 0,numChannels:null,audioSamplingRate:null,availabilityTimeOffset:0,segmentSequenceCadence:1,encrypted:!1},i=i||t.getBaseUris;let r=I.parseNonNegativeInt,s=I.evalDivision,n=e.attributes.id,a=e.attributes.supplementalId,o=I.findChildren(e,"BaseURL"),c,d=!1;if(this.contentSteeringManager_)for(let W of o){let z=W.attributes.serviceLocation,ge=I.getContents(W);z&&ge&&(this.contentSteeringManager_.addLocation(n,z,ge),d=!0)}(!d||!this.contentSteeringManager_)&&(c=o.map(I.getContents));let u=this.contentSteeringManager_,m=()=>o.length?u&&d?u.getLocations(n):c||[]:[],f=e.attributes.contentType||t.contentType,g=e.attributes.mimeType||t.mimeType,_=[e.attributes.codecs||t.codecs],T=_t.codecsFiltering(_).join(","),b=[I.getAttributeNS(e,pt.SCTE214_,"supplementalCodecs")||t.supplementalCodecs],S=_t.codecsFiltering(b).join(","),E=I.parseAttr(e,"frameRate",s)||t.frameRate,w=e.attributes.sar||t.pixelAspectRatio,A=this.emsgSchemeIdUris_(I.findChildren(e,"InbandEventStream"),t.emsgSchemeIdUris),x=I.findChildren(e,"AudioChannelConfiguration"),M=this.parseAudioChannels_(x)||t.numChannels,C=I.parseAttr(e,"audioSamplingRate",r)||t.audioSamplingRate;f||(f=pt.guessContentType_(g,T));let k=I.findChild(e,"SegmentBase"),L=I.findChild(e,"SegmentTemplate"),V=k&&I.parseAttr(k,"availabilityTimeOffset",I.parseFloat)||0,ee=L&&I.parseAttr(L,"availabilityTimeOffset",I.parseFloat)||0,oe=o&&o.length&&I.parseAttr(o[0],"availabilityTimeOffset",I.parseFloat)||0,le=t.availabilityTimeOffset+oe+V+ee,G=null,J=I.findChild(e,"SegmentSequenceProperties");if(J){let W=I.parseAttr(J,"cadence",I.parsePositiveInt);W&&(G=W)}let Z=e.attributes.label,ce=I.findChildren(e,"Label");if(ce&&ce.length){let W=ce[0];I.getTextContents(W)&&(Z=I.getTextContents(W))}return{getBaseUris:()=>fe.resolveUris(i(),m()),segmentBase:k||t.segmentBase,segmentList:I.findChild(e,"SegmentList")||t.segmentList,segmentTemplate:L||t.segmentTemplate,producerReferenceTime:I.findChild(e,"ProducerReferenceTime")||t.producerReferenceTime,width:I.parseAttr(e,"width",r)||t.width,height:I.parseAttr(e,"height",r)||t.height,contentType:f,mimeType:g,codecs:T,supplementalCodecs:S.split(" ").join(","),frameRate:E,pixelAspectRatio:w,emsgSchemeIdUris:A,id:a||n,originalId:n,language:e.attributes.lang,numChannels:M,audioSamplingRate:C,availabilityTimeOffset:le,initialization:null,segmentSequenceCadence:G||t.segmentSequenceCadence,label:Z||null,encrypted:!1}}emsgSchemeIdUris_(e,t){let i=t.slice();for(let r of e){let s=r.attributes.schemeIdUri;i.includes(s)||i.push(s)}return i}parseAudioChannels_(e){for(let t of e){let i=t.attributes.schemeIdUri;if(!i)continue;let r=t.attributes.value;if(r)switch(i){case"urn:mpeg:dash:outputChannelPositionList:2012":return r.trim().split(/ +/).length;case"urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case"urn:dts:dash:audio_channel_configuration:2012":{let s=parseInt(r,10);if(!s){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}return s}case"tag:dolby.com,2015:dash:audio_channel_configuration:2015":{let s=[2,1,2,2,2,2,1,2,2,1,1,1,1,2,1,1,2,2],n=parseInt(r,16);if(!n){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}let a=0;for(let o=0;o<s.length;o++)n&1<<o&&(a+=s[o]);if(a)return a;continue}case"tag:dolby.com,2014:dash:audio_channel_configuration:2011":case"urn:dolby:dash:audio_channel_configuration:2011":{let s=[1,1,1,1,1,2,2,1,1,2,2,2,1,2,1,1].reverse(),n=parseInt(r,16);if(!n){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}let a=0;for(let o=0;o<s.length;o++)n&1<<o&&(a+=s[o]);if(a)return a;continue}case"urn:mpeg:mpegB:cicp:ChannelConfiguration":{let n=[0,1,2,3,4,5,6,8,2,3,4,7,8,24,8,12,10,12,14,12,14],a=parseInt(r,10);if(!a){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}if(a>0&&a<n.length)return n[a];continue}default:p.warning("Unrecognized audio channel scheme:",i,r);continue}}return null}verifyRepresentation_(e){let t=R.ContentType,i=0;return i+=e.segmentBase?1:0,i+=e.segmentList?1:0,i+=e.segmentTemplate?1:0,i==0?e.contentType==t.TEXT||e.contentType==t.APPLICATION?!0:(p.warning("Representation does not contain a segment information source:","the Representation must contain one of SegmentBase, SegmentList,",'SegmentTemplate, or explicitly indicate that it is "text".',e),!1):(i!=1&&(p.warning("Representation contains multiple segment information sources:","the Representation should only contain one of SegmentBase,","SegmentList, or SegmentTemplate.",e),e.segmentBase?(p.info("Using SegmentBase by default."),e.segmentList=null,e.segmentTemplate=null):(v.assert(e.segmentList,"There should be a SegmentList"),p.info("Using SegmentList by default."),e.segmentTemplate=null)),!0)}async requestForTiming_(e,t,i){let r=[q.htmlUnescape(t)],s=fe.resolveUris(e(),r),n=K.makeRequest(s,this.config_.retryParameters);n.method=i;let a=K.RequestType.TIMING,o=this.playerInterface_.networkingEngine.request(a,n,{isPreload:this.isPreloadFn_()});this.operationManager_.manage(o);let c=await o.promise,d;if(i=="HEAD"){if(!c.headers||!c.headers.date)return p.warning("UTC timing response is missing","expected date header"),0;d=c.headers.date}else d=q.fromUTF8(c.data);let u=Date.parse(d);return isNaN(u)?(p.warning("Unable to parse date from UTC timing response"),0):u-Date.now()}async parseUtcTiming_(e,t){let i=t.map(s=>({scheme:s.attributes.schemeIdUri,value:s.attributes.value})),r=this.config_.dash.clockSyncUri;!i.length&&r&&i.push({scheme:"urn:mpeg:dash:utc:http-head:2014",value:r});for(let s of i)try{let n=s.scheme,a=s.value;switch(n){case"urn:mpeg:dash:utc:http-head:2014":case"urn:mpeg:dash:utc:http-head:2012":return await this.requestForTiming_(e,a,"HEAD");case"urn:mpeg:dash:utc:http-xsdate:2014":case"urn:mpeg:dash:utc:http-iso:2014":case"urn:mpeg:dash:utc:http-xsdate:2012":case"urn:mpeg:dash:utc:http-iso:2012":return await this.requestForTiming_(e,a,"GET");case"urn:mpeg:dash:utc:direct:2014":case"urn:mpeg:dash:utc:direct:2012":{let o=Date.parse(a);return isNaN(o)?0:o-Date.now()}case"urn:mpeg:dash:utc:http-ntp:2014":case"urn:mpeg:dash:utc:ntp:2014":case"urn:mpeg:dash:utc:sntp:2014":p.alwaysWarn("NTP UTCTiming scheme is not supported");break;default:p.alwaysWarn("Unrecognized scheme in UTCTiming element",n);break}}catch(n){p.warning("Error fetching time from UTCTiming elem",n.message)}return p.alwaysWarn("A UTCTiming element should always be given in live manifests! This content may not play on clients with bad clocks!"),0}parseEventStream_(e,t,i,r){let s=I.parseNonNegativeInt,n=i.attributes.schemeIdUri||"",a=i.attributes.value||"",o=I.parseAttr(i,"timescale",s)||1,c=I.parseAttr(i,"presentationTimeOffset",s)||0,d;n==="urn:mpeg:dash:event:alternativeMPD:insert:2025"||n==="urn:mpeg:dash:event:alternativeMPD:replace:2025"?d="altmpd":n==="urn:mpeg:dash:event:callback:2015"&&(d="callback");let u=d?this.findRequestParamFn_(i,d):void 0;for(let m of I.findChildren(i,"Event")){let f=I.parseAttr(m,"presentationTime",s)||0,g=I.parseAttr(m,"duration",s)||0,_=Math.max((f-c)/o+e,e),T=_+g/o;if(t!=null&&(_=Math.min(_,e+t),T=Math.min(T,e+t)),T<r)continue;let b={schemeIdUri:n,value:a,startTime:_,endTime:T,id:m.attributes.id||"",timescale:o,eventNode:I.cloneNode(m),urlParams:u};this.playerInterface_.onTimelineRegionAdded(b)}}async requestSegment_(e,t,i,r){let s=K.RequestType.SEGMENT,n=r?K.AdvancedRequestType.INIT_SEGMENT:K.AdvancedRequestType.MEDIA_SEGMENT,a=ct.createSegmentRequest(e,t,i,this.playerInterface_.getStreamingRetryParameters());return(await this.makeNetworkRequest_(a,s,{type:n})).data}static guessContentType_(e,t){let i=O.getFullType(e,t);return Oe.isTypeSupported(i)?R.ContentType.TEXT:e.split("/")[0]}makeNetworkRequest_(e,t,i){i||(i={}),i.isPreload=this.isPreloadFn_();let r=this.playerInterface_.networkingEngine.request(t,e,i);return this.operationManager_.manage(r),r.promise}updatePatchLocationNodes_(e){I.modifyNodes(this.patchLocationNodes_,e)}getPatchLocationUris_(){let e=this.manifestPatchContext_.mpdId,t=this.manifestPatchContext_.publishTime;if(!e||!t||!this.patchLocationNodes_.length)return[];let i=Date.now()/1e3,r=this.patchLocationNodes_.filter(s=>{let n=I.parseNonNegativeInt(s.attributes.ttl);return!n||t+n>i}).map(I.getContents).filter(it.isNotNull);return r.length?fe.resolveUris(this.manifestUris_,r):[]}static isNtpScheme_(e){return e==="urn:mpeg:dash:utc:http-ntp:2014"||e==="urn:mpeg:dash:utc:ntp:2014"||e==="urn:mpeg:dash:utc:sntp:2014"}static defaultUrlParams_(){return""}static makeBaseUriGetter_(e,t,i){return()=>e&&t?e.getLocations("BaseURL"):i.slice()}};l(pt,"SCTE214_","urn:scte:dash:scte214-extensions"),l(pt,"UP_NAMESPACE_2014_","urn:mpeg:dash:schema:urlparam:2014"),l(pt,"UP_NAMESPACE_2016_","urn:mpeg:dash:schema:urlparam:2016"),l(pt,"URL_PARAM_DESCRIPTOR_SCHEMES_",new Set(["urn:mpeg:dash:urlparam:2014","urn:mpeg:dash:urlparam:2016"])),l(pt,"SUPPORTED_ESSENTIAL_PROPERTIES_",new Set(["http://dashif.org/guidelines/trickmode","http://dashif.org/thumbnail_tile","http://dashif.org/guidelines/thumbnail_tile","urn:mpeg:mpegB:cicp:TransferCharacteristics","urn:mpeg:mpegB:cicp:ColourPrimaries","urn:mpeg:mpegB:cicp:MatrixCoefficients","urn:mpeg:dash:ssr:2023","urn:dvb:dash:fontdownload:2014","urn:mpeg:dash:urlparam:2014","urn:mpeg:dash:urlparam:2016","urn:mpeg:dash:urlparam:2025","urn:mpeg:dash:pattern:2024"]));var Br=pt;me.registerParserByMime("application/dash+xml",()=>new Br);me.registerParserByMime("video/vnd.mpeg.dash.mpd",()=>new Br);/*! @license
|
|
618
|
+
*/var pt=class pt{constructor(){l(this,"config_");l(this,"playerInterface_");l(this,"manifestUris_");l(this,"manifest_");l(this,"globalId_");l(this,"patchLocationNodes_");l(this,"manifestPatchContext_");l(this,"contextCache_");l(this,"continuityCache_");l(this,"parsedPeriodCache_");l(this,"streamMap_");l(this,"indexStreamMap_");l(this,"periodDurations_");l(this,"periodCombiner_");l(this,"updatePeriod_");l(this,"averageUpdateDuration_");l(this,"updateTimer_");l(this,"operationManager_");l(this,"largestPeriodStartTime_");l(this,"lastManifestUpdatePeriodIds_");l(this,"minTotalAvailabilityTimeOffset_");l(this,"lowLatencyMode_");l(this,"contentSteeringManager_");l(this,"gapCount_");l(this,"isLowLatency_");l(this,"eventManager_");l(this,"mediaElement_");l(this,"isTransitionFromDynamicToStatic_");l(this,"lastManifestQueryParams_");l(this,"mpdpatchUrlParamsFn_");l(this,"mpdUrlParamsFn_");l(this,"isPreloadFn_");l(this,"lastCalculatedBaseUris_");l(this,"parsedPrftNodes_");l(this,"contentProtection_");this.config_=null,this.playerInterface_=null,this.manifestUris_=[],this.manifest_=null,this.globalId_=1,this.patchLocationNodes_=[],this.manifestPatchContext_={mpdId:"",type:"",profiles:[],mediaPresentationDuration:null,availabilityTimeOffset:0,getBaseUris:null,publishTime:0},this.contextCache_=new Map,this.continuityCache_=new Map,this.parsedPeriodCache_=new Map,this.streamMap_=new Map,this.indexStreamMap_=new Map,this.periodDurations_=new Map,this.periodCombiner_=new fr,this.updatePeriod_=0,this.averageUpdateDuration_=new er(5),this.updateTimer_=new ae(()=>{if(this.mediaElement_&&!this.config_.continueLoadingWhenPaused&&(this.eventManager_.unlisten(this.mediaElement_,"timeupdate"),this.mediaElement_.paused)){this.eventManager_.listenOnce(this.mediaElement_,"timeupdate",()=>this.onUpdate_());return}this.onUpdate_()}),this.operationManager_=new fi,this.largestPeriodStartTime_=null,this.lastManifestUpdatePeriodIds_=[],this.minTotalAvailabilityTimeOffset_=1/0,this.lowLatencyMode_=!1,this.contentSteeringManager_=null,this.gapCount_=0,this.isLowLatency_=!1,this.eventManager_=new ue,this.mediaElement_=null,this.isTransitionFromDynamicToStatic_=!1,this.lastManifestQueryParams_="",this.mpdpatchUrlParamsFn_=null,this.mpdUrlParamsFn_=null,this.isPreloadFn_=()=>!1,this.lastCalculatedBaseUris_=[],this.parsedPrftNodes_=new Set,this.contentProtection_=new Ti}configure(e,t){v.assert(e.dash!=null,"DashManifestConfiguration should not be null!");let i=this.playerInterface_&&e.updatePeriod!=this.config_.updatePeriod&&e.updatePeriod>=0;this.config_=e,t&&(this.isPreloadFn_=t),i&&this.manifest_&&this.manifest_.presentationTimeline.isLive()&&this.updateNow_(),this.contentSteeringManager_&&this.contentSteeringManager_.configure(this.config_),this.periodCombiner_&&this.periodCombiner_.setUseStreamOnce(this.config_.dash.useStreamOnceInPeriodFlattening)}async start(e,t){v.assert(this.config_,"Must call configure() before start()!"),this.lowLatencyMode_=t.isLowLatencyMode(),this.manifestUris_=[e],this.playerInterface_=t;let i=await this.requestManifest_();if(this.playerInterface_&&this.setUpdateTimer_(i),!this.playerInterface_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);return v.assert(this.manifest_,"Manifest should be non-null!"),this.manifest_}stop(){for(let e of this.streamMap_.values())e.segmentIndex&&e.segmentIndex.release();return this.periodCombiner_&&this.periodCombiner_.release(),this.playerInterface_=null,this.config_=null,this.manifestUris_=[],this.manifest_=null,this.streamMap_.clear(),this.indexStreamMap_.clear(),this.contextCache_.clear(),this.continuityCache_.clear(),this.parsedPeriodCache_.clear(),this.manifestPatchContext_={mpdId:"",type:"",profiles:[],mediaPresentationDuration:null,availabilityTimeOffset:0,getBaseUris:null,publishTime:0},this.periodCombiner_=null,this.updateTimer_!=null&&(this.updateTimer_.stop(),this.updateTimer_=null),this.contentSteeringManager_&&this.contentSteeringManager_.destroy(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.parsedPrftNodes_.clear(),this.contentProtection_.release(),this.operationManager_.destroy()}async update(){try{await this.requestManifest_()}catch(e){if(!this.playerInterface_||!e)return;v.assert(e instanceof h,"Bad error type"),this.playerInterface_.onError(e)}}onExpirationUpdated(e,t){}onInitialVariantChosen(e){if(this.manifest_&&this.manifest_.presentationTimeline.isLive()){let t=e.video||e.audio;if(t&&t.segmentIndex){let i=this.manifest_.presentationTimeline.getSegmentAvailabilityEnd(),r=t.segmentIndex.find(i);if(r==null)return;let s=t.segmentIndex.get(r);if(!s)return;this.updatePeriod_=s.endTime-i,this.setUpdateTimer_(0)}}}banLocation(e){this.contentSteeringManager_&&this.contentSteeringManager_.banLocation(e)}setMediaElement(e){this.mediaElement_=e}async requestManifest_(){let e=K.RequestType.MANIFEST,t=K.AdvancedRequestType.MPD,i="MPD",r=this.getPatchLocationUris_(),s=this.manifestUris_;if(r.length)s=r.map(m=>fe.applyUrlParams(m,this.mpdpatchUrlParamsFn_)),i="Patch",t=K.AdvancedRequestType.MPD_PATCH;else{if(this.manifestUris_.length>1&&this.contentSteeringManager_){let m=this.contentSteeringManager_.getLocations("Location",!0);m.length&&(s=m)}this.mpdUrlParamsFn_&&(s=s.map(m=>fe.applyUrlParams(m,this.mpdUrlParamsFn_)))}let n=K.makeRequest(s,this.config_.retryParameters),a=Date.now(),o=await this.makeNetworkRequest_(n,e,{type:t});if(!this.playerInterface_)return 0;o.uri&&o.uri!=o.originalUri&&!this.manifestUris_.includes(o.uri)&&this.manifestUris_.unshift(o.uri);let c=new URL(o.uri);this.lastManifestQueryParams_=c.searchParams.toString(),await this.parseManifest(o.data,o.uri,i);let u=(Date.now()-a)/1e3;return this.averageUpdateDuration_.sample(1,u),this.parsedPrftNodes_.clear(),u}parseManifest(e,t,i){let r=I.parseXml(e,i);return this.processParsedMpd(r,t,i)}async processParsedMpd(e,t,i){if(!e)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_INVALID_XML,t);let r=this.config_.dash.manifestPreprocessorTXml,s=st.defaultManifestPreprocessorTXml;if(r!=s&&r(e),i==="Patch")return this.processPatchManifest_(e);let n=e;if(Re.hasLinkedPeriods(n)){let d=Re.processLinkedPeriods(n,t,this.config_.retryParameters,this.playerInterface_.networkingEngine);this.operationManager_.manage(d),n=await d.promise}if(!Re.hasXlinks(n))return this.processManifest_(n,t);let a=this.config_.dash.xlinkFailGracefully,o=Re.processXlinks(n,this.config_.retryParameters,a,t,this.playerInterface_.networkingEngine);this.operationManager_.manage(o);let c=await o.promise;return this.processManifest_(c,t)}async processManifest_(e,t){v.assert(this.config_,"Must call configure() before processManifest_()!"),this.contentSteeringManager_&&this.contentSteeringManager_.clearPreviousLocations(),this.checkMpdEssentialProperties_(e);let i=[t],r=[],s=new Map,n=I.findChildren(e,"Location");for(let z of n){let ge=z.attributes.serviceLocation,Y=I.getContents(z);if(!Y)continue;let X=fe.resolveUris(i,[Y])[0];ge&&(this.contentSteeringManager_?this.contentSteeringManager_.addLocation("Location",ge,X):s.set(ge,X)),r.push(X)}if(this.contentSteeringManager_){let z=this.contentSteeringManager_.getLocations("Location",!0);z.length>0&&(this.manifestUris_=z,i=z)}else r.length&&(this.manifestUris_=r,i=r);this.manifestPatchContext_.mpdId=e.attributes.id||"",this.manifestPatchContext_.publishTime=I.parseAttr(e,"publishTime",I.parseDate)||0,this.patchLocationNodes_=I.findChildren(e,"PatchLocation"),this.mpdpatchUrlParamsFn_=this.findRequestParamFn_(e,"mpdpatch")||null,this.mpdUrlParamsFn_=this.findRequestParamFn_(e,"mpd")||null;let a=Promise.resolve(),o=I.findChild(e,"ContentSteering");if(o&&this.playerInterface_){let z=o.attributes.defaultServiceLocation;if(this.contentSteeringManager_)this.contentSteeringManager_.setBaseUris(i),this.contentSteeringManager_.setDefaultPathwayId(z);else{this.contentSteeringManager_=new ns(this.playerInterface_),this.contentSteeringManager_.configure(this.config_),this.contentSteeringManager_.setManifestType(me.DASH),this.contentSteeringManager_.setBaseUris(i),this.contentSteeringManager_.setDefaultPathwayId(z);let ge=I.getContents(o);ge&&(ge=fe.applyUrlParams(ge,this.findRequestParamFn_(e,"steering")),I.parseAttr(o,"queryBeforeStart",I.parseBoolean,!1)?a=this.contentSteeringManager_.requestInfo(ge):this.contentSteeringManager_.requestInfo(ge))}for(let ge of s.keys()){let Y=s.get(ge);this.contentSteeringManager_.addLocation("Location",ge,Y)}}let c=I.findChildren(e,"BaseURL"),d=!1;if(this.contentSteeringManager_)for(let z of c){let ge=z.attributes.serviceLocation,Y=I.getContents(z);ge&&Y&&(this.contentSteeringManager_.addLocation("BaseURL",ge,Y),d=!0)}if(this.lastCalculatedBaseUris_.splice(0),!d||!this.contentSteeringManager_){let z=c.map(I.getContents);this.lastCalculatedBaseUris_.push(...fe.resolveUris(i,z))}let u=this.contentSteeringManager_,m=this.lastCalculatedBaseUris_,g=pt.makeBaseUriGetter_.call(pt,u,d,m);this.manifestPatchContext_.getBaseUris=g;let _=0;c&&c.length&&(_=I.parseAttr(c[0],"availabilityTimeOffset",I.parseFloat)||0),this.manifestPatchContext_.availabilityTimeOffset=_,this.updatePeriod_=I.parseAttr(e,"minimumUpdatePeriod",I.parseDuration,-1);let T=I.parseAttr(e,"availabilityStartTime",I.parseDate),b=I.parseAttr(e,"timeShiftBufferDepth",I.parseDuration),S=this.config_.dash.ignoreSuggestedPresentationDelay,E=null;S||(E=I.parseAttr(e,"suggestedPresentationDelay",I.parseDuration));let w=this.config_.dash.ignoreMaxSegmentDuration,A=null;w||(A=I.parseAttr(e,"maxSegmentDuration",I.parseDuration));let x=e.attributes.type||"static",M=x=="static"||x=="list";this.manifest_&&this.manifest_.presentationTimeline&&(this.isTransitionFromDynamicToStatic_=this.manifest_.presentationTimeline.isLive()&&M),this.manifestPatchContext_.type=x;let C;if(this.manifest_){C=this.manifest_.presentationTimeline;let z=C.getSegmentAvailabilityStart();for(let ge of this.streamMap_.values())ge.segmentIndex&&ge.segmentIndex.evict(z)}else{let z=this.config_.dash.ignoreMinBufferTime,ge=0;z||(ge=I.parseAttr(e,"minBufferTime",I.parseDuration)||0);let Y=0;E!=null?Y=Math.min(E,b||1/0):this.config_.defaultPresentationDelay>0?Y=this.config_.defaultPresentationDelay:Y=Math.min(ge*1.5,b||1/0),C=new xi(T,Y,this.config_.dash.autoCorrectDrift)}C.setStatic(M),C.isLive()&&!isNaN(this.config_.availabilityWindowOverride)&&(b=this.config_.availabilityWindowOverride),b==null&&(b=1/0),C.setSegmentAvailabilityDuration(b);let D=e.attributes.profiles||"";this.manifestPatchContext_.profiles=D.split(",");let V={dynamic:!M,presentationTimeline:C,period:null,periodInfo:null,adaptationSet:null,representation:null,bandwidth:0,indexRangeWarningGiven:!1,availabilityTimeOffset:_,mediaPresentationDuration:null,profiles:D.split(","),roles:null,urlParams:pt.defaultUrlParams_,name:""};await a;let ee=Re.parseEssentialProperties(e),oe=Re.parseSupplementalProperties(e),le=z=>pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(z.schemeIdUri),G=ee.find(le)||oe.find(le);if(G){let z=this.getURLParametersFunction_(G.element);z&&(V.urlParams=z)}let J=this.findRequestParamFn_(e,"segment");J&&(V.urlParams=J),this.gapCount_=0;let Z=this.parsePeriods_(V,g,e,!1),ce=Z.duration,W=Z.periods;if((M&&!this.isTransitionFromDynamicToStatic_||!Z.durationDerivedFromPeriods)&&C.setDuration(ce||1/0),this.isLowLatency_&&this.lowLatencyMode_&&C.setAvailabilityTimeOffset(this.minTotalAvailabilityTimeOffset_),C.notifyMaxSegmentDuration(A||1),Ve&&!this.isTransitionFromDynamicToStatic_&&C.assertIsValid(),this.isLowLatency_&&this.lowLatencyMode_){let z=E!=null?E:this.config_.defaultPresentationDelay;C.setDelay(z)}if(this.manifest_)this.manifest_.periodCount=W.length,this.manifest_.gapCount=this.gapCount_,await this.postPeriodProcessing_(W,!1);else{if(await this.periodCombiner_.combinePeriods(W,V.dynamic),this.manifest_={presentationTimeline:C,variants:this.periodCombiner_.getVariants(),textStreams:this.periodCombiner_.getTextStreams(),imageStreams:this.periodCombiner_.getImageStreams(),chapterStreams:[],offlineSessionIds:[],sequenceMode:this.config_.dash.sequenceMode,ignoreManifestTimestampsInSegmentsMode:!1,type:me.DASH,serviceDescription:this.parseServiceDescription_(e),nextUrl:this.parseMpdChaining_(e),periodCount:W.length,gapCount:this.gapCount_,isLowLatency:this.isLowLatency_,startTime:null},C.usingPresentationStartTime()){let ge=I.findChildren(e,"UTCTiming"),Y=await this.parseUtcTiming_(g,ge);if(!this.playerInterface_)return;C.setClockOffset(Y)}C.lockStartTime(),this.periodCombiner_&&!this.manifest_.presentationTimeline.isLive()&&this.periodCombiner_.release();let z=I.findChild(e,"ProgramInformation");if(z){let ge=L.EventName.ProgramInformation,Y=new Map().set("detail",z),X=new L(ge,Y);this.playerInterface_.onEvent(X)}}this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_),this.cleanStreamMap_(),this.cleanContinuityCache_(W)}async postPeriodProcessing_(e,t){await this.periodCombiner_.combinePeriods(e,!0,t),this.manifest_.variants=this.periodCombiner_.getVariants();let i=this.periodCombiner_.getTextStreams();i.length>0&&(this.manifest_.textStreams=i),this.manifest_.imageStreams=this.periodCombiner_.getImageStreams(),this.playerInterface_.filter(this.manifest_)}async processPatchManifest_(e){let t=e.attributes.mpdId,i=I.parseAttr(e,"originalPublishTime",I.parseDate);if(!t||t!==this.manifestPatchContext_.mpdId||i!==this.manifestPatchContext_.publishTime)throw this.patchLocationNodes_=[],new h(h.Severity.RECOVERABLE,h.Category.MANIFEST,h.Code.DASH_INVALID_PATCH);let r=[],s=[],n=new Set;for(let a of I.getChildNodes(e)){let o=!0,c=I.parseXpath(a.attributes.sel||""),d=c[c.length-1],u=I.getContents(a)||"";if(d.name==="MPD")if(d.attribute==="mediaPresentationDuration"){let m=I.getContents(a)||"";this.parsePatchMediaPresentationDurationChange_(m)}else d.attribute==="type"?this.parsePatchMpdTypeChange_(u):d.attribute==="publishTime"?this.manifestPatchContext_.publishTime=I.parseDate(u)||0:d.attribute===null&&a.tagName==="add"?s.push(a):o=!1;else if(d.name==="PatchLocation")this.updatePatchLocationNodes_(a);else if(d.name==="Period")a.tagName==="add"?s.push(a):a.tagName==="remove"&&d.id&&this.removePatchPeriod_(d.id);else if(d.name==="SegmentTemplate"){let m=this.modifySegmentTemplate_(a);for(let f of m)n.add(f)}else if(d.name==="SegmentTimeline"||d.name==="S"){let m=this.modifyTimepoints_(a);for(let f of m)n.add(f)}else o=!1;o||p.warning("Unhandled "+a.tagName+" operation",a.attributes.sel)}for(let a of n)this.parsePatchSegment_(a);for(let a of s)r.push(...this.parsePatchPeriod_(a));if(r.length&&(this.manifest_.periodCount+=r.length,this.manifest_.gapCount=this.gapCount_,await this.postPeriodProcessing_(r,!0)),this.manifestPatchContext_.type=="static"){let a=this.manifestPatchContext_.mediaPresentationDuration;this.manifest_.presentationTimeline.setDuration(a||1/0)}}parsePatchMpdTypeChange_(e){this.manifest_.presentationTimeline.setStatic(e=="static"),this.manifestPatchContext_.type=e;for(let t of this.contextCache_.values())t.dynamic=e=="dynamic";e=="static"&&(this.updatePeriod_=-1)}parsePatchMediaPresentationDurationChange_(e){let t=I.parseDuration(e);if(t!=null){this.manifestPatchContext_.mediaPresentationDuration=t;for(let i of this.contextCache_.values())i.mediaPresentationDuration=t}}parsePatchPeriod_(e){v.assert(this.manifestPatchContext_.getBaseUris,"Must provide getBaseUris on manifestPatchContext_");let t={dynamic:this.manifestPatchContext_.type=="dynamic",presentationTimeline:this.manifest_.presentationTimeline,period:null,periodInfo:null,adaptationSet:null,representation:null,bandwidth:0,indexRangeWarningGiven:!1,availabilityTimeOffset:this.manifestPatchContext_.availabilityTimeOffset,profiles:this.manifestPatchContext_.profiles,mediaPresentationDuration:this.manifestPatchContext_.mediaPresentationDuration,roles:null,urlParams:pt.defaultUrlParams_,name:""};return this.parsePeriods_(t,this.manifestPatchContext_.getBaseUris,e,!0).periods}removePatchPeriod_(e){this.manifest_.periodCount--;for(let i of this.contextCache_.keys())if(i.startsWith(e)){let r=this.contextCache_.get(i);pr.removeTimepoints(r),this.parsePatchSegment_(i),this.contextCache_.delete(i)}let t=this.lastManifestUpdatePeriodIds_.filter(i=>i!==e);this.lastManifestUpdatePeriodIds_=t,this.parsedPeriodCache_.delete(e)}getContextIdsFromPath_(e){let t="",i="",r=-1,s="";for(let a of e)a.name==="Period"?t=a.id:a.name==="AdaptationSet"?(i=a.id,a.position!==null&&(r=a.position)):a.name==="Representation"&&(s=a.id);let n=[];if(s)n.push(t+","+s);else if(i)for(let a of this.contextCache_.values())a.period.id===t&&a.adaptationSet.id===i&&a.representation.id&&n.push(t+","+a.representation.id);else if(r>-1)for(let a of this.contextCache_.values())a.period.id===t&&a.adaptationSet.position===r&&a.representation.id&&n.push(t+","+a.representation.id);return n}modifySegmentTemplate_(e){let t=I.parseXpath(e.attributes.sel||""),i=t[t.length-1];if(!i.attribute)return[];let r=this.getContextIdsFromPath_(t),s=I.getContents(e)||"";for(let n of r){let a=this.contextCache_.get(n);v.assert(a&&a.representation.segmentTemplate,"cannot modify segment template"),I.modifyNodeAttribute(a.representation.segmentTemplate,e.tagName,i.attribute,s)}return r}modifyTimepoints_(e){let t=I.parseXpath(e.attributes.sel||""),i=this.getContextIdsFromPath_(t);for(let r of i){let s=this.contextCache_.get(r);pr.modifyTimepoints(s,e)}return i}parsePatchSegment_(e){let t=this.contextCache_.get(e),i=this.streamMap_.get(e);v.assert(i,"stream should exist"),i.segmentIndex&&i.segmentIndex.evict(this.manifest_.presentationTimeline.getSegmentAvailabilityStart());try{let r=(n,a,o,c)=>this.requestSegment_(n,a,o,c),s=pr.createStreamInfo(t,r,this.streamMap_,!0,this.config_.dash.initialSegmentLimit,this.periodDurations_,t.representation.aesKey,null,!0,this.continuityCache_);i.createSegmentIndex=async()=>{i.segmentIndex||(i.segmentIndex=await s.generateSegmentIndex())}}catch(r){let s=R.ContentType,n=t.representation.contentType,a=n==s.TEXT||n==s.APPLICATION,o=n==s.IMAGE;if(!(a||o)||r.code!=h.Code.DASH_NO_SEGMENT_INFO)throw r}}parseServiceDescription_(e){let t=I.findChild(e,"ServiceDescription");if(!t)return null;let i=I.findChild(t,"Latency"),r=I.findChild(t,"PlaybackRate");if(!i&&!r)return null;let s={};return i&&("target"in i.attributes&&(s.targetLatency=parseInt(i.attributes.target,10)/1e3),"max"in i.attributes&&(s.maxLatency=parseInt(i.attributes.max,10)/1e3),"min"in i.attributes&&(s.minLatency=parseInt(i.attributes.min,10)/1e3)),r&&("max"in r.attributes&&(s.maxPlaybackRate=parseFloat(r.attributes.max)),"min"in r.attributes&&(s.minPlaybackRate=parseFloat(r.attributes.min))),s}checkMpdEssentialProperties_(e){let t=pt.SUPPORTED_ESSENTIAL_PROPERTIES_,i=Re.parseEssentialProperties(e);if(!i.length)return;let r=new Map,s=0;for(let n of i){let a=n.id!=null?"id:"+n.id:"no-id:"+s++;r.getOrInsert(a,[]).push(n)}for(let n of r.values())if(!n.some(o=>t.has(o.schemeIdUri)))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_UNSUPPORTED_ESSENTIAL_PROPERTY,n.map(o=>o.schemeIdUri))}parseMpdChaining_(e){let t=Re.parseSupplementalProperties(e),i=Re.getDescriptor(t,"urn:mpeg:dash:chaining:2016");return!i||!i.value?null:fe.applyUrlParams(i.value,this.findRequestParamFn_(e,"chaining"))}parsePeriods_(e,t,i,r){let s=e.mediaPresentationDuration;s||(s=I.parseAttr(i,"mediaPresentationDuration",I.parseDuration),this.manifestPatchContext_.mediaPresentationDuration=s);let n=0;this.manifest_&&this.manifest_.presentationTimeline&&this.isTransitionFromDynamicToStatic_&&(n=this.manifest_.presentationTimeline.getSeekRangeStart());let a=[],o=n,c=I.findChildren(i,"Period"),d=e.dynamic;d||this.parsedPeriodCache_.clear();let u=0,m=d&&!r?new Set(this.lastManifestUpdatePeriodIds_.slice(1,-1)):null;for(let f=0;f<c.length;f++){let g=c[f],_=c[f+1],T=I.parseAttr(g,"start",I.parseDuration,null),b=g.attributes.id,S=I.parseAttr(g,"duration",I.parseDuration);f==0&&this.isTransitionFromDynamicToStatic_&&(u=n-(T||0)),T==null?T=o:this.isTransitionFromDynamicToStatic_&&(T=T+u);let E=null;if(_){let C=I.parseAttr(_,"start",I.parseDuration);C!=null&&(E=C-T+n)}else s!=null&&(E=s-T+n);let w=R.GAP_OVERLAP_TOLERANCE_SECONDS;if(E&&S&&Math.abs(E-S)>w&&(p.warning("There is a gap/overlap between Periods",g),E>S&&this.gapCount_++),E==null&&(E=S),this.largestPeriodStartTime_!==null&&b!=null&&T!==null&&T<this.largestPeriodStartTime_&&!this.lastManifestUpdatePeriodIds_.includes(b)&&f+1!=c.length){p.debug(`Skipping Period with ID ${b} as its start time is smaller than the largest period start time that has been seen, and ID is unseen before`);continue}T!==null&&(this.largestPeriodStartTime_===null||T>this.largestPeriodStartTime_)&&(this.largestPeriodStartTime_=T);let A={start:T,duration:E,node:g,isLastPeriod:E==null||!_},x=null,M=f>0&&f<c.length-1;if(d&&m&&M&&!r&&(b!=null||(b=this.periodIdFallback_(T)),m.has(b))){let C=this.parsedPeriodCache_.get(b);C&&(x=C)}if(x||(x=this.parsePeriod_(e,t,A),d&&x.id&&this.parsedPeriodCache_.set(x.id,x)),a.push(x),x.id&&E&&this.periodDurations_.set(x.id,E),E==null){_&&p.warning("Skipping Period",f+1,"and any subsequent Periods:","Period",f+1,"does not have a valid start time.",_),o=null;break}o=T+E}if(d&&!r&&this.prunePeriodCache_(a),r)for(let f of a){let g=f.id;this.lastManifestUpdatePeriodIds_.includes(g)||this.lastManifestUpdatePeriodIds_.push(g)}else this.lastManifestUpdatePeriodIds_=a.map(f=>f.id);if(s!=null){if(o!=null){let f=R.GAP_OVERLAP_TOLERANCE_SECONDS,g=o-n-s;Math.abs(g)>f&&p.warning("@mediaPresentationDuration does not match the total duration ","of all Periods.")}return{periods:a,duration:s+n,durationDerivedFromPeriods:!1}}else return{periods:a,duration:o,durationDerivedFromPeriods:!0}}prunePeriodCache_(e){let t=new Set(e.map(i=>i.id));for(let i of Array.from(this.parsedPeriodCache_.keys()))t.has(i)||this.parsedPeriodCache_.delete(i)}periodIdFallback_(e){return"__shaka_period_"+e}cleanStreamMap_(){let t=Array.from(this.indexStreamMap_.keys()).filter(i=>!this.lastManifestUpdatePeriodIds_.includes(i));for(let i of t){let r=!0;for(let s of this.indexStreamMap_.get(i)){let n=this.streamMap_.get(s);if(n){if(n.segmentIndex&&!n.segmentIndex.isEmpty()){r=!1;continue}this.periodCombiner_&&this.periodCombiner_.deleteStream(n,i),this.streamMap_.delete(s)}}r&&this.indexStreamMap_.delete(i)}}cleanContinuityCache_(e){let t=new Set(e.map(i=>i.id));for(let i of this.continuityCache_.keys())t.has(i)||this.continuityCache_.delete(i)}parsePeriod_(e,t,i){let r=R.ContentType;v.assert(i.node,"periodInfo.node should exist"),e.period=this.createFrame_(i.node,null,t),e.periodInfo=i,e.period.availabilityTimeOffset=e.availabilityTimeOffset,e.period.id||(p.info("No Period ID given for Period with start time "+i.start+", Assigning a default"),e.period.id=this.periodIdFallback_(i.start));let s=I.findChildren(i.node,"EventStream"),n=e.presentationTimeline.getSegmentAvailabilityStart();for(let b of s)this.parseEventStream_(i.start,i.duration,b,n);let a=Re.parseSupplementalProperties(i.node);for(let b of a)if(pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(b.schemeIdUri)){let S=this.getURLParametersFunction_(b.element);S&&(e.urlParams=S)}let o=this.findRequestParamFn_(i.node,"segment");o&&(e.urlParams=o);let c=I.findChildren(i.node,"AdaptationSet").map((b,S)=>this.parseAdaptationSet_(e,S,b)).filter(it.isNotNull);if(e.dynamic){let b=new Set,S=0;for(let E=0;E<c.length;E++){let w=c[E].representationIds;for(let A=0;A<w.length;A++)b.add(w[A]),S++}if(S!=b.size)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_DUPLICATE_REPRESENTATION_ID)}let d=new Map;for(let b of c)for(let[S,E]of b.dependencyStreamMap)d.set(S,E);if(d.size){let b=new Map;for(let S=0;S<c.length;S++){let E=c[S].streams;for(let w=0;w<E.length;w++)d.has(E[w].originalId)&&(b.has(S)||b.set(S,[]),b.get(S).push(E[w].originalId))}if(b.size){let S=I.findChildren(i.node,"AdaptationSet"),E=e.name;e.name="dependencyStream",b.forEach((w,A)=>{let x=S[A];if(!x)return;let M=this.parseAdaptationSet_(e,A,x);if(!M)return;let C=[];for(let k=0;k<w.length;k++){let D=w[k],V=M.streams.find(ee=>ee.originalId==D);if(V){let ee=d.get(V.originalId||"");V.dependencyStream=ee,V.originalId+=ee.originalId,V.baseOriginalId=ee.baseOriginalId,C.push(V)}}C.length&&c[A].streams.push(...C)}),e.name=E}}let[u,m]=ye.partition(c,b=>!!b.trickModeFor);for(let b of u)for(let S of b.streams)S.isIframe=!0;if(!this.config_.disableIFrames)for(let b of u){let S=b.trickModeFor.split(" ");for(let E of m)if(S.includes(E.id))for(let w of E.streams)re.setBetterIFrameStream(w,b.streams)}let f=this.getStreamsFromSets_(this.config_.disableAudio,m,r.AUDIO),g=this.getStreamsFromSets_(this.config_.disableVideo,m,r.VIDEO),_=this.getStreamsFromSets_(this.config_.disableText,m,r.TEXT),T=this.getStreamsFromSets_(this.config_.disableThumbnails,m,r.IMAGE);if(g.length===0&&f.length===0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_EMPTY_PERIOD);return{id:e.period.id,audioStreams:f,videoStreams:g,textStreams:_,imageStreams:T}}getStreamsFromSets_(e,t,i){return e||!t.length?[]:t.reduce((r,s)=>(s.contentType!=i||r.push(...s.streams),r),[])}parseAdaptationSet_(e,t,i){let r=R.ContentType;e.adaptationSet=this.createFrame_(i,e.period,null),e.adaptationSet.position=t;let s=!1,n=I.findChildren(i,"Role"),a=n.map(Y=>Y.attributes.value).filter(it.isNotNull),o,c=e.adaptationSet.contentType==r.TEXT;c&&(o=R.TextStreamKind.SUBTITLE);for(let Y of n){let X=Y.attributes.schemeIdUri;if(X==null||X=="urn:mpeg:dash:role:2011"){let N=Y.attributes.value;switch(N){case"main":s=!0;break;case"caption":case"subtitle":o=N;break}}}let d,u,m="urn:mpeg:mpegB:cicp",f=`${m}:TransferCharacteristics`,g=`${m}:ColourPrimaries`,_=Y=>{switch(Y){case 1:case 6:case 13:case 14:case 15:return"SDR";case 16:return"PQ";case 18:return"HLG"}},T=Y=>{switch(Y){case 1:case 5:case 6:case 7:return"srgb";case 9:return"rec2020";case 11:case 12:return"p3"}},b=Y=>{let X=Y.attributes["dvb:fontFamily"],N=Y.attributes["dvb:url"];if(X&&N){let $=fe.resolveUris(e.adaptationSet.getBaseUris(),[N],e.urlParams());this.playerInterface_.addFont(X,$[0])}},S=Re.parseEssentialProperties(i),E=Re.parseSupplementalProperties(i),w=null,A=!1,x=null,M=!1;for(let Y of S){let X=Y.schemeIdUri;if(!pt.SUPPORTED_ESSENTIAL_PROPERTIES_.has(X)){M=!0;continue}X=="http://dashif.org/guidelines/trickmode"?w=Y.value:X==f?d=_(parseInt(Y.value,10)):X==g?u=T(parseInt(Y.value,10)):X=="urn:mpeg:dash:ssr:2023"?this.config_.dash.enableFastSwitching?A=!0:M=!0:X=="urn:dvb:dash:fontdownload:2014"?b(Y.element):pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(X)&&(x=this.getURLParametersFunction_(Y.element),x||(M=!0))}if(M)return null;let C=null;for(let Y of E){let X=Y.schemeIdUri;X=="http://dashif.org/guidelines/last-segment-number"?C=parseInt(Y.value,10)-1:X==f?d=_(parseInt(Y.value,10)):X==g?u=T(parseInt(Y.value,10)):X=="urn:dvb:dash:fontdownload:2014"?b(Y.element):pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(X)&&(x=this.getURLParametersFunction_(Y.element))}let k=this.findRequestParamFn_(i,"segment");k&&(x=k),x&&(e.urlParams=x);let D=I.findChildren(i,"Accessibility"),V=new Map,ee;for(let Y of D){let X=Y.attributes.schemeIdUri,N=Y.attributes.value;X=="urn:scte:dash:cc:cea-608:2015"&&!this.config_.disableText?R.parseCEA608Captions(N,V):X=="urn:scte:dash:cc:cea-708:2015"&&!this.config_.disableText?R.parseCEA708Captions(N,V):X=="urn:mpeg:dash:role:2011"?N!=null&&(a.push(N),N=="captions"&&(o=R.TextStreamKind.CLOSED_CAPTION)):X=="urn:tva:metadata:cs:AudioPurposeCS:2007"&&(N=="1"?ee=me.AccessibilityPurpose.VISUALLY_IMPAIRED:N=="2"?ee=me.AccessibilityPurpose.HARD_OF_HEARING:N=="9"&&(ee=me.AccessibilityPurpose.SPOKEN_SUBTITLES))}let oe=I.findChildren(i,"ContentProtection"),le=this.contentProtection_.parseFromAdaptationSet(oe,this.config_.ignoreDrmInfo,this.config_.dash.keySystemsByURI);e.adaptationSet.encrypted=oe.length>0;let G=Se.normalize(e.adaptationSet.language||"und"),J=e.adaptationSet.label,Z=new Map,ce=I.findChildren(i,"Representation");if(!this.config_.ignoreSupplementalCodecs){let Y=[];for(let X of ce){let N=I.getAttributeNS(X,pt.SCTE214_,"supplementalCodecs");if(N){let $=Fe.cloneObject(X);$.attributes.codecs=N.split(" ").join(","),$.attributes.id&&($.attributes.supplementalId=$.attributes.id+"_supplementalCodecs"),Y.push($)}}ce.push(...Y)}let W=ce.map(Y=>{let X=this.parseRepresentation_(e,le,o,G,J,s,a,V,Y,ee,C);if(X){X.hdr=X.hdr||d,X.colorGamut=X.colorGamut||u,X.fastSwitching=A;let N=Y.attributes.dependencyId;if(N)return X.baseOriginalId=N,Z.set(N,X),null}return X}).filter(Y=>!!Y);if(W.length==0&&Z.size==0){let Y=e.adaptationSet.contentType==r.IMAGE;if(this.config_.dash.ignoreEmptyAdaptationSet||c||Y)return null;throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.DASH_EMPTY_ADAPTATION_SET)}if(!e.adaptationSet.contentType||e.adaptationSet.contentType==r.APPLICATION){let Y=W[0].mimeType,X=W[0].codecs;e.adaptationSet.contentType=pt.guessContentType_(Y,X);for(let N of W)N.type=e.adaptationSet.contentType}let z=e.adaptationSet.id||"__fake__"+this.globalId_++;for(let Y of W){for(let X of le.drmInfos)X.keyIds=X.keyIds&&Y.keyIds?new Set([...X.keyIds,...Y.keyIds]):X.keyIds||Y.keyIds;this.config_.enableAudioGroups&&(Y.groupId=z)}let ge=ce.map(Y=>Y.attributes.supplementalId||Y.attributes.id).filter(it.isNotNull);return{id:z,contentType:e.adaptationSet.contentType,language:G,main:s,streams:W,drmInfos:le.drmInfos,trickModeFor:w,representationIds:ge,dependencyStreamMap:Z}}getURLParametersFunction_(e){let t=I.findChildNS(e,pt.UP_NAMESPACE_2014_,"UrlQueryInfo")||I.findChildNS(e,pt.UP_NAMESPACE_2016_,"ExtUrlQueryInfo");return t?this.buildUrlQueryFn_(t):null}findRequestParamFn_(e,t){let i;for(let r of I.findChildren(e,"RequestParam")){let s=(r.attributes.includeInRequests||"segment").split(/\s+/);if(s.includes(t)||s.includes("*")){let n=this.buildUrlQueryFn_(r);n&&(i=n)}}return i}buildUrlQueryFn_(e){let t=I.parseAttr(e,"useMPDUrlQuery",I.parseBoolean,!1),i=q.htmlUnescape(e.attributes.queryString||""),r=q.htmlUnescape(e.attributes.queryTemplate||"");return!r||!t&&!i?null:()=>{let s=[];t&&this.lastManifestQueryParams_&&s.push(this.lastManifestQueryParams_),i&&s.push(i);let n=s.join("&");if(r=="$querypart$")return n;let a;return r.split("&").map(c=>{if(c=="$querypart$")return n;let d=/\$query:(.*?)\$/.exec(c);if(d){let u=d[1];a||(a=new URLSearchParams(n));let m=a.get(u);return m?`${u}=${m}`:""}return c.replace(/\$\$|\$[^$]+\$/g,u=>u==="$$"?"$":"")}).filter(Boolean).join("&")}}parseRepresentation_(e,t,i,r,s,n,a,o,c,d,u){let m=R.ContentType,f=e.period.id;e.representation=this.createFrame_(c,e.adaptationSet,null);let g=e.representation.id;if(this.minTotalAvailabilityTimeOffset_=Math.min(this.minTotalAvailabilityTimeOffset_,e.representation.availabilityTimeOffset),this.isLowLatency_=this.minTotalAvailabilityTimeOffset_>0,!this.verifyRepresentation_(e.representation))return p.warning("Skipping Representation",e.representation),null;let _=e.periodInfo.start;e.bandwidth=I.parseAttr(c,"bandwidth",I.parsePositiveInt)||0,e.roles=a;let T=Re.parseEssentialProperties(c),b=Re.parseSupplementalProperties(c),S=I.findChildren(c,"ContentProtection"),E=N=>pt.URL_PARAM_DESCRIPTOR_SCHEMES_.has(N.schemeIdUri),w=null,A=T.find(E)||b.find(E);A&&(w=this.getURLParametersFunction_(A.element));let x=this.findRequestParamFn_(c,"segment");x&&(w=x),w&&(e.urlParams=w);let M,C=e.representation.contentType,k=C==m.TEXT||C==m.APPLICATION,D=C==m.IMAGE;S.length&&(e.adaptationSet.encrypted=!0);try{let N;if(t.aes128Info){let Ie=e.representation.getBaseUris,tt=e.urlParams,gt=fe.resolveUris(Ie(),[t.aes128Info.keyUri],tt()),St=K.RequestType.KEY,yt=K.makeRequest(gt,this.config_.retryParameters);N={bitsKey:128,blockCipherMode:"CBC",iv:t.aes128Info.iv,firstMediaSequenceNumber:0},N.fetchKey=async()=>{let Ct=await this.makeNetworkRequest_(yt,St);if(!Ct.data||Ct.data.byteLength!=16)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_KEY_LENGTH);let bi={name:"AES-CBC"};N.cryptoKey=await window.crypto.subtle.importKey("raw",Ct.data,bi,!0,["decrypt"]),N.fetchKey=void 0}}e.representation.aesKey=N;let $=(Ie,tt,gt,St)=>this.requestSegment_(Ie,tt,gt,St);if(e.representation.segmentBase)M=Hi.createStreamInfo(e,$,N);else if(e.representation.segmentList)M=Ln.createStreamInfo(e,this.streamMap_,N);else if(e.representation.segmentTemplate){let Ie=!!this.manifest_;M=pr.createStreamInfo(e,$,this.streamMap_,Ie,this.config_.dash.initialSegmentLimit,this.periodDurations_,N,u,!1,this.continuityCache_)}else{v.assert(k,"Must have Segment* with non-text streams.");let Ie=e.periodInfo.duration||0,tt=e.representation.getBaseUris,gt=e.representation.mimeType,St=e.representation.codecs;M={endTime:-1,timeline:-1,generateSegmentIndex:()=>{let yt=Ze.forSingleSegment(_,Ie,tt());return yt.forEachTopLevelReference(Ct=>{Ct.mimeType=gt,Ct.codecs=St}),Promise.resolve(yt)},timescale:1}}}catch(N){if((k||D)&&N.code==h.Code.DASH_NO_SEGMENT_INFO)return null;throw N}let V=this.contentProtection_.parseFromRepresentation(S,t,this.config_.ignoreDrmInfo,this.config_.dash.keySystemsByURI),ee=new Set(V?[V]:[]),oe=Re.hasDescriptor(b,"tag:dolby.com,2018:dash:EC3_ExtensionType:2018","JOC"),le=Re.hasDescriptor(b,"tag:dolby.com,2016:dash:virtualized_content:2016","1"),G=oe||le,J=!1;k&&(J=a.includes("forced_subtitle")||a.includes("forced-subtitle"));let Z;if(D){let N=["http://dashif.org/thumbnail_tile","http://dashif.org/guidelines/thumbnail_tile"],$=T.find(Ie=>N.includes(Ie.schemeIdUri));if($&&(Z=$.value),!Z)return null}let ce,W=e.profiles,z=e.representation.codecs;W.includes("http://dashif.org/guidelines/dash-if-uhd#hevc-hdr-pq10")&&(z.includes("hvc1.2.4.L153.B0")||z.includes("hev1.2.4.L153.B0"))&&(ce="PQ");let Y=g?f+","+g:"";if(Y&&e.name&&(Y+=e.name),this.patchLocationNodes_.length&&Y&&this.contextCache_.set(Y,this.cloneContext_(e)),e.representation.producerReferenceTime&&this.parseProducerReferenceTime_(e.representation.producerReferenceTime,M,e.presentationTimeline),M.endTime!=-1&&f!=null&&g!=null){let N=this.continuityCache_.get(f);if(N)N.endTime=M.endTime,N.reps.includes(g)||N.reps.push(g),this.continuityCache_.set(f,N);else{let $={endTime:M.endTime,timeline:M.timeline,reps:[g]};this.continuityCache_.set(f,$)}}let X;return Y&&this.streamMap_.has(Y)?X=this.streamMap_.get(Y):X={id:this.globalId_++,originalId:g,groupId:null,createSegmentIndex:()=>Promise.resolve(),closeSegmentIndex:()=>{X.segmentIndex&&(X.segmentIndex.release(),X.segmentIndex=null)},segmentIndex:null,mimeType:e.representation.mimeType,codecs:z,supplementalCodecs:e.representation.supplementalCodecs,frameRate:e.representation.frameRate,pixelAspectRatio:e.representation.pixelAspectRatio,bandwidth:e.bandwidth,width:e.representation.width,height:e.representation.height,kind:i,encrypted:t.drmInfos.length>0,drmInfos:t.drmInfos,keyIds:ee,language:r,originalLanguage:e.adaptationSet.language,label:s,type:e.adaptationSet.contentType,primary:n,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:e.representation.emsgSchemeIdUris,roles:a,forced:J,channelsCount:e.representation.numChannels,audioSamplingRate:e.representation.audioSamplingRate,spatialAudio:G,closedCaptions:o,hdr:ce,colorGamut:void 0,videoLayout:void 0,tilesLayout:Z,accessibilityPurpose:d,external:!1,fastSwitching:!1,fullMimeTypes:new Set([O.getFullType(e.representation.mimeType,e.representation.codecs)]),isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1},X.createSegmentIndex=async()=>{X.segmentIndex||(X.segmentIndex=await M.generateSegmentIndex())},Y&&e.dynamic&&!this.streamMap_.has(Y)&&(this.streamMap_.set(Y,X),this.indexStreamMap_.getOrInsertComputed(f||"",()=>[]).push(Y)),X}parseProducerReferenceTime_(e,t,i){if(this.parsedPrftNodes_.has(e))return;this.parsedPrftNodes_.add(e);let r=I.parseAttr(e,"presentationTime",I.parseNonNegativeInt)||0,s=I.findChild(e,"UTCTiming"),n;if(!s||!s.attributes.schemeIdUri||pt.isNtpScheme_(s.attributes.schemeIdUri)){let d=I.parseAttr(e,"wallClockTime",I.parseNonNegativeInt)||0;n=Wr.convertNtp(d)}else n=(I.parseAttr(e,"wallClockTime",I.parseDate)||0)*1e3;let o=new Date(n-r/t.timescale*1e3),c=o.getTime()/1e3;if(!isNaN(c)){i.isStartTimeLocked()||i.setInitialProgramDateTime(c);let d={wallClockTime:n,programStartDate:o},u=L.EventName.Prft,m=new Map().set("detail",d),f=new L(u,m);this.playerInterface_.onEvent(f)}}cloneContext_(e){let t=r=>{if(!r)return null;let s=Fe.shallowCloneObject(r);return s.segmentBase=null,s.segmentList=null,s.segmentTemplate=I.cloneNode(s.segmentTemplate),s.producerReferenceTime=null,s},i=Fe.shallowCloneObject(e);return i.period=t(i.period),i.adaptationSet=t(i.adaptationSet),i.representation=t(i.representation),i.periodInfo&&(i.periodInfo=Fe.shallowCloneObject(i.periodInfo),i.periodInfo.node=null),i}async onUpdate_(){v.assert(this.updatePeriod_>=0,"There should be an update period"),p.info("Updating manifest...");let e=0;try{e=await this.requestManifest_()}catch(t){if(v.assert(t instanceof h,"Should only receive a Shaka error"),this.playerInterface_){if(this.config_.raiseFatalErrorOnManifestUpdateRequestFailure){this.playerInterface_.onError(t);return}t.severity=h.Severity.RECOVERABLE,this.playerInterface_.onError(t)}}this.playerInterface_&&(this.playerInterface_.onManifestUpdated(),this.setUpdateTimer_(e))}updateNow_(){this.updateTimer_.tickNow()}setUpdateTimer_(e){if(this.updatePeriod_<0)return;let t=this.updatePeriod_;this.config_.updatePeriod>=0&&(t=this.config_.updatePeriod);let i=Math.max(t-e,this.averageUpdateDuration_.getEstimate());this.updateTimer_.tickAfter(i)}createFrame_(e,t,i){v.assert(t||i,"Must provide either parent or getBaseUris"),t=t||{contentType:"",mimeType:"",codecs:"",supplementalCodecs:"",emsgSchemeIdUris:[],frameRate:void 0,pixelAspectRatio:void 0,numChannels:null,audioSamplingRate:null,availabilityTimeOffset:0,segmentSequenceCadence:1,encrypted:!1},i=i||t.getBaseUris;let r=I.parseNonNegativeInt,s=I.evalDivision,n=e.attributes.id,a=e.attributes.supplementalId,o=I.findChildren(e,"BaseURL"),c,d=!1;if(this.contentSteeringManager_)for(let W of o){let z=W.attributes.serviceLocation,ge=I.getContents(W);z&&ge&&(this.contentSteeringManager_.addLocation(n,z,ge),d=!0)}(!d||!this.contentSteeringManager_)&&(c=o.map(I.getContents));let u=this.contentSteeringManager_,m=()=>o.length?u&&d?u.getLocations(n):c||[]:[],f=e.attributes.contentType||t.contentType,g=e.attributes.mimeType||t.mimeType,_=[e.attributes.codecs||t.codecs],T=_t.codecsFiltering(_).join(","),b=[I.getAttributeNS(e,pt.SCTE214_,"supplementalCodecs")||t.supplementalCodecs],S=_t.codecsFiltering(b).join(","),E=I.parseAttr(e,"frameRate",s)||t.frameRate,w=e.attributes.sar||t.pixelAspectRatio,A=this.emsgSchemeIdUris_(I.findChildren(e,"InbandEventStream"),t.emsgSchemeIdUris),x=I.findChildren(e,"AudioChannelConfiguration"),M=this.parseAudioChannels_(x)||t.numChannels,C=I.parseAttr(e,"audioSamplingRate",r)||t.audioSamplingRate;f||(f=pt.guessContentType_(g,T));let k=I.findChild(e,"SegmentBase"),D=I.findChild(e,"SegmentTemplate"),V=k&&I.parseAttr(k,"availabilityTimeOffset",I.parseFloat)||0,ee=D&&I.parseAttr(D,"availabilityTimeOffset",I.parseFloat)||0,oe=o&&o.length&&I.parseAttr(o[0],"availabilityTimeOffset",I.parseFloat)||0,le=t.availabilityTimeOffset+oe+V+ee,G=null,J=I.findChild(e,"SegmentSequenceProperties");if(J){let W=I.parseAttr(J,"cadence",I.parsePositiveInt);W&&(G=W)}let Z=e.attributes.label,ce=I.findChildren(e,"Label");if(ce&&ce.length){let W=ce[0];I.getTextContents(W)&&(Z=I.getTextContents(W))}return{getBaseUris:()=>fe.resolveUris(i(),m()),segmentBase:k||t.segmentBase,segmentList:I.findChild(e,"SegmentList")||t.segmentList,segmentTemplate:D||t.segmentTemplate,producerReferenceTime:I.findChild(e,"ProducerReferenceTime")||t.producerReferenceTime,width:I.parseAttr(e,"width",r)||t.width,height:I.parseAttr(e,"height",r)||t.height,contentType:f,mimeType:g,codecs:T,supplementalCodecs:S.split(" ").join(","),frameRate:E,pixelAspectRatio:w,emsgSchemeIdUris:A,id:a||n,originalId:n,language:e.attributes.lang,numChannels:M,audioSamplingRate:C,availabilityTimeOffset:le,initialization:null,segmentSequenceCadence:G||t.segmentSequenceCadence,label:Z||null,encrypted:!1}}emsgSchemeIdUris_(e,t){let i=t.slice();for(let r of e){let s=r.attributes.schemeIdUri;i.includes(s)||i.push(s)}return i}parseAudioChannels_(e){for(let t of e){let i=t.attributes.schemeIdUri;if(!i)continue;let r=t.attributes.value;if(r)switch(i){case"urn:mpeg:dash:outputChannelPositionList:2012":return r.trim().split(/ +/).length;case"urn:mpeg:dash:23003:3:audio_channel_configuration:2011":case"urn:dts:dash:audio_channel_configuration:2012":{let s=parseInt(r,10);if(!s){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}return s}case"tag:dolby.com,2015:dash:audio_channel_configuration:2015":{let s=[2,1,2,2,2,2,1,2,2,1,1,1,1,2,1,1,2,2],n=parseInt(r,16);if(!n){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}let a=0;for(let o=0;o<s.length;o++)n&1<<o&&(a+=s[o]);if(a)return a;continue}case"tag:dolby.com,2014:dash:audio_channel_configuration:2011":case"urn:dolby:dash:audio_channel_configuration:2011":{let s=[1,1,1,1,1,2,2,1,1,2,2,2,1,2,1,1].reverse(),n=parseInt(r,16);if(!n){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}let a=0;for(let o=0;o<s.length;o++)n&1<<o&&(a+=s[o]);if(a)return a;continue}case"urn:mpeg:mpegB:cicp:ChannelConfiguration":{let n=[0,1,2,3,4,5,6,8,2,3,4,7,8,24,8,12,10,12,14,12,14],a=parseInt(r,10);if(!a){p.warning("Channel parsing failure! Ignoring scheme and value",i,r);continue}if(a>0&&a<n.length)return n[a];continue}default:p.warning("Unrecognized audio channel scheme:",i,r);continue}}return null}verifyRepresentation_(e){let t=R.ContentType,i=0;return i+=e.segmentBase?1:0,i+=e.segmentList?1:0,i+=e.segmentTemplate?1:0,i==0?e.contentType==t.TEXT||e.contentType==t.APPLICATION?!0:(p.warning("Representation does not contain a segment information source:","the Representation must contain one of SegmentBase, SegmentList,",'SegmentTemplate, or explicitly indicate that it is "text".',e),!1):(i!=1&&(p.warning("Representation contains multiple segment information sources:","the Representation should only contain one of SegmentBase,","SegmentList, or SegmentTemplate.",e),e.segmentBase?(p.info("Using SegmentBase by default."),e.segmentList=null,e.segmentTemplate=null):(v.assert(e.segmentList,"There should be a SegmentList"),p.info("Using SegmentList by default."),e.segmentTemplate=null)),!0)}async requestForTiming_(e,t,i){let r=[q.htmlUnescape(t)],s=fe.resolveUris(e(),r),n=K.makeRequest(s,this.config_.retryParameters);n.method=i;let a=K.RequestType.TIMING,o=this.playerInterface_.networkingEngine.request(a,n,{isPreload:this.isPreloadFn_()});this.operationManager_.manage(o);let c=await o.promise,d;if(i=="HEAD"){if(!c.headers||!c.headers.date)return p.warning("UTC timing response is missing","expected date header"),0;d=c.headers.date}else d=q.fromUTF8(c.data);let u=Date.parse(d);return isNaN(u)?(p.warning("Unable to parse date from UTC timing response"),0):u-Date.now()}async parseUtcTiming_(e,t){let i=t.map(s=>({scheme:s.attributes.schemeIdUri,value:s.attributes.value})),r=this.config_.dash.clockSyncUri;!i.length&&r&&i.push({scheme:"urn:mpeg:dash:utc:http-head:2014",value:r});for(let s of i)try{let n=s.scheme,a=s.value;switch(n){case"urn:mpeg:dash:utc:http-head:2014":case"urn:mpeg:dash:utc:http-head:2012":return await this.requestForTiming_(e,a,"HEAD");case"urn:mpeg:dash:utc:http-xsdate:2014":case"urn:mpeg:dash:utc:http-iso:2014":case"urn:mpeg:dash:utc:http-xsdate:2012":case"urn:mpeg:dash:utc:http-iso:2012":return await this.requestForTiming_(e,a,"GET");case"urn:mpeg:dash:utc:direct:2014":case"urn:mpeg:dash:utc:direct:2012":{let o=Date.parse(a);return isNaN(o)?0:o-Date.now()}case"urn:mpeg:dash:utc:http-ntp:2014":case"urn:mpeg:dash:utc:ntp:2014":case"urn:mpeg:dash:utc:sntp:2014":p.alwaysWarn("NTP UTCTiming scheme is not supported");break;default:p.alwaysWarn("Unrecognized scheme in UTCTiming element",n);break}}catch(n){p.warning("Error fetching time from UTCTiming elem",n.message)}return p.alwaysWarn("A UTCTiming element should always be given in live manifests! This content may not play on clients with bad clocks!"),0}parseEventStream_(e,t,i,r){let s=I.parseNonNegativeInt,n=i.attributes.schemeIdUri||"",a=i.attributes.value||"",o=I.parseAttr(i,"timescale",s)||1,c=I.parseAttr(i,"presentationTimeOffset",s)||0,d;n==="urn:mpeg:dash:event:alternativeMPD:insert:2025"||n==="urn:mpeg:dash:event:alternativeMPD:replace:2025"?d="altmpd":n==="urn:mpeg:dash:event:callback:2015"&&(d="callback");let u=d?this.findRequestParamFn_(i,d):void 0;for(let m of I.findChildren(i,"Event")){let f=I.parseAttr(m,"presentationTime",s)||0,g=I.parseAttr(m,"duration",s)||0,_=Math.max((f-c)/o+e,e),T=_+g/o;if(t!=null&&(_=Math.min(_,e+t),T=Math.min(T,e+t)),T<r)continue;let b={schemeIdUri:n,value:a,startTime:_,endTime:T,id:m.attributes.id||"",timescale:o,eventNode:I.cloneNode(m),urlParams:u};this.playerInterface_.onTimelineRegionAdded(b)}}async requestSegment_(e,t,i,r){let s=K.RequestType.SEGMENT,n=r?K.AdvancedRequestType.INIT_SEGMENT:K.AdvancedRequestType.MEDIA_SEGMENT,a=ct.createSegmentRequest(e,t,i,this.playerInterface_.getStreamingRetryParameters());return(await this.makeNetworkRequest_(a,s,{type:n})).data}static guessContentType_(e,t){let i=O.getFullType(e,t);return Oe.isTypeSupported(i)?R.ContentType.TEXT:e.split("/")[0]}makeNetworkRequest_(e,t,i){i||(i={}),i.isPreload=this.isPreloadFn_();let r=this.playerInterface_.networkingEngine.request(t,e,i);return this.operationManager_.manage(r),r.promise}updatePatchLocationNodes_(e){I.modifyNodes(this.patchLocationNodes_,e)}getPatchLocationUris_(){let e=this.manifestPatchContext_.mpdId,t=this.manifestPatchContext_.publishTime;if(!e||!t||!this.patchLocationNodes_.length)return[];let i=Date.now()/1e3,r=this.patchLocationNodes_.filter(s=>{let n=I.parseNonNegativeInt(s.attributes.ttl);return!n||t+n>i}).map(I.getContents).filter(it.isNotNull);return r.length?fe.resolveUris(this.manifestUris_,r):[]}static isNtpScheme_(e){return e==="urn:mpeg:dash:utc:http-ntp:2014"||e==="urn:mpeg:dash:utc:ntp:2014"||e==="urn:mpeg:dash:utc:sntp:2014"}static defaultUrlParams_(){return""}static makeBaseUriGetter_(e,t,i){return()=>e&&t?e.getLocations("BaseURL"):i.slice()}};l(pt,"SCTE214_","urn:scte:dash:scte214-extensions"),l(pt,"UP_NAMESPACE_2014_","urn:mpeg:dash:schema:urlparam:2014"),l(pt,"UP_NAMESPACE_2016_","urn:mpeg:dash:schema:urlparam:2016"),l(pt,"URL_PARAM_DESCRIPTOR_SCHEMES_",new Set(["urn:mpeg:dash:urlparam:2014","urn:mpeg:dash:urlparam:2016"])),l(pt,"SUPPORTED_ESSENTIAL_PROPERTIES_",new Set(["http://dashif.org/guidelines/trickmode","http://dashif.org/thumbnail_tile","http://dashif.org/guidelines/thumbnail_tile","urn:mpeg:mpegB:cicp:TransferCharacteristics","urn:mpeg:mpegB:cicp:ColourPrimaries","urn:mpeg:mpegB:cicp:MatrixCoefficients","urn:mpeg:dash:ssr:2023","urn:dvb:dash:fontdownload:2014","urn:mpeg:dash:urlparam:2014","urn:mpeg:dash:urlparam:2016","urn:mpeg:dash:urlparam:2025","urn:mpeg:dash:pattern:2024"]));var Br=pt;me.registerParserByMime("application/dash+xml",()=>new Br);me.registerParserByMime("video/vnd.mpeg.dash.mpd",()=>new Br);/*! @license
|
|
619
619
|
* Shaka Player
|
|
620
620
|
* Copyright 2016 Google LLC
|
|
621
621
|
* SPDX-License-Identifier: Apache-2.0
|
|
622
|
-
*/var On=class{static jsonToMpd(e){let t="urn:mpeg:dash:schema:mpd:2011";function i(c){return String(c).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function r(c,d,u){let m="<"+c;for(let[f,g]of Object.entries(d))m+=` ${f}="${i(g)}"`;return u===""?m+"/>":m+">"+u+`</${c}>`}function s(c,d,u){if(d==null)return r(c,{},"");if(typeof d!="object")return r(c,{},i(String(d)));let m={},f="",g=[],_=d;for(let[T,b]of Object.entries(_)){if(T==="$value"||T==="$ns")continue;if(u[T]!==void 0&&typeof b=="object"&&b!=null){let A=T,x=b;for(let[M,C]of Object.entries(x))if(Array.isArray(C))for(let k of C){let
|
|
622
|
+
*/var On=class{static jsonToMpd(e){let t="urn:mpeg:dash:schema:mpd:2011";function i(c){return String(c).replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""")}function r(c,d,u){let m="<"+c;for(let[f,g]of Object.entries(d))m+=` ${f}="${i(g)}"`;return u===""?m+"/>":m+">"+u+`</${c}>`}function s(c,d,u){if(d==null)return r(c,{},"");if(typeof d!="object")return r(c,{},i(String(d)));let m={},f="",g=[],_=d;for(let[T,b]of Object.entries(_)){if(T==="$value"||T==="$ns")continue;if(u[T]!==void 0&&typeof b=="object"&&b!=null){let A=T,x=b;for(let[M,C]of Object.entries(x))if(Array.isArray(C))for(let k of C){let D=`${A}:${M}`;g.push(s(D,k,u))}else if(typeof C=="object"){let k=`${A}:${M}`;g.push(s(k,C,u))}else m[`${A}:${M}`]=C;continue}let E=b;if(!(typeof E=="object"&&E!=null))m[T]=E;else if(Array.isArray(E))for(let A of E)g.push(s(T,A,u));else g.push(s(T,E,u))}return d.$value!==void 0&&d.$value!==null&&(f=i(d.$value)),r(c,m,f+g.join(""))}let n={};if(e.$ns&&typeof e.$ns=="object")for(let[c,d]of Object.entries(e.$ns)){let u=d.prefix;n[u]=c}let a={xmlns:t};for(let[c,d]of Object.entries(n))a[`xmlns:${c}`]=d;for(let[c,d]of Object.entries(e))c!=="$ns"&&(typeof d!="object"||d===null)&&(a[c]=d);let o="";for(let[c,d]of Object.entries(e))if(c!=="$ns"){if(c in n){let u=d;for(let[m,f]of Object.entries(u))if(Array.isArray(f))for(let g of f){let _=`${c}:${m}`;o+=s(_,g,n)}else if(typeof f=="object"){let g=`${c}:${m}`;o+=s(g,f,n)}else a[`${c}:${m}`]=f;continue}if(typeof d=="object"&&d!==null)if(Array.isArray(d))for(let u of d)o+=s(c,u,n);else o+=s(c,d,n)}return r("MPD",a,o)}};/*! @license
|
|
623
623
|
* Shaka Player
|
|
624
624
|
* Copyright 2016 Google LLC
|
|
625
625
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -703,8 +703,8 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
703
703
|
* Shaka Player
|
|
704
704
|
* Copyright 2016 Google LLC
|
|
705
705
|
* SPDX-License-Identifier: Apache-2.0
|
|
706
|
-
*/var vt=class vt{constructor(){l(this,"playerInterface_");l(this,"config_");l(this,"globalId_");l(this,"globalVariables_");l(this,"groupIdToStreamInfosMap_");l(this,"mediaSequenceToStartTimeByType_");l(this,"keyFormatsToDrmParsers_");l(this,"variantUriSet_");l(this,"uriToStreamInfosMap_");l(this,"presentationTimeline_");l(this,"masterPlaylistUri_");l(this,"manifestTextParser_");l(this,"minSequenceNumber_");l(this,"lowestSyncTime_");l(this,"realProgramDateTimeByReference_");l(this,"usesProgramDateTime_");l(this,"streamsFinalized_");l(this,"codecInfoInManifest_");l(this,"updatePlaylistTimer_");l(this,"presentationType_");l(this,"manifest_");l(this,"maxTargetDuration_");l(this,"lastTargetDuration_");l(this,"partialTargetDuration_");l(this,"presentationDelay_");l(this,"lowLatencyPresentationDelay_");l(this,"operationManager_");l(this,"groupIdToClosedCaptionsMap_");l(this,"groupIdToCodecsMap_");l(this,"mapTagToInitSegmentRefMap_");l(this,"aesKeyInfoMap_");l(this,"aesKeyMap_");l(this,"identityKeyMap_");l(this,"initSegmentToKidMap_");l(this,"lowLatencyMode_");l(this,"lowLatencyByterangeOptimization_");l(this,"averageUpdateDuration_");l(this,"contentSteeringManager_");l(this,"needsClosedCaptionsDetection_");l(this,"eventManager_");l(this,"mediaElement_");l(this,"startTime_");l(this,"isPreloadFn_");l(this,"psshToInitData_");l(this,"chapterUris_");l(this,"chapterStreamsMap_");this.playerInterface_=null,this.config_=null,this.globalId_=1,this.globalVariables_=new Map,this.groupIdToStreamInfosMap_=new Map,this.mediaSequenceToStartTimeByType_=new Map;let e=R.ContentType;this.mediaSequenceToStartTimeByType_.set(e.VIDEO,new Map),this.mediaSequenceToStartTimeByType_.set(e.AUDIO,new Map),this.mediaSequenceToStartTimeByType_.set(e.TEXT,new Map),this.mediaSequenceToStartTimeByType_.set(e.IMAGE,new Map),this.keyFormatsToDrmParsers_=new Map().set("com.apple.streamingkeydelivery",(t,i,r)=>this.fairplayDrmParser_(t,i,r)).set("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",(t,i,r)=>this.widevineDrmParser_(t,i,r)).set("com.microsoft.playready",(t,i,r)=>this.playreadyDrmParser_(t,i,r)).set("urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c",(t,i,r)=>this.wiseplayDrmParser_(t,i,r)),this.variantUriSet_=new Set,this.uriToStreamInfosMap_=new Map,this.presentationTimeline_=null,this.masterPlaylistUri_="",this.manifestTextParser_=new Yn,this.minSequenceNumber_=-1,this.lowestSyncTime_=1/0,this.realProgramDateTimeByReference_=new WeakMap,this.usesProgramDateTime_=!1,this.streamsFinalized_=!1,this.codecInfoInManifest_=!1,this.updatePlaylistTimer_=new ae(()=>{if(this.mediaElement_&&!this.config_.continueLoadingWhenPaused&&(this.eventManager_.unlisten(this.mediaElement_,"timeupdate"),this.mediaElement_.paused)){this.eventManager_.listenOnce(this.mediaElement_,"timeupdate",()=>this.onUpdate_());return}this.onUpdate_()}),this.presentationType_=vt.PresentationType_.VOD,this.manifest_=null,this.maxTargetDuration_=0,this.lastTargetDuration_=1/0,this.partialTargetDuration_=0,this.presentationDelay_=0,this.lowLatencyPresentationDelay_=0,this.operationManager_=new fi,this.groupIdToClosedCaptionsMap_=new Map,this.groupIdToCodecsMap_=new Map,this.mapTagToInitSegmentRefMap_=new Map,this.aesKeyInfoMap_=new Map,this.aesKeyMap_=new Map,this.identityKeyMap_=new Map,this.initSegmentToKidMap_=new Map,this.lowLatencyMode_=!1,this.lowLatencyByterangeOptimization_=!1,this.averageUpdateDuration_=new er(5),this.contentSteeringManager_=null,this.needsClosedCaptionsDetection_=!0,this.eventManager_=new ue,this.mediaElement_=null,this.startTime_=null,this.isPreloadFn_=()=>!1,this.psshToInitData_=new Map,this.chapterUris_=[],this.chapterStreamsMap_=new Map}configure(e,t){let i=this.playerInterface_&&e.updatePeriod!=this.config_.updatePeriod&&e.updatePeriod>=0;this.config_=e,t&&(this.isPreloadFn_=t),this.contentSteeringManager_&&this.contentSteeringManager_.configure(this.config_),i&&this.manifest_&&this.manifest_.presentationTimeline.isDynamic()&&this.updatePlaylistTimer_.tickNow()}async start(e,t){v.assert(this.config_,"Must call configure() before start()!"),this.playerInterface_=t,this.lowLatencyMode_=t.isLowLatencyMode();let i=await this.requestManifest_([e]).promise;return this.masterPlaylistUri_=i.uri,v.assert(i.data,"Response data should be non-null!"),await this.parseManifest_(i.data),v.assert(this.manifest_,"Manifest should be non-null"),this.manifest_}stop(){this.updatePlaylistTimer_&&(this.updatePlaylistTimer_.stop(),this.updatePlaylistTimer_=null);let e=[];return this.operationManager_&&(e.push(this.operationManager_.destroy()),this.operationManager_=null),this.playerInterface_=null,this.config_=null,this.variantUriSet_.clear(),this.manifest_=null,this.uriToStreamInfosMap_.clear(),this.groupIdToStreamInfosMap_.clear(),this.groupIdToCodecsMap_.clear(),this.globalVariables_.clear(),this.mapTagToInitSegmentRefMap_.clear(),this.aesKeyInfoMap_.clear(),this.aesKeyMap_.clear(),this.identityKeyMap_.clear(),this.initSegmentToKidMap_.clear(),this.psshToInitData_.clear(),this.contentSteeringManager_&&this.contentSteeringManager_.destroy(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),Promise.all(e)}async update(){if(!this.isDynamic_())return;let e=[],i=Array.from(this.uriToStreamInfosMap_.values()).filter(n=>!n.stream.isAudioMuxedInVideo&&n.stream.segmentIndex);if(i.length===0){p.warning("No active streams found during update");return}this.lastTargetDuration_=1/0,this.manifest_.gapCount=0;for(let n of i)e.push(this.updateStream_(n));e.push(this.parseChapters_()),await Promise.all(e);let r=Array.from(this.chapterStreamsMap_.values());for(let n of r)this.manifest_.chapterStreams.includes(n)||this.manifest_.chapterStreams.push(n);this.notifySegmentsForStreams_(i.map(n=>n.stream));let s=i.some(n=>n.hasEndList==!1);i.length&&!s&&(this.setPresentationType_(vt.PresentationType_.VOD),this.determineDuration_()),s&&this.determineDuration_();for(let n of i)!n.stream.isAudioMuxedInVideo&&n.stream.segmentIndex&&!n.stream.segmentIndex.earliestReference()&&this.playerInterface_.disableStream(n.stream)}getMediaSequenceToStartTimeFor_(e){return this.isLive_()?this.mediaSequenceToStartTimeByType_.get(e.type):e.mediaSequenceToStartTime}async updateStream_(e){if(e.stream.isAudioMuxedInVideo)return;let t=[];for(let x of e.getUris()){let M=new Map;e.canBlockReload&&(e.nextMediaSequence>=0&&M.set("_HLS_msn",String(e.nextMediaSequence)),e.nextPart>=0&&M.set("_HLS_part",String(e.nextPart))),e.canSkipDateRanges?M.set("_HLS_skip","v2"):e.canSkipSegments&&M.set("_HLS_skip","YES"),t.push(fe.appendParams(x,M))}let i;try{i=await this.requestManifest_(t,!0).promise}catch(x){throw this.playerInterface_&&this.playerInterface_.disableStream(e.stream),x}if(!e.stream.segmentIndex)return;let r=this.manifestTextParser_.parsePlaylist(i.data);if(r.type!=Gi.MEDIA)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_PLAYLIST_HIERARCHY);let s=i.uri;s!=i.originalUri&&!e.getUris().includes(s)&&e.redirectUris.push(s);let n=he.filterTagsByName(r.tags,"EXT-X-DEFINE"),a=this.parseMediaVariables_(n,s),o=e.stream,c=this.getMediaSequenceToStartTimeFor_(e),{keyIds:d,drmInfos:u,encrypted:m,aesEncrypted:f}=await this.parseDrmInfo_(r,o.mimeType,e.getUris,a);!o.encrypted&&m&&!f&&(o.encrypted=!0),((x,M)=>x.size===M.size&&[...x].every(C=>M.has(C)))(o.keyIds,d)||(o.keyIds=d,o.drmInfos=u,this.playerInterface_.newDrmInfo(o));let _=i.uri!==i.originalUri,{segments:T,totalCount:b,bandwidth:S}=this.createSegments_(r,c,a,e.getUris,e.type,_,o.segmentIndex);S&&(o.bandwidth=S);let E=dr.createQualityInfo(o);for(let x of T)x.initSegmentReference&&(x.initSegmentReference.mediaQuality=E);if(T.length&&o.segmentIndex.mergeAndEvict(T,this.presentationTimeline_.getSegmentAvailabilityStart()),b){let x=he.getFirstTagWithNameAsNumber(r.tags,"EXT-X-MEDIA-SEQUENCE",0),M=he.getFirstTagWithName(r.tags,"EXT-X-SKIP"),C=M?Number(M.getAttributeValue("SKIPPED-SEGMENTS")):0,{nextMediaSequence:k,nextPart:L}=this.getNextMediaSequenceAndPart_(x,T,b);e.nextMediaSequence=k+C,e.nextPart=L;let V=c.get(x);o.segmentIndex.evict(V)}this.setProgramDateTimeRegionsFromIndex_(o,e.type);let w=o.segmentIndex.earliestReference();w&&(e.minTimestamp=w.startTime,T.length&&(e.maxTimestamp=T[T.length-1].endTime)),he.getFirstTagWithName(r.tags,"EXT-X-ENDLIST")&&(e.hasEndList=!0),this.determineLastTargetDuration_(r),this.processDateRangeTags_(r.tags,o.type,a,e.getUris)}onExpirationUpdated(e,t){}onInitialVariantChosen(e){}banLocation(e){this.contentSteeringManager_&&this.contentSteeringManager_.banLocation(e)}setMediaElement(e){this.mediaElement_=e}syncStreamsWithSequenceNumber_(e,t=!1){let i=this.minSequenceNumber_==-1;for(let r of e){let s=r.stream.segmentIndex;v.assert(s,"Only loaded streams should be synced");let n=this.getMediaSequenceToStartTimeFor_(r),a=s.earliestReference();if(a){Ve&&n.values().next().value!=a.startTime&&p.warning("Sequence number map is not ordered as expected!");for(let[o,c]of n)if(c==a.startTime){i&&(this.minSequenceNumber_=Math.max(this.minSequenceNumber_,o)),r.firstSequenceNumber=o;break}}}if(!(this.minSequenceNumber_<0)){p.debug("Syncing HLS streams against base sequence number:",this.minSequenceNumber_);for(let r of e){if(!this.ignoreManifestProgramDateTimeFor_(r.type)&&!t)continue;let s=r.stream.segmentIndex;if(s){let n=this.minSequenceNumber_-r.firstSequenceNumber;if(n>0){s.dropFirstReferences(n);let a=s.earliestReference();if(a){let o=-a.startTime;r.stream.segmentIndex.offset(o),this.offsetStreamInfo_(r,o)}}}}}}syncStreamsWithProgramDateTime_(e){if(this.lowestSyncTime_==1/0)for(let i of e){let r=i.stream.segmentIndex;v.assert(r,"Only loaded streams should be synced");let s=r.earliestReference();s!=null&&s.syncTime!=null&&(this.lowestSyncTime_=Math.min(this.lowestSyncTime_,s.syncTime))}let t=this.lowestSyncTime_;if(t!=1/0){p.debug("Syncing HLS streams against base time:",t);for(let i of this.uriToStreamInfosMap_.values()){if(this.ignoreManifestProgramDateTimeFor_(i.type))continue;let r=i.stream.segmentIndex;if(r!=null){let s=r.earliestReference();if(!s)continue;if(s.syncTime==null)p.alwaysError("Missing EXT-X-PROGRAM-DATE-TIME for stream",i.getUris(),"Expect AV sync issues!");else{let a=s.syncTime-t-s.startTime;this.offsetStreamInfo_(i,a);for(let o of r)o.syncAgainst(t)}}}}}offsetStreamInfo_(e,t){if(Math.abs(t)<.001)return;e.minTimestamp+=t,e.maxTimestamp+=t,v.assert(e.maxTimestamp>=0,"Negative maxTimestamp after adjustment!");let i=this.getMediaSequenceToStartTimeFor_(e);for(let[r,s]of i)i.set(r,s+t);p.debug("Offset",t,"applied to",e.getUris())}async parseManifest_(e){let t=R.ContentType;v.assert(this.masterPlaylistUri_,"Master playlist URI must be set before calling parseManifest_!");let i=this.manifestTextParser_.parsePlaylist(e),r=he.filterTagsByName(i.tags,"EXT-X-DEFINE"),s=[],n=[],a=[];v.assert(this.presentationTimeline_==null,"Presentation timeline created early!"),this.presentationTimeline_=new xi(null,0),this.presentationTimeline_.setStatic(!0);let o=()=>[this.masterPlaylistUri_],c=null,d=new Map;if(this.manifest_={presentationTimeline:this.presentationTimeline_,variants:s,textStreams:n,imageStreams:a,chapterStreams:[],offlineSessionIds:[],sequenceMode:this.config_.hls.sequenceMode,ignoreManifestTimestampsInSegmentsMode:this.config_.hls.ignoreManifestTimestampsInSegmentsMode,type:me.HLS,serviceDescription:null,nextUrl:null,periodCount:1,gapCount:0,isLowLatency:!1,startTime:this.startTime_},i.type==Gi.MEDIA){this.needsClosedCaptionsDetection_=!1;let u=he.filterTagsByName(i.tags,"EXT-X-DEFINE");d=this.parseMediaVariables_(u,this.masterPlaylistUri_),c=t.VIDEO;let m="",f="",g="",_=null,T=null,b=new Map,S=!1,E=null,w=!1,A=!0,x="Media Playlist",M=this.masterPlaylistUri_,C=await this.convertParsedPlaylistIntoStreamInfo_(this.globalId_++,d,i,o,m,c,g,A,x,_,b,E,w,T,S,f,M);if(this.uriToStreamInfosMap_.set(this.masterPlaylistUri_,C),C.stream){let L=dr.createQualityInfo(C.stream);C.stream.segmentIndex.forEachTopLevelReference(V=>{V.initSegmentReference&&(V.initSegmentReference.mediaQuality=L)})}c=C.stream.type;let k=!0;(this.config_.disableAudio&&C.type=="audio"||this.config_.disableVideo&&C.type=="video"&&!C.stream.codecs.includes(","))&&(k=!1),k&&s.push({id:0,language:this.getLanguage_(g),disabledUntilTime:0,primary:!0,audio:C.type=="audio"?C.stream:null,video:C.type=="video"?C.stream:null,bandwidth:C.stream.bandwidth||0,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]}),this.config_.hls.chaptersUri&&!this.chapterUris_.includes(this.config_.hls.chaptersUri)&&this.chapterUris_.push(this.config_.hls.chaptersUri),await this.parseChapters_()}else{this.parseMasterVariables_(r);let u=he.filterTagsByName(i.tags,"EXT-X-MEDIA"),m=he.filterTagsByName(i.tags,"EXT-X-STREAM-INF"),f=he.filterTagsByName(i.tags,"EXT-X-IMAGE-STREAM-INF"),g=he.filterTagsByName(i.tags,"EXT-X-I-FRAME-STREAM-INF"),_=he.filterTagsByName(i.tags,"EXT-X-SESSION-KEY"),T=he.filterTagsByName(i.tags,"EXT-X-SESSION-DATA"),b=he.filterTagsByName(i.tags,"EXT-X-CONTENT-STEERING");this.chapterUris_=this.processSessionData_(T),this.config_.hls.chaptersUri&&!this.chapterUris_.includes(this.config_.hls.chaptersUri)&&this.chapterUris_.push(this.config_.hls.chaptersUri),await this.processContentSteering_(b),this.config_.ignoreSupplementalCodecs||(m.push(...this.createTagsWithSupplementalCodecs_(m,!0)),g.push(...this.createTagsWithSupplementalCodecs_(g,!1))),this.parseCodecs_(m),this.parseClosedCaptions_(u);let S=this.parseIFrames_(g);s=await this.createVariantsForTags_(m,_,u,o,this.globalVariables_,S),n=this.parseTexts_(u),[a]=await Promise.all([this.parseImages_(f,g),this.parseChapters_()])}if(!this.playerInterface_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);if(this.determineStartTime_(i),i.type==Gi.MEDIA){if(this.isDynamic_()){this.changePresentationTimelineToLive_(i);let m=this.getUpdatePlaylistDelay_();this.updatePlaylistTimer_.tickAfter(m)}let u=Array.from(this.uriToStreamInfosMap_.values());this.finalizeStreams_(u),this.determineDuration_(),v.assert(c,"mediaPlaylistType should be non-null"),await this.processDateRangeTags_(i.tags,c,d,o)}if(this.manifest_.variants=s,this.manifest_.textStreams=n,this.manifest_.imageStreams=a,this.manifest_.chapterStreams=Array.from(this.chapterStreamsMap_.values()),this.manifest_.startTime=this.startTime_,this.propagateDetectedClosedCaptions_(),!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing){let u=[];for(let m of this.manifest_.variants)m.audio&&m.audio.codecs===""&&u.push(m.audio.createSegmentIndex()),m.video&&m.video.codecs===""&&u.push(m.video.createSegmentIndex());await Promise.all(u)}this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_)}propagateDetectedClosedCaptions_(){if(this.groupIdToClosedCaptionsMap_.size)return;let e=new Map;for(let t of this.manifest_.variants)if(t.video&&t.video.closedCaptions)for(let[i,r]of t.video.closedCaptions)e.set(i,r);if(e.size)for(let t of this.manifest_.variants)t.video&&!t.video.closedCaptions&&(t.video.closedCaptions=new Map(e))}async getBasicInfoFromSegments_(e,t){let i=_t.getBasicInfoFromMimeType(this.config_.hls.mediaPlaylistFullMimeType);if(!e.length)return i;let{segment:r,segmentIndex:s}=this.getAvailableSegment_(e),n=r.getUris(),a=ct.getExtension(n[0]);if(a){let _=vt.RAW_FORMATS_TO_MIME_TYPES_.get(a);if(_)return _t.getBasicInfoFromMimeType(_)}let o=await Promise.all([this.getInfoFromSegment_(r.initSegmentReference,0),this.getInfoFromSegment_(r,s)]),c=o[1].mimeType,d=o[0].data,u=o[1].data,m=["mp4","mp4a","m4s","m4i","m4a","m4f","cmfa","mp4v","m4v","cmfv","fmp4"],f=["audio/mp4","video/mp4","video/iso.segment"],g=r.initSegmentReference||f.includes(c);if(!g&&mt.probe(D.toUint8(u))){let _=_t.getBasicInfoFromTs(u,this.config_.disableAudio,this.config_.disableVideo,this.config_.disableText);if(_)return _}else if(g||m.includes(a)){let _=_t.getBasicInfoFromMp4(d,u,this.config_.disableText);if(_){if(t&&!_.closedCaptions.size){let T=this.getClosedCaptionProbeSegments_(e,s),b=await this.probeClosedCaptionsFromSegments_(T,r.initSegmentReference,d);b&&(_.closedCaptions=b)}return _}}return c?_t.getBasicInfoFromMimeType(c):i}async probeClosedCaptionsFromSegments_(e,t,i){let r=e.shift();if(!r)return null;r.segment.initSegmentReference!=t&&(t=r.segment.initSegmentReference,i=(await this.getInfoFromSegment_(t,0)).data);let s=await this.getInfoFromSegment_(r.segment,r.segmentIndex),n=_t.getBasicInfoFromMp4(i,s.data,this.config_.disableText);return n&&n.closedCaptions.size?n.closedCaptions:this.probeClosedCaptionsFromSegments_(e,t,i)}getClosedCaptionProbeSegments_(e,t){let i=e.length-1,r=this.isLive_()?[Math.trunc(i*3/4),Math.trunc(i/4)]:[Math.trunc(i/2),i],s=[],n=e.map((a,o)=>({segment:a,segmentIndex:o})).filter(a=>a.segmentIndex!=t&&a.segment.getStatus()!=Te.Status.MISSING);for(let a of r)n.length&&(n.sort((o,c)=>Math.abs(o.segmentIndex-a)-Math.abs(c.segmentIndex-a)),s.push(n.shift()));return s}async getInfoFromSegment_(e,t){if(!e)return{mimeType:null,data:null};let i=K.RequestType.SEGMENT,r=ct.createSegmentRequest(e.getUris(),e.getStartByte(),e.getEndByte(),this.playerInterface_.getStreamingRetryParameters()),s=e instanceof Te?K.AdvancedRequestType.MEDIA_SEGMENT:K.AdvancedRequestType.INIT_SEGMENT,n=await this.makeNetworkRequest_(r,i,{type:s}).promise,a=n.data;e.aesKey&&(a=await _t.aesDecrypt(a,e.aesKey,t)),e instanceof Te?e.setSegmentData(a,!0):e.setSegmentData(a);let o=n.headers["content-type"];return o&&(o=o.split(";")[0].toLowerCase()),{mimeType:o,data:a}}determineDuration_(){if(v.assert(this.presentationTimeline_,"Presentation timeline not created!"),this.isLive_()){let e=this.getLiveDuration_()||0;isNaN(this.config_.availabilityWindowOverride)||(e=this.config_.availabilityWindowOverride),this.presentationTimeline_.setSegmentAvailabilityDuration(e)}else this.presentationTimeline_.setDuration(this.getMinDuration_());if(!this.presentationTimeline_.isStartTimeLocked())for(let e of this.uriToStreamInfosMap_.values()){if(!e.stream.segmentIndex||e.type!="audio"&&e.type!="video")continue;let t=e.stream.segmentIndex.earliestReference();if(t&&t.syncTime!=null){let i=t.syncTime;this.presentationTimeline_.setInitialProgramDateTime(i)}}this.presentationTimeline_.lockStartTime(),v.assert(!this.presentationTimeline_.usingPresentationStartTime(),"We should not be using the presentation start time in HLS!")}parseMasterVariables_(e){this.parseVariablesFromTags_(e,this.globalVariables_,this.masterPlaylistUri_)}parseMediaVariables_(e,t){let i=new Map;return this.parseVariablesFromTags_(e,i,t,!0),i}parseVariablesFromTags_(e,t,i,r=!1){let s;for(let n of e){let a=n.getAttributeValue("NAME"),o=n.getAttributeValue("VALUE"),c=n.getAttributeValue("QUERYPARAM");if(a&&o&&t.getOrInsert(a,o),c){s||(s=new URL(i).searchParams);let d=s.get(c);d&&!t.has(d)&&t.set(c,d)}if(r){let d=n.getAttributeValue("IMPORT");if(d){let u=this.globalVariables_.get(d);u&&t.set(d,u)}}}}groupTagsByKey_(e){let t={};for(let i of e){let r=i.getTagKey(!this.contentSteeringManager_);t[r]?t[r].push(i):t[r]=[i]}return t}createTagsWithSupplementalCodecs_(e,t){let i=[];for(let r of e){let s=he.getSupplementalCodecs(r);if(!s)continue;let n=r.attributes.map(a=>{let o=a.name,c=a.value;if(o=="CODECS"&&(c=s,t)){let d=a.value.split(",");if(d.length>1){let u=R.guessCodecsSafe(R.ContentType.AUDIO,d);u&&(c+=","+u)}}return new Fr(o,c)});i.push(new gr(r.id,r.name,n,null))}return i}parseCodecs_(e){let t=R.ContentType;for(let i of e){let r=i.getAttributeValue("AUDIO"),s=i.getAttributeValue("VIDEO"),n=i.getAttributeValue("SUBTITLES"),a=this.getCodecsForVariantTag_(i);if(n){let o=R.guessCodecsSafe(t.TEXT,a);v.assert(o!=null,"Text codecs should be valid."),this.groupIdToCodecsMap_.set(n,o),ye.remove(a,o)}if(r){let o=R.guessCodecsSafe(t.AUDIO,a);o||(o=this.config_.hls.defaultAudioCodec),this.groupIdToCodecsMap_.set(r,o)}if(s){let o=R.guessCodecsSafe(t.VIDEO,a);o||(o=this.config_.hls.defaultVideoCodec),this.groupIdToCodecsMap_.set(s,o)}}}processSessionData_(e){let t=[];for(let i of e){let r=i.getAttributeValue("DATA-ID"),s=i.getAttributeValue("URI"),n=i.getAttributeValue("LANGUAGE"),a=i.getAttributeValue("VALUE"),o=new Map().set("id",r);s&&o.set("uri",he.constructSegmentUris([this.masterPlaylistUri_],s,this.globalVariables_)[0]),n&&o.set("language",n),a&&o.set("value",a),r=="com.apple.hls.chapters"&&s&&t.push(o.get("uri"));let c=new U("sessiondata",o);this.playerInterface_&&this.playerInterface_.onEvent(c)}return t}async processContentSteering_(e){if(!this.playerInterface_||!this.config_)return;let t;for(let i of e){let r=i.getAttributeValue("PATHWAY-ID"),s=i.getAttributeValue("SERVER-URI");if(!(!r||!s)){this.contentSteeringManager_=new ns(this.playerInterface_),this.contentSteeringManager_.configure(this.config_),this.contentSteeringManager_.setBaseUris([this.masterPlaylistUri_]),this.contentSteeringManager_.setManifestType(me.HLS),this.contentSteeringManager_.setDefaultPathwayId(r),t=this.contentSteeringManager_.requestInfo(s);break}}await t}parseTexts_(e){let t=he.filterTagsByType(e,"SUBTITLES"),i=this.groupTagsByKey_(t),r=[];if(!this.config_.disableText)for(let n in i)try{r.push(this.createStreamInfoFromMediaTags_(i[n],new Map).stream)}catch(a){if(this.config_.hls.ignoreTextStreamFailures)continue;throw a}let s=R.ContentType.TEXT;for(let n of t){let a=n.getRequiredAttrValue("GROUP-ID"),o=this.groupIdToCodecsMap_.get(a);if(o){let c=this.groupIdToStreamInfosMap_.get(a);if(c)for(let d of c)d.stream.codecs=o,d.stream.mimeType=this.guessMimeTypeBeforeLoading_(s,o)||this.guessMimeTypeFallback_(s),this.setFullTypeForStream_(d.stream)}}return r.filter(n=>n)}setFullTypeForStream_(e){let t=new Set([O.getFullType(e.mimeType,e.codecs)]);e.segmentIndex&&e.segmentIndex.forEachTopLevelReference(i=>{i.mimeType&&t.add(O.getFullType(i.mimeType,e.codecs))}),e.fullMimeTypes=t}async parseImages_(e,t){let i=e.map(async s=>{if(this.config_.disableThumbnails)return null;try{return(await this.createStreamInfoFromImageTag_(s)).stream}catch(a){if(this.config_.hls.ignoreImageStreamFailures)return null;throw a}}).concat(t.map(s=>{if(this.config_.disableThumbnails)return null;try{let a=this.createStreamInfoFromIframeTag_(s),o=R.ContentType;return a.stream.type!==o.IMAGE?null:a.stream}catch(a){if(this.config_.hls.ignoreImageStreamFailures)return null;throw a}}));return(await Promise.all(i)).filter(s=>s)}async parseChapters_(){if(this.config_.disableChapters)return;let e=[];for(let t of this.chapterUris_)e.push(this.processChapters_(t));await Promise.all(e)}async processChapters_(e){let t=K.RequestType.SESSION_DATA,i=K.makeRequest([e],this.config_.retryParameters),r=await this.makeNetworkRequest_(i,t).promise,s=q.fromUTF8(r.data),n=JSON.parse(s),a=new Map;for(let o=0;o<n.length;o++){let c=n[o];if(!c.titles)continue;let d=[];if(c.images){for(let u of c.images)if(u.url){let m=he.constructSegmentUris([r.uri],u.url);for(let f of m){let g={type:u["image-category"],width:u["pixel-width"],height:u["pixel-height"],url:f};d.push(g)}}}for(let u of c.titles){let m={id:"",title:u.title,startTime:c["start-time"],endTime:c["start-time"],images:d};c.duration?m.endTime+=c.duration:o+1<n.length&&(m.endTime=n[o+1]["start-time"]),a.getOrInsertComputed(u.language,()=>[]).push(m)}}a.forEach((o,c)=>{let d=[];for(let f of o){let g=new Te(f.startTime,f.endTime,()=>[],0,null,null,0,0,1/0),_={title:f.title,images:f.images};g.setMetadata(_),d.push(g)}let u="text/plain",m=this.chapterStreamsMap_.getOrInsertComputed(c,()=>re.createStream({id:this.globalId_++,mimeType:u,kind:"",language:c,originalLanguage:c,type:R.ContentType.CHAPTER,external:!0}));m.segmentIndex?m.segmentIndex.mergeAndEvict(d,this.presentationTimeline_.getSegmentAvailabilityStart()):m.segmentIndex=new Ze(d)})}createStreamInfosFromMediaTags_(e,t){e=e.filter(r=>{let s=r.getAttributeValue("URI")||"",n=r.getAttributeValue("TYPE");return n!="SUBTITLES"&&(s!=""||n=="AUDIO"||n=="VIDEO")});let i=this.groupTagsByKey_(e);for(let r in i)this.createStreamInfoFromMediaTags_(i[r],t,!1)}parseIFrames_(e){return e.map(i=>{let r=this.createStreamInfoFromIframeTag_(i),s=R.ContentType;return r.stream.type!==s.VIDEO?null:r.stream}).filter(i=>i)}async createVariantsForTags_(e,t,i,r,s,n){let a=[],o=new Set;if(!this.config_.ignoreDrmInfo&&t.length>0)for(let u of t){let m=u.getRequiredAttrValue("METHOD"),f=u.getAttributeValue("KEYFORMAT")||"identity",g=null;if(m!="NONE"){if(this.isAesMethod_(m)){let _=he.constructSegmentUris(r(),u.getRequiredAttrValue("URI"),s),T=_.sort().join("");this.aesKeyMap_.getOrInsertComputed(T,()=>{let b=K.RequestType.KEY,S=K.makeRequest(_,this.config_.retryParameters);return this.makeNetworkRequest_(S,b).promise});continue}else if(f=="identity")g=await this.identityDrmParser_(u,"",r,null,s);else{let _=this.keyFormatsToDrmParsers_.get(f);g=_?await _(u,"",null):null}if(g){if(g.keyIds)for(let _ of g.keyIds)o.add(_);a.push(g)}else p.warning("Unsupported HLS KEYFORMAT",f)}}let c=this.groupTagsByKey_(e),d=[];for(let u in c){let m=c[u],f=m[0],g=this.getFrameRate_(f),_=Number(f.getRequiredAttrValue("BANDWIDTH"))||Number(f.getAttributeValue("AVERAGE-BANDWIDTH")),T=f.getAttributeValue("RESOLUTION"),[b,S]=T?T.split("x"):[null,null],E=f.getAttributeValue("VIDEO-RANGE"),w=f.getAttributeValue("REQ-VIDEO-LAYOUT");w&&w.includes(",")&&(w=w.split(",").filter(M=>M=="CH-STEREO"||M=="CH-MONO")[0]),w=w||"CH-MONO";let A=this.createStreamInfosForVariantTags_(m,i,T);v.assert(A.audio.length||A.video.length,"We should have created a stream!"),d.push(...this.createVariants_(A.audio,A.video,_,b,S,g,E,w,a,o,n))}return d.filter(u=>u!=null)}createStreamInfosForVariantTags_(e,t,i){let r=R.ContentType,s={audio:[],video:[]},n=new Map,a=new Set,o=new Set;for(let E of e){let w=E.getAttributeValue("AUDIO"),A=E.getAttributeValue("VIDEO");if(!w&&!A)continue;let x=E.getAttributeValue("PATHWAY-ID");w&&!a.has(w)&&(a.add(w),x&&n.set(w,x)),A&&!o.has(A)&&(o.add(A),x&&n.set(A,x)),p.debug("Guessing stream type for",E.toString())}let c=[...a,...o];if(c.length&&t.length){let E=t.filter(w=>c.includes(w.getRequiredAttrValue("GROUP-ID")));this.createStreamInfosFromMediaTags_(E,n)}s.audio.push(...this.getGroupStreamInfos_(a)),s.video.push(...this.getGroupStreamInfos_(o));let d=s.video.find(E=>E.stream.isAudioMuxedInVideo),u,m=!1,f=e.map(E=>E.getRequiredAttrValue("URI")),g=s.audio.find(E=>E&&E.getUris().find(w=>f.includes(w))),_=this.getCodecsForVariantTag_(e[0]),T=R.guessCodecsSafe(r.VIDEO,_),b=R.guessCodecsSafe(r.AUDIO,_),S=he.getSupplementalCodecs(e[0]);if(d?(p.debug("Guessing video (URI-less VIDEO Rendition)."),u=r.VIDEO,b&&T&&!s.audio.length&&(_=[[T,b].join(",")])):b&&!T?(u=r.AUDIO,p.debug("Guessing audio-only."),m=s.audio.length>0&&!s.audio.some(E=>E.stream.isAudioMuxedInVideo)):!s.audio.length&&!s.video.length&&b&&T?(p.debug("Guessing multiplexed audio+video."),u=r.VIDEO,_=[[T,b].join(",")]):s.audio.length&&g?(p.debug("Guessing audio-only."),u=r.AUDIO,m=!0):s.video.length&&!s.audio.length?(p.debug("Guessing audio-only."),u=r.AUDIO):(p.debug("Guessing video-only."),u=r.VIDEO),!m){let E=this.createStreamInfoFromVariantTags_(e,_,u,S),w=E.stream,A=u==r.AUDIO?s.audio:s.video,x=A.find(M=>M.stream.isAudioMuxedInVideo);if(w.type==u&&x){let M=x.stream;w.language=M.language,w.originalLanguage=M.originalLanguage,w.label=M.label,w.channelsCount=M.channelsCount,w.audioSamplingRate=M.audioSamplingRate,w.originalId=M.originalId,w.primary=M.primary,w.roles=M.roles,A.splice(A.indexOf(x),1,E)}else(w.type==r.AUDIO?s.audio:s.video).push(E)}return s.video=s.video.filter(E=>!E.stream.isAudioMuxedInVideo),s}getGroupStreamInfos_(e){if(!e.size)return[];let t=[...e].sort().join(",");return this.groupIdToStreamInfosMap_.get(t)||[]}getCodecsForVariantTag_(e){let t=e.getAttributeValue("CODECS")||"";if(this.codecInfoInManifest_=t.length>0,!this.codecInfoInManifest_&&!this.config_.hls.disableCodecGuessing){let r=[];this.config_.disableVideo||r.push(this.config_.hls.defaultVideoCodec),this.config_.disableAudio||r.push(this.config_.hls.defaultAudioCodec),t=r.join(",")}let i=t.split(/\s*,\s*/);return _t.codecsFiltering(i)}getChannelsCount_(e){let t=e.getAttributeValue("CHANNELS");if(!t)return null;let i=t.split("/")[0];return parseInt(i,10)}getSampleRate_(e){let t=e.getAttributeValue("SAMPLE-RATE");return t?parseInt(t,10):null}getFrameRate_(e){let t=e.getAttributeValue("FRAME-RATE");return t?parseFloat(t):null}isSpatialAudio_(e){let t=e.getAttributeValue("CHANNELS");if(!t)return!1;let i=t.split("/");return i.length!=2?!1:i[1]==="JOC"||i[1].includes("ATMOS")||i[1].includes("IMSA")}getClosedCaptions_(e,t){let i=R.ContentType,r=e.getAttributeValue("CLOSED-CAPTIONS");if(t==i.VIDEO){if(this.config_.disableText)return this.needsClosedCaptionsDetection_=!1,null;if(r){if(r!="NONE")return this.groupIdToClosedCaptionsMap_.get(r);this.needsClosedCaptionsDetection_=!1}else if(!r&&this.groupIdToClosedCaptionsMap_.size)for(let s of this.groupIdToClosedCaptionsMap_.keys())return this.groupIdToClosedCaptionsMap_.get(s)}return null}getLanguage_(e){return Se.normalize(e||"und")}getType_(e){let t=e.getRequiredAttrValue("TYPE").toLowerCase();return t=="subtitles"&&(t=R.ContentType.TEXT),t}createVariants_(e,t,i,r,s,n,a,o,c,d,u){let m=R.ContentType;for(let T of t)this.addVideoAttributes_(T.stream,r,s,n,a,o,null);let f=this.config_.disableVideo;(!t.length||f)&&(t=[null]),f&&(e=e.filter(T=>!T.stream.isAudioMuxedInVideo));let g=this.config_.disableAudio;(!e.length||g)&&(e=[null]);let _=[];for(let T of e)for(let b of t){let S=T?T.stream:null;S&&(S.drmInfos=c,S.keyIds=d);let E=b?b.stream:null;E&&(E.drmInfos=c,E.keyIds=d,this.config_.disableIFrames||re.setBetterIFrameStream(E,u)),E&&!S&&(E.bandwidth=i),!E&&S&&(S.bandwidth=i);let w=T?T.stream.drmInfos:null,A=b?b.stream.drmInfos:null,x=b?b.getUris().sort().join(","):"",M=T?T.getUris().sort().join(","):"",C=[];S&&S.codecs&&C.push(S.codecs),E&&E.codecs&&C.push(E.codecs);let k=[x,M,C.sort()].join("-");if(S&&E&&!de.areDrmCompatible(w,A)){p.warning("Incompatible DRM info in HLS variant. Skipping.");continue}if(this.variantUriSet_.has(k)){p.debug("Skipping variant which only differs in text streams.");continue}v.assert(!S||S.type==m.AUDIO,"Audio parameter mismatch!"),v.assert(!E||E.type==m.VIDEO,"Video parameter mismatch!");let L={id:this.globalId_++,language:S?S.language:"und",disabledUntilTime:0,primary:!!S&&S.primary||!!E&&E.primary,audio:S,video:E,bandwidth:i,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]};_.push(L),this.variantUriSet_.add(k)}return _}parseClosedCaptions_(e){let t=he.filterTagsByType(e,"CLOSED-CAPTIONS");this.needsClosedCaptionsDetection_=t.length==0;for(let i of t){v.assert(i.name=="EXT-X-MEDIA","Should only be called on media tags!");let r=i.getAttributeValue("LANGUAGE"),s=this.getLanguage_(r);if(!r){let o=i.getAttributeValue("NAME");o&&(s=o)}let n=i.getRequiredAttrValue("GROUP-ID"),a=i.getRequiredAttrValue("INSTREAM-ID").replace("SERVICE","svc");this.groupIdToClosedCaptionsMap_.get(n)||this.groupIdToClosedCaptionsMap_.set(n,new Map),this.groupIdToClosedCaptionsMap_.get(n).set(a,s)}}createStreamInfoFromMediaTags_(e,t,i=!0){let r=[],s=[],n=new Map;for(let L of e){v.assert(L.name=="EXT-X-MEDIA","Should only be called on media tags!");let V=++this.globalId_,ee=()=>vt.FAKE_MUXED_URL_+V,oe=i?L.getRequiredAttrValue("URI"):L.getAttributeValue("URI")||ee(),le=L.getRequiredAttrValue("GROUP-ID");r.push(oe),s.push(le),n.set(le,oe);let G=L.getAttributeValue("PATHWAY-ID");G&&t.set(le,G)}let a=s.sort().join(","),o=e[0],c="",d=this.getType_(o);if(d==R.ContentType.TEXT&&(c=o.getAttributeValue("CODECS")||""),!c){for(let L of s)if(this.groupIdToCodecsMap_.has(L)){c=this.groupIdToCodecsMap_.get(L);break}}let u=he.getSupplementalCodecs(o),m=r.sort().join(","),f=m;if(d=="audio"&&a&&(f+=a),this.uriToStreamInfosMap_.has(f))return this.uriToStreamInfosMap_.get(f);let g=this.globalId_++;if(this.contentSteeringManager_)for(let[L,V]of n){let ee=t.get(L);ee&&this.contentSteeringManager_.addLocation(g,ee,V)}let _=o.getAttributeValue("LANGUAGE"),T=o.getAttributeValue("NAME"),S=o.getAttributeValue("DEFAULT")=="YES",E=d=="audio"?this.getChannelsCount_(o):null,w=d=="audio"?this.isSpatialAudio_(o):!1,A=o.getAttributeValue("CHARACTERISTICS"),M=o.getAttributeValue("FORCED")=="YES",C=d=="audio"?this.getSampleRate_(o):null,k=this.createStreamInfo_(g,r,c,d,_,S,T,E,null,A,M,C,w,u,m);return this.groupIdToStreamInfosMap_.has(a)?this.groupIdToStreamInfosMap_.get(a).push(k):this.groupIdToStreamInfosMap_.set(a,[k]),this.uriToStreamInfosMap_.set(f,k),k}async createStreamInfoFromImageTag_(e){v.assert(e.name=="EXT-X-IMAGE-STREAM-INF","Should only be called on image tags!");let t=R.ContentType.IMAGE,i=e.getRequiredAttrValue("URI"),r=e.getAttributeValue("CODECS","jpeg")||"",s=he.getSupplementalCodecs(e);if(this.uriToStreamInfosMap_.has(i))return this.uriToStreamInfosMap_.get(i);let n=e.getAttributeValue("LANGUAGE"),a=e.getAttributeValue("NAME"),o=e.getAttributeValue("CHARACTERISTICS"),c=i,d=this.createStreamInfo_(this.globalId_++,[i],r,t,n,!1,a,null,null,o,!1,null,!1,s,c),u=e.getAttributeValue("RESOLUTION");if(u){await d.stream.createSegmentIndex();let g=d.stream.segmentIndex.earliestReference().getTilesLayout();g&&(d.stream.width=Number(u.split("x")[0])*Number(g.split("x")[0]),d.stream.height=Number(u.split("x")[1])*Number(g.split("x")[1])),d.stream.closeSegmentIndex()}let m=e.getAttributeValue("BANDWIDTH");return m&&(d.stream.bandwidth=Number(m)),this.uriToStreamInfosMap_.set(i,d),d}createStreamInfoFromIframeTag_(e){v.assert(e.name=="EXT-X-I-FRAME-STREAM-INF","Should only be called on iframe tags!");let t=R.ContentType.VIDEO,i=e.getRequiredAttrValue("URI"),r=e.getAttributeValue("CODECS")||"",s=he.getSupplementalCodecs(e);if(r=="mjpg"&&(t=R.ContentType.IMAGE),this.uriToStreamInfosMap_.has(i))return this.uriToStreamInfosMap_.get(i);let n=e.getAttributeValue("LANGUAGE"),a=e.getAttributeValue("NAME"),o=e.getAttributeValue("CHARACTERISTICS"),c=i,d=this.createStreamInfo_(this.globalId_++,[i],r,t,n,!1,a,null,null,o,!1,null,!1,s,c);d.stream.isIframe=!0;let u=e.getAttributeValue("RESOLUTION"),[m,f]=u?u.split("x"):[null,null];d.stream.width=Number(m)||void 0,d.stream.height=Number(f)||void 0;let g=e.getAttributeValue("BANDWIDTH");return g&&(d.stream.bandwidth=Number(g)),this.uriToStreamInfosMap_.set(i,d),d}createStreamInfoFromVariantTags_(e,t,i,r){let s=this.globalId_++,n=[];for(let m of e){v.assert(m.name=="EXT-X-STREAM-INF","Should only be called on variant tags!");let f=m.getRequiredAttrValue("URI"),g=m.getAttributeValue("PATHWAY-ID");this.contentSteeringManager_&&g&&this.contentSteeringManager_.addLocation(s,g,f),n.push(f)}let a=n.sort().join(",")+t.sort().join(",");if(this.uriToStreamInfosMap_.has(a))return this.uriToStreamInfosMap_.get(a);let o=n.join(","),c=this.getClosedCaptions_(e[0],i),d=R.guessCodecs(i,t),u=this.createStreamInfo_(s,n,d,i,null,!1,null,null,c,null,!1,null,!1,r,o);return this.uriToStreamInfosMap_.set(a,u),u}createStreamInfo_(e,t,i,r,s,n,a,o,c,d,u,m,f,g,_){let T=this.makeStreamObject_(e,i,r,s,n,a,o,c,d,u,m,f,g,_);t.some(C=>C.startsWith(vt.FAKE_MUXED_URL_))&&(T.isAudioMuxedInVideo=!0,r==R.ContentType.AUDIO&&(T.mimeType="video/mp2t",this.setFullTypeForStream_(T)));let S={stream:T,type:r,redirectUris:[],getUris:()=>{},minTimestamp:0,maxTimestamp:0,mediaSequenceToStartTime:new Map,canSkipSegments:!1,canSkipDateRanges:!1,canBlockReload:!1,hasEndList:!1,firstSequenceNumber:-1,nextMediaSequence:-1,nextPart:-1},E=()=>this.contentSteeringManager_&&t.length>1?this.contentSteeringManager_.getLocations(e):S.redirectUris.concat(he.constructUris([this.masterPlaylistUri_],t,this.globalVariables_));S.getUris=E;let w=async C=>{let k=R.ContentType;try{let L=await C.promise;if(C.aborted)return;let V=L.uri;V!=L.originalUri&&(S.getUris().includes(V)||S.redirectUris.push(V));let ee=this.manifestTextParser_.parsePlaylist(L.data);if(ee.type!=Gi.MEDIA)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_PLAYLIST_HIERARCHY);let oe=he.filterTagsByName(ee.tags,"EXT-X-DEFINE"),le=this.parseMediaVariables_(oe,V),G=void 0,J=!1;(!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing||this.needsClosedCaptionsDetection_&&r==k.VIDEO&&!this.config_.hls.disableClosedCaptionsDetection)&&ee.segments.length>0&&(this.needsClosedCaptionsDetection_=!1,J=!0);let Z=!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing,ce=this.isDynamic_(),W=await this.convertParsedPlaylistIntoStreamInfo_(e,le,ee,E,i,r,s,n,a,o,c,d,u,m,f,g,_,G,J,Z);if(C.aborted)return;let z=W.stream;this.determineStartTime_(ee),this.isDynamic_()&&!ce&&this.changePresentationTimelineToLive_(ee),S.minTimestamp=W.minTimestamp,S.maxTimestamp=W.maxTimestamp,S.canSkipSegments=W.canSkipSegments,S.canSkipDateRanges=W.canSkipDateRanges,S.canBlockReload=W.canBlockReload,S.hasEndList=W.hasEndList,S.mediaSequenceToStartTime=W.mediaSequenceToStartTime,S.nextMediaSequence=W.nextMediaSequence,S.nextPart=W.nextPart,T.segmentIndex=z.segmentIndex,T.encrypted=z.encrypted,T.drmInfos=z.drmInfos,T.keyIds=z.keyIds,T.mimeType=z.mimeType,T.bandwidth=T.bandwidth||z.bandwidth,T.codecs=T.codecs||z.codecs,T.closedCaptions=T.closedCaptions||z.closedCaptions,this.propagateDetectedClosedCaptions_(),T.width=T.width||z.width,T.height=T.height||z.height,T.hdr=T.hdr||z.hdr,T.colorGamut=T.colorGamut||z.colorGamut,T.frameRate=T.frameRate||z.frameRate,T.language=="und"&&z.language!="und"&&(T.language=z.language),T.language=T.language||z.language,T.channelsCount=T.channelsCount||z.channelsCount,T.audioSamplingRate=T.audioSamplingRate||z.audioSamplingRate,this.setFullTypeForStream_(T),S.type==k.VIDEO&&W.type==k.AUDIO&&(!this.codecInfoInManifest_||O.RAW_FORMATS.includes(T.mimeType))&&this.reclassifyStreamInfo_(S,z),T.drmInfos.length&&this.playerInterface_.newDrmInfo(T);let ge=!1;if((!c&&T.closedCaptions||c&&T.closedCaptions&&c.size!=T.closedCaptions.size)&&(ge=!0),this.manifest_&&ge&&this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_),r==k.TEXT){let X=z.segmentIndex.earliestReference();X&&X.initSegmentReference&&(T.mimeType="application/mp4",this.setFullTypeForStream_(T))}let Y=dr.createQualityInfo(T);if(T.segmentIndex.forEachTopLevelReference(X=>{X.initSegmentReference&&(X.initSegmentReference.mediaQuality=Y)}),this.hasEnoughInfoToFinalizeStreams_())if(this.streamsFinalized_)this.finalizeStreams_([S]);else{this.streamsFinalized_=!0;let N=Array.from(this.uriToStreamInfosMap_.values()).filter(Ie=>Ie.stream.segmentIndex);this.finalizeStreams_(N),this.determineDuration_();let $=this.getUpdatePlaylistDelay_();$>0&&this.updatePlaylistTimer_.tickAfter($)}this.manifest_&&(this.manifest_.startTime=this.startTime_),await this.processDateRangeTags_(ee.tags,T.type,le,E)}catch(L){if(T.closeSegmentIndex(),L.code===h.Code.OPERATION_ABORTED)return;if(!this.playerInterface_.disableStream(T))throw L}},A=null,x,M=()=>{if(A)return A;if(T.isAudioMuxedInVideo){let C=new Ze([]);return T.segmentIndex=C,Promise.resolve()}return x=this.requestManifest_(S.getUris(),!0),A=new Promise(C=>{C(w(x))}),A};return T.createSegmentIndex=M,T.closeSegmentIndex=()=>{A&&!T.segmentIndex&&x.abort(),T.segmentIndex&&(T.segmentIndex.release(),T.segmentIndex=null),A=null},S}reclassifyStreamInfo_(e,t){let i=R.ContentType,r=e.stream,s=t.type,n=e.type;if(p.debug("Reclassifying HLS stream",r.id,"from",r.type,"to",s),this.isLive_()&&(this.mediaSequenceToStartTimeByType_.set(s,this.mediaSequenceToStartTimeByType_.get(n)),this.mediaSequenceToStartTimeByType_.set(n,new Map)),e.type=s,r.type=s,r.codecs=R.guessCodecsSafe(s,t.codecs.split(/\s*,\s*/))||"",this.setFullTypeForStream_(r),!!this.manifest_){for(let a of this.manifest_.variants)s==i.AUDIO&&a.video==r&&(a.video=null,a.audio||(a.audio=r,a.language=r.language));this.manifest_.variants=this.manifest_.variants.filter(a=>a.audio||a.video)}}getMinDuration_(){let e=1/0;for(let t of this.uriToStreamInfosMap_.values())t.stream.segmentIndex&&t.stream.type!="text"&&!t.stream.isAudioMuxedInVideo&&(e=Math.min(e,t.maxTimestamp));return e}getLiveDuration_(){let e=1/0,t=1/0;for(let i of this.uriToStreamInfosMap_.values())i.stream.segmentIndex&&i.stream.type!="text"&&!i.stream.isAudioMuxedInVideo&&(e=Math.min(e,i.maxTimestamp),t=Math.min(t,i.minTimestamp));return e-t}notifySegmentsForStreams_(e){let t=[];for(let i of e)i.segmentIndex&&i.segmentIndex.forEachTopLevelReference(r=>{t.push(r)});this.presentationTimeline_.notifySegments(t)}finalizeStreams_(e){if(!this.isDynamic_()){let o=this.getMinDuration_();for(let c of e)c.stream.segmentIndex.fit(0,o)}this.notifySegmentsForStreams_(e.map(o=>o.stream));let t=Array.from(this.uriToStreamInfosMap_.values()).filter(o=>o.stream.segmentIndex),i=R.ContentType,r=t.some(o=>o.stream.type==i.AUDIO),s=t.some(o=>o.stream.type==i.VIDEO),n=this.isLive_()&&!this.usesProgramDateTime_,a=!this.isDynamic_()&&this.usesProgramDateTime_&&!(r&&s);this.config_.hls.ignoreManifestProgramDateTime||n||a?this.syncStreamsWithSequenceNumber_(e,n):(this.syncStreamsWithProgramDateTime_(e),this.config_.hls.ignoreManifestProgramDateTimeForTypes.length>0&&this.syncStreamsWithSequenceNumber_(e))}ignoreManifestProgramDateTimeFor_(e){return this.config_.hls.ignoreManifestProgramDateTime?!0:this.config_.hls.ignoreManifestProgramDateTimeForTypes.includes(e)}hasEnoughInfoToFinalizeStreams_(){if(!this.manifest_||!this.manifest_.variants.length)return!1;let e=[],t=[];for(let i of this.manifest_.variants)i.video&&e.push(i.video),i.audio&&t.push(i.audio);return!(e.length>0&&!e.some(i=>i.segmentIndex)||t.length>0&&!t.some(i=>i.segmentIndex))}async convertParsedPlaylistIntoStreamInfo_(e,t,i,r,s,n,a,o,c,d,u,m,f,g,_,T,b,S=void 0,E=!0,w=!0){let A=n,x=i.segments||[],M=x.every(bi=>!!he.getFirstTagWithName(bi.tags,"EXT-X-GAP"));if(!x.length||M)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_EMPTY_MEDIA_PLAYLIST);this.determinePresentationType_(i),this.isDynamic_()&&this.determineLastTargetDuration_(i);let C=this.isLive_()?this.mediaSequenceToStartTimeByType_.get(n):new Map,{segments:k,bandwidth:L}=this.createSegments_(i,C,t,r,n,!0,null);!S&&n==R.ContentType.TEXT&&(S=await this.guessMimeType_(n,s,k),!s&&S=="application/mp4"&&k[0]&&!k[0].initSegmentReference&&(S="text/vtt"),!s&&S=="application/mp4"&&(E=!0,w=!0));let V=null,ee=null,oe=null,le=null,G=null;if(k.length>0&&E){let bi=n==R.ContentType.VIDEO&&!u&&!this.config_.hls.disableClosedCaptionsDetection,we=await this.getBasicInfoFromSegments_(k,bi);n!=we.type&&this.isLive_()&&(this.mediaSequenceToStartTimeByType_.set(we.type,this.mediaSequenceToStartTimeByType_.get(n)),this.mediaSequenceToStartTimeByType_.set(n,new Map)),n=we.type,we.type!=R.ContentType.VIDEO&&(a=we.language),d=we.channelCount,g=we.sampleRate,this.config_.disableText||(u=we.closedCaptions),ee=we.height,V=we.width,oe=we.videoRange,le=we.colorGamut,G=we.frameRate,w&&(S=we.mimeType,s=we.codecs)}S||(S=await this.guessMimeType_(n,s,k)),A==R.ContentType.VIDEO&&O.RAW_FORMATS.includes(S)&&(p.debug("Raw format",S,"is audio-only, not video."),n=R.ContentType.AUDIO);let{drmInfos:J,keyIds:Z,encrypted:ce,aesEncrypted:W}=await this.parseDrmInfo_(i,S,r,t);if(ce&&!J.length&&!W)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_KEYFORMATS_NOT_SUPPORTED);let z=this.makeStreamObject_(e,s,n,a,o,c,d,u,m,f,g,_,T,b);z.encrypted=ce&&!W,z.drmInfos=J,z.keyIds=Z,z.mimeType=S,L&&(z.bandwidth=L),he.getFirstTagWithName(i.tags,"EXT-X-I-FRAMES-ONLY")&&(z.isIframe=!0),this.setFullTypeForStream_(z),n==R.ContentType.VIDEO&&(V||ee||oe||le)&&this.addVideoAttributes_(z,V,ee,G,oe,null,le),this.isDynamic_()&&this.determineLastTargetDuration_(i);let ge=k[0].startTime,X=k[k.length-1].endTime,N=new Ze(k);z.segmentIndex=N,this.setProgramDateTimeRegionsFromIndex_(z,n);let $=he.getFirstTagWithName(i.tags,"EXT-X-SERVER-CONTROL"),Ie=$?$.getAttribute("CAN-SKIP-UNTIL")!=null:!1,tt=!1;Ie&&(tt=$?$.getAttribute("CAN-SKIP-DATERANGES")!=null:!1);let gt=$?$.getAttribute("CAN-BLOCK-RELOAD")!=null:!1,St=he.getFirstTagWithNameAsNumber(i.tags,"EXT-X-MEDIA-SEQUENCE",0),{nextMediaSequence:yt,nextPart:Ct}=this.getNextMediaSequenceAndPart_(St,k);return{stream:z,type:n,redirectUris:[],getUris:r,minTimestamp:ge,maxTimestamp:X,canSkipSegments:Ie,canSkipDateRanges:tt,canBlockReload:gt,hasEndList:!1,firstSequenceNumber:-1,nextMediaSequence:yt,nextPart:Ct,mediaSequenceToStartTime:C}}getNextMediaSequenceAndPart_(e,t,i=t.length){let s=e+i-1,n=-1;if(!t.length)return s++,{nextMediaSequence:s,nextPart:n};let a=t[t.length-1],o=a.partialReferences;return a.partialReferences.length?(n=o.length-1,o[o.length-1].isPreload()||(s++,n=0),{nextMediaSequence:s,nextPart:n}):(s++,a.hasByterangeOptimization()&&(n=0),{nextMediaSequence:s,nextPart:n})}getReferenceForMediaSequence_(e,t,i){if(!e||!t.has(i))return null;let r=t.get(i),s=e.find(r);if(s==null)return null;let n=e.get(s);return n&&n.startTime==r?n:null}makeStreamObject_(e,t,i,r,s,n,a,o,c,d,u,m,f,g){let _=this.guessMimeTypeBeforeLoading_(i,t)||this.guessMimeTypeFallback_(i),T=[];if(c)for(let w of c.split(","))T.push(w);let b,S=null;i==R.ContentType.TEXT?T.includes("public.accessibility.transcribes-spoken-dialog")&&T.includes("public.accessibility.describes-music-and-sound")?b=R.TextStreamKind.CLOSED_CAPTION:b=R.TextStreamKind.SUBTITLE:T.includes("public.accessibility.describes-video")&&(S=me.AccessibilityPurpose.VISUALLY_IMPAIRED),!T.length&&b===R.TextStreamKind.SUBTITLE&&T.push(R.TextStreamKind.SUBTITLE);let E={id:this.globalId_++,originalId:g,groupId:null,createSegmentIndex:()=>Promise.resolve(),segmentIndex:null,mimeType:_,codecs:t,supplementalCodecs:f,kind:i==R.ContentType.TEXT?R.TextStreamKind.SUBTITLE:void 0,encrypted:!1,drmInfos:[],keyIds:new Set,language:this.getLanguage_(r),originalLanguage:r,label:n,type:i,primary:s,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,frameRate:void 0,pixelAspectRatio:void 0,width:void 0,height:void 0,bandwidth:void 0,roles:T,forced:d,channelsCount:a,audioSamplingRate:u,spatialAudio:m,closedCaptions:o,hdr:void 0,colorGamut:void 0,videoLayout:void 0,tilesLayout:void 0,accessibilityPurpose:S,external:!1,fastSwitching:!1,fullMimeTypes:new Set,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1};return this.setFullTypeForStream_(E),E}async parseDrmInfo_(e,t,i,r){let s=new Map;if(!this.config_.ignoreDrmInfo&&e.segments)for(let d of e.segments){let u=he.filterTagsByName(d.tags,"EXT-X-KEY"),m=null;if(u.length){m=this.getInitSegmentReference_(e,d.tags,i,r);for(let f of u)s.set(f,m)}}let n=!1,a=!1,o=[],c=new Set;for(let[d,u]of s){let m=d,f=u,g=m.getRequiredAttrValue("METHOD");if(g!="NONE"){n=!0;let _=m.getAttributeValue("KEYFORMAT")||"identity",T=null;if(this.isAesMethod_(g)){a=!0;continue}else if(_=="identity")T=await this.identityDrmParser_(m,t,i,f,r);else{let b=this.keyFormatsToDrmParsers_.get(_);T=b?await b(m,t,f):null}if(T){if(T.keyIds)for(let b of T.keyIds)c.add(b);o.push(T)}else p.warning("Unsupported HLS KEYFORMAT",_)}}return{drmInfos:o,keyIds:c,encrypted:n,aesEncrypted:a}}parseAESDrmTag_(e,t,i,r){if(!window.crypto||!window.crypto.subtle)throw p.alwaysWarn("Web Crypto API is not available to decrypt AES. (Web Crypto only exists in secure origins like https)"),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.NO_WEB_CRYPTO_API);let s=e.getRequiredAttrValue("METHOD"),n=0,a,o=e.getAttributeValue("IV","");if(s==="AES-256-GCM"){if(o)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_KEY_IV_FOR_GCM)}else if(!o)n=he.getFirstTagWithNameAsNumber(t.tags,"EXT-X-MEDIA-SEQUENCE",0);else if(a=ne.fromHex(o.substr(2)),a.byteLength!=16)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_IV_LENGTH);let c=he.constructSegmentUris(i(),e.getRequiredAttrValue("URI"),r),d=c.sort().join(""),u=`${e.toString()}-${n}-${d}`;return this.aesKeyInfoMap_.getOrInsertComputed(u,()=>{let m={bitsKey:128,blockCipherMode:"CBC",iv:a,firstMediaSequenceNumber:n};switch(s){case"AES-256":m.bitsKey=256;break;case"AES-256-CTR":m.bitsKey=256,m.blockCipherMode="CTR";break;case"AES-256-GCM":m.bitsKey=256,m.blockCipherMode="GCM";break}return m.fetchKey=async()=>{let f=await this.aesKeyMap_.getOrInsertComputed(d,()=>{let _=K.RequestType.KEY,T=K.makeRequest(c,this.config_.retryParameters);return this.makeNetworkRequest_(T,_).promise});if(!f.data||f.data.byteLength!=m.bitsKey/8)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_KEY_LENGTH);let g={name:m.blockCipherMode==="CBC"?"AES-CBC":m.blockCipherMode==="GCM"?"AES-GCM":"AES-CTR",length:m.bitsKey};m.cryptoKey=await window.crypto.subtle.importKey("raw",f.data,g,!0,["decrypt"]),m.fetchKey=void 0},m})}determineStartTime_(e){if(this.startTime_!=null)return;let t=he.getFirstTagWithName(e.tags,"EXT-X-START");t&&(this.startTime_=Number(t.getRequiredAttrValue("TIME-OFFSET")))}determinePresentationType_(e){let t=vt.PresentationType_,i=he.getFirstTagWithName(e.tags,"EXT-X-PLAYLIST-TYPE"),r=he.getFirstTagWithName(e.tags,"EXT-X-ENDLIST"),s=i&&i.value=="VOD"||r,n=i&&i.value=="EVENT"&&!s;s?this.setPresentationType_(t.VOD):!s&&!n?this.setPresentationType_(t.LIVE):this.setPresentationType_(t.EVENT)}determineLastTargetDuration_(e){let t=1/0,i=e.segments;if(i.length){let o=i.length-1;for(;o>=0;){let c=i[o],d=he.getFirstTagWithName(c.tags,"EXTINF");if(d){t=he.getExtinfDuration(d);break}o--}}let r=this.getRequiredTag_(e.tags,"EXT-X-TARGETDURATION"),s=Number(r.value),n=he.getFirstTagWithName(e.tags,"EXT-X-PART-INF");n&&(this.partialTargetDuration_=Number(n.getRequiredAttrValue("PART-TARGET")));let a=he.getFirstTagWithName(e.tags,"EXT-X-SERVER-CONTROL");if(this.lowLatencyMode_&&this.partialTargetDuration_)this.lowLatencyByterangeOptimization_?this.partialTargetDuration_*5<=t?this.lastTargetDuration_=Math.min(this.partialTargetDuration_,this.lastTargetDuration_):this.lastTargetDuration_=Math.min(t,this.lastTargetDuration_):this.lastTargetDuration_=Math.min(this.partialTargetDuration_,this.lastTargetDuration_),this.lowLatencyPresentationDelay_=a?Number(a.getRequiredAttrValue("PART-HOLD-BACK")):0;else{this.lastTargetDuration_=Math.min(t,this.lastTargetDuration_);let o=a?a.getAttribute("HOLD-BACK"):null;this.presentationDelay_=o?Number(o.value):0}this.maxTargetDuration_=Math.max(s,this.maxTargetDuration_)}changePresentationTimelineToLive_(e){let t=0;if(this.config_.defaultPresentationDelay)t=this.config_.defaultPresentationDelay;else if(this.lowLatencyPresentationDelay_)t=this.lowLatencyPresentationDelay_;else if(this.presentationDelay_)t=this.presentationDelay_;else{let i=e.segments.length,r=Math.min(i,this.config_.hls.liveSegmentsDelay);for(let s=i-r;s<i;s++){let n=he.getFirstTagWithName(e.segments[s].tags,"EXTINF");n?t+=he.getExtinfDuration(n):t+=this.maxTargetDuration_}}this.startTime_&&this.startTime_<0&&(t=Math.min(-this.startTime_,t),this.startTime_+=t),this.presentationTimeline_.setPresentationStartTime(0),this.presentationTimeline_.setDelay(t),this.presentationTimeline_.setStatic(!1)}getInitSegmentReference_(e,t,i,r){let s=he.getFirstTagWithName(t,"EXT-X-MAP");if(!s)return null;let n=s.getRequiredAttrValue("URI"),a=he.constructSegmentUris(i(),n,r),o=[a.toString(),s.getAttributeValue("BYTERANGE","")].join("-");return this.mapTagToInitSegmentRefMap_.getOrInsertComputed(o,()=>{v.assert(s,"mapTag should be non-null");let c,d,u=!1;for(let m of t)if(m.name=="EXT-X-KEY"){let f=m.getRequiredAttrValue("METHOD");this.isAesMethod_(f)&&m.id<s.id?(u=!1,c=this.parseAESDrmTag_(m,e,i,r)):u=f!="NONE"}else m.name=="EXT-X-BYTERANGE"&&m.id<s.id&&(d=m);return this.createInitSegmentReference_(a,s,d,c,u)})}createInitSegmentReference_(e,t,i,r,s){let n=0,a=null,o=t.getAttributeValue("BYTERANGE");if(!o&&i&&(o=i.value),o){let d=o.split("@"),u=Number(d[0]);if(n=Number(d[1]),a=n+u-1,r){let m=a+1-n;m%16&&(a+=16-m%16)}}return new Tt(()=>e,n,a,null,null,null,r,s)}createSegmentReference_(e,t,i,r,s,n,a,o,c,d){let u=i.tags,m=he.getFirstTagWithName(u,"EXTINF"),f=0,g=0,_=null;i.partialSegments.length&&(this.manifest_.isLowLatency=!0);let T=null;if(!this.config_.hls.ignoreManifestProgramDateTime){let le=he.getFirstTagWithName(u,"EXT-X-PROGRAM-DATE-TIME");le&&le.value&&(T=I.parseDate(le.value),v.assert(T!=null,"EXT-X-PROGRAM-DATE-TIME format not valid"),this.usesProgramDateTime_=!0)}let b=Te.Status.AVAILABLE;if(he.getFirstTagWithName(u,"EXT-X-GAP")&&(this.manifest_.gapCount++,b=Te.Status.MISSING),!m){if(i.partialSegments.length==0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_REQUIRED_TAG_MISSING,"EXTINF");if(!this.lowLatencyMode_)return null}let S=[],E=!1,w=null,A=!1,x=!1;if(this.lowLatencyMode_&&i.partialSegments.length){let le=e&&window.ReadableStream&&this.config_.hls.allowLowLatencyByteRangeOptimization,G=T;for(let J=0;J<i.partialSegments.length;J++){let Z=i.partialSegments[J],ce=J==0?t:S[S.length-1],W=J==0?r:ce.endTime,z=Number(Z.getAttributeValue("DURATION"))||this.partialTargetDuration_;if(!z)continue;let ge=W+z,Y=0,X=null;if(Z.name=="EXT-X-PRELOAD-HINT"){let yt=Z.getAttributeValue("BYTERANGE-START");Y=yt?Number(yt):0;let Ct=Z.getAttributeValue("BYTERANGE-LENGTH");Ct?X=Y+Number(Ct)-1:Y&&(X=Number.MAX_SAFE_INTEGER)}else{let yt=Z.getAttributeValue("BYTERANGE");[Y,X]=this.parseByteRange_(ce,yt)}let N=Z.getAttributeValue("URI");if(!N)continue;let $=Te.Status.AVAILABLE;Z.getAttributeValue("GAP")=="YES"&&(this.manifest_.gapCount++,$=Te.Status.MISSING,A=!0);let Ie=null,tt=()=>(Ie==null&&(v.assert(N,"Partial uri should be defined!"),Ie=he.constructSegmentUris(o(),N,s)),Ie);le&&Y>=0&&X!=null&&(w=tt,E=!0);let gt=new Te(W,ge,tt,Y,X,e,0,0,1/0,[],"",null,G,$,d);Z.name=="EXT-X-PRELOAD-HINT"&&(gt.markAsPreload(),x=!0),Z.getAttributeValue("INDEPENDENT")!="YES"&&J>0&>.markAsNonIndependent();let St=c;if(!St){if(S.length&&S[0].mimeType)St=S[0].mimeType;else if(N){let yt=ct.getExtension(N);St=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(a).get(yt)||null}}St&&(gt.mimeType=St,vt.MIME_TYPES_WITHOUT_INIT_SEGMENT_.has(St)&&(gt.initSegmentReference=null)),S.push(gt),G&&(G+=z)}}if(m){let le=he.getExtinfDuration(m);if(le==0)return null;f=r+le}else if(S.length)f=S[S.length-1].endTime;else return null;E&&(A||S[0].startByte!=0?(E=!1,w=null):S=[]);let M=he.getFirstTagWithName(u,"EXT-X-BYTERANGE");M?[g,_]=this.parseByteRange_(t,M.value):S.length&&(g=S[0].startByte,_=S[S.length-1].endByte);let C="",k=null;if(a==R.ContentType.IMAGE){C="1x1";let le=he.getFirstTagWithName(u,"EXT-X-TILES");if(le){C=le.getRequiredAttrValue("LAYOUT");let G=le.getAttributeValue("DURATION");G&&(k=Number(G))}}let L=null,V=()=>w?w():(L==null&&(L=he.constructSegmentUris(o(),i.verbatimSegmentUri,s)),L||[]),ee=S.length>0&&!!i.verbatimSegmentUri,oe=new Te(r,f,V,g,_,e,0,0,1/0,S,C,k,T,b,d,ee);return c&&(oe.mimeType=c,vt.MIME_TYPES_WITHOUT_INIT_SEGMENT_.has(c)&&(oe.initSegmentReference=null)),E&&(this.lowLatencyByterangeOptimization_=!0,oe.markAsByterangeOptimization(),x&&oe.markAsPreload()),oe}parseByteRange_(e,t){let i=0,r=null;if(t){let s=t.split("@"),n=Number(s[0]);s[1]?i=Number(s[1]):(v.assert(e,"Cannot refer back to previous HLS segment!"),i=e.endByte+1),r=i+n-1}return[i,r]}async processDateRangeTags_(e,t,i,r){let s=R.ContentType;if(t!=s.VIDEO&&t!=s.AUDIO)return;let n=this.presentationTimeline_.getInitialProgramDateTime();if(n==null||this.ignoreManifestProgramDateTimeFor_(t))return;let a=he.filterTagsByName(e,"EXT-X-DATERANGE");a=a.filter(c=>c.getAttribute("START-DATE")!=null).sort((c,d)=>{let u=c.getRequiredAttrValue("START-DATE"),m=d.getRequiredAttrValue("START-DATE");return u<m?-1:u>m?1:0});let o=[];for(let c=0;c<a.length;c++){let d=a[c];try{let u=d.getRequiredAttrValue("START-DATE"),m=I.parseDate(u);if(isNaN(m))continue;v.assert(m!=null,"Start date should not be null!");let f=Math.max(0,m-n),g=null,_=d.getAttributeValue("END-DATE");if(_){let A=I.parseDate(_);if(!isNaN(A)&&(v.assert(A!=null,"End date should not be null!"),g=A-n,g<0))continue}if(g==null){let A=d.getAttributeValue("DURATION")||d.getAttributeValue("PLANNED-DURATION");if(A){let x=parseFloat(A);if(isNaN(x)||(g=f+x),m-n+x<0)continue}}let T=d.getAttributeValue("CLASS")||"com.apple.quicktime.HLS",b=d.getAttributeValue("END-ON-NEXT")=="YES";if(g==null&&b){for(let A=c+1;A<a.length;A++){let x=a[A].getAttributeValue("CLASS")||"com.apple.quicktime.HLS";if(T!=x)continue;let M=a[A].getRequiredAttrValue("START-DATE"),C=I.parseDate(M);if(!isNaN(C)&&C&&C>m){g=Math.max(0,C-n);break}}if(g==null)continue}let S=["CLASS","START-DATE","END-DATE","DURATION","END-ON-NEXT"],E=[];for(let A of d.attributes){if(S.includes(A.name))continue;let x=he.variableSubstitution(A.value,i);(A.name=="X-ASSET-URI"||A.name=="X-ASSET-LIST")&&(x=he.constructSegmentUris(r(),A.value,i)[0]);let M={key:A.name,description:"",data:x,mimeType:null,pictureType:null};E.push(M)}let w={schemeIdUri:T,value:"",startTime:f,endTime:g!=null?g:1/0,id:d.getRequiredAttrValue("ID"),timescale:1,eventNode:null,urlParams:void 0,values:E};if(this.playerInterface_.onTimelineRegionAdded(w),E.length>1){let A=this.playerInterface_.onMetadata(T,f,g,E),x=!1,M=E.find(C=>C.key=="CUE")||E.find(C=>C.key=="X-CUE");if(M&&M.data.includes("PRE")&&(x=!0),g!=null&&!x){let C;this.manifest_.startTime!=null?C=this.manifest_.startTime:this.isDynamic_()?C=this.manifest_.presentationTimeline.getSeekRangeEnd():C=this.manifest_.presentationTimeline.getSeekRangeStart(),x=f<=C&&g>=C}x&&o.push(A)}}catch(u){p.warning("Ignoring DATERANGE with errors",d.toString())}}o.length&&await Promise.all(o)}createSegments_(e,t,i,r,s,n,a){let o=e.segments;v.assert(o.length,"Playlist should have segments!");let c=null,d=null,u=null,m=null,f,g=he.getFirstTagWithNameAsNumber(e.tags,"EXT-X-DISCONTINUITY-SEQUENCE",-1),_=he.getFirstTagWithNameAsNumber(e.tags,"EXT-X-MEDIA-SEQUENCE",0),T=he.getFirstTagWithName(e.tags,"EXT-X-SKIP"),b=T?Number(T.getAttributeValue("SKIPPED-SEGMENTS")):0,S=_+b,E=0;this.isLive_()&&t.has(S)&&(E=t.get(S)),E===0&&this.isLive_()&&t.size>0&&!t.has(S)&&this.presentationTimeline_.getPresentationStartTime()!=null&&(E=this.presentationTimeline_.getSegmentAvailabilityStart());let w=[],A=[],x=null,M=null,C=[],k=0;if(!n&&a){k=o.length;for(let G=0;G<o.length;G++){let J=_+b+G;if(!t.has(J)){k=G;break}if(o[G].partialSegments.length){k=G;break}if(this.lowLatencyMode_){let Z=he.getFirstTagWithName(o[G].tags,"EXTINF");if(Z){let ce=he.getExtinfDuration(Z),W=this.getReferenceForMediaSequence_(a,t,J);if(W&&Math.abs(W.endTime-W.startTime-ce)>.001){k=G;break}}}}if(k>0){let G=_+b+k-1;x=this.getReferenceForMediaSequence_(a,t,G),x?(M=x,p.debug("HLS live update: reusing",k,"known segment references and building only the new tail.")):(p.debug("HLS live update: full playlist rebuild selected for overlap recovery."),k=0)}}let L=M;!L&&a&&(L=this.getReferenceForMediaSequence_(a,t,_+b)||a.get(a.getNumEvicted()+a.getNumReferences()-1));let V=G=>{let J=ct.getExtension(G);if(!J)return null;let ce=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(s).get(J);return ce||(ce=vt.RAW_FORMATS_TO_MIME_TYPES_.get(J)),ce};for(let G=0;G<o.length;G++){let J=o[G],Z=he.getFirstTagWithName(J.tags,"EXT-X-MAP");Z&&Z.id!==d&&(c=this.getInitSegmentReference_(e,J.tags,r,i),d=Z.id);let ce=J.verbatimSegmentUri,W="";ce&&(W=ct.getExtension(ce)),W!==m&&(u=V(ce),m=W);let z=G==0?E:x.endTime;S=_+b+G,he.getFirstTagWithName(J.tags,"EXT-X-DISCONTINUITY")&&(g++,G>=k&&x&&x.initSegmentReference&&(x.initSegmentReference.boundaryEnd=z));for(let N of J.tags)N.name=="EXT-X-KEY"&&(this.isAesMethod_(N.getRequiredAttrValue("METHOD"))?f=this.parseAESDrmTag_(N,e,r,i):f=void 0);if(G<k)continue;let Y=n||!t.has(S);t.set(S,z);let X=this.createSegmentReference_(c,x,J,z,i,e,s,r,u,f);if(X){let N=he.getFirstTagWithNameAsNumber(J.tags,"EXT-X-BITRATE");if(N)C.push({bitrate:N,duration:X.endTime-X.startTime}),X.bandwidth=N;else if(X.endByte){let $=X.getSize();if($){let Ie=X.endTime-X.startTime,tt=$*8/Ie/1e3;C.push({bitrate:tt,duration:Ie}),X.bandwidth=tt}}else if(C.length){let $=C[C.length-1];$.duration+=X.endTime-X.startTime,X.bandwidth=$.bitrate}if(X.bandwidth)for(let $ of X.partialReferences)$.bandwidth=X.bandwidth;x=X,X.discontinuitySequence=g,this.ignoreManifestProgramDateTimeFor_(s)&&this.minSequenceNumber_!=null&&S<this.minSequenceNumber_||(w.push(X),(Y||!n)&&A.push(X))}}let ee;if(C.length){let G=C.reduce((J,Z)=>J+Z.duration,0);ee=Math.round(C.reduce((J,Z)=>J+Z.bitrate*Z.duration,0)/G*1e3)}let oe=!!(M!=null&&M.syncTime)||w.some(G=>G.syncTime!=null);if(oe)for(let G=0;G<w.length;G++){let J=w[G];if(J.syncTime!=null)continue;let Z=0,ce=G,W=()=>{let X=w[ce];if(X){if(X.syncTime!=null)return X.syncTime+Z;Z-=X.endTime-X.startTime,ce+=1}return null},z=0,ge=G,Y=()=>{let X=w[ge];if(X){if(X!=J&&(z+=X.endTime-X.startTime),X.syncTime!=null)return X.syncTime+z;ge-=1}else if(M&&M.syncTime!=null)return M.syncTime+(M.endTime-M.startTime)+z;return null};for(;J.syncTime==null;)J.syncTime=Y(),J.syncTime==null&&(J.syncTime=W())}if(oe){let G=0,J=M;if(L&&L.syncTime!=null){let Z=this.realProgramDateTimeByReference_.get(L);Z!=null&&(G=Z-L.syncTime)}for(let Z of w){if(Z.syncTime!=null){if(this.realProgramDateTimeByReference_.set(Z,Z.syncTime),J&&J.syncTime!=null&&J.discontinuitySequence!=Z.discontinuitySequence){let W=J.syncTime+(J.endTime-J.startTime),ge=Z.syncTime-W-G;Math.abs(ge)>1&&(G+=ge)}Z.syncTime-=G}let ce=Z.syncTime;for(let W of Z.partialReferences)W.syncTime=ce,ce+=W.endTime-W.startTime;J=Z}}let le=this.lowestSyncTime_;if(oe&&le!=1/0&&!this.ignoreManifestProgramDateTimeFor_(s))for(let G of w)G.syncAgainst(le);return{segments:n?w:A,totalCount:k+w.length,bandwidth:ee}}setProgramDateTimeRegionsFromIndex_(e,t){if(t!=R.ContentType.VIDEO||this.ignoreManifestProgramDateTimeFor_(t)||!e.segmentIndex)return;let i=[],r=null;for(let s of e.segmentIndex){if(!s||s.syncTime==null)continue;let n=this.realProgramDateTimeByReference_.get(s);if(n==null)continue;let a=n-s.syncTime;(r==null||Math.abs(a-r)>.001)&&i.push({start:s.startTime,pdt:n}),r=a}this.presentationTimeline_.setProgramDateTimeRegions(i)}guessMimeTypeBeforeLoading_(e,t){if(e==R.ContentType.TEXT){if(t=="vtt"||t=="wvtt")return"text/vtt";if(t&&t!=="")return"application/mp4"}return e==R.ContentType.IMAGE&&(!t||t=="jpeg")?"image/jpeg":e==R.ContentType.AUDIO&&t=="mp4a.40.34"?"audio/mpeg":t=="mjpg"?"application/mp4":null}guessMimeTypeFallback_(e){return e==R.ContentType.TEXT?"text/vtt":vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(e).get("mp4")}getAvailableSegment_(e){v.assert(e.length,"Should have segments!");let t=this.isLive_()?Math.trunc((e.length-1)/2):0,i=e[t];for(;i.getStatus()==Te.Status.MISSING&&t+1<e.length;)t++,i=e[t];return{segment:i,segmentIndex:t}}async guessMimeType_(e,t,i){let r=K.RequestType.SEGMENT,{segment:s}=this.getAvailableSegment_(i);if(s.status==Te.Status.MISSING)return this.guessMimeTypeFallback_(e);let n,a=s.getUris(),o=ct.getExtension(a[0]);if(o){let g=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(e).get(o);if(g||(g=vt.RAW_FORMATS_TO_MIME_TYPES_.get(o),g))return g}if(n=this.guessMimeTypeBeforeLoading_(e,t),n)return n;let c,d=K.AdvancedRequestType.MEDIA_SEGMENT,u=K.makeRequest(a,this.playerInterface_.getStreamingRetryParameters()),m;try{u.method="HEAD",m=await this.makeNetworkRequest_(u,r,{type:d}).promise,c=m.headers["content-type"]}catch(f){f&&(f.code==h.Code.HTTP_ERROR||f.code==h.Code.BAD_HTTP_STATUS)&&(u.method="GET",this.config_.hls.allowRangeRequestsToGuessMimeType&&(u.headers.Range="bytes=0-0"),m=await this.makeNetworkRequest_(u,r,{type:d}).promise,c=m.headers["content-type"])}return c&&(n=c.toLowerCase().split(";")[0],this.isGenericBinaryMimeType_(n)&&(m.data.byteLength||(u.method="GET",m=await this.makeNetworkRequest_(u,r,{type:d}).promise),mt.probe(D.toUint8(m.data))&&(n="video/mp2t")),!this.isGenericBinaryMimeType_(n))?n:this.guessMimeTypeFallback_(e)}isGenericBinaryMimeType_(e){return vt.GENERIC_BINARY_MIME_TYPES_.includes(e)}getRequiredTag_(e,t){let i=he.getFirstTagWithName(e,t);if(!i)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_REQUIRED_TAG_MISSING,t);return i}addVideoAttributes_(e,t,i,r,s,n,a){e&&(e.width=Number(t)||void 0,e.height=Number(i)||void 0,e.frameRate=r||void 0,e.hdr=s||void 0,e.videoLayout=n||void 0,e.colorGamut=a||void 0)}requestManifest_(e,t){let i=K.RequestType.MANIFEST,r=K.makeRequest(e,this.config_.retryParameters),s=t?K.AdvancedRequestType.MEDIA_PLAYLIST:K.AdvancedRequestType.MASTER_PLAYLIST;return this.makeNetworkRequest_(r,i,{type:s})}async onUpdate_(){if(p.info("Updating manifest..."),v.assert(this.getUpdatePlaylistDelay_()>0,"We should only call |onUpdate_| when we are suppose to be updating."),!!this.playerInterface_){try{let e=Date.now();await this.update();let t=Date.now();if(this.isDynamic_()){let i=(t-e)/1e3;this.averageUpdateDuration_.sample(1,i);let r=this.config_.updatePeriod>0?this.config_.updatePeriod:this.getUpdatePlaylistDelay_(),s=Math.max(0,r-this.averageUpdateDuration_.getEstimate());isFinite(s)?this.updatePlaylistTimer_.tickAfter(s):this.updatePlaylistTimer_.tickAfter(1)}}catch(e){if(!this.playerInterface_)return;if(v.assert(e instanceof h,"Should only receive a Shaka error"),this.config_.raiseFatalErrorOnManifestUpdateRequestFailure){this.playerInterface_.onError(e);return}e.severity=h.Severity.RECOVERABLE,this.playerInterface_.onError(e),this.updatePlaylistTimer_.tickAfter(.1)}this.playerInterface_&&this.playerInterface_.onManifestUpdated()}}isDynamic_(){let e=vt.PresentationType_;return this.presentationType_!=e.VOD}isLive_(){let e=vt.PresentationType_;return this.presentationType_==e.LIVE}getUpdatePlaylistDelay_(){return this.lastTargetDuration_}setPresentationType_(e){this.presentationType_=e,this.presentationTimeline_&&this.presentationTimeline_.setStatic(!this.isDynamic_()),this.isDynamic_()||this.updatePlaylistTimer_.stop()}makeNetworkRequest_(e,t,i){if(!this.operationManager_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);i||(i={}),i.isPreload=this.isPreloadFn_();let r=this.playerInterface_.networkingEngine.request(t,e,i);return this.operationManager_.manage(r),r}isAesMethod_(e){return e=="AES-128"||e=="AES-256"||e=="AES-256-CTR"||e=="AES-256-GCM"}async fairplayDrmParser_(e,t,i){if(t=="video/mp2t")throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);if(de.isMediaKeysPolyfilled("apple"))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED);let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("FairPlay in HLS is only supported with [",s.join(", "),"], not",r),null;let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=R.createDrmInfo("com.apple.fps",n,null,a),c=ur.defaultGetKeyId(a);return!c&&i&&(c=await this.getKeyIdFromInitSegment_(i)),c&&o.keyIds.add(c),o}widevineDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("Widevine in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=a.split("?")[0],d=this.psshToInitData_.getOrInsertComputed(c,()=>D.toUint8(o.data)),u=R.createDrmInfo("com.widevine.alpha",n,[{initDataType:"cenc",initData:d}],void 0,o.typeInfoList),m=e.getAttributeValue("KEYID");if(m){let f=m.toLowerCase();v.assert(f.startsWith("0x"),"Incorrect KEYID format!"),u.keyIds.add(f.substr(2))}return Promise.resolve(u)}playreadyDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("PlayReady in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=D.toUint8(o.data),d=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]),u=new Set,f=ti.createPssh(c,d,u,0),g=R.createDrmInfo("com.microsoft.playready",n,[{initDataType:"cenc",initData:f}],void 0,o.typeInfoList),_=I.parseXmlString(["<PLAYREADY>",ne.toBase64(c),"</PLAYREADY>"].join(`
|
|
707
|
-
`));return _&&(g.licenseServerUri=Ri.getLicenseUrl(_)),Promise.resolve(g)}wiseplayDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("WisePlay in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=a.split("?")[0],d=this.psshToInitData_.getOrInsertComputed(c,()=>
|
|
706
|
+
*/var vt=class vt{constructor(){l(this,"playerInterface_");l(this,"config_");l(this,"globalId_");l(this,"globalVariables_");l(this,"groupIdToStreamInfosMap_");l(this,"mediaSequenceToStartTimeByType_");l(this,"keyFormatsToDrmParsers_");l(this,"variantUriSet_");l(this,"uriToStreamInfosMap_");l(this,"presentationTimeline_");l(this,"masterPlaylistUri_");l(this,"manifestTextParser_");l(this,"minSequenceNumber_");l(this,"lowestSyncTime_");l(this,"realProgramDateTimeByReference_");l(this,"usesProgramDateTime_");l(this,"streamsFinalized_");l(this,"codecInfoInManifest_");l(this,"updatePlaylistTimer_");l(this,"presentationType_");l(this,"manifest_");l(this,"maxTargetDuration_");l(this,"lastTargetDuration_");l(this,"partialTargetDuration_");l(this,"presentationDelay_");l(this,"lowLatencyPresentationDelay_");l(this,"operationManager_");l(this,"groupIdToClosedCaptionsMap_");l(this,"groupIdToCodecsMap_");l(this,"mapTagToInitSegmentRefMap_");l(this,"aesKeyInfoMap_");l(this,"aesKeyMap_");l(this,"identityKeyMap_");l(this,"initSegmentToKidMap_");l(this,"lowLatencyMode_");l(this,"lowLatencyByterangeOptimization_");l(this,"averageUpdateDuration_");l(this,"contentSteeringManager_");l(this,"needsClosedCaptionsDetection_");l(this,"eventManager_");l(this,"mediaElement_");l(this,"startTime_");l(this,"isPreloadFn_");l(this,"psshToInitData_");l(this,"chapterUris_");l(this,"chapterStreamsMap_");this.playerInterface_=null,this.config_=null,this.globalId_=1,this.globalVariables_=new Map,this.groupIdToStreamInfosMap_=new Map,this.mediaSequenceToStartTimeByType_=new Map;let e=R.ContentType;this.mediaSequenceToStartTimeByType_.set(e.VIDEO,new Map),this.mediaSequenceToStartTimeByType_.set(e.AUDIO,new Map),this.mediaSequenceToStartTimeByType_.set(e.TEXT,new Map),this.mediaSequenceToStartTimeByType_.set(e.IMAGE,new Map),this.keyFormatsToDrmParsers_=new Map().set("com.apple.streamingkeydelivery",(t,i,r)=>this.fairplayDrmParser_(t,i,r)).set("urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",(t,i,r)=>this.widevineDrmParser_(t,i,r)).set("com.microsoft.playready",(t,i,r)=>this.playreadyDrmParser_(t,i,r)).set("urn:uuid:3d5e6d35-9b9a-41e8-b843-dd3c6e72c42c",(t,i,r)=>this.wiseplayDrmParser_(t,i,r)),this.variantUriSet_=new Set,this.uriToStreamInfosMap_=new Map,this.presentationTimeline_=null,this.masterPlaylistUri_="",this.manifestTextParser_=new Yn,this.minSequenceNumber_=-1,this.lowestSyncTime_=1/0,this.realProgramDateTimeByReference_=new WeakMap,this.usesProgramDateTime_=!1,this.streamsFinalized_=!1,this.codecInfoInManifest_=!1,this.updatePlaylistTimer_=new ae(()=>{if(this.mediaElement_&&!this.config_.continueLoadingWhenPaused&&(this.eventManager_.unlisten(this.mediaElement_,"timeupdate"),this.mediaElement_.paused)){this.eventManager_.listenOnce(this.mediaElement_,"timeupdate",()=>this.onUpdate_());return}this.onUpdate_()}),this.presentationType_=vt.PresentationType_.VOD,this.manifest_=null,this.maxTargetDuration_=0,this.lastTargetDuration_=1/0,this.partialTargetDuration_=0,this.presentationDelay_=0,this.lowLatencyPresentationDelay_=0,this.operationManager_=new fi,this.groupIdToClosedCaptionsMap_=new Map,this.groupIdToCodecsMap_=new Map,this.mapTagToInitSegmentRefMap_=new Map,this.aesKeyInfoMap_=new Map,this.aesKeyMap_=new Map,this.identityKeyMap_=new Map,this.initSegmentToKidMap_=new Map,this.lowLatencyMode_=!1,this.lowLatencyByterangeOptimization_=!1,this.averageUpdateDuration_=new er(5),this.contentSteeringManager_=null,this.needsClosedCaptionsDetection_=!0,this.eventManager_=new ue,this.mediaElement_=null,this.startTime_=null,this.isPreloadFn_=()=>!1,this.psshToInitData_=new Map,this.chapterUris_=[],this.chapterStreamsMap_=new Map}configure(e,t){let i=this.playerInterface_&&e.updatePeriod!=this.config_.updatePeriod&&e.updatePeriod>=0;this.config_=e,t&&(this.isPreloadFn_=t),this.contentSteeringManager_&&this.contentSteeringManager_.configure(this.config_),i&&this.manifest_&&this.manifest_.presentationTimeline.isDynamic()&&this.updatePlaylistTimer_.tickNow()}async start(e,t){v.assert(this.config_,"Must call configure() before start()!"),this.playerInterface_=t,this.lowLatencyMode_=t.isLowLatencyMode();let i=await this.requestManifest_([e]).promise;return this.masterPlaylistUri_=i.uri,v.assert(i.data,"Response data should be non-null!"),await this.parseManifest_(i.data),v.assert(this.manifest_,"Manifest should be non-null"),this.manifest_}stop(){this.updatePlaylistTimer_&&(this.updatePlaylistTimer_.stop(),this.updatePlaylistTimer_=null);let e=[];return this.operationManager_&&(e.push(this.operationManager_.destroy()),this.operationManager_=null),this.playerInterface_=null,this.config_=null,this.variantUriSet_.clear(),this.manifest_=null,this.uriToStreamInfosMap_.clear(),this.groupIdToStreamInfosMap_.clear(),this.groupIdToCodecsMap_.clear(),this.globalVariables_.clear(),this.mapTagToInitSegmentRefMap_.clear(),this.aesKeyInfoMap_.clear(),this.aesKeyMap_.clear(),this.identityKeyMap_.clear(),this.initSegmentToKidMap_.clear(),this.psshToInitData_.clear(),this.contentSteeringManager_&&this.contentSteeringManager_.destroy(),this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),Promise.all(e)}async update(){if(!this.isDynamic_())return;let e=[],i=Array.from(this.uriToStreamInfosMap_.values()).filter(n=>!n.stream.isAudioMuxedInVideo&&n.stream.segmentIndex);if(i.length===0){p.warning("No active streams found during update");return}this.lastTargetDuration_=1/0,this.manifest_.gapCount=0;for(let n of i)e.push(this.updateStream_(n));e.push(this.parseChapters_()),await Promise.all(e);let r=Array.from(this.chapterStreamsMap_.values());for(let n of r)this.manifest_.chapterStreams.includes(n)||this.manifest_.chapterStreams.push(n);this.notifySegmentsForStreams_(i.map(n=>n.stream));let s=i.some(n=>n.hasEndList==!1);i.length&&!s&&(this.setPresentationType_(vt.PresentationType_.VOD),this.determineDuration_()),s&&this.determineDuration_();for(let n of i)!n.stream.isAudioMuxedInVideo&&n.stream.segmentIndex&&!n.stream.segmentIndex.earliestReference()&&this.playerInterface_.disableStream(n.stream)}getMediaSequenceToStartTimeFor_(e){return this.isLive_()?this.mediaSequenceToStartTimeByType_.get(e.type):e.mediaSequenceToStartTime}async updateStream_(e){if(e.stream.isAudioMuxedInVideo)return;let t=[];for(let x of e.getUris()){let M=new Map;e.canBlockReload&&(e.nextMediaSequence>=0&&M.set("_HLS_msn",String(e.nextMediaSequence)),e.nextPart>=0&&M.set("_HLS_part",String(e.nextPart))),e.canSkipDateRanges?M.set("_HLS_skip","v2"):e.canSkipSegments&&M.set("_HLS_skip","YES"),t.push(fe.appendParams(x,M))}let i;try{i=await this.requestManifest_(t,!0).promise}catch(x){throw this.playerInterface_&&this.playerInterface_.disableStream(e.stream),x}if(!e.stream.segmentIndex)return;let r=this.manifestTextParser_.parsePlaylist(i.data);if(r.type!=Gi.MEDIA)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_PLAYLIST_HIERARCHY);let s=i.uri;s!=i.originalUri&&!e.getUris().includes(s)&&e.redirectUris.push(s);let n=he.filterTagsByName(r.tags,"EXT-X-DEFINE"),a=this.parseMediaVariables_(n,s),o=e.stream,c=this.getMediaSequenceToStartTimeFor_(e),{keyIds:d,drmInfos:u,encrypted:m,aesEncrypted:f}=await this.parseDrmInfo_(r,o.mimeType,e.getUris,a);!o.encrypted&&m&&!f&&(o.encrypted=!0),((x,M)=>x.size===M.size&&[...x].every(C=>M.has(C)))(o.keyIds,d)||(o.keyIds=d,o.drmInfos=u,this.playerInterface_.newDrmInfo(o));let _=i.uri!==i.originalUri,{segments:T,totalCount:b,bandwidth:S}=this.createSegments_(r,c,a,e.getUris,e.type,_,o.segmentIndex);S&&(o.bandwidth=S);let E=dr.createQualityInfo(o);for(let x of T)x.initSegmentReference&&(x.initSegmentReference.mediaQuality=E);if(T.length&&o.segmentIndex.mergeAndEvict(T,this.presentationTimeline_.getSegmentAvailabilityStart()),b){let x=he.getFirstTagWithNameAsNumber(r.tags,"EXT-X-MEDIA-SEQUENCE",0),M=he.getFirstTagWithName(r.tags,"EXT-X-SKIP"),C=M?Number(M.getAttributeValue("SKIPPED-SEGMENTS")):0,{nextMediaSequence:k,nextPart:D}=this.getNextMediaSequenceAndPart_(x,T,b);e.nextMediaSequence=k+C,e.nextPart=D;let V=c.get(x);o.segmentIndex.evict(V)}this.setProgramDateTimeRegionsFromIndex_(o,e.type);let w=o.segmentIndex.earliestReference();w&&(e.minTimestamp=w.startTime,T.length&&(e.maxTimestamp=T[T.length-1].endTime)),he.getFirstTagWithName(r.tags,"EXT-X-ENDLIST")&&(e.hasEndList=!0),this.determineLastTargetDuration_(r),this.processDateRangeTags_(r.tags,o.type,a,e.getUris)}onExpirationUpdated(e,t){}onInitialVariantChosen(e){}banLocation(e){this.contentSteeringManager_&&this.contentSteeringManager_.banLocation(e)}setMediaElement(e){this.mediaElement_=e}syncStreamsWithSequenceNumber_(e,t=!1){let i=this.minSequenceNumber_==-1;for(let r of e){let s=r.stream.segmentIndex;v.assert(s,"Only loaded streams should be synced");let n=this.getMediaSequenceToStartTimeFor_(r),a=s.earliestReference();if(a){Ve&&n.values().next().value!=a.startTime&&p.warning("Sequence number map is not ordered as expected!");for(let[o,c]of n)if(c==a.startTime){i&&(this.minSequenceNumber_=Math.max(this.minSequenceNumber_,o)),r.firstSequenceNumber=o;break}}}if(!(this.minSequenceNumber_<0)){p.debug("Syncing HLS streams against base sequence number:",this.minSequenceNumber_);for(let r of e){if(!this.ignoreManifestProgramDateTimeFor_(r.type)&&!t)continue;let s=r.stream.segmentIndex;if(s){let n=this.minSequenceNumber_-r.firstSequenceNumber;if(n>0){s.dropFirstReferences(n);let a=s.earliestReference();if(a){let o=-a.startTime;r.stream.segmentIndex.offset(o),this.offsetStreamInfo_(r,o)}}}}}}syncStreamsWithProgramDateTime_(e){if(this.lowestSyncTime_==1/0)for(let i of e){let r=i.stream.segmentIndex;v.assert(r,"Only loaded streams should be synced");let s=r.earliestReference();s!=null&&s.syncTime!=null&&(this.lowestSyncTime_=Math.min(this.lowestSyncTime_,s.syncTime))}let t=this.lowestSyncTime_;if(t!=1/0){p.debug("Syncing HLS streams against base time:",t);for(let i of this.uriToStreamInfosMap_.values()){if(this.ignoreManifestProgramDateTimeFor_(i.type))continue;let r=i.stream.segmentIndex;if(r!=null){let s=r.earliestReference();if(!s)continue;if(s.syncTime==null)p.alwaysError("Missing EXT-X-PROGRAM-DATE-TIME for stream",i.getUris(),"Expect AV sync issues!");else{let a=s.syncTime-t-s.startTime;this.offsetStreamInfo_(i,a);for(let o of r)o.syncAgainst(t)}}}}}offsetStreamInfo_(e,t){if(Math.abs(t)<.001)return;e.minTimestamp+=t,e.maxTimestamp+=t,v.assert(e.maxTimestamp>=0,"Negative maxTimestamp after adjustment!");let i=this.getMediaSequenceToStartTimeFor_(e);for(let[r,s]of i)i.set(r,s+t);p.debug("Offset",t,"applied to",e.getUris())}async parseManifest_(e){let t=R.ContentType;v.assert(this.masterPlaylistUri_,"Master playlist URI must be set before calling parseManifest_!");let i=this.manifestTextParser_.parsePlaylist(e),r=he.filterTagsByName(i.tags,"EXT-X-DEFINE"),s=[],n=[],a=[];v.assert(this.presentationTimeline_==null,"Presentation timeline created early!"),this.presentationTimeline_=new xi(null,0),this.presentationTimeline_.setStatic(!0);let o=()=>[this.masterPlaylistUri_],c=null,d=new Map;if(this.manifest_={presentationTimeline:this.presentationTimeline_,variants:s,textStreams:n,imageStreams:a,chapterStreams:[],offlineSessionIds:[],sequenceMode:this.config_.hls.sequenceMode,ignoreManifestTimestampsInSegmentsMode:this.config_.hls.ignoreManifestTimestampsInSegmentsMode,type:me.HLS,serviceDescription:null,nextUrl:null,periodCount:1,gapCount:0,isLowLatency:!1,startTime:this.startTime_},i.type==Gi.MEDIA){this.needsClosedCaptionsDetection_=!1;let u=he.filterTagsByName(i.tags,"EXT-X-DEFINE");d=this.parseMediaVariables_(u,this.masterPlaylistUri_),c=t.VIDEO;let m="",f="",g="",_=null,T=null,b=new Map,S=!1,E=null,w=!1,A=!0,x="Media Playlist",M=this.masterPlaylistUri_,C=await this.convertParsedPlaylistIntoStreamInfo_(this.globalId_++,d,i,o,m,c,g,A,x,_,b,E,w,T,S,f,M);if(this.uriToStreamInfosMap_.set(this.masterPlaylistUri_,C),C.stream){let D=dr.createQualityInfo(C.stream);C.stream.segmentIndex.forEachTopLevelReference(V=>{V.initSegmentReference&&(V.initSegmentReference.mediaQuality=D)})}c=C.stream.type;let k=!0;(this.config_.disableAudio&&C.type=="audio"||this.config_.disableVideo&&C.type=="video"&&!C.stream.codecs.includes(","))&&(k=!1),k&&s.push({id:0,language:this.getLanguage_(g),disabledUntilTime:0,primary:!0,audio:C.type=="audio"?C.stream:null,video:C.type=="video"?C.stream:null,bandwidth:C.stream.bandwidth||0,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]}),this.config_.hls.chaptersUri&&!this.chapterUris_.includes(this.config_.hls.chaptersUri)&&this.chapterUris_.push(this.config_.hls.chaptersUri),await this.parseChapters_()}else{this.parseMasterVariables_(r);let u=he.filterTagsByName(i.tags,"EXT-X-MEDIA"),m=he.filterTagsByName(i.tags,"EXT-X-STREAM-INF"),f=he.filterTagsByName(i.tags,"EXT-X-IMAGE-STREAM-INF"),g=he.filterTagsByName(i.tags,"EXT-X-I-FRAME-STREAM-INF"),_=he.filterTagsByName(i.tags,"EXT-X-SESSION-KEY"),T=he.filterTagsByName(i.tags,"EXT-X-SESSION-DATA"),b=he.filterTagsByName(i.tags,"EXT-X-CONTENT-STEERING");this.chapterUris_=this.processSessionData_(T),this.config_.hls.chaptersUri&&!this.chapterUris_.includes(this.config_.hls.chaptersUri)&&this.chapterUris_.push(this.config_.hls.chaptersUri),await this.processContentSteering_(b),this.config_.ignoreSupplementalCodecs||(m.push(...this.createTagsWithSupplementalCodecs_(m,!0)),g.push(...this.createTagsWithSupplementalCodecs_(g,!1))),this.parseCodecs_(m),this.parseClosedCaptions_(u);let S=this.parseIFrames_(g);s=await this.createVariantsForTags_(m,_,u,o,this.globalVariables_,S),n=this.parseTexts_(u),[a]=await Promise.all([this.parseImages_(f,g),this.parseChapters_()])}if(!this.playerInterface_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);if(this.determineStartTime_(i),i.type==Gi.MEDIA){if(this.isDynamic_()){this.changePresentationTimelineToLive_(i);let m=this.getUpdatePlaylistDelay_();this.updatePlaylistTimer_.tickAfter(m)}let u=Array.from(this.uriToStreamInfosMap_.values());this.finalizeStreams_(u),this.determineDuration_(),v.assert(c,"mediaPlaylistType should be non-null"),await this.processDateRangeTags_(i.tags,c,d,o)}if(this.manifest_.variants=s,this.manifest_.textStreams=n,this.manifest_.imageStreams=a,this.manifest_.chapterStreams=Array.from(this.chapterStreamsMap_.values()),this.manifest_.startTime=this.startTime_,this.propagateDetectedClosedCaptions_(),!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing){let u=[];for(let m of this.manifest_.variants)m.audio&&m.audio.codecs===""&&u.push(m.audio.createSegmentIndex()),m.video&&m.video.codecs===""&&u.push(m.video.createSegmentIndex());await Promise.all(u)}this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_)}propagateDetectedClosedCaptions_(){if(this.groupIdToClosedCaptionsMap_.size)return;let e=new Map;for(let t of this.manifest_.variants)if(t.video&&t.video.closedCaptions)for(let[i,r]of t.video.closedCaptions)e.set(i,r);if(e.size)for(let t of this.manifest_.variants)t.video&&!t.video.closedCaptions&&(t.video.closedCaptions=new Map(e))}async getBasicInfoFromSegments_(e,t){let i=_t.getBasicInfoFromMimeType(this.config_.hls.mediaPlaylistFullMimeType);if(!e.length)return i;let{segment:r,segmentIndex:s}=this.getAvailableSegment_(e),n=r.getUris(),a=ct.getExtension(n[0]);if(a){let _=vt.RAW_FORMATS_TO_MIME_TYPES_.get(a);if(_)return _t.getBasicInfoFromMimeType(_)}let o=await Promise.all([this.getInfoFromSegment_(r.initSegmentReference,0),this.getInfoFromSegment_(r,s)]),c=o[1].mimeType,d=o[0].data,u=o[1].data,m=["mp4","mp4a","m4s","m4i","m4a","m4f","cmfa","mp4v","m4v","cmfv","fmp4"],f=["audio/mp4","video/mp4","video/iso.segment"],g=r.initSegmentReference||f.includes(c);if(!g&&mt.probe(U.toUint8(u))){let _=_t.getBasicInfoFromTs(u,this.config_.disableAudio,this.config_.disableVideo,this.config_.disableText);if(_)return _}else if(g||m.includes(a)){let _=_t.getBasicInfoFromMp4(d,u,this.config_.disableText);if(_){if(t&&!_.closedCaptions.size){let T=this.getClosedCaptionProbeSegments_(e,s),b=await this.probeClosedCaptionsFromSegments_(T,r.initSegmentReference,d);b&&(_.closedCaptions=b)}return _}}return c?_t.getBasicInfoFromMimeType(c):i}async probeClosedCaptionsFromSegments_(e,t,i){let r=e.shift();if(!r)return null;r.segment.initSegmentReference!=t&&(t=r.segment.initSegmentReference,i=(await this.getInfoFromSegment_(t,0)).data);let s=await this.getInfoFromSegment_(r.segment,r.segmentIndex),n=_t.getBasicInfoFromMp4(i,s.data,this.config_.disableText);return n&&n.closedCaptions.size?n.closedCaptions:this.probeClosedCaptionsFromSegments_(e,t,i)}getClosedCaptionProbeSegments_(e,t){let i=e.length-1,r=this.isLive_()?[Math.trunc(i*3/4),Math.trunc(i/4)]:[Math.trunc(i/2),i],s=[],n=e.map((a,o)=>({segment:a,segmentIndex:o})).filter(a=>a.segmentIndex!=t&&a.segment.getStatus()!=Te.Status.MISSING);for(let a of r)n.length&&(n.sort((o,c)=>Math.abs(o.segmentIndex-a)-Math.abs(c.segmentIndex-a)),s.push(n.shift()));return s}async getInfoFromSegment_(e,t){if(!e)return{mimeType:null,data:null};let i=K.RequestType.SEGMENT,r=ct.createSegmentRequest(e.getUris(),e.getStartByte(),e.getEndByte(),this.playerInterface_.getStreamingRetryParameters()),s=e instanceof Te?K.AdvancedRequestType.MEDIA_SEGMENT:K.AdvancedRequestType.INIT_SEGMENT,n=await this.makeNetworkRequest_(r,i,{type:s}).promise,a=n.data;e.aesKey&&(a=await _t.aesDecrypt(a,e.aesKey,t)),e instanceof Te?e.setSegmentData(a,!0):e.setSegmentData(a);let o=n.headers["content-type"];return o&&(o=o.split(";")[0].toLowerCase()),{mimeType:o,data:a}}determineDuration_(){if(v.assert(this.presentationTimeline_,"Presentation timeline not created!"),this.isLive_()){let e=this.getLiveDuration_()||0;isNaN(this.config_.availabilityWindowOverride)||(e=this.config_.availabilityWindowOverride),this.presentationTimeline_.setSegmentAvailabilityDuration(e)}else this.presentationTimeline_.setDuration(this.getMinDuration_());if(!this.presentationTimeline_.isStartTimeLocked())for(let e of this.uriToStreamInfosMap_.values()){if(!e.stream.segmentIndex||e.type!="audio"&&e.type!="video")continue;let t=e.stream.segmentIndex.earliestReference();if(t&&t.syncTime!=null){let i=t.syncTime;this.presentationTimeline_.setInitialProgramDateTime(i)}}this.presentationTimeline_.lockStartTime(),v.assert(!this.presentationTimeline_.usingPresentationStartTime(),"We should not be using the presentation start time in HLS!")}parseMasterVariables_(e){this.parseVariablesFromTags_(e,this.globalVariables_,this.masterPlaylistUri_)}parseMediaVariables_(e,t){let i=new Map;return this.parseVariablesFromTags_(e,i,t,!0),i}parseVariablesFromTags_(e,t,i,r=!1){let s;for(let n of e){let a=n.getAttributeValue("NAME"),o=n.getAttributeValue("VALUE"),c=n.getAttributeValue("QUERYPARAM");if(a&&o&&t.getOrInsert(a,o),c){s||(s=new URL(i).searchParams);let d=s.get(c);d&&!t.has(d)&&t.set(c,d)}if(r){let d=n.getAttributeValue("IMPORT");if(d){let u=this.globalVariables_.get(d);u&&t.set(d,u)}}}}groupTagsByKey_(e){let t={};for(let i of e){let r=i.getTagKey(!this.contentSteeringManager_);t[r]?t[r].push(i):t[r]=[i]}return t}createTagsWithSupplementalCodecs_(e,t){let i=[];for(let r of e){let s=he.getSupplementalCodecs(r);if(!s)continue;let n=r.attributes.map(a=>{let o=a.name,c=a.value;if(o=="CODECS"&&(c=s,t)){let d=a.value.split(",");if(d.length>1){let u=R.guessCodecsSafe(R.ContentType.AUDIO,d);u&&(c+=","+u)}}return new Fr(o,c)});i.push(new gr(r.id,r.name,n,null))}return i}parseCodecs_(e){let t=R.ContentType;for(let i of e){let r=i.getAttributeValue("AUDIO"),s=i.getAttributeValue("VIDEO"),n=i.getAttributeValue("SUBTITLES"),a=this.getCodecsForVariantTag_(i);if(n){let o=R.guessCodecsSafe(t.TEXT,a);v.assert(o!=null,"Text codecs should be valid."),this.groupIdToCodecsMap_.set(n,o),ye.remove(a,o)}if(r){let o=R.guessCodecsSafe(t.AUDIO,a);o||(o=this.config_.hls.defaultAudioCodec),this.groupIdToCodecsMap_.set(r,o)}if(s){let o=R.guessCodecsSafe(t.VIDEO,a);o||(o=this.config_.hls.defaultVideoCodec),this.groupIdToCodecsMap_.set(s,o)}}}processSessionData_(e){let t=[];for(let i of e){let r=i.getAttributeValue("DATA-ID"),s=i.getAttributeValue("URI"),n=i.getAttributeValue("LANGUAGE"),a=i.getAttributeValue("VALUE"),o=new Map().set("id",r);s&&o.set("uri",he.constructSegmentUris([this.masterPlaylistUri_],s,this.globalVariables_)[0]),n&&o.set("language",n),a&&o.set("value",a),r=="com.apple.hls.chapters"&&s&&t.push(o.get("uri"));let c=new L("sessiondata",o);this.playerInterface_&&this.playerInterface_.onEvent(c)}return t}async processContentSteering_(e){if(!this.playerInterface_||!this.config_)return;let t;for(let i of e){let r=i.getAttributeValue("PATHWAY-ID"),s=i.getAttributeValue("SERVER-URI");if(!(!r||!s)){this.contentSteeringManager_=new ns(this.playerInterface_),this.contentSteeringManager_.configure(this.config_),this.contentSteeringManager_.setBaseUris([this.masterPlaylistUri_]),this.contentSteeringManager_.setManifestType(me.HLS),this.contentSteeringManager_.setDefaultPathwayId(r),t=this.contentSteeringManager_.requestInfo(s);break}}await t}parseTexts_(e){let t=he.filterTagsByType(e,"SUBTITLES"),i=this.groupTagsByKey_(t),r=[];if(!this.config_.disableText)for(let n in i)try{r.push(this.createStreamInfoFromMediaTags_(i[n],new Map).stream)}catch(a){if(this.config_.hls.ignoreTextStreamFailures)continue;throw a}let s=R.ContentType.TEXT;for(let n of t){let a=n.getRequiredAttrValue("GROUP-ID"),o=this.groupIdToCodecsMap_.get(a);if(o){let c=this.groupIdToStreamInfosMap_.get(a);if(c)for(let d of c)d.stream.codecs=o,d.stream.mimeType=this.guessMimeTypeBeforeLoading_(s,o)||this.guessMimeTypeFallback_(s),this.setFullTypeForStream_(d.stream)}}return r.filter(n=>n)}setFullTypeForStream_(e){let t=new Set([O.getFullType(e.mimeType,e.codecs)]);e.segmentIndex&&e.segmentIndex.forEachTopLevelReference(i=>{i.mimeType&&t.add(O.getFullType(i.mimeType,e.codecs))}),e.fullMimeTypes=t}async parseImages_(e,t){let i=e.map(async s=>{if(this.config_.disableThumbnails)return null;try{return(await this.createStreamInfoFromImageTag_(s)).stream}catch(a){if(this.config_.hls.ignoreImageStreamFailures)return null;throw a}}).concat(t.map(s=>{if(this.config_.disableThumbnails)return null;try{let a=this.createStreamInfoFromIframeTag_(s),o=R.ContentType;return a.stream.type!==o.IMAGE?null:a.stream}catch(a){if(this.config_.hls.ignoreImageStreamFailures)return null;throw a}}));return(await Promise.all(i)).filter(s=>s)}async parseChapters_(){if(this.config_.disableChapters)return;let e=[];for(let t of this.chapterUris_)e.push(this.processChapters_(t));await Promise.all(e)}async processChapters_(e){let t=K.RequestType.SESSION_DATA,i=K.makeRequest([e],this.config_.retryParameters),r=await this.makeNetworkRequest_(i,t).promise,s=q.fromUTF8(r.data),n=JSON.parse(s),a=new Map;for(let o=0;o<n.length;o++){let c=n[o];if(!c.titles)continue;let d=[];if(c.images){for(let u of c.images)if(u.url){let m=he.constructSegmentUris([r.uri],u.url);for(let f of m){let g={type:u["image-category"],width:u["pixel-width"],height:u["pixel-height"],url:f};d.push(g)}}}for(let u of c.titles){let m={id:"",title:u.title,startTime:c["start-time"],endTime:c["start-time"],images:d};c.duration?m.endTime+=c.duration:o+1<n.length&&(m.endTime=n[o+1]["start-time"]),a.getOrInsertComputed(u.language,()=>[]).push(m)}}a.forEach((o,c)=>{let d=[];for(let f of o){let g=new Te(f.startTime,f.endTime,()=>[],0,null,null,0,0,1/0),_={title:f.title,images:f.images};g.setMetadata(_),d.push(g)}let u="text/plain",m=this.chapterStreamsMap_.getOrInsertComputed(c,()=>re.createStream({id:this.globalId_++,mimeType:u,kind:"",language:c,originalLanguage:c,type:R.ContentType.CHAPTER,external:!0}));m.segmentIndex?m.segmentIndex.mergeAndEvict(d,this.presentationTimeline_.getSegmentAvailabilityStart()):m.segmentIndex=new Ze(d)})}createStreamInfosFromMediaTags_(e,t){e=e.filter(r=>{let s=r.getAttributeValue("URI")||"",n=r.getAttributeValue("TYPE");return n!="SUBTITLES"&&(s!=""||n=="AUDIO"||n=="VIDEO")});let i=this.groupTagsByKey_(e);for(let r in i)this.createStreamInfoFromMediaTags_(i[r],t,!1)}parseIFrames_(e){return e.map(i=>{let r=this.createStreamInfoFromIframeTag_(i),s=R.ContentType;return r.stream.type!==s.VIDEO?null:r.stream}).filter(i=>i)}async createVariantsForTags_(e,t,i,r,s,n){let a=[],o=new Set;if(!this.config_.ignoreDrmInfo&&t.length>0)for(let u of t){let m=u.getRequiredAttrValue("METHOD"),f=u.getAttributeValue("KEYFORMAT")||"identity",g=null;if(m!="NONE"){if(this.isAesMethod_(m)){let _=he.constructSegmentUris(r(),u.getRequiredAttrValue("URI"),s),T=_.sort().join("");this.aesKeyMap_.getOrInsertComputed(T,()=>{let b=K.RequestType.KEY,S=K.makeRequest(_,this.config_.retryParameters);return this.makeNetworkRequest_(S,b).promise});continue}else if(f=="identity")g=await this.identityDrmParser_(u,"",r,null,s);else{let _=this.keyFormatsToDrmParsers_.get(f);g=_?await _(u,"",null):null}if(g){if(g.keyIds)for(let _ of g.keyIds)o.add(_);a.push(g)}else p.warning("Unsupported HLS KEYFORMAT",f)}}let c=this.groupTagsByKey_(e),d=[];for(let u in c){let m=c[u],f=m[0],g=this.getFrameRate_(f),_=Number(f.getRequiredAttrValue("BANDWIDTH"))||Number(f.getAttributeValue("AVERAGE-BANDWIDTH")),T=f.getAttributeValue("RESOLUTION"),[b,S]=T?T.split("x"):[null,null],E=f.getAttributeValue("VIDEO-RANGE"),w=f.getAttributeValue("REQ-VIDEO-LAYOUT");w&&w.includes(",")&&(w=w.split(",").filter(M=>M=="CH-STEREO"||M=="CH-MONO")[0]),w=w||"CH-MONO";let A=this.createStreamInfosForVariantTags_(m,i,T);v.assert(A.audio.length||A.video.length,"We should have created a stream!"),d.push(...this.createVariants_(A.audio,A.video,_,b,S,g,E,w,a,o,n))}return d.filter(u=>u!=null)}createStreamInfosForVariantTags_(e,t,i){let r=R.ContentType,s={audio:[],video:[]},n=new Map,a=new Set,o=new Set;for(let E of e){let w=E.getAttributeValue("AUDIO"),A=E.getAttributeValue("VIDEO");if(!w&&!A)continue;let x=E.getAttributeValue("PATHWAY-ID");w&&!a.has(w)&&(a.add(w),x&&n.set(w,x)),A&&!o.has(A)&&(o.add(A),x&&n.set(A,x)),p.debug("Guessing stream type for",E.toString())}let c=[...a,...o];if(c.length&&t.length){let E=t.filter(w=>c.includes(w.getRequiredAttrValue("GROUP-ID")));this.createStreamInfosFromMediaTags_(E,n)}s.audio.push(...this.getGroupStreamInfos_(a)),s.video.push(...this.getGroupStreamInfos_(o));let d=s.video.find(E=>E.stream.isAudioMuxedInVideo),u,m=!1,f=e.map(E=>E.getRequiredAttrValue("URI")),g=s.audio.find(E=>E&&E.getUris().find(w=>f.includes(w))),_=this.getCodecsForVariantTag_(e[0]),T=R.guessCodecsSafe(r.VIDEO,_),b=R.guessCodecsSafe(r.AUDIO,_),S=he.getSupplementalCodecs(e[0]);if(d?(p.debug("Guessing video (URI-less VIDEO Rendition)."),u=r.VIDEO,b&&T&&!s.audio.length&&(_=[[T,b].join(",")])):b&&!T?(u=r.AUDIO,p.debug("Guessing audio-only."),m=s.audio.length>0&&!s.audio.some(E=>E.stream.isAudioMuxedInVideo)):!s.audio.length&&!s.video.length&&b&&T?(p.debug("Guessing multiplexed audio+video."),u=r.VIDEO,_=[[T,b].join(",")]):s.audio.length&&g?(p.debug("Guessing audio-only."),u=r.AUDIO,m=!0):s.video.length&&!s.audio.length?(p.debug("Guessing audio-only."),u=r.AUDIO):(p.debug("Guessing video-only."),u=r.VIDEO),!m){let E=this.createStreamInfoFromVariantTags_(e,_,u,S),w=E.stream,A=u==r.AUDIO?s.audio:s.video,x=A.find(M=>M.stream.isAudioMuxedInVideo);if(w.type==u&&x){let M=x.stream;w.language=M.language,w.originalLanguage=M.originalLanguage,w.label=M.label,w.channelsCount=M.channelsCount,w.audioSamplingRate=M.audioSamplingRate,w.originalId=M.originalId,w.primary=M.primary,w.roles=M.roles,A.splice(A.indexOf(x),1,E)}else(w.type==r.AUDIO?s.audio:s.video).push(E)}return s.video=s.video.filter(E=>!E.stream.isAudioMuxedInVideo),s}getGroupStreamInfos_(e){if(!e.size)return[];let t=[...e].sort().join(",");return this.groupIdToStreamInfosMap_.get(t)||[]}getCodecsForVariantTag_(e){let t=e.getAttributeValue("CODECS")||"";if(this.codecInfoInManifest_=t.length>0,!this.codecInfoInManifest_&&!this.config_.hls.disableCodecGuessing){let r=[];this.config_.disableVideo||r.push(this.config_.hls.defaultVideoCodec),this.config_.disableAudio||r.push(this.config_.hls.defaultAudioCodec),t=r.join(",")}let i=t.split(/\s*,\s*/);return _t.codecsFiltering(i)}getChannelsCount_(e){let t=e.getAttributeValue("CHANNELS");if(!t)return null;let i=t.split("/")[0];return parseInt(i,10)}getSampleRate_(e){let t=e.getAttributeValue("SAMPLE-RATE");return t?parseInt(t,10):null}getFrameRate_(e){let t=e.getAttributeValue("FRAME-RATE");return t?parseFloat(t):null}isSpatialAudio_(e){let t=e.getAttributeValue("CHANNELS");if(!t)return!1;let i=t.split("/");return i.length!=2?!1:i[1]==="JOC"||i[1].includes("ATMOS")||i[1].includes("IMSA")}getClosedCaptions_(e,t){let i=R.ContentType,r=e.getAttributeValue("CLOSED-CAPTIONS");if(t==i.VIDEO){if(this.config_.disableText)return this.needsClosedCaptionsDetection_=!1,null;if(r){if(r!="NONE")return this.groupIdToClosedCaptionsMap_.get(r);this.needsClosedCaptionsDetection_=!1}else if(!r&&this.groupIdToClosedCaptionsMap_.size)for(let s of this.groupIdToClosedCaptionsMap_.keys())return this.groupIdToClosedCaptionsMap_.get(s)}return null}getLanguage_(e){return Se.normalize(e||"und")}getType_(e){let t=e.getRequiredAttrValue("TYPE").toLowerCase();return t=="subtitles"&&(t=R.ContentType.TEXT),t}createVariants_(e,t,i,r,s,n,a,o,c,d,u){let m=R.ContentType;for(let T of t)this.addVideoAttributes_(T.stream,r,s,n,a,o,null);let f=this.config_.disableVideo;(!t.length||f)&&(t=[null]),f&&(e=e.filter(T=>!T.stream.isAudioMuxedInVideo));let g=this.config_.disableAudio;(!e.length||g)&&(e=[null]);let _=[];for(let T of e)for(let b of t){let S=T?T.stream:null;S&&(S.drmInfos=c,S.keyIds=d);let E=b?b.stream:null;E&&(E.drmInfos=c,E.keyIds=d,this.config_.disableIFrames||re.setBetterIFrameStream(E,u)),E&&!S&&(E.bandwidth=i),!E&&S&&(S.bandwidth=i);let w=T?T.stream.drmInfos:null,A=b?b.stream.drmInfos:null,x=b?b.getUris().sort().join(","):"",M=T?T.getUris().sort().join(","):"",C=[];S&&S.codecs&&C.push(S.codecs),E&&E.codecs&&C.push(E.codecs);let k=[x,M,C.sort()].join("-");if(S&&E&&!de.areDrmCompatible(w,A)){p.warning("Incompatible DRM info in HLS variant. Skipping.");continue}if(this.variantUriSet_.has(k)){p.debug("Skipping variant which only differs in text streams.");continue}v.assert(!S||S.type==m.AUDIO,"Audio parameter mismatch!"),v.assert(!E||E.type==m.VIDEO,"Video parameter mismatch!");let D={id:this.globalId_++,language:S?S.language:"und",disabledUntilTime:0,primary:!!S&&S.primary||!!E&&E.primary,audio:S,video:E,bandwidth:i,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]};_.push(D),this.variantUriSet_.add(k)}return _}parseClosedCaptions_(e){let t=he.filterTagsByType(e,"CLOSED-CAPTIONS");this.needsClosedCaptionsDetection_=t.length==0;for(let i of t){v.assert(i.name=="EXT-X-MEDIA","Should only be called on media tags!");let r=i.getAttributeValue("LANGUAGE"),s=this.getLanguage_(r);if(!r){let o=i.getAttributeValue("NAME");o&&(s=o)}let n=i.getRequiredAttrValue("GROUP-ID"),a=i.getRequiredAttrValue("INSTREAM-ID").replace("SERVICE","svc");this.groupIdToClosedCaptionsMap_.get(n)||this.groupIdToClosedCaptionsMap_.set(n,new Map),this.groupIdToClosedCaptionsMap_.get(n).set(a,s)}}createStreamInfoFromMediaTags_(e,t,i=!0){let r=[],s=[],n=new Map;for(let D of e){v.assert(D.name=="EXT-X-MEDIA","Should only be called on media tags!");let V=++this.globalId_,ee=()=>vt.FAKE_MUXED_URL_+V,oe=i?D.getRequiredAttrValue("URI"):D.getAttributeValue("URI")||ee(),le=D.getRequiredAttrValue("GROUP-ID");r.push(oe),s.push(le),n.set(le,oe);let G=D.getAttributeValue("PATHWAY-ID");G&&t.set(le,G)}let a=s.sort().join(","),o=e[0],c="",d=this.getType_(o);if(d==R.ContentType.TEXT&&(c=o.getAttributeValue("CODECS")||""),!c){for(let D of s)if(this.groupIdToCodecsMap_.has(D)){c=this.groupIdToCodecsMap_.get(D);break}}let u=he.getSupplementalCodecs(o),m=r.sort().join(","),f=m;if(d=="audio"&&a&&(f+=a),this.uriToStreamInfosMap_.has(f))return this.uriToStreamInfosMap_.get(f);let g=this.globalId_++;if(this.contentSteeringManager_)for(let[D,V]of n){let ee=t.get(D);ee&&this.contentSteeringManager_.addLocation(g,ee,V)}let _=o.getAttributeValue("LANGUAGE"),T=o.getAttributeValue("NAME"),S=o.getAttributeValue("DEFAULT")=="YES",E=d=="audio"?this.getChannelsCount_(o):null,w=d=="audio"?this.isSpatialAudio_(o):!1,A=o.getAttributeValue("CHARACTERISTICS"),M=o.getAttributeValue("FORCED")=="YES",C=d=="audio"?this.getSampleRate_(o):null,k=this.createStreamInfo_(g,r,c,d,_,S,T,E,null,A,M,C,w,u,m);return this.groupIdToStreamInfosMap_.has(a)?this.groupIdToStreamInfosMap_.get(a).push(k):this.groupIdToStreamInfosMap_.set(a,[k]),this.uriToStreamInfosMap_.set(f,k),k}async createStreamInfoFromImageTag_(e){v.assert(e.name=="EXT-X-IMAGE-STREAM-INF","Should only be called on image tags!");let t=R.ContentType.IMAGE,i=e.getRequiredAttrValue("URI"),r=e.getAttributeValue("CODECS","jpeg")||"",s=he.getSupplementalCodecs(e);if(this.uriToStreamInfosMap_.has(i))return this.uriToStreamInfosMap_.get(i);let n=e.getAttributeValue("LANGUAGE"),a=e.getAttributeValue("NAME"),o=e.getAttributeValue("CHARACTERISTICS"),c=i,d=this.createStreamInfo_(this.globalId_++,[i],r,t,n,!1,a,null,null,o,!1,null,!1,s,c),u=e.getAttributeValue("RESOLUTION");if(u){await d.stream.createSegmentIndex();let g=d.stream.segmentIndex.earliestReference().getTilesLayout();g&&(d.stream.width=Number(u.split("x")[0])*Number(g.split("x")[0]),d.stream.height=Number(u.split("x")[1])*Number(g.split("x")[1])),d.stream.closeSegmentIndex()}let m=e.getAttributeValue("BANDWIDTH");return m&&(d.stream.bandwidth=Number(m)),this.uriToStreamInfosMap_.set(i,d),d}createStreamInfoFromIframeTag_(e){v.assert(e.name=="EXT-X-I-FRAME-STREAM-INF","Should only be called on iframe tags!");let t=R.ContentType.VIDEO,i=e.getRequiredAttrValue("URI"),r=e.getAttributeValue("CODECS")||"",s=he.getSupplementalCodecs(e);if(r=="mjpg"&&(t=R.ContentType.IMAGE),this.uriToStreamInfosMap_.has(i))return this.uriToStreamInfosMap_.get(i);let n=e.getAttributeValue("LANGUAGE"),a=e.getAttributeValue("NAME"),o=e.getAttributeValue("CHARACTERISTICS"),c=i,d=this.createStreamInfo_(this.globalId_++,[i],r,t,n,!1,a,null,null,o,!1,null,!1,s,c);d.stream.isIframe=!0;let u=e.getAttributeValue("RESOLUTION"),[m,f]=u?u.split("x"):[null,null];d.stream.width=Number(m)||void 0,d.stream.height=Number(f)||void 0;let g=e.getAttributeValue("BANDWIDTH");return g&&(d.stream.bandwidth=Number(g)),this.uriToStreamInfosMap_.set(i,d),d}createStreamInfoFromVariantTags_(e,t,i,r){let s=this.globalId_++,n=[];for(let m of e){v.assert(m.name=="EXT-X-STREAM-INF","Should only be called on variant tags!");let f=m.getRequiredAttrValue("URI"),g=m.getAttributeValue("PATHWAY-ID");this.contentSteeringManager_&&g&&this.contentSteeringManager_.addLocation(s,g,f),n.push(f)}let a=n.sort().join(",")+t.sort().join(",");if(this.uriToStreamInfosMap_.has(a))return this.uriToStreamInfosMap_.get(a);let o=n.join(","),c=this.getClosedCaptions_(e[0],i),d=R.guessCodecs(i,t),u=this.createStreamInfo_(s,n,d,i,null,!1,null,null,c,null,!1,null,!1,r,o);return this.uriToStreamInfosMap_.set(a,u),u}createStreamInfo_(e,t,i,r,s,n,a,o,c,d,u,m,f,g,_){let T=this.makeStreamObject_(e,i,r,s,n,a,o,c,d,u,m,f,g,_);t.some(C=>C.startsWith(vt.FAKE_MUXED_URL_))&&(T.isAudioMuxedInVideo=!0,r==R.ContentType.AUDIO&&(T.mimeType="video/mp2t",this.setFullTypeForStream_(T)));let S={stream:T,type:r,redirectUris:[],getUris:()=>{},minTimestamp:0,maxTimestamp:0,mediaSequenceToStartTime:new Map,canSkipSegments:!1,canSkipDateRanges:!1,canBlockReload:!1,hasEndList:!1,firstSequenceNumber:-1,nextMediaSequence:-1,nextPart:-1},E=()=>this.contentSteeringManager_&&t.length>1?this.contentSteeringManager_.getLocations(e):S.redirectUris.concat(he.constructUris([this.masterPlaylistUri_],t,this.globalVariables_));S.getUris=E;let w=async C=>{let k=R.ContentType;try{let D=await C.promise;if(C.aborted)return;let V=D.uri;V!=D.originalUri&&(S.getUris().includes(V)||S.redirectUris.push(V));let ee=this.manifestTextParser_.parsePlaylist(D.data);if(ee.type!=Gi.MEDIA)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_PLAYLIST_HIERARCHY);let oe=he.filterTagsByName(ee.tags,"EXT-X-DEFINE"),le=this.parseMediaVariables_(oe,V),G=void 0,J=!1;(!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing||this.needsClosedCaptionsDetection_&&r==k.VIDEO&&!this.config_.hls.disableClosedCaptionsDetection)&&ee.segments.length>0&&(this.needsClosedCaptionsDetection_=!1,J=!0);let Z=!this.codecInfoInManifest_&&this.config_.hls.disableCodecGuessing,ce=this.isDynamic_(),W=await this.convertParsedPlaylistIntoStreamInfo_(e,le,ee,E,i,r,s,n,a,o,c,d,u,m,f,g,_,G,J,Z);if(C.aborted)return;let z=W.stream;this.determineStartTime_(ee),this.isDynamic_()&&!ce&&this.changePresentationTimelineToLive_(ee),S.minTimestamp=W.minTimestamp,S.maxTimestamp=W.maxTimestamp,S.canSkipSegments=W.canSkipSegments,S.canSkipDateRanges=W.canSkipDateRanges,S.canBlockReload=W.canBlockReload,S.hasEndList=W.hasEndList,S.mediaSequenceToStartTime=W.mediaSequenceToStartTime,S.nextMediaSequence=W.nextMediaSequence,S.nextPart=W.nextPart,T.segmentIndex=z.segmentIndex,T.encrypted=z.encrypted,T.drmInfos=z.drmInfos,T.keyIds=z.keyIds,T.mimeType=z.mimeType,T.bandwidth=T.bandwidth||z.bandwidth,T.codecs=T.codecs||z.codecs,T.closedCaptions=T.closedCaptions||z.closedCaptions,this.propagateDetectedClosedCaptions_(),T.width=T.width||z.width,T.height=T.height||z.height,T.hdr=T.hdr||z.hdr,T.colorGamut=T.colorGamut||z.colorGamut,T.frameRate=T.frameRate||z.frameRate,T.language=="und"&&z.language!="und"&&(T.language=z.language),T.language=T.language||z.language,T.channelsCount=T.channelsCount||z.channelsCount,T.audioSamplingRate=T.audioSamplingRate||z.audioSamplingRate,this.setFullTypeForStream_(T),S.type==k.VIDEO&&W.type==k.AUDIO&&(!this.codecInfoInManifest_||O.RAW_FORMATS.includes(T.mimeType))&&this.reclassifyStreamInfo_(S,z),T.drmInfos.length&&this.playerInterface_.newDrmInfo(T);let ge=!1;if((!c&&T.closedCaptions||c&&T.closedCaptions&&c.size!=T.closedCaptions.size)&&(ge=!0),this.manifest_&&ge&&this.playerInterface_.makeTextStreamsForClosedCaptions(this.manifest_),r==k.TEXT){let X=z.segmentIndex.earliestReference();X&&X.initSegmentReference&&(T.mimeType="application/mp4",this.setFullTypeForStream_(T))}let Y=dr.createQualityInfo(T);if(T.segmentIndex.forEachTopLevelReference(X=>{X.initSegmentReference&&(X.initSegmentReference.mediaQuality=Y)}),this.hasEnoughInfoToFinalizeStreams_())if(this.streamsFinalized_)this.finalizeStreams_([S]);else{this.streamsFinalized_=!0;let N=Array.from(this.uriToStreamInfosMap_.values()).filter(Ie=>Ie.stream.segmentIndex);this.finalizeStreams_(N),this.determineDuration_();let $=this.getUpdatePlaylistDelay_();$>0&&this.updatePlaylistTimer_.tickAfter($)}this.manifest_&&(this.manifest_.startTime=this.startTime_),await this.processDateRangeTags_(ee.tags,T.type,le,E)}catch(D){if(T.closeSegmentIndex(),D.code===h.Code.OPERATION_ABORTED)return;if(!this.playerInterface_.disableStream(T))throw D}},A=null,x,M=()=>{if(A)return A;if(T.isAudioMuxedInVideo){let C=new Ze([]);return T.segmentIndex=C,Promise.resolve()}return x=this.requestManifest_(S.getUris(),!0),A=new Promise(C=>{C(w(x))}),A};return T.createSegmentIndex=M,T.closeSegmentIndex=()=>{A&&!T.segmentIndex&&x.abort(),T.segmentIndex&&(T.segmentIndex.release(),T.segmentIndex=null),A=null},S}reclassifyStreamInfo_(e,t){let i=R.ContentType,r=e.stream,s=t.type,n=e.type;if(p.debug("Reclassifying HLS stream",r.id,"from",r.type,"to",s),this.isLive_()&&(this.mediaSequenceToStartTimeByType_.set(s,this.mediaSequenceToStartTimeByType_.get(n)),this.mediaSequenceToStartTimeByType_.set(n,new Map)),e.type=s,r.type=s,r.codecs=R.guessCodecsSafe(s,t.codecs.split(/\s*,\s*/))||"",this.setFullTypeForStream_(r),!!this.manifest_){for(let a of this.manifest_.variants)s==i.AUDIO&&a.video==r&&(a.video=null,a.audio||(a.audio=r,a.language=r.language));this.manifest_.variants=this.manifest_.variants.filter(a=>a.audio||a.video)}}getMinDuration_(){let e=1/0;for(let t of this.uriToStreamInfosMap_.values())t.stream.segmentIndex&&t.stream.type!="text"&&!t.stream.isAudioMuxedInVideo&&(e=Math.min(e,t.maxTimestamp));return e}getLiveDuration_(){let e=1/0,t=1/0;for(let i of this.uriToStreamInfosMap_.values())i.stream.segmentIndex&&i.stream.type!="text"&&!i.stream.isAudioMuxedInVideo&&(e=Math.min(e,i.maxTimestamp),t=Math.min(t,i.minTimestamp));return e-t}notifySegmentsForStreams_(e){let t=[];for(let i of e)i.segmentIndex&&i.segmentIndex.forEachTopLevelReference(r=>{t.push(r)});this.presentationTimeline_.notifySegments(t)}finalizeStreams_(e){if(!this.isDynamic_()){let o=this.getMinDuration_();for(let c of e)c.stream.segmentIndex.fit(0,o)}this.notifySegmentsForStreams_(e.map(o=>o.stream));let t=Array.from(this.uriToStreamInfosMap_.values()).filter(o=>o.stream.segmentIndex),i=R.ContentType,r=t.some(o=>o.stream.type==i.AUDIO),s=t.some(o=>o.stream.type==i.VIDEO),n=this.isLive_()&&!this.usesProgramDateTime_,a=!this.isDynamic_()&&this.usesProgramDateTime_&&!(r&&s);this.config_.hls.ignoreManifestProgramDateTime||n||a?this.syncStreamsWithSequenceNumber_(e,n):(this.syncStreamsWithProgramDateTime_(e),this.config_.hls.ignoreManifestProgramDateTimeForTypes.length>0&&this.syncStreamsWithSequenceNumber_(e))}ignoreManifestProgramDateTimeFor_(e){return this.config_.hls.ignoreManifestProgramDateTime?!0:this.config_.hls.ignoreManifestProgramDateTimeForTypes.includes(e)}hasEnoughInfoToFinalizeStreams_(){if(!this.manifest_||!this.manifest_.variants.length)return!1;let e=[],t=[];for(let i of this.manifest_.variants)i.video&&e.push(i.video),i.audio&&t.push(i.audio);return!(e.length>0&&!e.some(i=>i.segmentIndex)||t.length>0&&!t.some(i=>i.segmentIndex))}async convertParsedPlaylistIntoStreamInfo_(e,t,i,r,s,n,a,o,c,d,u,m,f,g,_,T,b,S=void 0,E=!0,w=!0){let A=n,x=i.segments||[],M=x.every(bi=>!!he.getFirstTagWithName(bi.tags,"EXT-X-GAP"));if(!x.length||M)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_EMPTY_MEDIA_PLAYLIST);this.determinePresentationType_(i),this.isDynamic_()&&this.determineLastTargetDuration_(i);let C=this.isLive_()?this.mediaSequenceToStartTimeByType_.get(n):new Map,{segments:k,bandwidth:D}=this.createSegments_(i,C,t,r,n,!0,null);!S&&n==R.ContentType.TEXT&&(S=await this.guessMimeType_(n,s,k),!s&&S=="application/mp4"&&k[0]&&!k[0].initSegmentReference&&(S="text/vtt"),!s&&S=="application/mp4"&&(E=!0,w=!0));let V=null,ee=null,oe=null,le=null,G=null;if(k.length>0&&E){let bi=n==R.ContentType.VIDEO&&!u&&!this.config_.hls.disableClosedCaptionsDetection,we=await this.getBasicInfoFromSegments_(k,bi);n!=we.type&&this.isLive_()&&(this.mediaSequenceToStartTimeByType_.set(we.type,this.mediaSequenceToStartTimeByType_.get(n)),this.mediaSequenceToStartTimeByType_.set(n,new Map)),n=we.type,we.type!=R.ContentType.VIDEO&&(a=we.language),d=we.channelCount,g=we.sampleRate,this.config_.disableText||(u=we.closedCaptions),ee=we.height,V=we.width,oe=we.videoRange,le=we.colorGamut,G=we.frameRate,w&&(S=we.mimeType,s=we.codecs)}S||(S=await this.guessMimeType_(n,s,k)),A==R.ContentType.VIDEO&&O.RAW_FORMATS.includes(S)&&(p.debug("Raw format",S,"is audio-only, not video."),n=R.ContentType.AUDIO);let{drmInfos:J,keyIds:Z,encrypted:ce,aesEncrypted:W}=await this.parseDrmInfo_(i,S,r,t);if(ce&&!J.length&&!W)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_KEYFORMATS_NOT_SUPPORTED);let z=this.makeStreamObject_(e,s,n,a,o,c,d,u,m,f,g,_,T,b);z.encrypted=ce&&!W,z.drmInfos=J,z.keyIds=Z,z.mimeType=S,D&&(z.bandwidth=D),he.getFirstTagWithName(i.tags,"EXT-X-I-FRAMES-ONLY")&&(z.isIframe=!0),this.setFullTypeForStream_(z),n==R.ContentType.VIDEO&&(V||ee||oe||le)&&this.addVideoAttributes_(z,V,ee,G,oe,null,le),this.isDynamic_()&&this.determineLastTargetDuration_(i);let ge=k[0].startTime,X=k[k.length-1].endTime,N=new Ze(k);z.segmentIndex=N,this.setProgramDateTimeRegionsFromIndex_(z,n);let $=he.getFirstTagWithName(i.tags,"EXT-X-SERVER-CONTROL"),Ie=$?$.getAttribute("CAN-SKIP-UNTIL")!=null:!1,tt=!1;Ie&&(tt=$?$.getAttribute("CAN-SKIP-DATERANGES")!=null:!1);let gt=$?$.getAttribute("CAN-BLOCK-RELOAD")!=null:!1,St=he.getFirstTagWithNameAsNumber(i.tags,"EXT-X-MEDIA-SEQUENCE",0),{nextMediaSequence:yt,nextPart:Ct}=this.getNextMediaSequenceAndPart_(St,k);return{stream:z,type:n,redirectUris:[],getUris:r,minTimestamp:ge,maxTimestamp:X,canSkipSegments:Ie,canSkipDateRanges:tt,canBlockReload:gt,hasEndList:!1,firstSequenceNumber:-1,nextMediaSequence:yt,nextPart:Ct,mediaSequenceToStartTime:C}}getNextMediaSequenceAndPart_(e,t,i=t.length){let s=e+i-1,n=-1;if(!t.length)return s++,{nextMediaSequence:s,nextPart:n};let a=t[t.length-1],o=a.partialReferences;return a.partialReferences.length?(n=o.length-1,o[o.length-1].isPreload()||(s++,n=0),{nextMediaSequence:s,nextPart:n}):(s++,a.hasByterangeOptimization()&&(n=0),{nextMediaSequence:s,nextPart:n})}getReferenceForMediaSequence_(e,t,i){if(!e||!t.has(i))return null;let r=t.get(i),s=e.find(r);if(s==null)return null;let n=e.get(s);return n&&n.startTime==r?n:null}makeStreamObject_(e,t,i,r,s,n,a,o,c,d,u,m,f,g){let _=this.guessMimeTypeBeforeLoading_(i,t)||this.guessMimeTypeFallback_(i),T=[];if(c)for(let w of c.split(","))T.push(w);let b,S=null;i==R.ContentType.TEXT?T.includes("public.accessibility.transcribes-spoken-dialog")&&T.includes("public.accessibility.describes-music-and-sound")?b=R.TextStreamKind.CLOSED_CAPTION:b=R.TextStreamKind.SUBTITLE:T.includes("public.accessibility.describes-video")&&(S=me.AccessibilityPurpose.VISUALLY_IMPAIRED),!T.length&&b===R.TextStreamKind.SUBTITLE&&T.push(R.TextStreamKind.SUBTITLE);let E={id:this.globalId_++,originalId:g,groupId:null,createSegmentIndex:()=>Promise.resolve(),segmentIndex:null,mimeType:_,codecs:t,supplementalCodecs:f,kind:i==R.ContentType.TEXT?R.TextStreamKind.SUBTITLE:void 0,encrypted:!1,drmInfos:[],keyIds:new Set,language:this.getLanguage_(r),originalLanguage:r,label:n,type:i,primary:s,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,frameRate:void 0,pixelAspectRatio:void 0,width:void 0,height:void 0,bandwidth:void 0,roles:T,forced:d,channelsCount:a,audioSamplingRate:u,spatialAudio:m,closedCaptions:o,hdr:void 0,colorGamut:void 0,videoLayout:void 0,tilesLayout:void 0,accessibilityPurpose:S,external:!1,fastSwitching:!1,fullMimeTypes:new Set,isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1};return this.setFullTypeForStream_(E),E}async parseDrmInfo_(e,t,i,r){let s=new Map;if(!this.config_.ignoreDrmInfo&&e.segments)for(let d of e.segments){let u=he.filterTagsByName(d.tags,"EXT-X-KEY"),m=null;if(u.length){m=this.getInitSegmentReference_(e,d.tags,i,r);for(let f of u)s.set(f,m)}}let n=!1,a=!1,o=[],c=new Set;for(let[d,u]of s){let m=d,f=u,g=m.getRequiredAttrValue("METHOD");if(g!="NONE"){n=!0;let _=m.getAttributeValue("KEYFORMAT")||"identity",T=null;if(this.isAesMethod_(g)){a=!0;continue}else if(_=="identity")T=await this.identityDrmParser_(m,t,i,f,r);else{let b=this.keyFormatsToDrmParsers_.get(_);T=b?await b(m,t,f):null}if(T){if(T.keyIds)for(let b of T.keyIds)c.add(b);o.push(T)}else p.warning("Unsupported HLS KEYFORMAT",_)}}return{drmInfos:o,keyIds:c,encrypted:n,aesEncrypted:a}}parseAESDrmTag_(e,t,i,r){if(!window.crypto||!window.crypto.subtle)throw p.alwaysWarn("Web Crypto API is not available to decrypt AES. (Web Crypto only exists in secure origins like https)"),new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.NO_WEB_CRYPTO_API);let s=e.getRequiredAttrValue("METHOD"),n=0,a,o=e.getAttributeValue("IV","");if(s==="AES-256-GCM"){if(o)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_INVALID_KEY_IV_FOR_GCM)}else if(!o)n=he.getFirstTagWithNameAsNumber(t.tags,"EXT-X-MEDIA-SEQUENCE",0);else if(a=ne.fromHex(o.substr(2)),a.byteLength!=16)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_IV_LENGTH);let c=he.constructSegmentUris(i(),e.getRequiredAttrValue("URI"),r),d=c.sort().join(""),u=`${e.toString()}-${n}-${d}`;return this.aesKeyInfoMap_.getOrInsertComputed(u,()=>{let m={bitsKey:128,blockCipherMode:"CBC",iv:a,firstMediaSequenceNumber:n};switch(s){case"AES-256":m.bitsKey=256;break;case"AES-256-CTR":m.bitsKey=256,m.blockCipherMode="CTR";break;case"AES-256-GCM":m.bitsKey=256,m.blockCipherMode="GCM";break}return m.fetchKey=async()=>{let f=await this.aesKeyMap_.getOrInsertComputed(d,()=>{let _=K.RequestType.KEY,T=K.makeRequest(c,this.config_.retryParameters);return this.makeNetworkRequest_(T,_).promise});if(!f.data||f.data.byteLength!=m.bitsKey/8)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.AES_128_INVALID_KEY_LENGTH);let g={name:m.blockCipherMode==="CBC"?"AES-CBC":m.blockCipherMode==="GCM"?"AES-GCM":"AES-CTR",length:m.bitsKey};m.cryptoKey=await window.crypto.subtle.importKey("raw",f.data,g,!0,["decrypt"]),m.fetchKey=void 0},m})}determineStartTime_(e){if(this.startTime_!=null)return;let t=he.getFirstTagWithName(e.tags,"EXT-X-START");t&&(this.startTime_=Number(t.getRequiredAttrValue("TIME-OFFSET")))}determinePresentationType_(e){let t=vt.PresentationType_,i=he.getFirstTagWithName(e.tags,"EXT-X-PLAYLIST-TYPE"),r=he.getFirstTagWithName(e.tags,"EXT-X-ENDLIST"),s=i&&i.value=="VOD"||r,n=i&&i.value=="EVENT"&&!s;s?this.setPresentationType_(t.VOD):!s&&!n?this.setPresentationType_(t.LIVE):this.setPresentationType_(t.EVENT)}determineLastTargetDuration_(e){let t=1/0,i=e.segments;if(i.length){let o=i.length-1;for(;o>=0;){let c=i[o],d=he.getFirstTagWithName(c.tags,"EXTINF");if(d){t=he.getExtinfDuration(d);break}o--}}let r=this.getRequiredTag_(e.tags,"EXT-X-TARGETDURATION"),s=Number(r.value),n=he.getFirstTagWithName(e.tags,"EXT-X-PART-INF");n&&(this.partialTargetDuration_=Number(n.getRequiredAttrValue("PART-TARGET")));let a=he.getFirstTagWithName(e.tags,"EXT-X-SERVER-CONTROL");if(this.lowLatencyMode_&&this.partialTargetDuration_)this.lowLatencyByterangeOptimization_?this.partialTargetDuration_*5<=t?this.lastTargetDuration_=Math.min(this.partialTargetDuration_,this.lastTargetDuration_):this.lastTargetDuration_=Math.min(t,this.lastTargetDuration_):this.lastTargetDuration_=Math.min(this.partialTargetDuration_,this.lastTargetDuration_),this.lowLatencyPresentationDelay_=a?Number(a.getRequiredAttrValue("PART-HOLD-BACK")):0;else{this.lastTargetDuration_=Math.min(t,this.lastTargetDuration_);let o=a?a.getAttribute("HOLD-BACK"):null;this.presentationDelay_=o?Number(o.value):0}this.maxTargetDuration_=Math.max(s,this.maxTargetDuration_)}changePresentationTimelineToLive_(e){let t=0;if(this.config_.defaultPresentationDelay)t=this.config_.defaultPresentationDelay;else if(this.lowLatencyPresentationDelay_)t=this.lowLatencyPresentationDelay_;else if(this.presentationDelay_)t=this.presentationDelay_;else{let i=e.segments.length,r=Math.min(i,this.config_.hls.liveSegmentsDelay);for(let s=i-r;s<i;s++){let n=he.getFirstTagWithName(e.segments[s].tags,"EXTINF");n?t+=he.getExtinfDuration(n):t+=this.maxTargetDuration_}}this.startTime_&&this.startTime_<0&&(t=Math.min(-this.startTime_,t),this.startTime_+=t),this.presentationTimeline_.setPresentationStartTime(0),this.presentationTimeline_.setDelay(t),this.presentationTimeline_.setStatic(!1)}getInitSegmentReference_(e,t,i,r){let s=he.getFirstTagWithName(t,"EXT-X-MAP");if(!s)return null;let n=s.getRequiredAttrValue("URI"),a=he.constructSegmentUris(i(),n,r),o=[a.toString(),s.getAttributeValue("BYTERANGE","")].join("-");return this.mapTagToInitSegmentRefMap_.getOrInsertComputed(o,()=>{v.assert(s,"mapTag should be non-null");let c,d,u=!1;for(let m of t)if(m.name=="EXT-X-KEY"){let f=m.getRequiredAttrValue("METHOD");this.isAesMethod_(f)&&m.id<s.id?(u=!1,c=this.parseAESDrmTag_(m,e,i,r)):u=f!="NONE"}else m.name=="EXT-X-BYTERANGE"&&m.id<s.id&&(d=m);return this.createInitSegmentReference_(a,s,d,c,u)})}createInitSegmentReference_(e,t,i,r,s){let n=0,a=null,o=t.getAttributeValue("BYTERANGE");if(!o&&i&&(o=i.value),o){let d=o.split("@"),u=Number(d[0]);if(n=Number(d[1]),a=n+u-1,r){let m=a+1-n;m%16&&(a+=16-m%16)}}return new Tt(()=>e,n,a,null,null,null,r,s)}createSegmentReference_(e,t,i,r,s,n,a,o,c,d){let u=i.tags,m=he.getFirstTagWithName(u,"EXTINF"),f=0,g=0,_=null;i.partialSegments.length&&(this.manifest_.isLowLatency=!0);let T=null;if(!this.config_.hls.ignoreManifestProgramDateTime){let le=he.getFirstTagWithName(u,"EXT-X-PROGRAM-DATE-TIME");le&&le.value&&(T=I.parseDate(le.value),v.assert(T!=null,"EXT-X-PROGRAM-DATE-TIME format not valid"),this.usesProgramDateTime_=!0)}let b=Te.Status.AVAILABLE;if(he.getFirstTagWithName(u,"EXT-X-GAP")&&(this.manifest_.gapCount++,b=Te.Status.MISSING),!m){if(i.partialSegments.length==0)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_REQUIRED_TAG_MISSING,"EXTINF");if(!this.lowLatencyMode_)return null}let S=[],E=!1,w=null,A=!1,x=!1;if(this.lowLatencyMode_&&i.partialSegments.length){let le=e&&window.ReadableStream&&this.config_.hls.allowLowLatencyByteRangeOptimization,G=T;for(let J=0;J<i.partialSegments.length;J++){let Z=i.partialSegments[J],ce=J==0?t:S[S.length-1],W=J==0?r:ce.endTime,z=Number(Z.getAttributeValue("DURATION"))||this.partialTargetDuration_;if(!z)continue;let ge=W+z,Y=0,X=null;if(Z.name=="EXT-X-PRELOAD-HINT"){let yt=Z.getAttributeValue("BYTERANGE-START");Y=yt?Number(yt):0;let Ct=Z.getAttributeValue("BYTERANGE-LENGTH");Ct?X=Y+Number(Ct)-1:Y&&(X=Number.MAX_SAFE_INTEGER)}else{let yt=Z.getAttributeValue("BYTERANGE");[Y,X]=this.parseByteRange_(ce,yt)}let N=Z.getAttributeValue("URI");if(!N)continue;let $=Te.Status.AVAILABLE;Z.getAttributeValue("GAP")=="YES"&&(this.manifest_.gapCount++,$=Te.Status.MISSING,A=!0);let Ie=null,tt=()=>(Ie==null&&(v.assert(N,"Partial uri should be defined!"),Ie=he.constructSegmentUris(o(),N,s)),Ie);le&&Y>=0&&X!=null&&(w=tt,E=!0);let gt=new Te(W,ge,tt,Y,X,e,0,0,1/0,[],"",null,G,$,d);Z.name=="EXT-X-PRELOAD-HINT"&&(gt.markAsPreload(),x=!0),Z.getAttributeValue("INDEPENDENT")!="YES"&&J>0&>.markAsNonIndependent();let St=c;if(!St){if(S.length&&S[0].mimeType)St=S[0].mimeType;else if(N){let yt=ct.getExtension(N);St=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(a).get(yt)||null}}St&&(gt.mimeType=St,vt.MIME_TYPES_WITHOUT_INIT_SEGMENT_.has(St)&&(gt.initSegmentReference=null)),S.push(gt),G&&(G+=z)}}if(m){let le=he.getExtinfDuration(m);if(le==0)return null;f=r+le}else if(S.length)f=S[S.length-1].endTime;else return null;E&&(A||S[0].startByte!=0?(E=!1,w=null):S=[]);let M=he.getFirstTagWithName(u,"EXT-X-BYTERANGE");M?[g,_]=this.parseByteRange_(t,M.value):S.length&&(g=S[0].startByte,_=S[S.length-1].endByte);let C="",k=null;if(a==R.ContentType.IMAGE){C="1x1";let le=he.getFirstTagWithName(u,"EXT-X-TILES");if(le){C=le.getRequiredAttrValue("LAYOUT");let G=le.getAttributeValue("DURATION");G&&(k=Number(G))}}let D=null,V=()=>w?w():(D==null&&(D=he.constructSegmentUris(o(),i.verbatimSegmentUri,s)),D||[]),ee=S.length>0&&!!i.verbatimSegmentUri,oe=new Te(r,f,V,g,_,e,0,0,1/0,S,C,k,T,b,d,ee);return c&&(oe.mimeType=c,vt.MIME_TYPES_WITHOUT_INIT_SEGMENT_.has(c)&&(oe.initSegmentReference=null)),E&&(this.lowLatencyByterangeOptimization_=!0,oe.markAsByterangeOptimization(),x&&oe.markAsPreload()),oe}parseByteRange_(e,t){let i=0,r=null;if(t){let s=t.split("@"),n=Number(s[0]);s[1]?i=Number(s[1]):(v.assert(e,"Cannot refer back to previous HLS segment!"),i=e.endByte+1),r=i+n-1}return[i,r]}async processDateRangeTags_(e,t,i,r){let s=R.ContentType;if(t!=s.VIDEO&&t!=s.AUDIO)return;let n=this.presentationTimeline_.getInitialProgramDateTime();if(n==null||this.ignoreManifestProgramDateTimeFor_(t))return;let a=he.filterTagsByName(e,"EXT-X-DATERANGE");a=a.filter(c=>c.getAttribute("START-DATE")!=null).sort((c,d)=>{let u=c.getRequiredAttrValue("START-DATE"),m=d.getRequiredAttrValue("START-DATE");return u<m?-1:u>m?1:0});let o=[];for(let c=0;c<a.length;c++){let d=a[c];try{let u=d.getRequiredAttrValue("START-DATE"),m=I.parseDate(u);if(isNaN(m))continue;v.assert(m!=null,"Start date should not be null!");let f=Math.max(0,m-n),g=null,_=d.getAttributeValue("END-DATE");if(_){let A=I.parseDate(_);if(!isNaN(A)&&(v.assert(A!=null,"End date should not be null!"),g=A-n,g<0))continue}if(g==null){let A=d.getAttributeValue("DURATION")||d.getAttributeValue("PLANNED-DURATION");if(A){let x=parseFloat(A);if(isNaN(x)||(g=f+x),m-n+x<0)continue}}let T=d.getAttributeValue("CLASS")||"com.apple.quicktime.HLS",b=d.getAttributeValue("END-ON-NEXT")=="YES";if(g==null&&b){for(let A=c+1;A<a.length;A++){let x=a[A].getAttributeValue("CLASS")||"com.apple.quicktime.HLS";if(T!=x)continue;let M=a[A].getRequiredAttrValue("START-DATE"),C=I.parseDate(M);if(!isNaN(C)&&C&&C>m){g=Math.max(0,C-n);break}}if(g==null)continue}let S=["CLASS","START-DATE","END-DATE","DURATION","END-ON-NEXT"],E=[];for(let A of d.attributes){if(S.includes(A.name))continue;let x=he.variableSubstitution(A.value,i);(A.name=="X-ASSET-URI"||A.name=="X-ASSET-LIST")&&(x=he.constructSegmentUris(r(),A.value,i)[0]);let M={key:A.name,description:"",data:x,mimeType:null,pictureType:null};E.push(M)}let w={schemeIdUri:T,value:"",startTime:f,endTime:g!=null?g:1/0,id:d.getRequiredAttrValue("ID"),timescale:1,eventNode:null,urlParams:void 0,values:E};if(this.playerInterface_.onTimelineRegionAdded(w),E.length>1){let A=this.playerInterface_.onMetadata(T,f,g,E),x=!1,M=E.find(C=>C.key=="CUE")||E.find(C=>C.key=="X-CUE");if(M&&M.data.includes("PRE")&&(x=!0),g!=null&&!x){let C;this.manifest_.startTime!=null?C=this.manifest_.startTime:this.isDynamic_()?C=this.manifest_.presentationTimeline.getSeekRangeEnd():C=this.manifest_.presentationTimeline.getSeekRangeStart(),x=f<=C&&g>=C}x&&o.push(A)}}catch(u){p.warning("Ignoring DATERANGE with errors",d.toString())}}o.length&&await Promise.all(o)}createSegments_(e,t,i,r,s,n,a){let o=e.segments;v.assert(o.length,"Playlist should have segments!");let c=null,d=null,u=null,m=null,f,g=he.getFirstTagWithNameAsNumber(e.tags,"EXT-X-DISCONTINUITY-SEQUENCE",-1),_=he.getFirstTagWithNameAsNumber(e.tags,"EXT-X-MEDIA-SEQUENCE",0),T=he.getFirstTagWithName(e.tags,"EXT-X-SKIP"),b=T?Number(T.getAttributeValue("SKIPPED-SEGMENTS")):0,S=_+b,E=0;this.isLive_()&&t.has(S)&&(E=t.get(S)),E===0&&this.isLive_()&&t.size>0&&!t.has(S)&&this.presentationTimeline_.getPresentationStartTime()!=null&&(E=this.presentationTimeline_.getSegmentAvailabilityStart());let w=[],A=[],x=null,M=null,C=[],k=0;if(!n&&a){k=o.length;for(let G=0;G<o.length;G++){let J=_+b+G;if(!t.has(J)){k=G;break}if(o[G].partialSegments.length){k=G;break}if(this.lowLatencyMode_){let Z=he.getFirstTagWithName(o[G].tags,"EXTINF");if(Z){let ce=he.getExtinfDuration(Z),W=this.getReferenceForMediaSequence_(a,t,J);if(W&&Math.abs(W.endTime-W.startTime-ce)>.001){k=G;break}}}}if(k>0){let G=_+b+k-1;x=this.getReferenceForMediaSequence_(a,t,G),x?(M=x,p.debug("HLS live update: reusing",k,"known segment references and building only the new tail.")):(p.debug("HLS live update: full playlist rebuild selected for overlap recovery."),k=0)}}let D=M;!D&&a&&(D=this.getReferenceForMediaSequence_(a,t,_+b)||a.get(a.getNumEvicted()+a.getNumReferences()-1));let V=G=>{let J=ct.getExtension(G);if(!J)return null;let ce=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(s).get(J);return ce||(ce=vt.RAW_FORMATS_TO_MIME_TYPES_.get(J)),ce};for(let G=0;G<o.length;G++){let J=o[G],Z=he.getFirstTagWithName(J.tags,"EXT-X-MAP");Z&&Z.id!==d&&(c=this.getInitSegmentReference_(e,J.tags,r,i),d=Z.id);let ce=J.verbatimSegmentUri,W="";ce&&(W=ct.getExtension(ce)),W!==m&&(u=V(ce),m=W);let z=G==0?E:x.endTime;S=_+b+G,he.getFirstTagWithName(J.tags,"EXT-X-DISCONTINUITY")&&(g++,G>=k&&x&&x.initSegmentReference&&(x.initSegmentReference.boundaryEnd=z));for(let N of J.tags)N.name=="EXT-X-KEY"&&(this.isAesMethod_(N.getRequiredAttrValue("METHOD"))?f=this.parseAESDrmTag_(N,e,r,i):f=void 0);if(G<k)continue;let Y=n||!t.has(S);t.set(S,z);let X=this.createSegmentReference_(c,x,J,z,i,e,s,r,u,f);if(X){let N=he.getFirstTagWithNameAsNumber(J.tags,"EXT-X-BITRATE");if(N)C.push({bitrate:N,duration:X.endTime-X.startTime}),X.bandwidth=N;else if(X.endByte){let $=X.getSize();if($){let Ie=X.endTime-X.startTime,tt=$*8/Ie/1e3;C.push({bitrate:tt,duration:Ie}),X.bandwidth=tt}}else if(C.length){let $=C[C.length-1];$.duration+=X.endTime-X.startTime,X.bandwidth=$.bitrate}if(X.bandwidth)for(let $ of X.partialReferences)$.bandwidth=X.bandwidth;x=X,X.discontinuitySequence=g,this.ignoreManifestProgramDateTimeFor_(s)&&this.minSequenceNumber_!=null&&S<this.minSequenceNumber_||(w.push(X),(Y||!n)&&A.push(X))}}let ee;if(C.length){let G=C.reduce((J,Z)=>J+Z.duration,0);ee=Math.round(C.reduce((J,Z)=>J+Z.bitrate*Z.duration,0)/G*1e3)}let oe=!!(M!=null&&M.syncTime)||w.some(G=>G.syncTime!=null);if(oe)for(let G=0;G<w.length;G++){let J=w[G];if(J.syncTime!=null)continue;let Z=0,ce=G,W=()=>{let X=w[ce];if(X){if(X.syncTime!=null)return X.syncTime+Z;Z-=X.endTime-X.startTime,ce+=1}return null},z=0,ge=G,Y=()=>{let X=w[ge];if(X){if(X!=J&&(z+=X.endTime-X.startTime),X.syncTime!=null)return X.syncTime+z;ge-=1}else if(M&&M.syncTime!=null)return M.syncTime+(M.endTime-M.startTime)+z;return null};for(;J.syncTime==null;)J.syncTime=Y(),J.syncTime==null&&(J.syncTime=W())}if(oe){let G=0,J=M;if(D&&D.syncTime!=null){let Z=this.realProgramDateTimeByReference_.get(D);Z!=null&&(G=Z-D.syncTime)}for(let Z of w){if(Z.syncTime!=null){if(this.realProgramDateTimeByReference_.set(Z,Z.syncTime),J&&J.syncTime!=null&&J.discontinuitySequence!=Z.discontinuitySequence){let W=J.syncTime+(J.endTime-J.startTime),ge=Z.syncTime-W-G;Math.abs(ge)>1&&(G+=ge)}Z.syncTime-=G}let ce=Z.syncTime;for(let W of Z.partialReferences)W.syncTime=ce,ce+=W.endTime-W.startTime;J=Z}}let le=this.lowestSyncTime_;if(oe&&le!=1/0&&!this.ignoreManifestProgramDateTimeFor_(s))for(let G of w)G.syncAgainst(le);return{segments:n?w:A,totalCount:k+w.length,bandwidth:ee}}setProgramDateTimeRegionsFromIndex_(e,t){if(t!=R.ContentType.VIDEO||this.ignoreManifestProgramDateTimeFor_(t)||!e.segmentIndex)return;let i=[],r=null;for(let s of e.segmentIndex){if(!s||s.syncTime==null)continue;let n=this.realProgramDateTimeByReference_.get(s);if(n==null)continue;let a=n-s.syncTime;(r==null||Math.abs(a-r)>.001)&&i.push({start:s.startTime,pdt:n}),r=a}this.presentationTimeline_.setProgramDateTimeRegions(i)}guessMimeTypeBeforeLoading_(e,t){if(e==R.ContentType.TEXT){if(t=="vtt"||t=="wvtt")return"text/vtt";if(t&&t!=="")return"application/mp4"}return e==R.ContentType.IMAGE&&(!t||t=="jpeg")?"image/jpeg":e==R.ContentType.AUDIO&&t=="mp4a.40.34"?"audio/mpeg":t=="mjpg"?"application/mp4":null}guessMimeTypeFallback_(e){return e==R.ContentType.TEXT?"text/vtt":vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(e).get("mp4")}getAvailableSegment_(e){v.assert(e.length,"Should have segments!");let t=this.isLive_()?Math.trunc((e.length-1)/2):0,i=e[t];for(;i.getStatus()==Te.Status.MISSING&&t+1<e.length;)t++,i=e[t];return{segment:i,segmentIndex:t}}async guessMimeType_(e,t,i){let r=K.RequestType.SEGMENT,{segment:s}=this.getAvailableSegment_(i);if(s.status==Te.Status.MISSING)return this.guessMimeTypeFallback_(e);let n,a=s.getUris(),o=ct.getExtension(a[0]);if(o){let g=vt.EXTENSION_MAP_BY_CONTENT_TYPE_.get(e).get(o);if(g||(g=vt.RAW_FORMATS_TO_MIME_TYPES_.get(o),g))return g}if(n=this.guessMimeTypeBeforeLoading_(e,t),n)return n;let c,d=K.AdvancedRequestType.MEDIA_SEGMENT,u=K.makeRequest(a,this.playerInterface_.getStreamingRetryParameters()),m;try{u.method="HEAD",m=await this.makeNetworkRequest_(u,r,{type:d}).promise,c=m.headers["content-type"]}catch(f){f&&(f.code==h.Code.HTTP_ERROR||f.code==h.Code.BAD_HTTP_STATUS)&&(u.method="GET",this.config_.hls.allowRangeRequestsToGuessMimeType&&(u.headers.Range="bytes=0-0"),m=await this.makeNetworkRequest_(u,r,{type:d}).promise,c=m.headers["content-type"])}return c&&(n=c.toLowerCase().split(";")[0],this.isGenericBinaryMimeType_(n)&&(m.data.byteLength||(u.method="GET",m=await this.makeNetworkRequest_(u,r,{type:d}).promise),mt.probe(U.toUint8(m.data))&&(n="video/mp2t")),!this.isGenericBinaryMimeType_(n))?n:this.guessMimeTypeFallback_(e)}isGenericBinaryMimeType_(e){return vt.GENERIC_BINARY_MIME_TYPES_.includes(e)}getRequiredTag_(e,t){let i=he.getFirstTagWithName(e,t);if(!i)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_REQUIRED_TAG_MISSING,t);return i}addVideoAttributes_(e,t,i,r,s,n,a){e&&(e.width=Number(t)||void 0,e.height=Number(i)||void 0,e.frameRate=r||void 0,e.hdr=s||void 0,e.videoLayout=n||void 0,e.colorGamut=a||void 0)}requestManifest_(e,t){let i=K.RequestType.MANIFEST,r=K.makeRequest(e,this.config_.retryParameters),s=t?K.AdvancedRequestType.MEDIA_PLAYLIST:K.AdvancedRequestType.MASTER_PLAYLIST;return this.makeNetworkRequest_(r,i,{type:s})}async onUpdate_(){if(p.info("Updating manifest..."),v.assert(this.getUpdatePlaylistDelay_()>0,"We should only call |onUpdate_| when we are suppose to be updating."),!!this.playerInterface_){try{let e=Date.now();await this.update();let t=Date.now();if(this.isDynamic_()){let i=(t-e)/1e3;this.averageUpdateDuration_.sample(1,i);let r=this.config_.updatePeriod>0?this.config_.updatePeriod:this.getUpdatePlaylistDelay_(),s=Math.max(0,r-this.averageUpdateDuration_.getEstimate());isFinite(s)?this.updatePlaylistTimer_.tickAfter(s):this.updatePlaylistTimer_.tickAfter(1)}}catch(e){if(!this.playerInterface_)return;if(v.assert(e instanceof h,"Should only receive a Shaka error"),this.config_.raiseFatalErrorOnManifestUpdateRequestFailure){this.playerInterface_.onError(e);return}e.severity=h.Severity.RECOVERABLE,this.playerInterface_.onError(e),this.updatePlaylistTimer_.tickAfter(.1)}this.playerInterface_&&this.playerInterface_.onManifestUpdated()}}isDynamic_(){let e=vt.PresentationType_;return this.presentationType_!=e.VOD}isLive_(){let e=vt.PresentationType_;return this.presentationType_==e.LIVE}getUpdatePlaylistDelay_(){return this.lastTargetDuration_}setPresentationType_(e){this.presentationType_=e,this.presentationTimeline_&&this.presentationTimeline_.setStatic(!this.isDynamic_()),this.isDynamic_()||this.updatePlaylistTimer_.stop()}makeNetworkRequest_(e,t,i){if(!this.operationManager_)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.OPERATION_ABORTED);i||(i={}),i.isPreload=this.isPreloadFn_();let r=this.playerInterface_.networkingEngine.request(t,e,i);return this.operationManager_.manage(r),r}isAesMethod_(e){return e=="AES-128"||e=="AES-256"||e=="AES-256-CTR"||e=="AES-256-GCM"}async fairplayDrmParser_(e,t,i){if(t=="video/mp2t")throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);if(de.isMediaKeysPolyfilled("apple"))throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_MSE_ENCRYPTED_LEGACY_APPLE_MEDIA_KEYS_NOT_SUPPORTED);let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("FairPlay in HLS is only supported with [",s.join(", "),"], not",r),null;let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=R.createDrmInfo("com.apple.fps",n,null,a),c=ur.defaultGetKeyId(a);return!c&&i&&(c=await this.getKeyIdFromInitSegment_(i)),c&&o.keyIds.add(c),o}widevineDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("Widevine in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=a.split("?")[0],d=this.psshToInitData_.getOrInsertComputed(c,()=>U.toUint8(o.data)),u=R.createDrmInfo("com.widevine.alpha",n,[{initDataType:"cenc",initData:d}],void 0,o.typeInfoList),m=e.getAttributeValue("KEYID");if(m){let f=m.toLowerCase();v.assert(f.startsWith("0x"),"Incorrect KEYID format!"),u.keyIds.add(f.substr(2))}return Promise.resolve(u)}playreadyDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("PlayReady in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=U.toUint8(o.data),d=new Uint8Array([154,4,240,121,152,64,66,134,171,146,230,91,224,136,95,149]),u=new Set,f=ti.createPssh(c,d,u,0),g=R.createDrmInfo("com.microsoft.playready",n,[{initDataType:"cenc",initData:f}],void 0,o.typeInfoList),_=I.parseXmlString(["<PLAYREADY>",ne.toBase64(c),"</PLAYREADY>"].join(`
|
|
707
|
+
`));return _&&(g.licenseServerUri=Ri.getLicenseUrl(_)),Promise.resolve(g)}wiseplayDrmParser_(e,t,i){let r=e.getRequiredAttrValue("METHOD"),s=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!s.includes(r))return p.error("WisePlay in HLS is only supported with [",s.join(", "),"], not",r),Promise.resolve(null);let n="cenc";r=="SAMPLE-AES"&&(n="cbcs");let a=e.getRequiredAttrValue("URI"),o=_r.parseRaw(a.split("?")[0]),c=a.split("?")[0],d=this.psshToInitData_.getOrInsertComputed(c,()=>U.toUint8(o.data)),u=R.createDrmInfo("com.huawei.wiseplay",n,[{initDataType:"cenc",initData:d}],void 0,o.typeInfoList),m=e.getAttributeValue("KEYID");if(m){let f=m.toLowerCase();v.assert(f.startsWith("0x"),"Incorrect KEYID format!"),u.keyIds.add(f.substr(2))}return Promise.resolve(u)}async identityDrmParser_(e,t,i,r,s){if(t=="video/mp2t")throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.HLS_MSE_ENCRYPTED_MP2T_NOT_SUPPORTED);let n=e.getRequiredAttrValue("METHOD"),a=["SAMPLE-AES","SAMPLE-AES-CTR"];if(!a.includes(n))return p.error("Identity (ClearKey) in HLS is only supported with [",a.join(", "),"], not",n),null;let o=he.constructSegmentUris(i(),e.getRequiredAttrValue("URI"),s),c;if(o[0].startsWith("data:text/plain;base64,"))c=ne.toHex(ne.fromBase64(o[0].split("data:text/plain;base64,").pop()));else{let f=o.sort().join(""),g=await this.identityKeyMap_.getOrInsertComputed(f,()=>{let _=K.RequestType.KEY,T=K.makeRequest(o,this.config_.retryParameters);return this.makeNetworkRequest_(T,_).promise});c=ne.toHex(g.data)}let d="00000000000000000000000000000000";if(r){let f=await this.getKeyIdFromInitSegment_(r);f&&(d=f)}let u=new Map;u.set(d,c);let m="cenc";return n=="SAMPLE-AES"&&(m="cbcs"),R.createDrmInfoFromClearKeys(u,m)}async getKeyIdFromInitSegment_(e){let t=null;if(this.initSegmentToKidMap_.has(e))t=this.initSegmentToKidMap_.get(e);else{let i=ct.createSegmentRequest(e.getUris(),e.getStartByte(),e.getEndByte(),this.playerInterface_.getStreamingRetryParameters()),r=K.RequestType.SEGMENT,s=K.AdvancedRequestType.INIT_SEGMENT,n=await this.makeNetworkRequest_(i,r,{type:s}).promise;e.setSegmentData(n.data),t=_t.getDefaultKID(n.data),this.initSegmentToKidMap_.set(e,t)}return t}};l(vt,"GENERIC_BINARY_MIME_TYPES_",["application/octet-stream","binary/octet-stream"]),l(vt,"PresentationType_",{VOD:"VOD",EVENT:"EVENT",LIVE:"LIVE"}),l(vt,"FAKE_MUXED_URL_","shaka://hls-muxed");var Dt=vt;Dt.RAW_FORMATS_TO_MIME_TYPES_=new Map().set("aac","audio/aac").set("ac3","audio/ac3").set("ec3","audio/ec3").set("mp3","audio/mpeg");Dt.AUDIO_EXTENSIONS_TO_MIME_TYPES_=new Map().set("mp4","audio/mp4").set("mp4a","audio/mp4").set("m4s","audio/mp4").set("m4i","audio/mp4").set("m4a","audio/mp4").set("m4f","audio/mp4").set("cmfa","audio/mp4").set("ts","video/mp2t").set("tsa","video/mp2t");Dt.VIDEO_EXTENSIONS_TO_MIME_TYPES_=new Map().set("mp4","video/mp4").set("mp4v","video/mp4").set("m4s","video/mp4").set("m4i","video/mp4").set("m4v","video/mp4").set("m4f","video/mp4").set("cmfv","video/mp4").set("ts","video/mp2t").set("tsv","video/mp2t");Dt.TEXT_EXTENSIONS_TO_MIME_TYPES_=new Map().set("mp4","application/mp4").set("m4s","application/mp4").set("m4i","application/mp4").set("m4f","application/mp4").set("cmft","application/mp4").set("vtt","text/vtt").set("webvtt","text/vtt").set("ttml","application/ttml+xml");Dt.IMAGE_EXTENSIONS_TO_MIME_TYPES_=new Map().set("jpg","image/jpeg").set("png","image/png").set("svg","image/svg+xml").set("webp","image/webp").set("avif","image/avif");Dt.EXTENSION_MAP_BY_CONTENT_TYPE_=new Map().set("audio",Dt.AUDIO_EXTENSIONS_TO_MIME_TYPES_).set("video",Dt.VIDEO_EXTENSIONS_TO_MIME_TYPES_).set("text",Dt.TEXT_EXTENSIONS_TO_MIME_TYPES_).set("image",Dt.IMAGE_EXTENSIONS_TO_MIME_TYPES_);Dt.MIME_TYPES_WITHOUT_INIT_SEGMENT_=new Set(["video/mp2t",...O.RAW_FORMATS]);me.registerParserByMime("application/x-mpegurl",()=>new Dt);me.registerParserByMime("application/vnd.apple.mpegurl",()=>new Dt);me.registerParserByMime("audio/x-mpegurl",()=>new Dt);/*! @license
|
|
708
708
|
* Shaka Player
|
|
709
709
|
* Copyright 2016 Google LLC
|
|
710
710
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -712,15 +712,15 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
712
712
|
* Shaka Player
|
|
713
713
|
* Copyright 2016 Google LLC
|
|
714
714
|
* SPDX-License-Identifier: Apache-2.0
|
|
715
|
-
*/var Ks=class y{parse(e){let t=[];return new F().boxes(["moov","udta"],F.children).fullBox("meta",F.children).box("ilst",i=>{for(;i.reader.hasMoreData()&&!(i.reader.getLength()-i.reader.getPosition()<8);){let r=i.reader.readUint32(),s=F.typeToString(i.reader.readUint32());if(r<8)break;let n=i.reader.getLength()-i.reader.getPosition(),a=Math.min(r-8,n),o=i.reader.readBytes(a,!1),c=s==="----"?this.parseFreeform_(o):this.parseStandard_(s,o);c&&t.push(c)}}).parse(e),t}parseFreeform_(e){let t="",i="",r=null;return new F().fullBox("mean",s=>{let n=s.reader.getLength()-s.reader.getPosition();t=q.fromUTF8(s.reader.readBytes(n,!1))}).fullBox("name",s=>{let n=s.reader.getLength()-s.reader.getPosition();i=q.fromUTF8(s.reader.readBytes(n,!1))}).fullBox("data",s=>{r=this.parseDataBox_(s)}).parse(e),!r||!i?null:{key:i,data:r.data,description:t?`Domain: ${t}`:"",mimeType:r.mimeType,pictureType:r.pictureType}}parseStandard_(e,t){let i=y.ILST_TO_ID3_.get(e)||e,r=null;return new F().fullBox("data",s=>{let n=this.parseDataBox_(s,e);r={key:i,data:n.data,description:"",mimeType:n.mimeType,pictureType:n.pictureType}}).parse(t),r}parseDataBox_(e,t=""){e.reader.skip(4);let i=e.reader.readBytes(e.reader.getLength()-e.reader.getPosition(),!1);if((t==="trkn"||t==="disk")&&i.length>=6){let r=
|
|
715
|
+
*/var Ks=class y{parse(e){let t=[];return new F().boxes(["moov","udta"],F.children).fullBox("meta",F.children).box("ilst",i=>{for(;i.reader.hasMoreData()&&!(i.reader.getLength()-i.reader.getPosition()<8);){let r=i.reader.readUint32(),s=F.typeToString(i.reader.readUint32());if(r<8)break;let n=i.reader.getLength()-i.reader.getPosition(),a=Math.min(r-8,n),o=i.reader.readBytes(a,!1),c=s==="----"?this.parseFreeform_(o):this.parseStandard_(s,o);c&&t.push(c)}}).parse(e),t}parseFreeform_(e){let t="",i="",r=null;return new F().fullBox("mean",s=>{let n=s.reader.getLength()-s.reader.getPosition();t=q.fromUTF8(s.reader.readBytes(n,!1))}).fullBox("name",s=>{let n=s.reader.getLength()-s.reader.getPosition();i=q.fromUTF8(s.reader.readBytes(n,!1))}).fullBox("data",s=>{r=this.parseDataBox_(s)}).parse(e),!r||!i?null:{key:i,data:r.data,description:t?`Domain: ${t}`:"",mimeType:r.mimeType,pictureType:r.pictureType}}parseStandard_(e,t){let i=y.ILST_TO_ID3_.get(e)||e,r=null;return new F().fullBox("data",s=>{let n=this.parseDataBox_(s,e);r={key:i,data:n.data,description:"",mimeType:n.mimeType,pictureType:n.pictureType}}).parse(t),r}parseDataBox_(e,t=""){e.reader.skip(4);let i=e.reader.readBytes(e.reader.getLength()-e.reader.getPosition(),!1);if((t==="trkn"||t==="disk")&&i.length>=6){let r=U.toDataView(i),s=r.getUint16(2,!1),n=r.getUint16(4,!1);return{data:n>0?`${s}/${n}`:`${s}`,mimeType:null,pictureType:null}}switch(e.flags){case 13:return{data:U.toArrayBuffer(i),mimeType:"image/jpeg",pictureType:3};case 14:return{data:U.toArrayBuffer(i),mimeType:"image/png",pictureType:3};case 21:{let r=U.toDataView(i),s=0;switch(i.length){case 1:s=r.getInt8(0);break;case 2:s=r.getInt16(0,!1);break;case 3:s=i[0]<<16|i[1]<<8|i[2],s&8388608&&(s|=-16777216);break;case 4:s=r.getInt32(0,!1);break;default:s=0;for(let n of i)s=s<<8|n}return{data:s,mimeType:null,pictureType:null}}default:return{data:q.fromUTF8(i).replace(/\0/g,""),mimeType:null,pictureType:null}}}};Ks.ILST_TO_ID3_=new Map().set("\xA9nam","TIT2").set("\xA9ART","TPE1").set("aART","TPE2").set("\xA9alb","TALB").set("\xA9gen","TCON").set("\xA9day","TDRC").set("\xA9wrt","TEXT").set("trkn","TRCK").set("disk","TPOS").set("\xA9cmt","COMM").set("covr","APIC").set("cprt","TCOP").set("\xA9too","TENC").set("tmpo","TBPM").set("cpil","TCMP");Pt.registerParserByMime("audio/mp4",()=>new Ks);/*! @license
|
|
716
716
|
* Shaka Player
|
|
717
717
|
* Copyright 2016 Google LLC
|
|
718
718
|
* SPDX-License-Identifier: Apache-2.0
|
|
719
|
-
*/var Qn=class Qn{parse(e){if(e.length>=4&&e[0]==102&&e[1]==76&&e[2]==97&&e[3]==67){let r=[],s=4;for(;s+4<=e.length;){let n=e[s],a=!!(n&128),o=n&127,c=e[s+1]<<16|e[s+2]<<8|e[s+3];if(s+=4,s+c>e.length)break;let d=e.subarray(s,s+c);if(o==4&&r.push(...this.parseVorbisCommentBlock_(d)),o==6){let u=this.parseFlacPicture_(d);u&&r.push(u)}if(s+=c,a)break}return r}if(e.length>=4&&e[0]==79&&e[1]==103&&e[2]==103&&e[3]==83){let r=q.fromUTF8(e),s=r.indexOf("OpusTags");if(s<0&&(s=r.indexOf("vorbis")),s>=0)return this.parseVorbisCommentBlock_(e.subarray(s+8))}return[]}parseVorbisCommentBlock_(e){let t=[];try{let i=new bt(e,bt.Endianness.LITTLE_ENDIAN),r=i.readUint32();i.skip(r);let s=i.readUint32();for(let n=0;n<s;n++){let a=i.readUint32(),o=q.fromUTF8(i.readBytes(a,!1)),c=o.indexOf("=");if(c<0)continue;let d=o.substring(0,c).toUpperCase(),u=o.substring(c+1),m=Qn.VORBIS_TO_ID3_MAP_[d]||d;t.push({key:m,data:u,description:"",mimeType:null,pictureType:null})}}catch(i){}return t}parseFlacPicture_(e){try{let t=new bt(e,bt.Endianness.BIG_ENDIAN),i=t.readUint32(),r=t.readUint32(),s=q.fromUTF8(t.readBytes(r,!0)),n=t.readUint32(),a=q.fromUTF8(t.readBytes(n,!0));t.skip(16);let o=t.readUint32(),c=t.readBytes(o,!0);return{key:"APIC",data:
|
|
719
|
+
*/var Qn=class Qn{parse(e){if(e.length>=4&&e[0]==102&&e[1]==76&&e[2]==97&&e[3]==67){let r=[],s=4;for(;s+4<=e.length;){let n=e[s],a=!!(n&128),o=n&127,c=e[s+1]<<16|e[s+2]<<8|e[s+3];if(s+=4,s+c>e.length)break;let d=e.subarray(s,s+c);if(o==4&&r.push(...this.parseVorbisCommentBlock_(d)),o==6){let u=this.parseFlacPicture_(d);u&&r.push(u)}if(s+=c,a)break}return r}if(e.length>=4&&e[0]==79&&e[1]==103&&e[2]==103&&e[3]==83){let r=q.fromUTF8(e),s=r.indexOf("OpusTags");if(s<0&&(s=r.indexOf("vorbis")),s>=0)return this.parseVorbisCommentBlock_(e.subarray(s+8))}return[]}parseVorbisCommentBlock_(e){let t=[];try{let i=new bt(e,bt.Endianness.LITTLE_ENDIAN),r=i.readUint32();i.skip(r);let s=i.readUint32();for(let n=0;n<s;n++){let a=i.readUint32(),o=q.fromUTF8(i.readBytes(a,!1)),c=o.indexOf("=");if(c<0)continue;let d=o.substring(0,c).toUpperCase(),u=o.substring(c+1),m=Qn.VORBIS_TO_ID3_MAP_[d]||d;t.push({key:m,data:u,description:"",mimeType:null,pictureType:null})}}catch(i){}return t}parseFlacPicture_(e){try{let t=new bt(e,bt.Endianness.BIG_ENDIAN),i=t.readUint32(),r=t.readUint32(),s=q.fromUTF8(t.readBytes(r,!0)),n=t.readUint32(),a=q.fromUTF8(t.readBytes(n,!0));t.skip(16);let o=t.readUint32(),c=t.readBytes(o,!0);return{key:"APIC",data:U.toArrayBuffer(c),description:a,mimeType:s,pictureType:i}}catch(t){return null}}};l(Qn,"VORBIS_TO_ID3_MAP_",{TITLE:"TIT2",ARTIST:"TPE1",ALBUM:"TALB",ALBUMARTIST:"TPE2",TRACKNUMBER:"TRCK",DISCNUMBER:"TPOS",DATE:"TDRC",GENRE:"TCON",COMMENT:"COMM",DESCRIPTION:"TIT3",COPYRIGHT:"TCOP",COMPOSER:"TCOM",LYRICS:"USLT",ISRC:"TSRC"});var Vr=Qn;Pt.registerParserByMime("audio/flac",()=>new Vr);Pt.registerParserByMime("audio/ogg",()=>new Vr);Pt.registerParserByMime("audio/vorbis",()=>new Vr);Pt.registerParserByMime("audio/opus",()=>new Vr);/*! @license
|
|
720
720
|
* Shaka Player
|
|
721
721
|
* Copyright 2016 Google LLC
|
|
722
722
|
* SPDX-License-Identifier: Apache-2.0
|
|
723
|
-
*/var qs=class{constructor(e){l(this,"frameDuration_");this.frameDuration_=e}parse(e){let t=BigInt(6),i=BigInt(8),{props:r,payloadOffset:s}=this.parsePrivateProperties_(e.data),n=
|
|
723
|
+
*/var qs=class{constructor(e){l(this,"frameDuration_");this.frameDuration_=e}parse(e){let t=BigInt(6),i=BigInt(8),{props:r,payloadOffset:s}=this.parsePrivateProperties_(e.data),n=U.toUint8(e.data,s);if(e.extensions&&e.extensions.byteLength>0){let o=this.parseExtensions_(e.extensions),c=o.get(t);if(typeof c=="bigint"){let d=o.get(i);return{startTime:this.timestampToSeconds_(c,typeof d=="bigint"?d:void 0),duration:this.frameDuration_,payload:n}}}let a=r.get(t);if(typeof a=="bigint"){let o=r.get(i);return{startTime:this.timestampToSeconds_(a,typeof o=="bigint"?o:void 0),duration:this.frameDuration_,payload:n}}return{startTime:Number(e.location.group)*this.frameDuration_,duration:this.frameDuration_,payload:n}}timestampToSeconds_(e,t){let i=t!==void 0?Number(t):1e6;return Number(e)/i}parseExtensions_(e){let t=new Map;if(e.byteLength===0)return t;try{let i=0;for(;i<e.byteLength;){let r=this.readVi64At_(e,i);i+=r.bytesRead;let s=r.value;if(s%BigInt(2)===BigInt(0)){let n=this.readVi64At_(e,i);i+=n.bytesRead,t.set(s,n.value)}else{let n=this.readVi64At_(e,i);i+=n.bytesRead;let a=Number(n.value);t.set(s,U.toUint8(e,i,a)),i+=a}}}catch(i){p.v2("LOCParser: failed to parse extension headers, returning partial map",i)}return t}parsePrivateProperties_(e){let t=new Map;if(e.byteLength===0)return{props:t,payloadOffset:0};try{let i=0,r=this.readVi64At_(e,i);i+=r.bytesRead;let s=Number(r.value);if(s===0||s>64)return{props:t,payloadOffset:0};for(let n=0;n<s;n++){let a=this.readVi64At_(e,i);i+=a.bytesRead;let o=a.value;if(o%BigInt(2)===BigInt(0)){let c=this.readVi64At_(e,i);i+=c.bytesRead,t.set(o,c.value)}else{let c=this.readVi64At_(e,i);i+=c.bytesRead;let d=Number(c.value);t.set(o,U.toUint8(e,i,d)),i+=d}}return{props:t,payloadOffset:i}}catch(i){return p.v2("LOCParser: failed to parse private properties prefix, using full buffer as payload",i),{props:t,payloadOffset:0}}}readVi64At_(e,t){if(t>=e.length)throw new Error(`LOCParser.readVi64At: underflow at offset ${t}`);let i=(e[t]&192)>>6;if(i===0)return{value:BigInt(e[t]&63),bytesRead:1};if(i===1){if(t+2>e.length)throw new Error("LOCParser.readVi64At: need 2 bytes");let s=U.toDataView(e,t,2);return{value:BigInt(s.getUint16(0))&BigInt("0x3fff"),bytesRead:2}}if(i===2){if(t+4>e.length)throw new Error("LOCParser.readVi64At: need 4 bytes");let s=U.toDataView(e,t,4);return{value:BigInt(s.getUint32(0))&BigInt("0x3fffffff"),bytesRead:4}}if(t+8>e.length)throw new Error("LOCParser.readVi64At: need 8 bytes");return{value:U.toDataView(e,t,8).getBigUint64(0)&BigInt("0x3fffffffffffffff"),bytesRead:8}}static frameDurationFromTrack(e){let t=(e.codec||"").toLowerCase();return e.framerate?1/e.framerate:e.samplerate?t.startsWith("mp4a.40")?1024/e.samplerate:t==="opus"?960/e.samplerate:(p.warning(`LOCParser.frameDurationFromTrack: unrecognised codec "${e.codec}" for track "${e.name}"`),null):(p.warning(`LOCParser.frameDurationFromTrack: track "${e.name}" has no samplerate`),null)}};/*! @license
|
|
724
724
|
* Shaka Player
|
|
725
725
|
* Copyright 2016 Google LLC
|
|
726
726
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -728,7 +728,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
728
728
|
* Shaka Player
|
|
729
729
|
* Copyright 2016 Google LLC
|
|
730
730
|
* SPDX-License-Identifier: Apache-2.0
|
|
731
|
-
*/var Jn=class Jn{constructor(e,t){l(this,"buffer_");l(this,"dataView_");l(this,"littleEndian_");l(this,"position_");this.buffer_=new Uint8Array(e),this.dataView_=
|
|
731
|
+
*/var Jn=class Jn{constructor(e,t){l(this,"buffer_");l(this,"dataView_");l(this,"littleEndian_");l(this,"position_");this.buffer_=new Uint8Array(e),this.dataView_=U.toDataView(this.buffer_),this.littleEndian_=t==Jn.Endianness.LITTLE_ENDIAN,this.position_=0}getPosition(){return this.position_}getLength(){return this.position_}getBytes(){return U.toUint8(this.buffer_,0,this.position_)}reset(){this.position_=0}ensureSpace_(e){let t=this.position_+e;if(t<=this.buffer_.length)return;let i=Math.max(this.buffer_.length*2,t),r=new Uint8Array(i);r.set(this.buffer_),this.buffer_=r,this.dataView_=U.toDataView(this.buffer_)}writeUint8(e){this.ensureSpace_(1),this.dataView_.setUint8(this.position_,e&255),this.position_+=1}writeUint16(e){this.ensureSpace_(2),this.dataView_.setUint16(this.position_,e&65535,this.littleEndian_),this.position_+=2}writeUint32(e){this.ensureSpace_(4),this.dataView_.setUint32(this.position_,e>>>0,this.littleEndian_),this.position_+=4}writeUint64(e){if(e<0||e>Number.MAX_SAFE_INTEGER)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.JS_INTEGER_OVERFLOW);this.ensureSpace_(8);let t=Math.floor(e/4294967296),i=e>>>0;this.littleEndian_?(this.dataView_.setUint32(this.position_,i,!0),this.dataView_.setUint32(this.position_+4,t,!0)):(this.dataView_.setUint32(this.position_,t,!1),this.dataView_.setUint32(this.position_+4,i,!1)),this.position_+=8}writeBytes(e){v.assert(e,"Bad call to writeBytes"),this.ensureSpace_(e.byteLength),U.toUint8(this.buffer_,this.position_,e.byteLength).set(e),this.position_+=e.byteLength}writeString(e){let t=U.toUint8(q.toUTF8(e));this.writeUint32(t.length),this.writeBytes(t)}writeVarInt53(e){if(e<0)throw new Error(`Underflow: ${e}`);let t=63,i=16383,r=(1<<30)-1,s=Number.MAX_SAFE_INTEGER;if(e<=t)this.writeUint8(e);else if(e<=i)this.writeUint8(e>>8&63|64),this.writeUint8(e&255);else if(e<=r)this.writeUint8(e>>24&31|128),this.writeUint8(e>>16&255),this.writeUint8(e>>8&255),this.writeUint8(e&255);else if(e<=s){let n=Math.floor(e/4294967296),a=e%4294967296;this.writeUint8(n>>24&15|192),this.writeUint8(n>>16&255),this.writeUint8(n>>8&255),this.writeUint8(n&255),this.writeUint8(a>>24&255),this.writeUint8(a>>16&255),this.writeUint8(a>>8&255),this.writeUint8(a&255)}else throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.JS_INTEGER_OVERFLOW)}writeVarInt62(e){if(e<BigInt(0))throw new Error(`Underflow: ${e}`);if(e<=BigInt(Number.MAX_SAFE_INTEGER)){this.writeVarInt53(Number(e));return}let t=BigInt(255),i=BigInt(15),r=BigInt(192);this.ensureSpace_(8),this.writeUint8(Number(e>>BigInt(56)&i|r)),this.writeUint8(Number(e>>BigInt(48)&t)),this.writeUint8(Number(e>>BigInt(40)&t)),this.writeUint8(Number(e>>BigInt(32)&t)),this.writeUint8(Number(e>>BigInt(24)&t)),this.writeUint8(Number(e>>BigInt(16)&t)),this.writeUint8(Number(e>>BigInt(8)&t)),this.writeUint8(Number(e&t))}writeStringVarInt(e){let t=U.toUint8(q.toUTF8(e));this.writeVarInt53(t.length),this.writeBytes(t)}seek(e){if(v.assert(e>=0,"Bad seek"),e>this.buffer_.length)throw this.outOfBounds_();this.position_=e}skip(e){v.assert(e>=0,"Bad skip"),this.ensureSpace_(e),this.position_+=e}reserveUint16(){let e=this.position_;return this.skip(2),e}patchUint16(e,t){let i=this.position_;this.position_=e,this.writeUint16(t),this.position_=i}outOfBounds_(){return new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.BUFFER_WRITE_OUT_OF_BOUNDS)}};l(Jn,"Endianness",{BIG_ENDIAN:0,LITTLE_ENDIAN:1});var qi=Jn;/*! @license
|
|
732
732
|
* Shaka Player
|
|
733
733
|
* Copyright 2016 Google LLC
|
|
734
734
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -741,7 +741,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
741
741
|
* Shaka Player
|
|
742
742
|
* Copyright 2016 Google LLC
|
|
743
743
|
* SPDX-License-Identifier: Apache-2.0
|
|
744
|
-
*/var os=class{constructor(e,t){l(this,"buffer_");l(this,"stream_");l(this,"reader_");this.buffer_=e,this.stream_=t,this.reader_=t.getReader()}getByteLength(){return this.buffer_.byteLength}getBuffer(){return
|
|
744
|
+
*/var os=class{constructor(e,t){l(this,"buffer_");l(this,"stream_");l(this,"reader_");this.buffer_=e,this.stream_=t,this.reader_=t.getReader()}getByteLength(){return this.buffer_.byteLength}getBuffer(){return U.toUint8(this.buffer_)}async fill_(){let e=await this.reader_.read();if(e.done)return!1;let t=U.toUint8(e.value);if(this.buffer_.byteLength===0)this.buffer_=t;else{let i=new Uint8Array(this.buffer_.byteLength+t.byteLength);i.set(this.buffer_),i.set(t,this.buffer_.byteLength),this.buffer_=i}return!0}async fillTo_(e){for(;this.buffer_.byteLength<e;)if(!await this.fill_())throw new Error("unexpected end of stream")}slice_(e){let t=U.toUint8(this.buffer_,0,e);return this.buffer_=U.toUint8(this.buffer_,e),t}async read(e){return e===0?new Uint8Array([]):(await this.fillTo_(e),this.slice_(e))}async readAll(){for(;await this.fill_(););return this.slice_(this.buffer_.byteLength)}async tuple(){let e=await this.u53(),t=[];for(let i=0;i<e;i++){let r=await this.u53(),s=await this.read(r),n=q.fromUTF8(s);t.push(n)}return t}async string(e){let t=await this.u53();if(e!==void 0&&t>e)throw new Error(`string length ${t} exceeds max length ${e}`);let i=await this.read(t);return q.fromUTF8(i)}async u8(){return await this.fillTo_(1),this.slice_(1)[0]}async u8Bool(){return await this.u8()!==0}async u53(){return(await this.u53WithSize()).value}async u53WithSize(){let e=await this.u62WithSize(),t=e.value;if(t>Number.MAX_SAFE_INTEGER)throw new Error("value larger than 53-bits; use v62 instead");return{value:Number(t),bytesRead:e.bytesRead}}async u62(){return(await this.u62WithSize()).value}async u62WithSize(){await this.fillTo_(1);let e=(this.buffer_[0]&192)>>6,t,i;if(e===0){i=1;let r=this.slice_(1)[0];t=BigInt(r)&BigInt("0x3f")}else if(e===1){i=2,await this.fillTo_(2);let r=this.slice_(2),s=U.toDataView(r);t=BigInt(s.getInt16(0))&BigInt("0x3fff")}else if(e===2){i=4,await this.fillTo_(4);let r=this.slice_(4),s=U.toDataView(r);t=BigInt(s.getUint32(0))&BigInt("0x3fffffff")}else if(e===3){i=8,await this.fillTo_(8);let r=this.slice_(8),s=U.toDataView(r);t=BigInt(s.getBigUint64(0))&BigInt("0x3fffffffffffffff")}else throw new Error(`invalid size: ${e}`);return{value:t,bytesRead:i}}async keyValuePairs(){let e=await this.u53(),t=[];for(let i=0;i<e;i++){let r=await this.u62();if(r%BigInt(2)===BigInt(0)){let s=await this.u62();t.push({type:r,value:s})}else{let s=await this.u53(),n=await this.read(s);t.push({type:r,value:n})}}return t}async deltaKeyValuePairs(){let e=await this.u53(),t=[],i=BigInt(0);for(let r=0;r<e;r++){let s=await this.u62(),n=i+s;if(i=n,n%BigInt(2)===BigInt(0)){let a=await this.u62();t.push({type:n,value:a})}else{let a=await this.u53(),o=await this.read(a);t.push({type:n,value:o})}}return t}async done(){return this.buffer_.byteLength>0?!1:!await this.fill_()}async close(){this.reader_.releaseLock(),await this.stream_.cancel("Reader closed")}release(){this.reader_.releaseLock()}},ea=class{constructor(e){l(this,"stream_");l(this,"writer_");this.stream_=e,this.writer_=e.getWriter()}async write(e){await this.writer_.write(e)}};/*! @license
|
|
745
745
|
* Shaka Player
|
|
746
746
|
* Copyright 2016 Google LLC
|
|
747
747
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -767,7 +767,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
767
767
|
* SPDX-License-Identifier: Apache-2.0
|
|
768
768
|
*/var ra=class{constructor(e,t,i){l(this,"webTransport_");l(this,"controlStream_");l(this,"msfTransport_");l(this,"trackRegistry_");l(this,"nextRequestId_");l(this,"timersSet_");l(this,"isClosing_");l(this,"fetchCallbacks_");this.webTransport_=e,this.controlStream_=t,this.msfTransport_=i,this.trackRegistry_=new uo,this.nextRequestId_=BigInt(0),this.timersSet_=new Set,this.isClosing_=!1,this.fetchCallbacks_=new Map,this.startListeningForStreams_()}getNextRequestId(){let e=this.nextRequestId_;return this.nextRequestId_+=BigInt(2),e}async startListeningForStreams_(){p.debug("Starting to listen for incoming unidirectional streams");try{let e=this.webTransport_.incomingUnidirectionalStreams.getReader();for(;;){let{value:t,done:i}=await e.read();if(i){p.debug("Incoming stream reader is done");break}this.handleIncomingStream_(t).catch(r=>{p.error("Error handling incoming stream:",r)})}}catch(e){p.error("Error listening for incoming streams:",e)}}isSubgroupStreamType_(e){let t=e&BigInt(31);return t>=BigInt(8)&&t<=BigInt(13)||t>=BigInt(16)&&t<=BigInt(21)||t>=BigInt(24)&&t<=BigInt(29)}hasDefaultPriority_(e){return(e&BigInt(32))!==BigInt(0)}async handleIncomingStream_(e){p.v1("Received new incoming unidirectional stream");let t=new os(new Uint8Array([]),e);try{let i=await t.u62();p.v1(`Incoming Unidirectional Stream. Type: ${i}`);let r=BigInt(5);this.isSubgroupStreamType_(i)?await this.handleSubgroupStream_(t,i):i===r?await this.handleFetchStream_(t):p.warning(`Unknown stream type: ${i}`)}catch(i){this.isClosing_?p.debug("Stream processing ended during shutdown"):p.error("Error processing incoming stream:",i)}finally{t.close()}}async handleSubgroupStream_(e,t){try{let i=await e.u62(),r=await e.u62();p.v1(`Track alias: ${i} Group ID: ${r}`);let s=null,n=t&BigInt(31),a=(n&BigInt(1))===BigInt(1),o=n&BigInt(7);if(o===BigInt(0)||o===BigInt(1))s=BigInt(0),p.v1(`Subgroup ID: ${s} (implicit zero)`);else if(o===BigInt(2)||o===BigInt(3))p.v1("Subgroup ID will be set to the first Object ID");else if(o===BigInt(4)||o===BigInt(5))s=await e.u62(),p.v1(`Subgroup ID: ${s} (explicit)`);else throw new Error(`Reserved SID mode: ${t}`);let c=0;this.hasDefaultPriority_(t)?p.v1("Publisher Priority: default (omitted, DEFAULT_PRIORITY bit set)"):(c=await e.u8(),p.v1(`Publisher Priority: ${c}`));let d=[],u=.1,m=5,f=50,g=!0;for(;!await e.done();){let _=Date.now(),T=await e.u62();p.v1(`Object ID: ${T}`),g&&s===null&&(s=T,p.v1(`Subgroup ID set to first Object ID: ${s}`)),g=!1;let b=null;if(a){let C=await e.u62();if(C>BigInt(0)){let k=Number(C);b=await e.read(k),p.v1(`Read ${k} bytes of extension headers`)}}let S=await e.u62();p.v1(`Object payload length: ${S}`);let E=null;S===BigInt(0)&&(E=await e.u62(),p.v1(`Object status: ${E}`));let w=S>BigInt(0)?await e.read(Number(S)):new Uint8Array([]);S>BigInt(0)&&p.v1(`Read ${w.byteLength} bytes of object data`);let A={trackAlias:i,location:{group:r,object:T,subgroup:s},data:w,extensions:b,status:E,payloadReadStartMs:_,receiveTimestampMs:Date.now()},x=!1,M=0;for(;!x&&M<m;){if(this.isClosing_){p.debug(`Track ${i} data discarded during shutdown
|
|
769
769
|
(buffered ${d.length} objects)`);return}let C=this.trackRegistry_.getTrackInfoFromAlias(i);if(C!=null&&C.closed){p.debug(`Ignoring object for closed track ${i}`);return}if(C&&C.callbacks.length>0){if(d.length>0){p.info(`Track ${i} now registered, delivering
|
|
770
|
-
${d.length} buffered objects`);for(let k of d)for(let
|
|
770
|
+
${d.length} buffered objects`);for(let k of d)for(let D of C.callbacks)D(k);d.length=0}for(let k of C.callbacks)k(A);x=!0}else if(M===0&&(p.debug(`Track ${i} not registered yet, buffering
|
|
771
771
|
object (group=${r}, obj=${T})`),d.push(A),d.length>f&&(p.warning(`Buffer overflow for track ${i},
|
|
772
772
|
dropping oldest object
|
|
773
773
|
(buffered: ${d.length})`),d.shift())),M++,M<m){if(p.debug(`Retry ${M}/${m} for track
|
|
@@ -808,14 +808,14 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
808
808
|
* Shaka Player
|
|
809
809
|
* Copyright 2016 Google LLC
|
|
810
810
|
* SPDX-License-Identifier: Apache-2.0
|
|
811
|
-
*/var sa=class{constructor(e){l(this,"webTransport_");l(this,"negotiatedVersion_");l(this,"config_");l(this,"nextRequestId_");l(this,"publishNamespaceCallbacks_");l(this,"messageHandlers_");l(this,"tracksManager_");this.webTransport_=null,this.negotiatedVersion_=null,this.config_=e,this.nextRequestId_=BigInt(0),this.publishNamespaceCallbacks_=new Set,this.messageHandlers_=new Map,this.tracksManager_=null}configure(e){this.config_=e}getConfiguration(){return this.config_}async connect(e,t,i){if(!window.WebTransport)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.WEBTRANSPORT_NOT_AVAILABLE);let r={allowPooling:!1,congestionControl:"low-latency"};t&&(r.serverCertificateHashes=[{algorithm:"sha-256",value:t}]);let s="moq-00",n="moqt-16";switch(this.config_.version){case Dr.AUTO:r.protocols=[n,s];break;case Dr.DRAFT_16:r.protocols=[n];break}switch(this.webTransport_=new WebTransport(e,r),this.webTransport_.closed.catch(()=>{}),await this.webTransport_.ready,p.v1("WebTransport connection established"),this.config_.version){case Dr.DRAFT_14:this.negotiatedVersion_=P.Version.DRAFT_14;break;case Dr.DRAFT_16:this.negotiatedVersion_=P.Version.DRAFT_16;break;default:this.webTransport_.protocol===s?this.negotiatedVersion_=P.Version.DRAFT_14:this.negotiatedVersion_=P.Version.DRAFT_16;break}v.assert(this.negotiatedVersion_!=null,"this.negotiatedVersion_ must be non-null.");let a=await this.webTransport_.createBidirectionalStream();p.v1("Bidirectional stream created",a);let o=new ea(a.writable),c=new os(new Uint8Array([]),a.readable),d=new ia(o,this.negotiatedVersion_);p.v1("Sending client setup message");let u=P.isDraft16(this.negotiatedVersion_)?[]:[P.Version.DRAFT_14],m="ShakaPlayer/"+dt.version,f=[{type:BigInt(P.SetupOption.MAX_REQUEST_ID),value:BigInt(42069)},{type:BigInt(P.SetupOption.IMPLEMENTATION),value:
|
|
811
|
+
*/var sa=class{constructor(e){l(this,"webTransport_");l(this,"negotiatedVersion_");l(this,"config_");l(this,"nextRequestId_");l(this,"publishNamespaceCallbacks_");l(this,"messageHandlers_");l(this,"tracksManager_");this.webTransport_=null,this.negotiatedVersion_=null,this.config_=e,this.nextRequestId_=BigInt(0),this.publishNamespaceCallbacks_=new Set,this.messageHandlers_=new Map,this.tracksManager_=null}configure(e){this.config_=e}getConfiguration(){return this.config_}async connect(e,t,i){if(!window.WebTransport)throw new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.WEBTRANSPORT_NOT_AVAILABLE);let r={allowPooling:!1,congestionControl:"low-latency"};t&&(r.serverCertificateHashes=[{algorithm:"sha-256",value:t}]);let s="moq-00",n="moqt-16";switch(this.config_.version){case Dr.AUTO:r.protocols=[n,s];break;case Dr.DRAFT_16:r.protocols=[n];break}switch(this.webTransport_=new WebTransport(e,r),this.webTransport_.closed.catch(()=>{}),await this.webTransport_.ready,p.v1("WebTransport connection established"),this.config_.version){case Dr.DRAFT_14:this.negotiatedVersion_=P.Version.DRAFT_14;break;case Dr.DRAFT_16:this.negotiatedVersion_=P.Version.DRAFT_16;break;default:this.webTransport_.protocol===s?this.negotiatedVersion_=P.Version.DRAFT_14:this.negotiatedVersion_=P.Version.DRAFT_16;break}v.assert(this.negotiatedVersion_!=null,"this.negotiatedVersion_ must be non-null.");let a=await this.webTransport_.createBidirectionalStream();p.v1("Bidirectional stream created",a);let o=new ea(a.writable),c=new os(new Uint8Array([]),a.readable),d=new ia(o,this.negotiatedVersion_);p.v1("Sending client setup message");let u=P.isDraft16(this.negotiatedVersion_)?[]:[P.Version.DRAFT_14],m="ShakaPlayer/"+dt.version,f=[{type:BigInt(P.SetupOption.MAX_REQUEST_ID),value:BigInt(42069)},{type:BigInt(P.SetupOption.IMPLEMENTATION),value:U.toUint8(q.toUTF8(m))}];i&&f.push({type:BigInt(P.SetupOption.AUTHORIZATION_TOKEN),value:this.buildAuthToken_(i)}),await d.client({versions:u,params:f});let g=new ta(c,this.negotiatedVersion_);p.v1("Waiting for server setup message");let _=await g.server();if(p.v1("Received server setup:",_),!P.isDraft16(this.negotiatedVersion_)&&!u.includes(_.version))throw new Error(`Unsupported server version: ${_.version}`);let T=new Zn(c,o,this.negotiatedVersion_);if(p.v1(`Control stream established (${this.negotiatedVersion_})`),Ve)switch(this.negotiatedVersion_){case P.Version.DRAFT_14:p.info("Connection established with draft-14");break;case P.Version.DRAFT_16:p.info("Connection established with draft-16");break}this.tracksManager_=new ra(this.webTransport_,T,this),p.v1("Tracks manager created with control stream and client reference");let b=new ho(this.webTransport_,T,this);return this.listenForControlMessages_(T),b}release(){var e;p.v1("Closing client connection"),this.publishNamespaceCallbacks_.clear(),(e=this.tracksManager_)==null||e.release(),this.tracksManager_=null}getNextRequestId(){let e=this.nextRequestId_;return this.nextRequestId_+=BigInt(2),p.v1(`Generated new request ID: ${e}`),e}async listenForControlMessages_(e){var t;p.v1("Starting to listen for control messages");try{for(;;){let i=await e.receive();if(i.kind===P.MessageType.PUBLISH_NAMESPACE){let r=i;p.info(`Received PublishNamespace message with namespace:
|
|
812
812
|
${r.namespace.join("/")}`);try{let s={kind:P.MessageType.PUBLISH_NAMESPACE_OK,requestId:r.requestId,namespace:r.namespace};await e.send(s),p.debug("Sent PublishNamespaceOk for requestId",r.requestId)}catch(s){p.error(`Error sending PublishNamespaceOk: ${s instanceof Error?s.message:String(s)}`)}for(let s of this.publishNamespaceCallbacks_)try{s(r.namespace)}catch(n){p.error(`Error in PublishNamespace callback: ${n instanceof Error?n.message:String(n)}`)}}else if(i.kind===P.MessageType.PUBLISH_DONE){let r=i;p.debug(`Received PublishDone for requestId ${r.requestId}`),(t=this.tracksManager_)==null||t.handlePublishDone(r.requestId)}else if("requestId"in i){let r=i.requestId,s=this.messageHandlers_.get(i.kind);if(s&&s.has(r)){p.debug(`Found handler for message kind ${i.kind} with
|
|
813
813
|
requestId ${r}`);try{let n=s.get(r);n?n(i):p.warning(`Handler for message kind ${i.kind} with
|
|
814
814
|
requestId ${r} was null`),s.delete(r)}catch(n){p.error(`Error in message handler for kind ${i.kind}
|
|
815
815
|
with requestId ${r}: ${n instanceof Error?n.message:String(n)}`)}}else p.debug(`No handler found for message kind ${i.kind}
|
|
816
816
|
with requestId ${r}`)}else p.debug(`Received message of kind ${i.kind} without a request ID`)}}catch(i){i instanceof Error&&i.message.includes("session is closed")?p.debug("Control message listener stopped: connection closed"):p.error("Error while listening for control messages:",i)}}registerMessageHandler(e,t,i){p.v1(`Registering handler for message kind ${e} with
|
|
817
817
|
requestId ${t}`),this.messageHandlers_.has(e)||this.messageHandlers_.set(e,new Map);let r=this.messageHandlers_.get(e);if(!r)throw new Error(`Handler map for message kind ${e} not found`);return r.set(t,i),()=>{p.v1(`Unregistering handler for message kind ${e} with
|
|
818
|
-
requestId ${t}`);let s=this.messageHandlers_.get(e);s&&s.delete(t)}}subscribeTrack(e,t,i){if(!this.tracksManager_)throw new Error("Cannot subscribe: Tracks manager not initialized");return p.v1(`Client subscribing to track ${e.join("/")}:${t}`),this.tracksManager_.subscribeTrack(e,t,i)}async unsubscribeTrack(e){if(!this.tracksManager_)throw new Error("Cannot unsubscribe: Tracks manager not initialized");p.v1(`Client unsubscribing from track with alias ${e}`),await this.tracksManager_.unsubscribeTrack(e)}async fetchTrack(e,t,i){if(!this.tracksManager_)throw new Error("Cannot fetch: Tracks manager not initialized");p.v1(`Client fetching track ${e.join("/")}:${t}`),await this.tracksManager_.fetchTrack(e,t,i)}registerPublishNamespaceCallback(e){return p.v1("Registering PublishNamespace callback"),this.publishNamespaceCallbacks_.add(e),()=>{p.v1("Unregistering PublishNamespace callback"),this.publishNamespaceCallbacks_.delete(e)}}buildAuthToken_(e){let t=
|
|
818
|
+
requestId ${t}`);let s=this.messageHandlers_.get(e);s&&s.delete(t)}}subscribeTrack(e,t,i){if(!this.tracksManager_)throw new Error("Cannot subscribe: Tracks manager not initialized");return p.v1(`Client subscribing to track ${e.join("/")}:${t}`),this.tracksManager_.subscribeTrack(e,t,i)}async unsubscribeTrack(e){if(!this.tracksManager_)throw new Error("Cannot unsubscribe: Tracks manager not initialized");p.v1(`Client unsubscribing from track with alias ${e}`),await this.tracksManager_.unsubscribeTrack(e)}async fetchTrack(e,t,i){if(!this.tracksManager_)throw new Error("Cannot fetch: Tracks manager not initialized");p.v1(`Client fetching track ${e.join("/")}:${t}`),await this.tracksManager_.fetchTrack(e,t,i)}registerPublishNamespaceCallback(e){return p.v1("Registering PublishNamespace callback"),this.publishNamespaceCallbacks_.add(e),()=>{p.v1("Unregistering PublishNamespace callback"),this.publishNamespaceCallbacks_.delete(e)}}buildAuthToken_(e){let t=U.toUint8(q.toUTF8(e)),i=new qi(2+t.length,qi.Endianness.BIG_ENDIAN);return i.writeVarInt53(3),i.writeVarInt53(0),i.writeBytes(t),i.getBytes()}},ho=class{constructor(e,t,i){l(this,"webTransport_");l(this,"controlStream_");l(this,"msfTransport_");this.webTransport_=e,this.controlStream_=t,this.msfTransport_=i}control(){return this.controlStream_}getNextRequestId(){return this.msfTransport_.getNextRequestId()}async close(e=0,t=""){p.v1(`Closing connection with code ${e}: ${t}`),this.webTransport_.close({closeCode:e,reason:t}),await this.webTransport_.closed}};/*! @license
|
|
819
819
|
* Shaka Player
|
|
820
820
|
* Copyright 2016 Google LLC
|
|
821
821
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -831,7 +831,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
831
831
|
${i}`),this.msfTransport_.unsubscribeTrack(i).catch(s=>{p.error(`Failed to unsubscribe from catalog: ${s}`)})};this.unregisterCatalogCallback_&&(p.debug("Unregistering previous catalog callback"),this.unregisterCatalogCallback_()),this.unregisterCatalogCallback_=r,p.debug(`Successfully subscribed to catalog in namespace:
|
|
832
832
|
${t} with track alias: ${i}`)}catch(t){p.error("Error subscribing to catalog:",t),t&&t.kind==P.MessageType.SUBSCRIBE_ERROR?this.catalogPromise_.reject(new h(h.Severity.CRITICAL,h.Category.MANIFEST,h.Code.MSF_NO_CATALOG,t.code,t.reason)):this.catalogPromise_.reject(t)}}recordBandwidthSample_(e,t,i,r){let s=this.bandwidthSamples_.getOrInsert(e,{bytes:0,readMs:0,group:t.group});t.group!==s.group&&(s.bytes>0&&this.playerInterface_.onSegmentReceived(Math.max(s.readMs,1),s.bytes),s.bytes=0,s.readMs=0,s.group=t.group),s.bytes+=i,s.readMs+=r}async subscribeToTrack(e,t,i){try{let r=[];e.namespace&&r.push(e.namespace),r.length||(this.config_.msf.namespaces.length?r=this.config_.msf.namespaces:this.publishNamespaces_.length?r=this.publishNamespaces_[0]:r=[]);let s=e.name;p.debug(`Subscribing to track: ${t}`);let n=await this.msfTransport_.subscribeTrack(r,s,o=>{p.v1(`Received object for track ${t} with`,o),i(o)}),a=()=>{if(!this.playerInterface_){p.debug("Skipping catalog unsubscribe during disconnect");return}p.debug(`Unsubscribing from catalog track with alias
|
|
833
833
|
${n}`),this.msfTransport_.unsubscribeTrack(n).catch(o=>{p.error(`Failed to unsubscribe from catalog: ${o}`)})};this.unregisterTracksCallback_.set(t,a),p.debug(`Subscribed to track ${t} with alias ${n}`)}catch(r){p.debug(`Error subscribing to track:
|
|
834
|
-
${r instanceof Error?r.message:String(r)}`)}}processCatalog_(e){p.info("MSF Catalog:",e);let t=this.config_.msf.catalogPreprocessor,i=st.defaultCatalogPreprocessor;t!=i&&(t(e),p.info("MSF Catalog after preprocessor:",e));let r=[],s=!0,n=1/0,a=0,o=this.getContentProtections_(e),c=new Map;for(let d of e.initDataList||[])c.set(d.id,d.data);for(let d of e.tracks)"isLive"in d&&(s=d.isLive),d.targetLatency&&(a=Math.max(a,d.targetLatency)),d.trackDuration&&(n=Math.min(n,d.trackDuration)),r.push(this.processTrack_(d,o,c));if(a){let d={maxLatency:null,maxPlaybackRate:null,minLatency:null,minPlaybackRate:null,targetLatency:a/1e3};this.manifest_.serviceDescription=d}return s&&this.presentationTimeline_.setStatic(!1),this.presentationTimeline_.setDuration(n),Promise.all(r)}getContentProtections_(e){var s,n;let t=de.getUuidMap(),i=new Map,r=e.contentProtections||[];for(let a of r){let o=a.refID,c=a.drmSystem;if(!c)continue;let d=t[c.systemID.toLowerCase()];if(!d)continue;let u=a.scheme||"cenc",m=null;c.pssh&&(m=[{initDataType:"cenc",initData:ne.fromBase64(c.pssh)}]);let f=R.createDrmInfo(d,u,m);if((s=c.laURL)!=null&&s.url?f.licenseServerUri=c.laURL.url:m&&de.isPlayReadyKeySystem(d)&&(f.licenseServerUri=Ri.getLicenseUrlFromPssh(m[0].initData)),(n=c.certURL)!=null&&n.url&&(f.serverCertificateUri=c.certURL.url),c.robustness&&(f.videoRobustness=c.robustness,f.audioRobustness=c.robustness),a.defaultKID)for(let g of a.defaultKID){let _=g.replace(/-/g,"").toLowerCase();f.keyIds.add(_)}i.set(o,f)}return i}processTrack_(e,t,i){let r=R.ContentType,s=new Uint8Array([]);e.initData?s=ne.fromBase64(e.initData):e.initRef&&i.has(e.initRef)&&(s=ne.fromBase64(i.get(e.initRef)));let n=e.codec&&e.packaging==="loc",a=null;if(["cmaf","chunk-per-object"].includes(e.packaging))a=_t.getBasicInfoFromMp4(s,s,!1);else if(n){let G=`moq/loc; codecs="${e.codec}"`;a=_t.getBasicInfoFromMimeType(G)}if(!a){p.info("Skipping incompatible track",e);return}let c=a.timescale||e.timescale;if(!c&&!n){p.info("Skipping incompatible track due missing timescale",e);return}let d=a.mimeType||e.mimeType||"",u=a.codecs,m=e.lang;(!e.lang||e.lang=="und")&&(m=a.language||e.lang);let f=Number(a.frameRate)||e.framerate,g=Number(a.width)||e.width,_=Number(a.height)||e.height,T=a.channelCount;!T&&e.channelConfig&&(T=parseInt(e.channelConfig,10));let b=a.sampleRate||e.samplerate||null,S=a.videoRange||void 0,E=a.colorGamut||void 0,w=r.TEXT;for(let G of R.VIDEO_CODEC_REGEXPS)G.test(u.trim())&&(w=r.VIDEO);if(w==r.TEXT)for(let G of R.AUDIO_CODEC_REGEXPS)G.test(u.trim())&&(w=r.AUDIO);let A,x=null,M=[];if(e.role)switch(M.push(e.role),e.role){case"audiodescription":w==r.AUDIO&&(x=me.AccessibilityPurpose.VISUALLY_IMPAIRED);break;case"caption":w==r.TEXT&&(A=R.TextStreamKind.CLOSED_CAPTION);break;case"subtitle":w==r.TEXT&&(A=R.TextStreamKind.SUBTITLE);break}let C=[],k=e.contentProtectionRefIDs;if(k)for(let G of k){let J=t.get(G);if(J)C.push(J);else{p.alwaysWarn("Unrecognized contentProtectionRefID",G);return}}else C=a.drmInfos;let
|
|
834
|
+
${r instanceof Error?r.message:String(r)}`)}}processCatalog_(e){p.info("MSF Catalog:",e);let t=this.config_.msf.catalogPreprocessor,i=st.defaultCatalogPreprocessor;t!=i&&(t(e),p.info("MSF Catalog after preprocessor:",e));let r=[],s=!0,n=1/0,a=0,o=this.getContentProtections_(e),c=new Map;for(let d of e.initDataList||[])c.set(d.id,d.data);for(let d of e.tracks)"isLive"in d&&(s=d.isLive),d.targetLatency&&(a=Math.max(a,d.targetLatency)),d.trackDuration&&(n=Math.min(n,d.trackDuration)),r.push(this.processTrack_(d,o,c));if(a){let d={maxLatency:null,maxPlaybackRate:null,minLatency:null,minPlaybackRate:null,targetLatency:a/1e3};this.manifest_.serviceDescription=d}return s&&this.presentationTimeline_.setStatic(!1),this.presentationTimeline_.setDuration(n),Promise.all(r)}getContentProtections_(e){var s,n;let t=de.getUuidMap(),i=new Map,r=e.contentProtections||[];for(let a of r){let o=a.refID,c=a.drmSystem;if(!c)continue;let d=t[c.systemID.toLowerCase()];if(!d)continue;let u=a.scheme||"cenc",m=null;c.pssh&&(m=[{initDataType:"cenc",initData:ne.fromBase64(c.pssh)}]);let f=R.createDrmInfo(d,u,m);if((s=c.laURL)!=null&&s.url?f.licenseServerUri=c.laURL.url:m&&de.isPlayReadyKeySystem(d)&&(f.licenseServerUri=Ri.getLicenseUrlFromPssh(m[0].initData)),(n=c.certURL)!=null&&n.url&&(f.serverCertificateUri=c.certURL.url),c.robustness&&(f.videoRobustness=c.robustness,f.audioRobustness=c.robustness),a.defaultKID)for(let g of a.defaultKID){let _=g.replace(/-/g,"").toLowerCase();f.keyIds.add(_)}i.set(o,f)}return i}processTrack_(e,t,i){let r=R.ContentType,s=new Uint8Array([]);e.initData?s=ne.fromBase64(e.initData):e.initRef&&i.has(e.initRef)&&(s=ne.fromBase64(i.get(e.initRef)));let n=e.codec&&e.packaging==="loc",a=null;if(["cmaf","chunk-per-object"].includes(e.packaging))a=_t.getBasicInfoFromMp4(s,s,!1);else if(n){let G=`moq/loc; codecs="${e.codec}"`;a=_t.getBasicInfoFromMimeType(G)}if(!a){p.info("Skipping incompatible track",e);return}let c=a.timescale||e.timescale;if(!c&&!n){p.info("Skipping incompatible track due missing timescale",e);return}let d=a.mimeType||e.mimeType||"",u=a.codecs,m=e.lang;(!e.lang||e.lang=="und")&&(m=a.language||e.lang);let f=Number(a.frameRate)||e.framerate,g=Number(a.width)||e.width,_=Number(a.height)||e.height,T=a.channelCount;!T&&e.channelConfig&&(T=parseInt(e.channelConfig,10));let b=a.sampleRate||e.samplerate||null,S=a.videoRange||void 0,E=a.colorGamut||void 0,w=r.TEXT;for(let G of R.VIDEO_CODEC_REGEXPS)G.test(u.trim())&&(w=r.VIDEO);if(w==r.TEXT)for(let G of R.AUDIO_CODEC_REGEXPS)G.test(u.trim())&&(w=r.AUDIO);let A,x=null,M=[];if(e.role)switch(M.push(e.role),e.role){case"audiodescription":w==r.AUDIO&&(x=me.AccessibilityPurpose.VISUALLY_IMPAIRED);break;case"caption":w==r.TEXT&&(A=R.TextStreamKind.CLOSED_CAPTION);break;case"subtitle":w==r.TEXT&&(A=R.TextStreamKind.SUBTITLE);break}let C=[],k=e.contentProtectionRefIDs;if(k)for(let G of k){let J=t.get(G);if(J)C.push(J);else{p.alwaysWarn("Unrecognized contentProtectionRefID",G);return}}else C=a.drmInfos;let D=new Map;if(!this.config_.disableText)for(let G of e.accessibility||[]){let J=G.schemeId,Z=G.value;J=="urn:scte:dash:cc:cea-608:2015"?R.parseCEA608Captions(Z,D):J=="urn:scte:dash:cc:cea-708:2015"&&R.parseCEA708Captions(Z,D)}let V={id:this.globalId_++,originalId:e.name,groupId:null,createSegmentIndex:()=>Promise.resolve(),segmentIndex:null,mimeType:d,codecs:u,supplementalCodecs:"",kind:A,encrypted:!1,drmInfos:C,keyIds:new Set,language:Se.normalize(m||"und"),originalLanguage:m||null,label:e.label||null,type:w,primary:!1,trickModeVideo:null,dependencyStream:null,emsgSchemeIdUris:null,frameRate:f,pixelAspectRatio:void 0,width:g,height:_,bandwidth:e.bitrate,roles:M,forced:!1,channelsCount:T,audioSamplingRate:b,spatialAudio:!1,closedCaptions:D,hdr:S,colorGamut:E,videoLayout:void 0,tilesLayout:void 0,accessibilityPurpose:x,external:!1,fastSwitching:!1,fullMimeTypes:new Set([O.getFullType(d,u)]),isAudioMuxedInVideo:!1,baseOriginalId:null,isIframe:!1},ee=`${e.namespace||""}/${e.name}`,oe=null;c&&(oe=new Tt(()=>[],0,null,null,c,s));let le=null;if(n){let G=qs.frameDurationFromTrack(e);if(G===null){p.warning(`LOC track "${e.name}" has no usable frame duration; skipping.`);return}le=new qs(G)}switch(V.createSegmentIndex=()=>{let G=Promise.withResolvers();return this.subscribeToTrack(e,ee,J=>{let Z=J.data;if(!V.segmentIndex||!Z.byteLength)return;this.recordBandwidthSample_(ee,J.location,Z.byteLength,J.receiveTimestampMs-J.payloadReadStartMs);let ce,W;if(n){v.assert(le,"locParser must be non-null");let Y=le.parse(J);W=Y.duration,ce=Y.startTime,Z=Y.payload}else{v.assert(typeof c=="number","Timescale should be a number!");let Y=_t.getStartTimeAndDurationFromMp4(Z,c);ce=Y.startTime,W=Y.duration}if(!W||!Z.byteLength)return;let z=new Te(ce,ce+W,()=>[],0,null,oe,0,0,1/0);z.setSegmentData(Z),this.receivedFirstSegment_.add(w);let ge=this.presentationTimeline_.isStartTimeLocked();if(ge){let Y=Math.min(z.startTime-2,this.presentationTimeline_.getSegmentAvailabilityStart());V.segmentIndex.mergeAndEvict([z],Y)}else V.segmentIndex.merge([z]);if(this.presentationTimeline_.notifySegments([z]),this.presentationTimeline_.notifyMaxSegmentDuration(W),this.presentationTimeline_.isDynamic()){let Y=this.presentationTimeline_.getMaxSegmentDuration();Y>0&&this.presentationTimeline_.setSegmentAvailabilityDuration(Y)}!ge&&(!this.audioStreams_.length||this.receivedFirstSegment_.has(r.AUDIO))&&(!this.videoStreams_.length||this.receivedFirstSegment_.has(r.VIDEO))&&this.presentationTimeline_.lockStartTime(),G==null||G.resolve(),G=null}),V.segmentIndex=new Ze([]),G==null?void 0:G.promise},V.closeSegmentIndex=()=>{var G;this.unregisterTracksCallback_.has(ee)&&(this.unregisterTracksCallback_.get(ee)(),this.unregisterTracksCallback_.delete(ee)),this.bandwidthSamples_.delete(ee),(G=V.segmentIndex)==null||G.release(),V.segmentIndex=null},w){case r.AUDIO:this.config_.disableAudio||this.audioStreams_.push(V);break;case r.VIDEO:this.config_.disableVideo||this.videoStreams_.push(V);break;case r.TEXT:this.config_.disableText||this.textStreams_.push(V);break}}createVariants_(){let e=R.ContentType,t=0,i=[];if(!this.videoStreams_.length||!this.audioStreams_.length){let r=this.videoStreams_.length?this.videoStreams_:this.audioStreams_;for(let s of r){let n=t++,a=s.bandwidth||0;s.dependencyStream&&(a+=s.dependencyStream.bandwidth||0),i.push({id:n,language:s.language,disabledUntilTime:0,primary:s.primary,audio:s.type==e.AUDIO?s:null,video:s.type==e.VIDEO?s:null,bandwidth:a,drmInfos:s.drmInfos,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}}else for(let r of this.audioStreams_)for(let s of this.videoStreams_){let n=de.getCommonDrmInfos(r.drmInfos,s.drmInfos);if(r.drmInfos.length&&s.drmInfos.length&&!n.length){p.warning("Incompatible DRM in audio & video, skipping variant creation.",r,s);continue}let a=(r.bandwidth||0)+(s.bandwidth||0);r.dependencyStream&&(a+=r.dependencyStream.bandwidth||0),s.dependencyStream&&(a+=s.dependencyStream.bandwidth||0);let o=t++;i.push({id:o,language:r.language,disabledUntilTime:0,primary:r.primary,audio:r,video:s,bandwidth:a,drmInfos:n,allowedByApplication:!0,allowedByKeySystem:!0,decodingInfos:[]})}this.variants_=i}};me.registerParserByMime("application/msf",()=>new aa);/*! @license
|
|
835
835
|
* Shaka Player
|
|
836
836
|
* Copyright 2016 Google LLC
|
|
837
837
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -839,7 +839,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
839
839
|
* Shaka Player
|
|
840
840
|
* Copyright 2016 Google LLC
|
|
841
841
|
* SPDX-License-Identifier: Apache-2.0
|
|
842
|
-
*/var Ui=class y{static parse(e,t,i,r,s,n){let a=new y.Headers_;try{ei.asMap(t.headers).forEach((_,T)=>{a.append(T,_)})}catch(_){return p.debug("Failed to create headers:",_),Ye.failed(new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.HTTP_ERROR,e,_,i))}let o=new y.AbortController_,c={body:t.body||void 0,headers:a,method:t.method,signal:o.signal,credentials:t.allowCrossSiteCredentials?"include":void 0},d={canceled:!1,timedOut:!1},u=n.minBytesForProgressEvents||0,m=y.request_(e,t,i,c,d,r,s,t.streamDataCallback,u),f=new Ye(m,()=>(d.canceled=!0,o.abort(),Promise.resolve())),g=t.retryParameters.timeout;if(g){let _=new ae(()=>{d.timedOut=!0,o.abort()});_.tickAfter(g/1e3),f.finally(()=>{_.stop()})}return f}static async request_(e,t,i,r,s,n,a,o,c){let d=y.fetch_,u=y.ReadableStream_,m,f=new ArrayBuffer(0),g=0,_=0,T={},b=Date.now();try{if(m=await d(e,r),T=y.headersToGenericObject_(m.headers),a(T),r.method!="HEAD"){v.assert(m.body,"non-HEAD responses should have a body");let S=m.headers.get("Content-Length"),E=S?parseInt(S,10):0;if(m.body){let w=m.clone().body.getReader(),A=x=>{let M=async()=>{let C;try{C=await w.read()}catch(V){p.v1("error reading from stream",V.message);return}C.done||(g+=C.value.byteLength,o&&await o(C.value));let k=Date.now(),
|
|
842
|
+
*/var Ui=class y{static parse(e,t,i,r,s,n){let a=new y.Headers_;try{ei.asMap(t.headers).forEach((_,T)=>{a.append(T,_)})}catch(_){return p.debug("Failed to create headers:",_),Ye.failed(new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.HTTP_ERROR,e,_,i))}let o=new y.AbortController_,c={body:t.body||void 0,headers:a,method:t.method,signal:o.signal,credentials:t.allowCrossSiteCredentials?"include":void 0},d={canceled:!1,timedOut:!1},u=n.minBytesForProgressEvents||0,m=y.request_(e,t,i,c,d,r,s,t.streamDataCallback,u),f=new Ye(m,()=>(d.canceled=!0,o.abort(),Promise.resolve())),g=t.retryParameters.timeout;if(g){let _=new ae(()=>{d.timedOut=!0,o.abort()});_.tickAfter(g/1e3),f.finally(()=>{_.stop()})}return f}static async request_(e,t,i,r,s,n,a,o,c){let d=y.fetch_,u=y.ReadableStream_,m,f=new ArrayBuffer(0),g=0,_=0,T={},b=Date.now();try{if(m=await d(e,r),T=y.headersToGenericObject_(m.headers),a(T),r.method!="HEAD"){v.assert(m.body,"non-HEAD responses should have a body");let S=m.headers.get("Content-Length"),E=S?parseInt(S,10):0;if(m.body){let w=m.clone().body.getReader(),A=x=>{let M=async()=>{let C;try{C=await w.read()}catch(V){p.v1("error reading from stream",V.message);return}C.done||(g+=C.value.byteLength,o&&await o(C.value));let k=Date.now(),D=g-_;if(k-b>100&&D>=c||C.done){let V=C.done?0:E-g;n(k-b,D,V),_=g,b=k}C.done?(v.assert(!C.value,'readObj should be unset when "done" is true.'),x.close()):(x.enqueue(C.value),M())};M()};new u({start:A}),f=await m.arrayBuffer()}else{f=await m.arrayBuffer();let w=Date.now();n(w-b,f.byteLength,0)}}if(t.headers.Range){let S=t.headers.Range.replace("bytes=","").split("-").filter(E=>E).map(E=>parseInt(E,10));S.length==2&&f.byteLength!=S[1]-S[0]+1&&p.alwaysWarn("Payload length does not match range requested bytes",t,m)}}catch(S){throw s.canceled?new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.OPERATION_ABORTED,e,i):s.timedOut?new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.TIMEOUT,e,i):new h(h.Severity.RECOVERABLE,h.Category.NETWORK,h.Code.HTTP_ERROR,e,S,i)}return ls.makeResponse(T,f,m.status,e,m.url,t,i)}static headersToGenericObject_(e){let t={};return e.forEach((i,r)=>{t[r.trim()]=i}),t}static isSupported(){if(window.ReadableStream)try{new ReadableStream({})}catch(e){return!1}else return!1;if(window.Response){if(!new Response("").body)return!1}else return!1;return!!(window.fetch&&!("polyfill"in window.fetch)&&window.AbortController)}};Ui.fetch_=window.fetch;Ui.AbortController_=window.AbortController;Ui.ReadableStream_=window.ReadableStream;Ui.Headers_=window.Headers;Ui.isSupported()&&(K.registerScheme("http",Ui.parse,K.PluginPriority.PREFERRED,!0),K.registerScheme("https",Ui.parse,K.PluginPriority.PREFERRED,!0),K.registerScheme("blob",Ui.parse,K.PluginPriority.PREFERRED,!0));/*! @license
|
|
843
843
|
* Shaka Player
|
|
844
844
|
* Copyright 2016 Google LLC
|
|
845
845
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -848,7 +848,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
848
848
|
* Shaka Player
|
|
849
849
|
* Copyright 2016 Google LLC
|
|
850
850
|
* SPDX-License-Identifier: Apache-2.0
|
|
851
|
-
*/var oa=class y extends Be{constructor(t){super();l(this,"player_");l(this,"config_");l(this,"items_");l(this,"currentItemIndex_");l(this,"preloadNext_");l(this,"preloadPrev_");l(this,"eventManager_");l(this,"repeatTimer_");this.player_=t,this.config_=null,this.items_=[],this.currentItemIndex_=-1,this.preloadNext_=null,this.preloadPrev_=null,this.eventManager_=new ue,this.repeatTimer_=null}async destroy(){await this.removeAllItems(),this.player_=null,this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.repeatTimer_&&(this.repeatTimer_.stop(),this.repeatTimer_=null),super.release()}configure(t){this.config_=t}getConfiguration(){return this.config_}setCustomPlayer(t){this.player_=t}getCurrentItem(){return this.items_.length&&this.currentItemIndex_>=0&&this.currentItemIndex_<this.items_.length?this.items_[this.currentItemIndex_]:null}getCurrentItemIndex(){return this.currentItemIndex_}getItems(){return this.items_.slice()}insertItems(t){this.items_.push(...t),this.dispatchEvent(new
|
|
851
|
+
*/var oa=class y extends Be{constructor(t){super();l(this,"player_");l(this,"config_");l(this,"items_");l(this,"currentItemIndex_");l(this,"preloadNext_");l(this,"preloadPrev_");l(this,"eventManager_");l(this,"repeatTimer_");this.player_=t,this.config_=null,this.items_=[],this.currentItemIndex_=-1,this.preloadNext_=null,this.preloadPrev_=null,this.eventManager_=new ue,this.repeatTimer_=null}async destroy(){await this.removeAllItems(),this.player_=null,this.eventManager_&&(this.eventManager_.release(),this.eventManager_=null),this.repeatTimer_&&(this.repeatTimer_.stop(),this.repeatTimer_=null),super.release()}configure(t){this.config_=t}getConfiguration(){return this.config_}setCustomPlayer(t){this.player_=t}getCurrentItem(){return this.items_.length&&this.currentItemIndex_>=0&&this.currentItemIndex_<this.items_.length?this.items_[this.currentItemIndex_]:null}getCurrentItemIndex(){return this.currentItemIndex_}getItems(){return this.items_.slice()}insertItems(t){this.items_.push(...t),this.dispatchEvent(new L(L.EventName.ItemsInserted))}async removeAllItems(){var i,r;if(this.eventManager_.removeAll(),this.player_&&this.items_.length&&this.currentItemIndex_>=0)try{await this.player_.unload()}catch(s){}let t=[];(i=this.preloadPrev_)!=null&&i.preloadManager&&!this.preloadPrev_.preloadManager.isDestroyed()&&t.push(this.preloadPrev_.preloadManager.destroy()),this.preloadPrev_=null,(r=this.preloadNext_)!=null&&r.preloadManager&&!this.preloadNext_.preloadManager.isDestroyed()&&t.push(this.preloadNext_.preloadManager.destroy()),this.preloadNext_=null;for(let s of this.items_)s.preloadManager&&!s.preloadManager.isDestroyed()&&t.push(s.preloadManager.destroy());t.length&&await Promise.all(t),this.items_=[],this.currentItemIndex_=-1,this.dispatchEvent(new L(L.EventName.ItemsRemoved))}async playItem(t){var a,o,c;if(v.assert(this.player_,"We should have player"),this.eventManager_.removeAll(),this.repeatTimer_&&(this.repeatTimer_.stop(),this.repeatTimer_=null),!this.items_.length||t<0||t>=this.items_.length)throw new h(h.Severity.CRITICAL,h.Category.PLAYER,h.Code.QUEUE_INDEX_OUT_OF_BOUNDS);let i=this.getCurrentItem(),r=this.items_[t];this.currentItemIndex_!==t&&(this.currentItemIndex_=t,this.dispatchEvent(new L(L.EventName.CurrentItemChanged)));let s=this.player_.getMediaElement();this.setupPreloadNext_(s),this.setupRepeatOnComplete_(s);let n=this.getAssetOrPreloader_(r);await this.cleanupPreloadPrev_(r,i),r.config&&(this.player_.resetConfiguration(),this.player_.configure(r.config)),((a=r.extraText)!=null&&a.length||(o=r.extraThumbnail)!=null&&o.length||(c=r.extraChapter)!=null&&c.length)&&this.eventManager_.listenOnce(this.player_,"streaming",async()=>{await this.addExtraTracks_(r)}),await this.player_.load(n,r.startTime,r.mimeType),this.preloadNext_=null}setupPreloadNext_(t){if(!this.config_||this.config_.preloadNextUrlWindow<=0)return;let i=!1,r=async()=>{if(this.preloadNext_||this.items_.length<=1||i||this.player_.isDynamic()||!t.duration)return;let s=this.player_.seekRange().end-t.currentTime;if(isNaN(s)||s>this.config_.preloadNextUrlWindow)return;i=!0;let n=null,a=this.config_.repeatMode,o=this.currentItemIndex_+1;if(o<this.items_.length?n=this.items_[o]:a===Yr.ALL&&(n=this.items_[0]),n&&(!n.preloadManager||n.preloadManager.isDestroyed())){try{let c=await this.player_.preload(n.manifestUri,n.startTime,n.mimeType,n.config,!0);this.preloadNext_={item:n,preloadManager:c}}catch(c){this.preloadNext_={item:n,preloadManager:null}}this.eventManager_.unlisten(t,"timeupdate",r)}i=!1};this.eventManager_.listen(t,"timeupdate",r)}playCurrentItemAfterPause_(t){t.paused?(t.currentTime=this.player_.seekRange().start,t.play()):this.eventManager_.listenOnce(t,"paused",()=>{t.currentTime=this.player_.seekRange().start,t.play()})}setupRepeatOnComplete_(t){this.eventManager_.listen(this.player_,"complete",()=>{var n;let i=(n=this.config_)==null?void 0:n.repeatMode;if(i===Yr.SINGLE){this.playCurrentItemAfterPause_(t);return}let r=this.currentItemIndex_+1,s=null;r<this.items_.length?s=r:i===Yr.ALL&&(s=this.items_.length>1?0:this.currentItemIndex_),s!==null&&(s===this.currentItemIndex_?this.playCurrentItemAfterPause_(t):(this.repeatTimer_&&(this.repeatTimer_.stop(),this.repeatTimer_=null),this.repeatTimer_=new ae(()=>{v.assert(s!=null,"targetIndex should not be null"),this.playItem(s).catch(()=>{})}).tickAfter(0)))})}getAssetOrPreloader_(t){var r,s;let i=t.manifestUri;return t.preloadManager&&!t.preloadManager.isDestroyed()?i=t.preloadManager:((r=this.preloadNext_)==null?void 0:r.item)===t&&this.preloadNext_.preloadManager?i=this.preloadNext_.preloadManager:((s=this.preloadPrev_)==null?void 0:s.item)===t&&this.preloadPrev_.preloadManager&&(i=this.preloadPrev_.preloadManager),i}async cleanupPreloadPrev_(t,i){var s,n;let r=((s=this.preloadPrev_)==null?void 0:s.item)===t;if(this.preloadPrev_&&!r&&this.preloadPrev_.preloadManager&&!this.preloadPrev_.preloadManager.isDestroyed()&&await this.preloadPrev_.preloadManager.destroy(),this.preloadPrev_=null,(n=this.config_)!=null&&n.preloadPrevItem&&i&&this.player_.getLoadMode()===dt.LoadMode.MEDIA_SOURCE)try{let a=await this.player_.unloadAndSavePreload(!1,!1,!1,!0);this.preloadPrev_={item:i,preloadManager:a}}catch(a){this.preloadPrev_={item:i,preloadManager:null}}}async addExtraTracks_(t){var n,a,o;let i=((n=t.extraText)==null?void 0:n.map(async c=>{c.mime?await this.player_.addTextTrackAsync(c.uri,c.language,c.kind,c.mime,c.codecs):await this.player_.addTextTrackAsync(c.uri,c.language,c.kind)}))||[],r=((a=t.extraThumbnail)==null?void 0:a.map(async c=>{await this.player_.addThumbnailsTrack(c)}))||[],s=((o=t.extraChapter)==null?void 0:o.map(async c=>{await this.player_.addChaptersTrack(c.uri,c.language,c.mime)}))||[];await Promise.all([...i,...r,...s])}async loadFromM3uPlaylist(t,i=!1){v.assert(this.player_,"We should have player");let r=this.player_.getNetworkingEngine();v.assert(r,"We should have networking engine");let s=this.player_.getConfiguration().manifest.retryParameters,n=K.makeRequest([t],s),a=await r.request(K.RequestType.PLAYLIST,n).promise,o=q.fromUTF8(a.data),c=y.parseM3uPlaylist_(o,t);if(c.length===0){p.warning("QueueManager: No playable entries found in the M3U playlist.",t);return}this.insertItems(c),i&&await this.playItem(0)}static parseM3uPlaylist_(t,i){var o;let r=t.split(/\r?\n/);(o=r[0])!=null&&o.trim().startsWith("#EXTM3U")||p.warning("QueueManager: Playlist does not start with #EXTM3U; attempting to parse anyway.");let s=[],n=new Set,a=null;for(let c of r){let d=c.trim();if(!d||d==="#EXTM3U")continue;if(d.startsWith("#EXTINF:")){a=y.parseExtInf_(d);continue}if(d.startsWith("#"))continue;let u=fe.resolve(i,d),m=a==null?void 0:a["tvg-id"];if(m&&n.has(m)){p.debug("QueueManager: Skipping duplicated channel:",m,u);continue}let f={manifestUri:u,preloadManager:null,startTime:null,mimeType:null,config:null,extraText:null,extraThumbnail:null,extraChapter:null,metadata:a};s.push(f),m&&n.add(m),a=null}return s}static parseExtInf_(t){let i=t.lastIndexOf(","),r=i>=0?t.substring(0,i):t,s=i>=0?t.substring(i+1).trim():"",n=/([\w-]+)="([^"]*)"/g,a={},o;for(;(o=n.exec(r))!==null;)a[o[1]]=o[2];let c=So(vo({},a),{title:a["tvg-name"]||s||void 0,poster:a["tvg-logo"]||void 0});return s&&(c.displayTitle=s),c}};dt.setQueueManagerFactory(y=>new oa(y));/*! @license
|
|
852
852
|
* Shaka Player
|
|
853
853
|
* Copyright 2016 Google LLC
|
|
854
854
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -880,7 +880,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
880
880
|
* Shaka Player
|
|
881
881
|
* Copyright 2016 Google LLC
|
|
882
882
|
* SPDX-License-Identifier: Apache-2.0
|
|
883
|
-
*/var ua=class{constructor(e){l(this,"networkingEngine_");l(this,"groups_");l(this,"destroyer_");l(this,"abortCallbacks_");l(this,"onProgress_");l(this,"onInitData_");l(this,"estimator_");l(this,"aborted_");this.networkingEngine_=e,this.groups_=new Map,this.destroyer_=new ci(()=>this.abortAll().catch(()=>{})),this.abortCallbacks_=[],this.onProgress_=(t,i)=>{},this.onInitData_=(t,i)=>{},this.estimator_=new da,this.aborted_=!1}destroy(){return this.destroyer_.destroy()}setCallbacks(e,t){this.onProgress_=e,this.onInitData_=t}abortAll(){this.aborted_=!0;let e=this.abortCallbacks_.map(t=>t());return this.abortCallbacks_=[],Promise.all(e)}isAborted(){return this.aborted_}addDownloadEstimate(e){return this.estimator_.open(e)}queue(e,t,i,r,s){this.destroyer_.ensureNotDestroyed();let a=(this.groups_.get(e)||Promise.resolve()).then(async()=>{let o=await this.fetchSegment_(t);if(this.destroyer_.destroyed())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED);if(r){let c=
|
|
883
|
+
*/var ua=class{constructor(e){l(this,"networkingEngine_");l(this,"groups_");l(this,"destroyer_");l(this,"abortCallbacks_");l(this,"onProgress_");l(this,"onInitData_");l(this,"estimator_");l(this,"aborted_");this.networkingEngine_=e,this.groups_=new Map,this.destroyer_=new ci(()=>this.abortAll().catch(()=>{})),this.abortCallbacks_=[],this.onProgress_=(t,i)=>{},this.onInitData_=(t,i)=>{},this.estimator_=new da,this.aborted_=!1}destroy(){return this.destroyer_.destroy()}setCallbacks(e,t){this.onProgress_=e,this.onInitData_=t}abortAll(){this.aborted_=!0;let e=this.abortCallbacks_.map(t=>t());return this.abortCallbacks_=[],Promise.all(e)}isAborted(){return this.aborted_}addDownloadEstimate(e){return this.estimator_.open(e)}queue(e,t,i,r,s){this.destroyer_.ensureNotDestroyed();let a=(this.groups_.get(e)||Promise.resolve()).then(async()=>{let o=await this.fetchSegment_(t);if(this.destroyer_.destroyed())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED);if(r){let c=U.toUint8(o),d=new ti(c);for(let u in d.data){let m=Number(u),f=d.data[m],g=d.systemIds[m];this.onInitData_(f,g)}}return this.estimator_.close(i,o.byteLength),this.onProgress_(this.estimator_.getEstimatedProgress(),this.estimator_.getTotalDownloaded()),s(o)});return this.groups_.set(e,a),a}queueData(e,t,i,r,s){this.destroyer_.ensureNotDestroyed();let a=(this.groups_.get(e)||Promise.resolve()).then(()=>{if(this.destroyer_.destroyed())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED);if(r){let o=U.toUint8(t),c=new ti(o);for(let d in c.data){let u=Number(d),m=c.data[u],f=c.systemIds[u];this.onInitData_(m,f)}}return this.estimator_.close(i,t.byteLength),this.onProgress_(this.estimator_.getEstimatedProgress(),this.estimator_.getTotalDownloaded()),s(t)});return this.groups_.set(e,a),a}queueWork(e,t){this.destroyer_.ensureNotDestroyed();let r=(this.groups_.get(e)||Promise.resolve()).then(async()=>{await t()});return this.groups_.set(e,r),r}async waitToFinish(){return await Promise.all(this.groups_.values()),this.estimator_.getTotalDownloaded()}async fetchSegment_(e){let t=K.RequestType.SEGMENT,i=this.networkingEngine_.request(t,e),r=()=>i.abort();this.abortCallbacks_.push(r);let s=await i.promise;return ye.remove(this.abortCallbacks_,r),s.data}};/*! @license
|
|
884
884
|
* Shaka Player
|
|
885
885
|
* Copyright 2016 Google LLC
|
|
886
886
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -896,7 +896,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
896
896
|
* Shaka Player
|
|
897
897
|
* Copyright 2016 Google LLC
|
|
898
898
|
* SPDX-License-Identifier: Apache-2.0
|
|
899
|
-
*/var zs=class y{constructor(e){l(this,"config_");l(this,"networkingEngine_");l(this,"openOperations_");l(this,"openDownloadManagers_");l(this,"destroyer_");l(this,"nextExternalStreamId_");if(e&&e.constructor!=dt)throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.LOCAL_PLAYER_INSTANCE_REQUIRED);this.config_=null,this.networkingEngine_=null,e?(this.config_=e.getSharedConfiguration(),this.networkingEngine_=e.getNetworkingEngine(),v.assert(this.networkingEngine_,"Storage should not be initialized with a player that had |destroy| called on it.")):(this.config_=st.createDefault(),this.networkingEngine_=new K,this.networkingEngine_.configure(this.config_.networking)),this.openOperations_=[],this.openDownloadManagers_=[];let t=!e;this.destroyer_=new ci(async()=>{await Promise.all(this.openDownloadManagers_.map(s=>s.abortAll()));let i=()=>{},r=[];for(let s of this.openOperations_)r.push(s.then(i,i));await Promise.all(r),t&&await this.networkingEngine_.destroy(),this.config_=null,this.networkingEngine_=null}),this.nextExternalStreamId_=1e9}static support(){return j.getDevice().supportsMediaSource()?Ut.support():!1}destroy(){return this.destroyer_.destroy()}configure(e,t){return v.assert(typeof e=="object"||arguments.length==2,"String configs should have values!"),arguments.length==2&&typeof e=="string"&&(e=Rt.convertToConfigObject(e,t)),v.assert(typeof e=="object","Should be an object!"),v.assert(this.config_,"Cannot reconfigure storage after calling destroy."),st.mergeConfigObjects(this.config_,e)}getConfiguration(){v.assert(this.config_,"Config must not be null!");let e=st.createDefault();return st.mergeConfigObjects(e,this.config_,st.createDefault()),e}getNetworkingEngine(){return this.networkingEngine_}store(e,t,i,r,s){v.assert(this.networkingEngine_,"Cannot call |store| after calling |destroy|.");let n=this.getConfiguration(),a=async()=>(v.assert(this.networkingEngine_,"Should not call |store| after |destroy|"),i||(i=await ct.getMimeType(e,this.networkingEngine_,n.manifest.retryParameters)),me.getFactory(e,i||null)()),o=new ua(this.networkingEngine_);this.openDownloadManagers_.push(o);let c=this.store_(e,t||{},r||[],s||[],a,n,o),d=new Ye(c,()=>o.abortAll());return d.finally(()=>{ye.remove(this.openDownloadManagers_,o)}),this.startAbortableOperation_(d)}async store_(e,t,i,r,s,n,a){this.requireSupport_();let o=null,c=null,d=new Ut,u=null,m=null,f=null;try{o=await s();let g=await this.parseManifest(e,o,n);if(this.ensureNotDestroyed_(),!!g.presentationTimeline.isDynamic())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.CANNOT_STORE_LIVE_OFFLINE,e);for(let x of i){let M=await this.createExternalImageStream_(x,g);g.imageStreams.push(M),this.ensureNotDestroyed_()}for(let x of r){let M=await this.createExternalTextStream_(g,x.uri,x.language,x.kind,x.mime,x.codecs);g.textStreams.push(M),this.ensureNotDestroyed_()}Bi.configureClearKey(n.drm.clearKeys,g.variants);let T=g.variants.some(x=>{if(x.audio){for(let M of x.audio.drmInfos)if(M.licenseServerUri.startsWith("data:"))return!0}if(x.video){for(let M of x.video.drmInfos)if(M.licenseServerUri.startsWith("data:"))return!0}return!1}),b=n.offline.usePersistentLicense;if(T&&(b=!1),c=await this.createDrmEngine(g,x=>{f=f||x},n,b),this.ensureNotDestroyed_(),f)throw f;await this.filterManifest_(g,c,n,b),await d.init(),this.ensureNotDestroyed_(),u=await d.getActive(),this.ensureNotDestroyed_(),v.assert(c,"drmEngine should be non-null here.");let{manifestDB:S,toDownload:E}=this.makeManifestDB_(c,g,e,t,n,a,b),w=await u.cell.addManifests([S]);if(this.ensureNotDestroyed_(),m=w[0],v.assert(c,"drmEngine should be non-null here."),this.ensureNotDestroyed_(),f)throw f;await this.downloadSegments_(E,m,S,a,n,u.cell,g,c,b),this.ensureNotDestroyed_(),this.setManifestDrmFields_(g,S,c,b),await u.cell.updateManifest(m,S),this.ensureNotDestroyed_();let A=ni.manifest(u.path.mechanism,u.path.cell,m);return Gr.fromManifestDB(A,S)}catch(g){throw m!=null&&await y.cleanStoredManifest(m),f||g}finally{await d.destroy(),o&&await o.stop(),c&&await c.destroy()}}async downloadSegments_(e,t,i,r,s,n,a,o,c){let d={},u=0,m=()=>{if(this.destroyer_.destroyed()||r.isAborted())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED)},f=async(_,T)=>{for(let b of _){m();let S=b.makeSegmentRequest(s),E=b.estimateId,w=b.isInitSegment,A=async C=>{let k=b.ref,L=k.getSegmentData(!1);k.aesKey&&!L&&(C=await _t.aesDecrypt(C,k.aesKey,b.refPosition));let V=yr.idForSegmentRef(k),ee=await n.addSegments([{data:C}]);m(),d[V]=ee[0],u+=C.byteLength},M=b.ref.getSegmentData(!1);M?r.queueData(b.groupId,M,E,w,A):r.queue(b.groupId,S,E,w,A)}await r.waitToFinish(),m(),T&&!r.isAborted()&&(this.setManifestDrmFields_(a,i,o,c),await n.updateManifest(t,i))},g=!1;try{if(this.getManifestIsEncrypted_(a)&&g&&!this.getManifestIncludesInitData_(a)){await f(e.filter(b=>b.isInitSegment),!0),m(),e=e.filter(b=>!b.isInitSegment);let _=d,T=u;d={},u=0,await y.assignSegmentsToManifest(n,t,i,_,T,()=>this.ensureNotDestroyed_()),m()}if(!g){await f(e,!1),m();let _=d,T=u;d={},u=0,await y.assignSegmentsToManifest(n,t,i,_,T,()=>m()),m(),v.assert(!i.isIncomplete,"The manifest should be complete by now")}}catch(_){let T=Object.values(d);throw await n.removeSegments(T,b=>{}),_}}static async cleanStoredManifest(e){let t=new Ut;await t.init();let i=await t.getActive(),r=ni.manifest(i.path.mechanism,i.path.cell,e);await t.destroy(),await new y().remove(r.toString())}static async assignSegmentsToManifest(e,t,i,r,s,n){let a=!1;try{let o=!0;for(let c of i.streams)if(c.type!=R.ContentType.CHAPTER)for(let d of c.segments){let u=d.pendingSegmentRefId?r[d.pendingSegmentRefId]:null;u!=null&&(d.dataKey=u,d.pendingSegmentRefId=void 0),u=d.pendingInitSegmentRefId?r[d.pendingInitSegmentRefId]:null,u!=null&&(d.initSegmentKey=u,d.pendingInitSegmentRefId=void 0),d.pendingSegmentRefId&&(o=!1),d.pendingInitSegmentRefId&&(o=!1)}i.size+=s,o&&(i.isIncomplete=!1),await e.updateManifest(t,i),a=!0,n()}catch(o){if(await y.cleanStoredManifest(t),!a){let c=Object.values(r);await e.removeSegments(c,d=>{})}throw o}}async filterManifest_(e,t,i,r){let s={width:1/0,height:1/0};re.filterByRestrictions(e,i.restrictions,s),await re.filterManifestByMediaCapabilities(t,e,r,i.drm.preferredKeySystems,i.drm.keySystemsMapping);let n=[],a=i.preferredDecodingAttributes,o=i.preferredVideo.map(S=>S.codec).filter(Boolean),c=i.preferredAudio.map(S=>S.codec).filter(Boolean),d=i.preferredText.map(S=>S.format).filter(Boolean);re.chooseCodecsAndFilterManifest(e,o,c,a,d);for(let S of e.variants)v.assert(re.isPlayable(S),'We should have already filtered by "is playable"'),n.push(re.variantToTrack(S));for(let S of e.textStreams)n.push(re.textStreamToTrack(S));for(let S of e.imageStreams)n.push(re.imageStreamToTrack(S));for(let S of e.chapterStreams)n.push(re.chapterStreamToTrack(S));let u=await i.offline.trackSelectionCallback(n),m=e.presentationTimeline.getDuration(),f=0;for(let S of u){let E=S.bandwidth*m/8;f+=E}try{if(!await i.offline.downloadSizeCallback(f))throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.STORAGE_LIMIT_REACHED)}catch(S){throw S instanceof h?S:(p.warning("downloadSizeCallback has produced an unexpected error",S),new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.DOWNLOAD_SIZE_CALLBACK_ERROR))}let g=new Set,_=new Set,T=new Set,b=new Set;for(let S of u)S.type=="variant"&&g.add(S.id),S.type=="text"&&_.add(S.id),S.type=="image"&&T.add(S.id),S.type=="chapter"&&b.add(S.id);e.variants=e.variants.filter(S=>g.has(S.id)),e.textStreams=e.textStreams.filter(S=>_.has(S.id)),e.imageStreams=e.imageStreams.filter(S=>T.has(S.id)),e.chapterStreams=e.chapterStreams.filter(S=>b.has(S.id)),y.validateManifest_(e)}makeManifestDB_(e,t,i,r,s,n,a){let o=Gr.fromManifest(i,t,0,r),c=s.offline.progressCallback,d=(E,w)=>{o.size=w,c(o,E)},u=(E,w)=>{m&&a&&f==w&&e.newInitData("cenc",E)};n.setCallbacks(d,u);let m=this.getManifestIsEncrypted_(t)&&!this.getManifestIncludesInitData_(t),f=null;if(m){let E=e.getDrmInfo();f=y.defaultSystemIds_.get(E.keySystem)}let g=new ha;for(let E of t.textStreams)g.addText(E);for(let E of t.imageStreams)g.addImage(E);for(let E of t.chapterStreams)g.addImage(E);for(let E of t.variants)g.addVariant(E);let{streams:_,toDownload:T}=this.createStreams_(n,g,e,t,s),b=e.getDrmInfo();return b&&a&&(b.initData=[]),{manifestDB:{creationTime:Date.now(),originalManifestUri:i,duration:t.presentationTimeline.getDuration(),size:0,expiration:e.getExpiration(),streams:_,sessionIds:a?e.getSessionIds():[],drmInfo:b,appMetadata:r,isIncomplete:!0,sequenceMode:t.sequenceMode,type:t.type},toDownload:T}}getManifestIsEncrypted_(e){return e.variants.some(t=>{let i=t.video&&t.video.encrypted,r=t.audio&&t.audio.encrypted;return i||r})}getManifestIncludesInitData_(e){return e.variants.some(t=>{let i=t.video?t.video.drmInfos:[],r=t.audio?t.audio.drmInfos:[];return i.concat(r).some(n=>n.initData&&n.initData.length)})}setManifestDrmFields_(e,t,i,r){t.expiration=i.getExpiration();let s=i.getSessionIds();if(t.sessionIds=r?s:[],this.getManifestIsEncrypted_(e)&&r&&!s.length)throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.NO_INIT_DATA_FOR_OFFLINE)}remove(e){return this.startOperation_(this.remove_(e))}async remove_(e){this.requireSupport_();let t=ni.parse(e);if(t==null||!t.isManifest())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.MALFORMED_OFFLINE_URI,e);let i=t,r=new Ut;try{await r.init();let s=await r.getCell(i.mechanism(),i.cell()),a=(await s.getManifests([i.key()]))[0];await Promise.all([this.removeFromDRM_(i,a,r),this.removeFromStorage_(s,i,a)])}finally{await r.destroy()}}static getCapabilities_(e,t){let i=[];for(let r of e.streams)t&&r.type=="video"?i.push({contentType:O.getFullType(r.mimeType,r.codecs),robustness:e.drmInfo.videoRobustness}):!t&&r.type=="audio"&&i.push({contentType:O.getFullType(r.mimeType,r.codecs),robustness:e.drmInfo.audioRobustness});return i}async removeFromDRM_(e,t,i){v.assert(this.networkingEngine_,"Cannot be destroyed"),await y.deleteLicenseFor_(this.networkingEngine_,this.config_.drm,i,t)}removeFromStorage_(e,t,i){let r=y.getAllSegmentIds_(i),s=r.length+1,n=0,a=Gr.fromManifestDB(t,i),o=c=>{n+=1,this.config_.offline.progressCallback(a,n/s)};return Promise.all([e.removeSegments(r,o),e.removeManifests([t.key()],o)])}removeEmeSessions(){return this.startOperation_(this.removeEmeSessions_())}async removeEmeSessions_(){this.requireSupport_(),v.assert(this.networkingEngine_,"Cannot be destroyed");let e=this.networkingEngine_,t=this.config_.drm,i=new Ut,r=new Ws,s=!1;try{await i.init();let n=[];i.forEachEmeSessionCell(a=>n.push(a));for(let a of n){let o=await a.getAll(),c=await r.delete(t,e,o);await a.remove(c),c.length!=o.length&&(s=!0)}}finally{await i.destroy()}return!s}list(){return this.startOperation_(this.list_())}async list_(){this.requireSupport_();let e=[],t=new Ut;try{await t.init();let i=Promise.resolve();t.forEachCell((r,s)=>{i=i.then(async()=>{(await s.getAllManifests()).forEach((a,o)=>{let c=ni.manifest(r.mechanism,r.cell,o),d=Gr.fromManifestDB(c,a);e.push(d)})})}),await i}finally{await t.destroy()}return e}async parseManifest(e,t,i){let r=null,s=this.networkingEngine_;v.assert(s,"Should be initialized!");let n={networkingEngine:s,filter:()=>Promise.resolve(),makeTextStreamsForClosedCaptions:c=>{},onTimelineRegionAdded:()=>{},onEvent:()=>{},onError:c=>{r=c},isLowLatencyMode:()=>!1,updateDuration:()=>{},newDrmInfo:c=>{},onManifestUpdated:()=>{},getBandwidthEstimate:()=>i.abr.defaultBandwidthEstimate,onMetadata:()=>Promise.resolve(),disableStream:c=>{},addFont:(c,d)=>{},getStreamingRetryParameters:()=>i.streaming.retryParameters,onSegmentReceived:(c,d)=>{}};t.configure(i.manifest),this.ensureNotDestroyed_();let a=await t.start(e,n);this.ensureNotDestroyed_();let o=y.getAllStreamsFromManifest_(a);if(await Promise.all(Qi.map(o,c=>c.createSegmentIndex())),this.ensureNotDestroyed_(),r)throw r;return a}async createExternalImageStream_(e,t){let i=await this.getTextMimetype_(e);if(i!="text/vtt")throw new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,e);v.assert(this.networkingEngine_,"Need networking engine.");let r=await this.getTextData_(e,this.networkingEngine_,this.config_.streaming.retryParameters),s=Oe.findParser(i);if(!s)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i);let n=s(),a={periodStart:0,segmentStart:0,segmentEnd:t.presentationTimeline.getDuration(),vttOffset:0,isMpegTs:!1},o=D.toUint8(r),c=n.parseMedia(o,a,e,[]),d=[];for(let m of c){let f=null,g=()=>(f==null&&(f=fe.resolveUris([e],[m.payload])),f||[]),_=new Te(m.startTime,m.endTime,g,0,null,null,0,0,1/0);if(m.payload.includes("#xywh")){let T=m.payload.split("#xywh=")[1].split(",");T.length===4&&_.setThumbnailSprite({height:parseInt(T[3],10),positionX:parseInt(T[0],10),positionY:parseInt(T[1],10),width:parseInt(T[2],10)})}d.push(_)}let u=i;return d.length&&(u=await ct.getMimeType(d[0].getUris()[0],this.networkingEngine_,this.config_.manifest.retryParameters)),re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(d),mimeType:u||"",kind:"",language:"und",type:R.ContentType.IMAGE,tilesLayout:"1x1",external:!0})}async createExternalTextStream_(e,t,i,r,s,n){s||(s=await this.getTextMimetype_(t));let a=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:Ze.forSingleSegment(0,e.presentationTimeline.getDuration(),[t]),mimeType:s||"",codecs:n||"",kind:r,language:i,originalLanguage:i,type:R.ContentType.TEXT,external:!0}),o=O.getFullType(a.mimeType,a.codecs);if(!Oe.isTypeSupported(o))throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,s);return a}async getTextMimetype_(e){let t;try{v.assert(this.networkingEngine_,"Need networking engine."),t=await ct.getMimeType(e,this.networkingEngine_,this.config_.streaming.retryParameters)}catch(i){}if(t)return t;throw p.error("The mimeType has not been provided and it could not be deduced from its uri."),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,e)}async getTextData_(e,t,i){let r=K.RequestType.SEGMENT,s=K.makeRequest([e],i);return s.method="GET",(await t.request(r,s).promise).data}async createDrmEngine(e,t,i,r){v.assert(this.networkingEngine_,"Cannot call |createDrmEngine| after |destroy|");let s=new Bi({netEngine:this.networkingEngine_,onError:t,onKeyStatus:()=>{},onExpirationUpdated:()=>{},onEvent:()=>{}});return s.configure(i.drm),await s.initForStorage(e.variants,r),r&&await s.createOrLoad(),s}createStreams_(e,t,i,r,s){let n=new Map,a=y.getAllStreamsFromManifest_(r),o=new Map;for(let c of a){let d=this.createStream_(e,t,r,c,s,n);o.set(c.id,d)}for(let c of r.variants)c.audio&&o.get(c.audio.id).variantIds.push(c.id),c.video&&o.get(c.video.id).variantIds.push(c.id);return{streams:Array.from(o.values()),toDownload:Array.from(n.values())}}createStream_(e,t,i,r,s,n){let a={id:r.id,originalId:r.originalId,groupId:r.groupId,primary:r.primary,type:r.type,mimeType:r.mimeType,codecs:r.codecs,supplementalCodecs:"",frameRate:r.frameRate,pixelAspectRatio:r.pixelAspectRatio,hdr:r.hdr,colorGamut:r.colorGamut,videoLayout:r.videoLayout,kind:r.kind,language:r.language,originalLanguage:r.originalLanguage,label:r.label,width:r.width||null,height:r.height||null,encrypted:r.encrypted,keyIds:r.keyIds,segments:[],variantIds:[],roles:r.roles,forced:r.forced,channelsCount:r.channelsCount,audioSamplingRate:r.audioSamplingRate,spatialAudio:r.spatialAudio,closedCaptions:r.closedCaptions,tilesLayout:r.tilesLayout,external:r.external,fastSwitching:r.fastSwitching,isAudioMuxedInVideo:r.isAudioMuxedInVideo,isIframe:r.isIframe},o=i.presentationTimeline.getSegmentAvailabilityStart(),c=s.offline.numberOfParallelDownloads,d=c===0?r.id:0;return y.forEachSegment_(r,o,(u,m)=>{let f=yr.idForSegmentRef(u),g,_=null;if(r.type==R.ContentType.CHAPTER){let b=u.getMetadata();b&&(_=b.title)}if(!_&&!n.has(f)){let b=e.addDownloadEstimate(t.getSegmentEstimate(r.id,u)),S=new yr(u,b,d,!1,m);n.set(f,S)}if(u.initSegmentReference&&(g=yr.idForSegmentRef(u.initSegmentReference),!n.has(g))){let b=e.addDownloadEstimate(t.getInitSegmentEstimate(r.id)),S=new yr(u.initSegmentReference,b,d,!0,m);n.set(g,S)}let T={pendingInitSegmentRefId:g,initSegmentKey:g?0:null,startTime:u.startTime,endTime:u.endTime,appendWindowStart:u.appendWindowStart,appendWindowEnd:u.appendWindowEnd,timestampOffset:u.timestampOffset,tilesLayout:u.tilesLayout,pendingSegmentRefId:f,dataKey:0,mimeType:u.mimeType,codecs:u.codecs,thumbnailSprite:u.thumbnailSprite,chapterTitle:_};a.segments.push(T),c!==0&&(d=(d+1)%c)}),a}static forEachSegment_(e,t,i){let r=e.segmentIndex.find(t);if(r==null)return;let s=e.segmentIndex.get(r);for(;s;)i(s,r),s=e.segmentIndex.get(++r)}ensureNotDestroyed_(){if(this.destroyer_.destroyed())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED)}requireSupport_(){if(!y.support())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.STORAGE_NOT_SUPPORTED)}async startOperation_(e){this.openOperations_.push(e);try{return await e}finally{ye.remove(this.openOperations_,e)}}startAbortableOperation_(e){let t=e.promise;return this.openOperations_.push(t),e.finally(()=>{ye.remove(this.openOperations_,t)})}static getAllSegmentIds_(e){let t=new Set;for(let i of e.streams)for(let r of i.segments)r.initSegmentKey!=null&&t.add(r.initSegmentKey),t.add(r.dataKey);return Array.from(t)}static async deleteAll(){let e=new Ut;try{await e.erase()}finally{await e.destroy()}}static async deleteLicenseFor_(e,t,i,r){if(!r.drmInfo)return;let s=i.getEmeSessionCell(),n=r.sessionIds.map(c=>({sessionId:c,keySystem:r.drmInfo.keySystem,licenseUri:r.drmInfo.licenseServerUri,serverCertificate:r.drmInfo.serverCertificate,audioCapabilities:y.getCapabilities_(r,!1),videoCapabilities:y.getCapabilities_(r,!0)})),o=await new Ws().delete(t,e,n);await s.remove(o),await s.add(n.filter(c=>!o.includes(c.sessionId)))}static getAllStreamsFromManifest_(e){let t=new Set;for(let i of e.variants)i.audio&&t.add(i.audio),i.video&&t.add(i.video);for(let i of e.textStreams)t.add(i);for(let i of e.imageStreams)t.add(i);for(let i of e.chapterStreams)t.add(i);return t}static validateManifest_(e){let t=new Set(e.variants.map(s=>s.video)),i=new Set(e.variants.map(s=>s.audio)),r=e.textStreams;t.size>1&&p.warning("Multiple video tracks selected to be stored");for(let s of i)for(let n of i)s!=n&&s.language==n.language&&p.warning("Similar audio tracks were selected to be stored",s.id,n.id);for(let s of r)for(let n of r)s!=n&&s.language==n.language&&p.warning("Similar text tracks were selected to be stored",s.id,n.id)}};zs.defaultSystemIds_=new Map().set("org.w3.clearkey","1077efecc0b24d02ace33c1e52e2fb4b").set("com.widevine.alpha","edef8ba979d64acea3c827dcd51d21ed").set("com.microsoft.playready","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.recommendation","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.software","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.hardware","9a04f07998404286ab92e65be0885f95").set("com.huawei.wiseplay","3d5e6d359b9a41e8b843dd3c6e72c42c");dt.registerSupportPlugin("offline",zs.support);/*! @license
|
|
899
|
+
*/var zs=class y{constructor(e){l(this,"config_");l(this,"networkingEngine_");l(this,"openOperations_");l(this,"openDownloadManagers_");l(this,"destroyer_");l(this,"nextExternalStreamId_");if(e&&e.constructor!=dt)throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.LOCAL_PLAYER_INSTANCE_REQUIRED);this.config_=null,this.networkingEngine_=null,e?(this.config_=e.getSharedConfiguration(),this.networkingEngine_=e.getNetworkingEngine(),v.assert(this.networkingEngine_,"Storage should not be initialized with a player that had |destroy| called on it.")):(this.config_=st.createDefault(),this.networkingEngine_=new K,this.networkingEngine_.configure(this.config_.networking)),this.openOperations_=[],this.openDownloadManagers_=[];let t=!e;this.destroyer_=new ci(async()=>{await Promise.all(this.openDownloadManagers_.map(s=>s.abortAll()));let i=()=>{},r=[];for(let s of this.openOperations_)r.push(s.then(i,i));await Promise.all(r),t&&await this.networkingEngine_.destroy(),this.config_=null,this.networkingEngine_=null}),this.nextExternalStreamId_=1e9}static support(){return j.getDevice().supportsMediaSource()?Ut.support():!1}destroy(){return this.destroyer_.destroy()}configure(e,t){return v.assert(typeof e=="object"||arguments.length==2,"String configs should have values!"),arguments.length==2&&typeof e=="string"&&(e=Rt.convertToConfigObject(e,t)),v.assert(typeof e=="object","Should be an object!"),v.assert(this.config_,"Cannot reconfigure storage after calling destroy."),st.mergeConfigObjects(this.config_,e)}getConfiguration(){v.assert(this.config_,"Config must not be null!");let e=st.createDefault();return st.mergeConfigObjects(e,this.config_,st.createDefault()),e}getNetworkingEngine(){return this.networkingEngine_}store(e,t,i,r,s){v.assert(this.networkingEngine_,"Cannot call |store| after calling |destroy|.");let n=this.getConfiguration(),a=async()=>(v.assert(this.networkingEngine_,"Should not call |store| after |destroy|"),i||(i=await ct.getMimeType(e,this.networkingEngine_,n.manifest.retryParameters)),me.getFactory(e,i||null)()),o=new ua(this.networkingEngine_);this.openDownloadManagers_.push(o);let c=this.store_(e,t||{},r||[],s||[],a,n,o),d=new Ye(c,()=>o.abortAll());return d.finally(()=>{ye.remove(this.openDownloadManagers_,o)}),this.startAbortableOperation_(d)}async store_(e,t,i,r,s,n,a){this.requireSupport_();let o=null,c=null,d=new Ut,u=null,m=null,f=null;try{o=await s();let g=await this.parseManifest(e,o,n);if(this.ensureNotDestroyed_(),!!g.presentationTimeline.isDynamic())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.CANNOT_STORE_LIVE_OFFLINE,e);for(let x of i){let M=await this.createExternalImageStream_(x,g);g.imageStreams.push(M),this.ensureNotDestroyed_()}for(let x of r){let M=await this.createExternalTextStream_(g,x.uri,x.language,x.kind,x.mime,x.codecs);g.textStreams.push(M),this.ensureNotDestroyed_()}Bi.configureClearKey(n.drm.clearKeys,g.variants);let T=g.variants.some(x=>{if(x.audio){for(let M of x.audio.drmInfos)if(M.licenseServerUri.startsWith("data:"))return!0}if(x.video){for(let M of x.video.drmInfos)if(M.licenseServerUri.startsWith("data:"))return!0}return!1}),b=n.offline.usePersistentLicense;if(T&&(b=!1),c=await this.createDrmEngine(g,x=>{f=f||x},n,b),this.ensureNotDestroyed_(),f)throw f;await this.filterManifest_(g,c,n,b),await d.init(),this.ensureNotDestroyed_(),u=await d.getActive(),this.ensureNotDestroyed_(),v.assert(c,"drmEngine should be non-null here.");let{manifestDB:S,toDownload:E}=this.makeManifestDB_(c,g,e,t,n,a,b),w=await u.cell.addManifests([S]);if(this.ensureNotDestroyed_(),m=w[0],v.assert(c,"drmEngine should be non-null here."),this.ensureNotDestroyed_(),f)throw f;await this.downloadSegments_(E,m,S,a,n,u.cell,g,c,b),this.ensureNotDestroyed_(),this.setManifestDrmFields_(g,S,c,b),await u.cell.updateManifest(m,S),this.ensureNotDestroyed_();let A=ni.manifest(u.path.mechanism,u.path.cell,m);return Gr.fromManifestDB(A,S)}catch(g){throw m!=null&&await y.cleanStoredManifest(m),f||g}finally{await d.destroy(),o&&await o.stop(),c&&await c.destroy()}}async downloadSegments_(e,t,i,r,s,n,a,o,c){let d={},u=0,m=()=>{if(this.destroyer_.destroyed()||r.isAborted())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED)},f=async(_,T)=>{for(let b of _){m();let S=b.makeSegmentRequest(s),E=b.estimateId,w=b.isInitSegment,A=async C=>{let k=b.ref,D=k.getSegmentData(!1);k.aesKey&&!D&&(C=await _t.aesDecrypt(C,k.aesKey,b.refPosition));let V=yr.idForSegmentRef(k),ee=await n.addSegments([{data:C}]);m(),d[V]=ee[0],u+=C.byteLength},M=b.ref.getSegmentData(!1);M?r.queueData(b.groupId,M,E,w,A):r.queue(b.groupId,S,E,w,A)}await r.waitToFinish(),m(),T&&!r.isAborted()&&(this.setManifestDrmFields_(a,i,o,c),await n.updateManifest(t,i))},g=!1;try{if(this.getManifestIsEncrypted_(a)&&g&&!this.getManifestIncludesInitData_(a)){await f(e.filter(b=>b.isInitSegment),!0),m(),e=e.filter(b=>!b.isInitSegment);let _=d,T=u;d={},u=0,await y.assignSegmentsToManifest(n,t,i,_,T,()=>this.ensureNotDestroyed_()),m()}if(!g){await f(e,!1),m();let _=d,T=u;d={},u=0,await y.assignSegmentsToManifest(n,t,i,_,T,()=>m()),m(),v.assert(!i.isIncomplete,"The manifest should be complete by now")}}catch(_){let T=Object.values(d);throw await n.removeSegments(T,b=>{}),_}}static async cleanStoredManifest(e){let t=new Ut;await t.init();let i=await t.getActive(),r=ni.manifest(i.path.mechanism,i.path.cell,e);await t.destroy(),await new y().remove(r.toString())}static async assignSegmentsToManifest(e,t,i,r,s,n){let a=!1;try{let o=!0;for(let c of i.streams)if(c.type!=R.ContentType.CHAPTER)for(let d of c.segments){let u=d.pendingSegmentRefId?r[d.pendingSegmentRefId]:null;u!=null&&(d.dataKey=u,d.pendingSegmentRefId=void 0),u=d.pendingInitSegmentRefId?r[d.pendingInitSegmentRefId]:null,u!=null&&(d.initSegmentKey=u,d.pendingInitSegmentRefId=void 0),d.pendingSegmentRefId&&(o=!1),d.pendingInitSegmentRefId&&(o=!1)}i.size+=s,o&&(i.isIncomplete=!1),await e.updateManifest(t,i),a=!0,n()}catch(o){if(await y.cleanStoredManifest(t),!a){let c=Object.values(r);await e.removeSegments(c,d=>{})}throw o}}async filterManifest_(e,t,i,r){let s={width:1/0,height:1/0};re.filterByRestrictions(e,i.restrictions,s),await re.filterManifestByMediaCapabilities(t,e,r,i.drm.preferredKeySystems,i.drm.keySystemsMapping);let n=[],a=i.preferredDecodingAttributes,o=i.preferredVideo.map(S=>S.codec).filter(Boolean),c=i.preferredAudio.map(S=>S.codec).filter(Boolean),d=i.preferredText.map(S=>S.format).filter(Boolean);re.chooseCodecsAndFilterManifest(e,o,c,a,d);for(let S of e.variants)v.assert(re.isPlayable(S),'We should have already filtered by "is playable"'),n.push(re.variantToTrack(S));for(let S of e.textStreams)n.push(re.textStreamToTrack(S));for(let S of e.imageStreams)n.push(re.imageStreamToTrack(S));for(let S of e.chapterStreams)n.push(re.chapterStreamToTrack(S));let u=await i.offline.trackSelectionCallback(n),m=e.presentationTimeline.getDuration(),f=0;for(let S of u){let E=S.bandwidth*m/8;f+=E}try{if(!await i.offline.downloadSizeCallback(f))throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.STORAGE_LIMIT_REACHED)}catch(S){throw S instanceof h?S:(p.warning("downloadSizeCallback has produced an unexpected error",S),new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.DOWNLOAD_SIZE_CALLBACK_ERROR))}let g=new Set,_=new Set,T=new Set,b=new Set;for(let S of u)S.type=="variant"&&g.add(S.id),S.type=="text"&&_.add(S.id),S.type=="image"&&T.add(S.id),S.type=="chapter"&&b.add(S.id);e.variants=e.variants.filter(S=>g.has(S.id)),e.textStreams=e.textStreams.filter(S=>_.has(S.id)),e.imageStreams=e.imageStreams.filter(S=>T.has(S.id)),e.chapterStreams=e.chapterStreams.filter(S=>b.has(S.id)),y.validateManifest_(e)}makeManifestDB_(e,t,i,r,s,n,a){let o=Gr.fromManifest(i,t,0,r),c=s.offline.progressCallback,d=(E,w)=>{o.size=w,c(o,E)},u=(E,w)=>{m&&a&&f==w&&e.newInitData("cenc",E)};n.setCallbacks(d,u);let m=this.getManifestIsEncrypted_(t)&&!this.getManifestIncludesInitData_(t),f=null;if(m){let E=e.getDrmInfo();f=y.defaultSystemIds_.get(E.keySystem)}let g=new ha;for(let E of t.textStreams)g.addText(E);for(let E of t.imageStreams)g.addImage(E);for(let E of t.chapterStreams)g.addImage(E);for(let E of t.variants)g.addVariant(E);let{streams:_,toDownload:T}=this.createStreams_(n,g,e,t,s),b=e.getDrmInfo();return b&&a&&(b.initData=[]),{manifestDB:{creationTime:Date.now(),originalManifestUri:i,duration:t.presentationTimeline.getDuration(),size:0,expiration:e.getExpiration(),streams:_,sessionIds:a?e.getSessionIds():[],drmInfo:b,appMetadata:r,isIncomplete:!0,sequenceMode:t.sequenceMode,type:t.type},toDownload:T}}getManifestIsEncrypted_(e){return e.variants.some(t=>{let i=t.video&&t.video.encrypted,r=t.audio&&t.audio.encrypted;return i||r})}getManifestIncludesInitData_(e){return e.variants.some(t=>{let i=t.video?t.video.drmInfos:[],r=t.audio?t.audio.drmInfos:[];return i.concat(r).some(n=>n.initData&&n.initData.length)})}setManifestDrmFields_(e,t,i,r){t.expiration=i.getExpiration();let s=i.getSessionIds();if(t.sessionIds=r?s:[],this.getManifestIsEncrypted_(e)&&r&&!s.length)throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.NO_INIT_DATA_FOR_OFFLINE)}remove(e){return this.startOperation_(this.remove_(e))}async remove_(e){this.requireSupport_();let t=ni.parse(e);if(t==null||!t.isManifest())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.MALFORMED_OFFLINE_URI,e);let i=t,r=new Ut;try{await r.init();let s=await r.getCell(i.mechanism(),i.cell()),a=(await s.getManifests([i.key()]))[0];await Promise.all([this.removeFromDRM_(i,a,r),this.removeFromStorage_(s,i,a)])}finally{await r.destroy()}}static getCapabilities_(e,t){let i=[];for(let r of e.streams)t&&r.type=="video"?i.push({contentType:O.getFullType(r.mimeType,r.codecs),robustness:e.drmInfo.videoRobustness}):!t&&r.type=="audio"&&i.push({contentType:O.getFullType(r.mimeType,r.codecs),robustness:e.drmInfo.audioRobustness});return i}async removeFromDRM_(e,t,i){v.assert(this.networkingEngine_,"Cannot be destroyed"),await y.deleteLicenseFor_(this.networkingEngine_,this.config_.drm,i,t)}removeFromStorage_(e,t,i){let r=y.getAllSegmentIds_(i),s=r.length+1,n=0,a=Gr.fromManifestDB(t,i),o=c=>{n+=1,this.config_.offline.progressCallback(a,n/s)};return Promise.all([e.removeSegments(r,o),e.removeManifests([t.key()],o)])}removeEmeSessions(){return this.startOperation_(this.removeEmeSessions_())}async removeEmeSessions_(){this.requireSupport_(),v.assert(this.networkingEngine_,"Cannot be destroyed");let e=this.networkingEngine_,t=this.config_.drm,i=new Ut,r=new Ws,s=!1;try{await i.init();let n=[];i.forEachEmeSessionCell(a=>n.push(a));for(let a of n){let o=await a.getAll(),c=await r.delete(t,e,o);await a.remove(c),c.length!=o.length&&(s=!0)}}finally{await i.destroy()}return!s}list(){return this.startOperation_(this.list_())}async list_(){this.requireSupport_();let e=[],t=new Ut;try{await t.init();let i=Promise.resolve();t.forEachCell((r,s)=>{i=i.then(async()=>{(await s.getAllManifests()).forEach((a,o)=>{let c=ni.manifest(r.mechanism,r.cell,o),d=Gr.fromManifestDB(c,a);e.push(d)})})}),await i}finally{await t.destroy()}return e}async parseManifest(e,t,i){let r=null,s=this.networkingEngine_;v.assert(s,"Should be initialized!");let n={networkingEngine:s,filter:()=>Promise.resolve(),makeTextStreamsForClosedCaptions:c=>{},onTimelineRegionAdded:()=>{},onEvent:()=>{},onError:c=>{r=c},isLowLatencyMode:()=>!1,updateDuration:()=>{},newDrmInfo:c=>{},onManifestUpdated:()=>{},getBandwidthEstimate:()=>i.abr.defaultBandwidthEstimate,onMetadata:()=>Promise.resolve(),disableStream:c=>{},addFont:(c,d)=>{},getStreamingRetryParameters:()=>i.streaming.retryParameters,onSegmentReceived:(c,d)=>{}};t.configure(i.manifest),this.ensureNotDestroyed_();let a=await t.start(e,n);this.ensureNotDestroyed_();let o=y.getAllStreamsFromManifest_(a);if(await Promise.all(Qi.map(o,c=>c.createSegmentIndex())),this.ensureNotDestroyed_(),r)throw r;return a}async createExternalImageStream_(e,t){let i=await this.getTextMimetype_(e);if(i!="text/vtt")throw new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.UNSUPPORTED_EXTERNAL_THUMBNAILS_URI,e);v.assert(this.networkingEngine_,"Need networking engine.");let r=await this.getTextData_(e,this.networkingEngine_,this.config_.streaming.retryParameters),s=Oe.findParser(i);if(!s)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,i);let n=s(),a={periodStart:0,segmentStart:0,segmentEnd:t.presentationTimeline.getDuration(),vttOffset:0,isMpegTs:!1},o=U.toUint8(r),c=n.parseMedia(o,a,e,[]),d=[];for(let m of c){let f=null,g=()=>(f==null&&(f=fe.resolveUris([e],[m.payload])),f||[]),_=new Te(m.startTime,m.endTime,g,0,null,null,0,0,1/0);if(m.payload.includes("#xywh")){let T=m.payload.split("#xywh=")[1].split(",");T.length===4&&_.setThumbnailSprite({height:parseInt(T[3],10),positionX:parseInt(T[0],10),positionY:parseInt(T[1],10),width:parseInt(T[2],10)})}d.push(_)}let u=i;return d.length&&(u=await ct.getMimeType(d[0].getUris()[0],this.networkingEngine_,this.config_.manifest.retryParameters)),re.createStream({id:this.nextExternalStreamId_++,segmentIndex:new Ze(d),mimeType:u||"",kind:"",language:"und",type:R.ContentType.IMAGE,tilesLayout:"1x1",external:!0})}async createExternalTextStream_(e,t,i,r,s,n){s||(s=await this.getTextMimetype_(t));let a=re.createStream({id:this.nextExternalStreamId_++,segmentIndex:Ze.forSingleSegment(0,e.presentationTimeline.getDuration(),[t]),mimeType:s||"",codecs:n||"",kind:r,language:i,originalLanguage:i,type:R.ContentType.TEXT,external:!0}),o=O.getFullType(a.mimeType,a.codecs);if(!Oe.isTypeSupported(o))throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.MISSING_TEXT_PLUGIN,s);return a}async getTextMimetype_(e){let t;try{v.assert(this.networkingEngine_,"Need networking engine."),t=await ct.getMimeType(e,this.networkingEngine_,this.config_.streaming.retryParameters)}catch(i){}if(t)return t;throw p.error("The mimeType has not been provided and it could not be deduced from its uri."),new h(h.Severity.RECOVERABLE,h.Category.TEXT,h.Code.TEXT_COULD_NOT_GUESS_MIME_TYPE,e)}async getTextData_(e,t,i){let r=K.RequestType.SEGMENT,s=K.makeRequest([e],i);return s.method="GET",(await t.request(r,s).promise).data}async createDrmEngine(e,t,i,r){v.assert(this.networkingEngine_,"Cannot call |createDrmEngine| after |destroy|");let s=new Bi({netEngine:this.networkingEngine_,onError:t,onKeyStatus:()=>{},onExpirationUpdated:()=>{},onEvent:()=>{}});return s.configure(i.drm),await s.initForStorage(e.variants,r),r&&await s.createOrLoad(),s}createStreams_(e,t,i,r,s){let n=new Map,a=y.getAllStreamsFromManifest_(r),o=new Map;for(let c of a){let d=this.createStream_(e,t,r,c,s,n);o.set(c.id,d)}for(let c of r.variants)c.audio&&o.get(c.audio.id).variantIds.push(c.id),c.video&&o.get(c.video.id).variantIds.push(c.id);return{streams:Array.from(o.values()),toDownload:Array.from(n.values())}}createStream_(e,t,i,r,s,n){let a={id:r.id,originalId:r.originalId,groupId:r.groupId,primary:r.primary,type:r.type,mimeType:r.mimeType,codecs:r.codecs,supplementalCodecs:"",frameRate:r.frameRate,pixelAspectRatio:r.pixelAspectRatio,hdr:r.hdr,colorGamut:r.colorGamut,videoLayout:r.videoLayout,kind:r.kind,language:r.language,originalLanguage:r.originalLanguage,label:r.label,width:r.width||null,height:r.height||null,encrypted:r.encrypted,keyIds:r.keyIds,segments:[],variantIds:[],roles:r.roles,forced:r.forced,channelsCount:r.channelsCount,audioSamplingRate:r.audioSamplingRate,spatialAudio:r.spatialAudio,closedCaptions:r.closedCaptions,tilesLayout:r.tilesLayout,external:r.external,fastSwitching:r.fastSwitching,isAudioMuxedInVideo:r.isAudioMuxedInVideo,isIframe:r.isIframe},o=i.presentationTimeline.getSegmentAvailabilityStart(),c=s.offline.numberOfParallelDownloads,d=c===0?r.id:0;return y.forEachSegment_(r,o,(u,m)=>{let f=yr.idForSegmentRef(u),g,_=null;if(r.type==R.ContentType.CHAPTER){let b=u.getMetadata();b&&(_=b.title)}if(!_&&!n.has(f)){let b=e.addDownloadEstimate(t.getSegmentEstimate(r.id,u)),S=new yr(u,b,d,!1,m);n.set(f,S)}if(u.initSegmentReference&&(g=yr.idForSegmentRef(u.initSegmentReference),!n.has(g))){let b=e.addDownloadEstimate(t.getInitSegmentEstimate(r.id)),S=new yr(u.initSegmentReference,b,d,!0,m);n.set(g,S)}let T={pendingInitSegmentRefId:g,initSegmentKey:g?0:null,startTime:u.startTime,endTime:u.endTime,appendWindowStart:u.appendWindowStart,appendWindowEnd:u.appendWindowEnd,timestampOffset:u.timestampOffset,tilesLayout:u.tilesLayout,pendingSegmentRefId:f,dataKey:0,mimeType:u.mimeType,codecs:u.codecs,thumbnailSprite:u.thumbnailSprite,chapterTitle:_};a.segments.push(T),c!==0&&(d=(d+1)%c)}),a}static forEachSegment_(e,t,i){let r=e.segmentIndex.find(t);if(r==null)return;let s=e.segmentIndex.get(r);for(;s;)i(s,r),s=e.segmentIndex.get(++r)}ensureNotDestroyed_(){if(this.destroyer_.destroyed())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.OPERATION_ABORTED)}requireSupport_(){if(!y.support())throw new h(h.Severity.CRITICAL,h.Category.STORAGE,h.Code.STORAGE_NOT_SUPPORTED)}async startOperation_(e){this.openOperations_.push(e);try{return await e}finally{ye.remove(this.openOperations_,e)}}startAbortableOperation_(e){let t=e.promise;return this.openOperations_.push(t),e.finally(()=>{ye.remove(this.openOperations_,t)})}static getAllSegmentIds_(e){let t=new Set;for(let i of e.streams)for(let r of i.segments)r.initSegmentKey!=null&&t.add(r.initSegmentKey),t.add(r.dataKey);return Array.from(t)}static async deleteAll(){let e=new Ut;try{await e.erase()}finally{await e.destroy()}}static async deleteLicenseFor_(e,t,i,r){if(!r.drmInfo)return;let s=i.getEmeSessionCell(),n=r.sessionIds.map(c=>({sessionId:c,keySystem:r.drmInfo.keySystem,licenseUri:r.drmInfo.licenseServerUri,serverCertificate:r.drmInfo.serverCertificate,audioCapabilities:y.getCapabilities_(r,!1),videoCapabilities:y.getCapabilities_(r,!0)})),o=await new Ws().delete(t,e,n);await s.remove(o),await s.add(n.filter(c=>!o.includes(c.sessionId)))}static getAllStreamsFromManifest_(e){let t=new Set;for(let i of e.variants)i.audio&&t.add(i.audio),i.video&&t.add(i.video);for(let i of e.textStreams)t.add(i);for(let i of e.imageStreams)t.add(i);for(let i of e.chapterStreams)t.add(i);return t}static validateManifest_(e){let t=new Set(e.variants.map(s=>s.video)),i=new Set(e.variants.map(s=>s.audio)),r=e.textStreams;t.size>1&&p.warning("Multiple video tracks selected to be stored");for(let s of i)for(let n of i)s!=n&&s.language==n.language&&p.warning("Similar audio tracks were selected to be stored",s.id,n.id);for(let s of r)for(let n of r)s!=n&&s.language==n.language&&p.warning("Similar text tracks were selected to be stored",s.id,n.id)}};zs.defaultSystemIds_=new Map().set("org.w3.clearkey","1077efecc0b24d02ace33c1e52e2fb4b").set("com.widevine.alpha","edef8ba979d64acea3c827dcd51d21ed").set("com.microsoft.playready","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.recommendation","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.software","9a04f07998404286ab92e65be0885f95").set("com.microsoft.playready.hardware","9a04f07998404286ab92e65be0885f95").set("com.huawei.wiseplay","3d5e6d359b9a41e8b843dd3c6e72c42c");dt.registerSupportPlugin("offline",zs.support);/*! @license
|
|
900
900
|
* Shaka Player
|
|
901
901
|
* Copyright 2016 Google LLC
|
|
902
902
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -972,19 +972,19 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
972
972
|
* Shaka Player
|
|
973
973
|
* Copyright 2016 Google LLC
|
|
974
974
|
* SPDX-License-Identifier: Apache-2.0
|
|
975
|
-
*/var js=class y{static install(){if(screen.orientation&&screen.orientation.unlock){p.info("Using native screen.orientation");return}screen.orientation!=null?y.installBasedOnScreenMethods_():window.orientation!=null&&y.installBasedOnWindowMethods_()}static installBasedOnScreenMethods_(){let e=Object.getPrototypeOf(screen.orientation);screen.orientation.lock===void 0&&(e.lock=t=>(p.info("screen.orientation.lock is a no-op"),Promise.resolve())),screen.orientation.unlock===void 0&&(e.unlock=()=>{p.info("screen.orientation.unlock is a no-op")})}static installBasedOnWindowMethods_(){let e=new y.FakeOrientation;screen.orientation=e;let t=()=>{switch(window.orientation){case-90:e.type="landscape-secondary",e.angle=270;break;case 0:e.type="portrait-primary",e.angle=0;break;case 90:e.type="landscape-primary",e.angle=90;break;case 180:e.type="portrait-secondary",e.angle=180;break}};t(),window.addEventListener("orientationchange",()=>{t(),e.dispatchChangeEvent()})}};js.FakeOrientation=class extends Be{constructor(){super(),this.type="",this.angle=0}dispatchChangeEvent(){let y=new
|
|
975
|
+
*/var js=class y{static install(){if(screen.orientation&&screen.orientation.unlock){p.info("Using native screen.orientation");return}screen.orientation!=null?y.installBasedOnScreenMethods_():window.orientation!=null&&y.installBasedOnWindowMethods_()}static installBasedOnScreenMethods_(){let e=Object.getPrototypeOf(screen.orientation);screen.orientation.lock===void 0&&(e.lock=t=>(p.info("screen.orientation.lock is a no-op"),Promise.resolve())),screen.orientation.unlock===void 0&&(e.unlock=()=>{p.info("screen.orientation.unlock is a no-op")})}static installBasedOnWindowMethods_(){let e=new y.FakeOrientation;screen.orientation=e;let t=()=>{switch(window.orientation){case-90:e.type="landscape-secondary",e.angle=270;break;case 0:e.type="portrait-primary",e.angle=0;break;case 90:e.type="landscape-primary",e.angle=90;break;case 180:e.type="portrait-secondary",e.angle=180;break}};t(),window.addEventListener("orientationchange",()=>{t(),e.dispatchChangeEvent()})}};js.FakeOrientation=class extends Be{constructor(){super(),this.type="",this.angle=0}dispatchChangeEvent(){let y=new L("change");this.dispatchEvent(y)}lock(y){let e=r=>screen.lockOrientation?screen.lockOrientation(r):screen.mozLockOrientation?screen.mozLockOrientation(r):!1,t=!1;switch(y){case"natural":t=e("default");break;case"any":t=!0,this.unlock();break;default:t=e(y);break}if(t)return Promise.resolve();let i=new Error("screen.orientation.lock() is not available on this device");return i.name="NotSupportedError",i.code=DOMException.NOT_SUPPORTED_ERR,Promise.reject(i)}unlock(){screen.unlockOrientation?screen.unlockOrientation():screen.mozUnlockOrientation&&screen.mozUnlockOrientation()}};Pe.register(js.install);/*! @license
|
|
976
976
|
* Shaka Player
|
|
977
977
|
* Copyright 2016 Google LLC
|
|
978
978
|
* SPDX-License-Identifier: Apache-2.0
|
|
979
|
-
*/var hs=class{constructor(){l(this,"size");l(this,"status_");this.size=0,this.status_=void 0}setStatus(e){this.size=e==null?0:1,this.status_=e}getStatus(){return this.status_}forEach(e){this.status_&&e(this.status_,de.DUMMY_KEY_ID.value())}get(e){if(this.has(e))return this.status_}has(e){let t=de.DUMMY_KEY_ID.value();return!!(this.status_&&
|
|
979
|
+
*/var hs=class{constructor(){l(this,"size");l(this,"status_");this.size=0,this.status_=void 0}setStatus(e){this.size=e==null?0:1,this.status_=e}getStatus(){return this.status_}forEach(e){this.status_&&e(this.status_,de.DUMMY_KEY_ID.value())}get(e){if(this.has(e))return this.status_}has(e){let t=de.DUMMY_KEY_ID.value();return!!(this.status_&&U.equal(e,t))}entries(){v.assert(!1,"Not used! Provided only for the compiler.")}keys(){v.assert(!1,"Not used! Provided only for the compiler.")}values(){v.assert(!1,"Not used! Provided only for the compiler.")}[Symbol.iterator](){return v.assert(!1,"Not used! Provided only for the compiler."),[][Symbol.iterator]()}};/*! @license
|
|
980
980
|
* Shaka Player
|
|
981
981
|
* Copyright 2016 Google LLC
|
|
982
982
|
* SPDX-License-Identifier: Apache-2.0
|
|
983
|
-
*/var je=class je{static defaultInstall(){!window.HTMLVideoElement||!window.WebKitMediaKeys||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||je.install()}static install(e=!1){!window.HTMLVideoElement||!window.WebKitMediaKeys||window.shakaMediaKeysPolyfill!=je.apiName_&&(e&&(je.enableUninstall=!0,je.originalHTMLMediaElementPrototypeMediaKeys=Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype,"mediaKeys"),je.originalHTMLMediaElementPrototypeSetMediaKeys=HTMLMediaElement.prototype.setMediaKeys,je.originalWindowMediaKeys=window.MediaKeys,je.originalWindowMediaKeySystemAccess=window.MediaKeySystemAccess,je.originalNavigatorRequestMediaKeySystemAccess=navigator.requestMediaKeySystemAccess),p.info("Using Apple-prefixed EME"),delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=je.setMediaKeys,window.MediaKeys=je.MediaKeys,window.MediaKeySystemAccess=je.MediaKeySystemAccess,navigator.requestMediaKeySystemAccess=je.requestMediaKeySystemAccess,window.shakaMediaKeysPolyfill=je.apiName_,re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap())}static uninstall(){window.shakaMediaKeysPolyfill==je.apiName_&&je.enableUninstall&&(p.info("Un-installing Apple-prefixed EME"),je.enableUninstall=!1,Object.defineProperty(HTMLMediaElement.prototype,"mediaKeys",je.originalHTMLMediaElementPrototypeMediaKeys),HTMLMediaElement.prototype.setMediaKeys=je.originalHTMLMediaElementPrototypeSetMediaKeys,window.MediaKeys=je.originalWindowMediaKeys,window.MediaKeySystemAccess=je.originalWindowMediaKeySystemAccess,navigator.requestMediaKeySystemAccess=je.originalNavigatorRequestMediaKeySystemAccess,je.originalWindowMediaKeys=null,je.originalWindowMediaKeySystemAccess=null,je.originalHTMLMediaElementPrototypeSetMediaKeys=null,je.originalNavigatorRequestMediaKeySystemAccess=null,je.originalHTMLMediaElementPrototypeMediaKeys=null,window.shakaMediaKeysPolyfill="",re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap())}static requestMediaKeySystemAccess(e,t){p.debug("PatchedMediaKeysApple.requestMediaKeySystemAccess"),v.assert(this==navigator,'bad "this" for requestMediaKeySystemAccess');try{let i=new je.MediaKeySystemAccess(e,t);return Promise.resolve(i)}catch(i){return Promise.reject(i)}}static setMediaKeys(e){p.debug("PatchedMediaKeysApple.setMediaKeys"),v.assert(this instanceof HTMLMediaElement,'bad "this" for setMediaKeys');let t=e,i=this.mediaKeys;return i&&i!=t&&(v.assert(i instanceof je.MediaKeys,"non-polyfill instance of oldMediaKeys"),i.setMedia(null)),delete this.mediaKeys,this.mediaKeys=e,t?(v.assert(t instanceof je.MediaKeys,"non-polyfill instance of newMediaKeys"),t.setMedia(this)):Promise.resolve()}static onWebkitNeedKey_(e){p.debug("PatchedMediaKeysApple.onWebkitNeedKey_",e);let t=this.mediaKeys;v.assert(t instanceof je.MediaKeys,"non-polyfill instance of newMediaKeys"),v.assert(e.initData!=null,"missing init data!");let i=
|
|
983
|
+
*/var je=class je{static defaultInstall(){!window.HTMLVideoElement||!window.WebKitMediaKeys||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration||je.install()}static install(e=!1){!window.HTMLVideoElement||!window.WebKitMediaKeys||window.shakaMediaKeysPolyfill!=je.apiName_&&(e&&(je.enableUninstall=!0,je.originalHTMLMediaElementPrototypeMediaKeys=Object.getOwnPropertyDescriptor(HTMLMediaElement.prototype,"mediaKeys"),je.originalHTMLMediaElementPrototypeSetMediaKeys=HTMLMediaElement.prototype.setMediaKeys,je.originalWindowMediaKeys=window.MediaKeys,je.originalWindowMediaKeySystemAccess=window.MediaKeySystemAccess,je.originalNavigatorRequestMediaKeySystemAccess=navigator.requestMediaKeySystemAccess),p.info("Using Apple-prefixed EME"),delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=je.setMediaKeys,window.MediaKeys=je.MediaKeys,window.MediaKeySystemAccess=je.MediaKeySystemAccess,navigator.requestMediaKeySystemAccess=je.requestMediaKeySystemAccess,window.shakaMediaKeysPolyfill=je.apiName_,re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap())}static uninstall(){window.shakaMediaKeysPolyfill==je.apiName_&&je.enableUninstall&&(p.info("Un-installing Apple-prefixed EME"),je.enableUninstall=!1,Object.defineProperty(HTMLMediaElement.prototype,"mediaKeys",je.originalHTMLMediaElementPrototypeMediaKeys),HTMLMediaElement.prototype.setMediaKeys=je.originalHTMLMediaElementPrototypeSetMediaKeys,window.MediaKeys=je.originalWindowMediaKeys,window.MediaKeySystemAccess=je.originalWindowMediaKeySystemAccess,navigator.requestMediaKeySystemAccess=je.originalNavigatorRequestMediaKeySystemAccess,je.originalWindowMediaKeys=null,je.originalWindowMediaKeySystemAccess=null,je.originalHTMLMediaElementPrototypeSetMediaKeys=null,je.originalNavigatorRequestMediaKeySystemAccess=null,je.originalHTMLMediaElementPrototypeMediaKeys=null,window.shakaMediaKeysPolyfill="",re.clearDecodingConfigCache(),de.clearMediaKeySystemAccessMap())}static requestMediaKeySystemAccess(e,t){p.debug("PatchedMediaKeysApple.requestMediaKeySystemAccess"),v.assert(this==navigator,'bad "this" for requestMediaKeySystemAccess');try{let i=new je.MediaKeySystemAccess(e,t);return Promise.resolve(i)}catch(i){return Promise.reject(i)}}static setMediaKeys(e){p.debug("PatchedMediaKeysApple.setMediaKeys"),v.assert(this instanceof HTMLMediaElement,'bad "this" for setMediaKeys');let t=e,i=this.mediaKeys;return i&&i!=t&&(v.assert(i instanceof je.MediaKeys,"non-polyfill instance of oldMediaKeys"),i.setMedia(null)),delete this.mediaKeys,this.mediaKeys=e,t?(v.assert(t instanceof je.MediaKeys,"non-polyfill instance of newMediaKeys"),t.setMedia(this)):Promise.resolve()}static onWebkitNeedKey_(e){p.debug("PatchedMediaKeysApple.onWebkitNeedKey_",e);let t=this.mediaKeys;v.assert(t instanceof je.MediaKeys,"non-polyfill instance of newMediaKeys"),v.assert(e.initData!=null,"missing init data!");let i=U.toUint8(e.initData);if(U.toDataView(i).getUint32(0,!0)+4!=i.byteLength)throw new RangeError("Malformed FairPlay init data");let n=q.fromUTF16(i.subarray(4),!0),a=q.toUTF8(n),o=new Event("encrypted"),c=o;c.initDataType="skd",c.initData=U.toArrayBuffer(a),this.dispatchEvent(o)}};l(je,"apiName_","apple");var Wi=je;Wi.MediaKeySystemAccess=class{constructor(y,e){if(p.debug("PatchedMediaKeysApple.MediaKeySystemAccess"),this.keySystem=y,this.configuration_,y.startsWith("com.apple.fps"))for(let i of e){let r=this.checkConfig_(i);if(r){this.configuration_=r;return}}let t=new Error("Unsupported keySystem");throw t.name="NotSupportedError",t.code=DOMException.NOT_SUPPORTED_ERR,t}checkConfig_(y){if(y.persistentState=="required")return null;let e={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:y.initDataTypes,sessionTypes:["temporary"],label:y.label},t=!1,i=!1;if(y.audioCapabilities){for(let r of y.audioCapabilities)if(r.contentType){t=!0;let s=r.contentType.split(";")[0];WebKitMediaKeys.isTypeSupported(this.keySystem,s)&&(e.audioCapabilities.push(r),i=!0)}}if(y.videoCapabilities){for(let r of y.videoCapabilities)if(r.contentType){t=!0;let s=r.contentType.split(";")[0];WebKitMediaKeys.isTypeSupported(this.keySystem,s)&&(e.videoCapabilities.push(r),i=!0)}}return t||(i=WebKitMediaKeys.isTypeSupported(this.keySystem,"video/mp4")),i?e:null}createMediaKeys(){p.debug("PatchedMediaKeysApple.MediaKeySystemAccess.createMediaKeys");let y=new Wi.MediaKeys(this.keySystem);return Promise.resolve(y)}getConfiguration(){return p.debug("PatchedMediaKeysApple.MediaKeySystemAccess.getConfiguration"),this.configuration_}};Wi.MediaKeys=class{constructor(y){p.debug("PatchedMediaKeysApple.MediaKeys"),this.nativeMediaKeys_=new WebKitMediaKeys(y),this.eventManager_=new ue}createSession(y){if(p.debug("PatchedMediaKeysApple.MediaKeys.createSession"),y=y||"temporary",y!="temporary")throw new TypeError("Session type "+y+" is unsupported on this platform.");return new Wi.MediaKeySession(this.nativeMediaKeys_,y)}setServerCertificate(y){return p.debug("PatchedMediaKeysApple.MediaKeys.setServerCertificate"),Promise.resolve(!1)}setMedia(y){if(this.eventManager_.removeAll(),!y)return Promise.resolve();this.eventManager_.listen(y,"webkitneedkey",Wi.onWebkitNeedKey_);try{return di.waitForReadyState(y,HTMLMediaElement.HAVE_METADATA,this.eventManager_,()=>{y.webkitSetMediaKeys(this.nativeMediaKeys_)}),Promise.resolve()}catch(e){return Promise.reject(e)}}getStatusForPolicy(y){return Promise.resolve("usable")}};Wi.MediaKeySession=class extends Be{constructor(y,e){p.debug("PatchedMediaKeysApple.MediaKeySession"),super(),this.nativeMediaKeySession_=null,this.nativeMediaKeys_=y,this.generateRequestPromise_=null,this.updatePromise_=null,this.eventManager_=new ue,this.closed_=Promise.withResolvers(),this.sessionId="",this.expiration=NaN,this.keyStatuses=new hs,this.onkeystatuseschange=null}get closed(){return this.closed_.promise}generateRequest(y,e){p.debug("PatchedMediaKeysApple.MediaKeySession.generateRequest"),this.generateRequestPromise_=Promise.withResolvers();try{let t=this.nativeMediaKeys_.createSession("video/mp4",U.toUint8(e));this.nativeMediaKeySession_=t,this.sessionId=t.sessionId||"",this.eventManager_.listen(this.nativeMediaKeySession_,"webkitkeymessage",(i=>this.onWebkitKeyMessage_(i))),this.eventManager_.listen(t,"webkitkeyadded",(i=>this.onWebkitKeyAdded_(i))),this.eventManager_.listen(t,"webkitkeyerror",(i=>this.onWebkitKeyError_(i))),this.updateKeyStatus_("status-pending")}catch(t){this.generateRequestPromise_.reject(t)}return this.generateRequestPromise_.promise}load(){return p.debug("PatchedMediaKeysApple.MediaKeySession.load"),Promise.reject(new Error("MediaKeySession.load not yet supported"))}update(y){p.debug("PatchedMediaKeysApple.MediaKeySession.update"),this.updatePromise_=Promise.withResolvers();try{this.nativeMediaKeySession_.update(U.toUint8(y))}catch(e){this.updatePromise_.reject(e)}return this.updatePromise_.promise}close(){p.debug("PatchedMediaKeysApple.MediaKeySession.close");try{this.nativeMediaKeySession_.close(),this.closed_.resolve(),this.eventManager_.removeAll()}catch(y){this.closed_.reject(y)}return this.closed}remove(){return p.debug("PatchedMediaKeysApple.MediaKeySession.remove"),Promise.reject(new Error("MediaKeySession.remove is only applicable for persistent licenses, which are not supported on this platform"))}onWebkitKeyMessage_(y){p.debug("PatchedMediaKeysApple.onWebkitKeyMessage_",y),v.assert(this.generateRequestPromise_,"generateRequestPromise_ should be set before now!"),this.generateRequestPromise_&&(this.generateRequestPromise_.resolve(),this.generateRequestPromise_=null);let e=this.keyStatuses.getStatus()==null,t=new Map().set("messageType",e?"license-request":"license-renewal").set("message",U.toArrayBuffer(y.message)),i=new L("message",t);this.dispatchEvent(i)}onWebkitKeyAdded_(y){p.debug("PatchedMediaKeysApple.onWebkitKeyAdded_",y),v.assert(!this.generateRequestPromise_,"Key added during generate!"),v.assert(this.updatePromise_,"updatePromise_ should be set before now!"),this.updatePromise_&&(this.updateKeyStatus_("usable"),this.updatePromise_.resolve(),this.updatePromise_=null)}onWebkitKeyError_(y){p.debug("PatchedMediaKeysApple.onWebkitKeyError_",y);let e=new Error("EME PatchedMediaKeysApple key error");if(e.errorCode=this.nativeMediaKeySession_.error,this.generateRequestPromise_!=null)this.generateRequestPromise_.reject(e),this.generateRequestPromise_=null;else if(this.updatePromise_!=null)this.updatePromise_.reject(e),this.updatePromise_=null;else switch(this.nativeMediaKeySession_.error.code){case WebKitMediaKeyError.MEDIA_KEYERR_OUTPUT:case WebKitMediaKeyError.MEDIA_KEYERR_HARDWARECHANGE:this.updateKeyStatus_("output-not-allowed");break;default:this.updateKeyStatus_("internal-error");break}}updateKeyStatus_(y){this.keyStatuses.setStatus(y);let e=new L("keystatuseschange");this.dispatchEvent(e),this.onkeystatuseschange&&this.onkeystatuseschange(e)}};Pe.register(Wi.defaultInstall);/*! @license
|
|
984
984
|
* Shaka Player
|
|
985
985
|
* Copyright 2016 Google LLC
|
|
986
986
|
* SPDX-License-Identifier: Apache-2.0
|
|
987
|
-
*/var Jt=class Jt{static install(){if(!(!window.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration)){if(HTMLMediaElement.prototype.webkitGenerateKeyRequest)p.info("Using webkit-prefixed EME v0.1b"),Jt.prefix_="webkit";else if(HTMLMediaElement.prototype.generateKeyRequest)p.info("Using nonprefixed EME v0.1b");else return;v.assert(HTMLMediaElement.prototype[Jt.prefixApi_("generateKeyRequest")],"PatchedMediaKeysWebkit APIs not available!"),navigator.requestMediaKeySystemAccess=Jt.requestMediaKeySystemAccess,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Jt.setMediaKeys,window.MediaKeys=Jt.MediaKeys,window.MediaKeySystemAccess=Jt.MediaKeySystemAccess,window.shakaMediaKeysPolyfill=Jt.apiName_}}static prefixApi_(e){let t=Jt.prefix_;return t?t+e.charAt(0).toUpperCase()+e.slice(1):e}static requestMediaKeySystemAccess(e,t){p.debug("PatchedMediaKeysWebkit.requestMediaKeySystemAccess"),v.assert(this==navigator,'bad "this" for requestMediaKeySystemAccess');try{let i=new Jt.MediaKeySystemAccess(e,t);return Promise.resolve(i)}catch(i){return Promise.reject(i)}}static setMediaKeys(e){p.debug("PatchedMediaKeysWebkit.setMediaKeys"),v.assert(this instanceof HTMLMediaElement,'bad "this" for setMediaKeys');let t=e,i=this.mediaKeys;return i&&i!=t&&(v.assert(i instanceof Jt.MediaKeys,"non-polyfill instance of oldMediaKeys"),i.setMedia(null)),delete this.mediaKeys,this.mediaKeys=e,t&&(v.assert(t instanceof Jt.MediaKeys,"non-polyfill instance of newMediaKeys"),t.setMedia(this)),Promise.resolve()}static getVideoElement_(){let e=document.getElementsByTagName("video");return e.length?e[0]:document.createElement("video")}};l(Jt,"prefix_",""),l(Jt,"apiName_","webkit");var ai=Jt;ai.MediaKeySystemAccess=class{constructor(y,e){p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess"),this.keySystem=y,this.internalKeySystem_=y,this.configuration_;let t=!1;y=="org.w3.clearkey"&&(this.internalKeySystem_="webkit-org.w3.clearkey",t=!1);let i=!1,r=ai.getVideoElement_();for(let a of e){let o={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:a.initDataTypes,sessionTypes:["temporary"],label:a.label},c=!1;if(a.audioCapabilities){for(let d of a.audioCapabilities)if(d.contentType){c=!0;let u=d.contentType.split(";")[0];r.canPlayType(u,this.internalKeySystem_)&&(o.audioCapabilities.push(d),i=!0)}}if(a.videoCapabilities)for(let d of a.videoCapabilities)d.contentType&&(c=!0,r.canPlayType(d.contentType,this.internalKeySystem_)&&(o.videoCapabilities.push(d),i=!0));if(c||(i=r.canPlayType("video/mp4",this.internalKeySystem_)||r.canPlayType("video/webm",this.internalKeySystem_)),a.persistentState=="required"&&(t?(o.persistentState="required",o.sessionTypes=["persistent-license"]):i=!1),i){this.configuration_=o;return}}let s="Unsupported keySystem";(y=="org.w3.clearkey"||y=="com.widevine.alpha")&&(s="None of the requested configurations were supported.");let n=new Error(s);throw n.name="NotSupportedError",n.code=DOMException.NOT_SUPPORTED_ERR,n}createMediaKeys(){p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess.createMediaKeys");let y=new ai.MediaKeys(this.internalKeySystem_);return Promise.resolve(y)}getConfiguration(){return p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess.getConfiguration"),this.configuration_}};ai.MediaKeys=class{constructor(y){p.debug("PatchedMediaKeysWebkit.MediaKeys"),this.keySystem_=y,this.media_=null,this.eventManager_=new ue,this.newSessions_=[],this.sessionMap_=new Map}setMedia(y){this.media_=y,this.eventManager_.removeAll();let e=ai.prefix_;y&&(this.eventManager_.listen(y,e+"needkey",(t=>this.onWebkitNeedKey_(t))),this.eventManager_.listen(y,e+"keymessage",(t=>this.onWebkitKeyMessage_(t))),this.eventManager_.listen(y,e+"keyadded",(t=>this.onWebkitKeyAdded_(t))),this.eventManager_.listen(y,e+"keyerror",(t=>this.onWebkitKeyError_(t))))}createSession(y){if(p.debug("PatchedMediaKeysWebkit.MediaKeys.createSession"),y=y||"temporary",y!="temporary"&&y!="persistent-license")throw new TypeError("Session type "+y+" is unsupported on this platform.");let e=this.media_||document.createElement("video");e.src||(e.src="about:blank");let t=new ai.MediaKeySession(e,this.keySystem_,y);return this.newSessions_.push(t),t}setServerCertificate(y){return p.debug("PatchedMediaKeysWebkit.MediaKeys.setServerCertificate"),Promise.resolve(!1)}getStatusForPolicy(y){return Promise.resolve("usable")}onWebkitNeedKey_(y){p.debug("PatchedMediaKeysWebkit.onWebkitNeedKey_",y),v.assert(this.media_,"media_ not set in onWebkitNeedKey_");let e=new CustomEvent("encrypted"),t=e;t.initDataType="cenc",t.initData=
|
|
987
|
+
*/var Jt=class Jt{static install(){if(!(!window.HTMLVideoElement||navigator.requestMediaKeySystemAccess&&MediaKeySystemAccess.prototype.getConfiguration)){if(HTMLMediaElement.prototype.webkitGenerateKeyRequest)p.info("Using webkit-prefixed EME v0.1b"),Jt.prefix_="webkit";else if(HTMLMediaElement.prototype.generateKeyRequest)p.info("Using nonprefixed EME v0.1b");else return;v.assert(HTMLMediaElement.prototype[Jt.prefixApi_("generateKeyRequest")],"PatchedMediaKeysWebkit APIs not available!"),navigator.requestMediaKeySystemAccess=Jt.requestMediaKeySystemAccess,delete HTMLMediaElement.prototype.mediaKeys,HTMLMediaElement.prototype.mediaKeys=null,HTMLMediaElement.prototype.setMediaKeys=Jt.setMediaKeys,window.MediaKeys=Jt.MediaKeys,window.MediaKeySystemAccess=Jt.MediaKeySystemAccess,window.shakaMediaKeysPolyfill=Jt.apiName_}}static prefixApi_(e){let t=Jt.prefix_;return t?t+e.charAt(0).toUpperCase()+e.slice(1):e}static requestMediaKeySystemAccess(e,t){p.debug("PatchedMediaKeysWebkit.requestMediaKeySystemAccess"),v.assert(this==navigator,'bad "this" for requestMediaKeySystemAccess');try{let i=new Jt.MediaKeySystemAccess(e,t);return Promise.resolve(i)}catch(i){return Promise.reject(i)}}static setMediaKeys(e){p.debug("PatchedMediaKeysWebkit.setMediaKeys"),v.assert(this instanceof HTMLMediaElement,'bad "this" for setMediaKeys');let t=e,i=this.mediaKeys;return i&&i!=t&&(v.assert(i instanceof Jt.MediaKeys,"non-polyfill instance of oldMediaKeys"),i.setMedia(null)),delete this.mediaKeys,this.mediaKeys=e,t&&(v.assert(t instanceof Jt.MediaKeys,"non-polyfill instance of newMediaKeys"),t.setMedia(this)),Promise.resolve()}static getVideoElement_(){let e=document.getElementsByTagName("video");return e.length?e[0]:document.createElement("video")}};l(Jt,"prefix_",""),l(Jt,"apiName_","webkit");var ai=Jt;ai.MediaKeySystemAccess=class{constructor(y,e){p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess"),this.keySystem=y,this.internalKeySystem_=y,this.configuration_;let t=!1;y=="org.w3.clearkey"&&(this.internalKeySystem_="webkit-org.w3.clearkey",t=!1);let i=!1,r=ai.getVideoElement_();for(let a of e){let o={audioCapabilities:[],videoCapabilities:[],persistentState:"optional",distinctiveIdentifier:"optional",initDataTypes:a.initDataTypes,sessionTypes:["temporary"],label:a.label},c=!1;if(a.audioCapabilities){for(let d of a.audioCapabilities)if(d.contentType){c=!0;let u=d.contentType.split(";")[0];r.canPlayType(u,this.internalKeySystem_)&&(o.audioCapabilities.push(d),i=!0)}}if(a.videoCapabilities)for(let d of a.videoCapabilities)d.contentType&&(c=!0,r.canPlayType(d.contentType,this.internalKeySystem_)&&(o.videoCapabilities.push(d),i=!0));if(c||(i=r.canPlayType("video/mp4",this.internalKeySystem_)||r.canPlayType("video/webm",this.internalKeySystem_)),a.persistentState=="required"&&(t?(o.persistentState="required",o.sessionTypes=["persistent-license"]):i=!1),i){this.configuration_=o;return}}let s="Unsupported keySystem";(y=="org.w3.clearkey"||y=="com.widevine.alpha")&&(s="None of the requested configurations were supported.");let n=new Error(s);throw n.name="NotSupportedError",n.code=DOMException.NOT_SUPPORTED_ERR,n}createMediaKeys(){p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess.createMediaKeys");let y=new ai.MediaKeys(this.internalKeySystem_);return Promise.resolve(y)}getConfiguration(){return p.debug("PatchedMediaKeysWebkit.MediaKeySystemAccess.getConfiguration"),this.configuration_}};ai.MediaKeys=class{constructor(y){p.debug("PatchedMediaKeysWebkit.MediaKeys"),this.keySystem_=y,this.media_=null,this.eventManager_=new ue,this.newSessions_=[],this.sessionMap_=new Map}setMedia(y){this.media_=y,this.eventManager_.removeAll();let e=ai.prefix_;y&&(this.eventManager_.listen(y,e+"needkey",(t=>this.onWebkitNeedKey_(t))),this.eventManager_.listen(y,e+"keymessage",(t=>this.onWebkitKeyMessage_(t))),this.eventManager_.listen(y,e+"keyadded",(t=>this.onWebkitKeyAdded_(t))),this.eventManager_.listen(y,e+"keyerror",(t=>this.onWebkitKeyError_(t))))}createSession(y){if(p.debug("PatchedMediaKeysWebkit.MediaKeys.createSession"),y=y||"temporary",y!="temporary"&&y!="persistent-license")throw new TypeError("Session type "+y+" is unsupported on this platform.");let e=this.media_||document.createElement("video");e.src||(e.src="about:blank");let t=new ai.MediaKeySession(e,this.keySystem_,y);return this.newSessions_.push(t),t}setServerCertificate(y){return p.debug("PatchedMediaKeysWebkit.MediaKeys.setServerCertificate"),Promise.resolve(!1)}getStatusForPolicy(y){return Promise.resolve("usable")}onWebkitNeedKey_(y){p.debug("PatchedMediaKeysWebkit.onWebkitNeedKey_",y),v.assert(this.media_,"media_ not set in onWebkitNeedKey_");let e=new CustomEvent("encrypted"),t=e;t.initDataType="cenc",t.initData=U.toArrayBuffer(y.initData),this.media_.dispatchEvent(e)}onWebkitKeyMessage_(y){p.debug("PatchedMediaKeysWebkit.onWebkitKeyMessage_",y);let e=this.findSession_(y.sessionId);if(!e){p.error("Session not found",y.sessionId);return}let t=e.keyStatuses.getStatus()==null,i=new Map().set("messageType",t?"licenserequest":"licenserenewal").set("message",y.message),r=new L("message",i);e.generated(),e.dispatchEvent(r)}onWebkitKeyAdded_(y){p.debug("PatchedMediaKeysWebkit.onWebkitKeyAdded_",y);let e=this.findSession_(y.sessionId);v.assert(e,"unable to find session in onWebkitKeyAdded_"),e&&e.ready()}onWebkitKeyError_(y){p.debug("PatchedMediaKeysWebkit.onWebkitKeyError_",y);let e=this.findSession_(y.sessionId);v.assert(e,"unable to find session in onWebkitKeyError_"),e&&e.handleError(y)}findSession_(y){let e=this.sessionMap_.get(y);return e?(p.debug("PatchedMediaKeysWebkit.MediaKeys.findSession_",e),e):(e=this.newSessions_.shift(),e?(e.sessionId=y,this.sessionMap_.set(y,e),p.debug("PatchedMediaKeysWebkit.MediaKeys.findSession_",e),e):null)}};ai.MediaKeySession=class extends Be{constructor(y,e,t){p.debug("PatchedMediaKeysWebkit.MediaKeySession"),super(),this.media_=y,this.initialized_=!1,this.generatePromise_=null,this.updatePromise_=null,this.keySystem_=e,this.type_=t,this.closed_=Promise.withResolvers(),this.sessionId="",this.expiration=NaN,this.keyStatuses=new hs,this.onkeystatuseschange=null}get closed(){return this.closed_.promise}generated(){p.debug("PatchedMediaKeysWebkit.MediaKeySession.generated"),this.generatePromise_&&(this.generatePromise_.resolve(),this.generatePromise_=null)}ready(){p.debug("PatchedMediaKeysWebkit.MediaKeySession.ready"),this.updateKeyStatus_("usable"),this.updatePromise_&&this.updatePromise_.resolve(),this.updatePromise_=null}handleError(y){p.debug("PatchedMediaKeysWebkit.MediaKeySession.handleError",y);let e=new Error("EME v0.1b key error"),t=y.errorCode;if(t.systemCode=y.systemCode,e.errorCode=t,!y.sessionId&&this.generatePromise_)y.systemCode==45&&(e.message="Unsupported session type."),this.generatePromise_.reject(e),this.generatePromise_=null;else if(y.sessionId&&this.updatePromise_)this.updatePromise_.reject(e),this.updatePromise_=null;else{let i=y.errorCode.code,r=y.systemCode;i==MediaKeyError.MEDIA_KEYERR_OUTPUT?this.updateKeyStatus_("output-restricted"):r==1?this.updateKeyStatus_("expired"):this.updateKeyStatus_("internal-error")}}generate_(y,e){if(this.initialized_){let r=new Error("The session is already initialized.");return Promise.reject(r)}this.initialized_=!0;let t;try{if(this.type_=="persistent-license")if(e)t=U.toUint8(q.toUTF8("LOAD_SESSION|"+e));else{v.assert(y,"expecting init data");let r=q.toUTF8("PERSISTENT|");t=ne.concat(r,y)}else v.assert(this.type_=="temporary","expected temporary session"),v.assert(!e,"unexpected offline session ID"),v.assert(y,"expecting init data"),t=U.toUint8(y);v.assert(t,"init data not set!")}catch(r){return Promise.reject(r)}v.assert(this.generatePromise_==null,"generatePromise_ should be null"),this.generatePromise_=Promise.withResolvers();let i=ai.prefixApi_("generateKeyRequest");try{this.media_[i](this.keySystem_,t)}catch(r){if(r.name!="InvalidStateError")return this.generatePromise_=null,Promise.reject(r);new ae(()=>{try{this.media_[i](this.keySystem_,t)}catch(n){this.generatePromise_.reject(n),this.generatePromise_=null}}).tickAfter(.01)}return this.generatePromise_.promise}update_(y,e){if(this.updatePromise_){this.updatePromise_.promise.then(()=>this.update_(y,e)).catch(()=>this.update_(y,e));return}this.updatePromise_=y;let t,i;if(this.keySystem_=="webkit-org.w3.clearkey"){let s=q.fromUTF8(e),n=JSON.parse(s);n.keys[0].kty!="oct"&&(this.updatePromise_.reject(new Error("Response is not a valid JSON Web Key Set.")),this.updatePromise_=null),t=ne.fromBase64(n.keys[0].k),i=ne.fromBase64(n.keys[0].kid)}else t=U.toUint8(e),i=null;let r=ai.prefixApi_("addKey");try{this.media_[r](this.keySystem_,t,i,this.sessionId)}catch(s){this.updatePromise_.reject(s),this.updatePromise_=null}}updateKeyStatus_(y){this.keyStatuses.setStatus(y);let e=new L("keystatuseschange");this.dispatchEvent(e),this.onkeystatuseschange&&this.onkeystatuseschange(e)}generateRequest(y,e){return p.debug("PatchedMediaKeysWebkit.MediaKeySession.generateRequest"),this.generate_(e,null)}load(y){return p.debug("PatchedMediaKeysWebkit.MediaKeySession.load"),this.type_=="persistent-license"?this.generate_(null,y):Promise.reject(new Error("Not a persistent session."))}update(y){p.debug("PatchedMediaKeysWebkit.MediaKeySession.update",y),v.assert(this.sessionId,"update without session ID");let e=Promise.withResolvers();return this.update_(e,y),e.promise}close(){if(p.debug("PatchedMediaKeysWebkit.MediaKeySession.close"),this.type_!="persistent-license"){if(!this.sessionId)return this.closed_.reject(new Error("The session is not callable.")),this.closed_.promise;let y=ai.prefixApi_("cancelKeyRequest");try{this.media_[y](this.keySystem_,this.sessionId)}catch(e){p.debug(`${y} exception`,e)}}return this.closed_.resolve(),this.closed_.promise}remove(){return p.debug("PatchedMediaKeysWebkit.MediaKeySession.remove"),this.type_!="persistent-license"?Promise.reject(new Error("Not a persistent session.")):this.close()}};Pe.register(ai.install);/*! @license
|
|
988
988
|
* Shaka Player
|
|
989
989
|
* Copyright 2016 Google LLC
|
|
990
990
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1025,11 +1025,11 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
1025
1025
|
* Copyright 2016 Google LLC
|
|
1026
1026
|
* SPDX-License-Identifier: Apache-2.0
|
|
1027
1027
|
*/var Ae=class Ae{constructor(){l(this,"manifestType_");this.manifestType_=me.UNKNOWN}parseInit(e){v.assert(!1,"TTML does not have init segments")}setManifestType(e){this.manifestType_=e}parseMedia(e,t,i,r){let s=Ae.parameterNs_,n=Ae.styleNs_,a=q.fromUTF8(e),o=[];if(a=="")return o;let c=I.parseXmlString(a,"tt",!0);if(!c)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_XML,"Failed to parse TTML.");let d=I.getElementsByTagName(c,"body")[0];if(!d)return[];let u=I.getAttributeNSList(c,s,"frameRate"),m=I.getAttributeNSList(c,s,"subFrameRate"),f=I.getAttributeNSList(c,s,"frameRateMultiplier"),g=I.getAttributeNSList(c,s,"tickRate"),_=I.getAttributeNSList(c,s,"cellResolution"),T=c.attributes["xml:space"]||"default",b=I.getAttributeNSList(c,n,"extent");if(T!="default"&&T!="preserve")throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_XML,"Invalid xml:space value: "+T);let S=T=="default",E=new Ae.RateInfo_(u,m,f,g),w=this.getCellResolution_(_),A=I.getElementsByTagName(c,"metadata")[0],x=(A?A.children:[]).filter(V=>V!=`
|
|
1028
|
-
`),M=I.getElementsByTagName(c,"style"),C=I.getElementsByTagName(c,"region"),k=[];for(let V of C){let ee=this.parseCueRegion_(V,M,b);ee&&k.push(ee)}if(I.findChildren(d,"p").length)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"<p> can only be inside <div> in TTML");for(let V of I.findChildren(d,"div"))if(I.findChildren(V,"span").length)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"<span> can only be inside <p> in TTML");let L=this.parseCue_(d,t,E,x,M,C,k,S,w,null,!1,i,r);return L&&(L.backgroundColor||(L.backgroundColor="transparent"),o.push(L)),o}parseCue_(e,t,i,r,s,n,a,o,c,d,u,m,f){let g,_=d;if(I.isText(e)){if(!u)return null;g={tagName:"span",children:[I.getTextContents(e)],attributes:{},parent:null}}else g=e;v.assert(g,"cueElement should be non-null!");let T=null;for(let W of Ae.smpteNsList_)if(T=this.getElementsFromCollection_(g,"backgroundImage",r,"#",W)[0],T)break;let b=null,S=I.getAttributeNSList(g,Ae.smpteNsList_,"backgroundImage");if(S&&/^(urn:)(mpeg:[a-z0-9][a-z0-9-]{0,31}:)(subs:)([0-9]+)$/.test(S)){let W=parseInt(S.split(":").pop(),10)-1;if(W>=f.length)return null;b=f[W]}else if(m&&S&&!S.startsWith("#")){let W=fe.resolve(m,S);W&&(b=W)}(e.tagName=="p"||T||b)&&(u=!0);let w=u,x=(g.attributes["xml:space"]||(o?"default":"preserve"))=="default",M=g.children.every(I.isText),C=[];if(!M)for(let W of g.children){let z=this.parseCue_(W,t,i,r,s,n,a,x,c,g,u,m,f);z&&C.push(z)}let k=d!=null,L=I.getTextContents(g),V=g.children.length&&L&&/\S/.test(L),ee=g.attributes.begin||g.attributes.end||g.attributes.dur;if(!ee&&!V&&g.tagName!="br"&&C.length==0)if(k){if(x)return null}else return null;let{start:oe,end:le}=this.parseTime_(g,i);for(;_&&I.isNode(_)&&_.tagName!="tt";)({start:oe,end:le}=this.resolveTime_(_,i,oe,le)),_=_.parent;if(oe==null&&(oe=0),oe+=t.periodStart,le==null?le=1/0:le+=t.periodStart,this.manifestType_!==me.HLS&&(oe=Math.max(oe,t.segmentStart),le=Math.min(le,t.segmentEnd)),!ee&&C.length>0){oe=1/0,le=0;for(let W of C)oe=Math.min(oe,W.startTime),le=Math.max(le,W.endTime)}if(g.tagName=="br"){let W=new B(oe,le,"");return W.lineBreak=!0,W}let G="";M&&(G=q.htmlUnescape(I.getTextContents(g)||""),x&&(G=G.replace(/\s+/g," ")));let J=new B(oe,le,G);J.nestedCues=C,u||(J.isContainer=!0),c&&(J.cellResolution=c);let Z=this.getElementsFromCollection_(g,"region",n,"")[0];if(g.attributes.region&&Z&&Z.attributes["xml:id"]){let W=Z.attributes["xml:id"];J.region=a.filter(z=>z.id==W)[0]}let ce=Z;return d&&k&&!g.attributes.region&&!g.attributes.style&&(ce=this.getElementsFromCollection_(d,"region",n,"")[0]),this.addStyle_(J,g,ce,T,b,s,w,C.length==0),J}parseCueRegion_(e,t,i){let r=new Ge,s=e.attributes["xml:id"];if(!s)return p.warning("TtmlTextParser parser encountered a region with no id. Region will be ignored."),null;r.id=s;let n=null;i&&(n=Ae.percentValues_.exec(i)||Ae.pixelValues_.exec(i));let a=n?Number(n[1]):null,o=n?Number(n[2]):null,c=null,d=null,u=this.getStyleAttributeFromRegion_(e,t,"extent");u&&(d=Ae.percentValues_.exec(u),c=d||Ae.pixelValues_.exec(u),c!=null&&(r.width=Number(c[1]),r.height=Number(c[2]),d||(a!=null&&(r.width=r.width*100/a),o!=null&&(r.height=r.height*100/o)),r.widthUnits=d||a!=null?Ge.units.PERCENTAGE:Ge.units.PX,r.heightUnits=d||o!=null?Ge.units.PERCENTAGE:Ge.units.PX));let m=this.getStyleAttributeFromRegion_(e,t,"origin");return m&&(d=Ae.percentValues_.exec(m),c=d||Ae.pixelValues_.exec(m),c!=null&&(r.viewportAnchorX=Number(c[1]),r.viewportAnchorY=Number(c[2]),d?u||(r.width=100-r.viewportAnchorX,r.widthUnits=Ge.units.PERCENTAGE,r.height=100-r.viewportAnchorY,r.heightUnits=Ge.units.PERCENTAGE):(o!=null&&(r.viewportAnchorY=r.viewportAnchorY*100/o),a!=null&&(r.viewportAnchorX=r.viewportAnchorX*100/a)),r.viewportAnchorUnits=d||a!=null?Ge.units.PERCENTAGE:Ge.units.PX)),r}convertTTMLrgbaToHTMLrgba_(e){let t=e.match(/rgba\(([^)]+)\)/);if(t){let i=t[1].split(",");if(i.length==4)return i[3]=String(Number(i[3])/255),"rgba("+i.join(",")+")"}return e}addStyle_(e,t,i,r,s,n,a,o){let c=a||o;this.getStyleAttribute_(t,i,n,"direction",c)=="rtl"&&(e.direction=B.direction.HORIZONTAL_RIGHT_TO_LEFT);let u=this.getStyleAttribute_(t,i,n,"writingMode",c);u=="tb"||u=="tblr"?e.writingMode=B.writingMode.VERTICAL_LEFT_TO_RIGHT:u=="tbrl"?e.writingMode=B.writingMode.VERTICAL_RIGHT_TO_LEFT:u=="rltb"||u=="rl"?e.direction=B.direction.HORIZONTAL_RIGHT_TO_LEFT:u&&(e.direction=B.direction.HORIZONTAL_LEFT_TO_RIGHT);let m=this.getStyleAttribute_(t,i,n,"textAlign",!0);m?(e.positionAlign=Ae.textAlignToPositionAlign_.get(m),e.lineAlign=Ae.textAlignToLineAlign_.get(m),v.assert(m.toUpperCase()in B.textAlign,m.toUpperCase()+" Should be in Cue.textAlign values!"),e.textAlign=B.textAlign[m.toUpperCase()]):e.textAlign=B.textAlign.CENTER;let f=this.getStyleAttribute_(t,i,n,"displayAlign",!0);f&&(v.assert(f.toUpperCase()in B.displayAlign,f.toUpperCase()+" Should be in Cue.displayAlign values!"),e.displayAlign=B.displayAlign[f.toUpperCase()]);let g=this.getStyleAttribute_(t,i,n,"color",c);g&&(e.color=this.convertTTMLrgbaToHTMLrgba_(g));let _=this.getStyleAttribute_(t,i,n,"backgroundColor",c);_&&(e.backgroundColor=this.convertTTMLrgbaToHTMLrgba_(_));let T=this.getStyleAttribute_(t,i,n,"border",c);T&&(e.border=T);let b=this.getStyleAttribute_(t,i,n,"fontFamily",c);if(b)switch(b){case"monospaceSerif":e.fontFamily="Courier New,Liberation Mono,Courier,monospace";break;case"proportionalSansSerif":e.fontFamily="Arial,Helvetica,Liberation Sans,sans-serif";break;case"sansSerif":e.fontFamily="sans-serif";break;case"monospaceSansSerif":e.fontFamily="Consolas,monospace";break;case"proportionalSerif":e.fontFamily="serif";break;default:e.fontFamily=b.split(",").filter(G=>G!="default").join(",");break}let S=this.getStyleAttribute_(t,i,n,"fontWeight",c);S&&S=="bold"&&(e.fontWeight=B.fontWeight.BOLD);let E=this.getStyleAttribute_(t,i,n,"wrapOption",c);E&&E=="noWrap"?e.wrapLine=!1:e.wrapLine=!0;let w=this.getStyleAttribute_(t,i,n,"lineHeight",c);w&&w.match(Ae.unitValues_)&&(e.lineHeight=w);let A=this.getStyleAttribute_(t,i,n,"fontSize",c);A&&(A.match(Ae.unitValues_)||A.match(Ae.percentValue_))&&(e.fontSize=A);let x=this.getStyleAttribute_(t,i,n,"fontStyle",c);if(x&&(v.assert(x.toUpperCase()in B.fontStyle,x.toUpperCase()+" Should be in Cue.fontStyle values!"),e.fontStyle=B.fontStyle[x.toUpperCase()]),r){let G=r.attributes.imageType||r.attributes.imagetype,J=r.attributes.encoding,Z=I.getTextContents(r).trim();G=="PNG"&&J=="Base64"&&Z&&(e.backgroundImage="data:image/png;base64,"+Z)}else s&&(e.backgroundImage=s);let M=this.getStyleAttribute_(t,i,n,"textOutline",c);if(M){let G=M.split(" ");G[0].match(Ae.unitValues_)?e.textStrokeColor=e.color:(e.textStrokeColor=this.convertTTMLrgbaToHTMLrgba_(G[0]),G.shift()),G[0]&&G[0].match(Ae.unitValues_)?e.textStrokeWidth=G[0]:e.textStrokeColor=""}let C=this.getStyleAttribute_(t,i,n,"letterSpacing",c);C&&C.match(Ae.unitValues_)&&(e.letterSpacing=C);let k=this.getStyleAttribute_(t,i,n,"linePadding",c);k&&k.match(Ae.unitValues_)&&(e.linePadding=k);let L=this.getStyleAttribute_(t,i,n,"opacity",c);L&&(e.opacity=parseFloat(L));let V=this.getStyleAttributeFromRegion_(i,n,"textDecoration");V&&this.addTextDecoration_(e,V);let ee=this.getStyleAttributeFromElement_(t,n,"textDecoration");ee&&this.addTextDecoration_(e,ee);let oe=this.getStyleAttribute_(t,i,n,"textCombine",c);switch(oe&&(e.textCombineUpright=oe),this.getStyleAttribute_(t,i,n,"ruby",c)){case"container":e.rubyTag="ruby";break;case"text":e.rubyTag="rt";break}}addTextDecoration_(e,t){let i=(r,s)=>{let n=e.textDecoration.includes(r);s&&!n?e.textDecoration.push(r):!s&&n&&ye.remove(e.textDecoration,r)};for(let r of t.split(" "))switch(r){case"underline":i(B.textDecoration.UNDERLINE,!0);break;case"noUnderline":i(B.textDecoration.UNDERLINE,!1);break;case"lineThrough":i(B.textDecoration.LINE_THROUGH,!0);break;case"noLineThrough":i(B.textDecoration.LINE_THROUGH,!1);break;case"overline":i(B.textDecoration.OVERLINE,!0);break;case"noOverline":i(B.textDecoration.OVERLINE,!1);break}}getStyleAttribute_(e,t,i,r,s=!0){let n=this.getStyleAttributeFromElement_(e,i,r);return n||(s?this.getStyleAttributeFromRegion_(t,i,r):null)}getStyleAttributeFromRegion_(e,t,i){let r=Ae.styleNs_;if(!e)return null;let s=I.getAttributeNSList(e,r,i);return s||this.getInheritedStyleAttribute_(e,t,i)}getStyleAttributeFromElement_(e,t,i){let r=Ae.styleNs_,s=I.getAttributeNSList(e,r,i);return s||this.getInheritedStyleAttribute_(e,t,i)}getInheritedStyleAttribute_(e,t,i){let r=Ae.styleNs_,s=Ae.styleEbuttsNs_,n=this.getElementsFromCollection_(e,"style",t,""),a=null;for(let o=0;o<n.length;o++){let c=I.getAttributeNS(n[o],s,i);c||(c=I.getAttributeNSList(n[o],r,i)),c||(c=this.getStyleAttributeFromElement_(n[o],t,i)),c&&(a=c)}return a}getElementsFromCollection_(e,t,i,r,s){let n=[];if(!e||i.length<1)return n;let a=this.getInheritedAttribute_(e,t,s);if(a){let o=a.split(" ");for(let c of o)for(let d of i)if(r+d.attributes["xml:id"]==c){n.push(d);break}}return n}getInheritedAttribute_(e,t,i){let r=null;for(;!r&&(r=i?I.getAttributeNS(e,i,t):e.attributes[t],!r);){let s=e.parent;if(s)e=s;else break}return r}resolveTime_(e,t,i,r){let s=this.parseTime_(e,t);return i==null?i=s.start:s.start!=null&&(i+=s.start),r==null?r=s.end:s.start!=null&&(r+=s.start),{start:i,end:r}}parseTime_(e,t){let i=this.parseTimeAttribute_(e.attributes.begin,t),r=this.parseTimeAttribute_(e.attributes.end,t),s=this.parseTimeAttribute_(e.attributes.dur,t);return r==null&&s!=null&&(r=i+s),{start:i,end:r}}parseTimeAttribute_(e,t){let i=null;if(Ae.timeColonFormatFrames_.test(e))i=this.parseColonTimeWithFrames_(t,e);else if(Ae.timeColonFormat_.test(e))i=this.parseTimeFromRegex_(Ae.timeColonFormat_,e);else if(Ae.timeColonFormatMilliseconds_.test(e))i=this.parseTimeFromRegex_(Ae.timeColonFormatMilliseconds_,e);else if(Ae.timeFramesFormat_.test(e))i=this.parseFramesTime_(t,e);else if(Ae.timeTickFormat_.test(e))i=this.parseTickTime_(t,e);else if(Ae.timeHMSFormat_.test(e))i=this.parseTimeFromRegex_(Ae.timeHMSFormat_,e);else if(e)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"Could not parse cue time range in TTML");return i}parseFramesTime_(e,t){let i=Ae.timeFramesFormat_.exec(t);return Number(i[1])/e.frameRate}parseTickTime_(e,t){let i=Ae.timeTickFormat_.exec(t);return Number(i[1])/e.tickRate}parseColonTimeWithFrames_(e,t){let i=Ae.timeColonFormatFrames_.exec(t),r=Number(i[1]),s=Number(i[2]),n=Number(i[3]),a=Number(i[4]),o=Number(i[5])||0;return a+=o/e.subFrameRate,n+=a/e.frameRate,n+s*60+r*3600}parseTimeFromRegex_(e,t){let i=e.exec(t);if(i==null||i[0]=="")return null;let r=Number(i[1])||0,s=Number(i[2])||0,n=Number(i[3])||0;return(Number(i[4])||0)/1e3+n+s*60+r*3600}getCellResolution_(e){if(!e)return null;let t=/^(\d+) (\d+)$/.exec(e);if(!t)return null;let i=parseInt(t[1],10),r=parseInt(t[2],10);return{columns:i,rows:r}}};l(Ae,"percentValues_",/^(\d{1,2}(?:\.\d+)?|100(?:\.0+)?)% (\d{1,2}(?:\.\d+)?|100(?:\.0+)?)%$/),l(Ae,"percentValue_",/^(\d{1,4}(?:\.\d+)?|100)%$/),l(Ae,"unitValues_",/^(\d+px|\d+em|\d*\.?\d+c)$/),l(Ae,"pixelValues_",/^(\d+)px (\d+)px$/),l(Ae,"timeColonFormatFrames_",/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/),l(Ae,"timeColonFormat_",/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/),l(Ae,"timeColonFormatMilliseconds_",/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d+)$/),l(Ae,"timeFramesFormat_",/^(\d*(?:\.\d*)?)f$/),l(Ae,"timeTickFormat_",/^(\d*(?:\.\d*)?)t$/),l(Ae,"parameterNs_",["http://www.w3.org/ns/ttml#parameter","http://www.w3.org/2006/10/ttaf1#parameter"]),l(Ae,"styleNs_",["http://www.w3.org/ns/ttml#styling","http://www.w3.org/2006/10/ttaf1#styling"]),l(Ae,"styleEbuttsNs_","urn:ebu:tt:style"),l(Ae,"smpteNsList_",["http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt","http://www.smpte-ra.org/schemas/2052-1/2013/smpte-tt"]);var zi=Ae;zi.RateInfo_=class{constructor(y,e,t,i){if(this.frameRate=Number(y)||30,this.subFrameRate=Number(e)||1,this.tickRate=Number(i),this.tickRate==0&&(y?this.tickRate=this.frameRate*this.subFrameRate:this.tickRate=1),t){let r=/^(\d+) (\d+)$/g.exec(t);if(r){let s=Number(r[1]),n=Number(r[2]),a=s/n;this.frameRate*=a}}}};zi.timeHMSFormat_=new RegExp(["^(?:(\\d*(?:\\.\\d*)?)h)?","(?:(\\d*(?:\\.\\d*)?)m)?","(?:(\\d*(?:\\.\\d*)?)s)?","(?:(\\d*(?:\\.\\d*)?)ms)?$"].join(""));zi.textAlignToLineAlign_=new Map().set("left",B.lineAlign.START).set("center",B.lineAlign.CENTER).set("right",B.lineAlign.END).set("start",B.lineAlign.START).set("end",B.lineAlign.END);zi.textAlignToPositionAlign_=new Map().set("left",B.positionAlign.LEFT).set("center",B.positionAlign.CENTER).set("right",B.positionAlign.RIGHT).set("start",B.positionAlign.LEFT).set("end",B.positionAlign.RIGHT);Oe.registerParser("application/ttml+xml",()=>new zi);/*! @license
|
|
1028
|
+
`),M=I.getElementsByTagName(c,"style"),C=I.getElementsByTagName(c,"region"),k=[];for(let V of C){let ee=this.parseCueRegion_(V,M,b);ee&&k.push(ee)}if(I.findChildren(d,"p").length)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"<p> can only be inside <div> in TTML");for(let V of I.findChildren(d,"div"))if(I.findChildren(V,"span").length)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"<span> can only be inside <p> in TTML");let D=this.parseCue_(d,t,E,x,M,C,k,S,w,null,!1,i,r);return D&&(D.backgroundColor||(D.backgroundColor="transparent"),o.push(D)),o}parseCue_(e,t,i,r,s,n,a,o,c,d,u,m,f){let g,_=d;if(I.isText(e)){if(!u)return null;g={tagName:"span",children:[I.getTextContents(e)],attributes:{},parent:null}}else g=e;v.assert(g,"cueElement should be non-null!");let T=null;for(let W of Ae.smpteNsList_)if(T=this.getElementsFromCollection_(g,"backgroundImage",r,"#",W)[0],T)break;let b=null,S=I.getAttributeNSList(g,Ae.smpteNsList_,"backgroundImage");if(S&&/^(urn:)(mpeg:[a-z0-9][a-z0-9-]{0,31}:)(subs:)([0-9]+)$/.test(S)){let W=parseInt(S.split(":").pop(),10)-1;if(W>=f.length)return null;b=f[W]}else if(m&&S&&!S.startsWith("#")){let W=fe.resolve(m,S);W&&(b=W)}(e.tagName=="p"||T||b)&&(u=!0);let w=u,x=(g.attributes["xml:space"]||(o?"default":"preserve"))=="default",M=g.children.every(I.isText),C=[];if(!M)for(let W of g.children){let z=this.parseCue_(W,t,i,r,s,n,a,x,c,g,u,m,f);z&&C.push(z)}let k=d!=null,D=I.getTextContents(g),V=g.children.length&&D&&/\S/.test(D),ee=g.attributes.begin||g.attributes.end||g.attributes.dur;if(!ee&&!V&&g.tagName!="br"&&C.length==0)if(k){if(x)return null}else return null;let{start:oe,end:le}=this.parseTime_(g,i);for(;_&&I.isNode(_)&&_.tagName!="tt";)({start:oe,end:le}=this.resolveTime_(_,i,oe,le)),_=_.parent;if(oe==null&&(oe=0),oe+=t.periodStart,le==null?le=1/0:le+=t.periodStart,this.manifestType_!==me.HLS&&(oe=Math.max(oe,t.segmentStart),le=Math.min(le,t.segmentEnd)),!ee&&C.length>0){oe=1/0,le=0;for(let W of C)oe=Math.min(oe,W.startTime),le=Math.max(le,W.endTime)}if(g.tagName=="br"){let W=new B(oe,le,"");return W.lineBreak=!0,W}let G="";M&&(G=q.htmlUnescape(I.getTextContents(g)||""),x&&(G=G.replace(/\s+/g," ")));let J=new B(oe,le,G);J.nestedCues=C,u||(J.isContainer=!0),c&&(J.cellResolution=c);let Z=this.getElementsFromCollection_(g,"region",n,"")[0];if(g.attributes.region&&Z&&Z.attributes["xml:id"]){let W=Z.attributes["xml:id"];J.region=a.filter(z=>z.id==W)[0]}let ce=Z;return d&&k&&!g.attributes.region&&!g.attributes.style&&(ce=this.getElementsFromCollection_(d,"region",n,"")[0]),this.addStyle_(J,g,ce,T,b,s,w,C.length==0),J}parseCueRegion_(e,t,i){let r=new Ge,s=e.attributes["xml:id"];if(!s)return p.warning("TtmlTextParser parser encountered a region with no id. Region will be ignored."),null;r.id=s;let n=null;i&&(n=Ae.percentValues_.exec(i)||Ae.pixelValues_.exec(i));let a=n?Number(n[1]):null,o=n?Number(n[2]):null,c=null,d=null,u=this.getStyleAttributeFromRegion_(e,t,"extent");u&&(d=Ae.percentValues_.exec(u),c=d||Ae.pixelValues_.exec(u),c!=null&&(r.width=Number(c[1]),r.height=Number(c[2]),d||(a!=null&&(r.width=r.width*100/a),o!=null&&(r.height=r.height*100/o)),r.widthUnits=d||a!=null?Ge.units.PERCENTAGE:Ge.units.PX,r.heightUnits=d||o!=null?Ge.units.PERCENTAGE:Ge.units.PX));let m=this.getStyleAttributeFromRegion_(e,t,"origin");return m&&(d=Ae.percentValues_.exec(m),c=d||Ae.pixelValues_.exec(m),c!=null&&(r.viewportAnchorX=Number(c[1]),r.viewportAnchorY=Number(c[2]),d?u||(r.width=100-r.viewportAnchorX,r.widthUnits=Ge.units.PERCENTAGE,r.height=100-r.viewportAnchorY,r.heightUnits=Ge.units.PERCENTAGE):(o!=null&&(r.viewportAnchorY=r.viewportAnchorY*100/o),a!=null&&(r.viewportAnchorX=r.viewportAnchorX*100/a)),r.viewportAnchorUnits=d||a!=null?Ge.units.PERCENTAGE:Ge.units.PX)),r}convertTTMLrgbaToHTMLrgba_(e){let t=e.match(/rgba\(([^)]+)\)/);if(t){let i=t[1].split(",");if(i.length==4)return i[3]=String(Number(i[3])/255),"rgba("+i.join(",")+")"}return e}addStyle_(e,t,i,r,s,n,a,o){let c=a||o;this.getStyleAttribute_(t,i,n,"direction",c)=="rtl"&&(e.direction=B.direction.HORIZONTAL_RIGHT_TO_LEFT);let u=this.getStyleAttribute_(t,i,n,"writingMode",c);u=="tb"||u=="tblr"?e.writingMode=B.writingMode.VERTICAL_LEFT_TO_RIGHT:u=="tbrl"?e.writingMode=B.writingMode.VERTICAL_RIGHT_TO_LEFT:u=="rltb"||u=="rl"?e.direction=B.direction.HORIZONTAL_RIGHT_TO_LEFT:u&&(e.direction=B.direction.HORIZONTAL_LEFT_TO_RIGHT);let m=this.getStyleAttribute_(t,i,n,"textAlign",!0);m?(e.positionAlign=Ae.textAlignToPositionAlign_.get(m),e.lineAlign=Ae.textAlignToLineAlign_.get(m),v.assert(m.toUpperCase()in B.textAlign,m.toUpperCase()+" Should be in Cue.textAlign values!"),e.textAlign=B.textAlign[m.toUpperCase()]):e.textAlign=B.textAlign.CENTER;let f=this.getStyleAttribute_(t,i,n,"displayAlign",!0);f&&(v.assert(f.toUpperCase()in B.displayAlign,f.toUpperCase()+" Should be in Cue.displayAlign values!"),e.displayAlign=B.displayAlign[f.toUpperCase()]);let g=this.getStyleAttribute_(t,i,n,"color",c);g&&(e.color=this.convertTTMLrgbaToHTMLrgba_(g));let _=this.getStyleAttribute_(t,i,n,"backgroundColor",c);_&&(e.backgroundColor=this.convertTTMLrgbaToHTMLrgba_(_));let T=this.getStyleAttribute_(t,i,n,"border",c);T&&(e.border=T);let b=this.getStyleAttribute_(t,i,n,"fontFamily",c);if(b)switch(b){case"monospaceSerif":e.fontFamily="Courier New,Liberation Mono,Courier,monospace";break;case"proportionalSansSerif":e.fontFamily="Arial,Helvetica,Liberation Sans,sans-serif";break;case"sansSerif":e.fontFamily="sans-serif";break;case"monospaceSansSerif":e.fontFamily="Consolas,monospace";break;case"proportionalSerif":e.fontFamily="serif";break;default:e.fontFamily=b.split(",").filter(G=>G!="default").join(",");break}let S=this.getStyleAttribute_(t,i,n,"fontWeight",c);S&&S=="bold"&&(e.fontWeight=B.fontWeight.BOLD);let E=this.getStyleAttribute_(t,i,n,"wrapOption",c);E&&E=="noWrap"?e.wrapLine=!1:e.wrapLine=!0;let w=this.getStyleAttribute_(t,i,n,"lineHeight",c);w&&w.match(Ae.unitValues_)&&(e.lineHeight=w);let A=this.getStyleAttribute_(t,i,n,"fontSize",c);A&&(A.match(Ae.unitValues_)||A.match(Ae.percentValue_))&&(e.fontSize=A);let x=this.getStyleAttribute_(t,i,n,"fontStyle",c);if(x&&(v.assert(x.toUpperCase()in B.fontStyle,x.toUpperCase()+" Should be in Cue.fontStyle values!"),e.fontStyle=B.fontStyle[x.toUpperCase()]),r){let G=r.attributes.imageType||r.attributes.imagetype,J=r.attributes.encoding,Z=I.getTextContents(r).trim();G=="PNG"&&J=="Base64"&&Z&&(e.backgroundImage="data:image/png;base64,"+Z)}else s&&(e.backgroundImage=s);let M=this.getStyleAttribute_(t,i,n,"textOutline",c);if(M){let G=M.split(" ");G[0].match(Ae.unitValues_)?e.textStrokeColor=e.color:(e.textStrokeColor=this.convertTTMLrgbaToHTMLrgba_(G[0]),G.shift()),G[0]&&G[0].match(Ae.unitValues_)?e.textStrokeWidth=G[0]:e.textStrokeColor=""}let C=this.getStyleAttribute_(t,i,n,"letterSpacing",c);C&&C.match(Ae.unitValues_)&&(e.letterSpacing=C);let k=this.getStyleAttribute_(t,i,n,"linePadding",c);k&&k.match(Ae.unitValues_)&&(e.linePadding=k);let D=this.getStyleAttribute_(t,i,n,"opacity",c);D&&(e.opacity=parseFloat(D));let V=this.getStyleAttributeFromRegion_(i,n,"textDecoration");V&&this.addTextDecoration_(e,V);let ee=this.getStyleAttributeFromElement_(t,n,"textDecoration");ee&&this.addTextDecoration_(e,ee);let oe=this.getStyleAttribute_(t,i,n,"textCombine",c);switch(oe&&(e.textCombineUpright=oe),this.getStyleAttribute_(t,i,n,"ruby",c)){case"container":e.rubyTag="ruby";break;case"text":e.rubyTag="rt";break}}addTextDecoration_(e,t){let i=(r,s)=>{let n=e.textDecoration.includes(r);s&&!n?e.textDecoration.push(r):!s&&n&&ye.remove(e.textDecoration,r)};for(let r of t.split(" "))switch(r){case"underline":i(B.textDecoration.UNDERLINE,!0);break;case"noUnderline":i(B.textDecoration.UNDERLINE,!1);break;case"lineThrough":i(B.textDecoration.LINE_THROUGH,!0);break;case"noLineThrough":i(B.textDecoration.LINE_THROUGH,!1);break;case"overline":i(B.textDecoration.OVERLINE,!0);break;case"noOverline":i(B.textDecoration.OVERLINE,!1);break}}getStyleAttribute_(e,t,i,r,s=!0){let n=this.getStyleAttributeFromElement_(e,i,r);return n||(s?this.getStyleAttributeFromRegion_(t,i,r):null)}getStyleAttributeFromRegion_(e,t,i){let r=Ae.styleNs_;if(!e)return null;let s=I.getAttributeNSList(e,r,i);return s||this.getInheritedStyleAttribute_(e,t,i)}getStyleAttributeFromElement_(e,t,i){let r=Ae.styleNs_,s=I.getAttributeNSList(e,r,i);return s||this.getInheritedStyleAttribute_(e,t,i)}getInheritedStyleAttribute_(e,t,i){let r=Ae.styleNs_,s=Ae.styleEbuttsNs_,n=this.getElementsFromCollection_(e,"style",t,""),a=null;for(let o=0;o<n.length;o++){let c=I.getAttributeNS(n[o],s,i);c||(c=I.getAttributeNSList(n[o],r,i)),c||(c=this.getStyleAttributeFromElement_(n[o],t,i)),c&&(a=c)}return a}getElementsFromCollection_(e,t,i,r,s){let n=[];if(!e||i.length<1)return n;let a=this.getInheritedAttribute_(e,t,s);if(a){let o=a.split(" ");for(let c of o)for(let d of i)if(r+d.attributes["xml:id"]==c){n.push(d);break}}return n}getInheritedAttribute_(e,t,i){let r=null;for(;!r&&(r=i?I.getAttributeNS(e,i,t):e.attributes[t],!r);){let s=e.parent;if(s)e=s;else break}return r}resolveTime_(e,t,i,r){let s=this.parseTime_(e,t);return i==null?i=s.start:s.start!=null&&(i+=s.start),r==null?r=s.end:s.start!=null&&(r+=s.start),{start:i,end:r}}parseTime_(e,t){let i=this.parseTimeAttribute_(e.attributes.begin,t),r=this.parseTimeAttribute_(e.attributes.end,t),s=this.parseTimeAttribute_(e.attributes.dur,t);return r==null&&s!=null&&(r=i+s),{start:i,end:r}}parseTimeAttribute_(e,t){let i=null;if(Ae.timeColonFormatFrames_.test(e))i=this.parseColonTimeWithFrames_(t,e);else if(Ae.timeColonFormat_.test(e))i=this.parseTimeFromRegex_(Ae.timeColonFormat_,e);else if(Ae.timeColonFormatMilliseconds_.test(e))i=this.parseTimeFromRegex_(Ae.timeColonFormatMilliseconds_,e);else if(Ae.timeFramesFormat_.test(e))i=this.parseFramesTime_(t,e);else if(Ae.timeTickFormat_.test(e))i=this.parseTickTime_(t,e);else if(Ae.timeHMSFormat_.test(e))i=this.parseTimeFromRegex_(Ae.timeHMSFormat_,e);else if(e)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_TEXT_CUE,"Could not parse cue time range in TTML");return i}parseFramesTime_(e,t){let i=Ae.timeFramesFormat_.exec(t);return Number(i[1])/e.frameRate}parseTickTime_(e,t){let i=Ae.timeTickFormat_.exec(t);return Number(i[1])/e.tickRate}parseColonTimeWithFrames_(e,t){let i=Ae.timeColonFormatFrames_.exec(t),r=Number(i[1]),s=Number(i[2]),n=Number(i[3]),a=Number(i[4]),o=Number(i[5])||0;return a+=o/e.subFrameRate,n+=a/e.frameRate,n+s*60+r*3600}parseTimeFromRegex_(e,t){let i=e.exec(t);if(i==null||i[0]=="")return null;let r=Number(i[1])||0,s=Number(i[2])||0,n=Number(i[3])||0;return(Number(i[4])||0)/1e3+n+s*60+r*3600}getCellResolution_(e){if(!e)return null;let t=/^(\d+) (\d+)$/.exec(e);if(!t)return null;let i=parseInt(t[1],10),r=parseInt(t[2],10);return{columns:i,rows:r}}};l(Ae,"percentValues_",/^(\d{1,2}(?:\.\d+)?|100(?:\.0+)?)% (\d{1,2}(?:\.\d+)?|100(?:\.0+)?)%$/),l(Ae,"percentValue_",/^(\d{1,4}(?:\.\d+)?|100)%$/),l(Ae,"unitValues_",/^(\d+px|\d+em|\d*\.?\d+c)$/),l(Ae,"pixelValues_",/^(\d+)px (\d+)px$/),l(Ae,"timeColonFormatFrames_",/^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/),l(Ae,"timeColonFormat_",/^(?:(\d{2,}):)?(\d{2}):(\d{2})$/),l(Ae,"timeColonFormatMilliseconds_",/^(?:(\d{2,}):)?(\d{2}):(\d{2}\.\d+)$/),l(Ae,"timeFramesFormat_",/^(\d*(?:\.\d*)?)f$/),l(Ae,"timeTickFormat_",/^(\d*(?:\.\d*)?)t$/),l(Ae,"parameterNs_",["http://www.w3.org/ns/ttml#parameter","http://www.w3.org/2006/10/ttaf1#parameter"]),l(Ae,"styleNs_",["http://www.w3.org/ns/ttml#styling","http://www.w3.org/2006/10/ttaf1#styling"]),l(Ae,"styleEbuttsNs_","urn:ebu:tt:style"),l(Ae,"smpteNsList_",["http://www.smpte-ra.org/schemas/2052-1/2010/smpte-tt","http://www.smpte-ra.org/schemas/2052-1/2013/smpte-tt"]);var zi=Ae;zi.RateInfo_=class{constructor(y,e,t,i){if(this.frameRate=Number(y)||30,this.subFrameRate=Number(e)||1,this.tickRate=Number(i),this.tickRate==0&&(y?this.tickRate=this.frameRate*this.subFrameRate:this.tickRate=1),t){let r=/^(\d+) (\d+)$/g.exec(t);if(r){let s=Number(r[1]),n=Number(r[2]),a=s/n;this.frameRate*=a}}}};zi.timeHMSFormat_=new RegExp(["^(?:(\\d*(?:\\.\\d*)?)h)?","(?:(\\d*(?:\\.\\d*)?)m)?","(?:(\\d*(?:\\.\\d*)?)s)?","(?:(\\d*(?:\\.\\d*)?)ms)?$"].join(""));zi.textAlignToLineAlign_=new Map().set("left",B.lineAlign.START).set("center",B.lineAlign.CENTER).set("right",B.lineAlign.END).set("start",B.lineAlign.START).set("end",B.lineAlign.END);zi.textAlignToPositionAlign_=new Map().set("left",B.positionAlign.LEFT).set("center",B.positionAlign.CENTER).set("right",B.positionAlign.RIGHT).set("start",B.positionAlign.LEFT).set("end",B.positionAlign.RIGHT);Oe.registerParser("application/ttml+xml",()=>new zi);/*! @license
|
|
1029
1029
|
* Shaka Player
|
|
1030
1030
|
* Copyright 2016 Google LLC
|
|
1031
1031
|
* SPDX-License-Identifier: Apache-2.0
|
|
1032
|
-
*/var hi=class{constructor(){l(this,"parser_");this.parser_=new zi}parseInit(e){let t=!1;if(new F().boxes(F.SAMPLE_TABLE_PATH,F.children).fullBox("stsd",F.sampleDescription).box("stpp",i=>{t=!0,i.parser.stop()}).parse(e),!t)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_MP4_TTML)}setManifestType(e){this.parser_.setManifestType(e)}parseMedia(e,t,i,r){let s=[],n=null,a=[],
|
|
1032
|
+
*/var hi=class{constructor(){l(this,"parser_");l(this,"timescale_");this.parser_=new zi,this.timescale_=null}parseInit(e){let t=!1;if(new F().boxes(F.SAMPLE_TABLE_PATH,F.children).fullBox("mdhd",i=>{v.assert(i.version==0||i.version==1,"MDHD version can only be 0 or 1");let r=pe.parseMDHD(i.reader,i.version);this.timescale_=r.timescale}).fullBox("stsd",F.sampleDescription).box("stpp",i=>{t=!0,i.parser.stop()}).parse(e),!t)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_MP4_TTML)}setManifestType(e){this.parser_.setManifestType(e)}parseMedia(e,t,i,r){let s=[],n=null,a=null,o=[],c=new Map,d=[],u=[],m=[],f=0;if(new F().boxes(F.FRAGMENT_PATH,F.children).fullBox("tfhd",S=>{v.assert(S.flags!=null,"A TFHD box should have a valid flags value");let E=pe.parseTFHD(S.reader,S.flags);n=E.defaultSampleSize,a=E.defaultSampleDuration}).fullBox("tfdt",S=>{v.assert(S.version==0||S.version==1,"TFDT version can only be 0 or 1"),f=pe.parseTFDTInaccurate(S.reader,S.version).baseMediaDecodeTime}).fullBox("trun",S=>{v.assert(S.version!=null,"A TRUN box should have a valid version value"),v.assert(S.flags!=null,"A TRUN box should have a valid flags value");let E=pe.parseTRUN(S.reader,S.version,S.flags);for(let w of E.sampleData){let A=w.sampleSize||n||0;d.push(A);let x=w.sampleDuration||a;u.push(x),m.push(f),f+=x||0}}).fullBox("subs",S=>{let E=S.reader,w=E.readUint32(),A=-1;for(let x=0;x<w;x++){let M=E.readUint32();A+=M;let C=E.readUint16(),k=[];for(let D=0;D<C;D++)S.version==1?k.push(E.readUint32()):k.push(E.readUint16()),E.readUint8(),E.readUint8(),E.readUint32();c.set(A,k)}}).box("mdat",F.allData(S=>{o.push(S)},!1)).parse(e,!1),o.length==0)throw new h(h.Severity.CRITICAL,h.Category.TEXT,h.Code.INVALID_MP4_TTML);let _=ne.concat(...o),T=this.getSampleTimes_(m,u,t),b=0;for(let S=0;S<d.length;S++){let E=U.toUint8(_,b,d[S]);b+=d[S];let w=c.get(S),A=[];if(w&&w.length){let x=U.toUint8(E,0,w[0]),M=w[0];for(let C=1;C<w.length;C++){let k=U.toUint8(E,M,w[C]),D=ne.toStandardBase64(k);A.push("data:image/png;base64,"+D),M+=w[C]}E=x}s=s.concat(this.parser_.parseMedia(E,T?T[S]:t,i,A))}return s}getSampleTimes_(e,t,i){let r=this.timescale_;if(!r||t.length<2)return null;let s=[];for(let c of t){if(!c)return null;s.push(c)}let n=c=>Math.min(Math.max(c,i.segmentStart),i.segmentEnd),a=e[0],o=[];for(let c=0;c<s.length;c++){let d=i.segmentStart+(e[c]-a)/r,u=d+s[c]/r;o.push({periodStart:i.periodStart,segmentStart:n(d),segmentEnd:n(u),vttOffset:i.vttOffset,isMpegTs:i.isMpegTs})}return o[o.length-1].segmentEnd=i.segmentEnd,o}};Oe.registerParser('application/mp4; codecs="stpp"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.im1i"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.im1t"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.im2i"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.im2t"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.etd1"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.etd1|im1t"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.ttml.im1t|etd1"',()=>new hi);Oe.registerParser('application/mp4; codecs="stpp.TTML.im1t"',()=>new hi);/*! @license
|
|
1033
1033
|
* Shaka Player
|
|
1034
1034
|
* Copyright 2016 Google LLC
|
|
1035
1035
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1045,7 +1045,7 @@ Char: `+e[i])}return i+1&&(i+=1),M}else if(e.charCodeAt(i+1)===u){if(e.charCodeA
|
|
|
1045
1045
|
* Shaka Player
|
|
1046
1046
|
* Copyright 2016 Google LLC
|
|
1047
1047
|
* SPDX-License-Identifier: Apache-2.0
|
|
1048
|
-
*/var Ua=class extends Xi{parseMedia(e,t,i,r){let s=q.fromUTF8(e),n=this.srt2webvtt_(s),a=
|
|
1048
|
+
*/var Ua=class extends Xi{parseMedia(e,t,i,r){let s=q.fromUTF8(e),n=this.srt2webvtt_(s),a=U.toUint8(q.toUTF8(n));return super.parseMedia(a,t,i,r)}srt2webvtt_(e){let t=`WEBVTT
|
|
1049
1049
|
|
|
1050
1050
|
`;if(e=="")return t;let i=e.replace(/\r+/g,"");i=i.trim();let r=i.split(`
|
|
1051
1051
|
|
|
@@ -1058,7 +1058,7 @@ ${o}
|
|
|
1058
1058
|
* Shaka Player
|
|
1059
1059
|
* Copyright 2016 Google LLC
|
|
1060
1060
|
* SPDX-License-Identifier: Apache-2.0
|
|
1061
|
-
*/var ht=class ht{static getParsedCaption(e,t,i,r,s,n=!1){if(r>=s)return null;let a=-1,o=-1;for(let _=0;_<i.length;_++)i[_].some(T=>T!=null&&T.getChar().trim()!="")&&(a===-1&&(a=_),o=_);if(a===-1||o===-1)return null;let c=!1,d=!1,u=ht.DEFAULT_TXT_COLOR,m=ht.DEFAULT_BG_COLOR,f=r,g=ht.createStyledCue(r,s,c,d,u,m);for(let _=a;_<=o;_++){let T=i[_],b=-1,S=-1;for(let E=0;E<T.length;E++)T[E]!=null&&T[E].getChar().trim()!==""&&(b===-1&&(b=E),S=E);if(b===-1||S===-1){let E=ht.createLineBreakCue(r,s);e.nestedCues.push(E);continue}for(let E=b;E<=S;E++){let w=T[E];if(!w){g.payload+=" ";continue}let A=w.isUnderlined(),x=w.isItalicized(),M=w.getTextColor(),C=w.getBackgroundColor(),k=w.getTime(),
|
|
1061
|
+
*/var ht=class ht{static getParsedCaption(e,t,i,r,s,n=!1){if(r>=s)return null;let a=-1,o=-1;for(let _=0;_<i.length;_++)i[_].some(T=>T!=null&&T.getChar().trim()!="")&&(a===-1&&(a=_),o=_);if(a===-1||o===-1)return null;let c=!1,d=!1,u=ht.DEFAULT_TXT_COLOR,m=ht.DEFAULT_BG_COLOR,f=r,g=ht.createStyledCue(r,s,c,d,u,m);for(let _=a;_<=o;_++){let T=i[_],b=-1,S=-1;for(let E=0;E<T.length;E++)T[E]!=null&&T[E].getChar().trim()!==""&&(b===-1&&(b=E),S=E);if(b===-1||S===-1){let E=ht.createLineBreakCue(r,s);e.nestedCues.push(E);continue}for(let E=b;E<=S;E++){let w=T[E];if(!w){g.payload+=" ";continue}let A=w.isUnderlined(),x=w.isItalicized(),M=w.getTextColor(),C=w.getBackgroundColor(),k=w.getTime(),D=n&&k!=null&&k>r?k:r;(A!=c||x!=d||M!=u||C!=m||D!=f)&&(g.payload&&e.nestedCues.push(g),g=ht.createStyledCue(D,s,A,x,M,C),c=A,d=x,u=M,m=C,f=D),g.payload+=w.getChar()}if(g.payload&&e.nestedCues.push(g),_!==o){let E=ht.createLineBreakCue(r,s);e.nestedCues.push(E)}f=r,g=ht.createStyledCue(r,s,c,d,u,m)}return e.nestedCues.length?{cue:e,stream:t}:null}static createStyledCue(e,t,i,r,s,n){let a=new B(e,t,"");return i&&a.textDecoration.push(B.textDecoration.UNDERLINE),r&&(a.fontStyle=B.fontStyle.ITALIC),a.color=s,a.backgroundColor=n,a}static createLineBreakCue(e,t){let i=new B(e,t,"");return i.lineBreak=!0,i}static getCea608StreamName(e,t){return`CC${(e<<1|t)+1}`}static isSeiNaluType(e,t){switch(e){case ht.CodecFamily.H264:return t==ht.H264_NALU_TYPE_SEI;case ht.CodecFamily.H265:return t==ht.H265_PREFIX_NALU_TYPE_SEI||t==ht.H265_SUFFIX_NALU_TYPE_SEI;case ht.CodecFamily.H266:return t==ht.H266_PREFIX_NALU_TYPE_SEI||t==ht.H266_SUFFIX_NALU_TYPE_SEI;default:return!1}}};l(ht,"CodecFamily",{H264:0,H265:1,H266:2}),l(ht,"DEFAULT_BG_COLOR","black"),l(ht,"DEFAULT_TXT_COLOR","white"),l(ht,"H264_NALU_TYPE_SEI",6),l(ht,"H265_PREFIX_NALU_TYPE_SEI",39),l(ht,"H265_SUFFIX_NALU_TYPE_SEI",40),l(ht,"H266_PREFIX_NALU_TYPE_SEI",23),l(ht,"H266_SUFFIX_NALU_TYPE_SEI",24),l(ht,"DEFAULT_TIMESCALE_VALUE",9e4);var $e=ht,La=class{constructor(e,t,i,r,s,n=null){l(this,"character_");l(this,"underline_");l(this,"italics_");l(this,"backgroundColor_");l(this,"textColor_");l(this,"time_");this.character_=e,this.underline_=t,this.italics_=i,this.backgroundColor_=r,this.textColor_=s,this.time_=n}getChar(){return this.character_}getTime(){return this.time_}isUnderlined(){return this.underline_}isItalicized(){return this.italics_}getBackgroundColor(){return this.backgroundColor_}getTextColor(){return this.textColor_}};/*! @license
|
|
1062
1062
|
* Shaka Player
|
|
1063
1063
|
* Copyright 2016 Google LLC
|
|
1064
1064
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1094,7 +1094,7 @@ ${o}
|
|
|
1094
1094
|
* Shaka Player
|
|
1095
1095
|
* Copyright 2016 Google LLC
|
|
1096
1096
|
* SPDX-License-Identifier: Apache-2.0
|
|
1097
|
-
*/var Fa=class{constructor(){l(this,"seiProcessor_");l(this,"tsParser_");this.seiProcessor_=new ms,this.tsParser_=null}init(e){}parse(e){this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt;let t=[],i=
|
|
1097
|
+
*/var Fa=class{constructor(){l(this,"seiProcessor_");l(this,"tsParser_");this.seiProcessor_=new ms,this.tsParser_=null}init(e){}parse(e){this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt;let t=[],i=U.toUint8(e);if(!mt.probe(i))return t;let r=this.tsParser_.parse(i),s=r.getCodecs(),n=r.getVideoNalus(),a=null;switch(s.video){case"avc":a=$e.CodecFamily.H264;break;case"hvc":a=$e.CodecFamily.H265;break}if(a==null)return t;for(let o of n)if(o.time!=null&&$e.isSeiNaluType(a,o.type))for(let c of this.seiProcessor_.process(o.data))t.push({packet:c,pts:o.time,format:Mt.CaptionPacketFormat.SEI});return t}};Mt.registerParser("video/mp2t",()=>new Fa);/*! @license
|
|
1098
1098
|
* Shaka Player
|
|
1099
1099
|
* Copyright 2016 Google LLC
|
|
1100
1100
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1110,7 +1110,7 @@ ${o}
|
|
|
1110
1110
|
* Shaka Player
|
|
1111
1111
|
* Copyright 2016 Google LLC
|
|
1112
1112
|
* SPDX-License-Identifier: Apache-2.0
|
|
1113
|
-
*/var ps=class extends li{isSupported(e,t){if(!this.isAacContainer_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isAacContainer_(e){return e.toLowerCase().split(";")[0]=="audio/aac"}convertCodecs(e,t){return this.isAacContainer_(t)?`audio/mp4; codecs="${O.getCodecs(t)||"mp4a.40.2"}"`:t}transmux(e,t,i,r){let s=
|
|
1113
|
+
*/var ps=class extends li{isSupported(e,t){if(!this.isAacContainer_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isAacContainer_(e){return e.toLowerCase().split(";")[0]=="audio/aac"}convertCodecs(e,t){return this.isAacContainer_(t)?`audio/mp4; codecs="${O.getCodecs(t)||"mp4a.40.2"}"`:t}transmux(e,t,i,r){let s=U.toUint8(e),n=At.getID3Data(s),a=n.length;for(;a<s.length&&!Nt.probe(s,a);a++);let o=this.getId3Timestamp(n,i.endTime*1e3),c=Nt.parseInfo(s,a);if(!c)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));t.audioSamplingRate=c.sampleRate,t.channelsCount=c.channelCount;let d=[];for(;a<s.length;){let _=Nt.parseHeader(s,a);if(!_)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));let T=_.headerLength+_.frameLength;if(a+T<=s.length){let b=s.subarray(a+_.headerLength,a+T);d.push({data:b,size:_.frameLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS})}a+=T}let u=c.sampleRate,m=Math.floor(o*u/1e3),f={id:t.id,type:R.ContentType.AUDIO,codecs:c.codec,timescale:u,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:d},stream:t},g=new xe([f]);return Promise.resolve(this.packageSegment(g,t,i))}};Ne.registerTransmuxer("audio/aac",()=>new ps("audio/aac"),Ne.PluginPriority.FALLBACK);/*! @license
|
|
1114
1114
|
* Shaka Player
|
|
1115
1115
|
* Copyright 2016 Google LLC
|
|
1116
1116
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1118,7 +1118,7 @@ ${o}
|
|
|
1118
1118
|
* Shaka Player
|
|
1119
1119
|
* Copyright 2016 Google LLC
|
|
1120
1120
|
* SPDX-License-Identifier: Apache-2.0
|
|
1121
|
-
*/var Va=class extends li{isSupported(e,t){if(!this.isAc3Container_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isAc3Container_(e){return e.toLowerCase().split(";")[0]=="audio/ac3"}convertCodecs(e,t){return this.isAc3Container_(t)?j.getDevice().requiresEC3InitSegments()?'audio/mp4; codecs="ec-3"':'audio/mp4; codecs="ac-3"':t}transmux(e,t,i,r){let s=
|
|
1121
|
+
*/var Va=class extends li{isSupported(e,t){if(!this.isAc3Container_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isAc3Container_(e){return e.toLowerCase().split(";")[0]=="audio/ac3"}convertCodecs(e,t){return this.isAc3Container_(t)?j.getDevice().requiresEC3InitSegments()?'audio/mp4; codecs="ec-3"':'audio/mp4; codecs="ac-3"':t}transmux(e,t,i,r){let s=U.toUint8(e),n=At.getID3Data(s),a=n.length;for(;a<s.length&&!Ni.probe(s,a);a++);let o=this.getId3Timestamp(n,i.endTime*1e3),c=0,d=new Uint8Array([]),u=[],m={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(;a<s.length;){if(!Ni.parseFrame(s,a,m))return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));t.audioSamplingRate=m.sampleRate,t.channelsCount=m.channelCount,c=m.sampleRate,d=m.audioConfig;let b=s.subarray(a,a+m.frameLength);u.push({data:b,size:m.frameLength,duration:Ni.AC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),a+=m.frameLength}let f=Math.floor(o*c/1e3),g={id:t.id,type:R.ContentType.AUDIO,codecs:"ac-3",timescale:c,duration:r,mediaConfig:d,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:f,samples:u},stream:t},_=new xe([g]);return Promise.resolve(this.packageSegment(_,t,i))}};Ne.registerTransmuxer("audio/ac3",()=>new Va("audio/ac3"),Ne.PluginPriority.FALLBACK);/*! @license
|
|
1122
1122
|
* Shaka Player
|
|
1123
1123
|
* Copyright 2016 Google LLC
|
|
1124
1124
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1126,15 +1126,15 @@ ${o}
|
|
|
1126
1126
|
* Shaka Player
|
|
1127
1127
|
* Copyright 2016 Google LLC
|
|
1128
1128
|
* SPDX-License-Identifier: Apache-2.0
|
|
1129
|
-
*/var Ga=class extends li{isSupported(e,t){if(!this.isEc3Container_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isEc3Container_(e){return e.toLowerCase().split(";")[0]=="audio/ec3"}convertCodecs(e,t){return this.isEc3Container_(t)?'audio/mp4; codecs="ec-3"':t}transmux(e,t,i,r){let s=
|
|
1129
|
+
*/var Ga=class extends li{isSupported(e,t){if(!this.isEc3Container_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isEc3Container_(e){return e.toLowerCase().split(";")[0]=="audio/ec3"}convertCodecs(e,t){return this.isEc3Container_(t)?'audio/mp4; codecs="ec-3"':t}transmux(e,t,i,r){let s=U.toUint8(e),n=At.getID3Data(s),a=n.length;for(;a<s.length&&!$i.probe(s,a);a++);let o=this.getId3Timestamp(n,i.endTime*1e3),c=0,d=new Uint8Array([]),u=[],m={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(;a<s.length;){if(!$i.parseFrame(s,a,m))return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));t.audioSamplingRate=m.sampleRate,t.channelsCount=m.channelCount,c=m.sampleRate,d=m.audioConfig;let b=s.subarray(a,a+m.frameLength);u.push({data:b,size:m.frameLength,duration:$i.EC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),a+=m.frameLength}let f=Math.floor(o*c/1e3),g={id:t.id,type:R.ContentType.AUDIO,codecs:"ec-3",timescale:c,duration:r,mediaConfig:d,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:f,samples:u},stream:t},_=new xe([g]);return Promise.resolve(this.packageSegment(_,t,i))}};Ne.registerTransmuxer("audio/ec3",()=>new Ga("audio/ec3"),Ne.PluginPriority.FALLBACK);/*! @license
|
|
1130
1130
|
* Shaka Player
|
|
1131
1131
|
* Copyright 2016 Google LLC
|
|
1132
1132
|
* SPDX-License-Identifier: Apache-2.0
|
|
1133
|
-
*/var It=class It{static parseInfo(e){if(!e.length)return null;let t=e.find(C=>C.type==It.NALU_TYPE_SPS_),i=e.find(C=>C.type==It.NALU_TYPE_PPS_);if(!t||!i)return null;let r=new ri(t.data),s=r.readUnsignedByte();if(r.readUnsignedByte(),r.readUnsignedByte(),r.skipExpGolomb(),It.PROFILES_WITH_OPTIONAL_SPS_DATA_.includes(s)){let C=r.readUnsignedExpGolomb();if(C===3&&r.skipBits(1),r.skipExpGolomb(),r.skipExpGolomb(),r.skipBits(1),r.readBoolean()){let k=C!==3?8:12;for(let
|
|
1133
|
+
*/var It=class It{static parseInfo(e){if(!e.length)return null;let t=e.find(C=>C.type==It.NALU_TYPE_SPS_),i=e.find(C=>C.type==It.NALU_TYPE_PPS_);if(!t||!i)return null;let r=new ri(t.data),s=r.readUnsignedByte();if(r.readUnsignedByte(),r.readUnsignedByte(),r.skipExpGolomb(),It.PROFILES_WITH_OPTIONAL_SPS_DATA_.includes(s)){let C=r.readUnsignedExpGolomb();if(C===3&&r.skipBits(1),r.skipExpGolomb(),r.skipExpGolomb(),r.skipBits(1),r.readBoolean()){let k=C!==3?8:12;for(let D=0;D<k;D++)r.readBoolean()&&(D<6?r.skipScalingList(16):r.skipScalingList(64))}}r.skipExpGolomb();let n=r.readUnsignedExpGolomb();if(n===0)r.readUnsignedExpGolomb();else if(n===1){r.skipBits(1),r.skipExpGolomb(),r.skipExpGolomb();let C=r.readUnsignedExpGolomb();for(let k=0;k<C;k++)r.skipExpGolomb()}r.skipExpGolomb(),r.skipBits(1);let a=r.readUnsignedExpGolomb(),o=r.readUnsignedExpGolomb(),c=r.readBits(1);c===0&&r.skipBits(1),r.skipBits(1);let d=0,u=0,m=0,f=0;r.readBoolean()&&(d=r.readUnsignedExpGolomb(),u=r.readUnsignedExpGolomb(),m=r.readUnsignedExpGolomb(),f=r.readUnsignedExpGolomb());let g=1,_=1;if(r.readBoolean()&&r.readBoolean()){let C=r.readUnsignedByte(),k=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2],D=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1];C>0&&C<=16?(g=k[C-1],_=D[C-1]):C===255&&(g=r.readBits(16),_=r.readBits(16))}let T=(2-c)*(o+1)*16-m*2-f*2,b=(a+1)*16-d*2-u*2,S=t.fullData,E=S.byteLength,w=i.fullData,A=w.byteLength,x=0,M=new Uint8Array(11+E+A);return M[x++]=1,M[x++]=S[1],M[x++]=S[2],M[x++]=S[3],M[x++]=255,M[x++]=225,M[x++]=E>>>8&255,M[x++]=E&255,M.set(S,x),x+=E,M[x++]=1,M[x++]=A>>>8&255,M[x++]=A&255,M.set(w,x),{height:T,width:b,videoConfig:M,hSpacing:g,vSpacing:_}}static getVideoSamples(e){let t=[],i=null,r=!1,s=()=>{if(!i||!i.nalus.length||!i.frame)return;let o=i.nalus.length*4;for(let u of i.nalus)o+=u.fullData.byteLength;let c=new Uint8Array(o),d=0;for(let u of i.nalus){let m=u.fullData.byteLength;c[d]=m>>24&255,c[d+1]=m>>16&255,c[d+2]=m>>8&255,c[d+3]=m&255,c.set(u.fullData,d+4),d+=4+m}i.data=c,t.push(i)},n=new Uint8Array(0),a=o=>{i={data:n,frame:!1,isKeyframe:!1,pts:o.pts,dts:o.dts,nalus:[]}};for(let o=0;o<e.length;o++){let c=e[o],d=c.nalus,u=!1;i&&d.length&&!r&&(s(),a(c));for(let m of c.nalus){let f=!1;switch(m.type){case It.NALU_TYPE_NDR_:{let g=!1;f=!0;let _=m.data;if(u&&_.length>4){let T=new ri(_).readSliceType();(T===2||T===4||T===7||T===9)&&(g=!0)}g&&i&&i.frame&&!i.isKeyframe&&(s(),i=null),i||a(c),i.frame=!0,i.isKeyframe=g;break}case It.NALU_TYPE_IDR_:{f=!0,i&&i.frame&&!i.isKeyframe&&(s(),i=null),i||a(c),i.frame=!0,i.isKeyframe=!0;break}case It.NALU_TYPE_SEI_:f=!0;break;case It.NALU_TYPE_SPS_:f=!0,u=!0;break;case It.NALU_TYPE_PPS_:f=!0;break;case It.NALU_TYPE_AUD_:f=!0,r=!0,i&&i.frame&&(s(),i=null),i||a(c);break;case It.NALU_TYPE_FILLER_DATA_:f=!0;break;default:f=!1;break}i&&f&&i.nalus.push(m)}}return s(),t}static isKeyframe(e){return e.some(t=>t.type===It.NALU_TYPE_IDR_)}};l(It,"NALU_TYPE_NDR_",1),l(It,"NALU_TYPE_IDR_",5),l(It,"NALU_TYPE_SEI_",6),l(It,"NALU_TYPE_SPS_",7),l(It,"NALU_TYPE_PPS_",8),l(It,"NALU_TYPE_AUD_",9),l(It,"NALU_TYPE_FILLER_DATA_",12),l(It,"PROFILES_WITH_OPTIONAL_SPS_DATA_",[100,110,122,244,44,83,86,118,128,138,139,134]);var rr=It;/*! @license
|
|
1134
1134
|
* Shaka Player
|
|
1135
1135
|
* Copyright 2016 Google LLC
|
|
1136
1136
|
* SPDX-License-Identifier: Apache-2.0
|
|
1137
|
-
*/var et=class et{static parseInfo(e){if(!e.length)return null;let t=e.find(d=>d.type==et.NALU_TYPE_VPS_),i=e.find(d=>d.type==et.NALU_TYPE_SPS_),r=e.find(d=>d.type==et.NALU_TYPE_PPS_);if(!t||!i||!r)return null;let s=et.parseVPS_(t.fullData),n=et.parseSPS_(i.fullData),a=et.parsePPS_(r.fullData),o={numTemporalLayers:s.numTemporalLayers,temporalIdNested:s.temporalIdNested,generalProfileSpace:n.generalProfileSpace,generalTierFlag:n.generalTierFlag,generalLevelIdc:n.generalLevelIdc,generalProfileIdc:n.generalProfileIdc,generalProfileCompatibilityFlags1:n.generalProfileCompatibilityFlags1,generalProfileCompatibilityFlags2:n.generalProfileCompatibilityFlags2,generalProfileCompatibilityFlags3:n.generalProfileCompatibilityFlags3,generalProfileCompatibilityFlags4:n.generalProfileCompatibilityFlags4,generalConstraintIndicatorFlags1:n.generalConstraintIndicatorFlags1,generalConstraintIndicatorFlags2:n.generalConstraintIndicatorFlags2,generalConstraintIndicatorFlags3:n.generalConstraintIndicatorFlags3,generalConstraintIndicatorFlags4:n.generalConstraintIndicatorFlags4,generalConstraintIndicatorFlags5:n.generalConstraintIndicatorFlags5,generalConstraintIndicatorFlags6:n.generalConstraintIndicatorFlags6,minSpatialSegmentationIdc:n.minSpatialSegmentationIdc,chromaFormatIdc:n.chromaFormatIdc,bitDepthLumaMinus8:n.bitDepthLumaMinus8,bitDepthChromaMinus8:n.bitDepthChromaMinus8,parallelismType:a.parallelismType,frameRateFps:n.frameRateFps,frameRateFixed:n.frameRateFixed},c=et.getVideoConfiguration_(t.fullData,i.fullData,r.fullData,o);return{height:n.height,width:n.width,videoConfig:c,hSpacing:n.sarWidth,vSpacing:n.sarHeight}}static parseVPS_(e){let t=new ri(e,!0);t.readUnsignedByte(),t.readUnsignedByte(),t.readBits(4),t.readBits(2),t.readBits(6);let i=t.readBits(3),r=t.readBoolean();return{numTemporalLayers:i+1,temporalIdNested:r}}static parseSPS_(e){let t=new ri(e,!0);t.readUnsignedByte(),t.readUnsignedByte();let i=0,r=0,s=0,n=0;t.readBits(4);let a=t.readBits(3);t.readBoolean();let o=t.readBits(2),c=t.readBits(1),d=t.readBits(5),u=t.readUnsignedByte(),m=t.readUnsignedByte(),f=t.readUnsignedByte(),g=t.readUnsignedByte(),_=t.readUnsignedByte(),T=t.readUnsignedByte(),b=t.readUnsignedByte(),S=t.readUnsignedByte(),E=t.readUnsignedByte(),w=t.readUnsignedByte(),A=t.readUnsignedByte(),x=[],M=[];for(let we=0;we<a;we++)x.push(t.readBoolean()),M.push(t.readBoolean());if(a>0)for(let we=a;we<8;we++)t.readBits(2);for(let we=0;we<a;we++)x[we]&&t.readBits(88),M[we]&&t.readUnsignedByte();t.readUnsignedExpGolomb();let C=t.readUnsignedExpGolomb();C==3&&t.readBits(1);let k=t.readUnsignedExpGolomb(),
|
|
1137
|
+
*/var et=class et{static parseInfo(e){if(!e.length)return null;let t=e.find(d=>d.type==et.NALU_TYPE_VPS_),i=e.find(d=>d.type==et.NALU_TYPE_SPS_),r=e.find(d=>d.type==et.NALU_TYPE_PPS_);if(!t||!i||!r)return null;let s=et.parseVPS_(t.fullData),n=et.parseSPS_(i.fullData),a=et.parsePPS_(r.fullData),o={numTemporalLayers:s.numTemporalLayers,temporalIdNested:s.temporalIdNested,generalProfileSpace:n.generalProfileSpace,generalTierFlag:n.generalTierFlag,generalLevelIdc:n.generalLevelIdc,generalProfileIdc:n.generalProfileIdc,generalProfileCompatibilityFlags1:n.generalProfileCompatibilityFlags1,generalProfileCompatibilityFlags2:n.generalProfileCompatibilityFlags2,generalProfileCompatibilityFlags3:n.generalProfileCompatibilityFlags3,generalProfileCompatibilityFlags4:n.generalProfileCompatibilityFlags4,generalConstraintIndicatorFlags1:n.generalConstraintIndicatorFlags1,generalConstraintIndicatorFlags2:n.generalConstraintIndicatorFlags2,generalConstraintIndicatorFlags3:n.generalConstraintIndicatorFlags3,generalConstraintIndicatorFlags4:n.generalConstraintIndicatorFlags4,generalConstraintIndicatorFlags5:n.generalConstraintIndicatorFlags5,generalConstraintIndicatorFlags6:n.generalConstraintIndicatorFlags6,minSpatialSegmentationIdc:n.minSpatialSegmentationIdc,chromaFormatIdc:n.chromaFormatIdc,bitDepthLumaMinus8:n.bitDepthLumaMinus8,bitDepthChromaMinus8:n.bitDepthChromaMinus8,parallelismType:a.parallelismType,frameRateFps:n.frameRateFps,frameRateFixed:n.frameRateFixed},c=et.getVideoConfiguration_(t.fullData,i.fullData,r.fullData,o);return{height:n.height,width:n.width,videoConfig:c,hSpacing:n.sarWidth,vSpacing:n.sarHeight}}static parseVPS_(e){let t=new ri(e,!0);t.readUnsignedByte(),t.readUnsignedByte(),t.readBits(4),t.readBits(2),t.readBits(6);let i=t.readBits(3),r=t.readBoolean();return{numTemporalLayers:i+1,temporalIdNested:r}}static parseSPS_(e){let t=new ri(e,!0);t.readUnsignedByte(),t.readUnsignedByte();let i=0,r=0,s=0,n=0;t.readBits(4);let a=t.readBits(3);t.readBoolean();let o=t.readBits(2),c=t.readBits(1),d=t.readBits(5),u=t.readUnsignedByte(),m=t.readUnsignedByte(),f=t.readUnsignedByte(),g=t.readUnsignedByte(),_=t.readUnsignedByte(),T=t.readUnsignedByte(),b=t.readUnsignedByte(),S=t.readUnsignedByte(),E=t.readUnsignedByte(),w=t.readUnsignedByte(),A=t.readUnsignedByte(),x=[],M=[];for(let we=0;we<a;we++)x.push(t.readBoolean()),M.push(t.readBoolean());if(a>0)for(let we=a;we<8;we++)t.readBits(2);for(let we=0;we<a;we++)x[we]&&t.readBits(88),M[we]&&t.readUnsignedByte();t.readUnsignedExpGolomb();let C=t.readUnsignedExpGolomb();C==3&&t.readBits(1);let k=t.readUnsignedExpGolomb(),D=t.readUnsignedExpGolomb();t.readBoolean()&&(i+=t.readUnsignedExpGolomb(),r+=t.readUnsignedExpGolomb(),s+=t.readUnsignedExpGolomb(),n+=t.readUnsignedExpGolomb());let ee=t.readUnsignedExpGolomb(),oe=t.readUnsignedExpGolomb(),le=t.readUnsignedExpGolomb();if(t.readBoolean())for(let we=0;we<=a;we++)t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb();else t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb();if(t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readBoolean()&&t.readBoolean())for(let Bt=0;Bt<4;Bt++)for(let pi=0;pi<(Bt===3?2:6);pi++)if(!t.readBoolean())t.readUnsignedExpGolomb();else{let Ei=Math.min(64,1<<4+(Bt<<1));Bt>1&&t.readExpGolomb();for(let qr=0;qr<Ei;qr++)t.readExpGolomb()}t.readBoolean(),t.readBoolean(),t.readBoolean()&&(t.readUnsignedByte(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readBoolean());let ce=t.readUnsignedExpGolomb(),W=0;for(let we=0;we<ce;we++){let Bt=!1;if(we!==0&&(Bt=t.readBoolean()),Bt){we===ce&&t.readUnsignedExpGolomb(),t.readBoolean(),t.readUnsignedExpGolomb();let pi=0;for(let Er=0;Er<=W;Er++){let Ei=t.readBoolean(),qr=!1;Ei||(qr=t.readBoolean()),(Ei||qr)&&pi++}W=pi}else{let pi=t.readUnsignedExpGolomb(),Er=t.readUnsignedExpGolomb();W=pi+Er;for(let Ei=0;Ei<pi;Ei++)t.readUnsignedExpGolomb(),t.readBoolean();for(let Ei=0;Ei<Er;Ei++)t.readUnsignedExpGolomb(),t.readBoolean()}}if(t.readBoolean()){let we=t.readUnsignedExpGolomb();for(let Bt=0;Bt<we;Bt++){for(let pi=0;pi<le+4;pi++)t.readBits(1);t.readBits(1)}}let ge=!1,Y=1,X=1,N=!0,$=1,Ie=0,tt=0;if(t.readBoolean(),t.readBoolean(),t.readBoolean()){if(t.readBoolean()){let Ar=t.readUnsignedByte(),po=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2],fo=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1];Ar>0&&Ar<=16?(Y=po[Ar-1],X=fo[Ar-1]):Ar===255&&(Y=t.readBits(16),X=t.readBits(16))}if(t.readBoolean()&&t.readBoolean(),t.readBoolean()&&(t.readBits(3),t.readBoolean(),t.readBoolean()&&(t.readUnsignedByte(),t.readUnsignedByte(),t.readUnsignedByte())),t.readBoolean()&&(t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb()),t.readBoolean(),t.readBoolean(),t.readBoolean(),ge=t.readBoolean(),ge&&(t.skipExpGolomb(),t.skipExpGolomb(),t.skipExpGolomb(),t.skipExpGolomb()),t.readBoolean()&&($=t.readBits(32),Ie=t.readBits(32),t.readBoolean()&&t.readUnsignedExpGolomb(),t.readBoolean())){let za=!1,Xa=!1,_s=!1;za=t.readBoolean(),Xa=t.readBoolean(),(za||Xa)&&(_s=t.readBoolean(),_s&&(t.readUnsignedByte(),t.readBits(5),t.readBoolean(),t.readBits(5)),t.readBits(4),t.readBits(4),_s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5));for(let go=0;go<=a;go++){N=t.readBoolean();let _o=!0,ja=1;N||(_o=t.readBoolean());let yo=!1;if(_o?t.readUnsignedExpGolomb():yo=t.readBoolean(),yo||(ja=t.readUnsignedExpGolomb()+1),za){for(let ys=0;ys<ja;ys++)t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),_s&&(t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb());t.readBoolean()}if(Xa){for(let ys=0;ys<ja;ys++)t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),_s&&(t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb());t.readBoolean()}}}t.readBoolean()&&(t.readBoolean(),t.readBoolean(),t.readBoolean(),tt=t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb())}let St=C===1||C===2?2:1,yt=C===1?2:1,Ct=k-(i+r)*St,bi=D-(s+n)*yt;return{generalLevelIdc:A,generalProfileSpace:o,generalTierFlag:c,generalProfileIdc:d,generalProfileCompatibilityFlags1:u,generalProfileCompatibilityFlags2:m,generalProfileCompatibilityFlags3:f,generalProfileCompatibilityFlags4:g,generalConstraintIndicatorFlags1:_,generalConstraintIndicatorFlags2:T,generalConstraintIndicatorFlags3:b,generalConstraintIndicatorFlags4:S,generalConstraintIndicatorFlags5:E,generalConstraintIndicatorFlags6:w,minSpatialSegmentationIdc:tt,chromaFormatIdc:C,bitDepthLumaMinus8:ee,bitDepthChromaMinus8:oe,width:Ct,height:bi,sarWidth:Y,sarHeight:X,frameRateFps:Ie/$,frameRateFixed:N}}static parsePPS_(e){let t=new ri(e,!0);t.readUnsignedByte(),t.readUnsignedByte(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readBoolean(),t.readBoolean(),t.readBits(3),t.readBoolean(),t.readBoolean(),t.readUnsignedExpGolomb(),t.readUnsignedExpGolomb(),t.readExpGolomb(),t.readBoolean(),t.readBoolean(),t.readBoolean()&&t.readUnsignedExpGolomb(),t.readExpGolomb(),t.readExpGolomb(),t.readBoolean(),t.readBoolean(),t.readBoolean(),t.readBoolean();let r=t.readBoolean(),s=t.readBoolean(),n=1;return s&&r?n=0:s?n=3:r&&(n=2),{parallelismType:n}}static getVideoConfiguration_(e,t,i,r){let s=23+(5+e.byteLength)+(5+t.byteLength)+(5+i.byteLength),n=new Uint8Array(s);n[0]=1,n[1]=(r.generalProfileSpace&3)<<6|(r.generalTierFlag?1:0)<<5|r.generalProfileIdc&31,n[2]=r.generalProfileCompatibilityFlags1,n[3]=r.generalProfileCompatibilityFlags2,n[4]=r.generalProfileCompatibilityFlags3,n[5]=r.generalProfileCompatibilityFlags4,n[6]=r.generalConstraintIndicatorFlags1,n[7]=r.generalConstraintIndicatorFlags2,n[8]=r.generalConstraintIndicatorFlags3,n[9]=r.generalConstraintIndicatorFlags4,n[10]=r.generalConstraintIndicatorFlags5,n[11]=r.generalConstraintIndicatorFlags6,n[12]=r.generalLevelIdc,n[13]=240|(r.minSpatialSegmentationIdc&3840)>>8,n[14]=r.minSpatialSegmentationIdc&255,n[15]=252|r.parallelismType&3,n[16]=252|r.chromaFormatIdc&3,n[17]=248|r.bitDepthLumaMinus8&7,n[18]=248|r.bitDepthChromaMinus8&7,n[19]=0,n[20]=parseInt(r.frameRateFps,10),n[21]=((r.frameRateFixed?1:0)&3)<<6|(r.numTemporalLayers&7)<<3|(r.temporalIdNested?1:0)<<2|3,n[22]=3;let a=[e,t,i],o=23,c=a.length-1;for(let d=0;d<a.length;d+=1)n.set(new Uint8Array([32+d|(d===c?128:0),0,1,a[d].byteLength>>8,a[d].byteLength&255]),o),o+=5,n.set(a[d],o),o+=a[d].byteLength;return n}static parseFrame(e,t){let i=!1,r=[],s=0,n=!1;for(let c of e){let d=!1;switch(c.type){case et.NALU_TYPE_TRAIL_N_:case et.NALU_TYPE_TRAIL_R_:{n=!0,d=!0;break}case et.NALU_TYPE_IDR_W_RADL_:case et.NALU_TYPE_IDR_N_LP_:case et.NALU_TYPE_CRA_NUT_:n=!0,d=!0,i=!0;break;case et.NALU_TYPE_VPS_:case et.NALU_TYPE_SPS_:case et.NALU_TYPE_PPS_:d=!0;break;case et.NALU_TYPE_AUD_:d=!0,n=!0;break;case et.NALU_TYPE_SEI_PREFIX_:case et.NALU_TYPE_SEI_SUFFIX_:d=!0;break;default:d=!1;break}d&&(r.push(c.fullData),s+=c.fullData.byteLength)}if(!n||!r.length)return!1;s+=4*r.length;let a=new Uint8Array(s),o=0;for(let c of r){let d=c.byteLength;a[o]=d>>24&255,a[o+1]=d>>16&255,a[o+2]=d>>8&255,a[o+3]=d&255,a.set(c,o+4),o+=d+4}return t.data=a,t.isKeyframe=i,!0}};l(et,"NALU_TYPE_TRAIL_N_",1),l(et,"NALU_TYPE_TRAIL_R_",0),l(et,"NALU_TYPE_IDR_W_RADL_",19),l(et,"NALU_TYPE_IDR_N_LP_",20),l(et,"NALU_TYPE_CRA_NUT_",21),l(et,"NALU_TYPE_VPS_",32),l(et,"NALU_TYPE_SPS_",33),l(et,"NALU_TYPE_PPS_",34),l(et,"NALU_TYPE_AUD_",35),l(et,"NALU_TYPE_SEI_PREFIX_",39),l(et,"NALU_TYPE_SEI_SUFFIX_",40);var sr=et;/*! @license
|
|
1138
1138
|
* Shaka Player
|
|
1139
1139
|
* Copyright 2016 Google LLC
|
|
1140
1140
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1142,7 +1142,7 @@ ${o}
|
|
|
1142
1142
|
* Shaka Player
|
|
1143
1143
|
* Copyright 2016 Google LLC
|
|
1144
1144
|
* SPDX-License-Identifier: Apache-2.0
|
|
1145
|
-
*/var nr=class nr extends li{constructor(t){super(t);l(this,"avcInfo_");l(this,"hvcInfo_");this.avcInfo_=null,this.hvcInfo_=null}destroy(){super.destroy(),this.avcInfo_=null,this.hvcInfo_=null}isSupported(t,i){if(!this.isLocContainer_(t))return!1;let r=R.ContentType,s=t;i&&(s=this.convertCodecs(i,t));let n=O.getCodecs(s),a=O.splitCodecs(n),o=R.guessCodecsSafe(r.AUDIO,a),c=R.guessCodecsSafe(r.VIDEO,a);if(o){let m=O.getNormalizedCodec(o);if(!nr.SUPPORTED_AUDIO_CODECS_.includes(m))return!1}if(c){let m=O.getNormalizedCodec(c);if(!nr.SUPPORTED_VIDEO_CODECS_.includes(m))return!1}if(i)return qe.isTypeSupported(this.convertCodecs(i,t));let d=this.convertCodecs(r.AUDIO,t),u=this.convertCodecs(r.VIDEO,t);return qe.isTypeSupported(d)||qe.isTypeSupported(u)}isLocContainer_(t){return t.toLowerCase().split(";")[0]=="moq/loc"}convertCodecs(t,i){if(this.isLocContainer_(i)){let r=R.ContentType,s=O.getCodecs(i).split(",").map(n=>O.getCorrectAudioCodecs(n,"audio/mp4")).map(O.getCorrectVideoCodecs).join(",");return t==r.AUDIO?`audio/mp4; codecs="${s}"`:`video/mp4; codecs="${s}"`}return i}transmux(t,i,r,s,n){let a=R.ContentType,o=
|
|
1145
|
+
*/var nr=class nr extends li{constructor(t){super(t);l(this,"avcInfo_");l(this,"hvcInfo_");this.avcInfo_=null,this.hvcInfo_=null}destroy(){super.destroy(),this.avcInfo_=null,this.hvcInfo_=null}isSupported(t,i){if(!this.isLocContainer_(t))return!1;let r=R.ContentType,s=t;i&&(s=this.convertCodecs(i,t));let n=O.getCodecs(s),a=O.splitCodecs(n),o=R.guessCodecsSafe(r.AUDIO,a),c=R.guessCodecsSafe(r.VIDEO,a);if(o){let m=O.getNormalizedCodec(o);if(!nr.SUPPORTED_AUDIO_CODECS_.includes(m))return!1}if(c){let m=O.getNormalizedCodec(c);if(!nr.SUPPORTED_VIDEO_CODECS_.includes(m))return!1}if(i)return qe.isTypeSupported(this.convertCodecs(i,t));let d=this.convertCodecs(r.AUDIO,t),u=this.convertCodecs(r.VIDEO,t);return qe.isTypeSupported(d)||qe.isTypeSupported(u)}isLocContainer_(t){return t.toLowerCase().split(";")[0]=="moq/loc"}convertCodecs(t,i){if(this.isLocContainer_(i)){let r=R.ContentType,s=O.getCodecs(i).split(",").map(n=>O.getCorrectAudioCodecs(n,"audio/mp4")).map(O.getCorrectVideoCodecs).join(",");return t==r.AUDIO?`audio/mp4; codecs="${s}"`:`video/mp4; codecs="${s}"`}return i}transmux(t,i,r,s,n){let a=R.ContentType,o=U.toUint8(t),c=[];try{let u=O.getNormalizedCodec(i.codecs),m;if(n==a.VIDEO){switch(u){case"avc":m=this.getAvcStreamInfo_(o,i,r,s);break;case"hevc":m=this.getHvcStreamInfo_(o,i,s,r);break}m&&c.push(m)}if(n==a.AUDIO){switch(u){case"aac":m=this.getAacStreamInfo_(o,i,s,r);break;case"opus":m=this.getOpusStreamInfo_(o,i,s,r);break}m&&c.push(m)}}catch(u){return Promise.reject(u)}if(!c.length)return Promise.resolve({data:new Uint8Array([]),init:null});let d=new xe(c);return Promise.resolve(this.packageSegment(d,i,r))}extractNalus_(t,i){let r=[],s=i==="hvc",n=s?2:1,a=0;for(;a+4<=t.byteLength;){let o=(t[a]<<24|t[a+1]<<16|t[a+2]<<8|t[a+3])>>>0;a+=4;let c;if(o===1){c=t.byteLength;for(let f=a;f+2<t.byteLength;f++)if(t[f]===0&&t[f+1]===0){if(t[f+2]===1){c=f;break}if(f+3<t.byteLength&&t[f+2]===0&&t[f+3]===1){c=f;break}}}else if(c=a+o,c>t.byteLength)break;if(c<=a)break;let d=t.subarray(a,c),u=s?(d[0]&126)>>1:d[0]&31,m=d.length>n?d.subarray(n):new Uint8Array([]);r.push({type:u,data:m,fullData:d}),a=c}return r}getAvcStreamInfo_(t,i,r,s){let n=nr.VIDEO_TIMESCALE_,a=this.extractNalus_(t,"avc"),o=rr.parseInfo(a);if(o&&(this.avcInfo_=o,i.height=o.height,i.width=o.width),!this.avcInfo_)return null;let c=rr.isKeyframe(a),d=Math.floor(r.startTime*n),u=Math.floor((r.endTime-r.startTime)*n),m=[{data:t,size:t.byteLength,duration:u,cts:0,flags:c?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS}];return{id:i.id,type:R.ContentType.VIDEO,codecs:"avc1",timescale:n,duration:s,mediaConfig:this.avcInfo_.videoConfig,hSpacing:this.avcInfo_.hSpacing,vSpacing:this.avcInfo_.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:d,samples:m},stream:i}}getHvcStreamInfo_(t,i,r,s){let n=nr.VIDEO_TIMESCALE_,a=this.extractNalus_(t,"hvc"),o=sr.parseInfo(a);if(o&&(this.hvcInfo_=o,i.height=o.height,i.width=o.width),!this.hvcInfo_)return null;let c=Math.floor(s.startTime*n),d=Math.floor((s.endTime-s.startTime)*n),u={data:new Uint8Array(0),isKeyframe:!1};if(!sr.parseFrame(a,u))return null;let f=[{data:u.data,size:u.data.byteLength,duration:d,cts:0,flags:u.isKeyframe?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS}];return{id:i.id,type:R.ContentType.VIDEO,codecs:"hvc1",timescale:n,duration:r,mediaConfig:this.hvcInfo_.videoConfig,hSpacing:this.hvcInfo_.hSpacing,vSpacing:this.hvcInfo_.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:c,samples:f},stream:i}}getAacStreamInfo_(t,i,r,s){v.assert(i.audioSamplingRate,"Must have audioSamplingRate");let n=i.audioSamplingRate,a=Math.floor(s.startTime*n),o=[{data:t,size:t.length,duration:1024,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}];return{id:i.id,type:R.ContentType.AUDIO,codecs:i.codecs,timescale:n,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:a,samples:o},stream:i}}getOpusStreamInfo_(t,i,r,s){v.assert(i.audioSamplingRate,"Must have audioSamplingRate");let n=i.audioSamplingRate,a=Math.floor(s.startTime*n),o=[{data:t,size:t.length,duration:br.getPacketSampleCount(t),cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}],c=new Uint8Array([0,i.channelsCount,0,0,i.audioSamplingRate>>>24&255,i.audioSamplingRate>>>17&255,i.audioSamplingRate>>>8&255,i.audioSamplingRate>>>0&255,0,0,0]);return{id:i.id,type:R.ContentType.AUDIO,codecs:i.codecs,timescale:n,duration:r,mediaConfig:c,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:a,samples:o},stream:i}}};l(nr,"VIDEO_TIMESCALE_",9e4),l(nr,"SUPPORTED_AUDIO_CODECS_",["aac","opus"]),l(nr,"SUPPORTED_VIDEO_CODECS_",["avc","hevc"]);var Ka=nr;Ne.registerTransmuxer("moq/loc",()=>new Ka("moq/loc"),Ne.PluginPriority.FALLBACK);/*! @license
|
|
1146
1146
|
* Shaka Player
|
|
1147
1147
|
* Copyright 2016 Google LLC
|
|
1148
1148
|
* SPDX-License-Identifier: Apache-2.0
|
|
@@ -1150,12 +1150,12 @@ ${o}
|
|
|
1150
1150
|
* Shaka Player
|
|
1151
1151
|
* Copyright 2016 Google LLC
|
|
1152
1152
|
* SPDX-License-Identifier: Apache-2.0
|
|
1153
|
-
*/var qa=class extends li{isSupported(e,t){if(!this.isMpegContainer_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isMpegContainer_(e){return e.toLowerCase().split(";")[0]=="audio/mpeg"}convertCodecs(e,t){return this.isMpegContainer_(t)?'audio/mp4; codecs="mp3"':t}transmux(e,t,i,r){let s=
|
|
1153
|
+
*/var qa=class extends li{isSupported(e,t){if(!this.isMpegContainer_(e))return!1;let i=R.ContentType;return qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isMpegContainer_(e){return e.toLowerCase().split(";")[0]=="audio/mpeg"}convertCodecs(e,t){return this.isMpegContainer_(t)?'audio/mp4; codecs="mp3"':t}transmux(e,t,i,r){let s=U.toUint8(e),a=At.getID3Data(s).length;for(;a<s.length&&!mi.probe(s,a);a++);let o=9e4,c,d=[];for(;a<s.length;){let T=mi.parseHeader(s,a);if(!T){a++;continue}c||(c=T),a+T.frameLength<=s.length&&d.push({data:s.subarray(a,a+T.frameLength),size:T.frameLength,duration:mi.MPEG_AUDIO_SAMPLE_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),a+=T.frameLength}if(!c)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));let u=c.sampleRate,m=c.samplesPerFrame*o/c.sampleRate,f=this.frameIndex*m,g={id:t.id,type:R.ContentType.AUDIO,codecs:"mp3",timescale:u,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:f,samples:d},stream:t},_=new xe([g]);return Promise.resolve(this.packageSegment(_,t,i))}};Ne.registerTransmuxer("audio/mpeg",()=>new qa("audio/mpeg"),Ne.PluginPriority.FALLBACK);/*! @license
|
|
1154
1154
|
* Shaka Player
|
|
1155
1155
|
* Copyright 2016 Google LLC
|
|
1156
1156
|
* SPDX-License-Identifier: Apache-2.0
|
|
1157
|
-
*/var Wa=class{constructor(e){l(this,"originalMimeType_");l(this,"tsParser_");this.originalMimeType_=e,this.tsParser_=null}destroy(){}isSupported(e,t){if(!this.isTsContainer_(e))return!1;let i=R.ContentType,r=O.getCodecs(e),s=O.splitCodecs(r),n=R.guessCodecsSafe(i.AUDIO,s),a=R.guessCodecsSafe(i.VIDEO,s);return!n||a||O.getNormalizedCodec(n)!="mp3"?!1:qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isTsContainer_(e){return e.toLowerCase().split(";")[0]=="video/mp2t"}convertCodecs(e,t){return this.isTsContainer_(t)?"audio/mpeg":t}getOriginalMimeType(){return this.originalMimeType_}transmux(e,t,i,r,s){let n=R.ContentType;this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt,this.tsParser_.setDiscontinuitySequence(i.discontinuitySequence);let a=
|
|
1157
|
+
*/var Wa=class{constructor(e){l(this,"originalMimeType_");l(this,"tsParser_");this.originalMimeType_=e,this.tsParser_=null}destroy(){}isSupported(e,t){if(!this.isTsContainer_(e))return!1;let i=R.ContentType,r=O.getCodecs(e),s=O.splitCodecs(r),n=R.guessCodecsSafe(i.AUDIO,s),a=R.guessCodecsSafe(i.VIDEO,s);return!n||a||O.getNormalizedCodec(n)!="mp3"?!1:qe.isTypeSupported(this.convertCodecs(i.AUDIO,e))}isTsContainer_(e){return e.toLowerCase().split(";")[0]=="video/mp2t"}convertCodecs(e,t){return this.isTsContainer_(t)?"audio/mpeg":t}getOriginalMimeType(){return this.originalMimeType_}transmux(e,t,i,r,s){let n=R.ContentType;this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt,this.tsParser_.setDiscontinuitySequence(i.discontinuitySequence);let a=U.toUint8(e),o=this.tsParser_.parse(a);if(o.getCodecs().audio!="mp3"||s!=n.AUDIO)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,i?i.getUris()[0]:null));let d=[];for(let g of o.getAudioData())g.data&&d.push(g.data);let u=ne.concatRange(d),m=[],f=0;for(;f<u.length;){let g=mi.parseHeader(u,f);if(!g){f++;continue}f+g.frameLength<=u.length&&m.push(u.subarray(f,f+g.frameLength)),f+=g.frameLength}return Promise.resolve(ne.concatRange(m))}};Ne.registerTransmuxer("video/mp2t",()=>new Wa("video/mp2t"),Ne.PluginPriority.PREFERRED_SECONDARY);/*! @license
|
|
1158
1158
|
* Shaka Player
|
|
1159
1159
|
* Copyright 2016 Google LLC
|
|
1160
1160
|
* SPDX-License-Identifier: Apache-2.0
|
|
1161
|
-
*/var gs=class gs extends li{constructor(t){super(t);l(this,"tsParser_");l(this,"aacTransmuxer_");this.tsParser_=null,this.aacTransmuxer_=null}destroy(){super.destroy(),this.aacTransmuxer_&&this.aacTransmuxer_.destroy()}isSupported(t,i){if(!this.isTsContainer_(t))return!1;let r=R.ContentType,s=t;i&&(s=this.convertCodecs(i,t));let n=O.getCodecs(s),a=O.splitCodecs(n),o=R.guessCodecsSafe(r.AUDIO,a),c=R.guessCodecsSafe(r.VIDEO,a);if(o){let m=O.getNormalizedCodec(o);if(!gs.SUPPORTED_AUDIO_CODECS_.includes(m))return!1}if(c){let m=O.getNormalizedCodec(c);if(!gs.SUPPORTED_VIDEO_CODECS_.includes(m))return!1}if(i)return qe.isTypeSupported(this.convertCodecs(i,t));let d=this.convertCodecs(r.AUDIO,t),u=this.convertCodecs(r.VIDEO,t);return qe.isTypeSupported(d)||qe.isTypeSupported(u)}isTsContainer_(t){let i=t.toLowerCase().split(";")[0];return i=="video/mp2t"||i=="audio/mp2t"}convertCodecs(t,i){if(this.isTsContainer_(i)){let r=R.ContentType,s=O.getCodecs(i).replace("mp4a.40.34","mp3").split(",").map(n=>O.getCorrectAudioCodecs(n,"audio/mp4")).map(O.getCorrectVideoCodecs).join(",");return t==r.AUDIO?`audio/mp4; codecs="${s}"`:`video/mp4; codecs="${s}"`}return i}transmux(t,i,r,s,n){let a=R.ContentType,o=D.toUint8(t);if(n==a.AUDIO&&!mt.probe(o)){let f=At.getID3Data(o),g=f.length;for(;g<o.length;g++)if(mi.probe(o,g))return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null));for(g=f.length;g<o.length;g++)if(Nt.probe(o,g))return this.aacTransmuxer_||(this.aacTransmuxer_=new ps("audio/aac")),this.aacTransmuxer_.transmux(t,i,r,s,n);return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null))}this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt,this.tsParser_.setDiscontinuitySequence(r.discontinuitySequence);let c=this.tsParser_.parse(o),d=[],u=c.getCodecs();try{let f=null;if(n==a.VIDEO){switch(u.video){case"avc":f=this.getAvcStreamInfo_(c,i,s,r);break;case"hvc":f=this.getHvcStreamInfo_(c,i,s,r);break}f&&(d.push(f),f=null)}if(n==a.AUDIO){switch(u.audio){case"aac":f=this.getAacStreamInfo_(c,i,s,r);break;case"ac3":f=this.getAc3StreamInfo_(c,i,s,r);break;case"ec3":f=this.getEc3StreamInfo_(c,i,s,r);break;case"mp3":f=this.getMp3StreamInfo_(c,i,s,r);break;case"opus":f=this.getOpusStreamInfo_(c,i,s,r);break}f&&(d.push(f),f=null)}}catch(f){return f&&f.code==h.Code.TRANSMUXING_NO_VIDEO_DATA?Promise.resolve(new Uint8Array([])):Promise.reject(f)}if(!d.length)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null));let m=new xe(d);return Promise.resolve(this.packageSegment(m,i,r))}getAacStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o,c=null,d=null,u=null;for(let g of t.getAudioData()){let _=g.data;if(!_)continue;let T=0;if(d==-1&&u)_=ne.concat(u,g.data),d=null;else if(d!=null&&u){T=Math.max(0,d);let b=ne.concat(u,_.subarray(0,T));a.push({data:b,size:b.byteLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),u=null,d=null}if(o=Nt.parseInfo(_,T),!o)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);for(i.audioSamplingRate=o.sampleRate,i.channelsCount=o.channelCount,c==null&&g.pts!==null&&(c=g.pts);T<_.length;){let b=Nt.parseHeader(_,T);if(!b){u=_.subarray(T,_.length),d=-1;break}let S=b.headerLength+b.frameLength;if(d=Math.max(0,T+S-_.length),d!=0)u=_.subarray(T+b.headerLength,T+S);else if(T+S<=_.length){let E=_.subarray(T+b.headerLength,T+S);a.push({data:E,size:b.frameLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS})}T+=S}}if(!o||c==null){c=s.startTime*n;let g=O.splitCodecs(i.codecs),_=R.guessCodecsSafe(R.ContentType.AUDIO,g);if(!_||!i.channelsCount||!i.audioSamplingRate)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);o={sampleRate:i.audioSamplingRate,channelCount:i.channelsCount,codec:_};let T=Nt.getSilentFrame(_,i.channelsCount);if(!T)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let b=(s.endTime-s.startTime)*n,S=c+b,E=c;for(;E<S;)a.push({data:T,size:T.byteLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),E+=Nt.AAC_SAMPLES_PER_FRAME/o.sampleRate*n}let m=o.sampleRate,f=c/n*m;return{id:i.id,type:R.ContentType.AUDIO,codecs:o.codec,timescale:m,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:f,samples:a},stream:i}}getAc3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=0,c=new Uint8Array([]),d=null,u={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(let f of t.getAudioData()){let g=f.data;d==null&&f.pts!==null&&(d=f.pts);let _=0;for(;_<g.length;){if(!Ni.parseFrame(g,_,u)){_++;continue}i.audioSamplingRate=u.sampleRate,i.channelsCount=u.channelCount,o=u.sampleRate,c=u.audioConfig;let b=g.subarray(_,_+u.frameLength);a.push({data:b,size:u.frameLength,duration:Ni.AC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_+=u.frameLength}}if(o==0||c.byteLength==0||d==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let m=d/n*o;return{id:i.id,type:R.ContentType.AUDIO,codecs:"ac-3",timescale:o,duration:r,mediaConfig:c,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getEc3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=0,c=new Uint8Array([]),d=null,u={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(let f of t.getAudioData()){let g=f.data;d==null&&f.pts!==null&&(d=f.pts);let _=0;for(;_<g.length;){if(!$i.parseFrame(g,_,u)){_++;continue}i.audioSamplingRate=u.sampleRate,i.channelsCount=u.channelCount,o=u.sampleRate,c=u.audioConfig;let b=g.subarray(_,_+u.frameLength);a.push({data:b,size:u.frameLength,duration:$i.EC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_+=u.frameLength}}if(o==0||c.byteLength==0||d==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let m=d/n*o;return{id:i.id,type:R.ContentType.AUDIO,codecs:"ec-3",timescale:o,duration:r,mediaConfig:c,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getMp3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o,c=null,d=[];for(let _ of t.getAudioData())_.data&&(c==null&&_.pts!==null&&(c=_.pts),d.push(_.data));let u=ne.concatRange(d),m=0;for(;m<u.length;){let _=mi.parseHeader(u,m);if(!_){m++;continue}o||(o=_),m+_.frameLength<=u.length&&a.push({data:u.subarray(m,m+_.frameLength),size:_.frameLength,duration:mi.MPEG_AUDIO_SAMPLE_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),m+=_.frameLength}if(!o||c==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let f=o.sampleRate,g=c/n*f;return{id:i.id,type:R.ContentType.AUDIO,codecs:"mp3",timescale:f,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:g,samples:a},stream:i}}getOpusStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=t.getOpusMetadata();if(!c)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let d=br.getAudioConfig(c),u=c.sampleRate;for(let f of t.getAudioData()){let g=f.data;o==null&&f.pts!==null&&(o=f.pts);let _=0;for(;_<g.length;){let T=(g[_+1]&16)!==0,b=(g[_+1]&8)!==0,S=_+2,E=0;for(;g[S]===255;)E+=255,S+=1;E+=g[S],S+=1,S+=T?2:0,S+=b?2:0;let w=g.slice(S,S+E);a.push({data:w,size:w.byteLength,duration:br.getPacketSampleCount(w),cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_=S+E}}if(d.byteLength==0||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);i.audioSamplingRate=c.sampleRate,i.channelsCount=c.channelCount;let m=o/n*u;return{id:i.id,type:R.ContentType.AUDIO,codecs:"opus",timescale:u,duration:r,mediaConfig:d,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getAvcStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=t.getVideoData(),d=rr.getVideoSamples(c);if(!d.length)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_NO_VIDEO_DATA,s?s.getUris()[0]:null);for(let f=0;f<d.length;f++){let g=d[f];o==null&&(o=g.dts);let _;f+1<d.length?_=(d[f+1].dts||0)-(g.dts||0):d.length>1?_=(g.dts||0)-(d[f-1].dts||0):_=(s.endTime-s.startTime)*n,a.push({data:g.data,size:g.data.byteLength,duration:_,cts:Math.round((g.pts||0)-(g.dts||0)),flags:g.isKeyframe?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS})}let u=[];for(let f of c)u.push(...f.nalus);let m=rr.parseInfo(u);if(!m||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);return i.height=i.height||m.height,i.width=i.width||m.width,{id:i.id,type:R.ContentType.VIDEO,codecs:"avc1",timescale:n,duration:r,mediaConfig:m.videoConfig,hSpacing:m.hSpacing,vSpacing:m.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:o,samples:a},stream:i}}getHvcStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=[],d=t.getVideoData(),u={data:new Uint8Array(0),isKeyframe:!1};if(!d.length)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_NO_VIDEO_DATA,s?s.getUris()[0]:null);for(let f=0;f<d.length;f++){let g=d[f],_=g.nalus;if(c.push(..._),!sr.parseFrame(_,u))continue;o==null&&g.dts!=null&&(o=g.dts);let b;f+1<d.length?b=(d[f+1].dts||0)-(g.dts||0):d.length>1?b=(g.dts||0)-(d[f-1].dts||0):b=(s.endTime-s.startTime)*n,a.push({data:u.data,size:u.data.byteLength,duration:b,cts:Math.round((g.pts||0)-(g.dts||0)),flags:u.isKeyframe?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS})}let m=sr.parseInfo(c);if(!m||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);return i.height=i.height||m.height,i.width=i.width||m.width,{id:i.id,type:R.ContentType.VIDEO,codecs:"hvc1",timescale:n,duration:r,mediaConfig:m.videoConfig,hSpacing:m.hSpacing,vSpacing:m.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:o,samples:a},stream:i}}};l(gs,"SUPPORTED_AUDIO_CODECS_",["aac","ac-3","ec-3","mp3","opus"]),l(gs,"SUPPORTED_VIDEO_CODECS_",["avc","hevc"]);var Js=gs;Ne.registerTransmuxer("video/mp2t",()=>new Js("video/mp2t"),Ne.PluginPriority.PREFERRED);Ne.registerTransmuxer("audio/mp2t",()=>new Js("audio/mp2t"),Ne.PluginPriority.PREFERRED);var export_AllDevices=void 0;export{Nt as ADTS,ps as AacTransmuxer,Ni as Ac3,Va as Ac3Transmuxer,kn as AdManager,export_AllDevices as AllDevices,ya as Aria,ro as CastProxy,no as CastReceiver,Ba as CeaDecoder,B as Cue,Nn as DashJsonParser,Br as DashParser,_r as DataUriPlugin,Cr as Deprecate,Ke as Dom,$i as Ec3,Ga as Ec3Transmuxer,Ta as EmeEncryptionScheme,ur as FairPlay,va as Fullscreen,rr as H264,sr as H265,Dt as HlsParser,Ui as HttpFetchPlugin,Hr as HttpXHRPlugin,At as Id3Utils,$n as Id3V1Utils,Ks as IlstUtils,Tt as InitSegmentReference,Qi as Iterables,Ka as LocTransmuxer,ba as MCapEncryptionScheme,aa as MSFParser,me as ManifestParser,Aa as MediaCapabilities,Ea as MediaSource,Pt as Metadata,qa as Mp3Transmuxer,Ot as Mp4CeaParser,hi as Mp4TtmlParser,Da as Mp4VttParser,mi as MpegAudio,Wa as MpegTsTransmuxer,la as OfflineManifestParser,ca as OfflineScheme,br as Opus,js as Orientation,Wi as PatchedMediaKeysApple,ai as PatchedMediaKeysWebkit,Ia as PiPWebkit,dt as Player,Sa as PolyfillMap,wa as PolyfillSymbol,Ps as PreferenceBasedCriteria,xi as PresentationTimeline,oa as QueueManager,Ca as RandomUUID,Ze as SegmentIndex,Te as SegmentReference,Rs as SimpleAbrManager,Qr as SpeechToText,Ua as SrtTextParser,zs as Storage,_a as StorageMechanism,Oe as TextEngine,Ne as TransmuxerEngine,Fa as TsCeaParser,Js as TsTransmuxer,zi as TtmlTextParser,xa as TypedArray,Ys as URLSearchParams,h as UtilError,Ma as VTTCue,Ra as VideoFrameCallback,Pa as VideoPlayPromise,ka as VideoPlaybackQuality,Vr as VorbisUtils,Xi as VttTextParser,Ls as WebVttGenerator,p as log,Pe as polyfill};
|
|
1161
|
+
*/var gs=class gs extends li{constructor(t){super(t);l(this,"tsParser_");l(this,"aacTransmuxer_");this.tsParser_=null,this.aacTransmuxer_=null}destroy(){super.destroy(),this.aacTransmuxer_&&this.aacTransmuxer_.destroy()}isSupported(t,i){if(!this.isTsContainer_(t))return!1;let r=R.ContentType,s=t;i&&(s=this.convertCodecs(i,t));let n=O.getCodecs(s),a=O.splitCodecs(n),o=R.guessCodecsSafe(r.AUDIO,a),c=R.guessCodecsSafe(r.VIDEO,a);if(o){let m=O.getNormalizedCodec(o);if(!gs.SUPPORTED_AUDIO_CODECS_.includes(m))return!1}if(c){let m=O.getNormalizedCodec(c);if(!gs.SUPPORTED_VIDEO_CODECS_.includes(m))return!1}if(i)return qe.isTypeSupported(this.convertCodecs(i,t));let d=this.convertCodecs(r.AUDIO,t),u=this.convertCodecs(r.VIDEO,t);return qe.isTypeSupported(d)||qe.isTypeSupported(u)}isTsContainer_(t){let i=t.toLowerCase().split(";")[0];return i=="video/mp2t"||i=="audio/mp2t"}convertCodecs(t,i){if(this.isTsContainer_(i)){let r=R.ContentType,s=O.getCodecs(i).replace("mp4a.40.34","mp3").split(",").map(n=>O.getCorrectAudioCodecs(n,"audio/mp4")).map(O.getCorrectVideoCodecs).join(",");return t==r.AUDIO?`audio/mp4; codecs="${s}"`:`video/mp4; codecs="${s}"`}return i}transmux(t,i,r,s,n){let a=R.ContentType,o=U.toUint8(t);if(n==a.AUDIO&&!mt.probe(o)){let f=At.getID3Data(o),g=f.length;for(;g<o.length;g++)if(mi.probe(o,g))return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null));for(g=f.length;g<o.length;g++)if(Nt.probe(o,g))return this.aacTransmuxer_||(this.aacTransmuxer_=new ps("audio/aac")),this.aacTransmuxer_.transmux(t,i,r,s,n);return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null))}this.tsParser_?this.tsParser_.clearData():this.tsParser_=new mt,this.tsParser_.setDiscontinuitySequence(r.discontinuitySequence);let c=this.tsParser_.parse(o),d=[],u=c.getCodecs();try{let f=null;if(n==a.VIDEO){switch(u.video){case"avc":f=this.getAvcStreamInfo_(c,i,s,r);break;case"hvc":f=this.getHvcStreamInfo_(c,i,s,r);break}f&&(d.push(f),f=null)}if(n==a.AUDIO){switch(u.audio){case"aac":f=this.getAacStreamInfo_(c,i,s,r);break;case"ac3":f=this.getAc3StreamInfo_(c,i,s,r);break;case"ec3":f=this.getEc3StreamInfo_(c,i,s,r);break;case"mp3":f=this.getMp3StreamInfo_(c,i,s,r);break;case"opus":f=this.getOpusStreamInfo_(c,i,s,r);break}f&&(d.push(f),f=null)}}catch(f){return f&&f.code==h.Code.TRANSMUXING_NO_VIDEO_DATA?Promise.resolve(new Uint8Array([])):Promise.reject(f)}if(!d.length)return Promise.reject(new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,r?r.getUris()[0]:null));let m=new xe(d);return Promise.resolve(this.packageSegment(m,i,r))}getAacStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o,c=null,d=null,u=null;for(let g of t.getAudioData()){let _=g.data;if(!_)continue;let T=0;if(d==-1&&u)_=ne.concat(u,g.data),d=null;else if(d!=null&&u){T=Math.max(0,d);let b=ne.concat(u,_.subarray(0,T));a.push({data:b,size:b.byteLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),u=null,d=null}if(o=Nt.parseInfo(_,T),!o)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);for(i.audioSamplingRate=o.sampleRate,i.channelsCount=o.channelCount,c==null&&g.pts!==null&&(c=g.pts);T<_.length;){let b=Nt.parseHeader(_,T);if(!b){u=_.subarray(T,_.length),d=-1;break}let S=b.headerLength+b.frameLength;if(d=Math.max(0,T+S-_.length),d!=0)u=_.subarray(T+b.headerLength,T+S);else if(T+S<=_.length){let E=_.subarray(T+b.headerLength,T+S);a.push({data:E,size:b.frameLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS})}T+=S}}if(!o||c==null){c=s.startTime*n;let g=O.splitCodecs(i.codecs),_=R.guessCodecsSafe(R.ContentType.AUDIO,g);if(!_||!i.channelsCount||!i.audioSamplingRate)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);o={sampleRate:i.audioSamplingRate,channelCount:i.channelsCount,codec:_};let T=Nt.getSilentFrame(_,i.channelsCount);if(!T)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let b=(s.endTime-s.startTime)*n,S=c+b,E=c;for(;E<S;)a.push({data:T,size:T.byteLength,duration:Nt.AAC_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),E+=Nt.AAC_SAMPLES_PER_FRAME/o.sampleRate*n}let m=o.sampleRate,f=c/n*m;return{id:i.id,type:R.ContentType.AUDIO,codecs:o.codec,timescale:m,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:f,samples:a},stream:i}}getAc3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=0,c=new Uint8Array([]),d=null,u={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(let f of t.getAudioData()){let g=f.data;d==null&&f.pts!==null&&(d=f.pts);let _=0;for(;_<g.length;){if(!Ni.parseFrame(g,_,u)){_++;continue}i.audioSamplingRate=u.sampleRate,i.channelsCount=u.channelCount,o=u.sampleRate,c=u.audioConfig;let b=g.subarray(_,_+u.frameLength);a.push({data:b,size:u.frameLength,duration:Ni.AC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_+=u.frameLength}}if(o==0||c.byteLength==0||d==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let m=d/n*o;return{id:i.id,type:R.ContentType.AUDIO,codecs:"ac-3",timescale:o,duration:r,mediaConfig:c,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getEc3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=0,c=new Uint8Array([]),d=null,u={sampleRate:0,channelCount:0,audioConfig:new Uint8Array(0),frameLength:0};for(let f of t.getAudioData()){let g=f.data;d==null&&f.pts!==null&&(d=f.pts);let _=0;for(;_<g.length;){if(!$i.parseFrame(g,_,u)){_++;continue}i.audioSamplingRate=u.sampleRate,i.channelsCount=u.channelCount,o=u.sampleRate,c=u.audioConfig;let b=g.subarray(_,_+u.frameLength);a.push({data:b,size:u.frameLength,duration:$i.EC3_SAMPLES_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_+=u.frameLength}}if(o==0||c.byteLength==0||d==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let m=d/n*o;return{id:i.id,type:R.ContentType.AUDIO,codecs:"ec-3",timescale:o,duration:r,mediaConfig:c,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getMp3StreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o,c=null,d=[];for(let _ of t.getAudioData())_.data&&(c==null&&_.pts!==null&&(c=_.pts),d.push(_.data));let u=ne.concatRange(d),m=0;for(;m<u.length;){let _=mi.parseHeader(u,m);if(!_){m++;continue}o||(o=_),m+_.frameLength<=u.length&&a.push({data:u.subarray(m,m+_.frameLength),size:_.frameLength,duration:mi.MPEG_AUDIO_SAMPLE_PER_FRAME,cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),m+=_.frameLength}if(!o||c==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let f=o.sampleRate,g=c/n*f;return{id:i.id,type:R.ContentType.AUDIO,codecs:"mp3",timescale:f,duration:r,mediaConfig:new Uint8Array([]),data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:g,samples:a},stream:i}}getOpusStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=t.getOpusMetadata();if(!c)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);let d=br.getAudioConfig(c),u=c.sampleRate;for(let f of t.getAudioData()){let g=f.data;o==null&&f.pts!==null&&(o=f.pts);let _=0;for(;_<g.length;){let T=(g[_+1]&16)!==0,b=(g[_+1]&8)!==0,S=_+2,E=0;for(;g[S]===255;)E+=255,S+=1;E+=g[S],S+=1,S+=T?2:0,S+=b?2:0;let w=g.slice(S,S+E);a.push({data:w,size:w.byteLength,duration:br.getPacketSampleCount(w),cts:0,flags:Qe.AUDIO_SAMPLE_FLAGS}),_=S+E}}if(d.byteLength==0||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);i.audioSamplingRate=c.sampleRate,i.channelsCount=c.channelCount;let m=o/n*u;return{id:i.id,type:R.ContentType.AUDIO,codecs:"opus",timescale:u,duration:r,mediaConfig:d,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:m,samples:a},stream:i}}getAvcStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=t.getVideoData(),d=rr.getVideoSamples(c);if(!d.length)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_NO_VIDEO_DATA,s?s.getUris()[0]:null);for(let f=0;f<d.length;f++){let g=d[f];o==null&&(o=g.dts);let _;f+1<d.length?_=(d[f+1].dts||0)-(g.dts||0):d.length>1?_=(g.dts||0)-(d[f-1].dts||0):_=(s.endTime-s.startTime)*n,a.push({data:g.data,size:g.data.byteLength,duration:_,cts:Math.round((g.pts||0)-(g.dts||0)),flags:g.isKeyframe?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS})}let u=[];for(let f of c)u.push(...f.nalus);let m=rr.parseInfo(u);if(!m||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);return i.height=i.height||m.height,i.width=i.width||m.width,{id:i.id,type:R.ContentType.VIDEO,codecs:"avc1",timescale:n,duration:r,mediaConfig:m.videoConfig,hSpacing:m.hSpacing,vSpacing:m.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:o,samples:a},stream:i}}getHvcStreamInfo_(t,i,r,s){let n=mt.Timescale,a=[],o=null,c=[],d=t.getVideoData(),u={data:new Uint8Array(0),isKeyframe:!1};if(!d.length)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_NO_VIDEO_DATA,s?s.getUris()[0]:null);for(let f=0;f<d.length;f++){let g=d[f],_=g.nalus;if(c.push(..._),!sr.parseFrame(_,u))continue;o==null&&g.dts!=null&&(o=g.dts);let b;f+1<d.length?b=(d[f+1].dts||0)-(g.dts||0):d.length>1?b=(g.dts||0)-(d[f-1].dts||0):b=(s.endTime-s.startTime)*n,a.push({data:u.data,size:u.data.byteLength,duration:b,cts:Math.round((g.pts||0)-(g.dts||0)),flags:u.isKeyframe?Qe.VIDEO_KEYFRAME_FLAGS:Qe.VIDEO_NON_KEYFRAME_FLAGS})}let m=sr.parseInfo(c);if(!m||o==null)throw new h(h.Severity.CRITICAL,h.Category.MEDIA,h.Code.TRANSMUXING_FAILED,s?s.getUris()[0]:null);return i.height=i.height||m.height,i.width=i.width||m.width,{id:i.id,type:R.ContentType.VIDEO,codecs:"hvc1",timescale:n,duration:r,mediaConfig:m.videoConfig,hSpacing:m.hSpacing,vSpacing:m.vSpacing,data:{sequenceNumber:this.frameIndex,baseMediaDecodeTime:o,samples:a},stream:i}}};l(gs,"SUPPORTED_AUDIO_CODECS_",["aac","ac-3","ec-3","mp3","opus"]),l(gs,"SUPPORTED_VIDEO_CODECS_",["avc","hevc"]);var Js=gs;Ne.registerTransmuxer("video/mp2t",()=>new Js("video/mp2t"),Ne.PluginPriority.PREFERRED);Ne.registerTransmuxer("audio/mp2t",()=>new Js("audio/mp2t"),Ne.PluginPriority.PREFERRED);var export_AllDevices=void 0;export{Nt as ADTS,ps as AacTransmuxer,Ni as Ac3,Va as Ac3Transmuxer,kn as AdManager,export_AllDevices as AllDevices,ya as Aria,ro as CastProxy,no as CastReceiver,Ba as CeaDecoder,B as Cue,Nn as DashJsonParser,Br as DashParser,_r as DataUriPlugin,Cr as Deprecate,Ke as Dom,$i as Ec3,Ga as Ec3Transmuxer,Ta as EmeEncryptionScheme,ur as FairPlay,va as Fullscreen,rr as H264,sr as H265,Dt as HlsParser,Ui as HttpFetchPlugin,Hr as HttpXHRPlugin,At as Id3Utils,$n as Id3V1Utils,Ks as IlstUtils,Tt as InitSegmentReference,Qi as Iterables,Ka as LocTransmuxer,ba as MCapEncryptionScheme,aa as MSFParser,me as ManifestParser,Aa as MediaCapabilities,Ea as MediaSource,Pt as Metadata,qa as Mp3Transmuxer,Ot as Mp4CeaParser,hi as Mp4TtmlParser,Da as Mp4VttParser,mi as MpegAudio,Wa as MpegTsTransmuxer,la as OfflineManifestParser,ca as OfflineScheme,br as Opus,js as Orientation,Wi as PatchedMediaKeysApple,ai as PatchedMediaKeysWebkit,Ia as PiPWebkit,dt as Player,Sa as PolyfillMap,wa as PolyfillSymbol,Ps as PreferenceBasedCriteria,xi as PresentationTimeline,oa as QueueManager,Ca as RandomUUID,Ze as SegmentIndex,Te as SegmentReference,Rs as SimpleAbrManager,Qr as SpeechToText,Ua as SrtTextParser,zs as Storage,_a as StorageMechanism,Oe as TextEngine,Ne as TransmuxerEngine,Fa as TsCeaParser,Js as TsTransmuxer,zi as TtmlTextParser,xa as TypedArray,Ys as URLSearchParams,h as UtilError,Ma as VTTCue,Ra as VideoFrameCallback,Pa as VideoPlayPromise,ka as VideoPlaybackQuality,Vr as VorbisUtils,Xi as VttTextParser,Ls as WebVttGenerator,p as log,Pe as polyfill};
|