@vindral/web-sdk 4.2.1-1-gf6c6f2fd → 4.2.1-2-gf2a1a13e
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/{DDbXsjIU.js → BBzQBsxG.js} +1 -1
- package/{CYgjrKff.js → BGDidDHa.js} +1 -1
- package/core.js +1 -1
- package/legacy.es.js +1 -1
- package/legacy.umd.js +1 -1
- package/package.json +1 -1
- package/player.js +2 -2
- package/vindral-player-component.js +2 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { n as e, t } from "./BsfwXDui.js";
|
|
2
|
-
import { _ as n, a as r, c as i, d as a, f as o, g as s, h as c, i as ee, l, m as te, n as u, o as ne, p as re, r as ie, s as ae, t as oe, u as se, v as ce } from "./
|
|
2
|
+
import { _ as n, a as r, c as i, d as a, f as o, g as s, h as c, i as ee, l, m as te, n as u, o as ne, p as re, r as ie, s as ae, t as oe, u as se, v as ce } from "./BGDidDHa.js";
|
|
3
3
|
import { M as le } from "./C01DcfYu.js";
|
|
4
4
|
import { a as d, i as f, n as p, r as m, t as h } from "./B7hT-BKr.js";
|
|
5
5
|
import { n as ue, t as de } from "./DeYmk5AL.js";
|
|
@@ -10866,7 +10866,7 @@ var Cv = class {
|
|
|
10866
10866
|
let e = this.modules.canvasModule instanceof O_ ? !0 : void 0;
|
|
10867
10867
|
return C({
|
|
10868
10868
|
uptime: Date.now() - this.createdAt,
|
|
10869
|
-
version: "4.2.1-
|
|
10869
|
+
version: "4.2.1-2-gf2a1a13e",
|
|
10870
10870
|
clientId: this.clientId,
|
|
10871
10871
|
sessionId: this.sessionId,
|
|
10872
10872
|
channelId: this.channelId,
|
package/core.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { t as e } from "./
|
|
1
|
+
import { t as e } from "./BGDidDHa.js";
|
|
2
2
|
import { a as t, c as n, i as r, l as i, n as a, o, r as s, s as c, u as l } from "./C01DcfYu.js";
|
|
3
3
|
export { a as AUTHENTICATION_EXPIRED_CODE, s as AUTHENTICATION_FAILED_CODE, r as CHANNEL_NOT_FOUND_CODE, t as CONNECTION_FAILED_AFTER_RETRIES_CODE, o as CONNECTION_FAILED_CODE, c as DISCONNECTED_BY_EDGE, n as INACTIVITY_CODE, i as NO_INCOMING_DATA, e as Vindral, l as VindralError };
|
package/legacy.es.js
CHANGED
|
@@ -12359,7 +12359,7 @@ var wx = /* @__PURE__ */ new WeakMap(), Tx = /* @__PURE__ */ new WeakMap(), Ex =
|
|
|
12359
12359
|
let e = this.modules.canvasModule instanceof gb ? !0 : void 0;
|
|
12360
12360
|
return z({
|
|
12361
12361
|
uptime: Date.now() - this.createdAt,
|
|
12362
|
-
version: "4.2.1-
|
|
12362
|
+
version: "4.2.1-2-gf2a1a13e",
|
|
12363
12363
|
clientId: this.clientId,
|
|
12364
12364
|
sessionId: this.sessionId,
|
|
12365
12365
|
channelId: this.channelId,
|
package/legacy.umd.js
CHANGED
|
@@ -1220,7 +1220,7 @@ var __async = (__this, __arguments, generator) => {
|
|
|
1220
1220
|
});
|
|
1221
1221
|
})();
|
|
1222
1222
|
`,Fy=typeof self<`u`&&self.Blob&&new Blob([`(self.URL || self.webkitURL).revokeObjectURL(self.location.href);`,Py],{type:`text/javascript;charset=utf-8`})})),Ly=r({VideoDecoderWorkerContext:()=>zy}),Ry,zy,By=n((()=>{H(),Iy(),h(),B(),P(),zy=class{get isWebCodecs(){return this._isWebCodecs}get usingOffscreenCanvas(){return this._usingOffscreenCanvas}constructor(e,t,n,r,i=!1,a=!1){m(this,`decodedSamples`,[]),m(this,`codedSamples`,[]),m(this,`decoder`,void 0),m(this,`logger`,void 0),m(this,`errors`,new w(10)),m(this,`pool`,void 0),m(this,`getCurrentTime`,void 0),m(this,`_usingOffscreenCanvas`,void 0),m(this,`_isWebCodecs`,void 0),m(this,`_renderedFrameCount`,0),m(this,`_rendererDroppedFrameCount`,0),m(this,`statisticsQueue`,new w(1e3)),m(this,`samplesInTransitToWorker`,0),m(this,`workerPendingDecodeCount`,0),m(this,`targetSamplesInBatch`,4),m(this,`maxSamplesInFlight`,20),m(this,`unload`,()=>{this.decoder.postMessage({type:`unload`}),this.decoder.removeEventListener(`message`,this.onDecoderEvent),this.decoder.terminate(),this.statisticsQueue.clear(),this.codedSamples=[],this.decodedSamples.forEach(e=>{var t;return(t=e.videoFrame)==null?void 0:t.close()}),this.decodedSamples=[],this.samplesInTransitToWorker=0,this.workerPendingDecodeCount=0}),m(this,`enqueue`,e=>{this.codedSamples.push(z({},e)),this.flushQueuedSamples()}),m(this,`setSubtitleCues`,(e,t,n,r,i)=>{this.decoder.postMessage({type:`subtitle cues`,cues:e,containerWidth:t,containerHeight:n,devicePixelRatio:r,bottomPadding:i})}),m(this,`prepareOutputBuffers`,e=>{this._isWebCodecs||e.forEach(e=>{let t=Math.ceil(e.width/16)*16*(Math.ceil(e.height/16)*16)*3/2;e.buffer=this.pool.get(t)})}),m(this,`flushQueuedSamples`,()=>{for(;this.codedSamples.length>0&&this.samplesInFlight()<this.maxSamplesInFlight;){let e=Math.max(this.maxSamplesInFlight-this.samplesInFlight(),0),t=Math.min(this.targetSamplesInBatch,this.codedSamples.length,e);if(t<=0)return;let n=this.codedSamples.slice(0,t);this.codedSamples=this.codedSamples.slice(t),this.prepareOutputBuffers(n),this.sendSamples(n),this.samplesInTransitToWorker+=n.length}}),m(this,`initSegment`,e=>{let t={type:`init segment`,initSegment:e};this.decoder.postMessage(t)}),m(this,`take`,()=>this.decodedSamples.shift()),m(this,`samplesInFlight`,()=>this.samplesInTransitToWorker+this.workerPendingDecodeCount),m(this,`getRenderStatistics`,()=>({renderedFrameCount:this._renderedFrameCount,rendererDroppedFrameCount:this._rendererDroppedFrameCount})),m(this,`takeEstimatedStatistics`,()=>this.statisticsQueue.pop()),m(this,`sendSamples`,e=>{var t;let n={type:`decode samples`,samples:e,timestamp:Date.now(),currentTime:(t=this.getCurrentTime)==null?void 0:t.call(this)},r=this._isWebCodecs?e.map(e=>e.data):e.flatMap(e=>[e.data,e.buffer]).filter(e=>e!==void 0);this.decoder.postMessage(n,r)}),m(this,`onDecoderEvent`,e=>{switch(e.data.type){case`ready`:break;case`error`:this.errors.push(Error(e.data.message)),this.samplesInTransitToWorker=0,this.workerPendingDecodeCount=0;break;case`decoded samples`:{typeof e.data.samplesAcceptedCount==`number`&&e.data.samplesAcceptedCount>0&&(this.samplesInTransitToWorker=Math.max(0,this.samplesInTransitToWorker-e.data.samplesAcceptedCount)),typeof e.data.decoderPendingCount==`number`&&e.data.decoderPendingCount>=0&&(this.workerPendingDecodeCount=e.data.decoderPendingCount);let t=e.data.timestamp,n=Date.now()-t;if(typeof e.data.estimatedSampleCount==`number`&&e.data.estimatedSampleCount>0&&typeof e.data.estimatedDecodeTimeSum==`number`&&typeof e.data.estimatedTransportTimeToWorkerSum==`number`){let t=e.data.estimatedSampleCount,r=e.data.estimatedDecodeTimeSum/t,i=e.data.estimatedTransportTimeToWorkerSum/t+n;for(let e=0;e<t;e++)this.statisticsQueue.push({decodeTime:r,transportTime:i})}e.data.samples.forEach(e=>{e.statistics&&(e.statistics.transportTimeFromWorker=n)}),typeof e.data.renderedFrameCount==`number`&&(this._renderedFrameCount=e.data.renderedFrameCount),typeof e.data.rendererDroppedFrameCount==`number`&&(this._rendererDroppedFrameCount=e.data.rendererDroppedFrameCount),this.decodedSamples.push(...e.data.samples),this.flushQueuedSamples()}break}}),this.decoder=e,this.logger=t,this.pool=n,this.getCurrentTime=r,this._isWebCodecs=i,this._usingOffscreenCanvas=a,this.decoder.addEventListener(`message`,this.onDecoderEvent)}error(){return this.errors.pop()}},Ry=zy,m(zy,`create`,function(){var e=N(function*(e,t,n,r=!1,i=`no-preference`,a,o){let s=new Ny,{isWebCodecs:c,usingOffscreenCanvas:l}=yield new Promise((n,o)=>{let c=!1,l=setTimeout(()=>{c||(c=!0,u(Error(`Decoder worker initialization timed out`)))},1e4),u=e=>{if(c=!0,clearTimeout(l),s.removeEventListener(`message`,d),s.terminate(),e instanceof Error){o(e);return}o(Error(`Failed to initialize decoder worker`))},d=e=>{if(!c)switch(c=!0,clearTimeout(l),s.removeEventListener(`message`,d),e.data.type){case`ready`:n({isWebCodecs:e.data.isWebCodecs,usingOffscreenCanvas:e.data.usingOffscreenCanvas});break;case`error`:var t;u(Error((t=e.data.message)==null?`Failed to initialize decoder worker`:t));break;default:u(Error(`Failed to initialize decoder worker`));break}};s.addEventListener(`message`,d);let f={type:`init`,logLevel:t,useWebCodecs:r,webcodecsHardwareAcceleration:i,offscreenCanvas:a};try{a?s.postMessage(f,[a]):s.postMessage(f)}catch(n){let o=n instanceof DOMException&&n.name===`DataCloneError`;if(a&&o){e.warn(`Failed to transfer OffscreenCanvas to worker, falling back to main-thread rendering`,n);try{s.postMessage({type:`init`,logLevel:t,useWebCodecs:r,webcodecsHardwareAcceleration:i,offscreenCanvas:void 0})}catch(e){u(e)}}else u(n)}});return new Ry(s,e,n,o,c,l)});return function(t,n,r){return e.apply(this,arguments)}}())}));xi(),H(),h(),B(),P();var Vy=5,Hy=100,Uy=1e3,Wy=class e{constructor(e,t,n,r,i=!1,a=!1,o=!1){m(this,`timers`,zn.create()),m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`trackContexts`,void 0),m(this,`playbackSource`,void 0),m(this,`isSuspended`,!1),m(this,`_webCodecsInUse`,void 0),m(this,`_audioWebCodecsInUse`,void 0),m(this,`_offscreenCanvasInUse`,void 0),m(this,`currentVideoDecodeRate`,2),m(this,`decodeRateGraceIntervals`,3),m(this,`isAudioEmitRetryScheduled`,!1),m(this,`videoKeyframeTimestamps`,[]),m(this,`load`,()=>{let e=this._audioWebCodecsInUse?20:Hy;this.timers.setInterval(this.emitDecodedFrames,e),this.timers.setInterval(this.emitDecodeRate,Uy),this.emitter.on(`init segment`,this.onInitSegment),this.emitter.on(`coded sample`,this.decode)}),m(this,`unload`,()=>{this.trackContexts.forEach(({decoderContext:e})=>e.unload()),this.timers.unload(),this.isAudioEmitRetryScheduled=!1,this.videoKeyframeTimestamps=[],this.emitter.off(`init segment`,this.onInitSegment),this.emitter.off(`coded sample`,this.decode)}),m(this,`suspend`,()=>{this.isSuspended=!0}),m(this,`unsuspend`,()=>{this.isSuspended=!1}),m(this,`getBuffer`,e=>{var t;return(t=this.trackContexts.get(e))==null?void 0:t.buffer}),m(this,`getVideoKeyframeTimestamps`,()=>this.videoKeyframeTimestamps),m(this,`videoDecodeRate`,()=>this.currentVideoDecodeRate),m(this,`calculateVideoDecodeRate`,()=>{var e;if(this._webCodecsInUse)return 2;let t=this.trackContexts.get(`video`);if(!t)return 2**53-1;let n=(e=t.sampleDuration)==null?40:e,r=Mt(t.decodeTime.items()),i=Mt(t.transportTime.items()),a=r.average+i.average;return a<=0?2:Math.min(n/a,100)}),m(this,`getStatistics`,()=>{var e,t,n,r,i;let a=this.trackContexts.get(`video`),o=Mt((e=a==null?void 0:a.decodeTime.items())==null?[]:e),s=Mt((t=a==null?void 0:a.transportTime.items())==null?[]:t),c=Mt((n=(r=this.trackContexts.get(`audio`))==null?void 0:r.decodeTime.items())==null?[]:n),l=this._offscreenCanvasInUse?a==null||(i=a.getRenderStatistics)==null?void 0:i.call(a):void 0;return z(z({videoDecodeRate:this.videoDecodeRate(),videoDecodeTime:o,audioDecodeTime:c,videoTransportTime:s,videoKeyframeIntervalMs:jt(this.videoKeyframeTimestamps)},l?{renderedFrameCount:l.renderedFrameCount,rendererDroppedFrameCount:l.rendererDroppedFrameCount}:{}),{},{videoRenderer:this._offscreenCanvasInUse?`OffscreenCanvas`:`Canvas`,videoDecoder:this._webCodecsInUse?`WebCodecs`:`WASM`,audioRenderer:`AudioContext`,audioDecoder:this._audioWebCodecsInUse?`WebCodecs`:`WASM`})}),m(this,`setSubtitleCues`,(e,t,n,r,i)=>{var a;if(!this._offscreenCanvasInUse)return;let o=(a=this.trackContexts.get(`video`))==null?void 0:a.decoderContext;o&&`setSubtitleCues`in o&&o.setSubtitleCues(e,t,n,r,i)}),m(this,`onInitSegment`,({initSegment:e})=>{var t;let n=(t=this.trackContexts.get(e.type))==null?void 0:t.decoderContext;if(!n)throw new U(`No known decoder context`,{code:`no_known_decoder_context`,isFatal:!1});n.initSegment(e)}),m(this,`decode`,e=>{let t=this.trackContexts.get(e.type);if(!t)throw new U(`No known decoder context`,{code:`no_known_decoder_context`,isFatal:!1});if(this.isSuspended)return;t.sampleDuration=e.duration/e.timescale*1e3;let n=e.compositionTimeOffset||0,{decoderContext:r,buffer:i}=t,a=(e.timestamp+n)/e.timescale*1e3,o=e.duration/e.timescale*1e3,s=i[i.length-1];if(!s||a-Vy>s.end?i.push({start:a,end:a+o}):a+o*5<s.end?(t.buffer=[{start:a,end:a+o}],e.type===`video`&&(this.videoKeyframeTimestamps=[])):s.end=a+o,e.type===`video`&&e.isSync){let e=this.videoKeyframeTimestamps[this.videoKeyframeTimestamps.length-1];e!==void 0&&a<e&&(this.videoKeyframeTimestamps=[]),this.videoKeyframeTimestamps.push(a),this.videoKeyframeTimestamps.length>20&&(this.videoKeyframeTimestamps=this.videoKeyframeTimestamps.slice(-20))}r.enqueue(e),this.emitDecodedFrames(),this._audioWebCodecsInUse&&e.type===`audio`&&this.scheduleAudioEmitRetry()}),m(this,`scheduleAudioEmitRetry`,()=>{this.isAudioEmitRetryScheduled||(this.isAudioEmitRetryScheduled=!0,this.timers.setTimeout(()=>{this.isAudioEmitRetryScheduled=!1,this.emitDecodedFrames()},0))}),m(this,`emitDecodedFrames`,()=>{let e;this.updateBufferState(),this.trackContexts.forEach((t,n)=>{var r,i,a,o;let s;for(;(s=(r=(i=t.decoderContext).error)==null?void 0:r.call(i))!==void 0;)this.emitter.emit(`error`,ti(!1,s));for(;(e=t.decoderContext.take())!==void 0;){let{statistics:n}=e;n&&(t.decodeTime.push(n.decodeTime),t.transportTime.push((n.transportTimeToWorker+n.transportTimeFromWorker)/n.samplesInBatch)),this.emitter.emit(`decoded frame`,e)}let c=(a=(o=t.decoderContext).takeEstimatedStatistics)==null?void 0:a.call(o);for(;c!==void 0;){var l,u;t.decodeTime.push(c.decodeTime),t.transportTime.push(c.transportTime),c=(l=(u=t.decoderContext).takeEstimatedStatistics)==null?void 0:l.call(u)}})}),m(this,`emitDecodeRate`,()=>{if(this.decodeRateGraceIntervals>0){this.decodeRateGraceIntervals--;return}this.currentVideoDecodeRate=this.calculateVideoDecodeRate(),this.emitter.emit(`video decode rate`,this.currentVideoDecodeRate)}),m(this,`updateBufferState`,()=>{let e;if(this.trackContexts.forEach(t=>{if(!e)e=t.buffer;else{var n,r,i,a;let o=(n=(r=t.buffer[t.buffer.length-1])==null?void 0:r.end)==null?0:n;((i=(a=e[e.length-1])==null?void 0:a.end)==null?0:i)>o&&(e=t.buffer)}}),!e)return;let t=this.playbackSource.currentTime,n=!0;this.trackContexts.forEach(e=>{e.buffer.some(e=>e.start<=t&&t<e.end)||(n=!1)});let r=n?`playing`:`buffering`;this.emitter.emit(`buffer state`,{buffered:e,currentTime:this.playbackSource.currentTime,isPaused:this.playbackSource.isPaused,playbackState:r})}),this.logger=t,this.emitter=e,this.trackContexts=n,this.playbackSource=r,this._webCodecsInUse=i,this._audioWebCodecsInUse=a,this._offscreenCanvasInUse=o}static create(t,n,r,i,a,o,s=!1,c=`no-preference`,l){return N(function*(){let u=new Map,d=new Set,f=!1,p=!1,m=!1;for(let e of i){if(d.has(e.type)){n.warn(`Received duplicate track type for decoder initialization. Ignoring subsequent track.`,{trackType:e.type,codec:e.codec,mimeType:e.mimeType});continue}switch(d.add(e.type),e.type){case`audio`:{let t,r,i=!1;if(s){let{WebCodecsAudioDecoderContext:a}=yield Promise.resolve().then(()=>(xy(),_y));if(i=a.isSupported(),i)try{t=yield a.create(n.createContext(`WebCodecsAudio`)),p=!0}catch(t){r=t instanceof Error?t:Error(`Failed to initialize WebCodecs audio decoder`),e.codec===`opus`&&n.warn(`Failed to initialize WebCodecs audio decoder, falling back to WASM Opus decoder`,{codec:e.codec,error:r})}}if(!t)if(e.codec===`opus`){let{OpusDecoderContext:n}=yield Promise.resolve().then(()=>(My(),ky));t=yield n.create(e.sampleRate||48e3,e.channels||2)}else{let t=s?r?`WebCodecs audio decoder initialization failed: ${r.message}`:i?`WebCodecs audio decoder could not be initialized.`:`WebCodecs AudioDecoder API is not supported in this environment.`:`WebCodecs audio decoding is disabled.`;throw ni(e.codec,t,r)}u.set(e.type,{buffer:[],decoderContext:t,decodeTime:new w(100),transportTime:new w(100),sampleDuration:40});break}case`video`:{let{VideoDecoderWorkerContext:t}=yield Promise.resolve().then(()=>(By(),Ly)),i=yield t.create(n.createContext(`VideoDecoderWorker`),r,o,s,c,l,()=>a.currentTime);f=i.isWebCodecs,m=i.usingOffscreenCanvas,u.set(e.type,{buffer:[],decoderContext:i,decodeTime:new w(100),transportTime:new w(100),sampleDuration:40,getRenderStatistics:i.getRenderStatistics});break}default:break}}return new e(t,n,u,a,f,p,m)})()}};h();var Gy,Ky=class{constructor(e){m(this,`emitter`,void 0),m(this,`isVisibleCount`,0),m(this,`isHiddenCount`,0),m(this,`isOnlineCount`,0),m(this,`isOfflineCount`,0),m(this,`isActive`,document.visibilityState===`visible`),m(this,`unload`,()=>{document.removeEventListener(`visibilitychange`,this.onVisibilityChanged),window.removeEventListener(`pagehide`,this.onPageHide),window.removeEventListener(`online`,this.onOnline),window.removeEventListener(`offline`,this.onOffline)}),m(this,`load`,()=>{document.addEventListener(`visibilitychange`,this.onVisibilityChanged),window.addEventListener(`pagehide`,this.onPageHide),window.addEventListener(`online`,this.onOnline),window.addEventListener(`offline`,this.onOffline)}),m(this,`unsuspend`,()=>{}),m(this,`getStatistics`,()=>{var e,t,n,r,i;return{isVisible:this.isVisible,isOnline:this.isOnline,isVisibleCount:this.isVisibleCount,isHiddenCount:this.isHiddenCount,isOnlineCount:this.isOnlineCount,isOfflineCount:this.isOfflineCount,navigatorRtt:(e=navigator.connection)==null?void 0:e.rtt,navigatorEffectiveType:(t=navigator.connection)==null?void 0:t.effectiveType,navigatorConnectionType:(n=navigator.connection)==null?void 0:n.type,navigatorSaveData:(r=navigator.connection)==null?void 0:r.saveData,navigatorDownlink:(i=navigator.connection)==null?void 0:i.downlink}}),m(this,`onOnline`,()=>this.isOnlineCount++),m(this,`onOffline`,()=>this.isOfflineCount++),m(this,`onPageHide`,e=>this.emitter.emit(`pagehide`,e)),m(this,`onVisibilityChanged`,()=>{this.setIsActive(document.visibilityState===`visible`)}),m(this,`setIsActive`,e=>{e!==this.isActive&&(this.emitter.emit(`page active`,e),e?this.isVisibleCount++:this.isHiddenCount++),this.isActive=e}),this.emitter=e}get isOnline(){return navigator.onLine}get isVisible(){return document.visibilityState===`visible`}};Gy=Ky,m(Ky,`create`,e=>new Gy(e)),H(),h(),B();var qy,Jy=e=>(t,n,r)=>t.timestamp<=n||t.timestampAdded<=r-e,Yy=class e{constructor(t,n,r){m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`waitingEvents`,[]),m(this,`isTriggered`,Jy(e.EVENT_TIMEOUT)),m(this,`timeSource`,void 0),m(this,`timers`,new zn),m(this,`load`,()=>{this.timers.setInterval(this.onBufferedStateChanged,e.EVENT_CHECK_INTERVAL),this.emitter.on(`add event`,this.addEvent)}),m(this,`unload`,()=>{this.timers.unload(),this.emitter.off(`add event`,this.addEvent)}),m(this,`addEvent`,e=>{this.logger.debug(`Adding event`,{event:e}),!this.waitingEvents.some(t=>t.id!==void 0&&t.id===e.id)&&this.waitingEvents.push(z(z({},e),{},{timestampAdded:Date.now()}))}),m(this,`extractEvent`,(e,t)=>{t.type===`video`&&e.channelId!==t.channelId&&this.addEvent({type:`channel switch`,channelId:t.channelId,timestamp:t.timestamp/t.timescale*1e3}),t.type===`audio`&&e.type===`audio`&&t.language!==void 0&&t.language!==e.language&&this.addEvent({type:`language switch`,language:t.language,timestamp:t.timestamp/t.timescale*1e3})}),m(this,`onBufferedStateChanged`,()=>{var e;let t=Date.now(),n=(e=this.timeSource.drift)==null?0:e,r=this.timeSource.serverCurrentTime-n;if(this.waitingEvents.length===0)return;let i=this.waitingEvents.filter(e=>this.isTriggered(e,r,t));this.waitingEvents=this.waitingEvents.filter(e=>!this.isTriggered(e,r,t)),i.forEach(e=>{this.logger.debug(`Emitting event`,{event:e}),this.emitter.emit(`event`,e)})}),this.logger=n,this.emitter=t,this.timeSource=r}};qy=Yy,m(Yy,`EVENT_TIMEOUT`,5e3),m(Yy,`EVENT_CHECK_INTERVAL`,20),m(Yy,`create`,(e,t,n)=>new qy(e,t,n)),xi(),H(),h();var Xy,Zy=class e{constructor(t){m(this,`emitter`,void 0),m(this,`timers`,zn.create()),m(this,`bytesReceived`,new Map),m(this,`timeoutInterval`,void 0),m(this,`lastBytesUpdated`,Date.now()),m(this,`load`,()=>{this.emitter.on(`connection state`,this.onConnectionState),this.timers.setInterval(()=>this.bytesReceived.forEach(e=>e.tick()),100)}),m(this,`unload`,()=>{this.emitter.off(`connection state`,this.onConnectionState),this.timers.unload()}),m(this,`averageBitRate`,e=>{var t,n;return((t=(n=this.bytesReceived.get(e))==null?void 0:n.average)==null?0:t)*8}),m(this,`totalBytesReceived`,()=>{let e=0;return this.bytesReceived.forEach(t=>{e+=t.total}),e}),m(this,`add`,(t,n)=>{let r=this.bytesReceived.get(t);r||(r=new Ft(20),this.bytesReceived.set(t,r)),n>0&&(this.lastBytesUpdated=Date.now(),this.timeoutInterval||(this.timeoutInterval=this.timers.setInterval(this.checkTimeout,e.UPDATE_RECEIVED_BYTES_INTERVAL))),r.add(n)}),m(this,`getStatistics`,()=>({bytesReceived:this.totalBytesReceived(),videoBitRate:this.averageBitRate(`video`),audioBitRate:this.averageBitRate(`audio`)})),m(this,`onConnectionState`,t=>{this.clearTimeoutInterval(),t===`connected`&&(this.lastBytesUpdated=Date.now(),this.timeoutInterval=this.timers.setInterval(this.checkTimeout,e.UPDATE_RECEIVED_BYTES_INTERVAL))}),m(this,`checkTimeout`,()=>{let t=Date.now()-this.lastBytesUpdated;if(this.totalBytesReceived()===0&&t>e.NO_DATA_ERROR_TIMEOUT){this.emitter.emit(`error`,mi()),this.emitter.emit(`reconnect`,`no incoming data`),this.clearTimeoutInterval();return}t>e.NO_DATA_TIMEOUT&&this.totalBytesReceived()>0&&(this.emitter.emit(`no data timeout`,this.totalBytesReceived()),this.clearTimeoutInterval())}),m(this,`clearTimeoutInterval`,()=>{this.timeoutInterval&&(this.timers.clearInterval(this.timeoutInterval),this.timeoutInterval=void 0)}),this.emitter=t}};Xy=Zy,m(Zy,`NO_DATA_ERROR_TIMEOUT`,20*1e3),m(Zy,`NO_DATA_TIMEOUT`,5*1e3),m(Zy,`UPDATE_RECEIVED_BYTES_INTERVAL`,1e3),m(Zy,`create`,e=>new Xy(e)),H(),h();var Qy=1e3,$y=50,eb=class e{constructor(e){m(this,`logger`,void 0),m(this,`trackingState`,new Map),m(this,`runningJitter`,new Map),m(this,`recentJitterSamples`,new Map),m(this,`load`,()=>{this.logger.debug(`JitterModule loaded`)}),m(this,`unload`,()=>{this.trackingState.clear(),this.runningJitter.clear(),this.recentJitterSamples.clear(),this.logger.debug(`JitterModule unloaded`)}),this.logger=e}static create(t){return new e(t)}getTrackingKey(e,t){return`${e}-${t}`}recordSample(e){var t,n,r,i;let a=this.getTrackingKey(e.type,e.renditionId),o=(t=(n=globalThis.performance)==null||(r=n.now)==null?void 0:r.call(n))==null?Date.now():t,s=e.timestamp/e.timescale*1e3,c=this.trackingState.get(a);if(!c){this.trackingState.set(a,{lastArrivalTime:o,lastTimestampMs:s,jitterSamples:new w(Qy),interArrivalTimes:new w(Qy)}),this.runningJitter.set(a,0),this.recentJitterSamples.set(a,new w($y));return}let l=s-c.lastTimestampMs;if(l<=0){c.lastArrivalTime=o,c.lastTimestampMs=s;return}let u=o-c.lastArrivalTime,d=Math.abs(u-l);c.jitterSamples.push(d),c.interArrivalTimes.push(u);let f=(i=this.runningJitter.get(a))==null?0:i,p=f+(d-f)/16;this.runningJitter.set(a,p);let m=this.recentJitterSamples.get(a);m||(m=new w($y),this.recentJitterSamples.set(a,m)),m.push(d),c.lastArrivalTime=o,c.lastTimestampMs=s}getJitterForType(e){for(let[i,a]of this.trackingState)if(i.startsWith(e)){var t,n,r;if(a.jitterSamples.items().length<1)return;let e=(t=this.runningJitter.get(i))==null?0:t,{min:o,max:s,average:c}=Mt((n=(r=this.recentJitterSamples.get(i))==null?void 0:r.items())==null?[]:n);return{min:Math.round(o),max:Math.round(s),last:Math.round(c),average:Math.round(e)}}}getRunningJitter(e){for(let[t,n]of this.runningJitter)if(t.startsWith(e))return n}reset(e,t){if(e!==void 0&&t!==void 0){let n=this.getTrackingKey(e,t);this.trackingState.delete(n),this.runningJitter.delete(n),this.recentJitterSamples.delete(n)}else if(e!==void 0)for(let t of this.trackingState.keys())t.startsWith(e)&&(this.trackingState.delete(t),this.runningJitter.delete(t),this.recentJitterSamples.delete(t));else this.trackingState.clear(),this.runningJitter.clear(),this.recentJitterSamples.clear()}getStatistics(){return{audioJitter:this.getJitterForType(`audio`),videoJitter:this.getJitterForType(`video`)}}};xi(),H(),h(),P();var tb=()=>window.AudioContext||window.webkitAudioContext,nb=class e extends Bt{constructor(){var t;super(),t=this,m(this,`context`,new(tb())),m(this,`timers`,zn.create()),m(this,`previousCurrentTime`,0),m(this,`_isStuck`,!1),m(this,`mediaStreamDestination`,void 0),m(this,`unload`,()=>(this.timers.unload(),this.context.removeEventListener(`statechange`,this.onStateChange),this.context.state===`closed`?Promise.resolve():this.context.close())),m(this,`createGain`,()=>this.context.createGain()),m(this,`createBuffer`,(e,t,n)=>this.context.createBuffer(e,t,n)),m(this,`createBufferSource`,()=>this.context.createBufferSource()),m(this,`getMediaStreamDestination`,()=>(this.mediaStreamDestination||(this.mediaStreamDestination=this.context.createMediaStreamDestination()),this.mediaStreamDestination)),m(this,`getDefaultDestination`,()=>this.context.destination),m(this,`createSplitter`,()=>this.context.createChannelSplitter(2)),m(this,`resume`,N(function*(){try{return yield Promise.race([t.context.resume(),nr(1e3,ci())])}catch(e){throw t.suspend().catch(S),e}})),m(this,`suspend`,N(function*(){var e;yield(e=t.context.suspend())==null?Promise.resolve():e})),m(this,`onStateChange`,()=>this.emit(`state`,this.state)),this.context.addEventListener(`statechange`,this.onStateChange),this.timers.setInterval(()=>{this._isStuck=this.isRunning&&this.context.currentTime===this.previousCurrentTime,this._isStuck&&this.emit(`stuck`),this.previousCurrentTime=this.context.currentTime},e.CHECK_INTERVAL)}get isStuck(){return this._isStuck}get isRunning(){return this.state===`running`}get currentTime(){return this.context.currentTime}get sampleRate(){return this.context.sampleRate}get state(){return this.context.state}};m(nb,`CHECK_INTERVAL`,1e3),xi(),H(),h(),P(),B();var rb,ib=150,ab=400,ob=e=>e===void 0?5:e<=ib?1:e<=ab?2:5,sb=class extends Bt{get isContextRunning(){var e;return((e=this.audio)==null?void 0:e.state)===`running`}get volume(){return this._volume}set volume(e){this._volume=e,this.muted||this.setGain(e)}get seekTime(){return 0}get totalSeekTime(){return 0}get isSeeking(){return!1}get muted(){var e;return this._muted||!((e=this.audio)!=null&&e.isRunning)}set muted(e){this._userProvidedMuted=e,this._muted=e,this.setGain(this._volume)}get isPaused(){return!1}get currentTime(){var e;return!this.audio||!this.audio.isRunning||this.audio.isStuck?this.clockSource.currentTime:this.audio.currentTime*1e3+((e=this.clockDelta)==null?0:e)}set currentTime(e){this.logger.debug(`setting current time to`,{currentTime:e}),this.startTimeIsInvalidated=!0}get bufferTime(){return this._bufferTime}set bufferTime(e){this._bufferTime=e,this.audioBufferMultiplier=ob(e)}get audioNode(){return this.splitter}constructor(e,t,{muted:n,reInitWhenStuck:r,bufferTime:i}){var a;super(),a=this,m(this,`logger`,void 0),m(this,`audio`,void 0),m(this,`gainNode`,void 0),m(this,`splitter`,void 0),m(this,`_volume`,1),m(this,`_userProvidedMuted`,!1),m(this,`_muted`,!1),m(this,`startTime`,0),m(this,`samples`,new Float32Array),m(this,`preInitSampleQueue`,new w(500)),m(this,`unplayedBufferSources`,new w(100)),m(this,`sampleRate`,48e3),m(this,`channels`,2),m(this,`index`,0),m(this,`clockSource`,void 0),m(this,`clockDelta`,void 0),m(this,`startTimeIsInvalidated`,!0),m(this,`lastSampleTimestamp`,0),m(this,`reInitWhenStuck`,void 0),m(this,`ignoreSuspendCalls`,!1),m(this,`_bufferTime`,void 0),m(this,`audioBufferMultiplier`,void 0),m(this,`isActivated`,!1),m(this,`unload`,N(function*(){var e,t;(e=a.gainNode)==null||e.disconnect(),yield(t=a.audio)==null?void 0:t.unload(),a.reset(),a.audio=void 0,a.gainNode=void 0})),m(this,`suspend`,()=>{this.setGain(0)}),m(this,`unsuspend`,()=>{var e;this.setGain(this._volume),this.ignoreSuspendCalls=!!this.audio,(e=this.audio)==null||e.suspend().then(N(function*(){yield a.resume(),a.ignoreSuspendCalls=!1})).catch(()=>{this.ignoreSuspendCalls=!1,this.emit(`state change`,`suspended`)})}),m(this,`flush`,(e=this.samples.length)=>{if(!this.audio||!this.gainNode)throw new U(`AudioContext must be initialized to flush`,{isFatal:!1,code:`audiocontext_must_be_initialized`});let t=Math.floor(e/this.channels);if(t<=0)return;let n=this.audio.createBufferSource(),r=this.audio.createBuffer(this.channels,t,this.sampleRate);if(this.channels===2){let e=r.getChannelData(0),n=r.getChannelData(1);for(let r=0;r<t;r++){let t=r*2;e[r]=this.samples[t],n[r]=this.samples[t+1]}}else if(this.channels===1)r.getChannelData(0).set(this.samples.subarray(0,t));else{let e=0;for(let n=0;n<this.channels;n++){e=n;let i=r.getChannelData(n);for(let n=0;n<t;n++)i[n]=this.samples[e],e+=this.channels}}let i=Math.max(this.startTime,0);n.buffer=r,n.connect(this.gainNode),this.splitter&&n.connect(this.splitter),n.start(i),this.unplayedBufferSources.push([i,n]),this.startTime+=r.duration}),m(this,`onDecodedFrame`,e=>{var t;if(!(this.gainNode&&(t=this.audio)!=null&&t.isRunning)){if(e.type===`audio`){this.preInitSampleQueue.push(z(z({},e),{},{data:e.data.slice(0,e.data.length)}));let t=this.clockSource.currentTime;this.preInitSampleQueue.filterPop(({timestamp:e,timescale:n})=>e/n*1e3>t)}return}for(;!this.preInitSampleQueue.isEmpty();){let e=this.preInitSampleQueue.items();this.preInitSampleQueue.clear(),e.forEach(this.onDecodedFrame)}if(this.unplayedBufferSources.filterPop(([e,t])=>{var n,r;return((n=(r=this.audio)==null?void 0:r.currentTime)==null?0:n)<e}),e.type===`audio`){let t=e.timestamp/e.timescale*1e3;if(t<this.lastSampleTimestamp&&(this.logger.info(`Unordered timestamp - invalidating start time`),this.startTimeIsInvalidated=!0),this.lastSampleTimestamp=t,this.startTimeIsInvalidated){let e=this.audio.currentTime*1e3,n=this.clockSource.currentTime,r=(e+t-n)/1e3;this.clockDelta=n-e,this.startTime=r,this.startTimeIsInvalidated=!1,this.unplayedBufferSources.items().forEach(([e,t])=>{r<=e&&t.stop()})}let n=e.data.length*this.audioBufferMultiplier;this.samples.length!==n&&(this.index>0&&this.flush(this.index),this.samples=new Float32Array(n),this.index=0),this.channels=e.channels,this.sampleRate=e.sampleRate,this.samples.set(e.data,this.index),this.index+=e.data.length,this.samples.length<=this.index&&(this.flush(this.samples.length),this.index=0)}}),m(this,`play`,N(function*(){a.audio=a.getAudioContext(),yield a.resume()})),m(this,`pause`,()=>{}),m(this,`flushBuffer`,()=>{var e,t;this.unplayedBufferSources.items().forEach(([e,t])=>{try{t.stop()}catch(e){}}),this.unplayedBufferSources.clear(),this.preInitSampleQueue.clear(),this.samples=new Float32Array,this.index=0,this.lastSampleTimestamp=0,this.startTime=(e=(t=this.audio)==null?void 0:t.currentTime)==null?0:e,this.startTimeIsInvalidated=!0}),m(this,`resume`,N(function*(){if(!a._userProvidedMuted)try{var e;yield(e=a.audio)==null?void 0:e.resume(),a._muted=a._userProvidedMuted,a.startTimeIsInvalidated=!0}catch(e){throw a._muted=!0,e}})),m(this,`getAudioContext`,()=>this.audio?this.audio:this.setupContext()),m(this,`setupContext`,()=>{var e,t,n;return(e=this.audio)==null||e.unload(),this.audio=new nb,this.audio.on(`state`,e=>{this.logger.info(`AudioContext state change`,{state:e}),e===`running`&&(this._muted=this._userProvidedMuted,this.setGain(this._volume)),!this.ignoreSuspendCalls&&this.emit(`state change`,e)}),this.audio.on(`stuck`,()=>{this.reInitWhenStuck&&(this.logger.info(`Re-init audio context`),this.setupContext(),this.resume().catch(S),this.emit(`stuck`))}),(t=this.gainNode)==null||t.disconnect(),this.gainNode=this.audio.createGain(),this.setGain(this._volume),this.startTime=this.audio.currentTime,(n=this.splitter)==null||n.disconnect(),this.splitter=this.audio.createSplitter(),this.audio}),m(this,`setGain`,e=>{this.gainNode&&(this.gainNode.gain.value=this._muted?0:e)}),this._muted=n,this._userProvidedMuted=n,this.logger=e,this.clockSource=t,this.reInitWhenStuck=r,this._bufferTime=i,this.audioBufferMultiplier=ob(i)}useMediaStreamDestination(){var e;let t=this.getAudioContext(),n=t.getMediaStreamDestination();return(e=this.gainNode)==null||e.connect(n),t.isRunning||t.resume().catch(()=>{}),n}useDefaultDestination(){var e;let t=this.getAudioContext().getDefaultDestination();return(e=this.gainNode)==null||e.connect(t),t}};rb=sb,m(sb,`create`,(e,t,n)=>new rb(e,t,n)),h();var cb,lb=class{constructor(e,t,n,r,i,a){m(this,`staleFrameThresholdMs`,400),m(this,`pool`,void 0),m(this,`logger`,void 0),m(this,`videoRenderer`,new Bi),m(this,`videoFrameCanvas2DRenderer`,null),m(this,`renderQueue`,[]),m(this,`clockSource`,void 0),m(this,`isFirstFrame`,!0),m(this,`usingWebCodecs`,!1),m(this,`onCanvasChangeCallback`,void 0),m(this,`onRendererErrorCallback`,void 0),m(this,`animationFrameRequest`,void 0),m(this,`firstFrameAnimationFrameRequest`,void 0),m(this,`pendingFirstFrameSample`,void 0),m(this,`renderedFrameCount`,0),m(this,`rendererDroppedFrameCount`,0),m(this,`renderTargetSize`,void 0),m(this,`load`,()=>{this.videoRenderer.load(),this.subscribeToContextLost(this.videoRenderer)}),m(this,`unload`,()=>(this.stopRender(),this.clearRenderQueue(),this.unsubscribeFromContextLost(this.videoRenderer),this.videoRenderer.unload(),this.videoFrameCanvas2DRenderer&&(this.unsubscribeFromContextLost(this.videoFrameCanvas2DRenderer),this.videoFrameCanvas2DRenderer.unload()),Promise.resolve())),m(this,`suspend`,()=>{this.clearRenderQueue(),this.stopRender()}),m(this,`unsuspend`,()=>{this.animationFrameRequest===void 0&&(this.animationFrameRequest=requestAnimationFrame(this.render))}),m(this,`element`,()=>this.usingWebCodecs&&this.videoFrameCanvas2DRenderer?this.videoFrameCanvas2DRenderer.canvas:this.videoRenderer.canvas),m(this,`getStatistics`,()=>({renderedFrameCount:this.renderedFrameCount,rendererDroppedFrameCount:this.rendererDroppedFrameCount})),m(this,`resetSize`,()=>{this.videoRenderer.resetSize()}),m(this,`setActiveCues`,(e,t)=>{this.usingWebCodecs&&this.videoFrameCanvas2DRenderer?this.videoFrameCanvas2DRenderer.setActiveCues(e,t):this.usingWebCodecs||this.videoRenderer.getTextRenderer().setActiveCues(e,t)}),m(this,`onDecodedFrame`,e=>{if(e.type===`video`)if(this.isFirstFrame)this.isFirstFrame=!1,this.pendingFirstFrameSample=e,this.firstFrameAnimationFrameRequest=requestAnimationFrame(()=>{this.firstFrameAnimationFrameRequest=void 0;let e=this.pendingFirstFrameSample;this.pendingFirstFrameSample=void 0,e&&this.renderSample(e)});else{let t=(this.clockSource.currentTime-this.staleFrameThresholdMs)/1e3;this.renderQueue=this.renderQueue.filter(n=>{let r=this.samplePresentationTime(n),i=this.samplePresentationTime(e),a=r>t&&r<=i;return a||this.releaseSampleResources(n),a}),this.renderQueue.push(e)}}),m(this,`render`,()=>{let e=this.clockSource.currentTime,t=this.renderQueue[0],n,r=0;for(;t&&this.samplePresentationTime(t)*1e3<=e;)t=this.renderQueue.shift(),t&&(r++,n&&this.releaseSampleResources(n),n=t),t=this.renderQueue[0];n&&this.renderSample(n),this.rendererDroppedFrameCount+=Math.max(r-1,0),this.animationFrameRequest=requestAnimationFrame(this.render)}),m(this,`renderSample`,e=>{if(this.renderedFrameCount++,e.videoFrame){let n=this.videoFrameCanvas2DRenderer;if(!this.usingWebCodecs){var t;this.logger.info(`Switching to Canvas2D renderer for WebCodecs`),n||(n=new Mr,n.load(),this.subscribeToContextLost(n),this.videoFrameCanvas2DRenderer=n);let e=this.videoRenderer.canvas,r=n.canvas;if(e.parentElement)try{e.parentElement.replaceChild(r,e)}catch(e){}this.usingWebCodecs=!0,(t=this.onCanvasChangeCallback)==null||t.call(this)}n?n.render(e,this.getSubtitlePadding()):this.videoRenderer.render(e,this.renderTargetSize),e.videoFrame.close()}else{if(this.usingWebCodecs){var n;this.logger.info(`Switching back to WebGL renderer for WASM`);let t=this.videoFrameCanvas2DRenderer;if(!t){this.usingWebCodecs=!1,this.videoRenderer.render(e,this.renderTargetSize),e.buffer.byteLength>0&&this.pool.reclaim(e.buffer);return}let r=t.canvas,i=this.videoRenderer.canvas;if(r.parentElement)try{r.parentElement.replaceChild(i,r)}catch(e){}this.usingWebCodecs=!1,(n=this.onCanvasChangeCallback)==null||n.call(this)}this.videoRenderer.render(e,this.renderTargetSize)}e.buffer.byteLength>0&&this.pool.reclaim(e.buffer)}),m(this,`stopRender`,()=>{this.animationFrameRequest!==void 0&&(cancelAnimationFrame(this.animationFrameRequest),this.animationFrameRequest=void 0),this.firstFrameAnimationFrameRequest!==void 0&&(cancelAnimationFrame(this.firstFrameAnimationFrameRequest),this.firstFrameAnimationFrameRequest=void 0),this.pendingFirstFrameSample&&(this.releaseSampleResources(this.pendingFirstFrameSample),this.pendingFirstFrameSample=void 0)}),m(this,`clearRenderQueue`,()=>{this.renderQueue.forEach(e=>{this.releaseSampleResources(e)}),this.renderQueue=[]}),m(this,`onRendererContextLost`,e=>{var t;(t=this.onRendererErrorCallback)==null||t.call(this,e)}),m(this,`subscribeToContextLost`,e=>{let t=e;typeof t.on==`function`&&t.on(`context lost`,this.onRendererContextLost)}),m(this,`unsubscribeFromContextLost`,e=>{let t=e;typeof t.off==`function`&&t.off(`context lost`,this.onRendererContextLost)}),m(this,`getSubtitlePadding`,()=>{let e=this.renderTargetSize.style.getPropertyValue(`--vindral-subtitle-offset`)||this.renderTargetSize.style.getPropertyValue(`--vindral-control-bar-offset`),t=parseInt(e||`0`,10);return Number.isNaN(t)?0:-t}),m(this,`samplePresentationTime`,e=>(e.timestamp+(e.compositionTimeOffset||0))/e.timescale),m(this,`releaseSampleResources`,e=>{try{var t;(t=e.videoFrame)==null||t.close()}catch(e){}e.buffer.byteLength>0&&this.pool.reclaim(e.buffer)}),this.logger=e,this.clockSource=t,this.pool=n,this.renderTargetSize=r||this.videoRenderer.canvas,this.onCanvasChangeCallback=i,this.onRendererErrorCallback=a}};cb=lb,m(lb,`create`,(e,t,n,r,i,a)=>new cb(e,t,n,r,i,a)),E(),A(),M();var ub=new WeakMap,db=class{constructor(){T(this,ub,[]),k(ub,this,[])}addTextTrack(e,t,n){let r=[],i={kind:e,label:t,language:n,mode:`disabled`,cues:r,addCue:e=>{r.push(e)},removeCue:e=>{let t=r.findIndex(t=>t===e);t!==-1&&r.splice(t,1)}};return j(ub,this).push(i),i}set language(e){j(ub,this).forEach(t=>{t.language===e?t.mode=`showing`:t.mode=`hidden`})}get language(){var e;return(e=j(ub,this).find(e=>e.mode===`showing`))==null?void 0:e.language}getActiveCues(e){let t=j(ub,this).find(e=>e.mode===`showing`);return t?t.cues.filter(({startTime:t,endTime:n})=>e>=t&&e<=n):[]}};H(),h();var fb=(e,t)=>{let n;for(n=t;e>1;e--)n+=t;return n},pb=class{constructor(){m(this,`audio`,void 0),m(this,`unmute`,()=>this.audio.play().catch(S));let e=document.createElement(`div`);e.innerHTML=`<audio x-webkit-airplay='deny'></audio>`;let t=e.children.item(0);if(t instanceof HTMLAudioElement)this.audio=t,this.audio.controls=!1,this.audio.disableRemotePlayback=!0,this.audio.preload=`auto`,this.audio.src=`data:audio/mpeg;base64,//uQx`+fb(23,`A`)+`WGluZwAAAA8AAAACAAACcQCA`+fb(16,`gICA`)+fb(66,`/`)+`8AAABhTEFNRTMuMTAwA8MAAAAAAAAAABQgJAUHQQAB9AAAAnGMHkkI`+fb(320,`A`)+`//sQxAADgnABGiAAQBCqgCRMAAgEAH`+fb(15,`/`)+`7+n/9FTuQsQH//////2NG0jWUGlio5gLQTOtIoeR2WX////X4s9Atb/JRVCbBUpeRUq`+fb(18,`/`)+`9RUi0f2jn/+xDECgPCjAEQAABN4AAANIAAAAQVTEFNRTMuMTAw`+fb(97,`V`)+`Q==`,this.audio.loop=!1,this.audio.load();else throw Error(`Failed to create audio tag`)}};xi(),H(),h();var mb,hb=class{constructor(e,t,n,r,i,a,o,s){m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`audioPlayer`,void 0),m(this,`videoPlayer`,void 0),m(this,`pool`,void 0),m(this,`unmuter`,new pb),m(this,`_isPaused`,!1),m(this,`isDisconnected`,!1),m(this,`timers`,new zn),m(this,`isVideoRenderingEnabled`,!0),m(this,`isLoaded`,!1),m(this,`isSuspended`,!0),m(this,`isVideoPlayerLoaded`,!1),m(this,`textTracks`,new db),m(this,`playbackRate`,void 0),m(this,`reset`,()=>{}),m(this,`load`,()=>{this.audioPlayer.useDefaultDestination(),this.emitter.on(`decoded frame`,this.onDecodedFrame),this.emitter.on(`flush buffers`,this.flushBuffers),this.isLoaded=!0,this.isVideoRenderingEnabled&&(this.videoPlayer.load(),this.isVideoPlayerLoaded=!0,this.startTextTrackInterval())}),m(this,`unload`,()=>{this.emitter.off(`target buffer time`,this.onTargetBufferTime),this.emitter.off(`decoded frame`,this.onDecodedFrame),this.emitter.off(`flush buffers`,this.flushBuffers),this.audioPlayer.unload(),this.isVideoPlayerLoaded&&(this.videoPlayer.unload(),this.isVideoPlayerLoaded=!1),this.timers.unload(),this.isLoaded=!1}),m(this,`suspend`,()=>{this.isSuspended=!0,this.isVideoRenderingEnabled&&this.videoPlayer.suspend(),this.audioPlayer.suspend()}),m(this,`unsuspend`,()=>{this.isSuspended=!1,this.isVideoRenderingEnabled&&this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()}),m(this,`setVideoRenderingEnabled`,e=>{if(e!==this.isVideoRenderingEnabled&&(this.isVideoRenderingEnabled=e,this.isLoaded)){if(!e){this.timers.unload(),this.videoPlayer.suspend();return}this.isVideoPlayerLoaded||(this.videoPlayer.load(),this.isVideoPlayerLoaded=!0),this.startTextTrackInterval(),this.isSuspended||this.videoPlayer.unsuspend()}}),m(this,`element`,()=>this.videoPlayer.element()),m(this,`getStatistics`,()=>this.videoPlayer.getStatistics()),m(this,`startTextTrackInterval`,()=>{this.timers.setInterval(()=>{if(!this.textTracks.language)return;let e=this.textTracks.getActiveCues(this.currentTime/1e3);this.videoPlayer.setActiveCues(e,{width:this.videoPlayer.element().clientWidth,height:this.videoPlayer.element().clientHeight})},100)}),m(this,`flushBuffers`,()=>{this.audioPlayer.flushBuffer()}),m(this,`onTargetBufferTime`,e=>{this.audioPlayer.bufferTime=e}),m(this,`activateAudioPlayer`,()=>(this.isDisconnected&&(this.isDisconnected=!1,this.audioPlayer.useDefaultDestination()),this._isPaused=!1,this.unmuter.unmute(),this.audioPlayer.play())),m(this,`onDecodedFrame`,e=>{try{this.audioPlayer.onDecodedFrame(e)}catch(e){e instanceof Error&&this.emitter.emit(`error`,ri(!1,e))}this.isVideoRenderingEnabled&&this.videoPlayer.onDecodedFrame(e)}),this.logger=t,this.emitter=e,this.pool=n,this.emitter.on(`target buffer time`,this.onTargetBufferTime),this.audioPlayer=sb.create(this.logger.createContext(`AudioPlayerModule`),r,{muted:i,reInitWhenStuck:!0,bufferTime:s}),a!==void 0&&(this.audioPlayer.volume=a),this.audioPlayer.on(`stuck`,()=>{this.isDisconnected=!0}),this.audioPlayer.on(`state change`,()=>{this.emitter.emit(`volume state`,{volume:this.volume,isMuted:this.muted})}),this.videoPlayer=lb.create(this.logger.createContext(`VideoPlayerModule`),this.audioPlayer,this.pool,void 0,o)}get volume(){return this.audioPlayer.volume}set volume(e){this.audioPlayer.volume=e}get muted(){return this.audioPlayer.muted}set muted(e){let t=this.muted;this.audioPlayer.muted=e,!e&&t&&this.activateAudioPlayer().catch(S)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(e){this.audioPlayer.currentTime=e}get isActivated(){return this.audioPlayer.isActivated}set isActivated(e){this.audioPlayer.isActivated=e}get seekTime(){return this.audioPlayer.seekTime}get totalSeekTime(){return this.audioPlayer.totalSeekTime}get isPaused(){return this._isPaused}get isSeeking(){return this.audioPlayer.isSeeking}get audioNode(){return this.audioPlayer.audioNode}play(){this.activateAudioPlayer().then(()=>{this.emitter.emit(`media element state`,`playing`)}).catch(()=>{this.emitter.emit(`needs user input`,{forAudio:!0,forVideo:!1})})}pause(){this._isPaused=!0,this.audioPlayer.pause(),this.emitter.emit(`media element state`,`paused`)}};mb=hb,m(hb,`create`,(e,t,n,r,i,a,o,s)=>new mb(e,t,n,r,i,a,o,s)),xi(),H(),h();var gb,_b=class{constructor(e,t,n,r,{muted:i,volume:a,type:o,poster:s,offscreenCanvas:c,bufferTime:l}){m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`mediaElement`,void 0),m(this,`audioPlayer`,void 0),m(this,`videoPlayer`,void 0),m(this,`pool`,void 0),m(this,`isDisconnected`,!0),m(this,`_userProvidedMuted`,!1),m(this,`timers`,new zn),m(this,`offscreenCanvas`,void 0),m(this,`nativeTextTrack`,void 0),m(this,`nativeTrackCues`,[]),m(this,`volumeState`,void 0),m(this,`textTracks`,new db),m(this,`reset`,()=>{}),m(this,`load`,()=>{this.mediaElement.load(),this.emitter.on(`decoded frame`,this.onDecodedFrame),this.emitter.on(`flush buffers`,this.flushBuffers),this.emitter.on(`ios-hack: reset size`,this.resetCanvasSize),this.emitter.on(`enter picture in picture`,this.onEnterIOSHack),this.emitter.on(`exit picture in picture`,this.onExitIOSHack),this.element().element.addEventListener(`webkitendfullscreen`,this.onExitIOSHack),this.element().element.addEventListener(`webkitbeginfullscreen`,this.onEnterIOSHack),this.videoPlayer.load(),this.nativeTextTrack=this.mediaElement.element.addTextTrack(`subtitles`,``,``),this.nativeTextTrack.mode=`showing`,this.timers.setInterval(()=>{if(!this.textTracks.language){this.clearNativeTrackCues();return}let e=this.textTracks.getActiveCues(this.currentTime/1e3);this.updateNativeTrackCues(e)},100)}),m(this,`unload`,()=>{this.emitter.off(`target buffer time`,this.onTargetBufferTime),this.emitter.off(`decoded frame`,this.onDecodedFrame),this.emitter.off(`flush buffers`,this.flushBuffers),this.emitter.off(`ios-hack: reset size`,this.resetCanvasSize),this.emitter.off(`enter picture in picture`,this.onEnterIOSHack),this.emitter.off(`exit picture in picture`,this.onExitIOSHack),this.element().element.removeEventListener(`webkitendfullscreen`,this.onExitIOSHack),this.element().element.removeEventListener(`webkitbeginfullscreen`,this.onEnterIOSHack),this.clearNativeTrackCues(),this.nativeTextTrack=void 0,this.mediaElement.unload(),this.timers.unload(),this.audioPlayer.unload(),this.videoPlayer.unload()}),m(this,`suspend`,()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()}),m(this,`unsuspend`,()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()}),m(this,`element`,()=>this.mediaElement),m(this,`getStatistics`,()=>this.videoPlayer.getStatistics()),m(this,`activateAudioPlayer`,()=>(this.isDisconnected&&this.connectStreams(),this.audioPlayer.play())),m(this,`flushBuffers`,()=>{this.audioPlayer.flushBuffer()}),m(this,`onTargetBufferTime`,e=>{this.audioPlayer.bufferTime=e}),m(this,`resetCanvasSize`,()=>{this.videoPlayer.resetSize()}),m(this,`onEnterIOSHack`,()=>{this.mediaElement._iosHackEnterPiPMode()}),m(this,`onExitIOSHack`,()=>{this.mediaElement._iosHackExitPiPMode()}),m(this,`onDecodedFrame`,e=>{try{this.audioPlayer.onDecodedFrame(e)}catch(e){e instanceof Error&&this.emitter.emit(`error`,ri(!1,e))}this.offscreenCanvas||this.videoPlayer.onDecodedFrame(e)}),m(this,`onVideoPlayerError`,e=>{if(e instanceof U){this.emitter.emit(`error`,e);return}this.emitter.emit(`error`,ti(!1,e))}),m(this,`connectStreams`,()=>{let e=this.offscreenCanvas||this.videoPlayer.element();this.logger.info(`Connecting streams using ${this.offscreenCanvas?`OffscreenCanvas`:`VideoPlayer`} canvas (${e.width}x${e.height})`);let t=e.captureStream(),n=this.audioPlayer.useMediaStreamDestination().stream,r=[...t.getTracks(),...n.getTracks()];this.logger.info(`Video tracks: ${t.getTracks().length}, Audio tracks: ${n.getTracks().length}`);let i=this.mediaElement.element.srcObject;i instanceof MediaStream&&i.getVideoTracks().forEach(e=>e.stop()),this.mediaElement.element.srcObject=new MediaStream(r),this.isDisconnected=!1}),m(this,`setOffscreenCanvas`,e=>{this.offscreenCanvas!==e&&(this.offscreenCanvas=e,this.reconnectCanvasStream())}),m(this,`reconnectCanvasStream`,()=>{if(!this.isDisconnected){let e=!this.mediaElement.element.paused;this.logger.info(`Reconnecting canvas stream after renderer change`,{wasPlaying:e}),this.connectStreams(),e&&this.mediaElement.tryPlay()}}),m(this,`clearNativeTrackCues`,()=>{if(this.nativeTextTrack){for(let e of this.nativeTrackCues)try{this.nativeTextTrack.removeCue(e)}catch(e){}this.nativeTrackCues=[]}}),m(this,`updateNativeTrackCues`,e=>{let t=this.nativeTextTrack;if(!t)return;let n=e.map(e=>e.text),r=this.nativeTrackCues.map(e=>e.text);if(!(n.length===r.length&&n.every((e,t)=>e===r[t]))){this.clearNativeTrackCues();for(let n of e){let e=new VTTCue(0,999999999,n.text);t.addCue(e),this.nativeTrackCues.push(e)}}}),m(this,`updateVolumeState`,()=>{let e={isMuted:this.muted,volume:this.volume};Rt(e,this.volumeState)||(this.volumeState=e,this.emitter.emit(`volume state`,this.volumeState))}),this.logger=t,this.emitter=e,this.pool=n,this._userProvidedMuted=i,this.offscreenCanvas=c,this.emitter.on(`target buffer time`,this.onTargetBufferTime),this.mediaElement=new el({poster:s,type:o,muted:i,volume:a,autoplay:!1,logger:this.logger.createContext(`MediaElement`)}),this.mediaElement.on(`volume state`,e=>{this.updateVolumeState(),!e.isMuted&&!this.audioPlayer.isContextRunning&&this.activateAudioPlayer().catch(S),e.isMuted||(this._userProvidedMuted=!1)}),this.mediaElement.on(`media element state`,e=>{e===`paused`&&this.audioPlayer.flushBuffer(),this.emitter.emit(`media element state`,e)}),this.audioPlayer=sb.create(this.logger.createContext(`AudioPlayerModule`),r,{muted:!1,reInitWhenStuck:!1,bufferTime:l}),this.audioPlayer.on(`stuck`,()=>{this.isDisconnected=!0}),this.audioPlayer.on(`state change`,e=>{e===`suspended`||e===`interrupted`?this.mediaElement.muted=!0:e===`running`&&(this.mediaElement.muted=this._userProvidedMuted||document.visibilityState===`hidden`),this.updateVolumeState()}),this.videoPlayer=lb.create(this.logger.createContext(`VideoPlayerModule`),this.audioPlayer,this.pool,this.mediaElement.element,()=>this.reconnectCanvasStream(),this.onVideoPlayerError),this.volumeState={volume:this.volume,isMuted:this.muted}}get volume(){return this.mediaElement.volume}set volume(e){this.mediaElement.volume=e}get muted(){return this.mediaElement.muted||this.audioPlayer.muted}set muted(e){let t=this.muted;this._userProvidedMuted=e,this.mediaElement.muted=e,!e&&t&&this.activateAudioPlayer().catch(S)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(e){this.audioPlayer.currentTime=e}get isActivated(){return this.mediaElement.isActivated}set isActivated(e){this.mediaElement.isActivated=e}get seekTime(){return this.mediaElement.seekTime}get totalSeekTime(){return this.mediaElement.totalSeekTime}get isPaused(){return this.mediaElement.isPaused}get isSeeking(){return this.mediaElement.isSeeking}get audioNode(){return this.audioPlayer.audioNode}play(){let e=this._userProvidedMuted;return this.activateAudioPlayer().catch(()=>{e||this.emitter.emit(`needs user input`,{forAudio:!0,forVideo:!1})}),this.mediaElement.play()}pause(){this.mediaElement.pause()}};gb=_b,m(_b,`create`,(e,t,n,r,i)=>new gb(e,t,n,r,i)),H(),h();var vb=()=>e=>yb(e.buffered.start(0),e.buffered.end(e.buffered.length-1)),yb=(e,t)=>n=>n.remove(Math.max(0,e),Math.min(1/0,t)),bb=e=>t=>t.appendBuffer(e),xb=e=>t=>t.changeType(e),Sb=e=>t=>e(t),Cb=class{constructor(e){m(this,`commandQueue`,[]),m(this,`sourceBuffer`,void 0),m(this,`errorCallback`,void 0),m(this,`currentInit`,void 0),m(this,`setErrorCallback`,e=>{this.errorCallback=e}),m(this,`onError`,e=>{var t;(t=this.errorCallback)==null||t.call(this,e)}),m(this,`handleQueue`,()=>{if(!this.sourceBuffer.updating){var e;(e=this.commandQueue.shift())==null||e.execute(this.sourceBuffer)}}),m(this,`appendBuffer`,(e,t)=>new Promise((n,r)=>{if(t&&this.currentInit!==t){let e=new Ot(bb(t),n,r);this.commandQueue.push(e),this.currentInit=t}let i=new Ot(bb(e),n,r);this.commandQueue.push(i),this.handleQueue()})),m(this,`execute`,e=>new Promise((t,n)=>{let r=new Ot(Sb(e),t,n);this.commandQueue.push(r),this.handleQueue()})),m(this,`buffered`,()=>this.sourceBuffer.buffered),m(this,`removeFromMediaSource`,e=>{this.dispose(),e.removeSourceBuffer(this.sourceBuffer)}),m(this,`dispose`,()=>{this.sourceBuffer.removeEventListener(`updateend`,this.handleQueue),this.sourceBuffer.removeEventListener(`error`,this.onError),this.commandQueue=[],this.errorCallback=void 0}),m(this,`changeType`,e=>new Promise((t,n)=>{let r=new Ot(xb(e),t,n);this.commandQueue.push(r),this.handleQueue()})),m(this,`removeBuffer`,(e,t)=>new Promise((n,r)=>{let i=new Ot(yb(e,t),n,r);this.commandQueue.push(i),this.handleQueue()})),m(this,`flush`,()=>new Promise((e,t)=>{let n=new Ot(vb,e,t);this.commandQueue.push(n),this.handleQueue()})),this.sourceBuffer=e,this.sourceBuffer.addEventListener(`updateend`,this.handleQueue),this.sourceBuffer.addEventListener(`error`,this.onError)}};H(),h();var wb=class extends Bt{constructor(){super(),m(this,`MediaSource`,ze()),m(this,`mediaSource`,new this.MediaSource),m(this,`isOpen`,()=>this.mediaSource.readyState===`open`),m(this,`isClosed`,()=>this.mediaSource.readyState===`closed`),m(this,`isEnded`,()=>this.mediaSource.readyState===`ended`),m(this,`createObjectURL`,()=>URL.createObjectURL(this.mediaSource)),m(this,`attach`,e=>{let t=e;if(`srcObject`in t)try{t.srcObject=this.mediaSource}catch(e){if(e instanceof Error&&e.name!==`TypeError`)throw e;t.src=this.createObjectURL()}else e.src=this.createObjectURL()}),m(this,`detach`,e=>{if(this.mediaSource&&this.mediaSource.readyState===`open`)try{this.mediaSource.endOfStream()}catch(e){}e.srcObject&&(e.srcObject=null),e.src!==``&&(URL.revokeObjectURL(e.src),e.removeAttribute(`src`)),e.load()}),m(this,`addSourceBuffer`,e=>new Cb(this.mediaSource.addSourceBuffer(e))),m(this,`removeSourceBuffer`,e=>{e.removeFromMediaSource(this.mediaSource)}),m(this,`endOfStream`,e=>{this.mediaSource.endOfStream(e)}),m(this,`onSourceOpen`,()=>{this.setDurationIfNeeded(),this.emit(`source open`)}),m(this,`onSourceEnded`,()=>this.emit(`source ended`)),m(this,`onSourceClosed`,()=>this.emit(`source close`)),m(this,`setDurationIfNeeded`,()=>{if(Number.isNaN(this.mediaSource.duration)&&this.mediaSource.readyState===`open`){for(let e=0;e<this.mediaSource.sourceBuffers.length;e++){let t=this.mediaSource.sourceBuffers[e];if(t!=null&&t.updating)return}this.mediaSource.duration=1/0}}),this.mediaSource.addEventListener(`sourceopen`,this.onSourceOpen),this.mediaSource.addEventListener(`sourceclose`,this.onSourceClosed),this.mediaSource.addEventListener(`sourceended`,this.onSourceEnded)}};m(wb,`isTypeSupported`,e=>{var t,n;return(t=(n=ze())==null?void 0:n.isTypeSupported(e))==null?!1:t}),xi(),H(),h(),B(),P();var Tb,Eb=class{constructor(){m(this,`initSegments`,new Map),m(this,`set`,(e,t,n)=>{var r;let i=(r=this.initSegments.get(e))==null?new Map:r;i.set(t,n),this.initSegments.set(e,i)}),m(this,`get`,(e,t)=>{var n;return(n=this.initSegments.get(e))==null?void 0:n.get(t)})}};function Db(e,{mediaSource:t,mimeType:n,codec:r}){return z(z({},e),{},{state:`initialized`,mimeType:n,sourceBufferMimeType:n,codec:r,sourceBuffer:t.addSourceBuffer(n),isWorkingOnPendingSamples:!1,sequenceNumber:0,lastBufferCleanupTime:Date.now()})}function Ob({initSegments:e,pendingSamples:t}){return{state:`uninitialized`,initSegments:e==null?new Eb:e,sequenceNumber:0,isWorkingOnPendingSamples:!1,hasFirstSync:t.some(e=>e.isSync),pendingSamples:t==null?[]:t,pendingSamplesOffset:0,consecutiveQuotaExceededErrorCount:0,successfulAppendCalls:0}}var kb=class{constructor(e,t,n){var r=this;m(this,`maxChunkSize`,20),m(this,`minConsecutiveErrorsBeforeEmit`,5),m(this,`maxSecondsInBuffer`,60),m(this,`logger`,void 0),m(this,`timers`,zn.create()),m(this,`emitter`,void 0),m(this,`mediaElement`,void 0),m(this,`mediaSource`,new wb),m(this,`trackContexts`,new Map),m(this,`autoRecoverFromMediaErrors`,!0),m(this,`quotaErrorCount`,0),m(this,`recoveredFromErrorCount`,0),m(this,`sourceOpenStartTime`,Date.now()),m(this,`sourceOpenEndTime`,Date.now()),m(this,`pendingTracksToAddSourceBuffers`,void 0),m(this,`hasAddedInitialPosterFrame`,!0),m(this,`videoKeyframeTimestamps`,[]),m(this,`isReopening`,!1),m(this,`playbackStallCount`,0),m(this,`hasStartedPlayback`,!1),m(this,`isPlaybackStalled`,!1),m(this,`load`,()=>{this.emitter.on(`init segment`,this.init),this.emitter.on(`coded sample`,this.onCodedSample),this.emitter.on(`flush buffers`,this.flushBuffers),this.emitter.on(`fragment`,this.onFragment)}),m(this,`unload`,()=>{this.logger.debug(`Unloading module...`),this.emitter.off(`init segment`,this.init),this.emitter.off(`coded sample`,this.onCodedSample),this.emitter.off(`flush buffers`,this.flushBuffers),this.emitter.off(`fragment`,this.onFragment),this.mediaSource.off(`source ended`,this.onSourceEnded),this.mediaSource.off(`source open`,this.onSourceOpen),this.mediaElement.removeEventListener(`error`,this.onMediaElementError),this.mediaElement.removeEventListener(`waiting`,this.onPlaybackStall),this.mediaElement.removeEventListener(`stalled`,this.onPlaybackStall),this.mediaElement.removeEventListener(`playing`,this.onPlaybackProgress),this.mediaElement.removeEventListener(`pause`,this.onPlaybackPauseOrSeek),this.mediaElement.removeEventListener(`seeking`,this.onPlaybackPauseOrSeek),this.mediaSource.detach(this.mediaElement),this.trackContexts.forEach(e=>{e.state===`initialized`&&e.sourceBuffer.dispose(),e.pendingSamples=[],e.pendingSamplesOffset=0}),this.videoKeyframeTimestamps=[],this.timers.unload(),this.logger.debug(`Unloaded module`)}),m(this,`getStatistics`,()=>{var e,t;let n={quotaErrorCount:this.quotaErrorCount,mediaSourceOpenTime:this.sourceOpenEndTime-this.sourceOpenStartTime,playbackStallCount:this.playbackStallCount,successfulAudioAppendsCalls:(e=this.trackContexts.get(`audio`))==null?void 0:e.successfulAppendCalls,successfulVideoAppendCalls:(t=this.trackContexts.get(`video`))==null?void 0:t.successfulAppendCalls,videoKeyframeIntervalMs:jt(this.videoKeyframeTimestamps),videoRenderer:`MSE`,videoDecoder:`MSE`,audioRenderer:`MSE`,audioDecoder:`MSE`};if(this.mediaElement instanceof HTMLVideoElement){var r,i;let e=(r=(i=this.mediaElement).getVideoPlaybackQuality)==null?void 0:r.call(i);n.totalVideoFrames=e==null?void 0:e.totalVideoFrames,n.droppedVideoFrames=e==null?void 0:e.droppedVideoFrames}return n}),m(this,`flushBuffers`,()=>{this.videoKeyframeTimestamps=[],this.trackContexts.forEach(e=>{e.pendingSamples=[],e.pendingSamplesOffset=0,e.hasFirstSync=!1,e.state!==`uninitialized`&&this.mediaSource.isOpen()&&e.sourceBuffer.removeBuffer(0,1/0).catch(e=>{this.logger.error(`Failed to remove buffer`,e)})})}),m(this,`setTrackContexts`,(e=new Map)=>{this.logger.debug(`setTrackContexts`),[`audio`,`video`].forEach(t=>{var n,r,i;let a=e.get(t),o=(n=a==null?void 0:a.pendingSamples)==null?[]:n,s=a==null?void 0:a.initSegments,c=(r=a==null?void 0:a.pendingSamplesOffset)==null?0:r;for(;c<o.length&&!((i=o[c])!=null&&i.isSync);)c++;let l=Ob({pendingSamples:o,initSegments:s});l.pendingSamplesOffset=c,this.trackContexts.set(t,l)})}),m(this,`resetRemovedTrackContexts`,e=>{let t=new Set(e.map(e=>e.type));this.trackContexts.forEach((e,n)=>{if(t.has(n))return;e.state===`initialized`&&this.mediaSource.isOpen()&&this.mediaSource.removeSourceBuffer(e.sourceBuffer);let r=Ob({pendingSamples:[],initSegments:e.initSegments});this.trackContexts.set(n,r)})}),m(this,`isCurrentTrackContext`,(e,t)=>this.trackContexts.get(e)===t),m(this,`setSourceBuffers`,function(){var e=N(function*(e){if(r.mediaSource.isClosed()){r.pendingTracksToAddSourceBuffers=e;return}r.resetRemovedTrackContexts(e);let t=!0;for(let n of e){let e=r.trackContexts.get(n.type);if(!e||e.state===`uninitialized`||e.sourceBufferMimeType!==n.mimeType){t=!1;break}}if(t){r.logger.debug(`Already setup with the correct mime types`);return}for(let t of e){let e=r.trackContexts.get(t.type);if(e||(e=Ob({pendingSamples:[],initSegments:new Eb}),r.trackContexts.set(t.type,e)),e.state===`initialized`)t.mimeType!==e.sourceBufferMimeType&&(yield e.sourceBuffer.changeType(t.mimeType),e.sourceBufferMimeType=t.mimeType);else{let n=Db(e,{mimeType:t.mimeType,mediaSource:r.mediaSource,codec:t.codec});n.sourceBuffer.setErrorCallback(r.onSourceBufferError(t.type)),r.trackContexts.set(t.type,n)}}});return function(t){return e.apply(this,arguments)}}()),m(this,`getBuffer`,e=>{if(this.mediaSource.isClosed())return[];let t=this.trackContexts.get(e);return!t||t.state===`uninitialized`?[]:this.getBufferedRanges(t.sourceBuffer)}),m(this,`getBufferState`,e=>{let t=this.getCommonBufferedRangesForCurrentTracks();if(t)return{buffered:t,playbackState:this.getPlaybackStateForBufferedRanges(e,t)}}),m(this,`getNextBufferedRangeStart`,e=>{let t=this.getCommonBufferedRangesForCurrentTracks();if(t)return jb(e,t)}),m(this,`getVideoKeyframeTimestamps`,()=>this.videoKeyframeTimestamps),m(this,`init`,({initSegment:e,mimeType:t})=>{this.logger.debug(`Added init segment`,{channel:e.channelId,renditionId:e.renditionId});let n=this.trackContexts.get(e.type);if(!n)throw oi(e.type,e.renditionId);n.state===`initialized`&&(n.mimeType=t);let r=Cc({codec:e.codec,timescale:e.timescale,initData:e.data});r&&n.initSegments.set(e.channelId,e.renditionId,new Uint8Array(r))}),m(this,`append`,function(){var e=N(function*(e,t){let n=e[0];if(!n)return;let i=r.trackContexts.get(n.type),a=i==null?void 0:i.initSegments.get(n.channelId,n.renditionId);if(r.mediaSource.isClosed())return;if(!a)throw ii(n.renditionId,n.channelId);if(!i)throw oi(n.type,n.renditionId);if(i.state===`uninitialized`)throw si(n.type,n.renditionId);if(t){var o;let e=(n.timestamp+((o=n.compositionTimeOffset)==null?0:o))/n.timescale;if(yield i.sourceBuffer.removeBuffer(e,1/0),i.mimeType!==i.sourceBufferMimeType&&i.sourceBuffer.changeType)try{yield i.sourceBuffer.changeType(i.mimeType),i.sourceBufferMimeType=i.mimeType}catch(e){r.logger.warn(`changeType failed`,{from:i.sourceBufferMimeType,to:i.mimeType,error:e})}`fragmented`in n||(yield i.sourceBuffer.appendBuffer(a))}let s=Math.max(0,n.timestamp/n.timescale-r.maxSecondsInBuffer);s>0&&Date.now()-i.lastBufferCleanupTime>1e4&&(i.lastBufferCleanupTime=Date.now(),yield i.sourceBuffer.removeBuffer(0,s+10));try{let t=i.sequenceNumber;if(`fragmented`in n)for(let t of e)`initData`in t&&(yield i.sourceBuffer.appendBuffer(t.data,t.initData));else{let n=Ac(e,t++);yield i.sourceBuffer.appendBuffer(n)}i.sequenceNumber=t,i.consecutiveQuotaExceededErrorCount=0,i.successfulAppendCalls++}catch(e){throw e instanceof DOMException&&e.code===DOMException.QUOTA_EXCEEDED_ERR&&(r.quotaErrorCount++,i.consecutiveQuotaExceededErrorCount++,r.logger.error(`quota exceeded error`,{error:e})),e}});return function(t,n){return e.apply(this,arguments)}}()),m(this,`onFragment`,({fragment:e,mimeType:t,codec:n,channelId:r,renditionId:i})=>{let a=e.mediaType(),o=e.rawBytes(),s=e.header().rawBytes(),c=e.baseMediaDecodeTime(),l=e.timescale(),u=e.duration(),d=a===`video`?e.startsWithKeyframe():!0,f=e.compositionTimeOffset(0);if(a===`text`){this.logger.warn(`Skipping unexpected text fragment`);return}if(!n){this.logger.warn(`Skipping fragment with no codec`);return}let p=this.trackContexts.get(a);if(!p)throw oi(a);p.state===`initialized`&&t&&(p.mimeType=t,p.initSegments.set(r,i,s));let m={fragmented:!0,type:a,data:o,initData:s,timestamp:c,duration:u,timescale:l,channelId:r,renditionId:i,isSync:d,codec:n,fragment:e,compositionTimeOffset:f};this.onCodedSample(m)}),m(this,`onCodedSample`,e=>{if(e.duration===0)return;let t=this.trackContexts.get(e.type);if(!t)throw oi(e.type,e.renditionId);if(!(!t.hasFirstSync&&!e.isSync)){if(this.hasAddedInitialPosterFrame&&e.isSync&&e.type===`video`){this.hasAddedInitialPosterFrame=!1;let n=z({},e);`fragment`in n?(n.fragment=n.fragment.clone(),n.fragment.updateBaseMediaDecodeTime(0),n.data=n.fragment.rawBytes()):n.timestamp=0,t.pendingSamples.push(n)}if(t.hasFirstSync=!0,t.pendingSamples.push(e),e.type===`video`&&e.isSync){var n;let t=(e.timestamp+((n=e.compositionTimeOffset)==null?0:n))/e.timescale*1e3,r=this.videoKeyframeTimestamps[this.videoKeyframeTimestamps.length-1];r!==void 0&&t<r&&(this.videoKeyframeTimestamps=[]),this.videoKeyframeTimestamps.push(t),this.videoKeyframeTimestamps.length>20&&(this.videoKeyframeTimestamps=this.videoKeyframeTimestamps.slice(-20))}t.state!==`uninitialized`&&(t.isWorkingOnPendingSamples||Ib(t,this.append,this.maxChunkSize).catch(n=>{if(t.isWorkingOnPendingSamples=!1,!this.isReopening){if(!this.isCurrentTrackContext(e.type,t)){this.logger.debug(`Suppressing append error from stale track context`,{type:e.type});return}if(n instanceof Error){if(this.logger.error(`append failed`,{message:n.message,name:n.name}),n instanceof DOMException&&n.code===DOMException.QUOTA_EXCEEDED_ERR){if(t.consecutiveQuotaExceededErrorCount>=this.minConsecutiveErrorsBeforeEmit){let r=ai(!1,n,t.consecutiveQuotaExceededErrorCount,e.type);this.emitter.emit(`error`,r)}}else{let r=ai(!1,n,t.consecutiveQuotaExceededErrorCount,e.type);this.emitter.emit(`error`,r)}this.mediaElement.error&&this.onSourceEnded()}}}))}}),m(this,`onSourceBufferError`,e=>()=>{var t;this.logger.warn(`SourceBuffer error`,{trackType:e,mediaElementError:(t=this.mediaElement.error)==null?void 0:t.message})}),m(this,`onSourceOpen`,()=>{this.logger.debug(`source opened`),this.sourceOpenEndTime=Date.now(),this.isReopening=!1,this.pendingTracksToAddSourceBuffers&&(this.setSourceBuffers(this.pendingTracksToAddSourceBuffers),this.pendingTracksToAddSourceBuffers=void 0)}),m(this,`reopenMediaSource`,e=>{this.logger.info(`Re-opening MediaSource`,{reason:e}),this.isReopening=!0,this.recoveredFromErrorCount++;let t=!this.mediaElement.paused,n=[];this.trackContexts.forEach((e,t)=>{e.state===`initialized`&&n.push({type:t,mimeType:e.mimeType,codec:e.codec})}),this.sourceOpenStartTime=Date.now(),this.pendingTracksToAddSourceBuffers=n,this.mediaSource.detach(this.mediaElement),this.setTrackContexts(this.trackContexts),this.mediaSource.attach(this.mediaElement),t&&this.mediaElement.play().catch(S)}),m(this,`onMediaElementError`,()=>{let{error:e}=this.mediaElement;if(!e||this.isReopening)return;let t=ei(/AUDIO_RENDERER/.test(e.message)||!this.autoRecoverFromMediaErrors,e);this.logger.error(`MediaElement error`,{error:t}),this.emitter.emit(`error`,t),t.isFatal()||(this.emitter.emit(`recovered from media error`,{error:t,count:this.recoveredFromErrorCount}),this.reopenMediaSource(`media element error recovery`))}),m(this,`onSourceEnded`,()=>{this.mediaElement.error&&this.onMediaElementError(),this.logger.debug(`source ended`)}),m(this,`onPlaybackProgress`,()=>{this.hasStartedPlayback=!0,this.isPlaybackStalled=!1}),m(this,`onPlaybackPauseOrSeek`,()=>{this.isPlaybackStalled=!1}),m(this,`onPlaybackStall`,e=>{!this.hasStartedPlayback||this.mediaElement.paused||this.mediaElement.seeking||this.isPlaybackStalled||(this.playbackStallCount++,this.isPlaybackStalled=!0,this.logger.info(`Detected playback stall`,{event:e.type,currentTime:this.mediaElement.currentTime*1e3,playbackStallCount:this.playbackStallCount}))}),m(this,`getBufferedRanges`,e=>{let t=[];try{let n=e.buffered();if(!n)return[];for(let e=0;e<n.length;e++)t.push({start:n.start(e)*1e3,end:n.end(e)*1e3});return t}catch(e){return[]}}),m(this,`getInitializedTrackBuffers`,()=>{let e=[];return this.trackContexts.forEach(t=>{t.state!==`uninitialized`&&e.push(this.getBufferedRanges(t.sourceBuffer))}),e}),m(this,`getCommonBufferedRangesForCurrentTracks`,()=>{if(this.mediaSource.isClosed())return;let e=this.getInitializedTrackBuffers();if(e.length!==0)return this.getCommonBufferedRanges(e)}),m(this,`getCommonBufferedRanges`,e=>e.slice(1).reduce((e,t)=>Mb(e,t),e[0]?Array.from(e[0]):[])),m(this,`getPlaybackStateForBufferedRanges`,(e,t)=>Ab(e,t)?`playing`:`buffering`),this.logger=e,this.mediaElement=n,this.emitter=t}};Tb=kb,m(kb,`create`,(e,t,n)=>{let r=new Tb(e,t,n);return r.setTrackContexts(),r.mediaSource.on(`source ended`,r.onSourceEnded),r.mediaSource.on(`source open`,r.onSourceOpen),n.addEventListener(`error`,r.onMediaElementError),n.addEventListener(`waiting`,r.onPlaybackStall),n.addEventListener(`stalled`,r.onPlaybackStall),n.addEventListener(`playing`,r.onPlaybackProgress),n.addEventListener(`pause`,r.onPlaybackPauseOrSeek),n.addEventListener(`seeking`,r.onPlaybackPauseOrSeek),r.mediaSource.attach(n),r});var Ab=(e,t)=>t.some(t=>t.start<=e&&e<t.end),jb=(e,t)=>{for(let r=0;r<t.length;r++){let i=t[r];if(i){if(e<i.start)return i.start;if(i.start<=e&&e<i.end){var n;return(n=t[r+1])==null?void 0:n.start}}}},Mb=(e,t)=>{let n=[],r=0,i=0;for(;r<e.length&&i<t.length;){let a=e[r],o=t[i];if(!a||!o)break;let s=Math.max(a.start,o.start),c=Math.min(a.end,o.end);s<c&&n.push({start:s,end:c}),a.end<=o.end?r++:i++}return n},Nb=(e,t)=>{var n;let r=e.renditionId!==t.renditionId,i=e.channelId!==t.channelId,a=((n=e.timestamp)==null?0:n)>t.timestamp,o=e.type===`video`&&t.type===`video`&&`levelIdc`in e&&`levelIdc`in t&&e.levelIdc!==t.levelIdc,s=!1;return e.type===`video`&&t.type===`video`&&`width`in e&&`width`in t&&(s=t.width!==e.width||t.height!==e.height),i||r||a||s||o},Pb=32,Fb=e=>{let t=e.pendingSamplesOffset;if(t!==0){if(t>=e.pendingSamples.length){e.pendingSamples=[],e.pendingSamplesOffset=0;return}t<Pb||t*2<e.pendingSamples.length||(e.pendingSamples=e.pendingSamples.slice(t),e.pendingSamplesOffset=0)}},Ib=function(){var e=N(function*(e,t,n){for(e.isWorkingOnPendingSamples=!0;e.pendingSamplesOffset<e.pendingSamples.length;){let r=[],i=e.pendingSamplesOffset;for(let t=e.pendingSamplesOffset;t<e.pendingSamples.length;t++){i=t;let a=e.pendingSamples[t],o=e.pendingSamples[t+1];if(a&&(r.push(a),o)){if(Nb(a,o))break;let e=(a.timestamp+a.duration)/a.timescale;if(o.timestamp/o.timescale-e>.1)break}if(t-e.pendingSamplesOffset>=n-1)break}let a=r[0];if(!a)break;yield t(r,e.previousSample?Nb(e.previousSample,a):!0),e.pendingSamplesOffset=i+1,e.previousSample=r[r.length-1],Fb(e)}e.isWorkingOnPendingSamples=!1});return function(t,n,r){return e.apply(this,arguments)}}();H(),h(),P();var Lb,Rb=class{constructor(e,t){var n=this;m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`element`,void 0),m(this,`pictureInPictureWindow`,void 0),m(this,`unload`,()=>{this.emitter.off(`add picture in picture listener`,this.onEnablePictureInPicture),this.detachElementListeners()}),m(this,`onEnablePictureInPicture`,e=>{this.detachElementListeners(),this.element=e.element,e.element.addEventListener(`leavepictureinpicture`,this.onLeavePictureInPicture),e.element.addEventListener(`enterpictureinpicture`,this.onEnterPictureInPicture),St(e.element,!0)}),m(this,`getPictureInPictureSize`,()=>this.pictureInPictureWindow),m(this,`isPictureInPictureActive`,()=>this.isWebkitPresentationModeActive()||this.isStandardPictureInPictureActive()),m(this,`isPictureInPictureSupported`,()=>this.isWebkitPresentationModeSupported()||this.isStandardPictureInPictureSupported()),m(this,`requestPictureInPicture`,()=>(this.emitter.emit(`ios-hack: reset size`),this.isStandardPictureInPictureSupported()?this.requestStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode(`picture-in-picture`):Promise.reject(Error(`Picture in picture is not supported`)))),m(this,`exitPictureInPicture`,()=>this.isStandardPictureInPictureSupported()?this.exitStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode(`inline`):Promise.reject(Error(`Picture in picture is not supported`))),m(this,`getStatistics`,()=>({isPictureInPictureActive:this.isPictureInPictureActive()})),m(this,`detachElementListeners`,()=>{this.element&&(this.element.removeEventListener(`leavepictureinpicture`,this.onLeavePictureInPicture),this.element.removeEventListener(`enterpictureinpicture`,this.onEnterPictureInPicture),St(this.element,!1))}),m(this,`onLeavePictureInPicture`,()=>{this.pictureInPictureWindow=void 0,this.logger.debug(`Leave picture in picture`),this.emitter.emit(`exit picture in picture`)}),m(this,`onEnterPictureInPicture`,e=>{this.pictureInPictureWindow=vt(e),this.logger.debug(`Enter picture in picture`),this.emitter.emit(`enter picture in picture`,this)}),m(this,`requestStandardPictureInPicture`,N(function*(){if(!n.element)throw Error(`Picture in picture is not supported`);let e=pt(n.element);if(!e)throw Error(`Picture in picture is not supported`);yield e()})),m(this,`exitStandardPictureInPicture`,N(function*(){let e=mt();if(!e)throw Error(`Picture in picture is not supported`);yield e()})),m(this,`isStandardPictureInPictureSupported`,()=>!!this.element&&_t(this.element)),m(this,`isStandardPictureInPictureActive`,()=>!!this.element&>()),m(this,`isWebkitPresentationModeActive`,()=>!!this.element&&yt(this.element)===`picture-in-picture`),m(this,`requestWebkitPresentationMode`,function(){var e=N(function*(e){return n.element&&bt(n.element,e),Promise.resolve()});return function(t){return e.apply(this,arguments)}}()),m(this,`isWebkitPresentationModeSupported`,()=>!!this.element&&xt(this.element)),this.emitter=e,this.logger=t,this.emitter.on(`add picture in picture listener`,this.onEnablePictureInPicture)}};Lb=Rb,m(Rb,`create`,(e,t)=>new Lb(e,t)),h();var zb,Bb=class{constructor(e,t,n,r){m(this,`emitter`,void 0),m(this,`logger`,void 0),m(this,`clockSource`,void 0),m(this,`state`,`buffering`),m(this,`bufferFullness`,0),m(this,`targetBufferTime`,void 0),m(this,`lastBufferStateEvent`,`drained`),m(this,`firstFrameTime`,void 0),m(this,`currentTimeIsInRange`,!1),m(this,`needsInputForAudioCount`,0),m(this,`needsInputForVideoCount`,0),m(this,`unload`,()=>{this.emitter.off(`buffer state`,this.onBufferedStateChanged),this.emitter.off(`needs user input`,this.onNeedsUserInput)}),m(this,`setTargetBufferTime`,e=>{this.targetBufferTime=e,this.emitter.emit(`target buffer time`,e)}),m(this,`getTargetBufferTime`,()=>this.targetBufferTime),m(this,`getBufferFullness`,()=>this.bufferFullness),m(this,`getLastBufferStateEvent`,()=>this.lastBufferStateEvent),m(this,`getState`,()=>this.state),m(this,`getFirstFrameTime`,()=>this.firstFrameTime),m(this,`getStatistics`,()=>({bufferTime:this.targetBufferTime,needsInputForAudioCount:this.needsInputForAudioCount,needsInputForVideoCount:this.needsInputForVideoCount})),m(this,`onBufferedStateChanged`,({buffered:e,isPaused:t,playbackState:n})=>{let r=this.clockSource.currentTime,i=e.some(e=>e.start<=r&&r<e.end),a=e[e.length-1],o=a?a.end-a.start>=this.targetBufferTime:!1,s=a?Math.max(0,a.end-r)/this.targetBufferTime:0,c=t?`paused`:n,l=this.state;this.currentTimeIsInRange!==i&&!i?(this.lastBufferStateEvent=`drained`,this.emitter.emit(`buffer state event`,this.lastBufferStateEvent)):i&&o&&this.lastBufferStateEvent===`drained`&&(this.lastBufferStateEvent=`filled`,this.emitter.emit(`buffer state event`,this.lastBufferStateEvent)),c===`playing`&&!this.firstFrameTime&&(this.firstFrameTime=Date.now()),this.currentTimeIsInRange=i,this.state=c,this.bufferFullness=i?s:0,l!==c&&this.emitter.emit(`playback state`,c),this.emitter.emit(`buffer fullness`,this.bufferFullness)}),m(this,`onNeedsUserInput`,({forAudio:e,forVideo:t})=>{e&&this.needsInputForAudioCount++,t&&this.needsInputForVideoCount++}),this.emitter=e,this.logger=t,this.clockSource=n,this.targetBufferTime=r,this.emitter.on(`buffer state`,this.onBufferedStateChanged),this.emitter.on(`needs user input`,this.onNeedsUserInput),this.emitter.emit(`target buffer time`,r)}};zb=Bb,m(Bb,`create`,(e,t,n,r)=>new zb(e,t,n,r)),H(),h();var Vb,Hb=()=>({upgradesFromLevel:[],downgradesFromLevel:[],bufferingRanges:[],activeRanges:[],decodeRate:2**53-1}),Ub=()=>({levels:{},levelDowngrades:[],levelUpgrades:[],bufferFullness:0,general:Hb()}),Wb=class{constructor(e,t,n){m(this,`minBufferFullnessLengthForRegression`,6),m(this,`logger`,void 0),m(this,`emitter`,void 0),m(this,`timers`,zn.create()),m(this,`metrics`,Ub()),m(this,`bufferFullness`,new w(30)),m(this,`bufferFullnessRegression`,void 0),m(this,`currentLevel`,void 0),m(this,`isSuspended`,!1),m(this,`_fatalQosCount`,0),m(this,`targetBufferTime`,0),m(this,`renditionLevelSource`,void 0),m(this,`qualityIndexOrder`,[]),m(this,`hasAsserted`,!1),m(this,`load`,()=>{this.emitter.on(`playback state`,this.onPlaybackState),this.emitter.on(`buffer fullness`,this.onBufferFullness),this.emitter.on(`rendition level changed`,this.onRenditionLevelChanged),this.emitter.on(`video decode rate`,this.onVideoDecodeRate),this.emitter.on(`target buffer time`,this.onTargetBufferTime)}),m(this,`unload`,()=>{this.emitter.off(`playback state`,this.onPlaybackState),this.emitter.off(`buffer fullness`,this.onBufferFullness),this.emitter.off(`rendition level changed`,this.onRenditionLevelChanged),this.emitter.off(`video decode rate`,this.onVideoDecodeRate),this.emitter.off(`target buffer time`,this.onTargetBufferTime),this.suspend()}),m(this,`suspend`,()=>{this.isSuspended=!0,this.timers.unload(),this.stopBuffering(),this.unsetActive()}),m(this,`unsuspend`,()=>{this.isSuspended=!1,this.currentLevel&&this.setActive()}),m(this,`fatalQosGraceTime`,()=>1e4*(this.fatalQosCount+1)),m(this,`incrementFatalQosCount`,()=>{this._fatalQosCount++}),m(this,`getMetrics`,()=>this.metrics),m(this,`getLevelStats`,e=>{var t,n,r,i;let a=((t=(n=e.video)==null?void 0:n.bitRate)==null?0:t)+((r=(i=e.audio)==null?void 0:i.bitRate)==null?0:r);return this.metrics.levels[a]}),m(this,`getBufferFullnessRegression`,()=>this.bufferFullnessRegression),m(this,`getTargetBufferTime`,()=>this.targetBufferTime),m(this,`activeRatios`,()=>{let e=new Map,t=Un(this.metrics.general.activeRanges);if(Object.entries(this.metrics.levels).forEach(([n,r])=>{var i;let a=parseInt(n,10),o=t?Un(r.activeRanges)/t:0,s=this.getQualityIndex(a).toString();e.set(s,((i=e.get(s))==null?0:i)+o)}),!this.hasAsserted){let t=e.size?Math.abs(Array.from(e.values()).reduce((e,t)=>e+t,0)-1)<=.02:!0;t||(this.hasAsserted=!0,console.assert(t,`Active ratios should be close to 1 - actual: ${Array.from(e.values()).reduce((e,t)=>e+t,0)}`))}return e}),m(this,`bufferingRatios`,()=>{let e=new Map,t=Un(this.metrics.general.bufferingRanges);if(Object.entries(this.metrics.levels).forEach(([n,r])=>{var i;let a=parseInt(n,10),o=t?Un(r.bufferingRanges)/t:0,s=this.getQualityIndex(a).toString();e.set(s,((i=e.get(s))==null?0:i)+o)}),!this.hasAsserted){let t=Array.from(e.values()).reduce((e,t)=>e+t,0)<=1;t||(this.hasAsserted=!0,console.assert(t,`Buffering ratios should be less than 1 - actual: ${Array.from(e.values()).reduce((e,t)=>e+t,0)}`))}return e}),m(this,`bufferingEventsLast`,e=>this.metrics.general.bufferingRanges.filter(t=>t.start>=Date.now()-e).length),m(this,`timeSpentBufferingLast`,e=>Wn(this.metrics.general.bufferingRanges,e)),m(this,`timeSpentActiveLast`,e=>Wn(this.metrics.general.activeRanges,e)),m(this,`timeSpentPlayingInAtLeastLevelRatio`,e=>{var t,n,r,i;let a=this.timeSpentBuffering(),o=this.timeActive(),s=this.bufferingRatios(),c=this.activeRatios(),l=((t=(n=e.video)==null?void 0:n.bitRate)==null?0:t)+((r=(i=e.audio)==null?void 0:i.bitRate)==null?0:r),u=a/o;return Object.keys(this.metrics.levels).map(e=>parseInt(e,10)).filter(e=>e>=l).reduce((e,t)=>{var n,r;let i=this.getQualityIndex(t).toString();return((n=c.get(i))==null?0:n)-((r=s.get(i))==null?0:r)*u+e},0)}),m(this,`timeSpentBuffering`,()=>Un(this.metrics.general.bufferingRanges)),m(this,`timeActive`,()=>Un(this.metrics.general.activeRanges)),m(this,`getStatistics`,()=>{let e=this.timeSpentBuffering(),t=this.timeActive(),n=this.metrics.general.bufferingRanges.length,r=this.activeRatios(),i=t/6e4,a=t>0?e/t:0,o=Math.max(i,1),s=i>0?n/o:0,c=[...r].reduce((e,[t,n])=>e+parseInt(t,10)*n,0),l=6e4,u=this.timeSpentActiveLast(l),d=this.timeSpentBufferingLast(l),f=u>0?d/u:0,p=this.metrics.general.upgradesFromLevel.length+this.metrics.general.downgradesFromLevel.length,m=i>0?p/o:0,h=n>0?e/n:0;return{timeSpentBuffering:e,bufferingEventsCount:n,timeSpentRatio:[...r].reduce((e,[t,n])=>(e[t]=n,e),{}),fatalQosCount:this.fatalQosCount,bufferingRatio:a,bufferingEventsPerMinute:s,averageRenditionIndex:c,bufferingRatioPerMinute:f,renditionChangesPerMinute:m,timePerBufferingEvent:h}}),m(this,`onRenditionLevelChanged`,e=>{var t,n,r,i,a,o,s,c;let l=((t=(n=e.from)==null||(n=n.video)==null?void 0:n.bitRate)==null?0:t)+((r=(i=e.from)==null||(i=i.audio)==null?void 0:i.bitRate)==null?0:r),u=((a=(o=e.to)==null||(o=o.video)==null?void 0:o.bitRate)==null?0:a)+((s=(c=e.to)==null||(c=c.audio)==null?void 0:c.bitRate)==null?0:s);this.logger.info(`rendition level changed`,{fromLevel:l,toLevel:u}),this.metrics.general.activeRanges.length===0&&this.setActive(),e.from&&e.to&&(l<u?this.metrics.general.upgradesFromLevel.push(Date.now()):this.metrics.general.downgradesFromLevel.push(Date.now()));let d=!1;if(e.from){var f;let e=(f=this.metrics.levels[l])==null?Hb():f;l<u?e.upgradesFromLevel.push(Date.now()):e.downgradesFromLevel.push(Date.now()),Vn(e.activeRanges);let t=e.bufferingRanges[e.bufferingRanges.length-1];d=!!t&&!t.end,Vn(e.bufferingRanges),this.metrics.levels[l]=e}if(e.to){var p;let e=(p=this.metrics.levels[u])==null?Hb():p;Hn(e.activeRanges),d&&Hn(e.bufferingRanges),this.metrics.levels[u]=e,this.currentLevel=u}}),m(this,`onBufferFullness`,e=>{this.bufferFullness.push(e),this.metrics.bufferFullness=e,this.bufferFullness.items().length>=this.minBufferFullnessLengthForRegression&&(this.bufferFullnessRegression=this.calculateLinearRegression())}),m(this,`onPlaybackState`,e=>{switch(this.logger.info(`Playback state`,{state:e,currentLevel:this.currentLevel}),e){case`playing`:this.stopBuffering();break;case`buffering`:this.isSuspended||this.startBuffering();break}}),m(this,`onVideoDecodeRate`,e=>{var t;if(this.metrics.general.decodeRate=e,!this.currentLevel)return;let n=this.metrics.levels[(t=this.currentLevel)==null?0:t];n&&(n.decodeRate=e)}),m(this,`onTargetBufferTime`,e=>{this.targetBufferTime=e}),m(this,`calculateLinearRegression`,()=>Nt(this.bufferFullness.items().map((e,t)=>({x:t,y:e})))),m(this,`stopBuffering`,()=>{if(this.currentLevel){let e=this.metrics.levels[this.currentLevel];e&&Vn(e.bufferingRanges)}Vn(this.metrics.general.bufferingRanges)}),m(this,`startBuffering`,()=>{if(this.currentLevel){let e=this.metrics.levels[this.currentLevel];e&&Hn(e.bufferingRanges)}Hn(this.metrics.general.bufferingRanges)}),m(this,`unsetActive`,()=>{if(this.currentLevel){let e=this.metrics.levels[this.currentLevel];e&&Vn(e.activeRanges)}Vn(this.metrics.general.activeRanges)}),m(this,`getQualityIndex`,e=>{if(!this.qualityIndexOrder.length){var t,n;let e=((t=(n=this.renditionLevelSource)==null?void 0:n.getRenditionLevels())==null?[]:t).map(e=>{var t,n,r,i;return((t=(n=e.video)==null?void 0:n.bitRate)==null?0:t)+((r=(i=e.audio)==null?void 0:i.bitRate)==null?0:r)}).filter(e=>e>0);this.qualityIndexOrder=[...new Set(e)].sort((e,t)=>t-e)}let r=this.qualityIndexOrder.indexOf(e);return r===-1&&(this.qualityIndexOrder.push(e),this.qualityIndexOrder.sort((e,t)=>t-e),r=this.qualityIndexOrder.indexOf(e)),r}),this.logger=t,this.emitter=e,this.renditionLevelSource=n}get fatalQosCount(){return this._fatalQosCount}setActive(){if(this.currentLevel){let e=this.metrics.levels[this.currentLevel];e&&Hn(e.activeRanges)}Hn(this.metrics.general.activeRanges)}};Vb=Wb,m(Wb,`create`,(e,t,n)=>new Vb(e,t,n)),H(),h();var Gb,Kb=class{constructor(e,t){m(this,`renditions`,new Map),m(this,`renditionLevels`,[]),m(this,`languages`,[]),m(this,`emitter`,void 0),m(this,`subscriptionSource`,void 0),m(this,`renditionLevelChangeCount`,0),m(this,`unload`,()=>{this.emitter.off(`renditions`,this.onRenditions),this.emitter.off(`subscription changed`,this.onSubscriptionChanged)}),m(this,`getRenditionLevels`,e=>e?this.createRenditionLevels(e):this.renditionLevels),m(this,`getRenditionLevel`,e=>{var t;let n=e==null?this.getCurrentSubscription():e,r=e?this.createRenditionLevels(e):this.renditionLevels;if(!n.video)return r.length?r[0]:void 0;let i=n.video.bitRate||2**53-1,a=n.video.width||2**53-1,o=n.video.height||2**53-1;return(t=r.filter(e=>e.video&&n.video?e.video.bitRate<=i&&e.video.width<=a&&e.video.height<=o:!0).pop())==null?r[0]:t}),m(this,`setRenditions`,(e,t)=>{this.renditions.set(e,t)}),m(this,`getLanguages`,()=>this.languages),m(this,`getVideoRendition`,(e,t=this.getCurrentSubscription().channelId)=>{let n=this.getRendition(e,t);if(n&&ur(n))return n}),m(this,`getAudioRenditions`,e=>{let t=this.renditions.get(e);return t==null?void 0:t.filter(e=>dr(e))}),m(this,`getVideoRenditions`,e=>{let t=this.renditions.get(e);return t==null?void 0:t.filter(e=>ur(e))}),m(this,`getAudioRendition`,(e,t=this.getCurrentSubscription().channelId)=>{let n=this.getRendition(e,t);if(n&&dr(n))return n}),m(this,`getRendition`,(e,t=this.getCurrentSubscription().channelId)=>{var n;return(n=this.renditions.get(t))==null?void 0:n.find(t=>t.id===e)}),m(this,`getStatistics`,()=>{var e,t,n,r,i,a,o,s,c,l;let u=this.getRenditionLevel();return{videoCodec:u==null||(e=u.video)==null?void 0:e.codec,audioCodec:u==null||(t=u.audio)==null?void 0:t.codec,videoRenditionId:u==null||(n=u.video)==null?void 0:n.id,audioRenditionId:u==null||(r=u.audio)==null?void 0:r.id,videoWidth:u==null||(i=u.video)==null?void 0:i.width,videoHeight:u==null||(a=u.video)==null?void 0:a.height,expectedVideoBitRate:u==null||(o=u.video)==null?void 0:o.bitRate,expectedAudioBitRate:u==null||(s=u.audio)==null?void 0:s.bitRate,frameRate:u==null||(c=u.video)==null?void 0:c.frameRate,language:u==null||(l=u.audio)==null?void 0:l.language,renditionLevelChangeCount:this.renditionLevelChangeCount}}),m(this,`onRenditions`,e=>{let t=this.subscriptionSource.getCurrentSubscription();this.renditions.set(e.channelId,e.renditions),this.updateRenditionLevels({to:t,from:t})}),m(this,`onSubscriptionChanged`,e=>{this.updateRenditionLevels(e)}),m(this,`updateRenditionLevels`,({to:e,from:t})=>{var n;let{channelId:r,initiator:i}=e,a=this.getRenditionLevel(t),o=new Set;((n=this.renditions.get(r))==null?[]:n).filter(e=>e.codec!==`webvtt`).forEach(e=>e.language?o.add(e.language):void 0),this.languages=Array.from(o),this.renditionLevels=this.createRenditionLevels(e);let s=this.getRenditionLevel(e);Rt(a,s)||(this.renditionLevelChangeCount++,this.emitter.emit(`rendition level changed`,{to:s,from:a,reason:i?`manual`:`abr`}))}),m(this,`createRenditionLevels`,e=>{var t;let{video:n,audio:r,channelId:i}=e,a=(t=this.renditions.get(i))==null?[]:t,o=a.filter(ur).filter(e=>n&&e.codec===n.codec),s=a.filter(dr).filter(e=>r&&e.codec===r.codec&&e.language===r.language),c=Math.max(o.length,s.length),l=[];for(let e=0;e<c;e++){let t=o[Math.min(o.length-1,e)],n=s[Math.min(s.length-1,e)];l.push({audio:n,video:t})}return l}),m(this,`getCurrentSubscription`,()=>this.subscriptionSource.getCurrentSubscription()),this.subscriptionSource=t,this.emitter=e,this.emitter.on(`renditions`,this.onRenditions),this.emitter.on(`subscription changed`,this.onSubscriptionChanged)}};Gb=Kb,m(Kb,`create`,(e,t)=>new Gb(e,t)),H(),h();var qb,Jb=e=>JSON.parse(JSON.stringify(e)),Yb=1e4,Xb=class{constructor(e,t,n){m(this,`logger`,void 0),m(this,`timers`,new zn),m(this,`emitter`,void 0),m(this,`targetSubscription`,void 0),m(this,`currentSubscription`,void 0),m(this,`_isSwitchingSubscription`,!1),m(this,`pendingSubscriptionTimeoutId`,void 0),m(this,`burstMs`,0),m(this,`unload`,()=>{this.logger.debug(`Unloading module...`),this.timers.unload(),this.emitter.off(`subscription changed`,this.onSubscriptionChanged),this.logger.debug(`Unloaded module`)}),m(this,`isSwitchingSubscription`,()=>this._isSwitchingSubscription),m(this,`getTargetSubscription`,()=>this.targetSubscription),m(this,`getCurrentSubscription`,()=>this.currentSubscription),m(this,`enableBurst`,e=>{this.burstMs=e}),m(this,`setSize`,e=>{this.targetSubscription.video.width=e.width,this.targetSubscription.video.height=e.height,this.scheduleSubscriptionChange()}),m(this,`setVideoConstraint`,e=>{this.targetSubscription.video=e,this.scheduleSubscriptionChange()}),m(this,`setAudioConstraint`,e=>{this.targetSubscription.audio=e,this.scheduleSubscriptionChange()}),m(this,`setVideoBitRate`,e=>{this.targetSubscription.video.bitRate=e,this.scheduleSubscriptionChange()}),m(this,`setAudioBitRate`,e=>{this.targetSubscription.audio.bitRate=e,this.scheduleSubscriptionChange()}),m(this,`setChannelId`,e=>{this.targetSubscription.channelId=e,this.scheduleSubscriptionChange()}),m(this,`setLanguage`,e=>{this.targetSubscription.audio.language=e,this.scheduleSubscriptionChange()}),m(this,`setVideoCodec`,e=>{this.targetSubscription.video.codec=e,this.scheduleSubscriptionChange()}),m(this,`setAudioCodec`,e=>{this.targetSubscription.audio.codec=e,this.scheduleSubscriptionChange()}),m(this,`setBurst`,e=>{e?this.targetSubscription.burstMs=e:delete this.targetSubscription.burstMs}),m(this,`isNewSubscription`,()=>{let e=[`burstMs`,`meta`,`initiator`,`channelGroupId`];return!Rt(Fn(this.currentSubscription,e),Fn(this.targetSubscription,e))}),m(this,`onSubscriptionChanged`,({to:e,reset:t})=>{this.logger.debug(`onSubscriptionChanged`,{to:e,reset:t}),t?this.targetSubscription=Jb(this.currentSubscription):this.currentSubscription=Jb(e),this._isSwitchingSubscription=this.isNewSubscription()}),m(this,`scheduleSubscriptionChange`,()=>{this.targetSubscription=Jb(this.targetSubscription),this._isSwitchingSubscription=this.isNewSubscription();let e=this.currentSubscription.channelId,t=this.targetSubscription.channelId,n=e!==t;this._isSwitchingSubscription&&(n&&this.burstMs?this.setBurst(this.burstMs):this.setBurst(0),this.pendingSubscriptionTimeoutId&&(this.timers.clearTimeout(this.pendingSubscriptionTimeoutId),this.pendingSubscriptionTimeoutId=void 0),n&&this.timers.setTimeout(()=>{this.currentSubscription.channelId===e&&this.targetSubscription.channelId===t&&(this.logger.warn(`Channel switch timeout`,t),this.targetSubscription=Jb(this.currentSubscription),this.emitter.emit(`channel switch timeout`,t))},Yb),this.pendingSubscriptionTimeoutId=this.timers.setTimeout(()=>this.emitter.emit(`send signal`,{type:`subscribe`,subscription:this.getTargetSubscription()}),0))}),this.logger=e,this.targetSubscription=t,this.currentSubscription=Jb(t),this.emitter=n,this.emitter.on(`subscription changed`,this.onSubscriptionChanged)}};qb=Xb,m(Xb,`create`,(e,t,n)=>new qb(e,n,t)),H(),h(),B();var Zb,Qb=5e3,$b=()=>Ze()||Je(),ex=e=>e&&$b()?100:0,tx=e=>t=>t>e,nx={seek:{toleranceMs:200,toleranceMaxMs:2500,toleranceMultiplierStep:1,backoffEveryN:2,cooldownMs:1e3,timeoutMs:5e3,aheadToleranceMs:150,keyframeSearchBeforeMs:50,keyframeSearchAfterMs:100},timeshift:{enabled:!1,toleranceMs:50,toleranceMaxMs:600,backoffEveryN:3},playbackRate:{enabled:!1,startDiff:60,stopDiff:40,maxDiff:300,speed:.02,cooldownMs:2e3},backoff:{enabled:!0,decayEnabled:!0,decayCooldownMultiplier:3,decayCheckInterval:15e3}},rx=class{get driftSamplesToAverage(){return this._driftSamplesToAverage}set driftSamplesToAverage(e){this._driftSamplesToAverage=e,this.driftSamples=new w(e)}constructor(e,t,n,r,i,a=!0){m(this,`emitter`,void 0),m(this,`logger`,void 0),m(this,`playbackSource`,void 0),m(this,`bufferSource`,void 0),m(this,`keyframeTimestamps`,new w(10)),m(this,`lastSeekTime`,Date.now()),m(this,`lastAdjustmentTime`,Date.now()),m(this,`lastDecayCheckTime`,Date.now()),m(this,`config`,void 0),m(this,`state`,void 0),m(this,`allowTimeshiftOnAudio`,!1),m(this,`syncInfoToleranceMaxMs`,150),m(this,`syncInfoToleranceStep`,20),m(this,`seekOvershoot`,void 0),m(this,`timers`,zn.create()),m(this,`rtt`,0),m(this,`channelSyncInfo`,new Map),m(this,`seekAdjustmentCount`,0),m(this,`timeshiftAdjustmentCount`,0),m(this,`syncInfoCorrectionCount`,0),m(this,`playbackRateAdjustmentCount`,0),m(this,`lastPlaybackRateChangeTime`,0),m(this,`seekAdjustmentTimestamps`,[]),m(this,`timeshiftAdjustmentTimestamps`,[]),m(this,`_driftSamplesToAverage`,5),m(this,`driftSamples`,new w(this._driftSamplesToAverage)),m(this,`timestampOffset`,void 0),m(this,`currentChannelId`,void 0),m(this,`highestSeenTimestamps`,new Map),m(this,`isSuspended`,!1),m(this,`isSyncAdjustmentActivated`,!1),m(this,`queuedTimeshift`,!1),m(this,`playbackState`,void 0),m(this,`hasPerformedRecoverySeekInCurrentRecoveryState`,!1),m(this,`shouldSeekAfterBuffering`,!1),m(this,`usesMse`,void 0),m(this,`load`,()=>{this.timers.setInterval(this.onSync,100)}),m(this,`unload`,()=>{this.logger.debug(`Unloading module...`),this.emitter.off(`rtt`,this.updateRtt),this.emitter.off(`playback state`,this.onPlaybackState),this.timers.unload(),this.logger.debug(`Unloaded module`)}),m(this,`suspend`,()=>{this.isSuspended=!0}),m(this,`unsuspend`,()=>{this.resetSyncState(),this.isSuspended=!1}),m(this,`deactivateSyncAdjustments`,()=>{this.isSyncAdjustmentActivated=!1}),m(this,`activateSyncAdjustments`,()=>{this.tryApplySyncInfo(0),this.lastSeekTime=Date.now(),this.isSyncAdjustmentActivated=!0}),m(this,`reset`,()=>{this.logger.info(`Reset sync state`),this.currentChannelId=void 0,this.timestampOffset=void 0,this.resetSyncState(),this.highestSeenTimestamps.clear()}),m(this,`getTimeshiftOffset`,()=>{var e;return(e=this.timestampOffset)==null?0:e}),m(this,`getCurrentChannelId`,()=>this.currentChannelId),m(this,`resetSyncState`,()=>{this.state.seekToleranceMultiplier=1,this.state.timeshiftToleranceMultiplier=1,this.seekAdjustmentTimestamps=[],this.timeshiftAdjustmentTimestamps=[],this.driftSamples.clear(),this.playbackState=void 0,this.hasPerformedRecoverySeekInCurrentRecoveryState=!1,this.clearRecoverySeekFlags()}),m(this,`getEffectiveSeekToleranceMs`,()=>this.config.timeshift.enabled?this.config.seek.toleranceMs*2:this.config.seek.toleranceMs),m(this,`getLiveEdgeTime`,e=>{let t=this.channelSyncInfo.get(e);if(!t)return;let n=Date.now()-t.localTimestamp;return t.timestamp+n}),m(this,`getLiveEdgeTimeLatencyAdjusted`,e=>{let t=this.getLiveEdgeTime(e);if(t)return t+this.rtt/2}),m(this,`getWallclockTime`,e=>{let t=this.channelSyncInfo.get(e);if(!t)return;let n=Date.now()-t.localTimestamp;return t.wallclockTime+n}),m(this,`getWallclockTimeLatencyAdjusted`,e=>{let t=this.getWallclockTime(e);if(t)return t+this.rtt/2}),m(this,`processSample`,e=>{var t;if(!e.channelId)throw Error(`Sample must be assigned to a channel`);this.currentChannelId||(this.currentChannelId=e.channelId),this.timestampOffset||(this.timestampOffset=e.timestamp/e.timescale*1e3-Qb);let n=e.type===`video`&&e.isSync;if(this.currentChannelId!==e.channelId){let t=2**53-1;console.assert(this.highestSeenTimestamps.size!==0,`no known timestamps`),this.highestSeenTimestamps.forEach(e=>{t=Math.min(t,e)});let n=e.timestamp/e.timescale*1e3;this.currentChannelId=e.channelId,this.timestampOffset=n-t}else (n||this.allowTimeshiftOnAudio)&&this.tryTimeshiftSync();let r=this.timestampOffset*e.timescale/1e3;return e.timestamp-=r,n&&this.keyframeTimestamps.push(e.timestamp/e.timescale*1e3),this.highestSeenTimestamps.set(e.type,Math.max((t=this.highestSeenTimestamps.get(e.type))==null?0:t,e.timestamp/e.timescale*1e3)),e}),m(this,`processFragment`,(e,t)=>{var n;this.currentChannelId||(this.currentChannelId=e);let r=t.mediaType();if(!r)throw Error(`Fragment must have a media type`);this.timestampOffset||(this.timestampOffset=t.baseMediaDecodeTime()/t.timescale()*1e3-Qb);let i=t.mediaType()===`video`&&t.startsWithKeyframe();if(this.currentChannelId!==e){let t=2**53-1;console.assert(this.highestSeenTimestamps.size!==0,`no known timestamps`),this.highestSeenTimestamps.forEach(e=>{t=Math.min(t,e)}),this.currentChannelId=e}else (i||this.allowTimeshiftOnAudio)&&this.tryTimeshiftSync();let a=this.timestampOffset*t.timescale()/1e3;return t.updateBaseMediaDecodeTime(t.baseMediaDecodeTime()-a),i&&this.keyframeTimestamps.push(t.baseMediaDecodeTime()/t.timescale()*1e3),this.highestSeenTimestamps.set(r,Math.max((n=this.highestSeenTimestamps.get(r))==null?0:n,t.baseMediaDecodeTime()/t.timescale()*1e3)),t}),m(this,`forceSeek`,()=>{this.logger.debug(`Forcing seek`,{amount:this.serverCurrentTime-this.playbackSource.currentTime}),this.clearRecoverySeekFlags(),this.playbackSource.currentTime=this.serverCurrentTime}),m(this,`forceTimeshift`,()=>{this.queuedTimeshift=!0}),m(this,`setPlaybackRateAdjustmentEnabled`,e=>{this.config.playbackRate.enabled=e}),m(this,`getStatistics`,()=>{let e=this.driftSamples.items(),t=e.length>0?At(e.map(Math.abs)):0;return{drift:this.drift,seekAdjustmentCount:this.seekAdjustmentCount,timeshiftAdjustmentCount:this.timeshiftAdjustmentCount,seekTime:this.playbackSource.seekTime,totalSeekTime:this.playbackSource.totalSeekTime,seekToleranceMultiplier:this.state.seekToleranceMultiplier,currentSeekToleranceMs:this.currentSeekToleranceMs(),currentAheadToleranceMs:this.currentAheadToleranceMs(),isPlaybackRateAdjustmentEnabled:this.config.playbackRate.enabled,playbackRate:this.playbackSource.playbackRate||1,playbackRateAdjustmentCount:this.playbackRateAdjustmentCount,averageDrift:t}}),m(this,`updateRtt`,e=>{this.rtt=e}),m(this,`isPlaybackSourceReadyToSeek`,()=>!this.isSeeking()&&this.isSeekCooldownExpired()&&this.isSyncAdjustmentActivated),m(this,`isPlaybackSourceReady`,()=>!this.isSeeking()&&this.isSyncAdjustmentActivated),m(this,`isSeeking`,()=>this.playbackSource.isSeeking?!this.isSeekTimeoutExpired():!1),m(this,`isAllowedToSync`,()=>this.isPlaybackSourceReadyToSeek()&&!!this.currentChannelId&&!this.isSuspended&&!this.playbackSource.isPaused),m(this,`isAllowedToSyncIgnoringCooldown`,()=>this.isPlaybackSourceReady()&&!!this.currentChannelId&&!this.isSuspended&&!this.playbackSource.isPaused),m(this,`isSeekCooldownExpired`,()=>Date.now()-this.lastSeekTime>this.config.seek.cooldownMs),m(this,`isSeekTimeoutExpired`,()=>Date.now()-this.lastSeekTime>this.config.seek.timeoutMs),m(this,`currentTimeshiftToleranceMs`,()=>Math.min(this.config.timeshift.toleranceMs*this.state.timeshiftToleranceMultiplier,this.config.timeshift.toleranceMaxMs)),m(this,`currentSeekToleranceMs`,()=>Math.min(this.state.seekToleranceMultiplier*this.getEffectiveSeekToleranceMs(),this.config.seek.toleranceMaxMs)),m(this,`currentEmergencySeekToleranceMs`,()=>Math.max(this.currentSeekToleranceMs()+this.getEffectiveSeekToleranceMs(),this.bufferSource.getTargetBufferTime())),m(this,`currentAheadToleranceMs`,()=>{let e=Math.max(this.config.seek.aheadToleranceMs*this.state.seekToleranceMultiplier,400),t=this.playbackSource.seekTime>500?e:this.config.seek.aheadToleranceMs;return Math.min(t,this.bufferSource.getTargetBufferTime()/2)}),m(this,`tryDecayMultipliers`,()=>{if(!this.config.backoff.decayEnabled)return;let e=Date.now();if(e-this.lastDecayCheckTime<this.config.backoff.decayCheckInterval)return;this.lastDecayCheckTime=e;let t=this.seekAdjustmentTimestamps.length>0?Math.max(...this.seekAdjustmentTimestamps):0,n=this.timeshiftAdjustmentTimestamps.length>0?Math.max(...this.timeshiftAdjustmentTimestamps):0,r=e-Math.max(t,n,this.lastAdjustmentTime),i=Math.max(this.state.seekToleranceMultiplier,this.state.timeshiftToleranceMultiplier),a=this.config.seek.timeoutMs*this.config.backoff.decayCooldownMultiplier*i;if(r<a)return;let o=!1;if(this.state.seekToleranceMultiplier>1){let e=Math.max(1,this.state.seekToleranceMultiplier-.5);e!==this.state.seekToleranceMultiplier&&(this.logger.info(`Decaying seek tolerance multiplier`,{from:this.state.seekToleranceMultiplier,to:e,timeSinceLastAdjustment:r,requiredStabilityMs:a}),this.state.seekToleranceMultiplier=e,o=!0)}if(this.state.timeshiftToleranceMultiplier>1){let e=Math.max(1,this.state.timeshiftToleranceMultiplier-.5);e!==this.state.timeshiftToleranceMultiplier&&(this.logger.info(`Decaying timeshift tolerance multiplier`,{from:this.state.timeshiftToleranceMultiplier,to:e,timeSinceLastAdjustment:r,requiredStabilityMs:a}),this.state.timeshiftToleranceMultiplier=e,o=!0)}if(o){let t=e-a*2;this.seekAdjustmentTimestamps=this.seekAdjustmentTimestamps.filter(e=>e>t),this.timeshiftAdjustmentTimestamps=this.timeshiftAdjustmentTimestamps.filter(e=>e>t)}}),m(this,`applyBackoff`,()=>{if(this.config.backoff.enabled&&(this.lastAdjustmentTime=Date.now(),this.seekAdjustmentCount>0&&this.seekAdjustmentCount%this.config.seek.backoffEveryN===0)){let e=this.state.seekToleranceMultiplier,t=this.config.seek.toleranceMaxMs/this.getEffectiveSeekToleranceMs();this.state.seekToleranceMultiplier=Math.min(this.state.seekToleranceMultiplier+this.config.seek.toleranceMultiplierStep,t),e!==this.state.seekToleranceMultiplier&&this.logger.info(`Backoff: Increasing seek tolerance multiplier`,{from:e,to:this.state.seekToleranceMultiplier,currentSeekToleranceMs:this.currentSeekToleranceMs()})}}),m(this,`tryPlaybackRateSync`,e=>{if(!this.config.playbackRate.enabled)return!1;let t=this.playbackSource.playbackRate!==1,n=Math.abs(e),r=t&&n<this.config.playbackRate.stopDiff,i=!t&&n>=this.config.playbackRate.startDiff;if(n>this.config.playbackRate.maxDiff)return t&&(this.playbackSource.playbackRate=1,this.lastPlaybackRateChangeTime=Date.now()),!1;let a=Date.now(),o=a-this.lastPlaybackRateChangeTime>=this.config.playbackRate.cooldownMs;if(r&&o)return this.playbackSource.playbackRate=1,this.lastPlaybackRateChangeTime=a,this.logger.info(`Resetting playback rate to 1`,{drift:e}),!0;if(i&&o){let t=e>0?1+this.config.playbackRate.speed:1-this.config.playbackRate.speed;return this.playbackSource.playbackRate=t,this.lastPlaybackRateChangeTime=a,this.playbackRateAdjustmentCount++,this.logger.info(`Adjusting playback rate`,{drift:e,targetRate:t}),!0}if(t&&n>=this.config.playbackRate.stopDiff&&n<=this.config.playbackRate.maxDiff){let t=e>0?1+this.config.playbackRate.speed:1-this.config.playbackRate.speed;return this.playbackSource.playbackRate!==t&&o&&(this.playbackSource.playbackRate=t,this.lastPlaybackRateChangeTime=a,this.logger.info(`Changing playback rate direction`,{drift:e,targetRate:t})),!0}return!t&&n<this.config.playbackRate.startDiff?!0:t}),m(this,`tryTimeshiftSync`,()=>{var e;if(!this.config.timeshift.enabled||this.hasPendingRecoverySeek()||!this.isAllowedToSync()||this.playbackSource.playbackRate!==1)return;let t=(e=this.drift)==null?0:e;this.driftSamples.push(t);let n=At(this.driftSamples.items());if(this.queuedTimeshift&&n>0){this.queuedTimeshift=!1,this.applyTimeshift(n);return}if(n>=this.getEffectiveSeekToleranceMs()||n<this.currentTimeshiftToleranceMs())return;let r=Date.now()-this.config.seek.timeoutMs*this.state.timeshiftToleranceMultiplier,i=this.timeshiftAdjustmentTimestamps.filter(tx(r)).length;if(i&&this.state.timeshiftToleranceMultiplier>2){this.logger.debug(`Too many timeshifts within sliding window`,{timeshiftCooldownThreshold:r,recentTimeshiftCount:i});return}this.applyTimeshift(n)}),m(this,`clearRecoverySeekFlags`,()=>{this.shouldSeekAfterBuffering=!1}),m(this,`hasActiveRecoveryTrigger`,()=>this.playbackState===`buffering`),m(this,`hasPendingRecoverySeek`,()=>(this.refreshRecoverySeekState(),this.getRecoverySeekReason()!==void 0)),m(this,`refreshRecoverySeekState`,()=>{var e,t;if(!this.hasActiveRecoveryTrigger()||!this.usesMse||this.hasPerformedRecoverySeekInCurrentRecoveryState){this.clearRecoverySeekFlags();return}let n=(e=(t=this.bufferSource).getNextBufferedRangeStart)==null?void 0:e.call(t,this.playbackSource.currentTime);return this.shouldSeekAfterBuffering=n!==void 0,n}),m(this,`getRecoverySeekReason`,()=>{if(this.shouldSeekAfterBuffering)return`buffering`}),m(this,`shouldSkipNormalSeek`,e=>e<0&&-e<this.currentAheadToleranceMs()||e>0&&e<this.currentSeekToleranceMs()||Math.abs(e)<1?!0:!this.isAllowedToSync()),m(this,`shouldDeferRecoverySeek`,(e,t)=>t!==void 0&&t>e),m(this,`buildSeekPlan`,(e,t)=>{var n,r;let i=this.playbackSource.currentTime+e,a=t?(n=(r=this.bufferSource).getNextBufferedRangeStart)==null?void 0:n.call(r,this.playbackSource.currentTime):void 0,o=i+this.seekOvershoot,s=this.playbackSource.currentTime+this.seekOvershoot,c=t?Math.max(o,s):o;if(t&&this.shouldDeferRecoverySeek(c,a)){this.logger.debug(`Deferring recovery seek until expected playhead reaches next buffered range start`,{currentTime:this.playbackSource.currentTime,desiredCurrentTime:c,nextBufferedRangeStart:a,recoverySeekReason:t});return}let l=t&&a?a:i,u=this.findKeyframeCloseToTimestamp(l);if(!(!t&&!u&&!this.keyframeTimestamps.isEmpty()))return{closestKeyFrame:u,keyframeSearchTime:l,nextBufferedRangeStart:a,targetCurrentTime:u&&u>c?a?Math.max(a,u):u:c}}),m(this,`applySeek`,(e,t)=>{let n=this.playbackSource.seekTime,r=this.buildSeekPlan(e,t);r&&(this.logger.info(`Adjusting for drift using seek`,{drift:e,currentTime:this.playbackSource.currentTime,recoverySeekReason:t,keyframeSearchTime:r.keyframeSearchTime,closestKeyFrame:r.closestKeyFrame,nextBufferedRangeStart:r.nextBufferedRangeStart,targetCurrentTime:r.targetCurrentTime,seekTime:n,rtt:this.rtt,seekToleranceMultiplier:this.state.seekToleranceMultiplier}),this.lastSeekTime=Date.now(),t&&(this.hasPerformedRecoverySeekInCurrentRecoveryState=!0),this.clearRecoverySeekFlags(),this.driftSamples.clear(),this.seekAdjustmentTimestamps.push(this.lastSeekTime),this.seekAdjustmentCount++,this.playbackSource.currentTime=r.targetCurrentTime+Math.min(n,this.bufferSource.getTargetBufferTime()),this.applyBackoff())}),m(this,`applyTimeshift`,e=>{var t;let n=(t=e==null?this.drift:e)==null?0:t;if(!this.timestampOffset)return;let r=n;if(this.logger.info(`Adjusting for drift using timeshift`,{drift:n,syncAmount:r,currentTime:this.playbackSource.currentTime,rtt:this.rtt,timeshiftToleranceMultiplier:this.state.timeshiftToleranceMultiplier}),this.timestampOffset+=r,this.lastSeekTime=Date.now(),this.lastAdjustmentTime=Date.now(),!this.playbackSource.isPaused&&(this.driftSamples.clear(),this.timeshiftAdjustmentTimestamps.push(this.lastSeekTime),this.timeshiftAdjustmentCount++,this.config.backoff.enabled&&this.timeshiftAdjustmentCount>0&&this.timeshiftAdjustmentCount%this.config.timeshift.backoffEveryN===0)){let e=this.state.timeshiftToleranceMultiplier,t=this.config.timeshift.toleranceMaxMs/this.config.timeshift.toleranceMs;this.state.timeshiftToleranceMultiplier=Math.min(this.state.timeshiftToleranceMultiplier+1,t),e!==this.state.timeshiftToleranceMultiplier&&this.logger.info(`Backoff: Increasing timeshift tolerance multiplier`,{from:e,to:this.state.timeshiftToleranceMultiplier,currentTimeshiftToleranceMs:this.currentTimeshiftToleranceMs()})}}),m(this,`onSync`,()=>{var e;this.tryDecayMultipliers(),this.refreshRecoverySeekState();let t=(e=this.drift)==null?0:e,n=this.getRecoverySeekReason(),r=n!==void 0;if(!r&&!this.isAllowedToSyncIgnoringCooldown()||r&&(this.isSeeking()||!this.currentChannelId||this.isSuspended||this.playbackSource.isPaused)||(this.driftSamples.push(t),!this.isSeekCooldownExpired())||!r&&this.driftSamples.items().length<this.driftSamplesToAverage&&Math.abs(t)<2e3)return;let i=r?t:At(this.driftSamples.items());if(!r&&this.tryPlaybackRateSync(i)||!r&&this.shouldSkipNormalSeek(i))return;let a=Date.now()-this.config.seek.timeoutMs*this.state.seekToleranceMultiplier,o=this.seekAdjustmentTimestamps.filter(tx(a)).length,s=this.currentEmergencySeekToleranceMs(),c=i>0&&i>=s;if(o&&this.state.seekToleranceMultiplier>2&&!r&&!c){this.logger.debug(`Too many seek adjustments within sliding window`,{seekCooldownThreshold:a,recentSeekCount:o});return}o&&(r||c)&&this.logger.debug(`Bypassing recent seek limit`,{drift:i,recoverySeekReason:n,emergencySeekToleranceMs:s,recentSeekCount:o,seekToleranceMultiplier:this.state.seekToleranceMultiplier}),this.applySeek(i,n)}),m(this,`onPlaybackState`,e=>{let t=this.playbackState===`buffering`;if(this.playbackState=e,e!==`buffering`){this.hasPerformedRecoverySeekInCurrentRecoveryState=!1,this.clearRecoverySeekFlags();return}if(t||(this.hasPerformedRecoverySeekInCurrentRecoveryState=!1),this.refreshRecoverySeekState()!==void 0){this.onSync();return}}),m(this,`findKeyframeCloseToTimestamp`,e=>{let t=this.keyframeTimestamps.items();for(let n of t){let t=n>=e-this.config.seek.keyframeSearchBeforeMs,r=n<=e+this.config.seek.keyframeSearchAfterMs;if(t&&r)return n}}),this.logger=t,this.emitter=e,this.playbackSource=n,this.bufferSource=r,this.usesMse=a,this.seekOvershoot=ex(a),this.config={seek:z({},nx.seek),timeshift:z({},nx.timeshift),playbackRate:z({},nx.playbackRate),backoff:z({},nx.backoff)},this.config.timeshift.enabled=i,a||(this.config.seek.toleranceMs=50,this.config.timeshift.toleranceMs=20,this.config.seek.aheadToleranceMs=40),this.state={seekToleranceMultiplier:1,timeshiftToleranceMultiplier:1},typeof window<`u`&&window.location.search.includes(`playbackRateAdjustmentEnabled`)&&(this.config.playbackRate.enabled=!0),this.emitter.on(`rtt`,this.updateRtt),this.emitter.on(`playback state`,this.onPlaybackState),this.logger.info(`SyncModule initialized`,{config:this.config})}updateChannelSyncInfo(e,t){let n=Date.now(),r=this.channelSyncInfo.get(e),i=this.getLiveEdgeTime(e);if(this.isSuspended)return;if(!r||!i){this.logger.info(`Initial timing info`,{syncInfo:t}),this.channelSyncInfo.set(e,z(z({},t),{},{localTimestamp:n,timeDifferences:new w(12)}));return}let a=t.wallclockTime-r.wallclockTime,o=t.timestamp-r.timestamp,s=n-r.localTimestamp,c=o-s;if(r.timeDifferences.push(c),this.logger.debug(`Timing info`,{rtt:this.rtt,channelId:e,syncInfo:t,localTimestamp:n,diffFromEstimated:c,timestampDelta:o,wallclockDelta:a,localWallclockDelta:s}),Math.abs(c)>=Math.max(this.bufferSource.getTargetBufferTime()*2,3e3)){this.logger.info(`Resetting sync info`,{diffFromEstimated:c}),this.channelSyncInfo.set(e,z(z({},t),{},{localTimestamp:n,timeDifferences:new w(r.timeDifferences.maxSize+1)})),this.currentChannelId&&this.currentChannelId===e&&(this.reset(),this.emitter.emit(`channel reset`));return}r.timeDifferences.items().length<3||this.tryApplySyncInfo(Math.min(this.syncInfoToleranceMaxMs,this.syncInfoCorrectionCount*this.syncInfoToleranceStep))}tryApplySyncInfo(e){let t=this.getCurrentChannelId();if(!t)return;let n=this.channelSyncInfo.get(t);if(!n)return;let r=Mt(n.timeDifferences.items());Math.abs(r.average)>e&&(this.logger.info(`Adjusting sync info`,z(z({},r),{},{tolerance:e})),n.timestamp+=r.average,this.syncInfoCorrectionCount++,n.timeDifferences.clear())}get serverCurrentTime(){return this.channelCurrentTime-this.getTimeshiftOffset()}get channelCurrentTime(){let e=this.getCurrentChannelId();if(!e)return 0;let t=this.getLiveEdgeTime(e);return t?t-this.bufferSource.getTargetBufferTime():0}get drift(){return this.serverCurrentTime-this.playbackSource.currentTime}};Zb=rx,m(rx,`create`,(e,t,n,r,i,a=!0)=>new Zb(e,t,n,r,i,a)),xi(),H(),B(),h(),P();var ix,ax={enabled:!0,interval:3e4,includeErrors:!0,includeEvents:!0,includeStats:!0,maxRetries:10,maxErrorReports:50,maxEvents:50},ox=(e,t)=>z(z({},t),{},{type:e,timestamp:new Date().toISOString(),discriminator:`web`}),sx=class{constructor(e,t,n,r){var i=this;m(this,`logger`,void 0),m(this,`timers`,new zn),m(this,`emitter`,void 0),m(this,`options`,void 0),m(this,`parentContext`,void 0),m(this,`unsentLines`,new w(100)),m(this,`retries`,0),m(this,`errorCount`,0),m(this,`eventCount`,0),m(this,`statsCount`,0),m(this,`unload`,()=>{this.logger.debug(`Unloading module...`),window.removeEventListener(`error`,this.onError),window.removeEventListener(`unhandledrejection`,this.onRejection),this.timers.unload(),this.emitter.off(`error`,this.addError),this.emitter.off(`visibilitystate`,this.onVisibilityChange),this.emitter.off(`pagehide`,this.onPageHide),this.emitter.off(`telemetry event`,this.addEvent),this.addStats({isFinal:!0,initiator:`unload`}),this.send(`beacon`),this.logger.debug(`Unloaded module`)}),m(this,`load`,()=>{window.addEventListener(`error`,this.onError),window.addEventListener(`unhandledrejection`,this.onRejection),this.emitter.on(`error`,this.addError),this.emitter.on(`visibilitystate`,this.onVisibilityChange),this.emitter.on(`pagehide`,this.onPageHide),this.emitter.on(`telemetry event`,this.addEvent),this.timers.setInterval(()=>{this.addStats(),this.send(`fetch`)},this.options.interval)}),m(this,`addStats`,({isFinal:e,initiator:t}={isFinal:!1,initiator:`interval`},n={})=>{if(!this.options.includeStats)return;let r=this.parentContext.getStatistics(),i=ox(`stats`,z(z(z({},n),r),{},{isFinal:e,initiator:t,count:this.statsCount++}));this.unsentLines.push(i)}),m(this,`addEvent`,e=>{if(!this.options.includeEvents||this.eventCount>this.options.maxEvents)return;let t=ox(`event`,z(z({},this.parentContext.getStatistics()),e));this.eventCount++,this.unsentLines.push(t)}),m(this,`getStatistics`,()=>({errorCount:this.errorCount})),m(this,`send`,function(){var e=N(function*(e){if(i.options.enabled&&!(i.retries>=i.options.maxRetries)&&!i.unsentLines.isEmpty()){i.logger.debug(`Sending telemetry`,{lines:i.unsentLines.items()});try{let t=i.unsentLines.items().map(e=>JSON.stringify(e)).reverse().join(`
|
|
1223
|
-
`);switch(e){case`beacon`:navigator.sendBeacon(i.options.url,t);break;default:i.parentContext.connectionState===`connected`?i.emitter.emit(`send signal`,{type:`telemetry`,body:t}):yield wl(new URL(i.options.url),{body:t,headers:{"Content-Type":`text/plain`}});break}i.retries=0,i.unsentLines.clear()}catch(e){i.retries++}}});return function(t){return e.apply(this,arguments)}}()),m(this,`onVisibilityChange`,e=>{e===`hidden`&&(this.addStats({isFinal:!0,initiator:`visibilitychange`}),this.send(`beacon`))}),m(this,`onPageHide`,e=>{this.addStats({isFinal:!0,initiator:`pagehide`},{persisted:e.persisted}),this.send(`beacon`)}),m(this,`onRejection`,e=>this.addError(e.reason)),m(this,`onError`,e=>this.addError(e.error)),m(this,`addError`,e=>{let{includeErrors:t,maxErrorReports:n}=this.options;if(t&&e instanceof U){if(this.errorCount++,this.errorCount>n)return;let t=this.parentContext.getStatistics();this.unsentLines.push(ox(`error`,z(z({},t),e.toStringifiable())))}}),this.logger=e,this.emitter=t,this.options=z(z({},ax),n),this.parentContext=r}};ix=sx,m(sx,`create`,(e,t,n,r)=>new ix(e,t,n,r)),H(),h();var cx,lx=class{constructor(e,t,n){m(this,`logger`,void 0),m(this,`element`,void 0),m(this,`documentState`,void 0),m(this,`timers`,new zn),m(this,`unload`,()=>{this.timers.unload()}),m(this,`unpause`,()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug(`Unpause video`),this.element.tryPlay())}),this.logger=e,this.element=t,this.documentState=n,this.timers.setInterval(this.unpause,100)}};cx=lx,m(lx,`create`,(e,t,n)=>new cx(e,t,n)),h();var ux=[`minBufferTime`,`maxBufferTime`,`burstEnabled`,`sizeBasedResolutionCapEnabled`,`separateVideoSocketEnabled`,`webcodecsHardwareAcceleration`,`offscreenCanvasEnabled`,`videoCodecs`];function dx(e){return ux.includes(e)}var fx=class{constructor(e){m(this,`options`,void 0),m(this,`overrides`,new Map),this.options=e}getOptions(){return this.options}addOverrides(e,t){this.overrides.set(e,t)}set(e,t){this.options[e]=t}get(e,t){if(t&&dx(e)){var n;let r=(n=this.overrides.get(t))==null?void 0:n[e];if(r!==void 0)return r}return this.options[e]}getOverride(e,t){var n;return(n=this.overrides.get(t))==null?void 0:n[e]}};B();var px=6,mx=e=>{let t=[e],n=0,r=0,i=!1,a=(e,t)=>{var i,a;if(e.flags&&Ic(e.flags)){var o;n=(o=e.compositionTimeOffset)==null?0:o}e.timestamp+=n,e.compositionTimeOffset=((i=e.compositionTimeOffset)==null?0:i)-n;let s=e.timestamp/e.timescale,c=t.flags&&Ic(t.flags)?(a=t.compositionTimeOffset)==null?0:a:n,l=(t.timestamp+c)/t.timescale,u=Math.max(0,Math.round((l-s)*e.timescale));return u>0&&(r=u),z(z({},e),{},{duration:u>0?u:r})};return(e,n=!1)=>{if(e.flags&&Ic(e.flags)&&n&&(i=!i),!(n&&t.length<px&&i)&&t.length>0){i=!1;let n=e;for(let e=t.length-1;e>0;e--){let r=t[e];if(!r||!n)break;r.timestamp>=n.timestamp?t.splice(e,1):n=r}let r=t.map((n,r)=>a(n,t[r+1]||e));return t=[e],r}return t.push(e),[]}},hx=[`mse`,`wasm`],gx=e=>e==null?hx:e,_x=e=>{if(!e)return!1;let t=e.headers&&Object.keys(e.headers).length>0,n=e.queryParams&&Object.keys(e.queryParams).length>0;return!!(t||n)},vx=(e,t,n)=>{if(_x(n))return`mse`;let r=gx(e);for(let e of r)switch(e){case`mse`:if(t)return`mse`;break;case`webcodecs`:if(typeof VideoDecoder<`u`)return`webcodecs`;break;case`wasm`:return`wasm`}return`wasm`};B();var yx=(e,t,n)=>{if(ur(t))return z(z({},e),{},{type:`video`,codec:t.codec,isSync:Ic(e.flags),data:e.payload,duration:0,width:t.width,height:t.height},n);if(t.codec===`webvtt`)throw Error(`WebVTT is not supported`);return z(z({},e),{},{type:`audio`,channels:t.channels,sampleRate:t.sampleRate,codec:t.codec,language:t.language,isSync:Ic(e.flags),data:e.payload,duration:0})};xi(),B();var bx=(e,t)=>e&&typeof e==`object`&&t in e,xx=e=>!(typeof e!=`object`||!bx(e,`channelId`)||typeof e.channelId!=`string`||!bx(e,`url`)||typeof e.url!=`string`||e.channelId.length===0||e.url.length===0),Sx=e=>{if(!xx(e))throw new U(`Invalid options`,{isFatal:!0,code:`invalid_options`});let t=z({},e);return Object.keys(t).forEach(e=>{let n=t;n[e]===void 0&&delete n[e]}),t},Cx=e=>{if(typeof e!=`object`||!e)throw Error(`not an object`);if(!(`video`in e))throw Error(`missing video in subscription`);if(!(`audio`in e))throw Error(`missing audio in subscription`);if(!(`channelId`in e))throw Error(`missing channelId`);return!0};Na(),Pc(),my(),h(),P();var wx=class{constructor(e){var t=this;m(this,`cache`,new Map),m(this,`inFlight`,new Map),m(this,`checkVideoSupport`,function(){var e=N(function*(e){var n;if(typeof VideoDecoder>`u`)return!1;let r=VideoDecoder.isConfigSupported;if(typeof r!=`function`)return!0;if(e.codec===`h265`&&!e.codecString)return t.logger.warn(`Missing HEVC codec string for WebCodecs support check. Falling back to optimistic support.`,{renditionId:e.id}),!0;let i=(n=e.codecString)==null?e.codec===`av1`?`av01.0.08M.08`:`avc1.42E01E`:n,a=`video|${i}|${e.width}x${e.height}`;return t.check(a,()=>r({codec:i,optimizeForLatency:!0,codedWidth:e.width,codedHeight:e.height}),!0,{message:`Failed to check WebCodecs rendition support. Falling back to optimistic support check.`,codec:i,renditionId:e.id})});return function(t){return e.apply(this,arguments)}}()),m(this,`checkAudioSupport`,function(){var e=N(function*(e){var n;if(typeof AudioDecoder>`u`)return!1;let r=AudioDecoder.isConfigSupported;if(typeof r!=`function`)return!0;let i=(n=e.codecString)==null?py(e.codec):n,a=`audio|${i}|${e.sampleRate}|${e.channels}`,o=e.codec===`aac`?Ma(e.channels,e.sampleRate):e.codec===`opus`?Mc(e.channels,e.sampleRate):void 0;return t.check(a,()=>r({codec:i,sampleRate:e.sampleRate,numberOfChannels:e.channels,description:o}),!1,{message:`Failed to check WebCodecs audio rendition support. Treating rendition as unsupported.`,codec:i,renditionId:e.id})});return function(t){return e.apply(this,arguments)}}()),m(this,`check`,(e,t,n,r)=>{let i=this.cache.get(e);if(i!==void 0)return Promise.resolve(i);let a=this.inFlight.get(e);if(a)return a;let o=Promise.resolve().then(t).then(({supported:t})=>(this.cache.set(e,t),t)).catch(t=>(this.logger.warn(r.message,{codec:r.codec,renditionId:r.renditionId,error:t}),this.cache.set(e,n),n)).finally(()=>{this.inFlight.delete(e)});return this.inFlight.set(e,o),o}),this.logger=e}};xi(),H(),h(),E(),B(),P(),M(),A();var Tx=new WeakMap,Ex=new WeakMap,Dx=new WeakMap,Ox=class e extends Bt{constructor(t){var n,r;super(),n=this,m(this,`pictureInPicture`,void 0),m(this,`drm`,void 0),m(this,`browser`,nt()),m(this,`options`,void 0),m(this,`element`,void 0),m(this,`playbackSource`,void 0),m(this,`emitter`,new Bt),m(this,`logger`,void 0),m(this,`modules`,void 0),m(this,`clientIp`,void 0),m(this,`sessionId`,void 0),m(this,`clientId`,$n()),m(this,`_channels`,[]),m(this,`createdAt`,Date.now()),m(this,`offscreenCanvasElement`,void 0),m(this,`webCodecsRenditionSupport`,void 0),m(this,`hasCalledConnect`,!1),m(this,`latestEmittedLanguages`,[]),m(this,`wakeLock`,void 0),m(this,`pool`,new ie(e.MAX_POOL_SIZE)),m(this,`userAgentInformation`,new Zn),m(this,`encryptedMediaExtensions`,void 0),T(this,Tx,0),T(this,Ex,[]),m(this,`sampleProcessingSesssions`,new Map),m(this,`sizes`,new Map),m(this,`isSuspended`,!0),m(this,`disconnectTimeout`,void 0),m(this,`offscreenSubtitleInterval`,void 0),T(this,Dx,void 0),m(this,`attach`,e=>{var t;(t=this.wakeLock)==null||t.attach(e),e.appendChild(this.element)}),m(this,`setElement`,e=>{this.element!==e&&(this.element=e,this.modules.constraintCap.setElement(e))}),m(this,`getOptions`,()=>this.options.getOptions()),m(this,`getThumbnailUrl`,()=>{let e=this.options.get(`edgeUrl`)||this.options.get(`url`);e=e.replace(`wss://`,`https://`),e=e.replace(`ws://`,`http://`),e=e.endsWith(`/`)?e.slice(0,-1):e;let t=window.devicePixelRatio||1,n=Math.round(window.innerWidth*t),r=Math.round(window.innerHeight*t),i=this.options.get(`authenticationToken`),a=i?`&auth.token=${i}`:``;return`${e}/api/thumbnail?channelId=${this.channelId}${a}&width=${n}&height=${r}`}),m(this,`updateAuthenticationToken`,e=>{this.logger.debug(`Got new auth token`,{token:e}),this.options.set(`authenticationToken`,e),this.emitter.emit(`send signal`,{type:`refresh auth`,token:e})}),m(this,`connect`,()=>{this.hasCalledConnect||(this.play(),this._connect())}),m(this,`_connect`,()=>{if(!this.hasCalledConnect){if(this.hasCalledConnect=!0,Object.values(this.modules).forEach(e=>{e&&`load`in e&&e.load()}),this.unsuspend(),this.playbackSource instanceof el){var e,t;(e=(t=this.playbackSource).load)==null||e.call(t)}this.modules.connection.connect()}}),m(this,`getCastOptions`,()=>({url:this.options.get(`url`),channelId:this.options.get(`channelId`),channelGroupId:this.options.get(`channelGroupId`),authenticationToken:this.options.get(`authenticationToken`),language:this.options.get(`language`),logLevel:this.options.get(`logLevel`),minBufferTime:this.options.get(`minBufferTime`),tags:this.options.get(`tags`),ownerSessionId:this.sessionId,edgeUrl:this.options.get(`edgeUrl`),media:this.options.get(`media`),drm:this.options.get(`drm`)})),m(this,`onConnectInfo`,function(){var e=N(function*(e){var t;n.sessionId=$n();let r=n.modules.subscription.getTargetSubscription(),i=e.channels.find(e=>e.channelId===r.channelId);if(n.emitter.emit(`connect info`,e),`timeshift`in e&&e.timeshift?(e.timeshift,n._channels=e.channels.map(t=>z(z({},t),{},{timeshift:e.timeshift})),n.emit(`timeshift info`,e.timeshift)):n._channels=e.channels,n.updateTextTracks((t=i==null?void 0:i.renditions)==null?[]:t),!n.textTrack&&n.options.get(`textTrack`)&&(n.textTrack=n.options.get(`textTrack`)),yield Promise.all(e.channels.map(function(){var e=N(function*(e){e.overrides&&n.options.addOverrides(e.channelId,e.overrides),e.renditions=yield n.filterRenditions(e.renditions),n.modules.renditions.setRenditions(e.channelId,e.renditions)});return function(t){return e.apply(this,arguments)}}())),!i)throw pi(`external`);let a=n.options.getOverride(`sizeBasedResolutionCapEnabled`,n.channelId);a!==void 0&&(n.modules.constraintCap.sizeBasedResolutionCapEnabled=a);let o=n.options.getOverride(`minBufferTime`,n.channelId),s=n.options.getOverride(`maxBufferTime`,n.channelId);if((o||s)&&(n.modules.bufferTime.updateConfig({minBufferTime:n.options.get(`minBufferTime`,n.channelId),maxBufferTime:n.options.get(`maxBufferTime`,n.channelId)}),n.targetBufferTime=n.options.get(`minBufferTime`,n.channelId)),n.options.get(`burstEnabled`,n.channelId)&&n.modules.subscription.enableBurst(n.targetBufferTime),n.emit(`is live`,i.isLive),!i.isLive)throw Error(`Waiting for channel to go live`);n.patchSubscription(i,n.modules.connection.estimatedBandwidth),yield n.initializeDecodingModule(),n.resetModules(),n.emit(`rendition levels`,n.modules.renditions.getRenditionLevels()),n.emit(`channels`,n.channels),n.emitLanguagesIfChanged(),n.sampleProcessingSesssions.clear();let c=n.options.get(`burstEnabled`,n.channelId);return{video:n.targetSubscription.video,audio:n.targetSubscription.audio,burstMs:c?n.targetBufferTime:void 0,sessionId:n.sessionId,clientId:n.clientId,channelId:n.channelId,channelGroupId:n.options.get(`channelGroupId`),authToken:n.options.get(`authenticationToken`),textTrack:n.textTrack}});return function(t){return e.apply(this,arguments)}}()),m(this,`emitLanguagesIfChanged`,()=>{let e=this.modules.renditions.getLanguages(),t=this.latestEmittedLanguages;e.length===t.length&&e.every(e=>t.includes(e))||(this.logger.debug(`Emitting new languages`,{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit(`languages`,this.latestEmittedLanguages))}),m(this,`updateTextTracks`,e=>{let t=e.filter(e=>e.codec===`webvtt`);t.forEach(e=>{if(!j(Ex,this).find(t=>t.language===e.language)){if(this.modules.canvasModule){let t=this.modules.canvasModule.textTracks.addTextTrack(e.kind,e.label||e.language||``,e.language||``);j(Ex,this).push(t)}else if(this.mediaElement instanceof HTMLVideoElement){let t=this.mediaElement.addTextTrack(e.kind,e.label||e.language,e.language);j(Ex,this).push(t)}}});for(let e of j(Ex,this))t.find(t=>t.language===e.language)?e.mode===`disabled`&&(e.mode=`hidden`):e.mode=`disabled`;this.emit(`text tracks`,this.textTracks)}),m(this,`cleanupTextTracks`,(e=this.currentTime-2e4)=>{j(Ex,this).forEach(t=>{if(t.cues)for(let n of t.cues)n.endTime*1e3<e-2e3&&t.removeCue(n)})}),m(this,`filterRenditions`,function(){var e=N(function*(e){let t=yield Promise.all(e.map(function(){var e=N(function*(e){if(dr(e)){var t;return n.willUseMediaSource()&&!((t=ze())!=null&&t.isTypeSupported(fr(e)))?!1:n.willUseMediaSource()||e.codec===`opus`?!0:n.isWebCodecsAudioAvailable(n.channelId)?n.webCodecsRenditionSupport.checkAudioSupport(e):!1}if(!ur(e)||!n.isSupportedVideoCodecProfile(e.codec,e.codecString))return!1;if(!n.willUseMediaSource())return n.isWebCodecsVideoAvailable(n.channelId)?n.webCodecsRenditionSupport.checkVideoSupport(e):!0;let r=yield tl(e);if(!r.supported)return!1;if(e.codec===`av1`&&!r.smooth&&!r.powerEfficient)return n.logger.debug(`discarding av1 rendition, neither smooth nor power efficient`,{codecString:e.codecString,width:e.width,height:e.height,bitRate:e.bitRate,capabilities:r}),!1;let i=n.options.getOverride(`maxVideoBitRate`,n.channelId);return i?i>=e.bitRate:!0});return function(t){return e.apply(this,arguments)}}())),r=e.filter((e,n)=>t[n]),i=e.filter((e,n)=>!t[n]);i.length>0&&n.logger.debug(`unsupported renditions filtered out`,{renditions:i.map(e=>z(z({codec:e.codec,codecString:e.codecString},ur(e)?{width:e.width,height:e.height}:{}),{},{bitRate:e.bitRate}))});let a=r.filter(e=>e.codec===`h264`).reverse()[0],o=r.filter(e=>e.codec===`av1`).reverse()[0];return a&&o&&a.width>o.width&&a.height>o.height&&(n.logger.debug(`discarding av1 renditions, h264 ladder has higher resolution`,{bestH264:{width:a.width,height:a.height,bitRate:a.bitRate},bestAV1:{width:o.width,height:o.height,bitRate:o.bitRate}}),r=r.filter(e=>e.codec!==`av1`)),n.logger.debug(`supported renditions`,{renditions:r.map(e=>z(z({codec:e.codec,codecString:e.codecString},ur(e)?{width:e.width,height:e.height}:{}),{},{bitRate:e.bitRate}))}),r});return function(t){return e.apply(this,arguments)}}()),m(this,`patchSubscription`,(e,t)=>{let n=this.options.get(`maxInitialBitRate`),r=Math.min(this.options.get(`maxVideoBitRate`),n,t,this.targetSubscription.video.bitRate),i=Math.min(this.options.get(`maxAudioBitRate`),n,t,this.targetSubscription.audio.bitRate),a=this.options.get(`media`)===`audio`?[]:this.options.get(`videoCodecs`,this.channelId),o=this.supportedAudioCodecs(),s=e.renditions.filter(dr),c=e.renditions.filter(ur),l=o.find(e=>s.find(t=>t.codec===e)!==void 0),u=a.find(e=>c.find(t=>t.codec===e)!==void 0),d=s.map(e=>e.language);if(this.logger.debug(`supported and selected codecs`,{audioCodecs:o,videoCodecs:a,audioCodec:l,videoCodec:u}),u){let e=this.options.get(`maxSize`);this.modules.subscription.setVideoConstraint(z({codec:u,bitRate:this.abrEnabled?r:this.options.get(`maxVideoBitRate`)},e))}l&&(this.modules.subscription.setAudioConstraint({codec:l,bitRate:this.abrEnabled?i:this.options.get(`maxAudioBitRate`),language:this.options.get(`language`)}),(!d.includes(this.options.get(`language`))||this.language===void 0)&&this.modules.subscription.setLanguage(d[0])),this.alignSizeAndBitRate(this.targetSubscription);let f=this.modules.subscription.getTargetSubscription();this.emitter.emit(`subscription changed`,{to:f,from:this.modules.subscription.getCurrentSubscription()})}),m(this,`isSupportedVideoCodecProfile`,(e,t)=>{if(this.willUseMediaSource()){let n=ze();return n?n.isTypeSupported(fr({codec:e,codecString:t})):!0}if(this.isWebCodecsVideoAvailable(this.channelId)&&(e===`h264`||e===`h265`||e===`av1`))return!0;if(e===`h264`){let e=!!(t!=null&&t.startsWith(`avc1.42`)),n=!!(t!=null&&t.startsWith(`avc1.66.`));return e||n}return!(e===`h265`||e===`av1`)}),m(this,`supportedAudioCodecs`,()=>{if(this.options.get(`media`)===`video`)return[];let e=[];return(this.willUseMediaSource()||this.isWebCodecsAudioAvailable(this.channelId))&&e.push(`aac`),(this.browser.supportsMp4Opus&&this.options.get(`mseOpusEnabled`)||!this.willUseMediaSource())&&e.push(`opus`),this.isWebCodecsAudioAvailable(this.channelId)&&e.push(`mp3`),e}),m(this,`initializeDecodingModule`,N(function*(){var e;let t=n.currentRenditionLevel,r=[];if(!t)throw new U(`No currentRenditionLevel`,{code:`no_current_rendition_level`,isFatal:!1});if(t!=null&&t.video&&r.push({type:`video`,mimeType:fr(t.video),codec:t.video.codec}),t!=null&&t.audio&&r.push({type:`audio`,codec:t.audio.codec,mimeType:fr(t.audio),channels:t.audio.channels,sampleRate:t.audio.sampleRate}),r.length===0)throw new U(`Can't initialize decoding module without tracks`,{code:`no_tracks`,isFatal:!1});if(n.willUseMediaSource()&&n.element instanceof HTMLMediaElement){var i;n.emitter.emit(`flush buffers`),yield(i=n.modules.mseModule)==null?void 0:i.setSourceBuffers(r);return}let a=n.shouldUseWebCodecs(n.channelId),o=n.options.get(`webcodecsHardwareAcceleration`,n.channelId),s=n.shouldUseOffscreenCanvas(n.channelId)&&a,c=typeof OffscreenCanvas<`u`&&typeof HTMLCanvasElement<`u`&&typeof HTMLCanvasElement.prototype.transferControlToOffscreen==`function`,l=s&&c&&typeof VideoDecoder<`u`,u,d;if(l)try{d=document.createElement(`canvas`),_r(d),u=d.transferControlToOffscreen()}catch(e){u=void 0,d=void 0,n.logger.warn(`Failed to enable OffscreenCanvas; falling back to main thread rendering`,{error:e})}else s&&n.logger.warn(`OffscreenCanvas requested but not supported; falling back to main thread rendering`);let f=yield Wy.create(n.emitter,n.logger.createContext(`DecoderModule`),n.options.get(`logLevel`),r,n.playbackSource,n.pool,a,o,u),{videoRenderer:p}=f.getStatistics(),m=n.modules.canvasModule;if(m instanceof hb)if(p===`OffscreenCanvas`&&d){m.setVideoRenderingEnabled(!1);let e=n.element;e.parentElement?e.parentElement.replaceChild(d,e):n.logger.warn(`OffscreenCanvas rendering is active but the current element is not attached to the DOM. Updating internal element reference only.`),n.offscreenCanvasElement=d,n.setElement(d)}else{m.setVideoRenderingEnabled(!0),n.offscreenCanvasElement=void 0;let e=m.element();if(e!==n.element){let t=n.element;t.parentElement&&t.parentElement.replaceChild(e,t),n.setElement(e)}}else m instanceof _b&&(p===`OffscreenCanvas`&&d?(m.setOffscreenCanvas(d),n.offscreenCanvasElement=d):(m.setOffscreenCanvas(void 0),n.offscreenCanvasElement=void 0));(e=n.modules.decoder)==null||e.unload(),n.modules.decoder=f,n.modules.decoder.load(),n.setupOffscreenSubtitleRouting()})),m(this,`setupOffscreenSubtitleRouting`,()=>{if(this.offscreenSubtitleInterval!==void 0&&(clearInterval(this.offscreenSubtitleInterval),this.offscreenSubtitleInterval=void 0),!this.offscreenCanvasElement||!this.modules.decoder||this.modules.canvasModule instanceof _b)return;let e=this.modules.decoder,t=this.modules.canvasModule;if(!t)return;let n=!1;this.offscreenSubtitleInterval=setInterval(()=>{var r,i,a,o;if(!t.textTracks.language){n&&(e.setSubtitleCues([],0,0,1,0),n=!1);return}n=!0;let s=t.textTracks.getActiveCues(this.currentTime/1e3).map(e=>({text:e.text})),c=((r=this.element)==null?void 0:r.clientWidth)||0,l=((i=this.element)==null?void 0:i.clientHeight)||0,u=((a=this.element)==null?void 0:a.style.getPropertyValue(`--vindral-subtitle-offset`))||((o=this.element)==null?void 0:o.style.getPropertyValue(`--vindral-control-bar-offset`)),d=parseInt(u||`0`,10)||0;e.setSubtitleCues(s,c,l,globalThis.devicePixelRatio||1,-d)},100)}),m(this,`unload`,N(function*(){var t,r,i;n.logger.debug(`Unloading modules...`),n.offscreenSubtitleInterval!==void 0&&(clearInterval(n.offscreenSubtitleInterval),n.offscreenSubtitleInterval=void 0),yield Promise.all(Object.values(n.modules).map(e=>e==null?void 0:e.unload())),(t=n.wakeLock)==null||t.unload(),n.pool=new ie(e.MAX_POOL_SIZE),(r=(i=n.playbackSource).unload)==null||r.call(i),n.element.remove(),n.emitter.reset(),n.encryptedMediaExtensions.unload(),n.reset(),n.logger.debug(`Unloaded modules`)})),m(this,`userInput`,()=>{this.play()}),m(this,`pause`,()=>{this.options.get(`pauseSupportEnabled`)&&this.playbackState!==`paused`&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())}),m(this,`registerDebugInstance`,()=>{$c(this)}),m(this,`play`,()=>{var t;this.hasCalledConnect?this.unsuspend():this.playbackState!==`playing`&&(this._connect(),self.addEventListener(`__vindral_register_debug__`,this.registerDebugInstance),this.modules.timer.setInterval(()=>this.cleanupTextTracks(),e.REMOVE_CUE_THRESHOLD)),(t=this.wakeLock)==null||t.enable(),this.playbackState===`paused`&&(this.resetModules(),this.emitter.emit(`flush buffers`),this.cleanupTextTracks(2**53-1)),this.playbackSource.play()}),m(this,`getStatistics`,()=>{let e=Object.values(this.modules).reduce((e,t)=>t&&`getStatistics`in t?z(z({},e),t.getStatistics()):e,this.getRuntimeInfo()),t=Math.round(this.timeActive>0?(e.bytesReceived||0)*8/(this.timeActive/1e3):0),n=this.uptime/36e5,r=Math.max(0,(e.connectCount||0)-1),i=n>0?r/n:0,a=this.timeActive/6e4,o=Math.max(a,1),s=a>0?(e.seekAdjustmentCount||0)/o:0,c=a>0?(e.timeshiftAdjustmentCount||0)/o:0;return z(z({},e),{},{averageBitRate:t,reconnectsPerHour:i,seekAdjustmentsPerMinute:s,timeshiftAdjustmentsPerMinute:c})}),m(this,`resetModules`,()=>{Object.values(this.modules).forEach(e=>{e&&`reset`in e&&e.reset()}),this.sampleProcessingSesssions.clear(),this.playbackSource.currentTime=0,this.playbackSource.isActivated=!1}),m(this,`getRuntimeInfo`,()=>{let e=this.modules.canvasModule instanceof _b?!0:void 0;return z({uptime:Date.now()-this.createdAt,version:`4.2.1-1-gf6c6f2fd`,clientId:this.clientId,sessionId:this.sessionId,channelId:this.channelId,channelGroupId:this.options.get(`channelGroupId`),ip:this.clientIp,url:this.options.get(`url`),timeToFirstFrame:this.timeToFirstFrame(),streamToMediaElementEnabled:e,iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())}),m(this,`getPlaybackBufferState`,(e,t)=>{let n=t==null?void 0:t.getBufferState(e.currentTime);if(!n)return e;let r=e.playbackState===`buffering`||n.playbackState===`buffering`?`buffering`:e.playbackState===`paused`?`paused`:`playing`;return z(z({},e),{},{buffered:n.buffered,playbackState:r})}),m(this,`onMediaElementBufferState`,(e,t)=>{this.emitter.emit(`buffer state`,this.getPlaybackBufferState(e,t))}),m(this,`onMediaElementState`,e=>{this.logger.info(`media element state`,{state:e}),this.options.get(`pauseSupportEnabled`)&&(e===`paused`?this.modules.documentState.isVisible&&(this.suspend(),this.modules.connection.disconnect()):(this.unsuspend(),this.modules.connection.getState()===`disconnected`&&this.modules.connection.unsuspend()))}),m(this,`onBufferEvent`,e=>{this.emit(`buffer state event`,e);let t=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e===`filled`&&t){var n,r,i,a;let e=Math.max(this.currentTime,(n=(r=this.videoBufferedRanges[0])==null?void 0:r.start)==null?0:n,(i=(a=this.audioBufferedRanges[0])==null?void 0:a.start)==null?0:i);this.logger.info(`Buffer filled - starting playback`,{currentTime:e}),this.playbackSource.currentTime=e,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e===`drained`&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())}),m(this,`timeToFirstFrame`,()=>{let e=this.modules.playback.getFirstFrameTime(),t=this.modules.connection.firstConnectionTime;if(t&&e)return e-t}),this.options=new fx(z(z({},gr),Sx(t))),t.telemetryEnabled===void 0&&[`localhost`,`127.0.0.1`].includes(location.hostname)&&this.options.set(`telemetryEnabled`,!1);let i={channelId:this.options.get(`channelId`),audio:{language:this.options.get(`language`),bitRate:this.options.get(`maxAudioBitRate`)},video:{bitRate:this.options.get(`maxVideoBitRate`),width:this.options.get(`maxSize`).width,height:this.options.get(`maxSize`).height}},a=an.get();a.setLevel(this.options.get(`logLevel`)),a.setDebug(!1),this.logger=a,this.webCodecsRenditionSupport=new wx(a),t.iosMediaElementEnabled!==void 0&&this.logger.warn(`Option iosMediaElementEnabled is deprecated and will be removed in a future release. Use streamToMediaElementEnabled instead.`);let o=(r=t.streamToMediaElementEnabled)==null?t.iosMediaElementEnabled:r;o!==void 0&&(this.options.set(`streamToMediaElementEnabled`,o),this.options.set(`iosMediaElementEnabled`,o));let s=t.mseEnabled!==void 0,c=t.decoders!==void 0;s&&this.logger.warn(`Option mseEnabled is deprecated and will be removed in a future release. Use decoders instead (e.g. decoders: ["wasm"]).`),s&&!c&&t.mseEnabled===!1&&this.options.set(`decoders`,[`wasm`]);let l=Rb.create(this.emitter,this.logger.createContext(`PictureInPictureModule`)),u=zn.create(),d=sy.create(this.emitter,this.logger.createContext(`ConnectionModule`),{reconnectHandler:this.options.get(`reconnectHandler`),options:this.options,onConnectInfo:this.onConnectInfo}),f=Xb.create(this.logger.createContext(`SubscriptionModule`),this.emitter,i),p=Kb.create(this.emitter,f),h=Wb.create(this.emitter,this.logger.createContext(`QualityOfServiceModule`),p),g=Bb.create(this.emitter,this.logger.createContext(`PlaybackModule`),this,this.options.get(`minBufferTime`));this.encryptedMediaExtensions=new Sa(this.emitter,this.logger.createContext(`EncryptedMediaExtensions`),t.drm),this.drm={setHeaders:e=>{this.encryptedMediaExtensions.headers=e},setQueryParams:e=>{this.encryptedMediaExtensions.queryParams=e}};let _=Ky.create(this.emitter),v=this.options.get(`poster`),y=v===!0?this.getThumbnailUrl():v||void 0,b,x,ee;if(this.willUseMediaSource()){let e=new el({type:this.options.get(`media`)===`audio`?`audio`:`video`,autoplay:!1,muted:this.options.get(`muted`)||this.options.get(`media`)===`video`,volume:this.options.get(`volume`),logger:this.logger.createContext(`MediaElement`),poster:y});e.on(`buffer state`,e=>this.onMediaElementBufferState(e,b)),e.on(`needs user input`,e=>this.emitter.emit(`needs user input`,e)),e.on(`volume state`,e=>this.emit(`volume state`,e)),e.on(`media element state`,e=>this.onMediaElementState(e)),this.element=e.element,this.playbackSource=e,Sa.isSupported()&&this.encryptedMediaExtensions.attach(e.element),b=kb.create(this.logger.createContext(`MseModule`),this.emitter,this.element),this.options.get(`pauseSupportEnabled`)||(x=lx.create(this.logger.createContext(`UnpauseModule`),e,_)),this.options.get(`pictureInPictureEnabled`)&&this.emitter.emit(`add picture in picture listener`,{element:e.element})}else if(this.options.get(`streamToMediaElementEnabled`)&&Et(this.browser)){let e=_b.create(this.emitter,this.logger.createContext(`ModernCanvasModule`),this.pool,this,{type:this.options.get(`media`)===`audio`?`audio`:`video`,muted:this.options.get(`muted`)||this.options.get(`media`)===`video`,volume:this.options.get(`volume`),poster:y,offscreenCanvas:this.offscreenCanvasElement,bufferTime:this.options.get(`minBufferTime`)}),t=e.element();this.element=t.element,this.playbackSource=e,ee=e;let n=this.browser.platform.isIOS&&this.browser.platform.iosVersion<=15;this.options.get(`pictureInPictureEnabled`)&&!n&&this.emitter.emit(`add picture in picture listener`,{element:this.element}),this.options.get(`pauseSupportEnabled`)||(x=lx.create(this.logger.createContext(`UnpauseModule`),t,_))}else{let e;e=hb.create(this.emitter,this.logger.createContext(`LegacyCanvasModule`),this.pool,this,this.options.get(`muted`)||this.options.get(`media`)===`video`,this.options.get(`volume`),()=>{this.setElement(e.element())},this.options.get(`minBufferTime`)),this.element=e.element(),this.playbackSource=e,ee=e,this.options.get(`iosWakeLockEnabled`)&&(this.wakeLock=new Wc)}this.emitter.on(`channel reset`,this.resetModules),this.emitter.on(`no data timeout`,this.resetModules),this.emitter.on(`media element state`,e=>this.onMediaElementState(e)),this.emitter.on(`volume state`,e=>this.emit(`volume state`,e)),this.options.get(`pauseSupportEnabled`)||this.emitter.on(`exit picture in picture`,()=>u.setTimeout(()=>this.play(),0)),this.emitter.on(`constraint cap changed`,e=>{this.logger.info(`new cap set`,{cap:e}),this.alignSizeAndBitRate(this.targetSubscription)}),this.pictureInPicture={enter:()=>l.requestPictureInPicture(),exit:()=>l.exitPictureInPicture(),isActive:()=>l.isPictureInPictureActive(),isSupported:()=>l.isPictureInPictureSupported()},this.emitter.on(`error`,e=>{if(e.type()===`external`&&this.emit(`error`,e),e.isFatal())return()=>void this.unload()});let te=this.willUseMediaSource(),ne=te?!this.browser.platform.isWebKit:!0,re={getTargetBufferTime:()=>g.getTargetBufferTime(),getNextBufferedRangeStart:b?e=>b.getNextBufferedRangeStart(e):void 0},ae=rx.create(this.emitter,this.logger.createContext(`SyncModule`),this.playbackSource,re,ne,te),S=eb.create(this.logger.createContext(`JitterModule`)),oe=(this.options.get(`edgeUrl`)||this.options.get(`url`)).replace(`wss://`,`https://`).replace(`ws://`,`http://`).replace(`//lb.`,`//errors.`),C=new URL(`/telemetry`,oe).toString();this.modules={telemetry:sx.create(this.logger.createContext(`TelemetryModule`),this.emitter,{url:C,enabled:this.options.get(`telemetryEnabled`),includeStats:!1,interval:5e3},this),bufferTime:ml.create(this.emitter,this.logger.createContext(`BufferTimeModule`),h,this,{maxBufferTime:this.options.get(`maxBufferTime`),minBufferTime:this.options.get(`minBufferTime`)}),incomingData:Zy.create(this.emitter),adaptivity:dl.create(this.emitter,this.logger.createContext(`AdaptivityModule`),h,{cooldownTime:Math.max(this.options.get(`minBufferTime`),2e3)}),constraintCap:fy.create(this.emitter,this.element,p,this.options.get(`abrEnabled`)?this.options.get(`sizeBasedResolutionCapEnabled`):!1),event:Yy.create(this.emitter,this.logger.createContext(`EventModule`),ae),sync:ae,jitter:S,documentState:_,connection:d,playback:g,pictureInPicture:l,timer:u,subscription:f,renditions:p,qualityOfService:h,mseModule:b,unpause:x,canvasModule:ee},this.modules.adaptivity.isEnabled=this.options.get(`abrEnabled`),this.emitter.on(`page active`,t=>{if(t&&typeof this.disconnectTimeout==`number`&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),t)this.playbackSource.isPaused||(this.logger.debug(`Unsuspending`),this.unsuspend());else if(this.logger.debug(`Suspending`),this.suspend(),this.modules.decoder)if(this.options.get(`iosBackgroundPlayEnabled`)){var n;this.modules.decoder.unsuspend(),(n=this.modules.canvasModule)==null||n.unsuspend()}else this.modules.connection.disconnect();else this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{let e=this.playbackState===`paused`||this.muted;this.connectionState===`connected`&&e&&(this.emitter.emit(`flush buffers`),this.modules.connection.disconnect(`Page inactive timeout`))},e.DISCONNECT_TIMEOUT)});let se;this.emitter.on(`context switch complete`,()=>{se||(se=window.setTimeout(()=>{window.clearTimeout(se),se=void 0,this.emit(`context switch`,`completed`),this.emitLanguagesIfChanged()},this.targetBufferTime))}),this.emitter.on(`context switch started`,()=>this.emit(`context switch`,`started`)),this.emitter.on(`needs user input`,e=>this.emit(`needs user input`,e)),this.emitter.on(`event`,e=>{switch(e.type){case`metadata`:this.emit(`metadata`,e);break;case`channel switch`:this.emit(`channel switch`,{channelId:e.channelId});break;case`language switch`:this.emit(`language switch`,{language:e.language});break}}),this.emitter.on(`buffer state event`,this.onBufferEvent),this.emitter.on(`playback state`,e=>this.emit(`playback state`,e)),this.emitter.on(`rendition level changed`,({to:e})=>{e&&this.emit(`rendition level`,e)}),this.emitter.on(`connection state`,e=>{this.emit(`connection state`,e)}),this.emitter.on(`recovered from media error`,()=>{this.modules.adaptivity.reset(this.targetBufferTime*2)}),this.emitter.once(`connect info`,e=>{var t,n;let r=((t=(n=e.telemetry)==null?void 0:n.probability)==null?1:t)>=Math.random();if(e.telemetry){var i;(i=this.modules.telemetry)==null||i.unload(),this.modules.telemetry=sx.create(this.logger.createContext(`TelemetryModule`),this.emitter,z(z({},e.telemetry),{},{enabled:this.options.get(`telemetryEnabled`)&&r}),this),this.modules.telemetry.load()}}),this.emitter.on(`adapt level`,e=>{this.logger.debug(`adapt level`,{direction:e});let t=this.modules.renditions.getRenditionLevels(),n=this.modules.renditions.getRenditionLevel(),r=t.findIndex(e=>e===n),i=t.length-1,a=r;switch(e){case`upgrade`:{var o,s,c,l,u;let e=Math.min(r+1,i),n=t[e],d=(o=this.modules.connection.estimatedBandwidth)==null?pr():o,f=((s=n==null||(c=n.audio)==null?void 0:c.bitRate)==null?0:s)+((l=n==null||(u=n.video)==null?void 0:u.bitRate)==null?0:l),p=d*2>f;n&&p&&this.modules.adaptivity.isQoSOk(n)&&(a=e)}break;case`downgrade`:a=Math.max(r-1,0);break;case`double downgrade`:a=Math.max(r-2,0);break;case`reconnect`:if(r===0||this.modules.qualityOfService.timeSpentBufferingLast(6e3)>5e3){if(!this.modules.connection.lastConnectionTime||Date.now()-this.modules.connection.lastConnectionTime<this.modules.qualityOfService.fatalQosGraceTime()||this.modules.connection.getState()!==`connected`)return;this.modules.qualityOfService.incrementFatalQosCount(),this.logger.info(`Reconnecting due to poor qos`),this.modules.connection.reconnect(`Fatal QOS`),this.emitter.emit(`adapted level`);return}else a=0}if(a===r)return;let d=t[a];this.alignSizeAndBitRate(z(z({},this.targetSubscription),{},{video:z(z({},this.targetSubscription.video),d==null?void 0:d.video),audio:z(z({},this.targetSubscription.audio),d==null?void 0:d.audio)})),this.emitter.emit(`adapted level`)}),this.emitter.on(`text track data`,e=>{let t=j(Ex,this).find(t=>t.language===e.language),n=this.modules.sync.getTimeshiftOffset()/1e3,r=n-j(Tx,this);if(k(Tx,this,n),t){if(t.cues)for(let e of t.cues)e.startTime-=r,e.endTime-=r;for(let r of e.cues){let e=new VTTCue(r.startTime-n,r.endTime-n,r.text);t.addCue(e)}}}),this.emitter.on(`received signal`,e=>{let t=e,n=this.modules.subscription.getCurrentSubscription();switch(this.logger.debug(`received`,z({},t)),t.type){case`client ip`:this.clientIp=t.ip;break;case`renditions`:this.updateTextTracks(t.renditions),k(Dx,this,this.filterRenditions(t.renditions).then(e=>{this.emitter.emit(`renditions`,{renditions:e,channelId:this.currentSubscription.channelId}),this.emit(`rendition levels`,this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()}).finally(()=>{k(Dx,this,void 0)}));break;case`subscription changed`:var r;try{Cx(t.subscription)}catch(e){this.emitter.emit(`error`,new U(`Subscription failed validation`,{source:e instanceof Error?e:void 0,isFatal:!1,code:`subscription_failed_validation`}))}this.emitter.emit(`subscription changed`,{reset:t.reset,to:t.subscription,from:this.modules.subscription.getCurrentSubscription()}),t.reset&&n.channelId!==t.subscription.channelId&&(this.emit(`error`,yi(t.subscription.channelId)),this.emit(`channel switch failed`,{channelId:n.channelId})),this.modules.sync.allowTimeshiftOnAudio=!((r=t.subscription.video)!=null&&r.codec),this.modules.adaptivity.reset();break;case`timing info`:this.modules.sync.updateChannelSyncInfo(t.timingInfo.channelId,t.timingInfo),this.emit(`server wallclock time`,t.timingInfo.wallclockTime);break}}),this.emitter.on(`channel switch timeout`,e=>{this.emit(`error`,yi(e)),this.emit(`channel switch failed`,{channelId:this.currentSubscription.channelId})}),this.emitter.on(`received data`,e=>{let t=this.modules.subscription.getCurrentSubscription(),n=Vc(e);if(!t){this.logger.warn(`Received unwanted message`,z({},n));return}ce(z(z({},n),{},{channelId:t.channelId}))}),this.emitter.on(`received moq data`,e=>{let t=e.payload.mediaType(),n=e.channelId,r=e.renditionId,i=this.modules.sync.processFragment(n,e.payload);if(t!==`text`&&this.modules.jitter.recordSample({type:t,renditionId:r,timestamp:i.baseMediaDecodeTime(),timescale:i.timescale()}),e.switchInfo.channelId&&(e.switchInfo.drmTransition&&this.emitter.emit(`error`,bi(`Switching between DRM and non-DRM channels is not supported`,!0)),this.encryptedMediaExtensions.onChannelSwitch(),this.emit(`rendition levels`,this.modules.renditions.getRenditionLevels()),this.modules.event.addEvent({type:`channel switch`,channelId:e.switchInfo.channelId,timestamp:i.baseMediaDecodeTime()/i.timescale()*1e3})),e.switchInfo.language&&this.modules.event.addEvent({type:`language switch`,language:e.switchInfo.language,timestamp:i.baseMediaDecodeTime()/i.timescale()*1e3}),this.modules.incomingData.add(t,e.payload.rawBytes().byteLength),(t===`video`||t===`audio`)&&this.hasListeners(`cmaf fragment`)&&this.emit(`cmaf fragment`,{mediaType:t,initSegment:i.header().rawBytes().slice(),fragment:i.rawBytes().slice(),isKeyframe:i.startsWithKeyframe()}),i.fragment().emsgs.forEach(e=>{if(!e.presentationTime)return;let t=Ka(e.data);t&&this.modules.event.addEvent({id:e.id,timestamp:e.presentationTime/e.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:t.txx.value,type:`metadata`})}),this.modules.decoder){var a,o;let p=(a=i.header().init().moov.traks[0])==null?void 0:a.mdia.minf.stbl.stsd,m=(o=p==null?void 0:p.codec)==null?`h264`:o,h;if(m===`h264`){var s;h=p==null||(s=p.avc1)==null?void 0:s.avcC.bytes}else if(m===`h265`){var c,l,u;let e=(c=p==null||(l=p.hvc1)==null?void 0:l.data())==null?p==null||(u=p.hev1)==null?void 0:u.data():c;e&&(h=Wa(e))}else if(m===`av1`&&p!=null&&p.av01)h=rc(p.av01.data());else if(m===`aac`){var d;h=p==null||(d=p.mp4a)==null||(d=d.esds)==null?void 0:d.decoderConfig}else if(m===`opus`){var f;h=jc(p==null||(f=p.opus)==null?void 0:f.dops)}if(h){let i=h.buffer.slice(h.byteOffset,h.byteOffset+h.byteLength);if(t===`text`)throw Error(`Subtitles are not supported`);this.emitter.emit(`init segment`,{initSegment:{channelId:n,renditionId:r,data:i,timescale:1e3,type:t,codec:m,codecString:e.codecString},mimeType:t})}else m&&this.logger.warn(`Failed to extract init data for codec`,{codec:m,channelId:n,renditionId:r});for(let e=0;e<i.samplesCount();e++){let t=i.sample(e);t&&this.emitter.emit(`coded sample`,z(z({},t),{},{renditionId:r,channelId:n,data:t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)}))}}else this.emitter.emit(`fragment`,{mimeType:e.mimeType,codec:e.codec,fragment:i,channelId:n,renditionId:r})});let w=this.options.get(`container`);w&&this.attach(w),this.logger.info(`Created Vindral instance`,{options:this.options});let ce=function(){var e=N(function*(e){let t=e.channelId;j(Dx,n)&&(yield j(Dx,n));let r=n.modules.renditions.getRendition(e.renditionId,t);if(!Rc(e.flags)){if(zc(e.flags)){let t=new TextDecoder().decode(e.payload),r=n.modules.sync.getTimeshiftOffset();if(e.renditionId!==0){let e=Jn(t);if(e&&e.language!==void 0){let t=new Xc().parse(e.content||``),i=r/1e3,a=j(Ex,n).find(t=>t.language===e.language),o=i-j(Tx,n);if(k(Tx,n,i),a){if(a.cues)for(let e of a.cues)e.startTime-=o,e.endTime-=o;for(let e of t){let t=new VTTCue(e.startTime-i,e.endTime-i,e.text);a.addCue(t)}}}}else n.modules.event.addEvent({timestamp:e.timestamp/e.timescale*1e3-n.modules.sync.getTimeshiftOffset(),content:t,type:`metadata`})}else if(r!=null&&r.codec){let i=or(r.codec);if(i===`text`)throw Error(`Subtitles are not supported`);if(n.modules.incomingData.add(i,e.payload.byteLength),Lc(e.flags)){let a=z(z({type:i,data:e.payload,codec:r.codec},e),{},{channelId:t}),o=wc(a.codec,a.payload);o&&n.sizes.set(a.renditionId,o);let s=fr({codec:r.codec,codecString:r.codecString});n.emitter.emit(`init segment`,{initSegment:a,mimeType:s}),n.emit(`initialized media`)}else{let t=yx(e,r,n.sizes.get(e.renditionId));n.modules.jitter.recordSample(t);let a=n.sampleProcessingSesssions.get(i);if(!a)a=mx(n.modules.sync.processSample(t)),n.sampleProcessingSesssions.set(i,a);else{let e=n.willUseMediaSource()&&n.isSwitchingRenditionLevel&&t.type===`video`,r=a(n.modules.sync.processSample(t),e),i=t;r.forEach(e=>{n.modules.event.extractEvent(e,i),n.emitter.emit(`coded sample`,e),i=e})}}}}});return function(t){return e.apply(this,arguments)}}();this.options.get(`maxVideoBitRate`)!==2**53-1&&(this.maxVideoBitRate=this.options.get(`maxVideoBitRate`)),this.options.get(`maxAudioBitRate`)!==2**53-1&&(this.maxAudioBitRate=this.options.get(`maxAudioBitRate`)),Rt(this.options.get(`maxSize`),mr())||(this.maxSize=this.options.get(`maxSize`)),this.options.get(`burstEnabled`)&&f.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){if(e===this.muted)return;let t=this.playbackSource.muted;this.playbackSource.muted=e,!e&&t&&!this.playbackSource.isPaused&&this.playbackSource.play()}get muted(){return this.playbackSource.muted}get media(){return this.options.get(`media`)}get videoBitRate(){return this.modules.incomingData.averageBitRate(`video`)}get audioBitRate(){return this.modules.incomingData.averageBitRate(`audio`)}get connectionState(){return this.modules.connection.getState()}get playbackState(){return this.modules.playback.getState()}get bufferFullness(){return this.modules.playback.getBufferFullness()}get sizeBasedResolutionCapEnabled(){return this.modules.constraintCap.sizeBasedResolutionCapEnabled}set sizeBasedResolutionCapEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e}get abrEnabled(){return this.modules.adaptivity.isEnabled}set abrEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e?this.options.get(`sizeBasedResolutionCapEnabled`):!1,this.modules.adaptivity.isEnabled=e,this.alignSizeAndBitRate(this.targetSubscription)}get serverEdgeTime(){return this.modules.sync.getLiveEdgeTimeLatencyAdjusted(this.currentSubscription.channelId)}get serverWallclockTime(){return this.modules.sync.getWallclockTimeLatencyAdjusted(this.currentSubscription.channelId)}get currentTime(){return this.modules.sync.serverCurrentTime}get channelCurrentTime(){return this.modules.sync.channelCurrentTime}get targetBufferTime(){return this.modules.playback.getTargetBufferTime()}set targetBufferTime(e){this.modules.playback.getTargetBufferTime()!==e&&(this.modules.playback.setTargetBufferTime(e),this.playbackSource.currentTime=this.modules.sync.serverCurrentTime,this.options.get(`burstEnabled`,this.channelId)?this.modules.subscription.enableBurst(this.targetBufferTime):this.modules.subscription.enableBurst(0))}updateBufferTimeConfig(e){this.modules.bufferTime.updateConfig(e)}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)==null?0:e)+this.modules.connection.rtt/2}get playbackWallclockTime(){if(!(!this.serverWallclockTime||!this.playbackLatency))return this.serverWallclockTime-this.playbackLatency}get channels(){return this._channels}get languages(){return this.modules.renditions.getLanguages()}get language(){return this.modules.subscription.getTargetSubscription().audio.language}set language(e){if(e===this.language)return;let t=this.languages;if(e!==void 0&&t.length>0&&!t.includes(e)){this.logger.warn(`Language "${e}" is not available. Available languages: ${t.join(`, `)}`);return}this.modules.subscription.setLanguage(e),this.alignSizeAndBitRate(this.targetSubscription)}set textTrack(e){e!==this.textTrack&&(j(Ex,this).forEach(t=>{if(t.label===e)t.mode=`showing`;else{if(t.mode===`showing`&&t.cues)for(let e of[...t.cues])t.removeCue(e);t.mode=`hidden`}}),this.emitter.emit(`text track`,e))}get textTracks(){return j(Ex,this).filter(e=>e.mode!==`disabled`).map(e=>e.label)}get textTrack(){var e;return(e=j(Ex,this).find(e=>e.mode===`showing`))==null?void 0:e.label}get channelId(){var e,t;return(e=(t=this.modules)==null?void 0:t.subscription.getTargetSubscription().channelId)==null?this.options.get(`channelId`):e}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);let t=this.options.get(`media`)===`audio`?[]:this.options.get(`videoCodecs`),n=this.modules.renditions.getAudioRenditions(e),r=this.modules.renditions.getVideoRenditions(e),i=this.targetSubscription.audio.language,a=n==null?void 0:n.some(e=>e.language===i),o=t.find(e=>(r==null?void 0:r.find(t=>t.codec===e))!==void 0);o&&this.modules.subscription.setVideoCodec(o),this.logger.debug(`Channel switch - started`,{audioRenditions:n,targetSubscriptionLanguage:i,targetHasCurrentLanguage:a}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var e,t;let{width:n,height:r}=(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.video)==null?mr():e;return{width:n,height:r}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,t;return(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.video.bitRate)==null?pr():e}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,t;return(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.audio.bitRate)==null?pr():e}set maxAudioBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({audio:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get renditionLevels(){return this.modules.renditions.getRenditionLevels()}get currentRenditionLevel(){return this.modules.renditions.getRenditionLevel()}get targetRenditionLevel(){return this.modules.renditions.getRenditionLevel(this.modules.subscription.getTargetSubscription())}get isSwitchingRenditionLevel(){return this.modules.subscription.isSwitchingSubscription()}get videoBufferedRanges(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getBuffer(`video`))==null?(r=this.modules.decoder)==null?void 0:r.getBuffer(`video`):t)==null?[]:e}get audioBufferedRanges(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getBuffer(`audio`))==null?(r=this.modules.decoder)==null?void 0:r.getBuffer(`audio`):t)==null?[]:e}get videoKeyframeTimestamps(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getVideoKeyframeTimestamps())==null?(r=this.modules.decoder)==null?void 0:r.getVideoKeyframeTimestamps():t)==null?[]:e}getApiClient(){return this.modules.connection.apiClient}get lastBufferEvent(){return this.modules.playback.getLastBufferStateEvent()}get activeRatios(){return this.modules.qualityOfService.activeRatios()}get bufferingRatios(){return this.modules.qualityOfService.bufferingRatios()}get timeSpentBuffering(){return this.modules.qualityOfService.timeSpentBuffering()}get timeActive(){return this.modules.qualityOfService.timeActive()}get mediaElement(){return this.element}get audioNode(){var e;return(e=this.modules)!=null&&e.canvasModule?this.modules.canvasModule.audioNode:void 0}get drmStatistics(){var e;return(e=this.encryptedMediaExtensions)==null?void 0:e.getStatistics()}get uptime(){return Date.now()-this.createdAt}suspend(){this.isSuspended||(Object.values(this.modules).forEach(e=>{e&&`suspend`in e&&e.suspend()}),this.isSuspended=!0)}unsuspend(){this.isSuspended&&(Object.values(this.modules).forEach(e=>{e&&`unsuspend`in e&&e.unsuspend()}),this.isSuspended=!1)}alignSizeAndBitRate(e){let t=this.modules.constraintCap.constrainSubscription(z(z({},e),{},{video:z({},e.video),audio:z({},e.audio)})),n=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&n&&(t.audio.bitRate=n.audio.bitRate,t.video.bitRate=n.video.bitRate,t.video.width=n.video.width,t.video.height=n.video.height);let r=this.modules.renditions.getRenditionLevel(t);if(r){if(r.video&&(this.modules.subscription.setVideoBitRate(r.video.bitRate),this.modules.subscription.setSize(r.video)),r.audio)this.modules.subscription.setAudioBitRate(r.audio.bitRate),this.modules.subscription.setLanguage(r.audio.language);else if(t.audio.language){let e=this.modules.renditions.getAudioRenditions(t.channelId);!this.abrEnabled&&n&&(e=e==null?void 0:e.filter(e=>e.bitRate<n.audio.bitRate));let r=t.audio.language,i=e==null?void 0:e.some(e=>e.language===r),a=e==null?void 0:e.find(e=>e.language),o=(e==null?void 0:e.length)&&e[0]||void 0;i||(a?(this.logger.debug(`Randomizing language since target did not have current language`),this.modules.subscription.setAudioBitRate(a.bitRate),this.modules.subscription.setLanguage(a.language)):(this.logger.debug(`Randomizing audio rendition since target did not have current language`),o!=null&&o.bitRate&&this.modules.subscription.setAudioBitRate(o.bitRate),this.modules.subscription.setLanguage(o==null?void 0:o.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}resolvedDecoder(e){return vx(this.options.get(`decoders`,e),this.browser.supportsMediaSource,this.options.get(`drm`))}willUseMediaSource(){return this.resolvedDecoder()===`mse`}shouldUseWebCodecs(e){return this.resolvedDecoder(e)===`webcodecs`}isWebCodecsVideoAvailable(e){return this.shouldUseWebCodecs(e)&&typeof VideoDecoder<`u`}isWebCodecsAudioAvailable(e){return this.shouldUseWebCodecs(e)&&typeof AudioDecoder<`u`}shouldUseOffscreenCanvas(e){let t=this.options.get(`offscreenCanvasEnabled`,e);return t===void 0?this.shouldUseWebCodecs(e):t}};m(Ox,`MAX_POOL_SIZE`,10),m(Ox,`DISCONNECT_TIMEOUT`,15*1e3),m(Ox,`REMOVE_CUE_THRESHOLD`,1e3*10);var kx={bar:`_bar_qm7bl_1`,hidden:`_hidden_qm7bl_47`},Ax=`_withThumbnails_suenn_19`,jx={"channel-selection-item":`_channel-selection-item_suenn_1`,"channel-selection-item-selected":`_channel-selection-item-selected_suenn_8`,"channel-selection-item-image":`_channel-selection-item-image_suenn_13`,withThumbnails:Ax,"hide-on-small":`_hide-on-small_suenn_27`},Mx={"icon-button":`_icon-button_5fg7v_1`},Nx={viewBox:`-10 -10 44 44`,content:`<g fill="none" stroke="white">
|
|
1223
|
+
`);switch(e){case`beacon`:navigator.sendBeacon(i.options.url,t);break;default:i.parentContext.connectionState===`connected`?i.emitter.emit(`send signal`,{type:`telemetry`,body:t}):yield wl(new URL(i.options.url),{body:t,headers:{"Content-Type":`text/plain`}});break}i.retries=0,i.unsentLines.clear()}catch(e){i.retries++}}});return function(t){return e.apply(this,arguments)}}()),m(this,`onVisibilityChange`,e=>{e===`hidden`&&(this.addStats({isFinal:!0,initiator:`visibilitychange`}),this.send(`beacon`))}),m(this,`onPageHide`,e=>{this.addStats({isFinal:!0,initiator:`pagehide`},{persisted:e.persisted}),this.send(`beacon`)}),m(this,`onRejection`,e=>this.addError(e.reason)),m(this,`onError`,e=>this.addError(e.error)),m(this,`addError`,e=>{let{includeErrors:t,maxErrorReports:n}=this.options;if(t&&e instanceof U){if(this.errorCount++,this.errorCount>n)return;let t=this.parentContext.getStatistics();this.unsentLines.push(ox(`error`,z(z({},t),e.toStringifiable())))}}),this.logger=e,this.emitter=t,this.options=z(z({},ax),n),this.parentContext=r}};ix=sx,m(sx,`create`,(e,t,n,r)=>new ix(e,t,n,r)),H(),h();var cx,lx=class{constructor(e,t,n){m(this,`logger`,void 0),m(this,`element`,void 0),m(this,`documentState`,void 0),m(this,`timers`,new zn),m(this,`unload`,()=>{this.timers.unload()}),m(this,`unpause`,()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug(`Unpause video`),this.element.tryPlay())}),this.logger=e,this.element=t,this.documentState=n,this.timers.setInterval(this.unpause,100)}};cx=lx,m(lx,`create`,(e,t,n)=>new cx(e,t,n)),h();var ux=[`minBufferTime`,`maxBufferTime`,`burstEnabled`,`sizeBasedResolutionCapEnabled`,`separateVideoSocketEnabled`,`webcodecsHardwareAcceleration`,`offscreenCanvasEnabled`,`videoCodecs`];function dx(e){return ux.includes(e)}var fx=class{constructor(e){m(this,`options`,void 0),m(this,`overrides`,new Map),this.options=e}getOptions(){return this.options}addOverrides(e,t){this.overrides.set(e,t)}set(e,t){this.options[e]=t}get(e,t){if(t&&dx(e)){var n;let r=(n=this.overrides.get(t))==null?void 0:n[e];if(r!==void 0)return r}return this.options[e]}getOverride(e,t){var n;return(n=this.overrides.get(t))==null?void 0:n[e]}};B();var px=6,mx=e=>{let t=[e],n=0,r=0,i=!1,a=(e,t)=>{var i,a;if(e.flags&&Ic(e.flags)){var o;n=(o=e.compositionTimeOffset)==null?0:o}e.timestamp+=n,e.compositionTimeOffset=((i=e.compositionTimeOffset)==null?0:i)-n;let s=e.timestamp/e.timescale,c=t.flags&&Ic(t.flags)?(a=t.compositionTimeOffset)==null?0:a:n,l=(t.timestamp+c)/t.timescale,u=Math.max(0,Math.round((l-s)*e.timescale));return u>0&&(r=u),z(z({},e),{},{duration:u>0?u:r})};return(e,n=!1)=>{if(e.flags&&Ic(e.flags)&&n&&(i=!i),!(n&&t.length<px&&i)&&t.length>0){i=!1;let n=e;for(let e=t.length-1;e>0;e--){let r=t[e];if(!r||!n)break;r.timestamp>=n.timestamp?t.splice(e,1):n=r}let r=t.map((n,r)=>a(n,t[r+1]||e));return t=[e],r}return t.push(e),[]}},hx=[`mse`,`wasm`],gx=e=>e==null?hx:e,_x=e=>{if(!e)return!1;let t=e.headers&&Object.keys(e.headers).length>0,n=e.queryParams&&Object.keys(e.queryParams).length>0;return!!(t||n)},vx=(e,t,n)=>{if(_x(n))return`mse`;let r=gx(e);for(let e of r)switch(e){case`mse`:if(t)return`mse`;break;case`webcodecs`:if(typeof VideoDecoder<`u`)return`webcodecs`;break;case`wasm`:return`wasm`}return`wasm`};B();var yx=(e,t,n)=>{if(ur(t))return z(z({},e),{},{type:`video`,codec:t.codec,isSync:Ic(e.flags),data:e.payload,duration:0,width:t.width,height:t.height},n);if(t.codec===`webvtt`)throw Error(`WebVTT is not supported`);return z(z({},e),{},{type:`audio`,channels:t.channels,sampleRate:t.sampleRate,codec:t.codec,language:t.language,isSync:Ic(e.flags),data:e.payload,duration:0})};xi(),B();var bx=(e,t)=>e&&typeof e==`object`&&t in e,xx=e=>!(typeof e!=`object`||!bx(e,`channelId`)||typeof e.channelId!=`string`||!bx(e,`url`)||typeof e.url!=`string`||e.channelId.length===0||e.url.length===0),Sx=e=>{if(!xx(e))throw new U(`Invalid options`,{isFatal:!0,code:`invalid_options`});let t=z({},e);return Object.keys(t).forEach(e=>{let n=t;n[e]===void 0&&delete n[e]}),t},Cx=e=>{if(typeof e!=`object`||!e)throw Error(`not an object`);if(!(`video`in e))throw Error(`missing video in subscription`);if(!(`audio`in e))throw Error(`missing audio in subscription`);if(!(`channelId`in e))throw Error(`missing channelId`);return!0};Na(),Pc(),my(),h(),P();var wx=class{constructor(e){var t=this;m(this,`cache`,new Map),m(this,`inFlight`,new Map),m(this,`checkVideoSupport`,function(){var e=N(function*(e){var n;if(typeof VideoDecoder>`u`)return!1;let r=VideoDecoder.isConfigSupported;if(typeof r!=`function`)return!0;if(e.codec===`h265`&&!e.codecString)return t.logger.warn(`Missing HEVC codec string for WebCodecs support check. Falling back to optimistic support.`,{renditionId:e.id}),!0;let i=(n=e.codecString)==null?e.codec===`av1`?`av01.0.08M.08`:`avc1.42E01E`:n,a=`video|${i}|${e.width}x${e.height}`;return t.check(a,()=>r({codec:i,optimizeForLatency:!0,codedWidth:e.width,codedHeight:e.height}),!0,{message:`Failed to check WebCodecs rendition support. Falling back to optimistic support check.`,codec:i,renditionId:e.id})});return function(t){return e.apply(this,arguments)}}()),m(this,`checkAudioSupport`,function(){var e=N(function*(e){var n;if(typeof AudioDecoder>`u`)return!1;let r=AudioDecoder.isConfigSupported;if(typeof r!=`function`)return!0;let i=(n=e.codecString)==null?py(e.codec):n,a=`audio|${i}|${e.sampleRate}|${e.channels}`,o=e.codec===`aac`?Ma(e.channels,e.sampleRate):e.codec===`opus`?Mc(e.channels,e.sampleRate):void 0;return t.check(a,()=>r({codec:i,sampleRate:e.sampleRate,numberOfChannels:e.channels,description:o}),!1,{message:`Failed to check WebCodecs audio rendition support. Treating rendition as unsupported.`,codec:i,renditionId:e.id})});return function(t){return e.apply(this,arguments)}}()),m(this,`check`,(e,t,n,r)=>{let i=this.cache.get(e);if(i!==void 0)return Promise.resolve(i);let a=this.inFlight.get(e);if(a)return a;let o=Promise.resolve().then(t).then(({supported:t})=>(this.cache.set(e,t),t)).catch(t=>(this.logger.warn(r.message,{codec:r.codec,renditionId:r.renditionId,error:t}),this.cache.set(e,n),n)).finally(()=>{this.inFlight.delete(e)});return this.inFlight.set(e,o),o}),this.logger=e}};xi(),H(),h(),E(),B(),P(),M(),A();var Tx=new WeakMap,Ex=new WeakMap,Dx=new WeakMap,Ox=class e extends Bt{constructor(t){var n,r;super(),n=this,m(this,`pictureInPicture`,void 0),m(this,`drm`,void 0),m(this,`browser`,nt()),m(this,`options`,void 0),m(this,`element`,void 0),m(this,`playbackSource`,void 0),m(this,`emitter`,new Bt),m(this,`logger`,void 0),m(this,`modules`,void 0),m(this,`clientIp`,void 0),m(this,`sessionId`,void 0),m(this,`clientId`,$n()),m(this,`_channels`,[]),m(this,`createdAt`,Date.now()),m(this,`offscreenCanvasElement`,void 0),m(this,`webCodecsRenditionSupport`,void 0),m(this,`hasCalledConnect`,!1),m(this,`latestEmittedLanguages`,[]),m(this,`wakeLock`,void 0),m(this,`pool`,new ie(e.MAX_POOL_SIZE)),m(this,`userAgentInformation`,new Zn),m(this,`encryptedMediaExtensions`,void 0),T(this,Tx,0),T(this,Ex,[]),m(this,`sampleProcessingSesssions`,new Map),m(this,`sizes`,new Map),m(this,`isSuspended`,!0),m(this,`disconnectTimeout`,void 0),m(this,`offscreenSubtitleInterval`,void 0),T(this,Dx,void 0),m(this,`attach`,e=>{var t;(t=this.wakeLock)==null||t.attach(e),e.appendChild(this.element)}),m(this,`setElement`,e=>{this.element!==e&&(this.element=e,this.modules.constraintCap.setElement(e))}),m(this,`getOptions`,()=>this.options.getOptions()),m(this,`getThumbnailUrl`,()=>{let e=this.options.get(`edgeUrl`)||this.options.get(`url`);e=e.replace(`wss://`,`https://`),e=e.replace(`ws://`,`http://`),e=e.endsWith(`/`)?e.slice(0,-1):e;let t=window.devicePixelRatio||1,n=Math.round(window.innerWidth*t),r=Math.round(window.innerHeight*t),i=this.options.get(`authenticationToken`),a=i?`&auth.token=${i}`:``;return`${e}/api/thumbnail?channelId=${this.channelId}${a}&width=${n}&height=${r}`}),m(this,`updateAuthenticationToken`,e=>{this.logger.debug(`Got new auth token`,{token:e}),this.options.set(`authenticationToken`,e),this.emitter.emit(`send signal`,{type:`refresh auth`,token:e})}),m(this,`connect`,()=>{this.hasCalledConnect||(this.play(),this._connect())}),m(this,`_connect`,()=>{if(!this.hasCalledConnect){if(this.hasCalledConnect=!0,Object.values(this.modules).forEach(e=>{e&&`load`in e&&e.load()}),this.unsuspend(),this.playbackSource instanceof el){var e,t;(e=(t=this.playbackSource).load)==null||e.call(t)}this.modules.connection.connect()}}),m(this,`getCastOptions`,()=>({url:this.options.get(`url`),channelId:this.options.get(`channelId`),channelGroupId:this.options.get(`channelGroupId`),authenticationToken:this.options.get(`authenticationToken`),language:this.options.get(`language`),logLevel:this.options.get(`logLevel`),minBufferTime:this.options.get(`minBufferTime`),tags:this.options.get(`tags`),ownerSessionId:this.sessionId,edgeUrl:this.options.get(`edgeUrl`),media:this.options.get(`media`),drm:this.options.get(`drm`)})),m(this,`onConnectInfo`,function(){var e=N(function*(e){var t;n.sessionId=$n();let r=n.modules.subscription.getTargetSubscription(),i=e.channels.find(e=>e.channelId===r.channelId);if(n.emitter.emit(`connect info`,e),`timeshift`in e&&e.timeshift?(e.timeshift,n._channels=e.channels.map(t=>z(z({},t),{},{timeshift:e.timeshift})),n.emit(`timeshift info`,e.timeshift)):n._channels=e.channels,n.updateTextTracks((t=i==null?void 0:i.renditions)==null?[]:t),!n.textTrack&&n.options.get(`textTrack`)&&(n.textTrack=n.options.get(`textTrack`)),yield Promise.all(e.channels.map(function(){var e=N(function*(e){e.overrides&&n.options.addOverrides(e.channelId,e.overrides),e.renditions=yield n.filterRenditions(e.renditions),n.modules.renditions.setRenditions(e.channelId,e.renditions)});return function(t){return e.apply(this,arguments)}}())),!i)throw pi(`external`);let a=n.options.getOverride(`sizeBasedResolutionCapEnabled`,n.channelId);a!==void 0&&(n.modules.constraintCap.sizeBasedResolutionCapEnabled=a);let o=n.options.getOverride(`minBufferTime`,n.channelId),s=n.options.getOverride(`maxBufferTime`,n.channelId);if((o||s)&&(n.modules.bufferTime.updateConfig({minBufferTime:n.options.get(`minBufferTime`,n.channelId),maxBufferTime:n.options.get(`maxBufferTime`,n.channelId)}),n.targetBufferTime=n.options.get(`minBufferTime`,n.channelId)),n.options.get(`burstEnabled`,n.channelId)&&n.modules.subscription.enableBurst(n.targetBufferTime),n.emit(`is live`,i.isLive),!i.isLive)throw Error(`Waiting for channel to go live`);n.patchSubscription(i,n.modules.connection.estimatedBandwidth),yield n.initializeDecodingModule(),n.resetModules(),n.emit(`rendition levels`,n.modules.renditions.getRenditionLevels()),n.emit(`channels`,n.channels),n.emitLanguagesIfChanged(),n.sampleProcessingSesssions.clear();let c=n.options.get(`burstEnabled`,n.channelId);return{video:n.targetSubscription.video,audio:n.targetSubscription.audio,burstMs:c?n.targetBufferTime:void 0,sessionId:n.sessionId,clientId:n.clientId,channelId:n.channelId,channelGroupId:n.options.get(`channelGroupId`),authToken:n.options.get(`authenticationToken`),textTrack:n.textTrack}});return function(t){return e.apply(this,arguments)}}()),m(this,`emitLanguagesIfChanged`,()=>{let e=this.modules.renditions.getLanguages(),t=this.latestEmittedLanguages;e.length===t.length&&e.every(e=>t.includes(e))||(this.logger.debug(`Emitting new languages`,{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit(`languages`,this.latestEmittedLanguages))}),m(this,`updateTextTracks`,e=>{let t=e.filter(e=>e.codec===`webvtt`);t.forEach(e=>{if(!j(Ex,this).find(t=>t.language===e.language)){if(this.modules.canvasModule){let t=this.modules.canvasModule.textTracks.addTextTrack(e.kind,e.label||e.language||``,e.language||``);j(Ex,this).push(t)}else if(this.mediaElement instanceof HTMLVideoElement){let t=this.mediaElement.addTextTrack(e.kind,e.label||e.language,e.language);j(Ex,this).push(t)}}});for(let e of j(Ex,this))t.find(t=>t.language===e.language)?e.mode===`disabled`&&(e.mode=`hidden`):e.mode=`disabled`;this.emit(`text tracks`,this.textTracks)}),m(this,`cleanupTextTracks`,(e=this.currentTime-2e4)=>{j(Ex,this).forEach(t=>{if(t.cues)for(let n of t.cues)n.endTime*1e3<e-2e3&&t.removeCue(n)})}),m(this,`filterRenditions`,function(){var e=N(function*(e){let t=yield Promise.all(e.map(function(){var e=N(function*(e){if(dr(e)){var t;return n.willUseMediaSource()&&!((t=ze())!=null&&t.isTypeSupported(fr(e)))?!1:n.willUseMediaSource()||e.codec===`opus`?!0:n.isWebCodecsAudioAvailable(n.channelId)?n.webCodecsRenditionSupport.checkAudioSupport(e):!1}if(!ur(e)||!n.isSupportedVideoCodecProfile(e.codec,e.codecString))return!1;if(!n.willUseMediaSource())return n.isWebCodecsVideoAvailable(n.channelId)?n.webCodecsRenditionSupport.checkVideoSupport(e):!0;let r=yield tl(e);if(!r.supported)return!1;if(e.codec===`av1`&&!r.smooth&&!r.powerEfficient)return n.logger.debug(`discarding av1 rendition, neither smooth nor power efficient`,{codecString:e.codecString,width:e.width,height:e.height,bitRate:e.bitRate,capabilities:r}),!1;let i=n.options.getOverride(`maxVideoBitRate`,n.channelId);return i?i>=e.bitRate:!0});return function(t){return e.apply(this,arguments)}}())),r=e.filter((e,n)=>t[n]),i=e.filter((e,n)=>!t[n]);i.length>0&&n.logger.debug(`unsupported renditions filtered out`,{renditions:i.map(e=>z(z({codec:e.codec,codecString:e.codecString},ur(e)?{width:e.width,height:e.height}:{}),{},{bitRate:e.bitRate}))});let a=r.filter(e=>e.codec===`h264`).reverse()[0],o=r.filter(e=>e.codec===`av1`).reverse()[0];return a&&o&&a.width>o.width&&a.height>o.height&&(n.logger.debug(`discarding av1 renditions, h264 ladder has higher resolution`,{bestH264:{width:a.width,height:a.height,bitRate:a.bitRate},bestAV1:{width:o.width,height:o.height,bitRate:o.bitRate}}),r=r.filter(e=>e.codec!==`av1`)),n.logger.debug(`supported renditions`,{renditions:r.map(e=>z(z({codec:e.codec,codecString:e.codecString},ur(e)?{width:e.width,height:e.height}:{}),{},{bitRate:e.bitRate}))}),r});return function(t){return e.apply(this,arguments)}}()),m(this,`patchSubscription`,(e,t)=>{let n=this.options.get(`maxInitialBitRate`),r=Math.min(this.options.get(`maxVideoBitRate`),n,t,this.targetSubscription.video.bitRate),i=Math.min(this.options.get(`maxAudioBitRate`),n,t,this.targetSubscription.audio.bitRate),a=this.options.get(`media`)===`audio`?[]:this.options.get(`videoCodecs`,this.channelId),o=this.supportedAudioCodecs(),s=e.renditions.filter(dr),c=e.renditions.filter(ur),l=o.find(e=>s.find(t=>t.codec===e)!==void 0),u=a.find(e=>c.find(t=>t.codec===e)!==void 0),d=s.map(e=>e.language);if(this.logger.debug(`supported and selected codecs`,{audioCodecs:o,videoCodecs:a,audioCodec:l,videoCodec:u}),u){let e=this.options.get(`maxSize`);this.modules.subscription.setVideoConstraint(z({codec:u,bitRate:this.abrEnabled?r:this.options.get(`maxVideoBitRate`)},e))}l&&(this.modules.subscription.setAudioConstraint({codec:l,bitRate:this.abrEnabled?i:this.options.get(`maxAudioBitRate`),language:this.options.get(`language`)}),(!d.includes(this.options.get(`language`))||this.language===void 0)&&this.modules.subscription.setLanguage(d[0])),this.alignSizeAndBitRate(this.targetSubscription);let f=this.modules.subscription.getTargetSubscription();this.emitter.emit(`subscription changed`,{to:f,from:this.modules.subscription.getCurrentSubscription()})}),m(this,`isSupportedVideoCodecProfile`,(e,t)=>{if(this.willUseMediaSource()){let n=ze();return n?n.isTypeSupported(fr({codec:e,codecString:t})):!0}if(this.isWebCodecsVideoAvailable(this.channelId)&&(e===`h264`||e===`h265`||e===`av1`))return!0;if(e===`h264`){let e=!!(t!=null&&t.startsWith(`avc1.42`)),n=!!(t!=null&&t.startsWith(`avc1.66.`));return e||n}return!(e===`h265`||e===`av1`)}),m(this,`supportedAudioCodecs`,()=>{if(this.options.get(`media`)===`video`)return[];let e=[];return(this.willUseMediaSource()||this.isWebCodecsAudioAvailable(this.channelId))&&e.push(`aac`),(this.browser.supportsMp4Opus&&this.options.get(`mseOpusEnabled`)||!this.willUseMediaSource())&&e.push(`opus`),this.isWebCodecsAudioAvailable(this.channelId)&&e.push(`mp3`),e}),m(this,`initializeDecodingModule`,N(function*(){var e;let t=n.currentRenditionLevel,r=[];if(!t)throw new U(`No currentRenditionLevel`,{code:`no_current_rendition_level`,isFatal:!1});if(t!=null&&t.video&&r.push({type:`video`,mimeType:fr(t.video),codec:t.video.codec}),t!=null&&t.audio&&r.push({type:`audio`,codec:t.audio.codec,mimeType:fr(t.audio),channels:t.audio.channels,sampleRate:t.audio.sampleRate}),r.length===0)throw new U(`Can't initialize decoding module without tracks`,{code:`no_tracks`,isFatal:!1});if(n.willUseMediaSource()&&n.element instanceof HTMLMediaElement){var i;n.emitter.emit(`flush buffers`),yield(i=n.modules.mseModule)==null?void 0:i.setSourceBuffers(r);return}let a=n.shouldUseWebCodecs(n.channelId),o=n.options.get(`webcodecsHardwareAcceleration`,n.channelId),s=n.shouldUseOffscreenCanvas(n.channelId)&&a,c=typeof OffscreenCanvas<`u`&&typeof HTMLCanvasElement<`u`&&typeof HTMLCanvasElement.prototype.transferControlToOffscreen==`function`,l=s&&c&&typeof VideoDecoder<`u`,u,d;if(l)try{d=document.createElement(`canvas`),_r(d),u=d.transferControlToOffscreen()}catch(e){u=void 0,d=void 0,n.logger.warn(`Failed to enable OffscreenCanvas; falling back to main thread rendering`,{error:e})}else s&&n.logger.warn(`OffscreenCanvas requested but not supported; falling back to main thread rendering`);let f=yield Wy.create(n.emitter,n.logger.createContext(`DecoderModule`),n.options.get(`logLevel`),r,n.playbackSource,n.pool,a,o,u),{videoRenderer:p}=f.getStatistics(),m=n.modules.canvasModule;if(m instanceof hb)if(p===`OffscreenCanvas`&&d){m.setVideoRenderingEnabled(!1);let e=n.element;e.parentElement?e.parentElement.replaceChild(d,e):n.logger.warn(`OffscreenCanvas rendering is active but the current element is not attached to the DOM. Updating internal element reference only.`),n.offscreenCanvasElement=d,n.setElement(d)}else{m.setVideoRenderingEnabled(!0),n.offscreenCanvasElement=void 0;let e=m.element();if(e!==n.element){let t=n.element;t.parentElement&&t.parentElement.replaceChild(e,t),n.setElement(e)}}else m instanceof _b&&(p===`OffscreenCanvas`&&d?(m.setOffscreenCanvas(d),n.offscreenCanvasElement=d):(m.setOffscreenCanvas(void 0),n.offscreenCanvasElement=void 0));(e=n.modules.decoder)==null||e.unload(),n.modules.decoder=f,n.modules.decoder.load(),n.setupOffscreenSubtitleRouting()})),m(this,`setupOffscreenSubtitleRouting`,()=>{if(this.offscreenSubtitleInterval!==void 0&&(clearInterval(this.offscreenSubtitleInterval),this.offscreenSubtitleInterval=void 0),!this.offscreenCanvasElement||!this.modules.decoder||this.modules.canvasModule instanceof _b)return;let e=this.modules.decoder,t=this.modules.canvasModule;if(!t)return;let n=!1;this.offscreenSubtitleInterval=setInterval(()=>{var r,i,a,o;if(!t.textTracks.language){n&&(e.setSubtitleCues([],0,0,1,0),n=!1);return}n=!0;let s=t.textTracks.getActiveCues(this.currentTime/1e3).map(e=>({text:e.text})),c=((r=this.element)==null?void 0:r.clientWidth)||0,l=((i=this.element)==null?void 0:i.clientHeight)||0,u=((a=this.element)==null?void 0:a.style.getPropertyValue(`--vindral-subtitle-offset`))||((o=this.element)==null?void 0:o.style.getPropertyValue(`--vindral-control-bar-offset`)),d=parseInt(u||`0`,10)||0;e.setSubtitleCues(s,c,l,globalThis.devicePixelRatio||1,-d)},100)}),m(this,`unload`,N(function*(){var t,r,i;n.logger.debug(`Unloading modules...`),n.offscreenSubtitleInterval!==void 0&&(clearInterval(n.offscreenSubtitleInterval),n.offscreenSubtitleInterval=void 0),yield Promise.all(Object.values(n.modules).map(e=>e==null?void 0:e.unload())),(t=n.wakeLock)==null||t.unload(),n.pool=new ie(e.MAX_POOL_SIZE),(r=(i=n.playbackSource).unload)==null||r.call(i),n.element.remove(),n.emitter.reset(),n.encryptedMediaExtensions.unload(),n.reset(),n.logger.debug(`Unloaded modules`)})),m(this,`userInput`,()=>{this.play()}),m(this,`pause`,()=>{this.options.get(`pauseSupportEnabled`)&&this.playbackState!==`paused`&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())}),m(this,`registerDebugInstance`,()=>{$c(this)}),m(this,`play`,()=>{var t;this.hasCalledConnect?this.unsuspend():this.playbackState!==`playing`&&(this._connect(),self.addEventListener(`__vindral_register_debug__`,this.registerDebugInstance),this.modules.timer.setInterval(()=>this.cleanupTextTracks(),e.REMOVE_CUE_THRESHOLD)),(t=this.wakeLock)==null||t.enable(),this.playbackState===`paused`&&(this.resetModules(),this.emitter.emit(`flush buffers`),this.cleanupTextTracks(2**53-1)),this.playbackSource.play()}),m(this,`getStatistics`,()=>{let e=Object.values(this.modules).reduce((e,t)=>t&&`getStatistics`in t?z(z({},e),t.getStatistics()):e,this.getRuntimeInfo()),t=Math.round(this.timeActive>0?(e.bytesReceived||0)*8/(this.timeActive/1e3):0),n=this.uptime/36e5,r=Math.max(0,(e.connectCount||0)-1),i=n>0?r/n:0,a=this.timeActive/6e4,o=Math.max(a,1),s=a>0?(e.seekAdjustmentCount||0)/o:0,c=a>0?(e.timeshiftAdjustmentCount||0)/o:0;return z(z({},e),{},{averageBitRate:t,reconnectsPerHour:i,seekAdjustmentsPerMinute:s,timeshiftAdjustmentsPerMinute:c})}),m(this,`resetModules`,()=>{Object.values(this.modules).forEach(e=>{e&&`reset`in e&&e.reset()}),this.sampleProcessingSesssions.clear(),this.playbackSource.currentTime=0,this.playbackSource.isActivated=!1}),m(this,`getRuntimeInfo`,()=>{let e=this.modules.canvasModule instanceof _b?!0:void 0;return z({uptime:Date.now()-this.createdAt,version:`4.2.1-2-gf2a1a13e`,clientId:this.clientId,sessionId:this.sessionId,channelId:this.channelId,channelGroupId:this.options.get(`channelGroupId`),ip:this.clientIp,url:this.options.get(`url`),timeToFirstFrame:this.timeToFirstFrame(),streamToMediaElementEnabled:e,iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())}),m(this,`getPlaybackBufferState`,(e,t)=>{let n=t==null?void 0:t.getBufferState(e.currentTime);if(!n)return e;let r=e.playbackState===`buffering`||n.playbackState===`buffering`?`buffering`:e.playbackState===`paused`?`paused`:`playing`;return z(z({},e),{},{buffered:n.buffered,playbackState:r})}),m(this,`onMediaElementBufferState`,(e,t)=>{this.emitter.emit(`buffer state`,this.getPlaybackBufferState(e,t))}),m(this,`onMediaElementState`,e=>{this.logger.info(`media element state`,{state:e}),this.options.get(`pauseSupportEnabled`)&&(e===`paused`?this.modules.documentState.isVisible&&(this.suspend(),this.modules.connection.disconnect()):(this.unsuspend(),this.modules.connection.getState()===`disconnected`&&this.modules.connection.unsuspend()))}),m(this,`onBufferEvent`,e=>{this.emit(`buffer state event`,e);let t=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e===`filled`&&t){var n,r,i,a;let e=Math.max(this.currentTime,(n=(r=this.videoBufferedRanges[0])==null?void 0:r.start)==null?0:n,(i=(a=this.audioBufferedRanges[0])==null?void 0:a.start)==null?0:i);this.logger.info(`Buffer filled - starting playback`,{currentTime:e}),this.playbackSource.currentTime=e,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e===`drained`&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())}),m(this,`timeToFirstFrame`,()=>{let e=this.modules.playback.getFirstFrameTime(),t=this.modules.connection.firstConnectionTime;if(t&&e)return e-t}),this.options=new fx(z(z({},gr),Sx(t))),t.telemetryEnabled===void 0&&[`localhost`,`127.0.0.1`].includes(location.hostname)&&this.options.set(`telemetryEnabled`,!1);let i={channelId:this.options.get(`channelId`),audio:{language:this.options.get(`language`),bitRate:this.options.get(`maxAudioBitRate`)},video:{bitRate:this.options.get(`maxVideoBitRate`),width:this.options.get(`maxSize`).width,height:this.options.get(`maxSize`).height}},a=an.get();a.setLevel(this.options.get(`logLevel`)),a.setDebug(!1),this.logger=a,this.webCodecsRenditionSupport=new wx(a),t.iosMediaElementEnabled!==void 0&&this.logger.warn(`Option iosMediaElementEnabled is deprecated and will be removed in a future release. Use streamToMediaElementEnabled instead.`);let o=(r=t.streamToMediaElementEnabled)==null?t.iosMediaElementEnabled:r;o!==void 0&&(this.options.set(`streamToMediaElementEnabled`,o),this.options.set(`iosMediaElementEnabled`,o));let s=t.mseEnabled!==void 0,c=t.decoders!==void 0;s&&this.logger.warn(`Option mseEnabled is deprecated and will be removed in a future release. Use decoders instead (e.g. decoders: ["wasm"]).`),s&&!c&&t.mseEnabled===!1&&this.options.set(`decoders`,[`wasm`]);let l=Rb.create(this.emitter,this.logger.createContext(`PictureInPictureModule`)),u=zn.create(),d=sy.create(this.emitter,this.logger.createContext(`ConnectionModule`),{reconnectHandler:this.options.get(`reconnectHandler`),options:this.options,onConnectInfo:this.onConnectInfo}),f=Xb.create(this.logger.createContext(`SubscriptionModule`),this.emitter,i),p=Kb.create(this.emitter,f),h=Wb.create(this.emitter,this.logger.createContext(`QualityOfServiceModule`),p),g=Bb.create(this.emitter,this.logger.createContext(`PlaybackModule`),this,this.options.get(`minBufferTime`));this.encryptedMediaExtensions=new Sa(this.emitter,this.logger.createContext(`EncryptedMediaExtensions`),t.drm),this.drm={setHeaders:e=>{this.encryptedMediaExtensions.headers=e},setQueryParams:e=>{this.encryptedMediaExtensions.queryParams=e}};let _=Ky.create(this.emitter),v=this.options.get(`poster`),y=v===!0?this.getThumbnailUrl():v||void 0,b,x,ee;if(this.willUseMediaSource()){let e=new el({type:this.options.get(`media`)===`audio`?`audio`:`video`,autoplay:!1,muted:this.options.get(`muted`)||this.options.get(`media`)===`video`,volume:this.options.get(`volume`),logger:this.logger.createContext(`MediaElement`),poster:y});e.on(`buffer state`,e=>this.onMediaElementBufferState(e,b)),e.on(`needs user input`,e=>this.emitter.emit(`needs user input`,e)),e.on(`volume state`,e=>this.emit(`volume state`,e)),e.on(`media element state`,e=>this.onMediaElementState(e)),this.element=e.element,this.playbackSource=e,Sa.isSupported()&&this.encryptedMediaExtensions.attach(e.element),b=kb.create(this.logger.createContext(`MseModule`),this.emitter,this.element),this.options.get(`pauseSupportEnabled`)||(x=lx.create(this.logger.createContext(`UnpauseModule`),e,_)),this.options.get(`pictureInPictureEnabled`)&&this.emitter.emit(`add picture in picture listener`,{element:e.element})}else if(this.options.get(`streamToMediaElementEnabled`)&&Et(this.browser)){let e=_b.create(this.emitter,this.logger.createContext(`ModernCanvasModule`),this.pool,this,{type:this.options.get(`media`)===`audio`?`audio`:`video`,muted:this.options.get(`muted`)||this.options.get(`media`)===`video`,volume:this.options.get(`volume`),poster:y,offscreenCanvas:this.offscreenCanvasElement,bufferTime:this.options.get(`minBufferTime`)}),t=e.element();this.element=t.element,this.playbackSource=e,ee=e;let n=this.browser.platform.isIOS&&this.browser.platform.iosVersion<=15;this.options.get(`pictureInPictureEnabled`)&&!n&&this.emitter.emit(`add picture in picture listener`,{element:this.element}),this.options.get(`pauseSupportEnabled`)||(x=lx.create(this.logger.createContext(`UnpauseModule`),t,_))}else{let e;e=hb.create(this.emitter,this.logger.createContext(`LegacyCanvasModule`),this.pool,this,this.options.get(`muted`)||this.options.get(`media`)===`video`,this.options.get(`volume`),()=>{this.setElement(e.element())},this.options.get(`minBufferTime`)),this.element=e.element(),this.playbackSource=e,ee=e,this.options.get(`iosWakeLockEnabled`)&&(this.wakeLock=new Wc)}this.emitter.on(`channel reset`,this.resetModules),this.emitter.on(`no data timeout`,this.resetModules),this.emitter.on(`media element state`,e=>this.onMediaElementState(e)),this.emitter.on(`volume state`,e=>this.emit(`volume state`,e)),this.options.get(`pauseSupportEnabled`)||this.emitter.on(`exit picture in picture`,()=>u.setTimeout(()=>this.play(),0)),this.emitter.on(`constraint cap changed`,e=>{this.logger.info(`new cap set`,{cap:e}),this.alignSizeAndBitRate(this.targetSubscription)}),this.pictureInPicture={enter:()=>l.requestPictureInPicture(),exit:()=>l.exitPictureInPicture(),isActive:()=>l.isPictureInPictureActive(),isSupported:()=>l.isPictureInPictureSupported()},this.emitter.on(`error`,e=>{if(e.type()===`external`&&this.emit(`error`,e),e.isFatal())return()=>void this.unload()});let te=this.willUseMediaSource(),ne=te?!this.browser.platform.isWebKit:!0,re={getTargetBufferTime:()=>g.getTargetBufferTime(),getNextBufferedRangeStart:b?e=>b.getNextBufferedRangeStart(e):void 0},ae=rx.create(this.emitter,this.logger.createContext(`SyncModule`),this.playbackSource,re,ne,te),S=eb.create(this.logger.createContext(`JitterModule`)),oe=(this.options.get(`edgeUrl`)||this.options.get(`url`)).replace(`wss://`,`https://`).replace(`ws://`,`http://`).replace(`//lb.`,`//errors.`),C=new URL(`/telemetry`,oe).toString();this.modules={telemetry:sx.create(this.logger.createContext(`TelemetryModule`),this.emitter,{url:C,enabled:this.options.get(`telemetryEnabled`),includeStats:!1,interval:5e3},this),bufferTime:ml.create(this.emitter,this.logger.createContext(`BufferTimeModule`),h,this,{maxBufferTime:this.options.get(`maxBufferTime`),minBufferTime:this.options.get(`minBufferTime`)}),incomingData:Zy.create(this.emitter),adaptivity:dl.create(this.emitter,this.logger.createContext(`AdaptivityModule`),h,{cooldownTime:Math.max(this.options.get(`minBufferTime`),2e3)}),constraintCap:fy.create(this.emitter,this.element,p,this.options.get(`abrEnabled`)?this.options.get(`sizeBasedResolutionCapEnabled`):!1),event:Yy.create(this.emitter,this.logger.createContext(`EventModule`),ae),sync:ae,jitter:S,documentState:_,connection:d,playback:g,pictureInPicture:l,timer:u,subscription:f,renditions:p,qualityOfService:h,mseModule:b,unpause:x,canvasModule:ee},this.modules.adaptivity.isEnabled=this.options.get(`abrEnabled`),this.emitter.on(`page active`,t=>{if(t&&typeof this.disconnectTimeout==`number`&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),t)this.playbackSource.isPaused||(this.logger.debug(`Unsuspending`),this.unsuspend());else if(this.logger.debug(`Suspending`),this.suspend(),this.modules.decoder)if(this.options.get(`iosBackgroundPlayEnabled`)){var n;this.modules.decoder.unsuspend(),(n=this.modules.canvasModule)==null||n.unsuspend()}else this.modules.connection.disconnect();else this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{let e=this.playbackState===`paused`||this.muted;this.connectionState===`connected`&&e&&(this.emitter.emit(`flush buffers`),this.modules.connection.disconnect(`Page inactive timeout`))},e.DISCONNECT_TIMEOUT)});let se;this.emitter.on(`context switch complete`,()=>{se||(se=window.setTimeout(()=>{window.clearTimeout(se),se=void 0,this.emit(`context switch`,`completed`),this.emitLanguagesIfChanged()},this.targetBufferTime))}),this.emitter.on(`context switch started`,()=>this.emit(`context switch`,`started`)),this.emitter.on(`needs user input`,e=>this.emit(`needs user input`,e)),this.emitter.on(`event`,e=>{switch(e.type){case`metadata`:this.emit(`metadata`,e);break;case`channel switch`:this.emit(`channel switch`,{channelId:e.channelId});break;case`language switch`:this.emit(`language switch`,{language:e.language});break}}),this.emitter.on(`buffer state event`,this.onBufferEvent),this.emitter.on(`playback state`,e=>this.emit(`playback state`,e)),this.emitter.on(`rendition level changed`,({to:e})=>{e&&this.emit(`rendition level`,e)}),this.emitter.on(`connection state`,e=>{this.emit(`connection state`,e)}),this.emitter.on(`recovered from media error`,()=>{this.modules.adaptivity.reset(this.targetBufferTime*2)}),this.emitter.once(`connect info`,e=>{var t,n;let r=((t=(n=e.telemetry)==null?void 0:n.probability)==null?1:t)>=Math.random();if(e.telemetry){var i;(i=this.modules.telemetry)==null||i.unload(),this.modules.telemetry=sx.create(this.logger.createContext(`TelemetryModule`),this.emitter,z(z({},e.telemetry),{},{enabled:this.options.get(`telemetryEnabled`)&&r}),this),this.modules.telemetry.load()}}),this.emitter.on(`adapt level`,e=>{this.logger.debug(`adapt level`,{direction:e});let t=this.modules.renditions.getRenditionLevels(),n=this.modules.renditions.getRenditionLevel(),r=t.findIndex(e=>e===n),i=t.length-1,a=r;switch(e){case`upgrade`:{var o,s,c,l,u;let e=Math.min(r+1,i),n=t[e],d=(o=this.modules.connection.estimatedBandwidth)==null?pr():o,f=((s=n==null||(c=n.audio)==null?void 0:c.bitRate)==null?0:s)+((l=n==null||(u=n.video)==null?void 0:u.bitRate)==null?0:l),p=d*2>f;n&&p&&this.modules.adaptivity.isQoSOk(n)&&(a=e)}break;case`downgrade`:a=Math.max(r-1,0);break;case`double downgrade`:a=Math.max(r-2,0);break;case`reconnect`:if(r===0||this.modules.qualityOfService.timeSpentBufferingLast(6e3)>5e3){if(!this.modules.connection.lastConnectionTime||Date.now()-this.modules.connection.lastConnectionTime<this.modules.qualityOfService.fatalQosGraceTime()||this.modules.connection.getState()!==`connected`)return;this.modules.qualityOfService.incrementFatalQosCount(),this.logger.info(`Reconnecting due to poor qos`),this.modules.connection.reconnect(`Fatal QOS`),this.emitter.emit(`adapted level`);return}else a=0}if(a===r)return;let d=t[a];this.alignSizeAndBitRate(z(z({},this.targetSubscription),{},{video:z(z({},this.targetSubscription.video),d==null?void 0:d.video),audio:z(z({},this.targetSubscription.audio),d==null?void 0:d.audio)})),this.emitter.emit(`adapted level`)}),this.emitter.on(`text track data`,e=>{let t=j(Ex,this).find(t=>t.language===e.language),n=this.modules.sync.getTimeshiftOffset()/1e3,r=n-j(Tx,this);if(k(Tx,this,n),t){if(t.cues)for(let e of t.cues)e.startTime-=r,e.endTime-=r;for(let r of e.cues){let e=new VTTCue(r.startTime-n,r.endTime-n,r.text);t.addCue(e)}}}),this.emitter.on(`received signal`,e=>{let t=e,n=this.modules.subscription.getCurrentSubscription();switch(this.logger.debug(`received`,z({},t)),t.type){case`client ip`:this.clientIp=t.ip;break;case`renditions`:this.updateTextTracks(t.renditions),k(Dx,this,this.filterRenditions(t.renditions).then(e=>{this.emitter.emit(`renditions`,{renditions:e,channelId:this.currentSubscription.channelId}),this.emit(`rendition levels`,this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()}).finally(()=>{k(Dx,this,void 0)}));break;case`subscription changed`:var r;try{Cx(t.subscription)}catch(e){this.emitter.emit(`error`,new U(`Subscription failed validation`,{source:e instanceof Error?e:void 0,isFatal:!1,code:`subscription_failed_validation`}))}this.emitter.emit(`subscription changed`,{reset:t.reset,to:t.subscription,from:this.modules.subscription.getCurrentSubscription()}),t.reset&&n.channelId!==t.subscription.channelId&&(this.emit(`error`,yi(t.subscription.channelId)),this.emit(`channel switch failed`,{channelId:n.channelId})),this.modules.sync.allowTimeshiftOnAudio=!((r=t.subscription.video)!=null&&r.codec),this.modules.adaptivity.reset();break;case`timing info`:this.modules.sync.updateChannelSyncInfo(t.timingInfo.channelId,t.timingInfo),this.emit(`server wallclock time`,t.timingInfo.wallclockTime);break}}),this.emitter.on(`channel switch timeout`,e=>{this.emit(`error`,yi(e)),this.emit(`channel switch failed`,{channelId:this.currentSubscription.channelId})}),this.emitter.on(`received data`,e=>{let t=this.modules.subscription.getCurrentSubscription(),n=Vc(e);if(!t){this.logger.warn(`Received unwanted message`,z({},n));return}ce(z(z({},n),{},{channelId:t.channelId}))}),this.emitter.on(`received moq data`,e=>{let t=e.payload.mediaType(),n=e.channelId,r=e.renditionId,i=this.modules.sync.processFragment(n,e.payload);if(t!==`text`&&this.modules.jitter.recordSample({type:t,renditionId:r,timestamp:i.baseMediaDecodeTime(),timescale:i.timescale()}),e.switchInfo.channelId&&(e.switchInfo.drmTransition&&this.emitter.emit(`error`,bi(`Switching between DRM and non-DRM channels is not supported`,!0)),this.encryptedMediaExtensions.onChannelSwitch(),this.emit(`rendition levels`,this.modules.renditions.getRenditionLevels()),this.modules.event.addEvent({type:`channel switch`,channelId:e.switchInfo.channelId,timestamp:i.baseMediaDecodeTime()/i.timescale()*1e3})),e.switchInfo.language&&this.modules.event.addEvent({type:`language switch`,language:e.switchInfo.language,timestamp:i.baseMediaDecodeTime()/i.timescale()*1e3}),this.modules.incomingData.add(t,e.payload.rawBytes().byteLength),(t===`video`||t===`audio`)&&this.hasListeners(`cmaf fragment`)&&this.emit(`cmaf fragment`,{mediaType:t,initSegment:i.header().rawBytes().slice(),fragment:i.rawBytes().slice(),isKeyframe:i.startsWithKeyframe()}),i.fragment().emsgs.forEach(e=>{if(!e.presentationTime)return;let t=Ka(e.data);t&&this.modules.event.addEvent({id:e.id,timestamp:e.presentationTime/e.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:t.txx.value,type:`metadata`})}),this.modules.decoder){var a,o;let p=(a=i.header().init().moov.traks[0])==null?void 0:a.mdia.minf.stbl.stsd,m=(o=p==null?void 0:p.codec)==null?`h264`:o,h;if(m===`h264`){var s;h=p==null||(s=p.avc1)==null?void 0:s.avcC.bytes}else if(m===`h265`){var c,l,u;let e=(c=p==null||(l=p.hvc1)==null?void 0:l.data())==null?p==null||(u=p.hev1)==null?void 0:u.data():c;e&&(h=Wa(e))}else if(m===`av1`&&p!=null&&p.av01)h=rc(p.av01.data());else if(m===`aac`){var d;h=p==null||(d=p.mp4a)==null||(d=d.esds)==null?void 0:d.decoderConfig}else if(m===`opus`){var f;h=jc(p==null||(f=p.opus)==null?void 0:f.dops)}if(h){let i=h.buffer.slice(h.byteOffset,h.byteOffset+h.byteLength);if(t===`text`)throw Error(`Subtitles are not supported`);this.emitter.emit(`init segment`,{initSegment:{channelId:n,renditionId:r,data:i,timescale:1e3,type:t,codec:m,codecString:e.codecString},mimeType:t})}else m&&this.logger.warn(`Failed to extract init data for codec`,{codec:m,channelId:n,renditionId:r});for(let e=0;e<i.samplesCount();e++){let t=i.sample(e);t&&this.emitter.emit(`coded sample`,z(z({},t),{},{renditionId:r,channelId:n,data:t.data.buffer.slice(t.data.byteOffset,t.data.byteOffset+t.data.byteLength)}))}}else this.emitter.emit(`fragment`,{mimeType:e.mimeType,codec:e.codec,fragment:i,channelId:n,renditionId:r})});let w=this.options.get(`container`);w&&this.attach(w),this.logger.info(`Created Vindral instance`,{options:this.options});let ce=function(){var e=N(function*(e){let t=e.channelId;j(Dx,n)&&(yield j(Dx,n));let r=n.modules.renditions.getRendition(e.renditionId,t);if(!Rc(e.flags)){if(zc(e.flags)){let t=new TextDecoder().decode(e.payload),r=n.modules.sync.getTimeshiftOffset();if(e.renditionId!==0){let e=Jn(t);if(e&&e.language!==void 0){let t=new Xc().parse(e.content||``),i=r/1e3,a=j(Ex,n).find(t=>t.language===e.language),o=i-j(Tx,n);if(k(Tx,n,i),a){if(a.cues)for(let e of a.cues)e.startTime-=o,e.endTime-=o;for(let e of t){let t=new VTTCue(e.startTime-i,e.endTime-i,e.text);a.addCue(t)}}}}else n.modules.event.addEvent({timestamp:e.timestamp/e.timescale*1e3-n.modules.sync.getTimeshiftOffset(),content:t,type:`metadata`})}else if(r!=null&&r.codec){let i=or(r.codec);if(i===`text`)throw Error(`Subtitles are not supported`);if(n.modules.incomingData.add(i,e.payload.byteLength),Lc(e.flags)){let a=z(z({type:i,data:e.payload,codec:r.codec},e),{},{channelId:t}),o=wc(a.codec,a.payload);o&&n.sizes.set(a.renditionId,o);let s=fr({codec:r.codec,codecString:r.codecString});n.emitter.emit(`init segment`,{initSegment:a,mimeType:s}),n.emit(`initialized media`)}else{let t=yx(e,r,n.sizes.get(e.renditionId));n.modules.jitter.recordSample(t);let a=n.sampleProcessingSesssions.get(i);if(!a)a=mx(n.modules.sync.processSample(t)),n.sampleProcessingSesssions.set(i,a);else{let e=n.willUseMediaSource()&&n.isSwitchingRenditionLevel&&t.type===`video`,r=a(n.modules.sync.processSample(t),e),i=t;r.forEach(e=>{n.modules.event.extractEvent(e,i),n.emitter.emit(`coded sample`,e),i=e})}}}}});return function(t){return e.apply(this,arguments)}}();this.options.get(`maxVideoBitRate`)!==2**53-1&&(this.maxVideoBitRate=this.options.get(`maxVideoBitRate`)),this.options.get(`maxAudioBitRate`)!==2**53-1&&(this.maxAudioBitRate=this.options.get(`maxAudioBitRate`)),Rt(this.options.get(`maxSize`),mr())||(this.maxSize=this.options.get(`maxSize`)),this.options.get(`burstEnabled`)&&f.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){if(e===this.muted)return;let t=this.playbackSource.muted;this.playbackSource.muted=e,!e&&t&&!this.playbackSource.isPaused&&this.playbackSource.play()}get muted(){return this.playbackSource.muted}get media(){return this.options.get(`media`)}get videoBitRate(){return this.modules.incomingData.averageBitRate(`video`)}get audioBitRate(){return this.modules.incomingData.averageBitRate(`audio`)}get connectionState(){return this.modules.connection.getState()}get playbackState(){return this.modules.playback.getState()}get bufferFullness(){return this.modules.playback.getBufferFullness()}get sizeBasedResolutionCapEnabled(){return this.modules.constraintCap.sizeBasedResolutionCapEnabled}set sizeBasedResolutionCapEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e}get abrEnabled(){return this.modules.adaptivity.isEnabled}set abrEnabled(e){this.modules.constraintCap.sizeBasedResolutionCapEnabled=e?this.options.get(`sizeBasedResolutionCapEnabled`):!1,this.modules.adaptivity.isEnabled=e,this.alignSizeAndBitRate(this.targetSubscription)}get serverEdgeTime(){return this.modules.sync.getLiveEdgeTimeLatencyAdjusted(this.currentSubscription.channelId)}get serverWallclockTime(){return this.modules.sync.getWallclockTimeLatencyAdjusted(this.currentSubscription.channelId)}get currentTime(){return this.modules.sync.serverCurrentTime}get channelCurrentTime(){return this.modules.sync.channelCurrentTime}get targetBufferTime(){return this.modules.playback.getTargetBufferTime()}set targetBufferTime(e){this.modules.playback.getTargetBufferTime()!==e&&(this.modules.playback.setTargetBufferTime(e),this.playbackSource.currentTime=this.modules.sync.serverCurrentTime,this.options.get(`burstEnabled`,this.channelId)?this.modules.subscription.enableBurst(this.targetBufferTime):this.modules.subscription.enableBurst(0))}updateBufferTimeConfig(e){this.modules.bufferTime.updateConfig(e)}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)==null?0:e)+this.modules.connection.rtt/2}get playbackWallclockTime(){if(!(!this.serverWallclockTime||!this.playbackLatency))return this.serverWallclockTime-this.playbackLatency}get channels(){return this._channels}get languages(){return this.modules.renditions.getLanguages()}get language(){return this.modules.subscription.getTargetSubscription().audio.language}set language(e){if(e===this.language)return;let t=this.languages;if(e!==void 0&&t.length>0&&!t.includes(e)){this.logger.warn(`Language "${e}" is not available. Available languages: ${t.join(`, `)}`);return}this.modules.subscription.setLanguage(e),this.alignSizeAndBitRate(this.targetSubscription)}set textTrack(e){e!==this.textTrack&&(j(Ex,this).forEach(t=>{if(t.label===e)t.mode=`showing`;else{if(t.mode===`showing`&&t.cues)for(let e of[...t.cues])t.removeCue(e);t.mode=`hidden`}}),this.emitter.emit(`text track`,e))}get textTracks(){return j(Ex,this).filter(e=>e.mode!==`disabled`).map(e=>e.label)}get textTrack(){var e;return(e=j(Ex,this).find(e=>e.mode===`showing`))==null?void 0:e.label}get channelId(){var e,t;return(e=(t=this.modules)==null?void 0:t.subscription.getTargetSubscription().channelId)==null?this.options.get(`channelId`):e}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);let t=this.options.get(`media`)===`audio`?[]:this.options.get(`videoCodecs`),n=this.modules.renditions.getAudioRenditions(e),r=this.modules.renditions.getVideoRenditions(e),i=this.targetSubscription.audio.language,a=n==null?void 0:n.some(e=>e.language===i),o=t.find(e=>(r==null?void 0:r.find(t=>t.codec===e))!==void 0);o&&this.modules.subscription.setVideoCodec(o),this.logger.debug(`Channel switch - started`,{audioRenditions:n,targetSubscriptionLanguage:i,targetHasCurrentLanguage:a}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var e,t;let{width:n,height:r}=(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.video)==null?mr():e;return{width:n,height:r}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,t;return(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.video.bitRate)==null?pr():e}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,t;return(e=(t=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:t.audio.bitRate)==null?pr():e}set maxAudioBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({audio:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get renditionLevels(){return this.modules.renditions.getRenditionLevels()}get currentRenditionLevel(){return this.modules.renditions.getRenditionLevel()}get targetRenditionLevel(){return this.modules.renditions.getRenditionLevel(this.modules.subscription.getTargetSubscription())}get isSwitchingRenditionLevel(){return this.modules.subscription.isSwitchingSubscription()}get videoBufferedRanges(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getBuffer(`video`))==null?(r=this.modules.decoder)==null?void 0:r.getBuffer(`video`):t)==null?[]:e}get audioBufferedRanges(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getBuffer(`audio`))==null?(r=this.modules.decoder)==null?void 0:r.getBuffer(`audio`):t)==null?[]:e}get videoKeyframeTimestamps(){var e,t,n,r;return(e=(t=(n=this.modules.mseModule)==null?void 0:n.getVideoKeyframeTimestamps())==null?(r=this.modules.decoder)==null?void 0:r.getVideoKeyframeTimestamps():t)==null?[]:e}getApiClient(){return this.modules.connection.apiClient}get lastBufferEvent(){return this.modules.playback.getLastBufferStateEvent()}get activeRatios(){return this.modules.qualityOfService.activeRatios()}get bufferingRatios(){return this.modules.qualityOfService.bufferingRatios()}get timeSpentBuffering(){return this.modules.qualityOfService.timeSpentBuffering()}get timeActive(){return this.modules.qualityOfService.timeActive()}get mediaElement(){return this.element}get audioNode(){var e;return(e=this.modules)!=null&&e.canvasModule?this.modules.canvasModule.audioNode:void 0}get drmStatistics(){var e;return(e=this.encryptedMediaExtensions)==null?void 0:e.getStatistics()}get uptime(){return Date.now()-this.createdAt}suspend(){this.isSuspended||(Object.values(this.modules).forEach(e=>{e&&`suspend`in e&&e.suspend()}),this.isSuspended=!0)}unsuspend(){this.isSuspended&&(Object.values(this.modules).forEach(e=>{e&&`unsuspend`in e&&e.unsuspend()}),this.isSuspended=!1)}alignSizeAndBitRate(e){let t=this.modules.constraintCap.constrainSubscription(z(z({},e),{},{video:z({},e.video),audio:z({},e.audio)})),n=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&n&&(t.audio.bitRate=n.audio.bitRate,t.video.bitRate=n.video.bitRate,t.video.width=n.video.width,t.video.height=n.video.height);let r=this.modules.renditions.getRenditionLevel(t);if(r){if(r.video&&(this.modules.subscription.setVideoBitRate(r.video.bitRate),this.modules.subscription.setSize(r.video)),r.audio)this.modules.subscription.setAudioBitRate(r.audio.bitRate),this.modules.subscription.setLanguage(r.audio.language);else if(t.audio.language){let e=this.modules.renditions.getAudioRenditions(t.channelId);!this.abrEnabled&&n&&(e=e==null?void 0:e.filter(e=>e.bitRate<n.audio.bitRate));let r=t.audio.language,i=e==null?void 0:e.some(e=>e.language===r),a=e==null?void 0:e.find(e=>e.language),o=(e==null?void 0:e.length)&&e[0]||void 0;i||(a?(this.logger.debug(`Randomizing language since target did not have current language`),this.modules.subscription.setAudioBitRate(a.bitRate),this.modules.subscription.setLanguage(a.language)):(this.logger.debug(`Randomizing audio rendition since target did not have current language`),o!=null&&o.bitRate&&this.modules.subscription.setAudioBitRate(o.bitRate),this.modules.subscription.setLanguage(o==null?void 0:o.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}resolvedDecoder(e){return vx(this.options.get(`decoders`,e),this.browser.supportsMediaSource,this.options.get(`drm`))}willUseMediaSource(){return this.resolvedDecoder()===`mse`}shouldUseWebCodecs(e){return this.resolvedDecoder(e)===`webcodecs`}isWebCodecsVideoAvailable(e){return this.shouldUseWebCodecs(e)&&typeof VideoDecoder<`u`}isWebCodecsAudioAvailable(e){return this.shouldUseWebCodecs(e)&&typeof AudioDecoder<`u`}shouldUseOffscreenCanvas(e){let t=this.options.get(`offscreenCanvasEnabled`,e);return t===void 0?this.shouldUseWebCodecs(e):t}};m(Ox,`MAX_POOL_SIZE`,10),m(Ox,`DISCONNECT_TIMEOUT`,15*1e3),m(Ox,`REMOVE_CUE_THRESHOLD`,1e3*10);var kx={bar:`_bar_qm7bl_1`,hidden:`_hidden_qm7bl_47`},Ax=`_withThumbnails_suenn_19`,jx={"channel-selection-item":`_channel-selection-item_suenn_1`,"channel-selection-item-selected":`_channel-selection-item-selected_suenn_8`,"channel-selection-item-image":`_channel-selection-item-image_suenn_13`,withThumbnails:Ax,"hide-on-small":`_hide-on-small_suenn_27`},Mx={"icon-button":`_icon-button_5fg7v_1`},Nx={viewBox:`-10 -10 44 44`,content:`<g fill="none" stroke="white">
|
|
1224
1224
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M5.586 15H4a1 1 0 01-1-1v-4a1 1 0 011-1h1.586l4.707-4.707C10.923 3.663 12 4.109 12 5v14c0 .891-1.077 1.337-1.707.707L5.586 15z" clip-rule="evenodd" />
|
|
1225
1225
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M17 14l2-2m0 0l2-2m-2 2l-2-2m2 2l2 2" />
|
|
1226
1226
|
</g>`},Px={viewBox:`-160 -160 832 832`,content:`<path fill="white" d="M208,432H160a16,16,0,0,1-16-16V96a16,16,0,0,1,16-16h48a16,16,0,0,1,16,16V416A16,16,0,0,1,208,432Z"/><path fill="white" d="M352,432H304a16,16,0,0,1-16-16V96a16,16,0,0,1,16-16h48a16,16,0,0,1,16,16V416A16,16,0,0,1,352,432Z"/>`},Fx={viewBox:`-6 -6 36 36`,content:`<path d="M7 17.259V6.74104C7 5.96925 7.83721 5.48837 8.50387 5.87726L18.2596 11.5681C18.5904 11.761 18.5904 12.2389 18.2596 12.4319L8.50387 18.1227C7.83721 18.5116 7 18.0308 7 17.259Z" fill="none" stroke="white" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>`},Ix={viewBox:`-10 -10 44 44`,content:`<g fill="none" stroke="white">
|
package/package.json
CHANGED
package/player.js
CHANGED