@vindral/web-sdk 3.3.2 → 3.3.3

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/index.js CHANGED
@@ -4494,7 +4494,7 @@ const dt = () => ({
4494
4494
  t(this, "getStatistics", () => ({
4495
4495
  timeSpentBuffering: this.timeSpentBuffering(),
4496
4496
  bufferingEventsCount: this.metrics.general.bufferingRanges.length,
4497
- timeSpentRatio: Object.fromEntries(this.activeRatios()),
4497
+ timeSpentRatio: [...this.activeRatios()].reduce((A, [e, s]) => (A[e] = s, A), {}),
4498
4498
  fatalQosCount: this.fatalQosCount
4499
4499
  }));
4500
4500
  t(this, "onRenditionLevelChanged", (A) => {
@@ -5613,7 +5613,7 @@ const ni = (i, A) => i && typeof i == "object" && A in i, Ui = (i) => !(typeof i
5613
5613
  const e = this.modules.canvasModule ? this.options.get("iosMediaElementEnabled") : void 0;
5614
5614
  return h({
5615
5615
  uptime: Date.now() - this.createdAt,
5616
- version: "3.3.2",
5616
+ version: "3.3.3",
5617
5617
  clientId: this.clientId,
5618
5618
  sessionId: this.sessionId,
5619
5619
  channelId: this.channelId,
package/index.umd.cjs CHANGED
@@ -23,8 +23,8 @@ void main() {
23
23
  texture_coordinate = position;
24
24
  gl_Position = model * vec4(position, 0.0, 1.0);
25
25
  }
26
- `,Si=(i,A)=>{let e=i.getContext("webgl",A);if(e||(e=i.getContext("experimental-webgl",A)),!e)throw new y("Failed to create webgl context",{isFatal:!0,code:"failed_to_create_web_gl_context"});return e},oe=(i,A,e)=>{const s=i.createShader(A);if(!s)throw new y("Failed to create shader",{isFatal:!0,code:"failed_to_create_shader"});if(i.shaderSource(s,e),i.compileShader(s),!i.getShaderParameter(s,i.COMPILE_STATUS)){const g=i.getShaderInfoLog(s);throw new y(`Failed to compile shader: ${g!=null?g:""}`,{isFatal:!0,code:"failed_to_compile_shader"})}return s},UA=i=>{const A=i.createTexture();if(!A)throw new y("Failed to create texture",{isFatal:!0,code:"failed_to_create_texture"});return i.bindTexture(i.TEXTURE_2D,A),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),A},fi=(i,A)=>{const e=i.createBuffer();if(!e)throw new y("Failed to create buffer",{isFatal:!0,code:"failed_to_create_buffer"});return i.bindBuffer(i.ARRAY_BUFFER,e),i.bufferData(i.ARRAY_BUFFER,A.buffer,i.STATIC_DRAW),e},Di=(i,A,e)=>{const s=i.createProgram();if(!s)throw new y("Failed to create program",{isFatal:!0,code:"failed_to_create_program"});if(i.attachShader(s,e),i.attachShader(s,A),i.linkProgram(s),!i.getProgramParameter(s,i.LINK_STATUS)){const g=i.getShaderInfoLog(s);throw new y(`Failed to link program: ${g!=null?g:""}`,{isFatal:!0,code:"failed_to_link_program"})}return s},pi={width:256,codedWidth:256,height:144,codedHeight:144},yi={preserveDrawingBuffer:!1,alpha:!1,depth:!1,stencil:!1,antialias:!1,premultipliedAlpha:!1},XA=class XA extends AA{constructor(){super();t(this,"canvas",document.createElement("canvas"));t(this,"context",Si(this.canvas,yi));t(this,"pixelShader",oe(this.context,this.context.FRAGMENT_SHADER,mi));t(this,"vertexShader",oe(this.context,this.context.VERTEX_SHADER,wi));t(this,"buffer",fi(this.context,XA.SQUARE_VERTICES));t(this,"program",Di(this.context,this.vertexShader,this.pixelShader));t(this,"textures",{y:UA(this.context),u:UA(this.context),v:UA(this.context)});t(this,"size",pi);t(this,"onContextLost",e=>{const s=new Error(e instanceof WebGLContextEvent?e.statusMessage:"webgl context lost");this.emit("context lost",Ls(s)),e.preventDefault()});t(this,"onContextRestored",()=>{this.emit("context restored"),this.context=Si(this.canvas,yi),this.pixelShader=oe(this.context,this.context.FRAGMENT_SHADER,mi),this.vertexShader=oe(this.context,this.context.VERTEX_SHADER,wi),this.buffer=fi(this.context,XA.SQUARE_VERTICES),this.program=Di(this.context,this.vertexShader,this.pixelShader),this.textures={y:UA(this.context),u:UA(this.context),v:UA(this.context)},this.load()});t(this,"load",()=>{this.context.useProgram(this.program),this.setupPositionVertexAttributes(),this.setSize(pi),this.context.uniform1i(this.context.getUniformLocation(this.program,"y_texture"),0),this.context.uniform1i(this.context.getUniformLocation(this.program,"u_texture"),1),this.context.uniform1i(this.context.getUniformLocation(this.program,"v_texture"),2),this.setConversionMatrix(this.rec709())});t(this,"unload",()=>{var s;this.setSize({width:1,height:1,codedHeight:1,codedWidth:1}),[this.textures.y,this.textures.u,this.textures.v].forEach(g=>this.context.deleteTexture(g)),this.context.deleteShader(this.pixelShader),this.context.deleteShader(this.vertexShader),this.context.deleteProgram(this.program),this.context.deleteBuffer(this.buffer),this.canvas.removeEventListener("webglcontextlost",this.onContextLost),this.canvas.removeEventListener("webglcontextrestored",this.onContextRestored),(s=this.context.getExtension("WEBGL_lose_context"))==null||s.loseContext()});t(this,"resetSize",()=>{this.setSize({width:this.size.width/2,height:this.size.height/2,codedHeight:this.size.codedHeight/2,codedWidth:this.size.codedWidth/2})});t(this,"render",e=>{this.setSize({width:e.width,height:e.height,codedWidth:e.codedWidth,codedHeight:e.codedHeight}),this.context.activeTexture(this.context.TEXTURE0),this.updateTexture(this.textures.y,this.size.codedWidth,this.size.codedHeight,e.data[0]),this.context.activeTexture(this.context.TEXTURE1),this.updateTexture(this.textures.u,this.size.codedWidth/2,this.size.codedHeight/2,e.data[1]),this.context.activeTexture(this.context.TEXTURE2),this.updateTexture(this.textures.v,this.size.codedWidth/2,this.size.codedHeight/2,e.data[2]),this.context.drawArrays(this.context.TRIANGLE_STRIP,0,4)});t(this,"updateTexture",(e,s,g,I)=>{const o=this.context.LUMINANCE,B=this.context.UNSIGNED_BYTE;this.context.bindTexture(this.context.TEXTURE_2D,e),this.context.texImage2D(this.context.TEXTURE_2D,0,o,s,g,0,o,B,I)});t(this,"setupPositionVertexAttributes",()=>{const e=this.context.getAttribLocation(this.program,"position");this.context.enableVertexAttribArray(e),this.context.vertexAttribPointer(e,2,this.context.FLOAT,!1,0,0)});t(this,"setSize",e=>{uA(e,this.size)||(this.size=e,this.canvas.setAttribute("width",e.width.toString()),this.canvas.setAttribute("height",e.height.toString()),this.context.viewport(0,0,e.width,e.height),this.setModelMatrix(e.width/e.codedWidth,e.height/e.codedHeight))});t(this,"setModelMatrix",(e,s)=>{const g=this.context.getUniformLocation(this.program,"model");this.context.uniformMatrix4fv(g,!1,this.transformMatrix(e,s))});t(this,"setConversionMatrix",e=>{const s=this.context.getUniformLocation(this.program,"conversion");this.context.uniformMatrix4fv(s,!1,e)});t(this,"transformMatrix",(e,s)=>[2/e,0,0,0,0,-2/s,0,0,0,0,2/1,0,-1,1,0,1]);t(this,"rec709",()=>[1.16438,0,1.79274,-.97295,1.16438,-.21325,-.53291,.30148,1.16438,2.1124,0,-1.1334,0,0,0,1]);t(this,"rec601",()=>[1.16438,0,1.59603,-.87079,1.16438,-.39176,-.81297,.52959,1.16438,2.01723,0,-1.08139,0,0,0,1]);this.canvas.addEventListener("webglcontextlost",this.onContextLost),this.canvas.addEventListener("webglcontextrestored",this.onContextRestored,!1),this.canvas.style.width="100%",this.canvas.style.position="relative"}};t(XA,"SQUARE_VERTICES",new Float32Array([0,0,0,1,1,0,1,1]));let ot=XA;const we=class we{constructor(A,e,s){t(this,"oldTimestampLimit",400);t(this,"pool");t(this,"logger");t(this,"videoRenderer",new ot);t(this,"renderQueue",[]);t(this,"clockSource");t(this,"isFirstFrame",!0);t(this,"animationFrameRequest");t(this,"renderedFrameCount",0);t(this,"rendererDroppedFrameCount",0);t(this,"load",()=>{this.videoRenderer.load()});t(this,"unload",()=>(this.stopRender(),this.videoRenderer.unload(),Promise.resolve()));t(this,"suspend",()=>{this.renderQueue=[],this.stopRender()});t(this,"unsuspend",()=>{this.animationFrameRequest=requestAnimationFrame(this.render)});t(this,"element",()=>this.videoRenderer.canvas);t(this,"getStatistics",()=>({renderedFrameCount:this.renderedFrameCount,rendererDroppedFrameCount:this.rendererDroppedFrameCount,contextLostCount:0,contextRestoredCount:0}));t(this,"resetSize",()=>{this.videoRenderer.resetSize()});t(this,"onDecodedFrame",A=>{if(A.type==="video")if(this.isFirstFrame)this.isFirstFrame=!1,requestAnimationFrame(()=>{this.renderSample(A)});else{const e=(this.clockSource.currentTime-this.oldTimestampLimit)/1e3;this.renderQueue=this.renderQueue.filter(s=>{const g=s.timestamp/s.timescale,I=A.timestamp/A.timescale,n=g>e&&g<=I;return n||this.pool.reclaim(s.buffer),n}),this.renderQueue.push(A)}});t(this,"render",()=>{const A=this.clockSource.currentTime;let e=this.renderQueue[0],s,g=0;for(;e&&e.timestamp/e.timescale*1e3<=A;)e=this.renderQueue.shift(),e&&(g++,s&&this.pool.reclaim(s.buffer),s=e),e=this.renderQueue[0];s&&this.renderSample(s),this.rendererDroppedFrameCount+=Math.max(g-1,0),this.animationFrameRequest=requestAnimationFrame(this.render)});t(this,"renderSample",A=>{this.renderedFrameCount++,this.videoRenderer.render(A),this.pool.reclaim(A.buffer)});t(this,"stopRender",()=>{this.animationFrameRequest&&cancelAnimationFrame(this.animationFrameRequest)});this.logger=A,this.clockSource=e,this.pool=s}};t(we,"create",(A,e,s)=>new we(A,e,s));let Be=we;const Se=class Se{constructor(A,e,s,g,I){t(this,"logger");t(this,"emitter");t(this,"audioPlayer");t(this,"videoPlayer");t(this,"pool");t(this,"unmuter",new fI);t(this,"_isPaused",!1);t(this,"isDisconnected",!1);t(this,"reset",()=>{});t(this,"load",()=>{this.audioPlayer.useDefaultDestination(),this.emitter.on("decoded frame",this.onDecodedFrame),this.emitter.on("flush buffers",this.flushBuffers),this.videoPlayer.load()});t(this,"unload",()=>{this.emitter.off("decoded frame",this.onDecodedFrame),this.emitter.off("flush buffers",this.flushBuffers),this.audioPlayer.unload(),this.videoPlayer.unload()});t(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});t(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});t(this,"element",()=>this.videoPlayer.element());t(this,"getStatistics",()=>this.videoPlayer.getStatistics());t(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});t(this,"activateAudioPlayer",()=>(this.isDisconnected&&(this.isDisconnected=!1,this.audioPlayer.useDefaultDestination()),this._isPaused=!1,this.unmuter.unmute(),this.audioPlayer.play()));t(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",ti(!1,e))}this.videoPlayer.onDecodedFrame(A)});this.logger=e,this.emitter=A,this.pool=s,this.audioPlayer=ne.create(this.logger.getLogger("AudioPlayerModule"),g,{muted:I,reInitWhenStuck:!0}),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=Be.create(this.logger.getLogger("VideoPlayerModule"),this.audioPlayer,this.pool)}get volume(){return this.audioPlayer.volume}set volume(A){this.audioPlayer.volume=A}get muted(){return this.audioPlayer.muted}set muted(A){const e=this.muted;this.audioPlayer.muted=A,!A&&e&&this.activateAudioPlayer().catch(gA)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.audioPlayer.isActivated}set isActivated(A){this.audioPlayer.isActivated=A}get seekTime(){return this.audioPlayer.seekTime}get isPaused(){return this._isPaused}get isSeeking(){return this.audioPlayer.isSeeking}play(){return m(this,null,function*(){try{yield this.activateAudioPlayer()}catch(A){this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})}this.emitter.emit("media element state","playing")})}pause(){this._isPaused=!0,this.audioPlayer.pause(),this.emitter.emit("media element state","paused")}};t(Se,"create",(A,e,s,g,I)=>new Se(A,e,s,g,I));let Bt=Se;class Ct{constructor(A){t(this,"options");t(this,"getLogger",A=>new Ct(L(c({},this.options),{parent:this,category:A})));t(this,"getFullCategory",()=>{var A;return[this.category()].concat(((A=this.options.parent)==null?void 0:A.getFullCategory())||[])});t(this,"category",()=>this.options.category);t(this,"trace",(A,e)=>this.options.onLog(this,QA.TRACE,A,e));t(this,"debug",(A,e)=>this.options.onLog(this,QA.DEBUG,A,e));t(this,"info",(A,e)=>this.options.onLog(this,QA.INFO,A,e));t(this,"warn",(A,e)=>this.options.onLog(this,QA.WARN,A,e));t(this,"error",(A,e)=>this.options.onLog(this,QA.ERROR,A,e));t(this,"critical",(A,e)=>this.options.onLog(this,QA.CRITICAL,A,e));this.options=A}}const Fi=(i,A)=>Wt.indexOf(i)<Wt.indexOf(A),fe=class fe{constructor(){t(this,"level",QA.DEBUG);t(this,"categoryLevels",new Map);t(this,"getLogger",A=>new Ct({category:A,onLog:this.onLog}));t(this,"setLevel",(A,e)=>{e?this.categoryLevels.set(e,A):this.level=A});t(this,"unload",()=>{});t(this,"onLog",(A,e,s,g)=>{if(Fi(e,this.level))return;const I=A.category(),n=this.categoryLevels.get(I);if(n&&Fi(e,n))return;const o=A.getFullCategory().reduceRight((C,a)=>(C.length?C+" > ":"")+a,""),B=`[${new Date().toISOString()}][${e}][${o}] ${s}`;console.log(B,g)})}};t(fe,"create",()=>new fe);let at=fe;const De=class De{constructor(A,e,s,g,{muted:I,type:n,poster:o}){t(this,"logger");t(this,"emitter");t(this,"mediaElement");t(this,"audioPlayer");t(this,"videoPlayer");t(this,"pool");t(this,"isDisconnected",!0);t(this,"_userProvidedMuted",!1);t(this,"volumeState");t(this,"reset",()=>{});t(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()});t(this,"unload",()=>{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.mediaElement.unload(),this.audioPlayer.unload(),this.videoPlayer.unload()});t(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});t(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});t(this,"element",()=>this.mediaElement);t(this,"getStatistics",()=>this.videoPlayer.getStatistics());t(this,"activateAudioPlayer",()=>(this.isDisconnected&&this.connectStreams(),this.audioPlayer.play()));t(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});t(this,"resetCanvasSize",()=>{this.videoPlayer.resetSize()});t(this,"onEnterIOSHack",()=>{this.mediaElement._iosHackEnterPiPMode()});t(this,"onExitIOSHack",()=>{this.mediaElement._iosHackExitPiPMode()});t(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",ti(!1,e))}this.videoPlayer.onDecodedFrame(A)});t(this,"connectStreams",()=>{const A=this.videoPlayer.element().captureStream(),e=this.audioPlayer.useMediaStreamDestination().stream,s=[];s.push(...A.getTracks(),...e.getTracks()),this.mediaElement.element.srcObject=new MediaStream(s),this.isDisconnected=!1});t(this,"updateVolumeState",()=>{const A={isMuted:this.muted,volume:this.volume};uA(A,this.volumeState)||(this.volumeState=A,this.emitter.emit("volume state",this.volumeState))});this.logger=e,this.emitter=A,this.pool=s,this._userProvidedMuted=I,this.mediaElement=new We({poster:o,type:n,muted:I,autoplay:!1,logger:this.logger.getLogger("MediaElement")}),this.mediaElement.on("volume state",B=>{this.updateVolumeState(),!B.isMuted&&!this.audioPlayer.isContextRunning&&this.activateAudioPlayer().catch(gA),B.isMuted||(this._userProvidedMuted=!1)}),this.mediaElement.on("media element state",B=>{B==="paused"&&this.audioPlayer.flushBuffer(),this.emitter.emit("media element state",B)}),this.audioPlayer=ne.create(this.logger.getLogger("AudioPlayerModule"),g,{muted:!1,reInitWhenStuck:!1}),this.audioPlayer.on("stuck",()=>{this.isDisconnected=!0}),this.audioPlayer.on("state change",B=>{B==="suspended"||B==="interrupted"?this.mediaElement.muted=!0:B==="running"&&(this.mediaElement.muted=this._userProvidedMuted||document.visibilityState==="hidden"),this.updateVolumeState()}),this.videoPlayer=Be.create(this.logger.getLogger("VideoPlayerModule"),this.audioPlayer,this.pool),this.volumeState={volume:this.volume,isMuted:this.muted}}get volume(){return this.mediaElement.volume}set volume(A){this.mediaElement.volume=A}get muted(){return this.mediaElement.muted||this.audioPlayer.muted}set muted(A){const e=this.muted;this._userProvidedMuted=A,this.mediaElement.muted=A,!A&&e&&this.activateAudioPlayer().catch(gA)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.mediaElement.isActivated}set isActivated(A){this.mediaElement.isActivated=A}get seekTime(){return this.mediaElement.seekTime}get isPaused(){return this.mediaElement.isPaused}get isSeeking(){return this.mediaElement.isSeeking}play(){return m(this,null,function*(){const A=this._userProvidedMuted;return this.activateAudioPlayer().catch(()=>{A||this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})}),this.mediaElement.play()})}pause(){this.mediaElement.pause()}};t(De,"create",(A,e,s,g,I)=>new De(A,e,s,g,I));let Qt=De;const DI=()=>i=>Ri(i.buffered.start(0),i.buffered.end(i.buffered.length-1)),Ri=(i,A)=>e=>e.remove(Math.max(0,i),Math.min(Number.POSITIVE_INFINITY,A)),pI=i=>A=>A.appendBuffer(i),yI=i=>A=>A.changeType(i),FI=i=>A=>i(A);class RI{constructor(A){t(this,"commandQueue",[]);t(this,"sourceBuffer");t(this,"handleQueue",()=>{var A;this.sourceBuffer.updating||(A=this.commandQueue.shift())==null||A.execute(this.sourceBuffer)});t(this,"appendBuffer",A=>new Promise((e,s)=>{const g=new lA(pI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"execute",A=>new Promise((e,s)=>{const g=new lA(FI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"buffered",()=>this.sourceBuffer.buffered);t(this,"removeFromMediaSource",A=>{A.removeSourceBuffer(this.sourceBuffer)});t(this,"changeType",A=>new Promise((e,s)=>{const g=new lA(yI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"removeBuffer",(A,e)=>new Promise((s,g)=>{const I=new lA(Ri(A,e),s,g);this.commandQueue.push(I),this.handleQueue()}));t(this,"flush",()=>new Promise((A,e)=>{const s=new lA(DI,A,e);this.commandQueue.push(s),this.handleQueue()}));this.sourceBuffer=A,this.sourceBuffer.addEventListener("updateend",this.handleQueue)}}class ki extends AA{constructor(){super();t(this,"MediaSource",MA());t(this,"mediaSource",new this.MediaSource);t(this,"isOpen",()=>this.mediaSource.readyState==="open");t(this,"isClosed",()=>this.mediaSource.readyState==="closed");t(this,"isEnded",()=>this.mediaSource.readyState==="ended");t(this,"createObjectURL",()=>URL.createObjectURL(this.mediaSource));t(this,"attach",e=>{const s=e;if("srcObject"in s)try{s.srcObject=this.mediaSource}catch(g){if(g instanceof Error&&g.name!=="TypeError")throw g;s.src=this.createObjectURL()}else e.src=this.createObjectURL()});t(this,"detach",e=>{e.srcObject?e.srcObject=null:e.src!==""&&(URL.revokeObjectURL(e.src),e.removeAttribute(e.src)),e.load()});t(this,"addSourceBuffer",e=>{const s=this.mediaSource.addSourceBuffer(e);return new RI(s)});t(this,"removeSourceBuffer",e=>{e.removeFromMediaSource(this.mediaSource)});t(this,"endOfStream",e=>{this.mediaSource.endOfStream(e)});t(this,"onSourceOpen",()=>{this.setDurationIfNeeded(),this.emit("source open")});t(this,"onSourceEnded",()=>this.emit("source ended"));t(this,"onSourceClosed",()=>this.emit("source close"));t(this,"setDurationIfNeeded",()=>{if(Number.isNaN(this.mediaSource.duration)&&this.mediaSource.readyState==="open"){for(let e=0;e<this.mediaSource.sourceBuffers.length;e++){const s=this.mediaSource.sourceBuffers[e];if(s!=null&&s.updating)return}this.mediaSource.duration=Number.POSITIVE_INFINITY}});this.mediaSource.addEventListener("sourceopen",this.onSourceOpen),this.mediaSource.addEventListener("sourceclose",this.onSourceClosed),this.mediaSource.addEventListener("sourceended",this.onSourceEnded)}}t(ki,"isTypeSupported",e=>{var s,g;return(g=(s=MA())==null?void 0:s.isTypeSupported(e))!=null?g:!1});class Gi{constructor(){t(this,"initSegments",new Map);t(this,"set",(A,e,s)=>{var I;const g=(I=this.initSegments.get(A))!=null?I:new Map;g.set(e,s),this.initSegments.set(A,g)});t(this,"get",(A,e)=>{var s;return(s=this.initSegments.get(A))==null?void 0:s.get(e)})}}function kI(i,{mediaSource:A,mimeType:e}){return L(c({},i),{state:"initialized",mimeType:e,sourceBuffer:A.addSourceBuffer(e),isWorkingOnPendingSamples:!1,sequenceNumber:0})}function Ui({initSegments:i,pendingSamples:A}){return{state:"uninitialized",initSegments:i!=null?i:new Gi,sequenceNumber:0,isWorkingOnPendingSamples:!1,hasFirstSync:!!A,pendingSamples:A!=null?A:[],consecutiveQuotaExceededErrorCount:0,successfulAppendCalls:0}}const pe=class pe{constructor(A,e,s){t(this,"maxChunkSize",20);t(this,"minConsecutiveErrorsBeforeEmit",5);t(this,"logger");t(this,"timers",Z.create());t(this,"emitter");t(this,"mediaElement");t(this,"mediaSource",new ki);t(this,"trackContexts",new Map);t(this,"autoRecoverFromMediaErrors",!0);t(this,"quotaErrorCount",0);t(this,"recoveredFromErrorCount",0);t(this,"sourceOpenStartTime",Date.now());t(this,"sourceOpenEndTime",Date.now());t(this,"pendingTracksToAddSourceBuffers");t(this,"hasAddedInitialPosterFrame",!0);t(this,"load",()=>{this.emitter.on("init segment",this.init),this.emitter.on("coded sample",this.onCodedSample),this.emitter.on("flush buffers",this.flushBuffers)});t(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.mediaSource.off("source ended",this.onSourceEnded),this.mediaSource.off("source open",this.onSourceOpen),this.mediaSource.detach(this.mediaElement),this.trackContexts.forEach(A=>A.pendingSamples=[]),this.timers.unload(),this.logger.debug("Unloaded module")});t(this,"getStatistics",()=>{var e,s,g,I;const A={quotaErrorCount:this.quotaErrorCount,mediaSourceOpenTime:this.sourceOpenEndTime-this.sourceOpenStartTime,successfulAudioAppendsCalls:(e=this.trackContexts.get("audio"))==null?void 0:e.successfulAppendCalls,successfulVideoAppendCalls:(s=this.trackContexts.get("video"))==null?void 0:s.successfulAppendCalls};if(this.mediaElement instanceof HTMLVideoElement){const n=(I=(g=this.mediaElement).getVideoPlaybackQuality)==null?void 0:I.call(g);A.totalVideoFrames=n==null?void 0:n.totalVideoFrames,A.droppedVideoFrames=n==null?void 0:n.droppedVideoFrames}return A});t(this,"flushBuffers",()=>{this.trackContexts.forEach(A=>{A.pendingSamples=[],A.hasFirstSync=!1,A.state!=="uninitialized"&&this.mediaSource.isOpen()&&A.sourceBuffer.removeBuffer(0,Number.POSITIVE_INFINITY).catch(e=>{this.logger.error("Failed to remove buffer",{error:e})})})});t(this,"setTrackContexts",(A=new Map)=>{this.logger.debug("setTrackContexts"),["audio","video"].forEach(s=>{var n,o,B,C;const g=(o=(n=A.get(s))==null?void 0:n.pendingSamples)!=null?o:[],I=(B=A.get(s))==null?void 0:B.initSegments;for(;g.length>0&&!((C=g[0])!=null&&C.isSync);)g.shift();this.trackContexts.set(s,Ui({pendingSamples:g,initSegments:I}))})});t(this,"setSourceBuffers",A=>m(this,null,function*(){if(this.mediaSource.isClosed()){this.pendingTracksToAddSourceBuffers=A;return}let e=!0;for(const s of A){const g=this.trackContexts.get(s.type);if(!g||g.state==="uninitialized"||g.mimeType!==s.mimeType){e=!1;break}}if(e){this.logger.debug("Already setup with the correct mime types");return}for(const s of A){let g=this.trackContexts.get(s.type);g||(g=Ui({pendingSamples:[],initSegments:new Gi}),this.trackContexts.set(s.type,g)),g.state==="initialized"?s.mimeType!==g.mimeType&&(yield g.sourceBuffer.changeType(s.mimeType)):this.trackContexts.set(s.type,kI(g,{mimeType:s.mimeType,mediaSource:this.mediaSource}))}}));t(this,"getBuffer",A=>{const e=[];if(this.mediaSource.isClosed())return[];const s=this.trackContexts.get(A);if(!s||s.state==="uninitialized")return[];try{const g=s.sourceBuffer.buffered();if(!g)return[];for(let I=0;I<g.length;I++)e.push({start:g.start(I)*1e3,end:g.end(I)*1e3});return e}catch(g){return[]}});t(this,"init",({initSegment:A,mimeType:e})=>{this.logger.debug("Added init segment",{channel:A.channelId,renditionId:A.renditionId});const s=this.trackContexts.get(A.type);if(!s)throw Te(A.type,A.renditionId);s.state==="initialized"&&(s.mimeType=e);const g=Yg(A.codec,A.data,A.timescale);g&&s.initSegments.set(A.channelId,A.renditionId,g)});t(this,"append",(A,e)=>m(this,null,function*(){var n;const s=A[0];if(!s)return;const g=this.trackContexts.get(s.type),I=g==null?void 0:g.initSegments.get(s.channelId,s.renditionId);if(!this.mediaSource.isClosed()){if(!I)throw Fs(s.renditionId,s.channelId);if(!g)throw Te(s.type,s.renditionId);if(g.state==="uninitialized")throw Rs(s.type,s.renditionId);if(e){const o=(s.timestamp+((n=s.compositionTimeOffset)!=null?n:0))/s.timescale;yield g.sourceBuffer.removeBuffer(o,Number.POSITIVE_INFINITY);const B=g.previousSample;if(B&&B.codec!==s.codec&&g.sourceBuffer.changeType)try{yield g.sourceBuffer.changeType(g.mimeType)}catch(C){}yield g.sourceBuffer.appendBuffer(I)}try{let o=g.sequenceNumber;const B=GI(A.map(C=>Xg(C,o++)));yield g.sourceBuffer.appendBuffer(B),g.sequenceNumber=o,g.consecutiveQuotaExceededErrorCount=0,g.successfulAppendCalls++}catch(o){throw o instanceof DOMException&&(o.code===DOMException.QUOTA_EXCEEDED_ERR?(this.quotaErrorCount++,g.consecutiveQuotaExceededErrorCount++,this.logger.error("quota exceeded error",{error:o}),g.pendingSamples.unshift(...A)):this.mediaElement.error&&g.pendingSamples.unshift(...A)),o}}}));t(this,"onCodedSample",A=>{if(A.duration===0)return;const e=this.trackContexts.get(A.type);if(!e)throw Te(A.type,A.renditionId);if(!(!e.hasFirstSync&&!A.isSync)){if(this.hasAddedInitialPosterFrame&&A.isSync&&A.type==="video"){this.hasAddedInitialPosterFrame=!1;const s=c({},A);s.timestamp=0,e.pendingSamples.push(s)}e.hasFirstSync=!0,e.pendingSamples.push(A),e.state!=="uninitialized"&&(e.isWorkingOnPendingSamples||UI(e,this.append,this.maxChunkSize).catch(s=>{if(e.isWorkingOnPendingSamples=!1,s instanceof Error){if(this.logger.error("append failed",{message:s.message,name:s.name}),s instanceof DOMException&&s.code===DOMException.QUOTA_EXCEEDED_ERR){if(e.consecutiveQuotaExceededErrorCount>=this.minConsecutiveErrorsBeforeEmit){const g=ii(!1,s,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",g)}}else{const g=ii(!1,s,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",g)}this.mediaElement.error&&this.onSourceEnded()}}))}});t(this,"onSourceOpen",()=>{this.logger.debug("source opened"),this.sourceOpenEndTime=Date.now(),this.pendingTracksToAddSourceBuffers&&(this.setSourceBuffers(this.pendingTracksToAddSourceBuffers),this.pendingTracksToAddSourceBuffers=void 0)});t(this,"onSourceEnded",()=>{const{error:A}=this.mediaElement;if(A){const e=/AUDIO_RENDERER/.test(A.message)||!this.autoRecoverFromMediaErrors,s=ys(e,A);if(this.logger.error("MediaElement error",{error:s}),this.emitter.emit("error",s),!s.isFatal()){this.logger.info("Re-opening MediaSource"),this.emitter.emit("recovered from media error",{error:s,count:this.recoveredFromErrorCount}),this.recoveredFromErrorCount++;const g=!this.mediaElement.paused,I=[];this.trackContexts.forEach((n,o)=>{n.state==="initialized"&&I.push({type:o,mimeType:n.mimeType})}),this.sourceOpenStartTime=Date.now(),this.pendingTracksToAddSourceBuffers=I,this.mediaElement.src="",this.setTrackContexts(this.trackContexts),this.mediaSource.attach(this.mediaElement),g&&this.mediaElement.play()}}this.logger.debug("source ended")});this.logger=A,this.mediaElement=s,this.emitter=e}};t(pe,"create",(A,e,s)=>{const g=new pe(A,e,s);return g.setTrackContexts(),g.mediaSource.on("source ended",g.onSourceEnded),g.mediaSource.on("source open",g.onSourceOpen),g.mediaSource.attach(s),g});let rt=pe;const bi=(i,A)=>{var n;const e=i.renditionId!==A.renditionId,s=i.channelId!==A.channelId,g=((n=i.timestamp)!=null?n:0)>A.timestamp;let I=!1;return i.type==="video"&&A.type==="video"&&(I=A.width!==i.width||A.height!==i.height),s||e||g||I},GI=function(i){const A=i.reduce((g,I)=>g+I.byteLength,0),e=new Uint8Array(A);let s=0;return i.forEach(g=>{e.set(new Uint8Array(g),s),s+=g.byteLength}),e.buffer},UI=(i,A,e)=>m(this,null,function*(){for(i.isWorkingOnPendingSamples=!0;i.pendingSamples.length>0;){const s=[];let g=0;for(let o=0;o<i.pendingSamples.length;o++){g=o;const B=i.pendingSamples[o],C=i.pendingSamples[o+1];if(B&&(s.push(B),C&&bi(B,C))||o===e-1)break}const I=s[0];if(!I)break;const n=i.previousSample?bi(i.previousSample,I):!0;yield A(s,n),i.pendingSamples=i.pendingSamples.slice(g+1),i.previousSample=s[s.length-1]}i.isWorkingOnPendingSamples=!1}),ye=class ye{constructor(A,e){t(this,"logger");t(this,"emitter");t(this,"element");t(this,"pictureInPictureWindow");t(this,"unload",()=>{this.emitter.off("add picture in picture listener",this.onEnablePictureInPicture)});t(this,"onEnablePictureInPicture",A=>{this.element=A.element,A.element.addEventListener("leavepictureinpicture",()=>{this.pictureInPictureWindow=void 0,this.logger.debug("Leave picture in picture"),this.emitter.emit("exit picture in picture")}),A.element.addEventListener("enterpictureinpicture",e=>{this.pictureInPictureWindow=e.pictureInPictureWindow,this.logger.debug("Enter picture in picture"),this.emitter.emit("enter picture in picture",this)}),A.element.autopictureinpicture=!0});t(this,"getPictureInPictureSize",()=>this.pictureInPictureWindow);t(this,"isPictureInPictureActive",()=>this.isWebkitPresentationModeActive()||this.isStandardPictureInPictureActive());t(this,"isPictureInPictureSupported",()=>this.isWebkitPresentationModeSupported()||this.isStandardPictureInPictureSupported());t(this,"requestPictureInPicture",()=>(this.emitter.emit("ios-hack: reset size"),this.isStandardPictureInPictureSupported()?this.requestStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("picture-in-picture"):Promise.reject(new Error("Picture in picture is not supported"))));t(this,"exitPictureInPicture",()=>this.isStandardPictureInPictureSupported()?this.exitStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("inline"):Promise.reject(new Error("Picture in picture is not supported")));t(this,"getStatistics",()=>({isPictureInPictureActive:this.isPictureInPictureActive()}));t(this,"requestStandardPictureInPicture",()=>m(this,null,function*(){return yield this.element.requestPictureInPicture()}));t(this,"exitStandardPictureInPicture",()=>m(this,null,function*(){return yield document.exitPictureInPicture()}));t(this,"isStandardPictureInPictureSupported",()=>!!this.element&&!!this.element.requestPictureInPicture&&!!document.pictureInPictureEnabled);t(this,"isStandardPictureInPictureActive",()=>!!this.element&&!!document.pictureInPictureElement);t(this,"isWebkitPresentationModeActive",()=>!!this.element&&this.element.webkitPresentationMode==="picture-in-picture");t(this,"requestWebkitPresentationMode",A=>m(this,null,function*(){return this.element.webkitSetPresentationMode(A),Promise.resolve()}));t(this,"isWebkitPresentationModeSupported",()=>!!this.element&&!!this.element.webkitSetPresentationMode);this.emitter=A,this.logger=e,this.emitter.on("add picture in picture listener",this.onEnablePictureInPicture)}};t(ye,"create",(A,e)=>new ye(A,e));let Et=ye;const Fe=class Fe{constructor(A,e,s,g){t(this,"emitter");t(this,"logger");t(this,"clockSource");t(this,"state","buffering");t(this,"bufferFullness",0);t(this,"targetBufferTime");t(this,"lastBufferStateEvent","drained");t(this,"firstFrameTime");t(this,"currentTimeIsInRange",!1);t(this,"needsInputForAudioCount",0);t(this,"needsInputForVideoCount",0);t(this,"unload",()=>{this.emitter.off("buffer state",this.onBufferedStateChanged),this.emitter.off("needs user input",this.onNeedsUserInput)});t(this,"setTargetBufferTime",A=>void(this.targetBufferTime=A));t(this,"getTargetBufferTime",()=>this.targetBufferTime);t(this,"getBufferFullness",()=>this.bufferFullness);t(this,"getLastBufferStateEvent",()=>this.lastBufferStateEvent);t(this,"getState",()=>this.state);t(this,"getFirstFrameTime",()=>this.firstFrameTime);t(this,"getStatistics",()=>({bufferTime:this.targetBufferTime,needsInputForAudioCount:this.needsInputForAudioCount,needsInputForVideoCount:this.needsInputForVideoCount}));t(this,"onBufferedStateChanged",({buffered:A,isPaused:e})=>{const s=this.clockSource.currentTime,g=A.some(a=>a.start<s&&s<a.end),I=A[A.length-1],n=I?I.end-I.start>=this.targetBufferTime:!1,o=I?Math.max(0,I.end-s)/this.targetBufferTime:0,B=e?"paused":g?"playing":"buffering",C=this.state;this.currentTimeIsInRange!==g&&!g?(this.lastBufferStateEvent="drained",this.emitter.emit("buffer state event",this.lastBufferStateEvent)):g&&n&&this.lastBufferStateEvent==="drained"&&(this.lastBufferStateEvent="filled",this.emitter.emit("buffer state event",this.lastBufferStateEvent)),B==="playing"&&!this.firstFrameTime&&(this.firstFrameTime=Date.now()),this.currentTimeIsInRange=g,this.state=B,this.bufferFullness=g?o:0,C!==B&&this.emitter.emit("playback state",B),this.emitter.emit("buffer fullness",this.bufferFullness)});t(this,"onNeedsUserInput",({forAudio:A,forVideo:e})=>{A&&this.needsInputForAudioCount++,e&&this.needsInputForVideoCount++});this.emitter=A,this.logger=e,this.clockSource=s,this.targetBufferTime=g,this.emitter.on("buffer state",this.onBufferedStateChanged),this.emitter.on("needs user input",this.onNeedsUserInput)}};t(Fe,"create",(A,e,s,g)=>new Fe(A,e,s,g));let ct=Fe;const ht=()=>({upgradesFromLevel:[],downgradesFromLevel:[],bufferingRanges:[],activeRanges:[],decodeRate:Number.MAX_SAFE_INTEGER}),bI=()=>({levels:{},levelDowngrades:[],levelUpgrades:[],bufferFullness:0,general:ht()}),Re=class Re{constructor(A,e){t(this,"minBufferFullnessLengthForRegression",6);t(this,"logger");t(this,"emitter");t(this,"timers",Z.create());t(this,"metrics",bI());t(this,"bufferFullness",new K(30));t(this,"bufferFullnessRegression");t(this,"currentLevel");t(this,"isSuspended",!1);t(this,"_fatalQosCount",0);t(this,"hasAsserted",!1);t(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)});t(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.suspend()});t(this,"suspend",()=>{this.isSuspended=!0,this.timers.unload(),this.stopBuffering(),this.unsetActive()});t(this,"unsuspend",()=>{this.isSuspended=!1,this.currentLevel&&this.setActive()});t(this,"fatalQosGraceTime",()=>1e4*(this.fatalQosCount+1));t(this,"incrementFatalQosCount",()=>{this._fatalQosCount++});t(this,"getMetrics",()=>this.metrics);t(this,"getLevelStats",A=>{var s,g,I,n;const e=((g=(s=A.video)==null?void 0:s.bitRate)!=null?g:0)+((n=(I=A.audio)==null?void 0:I.bitRate)!=null?n:0);return this.metrics.levels[e]});t(this,"getBufferFullnessRegression",()=>this.bufferFullnessRegression);t(this,"activeRatios",()=>{const A=new Map,e=FA(this.metrics.general.activeRanges);if(Object.entries(this.metrics.levels).forEach(([s,g])=>{A.set(s,e?FA(g.activeRanges)/e:0)}),!this.hasAsserted){const s=A.size?Math.abs(Array.from(A.values()).reduce((g,I)=>g+I,0)-1)<=.02:!0;s||(this.hasAsserted=!0,console.assert(s,`Active ratios should be close to 1 - actual: ${Array.from(A.values()).reduce((g,I)=>g+I,0)}`))}return A});t(this,"bufferingRatios",()=>{const A=new Map,e=FA(this.metrics.general.bufferingRanges);if(Object.entries(this.metrics.levels).forEach(([s,g])=>{A.set(s,e?FA(g.bufferingRanges)/e:0)}),!this.hasAsserted){const s=Array.from(A.values()).reduce((g,I)=>g+I,0)<=1;s||(this.hasAsserted=!0,console.assert(s,`Buffering ratios should be less than 1 - actual: ${Array.from(A.values()).reduce((g,I)=>g+I,0)}`))}return A});t(this,"bufferingEventsLast",A=>this.metrics.general.bufferingRanges.filter(e=>e.start>=Date.now()-A).length);t(this,"timeSpentBufferingLast",A=>Mt(this.metrics.general.bufferingRanges,A));t(this,"timeSpentActiveLast",A=>Mt(this.metrics.general.activeRanges,A));t(this,"timeSpentPlayingInAtLeastLevelRatio",A=>{var B,C,a,Q;const e=this.timeSpentBuffering(),s=this.timeActive(),g=this.bufferingRatios(),I=this.activeRatios(),n=((C=(B=A.video)==null?void 0:B.bitRate)!=null?C:0)+((Q=(a=A.audio)==null?void 0:a.bitRate)!=null?Q:0),o=e/s;return Object.keys(this.metrics.levels).map(r=>parseInt(r,10)).filter(r=>r>=n).reduce((r,h)=>{var l,f;return((l=I.get(h.toString()))!=null?l:0)-((f=g.get(h.toString()))!=null?f:0)*o+r},0)});t(this,"timeSpentBuffering",()=>FA(this.metrics.general.bufferingRanges));t(this,"timeActive",()=>FA(this.metrics.general.activeRanges));t(this,"getStatistics",()=>({timeSpentBuffering:this.timeSpentBuffering(),bufferingEventsCount:this.metrics.general.bufferingRanges.length,timeSpentRatio:Object.fromEntries(this.activeRatios()),fatalQosCount:this.fatalQosCount}));t(this,"onRenditionLevelChanged",A=>{var I,n,o,B,C,a,Q,r,h,l,f,p,k,w;const e=((o=(n=(I=A.from)==null?void 0:I.video)==null?void 0:n.bitRate)!=null?o:0)+((a=(C=(B=A.from)==null?void 0:B.audio)==null?void 0:C.bitRate)!=null?a:0),s=((h=(r=(Q=A.to)==null?void 0:Q.video)==null?void 0:r.bitRate)!=null?h:0)+((p=(f=(l=A.to)==null?void 0:l.audio)==null?void 0:f.bitRate)!=null?p:0);this.logger.info("rendition level changed",{fromLevel:e,toLevel:s}),this.metrics.general.activeRanges.length===0&&this.setActive(),A.from&&A.to&&(e<s?this.metrics.general.upgradesFromLevel.push(Date.now()):this.metrics.general.downgradesFromLevel.push(Date.now()));let g=!1;if(A.from){const G=(k=this.metrics.levels[e])!=null?k:ht();e<s?G.upgradesFromLevel.push(Date.now()):G.downgradesFromLevel.push(Date.now()),mA(G.activeRanges);const Y=G.bufferingRanges[G.bufferingRanges.length-1];g=!!Y&&!Y.end,mA(G.bufferingRanges),this.metrics.levels[e]=G}if(A.to){const G=(w=this.metrics.levels[s])!=null?w:ht();yA(G.activeRanges),g&&yA(G.bufferingRanges),this.metrics.levels[s]=G,this.currentLevel=s}});t(this,"onBufferFullness",A=>{this.bufferFullness.push(A),this.metrics.bufferFullness=A,this.bufferFullness.items().length>=this.minBufferFullnessLengthForRegression&&(this.bufferFullnessRegression=this.calculateLinearRegression())});t(this,"onPlaybackState",A=>{switch(this.logger.info("Playback state",{state:A,currentLevel:this.currentLevel}),A){case"playing":this.stopBuffering();break;case"buffering":this.isSuspended||this.startBuffering();break}});t(this,"onVideoDecodeRate",A=>{var s;if(this.metrics.general.decodeRate=A,!this.currentLevel)return;const e=this.metrics.levels[(s=this.currentLevel)!=null?s:0];e&&(e.decodeRate=A)});t(this,"calculateLinearRegression",()=>ji(this.bufferFullness.items().map((A,e)=>({x:e,y:A}))));t(this,"stopBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&mA(A.bufferingRanges)}mA(this.metrics.general.bufferingRanges)});t(this,"startBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&yA(A.bufferingRanges)}yA(this.metrics.general.bufferingRanges)});t(this,"unsetActive",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&mA(A.activeRanges)}mA(this.metrics.general.activeRanges)});this.logger=e,this.emitter=A}get fatalQosCount(){return this._fatalQosCount}setActive(){if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&yA(A.activeRanges)}yA(this.metrics.general.activeRanges)}};t(Re,"create",(A,e)=>new Re(A,e));let dt=Re;const ke=class ke{constructor(A,e){t(this,"renditions",new Map);t(this,"renditionLevels",[]);t(this,"languages",[]);t(this,"emitter");t(this,"subscriptionSource");t(this,"renditionLevelChangeCount",0);t(this,"unload",()=>{this.emitter.off("renditions",this.onRenditions),this.emitter.off("subscription changed",this.onSubscriptionChanged)});t(this,"getRenditionLevels",A=>A?this.createRenditionLevels(A):this.renditionLevels);t(this,"getRenditionLevel",A=>{var o;const e=A!=null?A:this.getCurrentSubscription(),s=A?this.createRenditionLevels(A):this.renditionLevels;if(!e.video)return s.length?s[0]:void 0;const g=e.video.bitRate||Number.MAX_SAFE_INTEGER,I=e.video.width||Number.MAX_SAFE_INTEGER,n=e.video.height||Number.MAX_SAFE_INTEGER;return(o=s.filter(B=>B.video&&e.video?B.video.bitRate<=g&&B.video.width<=I&&B.video.height<=n:!0).pop())!=null?o:s[0]});t(this,"setRenditions",(A,e)=>{this.renditions.set(A,e)});t(this,"getLanguages",()=>this.languages);t(this,"getVideoRendition",(A,e=this.getCurrentSubscription().channelId)=>{const s=this.getRendition(A,e);if(s&&RA(s))return s});t(this,"getAudioRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(g=>kA(g))});t(this,"getVideoRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(g=>RA(g))});t(this,"getAudioRendition",(A,e=this.getCurrentSubscription().channelId)=>{const s=this.getRendition(A,e);if(s&&kA(s))return s});t(this,"getRendition",(A,e=this.getCurrentSubscription().channelId)=>{var s;return(s=this.renditions.get(e))==null?void 0:s.find(g=>g.id===A)});t(this,"getStatistics",()=>{var e,s,g,I,n,o,B,C,a,Q;const A=this.getRenditionLevel();return{videoCodec:(e=A==null?void 0:A.video)==null?void 0:e.codec,audioCodec:(s=A==null?void 0:A.audio)==null?void 0:s.codec,videoRenditionId:(g=A==null?void 0:A.video)==null?void 0:g.id,audioRenditionId:(I=A==null?void 0:A.audio)==null?void 0:I.id,videoWidth:(n=A==null?void 0:A.video)==null?void 0:n.width,videoHeight:(o=A==null?void 0:A.video)==null?void 0:o.height,expectedVideoBitRate:(B=A==null?void 0:A.video)==null?void 0:B.bitRate,expectedAudioBitRate:(C=A==null?void 0:A.audio)==null?void 0:C.bitRate,frameRate:(a=A==null?void 0:A.video)==null?void 0:a.frameRate,language:(Q=A==null?void 0:A.audio)==null?void 0:Q.language,renditionLevelChangeCount:this.renditionLevelChangeCount}});t(this,"onRenditions",A=>{const e=this.subscriptionSource.getCurrentSubscription();this.renditions.set(A.channelId,A.renditions),this.updateRenditionLevels({to:e,from:e})});t(this,"onSubscriptionChanged",A=>{this.updateRenditionLevels(A)});t(this,"updateRenditionLevels",({to:A,from:e})=>{var C;const{channelId:s,initiator:g}=A,I=this.getRenditionLevel(e),n=new Set;((C=this.renditions.get(s))!=null?C:[]).forEach(a=>a.language?n.add(a.language):void 0),this.languages=Array.from(n),this.renditionLevels=this.createRenditionLevels(A);const B=this.getRenditionLevel(A);uA(I,B)||(this.renditionLevelChangeCount++,this.emitter.emit("rendition level changed",{to:B,from:I,reason:g?"manual":"abr"}))});t(this,"createRenditionLevels",A=>{var a;const{video:e,audio:s,channelId:g}=A,I=(a=this.renditions.get(g))!=null?a:[],n=I.filter(RA).filter(Q=>e&&Q.codec===e.codec),o=I.filter(kA).filter(Q=>s&&Q.codec===s.codec&&Q.language===s.language),B=Math.max(n.length,o.length),C=[];for(let Q=0;Q<B;Q++){const r=n[Math.min(n.length-1,Q)],h=o[Math.min(o.length-1,Q)];C.push({audio:h,video:r})}return C});t(this,"getCurrentSubscription",()=>this.subscriptionSource.getCurrentSubscription());this.subscriptionSource=e,this.emitter=A,this.emitter.on("renditions",this.onRenditions),this.emitter.on("subscription changed",this.onSubscriptionChanged)}};t(ke,"create",(A,e)=>new ke(A,e));let lt=ke;const vi=i=>JSON.parse(JSON.stringify(i)),Ge=class Ge{constructor(A,e,s){t(this,"logger");t(this,"timers",new Z);t(this,"emitter");t(this,"targetSubscription");t(this,"currentSubscription");t(this,"_isSwitchingSubscription",!1);t(this,"pendingSubscriptionTimeoutId");t(this,"burstMs",0);t(this,"unload",()=>{this.logger.debug("Unloading module..."),this.timers.unload(),this.emitter.off("subscription changed",this.onSubscriptionChanged),this.logger.debug("Unloaded module")});t(this,"isSwitchingSubscription",()=>this._isSwitchingSubscription);t(this,"getTargetSubscription",()=>this.targetSubscription);t(this,"getCurrentSubscription",()=>this.currentSubscription);t(this,"enableBurst",A=>{this.burstMs=A});t(this,"setSize",A=>{this.targetSubscription.video.width=A.width,this.targetSubscription.video.height=A.height,this.scheduleSubscriptionChange()});t(this,"setVideoConstraint",A=>{this.targetSubscription.video=A,this.scheduleSubscriptionChange()});t(this,"setAudioConstraint",A=>{this.targetSubscription.audio=A,this.scheduleSubscriptionChange()});t(this,"setVideoBitRate",A=>{this.targetSubscription.video.bitRate=A,this.scheduleSubscriptionChange()});t(this,"setAudioBitRate",A=>{this.targetSubscription.audio.bitRate=A,this.scheduleSubscriptionChange()});t(this,"setChannelId",A=>{this.targetSubscription.channelId=A,this.scheduleSubscriptionChange()});t(this,"setLanguage",A=>{this.targetSubscription.audio.language=A,this.scheduleSubscriptionChange()});t(this,"setVideoCodec",A=>{this.targetSubscription.video.codec=A,this.scheduleSubscriptionChange()});t(this,"setAudioCodec",A=>{this.targetSubscription.audio.codec=A,this.scheduleSubscriptionChange()});t(this,"setBurst",A=>{A?this.targetSubscription.burstMs=A:delete this.targetSubscription.burstMs});t(this,"isNewSubscription",()=>{const A=["burstMs","meta","initiator","channelGroupId"];return!uA(Ht(this.currentSubscription,A),Ht(this.targetSubscription,A))});t(this,"onSubscriptionChanged",({to:A})=>{this.logger.debug("onSubscriptionChanged",{to:A}),this.currentSubscription=c({},A),this._isSwitchingSubscription=this.isNewSubscription()});t(this,"scheduleSubscriptionChange",()=>{this.targetSubscription=vi(this.targetSubscription),this._isSwitchingSubscription=this.isNewSubscription();const A=this.currentSubscription.channelId!==this.targetSubscription.channelId;this._isSwitchingSubscription&&(A&&this.burstMs?this.setBurst(this.burstMs):this.setBurst(0),this.pendingSubscriptionTimeoutId&&(this.timers.clearTimeout(this.pendingSubscriptionTimeoutId),this.pendingSubscriptionTimeoutId=void 0),this.pendingSubscriptionTimeoutId=this.timers.setTimeout(()=>this.emitter.emit("send signal",JSON.stringify({type:"subscribe",subscription:this.getTargetSubscription()})),0))});this.logger=A,this.targetSubscription=e,this.currentSubscription=vi(e),this.emitter=s,this.emitter.on("subscription changed",this.onSubscriptionChanged)}};t(Ge,"create",(A,e,s)=>new Ge(A,s,e));let ut=Ge;const vI=5e3,JI=()=>Lt()||$A()||is(),Ji=()=>JI()?100:0,Li=i=>A=>A>i,Ue=class Ue{constructor(A,e,s,g,I){t(this,"emitter");t(this,"logger");t(this,"playbackSource");t(this,"bufferSource");t(this,"keyframeTimestamps",new K(10));t(this,"lastSeekTime",Date.now());t(this,"seekCooldownTime",1e3);t(this,"seekTimeoutTime",5e3);t(this,"seekKeyframeOvershoot",50);t(this,"syncMaxBehind");t(this,"syncMaxBehindMultiplierStep",1);t(this,"syncMaxBehindIncreaseEvery",2);t(this,"syncMaxBehindMaximumAllowed",2e3);t(this,"syncMaxBehindMultiplier",1);t(this,"timeshiftOnAudio",!1);t(this,"syncMaxAhead",150);t(this,"timeshiftSync",{enabled:!1,maxBehind:50,multiplier:1,maxBehindAllowed:600,overshoot:Ji(),minOvershootAllowed:Ji(),maxOvershootAllowed:500});t(this,"maxTimeSyncDifferenceTolerance",150);t(this,"timers",Z.create());t(this,"rtt",0);t(this,"channelSyncInfo",new Map);t(this,"driftAdjustmentsCount",0);t(this,"timeshiftDriftAdjustmentCount",0);t(this,"driftAdjustments",[]);t(this,"timeShiftAdjustments",[]);t(this,"timestampOffset");t(this,"currentChannelId");t(this,"highestSeenTimestamps",new Map);t(this,"isSuspended",!1);t(this,"isSyncAdjustmentActivated",!1);t(this,"load",()=>{this.timers.setInterval(this.onSync,100)});t(this,"unload",()=>{this.logger.debug("Unloading module..."),this.emitter.off("rtt",this.updateRtt),this.timers.unload(),this.logger.debug("Unloaded module")});t(this,"suspend",()=>{this.isSuspended=!0});t(this,"unsuspend",()=>{this.resetSyncState(),this.isSuspended=!1});t(this,"deactivateSyncAdjustments",()=>{this.isSyncAdjustmentActivated=!1});t(this,"activateSyncAdjustments",()=>{this.tryApplySyncInfo(0),this.lastSeekTime=Date.now(),this.isSyncAdjustmentActivated=!0});t(this,"reset",()=>{this.logger.info("Reset sync state"),this.currentChannelId=void 0,this.timestampOffset=void 0,this.resetSyncState(),this.highestSeenTimestamps.clear()});t(this,"getTimeshiftOffset",()=>{var A;return(A=this.timestampOffset)!=null?A:0});t(this,"getCurrentChannelId",()=>this.currentChannelId);t(this,"resetSyncState",()=>{this.timeshiftSync.multiplier=1,this.syncMaxBehindMultiplier=1,this.driftAdjustments=[],this.timeShiftAdjustments=[]});t(this,"getLiveEdgeTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const s=Date.now()-e.localTimestamp;return e.timestamp+s});t(this,"getLiveEdgeTimeLatencyAdjusted",A=>{const e=this.getLiveEdgeTime(A);if(e)return e+this.rtt/2});t(this,"getWallclockTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const s=Date.now()-e.localTimestamp;return e.wallclockTime+s});t(this,"getWallclockTimeLatencyAdjusted",A=>{const e=this.getWallclockTime(A);if(e)return e+this.rtt/2});t(this,"processSample",A=>{var g;if(!A.channelId)throw new Error("Sample must be assigned to a channel");this.currentChannelId||(this.currentChannelId=A.channelId),this.timestampOffset||(this.timestampOffset=A.timestamp/A.timescale*1e3-vI);const e=A.type==="video"&&A.isSync;if(this.currentChannelId!==A.channelId){let I=Number.MAX_SAFE_INTEGER;console.assert(this.highestSeenTimestamps.size!==0,"no known timestamps"),this.highestSeenTimestamps.forEach(o=>{I=Math.min(I,o)});const n=A.timestamp/A.timescale*1e3;this.currentChannelId=A.channelId,this.timestampOffset=n-I}else(e||this.timeshiftOnAudio)&&this.tryTimeshiftSync();const s=this.timestampOffset*A.timescale/1e3;return A.timestamp-=s,e&&this.keyframeTimestamps.push(A.timestamp/A.timescale*1e3),this.highestSeenTimestamps.set(A.type,Math.max((g=this.highestSeenTimestamps.get(A.type))!=null?g:0,A.timestamp/A.timescale*1e3)),A});t(this,"getStatistics",()=>({drift:this.drift,driftAdjustmentCount:this.driftAdjustmentsCount,timeshiftDriftAdjustmentCount:this.timeshiftDriftAdjustmentCount,seekTime:this.playbackSource.seekTime}));t(this,"updateRtt",A=>void(this.rtt=A));t(this,"isPlaybackSourceReadyToSeek",()=>!this.isSeeking()&&this.isSeekCooldownExpired()&&this.isSyncAdjustmentActivated);t(this,"isSeeking",()=>this.playbackSource.isSeeking?!this.isSeekTimeoutExpired():!1);t(this,"isAllowedToSync",()=>this.isPlaybackSourceReadyToSeek()&&!!this.currentChannelId&&!this.isSuspended&&!this.playbackSource.isPaused);t(this,"isSeekCooldownExpired",()=>Date.now()-this.lastSeekTime>this.seekCooldownTime);t(this,"isSeekTimeoutExpired",()=>Date.now()-this.lastSeekTime>this.seekTimeoutTime);t(this,"currentTimeshiftMaxBehind",()=>Math.min(this.timeshiftSync.maxBehind*this.timeshiftSync.multiplier,this.timeshiftSync.maxBehindAllowed));t(this,"currentSyncMaxBehind",()=>Math.min(this.syncMaxBehindMultiplier*this.syncMaxBehind,this.syncMaxBehindMaximumAllowed));t(this,"currentSyncMaxAhead",()=>this.playbackSource.seekTime>500?Math.max(this.syncMaxAhead*this.syncMaxBehindMultiplier,300):this.syncMaxAhead);t(this,"tryTimeshiftSync",()=>{var I;if(!this.timeshiftSync.enabled||!this.isAllowedToSync())return;const A=(I=this.drift)!=null?I:0;if(A>=this.syncMaxBehind)return;if(A<this.currentTimeshiftMaxBehind()){this.timeshiftSync.overshoot=0;return}if(!this.timestampOffset)return;const e=Date.now()-this.seekTimeoutTime*this.timeshiftSync.multiplier,s=this.timeShiftAdjustments.filter(Li(e)).length;if(s&&this.timeshiftSync.multiplier>2)return this.logger.debug("Too many diff timeShifts within sliding window",{timeShiftsCooldownMs:e,timeShiftsWithinCooldownTime:s}),!1;const g=A+this.timeshiftSync.overshoot;this.logger.info("Adjusting for drift using timeshift",{drift:A,syncAmount:g,currentTime:this.playbackSource.currentTime,rtt:this.rtt,overshoot:this.timeshiftSync.overshoot}),this.timestampOffset+=g,this.lastSeekTime=Date.now(),!this.playbackSource.isPaused&&(this.timeShiftAdjustments.push(this.lastSeekTime),this.timeshiftDriftAdjustmentCount++,this.timeshiftSync.multiplier++,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,Math.min(this.timeshiftSync.multiplier*A/2,this.timeshiftSync.maxOvershootAllowed)))});t(this,"onSync",()=>{var o;if(!this.isAllowedToSync())return;const A=(o=this.drift)!=null?o:0;if(A<0&&-A<this.currentSyncMaxAhead()||A>0&&A<this.currentSyncMaxBehind()||Math.abs(A)<1||!this.isSeekCooldownExpired())return;const e=Date.now()-this.seekTimeoutTime*this.syncMaxBehindMultiplier,s=this.driftAdjustments.filter(Li(e)).length;if(s&&this.syncMaxBehindMultiplier>2)return this.logger.debug("Too many diff adjustments within sliding window",{adjustmentsCooldownMs:e,adjustmentsWithinCooldownTime:s}),!1;const g=this.playbackSource.seekTime,I=this.playbackSource.currentTime+A,n=this.findKeyframeCloseToTimestamp(I);if(n||this.keyframeTimestamps.isEmpty()){const B=n?n+this.seekKeyframeOvershoot:I;if(this.logger.info("Adjusting for drift using seek",{drift:A,currentTime:this.playbackSource.currentTime,targetCurrentTime:B,seekTime:g,rtt:this.rtt}),this.lastSeekTime=Date.now(),this.driftAdjustments.push(this.lastSeekTime),this.driftAdjustmentsCount++,this.playbackSource.currentTime=B+g,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,this.timeshiftSync.overshoot/2),this.driftAdjustmentsCount%this.syncMaxBehindIncreaseEvery===0&&!this.playbackSource.isPaused){const C=this.currentSyncMaxBehind;this.syncMaxBehindMultiplier+=this.syncMaxBehindMultiplierStep,C!==this.currentSyncMaxBehind&&this.logger.info("Increasing max drift behind allowed",{from:C,to:this.currentSyncMaxBehind})}}});t(this,"findKeyframeCloseToTimestamp",A=>{const e=this.keyframeTimestamps.items();for(const s of e)if(s>=A&&s<=A+200)return s});this.logger=e,this.emitter=A,this.playbackSource=s,this.bufferSource=g,this.timeshiftSync.enabled=I,this.syncMaxBehind=this.timeshiftSync.enabled?1e3:200,this.emitter.on("rtt",this.updateRtt)}updateChannelSyncInfo(A,e){const s=Date.now(),g=this.channelSyncInfo.get(A),I=this.getLiveEdgeTime(A);if(this.isSuspended)return;if(!g||!I){this.logger.info("Initial timing info",{syncInfo:e}),this.channelSyncInfo.set(A,L(c({},e),{localTimestamp:s,timeDifferences:new K(12)}));return}const n=e.wallclockTime-g.wallclockTime,o=e.timestamp-g.timestamp,B=s-g.localTimestamp,C=o-B;if(g.timeDifferences.push(C),this.logger.debug("Timing info",{rtt:this.rtt,channelId:A,syncInfo:e,localTimestamp:s,diffFromEstimated:C,timestampDelta:o,wallclockDelta:n,localWallclockDelta:B}),Math.abs(C)>=this.bufferSource.getTargetBufferTime()*2){this.logger.info("Resetting sync info",{diffFromEstimated:C}),this.channelSyncInfo.set(A,L(c({},e),{localTimestamp:s,timeDifferences:new K(g.timeDifferences.maxSize+1)})),this.currentChannelId&&this.currentChannelId===A&&(this.reset(),this.emitter.emit("channel reset"));return}g.timeDifferences.isFull()&&this.tryApplySyncInfo(this.maxTimeSyncDifferenceTolerance)}tryApplySyncInfo(A){const e=this.getCurrentChannelId();if(!e)return;const s=this.channelSyncInfo.get(e);if(!s)return;const g=j(s.timeDifferences.items());Math.abs(g)>A&&(this.logger.info("Adjusting sync info",{averageDifference:g}),s.timestamp+=g,s.timeDifferences.clear())}get serverCurrentTime(){return this.channelCurrentTime-this.getTimeshiftOffset()}get channelCurrentTime(){const A=this.getCurrentChannelId();if(!A)return 0;const e=this.getLiveEdgeTime(A);return e?e-this.bufferSource.getTargetBufferTime():0}get drift(){return this.serverCurrentTime-this.playbackSource.currentTime}};t(Ue,"create",(A,e,s,g,I)=>new Ue(A,e,s,g,I));let mt=Ue;const LI={enabled:!0,interval:3e4,includeErrors:!0,includeEvents:!0,includeStats:!0,maxRetries:10,maxErrorReports:50,maxEvents:50},wt=(i,A)=>L(c({},A),{type:i,timestamp:new Date().toISOString(),discriminator:"web"}),be=class be{constructor(A,e,s,g){t(this,"logger");t(this,"timers",new Z);t(this,"emitter");t(this,"options");t(this,"parentContext");t(this,"unsentLines",new K(100));t(this,"retries",0);t(this,"errorCount",0);t(this,"eventCount",0);t(this,"statsCount",0);t(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.addStats({isFinal:!0,initiator:"unload"}),this.send("beacon"),this.logger.debug("Unloaded module")});t(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.timers.setInterval(()=>{this.addStats(),this.send("fetch")},this.options.interval)});t(this,"addStats",({isFinal:A,initiator:e}={isFinal:!1,initiator:"interval"},s={})=>{if(!this.options.includeStats)return;const g=this.parentContext.getStatistics(),I=wt("stats",L(c(c({},s),g),{isFinal:A,initiator:e,count:this.statsCount++}));this.unsentLines.push(I)});t(this,"addEvent",A=>{if(!this.options.includeEvents||this.eventCount>this.options.maxEvents)return;const e=this.parentContext.getStatistics(),s=wt("event",c(c({},e),A));this.eventCount++,this.unsentLines.push(s)});t(this,"getStatistics",()=>({errorCount:this.errorCount}));t(this,"send",A=>m(this,null,function*(){if(this.options.enabled&&!(this.retries>=this.options.maxRetries)&&!this.unsentLines.isEmpty()){this.logger.debug("Sending telemetry",{lines:this.unsentLines.items()});try{const e=this.unsentLines.items().map(s=>JSON.stringify(s)).reverse().join(`
27
- `);switch(A){case"beacon":navigator.sendBeacon(this.options.url,e);break;case"fetch":default:this.parentContext.connectionState==="connected"?this.emitter.emit("send signal",JSON.stringify({type:"telemetry",body:e})):yield cs(new URL(this.options.url),{body:e,headers:{"Content-Type":"text/plain"}});break}this.retries=0,this.unsentLines.clear()}catch(e){this.retries++}}}));t(this,"onVisibilityChange",A=>{A==="hidden"&&(this.addStats({isFinal:!0,initiator:"visibilitychange"}),this.send("beacon"))});t(this,"onPageHide",A=>{this.addStats({isFinal:!0,initiator:"pagehide"},{persisted:A.persisted}),this.send("beacon")});t(this,"onRejection",A=>this.addError(A.reason));t(this,"onError",A=>this.addError(A.error));t(this,"addError",A=>{const{includeErrors:e,maxErrorReports:s}=this.options;if(e&&A instanceof y){if(this.errorCount++,this.errorCount>s)return;const g=this.parentContext.getStatistics();this.unsentLines.push(wt("error",c(c({},g),A.toStringifiable())))}});this.logger=A,this.emitter=e,this.options=c(c({},LI),s),this.parentContext=g}};t(be,"create",(A,e,s,g)=>new be(A,e,s,g));let Ce=be;const ve=class ve{constructor(A,e,s){t(this,"logger");t(this,"element");t(this,"documentState");t(this,"timers",new Z);t(this,"unload",()=>{this.timers.unload()});t(this,"unpause",()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug("Unpause video"),this.element.play().catch(gA))});this.logger=A,this.element=e,this.documentState=s,this.timers.setInterval(this.unpause,100)}};t(ve,"create",(A,e,s)=>new ve(A,e,s));let ae=ve;const NI=6,HI=i=>{let A=[i],e=0,s=0,g=!1;const I=(o,B)=>{var p,k,w;o.flags&&KA(o.flags)&&(e=(p=o.compositionTimeOffset)!=null?p:0),o.timestamp+=e,o.compositionTimeOffset=((k=o.compositionTimeOffset)!=null?k:0)-e;const C=o.timestamp/o.timescale,Q=B.flags&&KA(B.flags)?(w=B.compositionTimeOffset)!=null?w:0:e,h=(B.timestamp+Q)/B.timescale,l=Math.max(0,Math.round((h-C)*o.timescale));return l>0&&(s=l),L(c({},o),{duration:l>0?l:s})};return(o,B=!1)=>{if(o.flags&&KA(o.flags)&&B&&(g=!g),!(B&&A.length<NI&&g)&&A.length>0){g=!1;let a=o;for(let r=A.length-1;r>0;r--){const h=A[r];if(!h||!a)break;h.timestamp>=a.timestamp?A.splice(r,1):a=h}const Q=A.map((r,h)=>I(r,A[h+1]||o));return A=[o],Q}return A.push(o),[]}},MI=(i,A)=>{if(!i)return;const e=new URL("/subscribe",i);return e.searchParams.append("channelId",A.channelId),e.searchParams.append("sessionId",A.sessionId),e.searchParams.append("clientId",A.clientId),A.audio&&A.audio.codec&&(e.searchParams.append("audio.bitRate",Math.round(A.audio.bitRate).toString()),e.searchParams.append("audio.codec",A.audio.codec),A.audio.language&&e.searchParams.append("audio.language",A.audio.language)),A.video&&A.video.codec&&(e.searchParams.append("video.width",A.video.width.toString()),e.searchParams.append("video.height",A.video.height.toString()),e.searchParams.append("video.bitRate",Math.round(A.video.bitRate).toString()),e.searchParams.append("video.codec",A.video.codec)),A.expectAdditionalConnection&&e.searchParams.append("expectAdditionalConnection",A.expectAdditionalConnection.toString()),A.burstMs&&e.searchParams.append("burstMs",A.burstMs.toString()),A.channelGroupId&&e.searchParams.append("channelGroupId",A.channelGroupId),A.authToken&&(e.searchParams.append("auth.token",A.authToken),e.searchParams.append("auth.type","jwt")),e.toString()},PI=(i,A,e)=>RA(A)?c(L(c({},i),{type:"video",codec:A.codec,isSync:KA(i.flags),data:i.payload,duration:0,width:A.width,height:A.height}),e):L(c({},i),{type:"audio",channels:A.channels,sampleRate:A.sampleRate,codec:A.codec,language:A.language,isSync:KA(i.flags),data:i.payload,duration:0});class TI{constructor(){t(this,"highEntropyValues");var A;(A=self.navigator.userAgentData)==null||A.getHighEntropyValues(["architecture","model","platformVersion","fullVersionList"]).then(e=>{this.highEntropyValues=e})}getUserAgentInformation(){var I,n,o,B,C,a;const A=window.location.origin,s=!A||A=="null"?"":`${window.location.pathname}${window.location.search}`.substring(0,1e3),g={locationOrigin:window.location.origin,locationPath:s,ancestorOrigins:((I=window.location.ancestorOrigins)==null?void 0:I.length)>0?Array.from(window.location.ancestorOrigins):void 0,hardwareConcurrency:navigator.hardwareConcurrency,deviceMemory:navigator.deviceMemory};if(self.navigator.userAgentData&&this.highEntropyValues){const Q="1",r=[...(n=this.highEntropyValues.brands)!=null?n:[]];r.sort((w,G)=>w.brand.localeCompare(G.brand));const h=[...(o=this.highEntropyValues.fullVersionList)!=null?o:[]];h.sort((w,G)=>w.brand.localeCompare(G.brand));const l=h.map(w=>w.version),f=r.map(w=>w.brand),p=r.map(w=>w.version),k=parseInt((C=(B=this.highEntropyValues.platformVersion)==null?void 0:B.split(".")[0])!=null?C:Q);return c({userAgentLegacy:window.navigator.userAgent,ua:{browser:{brands:f,fullVersionBrands:l,majorVersions:p},device:this.highEntropyValues.model||"Other",os:{family:this.highEntropyValues.platform||"Other",version:(a=this.highEntropyValues.platformVersion)!=null?a:Q,major_version:Number.isFinite(k)?k:0}}},g)}else return c({userAgent:window.navigator.userAgent},g)}}const Ni=(i,A)=>i&&typeof i=="object"&&A in i,Hi=i=>!(typeof i!="object"||!Ni(i,"channelId")||typeof i.channelId!="string"||!Ni(i,"url")||typeof i.url!="string"||i.channelId.length===0||i.url.length===0),qI=i=>{if(!Hi(i))throw new y("Invalid options",{isFatal:!0,code:"invalid_options"});const A=c({},i);return Object.keys(A).forEach(e=>{const s=A;typeof s[e]=="undefined"&&delete s[e]}),A},KI=i=>{if(typeof i!="object"||i===null)throw new Error("not an object");if(!("video"in i))throw new Error("missing video in subscription");if(!("audio"in i))throw new Error("missing audio in subscription");if(!("channelId"in i))throw new Error("missing channelId");return!0},iA=class iA extends AA{constructor(e){super();t(this,"pictureInPicture");t(this,"browser",Le());t(this,"options");t(this,"element");t(this,"playbackSource");t(this,"emitter",new AA);t(this,"logger");t(this,"modules");t(this,"clientIp");t(this,"sessionId");t(this,"clientId",Pt());t(this,"_channels",[]);t(this,"createdAt",Date.now());t(this,"hasCalledConnect",!1);t(this,"apiClient");t(this,"latestEmittedLanguages",[]);t(this,"wakeLock");t(this,"cachedEdges",[]);t(this,"shiftedEdges",[]);t(this,"pool",new _A(iA.MAX_POOL_SIZE));t(this,"userAgentInformation",new TI);t(this,"sampleProcessingSesssions",new Map);t(this,"sizes",new Map);t(this,"isSuspended",!0);t(this,"disconnectTimeout");t(this,"attach",e=>{var s;(s=this.wakeLock)==null||s.attach(e),e.appendChild(this.element)});t(this,"getOptions",()=>this.options.getOptions());t(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;const s=this.options.get("authenticationToken"),g=s?`&auth.token=${s}`:"";return`${e}/api/thumbnail?channelId=${this.options.get("channelId")}${g}`});t(this,"updateAuthenticationToken",e=>{this.logger.debug("Got new auth token",{token:e}),this.options.set("authenticationToken",e),this.emitter.emit("send signal",JSON.stringify({type:"refresh auth",token:e}))});t(this,"connect",()=>{this.hasCalledConnect||(this.play(),this._connect())});t(this,"_connect",()=>{var e,s;this.hasCalledConnect||(this.hasCalledConnect=!0,Object.values(this.modules).forEach(g=>{g&&"load"in g&&g.load()}),this.unsuspend(),this.playbackSource instanceof We&&((s=(e=this.playbackSource).load)==null||s.call(e)),this.modules.connection.connect(this.options.get("media")==="audio+video"?2:1))});t(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")}));t(this,"connectionInfo",()=>m(this,null,function*(){try{return yield this.apiClient.connect(this.options.getOptions())}catch(e){if(Es(e))switch(e.status){case 401:throw this.emitter.emit("error",ee(e)),ee(e);case 403:throw this.emitter.emit("error",gi(e.message)),gi(e.message)}throw this.emitter.emit("error",vs(e instanceof Error?e:void 0)),e}}));t(this,"estimateRTT",()=>m(this,null,function*(){const e=Date.now(),s=()=>Date.now()-e;return Promise.race([Tt(iA.PING_TIMEOUT),fetch(new URL("/api/v2/connect/ping",this.options.get("url")).toString(),{method:"HEAD"})]).then(s,s)}));t(this,"connectHandler",()=>m(this,null,function*(){var k;this.sessionId=Pt();const e=this.modules.subscription.getTargetSubscription(),[s,g]=yield Promise.all([this.connectionInfo(),this.estimateRTT()]),I=g/2,n=ze(I),o=s.channels.find(w=>w.channelId===e.channelId);if(this.emitter.emit("connect info",s),this._channels=s.channels,yield Promise.all(s.channels.map(w=>m(this,null,function*(){w.overrides&&this.options.addOverrides(w.channelId,w.overrides),w.renditions=yield this.filterRenditions(w.renditions),this.modules.renditions.setRenditions(w.channelId,w.renditions)}))),!o)throw si("external");const B=this.options.getOverride("sizeBasedResolutionCapEnabled",this.channelId);B!==void 0&&(this.modules.constraintCap.sizeBasedResolutionCapEnabled=B);const C=this.options.getOverride("separateVideoSocketEnabled",this.channelId);C!==void 0&&this.options.get("media")==="audio+video"&&this.modules.connection.setConnectionCount(C?2:1);const a=this.options.getOverride("minBufferTime",this.channelId),Q=this.options.getOverride("maxBufferTime",this.channelId);if((a||Q)&&(this.modules.bufferTime.updateConfig({minBufferTime:this.options.get("minBufferTime",this.channelId),maxBufferTime:this.options.get("maxBufferTime",this.channelId)}),this.targetBufferTime=this.options.get("minBufferTime",this.channelId)),this.options.get("burstEnabled",this.channelId)&&this.modules.subscription.enableBurst(this.targetBufferTime),this.emit("is live",o.isLive),!o.isLive)throw new Error("Waiting for channel to go live");this.patchSubscription(o,n),yield this.initializeDecodingModule(),this.resetModules(),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emit("channels",this.channels),this.emitLanguagesIfChanged(),this.sampleProcessingSesssions.clear(),this.cachedEdges=this.cachedEdges.length===0?s.edges:this.cachedEdges;const h=(this.options.get("edgeUrl")?[this.options.get("edgeUrl")]:[this.cachedEdges.shift()])[0],l=this.options.get("burstEnabled",this.channelId),f=MI(h,{video:this.targetSubscription.video,audio:this.targetSubscription.audio,burstMs:l?this.targetBufferTime:void 0,sessionId:this.sessionId,clientId:this.clientId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),expectAdditionalConnection:this.modules.connection.getConnectionCount()>1,authToken:this.options.get("authenticationToken")});if(!f||!h)throw new y("Failed to resolve edge url",{isFatal:!0,code:"failed_to_resolve_edge_url"});const p=this.shiftedEdges[this.shiftedEdges.length-1];return p&&((k=this.modules.telemetry)==null||k.addEvent({code:"shifted_edge",edgeUrl:p})),this.shiftedEdges.push(h),this.logger.debug("resolved edge url",{edgeUrl:f}),Promise.resolve(f)}));t(this,"emitLanguagesIfChanged",()=>{const e=this.modules.renditions.getLanguages(),s=this.latestEmittedLanguages;e.length==s.length&&e.every(I=>s.includes(I))||(this.logger.debug("Emitting new languages",{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit("languages",this.latestEmittedLanguages))});t(this,"filterRenditions",e=>m(this,null,function*(){const s=yield Promise.all(e.map(o=>m(this,null,function*(){var a,Q,r;if(kA(o))return!0;if(!this.isSupportedVideoCodecProfile(o.codec,o.codecString))return!1;if(!this.willUseMediaSource()){const h=this.options.get("advanced"),l=(a=h.wasmDecodingConstraint.bitRate)!=null?a:Number.MAX_SAFE_INTEGER,f=(Q=h.wasmDecodingConstraint.width)!=null?Q:Number.MAX_SAFE_INTEGER,p=(r=h.wasmDecodingConstraint.height)!=null?r:Number.MAX_SAFE_INTEGER;return o.bitRate<=l&&o.width<=f&&o.height<=p}const B=yield BI(o);if(!B.supported||o.codec=="av1"&&!B.smooth&&!B.powerEfficient)return!1;const C=this.options.getOverride("maxVideoBitRate",this.channelId);return C?C>=o.bitRate:!0})));let g=e.filter((o,B)=>s[B]);const I=g.filter(o=>o.codec==="h264").reverse()[0],n=g.filter(o=>o.codec==="av1").reverse()[0];return I&&n&&I.width>n.width&&I.height>n.height&&(g=g.filter(o=>o.codec!=="av1")),g}));t(this,"patchSubscription",(e,s)=>{const g=Math.min(this.options.get("maxVideoBitRate"),iA.INITIAL_MAX_BIT_RATE,s,this.targetSubscription.video.bitRate),I=Math.min(this.options.get("maxAudioBitRate"),iA.INITIAL_MAX_BIT_RATE,s,this.targetSubscription.audio.bitRate),n=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs",this.channelId),o=this.supportedAudioCodecs(),B=e.renditions.filter(kA),C=e.renditions.filter(RA),a=o.find(l=>B.find(f=>f.codec===l)!==void 0),Q=n.find(l=>C.find(f=>f.codec===l)!==void 0),r=B.map(l=>l.language);if(this.logger.debug("supported and selected codecs",{audioCodecs:o,videoCodecs:n,audioCodec:a,videoCodec:Q}),Q){const l=this.options.get("maxSize");this.modules.subscription.setVideoConstraint(c({codec:Q,bitRate:this.abrEnabled?g:this.options.get("maxVideoBitRate")},l))}a&&(this.modules.subscription.setAudioConstraint({codec:a,bitRate:this.abrEnabled?I:this.options.get("maxAudioBitRate"),language:this.options.get("language")}),(!r.includes(this.options.get("language"))||this.language===void 0)&&this.modules.subscription.setLanguage(r[0])),this.alignSizeAndBitRate(this.targetSubscription);const h=this.modules.subscription.getTargetSubscription();this.emitter.emit("subscription changed",{to:h,from:this.modules.subscription.getCurrentSubscription()})});t(this,"isSupportedVideoCodecProfile",(e,s)=>{if(this.willUseMediaSource()){const g=MA();return g?g.isTypeSupported(GA({codec:e,codecString:s})):!0}if(e==="h264"){const g=!!(s!=null&&s.startsWith("avc1.42")),I=!!(s!=null&&s.startsWith("avc1.66."));return g||I}return e!=="av1"});t(this,"supportedAudioCodecs",()=>{if(this.options.get("media")==="video")return[];const e=[];return(this.browser.supportsMp4Opus&&this.options.get("mseOpusEnabled")||!this.willUseMediaSource())&&e.push("opus"),this.willUseMediaSource()&&e.push("aac"),e});t(this,"initializeDecodingModule",()=>m(this,null,function*(){var g,I;const e=this.currentRenditionLevel,s=[];if(!e)throw new y("No currentRenditionLevel",{code:"no_current_rendition_level",isFatal:!1});if(e!=null&&e.video&&s.push({type:"video",mimeType:GA(e.video)}),e!=null&&e.audio&&s.push({type:"audio",mimeType:GA(e.audio)}),s.length===0)throw new y("Can't initialize decoding module without tracks",{code:"no_tracks",isFatal:!1});if(this.willUseMediaSource()&&this.element instanceof HTMLMediaElement)this.emitter.emit("flush buffers"),yield(g=this.modules.mseModule)==null?void 0:g.setSourceBuffers(s);else{const n=yield it.create(this.emitter,this.logger.getLogger("DecoderModule"),s,this.playbackSource,this.pool);(I=this.modules.decoder)==null||I.unload(),this.modules.decoder=n,this.modules.decoder.load()}}));t(this,"unload",()=>m(this,null,function*(){var e,s,g;this.logger.debug("Unloading modules..."),yield Promise.all(Object.values(this.modules).map(I=>I==null?void 0:I.unload())),(e=this.wakeLock)==null||e.unload(),this.pool=new _A(iA.MAX_POOL_SIZE),(g=(s=this.playbackSource).unload)==null||g.call(s),this.element.remove(),this.emitter.reset(),this.reset(),this.logger.debug("Unloaded modules")}));t(this,"userInput",()=>{this.play()});t(this,"pause",()=>{this.options.get("pauseSupportEnabled")&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())});t(this,"registerDebugInstance",()=>{nI(this)});t(this,"play",()=>m(this,null,function*(){var e;this.hasCalledConnect?this.unsuspend():(this._connect(),self.addEventListener("__vindral_register_debug__",this.registerDebugInstance)),(e=this.wakeLock)==null||e.enable(),this.playbackState==="paused"&&(this.resetModules(),this.emitter.emit("flush buffers"));try{yield this.playbackSource.play()}catch(s){}}));t(this,"getStatistics",()=>Object.values(this.modules).reduce((e,s)=>s&&"getStatistics"in s?c(c({},e),s.getStatistics()):e,this.getRuntimeInfo()));t(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});t(this,"getRuntimeInfo",()=>{const e=this.modules.canvasModule?this.options.get("iosMediaElementEnabled"):void 0;return c({uptime:Date.now()-this.createdAt,version:"3.3.2",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(),iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())});t(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()))});t(this,"onBufferEvent",e=>{var g,I,n,o;this.emit("buffer state event",e);const s=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e==="filled"&&s){const B=Math.max(this.currentTime,(I=(g=this.videoBufferedRanges[0])==null?void 0:g.start)!=null?I:0,(o=(n=this.audioBufferedRanges[0])==null?void 0:n.start)!=null?o:0);this.logger.info("Buffer filled - starting playback",{currentTime:B}),this.playbackSource.currentTime=B,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e==="drained"&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())});t(this,"timeToFirstFrame",()=>{const e=this.modules.playback.getFirstFrameTime(),s=this.modules.connection.firstConnectionTime;if(s&&e)return e-s});this.options=new II(c(c({},oI),qI(e)));const s=["localhost","127.0.0.1"];e.telemetryEnabled===void 0&&s.includes(location.hostname)&&this.options.set("telemetryEnabled",!1);const g={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}},I=at.create();I.setLevel(this.options.get("logLevel")),this.logger=I.getLogger("Vindral");const n=Et.create(this.emitter,this.logger.getLogger("PictureInPictureModule")),o=Z.create();this.apiClient=new Yt({publicEndpoint:this.options.get("url").toString(),tokenFactory:()=>this.options.get("authenticationToken")});const B=je.create(this.emitter,this.logger.getLogger("ConnectionModule"),{connectHandler:this.connectHandler,reconnectHandler:this.options.get("reconnectHandler")}),C=ut.create(this.logger.getLogger("SubscriptionModule"),this.emitter,g),a=lt.create(this.emitter,C),Q=dt.create(this.emitter,this.logger.getLogger("QualityOfServiceModule")),r=ct.create(this.emitter,this.logger.getLogger("PlaybackModule"),this,this.options.get("minBufferTime")),h=st.create(this.emitter),l=this.options.get("poster"),f=l===!0?this.getThumbnailUrl():l||void 0;let p,k,w;if(this.willUseMediaSource()){const E=new We({type:this.options.get("media")=="audio"?"audio":"video",autoplay:!1,muted:this.options.get("muted")||this.options.get("media")==="video",logger:this.logger.getLogger("MediaElement"),poster:f});E.on("buffer state",S=>this.emitter.emit("buffer state",S)),E.on("needs user input",S=>this.emitter.emit("needs user input",S)),E.on("volume state",S=>this.emit("volume state",S)),E.on("media element state",S=>this.onMediaElementState(S)),this.element=E.element,this.playbackSource=E,p=rt.create(this.logger.getLogger("MseModule"),this.emitter,this.element),this.options.get("pauseSupportEnabled")||(k=ae.create(this.logger.getLogger("UnpauseModule"),E,h)),this.options.get("pictureInPictureEnabled")&&this.emitter.emit("add picture in picture listener",{element:E.element})}else if(this.browser.platform.iosVersion>=15&&this.options.get("iosMediaElementEnabled")){const E=Qt.create(this.emitter,this.logger.getLogger("ModernCanvasModule"),this.pool,this,{type:this.options.get("media")=="audio"?"audio":"video",muted:this.options.get("muted")||this.options.get("media")==="video",poster:f}),S=E.element();this.element=S.element,this.playbackSource=E,w=E,this.options.get("pictureInPictureEnabled")&&this.browser.platform.iosVersion>15&&this.emitter.emit("add picture in picture listener",{element:this.element}),this.options.get("pauseSupportEnabled")||(k=ae.create(this.logger.getLogger("UnpauseModule"),S,h))}else{const E=Bt.create(this.emitter,this.logger.getLogger("LegacyCanvasModule"),this.pool,this,this.options.get("muted")||this.options.get("media")==="video");this.element=E.element(),this.playbackSource=E,w=E,this.options.get("iosWakeLockEnabled")&&(this.wakeLock=new iI)}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",()=>o.setTimeout(()=>void 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:()=>n.requestPictureInPicture(),exit:()=>n.exitPictureInPicture(),isActive:()=>n.isPictureInPictureActive(),isSupported:()=>n.isPictureInPictureSupported()},this.emitter.on("error",E=>{if(E.type()==="external"&&this.emit("error",E),E.isFatal())return()=>void this.unload()});const G=this.browser.platform.isIOS&&!this.browser.platform.isIpadOS,Y=mt.create(this.emitter,this.logger.getLogger("SyncModule"),this.playbackSource,r,this.willUseMediaSource()&&!G),M=(this.options.get("edgeUrl")||this.options.get("url")).replace("wss://","https://").replace("ws://","http://").replace("//lb.","//errors."),X=new URL("/telemetry",M).toString(),rA=Ce.create(this.logger.getLogger("TelemetryModule"),this.emitter,{url:X,enabled:this.options.get("telemetryEnabled"),includeStats:!1,interval:5e3},this);this.modules={telemetry:rA,bufferTime:Xe.create(this.emitter,this.logger.getLogger("BufferTimeModule"),Q,this,{maxBufferTime:this.options.get("maxBufferTime"),minBufferTime:this.options.get("minBufferTime")}),incomingData:It.create(this.emitter),adaptivity:Oe.create(this.emitter,this.logger.getLogger("AdaptivityModule"),Q,{cooldownTime:Math.max(this.options.get("minBufferTime"),2e3)}),constraintCap:$e.create(this.emitter,this.element,a,this.options.get("abrEnabled")?this.options.get("sizeBasedResolutionCapEnabled"):!1),event:gt.create(this.emitter,this.logger.getLogger("EventModule"),Y),sync:Y,documentState:h,connection:B,playback:r,pictureInPicture:n,logger:I,timer:o,subscription:C,renditions:a,qualityOfService:Q,mseModule:p,unpause:k,canvasModule:w},this.modules.adaptivity.isEnabled=this.options.get("abrEnabled"),this.emitter.on("page active",E=>{var S;E&&typeof this.disconnectTimeout=="number"&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),E?this.playbackSource.isPaused||(this.logger.debug("Unsuspending"),this.unsuspend()):(this.logger.debug("Suspending"),this.suspend(),this.modules.decoder?this.options.get("iosBackgroundPlayEnabled")?(this.modules.decoder.unsuspend(),(S=this.modules.canvasModule)==null||S.unsuspend()):this.modules.connection.disconnect():(this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{const b=this.playbackState==="paused"||this.muted;this.connectionState==="connected"&&b&&(this.emitter.emit("flush buffers"),this.modules.connection.disconnect("Page inactive timeout"))},iA.DISCONNECT_TIMEOUT)))});let _;this.emitter.on("context switch complete",()=>{_||(_=window.setTimeout(()=>{window.clearTimeout(_),_=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=>{E==="connected"&&(this.cachedEdges=[],this.shiftedEdges=[]),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 H,W,T;const b=((W=(H=E.telemetry)==null?void 0:H.probability)!=null?W:1)>=Math.random();E.telemetry&&((T=this.modules.telemetry)==null||T.unload(),this.modules.telemetry=Ce.create(this.logger.getLogger("TelemetryModule"),this.emitter,L(c({},E.telemetry),{enabled:this.options.get("telemetryEnabled")&&b}),this),this.modules.telemetry.load())}),this.emitter.on("adapt level",E=>{var sA,d,F,J,V;this.logger.debug("adapt level",{direction:E});const S=this.modules.renditions.getRenditionLevels(),b=this.modules.renditions.getRenditionLevel(),H=S.findIndex(D=>D===b),W=S.length-1;let T=H;switch(E){case"upgrade":{const D=Math.min(H+1,W),v=S[D],JA=(sA=this.modules.connection.estimatedBandwidth)!=null?sA:cA(),LA=((F=(d=v==null?void 0:v.audio)==null?void 0:d.bitRate)!=null?F:0)+((V=(J=v==null?void 0:v.video)==null?void 0:J.bitRate)!=null?V:0),zA=JA*2>LA;v&&zA&&this.modules.adaptivity.isQoSOk(v)&&(T=D)}break;case"downgrade":T=Math.max(H-1,0);break;case"double downgrade":T=Math.max(H-2,0);break;case"reconnect":if(H===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 T=0}if(T===H)return;const O=S[T];this.alignSizeAndBitRate(L(c({},this.targetSubscription),{video:c(c({},this.targetSubscription.video),O==null?void 0:O.video),audio:c(c({},this.targetSubscription.audio),O==null?void 0:O.audio)})),this.emitter.emit("adapted level")}),this.emitter.on("received signal",E=>{var b;const S=E;switch(this.logger.debug("received",c({},S)),S.type){case"client ip":this.clientIp=S.ip;break;case"renditions":this.filterRenditions(S.renditions).then(H=>{this.emitter.emit("renditions",{renditions:H,channelId:this.currentSubscription.channelId}),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()});break;case"subscription changed":try{KI(S.subscription)}catch(H){this.emitter.emit("error",new y("Subscription failed validation",{source:H instanceof Error?H:void 0,isFatal:!1,code:"subscription_failed_validation"}))}this.emitter.emit("subscription changed",{to:S.subscription,from:this.modules.subscription.getCurrentSubscription()}),this.modules.sync.timeshiftOnAudio=!((b=S.subscription.video)!=null&&b.codec),this.modules.adaptivity.reset();break;case"timing info":this.modules.sync.updateChannelSyncInfo(S.timingInfo.channelId,S.timingInfo),this.emit("server wallclock time",S.timingInfo.wallclockTime);break}}),this.emitter.on("received data",E=>{const S=this.modules.subscription.getCurrentSubscription(),b=AI(E);if(!S){this.logger.warn("Received unwanted message",c({},b));return}DA(L(c({},b),{channelId:S.channelId}))});const z=this.options.get("container");z&&this.attach(z),this.logger.info("Created Vindral instance",{options:this.options});const DA=E=>{const S=E.channelId,b=this.modules.renditions.getRendition(E.renditionId,S);if(!jg(E.flags)){if(_g(E.flags)){const H=new TextDecoder;this.modules.event.addEvent({timestamp:E.timestamp/E.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:H.decode(E.payload),type:"metadata"})}else if(b!=null&&b.codec){const H=ds(b.codec);if(this.modules.incomingData.add(H,E.payload.byteLength),zg(E.flags)){const W=L(c({type:H,data:E.payload,codec:b.codec},E),{channelId:S}),T=xg(W.codec,W.payload);T&&this.sizes.set(W.renditionId,T);const O=GA({codec:b.codec,codecString:b.codecString});this.emitter.emit("init segment",{initSegment:W,mimeType:O}),this.emit("initialized media")}else{const W=PI(E,b,this.sizes.get(E.renditionId));let T=this.sampleProcessingSesssions.get(H);if(!T)T=HI(this.modules.sync.processSample(W)),this.sampleProcessingSesssions.set(H,T);else{const O=T(this.modules.sync.processSample(W),this.isSwitchingRenditionLevel&&W.type==="video");let sA=W;O.forEach(d=>{this.modules.event.extractEvent(d,sA),this.emitter.emit("coded sample",d),sA=d})}}}}};this.options.get("maxVideoBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxVideoBitRate=this.options.get("maxVideoBitRate")),this.options.get("maxAudioBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxAudioBitRate=this.options.get("maxAudioBitRate")),uA(this.options.get("maxSize"),Ae())||(this.maxSize=this.options.get("maxSize")),this.options.get("burstEnabled")&&C.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){const s=this.playbackSource.muted;this.playbackSource.muted=e,!e&&s&&!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))}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)!=null?e:0)+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){this.modules.subscription.setLanguage(e)}get channelId(){return this.modules.subscription.getTargetSubscription().channelId}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);const s=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs"),g=this.modules.renditions.getAudioRenditions(e),I=this.modules.renditions.getVideoRenditions(e),n=this.targetSubscription.audio.language,o=g==null?void 0:g.some(C=>C.language===n),B=s.find(C=>(I==null?void 0:I.find(a=>a.codec===C))!==void 0);B&&this.modules.subscription.setVideoCodec(B),this.logger.debug("Channel switch - started",{audioRenditions:g,targetSubscriptionLanguage:n,targetHasCurrentLanguage:o}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var g,I;const{width:e,height:s}=(I=(g=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:g.video)!=null?I:Ae();return{width:e,height:s}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,s;return(s=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.video.bitRate)!=null?s:cA()}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,s;return(s=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.audio.bitRate)!=null?s:cA()}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,s,g,I;return(I=(g=(e=this.modules.mseModule)==null?void 0:e.getBuffer("video"))!=null?g:(s=this.modules.decoder)==null?void 0:s.getBuffer("video"))!=null?I:[]}get audioBufferedRanges(){var e,s,g,I;return(I=(g=(e=this.modules.mseModule)==null?void 0:e.getBuffer("audio"))!=null?g:(s=this.modules.decoder)==null?void 0:s.getBuffer("audio"))!=null?I:[]}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 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){const s=this.modules.constraintCap.constrainSubscription(L(c({},e),{video:c({},e.video),audio:c({},e.audio)})),g=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&g&&(s.audio.bitRate=g.audio.bitRate,s.video.bitRate=g.video.bitRate,s.video.width=g.video.width,s.video.height=g.video.height);const I=this.modules.renditions.getRenditionLevel(s);if(I){if(I.video&&(this.modules.subscription.setVideoBitRate(I.video.bitRate),this.modules.subscription.setSize(I.video)),I.audio)this.modules.subscription.setAudioBitRate(I.audio.bitRate),this.modules.subscription.setLanguage(I.audio.language);else if(s.audio.language){let n=this.modules.renditions.getAudioRenditions(s.channelId);!this.abrEnabled&&g&&(n=n==null?void 0:n.filter(Q=>Q.bitRate<g.audio.bitRate));const o=s.audio.language,B=n==null?void 0:n.some(Q=>Q.language===o),C=n==null?void 0:n.find(Q=>Q.language),a=(n==null?void 0:n.length)&&n[0]||void 0;B||(C?(this.logger.debug("Randomizing language since target did not have current language"),this.modules.subscription.setAudioBitRate(C.bitRate),this.modules.subscription.setLanguage(C.language)):(this.logger.debug("Randomizing audio rendition since target did not have current language"),a!=null&&a.bitRate&&this.modules.subscription.setAudioBitRate(a.bitRate),this.modules.subscription.setLanguage(a==null?void 0:a.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}willUseMediaSource(){return this.browser.supportsMediaSource&&this.options.get("mseEnabled")}};t(iA,"MAX_POOL_SIZE",10),t(iA,"INITIAL_MAX_BIT_RATE",2.5*1e3*1e3),t(iA,"PING_TIMEOUT",1e3),t(iA,"DISCONNECT_TIMEOUT",15*1e3);let Qe=iA;const Mi={bar:"_bar_16xpe_1",hidden:"_hidden_16xpe_46"},YA={"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:"_withThumbnails_suenn_19","hide-on-small":"_hide-on-small_suenn_27"},YI={"icon-button":"_icon-button_5fg7v_1"},Pi={enter:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
26
+ `,Si=(i,A)=>{let e=i.getContext("webgl",A);if(e||(e=i.getContext("experimental-webgl",A)),!e)throw new y("Failed to create webgl context",{isFatal:!0,code:"failed_to_create_web_gl_context"});return e},oe=(i,A,e)=>{const s=i.createShader(A);if(!s)throw new y("Failed to create shader",{isFatal:!0,code:"failed_to_create_shader"});if(i.shaderSource(s,e),i.compileShader(s),!i.getShaderParameter(s,i.COMPILE_STATUS)){const g=i.getShaderInfoLog(s);throw new y(`Failed to compile shader: ${g!=null?g:""}`,{isFatal:!0,code:"failed_to_compile_shader"})}return s},UA=i=>{const A=i.createTexture();if(!A)throw new y("Failed to create texture",{isFatal:!0,code:"failed_to_create_texture"});return i.bindTexture(i.TEXTURE_2D,A),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),A},fi=(i,A)=>{const e=i.createBuffer();if(!e)throw new y("Failed to create buffer",{isFatal:!0,code:"failed_to_create_buffer"});return i.bindBuffer(i.ARRAY_BUFFER,e),i.bufferData(i.ARRAY_BUFFER,A.buffer,i.STATIC_DRAW),e},Di=(i,A,e)=>{const s=i.createProgram();if(!s)throw new y("Failed to create program",{isFatal:!0,code:"failed_to_create_program"});if(i.attachShader(s,e),i.attachShader(s,A),i.linkProgram(s),!i.getProgramParameter(s,i.LINK_STATUS)){const g=i.getShaderInfoLog(s);throw new y(`Failed to link program: ${g!=null?g:""}`,{isFatal:!0,code:"failed_to_link_program"})}return s},pi={width:256,codedWidth:256,height:144,codedHeight:144},yi={preserveDrawingBuffer:!1,alpha:!1,depth:!1,stencil:!1,antialias:!1,premultipliedAlpha:!1},XA=class XA extends AA{constructor(){super();t(this,"canvas",document.createElement("canvas"));t(this,"context",Si(this.canvas,yi));t(this,"pixelShader",oe(this.context,this.context.FRAGMENT_SHADER,mi));t(this,"vertexShader",oe(this.context,this.context.VERTEX_SHADER,wi));t(this,"buffer",fi(this.context,XA.SQUARE_VERTICES));t(this,"program",Di(this.context,this.vertexShader,this.pixelShader));t(this,"textures",{y:UA(this.context),u:UA(this.context),v:UA(this.context)});t(this,"size",pi);t(this,"onContextLost",e=>{const s=new Error(e instanceof WebGLContextEvent?e.statusMessage:"webgl context lost");this.emit("context lost",Ls(s)),e.preventDefault()});t(this,"onContextRestored",()=>{this.emit("context restored"),this.context=Si(this.canvas,yi),this.pixelShader=oe(this.context,this.context.FRAGMENT_SHADER,mi),this.vertexShader=oe(this.context,this.context.VERTEX_SHADER,wi),this.buffer=fi(this.context,XA.SQUARE_VERTICES),this.program=Di(this.context,this.vertexShader,this.pixelShader),this.textures={y:UA(this.context),u:UA(this.context),v:UA(this.context)},this.load()});t(this,"load",()=>{this.context.useProgram(this.program),this.setupPositionVertexAttributes(),this.setSize(pi),this.context.uniform1i(this.context.getUniformLocation(this.program,"y_texture"),0),this.context.uniform1i(this.context.getUniformLocation(this.program,"u_texture"),1),this.context.uniform1i(this.context.getUniformLocation(this.program,"v_texture"),2),this.setConversionMatrix(this.rec709())});t(this,"unload",()=>{var s;this.setSize({width:1,height:1,codedHeight:1,codedWidth:1}),[this.textures.y,this.textures.u,this.textures.v].forEach(g=>this.context.deleteTexture(g)),this.context.deleteShader(this.pixelShader),this.context.deleteShader(this.vertexShader),this.context.deleteProgram(this.program),this.context.deleteBuffer(this.buffer),this.canvas.removeEventListener("webglcontextlost",this.onContextLost),this.canvas.removeEventListener("webglcontextrestored",this.onContextRestored),(s=this.context.getExtension("WEBGL_lose_context"))==null||s.loseContext()});t(this,"resetSize",()=>{this.setSize({width:this.size.width/2,height:this.size.height/2,codedHeight:this.size.codedHeight/2,codedWidth:this.size.codedWidth/2})});t(this,"render",e=>{this.setSize({width:e.width,height:e.height,codedWidth:e.codedWidth,codedHeight:e.codedHeight}),this.context.activeTexture(this.context.TEXTURE0),this.updateTexture(this.textures.y,this.size.codedWidth,this.size.codedHeight,e.data[0]),this.context.activeTexture(this.context.TEXTURE1),this.updateTexture(this.textures.u,this.size.codedWidth/2,this.size.codedHeight/2,e.data[1]),this.context.activeTexture(this.context.TEXTURE2),this.updateTexture(this.textures.v,this.size.codedWidth/2,this.size.codedHeight/2,e.data[2]),this.context.drawArrays(this.context.TRIANGLE_STRIP,0,4)});t(this,"updateTexture",(e,s,g,I)=>{const o=this.context.LUMINANCE,B=this.context.UNSIGNED_BYTE;this.context.bindTexture(this.context.TEXTURE_2D,e),this.context.texImage2D(this.context.TEXTURE_2D,0,o,s,g,0,o,B,I)});t(this,"setupPositionVertexAttributes",()=>{const e=this.context.getAttribLocation(this.program,"position");this.context.enableVertexAttribArray(e),this.context.vertexAttribPointer(e,2,this.context.FLOAT,!1,0,0)});t(this,"setSize",e=>{uA(e,this.size)||(this.size=e,this.canvas.setAttribute("width",e.width.toString()),this.canvas.setAttribute("height",e.height.toString()),this.context.viewport(0,0,e.width,e.height),this.setModelMatrix(e.width/e.codedWidth,e.height/e.codedHeight))});t(this,"setModelMatrix",(e,s)=>{const g=this.context.getUniformLocation(this.program,"model");this.context.uniformMatrix4fv(g,!1,this.transformMatrix(e,s))});t(this,"setConversionMatrix",e=>{const s=this.context.getUniformLocation(this.program,"conversion");this.context.uniformMatrix4fv(s,!1,e)});t(this,"transformMatrix",(e,s)=>[2/e,0,0,0,0,-2/s,0,0,0,0,2/1,0,-1,1,0,1]);t(this,"rec709",()=>[1.16438,0,1.79274,-.97295,1.16438,-.21325,-.53291,.30148,1.16438,2.1124,0,-1.1334,0,0,0,1]);t(this,"rec601",()=>[1.16438,0,1.59603,-.87079,1.16438,-.39176,-.81297,.52959,1.16438,2.01723,0,-1.08139,0,0,0,1]);this.canvas.addEventListener("webglcontextlost",this.onContextLost),this.canvas.addEventListener("webglcontextrestored",this.onContextRestored,!1),this.canvas.style.width="100%",this.canvas.style.position="relative"}};t(XA,"SQUARE_VERTICES",new Float32Array([0,0,0,1,1,0,1,1]));let ot=XA;const we=class we{constructor(A,e,s){t(this,"oldTimestampLimit",400);t(this,"pool");t(this,"logger");t(this,"videoRenderer",new ot);t(this,"renderQueue",[]);t(this,"clockSource");t(this,"isFirstFrame",!0);t(this,"animationFrameRequest");t(this,"renderedFrameCount",0);t(this,"rendererDroppedFrameCount",0);t(this,"load",()=>{this.videoRenderer.load()});t(this,"unload",()=>(this.stopRender(),this.videoRenderer.unload(),Promise.resolve()));t(this,"suspend",()=>{this.renderQueue=[],this.stopRender()});t(this,"unsuspend",()=>{this.animationFrameRequest=requestAnimationFrame(this.render)});t(this,"element",()=>this.videoRenderer.canvas);t(this,"getStatistics",()=>({renderedFrameCount:this.renderedFrameCount,rendererDroppedFrameCount:this.rendererDroppedFrameCount,contextLostCount:0,contextRestoredCount:0}));t(this,"resetSize",()=>{this.videoRenderer.resetSize()});t(this,"onDecodedFrame",A=>{if(A.type==="video")if(this.isFirstFrame)this.isFirstFrame=!1,requestAnimationFrame(()=>{this.renderSample(A)});else{const e=(this.clockSource.currentTime-this.oldTimestampLimit)/1e3;this.renderQueue=this.renderQueue.filter(s=>{const g=s.timestamp/s.timescale,I=A.timestamp/A.timescale,n=g>e&&g<=I;return n||this.pool.reclaim(s.buffer),n}),this.renderQueue.push(A)}});t(this,"render",()=>{const A=this.clockSource.currentTime;let e=this.renderQueue[0],s,g=0;for(;e&&e.timestamp/e.timescale*1e3<=A;)e=this.renderQueue.shift(),e&&(g++,s&&this.pool.reclaim(s.buffer),s=e),e=this.renderQueue[0];s&&this.renderSample(s),this.rendererDroppedFrameCount+=Math.max(g-1,0),this.animationFrameRequest=requestAnimationFrame(this.render)});t(this,"renderSample",A=>{this.renderedFrameCount++,this.videoRenderer.render(A),this.pool.reclaim(A.buffer)});t(this,"stopRender",()=>{this.animationFrameRequest&&cancelAnimationFrame(this.animationFrameRequest)});this.logger=A,this.clockSource=e,this.pool=s}};t(we,"create",(A,e,s)=>new we(A,e,s));let Be=we;const Se=class Se{constructor(A,e,s,g,I){t(this,"logger");t(this,"emitter");t(this,"audioPlayer");t(this,"videoPlayer");t(this,"pool");t(this,"unmuter",new fI);t(this,"_isPaused",!1);t(this,"isDisconnected",!1);t(this,"reset",()=>{});t(this,"load",()=>{this.audioPlayer.useDefaultDestination(),this.emitter.on("decoded frame",this.onDecodedFrame),this.emitter.on("flush buffers",this.flushBuffers),this.videoPlayer.load()});t(this,"unload",()=>{this.emitter.off("decoded frame",this.onDecodedFrame),this.emitter.off("flush buffers",this.flushBuffers),this.audioPlayer.unload(),this.videoPlayer.unload()});t(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});t(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});t(this,"element",()=>this.videoPlayer.element());t(this,"getStatistics",()=>this.videoPlayer.getStatistics());t(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});t(this,"activateAudioPlayer",()=>(this.isDisconnected&&(this.isDisconnected=!1,this.audioPlayer.useDefaultDestination()),this._isPaused=!1,this.unmuter.unmute(),this.audioPlayer.play()));t(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",ti(!1,e))}this.videoPlayer.onDecodedFrame(A)});this.logger=e,this.emitter=A,this.pool=s,this.audioPlayer=ne.create(this.logger.getLogger("AudioPlayerModule"),g,{muted:I,reInitWhenStuck:!0}),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=Be.create(this.logger.getLogger("VideoPlayerModule"),this.audioPlayer,this.pool)}get volume(){return this.audioPlayer.volume}set volume(A){this.audioPlayer.volume=A}get muted(){return this.audioPlayer.muted}set muted(A){const e=this.muted;this.audioPlayer.muted=A,!A&&e&&this.activateAudioPlayer().catch(gA)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.audioPlayer.isActivated}set isActivated(A){this.audioPlayer.isActivated=A}get seekTime(){return this.audioPlayer.seekTime}get isPaused(){return this._isPaused}get isSeeking(){return this.audioPlayer.isSeeking}play(){return m(this,null,function*(){try{yield this.activateAudioPlayer()}catch(A){this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})}this.emitter.emit("media element state","playing")})}pause(){this._isPaused=!0,this.audioPlayer.pause(),this.emitter.emit("media element state","paused")}};t(Se,"create",(A,e,s,g,I)=>new Se(A,e,s,g,I));let Bt=Se;class Ct{constructor(A){t(this,"options");t(this,"getLogger",A=>new Ct(L(c({},this.options),{parent:this,category:A})));t(this,"getFullCategory",()=>{var A;return[this.category()].concat(((A=this.options.parent)==null?void 0:A.getFullCategory())||[])});t(this,"category",()=>this.options.category);t(this,"trace",(A,e)=>this.options.onLog(this,QA.TRACE,A,e));t(this,"debug",(A,e)=>this.options.onLog(this,QA.DEBUG,A,e));t(this,"info",(A,e)=>this.options.onLog(this,QA.INFO,A,e));t(this,"warn",(A,e)=>this.options.onLog(this,QA.WARN,A,e));t(this,"error",(A,e)=>this.options.onLog(this,QA.ERROR,A,e));t(this,"critical",(A,e)=>this.options.onLog(this,QA.CRITICAL,A,e));this.options=A}}const Fi=(i,A)=>Wt.indexOf(i)<Wt.indexOf(A),fe=class fe{constructor(){t(this,"level",QA.DEBUG);t(this,"categoryLevels",new Map);t(this,"getLogger",A=>new Ct({category:A,onLog:this.onLog}));t(this,"setLevel",(A,e)=>{e?this.categoryLevels.set(e,A):this.level=A});t(this,"unload",()=>{});t(this,"onLog",(A,e,s,g)=>{if(Fi(e,this.level))return;const I=A.category(),n=this.categoryLevels.get(I);if(n&&Fi(e,n))return;const o=A.getFullCategory().reduceRight((C,a)=>(C.length?C+" > ":"")+a,""),B=`[${new Date().toISOString()}][${e}][${o}] ${s}`;console.log(B,g)})}};t(fe,"create",()=>new fe);let at=fe;const De=class De{constructor(A,e,s,g,{muted:I,type:n,poster:o}){t(this,"logger");t(this,"emitter");t(this,"mediaElement");t(this,"audioPlayer");t(this,"videoPlayer");t(this,"pool");t(this,"isDisconnected",!0);t(this,"_userProvidedMuted",!1);t(this,"volumeState");t(this,"reset",()=>{});t(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()});t(this,"unload",()=>{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.mediaElement.unload(),this.audioPlayer.unload(),this.videoPlayer.unload()});t(this,"suspend",()=>{this.videoPlayer.suspend(),this.audioPlayer.suspend()});t(this,"unsuspend",()=>{this.videoPlayer.unsuspend(),this.audioPlayer.unsuspend()});t(this,"element",()=>this.mediaElement);t(this,"getStatistics",()=>this.videoPlayer.getStatistics());t(this,"activateAudioPlayer",()=>(this.isDisconnected&&this.connectStreams(),this.audioPlayer.play()));t(this,"flushBuffers",()=>{this.audioPlayer.flushBuffer()});t(this,"resetCanvasSize",()=>{this.videoPlayer.resetSize()});t(this,"onEnterIOSHack",()=>{this.mediaElement._iosHackEnterPiPMode()});t(this,"onExitIOSHack",()=>{this.mediaElement._iosHackExitPiPMode()});t(this,"onDecodedFrame",A=>{try{this.audioPlayer.onDecodedFrame(A)}catch(e){e instanceof Error&&this.emitter.emit("error",ti(!1,e))}this.videoPlayer.onDecodedFrame(A)});t(this,"connectStreams",()=>{const A=this.videoPlayer.element().captureStream(),e=this.audioPlayer.useMediaStreamDestination().stream,s=[];s.push(...A.getTracks(),...e.getTracks()),this.mediaElement.element.srcObject=new MediaStream(s),this.isDisconnected=!1});t(this,"updateVolumeState",()=>{const A={isMuted:this.muted,volume:this.volume};uA(A,this.volumeState)||(this.volumeState=A,this.emitter.emit("volume state",this.volumeState))});this.logger=e,this.emitter=A,this.pool=s,this._userProvidedMuted=I,this.mediaElement=new We({poster:o,type:n,muted:I,autoplay:!1,logger:this.logger.getLogger("MediaElement")}),this.mediaElement.on("volume state",B=>{this.updateVolumeState(),!B.isMuted&&!this.audioPlayer.isContextRunning&&this.activateAudioPlayer().catch(gA),B.isMuted||(this._userProvidedMuted=!1)}),this.mediaElement.on("media element state",B=>{B==="paused"&&this.audioPlayer.flushBuffer(),this.emitter.emit("media element state",B)}),this.audioPlayer=ne.create(this.logger.getLogger("AudioPlayerModule"),g,{muted:!1,reInitWhenStuck:!1}),this.audioPlayer.on("stuck",()=>{this.isDisconnected=!0}),this.audioPlayer.on("state change",B=>{B==="suspended"||B==="interrupted"?this.mediaElement.muted=!0:B==="running"&&(this.mediaElement.muted=this._userProvidedMuted||document.visibilityState==="hidden"),this.updateVolumeState()}),this.videoPlayer=Be.create(this.logger.getLogger("VideoPlayerModule"),this.audioPlayer,this.pool),this.volumeState={volume:this.volume,isMuted:this.muted}}get volume(){return this.mediaElement.volume}set volume(A){this.mediaElement.volume=A}get muted(){return this.mediaElement.muted||this.audioPlayer.muted}set muted(A){const e=this.muted;this._userProvidedMuted=A,this.mediaElement.muted=A,!A&&e&&this.activateAudioPlayer().catch(gA)}get currentTime(){return this.audioPlayer.currentTime}set currentTime(A){this.audioPlayer.currentTime=A}get isActivated(){return this.mediaElement.isActivated}set isActivated(A){this.mediaElement.isActivated=A}get seekTime(){return this.mediaElement.seekTime}get isPaused(){return this.mediaElement.isPaused}get isSeeking(){return this.mediaElement.isSeeking}play(){return m(this,null,function*(){const A=this._userProvidedMuted;return this.activateAudioPlayer().catch(()=>{A||this.emitter.emit("needs user input",{forAudio:!0,forVideo:!1})}),this.mediaElement.play()})}pause(){this.mediaElement.pause()}};t(De,"create",(A,e,s,g,I)=>new De(A,e,s,g,I));let Qt=De;const DI=()=>i=>Ri(i.buffered.start(0),i.buffered.end(i.buffered.length-1)),Ri=(i,A)=>e=>e.remove(Math.max(0,i),Math.min(Number.POSITIVE_INFINITY,A)),pI=i=>A=>A.appendBuffer(i),yI=i=>A=>A.changeType(i),FI=i=>A=>i(A);class RI{constructor(A){t(this,"commandQueue",[]);t(this,"sourceBuffer");t(this,"handleQueue",()=>{var A;this.sourceBuffer.updating||(A=this.commandQueue.shift())==null||A.execute(this.sourceBuffer)});t(this,"appendBuffer",A=>new Promise((e,s)=>{const g=new lA(pI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"execute",A=>new Promise((e,s)=>{const g=new lA(FI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"buffered",()=>this.sourceBuffer.buffered);t(this,"removeFromMediaSource",A=>{A.removeSourceBuffer(this.sourceBuffer)});t(this,"changeType",A=>new Promise((e,s)=>{const g=new lA(yI(A),e,s);this.commandQueue.push(g),this.handleQueue()}));t(this,"removeBuffer",(A,e)=>new Promise((s,g)=>{const I=new lA(Ri(A,e),s,g);this.commandQueue.push(I),this.handleQueue()}));t(this,"flush",()=>new Promise((A,e)=>{const s=new lA(DI,A,e);this.commandQueue.push(s),this.handleQueue()}));this.sourceBuffer=A,this.sourceBuffer.addEventListener("updateend",this.handleQueue)}}class ki extends AA{constructor(){super();t(this,"MediaSource",MA());t(this,"mediaSource",new this.MediaSource);t(this,"isOpen",()=>this.mediaSource.readyState==="open");t(this,"isClosed",()=>this.mediaSource.readyState==="closed");t(this,"isEnded",()=>this.mediaSource.readyState==="ended");t(this,"createObjectURL",()=>URL.createObjectURL(this.mediaSource));t(this,"attach",e=>{const s=e;if("srcObject"in s)try{s.srcObject=this.mediaSource}catch(g){if(g instanceof Error&&g.name!=="TypeError")throw g;s.src=this.createObjectURL()}else e.src=this.createObjectURL()});t(this,"detach",e=>{e.srcObject?e.srcObject=null:e.src!==""&&(URL.revokeObjectURL(e.src),e.removeAttribute(e.src)),e.load()});t(this,"addSourceBuffer",e=>{const s=this.mediaSource.addSourceBuffer(e);return new RI(s)});t(this,"removeSourceBuffer",e=>{e.removeFromMediaSource(this.mediaSource)});t(this,"endOfStream",e=>{this.mediaSource.endOfStream(e)});t(this,"onSourceOpen",()=>{this.setDurationIfNeeded(),this.emit("source open")});t(this,"onSourceEnded",()=>this.emit("source ended"));t(this,"onSourceClosed",()=>this.emit("source close"));t(this,"setDurationIfNeeded",()=>{if(Number.isNaN(this.mediaSource.duration)&&this.mediaSource.readyState==="open"){for(let e=0;e<this.mediaSource.sourceBuffers.length;e++){const s=this.mediaSource.sourceBuffers[e];if(s!=null&&s.updating)return}this.mediaSource.duration=Number.POSITIVE_INFINITY}});this.mediaSource.addEventListener("sourceopen",this.onSourceOpen),this.mediaSource.addEventListener("sourceclose",this.onSourceClosed),this.mediaSource.addEventListener("sourceended",this.onSourceEnded)}}t(ki,"isTypeSupported",e=>{var s,g;return(g=(s=MA())==null?void 0:s.isTypeSupported(e))!=null?g:!1});class Gi{constructor(){t(this,"initSegments",new Map);t(this,"set",(A,e,s)=>{var I;const g=(I=this.initSegments.get(A))!=null?I:new Map;g.set(e,s),this.initSegments.set(A,g)});t(this,"get",(A,e)=>{var s;return(s=this.initSegments.get(A))==null?void 0:s.get(e)})}}function kI(i,{mediaSource:A,mimeType:e}){return L(c({},i),{state:"initialized",mimeType:e,sourceBuffer:A.addSourceBuffer(e),isWorkingOnPendingSamples:!1,sequenceNumber:0})}function Ui({initSegments:i,pendingSamples:A}){return{state:"uninitialized",initSegments:i!=null?i:new Gi,sequenceNumber:0,isWorkingOnPendingSamples:!1,hasFirstSync:!!A,pendingSamples:A!=null?A:[],consecutiveQuotaExceededErrorCount:0,successfulAppendCalls:0}}const pe=class pe{constructor(A,e,s){t(this,"maxChunkSize",20);t(this,"minConsecutiveErrorsBeforeEmit",5);t(this,"logger");t(this,"timers",Z.create());t(this,"emitter");t(this,"mediaElement");t(this,"mediaSource",new ki);t(this,"trackContexts",new Map);t(this,"autoRecoverFromMediaErrors",!0);t(this,"quotaErrorCount",0);t(this,"recoveredFromErrorCount",0);t(this,"sourceOpenStartTime",Date.now());t(this,"sourceOpenEndTime",Date.now());t(this,"pendingTracksToAddSourceBuffers");t(this,"hasAddedInitialPosterFrame",!0);t(this,"load",()=>{this.emitter.on("init segment",this.init),this.emitter.on("coded sample",this.onCodedSample),this.emitter.on("flush buffers",this.flushBuffers)});t(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.mediaSource.off("source ended",this.onSourceEnded),this.mediaSource.off("source open",this.onSourceOpen),this.mediaSource.detach(this.mediaElement),this.trackContexts.forEach(A=>A.pendingSamples=[]),this.timers.unload(),this.logger.debug("Unloaded module")});t(this,"getStatistics",()=>{var e,s,g,I;const A={quotaErrorCount:this.quotaErrorCount,mediaSourceOpenTime:this.sourceOpenEndTime-this.sourceOpenStartTime,successfulAudioAppendsCalls:(e=this.trackContexts.get("audio"))==null?void 0:e.successfulAppendCalls,successfulVideoAppendCalls:(s=this.trackContexts.get("video"))==null?void 0:s.successfulAppendCalls};if(this.mediaElement instanceof HTMLVideoElement){const n=(I=(g=this.mediaElement).getVideoPlaybackQuality)==null?void 0:I.call(g);A.totalVideoFrames=n==null?void 0:n.totalVideoFrames,A.droppedVideoFrames=n==null?void 0:n.droppedVideoFrames}return A});t(this,"flushBuffers",()=>{this.trackContexts.forEach(A=>{A.pendingSamples=[],A.hasFirstSync=!1,A.state!=="uninitialized"&&this.mediaSource.isOpen()&&A.sourceBuffer.removeBuffer(0,Number.POSITIVE_INFINITY).catch(e=>{this.logger.error("Failed to remove buffer",{error:e})})})});t(this,"setTrackContexts",(A=new Map)=>{this.logger.debug("setTrackContexts"),["audio","video"].forEach(s=>{var n,o,B,C;const g=(o=(n=A.get(s))==null?void 0:n.pendingSamples)!=null?o:[],I=(B=A.get(s))==null?void 0:B.initSegments;for(;g.length>0&&!((C=g[0])!=null&&C.isSync);)g.shift();this.trackContexts.set(s,Ui({pendingSamples:g,initSegments:I}))})});t(this,"setSourceBuffers",A=>m(this,null,function*(){if(this.mediaSource.isClosed()){this.pendingTracksToAddSourceBuffers=A;return}let e=!0;for(const s of A){const g=this.trackContexts.get(s.type);if(!g||g.state==="uninitialized"||g.mimeType!==s.mimeType){e=!1;break}}if(e){this.logger.debug("Already setup with the correct mime types");return}for(const s of A){let g=this.trackContexts.get(s.type);g||(g=Ui({pendingSamples:[],initSegments:new Gi}),this.trackContexts.set(s.type,g)),g.state==="initialized"?s.mimeType!==g.mimeType&&(yield g.sourceBuffer.changeType(s.mimeType)):this.trackContexts.set(s.type,kI(g,{mimeType:s.mimeType,mediaSource:this.mediaSource}))}}));t(this,"getBuffer",A=>{const e=[];if(this.mediaSource.isClosed())return[];const s=this.trackContexts.get(A);if(!s||s.state==="uninitialized")return[];try{const g=s.sourceBuffer.buffered();if(!g)return[];for(let I=0;I<g.length;I++)e.push({start:g.start(I)*1e3,end:g.end(I)*1e3});return e}catch(g){return[]}});t(this,"init",({initSegment:A,mimeType:e})=>{this.logger.debug("Added init segment",{channel:A.channelId,renditionId:A.renditionId});const s=this.trackContexts.get(A.type);if(!s)throw Te(A.type,A.renditionId);s.state==="initialized"&&(s.mimeType=e);const g=Yg(A.codec,A.data,A.timescale);g&&s.initSegments.set(A.channelId,A.renditionId,g)});t(this,"append",(A,e)=>m(this,null,function*(){var n;const s=A[0];if(!s)return;const g=this.trackContexts.get(s.type),I=g==null?void 0:g.initSegments.get(s.channelId,s.renditionId);if(!this.mediaSource.isClosed()){if(!I)throw Fs(s.renditionId,s.channelId);if(!g)throw Te(s.type,s.renditionId);if(g.state==="uninitialized")throw Rs(s.type,s.renditionId);if(e){const o=(s.timestamp+((n=s.compositionTimeOffset)!=null?n:0))/s.timescale;yield g.sourceBuffer.removeBuffer(o,Number.POSITIVE_INFINITY);const B=g.previousSample;if(B&&B.codec!==s.codec&&g.sourceBuffer.changeType)try{yield g.sourceBuffer.changeType(g.mimeType)}catch(C){}yield g.sourceBuffer.appendBuffer(I)}try{let o=g.sequenceNumber;const B=GI(A.map(C=>Xg(C,o++)));yield g.sourceBuffer.appendBuffer(B),g.sequenceNumber=o,g.consecutiveQuotaExceededErrorCount=0,g.successfulAppendCalls++}catch(o){throw o instanceof DOMException&&(o.code===DOMException.QUOTA_EXCEEDED_ERR?(this.quotaErrorCount++,g.consecutiveQuotaExceededErrorCount++,this.logger.error("quota exceeded error",{error:o}),g.pendingSamples.unshift(...A)):this.mediaElement.error&&g.pendingSamples.unshift(...A)),o}}}));t(this,"onCodedSample",A=>{if(A.duration===0)return;const e=this.trackContexts.get(A.type);if(!e)throw Te(A.type,A.renditionId);if(!(!e.hasFirstSync&&!A.isSync)){if(this.hasAddedInitialPosterFrame&&A.isSync&&A.type==="video"){this.hasAddedInitialPosterFrame=!1;const s=c({},A);s.timestamp=0,e.pendingSamples.push(s)}e.hasFirstSync=!0,e.pendingSamples.push(A),e.state!=="uninitialized"&&(e.isWorkingOnPendingSamples||UI(e,this.append,this.maxChunkSize).catch(s=>{if(e.isWorkingOnPendingSamples=!1,s instanceof Error){if(this.logger.error("append failed",{message:s.message,name:s.name}),s instanceof DOMException&&s.code===DOMException.QUOTA_EXCEEDED_ERR){if(e.consecutiveQuotaExceededErrorCount>=this.minConsecutiveErrorsBeforeEmit){const g=ii(!1,s,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",g)}}else{const g=ii(!1,s,e.consecutiveQuotaExceededErrorCount,A.type);this.emitter.emit("error",g)}this.mediaElement.error&&this.onSourceEnded()}}))}});t(this,"onSourceOpen",()=>{this.logger.debug("source opened"),this.sourceOpenEndTime=Date.now(),this.pendingTracksToAddSourceBuffers&&(this.setSourceBuffers(this.pendingTracksToAddSourceBuffers),this.pendingTracksToAddSourceBuffers=void 0)});t(this,"onSourceEnded",()=>{const{error:A}=this.mediaElement;if(A){const e=/AUDIO_RENDERER/.test(A.message)||!this.autoRecoverFromMediaErrors,s=ys(e,A);if(this.logger.error("MediaElement error",{error:s}),this.emitter.emit("error",s),!s.isFatal()){this.logger.info("Re-opening MediaSource"),this.emitter.emit("recovered from media error",{error:s,count:this.recoveredFromErrorCount}),this.recoveredFromErrorCount++;const g=!this.mediaElement.paused,I=[];this.trackContexts.forEach((n,o)=>{n.state==="initialized"&&I.push({type:o,mimeType:n.mimeType})}),this.sourceOpenStartTime=Date.now(),this.pendingTracksToAddSourceBuffers=I,this.mediaElement.src="",this.setTrackContexts(this.trackContexts),this.mediaSource.attach(this.mediaElement),g&&this.mediaElement.play()}}this.logger.debug("source ended")});this.logger=A,this.mediaElement=s,this.emitter=e}};t(pe,"create",(A,e,s)=>{const g=new pe(A,e,s);return g.setTrackContexts(),g.mediaSource.on("source ended",g.onSourceEnded),g.mediaSource.on("source open",g.onSourceOpen),g.mediaSource.attach(s),g});let rt=pe;const bi=(i,A)=>{var n;const e=i.renditionId!==A.renditionId,s=i.channelId!==A.channelId,g=((n=i.timestamp)!=null?n:0)>A.timestamp;let I=!1;return i.type==="video"&&A.type==="video"&&(I=A.width!==i.width||A.height!==i.height),s||e||g||I},GI=function(i){const A=i.reduce((g,I)=>g+I.byteLength,0),e=new Uint8Array(A);let s=0;return i.forEach(g=>{e.set(new Uint8Array(g),s),s+=g.byteLength}),e.buffer},UI=(i,A,e)=>m(this,null,function*(){for(i.isWorkingOnPendingSamples=!0;i.pendingSamples.length>0;){const s=[];let g=0;for(let o=0;o<i.pendingSamples.length;o++){g=o;const B=i.pendingSamples[o],C=i.pendingSamples[o+1];if(B&&(s.push(B),C&&bi(B,C))||o===e-1)break}const I=s[0];if(!I)break;const n=i.previousSample?bi(i.previousSample,I):!0;yield A(s,n),i.pendingSamples=i.pendingSamples.slice(g+1),i.previousSample=s[s.length-1]}i.isWorkingOnPendingSamples=!1}),ye=class ye{constructor(A,e){t(this,"logger");t(this,"emitter");t(this,"element");t(this,"pictureInPictureWindow");t(this,"unload",()=>{this.emitter.off("add picture in picture listener",this.onEnablePictureInPicture)});t(this,"onEnablePictureInPicture",A=>{this.element=A.element,A.element.addEventListener("leavepictureinpicture",()=>{this.pictureInPictureWindow=void 0,this.logger.debug("Leave picture in picture"),this.emitter.emit("exit picture in picture")}),A.element.addEventListener("enterpictureinpicture",e=>{this.pictureInPictureWindow=e.pictureInPictureWindow,this.logger.debug("Enter picture in picture"),this.emitter.emit("enter picture in picture",this)}),A.element.autopictureinpicture=!0});t(this,"getPictureInPictureSize",()=>this.pictureInPictureWindow);t(this,"isPictureInPictureActive",()=>this.isWebkitPresentationModeActive()||this.isStandardPictureInPictureActive());t(this,"isPictureInPictureSupported",()=>this.isWebkitPresentationModeSupported()||this.isStandardPictureInPictureSupported());t(this,"requestPictureInPicture",()=>(this.emitter.emit("ios-hack: reset size"),this.isStandardPictureInPictureSupported()?this.requestStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("picture-in-picture"):Promise.reject(new Error("Picture in picture is not supported"))));t(this,"exitPictureInPicture",()=>this.isStandardPictureInPictureSupported()?this.exitStandardPictureInPicture():this.isWebkitPresentationModeSupported()?this.requestWebkitPresentationMode("inline"):Promise.reject(new Error("Picture in picture is not supported")));t(this,"getStatistics",()=>({isPictureInPictureActive:this.isPictureInPictureActive()}));t(this,"requestStandardPictureInPicture",()=>m(this,null,function*(){return yield this.element.requestPictureInPicture()}));t(this,"exitStandardPictureInPicture",()=>m(this,null,function*(){return yield document.exitPictureInPicture()}));t(this,"isStandardPictureInPictureSupported",()=>!!this.element&&!!this.element.requestPictureInPicture&&!!document.pictureInPictureEnabled);t(this,"isStandardPictureInPictureActive",()=>!!this.element&&!!document.pictureInPictureElement);t(this,"isWebkitPresentationModeActive",()=>!!this.element&&this.element.webkitPresentationMode==="picture-in-picture");t(this,"requestWebkitPresentationMode",A=>m(this,null,function*(){return this.element.webkitSetPresentationMode(A),Promise.resolve()}));t(this,"isWebkitPresentationModeSupported",()=>!!this.element&&!!this.element.webkitSetPresentationMode);this.emitter=A,this.logger=e,this.emitter.on("add picture in picture listener",this.onEnablePictureInPicture)}};t(ye,"create",(A,e)=>new ye(A,e));let Et=ye;const Fe=class Fe{constructor(A,e,s,g){t(this,"emitter");t(this,"logger");t(this,"clockSource");t(this,"state","buffering");t(this,"bufferFullness",0);t(this,"targetBufferTime");t(this,"lastBufferStateEvent","drained");t(this,"firstFrameTime");t(this,"currentTimeIsInRange",!1);t(this,"needsInputForAudioCount",0);t(this,"needsInputForVideoCount",0);t(this,"unload",()=>{this.emitter.off("buffer state",this.onBufferedStateChanged),this.emitter.off("needs user input",this.onNeedsUserInput)});t(this,"setTargetBufferTime",A=>void(this.targetBufferTime=A));t(this,"getTargetBufferTime",()=>this.targetBufferTime);t(this,"getBufferFullness",()=>this.bufferFullness);t(this,"getLastBufferStateEvent",()=>this.lastBufferStateEvent);t(this,"getState",()=>this.state);t(this,"getFirstFrameTime",()=>this.firstFrameTime);t(this,"getStatistics",()=>({bufferTime:this.targetBufferTime,needsInputForAudioCount:this.needsInputForAudioCount,needsInputForVideoCount:this.needsInputForVideoCount}));t(this,"onBufferedStateChanged",({buffered:A,isPaused:e})=>{const s=this.clockSource.currentTime,g=A.some(a=>a.start<s&&s<a.end),I=A[A.length-1],n=I?I.end-I.start>=this.targetBufferTime:!1,o=I?Math.max(0,I.end-s)/this.targetBufferTime:0,B=e?"paused":g?"playing":"buffering",C=this.state;this.currentTimeIsInRange!==g&&!g?(this.lastBufferStateEvent="drained",this.emitter.emit("buffer state event",this.lastBufferStateEvent)):g&&n&&this.lastBufferStateEvent==="drained"&&(this.lastBufferStateEvent="filled",this.emitter.emit("buffer state event",this.lastBufferStateEvent)),B==="playing"&&!this.firstFrameTime&&(this.firstFrameTime=Date.now()),this.currentTimeIsInRange=g,this.state=B,this.bufferFullness=g?o:0,C!==B&&this.emitter.emit("playback state",B),this.emitter.emit("buffer fullness",this.bufferFullness)});t(this,"onNeedsUserInput",({forAudio:A,forVideo:e})=>{A&&this.needsInputForAudioCount++,e&&this.needsInputForVideoCount++});this.emitter=A,this.logger=e,this.clockSource=s,this.targetBufferTime=g,this.emitter.on("buffer state",this.onBufferedStateChanged),this.emitter.on("needs user input",this.onNeedsUserInput)}};t(Fe,"create",(A,e,s,g)=>new Fe(A,e,s,g));let ct=Fe;const ht=()=>({upgradesFromLevel:[],downgradesFromLevel:[],bufferingRanges:[],activeRanges:[],decodeRate:Number.MAX_SAFE_INTEGER}),bI=()=>({levels:{},levelDowngrades:[],levelUpgrades:[],bufferFullness:0,general:ht()}),Re=class Re{constructor(A,e){t(this,"minBufferFullnessLengthForRegression",6);t(this,"logger");t(this,"emitter");t(this,"timers",Z.create());t(this,"metrics",bI());t(this,"bufferFullness",new K(30));t(this,"bufferFullnessRegression");t(this,"currentLevel");t(this,"isSuspended",!1);t(this,"_fatalQosCount",0);t(this,"hasAsserted",!1);t(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)});t(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.suspend()});t(this,"suspend",()=>{this.isSuspended=!0,this.timers.unload(),this.stopBuffering(),this.unsetActive()});t(this,"unsuspend",()=>{this.isSuspended=!1,this.currentLevel&&this.setActive()});t(this,"fatalQosGraceTime",()=>1e4*(this.fatalQosCount+1));t(this,"incrementFatalQosCount",()=>{this._fatalQosCount++});t(this,"getMetrics",()=>this.metrics);t(this,"getLevelStats",A=>{var s,g,I,n;const e=((g=(s=A.video)==null?void 0:s.bitRate)!=null?g:0)+((n=(I=A.audio)==null?void 0:I.bitRate)!=null?n:0);return this.metrics.levels[e]});t(this,"getBufferFullnessRegression",()=>this.bufferFullnessRegression);t(this,"activeRatios",()=>{const A=new Map,e=FA(this.metrics.general.activeRanges);if(Object.entries(this.metrics.levels).forEach(([s,g])=>{A.set(s,e?FA(g.activeRanges)/e:0)}),!this.hasAsserted){const s=A.size?Math.abs(Array.from(A.values()).reduce((g,I)=>g+I,0)-1)<=.02:!0;s||(this.hasAsserted=!0,console.assert(s,`Active ratios should be close to 1 - actual: ${Array.from(A.values()).reduce((g,I)=>g+I,0)}`))}return A});t(this,"bufferingRatios",()=>{const A=new Map,e=FA(this.metrics.general.bufferingRanges);if(Object.entries(this.metrics.levels).forEach(([s,g])=>{A.set(s,e?FA(g.bufferingRanges)/e:0)}),!this.hasAsserted){const s=Array.from(A.values()).reduce((g,I)=>g+I,0)<=1;s||(this.hasAsserted=!0,console.assert(s,`Buffering ratios should be less than 1 - actual: ${Array.from(A.values()).reduce((g,I)=>g+I,0)}`))}return A});t(this,"bufferingEventsLast",A=>this.metrics.general.bufferingRanges.filter(e=>e.start>=Date.now()-A).length);t(this,"timeSpentBufferingLast",A=>Mt(this.metrics.general.bufferingRanges,A));t(this,"timeSpentActiveLast",A=>Mt(this.metrics.general.activeRanges,A));t(this,"timeSpentPlayingInAtLeastLevelRatio",A=>{var B,C,a,Q;const e=this.timeSpentBuffering(),s=this.timeActive(),g=this.bufferingRatios(),I=this.activeRatios(),n=((C=(B=A.video)==null?void 0:B.bitRate)!=null?C:0)+((Q=(a=A.audio)==null?void 0:a.bitRate)!=null?Q:0),o=e/s;return Object.keys(this.metrics.levels).map(r=>parseInt(r,10)).filter(r=>r>=n).reduce((r,h)=>{var l,f;return((l=I.get(h.toString()))!=null?l:0)-((f=g.get(h.toString()))!=null?f:0)*o+r},0)});t(this,"timeSpentBuffering",()=>FA(this.metrics.general.bufferingRanges));t(this,"timeActive",()=>FA(this.metrics.general.activeRanges));t(this,"getStatistics",()=>({timeSpentBuffering:this.timeSpentBuffering(),bufferingEventsCount:this.metrics.general.bufferingRanges.length,timeSpentRatio:[...this.activeRatios()].reduce((A,[e,s])=>(A[e]=s,A),{}),fatalQosCount:this.fatalQosCount}));t(this,"onRenditionLevelChanged",A=>{var I,n,o,B,C,a,Q,r,h,l,f,p,k,w;const e=((o=(n=(I=A.from)==null?void 0:I.video)==null?void 0:n.bitRate)!=null?o:0)+((a=(C=(B=A.from)==null?void 0:B.audio)==null?void 0:C.bitRate)!=null?a:0),s=((h=(r=(Q=A.to)==null?void 0:Q.video)==null?void 0:r.bitRate)!=null?h:0)+((p=(f=(l=A.to)==null?void 0:l.audio)==null?void 0:f.bitRate)!=null?p:0);this.logger.info("rendition level changed",{fromLevel:e,toLevel:s}),this.metrics.general.activeRanges.length===0&&this.setActive(),A.from&&A.to&&(e<s?this.metrics.general.upgradesFromLevel.push(Date.now()):this.metrics.general.downgradesFromLevel.push(Date.now()));let g=!1;if(A.from){const G=(k=this.metrics.levels[e])!=null?k:ht();e<s?G.upgradesFromLevel.push(Date.now()):G.downgradesFromLevel.push(Date.now()),mA(G.activeRanges);const Y=G.bufferingRanges[G.bufferingRanges.length-1];g=!!Y&&!Y.end,mA(G.bufferingRanges),this.metrics.levels[e]=G}if(A.to){const G=(w=this.metrics.levels[s])!=null?w:ht();yA(G.activeRanges),g&&yA(G.bufferingRanges),this.metrics.levels[s]=G,this.currentLevel=s}});t(this,"onBufferFullness",A=>{this.bufferFullness.push(A),this.metrics.bufferFullness=A,this.bufferFullness.items().length>=this.minBufferFullnessLengthForRegression&&(this.bufferFullnessRegression=this.calculateLinearRegression())});t(this,"onPlaybackState",A=>{switch(this.logger.info("Playback state",{state:A,currentLevel:this.currentLevel}),A){case"playing":this.stopBuffering();break;case"buffering":this.isSuspended||this.startBuffering();break}});t(this,"onVideoDecodeRate",A=>{var s;if(this.metrics.general.decodeRate=A,!this.currentLevel)return;const e=this.metrics.levels[(s=this.currentLevel)!=null?s:0];e&&(e.decodeRate=A)});t(this,"calculateLinearRegression",()=>ji(this.bufferFullness.items().map((A,e)=>({x:e,y:A}))));t(this,"stopBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&mA(A.bufferingRanges)}mA(this.metrics.general.bufferingRanges)});t(this,"startBuffering",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&yA(A.bufferingRanges)}yA(this.metrics.general.bufferingRanges)});t(this,"unsetActive",()=>{if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&mA(A.activeRanges)}mA(this.metrics.general.activeRanges)});this.logger=e,this.emitter=A}get fatalQosCount(){return this._fatalQosCount}setActive(){if(this.currentLevel){const A=this.metrics.levels[this.currentLevel];A&&yA(A.activeRanges)}yA(this.metrics.general.activeRanges)}};t(Re,"create",(A,e)=>new Re(A,e));let dt=Re;const ke=class ke{constructor(A,e){t(this,"renditions",new Map);t(this,"renditionLevels",[]);t(this,"languages",[]);t(this,"emitter");t(this,"subscriptionSource");t(this,"renditionLevelChangeCount",0);t(this,"unload",()=>{this.emitter.off("renditions",this.onRenditions),this.emitter.off("subscription changed",this.onSubscriptionChanged)});t(this,"getRenditionLevels",A=>A?this.createRenditionLevels(A):this.renditionLevels);t(this,"getRenditionLevel",A=>{var o;const e=A!=null?A:this.getCurrentSubscription(),s=A?this.createRenditionLevels(A):this.renditionLevels;if(!e.video)return s.length?s[0]:void 0;const g=e.video.bitRate||Number.MAX_SAFE_INTEGER,I=e.video.width||Number.MAX_SAFE_INTEGER,n=e.video.height||Number.MAX_SAFE_INTEGER;return(o=s.filter(B=>B.video&&e.video?B.video.bitRate<=g&&B.video.width<=I&&B.video.height<=n:!0).pop())!=null?o:s[0]});t(this,"setRenditions",(A,e)=>{this.renditions.set(A,e)});t(this,"getLanguages",()=>this.languages);t(this,"getVideoRendition",(A,e=this.getCurrentSubscription().channelId)=>{const s=this.getRendition(A,e);if(s&&RA(s))return s});t(this,"getAudioRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(g=>kA(g))});t(this,"getVideoRenditions",A=>{const e=this.renditions.get(A);return e==null?void 0:e.filter(g=>RA(g))});t(this,"getAudioRendition",(A,e=this.getCurrentSubscription().channelId)=>{const s=this.getRendition(A,e);if(s&&kA(s))return s});t(this,"getRendition",(A,e=this.getCurrentSubscription().channelId)=>{var s;return(s=this.renditions.get(e))==null?void 0:s.find(g=>g.id===A)});t(this,"getStatistics",()=>{var e,s,g,I,n,o,B,C,a,Q;const A=this.getRenditionLevel();return{videoCodec:(e=A==null?void 0:A.video)==null?void 0:e.codec,audioCodec:(s=A==null?void 0:A.audio)==null?void 0:s.codec,videoRenditionId:(g=A==null?void 0:A.video)==null?void 0:g.id,audioRenditionId:(I=A==null?void 0:A.audio)==null?void 0:I.id,videoWidth:(n=A==null?void 0:A.video)==null?void 0:n.width,videoHeight:(o=A==null?void 0:A.video)==null?void 0:o.height,expectedVideoBitRate:(B=A==null?void 0:A.video)==null?void 0:B.bitRate,expectedAudioBitRate:(C=A==null?void 0:A.audio)==null?void 0:C.bitRate,frameRate:(a=A==null?void 0:A.video)==null?void 0:a.frameRate,language:(Q=A==null?void 0:A.audio)==null?void 0:Q.language,renditionLevelChangeCount:this.renditionLevelChangeCount}});t(this,"onRenditions",A=>{const e=this.subscriptionSource.getCurrentSubscription();this.renditions.set(A.channelId,A.renditions),this.updateRenditionLevels({to:e,from:e})});t(this,"onSubscriptionChanged",A=>{this.updateRenditionLevels(A)});t(this,"updateRenditionLevels",({to:A,from:e})=>{var C;const{channelId:s,initiator:g}=A,I=this.getRenditionLevel(e),n=new Set;((C=this.renditions.get(s))!=null?C:[]).forEach(a=>a.language?n.add(a.language):void 0),this.languages=Array.from(n),this.renditionLevels=this.createRenditionLevels(A);const B=this.getRenditionLevel(A);uA(I,B)||(this.renditionLevelChangeCount++,this.emitter.emit("rendition level changed",{to:B,from:I,reason:g?"manual":"abr"}))});t(this,"createRenditionLevels",A=>{var a;const{video:e,audio:s,channelId:g}=A,I=(a=this.renditions.get(g))!=null?a:[],n=I.filter(RA).filter(Q=>e&&Q.codec===e.codec),o=I.filter(kA).filter(Q=>s&&Q.codec===s.codec&&Q.language===s.language),B=Math.max(n.length,o.length),C=[];for(let Q=0;Q<B;Q++){const r=n[Math.min(n.length-1,Q)],h=o[Math.min(o.length-1,Q)];C.push({audio:h,video:r})}return C});t(this,"getCurrentSubscription",()=>this.subscriptionSource.getCurrentSubscription());this.subscriptionSource=e,this.emitter=A,this.emitter.on("renditions",this.onRenditions),this.emitter.on("subscription changed",this.onSubscriptionChanged)}};t(ke,"create",(A,e)=>new ke(A,e));let lt=ke;const vi=i=>JSON.parse(JSON.stringify(i)),Ge=class Ge{constructor(A,e,s){t(this,"logger");t(this,"timers",new Z);t(this,"emitter");t(this,"targetSubscription");t(this,"currentSubscription");t(this,"_isSwitchingSubscription",!1);t(this,"pendingSubscriptionTimeoutId");t(this,"burstMs",0);t(this,"unload",()=>{this.logger.debug("Unloading module..."),this.timers.unload(),this.emitter.off("subscription changed",this.onSubscriptionChanged),this.logger.debug("Unloaded module")});t(this,"isSwitchingSubscription",()=>this._isSwitchingSubscription);t(this,"getTargetSubscription",()=>this.targetSubscription);t(this,"getCurrentSubscription",()=>this.currentSubscription);t(this,"enableBurst",A=>{this.burstMs=A});t(this,"setSize",A=>{this.targetSubscription.video.width=A.width,this.targetSubscription.video.height=A.height,this.scheduleSubscriptionChange()});t(this,"setVideoConstraint",A=>{this.targetSubscription.video=A,this.scheduleSubscriptionChange()});t(this,"setAudioConstraint",A=>{this.targetSubscription.audio=A,this.scheduleSubscriptionChange()});t(this,"setVideoBitRate",A=>{this.targetSubscription.video.bitRate=A,this.scheduleSubscriptionChange()});t(this,"setAudioBitRate",A=>{this.targetSubscription.audio.bitRate=A,this.scheduleSubscriptionChange()});t(this,"setChannelId",A=>{this.targetSubscription.channelId=A,this.scheduleSubscriptionChange()});t(this,"setLanguage",A=>{this.targetSubscription.audio.language=A,this.scheduleSubscriptionChange()});t(this,"setVideoCodec",A=>{this.targetSubscription.video.codec=A,this.scheduleSubscriptionChange()});t(this,"setAudioCodec",A=>{this.targetSubscription.audio.codec=A,this.scheduleSubscriptionChange()});t(this,"setBurst",A=>{A?this.targetSubscription.burstMs=A:delete this.targetSubscription.burstMs});t(this,"isNewSubscription",()=>{const A=["burstMs","meta","initiator","channelGroupId"];return!uA(Ht(this.currentSubscription,A),Ht(this.targetSubscription,A))});t(this,"onSubscriptionChanged",({to:A})=>{this.logger.debug("onSubscriptionChanged",{to:A}),this.currentSubscription=c({},A),this._isSwitchingSubscription=this.isNewSubscription()});t(this,"scheduleSubscriptionChange",()=>{this.targetSubscription=vi(this.targetSubscription),this._isSwitchingSubscription=this.isNewSubscription();const A=this.currentSubscription.channelId!==this.targetSubscription.channelId;this._isSwitchingSubscription&&(A&&this.burstMs?this.setBurst(this.burstMs):this.setBurst(0),this.pendingSubscriptionTimeoutId&&(this.timers.clearTimeout(this.pendingSubscriptionTimeoutId),this.pendingSubscriptionTimeoutId=void 0),this.pendingSubscriptionTimeoutId=this.timers.setTimeout(()=>this.emitter.emit("send signal",JSON.stringify({type:"subscribe",subscription:this.getTargetSubscription()})),0))});this.logger=A,this.targetSubscription=e,this.currentSubscription=vi(e),this.emitter=s,this.emitter.on("subscription changed",this.onSubscriptionChanged)}};t(Ge,"create",(A,e,s)=>new Ge(A,s,e));let ut=Ge;const vI=5e3,JI=()=>Lt()||$A()||is(),Ji=()=>JI()?100:0,Li=i=>A=>A>i,Ue=class Ue{constructor(A,e,s,g,I){t(this,"emitter");t(this,"logger");t(this,"playbackSource");t(this,"bufferSource");t(this,"keyframeTimestamps",new K(10));t(this,"lastSeekTime",Date.now());t(this,"seekCooldownTime",1e3);t(this,"seekTimeoutTime",5e3);t(this,"seekKeyframeOvershoot",50);t(this,"syncMaxBehind");t(this,"syncMaxBehindMultiplierStep",1);t(this,"syncMaxBehindIncreaseEvery",2);t(this,"syncMaxBehindMaximumAllowed",2e3);t(this,"syncMaxBehindMultiplier",1);t(this,"timeshiftOnAudio",!1);t(this,"syncMaxAhead",150);t(this,"timeshiftSync",{enabled:!1,maxBehind:50,multiplier:1,maxBehindAllowed:600,overshoot:Ji(),minOvershootAllowed:Ji(),maxOvershootAllowed:500});t(this,"maxTimeSyncDifferenceTolerance",150);t(this,"timers",Z.create());t(this,"rtt",0);t(this,"channelSyncInfo",new Map);t(this,"driftAdjustmentsCount",0);t(this,"timeshiftDriftAdjustmentCount",0);t(this,"driftAdjustments",[]);t(this,"timeShiftAdjustments",[]);t(this,"timestampOffset");t(this,"currentChannelId");t(this,"highestSeenTimestamps",new Map);t(this,"isSuspended",!1);t(this,"isSyncAdjustmentActivated",!1);t(this,"load",()=>{this.timers.setInterval(this.onSync,100)});t(this,"unload",()=>{this.logger.debug("Unloading module..."),this.emitter.off("rtt",this.updateRtt),this.timers.unload(),this.logger.debug("Unloaded module")});t(this,"suspend",()=>{this.isSuspended=!0});t(this,"unsuspend",()=>{this.resetSyncState(),this.isSuspended=!1});t(this,"deactivateSyncAdjustments",()=>{this.isSyncAdjustmentActivated=!1});t(this,"activateSyncAdjustments",()=>{this.tryApplySyncInfo(0),this.lastSeekTime=Date.now(),this.isSyncAdjustmentActivated=!0});t(this,"reset",()=>{this.logger.info("Reset sync state"),this.currentChannelId=void 0,this.timestampOffset=void 0,this.resetSyncState(),this.highestSeenTimestamps.clear()});t(this,"getTimeshiftOffset",()=>{var A;return(A=this.timestampOffset)!=null?A:0});t(this,"getCurrentChannelId",()=>this.currentChannelId);t(this,"resetSyncState",()=>{this.timeshiftSync.multiplier=1,this.syncMaxBehindMultiplier=1,this.driftAdjustments=[],this.timeShiftAdjustments=[]});t(this,"getLiveEdgeTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const s=Date.now()-e.localTimestamp;return e.timestamp+s});t(this,"getLiveEdgeTimeLatencyAdjusted",A=>{const e=this.getLiveEdgeTime(A);if(e)return e+this.rtt/2});t(this,"getWallclockTime",A=>{const e=this.channelSyncInfo.get(A);if(!e)return;const s=Date.now()-e.localTimestamp;return e.wallclockTime+s});t(this,"getWallclockTimeLatencyAdjusted",A=>{const e=this.getWallclockTime(A);if(e)return e+this.rtt/2});t(this,"processSample",A=>{var g;if(!A.channelId)throw new Error("Sample must be assigned to a channel");this.currentChannelId||(this.currentChannelId=A.channelId),this.timestampOffset||(this.timestampOffset=A.timestamp/A.timescale*1e3-vI);const e=A.type==="video"&&A.isSync;if(this.currentChannelId!==A.channelId){let I=Number.MAX_SAFE_INTEGER;console.assert(this.highestSeenTimestamps.size!==0,"no known timestamps"),this.highestSeenTimestamps.forEach(o=>{I=Math.min(I,o)});const n=A.timestamp/A.timescale*1e3;this.currentChannelId=A.channelId,this.timestampOffset=n-I}else(e||this.timeshiftOnAudio)&&this.tryTimeshiftSync();const s=this.timestampOffset*A.timescale/1e3;return A.timestamp-=s,e&&this.keyframeTimestamps.push(A.timestamp/A.timescale*1e3),this.highestSeenTimestamps.set(A.type,Math.max((g=this.highestSeenTimestamps.get(A.type))!=null?g:0,A.timestamp/A.timescale*1e3)),A});t(this,"getStatistics",()=>({drift:this.drift,driftAdjustmentCount:this.driftAdjustmentsCount,timeshiftDriftAdjustmentCount:this.timeshiftDriftAdjustmentCount,seekTime:this.playbackSource.seekTime}));t(this,"updateRtt",A=>void(this.rtt=A));t(this,"isPlaybackSourceReadyToSeek",()=>!this.isSeeking()&&this.isSeekCooldownExpired()&&this.isSyncAdjustmentActivated);t(this,"isSeeking",()=>this.playbackSource.isSeeking?!this.isSeekTimeoutExpired():!1);t(this,"isAllowedToSync",()=>this.isPlaybackSourceReadyToSeek()&&!!this.currentChannelId&&!this.isSuspended&&!this.playbackSource.isPaused);t(this,"isSeekCooldownExpired",()=>Date.now()-this.lastSeekTime>this.seekCooldownTime);t(this,"isSeekTimeoutExpired",()=>Date.now()-this.lastSeekTime>this.seekTimeoutTime);t(this,"currentTimeshiftMaxBehind",()=>Math.min(this.timeshiftSync.maxBehind*this.timeshiftSync.multiplier,this.timeshiftSync.maxBehindAllowed));t(this,"currentSyncMaxBehind",()=>Math.min(this.syncMaxBehindMultiplier*this.syncMaxBehind,this.syncMaxBehindMaximumAllowed));t(this,"currentSyncMaxAhead",()=>this.playbackSource.seekTime>500?Math.max(this.syncMaxAhead*this.syncMaxBehindMultiplier,300):this.syncMaxAhead);t(this,"tryTimeshiftSync",()=>{var I;if(!this.timeshiftSync.enabled||!this.isAllowedToSync())return;const A=(I=this.drift)!=null?I:0;if(A>=this.syncMaxBehind)return;if(A<this.currentTimeshiftMaxBehind()){this.timeshiftSync.overshoot=0;return}if(!this.timestampOffset)return;const e=Date.now()-this.seekTimeoutTime*this.timeshiftSync.multiplier,s=this.timeShiftAdjustments.filter(Li(e)).length;if(s&&this.timeshiftSync.multiplier>2)return this.logger.debug("Too many diff timeShifts within sliding window",{timeShiftsCooldownMs:e,timeShiftsWithinCooldownTime:s}),!1;const g=A+this.timeshiftSync.overshoot;this.logger.info("Adjusting for drift using timeshift",{drift:A,syncAmount:g,currentTime:this.playbackSource.currentTime,rtt:this.rtt,overshoot:this.timeshiftSync.overshoot}),this.timestampOffset+=g,this.lastSeekTime=Date.now(),!this.playbackSource.isPaused&&(this.timeShiftAdjustments.push(this.lastSeekTime),this.timeshiftDriftAdjustmentCount++,this.timeshiftSync.multiplier++,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,Math.min(this.timeshiftSync.multiplier*A/2,this.timeshiftSync.maxOvershootAllowed)))});t(this,"onSync",()=>{var o;if(!this.isAllowedToSync())return;const A=(o=this.drift)!=null?o:0;if(A<0&&-A<this.currentSyncMaxAhead()||A>0&&A<this.currentSyncMaxBehind()||Math.abs(A)<1||!this.isSeekCooldownExpired())return;const e=Date.now()-this.seekTimeoutTime*this.syncMaxBehindMultiplier,s=this.driftAdjustments.filter(Li(e)).length;if(s&&this.syncMaxBehindMultiplier>2)return this.logger.debug("Too many diff adjustments within sliding window",{adjustmentsCooldownMs:e,adjustmentsWithinCooldownTime:s}),!1;const g=this.playbackSource.seekTime,I=this.playbackSource.currentTime+A,n=this.findKeyframeCloseToTimestamp(I);if(n||this.keyframeTimestamps.isEmpty()){const B=n?n+this.seekKeyframeOvershoot:I;if(this.logger.info("Adjusting for drift using seek",{drift:A,currentTime:this.playbackSource.currentTime,targetCurrentTime:B,seekTime:g,rtt:this.rtt}),this.lastSeekTime=Date.now(),this.driftAdjustments.push(this.lastSeekTime),this.driftAdjustmentsCount++,this.playbackSource.currentTime=B+g,this.timeshiftSync.overshoot=Math.max(this.timeshiftSync.minOvershootAllowed,this.timeshiftSync.overshoot/2),this.driftAdjustmentsCount%this.syncMaxBehindIncreaseEvery===0&&!this.playbackSource.isPaused){const C=this.currentSyncMaxBehind;this.syncMaxBehindMultiplier+=this.syncMaxBehindMultiplierStep,C!==this.currentSyncMaxBehind&&this.logger.info("Increasing max drift behind allowed",{from:C,to:this.currentSyncMaxBehind})}}});t(this,"findKeyframeCloseToTimestamp",A=>{const e=this.keyframeTimestamps.items();for(const s of e)if(s>=A&&s<=A+200)return s});this.logger=e,this.emitter=A,this.playbackSource=s,this.bufferSource=g,this.timeshiftSync.enabled=I,this.syncMaxBehind=this.timeshiftSync.enabled?1e3:200,this.emitter.on("rtt",this.updateRtt)}updateChannelSyncInfo(A,e){const s=Date.now(),g=this.channelSyncInfo.get(A),I=this.getLiveEdgeTime(A);if(this.isSuspended)return;if(!g||!I){this.logger.info("Initial timing info",{syncInfo:e}),this.channelSyncInfo.set(A,L(c({},e),{localTimestamp:s,timeDifferences:new K(12)}));return}const n=e.wallclockTime-g.wallclockTime,o=e.timestamp-g.timestamp,B=s-g.localTimestamp,C=o-B;if(g.timeDifferences.push(C),this.logger.debug("Timing info",{rtt:this.rtt,channelId:A,syncInfo:e,localTimestamp:s,diffFromEstimated:C,timestampDelta:o,wallclockDelta:n,localWallclockDelta:B}),Math.abs(C)>=this.bufferSource.getTargetBufferTime()*2){this.logger.info("Resetting sync info",{diffFromEstimated:C}),this.channelSyncInfo.set(A,L(c({},e),{localTimestamp:s,timeDifferences:new K(g.timeDifferences.maxSize+1)})),this.currentChannelId&&this.currentChannelId===A&&(this.reset(),this.emitter.emit("channel reset"));return}g.timeDifferences.isFull()&&this.tryApplySyncInfo(this.maxTimeSyncDifferenceTolerance)}tryApplySyncInfo(A){const e=this.getCurrentChannelId();if(!e)return;const s=this.channelSyncInfo.get(e);if(!s)return;const g=j(s.timeDifferences.items());Math.abs(g)>A&&(this.logger.info("Adjusting sync info",{averageDifference:g}),s.timestamp+=g,s.timeDifferences.clear())}get serverCurrentTime(){return this.channelCurrentTime-this.getTimeshiftOffset()}get channelCurrentTime(){const A=this.getCurrentChannelId();if(!A)return 0;const e=this.getLiveEdgeTime(A);return e?e-this.bufferSource.getTargetBufferTime():0}get drift(){return this.serverCurrentTime-this.playbackSource.currentTime}};t(Ue,"create",(A,e,s,g,I)=>new Ue(A,e,s,g,I));let mt=Ue;const LI={enabled:!0,interval:3e4,includeErrors:!0,includeEvents:!0,includeStats:!0,maxRetries:10,maxErrorReports:50,maxEvents:50},wt=(i,A)=>L(c({},A),{type:i,timestamp:new Date().toISOString(),discriminator:"web"}),be=class be{constructor(A,e,s,g){t(this,"logger");t(this,"timers",new Z);t(this,"emitter");t(this,"options");t(this,"parentContext");t(this,"unsentLines",new K(100));t(this,"retries",0);t(this,"errorCount",0);t(this,"eventCount",0);t(this,"statsCount",0);t(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.addStats({isFinal:!0,initiator:"unload"}),this.send("beacon"),this.logger.debug("Unloaded module")});t(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.timers.setInterval(()=>{this.addStats(),this.send("fetch")},this.options.interval)});t(this,"addStats",({isFinal:A,initiator:e}={isFinal:!1,initiator:"interval"},s={})=>{if(!this.options.includeStats)return;const g=this.parentContext.getStatistics(),I=wt("stats",L(c(c({},s),g),{isFinal:A,initiator:e,count:this.statsCount++}));this.unsentLines.push(I)});t(this,"addEvent",A=>{if(!this.options.includeEvents||this.eventCount>this.options.maxEvents)return;const e=this.parentContext.getStatistics(),s=wt("event",c(c({},e),A));this.eventCount++,this.unsentLines.push(s)});t(this,"getStatistics",()=>({errorCount:this.errorCount}));t(this,"send",A=>m(this,null,function*(){if(this.options.enabled&&!(this.retries>=this.options.maxRetries)&&!this.unsentLines.isEmpty()){this.logger.debug("Sending telemetry",{lines:this.unsentLines.items()});try{const e=this.unsentLines.items().map(s=>JSON.stringify(s)).reverse().join(`
27
+ `);switch(A){case"beacon":navigator.sendBeacon(this.options.url,e);break;case"fetch":default:this.parentContext.connectionState==="connected"?this.emitter.emit("send signal",JSON.stringify({type:"telemetry",body:e})):yield cs(new URL(this.options.url),{body:e,headers:{"Content-Type":"text/plain"}});break}this.retries=0,this.unsentLines.clear()}catch(e){this.retries++}}}));t(this,"onVisibilityChange",A=>{A==="hidden"&&(this.addStats({isFinal:!0,initiator:"visibilitychange"}),this.send("beacon"))});t(this,"onPageHide",A=>{this.addStats({isFinal:!0,initiator:"pagehide"},{persisted:A.persisted}),this.send("beacon")});t(this,"onRejection",A=>this.addError(A.reason));t(this,"onError",A=>this.addError(A.error));t(this,"addError",A=>{const{includeErrors:e,maxErrorReports:s}=this.options;if(e&&A instanceof y){if(this.errorCount++,this.errorCount>s)return;const g=this.parentContext.getStatistics();this.unsentLines.push(wt("error",c(c({},g),A.toStringifiable())))}});this.logger=A,this.emitter=e,this.options=c(c({},LI),s),this.parentContext=g}};t(be,"create",(A,e,s,g)=>new be(A,e,s,g));let Ce=be;const ve=class ve{constructor(A,e,s){t(this,"logger");t(this,"element");t(this,"documentState");t(this,"timers",new Z);t(this,"unload",()=>{this.timers.unload()});t(this,"unpause",()=>{this.element.userHasProvidedInput&&this.element.isPaused&&this.documentState.isVisible&&this.documentState.isOnline&&(this.logger.debug("Unpause video"),this.element.play().catch(gA))});this.logger=A,this.element=e,this.documentState=s,this.timers.setInterval(this.unpause,100)}};t(ve,"create",(A,e,s)=>new ve(A,e,s));let ae=ve;const NI=6,HI=i=>{let A=[i],e=0,s=0,g=!1;const I=(o,B)=>{var p,k,w;o.flags&&KA(o.flags)&&(e=(p=o.compositionTimeOffset)!=null?p:0),o.timestamp+=e,o.compositionTimeOffset=((k=o.compositionTimeOffset)!=null?k:0)-e;const C=o.timestamp/o.timescale,Q=B.flags&&KA(B.flags)?(w=B.compositionTimeOffset)!=null?w:0:e,h=(B.timestamp+Q)/B.timescale,l=Math.max(0,Math.round((h-C)*o.timescale));return l>0&&(s=l),L(c({},o),{duration:l>0?l:s})};return(o,B=!1)=>{if(o.flags&&KA(o.flags)&&B&&(g=!g),!(B&&A.length<NI&&g)&&A.length>0){g=!1;let a=o;for(let r=A.length-1;r>0;r--){const h=A[r];if(!h||!a)break;h.timestamp>=a.timestamp?A.splice(r,1):a=h}const Q=A.map((r,h)=>I(r,A[h+1]||o));return A=[o],Q}return A.push(o),[]}},MI=(i,A)=>{if(!i)return;const e=new URL("/subscribe",i);return e.searchParams.append("channelId",A.channelId),e.searchParams.append("sessionId",A.sessionId),e.searchParams.append("clientId",A.clientId),A.audio&&A.audio.codec&&(e.searchParams.append("audio.bitRate",Math.round(A.audio.bitRate).toString()),e.searchParams.append("audio.codec",A.audio.codec),A.audio.language&&e.searchParams.append("audio.language",A.audio.language)),A.video&&A.video.codec&&(e.searchParams.append("video.width",A.video.width.toString()),e.searchParams.append("video.height",A.video.height.toString()),e.searchParams.append("video.bitRate",Math.round(A.video.bitRate).toString()),e.searchParams.append("video.codec",A.video.codec)),A.expectAdditionalConnection&&e.searchParams.append("expectAdditionalConnection",A.expectAdditionalConnection.toString()),A.burstMs&&e.searchParams.append("burstMs",A.burstMs.toString()),A.channelGroupId&&e.searchParams.append("channelGroupId",A.channelGroupId),A.authToken&&(e.searchParams.append("auth.token",A.authToken),e.searchParams.append("auth.type","jwt")),e.toString()},PI=(i,A,e)=>RA(A)?c(L(c({},i),{type:"video",codec:A.codec,isSync:KA(i.flags),data:i.payload,duration:0,width:A.width,height:A.height}),e):L(c({},i),{type:"audio",channels:A.channels,sampleRate:A.sampleRate,codec:A.codec,language:A.language,isSync:KA(i.flags),data:i.payload,duration:0});class TI{constructor(){t(this,"highEntropyValues");var A;(A=self.navigator.userAgentData)==null||A.getHighEntropyValues(["architecture","model","platformVersion","fullVersionList"]).then(e=>{this.highEntropyValues=e})}getUserAgentInformation(){var I,n,o,B,C,a;const A=window.location.origin,s=!A||A=="null"?"":`${window.location.pathname}${window.location.search}`.substring(0,1e3),g={locationOrigin:window.location.origin,locationPath:s,ancestorOrigins:((I=window.location.ancestorOrigins)==null?void 0:I.length)>0?Array.from(window.location.ancestorOrigins):void 0,hardwareConcurrency:navigator.hardwareConcurrency,deviceMemory:navigator.deviceMemory};if(self.navigator.userAgentData&&this.highEntropyValues){const Q="1",r=[...(n=this.highEntropyValues.brands)!=null?n:[]];r.sort((w,G)=>w.brand.localeCompare(G.brand));const h=[...(o=this.highEntropyValues.fullVersionList)!=null?o:[]];h.sort((w,G)=>w.brand.localeCompare(G.brand));const l=h.map(w=>w.version),f=r.map(w=>w.brand),p=r.map(w=>w.version),k=parseInt((C=(B=this.highEntropyValues.platformVersion)==null?void 0:B.split(".")[0])!=null?C:Q);return c({userAgentLegacy:window.navigator.userAgent,ua:{browser:{brands:f,fullVersionBrands:l,majorVersions:p},device:this.highEntropyValues.model||"Other",os:{family:this.highEntropyValues.platform||"Other",version:(a=this.highEntropyValues.platformVersion)!=null?a:Q,major_version:Number.isFinite(k)?k:0}}},g)}else return c({userAgent:window.navigator.userAgent},g)}}const Ni=(i,A)=>i&&typeof i=="object"&&A in i,Hi=i=>!(typeof i!="object"||!Ni(i,"channelId")||typeof i.channelId!="string"||!Ni(i,"url")||typeof i.url!="string"||i.channelId.length===0||i.url.length===0),qI=i=>{if(!Hi(i))throw new y("Invalid options",{isFatal:!0,code:"invalid_options"});const A=c({},i);return Object.keys(A).forEach(e=>{const s=A;typeof s[e]=="undefined"&&delete s[e]}),A},KI=i=>{if(typeof i!="object"||i===null)throw new Error("not an object");if(!("video"in i))throw new Error("missing video in subscription");if(!("audio"in i))throw new Error("missing audio in subscription");if(!("channelId"in i))throw new Error("missing channelId");return!0},iA=class iA extends AA{constructor(e){super();t(this,"pictureInPicture");t(this,"browser",Le());t(this,"options");t(this,"element");t(this,"playbackSource");t(this,"emitter",new AA);t(this,"logger");t(this,"modules");t(this,"clientIp");t(this,"sessionId");t(this,"clientId",Pt());t(this,"_channels",[]);t(this,"createdAt",Date.now());t(this,"hasCalledConnect",!1);t(this,"apiClient");t(this,"latestEmittedLanguages",[]);t(this,"wakeLock");t(this,"cachedEdges",[]);t(this,"shiftedEdges",[]);t(this,"pool",new _A(iA.MAX_POOL_SIZE));t(this,"userAgentInformation",new TI);t(this,"sampleProcessingSesssions",new Map);t(this,"sizes",new Map);t(this,"isSuspended",!0);t(this,"disconnectTimeout");t(this,"attach",e=>{var s;(s=this.wakeLock)==null||s.attach(e),e.appendChild(this.element)});t(this,"getOptions",()=>this.options.getOptions());t(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;const s=this.options.get("authenticationToken"),g=s?`&auth.token=${s}`:"";return`${e}/api/thumbnail?channelId=${this.options.get("channelId")}${g}`});t(this,"updateAuthenticationToken",e=>{this.logger.debug("Got new auth token",{token:e}),this.options.set("authenticationToken",e),this.emitter.emit("send signal",JSON.stringify({type:"refresh auth",token:e}))});t(this,"connect",()=>{this.hasCalledConnect||(this.play(),this._connect())});t(this,"_connect",()=>{var e,s;this.hasCalledConnect||(this.hasCalledConnect=!0,Object.values(this.modules).forEach(g=>{g&&"load"in g&&g.load()}),this.unsuspend(),this.playbackSource instanceof We&&((s=(e=this.playbackSource).load)==null||s.call(e)),this.modules.connection.connect(this.options.get("media")==="audio+video"?2:1))});t(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")}));t(this,"connectionInfo",()=>m(this,null,function*(){try{return yield this.apiClient.connect(this.options.getOptions())}catch(e){if(Es(e))switch(e.status){case 401:throw this.emitter.emit("error",ee(e)),ee(e);case 403:throw this.emitter.emit("error",gi(e.message)),gi(e.message)}throw this.emitter.emit("error",vs(e instanceof Error?e:void 0)),e}}));t(this,"estimateRTT",()=>m(this,null,function*(){const e=Date.now(),s=()=>Date.now()-e;return Promise.race([Tt(iA.PING_TIMEOUT),fetch(new URL("/api/v2/connect/ping",this.options.get("url")).toString(),{method:"HEAD"})]).then(s,s)}));t(this,"connectHandler",()=>m(this,null,function*(){var k;this.sessionId=Pt();const e=this.modules.subscription.getTargetSubscription(),[s,g]=yield Promise.all([this.connectionInfo(),this.estimateRTT()]),I=g/2,n=ze(I),o=s.channels.find(w=>w.channelId===e.channelId);if(this.emitter.emit("connect info",s),this._channels=s.channels,yield Promise.all(s.channels.map(w=>m(this,null,function*(){w.overrides&&this.options.addOverrides(w.channelId,w.overrides),w.renditions=yield this.filterRenditions(w.renditions),this.modules.renditions.setRenditions(w.channelId,w.renditions)}))),!o)throw si("external");const B=this.options.getOverride("sizeBasedResolutionCapEnabled",this.channelId);B!==void 0&&(this.modules.constraintCap.sizeBasedResolutionCapEnabled=B);const C=this.options.getOverride("separateVideoSocketEnabled",this.channelId);C!==void 0&&this.options.get("media")==="audio+video"&&this.modules.connection.setConnectionCount(C?2:1);const a=this.options.getOverride("minBufferTime",this.channelId),Q=this.options.getOverride("maxBufferTime",this.channelId);if((a||Q)&&(this.modules.bufferTime.updateConfig({minBufferTime:this.options.get("minBufferTime",this.channelId),maxBufferTime:this.options.get("maxBufferTime",this.channelId)}),this.targetBufferTime=this.options.get("minBufferTime",this.channelId)),this.options.get("burstEnabled",this.channelId)&&this.modules.subscription.enableBurst(this.targetBufferTime),this.emit("is live",o.isLive),!o.isLive)throw new Error("Waiting for channel to go live");this.patchSubscription(o,n),yield this.initializeDecodingModule(),this.resetModules(),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emit("channels",this.channels),this.emitLanguagesIfChanged(),this.sampleProcessingSesssions.clear(),this.cachedEdges=this.cachedEdges.length===0?s.edges:this.cachedEdges;const h=(this.options.get("edgeUrl")?[this.options.get("edgeUrl")]:[this.cachedEdges.shift()])[0],l=this.options.get("burstEnabled",this.channelId),f=MI(h,{video:this.targetSubscription.video,audio:this.targetSubscription.audio,burstMs:l?this.targetBufferTime:void 0,sessionId:this.sessionId,clientId:this.clientId,channelId:this.channelId,channelGroupId:this.options.get("channelGroupId"),expectAdditionalConnection:this.modules.connection.getConnectionCount()>1,authToken:this.options.get("authenticationToken")});if(!f||!h)throw new y("Failed to resolve edge url",{isFatal:!0,code:"failed_to_resolve_edge_url"});const p=this.shiftedEdges[this.shiftedEdges.length-1];return p&&((k=this.modules.telemetry)==null||k.addEvent({code:"shifted_edge",edgeUrl:p})),this.shiftedEdges.push(h),this.logger.debug("resolved edge url",{edgeUrl:f}),Promise.resolve(f)}));t(this,"emitLanguagesIfChanged",()=>{const e=this.modules.renditions.getLanguages(),s=this.latestEmittedLanguages;e.length==s.length&&e.every(I=>s.includes(I))||(this.logger.debug("Emitting new languages",{currentLanguages:e}),this.latestEmittedLanguages=e,this.emit("languages",this.latestEmittedLanguages))});t(this,"filterRenditions",e=>m(this,null,function*(){const s=yield Promise.all(e.map(o=>m(this,null,function*(){var a,Q,r;if(kA(o))return!0;if(!this.isSupportedVideoCodecProfile(o.codec,o.codecString))return!1;if(!this.willUseMediaSource()){const h=this.options.get("advanced"),l=(a=h.wasmDecodingConstraint.bitRate)!=null?a:Number.MAX_SAFE_INTEGER,f=(Q=h.wasmDecodingConstraint.width)!=null?Q:Number.MAX_SAFE_INTEGER,p=(r=h.wasmDecodingConstraint.height)!=null?r:Number.MAX_SAFE_INTEGER;return o.bitRate<=l&&o.width<=f&&o.height<=p}const B=yield BI(o);if(!B.supported||o.codec=="av1"&&!B.smooth&&!B.powerEfficient)return!1;const C=this.options.getOverride("maxVideoBitRate",this.channelId);return C?C>=o.bitRate:!0})));let g=e.filter((o,B)=>s[B]);const I=g.filter(o=>o.codec==="h264").reverse()[0],n=g.filter(o=>o.codec==="av1").reverse()[0];return I&&n&&I.width>n.width&&I.height>n.height&&(g=g.filter(o=>o.codec!=="av1")),g}));t(this,"patchSubscription",(e,s)=>{const g=Math.min(this.options.get("maxVideoBitRate"),iA.INITIAL_MAX_BIT_RATE,s,this.targetSubscription.video.bitRate),I=Math.min(this.options.get("maxAudioBitRate"),iA.INITIAL_MAX_BIT_RATE,s,this.targetSubscription.audio.bitRate),n=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs",this.channelId),o=this.supportedAudioCodecs(),B=e.renditions.filter(kA),C=e.renditions.filter(RA),a=o.find(l=>B.find(f=>f.codec===l)!==void 0),Q=n.find(l=>C.find(f=>f.codec===l)!==void 0),r=B.map(l=>l.language);if(this.logger.debug("supported and selected codecs",{audioCodecs:o,videoCodecs:n,audioCodec:a,videoCodec:Q}),Q){const l=this.options.get("maxSize");this.modules.subscription.setVideoConstraint(c({codec:Q,bitRate:this.abrEnabled?g:this.options.get("maxVideoBitRate")},l))}a&&(this.modules.subscription.setAudioConstraint({codec:a,bitRate:this.abrEnabled?I:this.options.get("maxAudioBitRate"),language:this.options.get("language")}),(!r.includes(this.options.get("language"))||this.language===void 0)&&this.modules.subscription.setLanguage(r[0])),this.alignSizeAndBitRate(this.targetSubscription);const h=this.modules.subscription.getTargetSubscription();this.emitter.emit("subscription changed",{to:h,from:this.modules.subscription.getCurrentSubscription()})});t(this,"isSupportedVideoCodecProfile",(e,s)=>{if(this.willUseMediaSource()){const g=MA();return g?g.isTypeSupported(GA({codec:e,codecString:s})):!0}if(e==="h264"){const g=!!(s!=null&&s.startsWith("avc1.42")),I=!!(s!=null&&s.startsWith("avc1.66."));return g||I}return e!=="av1"});t(this,"supportedAudioCodecs",()=>{if(this.options.get("media")==="video")return[];const e=[];return(this.browser.supportsMp4Opus&&this.options.get("mseOpusEnabled")||!this.willUseMediaSource())&&e.push("opus"),this.willUseMediaSource()&&e.push("aac"),e});t(this,"initializeDecodingModule",()=>m(this,null,function*(){var g,I;const e=this.currentRenditionLevel,s=[];if(!e)throw new y("No currentRenditionLevel",{code:"no_current_rendition_level",isFatal:!1});if(e!=null&&e.video&&s.push({type:"video",mimeType:GA(e.video)}),e!=null&&e.audio&&s.push({type:"audio",mimeType:GA(e.audio)}),s.length===0)throw new y("Can't initialize decoding module without tracks",{code:"no_tracks",isFatal:!1});if(this.willUseMediaSource()&&this.element instanceof HTMLMediaElement)this.emitter.emit("flush buffers"),yield(g=this.modules.mseModule)==null?void 0:g.setSourceBuffers(s);else{const n=yield it.create(this.emitter,this.logger.getLogger("DecoderModule"),s,this.playbackSource,this.pool);(I=this.modules.decoder)==null||I.unload(),this.modules.decoder=n,this.modules.decoder.load()}}));t(this,"unload",()=>m(this,null,function*(){var e,s,g;this.logger.debug("Unloading modules..."),yield Promise.all(Object.values(this.modules).map(I=>I==null?void 0:I.unload())),(e=this.wakeLock)==null||e.unload(),this.pool=new _A(iA.MAX_POOL_SIZE),(g=(s=this.playbackSource).unload)==null||g.call(s),this.element.remove(),this.emitter.reset(),this.reset(),this.logger.debug("Unloaded modules")}));t(this,"userInput",()=>{this.play()});t(this,"pause",()=>{this.options.get("pauseSupportEnabled")&&(this.playbackSource.pause(),this.hasCalledConnect&&this.suspend())});t(this,"registerDebugInstance",()=>{nI(this)});t(this,"play",()=>m(this,null,function*(){var e;this.hasCalledConnect?this.unsuspend():(this._connect(),self.addEventListener("__vindral_register_debug__",this.registerDebugInstance)),(e=this.wakeLock)==null||e.enable(),this.playbackState==="paused"&&(this.resetModules(),this.emitter.emit("flush buffers"));try{yield this.playbackSource.play()}catch(s){}}));t(this,"getStatistics",()=>Object.values(this.modules).reduce((e,s)=>s&&"getStatistics"in s?c(c({},e),s.getStatistics()):e,this.getRuntimeInfo()));t(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});t(this,"getRuntimeInfo",()=>{const e=this.modules.canvasModule?this.options.get("iosMediaElementEnabled"):void 0;return c({uptime:Date.now()-this.createdAt,version:"3.3.3",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(),iosMediaElementEnabled:e},this.userAgentInformation.getUserAgentInformation())});t(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()))});t(this,"onBufferEvent",e=>{var g,I,n,o;this.emit("buffer state event",e);const s=!this.playbackSource.isActivated||this.playbackSource.isPaused;if(e==="filled"&&s){const B=Math.max(this.currentTime,(I=(g=this.videoBufferedRanges[0])==null?void 0:g.start)!=null?I:0,(o=(n=this.audioBufferedRanges[0])==null?void 0:n.start)!=null?o:0);this.logger.info("Buffer filled - starting playback",{currentTime:B}),this.playbackSource.currentTime=B,this.modules.sync.activateSyncAdjustments(),this.playbackSource.isActivated=!0}else e==="drained"&&this.playbackSource.isPaused&&(this.playbackSource.isActivated=!1,this.modules.sync.deactivateSyncAdjustments())});t(this,"timeToFirstFrame",()=>{const e=this.modules.playback.getFirstFrameTime(),s=this.modules.connection.firstConnectionTime;if(s&&e)return e-s});this.options=new II(c(c({},oI),qI(e)));const s=["localhost","127.0.0.1"];e.telemetryEnabled===void 0&&s.includes(location.hostname)&&this.options.set("telemetryEnabled",!1);const g={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}},I=at.create();I.setLevel(this.options.get("logLevel")),this.logger=I.getLogger("Vindral");const n=Et.create(this.emitter,this.logger.getLogger("PictureInPictureModule")),o=Z.create();this.apiClient=new Yt({publicEndpoint:this.options.get("url").toString(),tokenFactory:()=>this.options.get("authenticationToken")});const B=je.create(this.emitter,this.logger.getLogger("ConnectionModule"),{connectHandler:this.connectHandler,reconnectHandler:this.options.get("reconnectHandler")}),C=ut.create(this.logger.getLogger("SubscriptionModule"),this.emitter,g),a=lt.create(this.emitter,C),Q=dt.create(this.emitter,this.logger.getLogger("QualityOfServiceModule")),r=ct.create(this.emitter,this.logger.getLogger("PlaybackModule"),this,this.options.get("minBufferTime")),h=st.create(this.emitter),l=this.options.get("poster"),f=l===!0?this.getThumbnailUrl():l||void 0;let p,k,w;if(this.willUseMediaSource()){const E=new We({type:this.options.get("media")=="audio"?"audio":"video",autoplay:!1,muted:this.options.get("muted")||this.options.get("media")==="video",logger:this.logger.getLogger("MediaElement"),poster:f});E.on("buffer state",S=>this.emitter.emit("buffer state",S)),E.on("needs user input",S=>this.emitter.emit("needs user input",S)),E.on("volume state",S=>this.emit("volume state",S)),E.on("media element state",S=>this.onMediaElementState(S)),this.element=E.element,this.playbackSource=E,p=rt.create(this.logger.getLogger("MseModule"),this.emitter,this.element),this.options.get("pauseSupportEnabled")||(k=ae.create(this.logger.getLogger("UnpauseModule"),E,h)),this.options.get("pictureInPictureEnabled")&&this.emitter.emit("add picture in picture listener",{element:E.element})}else if(this.browser.platform.iosVersion>=15&&this.options.get("iosMediaElementEnabled")){const E=Qt.create(this.emitter,this.logger.getLogger("ModernCanvasModule"),this.pool,this,{type:this.options.get("media")=="audio"?"audio":"video",muted:this.options.get("muted")||this.options.get("media")==="video",poster:f}),S=E.element();this.element=S.element,this.playbackSource=E,w=E,this.options.get("pictureInPictureEnabled")&&this.browser.platform.iosVersion>15&&this.emitter.emit("add picture in picture listener",{element:this.element}),this.options.get("pauseSupportEnabled")||(k=ae.create(this.logger.getLogger("UnpauseModule"),S,h))}else{const E=Bt.create(this.emitter,this.logger.getLogger("LegacyCanvasModule"),this.pool,this,this.options.get("muted")||this.options.get("media")==="video");this.element=E.element(),this.playbackSource=E,w=E,this.options.get("iosWakeLockEnabled")&&(this.wakeLock=new iI)}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",()=>o.setTimeout(()=>void 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:()=>n.requestPictureInPicture(),exit:()=>n.exitPictureInPicture(),isActive:()=>n.isPictureInPictureActive(),isSupported:()=>n.isPictureInPictureSupported()},this.emitter.on("error",E=>{if(E.type()==="external"&&this.emit("error",E),E.isFatal())return()=>void this.unload()});const G=this.browser.platform.isIOS&&!this.browser.platform.isIpadOS,Y=mt.create(this.emitter,this.logger.getLogger("SyncModule"),this.playbackSource,r,this.willUseMediaSource()&&!G),M=(this.options.get("edgeUrl")||this.options.get("url")).replace("wss://","https://").replace("ws://","http://").replace("//lb.","//errors."),X=new URL("/telemetry",M).toString(),rA=Ce.create(this.logger.getLogger("TelemetryModule"),this.emitter,{url:X,enabled:this.options.get("telemetryEnabled"),includeStats:!1,interval:5e3},this);this.modules={telemetry:rA,bufferTime:Xe.create(this.emitter,this.logger.getLogger("BufferTimeModule"),Q,this,{maxBufferTime:this.options.get("maxBufferTime"),minBufferTime:this.options.get("minBufferTime")}),incomingData:It.create(this.emitter),adaptivity:Oe.create(this.emitter,this.logger.getLogger("AdaptivityModule"),Q,{cooldownTime:Math.max(this.options.get("minBufferTime"),2e3)}),constraintCap:$e.create(this.emitter,this.element,a,this.options.get("abrEnabled")?this.options.get("sizeBasedResolutionCapEnabled"):!1),event:gt.create(this.emitter,this.logger.getLogger("EventModule"),Y),sync:Y,documentState:h,connection:B,playback:r,pictureInPicture:n,logger:I,timer:o,subscription:C,renditions:a,qualityOfService:Q,mseModule:p,unpause:k,canvasModule:w},this.modules.adaptivity.isEnabled=this.options.get("abrEnabled"),this.emitter.on("page active",E=>{var S;E&&typeof this.disconnectTimeout=="number"&&(this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=void 0),E?this.playbackSource.isPaused||(this.logger.debug("Unsuspending"),this.unsuspend()):(this.logger.debug("Suspending"),this.suspend(),this.modules.decoder?this.options.get("iosBackgroundPlayEnabled")?(this.modules.decoder.unsuspend(),(S=this.modules.canvasModule)==null||S.unsuspend()):this.modules.connection.disconnect():(this.disconnectTimeout&&this.modules.timer.clearInterval(this.disconnectTimeout),this.disconnectTimeout=this.modules.timer.setInterval(()=>{const b=this.playbackState==="paused"||this.muted;this.connectionState==="connected"&&b&&(this.emitter.emit("flush buffers"),this.modules.connection.disconnect("Page inactive timeout"))},iA.DISCONNECT_TIMEOUT)))});let _;this.emitter.on("context switch complete",()=>{_||(_=window.setTimeout(()=>{window.clearTimeout(_),_=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=>{E==="connected"&&(this.cachedEdges=[],this.shiftedEdges=[]),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 H,W,T;const b=((W=(H=E.telemetry)==null?void 0:H.probability)!=null?W:1)>=Math.random();E.telemetry&&((T=this.modules.telemetry)==null||T.unload(),this.modules.telemetry=Ce.create(this.logger.getLogger("TelemetryModule"),this.emitter,L(c({},E.telemetry),{enabled:this.options.get("telemetryEnabled")&&b}),this),this.modules.telemetry.load())}),this.emitter.on("adapt level",E=>{var sA,d,F,J,V;this.logger.debug("adapt level",{direction:E});const S=this.modules.renditions.getRenditionLevels(),b=this.modules.renditions.getRenditionLevel(),H=S.findIndex(D=>D===b),W=S.length-1;let T=H;switch(E){case"upgrade":{const D=Math.min(H+1,W),v=S[D],JA=(sA=this.modules.connection.estimatedBandwidth)!=null?sA:cA(),LA=((F=(d=v==null?void 0:v.audio)==null?void 0:d.bitRate)!=null?F:0)+((V=(J=v==null?void 0:v.video)==null?void 0:J.bitRate)!=null?V:0),zA=JA*2>LA;v&&zA&&this.modules.adaptivity.isQoSOk(v)&&(T=D)}break;case"downgrade":T=Math.max(H-1,0);break;case"double downgrade":T=Math.max(H-2,0);break;case"reconnect":if(H===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 T=0}if(T===H)return;const O=S[T];this.alignSizeAndBitRate(L(c({},this.targetSubscription),{video:c(c({},this.targetSubscription.video),O==null?void 0:O.video),audio:c(c({},this.targetSubscription.audio),O==null?void 0:O.audio)})),this.emitter.emit("adapted level")}),this.emitter.on("received signal",E=>{var b;const S=E;switch(this.logger.debug("received",c({},S)),S.type){case"client ip":this.clientIp=S.ip;break;case"renditions":this.filterRenditions(S.renditions).then(H=>{this.emitter.emit("renditions",{renditions:H,channelId:this.currentSubscription.channelId}),this.emit("rendition levels",this.modules.renditions.getRenditionLevels()),this.emitLanguagesIfChanged()});break;case"subscription changed":try{KI(S.subscription)}catch(H){this.emitter.emit("error",new y("Subscription failed validation",{source:H instanceof Error?H:void 0,isFatal:!1,code:"subscription_failed_validation"}))}this.emitter.emit("subscription changed",{to:S.subscription,from:this.modules.subscription.getCurrentSubscription()}),this.modules.sync.timeshiftOnAudio=!((b=S.subscription.video)!=null&&b.codec),this.modules.adaptivity.reset();break;case"timing info":this.modules.sync.updateChannelSyncInfo(S.timingInfo.channelId,S.timingInfo),this.emit("server wallclock time",S.timingInfo.wallclockTime);break}}),this.emitter.on("received data",E=>{const S=this.modules.subscription.getCurrentSubscription(),b=AI(E);if(!S){this.logger.warn("Received unwanted message",c({},b));return}DA(L(c({},b),{channelId:S.channelId}))});const z=this.options.get("container");z&&this.attach(z),this.logger.info("Created Vindral instance",{options:this.options});const DA=E=>{const S=E.channelId,b=this.modules.renditions.getRendition(E.renditionId,S);if(!jg(E.flags)){if(_g(E.flags)){const H=new TextDecoder;this.modules.event.addEvent({timestamp:E.timestamp/E.timescale*1e3-this.modules.sync.getTimeshiftOffset(),content:H.decode(E.payload),type:"metadata"})}else if(b!=null&&b.codec){const H=ds(b.codec);if(this.modules.incomingData.add(H,E.payload.byteLength),zg(E.flags)){const W=L(c({type:H,data:E.payload,codec:b.codec},E),{channelId:S}),T=xg(W.codec,W.payload);T&&this.sizes.set(W.renditionId,T);const O=GA({codec:b.codec,codecString:b.codecString});this.emitter.emit("init segment",{initSegment:W,mimeType:O}),this.emit("initialized media")}else{const W=PI(E,b,this.sizes.get(E.renditionId));let T=this.sampleProcessingSesssions.get(H);if(!T)T=HI(this.modules.sync.processSample(W)),this.sampleProcessingSesssions.set(H,T);else{const O=T(this.modules.sync.processSample(W),this.isSwitchingRenditionLevel&&W.type==="video");let sA=W;O.forEach(d=>{this.modules.event.extractEvent(d,sA),this.emitter.emit("coded sample",d),sA=d})}}}}};this.options.get("maxVideoBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxVideoBitRate=this.options.get("maxVideoBitRate")),this.options.get("maxAudioBitRate")!==Number.MAX_SAFE_INTEGER&&(this.maxAudioBitRate=this.options.get("maxAudioBitRate")),uA(this.options.get("maxSize"),Ae())||(this.maxSize=this.options.get("maxSize")),this.options.get("burstEnabled")&&C.enableBurst(this.targetBufferTime)}set volume(e){this.playbackSource.volume=e}get volume(){return this.playbackSource.volume}set muted(e){const s=this.playbackSource.muted;this.playbackSource.muted=e,!e&&s&&!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))}get playbackLatency(){var e;if(this.playbackSource.currentTime!==0)return this.targetBufferTime+((e=this.modules.sync.drift)!=null?e:0)+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){this.modules.subscription.setLanguage(e)}get channelId(){return this.modules.subscription.getTargetSubscription().channelId}set channelId(e){if(e===this.channelId)return;this.modules.subscription.setChannelId(e);const s=this.options.get("media")==="audio"?[]:this.options.get("videoCodecs"),g=this.modules.renditions.getAudioRenditions(e),I=this.modules.renditions.getVideoRenditions(e),n=this.targetSubscription.audio.language,o=g==null?void 0:g.some(C=>C.language===n),B=s.find(C=>(I==null?void 0:I.find(a=>a.codec===C))!==void 0);B&&this.modules.subscription.setVideoCodec(B),this.logger.debug("Channel switch - started",{audioRenditions:g,targetSubscriptionLanguage:n,targetHasCurrentLanguage:o}),this.alignSizeAndBitRate(this.targetSubscription)}get maxSize(){var g,I;const{width:e,height:s}=(I=(g=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:g.video)!=null?I:Ae();return{width:e,height:s}}set maxSize(e){this.modules.constraintCap.setUserSpecifiedCap({video:{width:e.width,height:e.height}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxVideoBitRate(){var e,s;return(s=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.video.bitRate)!=null?s:cA()}set maxVideoBitRate(e){this.modules.constraintCap.setUserSpecifiedCap({video:{bitRate:e}}),this.alignSizeAndBitRate(this.targetSubscription)}get maxAudioBitRate(){var e,s;return(s=(e=this.modules.constraintCap.getCurrentConstraintCap())==null?void 0:e.audio.bitRate)!=null?s:cA()}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,s,g,I;return(I=(g=(e=this.modules.mseModule)==null?void 0:e.getBuffer("video"))!=null?g:(s=this.modules.decoder)==null?void 0:s.getBuffer("video"))!=null?I:[]}get audioBufferedRanges(){var e,s,g,I;return(I=(g=(e=this.modules.mseModule)==null?void 0:e.getBuffer("audio"))!=null?g:(s=this.modules.decoder)==null?void 0:s.getBuffer("audio"))!=null?I:[]}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 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){const s=this.modules.constraintCap.constrainSubscription(L(c({},e),{video:c({},e.video),audio:c({},e.audio)})),g=this.modules.constraintCap.getUserSpecifiedCap();!this.abrEnabled&&g&&(s.audio.bitRate=g.audio.bitRate,s.video.bitRate=g.video.bitRate,s.video.width=g.video.width,s.video.height=g.video.height);const I=this.modules.renditions.getRenditionLevel(s);if(I){if(I.video&&(this.modules.subscription.setVideoBitRate(I.video.bitRate),this.modules.subscription.setSize(I.video)),I.audio)this.modules.subscription.setAudioBitRate(I.audio.bitRate),this.modules.subscription.setLanguage(I.audio.language);else if(s.audio.language){let n=this.modules.renditions.getAudioRenditions(s.channelId);!this.abrEnabled&&g&&(n=n==null?void 0:n.filter(Q=>Q.bitRate<g.audio.bitRate));const o=s.audio.language,B=n==null?void 0:n.some(Q=>Q.language===o),C=n==null?void 0:n.find(Q=>Q.language),a=(n==null?void 0:n.length)&&n[0]||void 0;B||(C?(this.logger.debug("Randomizing language since target did not have current language"),this.modules.subscription.setAudioBitRate(C.bitRate),this.modules.subscription.setLanguage(C.language)):(this.logger.debug("Randomizing audio rendition since target did not have current language"),a!=null&&a.bitRate&&this.modules.subscription.setAudioBitRate(a.bitRate),this.modules.subscription.setLanguage(a==null?void 0:a.language)))}}}get currentSubscription(){return this.modules.subscription.getCurrentSubscription()}get targetSubscription(){return this.modules.subscription.getTargetSubscription()}willUseMediaSource(){return this.browser.supportsMediaSource&&this.options.get("mseEnabled")}};t(iA,"MAX_POOL_SIZE",10),t(iA,"INITIAL_MAX_BIT_RATE",2.5*1e3*1e3),t(iA,"PING_TIMEOUT",1e3),t(iA,"DISCONNECT_TIMEOUT",15*1e3);let Qe=iA;const Mi={bar:"_bar_16xpe_1",hidden:"_hidden_16xpe_46"},YA={"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:"_withThumbnails_suenn_19","hide-on-small":"_hide-on-small_suenn_27"},YI={"icon-button":"_icon-button_5fg7v_1"},Pi={enter:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
28
28
  <path d="M6,14 C5.45,14 5,14.45 5,15 L5,18 C5,18.55 5.45,19 6,19 L9,19 C9.55,19 10,18.55 10,18 C10,17.45 9.55,17 9,17 L7,17 L7,15 C7,14.45 6.55,14 6,14 Z M6,10 C6.55,10 7,9.55 7,9 L7,7 L9,7 C9.55,7 10,6.55 10,6 C10,5.45 9.55,5 9,5 L6,5 C5.45,5 5,5.45 5,6 L5,9 C5,9.55 5.45,10 6,10 Z M17,17 L15,17 C14.45,17 14,17.45 14,18 C14,18.55 14.45,19 15,19 L18,19 C18.55,19 19,18.55 19,18 L19,15 C19,14.45 18.55,14 18,14 C17.45,14 17,14.45 17,15 L17,17 Z M14,6 C14,6.55 14.45,7 15,7 L17,7 L17,9 C17,9.55 17.45,10 18,10 C18.55,10 19,9.55 19,9 L19,6 C19,5.45 18.55,5 18,5 L15,5 C14.45,5 14,5.45 14,6 Z" fill="white"></path>
29
29
  </g>`},exit:{viewBox:"-12 -12 38 38",content:`<g stroke="none" stroke-width="1" fill="none" fill-rule="evenodd" transform="translate(-5.000000, -5.000000)">
30
30
  <path d="M6,16 L8,16 L8,18 C8,18.55 8.45,19 9,19 C9.55,19 10,18.55 10,18 L10,15 C10,14.45 9.55,14 9,14 L6,14 C5.45,14 5,14.45 5,15 C5,15.55 5.45,16 6,16 Z M8,8 L6,8 C5.45,8 5,8.45 5,9 C5,9.55 5.45,10 6,10 L9,10 C9.55,10 10,9.55 10,9 L10,6 C10,5.45 9.55,5 9,5 C8.45,5 8,5.45 8,6 L8,8 Z M15,19 C15.55,19 16,18.55 16,18 L16,16 L18,16 C18.55,16 19,15.55 19,15 C19,14.45 18.55,14 18,14 L15,14 C14.45,14 14,14.45 14,15 L14,18 C14,18.55 14.45,19 15,19 Z M16,8 L16,6 C16,5.45 15.55,5 15,5 C14.45,5 14,5.45 14,6 L14,9 C14,9.55 14.45,10 15,10 L18,10 C18.55,10 19,9.55 19,9 C19,8.45 18.55,8 18,8 L16,8 Z" fill="white"></path>
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "3.3.2",
2
+ "version": "3.3.3",
3
3
  "name": "@vindral/web-sdk",
4
4
  "main": "./index.umd.cjs",
5
5
  "module": "./index.js",