<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="shift_jis">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Kagamin2 Player</title>
    <script>
"use strict";var asf_stream=(()=>{var xr=Object.create;var pt=Object.defineProperty;var br=Object.getOwnPropertyDescriptor;var Sr=Object.getOwnPropertyNames;var yr=Object.getPrototypeOf,Ar=Object.prototype.hasOwnProperty;var vr=(s,e)=>()=>(e||s((e={exports:{}}).exports,e),e.exports),Er=(s,e)=>{for(var t in e)pt(s,t,{get:e[t],enumerable:!0})},Wi=(s,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Sr(e))!Ar.call(s,n)&&n!==t&&pt(s,n,{get:()=>e[n],enumerable:!(i=br(e,n))||i.enumerable});return s};var Rr=(s,e,t)=>(t=s!=null?xr(yr(s)):{},Wi(e||!s||!s.__esModule?pt(t,"default",{value:s,enumerable:!0}):t,s)),kr=s=>Wi(pt({},"__esModule",{value:!0}),s);var ji=vr((rn,qt)=>{"use strict";var Fr=Object.prototype.hasOwnProperty,ae="~";function Je(){}Object.create&&(Je.prototype=Object.create(null),new Je().__proto__||(ae=!1));function Cr(s,e,t){this.fn=s,this.context=e,this.once=t||!1}function Ki(s,e,t,i,n){if(typeof t!="function")throw new TypeError("The listener must be a function");var r=new Cr(t,i||s,n),a=ae?ae+e:e;return s._events[a]?s._events[a].fn?s._events[a]=[s._events[a],r]:s._events[a].push(r):(s._events[a]=r,s._eventsCount++),s}function gt(s,e){--s._eventsCount===0?s._events=new Je:delete s._events[e]}function ie(){this._events=new Je,this._eventsCount=0}ie.prototype.eventNames=function(){var e=[],t,i;if(this._eventsCount===0)return e;for(i in t=this._events)Fr.call(t,i)&&e.push(ae?i.slice(1):i);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e};ie.prototype.listeners=function(e){var t=ae?ae+e:e,i=this._events[t];if(!i)return[];if(i.fn)return[i.fn];for(var n=0,r=i.length,a=new Array(r);n<r;n++)a[n]=i[n].fn;return a};ie.prototype.listenerCount=function(e){var t=ae?ae+e:e,i=this._events[t];return i?i.fn?1:i.length:0};ie.prototype.emit=function(e,t,i,n,r,a){var o=ae?ae+e:e;if(!this._events[o])return!1;var l=this._events[o],c=arguments.length,d,f;if(l.fn){switch(l.once&&this.removeListener(e,l.fn,void 0,!0),c){case 1:return l.fn.call(l.context),!0;case 2:return l.fn.call(l.context,t),!0;case 3:return l.fn.call(l.context,t,i),!0;case 4:return l.fn.call(l.context,t,i,n),!0;case 5:return l.fn.call(l.context,t,i,n,r),!0;case 6:return l.fn.call(l.context,t,i,n,r,a),!0}for(f=1,d=new Array(c-1);f<c;f++)d[f-1]=arguments[f];l.fn.apply(l.context,d)}else{var _=l.length,g;for(f=0;f<_;f++)switch(l[f].once&&this.removeListener(e,l[f].fn,void 0,!0),c){case 1:l[f].fn.call(l[f].context);break;case 2:l[f].fn.call(l[f].context,t);break;case 3:l[f].fn.call(l[f].context,t,i);break;case 4:l[f].fn.call(l[f].context,t,i,n);break;default:if(!d)for(g=1,d=new Array(c-1);g<c;g++)d[g-1]=arguments[g];l[f].fn.apply(l[f].context,d)}}return!0};ie.prototype.on=function(e,t,i){return Ki(this,e,t,i,!1)};ie.prototype.once=function(e,t,i){return Ki(this,e,t,i,!0)};ie.prototype.removeListener=function(e,t,i,n){var r=ae?ae+e:e;if(!this._events[r])return this;if(!t)return gt(this,r),this;var a=this._events[r];if(a.fn)a.fn===t&&(!n||a.once)&&(!i||a.context===i)&&gt(this,r);else{for(var o=0,l=[],c=a.length;o<c;o++)(a[o].fn!==t||n&&!a[o].once||i&&a[o].context!==i)&&l.push(a[o]);l.length?this._events[r]=l.length===1?l[0]:l:gt(this,r)}return this};ie.prototype.removeAllListeners=function(e){var t;return e?(t=ae?ae+e:e,this._events[t]&&gt(this,t)):(this._events=new Je,this._eventsCount=0),this};ie.prototype.off=ie.prototype.removeListener;ie.prototype.addListener=ie.prototype.on;ie.prefixed=ae;ie.EventEmitter=ie;typeof qt<"u"&&(qt.exports=ie)});var en={};Er(en,{MSEPlayer:()=>at,NativePlayer:()=>tt,Remuxer:()=>Ce,TransmuxingEvents:()=>A,defaultConfig:()=>Wt,eflv:()=>pr});var Yi=Rr(ji(),1);var re=Yi.default;var Xi=(p=>(p.ERROR="error",p.LOADING_COMPLETE="loading_complete",p.RECOVERED_EARLY_EOF="recovered_early_eof",p.MEDIA_INFO="media_info",p.METADATA_ARRIVED="metadata_arrived",p.SCRIPTDATA_ARRIVED="scriptdata_arrived",p.TIMED_ID3_METADATA_ARRIVED="timed_id3_metadata_arrived",p.PGS_SUBTITLE_ARRIVED="pgs_subtitle_arrived",p.SYNCHRONOUS_KLV_METADATA_ARRIVED="synchronous_klv_metadata_arrived",p.ASYNCHRONOUS_KLV_METADATA_ARRIVED="asynchronous_klv_metadata_arrived",p.SMPTE2038_METADATA_ARRIVED="smpte2038_metadata_arrived",p.SCTE35_METADATA_ARRIVED="scte35_metadata_arrived",p.PES_PRIVATE_DATA_DESCRIPTOR="pes_private_data_descriptor",p.PES_PRIVATE_DATA_ARRIVED="pes_private_data_arrived",p.STATISTICS_INFO="statistics_info",p.DESTROYING="destroying",p))(Xi||{}),M=Xi;var Wt={enableWorker:!1,enableWorkerForMSE:!1,enableStashBuffer:!0,stashInitialSize:void 0,isLive:!1,liveBufferLatencyChasing:!1,liveBufferLatencyChasingOnPaused:!1,liveBufferLatencyMaxLatency:1.5,liveBufferLatencyMinRemain:.5,liveSync:!1,liveSyncMaxLatency:1.2,liveSyncTargetLatency:.8,liveSyncPlaybackRate:1.2,lazyLoad:!0,lazyLoadMaxDuration:180,lazyLoadRecoverDuration:60,deferLoadAfterSourceOpen:!0,autoCleanupMaxBackwardDuration:180,autoCleanupMinBackwardDuration:120,autoCleanupSourceBuffer:!0,statisticsInfoReportInterval:600,fixAudioTimestampGap:!0,accurateSeek:!1,seekType:"range",seekParamStart:"bstart",seekParamEnd:"bend",rangeLoadZeroStart:!1,customSeekHandler:void 0,reuseRedirectedURL:!1,headers:void 0,customLoader:void 0,referrerPolicy:void 0};function Ae(){return{...Wt}}var K=class{_message;constructor(e){this._message=e}get name(){return"RuntimeException"}get message(){return this._message}toString(){return this.name+": "+this.message}},X=class extends K{constructor(e){super(e)}get name(){return"IllegalStateException"}},ne=class extends K{constructor(e){super(e)}get name(){return"InvalidArgumentException"}},et=class extends K{constructor(e){super(e)}get name(){return"NotImplementedException"}};var Kt=class{constructor(e,t){this.TAG="NativePlayer",this._type="NativePlayer",this._emitter=new re,this._config=Ae(),typeof t=="object"&&Object.assign(this._config,t);let i=e.type.toLowerCase();if(i==="mse"||i==="flv")throw new ne("NativePlayer does't support mse/flv MediaDataSource input!");if(e.hasOwnProperty("segments"))throw new ne(`NativePlayer(${e.type}) doesn't support multipart playback!`);this.e={onvLoadedMetadata:this._onvLoadedMetadata.bind(this)},this._pendingSeekTime=null,this._statisticsReporter=null,this._mediaDataSource=e,this._mediaElement=null}destroy(){this._emitter.emit(M.DESTROYING),this._mediaElement&&(this.unload(),this.detachMediaElement()),this.e=null,this._mediaDataSource=null,this._emitter.removeAllListeners(),this._emitter=null}on(e,t){e===M.MEDIA_INFO?this._mediaElement!=null&&this._mediaElement.readyState!==0&&Promise.resolve().then(()=>{this._emitter.emit(M.MEDIA_INFO,this.mediaInfo)}):e===M.STATISTICS_INFO&&this._mediaElement!=null&&this._mediaElement.readyState!==0&&Promise.resolve().then(()=>{this._emitter.emit(M.STATISTICS_INFO,this.statisticsInfo)}),this._emitter.addListener(e,t)}off(e,t){this._emitter.removeListener(e,t)}attachMediaElement(e){if(this._mediaElement=e,e.addEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._pendingSeekTime!=null)try{e.currentTime=this._pendingSeekTime,this._pendingSeekTime=null}catch{}}detachMediaElement(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src"),this._mediaElement.removeEventListener("loadedmetadata",this.e.onvLoadedMetadata),this._mediaElement=null),this._statisticsReporter!=null&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}load(){if(!this._mediaElement)throw new X("HTMLMediaElement must be attached before load()!");this._mediaElement.src=this._mediaDataSource.url,this._mediaElement.readyState>0&&(this._mediaElement.currentTime=0),this._mediaElement.preload="auto",this._mediaElement.load(),this._statisticsReporter=window.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval)}unload(){this._mediaElement&&(this._mediaElement.src="",this._mediaElement.removeAttribute("src")),this._statisticsReporter!=null&&(window.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}play(){return this._mediaElement.play()}pause(){this._mediaElement.pause()}get type(){return this._type}get buffered(){return this._mediaElement.buffered}get duration(){return this._mediaElement.duration}get volume(){return this._mediaElement.volume}set volume(e){this._mediaElement.volume=e}get muted(){return this._mediaElement.muted}set muted(e){this._mediaElement.muted=e}get currentTime(){return this._mediaElement?this._mediaElement.currentTime:0}set currentTime(e){this._mediaElement?this._mediaElement.currentTime=e:this._pendingSeekTime=e}get mediaInfo(){let t={mimeType:(this._mediaElement instanceof HTMLAudioElement?"audio/":"video/")+this._mediaDataSource.type};return this._mediaElement&&(t.duration=Math.floor(this._mediaElement.duration*1e3),this._mediaElement instanceof HTMLVideoElement&&(t.width=this._mediaElement.videoWidth,t.height=this._mediaElement.videoHeight)),t}get statisticsInfo(){let e={playerType:this._type,url:this._mediaDataSource.url};if(!(this._mediaElement instanceof HTMLVideoElement))return e;let t=!0,i=0,n=0;if(this._mediaElement.getVideoPlaybackQuality){let r=this._mediaElement.getVideoPlaybackQuality();i=r.totalVideoFrames,n=r.droppedVideoFrames}else this._mediaElement.webkitDecodedFrameCount!=null?(i=this._mediaElement.webkitDecodedFrameCount,n=this._mediaElement.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=i,e.droppedFrames=n),e}_onvLoadedMetadata(e){this._pendingSeekTime!=null&&(this._mediaElement.currentTime=this._pendingSeekTime,this._pendingSeekTime=null),this._emitter.emit(M.MEDIA_INFO,this.mediaInfo)}_reportStatisticsInfo(){this._emitter.emit(M.STATISTICS_INFO,this.statisticsInfo)}},tt=Kt;var jt=class s{static GLOBAL_TAG="e-rtmp-lab.js";static FORCE_GLOBAL_TAG=!1;static ENABLE_CALLBACK=!1;static ENABLE_ERROR=!0;static ENABLE_INFO=!0;static ENABLE_WARN=!0;static ENABLE_DEBUG=!1;static ENABLE_VERBOSE=!0;static emitter=new re;static emitLog(e,t){s.emitter.emit("log",e,t)}static e(e,t){if(!s.ENABLE_ERROR)return;(!e||s.FORCE_GLOBAL_TAG)&&(e=s.GLOBAL_TAG);let i=`[${e}] > ${t}`;s.ENABLE_CALLBACK&&s.emitter.emit("log","error",i),console.error?console.error(i):console.warn?console.warn(i):console.log(i)}static i(e,t){if(!s.ENABLE_INFO)return;(!e||s.FORCE_GLOBAL_TAG)&&(e=s.GLOBAL_TAG);let i=`[${e}] > ${t}`;s.ENABLE_CALLBACK&&s.emitter.emit("log","info",i),console.info?console.info(i):console.log(i)}static w(e,t){if(!s.ENABLE_WARN)return;(!e||s.FORCE_GLOBAL_TAG)&&(e=s.GLOBAL_TAG);let i=`[${e}] > ${t}`;s.ENABLE_CALLBACK&&s.emitter.emit("log","warn",i),console.warn?console.warn(i):console.log(i)}static d(e,t){if(!s.ENABLE_DEBUG)return;(!e||s.FORCE_GLOBAL_TAG)&&(e=s.GLOBAL_TAG);let i=`[${e}] > ${t}`;s.ENABLE_CALLBACK&&s.emitter.emit("log","debug",i),console.debug?console.debug(i):console.log(i)}static dumpArrayBuffer(e,t,i=32){let n;if(e instanceof Uint8Array)n=e;else if(e instanceof ArrayBuffer)n=new Uint8Array(e);else if(ArrayBuffer.isView(e))n=new Uint8Array(e.buffer,e.byteOffset,e.byteLength);else throw new TypeError("Expected ArrayBuffer, TypedArray, or DataView");let r=Math.min(n.byteLength,t),a=[];for(let o=0;o<r;o+=i){let l=[],c=[],d=Math.min(i,r-o);for(let f=0;f<d;f++){let _=n[o+f];l.push(_.toString(16).padStart(2,"0")),c.push(_>=32&&_<=126?String.fromCharCode(_):".")}for(;l.length<i;)l.push("  ");for(;c.length<i;)c.push(" ");a.push(`${o.toString(16).padStart(4,"0")}: ${l.join(" ")}  |${c.join("")}|`)}return a.join(`
`)}static v(e,...t){if(!s.ENABLE_VERBOSE)return;(!e||s.FORCE_GLOBAL_TAG)&&(e=s.GLOBAL_TAG);let i=`[${e}] >`;s.ENABLE_CALLBACK&&s.emitter.emit("log","verbose",i,...t),console.log(i,...t)}static scope(e,t){let i=!0,n=()=>{let r=i?t:" ".repeat(t.length);return i=!1,`${r}:`};return{v:(...r)=>s.v(e,n(),...r),w:r=>s.w(e,`${n()} ${r}`),e:r=>s.e(e,`${n()} ${r}`)}}static a(e,t,i){if(!i){let n=`[${e}] ASSERT FAILED: ${t}`;throw new Error(n)}}},u=jt;var it={};function Tr(){let s=self.navigator.userAgent.toLowerCase(),e=/(edge)\/([\w.]+)/.exec(s)||/(opr)[\/]([\w.]+)/.exec(s)||/(chrome)[ \/]([\w.]+)/.exec(s)||/(iemobile)[\/]([\w.]+)/.exec(s)||/(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(s)||/(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(s)||/(webkit)[ \/]([\w.]+)/.exec(s)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(s)||/(msie) ([\w.]+)/.exec(s)||s.indexOf("trident")>=0&&/(rv)(?::| )([\w.]+)/.exec(s)||s.indexOf("compatible")<0&&/(firefox)[ \/]([\w.]+)/.exec(s)||[],t=/(ipad)/.exec(s)||/(ipod)/.exec(s)||/(windows phone)/.exec(s)||/(iphone)/.exec(s)||/(kindle)/.exec(s)||/(android)/.exec(s)||/(windows)/.exec(s)||/(mac)/.exec(s)||/(linux)/.exec(s)||/(cros)/.exec(s)||[],i={browser:e[5]||e[3]||e[1]||"",version:e[2]||e[4]||"0",majorVersion:e[4]||e[2]||"0",platform:t[0]||""},n={};if(i.browser){n[i.browser]=!0;let r=i.majorVersion.split(".");n.version={major:parseInt(i.majorVersion,10),string:i.version},r.length>1&&(n.version.minor=parseInt(r[1],10)),r.length>2&&(n.version.build=parseInt(r[2],10))}if(i.platform&&(n[i.platform]=!0),(n.chrome||n.opr||n.safari)&&(n.webkit=!0),n.rv||n.iemobile){n.rv&&delete n.rv;let r="msie";i.browser=r,n[r]=!0}if(n.edge){delete n.edge;let r="msedge";i.browser=r,n[r]=!0}if(n.opr){let r="opera";i.browser=r,n[r]=!0}if(n.safari&&n.android){let r="android";i.browser=r,n[r]=!0}n.name=i.browser,n.platform=i.platform;for(let r in it)it.hasOwnProperty(r)&&delete it[r];Object.assign(it,n)}Tr();var W=it;var Qi=(o=>(o.ERROR="error",o.SOURCE_OPEN="source_open",o.UPDATE_END="update_end",o.BUFFER_FULL="buffer_full",o.QUOTA_EXCEEDED_BUFFER_FULL="quota_exceeded_buffer_full",o.START_STREAMING="start_streaming",o.END_STREAMING="end_streaming",o))(Qi||{}),j=Qi;var Ce=class{static DEBUG_BUFFER=!1;static dbgVideoBuffer=new Uint8Array;static dbgAudioBuffer=new Uint8Array;_config;_isLive;_isAudioMetadataDispatched=!1;_isVideoMetadataDispatched=!1;_audioMeta=null;_videoMeta=null;constructor(e){this._config=e,this._isLive=e.isLive}get isAudioMetadataDispatched(){return this._isAudioMetadataDispatched}get isVideoMetadataDispatched(){return this._isVideoMetadataDispatched}};var Ue=["video","audio"];function Dr(s,e=16){return!s||s.byteLength===0?"empty":Array.from(s.subarray(0,Math.min(e,s.byteLength))).map(t=>t.toString(16).padStart(2,"0")).join(" ")}function Ve(s){return`type=${s.type} codec=${s.codec||"none"} container=${s.container} bytes=${s.data.byteLength} head=${Dr(s.data)}`}function Lr(s){if(!s)return"none";let e=[`code=${s.code}`];return"message"in s&&typeof s.message=="string"&&s.message.length>0&&e.push(`message=${s.message}`),e.join(" ")}var Yt=class s{static TRACE=!1;TAG="MSEController";_config;_emitter=new re;events;_mediaSource;_mediaElementProxy;_mediaSourceObjectURL=null;_useManagedMediaSource;_isBufferFull=!1;_hasPendingEos=!1;_requireSetMediaDuration=!1;_pendingMediaDuration=0;_mimeTypes={video:null,audio:null};_sourceBuffers={video:null,audio:null};_lastInitSegments={video:null,audio:null};_pendingSegments={video:[],audio:[]};_pendingRemoveRanges={video:[],audio:[]};_pendingSourceBufferInit=[];constructor(e,t){this._config=e,this._config.isLive&&this._config.autoCleanupSourceBuffer==null?this._config={...e,autoCleanupSourceBuffer:!0}:this._config=e,this.events={onSourceOpen:this._onSourceOpen.bind(this),onSourceEnded:this._onSourceEnded.bind(this),onSourceClose:this._onSourceClose.bind(this),onStartStreaming:this._onStartStreaming.bind(this),onEndStreaming:this._onEndStreaming.bind(this),onQualityChange:this._onQualityChange.bind(this),onSourceBufferError:this._onSourceBufferError.bind(this),onSourceBufferUpdateEnd:this._onSourceBufferUpdateEnd.bind(this)},this._useManagedMediaSource="ManagedMediaSource"in self&&!("MediaSource"in self),this._useManagedMediaSource&&u.v(this.TAG,"Using ManagedMediaSource");let i=this._mediaSource=this._useManagedMediaSource?new self.ManagedMediaSource:new self.MediaSource;i.addEventListener("sourceopen",this.events.onSourceOpen),i.addEventListener("sourceended",this.events.onSourceEnded),i.addEventListener("sourceclose",this.events.onSourceClose),this._useManagedMediaSource&&(i.addEventListener("startstreaming",this.events.onStartStreaming),i.addEventListener("endstreaming",this.events.onEndStreaming),i.addEventListener("qualitychange",this.events.onQualityChange)),this._mediaElementProxy=t}destroy(){this._mediaElementProxy.setOnMediaTimeUpdate(null),this._mediaSource&&this.shutdown(),this._mediaSourceObjectURL&&this.revokeObjectURL(),this.events=null,this._emitter.removeAllListeners()}on(e,t){this._emitter.addListener(e,t)}off(e,t){this._emitter.removeListener(e,t)}shutdown(){if(this._mediaSource){let e=this._mediaSource;for(let t of Ue){this._pendingSegments[t].splice(0),this._pendingRemoveRanges[t].splice(0),this._lastInitSegments[t]=null;let i=this._sourceBuffers[t];if(i){if(e.readyState!=="closed"){try{e.removeSourceBuffer(i)}catch(n){u.e(this.TAG,n.message)}i.removeEventListener("error",this.events.onSourceBufferError),i.removeEventListener("updateend",this.events.onSourceBufferUpdateEnd)}this._mimeTypes[t]=null,this._sourceBuffers[t]=null}}if(e.readyState==="open")try{e.endOfStream()}catch(t){u.e(this.TAG,t.message)}e.removeEventListener("sourceopen",this.events.onSourceOpen),e.removeEventListener("sourceended",this.events.onSourceEnded),e.removeEventListener("sourceclose",this.events.onSourceClose),this._useManagedMediaSource&&(e.removeEventListener("startstreaming",this.events.onStartStreaming),e.removeEventListener("endstreaming",this.events.onEndStreaming),e.removeEventListener("qualitychange",this.events.onQualityChange))}this._mediaSource=null,this._pendingSourceBufferInit=[],this._isBufferFull=!1,this._hasPendingEos=!1}isManagedMediaSource(){return this._useManagedMediaSource}getObject(){if(!this._mediaSource)throw new X("MediaSource has not been initialized yet!");return this._mediaSource}getHandle(){if(!this._mediaSource)throw new X("MediaSource has not been initialized yet!");if(this._useManagedMediaSource)return this._mediaSource.handle}getObjectURL(){if(!this._mediaSource)throw new X("MediaSource has not been initialized yet!");return this._mediaSourceObjectURL==null&&(this._mediaSourceObjectURL=URL.createObjectURL(this._mediaSource)),this._mediaSourceObjectURL}revokeObjectURL(){this._mediaSourceObjectURL&&(URL.revokeObjectURL(this._mediaSourceObjectURL),this._mediaSourceObjectURL=null)}appendInitSegment(e,t=!1){if(this._mediaSource?.readyState!=="open"||this._useManagedMediaSource&&this._mediaSource.streaming===!1){u.v(this.TAG,`appendInitSegment: deferring because MediaSource is not ready, deferred=${t} ${Ve(e)}`),this._deferInitSegment(e,t);return}let i=e,n=`${i.container}`;i.codec&&i.codec.length>0&&(i.codec==="opus"&&W.safari&&(i.codec="Opus"),n+=`; codecs="${i.codec}"`);let r=!1,a=this._sourceBuffers.video?.updating,o=this._sourceBuffers.audio?.updating;if(a||o){u.v(this.TAG,`appendInitSegment: deferring because SourceBuffer is updating, deferred=${t} mimeType=${n} updatingVideo=${a} updatingAudio=${o} ${Ve(i)}`),this._deferInitSegment(e,t);return}if(u.v(this.TAG,`appendInitSegment: accepting mimeType=${n} deferred=${t} updatingVideo=${a} updatingAudio=${o} ${Ve(i)}`),this._lastInitSegments[i.type]=i,n!==this._mimeTypes[i.type]){if(this._mimeTypes[i.type])u.v(this.TAG,`Notice: ${i.type} mimeType changed for ${this._mimeTypes[i.type]}, mimeType: ${n}`);else{r=!0;try{let l=this._sourceBuffers[i.type]=this._mediaSource.addSourceBuffer(n),c=this._sourceBuffers.video?.updating,d=this._sourceBuffers.audio?.updating;u.v(this.TAG,`appendInitSegment: Now ${Date.now()} - Created SourceBuffer for ${i.type} track, mimeType: ${n}, updating video: ${c} audio: ${d}`),this._mediaSource.duration=i.mediaDuration/1e3,l.addEventListener("error",this.events.onSourceBufferError),l.addEventListener("updateend",this.events.onSourceBufferUpdateEnd)}catch(l){u.e(this.TAG,l.message),this._emitter.emit(j.ERROR,{code:l.code,msg:l.message});return}}this._mimeTypes[i.type]=n}t||this._pendingSegments[i.type].push(i),r||this._doAppendSegments(),(W.safari&&i.container==="audio/mpeg"||i.container==="video/webm")&&i.mediaDuration>0&&(this._requireSetMediaDuration=!0,this._pendingMediaDuration=i.mediaDuration/1e3,this._updateMediaSourceDuration())}appendMediaSegment(e){let t=e;this._pendingSegments[t.type].push(t),this._config.autoCleanupSourceBuffer&&this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer(),this._hasPendingRemoveRanges()||this._doAppendSegments()}flush(){for(let e of Ue){if(!this._sourceBuffers[e])continue;let t=this._sourceBuffers[e];if(this._mediaSource?.readyState==="open")try{t.abort()}catch(n){u.e(this.TAG,n.message)}let i=this._pendingSegments[e];if(i.splice(0,i.length),this._mediaSource?.readyState!=="closed"){for(let n=0;n<t.buffered.length;n++){let r=t.buffered.start(n),a=t.buffered.end(n);this._pendingRemoveRanges[e].push({start:r,end:a})}if(this._doRemoveRanges(),W.safari){let n=this._lastInitSegments[e];n&&(this._pendingSegments[e].push(n),this._doAppendSegments())}}}}endOfStream(){let e=this._mediaSource,t=this._sourceBuffers;if(!e||e.readyState!=="open"){e&&e.readyState==="closed"&&this._hasPendingSegments()&&(this._hasPendingEos=!0);return}t.video?.updating||t.audio?.updating?this._hasPendingEos=!0:(this._hasPendingEos=!1,e.endOfStream())}_needCleanupSourceBuffer(){if(!this._config.autoCleanupSourceBuffer||!this._mediaElementProxy)return!1;let e=this._mediaElementProxy.getCurrentTime();for(let t of Ue){let i=this._getBufferedRanges(t);if(i&&i.length>=1&&e-i.start(0)>=this._config.autoCleanupMaxBackwardDuration)return!0}return!1}_doCleanupSourceBuffer(e=!1){let t=this._mediaElementProxy.getCurrentTime();for(let i of Ue){let n=this._sourceBuffers[i],r=this._getBufferedRanges(i);if(n&&r){let a=!1;for(let o=0;o<r.length;o++){let l=r.start(o),c=r.end(o);if(l<=t&&t<c+3){if(t-l>=this._config.autoCleanupMaxBackwardDuration){let d=t-this._config.autoCleanupMinBackwardDuration;l<d&&(a=!0,this._pendingRemoveRanges[i].push({start:l,end:d}))}else if(e){let d=t-10;l<d&&(a=!0,this._pendingRemoveRanges[i].push({start:l,end:d}))}}else c<t&&(a=!0,this._pendingRemoveRanges[i].push({start:l,end:c}))}a?(u.v(this.TAG,`Cleanup SourceBuffer ${i}, currentTime: ${t}, pendingRemoveRanges: ${this._pendingRemoveRanges[i].length} ranges`),this._doRemoveRanges()):r.length>0?u.w(this.TAG,`Could not cleanup SourceBuffer ${i}, currentTime: ${t} bufferedStart: ${r.start(0)} bufferedEnd: ${r.end(r.length-1)}`):u.w(this.TAG,`Could not cleanup SourceBuffer ${i}, currentTime: ${t} buffered: empty`)}}}_onMediaTimeUpdate=e=>{this._needCleanupSourceBuffer()&&this._doCleanupSourceBuffer(),this._hasPendingEos&&this._hasPendingSegments()&&!this._hasPendingRemoveRanges()&&(u.v(this.TAG,"Retrying append of final segment after playback progress"),this._doAppendSegments())};_updateMediaSourceDuration(){let e=this._sourceBuffers;if(this._mediaElementProxy.getReadyState()===0||this._mediaSource?.readyState!=="open"||e.video?.updating||e.audio?.updating)return;let t=this._mediaSource.duration,i=this._pendingMediaDuration;i>0&&(isNaN(t)||i>t)&&(u.v(this.TAG,`Update MediaSource duration from ${t} to ${i}`),this._mediaSource.duration=i),this._requireSetMediaDuration=!1,this._pendingMediaDuration=0}_doRemoveRanges(){for(let e of Ue){if(!this._sourceBuffers[e]||this._sourceBuffers[e].updating)continue;let t=this._sourceBuffers[e],i=this._pendingRemoveRanges[e];if(i.length&&!t.updating){let n=i.shift();t.remove(n.start,n.end)}}}_doAppendSegments(){if(!this._mediaSource||this._mediaSource.readyState!=="open")return;let e=this._pendingSegments;for(let t of Ue)if(!(!this._sourceBuffers[t]||this._sourceBuffers[t].updating||this._useManagedMediaSource&&this._mediaSource.streaming===!1)&&e[t].length>0){let i=e[t][0].kind===1?e[t][0]:void 0,n=e[t][0].kind===0?e[t][0]:void 0,r=i?.info,a=i?.frameCount??0,o=e[t].shift();if(o.kind===1&&Number.isFinite(o?.timestampOffset)){let l=this._sourceBuffers[t].timestampOffset,c=o.timestampOffset/1e3;Math.abs(l-c)>.1&&(u.v(this.TAG,`Update MPEG audio timestampOffset from ${l} to ${c}`),this._sourceBuffers[t].timestampOffset=c),delete o.timestampOffset}if(!o.data||o.data.byteLength===0)continue;try{if(o.kind===0&&u.v(this.TAG,`_doAppendSegments: append init ${Ve(o)} pendingAudio=${e.audio.length} pendingVideo=${e.video.length}`),s.TRACE){let l=this._sourceBuffers.audio?.updating,c=this._sourceBuffers.video?.updating;r?u.v(this.TAG,`_doAppendSegments: Now ${Date.now()} - Appending media segment for ${t} SourceBuffer - frameCount: ${a} beginDts: ${r.beginDts} endDts: ${r.endDts} size: ${o.data.byteLength} audioUpdating ${l} videoUpdating ${c}`):u.v(this.TAG,`_doAppendSegments: Now ${Date.now()} - Appending init segment for ${t} SourceBuffer - size: ${o.data.byteLength} audioUpdating ${l} videoUpdating ${c}`)}if(typeof SharedArrayBuffer<"u"&&o.data.buffer instanceof SharedArrayBuffer){let l=o.data.slice();this._sourceBuffers[t].appendBuffer(l)}else this._sourceBuffers[t].appendBuffer(o.data);this._isBufferFull=!1}catch(l){this._pendingSegments[t].unshift(o),u.e(this.TAG,`error.message = ${l.message}; error.name = ${l.name}; error.code = ${l.code}; pendingData.length = ${o.data.length}; type = ${t}; beginDts = ${r?r.beginDts:"N/A"}; endDts = ${r?r.endDts:"N/A"}`),l.name==="QuotaExceededError"?this._hasPendingEos&&this._config.autoCleanupSourceBuffer?(this._mediaElementProxy.setOnMediaTimeUpdate(this._onMediaTimeUpdate),u.v(this.TAG,"QuotaExceededError with pending EOS, forcing cleanup to append final segment."),this._doCleanupSourceBuffer(!0),this._hasPendingRemoveRanges()||(u.w(this.TAG,"Cannot cleanup buffer at current position - will retry as playback progresses"),this._isBufferFull||(this._isBufferFull=!0,this._emitter.emit(j.BUFFER_FULL)))):this._isBufferFull||(this._isBufferFull=!0,this._emitter.emit(j.BUFFER_FULL),this._emitter.emit(j.QUOTA_EXCEEDED_BUFFER_FULL,{type:t,currentBufferLength:this._sourceBuffers[t]?.buffered.length||0,segmentSize:o.data.byteLength})):(u.e(this.TAG,l.message),this._emitter.emit(j.ERROR,{code:l.code,msg:l.message}))}}}_deferInitSegment(e,t){this._pendingSourceBufferInit=this._pendingSourceBufferInit.filter(i=>i.type!==e.type),this._pendingSourceBufferInit.push(e),u.v(this.TAG,`_deferInitSegment: queued deferred=${t} pendingSourceBufferInit=${this._pendingSourceBufferInit.length} pendingAudio=${this._pendingSegments.audio.length} pendingVideo=${this._pendingSegments.video.length} ${Ve(e)}`),t||(this._pendingSegments[e.type]=this._pendingSegments[e.type].filter(i=>i.kind!==0),this._pendingSegments[e.type].push(e),u.v(this.TAG,`_deferInitSegment: also queued into pendingSegments[${e.type}] size=${this._pendingSegments[e.type].length} ${Ve(e)}`))}_flushPendingInitSegments(){for(;this._pendingSourceBufferInit.length>0;){if(!this._mediaSource||this._mediaSource.readyState!=="open"||this._useManagedMediaSource&&this._mediaSource.streaming===!1||this._sourceBuffers.video?.updating||this._sourceBuffers.audio?.updating||this._hasPendingRemoveRanges())return;let e=this._pendingSourceBufferInit.shift();u.v(this.TAG,`_flushPendingInitSegments: dispatching queued init, remaining=${this._pendingSourceBufferInit.length} ${Ve(e)}`),this.appendInitSegment(e,!0)}}_onSourceOpen(){u.v(this.TAG,"MediaSource onSourceOpen"),this._mediaSource?.removeEventListener("sourceopen",this.events.onSourceOpen),this._flushPendingInitSegments(),this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(j.SOURCE_OPEN)}_onStartStreaming(){u.v(this.TAG,"ManagedMediaSource onStartStreaming"),this._flushPendingInitSegments(),this._hasPendingSegments()&&this._doAppendSegments(),this._emitter.emit(j.START_STREAMING)}_onEndStreaming(){u.v(this.TAG,"ManagedMediaSource onEndStreaming"),this._emitter.emit(j.END_STREAMING)}_onQualityChange(){u.v(this.TAG,"ManagedMediaSource onQualityChange")}_onSourceEnded(){u.v(this.TAG,"MediaSource onSourceEnded")}_getBufferedRanges(e){let t=this._sourceBuffers[e];return t?t.buffered:null}_onSourceClose(){u.v(this.TAG,"MediaSource onSourceClose");for(let e of Ue){let t=this._sourceBuffers[e];t&&(t.removeEventListener("error",this.events.onSourceBufferError),t.removeEventListener("updateend",this.events.onSourceBufferUpdateEnd)),this._sourceBuffers[e]=null,this._mimeTypes[e]=null,this._pendingRemoveRanges[e].splice(0),this._pendingSegments[e].splice(0)}this._pendingSourceBufferInit=[],this._mediaSource&&this.events!=null&&(this._mediaSource.removeEventListener("sourceopen",this.events.onSourceOpen),this._mediaSource.removeEventListener("sourceended",this.events.onSourceEnded),this._mediaSource.removeEventListener("sourceclose",this.events.onSourceClose),this._useManagedMediaSource&&(this._mediaSource.removeEventListener("startstreaming",this.events.onStartStreaming),this._mediaSource.removeEventListener("endstreaming",this.events.onEndStreaming),this._mediaSource.removeEventListener("qualitychange",this.events.onQualityChange)))}_hasPendingSegments(){let e=this._pendingSegments;return e.video.length>0||e.audio.length>0}_hasPendingRemoveRanges(){let e=this._pendingRemoveRanges;return e.video.length>0||e.audio.length>0}_onSourceBufferUpdateEnd(){this._requireSetMediaDuration&&this._updateMediaSourceDuration(),this._flushPendingInitSegments(),this._hasPendingRemoveRanges()?this._doRemoveRanges():this._hasPendingSegments()?this._doAppendSegments():this._hasPendingEos&&this.endOfStream(),this._emitter.emit(j.UPDATE_END)}_onSourceBufferError(e){let t=e?.target,i=this._mediaElementProxy?.getError?.()??null,n=t?`updating=${t.updating}`:"target=unknown";u.e(this.TAG,`SourceBuffer Error: eventType=${e?.type??"unknown"} ${n} mediaSourceReadyState=${this._mediaSource?.readyState??"null"} mediaElementReadyState=${this._mediaElementProxy?.getReadyState?.()??"unknown"} mediaError=${Lr(i)}`);let r=this._mediaElementProxy?.getError?.();r&&this._emitter.emit(j.ERROR,{code:r.code,msg:r.message})}},Ji=Yt;var bt=class s{static get forceGlobalTag(){return u.FORCE_GLOBAL_TAG}static set forceGlobalTag(e){u.FORCE_GLOBAL_TAG=e,s._notifyChange()}static get globalTag(){return u.GLOBAL_TAG}static set globalTag(e){u.GLOBAL_TAG=e,s._notifyChange()}static get enableAll(){return u.ENABLE_VERBOSE&&u.ENABLE_DEBUG&&u.ENABLE_INFO&&u.ENABLE_WARN&&u.ENABLE_ERROR}static set enableAll(e){u.ENABLE_VERBOSE=e,u.ENABLE_DEBUG=e,u.ENABLE_INFO=e,u.ENABLE_WARN=e,u.ENABLE_ERROR=e,s._notifyChange()}static get enableDebug(){return u.ENABLE_DEBUG}static set enableDebug(e){u.ENABLE_DEBUG=e,s._notifyChange()}static get enableVerbose(){return u.ENABLE_VERBOSE}static set enableVerbose(e){u.ENABLE_VERBOSE=e,s._notifyChange()}static get enableInfo(){return u.ENABLE_INFO}static set enableInfo(e){u.ENABLE_INFO=e,s._notifyChange()}static get enableWarn(){return u.ENABLE_WARN}static set enableWarn(e){u.ENABLE_WARN=e,s._notifyChange()}static get enableError(){return u.ENABLE_ERROR}static set enableError(e){u.ENABLE_ERROR=e,s._notifyChange()}static getConfig(){return{globalTag:u.GLOBAL_TAG,forceGlobalTag:u.FORCE_GLOBAL_TAG,enableVerbose:u.ENABLE_VERBOSE,enableDebug:u.ENABLE_DEBUG,enableInfo:u.ENABLE_INFO,enableWarn:u.ENABLE_WARN,enableError:u.ENABLE_ERROR,enableCallback:u.ENABLE_CALLBACK}}static applyConfig(e){u.GLOBAL_TAG=e.globalTag,u.FORCE_GLOBAL_TAG=e.forceGlobalTag,u.ENABLE_VERBOSE=e.enableVerbose,u.ENABLE_DEBUG=e.enableDebug,u.ENABLE_INFO=e.enableInfo,u.ENABLE_WARN=e.enableWarn,u.ENABLE_ERROR=e.enableError,u.ENABLE_CALLBACK=e.enableCallback}static _notifyChange(){let e=s.emitter;if(e.listenerCount("change")>0){let t=s.getConfig();e.emit("change",t)}}static registerListener(e){s.emitter.addListener("change",e)}static removeListener(e){s.emitter.removeListener("change",e)}static addLogListener(e){u.emitter.addListener("log",e),u.emitter.listenerCount("log")>0&&(u.ENABLE_CALLBACK=!0,s._notifyChange())}static removeLogListener(e){u.emitter.removeListener("log",e),u.emitter.listenerCount("log")===0&&(u.ENABLE_CALLBACK=!1,s._notifyChange())}};bt.emitter=new re;var pe=bt;var Xt=class{mimeType=null;duration=null;hasAudio=null;hasVideo=null;audioCodec=null;videoCodec=null;audioDataRate=null;videoDataRate=null;audioSampleRate=null;audioChannelCount=null;width=null;height=null;fps=null;profile=null;level=null;refFrames=null;chromaFormat=null;sarNum=null;sarDen=null;metadata=null;segments=null;segmentCount=null;hasKeyframesIndex=null;keyframesIndex=null;isComplete(){let e=this.hasAudio===!1||this.hasAudio===!0&&this.audioCodec!=null&&this.audioSampleRate!=null&&this.audioChannelCount!=null,t=this.hasVideo===!1||this.hasVideo===!0&&this.videoCodec!=null&&this.width!=null&&this.height!=null&&this.fps!=null&&this.profile!=null&&this.level!=null&&this.refFrames!=null&&this.chromaFormat!=null&&this.sarNum!=null&&this.sarDen!=null;return this.mimeType!=null&&e&&t}isSeekable(){return this.hasKeyframesIndex===!0}getNearestKeyframe(e){if(this.keyframesIndex==null)return null;let t=this.keyframesIndex,i=this._search(t.times,e);return{index:i,milliseconds:t.times[i],fileposition:t.filepositions[i]}}_search(e,t){let i=0,n=e.length-1,r=0,a=0,o=n;for(t<e[0]&&(i=0,a=o+1);a<=o;)if(r=a+Math.floor((o-a)/2),r===n||t>=e[r]&&t<e[r+1]){i=r;break}else e[r]<t?a=r+1:o=r-1;return i}},_e=Xt;function Qt(s,e,t){let i=s;if(e+t<i.length){for(;t--;)if((i[++e]&192)!==128)return!1;return!0}else return!1}function Br(s){let e=[],t=s,i=0,n=s.length;for(;i<n;){if(t[i]<128){e.push(String.fromCharCode(t[i])),++i;continue}else if(!(t[i]<192)){if(t[i]<224){if(Qt(t,i,1)){let r=(t[i]&31)<<6|t[i+1]&63;if(r>=128){e.push(String.fromCharCode(r&65535)),i+=2;continue}}}else if(t[i]<240){if(Qt(t,i,2)){let r=(t[i]&15)<<12|(t[i+1]&63)<<6|t[i+2]&63;if(r>=2048&&(r&63488)!==55296){e.push(String.fromCharCode(r&65535)),i+=3;continue}}}else if(t[i]<248&&Qt(t,i,3)){let r=(t[i]&7)<<18|(t[i+1]&63)<<12|(t[i+2]&63)<<6|t[i+3]&63;if(r>65536&&r<1114112){r-=65536,e.push(String.fromCharCode(r>>>10|55296)),e.push(String.fromCharCode(r&1023|56320)),i+=4;continue}}}e.push("\uFFFD"),++i}return e.join("")}var Zt=Br;var ge=(function(){let s=new ArrayBuffer(2);return new DataView(s).setInt16(0,256,!0),new Int16Array(s)[0]===256})(),Jt=class s{static parseScriptData(e,t,i){let n={};try{let r=s.parseValue(e,t,i),a=s.parseValue(e,t+r.size,i-r.size);n[r.data]=a.data}catch(r){u.e("AMF",r.toString())}return n}static parseObject(e,t,i){if(i<3)throw new X("Data not enough when parse ScriptDataObject");let n=s.parseString(e,t,i),r=s.parseValue(e,t+n.size,i-n.size),a=r.objectEnd;return{data:{name:n.data,value:r.data},size:n.size+r.size,objectEnd:a}}static parseVariable(e,t,i){return s.parseObject(e,t,i)}static parseString(e,t,i){if(i<2)throw new X("Data not enough when parse String");let r=new DataView(e,t,i).getUint16(0,!ge),a;return r>0?a=Zt(new Uint8Array(e,t+2,r)):a="",{data:a,size:2+r}}static parseLongString(e,t,i){if(i<4)throw new X("Data not enough when parse LongString");let r=new DataView(e,t,i).getUint32(0,!ge),a;return r>0?a=Zt(new Uint8Array(e,t+4,r)):a="",{data:a,size:4+r}}static parseDate(e,t,i){if(i<10)throw new X("Data size invalid when parse Date");let n=new DataView(e,t,i),r=n.getFloat64(0,!ge),a=n.getInt16(8,!ge);return r+=a*60*1e3,{data:new Date(r),size:10}}static parseValue(e,t,i){if(i<1)throw new X("Data not enough when parse Value");let n=new DataView(e,t,i),r=1,a=n.getUint8(0),o,l=!1;try{switch(a){case 0:o=n.getFloat64(1,!ge),r+=8;break;case 1:{o=!!n.getUint8(1),r+=1;break}case 2:{let c=s.parseString(e,t+1,i-1);o=c.data,r+=c.size;break}case 3:{o={};let c=0;for((n.getUint32(i-4,!ge)&16777215)===9&&(c=3);r<i-4;){let d=s.parseObject(e,t+r,i-r-c);if(d.objectEnd)break;o[d.data.name]=d.data.value,r+=d.size}r<=i-3&&(n.getUint32(r-1,!ge)&16777215)===9&&(r+=3);break}case 8:{o={},r+=4;let c=0;for((n.getUint32(i-4,!ge)&16777215)===9&&(c=3);r<i-8;){let d=s.parseVariable(e,t+r,i-r-c);if(d.objectEnd)break;o[d.data.name]=d.data.value,r+=d.size}r<=i-3&&(n.getUint32(r-1,!ge)&16777215)===9&&(r+=3);break}case 9:o=void 0,r=1,l=!0;break;case 10:{o=[];let c=n.getUint32(1,!ge);r+=4;for(let d=0;d<c;d++){let f=s.parseValue(e,t+r,i-r);o.push(f.data),r+=f.size}break}case 11:{let c=s.parseDate(e,t+1,i-1);o=c.data,r+=c.size;break}case 12:{let c=s.parseString(e,t+1,i-1);o=c.data,r+=c.size;break}default:r=i,u.w("AMF","Unsupported AMF value type "+a)}}catch(c){u.e("AMF",c.toString())}return{data:o,size:r,objectEnd:l}}},er=Jt;var ei=class{constructor(e){this.TAG="ExpGolomb",this._buffer=e,this._buffer_index=0,this._total_bytes=e.byteLength,this._total_bits=e.byteLength*8,this._current_word=0,this._current_word_bits_left=0}destroy(){this._buffer=null}_fillCurrentWord(){let e=this._total_bytes-this._buffer_index;if(e<=0)throw new X("ExpGolomb: _fillCurrentWord() but no bytes available");let t=Math.min(4,e),i=new Uint8Array(4);i.set(this._buffer.subarray(this._buffer_index,this._buffer_index+t)),this._current_word=new DataView(i.buffer).getUint32(0,!1),this._buffer_index+=t,this._current_word_bits_left=t*8}readBits(e){if(e>32)throw new ne("ExpGolomb: readBits() bits exceeded max 32bits!");if(e<=this._current_word_bits_left){let a=this._current_word>>>32-e;return this._current_word<<=e,this._current_word_bits_left-=e,a}let t=this._current_word_bits_left?this._current_word:0;t=t>>>32-this._current_word_bits_left;let i=e-this._current_word_bits_left;this._fillCurrentWord();let n=Math.min(i,this._current_word_bits_left),r=this._current_word>>>32-n;return this._current_word<<=n,this._current_word_bits_left-=n,t=t<<n|r,t}readBool(){return this.readBits(1)===1}readByte(){return this.readBits(8)}_skipLeadingZero(){let e;for(e=0;e<this._current_word_bits_left;e++)if((this._current_word&2147483648>>>e)!==0)return this._current_word<<=e,this._current_word_bits_left-=e,e;return this._fillCurrentWord(),e+this._skipLeadingZero()}readUEG(){let e=this._skipLeadingZero();return this.readBits(e+1)-1}readSEG(){let e=this.readUEG();return e&1?e+1>>>1:-1*(e>>>1)}},oe=ei;var ti=class s{static _ebsp2rbsp(e){let t=e,i=t.byteLength,n=new Uint8Array(i),r=0;for(let a=0;a<i;a++)a>=2&&t[a]===3&&t[a-1]===0&&t[a-2]===0||(n[r]=t[a],r++);return new Uint8Array(n.buffer,0,r)}static parseSPS(e){let t=e.subarray(1,4),i="avc1.";for(let H=0;H<3;H++){let q=t[H].toString(16);q.length<2&&(q="0"+q),i+=q}let n=s._ebsp2rbsp(e),r=new oe(n);r.readByte();let a=r.readByte();r.readByte();let o=r.readByte();r.readUEG();let l=s.getProfileString(a),c=s.getLevelString(o),d=1,f=420,_=[0,420,422,444],g=8,x=8;if((a===100||a===110||a===122||a===244||a===44||a===83||a===86||a===118||a===128||a===138||a===144)&&(d=r.readUEG(),d===3&&r.readBits(1),d<=3&&(f=_[d]),g=r.readUEG()+8,x=r.readUEG()+8,r.readBits(1),r.readBool())){let H=d!==3?8:12;for(let q=0;q<H;q++)r.readBool()&&(q<6?s._skipScalingList(r,16):s._skipScalingList(r,64))}r.readUEG();let m=r.readUEG();if(m===0)r.readUEG();else if(m===1){r.readBits(1),r.readSEG(),r.readSEG();let H=r.readUEG();for(let q=0;q<H;q++)r.readSEG()}let p=r.readUEG();r.readBits(1);let h=r.readUEG(),b=r.readUEG(),S=r.readBits(1);S===0&&r.readBits(1),r.readBits(1);let E=0,w=0,R=0,F=0;r.readBool()&&(E=r.readUEG(),w=r.readUEG(),R=r.readUEG(),F=r.readUEG());let D=1,v=1,T=0,L=!0,I=0,U=0;if(r.readBool()){if(r.readBool()){let H=r.readByte(),q=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2],Ne=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1];H>0&&H<16?(D=q[H-1],v=Ne[H-1]):H===255&&(D=r.readByte()<<8|r.readByte(),v=r.readByte()<<8|r.readByte())}if(r.readBool()&&r.readBool(),r.readBool()&&(r.readBits(4),r.readBool()&&r.readBits(24)),r.readBool()&&(r.readUEG(),r.readUEG()),r.readBool()){let H=r.readBits(32),q=r.readBits(32);L=r.readBool(),I=q,U=H*2,T=I/U}}let Q=1;(D!==1||v!==1)&&(Q=D/v);let te=0,$=0;if(d===0)te=1,$=2-S;else{let H=d===3?1:2,q=d===1?2:1;te=H,$=q*(2-S)}let J=(h+1)*16,le=(2-S)*((b+1)*16);J-=(E+w)*te,le-=(R+F)*$;let Se=Math.ceil(J*Q);return r.destroy(),r=null,{codec_mimetype:i,profile_idc:a,level_idc:o,profile_string:l,level_string:c,chroma_format_idc:d,bit_depth:g,bit_depth_luma:g,bit_depth_chroma:x,ref_frames:p,chroma_format:f,chroma_format_string:s.getChromaFormatString(f),frame_rate:{fixed:L,fps:T,fps_den:U,fps_num:I},sar_ratio:{width:D,height:v},codec_size:{width:J,height:le},present_size:{width:Se,height:le}}}static _skipScalingList(e,t){let i=8,n=8,r=0;for(let a=0;a<t;a++)n!==0&&(r=e.readSEG(),n=(i+r+256)%256),i=n===0?i:n}static getProfileString(e){switch(e){case 66:return"Baseline";case 77:return"Main";case 88:return"Extended";case 100:return"High";case 110:return"High10";case 122:return"High422";case 244:return"High444";default:return"Unknown"}}static getLevelString(e){return(e/10).toFixed(1)}static getChromaFormatString(e){switch(e){case 420:return"4:2:0";case 422:return"4:2:2";case 444:return"4:4:4";default:return"Unknown"}}},St=ti;var wr={OK:"OK",FORMAT_ERROR:"FormatError",FORMAT_UNSUPPORTED:"FormatUnsupported",CODEC_UNSUPPORTED:"CodecUnsupported"},P=wr;var ii=class s{static _ebsp2rbsp(e){let t=e,i=t.byteLength,n=new Uint8Array(i),r=0;for(let a=0;a<i;a++)a>=2&&t[a]===3&&t[a-1]===0&&t[a-2]===0||(n[r]=t[a],r++);return new Uint8Array(n.buffer,0,r)}static parseVPS(e){let t=s._ebsp2rbsp(e),i=new oe(t);i.readByte(),i.readByte();let n=i.readBits(4);i.readBits(2);let r=i.readBits(6),a=i.readBits(3),o=i.readBool();return{num_temporal_layers:a+1,temporal_id_nested:o}}static parseSPS(e){let t=s._ebsp2rbsp(e),i=new oe(t);i.readByte(),i.readByte();let n=0,r=0,a=0,o=0,l=i.readBits(4),c=i.readBits(3),d=i.readBool(),f=i.readBits(2),_=i.readBool(),g=i.readBits(5),x=i.readByte(),m=i.readByte(),p=i.readByte(),h=i.readByte(),b=i.readByte(),S=i.readByte(),E=i.readByte(),w=i.readByte(),R=i.readByte(),F=i.readByte(),y=i.readByte(),D=[],v=[];for(let O=0;O<c;O++)D.push(i.readBool()),v.push(i.readBool());if(c>0)for(let O=c;O<8;O++)i.readBits(2);for(let O=0;O<c;O++)D[O]&&(i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte(),i.readByte()),v[O]&&i.readByte();let T=i.readUEG(),L=i.readUEG();L==3&&i.readBits(1);let I=i.readUEG(),U=i.readUEG();i.readBool()&&(n+=i.readUEG(),r+=i.readUEG(),a+=i.readUEG(),o+=i.readUEG());let Q=i.readUEG(),te=i.readUEG(),$=i.readUEG(),J=i.readBool();for(let O=J?0:c;O<=c;O++)i.readUEG(),i.readUEG(),i.readUEG();let le=i.readUEG(),Se=i.readUEG(),H=i.readUEG(),q=i.readUEG(),Ne=i.readUEG(),Pi=i.readUEG();if(i.readBool()&&i.readBool())for(let Y=0;Y<4;Y++)for(let Z=0;Z<(Y===3?2:6);Z++)if(!i.readBool())i.readUEG();else{let se=Math.min(64,1<<4+(Y<<1));Y>1&&i.readSEG();for(let he=0;he<se;he++)i.readSEG()}let gr=i.readBool(),Pt=i.readBool();i.readBool()&&(i.readByte(),i.readUEG(),i.readUEG(),i.readBool());let ke=i.readUEG(),ot=0;for(let O=0;O<ke;O++){let Y=!1;if(O!==0&&(Y=i.readBool()),Y){O===ke&&i.readUEG(),i.readBool(),i.readUEG();let Z=0;for(let de=0;de<=ot;de++){let se=i.readBool(),he=!1;se||(he=i.readBool()),(se||he)&&Z++}ot=Z}else{let Z=i.readUEG(),de=i.readUEG();ot=Z+de;for(let se=0;se<Z;se++)i.readUEG(),i.readBool();for(let se=0;se<de;se++)i.readUEG(),i.readBool()}}if(i.readBool()){let O=i.readUEG();for(let Y=0;Y<O;Y++){for(let Z=0;Z<$+4;Z++)i.readBits(1);i.readBits(1)}}let lt=!1,dt=0,Me=1,Ie=1,ct=!1,je=1,Ye=1,Ni=i.readBool(),$i=i.readBool();if(i.readBool()){if(i.readBool()){let me=i.readByte(),ut=[1,12,10,16,40,24,20,32,80,18,15,64,160,4,3,2],ht=[1,11,11,11,33,11,11,11,33,11,11,33,99,3,2,1];me>0&&me<=16?(Me=ut[me-1],Ie=ht[me-1]):me===255&&(Me=i.readBits(16),Ie=i.readBits(16))}i.readBool()&&i.readBool(),i.readBool()&&(i.readBits(3),i.readBool(),i.readBool()&&(i.readByte(),i.readByte(),i.readByte())),i.readBool()&&(i.readUEG(),i.readUEG());let se=i.readBool(),he=i.readBool(),Xe=i.readBool();if(lt=i.readBool(),lt&&(i.readUEG(),i.readUEG(),i.readUEG(),i.readUEG()),i.readBool()&&(je=i.readBits(32),Ye=i.readBits(32),i.readBool()&&i.readUEG(),i.readBool())){let ht=1,_t=!1,ft=!1,Ge=!1;if(ht&&(_t=i.readBool(),ft=i.readBool(),_t||ft)){Ge=i.readBool(),Ge&&(i.readByte(),i.readBits(5),i.readBool(),i.readBits(5));let mt=i.readBits(4),Ht=i.readBits(4);Ge&&i.readBits(4),i.readBits(5),i.readBits(5),i.readBits(5)}for(let mt=0;mt<=c;mt++){let Ht=i.readBool();ct=Ht;let zi=!0,zt=1;Ht||(zi=i.readBool());let qi=!1;if(zi?i.readUEG():qi=i.readBool(),qi||(zt=i.readUEG()+1),_t){for(let Ze=0;Ze<zt;Ze++)i.readUEG(),i.readUEG(),Ge&&(i.readUEG(),i.readUEG());i.readBool()}if(ft){for(let Ze=0;Ze<zt;Ze++)i.readUEG(),i.readUEG(),Ge&&(i.readUEG(),i.readUEG());i.readBool()}}}if(i.readBool()){let me=i.readBool(),ut=i.readBool(),ht=i.readBool();dt=i.readUEG();let _t=i.readUEG(),ft=i.readUEG(),Ge=i.readUEG(),mt=i.readUEG()}}let ye=i.readBool(),fe=`hvc1.${g}.1.L${y}.B0`,Hi=L===1||L===2?2:1,Ot=L===1?2:1,Nt=I-(n+r)*Hi,$t=U-(a+o)*Ot,Gt=1;return Me!==1&&Ie!==1&&(Gt=Me/Ie),i.destroy(),i=null,{codec_mimetype:fe,profile_string:s.getProfileString(g),level_string:s.getLevelString(y),profile_idc:g,bit_depth:Q+8,ref_frames:1,chroma_format:L,chroma_format_string:s.getChromaFormatString(L),general_level_idc:y,general_profile_space:f,general_tier_flag:_,general_profile_idc:g,general_profile_compatibility_flags_1:x,general_profile_compatibility_flags_2:m,general_profile_compatibility_flags_3:p,general_profile_compatibility_flags_4:h,general_constraint_indicator_flags_1:b,general_constraint_indicator_flags_2:S,general_constraint_indicator_flags_3:E,general_constraint_indicator_flags_4:w,general_constraint_indicator_flags_5:R,general_constraint_indicator_flags_6:F,min_spatial_segmentation_idc:dt,constant_frame_rate:0,chroma_format_idc:L,bit_depth_luma_minus8:Q,bit_depth_chroma_minus8:te,frame_rate:{fixed:ct,fps:Ye/je,fps_den:je,fps_num:Ye},sar_ratio:{width:Me,height:Ie},codec_size:{width:Nt,height:$t},present_size:{width:Nt*Gt,height:$t}}}static parsePPS(e){let t=s._ebsp2rbsp(e),i=new oe(t);i.readByte(),i.readByte();let n=i.readUEG(),r=i.readUEG(),a=i.readBool(),o=i.readBool(),l=i.readBits(3),c=i.readBool(),d=i.readBool(),f=i.readUEG(),_=i.readUEG(),g=i.readSEG(),x=i.readBool(),m=i.readBool();if(i.readBool()){let v=i.readUEG()}let h=i.readSEG(),b=i.readSEG(),S=i.readBool(),E=i.readBool(),w=i.readBool(),R=i.readBool(),F=i.readBool(),y=i.readBool(),D=1;return y&&F?D=0:y?D=3:F&&(D=2),{parallelismType:D}}static getChromaFormatString(e){switch(e){case 0:return"4:0:0";case 1:return"4:2:0";case 2:return"4:2:2";case 3:return"4:4:4";default:return"Unknown"}}static getProfileString(e){switch(e){case 1:return"Main";case 2:return"Main10";case 3:return"MainSP";case 4:return"Rext";case 9:return"SCC";default:return"Unknown"}}static getLevelString(e){return(e/30).toFixed(1)}},tr=ii;function ir(s){return s.byteOffset%2===0&&s.byteLength%2===0}function rr(s){return s.byteOffset%4===0&&s.byteLength%4===0}function ri(s,e){for(let t=0;t<s.length;t++)if(s[t]!==e[t])return!1;return!0}function Mr(s,e){return ri(s,e)}function Ir(s,e){let t=new Uint16Array(s.buffer,s.byteOffset,s.byteLength/2),i=new Uint16Array(e.buffer,e.byteOffset,e.byteLength/2);return ri(t,i)}function Ur(s,e){let t=new Uint32Array(s.buffer,s.byteOffset,s.byteLength/4),i=new Uint32Array(e.buffer,e.byteOffset,e.byteLength/4);return ri(t,i)}function Vr(s,e){return s.byteLength!==e.byteLength?!1:rr(s)&&rr(e)?Ur(s,e):ir(s)&&ir(e)?Ir(s,e):Mr(s,e)}var ve=Vr;var rt="av1-parser";var ni=class s{static parseOBUs(e,t){for(let i=0;i<e.byteLength;){let n=i,r=(e[i]&128)>>7,a=(e[i]&120)>>3,o=(e[i]&4)!==0,l=(e[i]&2)!==0,c=(e[i]&1)!==0;i+=1;let d=0,f=0;o&&(i+=1);let _=Number.POSITIVE_INFINITY;if(l){_=0;for(let g=0;;g++){let x=e[i++];if(_|=(x&127)<<g*7,(x&128)===0)break}}a===1?t={...s.parseSeuqneceHeader(e.subarray(i,i+_)),sequence_header_data:e.subarray(n,i+_)}:(a==3&&t||a==6&&t)&&(t=s.parseOBUFrameHeader(e.subarray(i,i+_),d,f,t)),i+=_}return t}static stripLeadingObuFraming(e){if(e.length===0)return e;function t(r){let a=0,o=(r[a]&128)>>7!==0,l=(r[a]&120)>>3,c=(r[a]&4)!==0,d=(r[a]&2)!==0,f=(r[a]&1)!==0;if(a+=1,o&&u.e(rt,"Invalid OBU header: forbidden bit is set"),c&&(a+=1),d){let _=0;for(let g=0;;g++){if(a>=r.length)return new Uint8Array(0);let x=r[a++];if(_|=(x&127)<<g*7,(x&128)===0)break}return r.subarray(a+_)}else return r.subarray(a)}let i=(e[0]&120)>>3,n=e;switch(i){case 2:n=t(e);break;case 7:u.e(rt,"OBU_REDUNDANT_FRAME_HEADER is not supported");break;case 8:u.e(rt,"OBU_TILE_LIST is not supported");break;case 15:u.e(rt,"OBU_PADDING is not supported");break;default:break}return n}static parseSeuqneceHeader(e){let t=new oe(e),i=t.readBits(3),n=t.readBool(),r=t.readBool(),a=-1,o=0,l=!0,c=0,d=1,f=!1,_=!1,g=-1,x=-1,m=[];if(r)m.push({operating_point_idc:0,level:t.readBits(5),tier:0});else{if(t.readBool()){let de=t.readBits(32),se=t.readBits(32),he=t.readBool(),Xe=0;if(he){let Fe=0;for(;t.readBits(1)===0;)Fe+=1;Fe>=32?Xe=4294967295:Xe=(1<<Fe)-1+t.readBits(Fe)}if(d=de,c=se,o=c/d,l=he,t.readBool()){g=t.readBits(5);let Fe=t.readBits(32);x=t.readBits(5),a=t.readBits(5)}}let Y=t.readBool(),Z=t.readBits(5);for(let de=0;de<=Z;de++){let se=t.readBits(12),he=t.readBits(5),Xe=he>7?t.readBits(1):0;if(m.push({operating_point_idc:se,level:he,tier:Xe}),f){let Qe=t.readBool();if(m[m.length-1].decoder_model_present_for_this_op=Qe,Qe){let Fe=t.readBits(g+1),me=t.readBits(g+1),ut=t.readBool()}}if(Y&&t.readBool()){let Fe=t.readBits(4)}}}let p=0,{level:h,tier:b}=m[p],S=t.readBits(4),E=t.readBits(4),w=t.readBits(S+1)+1,R=t.readBits(E+1)+1,F=!1;r||(F=t.readBool());let y,D;if(F){let O=t.readBits(4),Y=t.readBits(4)}let v=2,T=2,L=t.readBool(),I=t.readBool(),U=t.readBool(),z=!1,Q=!1,te=!1,$=!1,J=!1,le=!1,Se=!1,H=v,q=T,Ne=0;if(!r){if(z=t.readBool(),Q=t.readBool(),te=t.readBool(),$=t.readBool(),J=t.readBool(),J){let Y=t.readBool(),Z=t.readBool()}t.readBool()?H=v:H=t.readBits(1),H?t.readBool()?q=T:q=t.readBits(1):q=T,J?Ne=t.readBits(3)+1:Ne=0}let Pi=t.readBool(),k=t.readBool(),gr=t.readBool(),Pt=t.readBool(),$e=8;i===2&&Pt?$e=t.readBool()?12:10:$e=Pt?10:8;let ke=!1;i!==1&&(ke=t.readBool());let ot=ke?1:3,Oi=t.readBool(),lt=1,dt=2,Me=2,Ie=13,ct=2,je=0,Ye=dt,Ni=Me,$i=ct;if(Oi){let O=t.readBits(8),Y=t.readBits(8),Z=t.readBits(8)}let Gi=1,ye=1,fe=1;if(ke){Gi=t.readBits(1),ye=1,fe=1;let O=0,Y=0}else{let O=1;if(Ye===lt&&Ni===Ie&&$i===je)O=1,ye=1,fe=1;else{if(O=t.readBits(1),i==0)ye=1,fe=1;else if(i==1)ye=0,fe=0;else if($e==12)if(t.readBits(1)){let de=t.readBits(1)}else{let de=0}else ye=1,fe=0;if(ye&&fe){let Z=t.readBits(2)}let Y=t.readBits(1)}}let Hi=t.readBool();t.destroy();let Ot=`av01.${i}.${s.getLevelString(h,b)}.${$e.toString(10).padStart(2,"0")}`,Nt=1,$t=1,Gt=1;return{codec_mimetype:Ot,level:h,tier:b,level_string:s.getLevelString(h,b),profile_idc:i,profile_string:`${i}`,bit_depth:$e,ref_frames:1,chroma_format:s.getChromaFormat(ke,ye,fe),chroma_format_string:s.getChromaFormatString(ke,ye,fe),sequence_header:{frame_id_numbers_present_flag:F,additional_frame_id_length_minus_1:D,delta_frame_id_length_minus_2:y,reduced_still_picture_header:r,decoder_model_info_present_flag:f,operating_points:m,buffer_removal_time_length_minus_1:x,equal_picture_interval:l,seq_force_screen_content_tools:H,seq_force_integer_mv:q,enable_order_hint:J,order_hint_bits:Ne,enable_superres:Pi,frame_width_bit:S+1,frame_height_bit:E+1,max_frame_width:w,max_frame_height:R,frame_presentation_time_length_minus_1:a},keyframe:void 0,frame_rate:{fixed:l,fps:c/d,fps_den:d,fps_num:c}}}static parseOBUFrameHeader(e,t,i,n){let{sequence_header:r}=n,a=new oe(e),o=8,l=2,c=2,d=7,f=r.max_frame_width,_=r.max_frame_height,g=f,x=_,m=0;r.frame_id_numbers_present_flag&&(m=r.additional_frame_id_length_minus_1+r.delta_frame_id_length_minus_2+3);let p=(1<<o)-1,h=!1,b=0,S=!0,E=!0,w=!1,R=!1;if(!r.reduced_still_picture_header){if(h=a.readBool(),h)return n;if(b=a.readBits(2),S=b===2||b===0,E=a.readBool(),E&&r.decoder_model_info_present_flag&&!r.equal_picture_interval){let $=r.frame_presentation_time_length_minus_1+1,J=a.readBits($);u.v(rt,`frame_presentation_time: ${J}`)}E?w=b!==0:w=a.readBool(),b===3||b===0&&E?R=!0:R=a.readBool()}n.keyframe=S;let F=a.readBool(),y=r.seq_force_screen_content_tools;r.seq_force_screen_content_tools===l&&(y=a.readBits(1));let D=S?1:0;y&&(D=r.seq_force_integer_mv,r.seq_force_integer_mv==c&&(D=a.readBits(1)));let v=0;r.frame_id_numbers_present_flag&&(v=a.readBits(m));let T=!1;b==3?T=!0:r.reduced_still_picture_header?T=!1:T=a.readBool();let L=a.readBits(r.order_hint_bits),I=d;if(S||R||(I=a.readBits(3)),r.decoder_model_info_present_flag&&a.readBool()){let J=r.operating_points_cnt_minus_1??0;for(let le=0;le<=J;le++)if(r.operating_points[le].decoder_model_present_for_this_op){let Se=r.operating_points[le].operating_point_idc,H=Se>>t&1,q=Se>>i+8&1;(Se===0||H&&q)&&a.readBits(r.buffer_removal_time_length_minus_1+1)}}let U=0,z=0,Q=0,te=p;if(b===3||b==0&&E||(te=a.readBits(8)),(!S||te!==p)&&R&&r.enable_order_hint)for(let $=0;$<o;$++)a.readBits(r.order_hint_bits);if(S){let $=s.frameSizeAndRenderSize(a,T,r);n.codec_size={width:$.FrameWidth,height:$.FrameHeight},n.present_size={width:$.RenderWidth,height:$.RenderHeight},n.sar_ratio={width:$.RenderWidth/$.FrameWidth,height:$.RenderHeight/$.FrameHeight}}return a.destroy(),n}static frameSizeAndRenderSize(e,t,i){let n=i.max_frame_width,r=i.max_frame_height;t&&(n=e.readBits(i.frame_width_bit)+1,r=e.readBits(i.frame_height_bit)+1);let a=!1;i.enable_superres&&(a=e.readBool());let o=8;a&&(o=e.readBits(3)+9);let l=n;n=Math.floor((l*8+o/2)/o);let c=e.readBool(),d=l,f=r;return c&&(d=e.readBits(16)+1,f=e.readBits(16)+1),{UpscaledWidth:l,FrameWidth:n,FrameHeight:r,RenderWidth:d,RenderHeight:f}}static getLevelString(e,t){return`${e.toString(10).padStart(2,"0")}${t===0?"M":"H"}`}static getChromaFormat(e,t,i){return e?0:t===0&&i===0?3:t===1&&i===0?2:t===1&&i===1?1:Number.NaN}static getChromaFormatString(e,t,i){return e?"4:0:0":t===0&&i===0?"4:4:4":t===1&&i===0?"4:2:2":t===1&&i===1?"4:2:0":"Unknown"}},Te=ni;var ee=(...s)=>{throw new Error("Callback function has not been implemented.")},Ee=(...s)=>{u.v("No operation callback invoked with arguments:",s)};var Pr={width:0,height:0,renderWidth:0,renderHeight:0,profile:0,isValid:!1},yt=class{static parseVp9Header(e){let t={...Pr};if(e.length<10)return t;let i=new oe(e);if(i.readBits(2)!==2||(t.profile=i.readBits(2),t.profile===3&&i.readBits(1),i.readBool())||i.readBool())return t;let r=i.readBool(),a=i.readBool(),o=i.readBits(24),l=8;t.profile>=2&&(l=i.readBool()?12:10);let c=i.readBits(3),d;(y=>(y[y.CS_UNKNOWN=0]="CS_UNKNOWN",y[y.CS_BT_601=1]="CS_BT_601",y[y.CS_BT_709=2]="CS_BT_709",y[y.CS_SMPTE_170=3]="CS_SMPTE_170",y[y.CS_SMPTE_240=4]="CS_SMPTE_240",y[y.CS_BT_2020=5]="CS_BT_2020",y[y.CS_RESERVED=6]="CS_RESERVED",y[y.CS_RGB=7]="CS_RGB"))(d||={}),c!==7?(i.readBool(),(t.profile===1||t.profile===3)&&(i.readBool(),i.readBool(),i.readBool())):(t.profile===1||t.profile===3)&&i.readBool();let f=i.readBits(16)+1,_=i.readBits(16)+1,g=i.readBool(),x=f,m=_;return g&&(x=i.readBits(16)+1,m=i.readBits(16)+1),t.width=f,t.height=_,t.renderWidth=x,t.renderHeight=m,t.isValid=!0,i.destroy(),t}};var nt=(k=>(k[k.kNull=0]="kNull",k[k.kAAC_Main=1]="kAAC_Main",k[k.kAAC_LC=2]="kAAC_LC",k[k.kAAC_SSR=3]="kAAC_SSR",k[k.kAAC_LTP=4]="kAAC_LTP",k[k.kAAC_SBR=5]="kAAC_SBR",k[k.kAAC_Scalable=6]="kAAC_Scalable",k[k.kTwinVQ=7]="kTwinVQ",k[k.kCELP=8]="kCELP",k[k.kHVXC=9]="kHVXC",k[k.kTTSI=12]="kTTSI",k[k.kMainSynthetic=13]="kMainSynthetic",k[k.kWavetableSynthesis=14]="kWavetableSynthesis",k[k.kGeneralMIDI=15]="kGeneralMIDI",k[k.kAlgorithmicSynthesis=16]="kAlgorithmicSynthesis",k[k.kER_AAC_LC=17]="kER_AAC_LC",k[k.kER_AAC_LTP=19]="kER_AAC_LTP",k[k.kER_AAC_Scalable=20]="kER_AAC_Scalable",k[k.kER_TwinVQ=21]="kER_TwinVQ",k[k.kER_BSAC=22]="kER_BSAC",k[k.kER_AAC_LD=23]="kER_AAC_LD",k[k.kER_CELP=24]="kER_CELP",k[k.kER_HVXC=25]="kER_HVXC",k[k.kER_HILN=26]="kER_HILN",k[k.kER_Parametric=27]="kER_Parametric",k[k.kSSC=28]="kSSC",k[k.kAAC_PS=29]="kAAC_PS",k[k.kMPEGSurround=30]="kMPEGSurround",k[k.kLayer1=32]="kLayer1",k[k.kLayer2=33]="kLayer2",k[k.kLayer3=34]="kLayer3",k[k.kDST=35]="kDST",k[k.kALS=36]="kALS",k[k.kSLS=37]="kSLS",k[k.kSLS_NonCore=38]="kSLS_NonCore",k[k.kER_AAC_ELD=39]="kER_AAC_ELD",k[k.kSMR_Simple=40]="kSMR_Simple",k[k.kSMR_Main=41]="kSMR_Main",k[k.kUSAC=42]="kUSAC",k[k.kSAOC=43]="kSAOC",k[k.kLD_MpegSurround=44]="kLD_MpegSurround",k[k.kSAOC_DE=45]="kSAOC_DE",k))(nt||{});var Pe=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350];var He=class{audio_object_type=2;sampling_freq_index=4;sampling_frequency=Pe[4];channel_config=2;data=new Uint8Array;constructor(e){if(e===void 0||e.byteLength<2){e!==void 0&&(this.data=e);return}this.data=e,this.audio_object_type=e[0]>>>3,this.sampling_freq_index=(e[0]&7)<<1|e[1]>>>7,this.sampling_frequency=Pe[this.sampling_freq_index]??0,this.channel_config=(e[1]&120)>>>3}};var ze=class{config;sampling_rate;channel_count;codec_mimetype;original_codec_mimetype;constructor(e){let t,i=e.audio_object_type,n=e.audio_object_type,r=e.sampling_freq_index,a=e.channel_config,o=0,l=navigator.userAgent.toLowerCase();l.indexOf("firefox")!==-1?r>=6?(n=5,t=new Array(4),o=r-3):(n=2,t=new Array(2),o=r):l.indexOf("android")!==-1?(n=2,t=new Array(2),o=r):(n=5,o=r,t=new Array(4),r>=6&&(o=r-3)),t[0]=n<<3,t[0]|=(r&15)>>>1,t[1]=(r&15)<<7,t[1]|=(a&15)<<3,n===5&&(t[1]|=(o&15)>>>1,t[2]=(o&1)<<7,t[2]|=8,t[3]=0),this.config=t,this.sampling_rate=Pe[r],this.channel_count=a,this.codec_mimetype="mp4a.40."+n,this.original_codec_mimetype="mp4a.40."+i}};var ai=(p=>(p[p.SequenceStart=0]="SequenceStart",p[p.CodedFrames=1]="CodedFrames",p[p.SequenceEnd=2]="SequenceEnd",p[p.Reserved3=3]="Reserved3",p[p.MultichannelConfig=4]="MultichannelConfig",p[p.Multitrack=5]="Multitrack",p[p.Reserved6=6]="Reserved6",p[p.ModEx=7]="ModEx",p[p.Reserved8=8]="Reserved8",p[p.Reserved9=9]="Reserved9",p[p.Reserved10=10]="Reserved10",p[p.Reserved11=11]="Reserved11",p[p.Reserved12=12]="Reserved12",p[p.Reserved13=13]="Reserved13",p[p.Reserved14=14]="Reserved14",p[p.Reserved15=15]="Reserved15",p))(ai||{});var ar=(i=>(i[i.Unspecified=0]="Unspecified",i[i.Native=1]="Native",i[i.Custom=2]="Custom",i))(ar||{}),or=(y=>(y[y.FrontLeft=1]="FrontLeft",y[y.FrontRight=2]="FrontRight",y[y.FrontCenter=4]="FrontCenter",y[y.LowFrequency1=8]="LowFrequency1",y[y.BackLeft=16]="BackLeft",y[y.BackRight=32]="BackRight",y[y.FrontLeftCenter=64]="FrontLeftCenter",y[y.FrontRightCenter=128]="FrontRightCenter",y[y.BackCenter=256]="BackCenter",y[y.SideLeft=512]="SideLeft",y[y.SideRight=1024]="SideRight",y[y.TopCenter=2048]="TopCenter",y[y.TopFrontLeft=4096]="TopFrontLeft",y[y.TopFrontCenter=8192]="TopFrontCenter",y[y.TopFrontRight=16384]="TopFrontRight",y[y.TopBackLeft=32768]="TopBackLeft",y[y.TopBackCenter=65536]="TopBackCenter",y[y.TopBackRight=131072]="TopBackRight",y[y.LowFrequency2=262144]="LowFrequency2",y[y.TopSideLeft=524288]="TopSideLeft",y[y.TopSideRight=1048576]="TopSideRight",y[y.BottomFrontCenter=2097152]="BottomFrontCenter",y[y.BottomFrontLeft=4194304]="BottomFrontLeft",y[y.BottomFrontRight=8388608]="BottomFrontRight",y))(or||{}),lr=(v=>(v[v.FrontLeft=0]="FrontLeft",v[v.FrontRight=1]="FrontRight",v[v.FrontCenter=2]="FrontCenter",v[v.LowFrequency1=3]="LowFrequency1",v[v.BackLeft=4]="BackLeft",v[v.BackRight=5]="BackRight",v[v.FrontLeftCenter=6]="FrontLeftCenter",v[v.FrontRightCenter=7]="FrontRightCenter",v[v.BackCenter=8]="BackCenter",v[v.SideLeft=9]="SideLeft",v[v.SideRight=10]="SideRight",v[v.TopCenter=11]="TopCenter",v[v.TopFrontLeft=12]="TopFrontLeft",v[v.TopFrontCenter=13]="TopFrontCenter",v[v.TopFrontRight=14]="TopFrontRight",v[v.TopBackLeft=15]="TopBackLeft",v[v.TopBackCenter=16]="TopBackCenter",v[v.TopBackRight=17]="TopBackRight",v[v.LowFrequency2=18]="LowFrequency2",v[v.TopSideLeft=19]="TopSideLeft",v[v.TopSideRight=20]="TopSideRight",v[v.BottomFrontCenter=21]="BottomFrontCenter",v[v.BottomFrontLeft=22]="BottomFrontLeft",v[v.BottomFrontRight=23]="BottomFrontRight",v[v.Unused=254]="Unused",v[v.Unknown=255]="Unknown",v))(lr||{});function nr(s){switch(s){case 0:return"SCE";case 1:return"CPE";case 2:return"CCE";case 3:return"LFE";case 4:return"DSE";case 5:return"PCE";case 6:return"FIL";case 7:return"END";default:return`unknown(${s})`}}function sr(s){let e=s.readBits(4),t=s.readBits(2),i=s.readBits(4),n=s.readBits(4),r=s.readBits(4),a=s.readBits(4),o=s.readBits(2),l=s.readBits(3),c=s.readBits(4);return`PCE instanceTag=${e} objectType=${t} samplingIndex=${i} front=${n} side=${r} back=${a} lfe=${o} assoc=${l} cc=${c}`}function si(s,e){let t=e;for(;t>0;){let i=Math.min(t,32);s.readBits(i),t-=i}}function Or(s){if(!s||s.byteLength===0)return"empty-payload";let e=new oe(s);try{let t=e.readBits(3),i=nr(t);if(t===5)return`firstElement=${sr(e)}`;if(t!==6)return`firstElement=${i}`;let n=e.readBits(4);n===15&&(n+=e.readBits(8)-1);let r="",a="";if(n>0){let d=e.readBits(4),f=n*8-4;if(d===13)r=" SBR=EXT_SBR_DATA",si(e,f);else if(d===14)r=" SBR=EXT_SBR_DATA_CRC",si(e,f);else{let _=[],g=f;for(;g>=8;)_.push(e.readBits(8)),g-=8;g>0&&si(e,g);let x=_.map(m=>m>=32&&m<=126?String.fromCharCode(m):".").join("");/[A-Za-z]{3}/.test(x)&&(a=` fillAscii="${x.trim()}"(encoder-padding)`)}}let o=e.readBits(3),l=nr(o),c=o===1?`${l}(stereo-pair)`:o===0?`${l}(mono)`:o===3?`${l}(low-freq)`:l;return o===5?`firstElement=FIL fillBytes=${n}${r}${a} nextElement=${sr(e)}`:`firstElement=FIL fillBytes=${n}${r}${a} nextElement=${c}`}catch(t){return`probeError=${t?.message||String(t)}`}finally{e.destroy()}}var dr=(a=>(a[a.Unknown=0]="Unknown",a[a.Mp3=1]="Mp3",a[a.Aac=2]="Aac",a[a.Opus=3]="Opus",a[a.Flac=4]="Flac",a[a.Lpcm=5]="Lpcm",a))(dr||{}),At={type:"audio",codecType:0,codec:"Unknown",originalCodec:"Unknown",trackId:NaN,timescale:NaN,preSkipSamples:0,duration:NaN,audioSampleRate:NaN,inputSampleRate:NaN,outputGain:0,channelCount:NaN,bitsPerSample:NaN,littleEndian:!1,refFrameDuration:NaN},Rt=(a=>(a[a.Unknown=0]="Unknown",a[a.Avc=1]="Avc",a[a.Hevc=2]="Hevc",a[a.Vp8=3]="Vp8",a[a.Vp9=4]="Vp9",a[a.Av1=5]="Av1",a))(Rt||{}),vt={type:"video",codecType:0,codec:"Unknown",trackId:NaN,timescale:NaN,duration:NaN,codecWidth:NaN,codecHeight:NaN,presentWidth:NaN,presentHeight:NaN,profile:"",level:"",bitDepth:NaN,chromaFormat:NaN,colorRange:NaN,colourPrimaries:NaN,transferCharacteristics:NaN,matrixCoefficients:NaN,sarRatio:{width:NaN,height:NaN},frameRate:{fixed:!1,fps:NaN,fps_num:NaN,fps_den:NaN},refFrameDuration:NaN};function Nr(s,e){return s[e]<<24|s[e+1]<<16|s[e+2]<<8|s[e+3]}function Et(s,e){return s.getInt8(e)<<16|s.getUint8(e+1)<<8|s.getUint8(e+2)}var oi=class s{static TAG="FLVDemuxer";_config;_remuxer;_onError=ee;_onMediaInfo=ee;_onScriptMetadata=ee;_onScriptData=ee;_onTrackMetadata=ee;_onTrackData=ee;_onVideoTracksDiscovered=Ee;_dataOffset;_firstParse=!0;_hasAudio;_hasVideo;_hasAudioFlagOverrided=!1;_hasVideoFlagOverrided=!1;_mediaInfo;_scriptData;_audioMetadata;_videoMetadataByTrackId=new Map;_naluLengthSize=4;_timestampBase=0;_timescale=1e3;_duration=0;_durationOverrided=!1;_referenceFrameRate={fixed:!0,fps:23.976,fps_num:23976,fps_den:1e3};static _flvSoundRateTable=[5500,11025,22050,44100,48e3];static _mpegAudioV10SampleRateTable=[44100,48e3,32e3,0];static _mpegAudioV20SampleRateTable=[22050,24e3,16e3,0];static _mpegAudioV25SampleRateTable=[11025,12e3,8e3,0];static _mpegAudioL1BitRateTable=[0,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1];static _mpegAudioL2BitRateTable=[0,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1];static _mpegAudioL3BitRateTable=[0,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1];_videoTracksById=new Map;_currentVideoTrackId=void 0;_audioTrack={type:"audio",id:2,sequenceNumber:0,frames:[],length:0};_hasLoggedFirstAacPayloadProbe=!1;_hasLoggedAacPceDetection=!1;_hasLoggedAacSbrDetection=!1;_hasObservedAacPce=!1;_pendingAacMultichannelChannelCount=void 0;_aacPayloadProbeFrameIndex=0;constructor(e,t,i){this._config=t,this._remuxer=i,this._dataOffset=e.dataOffset,this._hasAudio=e.hasAudioTrack,this._hasVideo=e.hasVideoTrack,this._mediaInfo=new _e,this._mediaInfo.hasAudio=e.hasAudioTrack,this._mediaInfo.hasVideo=e.hasVideoTrack}destroy(){this._onError=Ee,this._onMediaInfo=Ee,this._onScriptMetadata=Ee,this._onScriptData=Ee,this._onTrackMetadata=Ee,this._onTrackData=Ee,this._onVideoTracksDiscovered=Ee,this._hasLoggedFirstAacPayloadProbe=!1,this._hasLoggedAacPceDetection=!1,this._hasLoggedAacSbrDetection=!1,this._hasObservedAacPce=!1,this._pendingAacMultichannelChannelCount=void 0,this._aacPayloadProbeFrameIndex=0}_probeAacPayload(e){if(!e||e.byteLength===0)return;this._aacPayloadProbeFrameIndex++;let t=Or(e),i=Array.from(e.subarray(0,Math.min(8,e.byteLength))).map(r=>r.toString(16).padStart(2,"0")).join(" ");this._hasLoggedFirstAacPayloadProbe||(u.v(s.TAG,`First AAC CodedFrame: size=${e.byteLength} bytes[0..7]=${i} ${t}`),this._hasLoggedFirstAacPayloadProbe=!0);let n=t.includes("PCE");n&&(this._hasObservedAacPce=!0),!this._hasLoggedAacPceDetection&&n&&(u.v(s.TAG,`AAC CodedFrame[${this._aacPayloadProbeFrameIndex}] contains visible ${t}`),this._hasLoggedAacPceDetection=!0),!this._hasLoggedAacSbrDetection&&t.includes("SBR=")&&(u.v(s.TAG,`AAC CodedFrame[${this._aacPayloadProbeFrameIndex}] backward-compatible SBR detected: ${t}`),this._hasLoggedAacSbrDetection=!0),n&&this._applyPendingAacMultichannelConfig()}static probe(e){let t=new Uint8Array(e);if(t.byteLength<9)return{needMoreData:!0};let i={match:!1};if(t[0]!==70||t[1]!==76||t[2]!==86||t[3]!==1)return i;let n=(t[4]&4)>>>2!==0,r=(t[4]&1)!==0,a=Nr(t,5);return a<9?i:{match:!0,consumed:a,dataOffset:a,hasAudioTrack:n,hasVideoTrack:r}}bindDataSource(e){return e.onDataArrival=this.parseChunks.bind(this),this}get onTrackMetadata(){return this._onTrackMetadata}set onTrackMetadata(e){this._onTrackMetadata=e}get onMediaInfo(){return this._onMediaInfo}set onMediaInfo(e){this._onMediaInfo=e}get onScriptMetadata(){return this._onScriptMetadata}set onScriptMetadata(e){this._onScriptMetadata=e}get onScriptData(){return this._onScriptData}set onScriptData(e){this._onScriptData=e}get onError(){return this._onError}set onError(e){this._onError=e}get onTrackData(){return this._onTrackData}set onTrackData(e){this._onTrackData=e}get onVideoTracksDiscovered(){return this._onVideoTracksDiscovered}set onVideoTracksDiscovered(e){this._onVideoTracksDiscovered=e}get timestampBase(){return this._timestampBase}set timestampBase(e){this._timestampBase=e}get overridedDuration(){return this._duration}set overridedDuration(e){this._durationOverrided=!0,this._duration=e,this._mediaInfo.duration=e}set overridedHasAudio(e){this._hasAudioFlagOverrided=!0,this._hasAudio=e,this._mediaInfo.hasAudio=e}set overridedHasVideo(e){this._hasVideoFlagOverrided=!0,this._hasVideo=e,this._mediaInfo.hasVideo=e}resetMediaInfo(){this._mediaInfo=new _e}_getOrCreateVideoTrack(e){return this._videoTracksById.has(e)||this._videoTracksById.set(e,{type:"video",id:e,sequenceNumber:0,frames:[],length:0}),this._videoTracksById.get(e)}_getDefaultVideoTrack(){if(this._videoTracksById.has(0))return this._videoTracksById.get(0);if(this._videoTracksById.size>0){let e=Math.min(...this._videoTracksById.keys());return this._videoTracksById.get(e)}return this._getOrCreateVideoTrack(0)}_getCurrentVideoTrack(){return this._currentVideoTrackId!==void 0?this._getOrCreateVideoTrack(this._currentVideoTrackId):{type:"video",id:-1,sequenceNumber:0,frames:[],length:0}}_flushPendingTrackDataBeforeMetadataRefresh(){let e=this._getCurrentVideoTrack();this._audioTrack.frames.length===0&&e.frames.length===0||this._onTrackData(this._audioTrack,e)}_dispatchVideoTrackMetadata(e){this._currentVideoTrackId===void 0&&(this._currentVideoTrackId=e.trackId),e.trackId===this._currentVideoTrackId&&(this._remuxer.isVideoMetadataDispatched&&this._flushPendingTrackDataBeforeMetadataRefresh(),this._onTrackMetadata(e)),this._onVideoTracksDiscovered([...this._videoMetadataByTrackId.values()])}parseChunks(e,t){let i=0;if(t===0)if(e.byteLength>13){let n=s.probe(e);if("match"in n&&n.match===!0)i=n.dataOffset,this._hasAudio=n.hasAudioTrack&&this._hasAudio,this._hasVideo=n.hasVideoTrack&&this._hasVideo;else return 0}else return 0;for(this._firstParse&&(this._firstParse=!1,t+i!==this._dataOffset&&u.w(s.TAG,"First time parsing but chunk byteStart invalid!"),new DataView(e,i).getUint32(0,!1)!==0&&u.w(s.TAG,"PrevTagSize0 !== 0 !!!"),i+=4);i<e.byteLength;){let n=new DataView(e,i);if(i+11+4>e.byteLength)break;let r=n.getUint8(0),a=n.getUint32(0,!1)&16777215;if(i+11+a+4>e.byteLength)break;if(r!==8&&r!==9&&r!==18){u.w(s.TAG,`Unsupported tag type ${r}, skipped`),i+=11+a+4;continue}let o=n.getUint8(4),l=n.getUint8(5),c=n.getUint8(6),d=n.getUint8(7),f=c|l<<8|o<<16|d<<24;(n.getUint32(7,!1)&16777215)!==0&&u.w(s.TAG,"Meet tag which has StreamID != 0!");let g=i+11;switch(r){case 8:this._hasAudio&&this._parseAudioData(e,g,a,f);break;case 9:this._hasVideo&&this._parseVideoData(e,g,a,f,t+i);break;case 18:this._parseScriptData(e,g,a);break}let x=n.getUint32(11+a,!1);x!==11+a&&u.w(s.TAG,`Invalid PrevTagSize ${x}`),i+=11+a+4}return this._onTrackData(this._audioTrack,this._getCurrentVideoTrack()),i}_parseScriptData(e,t,i){let n=er.parseScriptData(e,t,i);if(n.hasOwnProperty("onMetaData")){if(n.onMetaData==null||typeof n.onMetaData!="object"){u.w(s.TAG,"Invalid onMetaData structure!");return}this._scriptData&&u.w(s.TAG,"Found another onMetaData tag!"),this._scriptData=n;let r=this._scriptData.onMetaData;if(this._onScriptMetadata&&this._onScriptMetadata(Object.assign({},r)),typeof r.hasAudio=="boolean"&&this._hasAudioFlagOverrided===!1&&(this._hasAudio=r.hasAudio,this._mediaInfo.hasAudio=this._hasAudio),typeof r.hasVideo=="boolean"&&this._hasVideoFlagOverrided===!1&&(this._hasVideo=r.hasVideo,this._mediaInfo.hasVideo=this._hasVideo),typeof r.audiodatarate=="number"&&(this._mediaInfo.audioDataRate=r.audiodatarate),typeof r.videodatarate=="number"&&(this._mediaInfo.videoDataRate=r.videodatarate),typeof r.width=="number"&&(this._mediaInfo.width=r.width),typeof r.height=="number"&&(this._mediaInfo.height=r.height),typeof r.duration=="number"){if(!this._durationOverrided){let a=Math.floor(r.duration*this._timescale);this._duration=a,this._mediaInfo.duration=a}}else this._mediaInfo.duration=0;if(typeof r.framerate=="number"){let a=Math.floor(r.framerate*1e3);if(a>0){let o=a/1e3;this._referenceFrameRate.fixed=!0,this._referenceFrameRate.fps=o,this._referenceFrameRate.fps_num=a,this._referenceFrameRate.fps_den=1e3,this._mediaInfo.fps=o}}if(typeof r.keyframes=="object"){this._mediaInfo.hasKeyframesIndex=!0;let a=r.keyframes;this._mediaInfo.keyframesIndex=this._parseKeyframesIndex(a),r.keyframes=null}else this._mediaInfo.hasKeyframesIndex=!1;this._mediaInfo.metadata=r,u.v(s.TAG,"Parsed flv.onMetaData"),this._mediaInfo.isComplete()&&this._onMediaInfo(this._mediaInfo)}Object.keys(n).length>0&&this._onScriptData&&this._onScriptData(Object.assign({},n))}_parseKeyframesIndex(e){let t=[],i=[];for(let n=1;n<e.times.length;n++){let r=this._timestampBase+Math.floor(e.times[n]*1e3);t.push(r),i.push(e.filepositions[n])}return{times:t,filepositions:i}}_parseAudioData(e,t,i,n){if(i<=1){u.w(s.TAG,"Flv: Invalid audio packet, missing SoundData payload!");return}if(this._hasAudioFlagOverrided===!0&&this._hasAudio===!1)return;let a=new DataView(e,t,i).getUint8(0),o=a>>>4;if(o===9){if(i<=5){u.w(s.TAG,"Flv: Invalid audio packet, missing AudioFourCC in Ehnanced FLV payload!");return}let x=a&15,m=String.fromCharCode(...new Uint8Array(e,t,i).slice(1,5));switch(m){case"Opus":this._parseOpusAudioPacket(e,t+5,i-5,n,x);break;case"fLaC":this._parseFlacAudioPacket(e,t+5,i-5,n,x);break;case"mp4a":this._parseAACAudioPacket(e,t+5,i-5,n,x);break;default:this._onError(P.CODEC_UNSUPPORTED,`${s.TAG}._parseAudioData() - Unsupported FOURCC ${m}`)}return}if(o!==2&&o!==3&&o!==10){this._onError(P.CODEC_UNSUPPORTED,"Flv: Unsupported audio codec idx: "+o);return}let l=0,c=(a&12)>>>2;if(c>=0&&c<=4)l=s._flvSoundRateTable[c];else{this._onError(P.FORMAT_ERROR,"Flv: Invalid audio sample rate idx: "+c);return}let d=(a&2)>>>1,f=a&1,_=this._audioMetadata,g=this._audioTrack;if(_||(this._hasAudio===!1&&this._hasAudioFlagOverrided===!1&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),_=this._audioMetadata={...At,type:"audio",trackId:g.id,timescale:this._timescale,duration:this._duration,audioSampleRate:l,channelCount:f===0?1:2}),o===10){_.codecType=2;let x=this._parseAACAudioData(e,t+1,i-1);if(x==null)return;if(x.packetType===0){let m=x.data;if(_.codecConfig){if(ve(m.config,_.codecConfig))return;u.w(s.TAG,"AudioSpecificConfig has been changed, re-generate initialization segment")}_.audioSampleRate=m.samplingRate,_.channelCount=m.channelCount,_.codec=m.codec,_.originalCodec=m.originalCodec,_.codecConfig=m.config,this._hasLoggedFirstAacPayloadProbe=!1,this._hasLoggedAacPceDetection=!1,this._hasLoggedAacSbrDetection=!1,this._hasObservedAacPce=!1,this._pendingAacMultichannelChannelCount=void 0,this._aacPayloadProbeFrameIndex=0,_.refFrameDuration=1024/_.audioSampleRate*_.timescale,u.v(s.TAG,"Parsed AudioSpecificConfig"),this._remuxer.isAudioMetadataDispatched&&(u.v(s.TAG,"Dispatching regular AAC track data before metadata refresh"),this._flushPendingTrackDataBeforeMetadataRefresh()),u.v(s.TAG,`Dispatching regular AAC track metadata codec=${_.codec} channels=${_.channelCount} sampleRate=${_.audioSampleRate}`),this._onTrackMetadata(_);let p=this._mediaInfo;p.audioCodec=_.originalCodec,p.audioSampleRate=_.audioSampleRate,p.audioChannelCount=_.channelCount,p.hasVideo?p.videoCodec!=null&&(p.mimeType='video/x-flv; codecs="'+p.videoCodec+","+p.audioCodec+'"'):p.mimeType='video/x-flv; codecs="'+p.audioCodec+'"',p.isComplete()&&(u.v(s.TAG,`Dispatching regular AAC media info codec=${p.audioCodec} channels=${p.audioChannelCount} mimeType=${p.mimeType}`),this._onMediaInfo(p))}else if(x.packetType===1){let m=x.data;this._probeAacPayload(m);let p=this._timestampBase+n,h={unit:m,length:m.byteLength,dts:p,pts:p};g.frames.push(h),g.length+=m.length}else u.e(s.TAG,`Flv: Unsupported AAC data type ${x.packetType}`)}else if(o===2){if(_.codecType=1,!_.codec){let h=this._parseMP3AudioData(e,t+1,i-1,!0);if(h==null)return;_.audioSampleRate=h.samplingRate,_.channelCount=h.channelCount,_.codec=h.codec,_.originalCodec=h.originalCodec,_.refFrameDuration=1152/_.audioSampleRate*_.timescale,u.v(s.TAG,"Parsed MPEG Audio Frame Header"),this._onTrackMetadata(_);let b=this._mediaInfo;b.audioCodec=_.codec,b.audioSampleRate=_.audioSampleRate,b.audioChannelCount=_.channelCount,b.audioDataRate=h.bitRate,b.hasVideo?b.videoCodec!=null&&(b.mimeType='video/x-flv; codecs="'+b.videoCodec+","+b.audioCodec+'"'):b.mimeType='video/x-flv; codecs="'+b.audioCodec+'"',b.isComplete()&&this._onMediaInfo(b)}let x=this._parseMP3AudioData(e,t+1,i-1,!1);if(x==null)return;let m=this._timestampBase+n,p={unit:x,length:x.byteLength,dts:m,pts:m};g.frames.push(p),g.length+=x.length}else if(o===3){if(_.codecType=5,!_.codec){_.audioSampleRate=l,_.bitsPerSample=(d+1)*8,_.littleEndian=!0,_.codec="ipcm",_.originalCodec="ipcm",this._onTrackMetadata(_);let h=this._mediaInfo;h.audioCodec=_.codec,h.audioSampleRate=_.audioSampleRate,h.audioChannelCount=_.channelCount,h.audioDataRate=_.bitsPerSample*_.audioSampleRate,h.hasVideo?h.videoCodec!=null&&(h.mimeType='video/x-flv; codecs="'+h.videoCodec+","+h.audioCodec+'"'):h.mimeType='video/x-flv; codecs="'+h.audioCodec+'"',h.isComplete()&&this._onMediaInfo(h)}let x=new Uint8Array(e,t+1,i-1),m=this._timestampBase+n,p={unit:x,length:x.byteLength,dts:m,pts:m};g.frames.push(p),g.length+=x.length}}_parseAACAudioData(e,t,i){if(i<=1){u.w(s.TAG,"Flv: Invalid AAC packet, missing AACPacketType or/and Data!");return}let n=new Uint8Array(e,t,i),r=n[0];if(r===0){let a=this._parseAACAudioSpecificConfig(e,t+1,i-1);return a===void 0?void 0:{packetType:0,data:a}}else return{packetType:r,data:n.subarray(1)}}_parseAACAudioSpecificConfig(e,t,i){let n=new Uint8Array(e,t,i),r=n[0]>>>3,a=(n[0]&7)<<1|n[1]>>>7;if(a>=Pe.length){this._onError(P.FORMAT_ERROR,"Flv: AAC invalid sampling frequency index!");return}let o=Pe[a],l=[0,1,2,3,4,5,6,8],c=(n[1]&120)>>>3;if(c<0||c>=l.length){this._onError(P.FORMAT_ERROR,"Flv: AAC invalid channel configuration");return}if(c===0)return u.w(s.TAG,"Flv: AAC channel config 0 (in-band) detected, synthesising clean 2-ch AudioSpecificConfig"),{config:new Uint8Array([r<<3|(a&14)>>>1,(a&1)<<7]),samplingRate:o,channelCount:2,codec:"mp4a.40."+r,originalCodec:"mp4a.40."+r};let d=new ze(new He(new Uint8Array(e,t,i)));return{config:Uint8Array.from(d.config),samplingRate:d.sampling_rate,channelCount:d.channel_count,codec:d.codec_mimetype,originalCodec:d.original_codec_mimetype}}_parseMP3AudioData(e,t,i,n){if(i<4){u.w(s.TAG,"Flv: Invalid MP3 packet, header missing!");return}let r=new Uint8Array(e,t,i),a=null;if(n){if(r[0]!==255)return;let o=r[1]>>>3&3,l=(r[1]&6)>>1,c=(r[2]&240)>>>4,d=(r[2]&12)>>>2,_=(r[3]>>>6&3)!==3?2:1,g=0,x=0,m=34,p="mp3";switch(o){case 0:g=s._mpegAudioV25SampleRateTable[d];break;case 2:g=s._mpegAudioV20SampleRateTable[d];break;case 3:g=s._mpegAudioV10SampleRateTable[d];break}switch(l){case 1:m=34,c<s._mpegAudioL3BitRateTable.length&&(x=s._mpegAudioL3BitRateTable[c]);break;case 2:m=33,c<s._mpegAudioL2BitRateTable.length&&(x=s._mpegAudioL2BitRateTable[c]);break;case 3:m=32,c<s._mpegAudioL1BitRateTable.length&&(x=s._mpegAudioL1BitRateTable[c]);break}a={bitRate:x,samplingRate:g,channelCount:_,codec:p,originalCodec:p}}else a=r;return a}_parseMultichannelConfig(e,t,i){let n=u.scope(s.TAG,"_parseMultichannelConfig()");if(i<2){n.w(`payload too short (${i} bytes), ignoring`);return}let r=new DataView(e,t,i),a=r.getUint8(0),o=r.getUint8(1);if(a===1&&i<6){n.w(`Native order requires 6 bytes, got ${i}, ignoring`);return}if(a===2&&i<2+o){n.w(`Custom mapping requires ${2+o} bytes, got ${i}, ignoring`);return}let l=ar[a]??String(a);if(n.v(`audioChannelOrder=${l} channelCount=${o}`),a===1){let c=r.getUint32(2,!1),d=[];for(let[f,_]of Object.entries(or))typeof _=="number"&&(c&_)!==0&&d.push(f);n.v(`Native audioChannelFlags=0x${c.toString(16).padStart(6,"0")} channels=[${d.join(", ")}]`)}else if(a===2){let c=[];for(let d=0;d<o;d++){let f=r.getUint8(2+d);c.push(`ch${d}=${lr[f]??`0x${f.toString(16)}`}`)}n.v(`Custom mapping=[${c.join(", ")}]`)}this._handleAacMultichannelConfig(o,n)}_handleAacMultichannelConfig(e,t){let i=this._audioMetadata;if(!i||e<=0){t.v(`ignoring MultichannelConfig channelCount=${e}, current channelCount=${i?.channelCount??"undefined"}`);return}if(i.codecType!==2||!i.codecConfig||i.codecConfig.length<2){t.v(`ignoring MultichannelConfig channelCount=${e}, codecType=${dr[i.codecType]??i.codecType} codecConfigLength=${i.codecConfig?.length??0}`);return}let n=(i.codecConfig[1]&120)>>>3;if(i.channelCount===e&&n!==0){t.v(`ignoring MultichannelConfig channelCount=${e}, current channelCount=${i.channelCount} channelConfig=${n}`);return}if(n===0&&e>2){let r=i.codecConfig[0]>>>3;if(r===29){t.v(`channelConfig=0 + audioObjectType=${nt[r]}(${r}) = HE-AAC v2 PS, ignoring MultichannelConfig channelCount=${e}, keeping channelCount=${i.channelCount}`);return}if(!this._hasObservedAacPce){this._pendingAacMultichannelChannelCount=e,t.v(`channelConfig=0 + audioObjectType=${nt[r]}(${r}), deferring MultichannelConfig channelCount=${e} until AAC PCE is observed`);return}t.v(`channelConfig=0 + observed AAC PCE, honouring MultichannelConfig channelCount=${e}`)}this._rewriteAacChannelConfig(e,n,t),this._pendingAacMultichannelChannelCount=void 0,i.channelCount=e,this._mediaInfo.audioChannelCount=e,t.v(`updated audioMetadata.channelCount \u2192 ${e}, re-dispatching metadata`),this._remuxer.isAudioMetadataDispatched&&this._flushPendingTrackDataBeforeMetadataRefresh(),this._onTrackMetadata(i)}_rewriteAacChannelConfig(e,t,i){let n=this._audioMetadata;if(!n?.codecConfig)return;let a=[0,1,2,3,4,5,6,8].indexOf(e);if(a>0){let o=Uint8Array.from(n.codecConfig);o[1]=o[1]&135|(a&15)<<3,n.codecConfig=o,i.v(`updated AAC AudioSpecificConfig channelConfig ${t}\u2192${a} for channelCount=${e}`)}else i.w(`channelCount=${e} has no standard AAC channelConfig mapping, AudioSpecificConfig unchanged`)}_applyPendingAacMultichannelConfig(){if(!this._hasObservedAacPce||this._pendingAacMultichannelChannelCount===void 0)return;let e=this._pendingAacMultichannelChannelCount;this._pendingAacMultichannelChannelCount=void 0;let t=u.scope(s.TAG,"_parseMultichannelConfig()");t.v(`observed AAC PCE, applying pending MultichannelConfig channelCount=${e}`),this._handleAacMultichannelConfig(e,t)}_parseAACAudioPacket(e,t,i,n,r){let a=this._audioMetadata,o=this._audioTrack;if(a||(this._hasAudio===!1&&this._hasAudioFlagOverrided===!1&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),a=this._audioMetadata={...At,type:"audio",trackId:o.id,timescale:this._timescale,duration:this._duration}),a.codecType=2,r===0){let l=this._parseAACAudioSpecificConfig(e,t,i);if(l==null)return;let c=new Uint8Array(l.config);if(a.codecConfig){if(ve(c,a.codecConfig))return;u.w(s.TAG,"AudioSpecificConfig has been changed, re-generate initialization segment")}a.audioSampleRate=l.samplingRate,a.channelCount=l.channelCount,a.codec=l.codec,a.originalCodec=l.originalCodec,a.codecConfig=c,this._hasLoggedFirstAacPayloadProbe=!1,this._hasLoggedAacPceDetection=!1,this._hasLoggedAacSbrDetection=!1,this._hasObservedAacPce=!1,this._pendingAacMultichannelChannelCount=void 0,this._aacPayloadProbeFrameIndex=0,a.refFrameDuration=1024/a.audioSampleRate*a.timescale,u.v(s.TAG,"Parsed Enhanced FLV AAC AudioSpecificConfig"),this._remuxer.isAudioMetadataDispatched&&(u.v(s.TAG,"Dispatching enhanced AAC track data before metadata refresh"),this._flushPendingTrackDataBeforeMetadataRefresh()),u.v(s.TAG,`Dispatching enhanced AAC track metadata codec=${a.codec} channels=${a.channelCount} sampleRate=${a.audioSampleRate}`),this._onTrackMetadata(a);let d=this._mediaInfo;d.audioCodec=a.originalCodec,d.audioSampleRate=a.audioSampleRate,d.audioChannelCount=a.channelCount,d.hasVideo?d.videoCodec!=null&&(d.mimeType='video/x-flv; codecs="'+d.videoCodec+","+d.audioCodec+'"'):d.mimeType='video/x-flv; codecs="'+d.audioCodec+'"',d.isComplete()&&(u.v(s.TAG,`Dispatching enhanced AAC media info codec=${d.audioCodec} channels=${d.audioChannelCount} mimeType=${d.mimeType}`),this._onMediaInfo(d))}else if(r===1){let l=new Uint8Array(e,t,i);this._probeAacPayload(l);let c=this._timestampBase+n,d={unit:l,length:l.byteLength,dts:c,pts:c};o.frames.push(d),o.length+=l.length}else if(r!==2)if(r===4)this._parseMultichannelConfig(e,t,i);else{let l=ai[r]??String(r);u.w(s.TAG,`_parseAACAudioPacket(): unsupported FlvAudioPacketType=${l} ts=${n} offset=${t} size=${i} action=drop`)}}_parseOpusAudioPacket(e,t,i,n,r){if(r===0)this._parseOpusSequenceHeader(e,t,i);else if(r===1)this._parseOpusAudioData(e,t,i,n);else if(r!==2)if(r===4)this._parseMultichannelConfig(e,t,i);else{let a=ai[r]??String(r);u.w(s.TAG,`_parseOpusAudioPacket(): unsupported FlvAudioPacketType=${a} ts=${n} offset=${t} size=${i} action=drop`)}}_parseOpusSequenceHeader(e,t,i){if(i<19){u.e(s.TAG,"_parseOpusSequenceHeader(): Invalid OpusSequenceHeader, lack of data!");return}let n=new Uint8Array(e,t,i),r=String.fromCharCode(...n.subarray(0,8));if(r!=="OpusHead"){u.e(s.TAG,`_parseOpusSequenceHeader(): Invalid OpusSequenceHeader, missing OpusHead (got "${r}")`);return}let a=new Uint8Array(e,t+8,i-8).slice(),o=new DataView(a.buffer),l=o.getUint8(1),c=o.getUint16(2,!0),d=o.getUint32(4,!0),f=o.getInt16(8,!0),_=o.getUint8(10);f>0&&u.w(s.TAG,"_parseOpusSequenceHeader(): outputGain within OpusSequenceHeader action=drop"),_!==0&&u.w(s.TAG,"_parseOpusSequenceHeader(): channel mapping within OpusSequenceHeader action=drop");let g=this._audioMetadata,x=this._audioTrack;if(g||(this._hasAudio===!1&&this._hasAudioFlagOverrided===!1&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),g=this._audioMetadata={...At,type:"audio",trackId:x.id,timescale:this._timescale,duration:this._duration}),g.codecType=3,g.codecConfig){if(ve(a,g.codecConfig))return;u.v(s.TAG,"_parseOpusSequenceHeader(): OpusSequenceHeader has been changed, re-generate initialization segment")}g.audioSampleRate=48e3,g.channelCount=l,g.codec="opus",g.originalCodec="opus",g.codecConfig=a,g.preSkipSamples=c,g.inputSampleRate=d,g.outputGain=f,g.refFrameDuration=960*g.timescale/48e3,u.v(s.TAG,"Parsed OpusSequenceHeader"),this._remuxer.isAudioMetadataDispatched&&this._flushPendingTrackDataBeforeMetadataRefresh(),this._onTrackMetadata(g);let m=this._mediaInfo;m.audioCodec=g.originalCodec,m.audioSampleRate=g.audioSampleRate,m.audioChannelCount=g.channelCount,m.hasVideo?m.videoCodec!=null&&(m.mimeType='video/x-flv; codecs="'+m.videoCodec+","+m.audioCodec+'"'):m.mimeType='video/x-flv; codecs="'+m.audioCodec+'"',m.isComplete()&&this._onMediaInfo(m)}_parseOpusAudioData(e,t,i,n){let r=this._audioTrack,a=new Uint8Array(e,t,i),o=this._timestampBase+n,l={unit:a,length:a.byteLength,dts:o,pts:o};r.frames.push(l),r.length+=a.length}_parseFlacAudioPacket(e,t,i,n,r){if(r===0)this._parseFlacSequenceHeader(e,t,i);else if(r===1)this._parseFlacAudioData(e,t,i,n);else if(r!==2)if(r===4)this._parseMultichannelConfig(e,t,i);else{this._onError(P.FORMAT_ERROR,`${s.TAG}._parseFlacAudioPacket() - Unsupported FlvAudioPacketType ${r}`);return}}_parseFlacSequenceHeader(e,t,i){let n=this._audioMetadata,r=this._audioTrack;n||(this._hasAudio===!1&&this._hasAudioFlagOverrided===!1&&(this._hasAudio=!0,this._mediaInfo.hasAudio=!0),n=this._audioMetadata={...At,type:"audio",trackId:r.id,timescale:this._timescale,duration:this._duration}),n.codecType=4;let a=new Uint8Array(e,t,i),o=new Uint8Array(i+4);o[0]=128,o[1]=0,o[2]=0,o[3]=i,o.set(a,4);let l=new oe(a),c=l.readBits(16),d=l.readBits(16),f=d===c?d:4096,_=l.readBits(24),g=l.readBits(24),x=l.readBits(20),m=l.readBits(3)+1,p=l.readBits(5)+1;l.destroy();let h={config:o,channelCount:m,samplingFrequence:x,bitsPerSample:p,codec:"flac",originalCodec:"flac"};if(n.codecConfig){if(ve(h.config,n.codecConfig))return;u.w(s.TAG,"FlacSequenceHeader has been changed, re-generate initialization segment")}n.audioSampleRate=h.samplingFrequence,n.channelCount=h.channelCount,n.bitsPerSample=h.bitsPerSample,n.codec=h.codec,n.originalCodec=h.originalCodec,n.codecConfig=h.config,n.refFrameDuration=f*1e3/h.samplingFrequence,u.v(s.TAG,"Parsed FlacSequenceHeader"),this._remuxer.isAudioMetadataDispatched&&this._flushPendingTrackDataBeforeMetadataRefresh(),this._onTrackMetadata(n);let b=this._mediaInfo;b.audioCodec=n.originalCodec,b.audioSampleRate=n.audioSampleRate,b.audioChannelCount=n.channelCount,b.hasVideo?b.videoCodec!=null&&(b.mimeType='video/x-flv; codecs="'+b.videoCodec+","+b.audioCodec+'"'):b.mimeType='video/x-flv; codecs="'+b.audioCodec+'"',b.isComplete()&&this._onMediaInfo(b)}_parseFlacAudioData(e,t,i,n){let r=this._audioTrack,a=new Uint8Array(e,t,i),o=this._timestampBase+n,l={unit:a,length:a.byteLength,dts:o,pts:o};r.frames.push(l),r.length+=a.length}_parseVideoData(e,t,i,n,r){if(i<=1){u.w(s.TAG,"Flv: Invalid video packet, missing VideoData payload!");return}if(this._hasVideoFlagOverrided===!0&&this._hasVideo===!1)return;let a=new Uint8Array(e,t,i)[0],o=(a&128)!==0,l=(a&112)>>>4;if(o){let c=a&15;if(c===6)this._parseMultitrackVideoPacket(e,t+1,i-1,n,r,l);else{let d=String.fromCharCode(...new Uint8Array(e,t,i).slice(1,5));if(d==="avc1")this._parseEnhancedAvcVideoPacket(e,t+5,i-5,n,r,l,c,this._getOrCreateVideoTrack(0));else if(d==="hvc1")this._parseEnhancedHevcVideoPacket(e,t+5,i-5,n,r,l,c,this._getOrCreateVideoTrack(0));else if(d==="av01")this._parseEnhancedAv1VideoPacket(e,t+5,i-5,n,r,l,c,this._getOrCreateVideoTrack(0));else if(d==="vp09")this._parseEnhancedVp9VideoPacket(e,t+5,i-5,n,r,l,c,this._getOrCreateVideoTrack(0));else{this._onError(P.CODEC_UNSUPPORTED,`Flv: Unsupported codec in video frame: ${d}`);return}}}else{let c=a&15;if(c===7)this._parseAVCVideoPacket(e,t+1,i-1,n,r,l,this._getOrCreateVideoTrack(0));else if(c===12)this._parseHEVCVideoPacket(e,t+1,i-1,n,r,l,this._getOrCreateVideoTrack(0));else{this._onError(P.CODEC_UNSUPPORTED,`Flv: Unsupported codec in video frame: ${c}`);return}}}_parseMultitrackVideoPacket(e,t,i,n,r,a){if(i<2){u.w(s.TAG,"Flv: Invalid multitrack video packet, too short");return}let o=new DataView(e,t,i),l=o.getUint8(0),c=l>>4&15,d=l&15;if(d===6){this._onError(P.FORMAT_ERROR,"Flv: Multitrack innerPacketType must not be Multitrack");return}let f=1,_=null;if(c!==2){if(i-f<4){u.w(s.TAG,"Flv: Invalid multitrack video packet, missing shared FOURCC");return}_=String.fromCharCode(...new Uint8Array(e,t+f,4)),f+=4}for(;f<i;){let g;if(c===2){if(i-f<4)break;g=String.fromCharCode(...new Uint8Array(e,t+f,4)),f+=4}else g=_;if(i-f<1)break;let x=o.getUint8(f);f+=1;let m;if(c===0)m=i-f;else{if(i-f<3)break;m=o.getUint8(f)<<16|o.getUint8(f+1)<<8|o.getUint8(f+2),f+=3}if(f+m>i){u.w(s.TAG,`Flv: Multitrack track payload overflows packet, trackId=${x}`);break}u.v(s.TAG,`Multitrack packet: trackId=${x}, fourcc=${g}, innerPacketType=${d}, payloadSize=${m}`);let p=this._getOrCreateVideoTrack(x),h=t+f,b=m;if(g==="avc1"?this._parseEnhancedAvcVideoPacket(e,h,b,n,r,a,d,p):g==="hvc1"?this._parseEnhancedHevcVideoPacket(e,h,b,n,r,a,d,p):g==="av01"?this._parseEnhancedAv1VideoPacket(e,h,b,n,r,a,d,p):g==="vp09"?this._parseEnhancedVp9VideoPacket(e,h,b,n,r,a,d,p):u.w(s.TAG,`Flv: Unsupported codec in multitrack video packet: ${g}, trackId=${x}, action=skip`),f+=m,c===0)break}}_parseAVCVideoPacket(e,t,i,n,r,a,o){if(i<4){u.w(s.TAG,"Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime");return}let l=new DataView(e,t,i),c=l.getUint8(0),d=Et(l,1);if(t+=4,i-=4,c===0)this._parseAvcConfig(e,t,i,o);else if(c===1)this._parseAvcVideoData(e,t,i,n,r,a,d,o);else if(c!==2){this._onError(P.FORMAT_ERROR,`Flv: Invalid video packet type ${c}`);return}}_parseHEVCVideoPacket(e,t,i,n,r,a,o){if(i<4){u.w(s.TAG,"Flv: Invalid HEVC packet, missing HEVCPacketType or/and CompositionTime");return}let l=new DataView(e,t,i),c=l.getUint8(0),d=Et(l,1);if(t+=4,i-=4,c===0)this._parseHevcConfig(e,t,i,o);else if(c===1)this._parseHevcVideoData(e,t,i,n,r,a,d,o);else if(c!==2){this._onError(P.FORMAT_ERROR,`Flv: Invalid video packet type ${c}`);return}}_parseEnhancedHevcVideoPacket(e,t,i,n,r,a,o,l){let c=new DataView(e,t,i);if(o===0)this._parseHevcConfig(e,t,i,l);else if(o===1){if(i<3){u.w(s.TAG,"_parseEnhancedHevcVideoPacket(): Invalid HEVC packet, missing CompositionTime");return}let d=Et(c,0);t+=3,i-=3,this._parseHevcVideoData(e,t,i,n,r,a,d,l)}else if(o===3)this._parseHevcVideoData(e,t,i,n,r,a,0,l);else if(o!==2){this._onError(P.FORMAT_ERROR,`Flv: Invalid video packet type ${o}`);return}}_parseEnhancedAvcVideoPacket(e,t,i,n,r,a,o,l){let c=new DataView(e,t,i);if(o===0)this._parseAvcConfig(e,t,i,l);else if(o===1){if(i<3){u.w(s.TAG,"_parseEnhancedAvcVideoPacket(): Invalid AVC packet, missing CompositionTime");return}let d=Et(c,0);t+=3,i-=3,this._parseAvcVideoData(e,t,i,n,r,a,d,l)}else if(o===3)this._parseAvcVideoData(e,t,i,n,r,a,0,l);else if(o!==2){this._onError(P.FORMAT_ERROR,`Flv: Invalid AVC video packet type ${o}`);return}}_parseEnhancedAv1VideoPacket(e,t,i,n,r,a,o,l){let c=new DataView(e,t,i);switch(o){case 0:this._parseAv1Config(e,t,i,l);break;case 1:this._parseAv1VideoData(e,t,i,n,r,a,0,l);break;case 2:break;case 4:{u.w(s.TAG,`_parseEnhancedAV1VideoPacket(): unsupported AV1 video packet type ${o} (FlvVideoPacketType.Metadata) ts=${n} offset=${t} size=${i} action=drop`);break}default:this._onError(P.FORMAT_ERROR,`Flv: invalid AV1 video packet type ${o}`);return}}_parseAvcConfig(e,t,i,n){if(i<7){u.w(s.TAG,"Flv: Invalid AVCDecoderConfigurationRecord, lack of data!");return}let r=this._videoMetadataByTrackId.get(n.id),a=new DataView(e,t,i);if(!r)this._hasVideo===!1&&this._hasVideoFlagOverrided===!1&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),r={...vt,type:"video",trackId:n.id,timescale:this._timescale,duration:this._duration},this._videoMetadataByTrackId.set(n.id,r);else if(typeof r.codecConfig<"u"){let x=new Uint8Array(e,t,i);if(ve(x,r.codecConfig))return;u.w(s.TAG,"AVCDecoderConfigurationRecord has been changed, re-generate initialization segment")}r.codecType=1;let o=a.getUint8(0),l=a.getUint8(1),c=a.getUint8(2),d=a.getUint8(3);if(o!==1||l===0){this._onError(P.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord");return}if(this._naluLengthSize=(a.getUint8(4)&3)+1,this._naluLengthSize!==3&&this._naluLengthSize!==4){this._onError(P.FORMAT_ERROR,`Flv: Strange NaluLengthSizeMinusOne: ${this._naluLengthSize-1}`);return}let f=a.getUint8(5)&31;if(f===0){this._onError(P.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No SPS");return}else f>1&&u.w(s.TAG,`Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ${f}`);let _=6;for(let x=0;x<f;x++){let m=a.getUint16(_,!1);if(_+=2,m===0)continue;let p=new Uint8Array(e,t+_,m);_+=m;let h=St.parseSPS(p);if(x!==0)continue;r.codecWidth=h.codec_size.width,r.codecHeight=h.codec_size.height,r.presentWidth=h.present_size.width,r.presentHeight=h.present_size.height,r.profile=h.profile_string,r.level=h.level_string,r.bitDepth=h.bit_depth,r.chromaFormat=h.chroma_format,r.sarRatio=h.sar_ratio,r.frameRate=h.frame_rate,(h.frame_rate.fixed===!1||h.frame_rate.fps_num===0||h.frame_rate.fps_den===0)&&(r.frameRate=this._referenceFrameRate);let b=r.frameRate.fps_den,S=r.frameRate.fps_num;r.refFrameDuration=r.timescale*(b/S);let E=p.subarray(1,4),w="avc1.";for(let F=0;F<3;F++){let y=E[F].toString(16);y.length<2&&(y="0"+y),w+=y}r.codec=w;let R=this._mediaInfo;R.width=r.codecWidth,R.height=r.codecHeight,R.fps=r.frameRate.fps,R.profile=r.profile,R.level=r.level,R.refFrames=h.ref_frames,R.chromaFormat=h.chroma_format_string,R.sarNum=r.sarRatio.width,R.sarDen=r.sarRatio.height,R.videoCodec=w,R.hasAudio?R.audioCodec!=null&&(R.mimeType='video/x-flv; codecs="'+R.videoCodec+","+R.audioCodec+'"'):R.mimeType='video/x-flv; codecs="'+R.videoCodec+'"',R.isComplete()&&this._onMediaInfo(R)}let g=a.getUint8(_);if(g===0){this._onError(P.FORMAT_ERROR,"Flv: Invalid AVCDecoderConfigurationRecord: No PPS");return}else g>1&&u.w(s.TAG,`Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ${g}`);_++;for(let x=0;x<g;x++){let m=a.getUint16(_,!1);_+=2,m!==0&&(_+=m)}r.codecConfig=new Uint8Array(i),r.codecConfig.set(new Uint8Array(e,t,i),0),u.v(s.TAG,"Parsed AVCDecoderConfigurationRecord"),this._dispatchVideoTrackMetadata(r)}_parseHevcConfig(e,t,i,n){if(i<22){u.w(s.TAG,"Flv: Invalid HEVCDecoderConfigurationRecord, lack of data!");return}let r=this._videoMetadataByTrackId.get(n.id),a=new DataView(e,t,i);if(!r)this._hasVideo===!1&&this._hasVideoFlagOverrided===!1&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),r={...vt,type:"video",trackId:n.id,timescale:this._timescale,duration:this._duration},this._videoMetadataByTrackId.set(n.id,r);else if(r.codecConfig){let d=new Uint8Array(e,t,i);if(ve(d,r.codecConfig))return;u.w(s.TAG,"HEVCDecoderConfigurationRecord has been changed, re-generate initialization segment")}r.codecType=2;let o=a.getUint8(0),l=a.getUint8(1)&31;if(o!==0&&o!==1||l===0){this._onError(P.FORMAT_ERROR,"Flv: Invalid HEVCDecoderConfigurationRecord");return}if(this._naluLengthSize=(a.getUint8(21)&3)+1,this._naluLengthSize!==3&&this._naluLengthSize!==4){this._onError(P.FORMAT_ERROR,`Flv: Strange NaluLengthSizeMinusOne: ${this._naluLengthSize-1}`);return}let c=a.getUint8(22);for(let d=0,f=23;d<c;d++){let _=a.getUint8(f+0)&63,g=a.getUint16(f+1,!1);f+=3;for(let x=0;x<g;x++){let m=a.getUint16(f+0,!1);if(x!==0){f+=2+m;continue}if(_===33){f+=2;let p=new Uint8Array(e,t+f,m),h=tr.parseSPS(p);r.codecWidth=h.codec_size.width,r.codecHeight=h.codec_size.height,r.presentWidth=h.present_size.width,r.presentHeight=h.present_size.height,r.profile=h.profile_string,r.level=h.level_string,r.bitDepth=h.bit_depth,r.chromaFormat=h.chroma_format,r.sarRatio=h.sar_ratio,r.frameRate=h.frame_rate,(h.frame_rate.fixed===!1||h.frame_rate.fps_num===0||h.frame_rate.fps_den===0)&&(r.frameRate=this._referenceFrameRate);let b=r.frameRate.fps_den,S=r.frameRate.fps_num;r.refFrameDuration=r.timescale*(b/S),r.codec=h.codec_mimetype;let E=this._mediaInfo;E.width=r.codecWidth,E.height=r.codecHeight,E.fps=r.frameRate.fps,E.profile=r.profile,E.level=r.level,E.refFrames=h.ref_frames,E.chromaFormat=h.chroma_format_string,E.sarNum=r.sarRatio.width,E.sarDen=r.sarRatio.height,E.videoCodec=h.codec_mimetype,E.hasAudio?E.audioCodec!=null&&(E.mimeType='video/x-flv; codecs="'+E.videoCodec+","+E.audioCodec+'"'):E.mimeType='video/x-flv; codecs="'+E.videoCodec+'"',E.isComplete()&&this._onMediaInfo(E),f+=m}else f+=2+m}}r.codecConfig=new Uint8Array(i),r.codecConfig.set(new Uint8Array(e,t,i),0),u.v(s.TAG,"Parsed HEVCDecoderConfigurationRecord"),this._dispatchVideoTrackMetadata(r)}_parseAv1Config(e,t,i,n){if(i<4){u.w(s.TAG,"Flv: Invalid AV1CodecConfigurationRecord, lack of data!");return}let r,a=this._videoMetadataByTrackId.get(n.id),o=new DataView(e,t,i);if(!a)this._hasVideo===!1&&this._hasVideoFlagOverrided===!1&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),r={...vt,type:"video",trackId:n.id,timescale:this._timescale,duration:this._duration},this._videoMetadataByTrackId.set(n.id,r);else{if(a.codecConfig){let p=new Uint8Array(e,t,i);if(ve(p,a.codecConfig))return;u.w(s.TAG,"AV1CodecConfigurationRecord has been changed, re-generate initialization segment")}r=a}r.codecType=5;let l=o.getUint8(0)&127,c=(o.getUint8(1)&224)>>5,d=(o.getUint8(1)&143)>>0,f=(o.getUint8(2)&128)>>7;if(l!==1){this._onError(P.FORMAT_ERROR,"Flv: Invalid AV1CodecConfigurationRecord");return}let _=Te.parseOBUs(new Uint8Array(e,t+4,i-4));if(!_){this._onError(P.FORMAT_ERROR,"Flv: Invalid AV1CodecConfigurationRecord");return}r.profile=_.profile_string,r.level=_.level_string,r.bitDepth=_.bit_depth,r.chromaFormat=_.chroma_format,r.frameRate=_.frame_rate,(_.frame_rate.fixed===!1||_.frame_rate.fps_num===0||_.frame_rate.fps_den===0)&&(r.frameRate=this._referenceFrameRate);let g=r.frameRate.fps_den,x=r.frameRate.fps_num;r.refFrameDuration=r.timescale*(g/x),r.codec=_.codec_mimetype,r.av1Extra=_;let m=this._mediaInfo;m.fps=r.frameRate.fps,m.profile=r.profile,m.level=r.level,m.refFrames=_.ref_frames,m.chromaFormat=_.chroma_format_string,m.videoCodec=_.codec_mimetype,r.codecWidth=m.width??0,r.codecHeight=m.height??0,m.hasAudio?m.audioCodec!=null&&(m.mimeType='video/x-flv; codecs="'+m.videoCodec+","+m.audioCodec+'"'):m.mimeType='video/x-flv; codecs="'+m.videoCodec+'"',m.isComplete()&&this._onMediaInfo(m),r.codecConfig=new Uint8Array(e,t,i).slice(),this._dispatchVideoTrackMetadata(r),u.v(s.TAG,`Parsed AV1 metadata: ${JSON.stringify(_)}`)}_parseAvcVideoData(e,t,i,n,r,a,o,l){if(this._currentVideoTrackId!==void 0&&l.id!==this._currentVideoTrackId)return;let c=new DataView(e,t,i),d=[],f=0,_=0,g=this._naluLengthSize,x=this._timestampBase+n,m=a===1;for(;_<i;){if(_+4>=i){u.w(s.TAG,`Malformed Nalu near timestamp ${x}, offset = ${_}, dataSize = ${i}`);break}let p=c.getUint32(_,!1);if(g===3&&(p>>>=8),p>i-g){u.w(s.TAG,`Malformed Nalus near timestamp ${x}, NaluSize > DataSize!`);return}let h=c.getUint8(_+g)&31;h===5&&(m=!0);let b=new Uint8Array(e,t+_,g+p),S={type:h,data:b};d.push(S),f+=b.byteLength,_+=g+p}if(d.length){let p={units:d,length:f,isKeyframe:m,fileposition:r,dts:x,cts:o,pts:x+o};l.frames.push(p),l.length+=f}}_parseHevcVideoData(e,t,i,n,r,a,o,l){if(this._currentVideoTrackId!==void 0&&l.id!==this._currentVideoTrackId)return;let c=new DataView(e,t,i),d=[],f=0,_=0,g=this._naluLengthSize,x=this._timestampBase+n,m=a===1;for(;_<i;){if(_+4>=i){u.w(s.TAG,`Malformed Nalu near timestamp ${x}, offset = ${_}, dataSize = ${i}`);break}let p=c.getUint32(_,!1);if(g===3&&(p>>>=8),p>i-g){u.w(s.TAG,`Malformed Nalus near timestamp ${x}, NaluSize > DataSize!`);return}let h=c.getUint8(_+g)>>1&63;(h===19||h===20||h===21)&&(m=!0);let b=new Uint8Array(e,t+_,g+p),S={type:h,data:b};d.push(S),f+=b.byteLength,_+=g+p}if(d.length){let p={units:d,length:f,isKeyframe:m,fileposition:r,dts:x,cts:o,pts:x+o};l.frames.push(p),l.length+=f}}_parseAv1VideoData(e,t,i,n,r,a,o,l){if(this._currentVideoTrackId!==void 0&&l.id!==this._currentVideoTrackId)return;let c=[],d=0,f=this._timestampBase+n,_=a===1,g=new Uint8Array(e,t,i);if(_){let m=this._videoMetadataByTrackId.get(l.id);if(!m){this._onError(P.FORMAT_ERROR,"Flv: AV1 VideoData received before SequenceStart");return}let p=Te.parseOBUs(g,m.av1Extra);if(!p){this._onError(P.FORMAT_ERROR,"Flv: Invalid AV1 VideoData");return}m.codecWidth=p.codec_size.width,m.codecHeight=p.codec_size.height,m.presentWidth=p.present_size.width,m.presentHeight=p.present_size.height,m.sarRatio=p.sar_ratio;let h=this._mediaInfo;h.width=m.codecWidth,h.height=m.codecHeight,h.sarNum=m.sarRatio.width,h.sarDen=m.sarRatio.height}d=i,c.push({type:0,data:g});let x={units:c,length:d,isKeyframe:_,fileposition:r,dts:f,cts:o,pts:f+o,rawData:g};l.frames.push(x),l.length+=d}_parseEnhancedVp9VideoPacket(e,t,i,n,r,a,o,l){switch(o){case 0:this._parseVp9Config(e,t,i,l);break;case 1:this._parseVp9VideoData(e,t,i,n,r,a,0,l);break;case 2:break;case 4:u.w(s.TAG,`_parseEnhancedVP9VideoPacket(): unsupported VP9 video packet type ${o} (FlvVideoPacketType.Metadata) ts=${n} offset=${t} size=${i} action=drop`);break;default:this._onError(P.FORMAT_ERROR,`Flv: invalid VP9 video packet type ${o}`);return}}_parseVp9Config(e,t,i,n){if(i<9){u.w(s.TAG,"_parseVp9Config(): Invalid VP9CodecConfigurationRecord, lack of data!");return}let r=new DataView(e,t,i),a,o=this._videoMetadataByTrackId.get(n.id);if(!o)this._hasVideo===!1&&this._hasVideoFlagOverrided===!1&&(this._hasVideo=!0,this._mediaInfo.hasVideo=!0),a={...vt,type:"video",trackId:n.id,timescale:this._timescale,duration:this._duration},this._videoMetadataByTrackId.set(n.id,a);else{if(o.codecConfig){let F=new Uint8Array(e,t,i);if(ve(F,o.codecConfig))return;u.w(s.TAG,"_parseVp9Config(): VP9CodecConfigurationRecord has been changed, re-generate initialization segment")}a=o}a.codecType=4;let c=(r.getUint8(1)<<16|r.getUint8(2)<<8|r.getUint8(3))===0&&i>=12,d=c?4:1;if(!c&&i<9){u.w(s.TAG,"_parseVp9Config(): record too short");return}let f=r.getUint8(d),_=r.getUint8(d+1),g=(r.getUint8(d+2)&240)>>4,x=(r.getUint8(d+2)&14)>>1,m=r.getUint8(d+2)&1,p=r.getUint8(d+3),h=r.getUint8(d+4),b=2;if(i>=d+6&&(b=r.getUint8(d+5),i>=d+8)){let F=r.getUint16(d+6,!1);F!==0&&u.w(s.TAG,`_parseVp9Config(): Strange VP9CodecConfigurationRecord, codecInitializationDataSize = ${F}`)}a.profile=`${f}`,a.level=`${_}`,a.bitDepth=g,a.chromaFormat=x,a.colorRange=m,a.colourPrimaries=p,a.transferCharacteristics=h,a.matrixCoefficients=b,a.codec=`vp09.${`${f}`.padStart(2,"0")}.${`${_}`.padStart(2,"0")}.${`${g}`.padStart(2,"0")}`;let S=this._mediaInfo;S.fps=a.frameRate.fps,S.profile=a.profile,S.level=a.level,S.refFrames=3,S.chromaFormat=x===1?"4:2:0":a.chromaFormat===2?"4:2:2":a.chromaFormat===3?"4:4:4":"4:2:0",S.videoCodec=a.codec;let E=a.frameRate;(E.fixed===!1||Number.isNaN(E.fps_num)||Number.isNaN(E.fps_den)||Number.isNaN(E.fps))&&(a.frameRate=this._referenceFrameRate);let w=a.frameRate.fps_den,R=a.frameRate.fps_num;a.refFrameDuration=a.timescale*(w/R),a.codecWidth=S.width??0,a.codecHeight=S.height??0,S.hasAudio?S.audioCodec!=null&&(S.mimeType='video/x-flv; codecs="'+S.videoCodec+","+S.audioCodec+'"'):S.mimeType='video/x-flv; codecs="'+S.videoCodec+'"',S.isComplete()&&this._onMediaInfo(S),a.codecConfig=new Uint8Array(e,t,i).slice(),u.v(s.TAG,`VP9 codecConfig: ${Array.from(a.codecConfig).map(F=>F.toString(16).padStart(2,"0")).join(" ")}`),this._dispatchVideoTrackMetadata(a),u.v(s.TAG,`Parsed VP9 codec configuration record: profile=${a.profile} level=${a.level}`)}_parseVp9VideoData(e,t,i,n,r,a,o,l){if(this._currentVideoTrackId!==void 0&&l.id!==this._currentVideoTrackId)return;let c=0,d=[],f=this._timestampBase+n,_=a===1,g=yt.parseVp9Header(new Uint8Array(e,t,i));if(_&&g.isValid){let m=this._videoMetadataByTrackId.get(l.id);if(m){m.codecWidth=g.width,m.codecHeight=g.height,m.presentWidth=g.renderWidth,m.presentHeight=g.renderHeight,m.sarRatio={width:1,height:1};let p=this._mediaInfo;p.width=m.codecWidth,p.height=m.codecHeight,p.sarNum=m.sarRatio.width,p.sarDen=m.sarRatio.height,u.v(s.TAG,`VP9 keyframe dimensions: ${m.codecWidth}x${m.codecHeight}, render: ${m.presentWidth}x${m.presentHeight}`)}}c=i,d.push({type:_?0:1,data:new Uint8Array(e,t,i)});let x={units:d,length:c,isKeyframe:_,fileposition:r,dts:f,cts:o,pts:f+o,rawData:new Uint8Array(e,t,i)};l.frames.push(x),l.length+=c}},li=oi;var qe=class{_config;_remuxer;_mediaInfo;_onTrackMetadata=()=>{};_onMediaInfo=()=>{};_onScriptMetadata=()=>{};_onScriptData=()=>{};_onError=()=>{};_onTrackData=()=>{};_onVideoTracksDiscovered=()=>{};_streams=new Map;_packetSize=0;_preroll=0;_stash=null;_headerParsed=!1;_audioTrack;_videoTrack;_dataObjectParsed=!1;_dataOffset=0;_hasAudio=!0;_hasVideo=!0;_hasVideoMetaSent=!1;_hasAudioMetaSent=!1;_headerVideoWidth=0;_headerVideoHeight=0;_headerSps=null;_headerPps=null;_headerAudioFormatTag=0;_headerAudioChannels=0;_headerAudioSampleRate=0;_headerAudioConfig=null;_baseTimestamp=null;_hasReceivedFirstKeyframe=!1;_audioNextDts=null;_lastAudioDts=null;_audioFrameDuration=1024/44100*1e3;_lastDts=-1;_firstVideoPts=null;_lastVideoPts=null;_lastVideoDts=null;_lastSentWidth=0;_lastSentHeight=0;_lastSentProfileIdc=0;_lastSentLevelIdc=0;_lastSentChromaFormat=0;_lastSentAvcc=null;_isAVCC=null;_audioBuffer={mediaObjectNumber:null,totalSize:0,currentSize:0,chunks:[],pts:0,packetTimestamp:0};_videoBuffer={mediaObjectNumber:null,totalSize:0,currentSize:0,chunks:[],pts:0,packetTimestamp:0,keyframe:!1,streamPosition:0};constructor(e,t,i){this._config=t,this._remuxer=i,this._mediaInfo=new _e,this._hasAudio=e.hasAudioTrack,this._hasVideo=e.hasVideoTrack,console.log(`[ASF Demuxer] Constructor initialized. hasAudio=${this._hasAudio}, hasVideo=${this._hasVideo}`),this._audioTrack={type:"audio",id:2,sequenceNumber:0,frames:[],length:0},this._videoTrack={type:"video",id:1,sequenceNumber:0,frames:[],length:0}}destroy(){console.log("[ASF Demuxer] destroy() called.")}bindDataSource(e){return console.log("[ASF Demuxer] bindDataSource() called."),e.onDataArrival=this.parseChunks.bind(this),this}resetMediaInfo(){console.log("[ASF Demuxer] resetMediaInfo() called."),this._mediaInfo=new _e}get onTrackMetadata(){return this._onTrackMetadata}set onTrackMetadata(e){console.log("[ASF Demuxer] onTrackMetadata setter registered."),this._onTrackMetadata=e,this._headerSps&&this._headerPps&&(console.log("[ASF Demuxer] Sending Video Metadata from stored Header on callback register."),this._sendVideoMetadataFromHeader(!0)),this._headerAudioConfig&&(console.log("[ASF Demuxer] Sending Audio Metadata from stored Header on callback register."),this._hasAudioMetaSent=!1,this._sendAudioMetadataFromHeader())}get onMediaInfo(){return this._onMediaInfo}set onMediaInfo(e){console.log("[ASF Demuxer] onMediaInfo setter registered."),this._onMediaInfo=e,this._hasVideoMetaSent&&this._hasAudioMetaSent&&this._maybeEmitMediaInfo()}get onScriptMetadata(){return this._onScriptMetadata}set onScriptMetadata(e){this._onScriptMetadata=e}get onScriptData(){return this._onScriptData}set onScriptData(e){this._onScriptData=e}get onError(){return this._onError}set onError(e){this._onError=e}get onTrackData(){return this._onTrackData}set onTrackData(e){this._onTrackData=e}get onVideoTracksDiscovered(){return this._onVideoTracksDiscovered}set onVideoTracksDiscovered(e){this._onVideoTracksDiscovered=e}_parseDataObject(e,t){if(console.log(`[ASF Demuxer] _parseDataObject() offset=${t}, dataLength=${e.length}`),t+50>e.length)return console.log(`[ASF Demuxer] _parseDataObject() failed: insufficient data. Needed 50 bytes, available=${e.length-t}`),-1;let i=this._readGuid(e,t);if(console.log(`[ASF Demuxer] _parseDataObject() read GUID=${i}`),i!=="3626b2758e66cf11a6d900aa0062ce6c")return console.log("[ASF Demuxer] _parseDataObject() failed: GUID does not match ASF Data Object GUID (3626b2758e66cf11a6d900aa0062ce6c)"),-1;let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=this._readUint64(n,t+16),a=this._readUint64(n,t+40);return console.log(`[ASF Demuxer] _parseDataObject() matched. Data Object size=${r}, packetCount=${a}`),this._dataOffset=t+50,this._dataOffset}parseChunks(e,t){let i=new Uint8Array(e),n=this._stash?this._stash.length:0;console.log(`[ASF Demuxer] === parseChunks() start === byteStart=${t}, incomingSize=${i.length}, stashLength=${n}`);let r;n>0?(r=new Uint8Array(n+i.length),r.set(this._stash,0),r.set(i,n),this._stash=null,console.log(`[ASF Demuxer] Merged stash with incoming. Total unified size=${r.length}`)):r=i;let a=0;if(!this._headerParsed){console.log("[ASF Demuxer] Header not parsed yet. Parsing ASF Header...");let l=this._parseHeader(r);if(l<0)return console.log(`[ASF Demuxer] Header parsing failed or need more data. Stashing all ${r.length} bytes.`),this._stash=r,e.byteLength;a=l,this._headerParsed=!0,console.log(`[ASF Demuxer] Header successfully parsed. offset advanced to ${a}`),this._sendAudioMetadataFromHeader()}if(!this._dataObjectParsed){console.log("[ASF Demuxer] Data Object not parsed yet. Parsing ASF Data Object...");let l=this._parseDataObject(r,a);if(l<0)return console.log(`[ASF Demuxer] Data Object parsing failed or need more data. Stashing from offset=${a}. Stash size=${r.length-a}`),this._stash=r.subarray(a),e.byteLength;a=l,this._dataObjectParsed=!0,console.log(`[ASF Demuxer] Data Object successfully parsed. offset advanced to ${a}`)}let o=0;for(;a+4<=r.length;){let l=new DataView(r.buffer,r.byteOffset,r.byteLength),c=l.getUint16(a,!0),d=l.getUint16(a+2,!0);if(c===17700){console.log(`[ASF Demuxer] End-of-Stream chunk type 0x4524 found at offset=${a}. Stopping packet loop.`),a=r.length;break}if(c!==17444||d<=0||a+4+d>r.length){console.log(`[ASF Demuxer] Packet loop break. Conditions: chunkType matches 0x4424? ${c===17444}, packetLength=${d}, remainingBytes=${r.length-a}`);break}o++;let f=this._parsePacket(r,a,t,n);if(f<=a||f>r.length){console.log(`[ASF Demuxer] Error: Infinite loop safeguard triggered. next offset ${f} is not moving forward from ${a}`);break}a=f}if(a<r.length?(this._stash=r.subarray(a),console.log(`[ASF Demuxer] Loop finished. Stashing remaining ${this._stash.length} bytes for next round.`),this._stash.length>10*1024*1024&&(console.log("[ASF Demuxer] Warning: Stash size is too large (> 10MB). Clearing stash to prevent memory leak."),this._stash=null)):(this._stash=null,console.log("[ASF Demuxer] Loop finished with zero leftover bytes.")),console.log(`[ASF Demuxer] Batch finished. Parsed ${o} packets. Audio frames in track: ${this._audioTrack.frames.length}, Video frames in track: ${this._videoTrack.frames.length}`),this._hasVideo&&!this._hasVideoMetaSent){console.log("[ASF Demuxer] Video track is active but Video Metadata has NOT been sent yet. Suppressing audio and video frame delivery until initialization completes.");let l={type:"audio",id:2,sequenceNumber:this._audioTrack.sequenceNumber,frames:[],length:0},c={type:"video",id:1,sequenceNumber:this._videoTrack.sequenceNumber,frames:[],length:0};this._onTrackData(l,c)}else if(this._hasVideoMetaSent||this._videoTrack.frames.length===0)this._onTrackData(this._audioTrack,this._videoTrack);else{console.log("[ASF Demuxer] Video track has frames but Video Metadata has NOT been sent yet (unexpected fallback). Emitting empty video track.");let l={type:"video",id:1,sequenceNumber:this._videoTrack.sequenceNumber,frames:[],length:0};this._onTrackData(this._audioTrack,l)}return e.byteLength}_readGuid(e,t){return Array.from(e.subarray(t,t+16)).map(i=>i.toString(16).padStart(2,"0")).join("")}_readUint64(e,t){let i=e.getUint32(t,!0),n=e.getUint32(t+4,!0);return i+n*4294967296}_splitAnnexB(e){let t=[],i=-1;for(let n=0;n<e.length-2;n++)if(e[n]===0&&e[n+1]===0&&e[n+2]===1){let a=n>0&&e[n-1]===0?n-1:n;if(i!==-1){let o=e.subarray(i,a);o.length>0&&t.push(o)}i=n+3}if(i!==-1){let n=e.subarray(i);n.length>0&&t.push(n)}else e.length>0&&t.push(e);return t}_stripTrailingZeroes(e){let t=e.length;for(;t>0&&e[t-1]===0;)t--;return e.subarray(0,t)}_extractVideoConfigFromExtraData(e){if(e.length===0){console.log("[ASF Demuxer] _extractVideoConfigFromExtraData() called with empty extraData");return}if(console.log(`[ASF Demuxer] _extractVideoConfigFromExtraData() extraData length=${e.length}, bytes=[${Array.from(e.subarray(0,10)).map(i=>i.toString(16)).join(",")}]`),e[0]===1&&e.length>=7){this._isAVCC=!0,console.log("[ASF Demuxer] Detected AVCC layout in ExtraData.");let i=e[5]&31,n=6;if(i>0&&n+2<=e.length){let r=e[n]<<8|e[n+1];n+=2,n+r<=e.length&&(this._headerSps=new Uint8Array(this._stripTrailingZeroes(e.subarray(n,n+r))),console.log(`[ASF Demuxer] Extracted SPS from AVCC extraData. size=${this._headerSps.length}`),n+=r)}if(n+1<=e.length){let r=e[n];if(n+=1,r>0&&n+2<=e.length){let a=e[n]<<8|e[n+1];n+=2,n+a<=e.length&&(this._headerPps=new Uint8Array(this._stripTrailingZeroes(e.subarray(n,n+a))),console.log(`[ASF Demuxer] Extracted PPS from AVCC extraData. size=${this._headerPps.length}`))}}if(this._headerSps&&this._headerPps){console.log("[ASF Demuxer] Extracted SPS and PPS successfully from AVCC ExtraData.");return}}console.log("[ASF Demuxer] Treating extraData as Annex B layout."),this._isAVCC=!1;let t=this._splitAnnexB(e);console.log(`[ASF Demuxer] ExtraData Annex B splitting found ${t.length} chunks.`);for(let i of t){if(i.length===0)continue;let n=i[0]&31;if(console.log(`[ASF Demuxer] Annex B extraData NALU type=${n}, size=${i.length}`),n===7&&!this._headerSps){let r=this._stripTrailingZeroes(i);[66,77,88,100,110,122,244].includes(r[1])?(this._headerSps=new Uint8Array(r),console.log(`[ASF Demuxer] Extracted valid SPS from Annex B extraData. profileIdc=${r[1]}, size=${this._headerSps.length}`)):console.log(`[ASF Demuxer] Annex B ExtraData: Rejected invalid H264 profileIdc=${r[1]}`)}else n===8&&!this._headerPps&&(this._headerPps=new Uint8Array(this._stripTrailingZeroes(i)),console.log(`[ASF Demuxer] Extracted PPS from Annex B extraData. size=${this._headerPps.length}`))}}_sendVideoMetadataFromHeader(e=!1){if(console.log(`[ASF Demuxer] _sendVideoMetadataFromHeader() force=${e}, _hasVideoMetaSent=${this._hasVideoMetaSent}`),this._hasVideoMetaSent&&!e){console.log("[ASF Demuxer] Video metadata has already been sent. Skipping.");return}if(!this._headerSps||!this._headerPps){console.log(`[ASF Demuxer] Cannot send video metadata. SPS or PPS missing. SPS=${!!this._headerSps}, PPS=${!!this._headerPps}`);return}let t=this._headerSps,i=this._headerPps,n=t[1];if(![66,77,88,100,110,122,244].includes(n)){console.log(`[ASF Demuxer] _sendVideoMetadataFromHeader: Invalid Profile IDC: ${n}. Resetting SPS/PPS.`),this._headerSps=null,this._headerPps=null;return}let a=this._parseSPSDimensions(t);if(!a){console.log("[ASF Demuxer] _sendVideoMetadataFromHeader: Failed to parse SPS dimensions. Resetting SPS/PPS."),this._headerSps=null,this._headerPps=null;return}let o=t[1],l=t[2],c=t[3],d=a.chromaFormat,f=new Uint8Array(11+t.length+i.length);f[0]=1,f[1]=o,f[2]=l,f[3]=c,f[4]=255,f[5]=225,f[6]=t.length>>>8&255,f[7]=t.length&255,f.set(t,8);let _=8+t.length;if(f[_]=1,f[_+1]=i.length>>>8&255,f[_+2]=i.length&255,f.set(i,_+3),this._hasVideoMetaSent&&this._lastSentAvcc&&this._arraysAreEqual(this._lastSentAvcc,f)){console.log("[ASF Demuxer] Video Metadata is identical to the last sent (by AVCC config bytes comparison). Blocking redundant metadata.");return}this._lastSentWidth=a.width,this._lastSentHeight=a.height,this._lastSentProfileIdc=o,this._lastSentLevelIdc=c,this._lastSentChromaFormat=d,this._lastSentAvcc=f;let g=t[1].toString(16).padStart(2,"0"),x=t[2].toString(16).padStart(2,"0"),m=t[3].toString(16).padStart(2,"0"),p="avc1."+g+x+m,h=a.width,b=a.height,S={type:"video",codecType:1,codec:p,codecConfig:f,trackId:1,timescale:1e3,duration:0,codecWidth:h,codecHeight:b,presentWidth:h,presentHeight:b,profile:"High",level:(c/10).toFixed(1),bitDepth:8,chromaFormat:a.chromaFormat,colorRange:0,colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1,sarRatio:{width:1,height:1},frameRate:{fixed:!1,fps:25,fps_num:25,fps_den:1},refFrameDuration:1e3/25};console.log(`[ASF Demuxer] === Sending Video Metadata === codec=${p}, dimensions=${h}x${b}, profileIdc=${o}, levelIdc=${c}`),this._onTrackMetadata(S),this._onVideoTracksDiscovered([S]),this._hasVideoMetaSent=!0;let E=this._mediaInfo;E.videoCodec=S.codec,E.width=h,E.height=b,this._maybeEmitMediaInfo()}_parseAudioSpecificConfig(e){try{console.log(`[ASF Demuxer] Parsing AudioSpecificConfig rawSize=${e.length}`);let t=new ze(new He(e));return console.log(`[ASF Demuxer] AudioSpecificConfig success: sampling_rate=${t.sampling_rate}, channel_count=${t.channel_count}, codec=${t.codec_mimetype}`),{config:Uint8Array.from(t.config),samplingRate:t.sampling_rate,channelCount:t.channel_count,codec:t.codec_mimetype,originalCodec:t.original_codec_mimetype}}catch(t){return console.log("[ASF Demuxer] AudioSpecificConfig parse failed with exception:",t),null}}_sendAudioMetadataFromHeader(){if(console.log(`[ASF Demuxer] _sendAudioMetadataFromHeader() _hasAudioMetaSent=${this._hasAudioMetaSent}`),this._hasAudioMetaSent){console.log("[ASF Demuxer] Audio Metadata already sent. Skipping.");return}let e=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],t,i="mp4a.40.2",n="mp4a.40.2",r=this._headerAudioSampleRate||44100,a=this._headerAudioChannels||2;if(this._headerAudioConfig&&this._headerAudioConfig.length>=2){console.log(`[ASF Demuxer] Parsing stored _headerAudioConfig size=${this._headerAudioConfig.length}`);let c=this._parseAudioSpecificConfig(this._headerAudioConfig);if(c)t=c.config,r=c.samplingRate,a=c.channelCount,i=c.codec,n=c.originalCodec;else{console.log("[ASF Demuxer] Parsing stored config failed. Generating fallback generic config.");let d=e.indexOf(r);d===-1&&(d=4);let f=2;t=new Uint8Array(2),t[0]=f<<3|(d&14)>>1,t[1]=(d&1)<<7|a<<3}}else{console.log(`[ASF Demuxer] No _headerAudioConfig found. Creating generic default config with rate=${r}, channels=${a}`);let c=e.indexOf(r);c===-1&&(c=4);let d=2;t=new Uint8Array(2),t[0]=d<<3|(c&14)>>1,t[1]=(c&1)<<7|a<<3}let o={type:"audio",codecType:2,codec:i,codecConfig:Array.from(t),trackId:2,timescale:1e3,duration:0,audioSampleRate:r,channelCount:a,originalCodec:n,preSkipSamples:0,inputSampleRate:r,outputGain:0,bitsPerSample:16,littleEndian:!1,refFrameDuration:1024/r*1e3};console.log(`[ASF Demuxer] === Sending Audio Metadata === codec=${i}, rate=${r}, channels=${a}`),this._onTrackMetadata(o),this._hasAudioMetaSent=!0,this._audioFrameDuration=1024/r*1e3;let l=this._mediaInfo;l.audioCodec=o.originalCodec,l.audioSampleRate=o.audioSampleRate,l.audioChannelCount=o.channelCount,this._maybeEmitMediaInfo()}_parseHeader(e){if(console.log(`[ASF Demuxer] _parseHeader() started. data.length=${e.length}`),e.length<64)return console.log(`[ASF Demuxer] _parseHeader failed: too short. length=${e.length}`),-1;let t=new DataView(e.buffer,e.byteOffset,e.byteLength),i=12,n=this._readGuid(e,i);if(console.log(`[ASF Demuxer] _parseHeader read main GUID=${n}`),n!=="3026b2758e66cf11a6d900aa0062ce6c")return console.log("[ASF Demuxer] _parseHeader failed: GUID does not match ASF Header Object GUID (3026b2758e66cf11a6d900aa0062ce6c)"),-1;let r=this._readUint64(t,i+16),a=t.getUint32(i+24,!0);console.log(`[ASF Demuxer] Main Header details: headerSize=${r}, objectCount=${a}`),i+=30;for(let o=0;o<a;o++){if(i+24>e.length)return console.log(`[ASF Demuxer] _parseHeader: early abort during sub-object parsing. Needed offset=${i+24}, got length=${e.length}`),-1;let l=this._readGuid(e,i),c=this._readUint64(t,i+16),d=i+24;if(console.log(`[ASF Demuxer] Header Sub-Object #${o}: GUID=${l}, size=${c}, offset=${i}`),l==="a1dcab8c47a9cf118ee400c00c205365"){this._preroll=t.getUint32(d+56,!0);let f=t.getUint32(d+68,!0),_=t.getUint32(d+72,!0);this._packetSize=_||f,console.log(`[ASF Demuxer] Found File Properties: preroll=${this._preroll}, packetSize=${this._packetSize}`)}else if(l==="9107dcb7b7a9cf118ee600c00c205365"){let f=this._readGuid(e,d),_=t.getUint32(d+40,!0),x=t.getUint16(d+48,!0)&127,m=d+54;if(console.log(`[ASF Demuxer] Found Stream Properties: streamId=${x}, streamType=${f}, typeLength=${_}`),f==="409e69f84d5bcf11a8fd00805f5c442b"){if(this._streams.set(x,{id:x,type:"audio"}),console.log(`[ASF Demuxer] Stream ID ${x} registered as AUDIO`),_>=18&&m+_<=e.length){let p=new DataView(e.buffer,e.byteOffset+m,18),h=p.getUint16(0,!0),b=p.getUint16(2,!0),S=p.getUint32(4,!0),E=p.getUint16(16,!0);this._headerAudioFormatTag=h,b>0&&(this._headerAudioChannels=b),S>0&&(this._headerAudioSampleRate=S),console.log(`[ASF Demuxer] Audio metadata from header: format=0x${h.toString(16)}, channels=${b}, rate=${S}, cbSize=${E}`),E>0&&m+18+E<=e.length&&(this._headerAudioConfig=e.slice(m+18,m+18+E),console.log(`[ASF Demuxer] Storing Audio Config from header, size=${this._headerAudioConfig.length}`))}}else if(f==="c0ef19bc4d5bcf11a8fd00805f5c442b"&&(this._streams.set(x,{id:x,type:"video"}),console.log(`[ASF Demuxer] Stream ID ${x} registered as VIDEO`),_>=51&&m+_<=e.length)){let p=new DataView(e.buffer,e.byteOffset+m,11),h=p.getUint32(0,!0),b=p.getUint32(4,!0),S=p.getUint16(9,!0),E=m+11,w=new DataView(e.buffer,e.byteOffset+E,40),R=w.getUint32(0,!0),F=w.getInt32(4,!0),y=Math.abs(w.getInt32(8,!0)),D=F>0?F:h,v=y>0?y:b;D>0&&(this._headerVideoWidth=D),v>0&&(this._headerVideoHeight=v),console.log(`[ASF Demuxer] Video metadata from header: dimensions=${this._headerVideoWidth}x${this._headerVideoHeight}, formatDataSize=${S}, biSize=${R}`);let T=E+R,L=S-R;if(L<=0&&(L=_-11-R),L>0&&T+L<=m+_){let I=e.subarray(T,T+L);console.log(`[ASF Demuxer] Found video ExtraData from Header. size=${L}. Extracting configs...`),this._extractVideoConfigFromExtraData(I)}else console.log("[ASF Demuxer] No valid video ExtraData inside header stream object.");this._sendVideoMetadataFromHeader()}}i+=c}return 12+r}_readVar(e,t,i,n){let r=n,a=!0;switch(i&3){case 0:break;case 1:t<e.length?(r=e[t],t+=1):a=!1;break;case 2:t+1<e.length?(r=e[t]|e[t+1]<<8,t+=2):a=!1;break;case 3:t+3<e.length?(r=(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0,t+=4):a=!1;break}return{value:r,offset:t,success:a}}_parsePacket(e,t,i,n){let r=t,a=new DataView(e.buffer,e.byteOffset,e.byteLength);if(t+4>e.length)return e.length;let o=a.getUint16(t+2,!0);if(t+=12,t>=e.length)return e.length;let l=e[t],c=(l&128)!==0,d=c?l&15:0;if(c?t+=1+d:t+=1,t+2>e.length)return e.length;let f=e[t++],_=e[t++],g=(f&1)!==0,x=f>>1&3,m=f>>3&3,p=f>>5&3,h,b=0;if(h=this._readVar(e,t,p,o),!h.success||(t=h.offset,h=this._readVar(e,t,x,0),!h.success)||(t=h.offset,h=this._readVar(e,t,m,0),!h.success)||(b=h.value,t=h.offset,t+6>e.length))return e.length;let S=(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0;t+=4;let E=e[t]|e[t+1]<<8;t+=2;let w=128,R=1;if(g){if(t>=e.length)return e.length;w=e[t++],R=w&63}let F=r+4+o,y=F-b;for(let D=0;D<R&&!(t>=y||t>=e.length);D++){let v=this._parsePayload(e,t,_,w,S,y,g,i,n);if(v<=t){console.log(`[ASF Demuxer] Warning: _parsePayload made no progress at segment ${D}. next=${v}, offset=${t}`);break}t=v}return F}_isAnnexB(e){if(this._isAVCC!==null)return!this._isAVCC;if(e.length<4)return!1;let t=0,i=!0;for(;t+4<=e.length;){let n=(e[t]<<24|e[t+1]<<16|e[t+2]<<8|e[t+3])>>>0;if(n===0||n>10*1024*1024||t+4+n>e.length){i=!1;break}t+=4+n}if(t===e.length&&i)return this._isAVCC=!0,console.log("[ASF Demuxer] Determined stream is AVCC through size matching."),!1;if(e.length>=4&&e[0]===0&&e[1]===0&&e[2]===0&&e[3]===1)return this._isAVCC=!1,console.log("[ASF Demuxer] Determined stream is Annex B via 4-byte start code."),!0;if(e[0]===0&&e[1]===0&&e[2]===1){let n=e[3]&128,r=e[3]&31;if(n===0&&r>0&&r<=19)return this._isAVCC=!1,console.log("[ASF Demuxer] Determined stream is Annex B via 3-byte start code and valid NAL type."),!0}return!1}_parsePayload(e,t,i,n,r,a,o,l,c){if(t>=e.length)return t;let d=e[t++],f=(d&128)!==0,_=d&127,g=i&3,x=i>>2&3,m=i>>4&3,p;if(p=this._readVar(e,t,m,0),!p.success)return e.length;let h=p.value;if(t=p.offset,p=this._readVar(e,t,x,0),!p.success)return e.length;let b=p.value;if(t=p.offset,p=this._readVar(e,t,g,0),!p.success)return e.length;let S=p.value;if(t=p.offset,t>e.length)return e.length;let E=0,w=r;if(S>=8){if(t+S>e.length)return e.length;E=(e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0,w=(e[t+4]|e[t+5]<<8|e[t+6]<<16|e[t+7]<<24)>>>0,t+=S}else if(S>0){if(t+S>e.length)return e.length;t+=S}let R;if(o){let T=n>>6&3;if(p=this._readVar(e,t,T,0),!p.success)return e.length;R=p.value,t=p.offset}else R=a-t;if((R<=0||isNaN(R)||t+R>e.length)&&(R=Math.max(0,a-t)),R<=0)return t;t+R>a&&(R=a-t);let y=l-c+t,D=e.subarray(t,t+R),v=this._streams.get(_);if(console.log(`[ASF Demuxer] _parsePayload(): streamId=${_}, keyframe=${f}, mediaObjectNumber=${h}, mediaObjectOffset=${b}, payloadSize=${R}`),v){if(v.type==="audio"){if(console.log(`[ASF Demuxer] Audio packet incoming. objectOffset=${b}, currentBufferOffset=${this._audioBuffer.currentSize}`),this._audioBuffer.mediaObjectNumber!==h){if(this._audioBuffer.chunks.length>0&&(console.log(`[ASF Demuxer] Audio payload Object number mismatch. Previous Object Number ${this._audioBuffer.mediaObjectNumber} !== current ${h}. Evaluating previous frame completion.`),this._audioBuffer.chunks.length>0)){let L=new Uint8Array(this._audioBuffer.currentSize),I=0;for(let U of this._audioBuffer.chunks)L.set(U,I),I+=U.byteLength;console.log(`[ASF Demuxer] Successfully reconstructed previous audio frame from leftover buffer. size=${L.byteLength}, pts=${this._audioBuffer.pts}`),this._parseAAC(L,this._audioBuffer.pts)}this._audioBuffer.mediaObjectNumber=h,this._audioBuffer.totalSize=E,this._audioBuffer.currentSize=0,this._audioBuffer.chunks=[],this._audioBuffer.pts=w,this._audioBuffer.packetTimestamp=r,console.log(`[ASF Demuxer] Audio buffer state initialized for Object Number ${h}. Expected totalSize=${E}`)}if(b===this._audioBuffer.currentSize?(this._audioBuffer.chunks.push(D),this._audioBuffer.currentSize+=R,console.log(`[ASF Demuxer] Appended audio chunk. currentSize updated to ${this._audioBuffer.currentSize}`)):(console.log(`[ASF Demuxer] Warning: Audio buffer discontinuity. offset=${b} !== currentSize=${this._audioBuffer.currentSize}. Purging active buffer.`),this._audioBuffer.mediaObjectNumber=null,this._audioBuffer.chunks=[],this._audioBuffer.currentSize=0),this._audioBuffer.mediaObjectNumber!==null){let T=!1;if((this._audioBuffer.totalSize>0&&this._audioBuffer.currentSize>=this._audioBuffer.totalSize||this._audioBuffer.totalSize===0&&!o)&&(T=!0),T){let L=new Uint8Array(this._audioBuffer.currentSize),I=0;for(let U of this._audioBuffer.chunks)L.set(U,I),I+=U.byteLength;console.log(`[ASF Demuxer] Reassembled complete active audio frame. Size=${L.byteLength}, pts=${this._audioBuffer.pts}`),this._parseAAC(L,this._audioBuffer.pts),this._audioBuffer.mediaObjectNumber=null,this._audioBuffer.chunks=[],this._audioBuffer.currentSize=0}}}else if(v.type==="video"){if(console.log(`[ASF Demuxer] Video packet incoming. objectOffset=${b}, currentBufferOffset=${this._videoBuffer.currentSize}`),this._videoBuffer.mediaObjectNumber!==h){if(this._videoBuffer.chunks.length>0)if(console.log(`[ASF Demuxer] Video payload Object number mismatch. Previous Object Number ${this._videoBuffer.mediaObjectNumber} !== current ${h}. Evaluating previous frame completion.`),this._videoBuffer.chunks.length>0){let L=new Uint8Array(this._videoBuffer.currentSize),I=0;for(let U of this._videoBuffer.chunks)L.set(U,I),I+=U.byteLength;console.log(`[ASF Demuxer] Successfully reconstructed previous video frame from leftover buffer. size=${L.byteLength}, pts=${this._videoBuffer.pts}`),this._parseH264(L,this._videoBuffer.pts,this._videoBuffer.packetTimestamp,this._videoBuffer.keyframe?1:0,this._videoBuffer.streamPosition)}else console.log(`[ASF Demuxer] Discarding incomplete previous video buffer. currentSize=${this._videoBuffer.currentSize}, totalSize=${this._videoBuffer.totalSize}`);this._videoBuffer.mediaObjectNumber=h,this._videoBuffer.totalSize=E,this._videoBuffer.currentSize=0,this._videoBuffer.chunks=[],this._videoBuffer.pts=w,this._videoBuffer.packetTimestamp=r,this._videoBuffer.keyframe=f,this._videoBuffer.streamPosition=y,console.log(`[ASF Demuxer] Video buffer state initialized for Object Number ${h}. Expected totalSize=${E}`)}if(b===this._videoBuffer.currentSize?(this._videoBuffer.chunks.push(D),this._videoBuffer.currentSize+=R,console.log(`[ASF Demuxer] Appended chunk. currentSize updated to ${this._videoBuffer.currentSize}`)):(console.log(`[ASF Demuxer] Warning: Video buffer discontinuity. offset=${b} !== currentSize=${this._videoBuffer.currentSize}. Purging active buffer.`),this._videoBuffer.mediaObjectNumber=null,this._videoBuffer.chunks=[],this._videoBuffer.currentSize=0),this._videoBuffer.mediaObjectNumber!==null){let T=!1;if((this._videoBuffer.totalSize>0&&this._videoBuffer.currentSize>=this._videoBuffer.totalSize||this._videoBuffer.totalSize===0&&!o)&&(T=!0),T){let L=new Uint8Array(this._videoBuffer.currentSize),I=0;for(let U of this._videoBuffer.chunks)L.set(U,I),I+=U.byteLength;console.log(`[ASF Demuxer] Reassembled complete active frame. Size=${L.byteLength}, pts=${this._videoBuffer.pts}`),this._parseH264(L,this._videoBuffer.pts,this._videoBuffer.packetTimestamp,this._videoBuffer.keyframe?1:0,this._videoBuffer.streamPosition),this._videoBuffer.mediaObjectNumber=null,this._videoBuffer.chunks=[],this._videoBuffer.currentSize=0}}}}else console.log(`[ASF Demuxer] Payload received for UNKNOWN or UNREGISTERED stream ID ${_}`);return t+R}_maybeEmitMediaInfo(){let e=this._mediaInfo;e.hasAudio=this._hasAudio,e.hasVideo=this._hasVideo,e.hasVideo?e.videoCodec!=null&&e.audioCodec!=null?e.mimeType='video/mp4; codecs="'+e.videoCodec+","+e.audioCodec+'"':e.videoCodec!=null&&(e.mimeType='video/mp4; codecs="'+e.videoCodec+'"'):e.audioCodec!=null&&(e.mimeType='video/mp4; codecs="'+e.audioCodec+'"'),(typeof e.isComplete=="function"?e.isComplete():(e.hasAudio?this._hasAudioMetaSent:!0)&&(e.hasVideo?this._hasVideoMetaSent:!0))&&(console.log(`[ASF Demuxer] _maybeEmitMediaInfo() complete! Emitting mediaInfo: mimeType=${e.mimeType}, width=${e.width}, height=${e.height}, sampleRate=${e.audioSampleRate}`),this._onMediaInfo(this._mediaInfo))}_parseSPSDimensions(e){try{let t=St.parseSPS(e);return t&&t.codec_size&&t.codec_size.width>0&&t.codec_size.height>0?{width:t.codec_size.width,height:t.codec_size.height,chromaFormat:t.chroma_format_idc}:null}catch(t){return console.log("[ASF Demuxer] Failed to parse SPS via SPSParser:",t),null}}_parseAAC(e,t){if(e.length===0)return;if(e.length>=7&&e[0]===255&&(e[1]&240)===240){let n=0;for(;n+7<=e.length&&!(e[n]!==255||(e[n+1]&240)!==240);){let r=((e[n+2]&192)>>6)+1,a=(e[n+2]&60)>>2,o=(e[n+2]&1)<<2|(e[n+3]&192)>>6,l=(e[n+3]&3)<<11|e[n+4]<<3|e[n+5]>>5&7,d=(e[n+1]&1)===0?9:7;if(l<d||n+l>e.length){console.log(`[ASF Demuxer] ADTS parse error: invalid frameLength=${l}, offset=${n}, payload.length=${e.length}`);break}if(!this._hasAudioMetaSent){console.log("[ASF Demuxer] Found first Audio ADTS Frame. Generating and sending metadata.");let _=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],g=new Uint8Array(2);g[0]=r<<3|(a&14)>>1,g[1]=(a&1)<<7|o<<3;let x=this._parseAudioSpecificConfig(g),m=x?.samplingRate??_[a]??44100,p=x?.channelCount??o,h=x?.codec??"mp4a.40."+r,b=x?.originalCodec??"mp4a.40."+r,S=x?.config??g,E={type:"audio",codecType:2,codec:h,codecConfig:Array.from(S),trackId:2,timescale:1e3,duration:0,audioSampleRate:m,channelCount:p,originalCodec:b,preSkipSamples:0,inputSampleRate:m,outputGain:0,bitsPerSample:16,littleEndian:!1,refFrameDuration:1024/m*1e3};console.log(`[ASF Demuxer] ADTS metadata calculated. rate=${m}, channels=${p}`),this._onTrackMetadata(E),this._hasAudioMetaSent=!0,this._audioFrameDuration=1024/m*1e3;let w=this._mediaInfo;w.audioCodec=E.originalCodec,w.audioSampleRate=E.audioSampleRate,w.audioChannelCount=E.channelCount,this._maybeEmitMediaInfo()}let f=e.subarray(n+d,n+l);this._pushAudioFrame(f,t),n+=l}return}if(this._hasAudioMetaSent||(console.log("[ASF Demuxer] Raw AAC frame without ADTS but Audio Metadata not sent yet. Trying to fallback to header values."),this._sendAudioMetadataFromHeader()),!this._hasAudioMetaSent){console.log("[ASF Demuxer] Skip: Audio Metadata could not be initialized or sent. Dropping AAC frame.");return}this._pushAudioFrame(e,t)}_pushAudioFrame(e,t){if(e.length===0)return;if(this._hasVideo&&!this._hasReceivedFirstKeyframe){console.log(`[ASF Demuxer] Dropped audio frame at pts=${t}. Reason: Video track is enabled but first keyframe is not yet received.`);return}let i=this._firstVideoPts!==null?this._firstVideoPts:this._baseTimestamp!==null?this._baseTimestamp:t,n=t-i;n<0&&(n=0);let r;this._audioNextDts===null?(r=n,console.log(`[ASF Demuxer] Audio timeline synchronized. Initialized first dts to ${r} (raw pts=${t}, refPts=${i})`)):(r=this._audioNextDts,Math.abs(n-r)>500&&(console.log(`[ASF Demuxer] Safe resync: Audio drift detected (relativePts=${n}, expectedDts=${r}). Jumping timeline.`),r=n)),this._lastAudioDts!==null&&r<=this._lastAudioDts&&(r=this._lastAudioDts+1),this._lastAudioDts=r,this._audioNextDts=r+this._audioFrameDuration;let a={unit:e,length:e.length,dts:r,pts:r};this._audioTrack.frames.push(a),this._audioTrack.length+=e.length,console.log(`[ASF Demuxer] Pushed audio frame: size=${e.length}, calculated dts=${r}, expectedNextDts=${this._audioNextDts}, original pts=${t}. total frames=${this._audioTrack.frames.length}`)}_arraysAreEqual(e,t){if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0}_parseH264(e,t,i,n,r){let a=!!(n&1);if(console.log(`[ASF Demuxer] _parseH264() frameSize=${e.length}, pts=${t}, packetTimestamp=${i}, flagsKeyframe=${a}`),!this._hasReceivedFirstKeyframe){if(!a){console.log(`[ASF Demuxer] Dropped non-keyframe video at pts=${t}. Reason: Waiting for the first keyframe (IDR).`);return}this._hasReceivedFirstKeyframe=!0,this._baseTimestamp===null&&(this._baseTimestamp=i,console.log(`[ASF Demuxer] Video frame initialized _baseTimestamp to ${i}`)),this._firstVideoPts===null&&(this._firstVideoPts=t,console.log(`[ASF Demuxer] Video frame initialized _firstVideoPts to ${t}`)),this._preroll===0&&(this._preroll=t-i,console.log(`[ASF Demuxer] Automatically determined _preroll = ${this._preroll} ms`))}let o=[],l=0,c=!1,d=!1,f=this._isAnnexB(e),_=[];if(f){let h=this._splitAnnexB(e);_.push(...h)}else{let h=0;for(;h+4<=e.length;){let b=(e[h]<<24|e[h+1]<<16|e[h+2]<<8|e[h+3])>>>0;if(b===0||h+4+b>e.length){console.log(`[ASF Demuxer] AVCC format error: naluLen=${b}, remainingBytes=${e.length-h}`);break}_.push(e.subarray(h+4,h+4+b)),h+=4+b}}for(let h of _){if(h.length===0)continue;let b=h[0]&31;if(b===7){let E=this._stripTrailingZeroes(h),w=E[1],R=[66,77,88,100,110,122,244].includes(w);console.log(`[ASF Demuxer] Found SPS in video stream payload. profileIdc=${w}, valid=${R}`),R&&(!this._headerSps||!this._arraysAreEqual(this._headerSps,E))&&(console.log("[ASF Demuxer] SPS configuration updated in-band."),this._headerSps=new Uint8Array(E),c=!0)}else if(b===8){let E=this._stripTrailingZeroes(h);console.log("[ASF Demuxer] Found PPS in video stream payload."),(!this._headerPps||!this._arraysAreEqual(this._headerPps,E))&&(console.log("[ASF Demuxer] PPS configuration updated in-band."),this._headerPps=new Uint8Array(E),c=!0)}else if(b===9)continue;b===5&&(d=!0);let S=new Uint8Array(4+h.length);S[0]=h.length>>>24&255,S[1]=h.length>>>16&255,S[2]=h.length>>>8&255,S[3]=h.length&255,S.set(h,4),o.push({type:b,data:S}),l+=S.length}if(d&&(a=!0),this._headerSps&&this._headerPps&&(!this._hasVideoMetaSent||c)){console.log("[ASF Demuxer] SPS/PPS extracted. Preparing to dispatch video metadata...");let h=this._headerSps,b=this._headerPps,S=this._parseSPSDimensions(h);if(!S)console.log("[ASF Demuxer] SPS parse dimensions failed during H264 processing."),this._headerSps=null,this._headerPps=null;else{let E=h[1].toString(16).padStart(2,"0"),w=h[2].toString(16).padStart(2,"0"),R=h[3].toString(16).padStart(2,"0"),F="avc1."+E+w+R,y=h[1],D=h[2],v=h[3],T=new Uint8Array(11+h.length+b.length);T[0]=1,T[1]=y,T[2]=D,T[3]=v,T[4]=255,T[5]=225,T[6]=h.length>>>8&255,T[7]=h.length&255,T.set(h,8);let L=8+h.length;T[L]=1,T[L+1]=b.length>>>8&255,T[L+2]=b.length&255,T.set(b,L+3);let I=S.width,U=S.height,z={type:"video",codecType:1,codec:F,codecConfig:T,trackId:1,timescale:1e3,duration:0,codecWidth:I,codecHeight:U,presentWidth:I,presentHeight:U,profile:"High",level:(v/10).toFixed(1),bitDepth:8,chromaFormat:S.chromaFormat,colorRange:0,colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1,sarRatio:{width:1,height:1},frameRate:{fixed:!1,fps:25,fps_num:25,fps_den:1},refFrameDuration:1e3/25};this._sendVideoMetadataFromHeader(c)}}if(!this._hasVideoMetaSent){console.log("[ASF Demuxer] Skip: Frame cannot be dispatched because Video Metadata has not been sent yet.");return}if(o.length===0||l===0){console.log("[ASF Demuxer] Skip: No valid NAL units parsed in frame.");return}let g=t-this._firstVideoPts;g<0&&(g=0),this._lastVideoPts!==null&&g<=this._lastVideoPts&&(g=this._lastVideoPts+1),this._lastVideoPts=g;let x=g;this._lastVideoDts=x,this._lastDts=x;let m=0,p={fileposition:r,dts:x,pts:g,cts:m,isKeyframe:a,units:o,length:l};this._videoTrack.frames.push(p),this._videoTrack.length+=l,console.log(`[ASF Demuxer] VideoFrame dispatched! dts=${x}, pts=${g}, cts=${m}, isKeyframe=${a}, payloadSize=${l}, trackLengthCount=${this._videoTrack.frames.length}`)}static probe(e){let t=new Uint8Array(e);if(console.log(`[ASF Demuxer] probe() called. byteLength=${t.byteLength}`),t.byteLength<28)return console.log(`[ASF Demuxer] probe() needMoreData: length=${t.byteLength} < 28`),{needMoreData:!0};let i=12,n=[48,38,178,117,142,102,207,17,166,217,0,170,0,98,206,108];for(let r=0;r<16;r++)if(t[i+r]!==n[r])return console.log(`[ASF Demuxer] probe() match failed: byte mismatch at GUID index ${r}. Expected 0x${n[r].toString(16)}, got 0x${t[i+r].toString(16)}`),{match:!1};return console.log("[ASF Demuxer] probe() MATCH successful!"),{match:!0,consumed:12,dataOffset:12,hasAudioTrack:!0,hasVideoTrack:!0}}};var kt=class s{static types;static init(){s.types={avc1:[],avcC:[],btrt:[],dinf:[],dref:[],esds:[],ftyp:[],hdlr:[],hvc1:[],hvcC:[],av01:[],av1C:[],mdat:[],mdhd:[],mdia:[],mfhd:[],minf:[],moof:[],moov:[],mp4a:[],mvex:[],mvhd:[],sdtp:[],stbl:[],stco:[],stsc:[],stsd:[],stsz:[],stts:[],tfdt:[],tfhd:[],traf:[],trak:[],trun:[],trex:[],tkhd:[],vmhd:[],smhd:[],chnl:[],"mp3 ":[],Opus:[],dOps:[],fLaC:[],dfLa:[],ipcm:[],pcmC:[],"ac-3":[],dac3:[],"ec-3":[],dec3:[],vp08:[],vp09:[],vpcC:[],colr:[]};for(let t in s.types)s.types.hasOwnProperty(t)&&(s.types[t]=[t.charCodeAt(0),t.charCodeAt(1),t.charCodeAt(2),t.charCodeAt(3)]);let e=s.constants={};e.FTYP=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,105,115,111,54,109,112,52,49]),e.FTYP_AV1=new Uint8Array([105,115,111,109,0,0,0,1,105,115,111,109,105,115,111,54,97,118,48,49,109,112,52,49]),e.FTYP_VP9=new Uint8Array([118,112,48,57,0,0,0,0,118,112,48,57,105,115,111,109,105,115,111,54]),e.STSD_PREFIX=new Uint8Array([0,0,0,0,0,0,0,1]),e.STTS=new Uint8Array([0,0,0,0,0,0,0,0]),e.STSC=e.STCO=e.STTS,e.STSZ=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0]),e.HDLR_VIDEO=new Uint8Array([0,0,0,0,0,0,0,0,118,105,100,101,0,0,0,0,0,0,0,0,0,0,0,0,86,105,100,101,111,72,97,110,100,108,101,114,0]),e.HDLR_AUDIO=new Uint8Array([0,0,0,0,0,0,0,0,115,111,117,110,0,0,0,0,0,0,0,0,0,0,0,0,83,111,117,110,100,72,97,110,100,108,101,114,0]),e.DREF=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,12,117,114,108,32,0,0,0,1]),e.SMHD=new Uint8Array([0,0,0,0,0,0,0,0]),e.VMHD=new Uint8Array([0,0,0,1,0,0,0,0,0,0,0,0])}static box(e){let t=8,i=null,n=Array.prototype.slice.call(arguments,1),r=n.length;for(let o=0;o<r;o++)t+=n[o].byteLength;i=new Uint8Array(t),i[0]=t>>>24&255,i[1]=t>>>16&255,i[2]=t>>>8&255,i[3]=t&255,i.set(e,4);let a=8;for(let o=0;o<r;o++)i.set(n[o],a),a+=n[o].byteLength;return i}static generateInitSegment(e){let t=s.constants.FTYP;e.type==="video"&&e.codec&&(e.codec.startsWith("av01")?t=s.constants.FTYP_AV1:e.codec.startsWith("vp09")&&(t=s.constants.FTYP_VP9));let i=s.box(s.types.ftyp,t),n=s.moov(e),r=new Uint8Array(i.byteLength+n.byteLength);return r.set(i,0),r.set(n,i.byteLength),r}static moov(e){let t=s.mvhd(e.timescale,e.duration),i=s.trak(e),n=s.mvex(e);return s.box(s.types.moov,t,i,n)}static mvhd(e,t){return s.box(s.types.mvhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,e>>>24&255,e>>>16&255,e>>>8&255,e&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255,0,1,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,255,255,255,255]))}static trak(e){return s.box(s.types.trak,s.tkhd(e),s.mdia(e))}static tkhd(e){let t=e.trackId,i=e.duration,n=(e.presentWidth||e.codecWidth||0)>>>0,r=(e.presentHeight||e.codecHeight||0)>>>0;return s.box(s.types.tkhd,new Uint8Array([0,0,0,7,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,t&255,0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,i&255,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,n>>>8&255,n&255,0,0,r>>>8&255,r&255,0,0]))}static mdia(e){return s.box(s.types.mdia,s.mdhd(e),s.hdlr(e),s.minf(e))}static mdhd(e){let t=e.timescale,i=e.duration;return s.box(s.types.mdhd,new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,t&255,i>>>24&255,i>>>16&255,i>>>8&255,i&255,85,196,0,0]))}static hdlr(e){let t=null;return e.type==="audio"?t=s.constants.HDLR_AUDIO:t=s.constants.HDLR_VIDEO,s.box(s.types.hdlr,t)}static minf(e){let t=null;return e.type==="audio"?t=s.box(s.types.smhd,s.constants.SMHD):t=s.box(s.types.vmhd,s.constants.VMHD),s.box(s.types.minf,t,s.dinf(),s.stbl(e))}static dinf(){return s.box(s.types.dinf,s.box(s.types.dref,s.constants.DREF))}static stbl(e){return s.box(s.types.stbl,s.stsd(e),s.box(s.types.stts,s.constants.STTS),s.box(s.types.stsc,s.constants.STSC),s.box(s.types.stsz,s.constants.STSZ),s.box(s.types.stco,s.constants.STCO))}static stsd(e){return e.type==="audio"?e.codec==="mp3"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.mp3(e)):e.codec==="ac-3"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.ac3(e)):e.codec==="ec-3"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.ec3(e)):e.codec==="opus"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.Opus(e)):e.codec=="flac"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.fLaC(e)):e.codec=="ipcm"?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.ipcm(e)):s.box(s.types.stsd,s.constants.STSD_PREFIX,s.mp4a(e)):e.type==="video"&&e.codec.startsWith("hvc1")?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.hvc1(e)):e.type==="video"&&e.codec.startsWith("av01")?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.av01(e)):e.type==="video"&&e.codec.startsWith("vp09")?s.box(s.types.stsd,s.constants.STSD_PREFIX,s.vp09(e)):s.box(s.types.stsd,s.constants.STSD_PREFIX,s.avc1(e))}static mp3(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types["mp3 "],n)}static mp4a(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types.mp4a,n,s.esds(e))}static ac3(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types["ac-3"],n,s.box(s.types.dac3,new Uint8Array(e.codecConfig)))}static ec3(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types["ec-3"],n,s.box(s.types.dec3,new Uint8Array(e.codecConfig)))}static esds(e){let t=Array.from(e.codecConfig||[]),i=t.length,n=new Uint8Array([0,0,0,0,3,23+i,0,1,0,4,15+i,64,21,0,0,0,0,0,0,0,0,0,0,0,5].concat([i]).concat(t).concat([6,1,2]));return s.box(s.types.esds,n)}static Opus(e){let t=e.channelCount,i=e.audioSampleRate,n=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,16,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types.Opus,n,s.dOps(e))}static dOps(e){let t=e.channelCount,i=e.channelConfigCode,n=e.audioSampleRate;if(e.codecConfig){let o=new Uint8Array(e.codecConfig).slice(),l=new DataView(o.buffer);return l.setUint8(0,0),l.setUint16(2,e.preSkipSamples,!1),l.setUint32(4,e.inputSampleRate,!1),l.setUint16(8,e.outputGain,!1),s.box(s.types.dOps,o)}let r=[];switch(i){case 1:case 2:r=[0];break;case 0:r=[255,1,1,0,1];break;case 128:r=[255,2,0,0,1];break;case 3:r=[1,2,1,0,2,1];break;case 4:r=[1,2,2,0,1,2,3];break;case 5:r=[1,3,2,0,4,1,2,3];break;case 6:r=[1,4,2,0,4,1,2,3,5];break;case 7:r=[1,4,2,0,4,1,2,3,5,6];break;case 8:r=[1,5,3,0,6,1,2,3,4,5,7];break;case 130:r=[1,1,2,0,1];break;case 131:r=[1,1,3,0,1,2];break;case 132:r=[1,1,4,0,1,2,3];break;case 133:r=[1,1,5,0,1,2,3,4];break;case 134:r=[1,1,6,0,1,2,3,4,5];break;case 135:r=[1,1,7,0,1,2,3,4,5,6];break;case 136:r=[1,1,8,0,1,2,3,4,5,6,7];break}let a=new Uint8Array([0,t,0,0,n>>>24&255,n>>>17&255,n>>>8&255,n>>>0&255,0,0,...r]);return s.box(s.types.dOps,a)}static fLaC(e){let t=e.channelCount,i=Math.min(e.audioSampleRate,65535),n=e.bitsPerSample,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,n,0,0,0,0,i>>>8&255,i&255,0,0]);return s.box(s.types.fLaC,r,s.dfLa(e))}static dfLa(e){let t=new Uint8Array([0,0,0,0,...e.codecConfig]);return s.box(s.types.dfLa,t)}static ipcm(e){let t=e.channelCount,i=Math.min(e.audioSampleRate,65535),n=e.bitsPerSample,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,t,0,n,0,0,0,0,i>>>8&255,i&255,0,0]);return e.channelCount===1?s.box(s.types.ipcm,r,s.pcmC(e)):s.box(s.types.ipcm,r,s.chnl(e),s.pcmC(e))}static chnl(e){let t=new Uint8Array([0,0,0,0,1,e.channelCount,0,0,0,0,0,0,0,0]);return s.box(s.types.chnl,t)}static pcmC(e){let t=e.littleEndian?1:0,i=e.bitsPerSample,n=new Uint8Array([0,0,0,0,t,i]);return s.box(s.types.pcmC,n)}static avc1(e){let t=e.codecConfig,i=e.codecWidth,n=e.codecHeight,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,i&255,n>>>8&255,n&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return s.box(s.types.avc1,r,s.box(s.types.avcC,t))}static hvc1(e){let t=e.codecConfig,i=e.codecWidth,n=e.codecHeight,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,i&255,n>>>8&255,n&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return s.box(s.types.hvc1,r,s.box(s.types.hvcC,t))}static buildVp9CodecConfig(e){let t=Number.isFinite(Number(e.profile))?Number(e.profile):0,i=Number.isFinite(Number(e.level))?Number(e.level):10,n=Number.isFinite(e.bitDepth)?e.bitDepth:8,r=Number.isFinite(e.chromaFormat)?e.chromaFormat:1,a=e.colorRange?1:0,o=Number.isFinite(e.colourPrimaries)?e.colourPrimaries:1,l=Number.isFinite(e.transferCharacteristics)?e.transferCharacteristics:1,c=Number.isFinite(e.matrixCoefficients)?e.matrixCoefficients:1;return new Uint8Array([1,0,0,0,t&255,i&255,(n&15)<<4|(r&7)<<1|a&1,o&255,l&255,c&255,0,0])}static normalizeVp9CodecConfig(e){let i=new Uint8Array(e);if(i.length===12)return i;if(i.length===9){let n=new Uint8Array(12);return n[0]=i[0]||1,n.set(i.subarray(1,9),4),n}if(i.length===8){let n=new Uint8Array(12);return n[0]=1,n.set(i,4),n}if(i.length===7){let n=new Uint8Array(12);return n[0]=i[0]||1,n.set(i.subarray(1,7),4),n}return null}static vp09(e){let t=e.codecConfig?s.normalizeVp9CodecConfig(e.codecConfig):null,i=e.codecWidth||e.presentWidth||192,n=e.codecHeight||e.presentHeight||108;t||(t=s.buildVp9CodecConfig(e));let r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,i&255,n>>>8&255,n&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]),a=[s.box(s.types.vpcC,t)],o=s.colr(e);return o&&a.push(o),s.box(s.types.vp09,r,...a)}static colr(e){let t=e.colourPrimaries,i=e.transferCharacteristics,n=e.matrixCoefficients,r=l=>Number.isFinite(l)&&l!==2;if(!r(t)||!r(i)||!r(n))return null;let a=e.colorRange?128:0,o=new Uint8Array([110,99,108,120,t>>>8&255,t&255,i>>>8&255,i&255,n>>>8&255,n&255,a]);return s.box(s.types.colr,o)}static av01(e){let t=e.codecConfig,i=e.codecWidth||192,n=e.codecHeight||108,r=new Uint8Array([0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i>>>8&255,i&255,n>>>8&255,n&255,0,72,0,0,0,72,0,0,0,0,0,0,0,1,10,120,113,113,47,102,108,118,46,106,115,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,24,255,255]);return s.box(s.types.av01,r,s.box(s.types.av1C,t))}static mvex(e){return s.box(s.types.mvex,s.trex(e))}static trex(e){let t=e.trackId,i=new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,t&255,0,0,0,1,0,0,0,0,0,0,0,0,0,1,0,1]);return s.box(s.types.trex,i)}static moof(e,t){return s.box(s.types.moof,s.mfhd(e.sequenceNumber),s.traf(e,t))}static mfhd(e){let t=new Uint8Array([0,0,0,0,e>>>24&255,e>>>16&255,e>>>8&255,e&255]);return s.box(s.types.mfhd,t)}static traf(e,t){let i=e.id,n=s.box(s.types.tfhd,new Uint8Array([0,0,0,0,i>>>24&255,i>>>16&255,i>>>8&255,i&255])),r=s.box(s.types.tfdt,new Uint8Array([0,0,0,0,t>>>24&255,t>>>16&255,t>>>8&255,t&255])),a=s.sdtp(e),o=s.trun(e,a.byteLength+16+16+8+16+8+8);return s.box(s.types.traf,n,r,o,a)}static sdtp(e){let t=e.frames||[],i=t.length,n=new Uint8Array(4+i);for(let r=0;r<i;r++){let a=t[r].flags;n[r+4]=a.isLeading<<6|a.dependsOn<<4|a.isDependedOn<<2|a.hasRedundancy}return s.box(s.types.sdtp,n)}static trun(e,t){let i=e.frames||[],n=i.length,r=!1;for(let d=0;d<n;d++)if(i[d].cts!==0){r=!0;break}let a=r?16:12,o=12+a*n,l=new Uint8Array(o);t+=8+o;let c=r?3841:1793;l.set([c>>>24&255,c>>>16&255,c>>>8&255,c&255,n>>>24&255,n>>>16&255,n>>>8&255,n&255,t>>>24&255,t>>>16&255,t>>>8&255,t&255],0);for(let d=0;d<n;d++){let f=i[d].duration,_=i[d].size,g=i[d].flags,x=i[d].cts,m=[f>>>24&255,f>>>16&255,f>>>8&255,f&255,_>>>24&255,_>>>16&255,_>>>8&255,_&255,g.isLeading<<2|g.dependsOn,g.isDependedOn<<6|g.hasRedundancy<<4|g.isNonSync,0,0];r&&m.push(x>>>24&255,x>>>16&255,x>>>8&255,x&255),l.set(m,12+a*d)}return s.box(s.types.trun,l)}static mdat(e){return s.box(s.types.mdat,e)}};kt.init();var Oe=kt;var di=class{static getSilentFrame(e,t){if(e==="mp4a.40.2"){if(t===1)return new Uint8Array([0,200,0,128,35,128]);if(t===2)return new Uint8Array([33,0,73,144,2,25,0,35,128]);if(t===3)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,142]);if(t===4)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,128,44,128,8,2,56]);if(t===5)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,56]);if(t===6)return new Uint8Array([0,200,0,128,32,132,1,38,64,8,100,0,130,48,4,153,0,33,144,2,0,178,0,32,8,224])}else{if(t===1)return new Uint8Array([1,64,34,128,163,78,230,128,186,8,0,0,0,28,6,241,193,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(t===2)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94]);if(t===3)return new Uint8Array([1,64,34,128,163,94,230,128,186,8,0,0,0,0,149,0,6,241,161,10,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,90,94])}return null}},ci=di;var ce=class{dts;pts;duration;originalDts;isSyncPoint;fileposition=null;constructor(e,t,i,n,r){this.dts=e,this.pts=t,this.duration=i,this.originalDts=n,this.isSyncPoint=r}},De=class{beginDts=0;endDts=0;beginPts=0;endPts=0;originalBeginDts=0;originalEndDts=0;syncPoints=[];firstFrame=null;lastFrame=null;appendSyncPoint(e){e.isSyncPoint=!0,this.syncPoints.push(e)}},Ft=class{_list=[];clear(){this._list=[]}appendArray(e){let t=this._list;e.length!==0&&(t.length>0&&e[0].originalDts<t[t.length-1].originalDts&&this.clear(),Array.prototype.push.apply(t,e))}getLastSyncPointBeforeDts(e){if(this._list.length==0)return null;let t=this._list,i=0,n=t.length-1,r=0,a=0,o=n;for(e<t[0].dts&&(i=0,a=o+1);a<=o;)if(r=a+Math.floor((o-a)/2),r===n||e>=t[r].dts&&e<t[r+1].dts){i=r;break}else t[r].dts<e?a=r+1:o=r-1;return this._list[i]}},Le=class{_type;_list=[];_lastAppendLocation=-1;constructor(e){this._type=e}get type(){return this._type}get length(){return this._list.length}isEmpty(){return this._list.length===0}clear(){this._list=[],this._lastAppendLocation=-1}_searchNearestSegmentBefore(e){let t=this._list;if(t.length===0)return-2;let i=t.length-1,n=0,r=0,a=i,o=0;if(e<t[0].originalBeginDts)return o=-1,o;for(;r<=a;){let l=t[n].lastFrame;if(n=r+Math.floor((a-r)/2),n===i||l&&e>l.originalDts&&e<t[n+1].originalBeginDts){o=n;break}else t[n].originalBeginDts<e?r=n+1:a=n-1}return o}_searchNearestSegmentAfter(e){return this._searchNearestSegmentBefore(e)+1}append(e){let t=this._list,i=e,n=this._lastAppendLocation,r=0;n!==-1&&n<t.length&&t[n].lastFrame&&i.originalBeginDts>=t[n].lastFrame.originalDts&&(n===t.length-1||n<t.length-1&&i.originalBeginDts<t[n+1].originalBeginDts)?r=n+1:t.length>0&&(r=this._searchNearestSegmentBefore(i.originalBeginDts)+1),this._lastAppendLocation=r,this._list.splice(r,0,i)}getLastSegmentBefore(e){let t=this._searchNearestSegmentBefore(e);return t>=0?this._list[t]:null}getLastFrameBefore(e){let t=this.getLastSegmentBefore(e);return t!=null?t.lastFrame:null}getLastSyncPointBefore(e){let t=this._searchNearestSegmentBefore(e),i=this._list[t].syncPoints;for(;i.length===0&&t>0;)t--,i=this._list[t].syncPoints;return i.length>0?i[i.length-1]:null}};function Be(s){return`${Math.max(0,Math.trunc(s))}`.padStart(2,"0")}function ui(s){return Number.isFinite(s)&&s!==2}function $r(s){let e=Number.parseInt(s.profile,10),t=Number.parseInt(s.level,10),i=s.bitDepth;if(!Number.isFinite(e)||!Number.isFinite(t)||!Number.isFinite(i))return s.codec;let n=["vp09",Be(e),Be(t),Be(i)];return!Number.isFinite(s.chromaFormat)||!ui(s.colourPrimaries)||!ui(s.transferCharacteristics)||!ui(s.matrixCoefficients)||!Number.isFinite(s.colorRange)?n.join("."):n.concat([Be(s.chromaFormat),Be(s.colourPrimaries),Be(s.transferCharacteristics),Be(s.matrixCoefficients),Be(s.colorRange?1:0)]).join(".")}function Gr(s){return s?s instanceof Uint8Array?s:ArrayBuffer.isView(s)?new Uint8Array(s.buffer,s.byteOffset,s.byteLength):s instanceof ArrayBuffer?new Uint8Array(s):typeof s.length=="number"?Uint8Array.from(s):null:null}function cr(s,e=16){let t=Gr(s);return!t||t.byteLength===0?"empty":Array.from(t.subarray(0,Math.min(e,t.byteLength))).map(i=>i.toString(16).padStart(2,"0")).join(" ")}var hi=class s extends Ce{static TAG="MP4Remuxer";_dtsBase=1/0;_audioDtsBase=1/0;_videoDtsBase=1/0;_audioNextDts=1/0;_videoNextDts=1/0;_audioStashedLastFrame=null;_videoStashedLastFrame=null;_audioSegmentInfoList=new Le("audio");_videoSegmentInfoList=new Le("video");_onInitSegment=ee;_onMediaSegment=ee;_pendingAudioInitSegment=null;_pendingVideoInitSegment=null;_forceFirstIDR;_fillSilentAfterSeek;_mp3UseMpegAudio;_fillAudioTimestampGap;constructor(e){super(e),this._forceFirstIDR=!!(W.chrome&&W.version&&(W.version.major<50||W.version.major===50&&W.version.build&&W.version.build<2661)),this._fillSilentAfterSeek=W?.msedge||W?.msie||!1,this._mp3UseMpegAudio=!W.firefox,this._fillAudioTimestampGap=this._config.fixAudioTimestampGap}destroy(){this._dtsBase=1/0,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=1/0,this._videoNextDts=1/0,this._audioMeta=null,this._videoMeta=null,this._audioSegmentInfoList.clear(),this._videoSegmentInfoList.clear(),this._pendingAudioInitSegment=null,this._pendingVideoInitSegment=null,this._onInitSegment=ee,this._onMediaSegment=ee}bindDataSource(e){return e.onTrackData=this._onTrackData.bind(this),e.onTrackMetadata=this._onTrackMetadata.bind(this),this}get onInitSegment(){return this._onInitSegment}set onInitSegment(e){this._onInitSegment=e}get onMediaSegment(){return this._onMediaSegment}set onMediaSegment(e){this._onMediaSegment=e}insertDiscontinuity(){this._audioNextDts=this._videoNextDts=1/0}clear(){this._audioStashedLastFrame=null,this._videoStashedLastFrame=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear(),this._pendingAudioInitSegment=null,this._pendingVideoInitSegment=null}_getMp4TrackId(e,t){return Number.isFinite(t)&&t>0?t:e==="video"?1:2}_getMp4Metadata(e){return{...e,trackId:this._getMp4TrackId(e.type,e.trackId)}}_describeMetadata(e){let t=`type=${e.type} codec=${e.codec} duration=${e.duration}`;return e.type==="audio"&&(t+=` channels=${e.channelCount} sampleRate=${e.audioSampleRate}`,t+=` config=${cr(e.codecConfig)}`),t}_describeInitSegment(e){return`type=${e.type} codec=${e.codec||"none"} container=${e.container} bytes=${e.data.byteLength} head=${cr(e.data)}`}_onTrackData(e,t){this._dtsBase===1/0&&this._calculateDtsBase(e,t),this._pendingVideoInitSegment&&(u.v(s.TAG,`_onTrackData(): flushing pending video init before data batch, videoFrames=${t.frames.length} audioFrames=${e.frames.length} ${this._describeInitSegment(this._pendingVideoInitSegment)}`),this._onInitSegment("video",this._pendingVideoInitSegment),this._pendingVideoInitSegment=null),this._pendingAudioInitSegment&&(u.v(s.TAG,`_onTrackData(): flushing pending audio init before data batch, videoFrames=${t.frames.length} audioFrames=${e.frames.length} ${this._describeInitSegment(this._pendingAudioInitSegment)}`),this._onInitSegment("audio",this._pendingAudioInitSegment),this._pendingAudioInitSegment=null),this._remuxVideo(t,!1),this._remuxAudio(e,!1)}_onTrackMetadata(e){let t=null,i="mp4",n=e.codec,r=e.type;e.type==="audio"?(this._isAudioMetadataDispatched=!0,this._audioMeta=e,e.codec==="mp3"&&this._mp3UseMpegAudio?(i="mpeg",n="",t=new Uint8Array):t=Oe.generateInitSegment(this._getMp4Metadata(e))):(this._isVideoMetadataDispatched=!0,this._videoMeta=e,e.codecType===4&&(n=$r(e)),t=Oe.generateInitSegment(this._getMp4Metadata(e)));let a={kind:0,type:r,data:new Uint8Array(t.buffer),codec:n,container:`${r}/${i}`,mediaDuration:e.duration};r==="audio"?(this._pendingAudioInitSegment?u.v(s.TAG,`_onTrackMetadata(): replacing pending audio init ${this._describeInitSegment(this._pendingAudioInitSegment)} -> ${this._describeMetadata(e)}`):u.v(s.TAG,`_onTrackMetadata(): stashing audio init from metadata ${this._describeMetadata(e)}`),this._pendingAudioInitSegment=a):(this._pendingVideoInitSegment?u.v(s.TAG,`_onTrackMetadata(): replacing pending video init ${this._describeInitSegment(this._pendingVideoInitSegment)} -> ${this._describeMetadata(e)}`):u.v(s.TAG,`_onTrackMetadata(): stashing video init from metadata ${this._describeMetadata(e)}`),this._pendingVideoInitSegment=a)}_calculateDtsBase(e,t){this._dtsBase===1/0&&(e&&e.frames&&e.frames.length&&(this._audioDtsBase=e.frames[0].dts),t&&t.frames&&t.frames.length&&(this._videoDtsBase=t.frames[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase))}get timestampBase(){if(this._dtsBase!==1/0)return this._dtsBase}flushStashedFrames(){let e=this._videoStashedLastFrame,t=this._audioStashedLastFrame,i={type:"video",id:1,sequenceNumber:0,frames:[],length:0};e!=null&&(i.frames.push(e),i.length=e.length);let n={type:"audio",id:2,sequenceNumber:0,frames:[],length:0};t!=null&&(n.frames.push(t),n.length=t.length),this._videoStashedLastFrame=null,this._audioStashedLastFrame=null,this._remuxVideo(i,!0),this._remuxAudio(n,!0)}_remuxAudio(e,t){if(!this._audioMeta||e.frames.length===0)return;this._pendingAudioInitSegment&&(u.v(s.TAG,`_remuxAudio(): flushing pending audio init before audio remux, audioFrames=${e.frames.length} force=${t} ${this._describeInitSegment(this._pendingAudioInitSegment)}`),this._onInitSegment("audio",this._pendingAudioInitSegment),this._pendingAudioInitSegment=null);let i=e,n=i.frames,r,a=-1,o=-1,l=-1,c=this._audioMeta.refFrameDuration,d=this._audioMeta.codec==="mp3"&&this._mp3UseMpegAudio,f=this._dtsBase!==1/0&&this._audioNextDts===1/0,_=!1;if(n.length===1&&!t)return;let g=0,x=null,m=0;d?(g=0,m=i.length):(g=8,m=8+i.length);let p;if(n.length>1&&(p=n.pop(),m-=p?.length||0),this._audioStashedLastFrame!=null){let F=this._audioStashedLastFrame;this._audioStashedLastFrame=null,n.unshift(F),m+=F?.length||0}p!=null&&(this._audioStashedLastFrame=p);let h=n[0].dts-this._dtsBase;if(this._audioNextDts!==1/0)r=h-this._audioNextDts;else if(this._audioSegmentInfoList.isEmpty())r=0,this._fillSilentAfterSeek&&!this._videoSegmentInfoList.isEmpty()&&this._audioMeta.originalCodec!=="mp3"&&(_=!0);else{let F=this._audioSegmentInfoList.getLastFrameBefore(h);if(F!=null){let y=h-(F.originalDts+F.duration);y<=3&&(y=0);let D=F.dts+F.duration+y;r=h-D}else r=0}if(_){let F=h-r,y=this._videoSegmentInfoList.getLastSegmentBefore(h);if(y!=null&&y.beginDts<F){let D=ci.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);if(D){let v=y.beginDts,T=F-y.beginDts;u.v(s.TAG,`InsertPrefixSilentAudio: dts: ${v}, duration: ${T}`),n.unshift({unit:D,length:D.byteLength,dts:v,pts:v}),m+=D.byteLength}}else _=!1}let b=[];for(let F=0;F<n.length;F++){let y=n[F],D=y.unit,v=y.dts-this._dtsBase,T=v,L=!1,I=[],U=0;if(!(v<-.001)){if(this._audioMeta.codec!=="mp3"&&!Number.isNaN(c)){let z=v,Q=3;if(this._audioNextDts!==1/0&&(z=this._audioNextDts),r=v-z,r<=-Q*c){u.w(s.TAG,`Dropping 1 audio frame (originalDts: ${v} ms ,curRefDts: ${z} ms)  due to dtsCorrection: ${r} ms overlap.`);continue}else if(r>=Q*c&&this._fillAudioTimestampGap&&!W.safari){L=!0;let te=Math.floor(r/c);u.w(s.TAG,`Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.
originalDts: ${v} ms, curRefDts: ${z} ms, dtsCorrection: ${Math.round(r)} ms, generate: ${te} frames`),T=Math.floor(z),U=Math.floor(z+c)-T;let $=ci.getSilentFrame(this._audioMeta.originalCodec,this._audioMeta.channelCount);$===null&&(u.w(s.TAG,`Unable to generate silent frame for ${this._audioMeta.originalCodec} with ${this._audioMeta.channelCount} channels, repeat last frame`),$=D);for(let J=0;J<te;J++){z=z+c;let le=Math.floor(z),Se=Math.floor(z+c)-le,H={dts:le,pts:le,cts:0,unit:$,size:$.byteLength,duration:Se,originalDts:v,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}};I.push(H),m+=H.size}this._audioNextDts=z+c}else T=Math.floor(z),U=Math.floor(z+c)-T,this._audioNextDts=z+c}else T=v-r,F!==n.length-1?U=n[F+1].dts-this._dtsBase-r-T:p!=null?U=p.dts-this._dtsBase-r-T:b.length>=1?U=b[b.length-1].duration:U=Math.floor(c),this._audioNextDts=T+U;a===-1&&(a=T),b.push({dts:T,pts:T,cts:0,unit:y.unit,size:y.unit.byteLength,duration:U,originalDts:v,flags:{isLeading:0,dependsOn:1,isDependedOn:0,hasRedundancy:0}}),L&&b.push(...I)}}if(b.length===0){i.frames=[],i.length=0;return}d?x=new Uint8Array(m):(x=new Uint8Array(m),x[0]=m>>>24&255,x[1]=m>>>16&255,x[2]=m>>>8&255,x[3]=m&255,x.set(Oe.types.mdat,4));for(let F=0;F<b.length;F++){let y=b[F].unit;x.set(y,g),g+=y.byteLength}let S=b[b.length-1];o=S.dts+S.duration;let E=new De;E.beginDts=a,E.endDts=o,E.beginPts=a,E.endPts=o,E.originalBeginDts=b[0].originalDts,E.originalEndDts=S.originalDts+S.duration,E.firstFrame=new ce(b[0].dts,b[0].pts,b[0].duration,b[0].originalDts,!1),E.lastFrame=new ce(S.dts,S.pts,S.duration,S.originalDts,!1),this._isLive||this._audioSegmentInfoList.append(E),i.frames=b,i.sequenceNumber++;let w=null;d?w=new Uint8Array:w=Oe.moof({...i,id:this._getMp4TrackId("audio",i.id)},a),i.frames=[],i.length=0;let R={kind:1,type:"audio",data:new Uint8Array(this._mergeBoxes(w,x).buffer),frameCount:b.length,info:E};d&&f&&(R.timestampOffset=a),this._onMediaSegment("audio",R)}_remuxVideo(e,t){if(e.frames.length<=1&&!t)return;if(!this._videoMeta){u.w(s.TAG,"_remuxVideo: VideoData received before CodecConfigurationRecord");return}this._pendingVideoInitSegment&&(this._onInitSegment("video",this._pendingVideoInitSegment),this._pendingVideoInitSegment=null);let i=e,n=i.frames,r,a=-1,o=-1,l=-1,c=-1,d=8,f=null,_=8+e.length,g;if(n.length>1&&(g=n.pop(),_-=g?.length||0),this._videoStashedLastFrame!=null){let R=this._videoStashedLastFrame;this._videoStashedLastFrame=null,n.unshift(R),_+=R.length}g!=null&&(this._videoStashedLastFrame=g);let x=this._videoMeta.codecType===5,m=n[0].dts-this._dtsBase;if(this._videoNextDts!==1/0)r=m-this._videoNextDts;else if(this._videoSegmentInfoList.isEmpty())r=0;else{let R=this._videoSegmentInfoList.getLastFrameBefore(m);if(R!=null){let F=m-(R.originalDts+R.duration);F<=3&&(F=0);let y=R.dts+R.duration+F;r=m-y}else r=0}let p=new De,h=[],b=0;for(let R=0;R<n.length;R++){let F=n[R],y=F.dts-this._dtsBase,D=F.isKeyframe,v=y-r,T=x?0:F.cts,L=v+T;a===-1&&(a=v,l=L);let I=0;if(R!==n.length-1?I=n[R+1].dts-this._dtsBase-r-v:g!=null?I=g.dts-this._dtsBase-r-v:h.length>=1?I=h[h.length-1].duration:I=Math.floor(this._videoMeta.refFrameDuration),D){let Q=new ce(v,L,I,F.dts,!0);Q.fileposition=F.fileposition,p.appendSyncPoint(Q)}let U=F.units,z=F.length;if(x){let Q=0;U=F.units.map(te=>{let $=Te.stripLeadingObuFraming(te.data);return Q+=$.byteLength,{type:te.type,data:$}}),z=Q,b+=Q}h.push({dts:v,pts:L,cts:T,units:U,size:z,isKeyframe:D,duration:I,originalDts:y,flags:{isLeading:0,dependsOn:D?2:1,isDependedOn:D?1:0,hasRedundancy:0,isNonSync:D?0:1}})}x&&(_=8+b),f=new Uint8Array(_),f[0]=_>>>24&255,f[1]=_>>>16&255,f[2]=_>>>8&255,f[3]=_&255,f.set(Oe.types.mdat,4);for(let R=0;R<h.length;R++){let F=h[R].units;for(;F.length;){let D=F.shift().data;f.set(D,d),d+=D.byteLength}}let S=h[h.length-1];if(o=S.dts+S.duration,c=S.pts+S.duration,this._videoNextDts=o,p.beginDts=a,p.endDts=o,p.beginPts=l,p.endPts=c,p.originalBeginDts=h[0].originalDts,p.originalEndDts=S.originalDts+S.duration,p.firstFrame=new ce(h[0].dts,h[0].pts,h[0].duration,h[0].originalDts,h[0].isKeyframe),p.lastFrame=new ce(S.dts,S.pts,S.duration,S.originalDts,S.isKeyframe),this._isLive||this._videoSegmentInfoList.append(p),i.frames=h,i.sequenceNumber++,this._forceFirstIDR){let R=h[0].flags;R.dependsOn=2,R.isNonSync=0}let E=Oe.moof({...i,id:this._getMp4TrackId("video",i.id)},a);i.frames=[],i.length=0;let w={kind:1,type:"video",data:new Uint8Array(this._mergeBoxes(E,f).buffer),frameCount:h.length,info:p};this._onMediaSegment("video",w)}_mergeBoxes(e,t){let i=new Uint8Array(e.byteLength+t.byteLength);return i.set(e,0),i.set(t,e.byteLength),i}},Ct=hi;var Tt=0;function we(s){return new TextEncoder().encode(s)}function Hr(s){let e=new ArrayBuffer(8);return new DataView(e).setFloat64(0,s,!1),new Uint8Array(e)}function xe(s){return s<=255?G(s,1):s<=65535?G(s,2):s<=16777215?G(s,3):G(s,4)}function G(s,e){let t=new Uint8Array(e);for(let i=e-1;i>=0;i--)t[i]=s&255,s>>=8;return t}function zr(s){u.a(Re.TAG,`writeVint assert failed: value of ${s} > 0xFFFFFFF`,s>=0&&s<=4294967295);let e=0,t=s+1;do e++;while((t>>>=7)>0&&e<8);let i=new Uint8Array(e);t=s|1<<e*7;for(let n=e-1,r=0;n>=0;n--,r++)i[r]=t>>n*8&255;return i}function C(s,e){let t=xe(s),i=zr(e.length);return N([t,i,e])}function N(s){let e=s.reduce((n,r)=>n+r.length,0),t=new Uint8Array(e),i=0;for(let n of s)t.set(n,i),i+=n.length;return t}function qr(s){switch(s){case 4:return"V_VP9";case 5:return"V_AV1";default:return u.a(Re.TAG,`GetCodecId(): Unsupported codec ${Rt[s]}`),""}}function Wr(s){let e=Number(s.profile),t=Number(s.level),i=s.bitDepth,n=s.chromaFormat;return N([[1,e],[2,t],[3,i],[4,n]].map(([a,o])=>new Uint8Array([a,1,o&255])))}function Kr(s){let e=[];if(Number.isFinite(s.matrixCoefficients)&&e.push(C(21937,xe(s.matrixCoefficients))),Number.isFinite(s.bitDepth)&&e.push(C(21938,xe(s.bitDepth))),Number.isFinite(s.colorRange)){let t=s.colorRange>0?2:1;e.push(C(21945,xe(t)))}return Number.isFinite(s.transferCharacteristics)&&e.push(C(21946,xe(s.transferCharacteristics))),Number.isFinite(s.colourPrimaries)&&e.push(C(21947,xe(s.colourPrimaries))),e.length===0?null:C(21936,N(e))}var Re=class s{static TAG="WebMGenerator";static generateVideoInitSegment(e){let t=e.codecWidth,i=e.codecHeight,n=e.codecConfig,r=e.codecType===4?Wr(e):n,a=Kr(e);if(!r)return u.e(s.TAG,"generateVideoInitSegment(): Missing codec configuration for video track"),new Uint8Array(0);let o=C(440786851,N([C(17030,G(1,1)),C(17143,G(1,1)),C(17138,G(4,1)),C(17139,G(8,1)),C(17026,we("webm")),C(17031,G(2,1)),C(17029,G(2,1))])),l=C(357149030,N([C(2807729,G(1e6,3)),C(19840,we("e-remux")),C(22337,we("e-remux"))])),c=[C(176,G(t,2)),C(186,G(i,2)),...a?[a]:[]],d=C(174,N([C(215,G(1,1)),C(29637,G(1,1)),C(131,G(1,1)),C(134,we(qr(e.codecType))),C(25506,r),C(224,N(c))])),f=C(374648427,N([d])),_=N([l,f]),g=new Uint8Array([24,83,128,103,255]),x=N([g,_]);return N([o,x])}static generateAudioInitSegment(e){let t=e.codecConfig,i=e.codec,n=i==="opus",r=n?48e3:e.audioSampleRate,a=e.channelCount,o=Math.round(e.preSkipSamples*(1e9/r)),l=8e7;if(!t)return u.e(s.TAG,"generateAudioInitSegment(): Missing codec configuration for audio track"),new Uint8Array(0);let c;switch(i){case"opus":c="A_OPUS";break;case"vorbis":c="A_VORBIS";break;default:return u.w(s.TAG,`generateAudioInitSegment: Unsupported codec ${i}`),new Uint8Array}let d=C(440786851,N([C(17030,G(1,1)),C(17143,G(1,1)),C(17138,G(4,1)),C(17139,G(8,1)),C(17026,we("webm")),C(17031,G(2,1)),C(17029,G(2,1))])),f=C(357149030,N([C(2807729,G(1e6,3)),C(19840,we("e-remux")),C(22337,we("e-remux"))])),_=C(174,N([C(215,G(2,1)),C(29637,G(2,1)),C(131,G(2,1)),C(134,we(c)),C(25506,t),...n?[C(22186,xe(o)),C(22203,xe(l))]:[],C(225,N([C(181,Hr(r)),C(159,G(a,1))]))])),g=C(374648427,N([_])),x=N([f,g]),m=new Uint8Array([24,83,128,103,255]),p=N([m,x]),h=N([d,p]);return u.v(s.TAG,`generateAudioInitSegment() codec=${i}, sampleRate=${r}, channels=${a}, codecConfig.length=${t.length}`),h}static generateVideoCluster(e,t,i,n){let r=e[t].dts,a=C(231,xe(r)),o=0,l,c=e[e.length-1].dts-e[t].dts;(c<0||c>32767)&&u.w(s.TAG,`generateVideoCluster() - cluster contains blockTimecode(s) out of range; clusterDTS: ${r} dtsDelta: ${c} framesToProcess: ${e.length-t}`),e[0].isKeyframe||u.e(s.TAG,"Cluster must start with a keyframe");let d=[];for(let f=t;f<e.length;f++){let{rawData:_,dts:g,isKeyframe:x}=e[f],m=g-r;if(m<0||m>32767){o=f;break}if(f>t&&x&&u.e(s.TAG,`generateVideoCluster() - Frame at index ${f} is a keyframe but not the first frame in the cluster.`),Tt===0||Tt===2&&f<e.length-1){let h=new Uint8Array(4);h[0]=129,h[1]=m>>8&255,h[2]=m&255,h[3]=x?128:0;let b=n===5?Te.stripLeadingObuFraming(_):_,S=C(163,N([h,b]));d.push(S)}else{let h=new Uint8Array(4);h[0]=129,h[1]=m>>8&255,h[2]=m&255,h[3]=x?128:0;let b=n===5?Te.stripLeadingObuFraming(_):_,S=C(161,N([h,b])),E=C(155,G(i,4)),w=C(160,N([S,E]));d.push(w)}}if(o>0){let f=C(524531317,N([a,...d])),_=s.generateVideoCluster(e,o,i,n);l=N([f,_])}else l=C(524531317,N([a,...d]));return l}static generateAudioCluster(e,t,i){let n=e[t].dts,r=C(231,xe(n)),a=0,o,l=e[e.length-1].dts-e[t].dts;(l<0||l>32767)&&u.w(s.TAG,`generateAudioCluster() - cluster contains blockTimecode(s) out of range; clusterDTS: ${n} dtsDelta: ${l} framesToProcess: ${e.length-t}`);let c=[];for(let d=t;d<e.length;d++){let{unit:f,dts:_}=e[d],g=_-n;if(g<0||g>32767){a=d;break}if(Tt===0||Tt===2&&d<e.length-1){let m=new Uint8Array(4);m[0]=130,m[1]=g>>8&255,m[2]=g&255,m[3]=0;let p=C(163,N([m,f]));c.push(p)}else{let m=new Uint8Array(3);m[0]=130,m[1]=g>>8&255,m[2]=g&255;let p=C(161,N([m,f])),h=C(155,G(i,4)),b=C(160,N([p,h]));c.push(b)}}if(a>0){let d=C(524531317,N([r,...c])),f=s.generateAudioCluster(e,a,i);o=N([d,f])}else o=C(524531317,N([r,...c]));return o}};var We=class s extends Ce{static TAG="WebMRemuxer";_dtsBase=1/0;_audioDtsBase=1/0;_videoDtsBase=1/0;_audioNextDts=1/0;_videoNextDts=1/0;_audioStashedLastFrame=null;_videoStashedLastFrame=null;_refVideoFrameDuration=33.333333333333336;_refAudioFrameDuration=20;_audioSegmentInfoList=new Le("audio");_videoSegmentInfoList=new Le("video");_pendingVideoFrames=[];_onInitSegment=ee;_onMediaSegment=ee;destroy(){this._onInitSegment=ee,this._onMediaSegment=ee,this.clear()}get onInitSegment(){return this._onInitSegment}set onInitSegment(e){this._onInitSegment=e}get onMediaSegment(){return this._onMediaSegment}set onMediaSegment(e){this._onMediaSegment=e}bindDataSource(e){return e.onTrackData=this._onTrackData,e.onTrackMetadata=this._onTrackMetadata,this}insertDiscontinuity(){this._audioNextDts=this._videoNextDts=1/0}clear(){this._dtsBase=1/0,this._audioDtsBase=1/0,this._videoDtsBase=1/0,this._audioNextDts=1/0,this._videoNextDts=1/0,this._videoMeta=null,this._audioMeta=null,this._audioStashedLastFrame=null,this._videoStashedLastFrame=null,this._videoSegmentInfoList.clear(),this._audioSegmentInfoList.clear(),this._pendingVideoFrames=[]}get timestampBase(){return this._dtsBase!==1/0?this._dtsBase:void 0}flushStashedFrames(){let e=this._videoStashedLastFrame,t=this._audioStashedLastFrame,i={type:"video",id:1,sequenceNumber:0,frames:[],length:0};e!=null&&(i.frames.push(e),i.length=e.length);let n={type:"audio",id:2,sequenceNumber:0,frames:[],length:0};t!=null&&(n.frames.push(t),n.length=t.length),this._videoStashedLastFrame=null,this._audioStashedLastFrame=null,this._remuxVideo(i,!0),this._remuxAudio(n,!0)}_onTrackData=(e,t)=>{u.a(s.TAG,"onMediaSegment callback must be specificed!",this._onMediaSegment),this._dtsBase===1/0&&this._calculateDtsBase(e,t),this._remuxVideo(t),this._remuxAudio(e)};_onTrackMetadata=e=>{u.a(s.TAG,"onTrackMetadata: onInitSegment callback must be specified!",this._onInitSegment);let t;if(e.type==="audio"){let n=this._audioMeta=e;this._refAudioFrameDuration=Number.isFinite(n.refFrameDuration)?n.refFrameDuration:this._refAudioFrameDuration,t=Re.generateAudioInitSegment(n),this._isAudioMetadataDispatched=!0}else{let n=this._videoMeta=e;this._refVideoFrameDuration=Number.isFinite(n.refFrameDuration)?n.refFrameDuration:this._refVideoFrameDuration,t=Re.generateVideoInitSegment(n),this._isVideoMetadataDispatched=!0}let i={kind:0,type:e.type,data:t,codec:`${e.codec}`,container:e.type==="audio"?"audio/webm":"video/webm",mediaDuration:e.duration};this._onInitSegment(e.type,i)};_calculateDtsBase(e,t){this._dtsBase===1/0&&(e.frames.length>0&&(this._audioDtsBase=e.frames[0].dts),t.frames.length>0&&(this._videoDtsBase=t.frames[0].dts),this._dtsBase=Math.min(this._audioDtsBase,this._videoDtsBase))}_flushPendingVideoFrames(){if(this._pendingVideoFrames.length===0)return;let e=new De,t=this._pendingVideoFrames[0],i=this._pendingVideoFrames[this._pendingVideoFrames.length-1];if(t.isKeyframe||u.e(s.TAG,"Pending video frames must start with a keyframe"),t.isKeyframe){let a=new ce(t.dts,t.pts,0,t.dts,!0);e.appendSyncPoint(a)}e.beginDts=t.dts,e.endDts=i.dts,e.beginPts=t.pts,e.endPts=i.pts,e.originalBeginDts=t.dts,e.originalEndDts=i.dts,e.firstFrame=new ce(t.dts,t.pts,0,t.dts,t.isKeyframe),e.lastFrame=new ce(i.dts,i.pts,0,i.dts,i.isKeyframe);let n=Re.generateVideoCluster(this._pendingVideoFrames,0,this._refVideoFrameDuration,this._videoMeta.codecType),r={kind:1,type:"video",data:n,frameCount:this._pendingVideoFrames.length,info:e};this._onMediaSegment("video",r),this._pendingVideoFrames=[]}_remuxVideo(e,t=!1){if(!(e.frames.length===0&&!t)){if(!this.isVideoMetadataDispatched){u.w(s.TAG,"_remuxVideo: VideoData received before CodecConfigurationRecord");return}for(let i of e.frames)i.isKeyframe&&(this._flushPendingVideoFrames(),e.sequenceNumber++),this._pendingVideoFrames.push(i);t&&this._flushPendingVideoFrames(),e.frames=[],e.length=0}}_remuxAudio(e,t=!1){if(e.frames.length===0)return;if(!this._isAudioMetadataDispatched){u.w(s.TAG,"_remuxAudio: AudioData received before CodecConfigurationRecord");return}let i=e,n=i.frames,r=-1,a=-1;if(n.length===1&&!t)return;let o;if(n.length>1&&(o=n.pop()),this._audioStashedLastFrame!=null){let _=this._audioStashedLastFrame;this._audioStashedLastFrame=null,n.unshift(_)}if(o!=null&&(this._audioStashedLastFrame=o),n.length===0)return;let l=n[0].dts-this._dtsBase;if(this._audioNextDts!==1/0){let _=l-this._audioNextDts;for(let g=0;g<n.length;g++)n[g].dts=n[g].dts-_}else this._audioNextDts=l;r=n[0].dts,a=n[n.length-1].dts,this._audioNextDts=a+this._refAudioFrameDuration;let c=Re.generateAudioCluster(n,0,this._refAudioFrameDuration),d=new De;d.beginDts=r,d.endDts=a,d.beginPts=r,d.endPts=a,d.originalBeginDts=l,d.originalEndDts=n[n.length-1].dts-this._dtsBase,d.firstFrame=new ce(r,r,this._refAudioFrameDuration,n[0].length,!1),d.lastFrame=new ce(a,a,this._refAudioFrameDuration,n[n.length-1].length,!1),this._audioSegmentInfoList.append(d);let f={kind:1,type:"audio",data:c,frameCount:n.length,info:d};this._onMediaSegment&&this._onMediaSegment("audio",f),i.frames=[],i.length=0}};var _i=class{constructor(){this._firstCheckpoint=0,this._lastCheckpoint=0,this._intervalBytes=0,this._totalBytes=0,this._lastSecondBytes=0,self.performance&&self.performance.now?this._now=self.performance.now.bind(self.performance):this._now=Date.now}reset(){this._firstCheckpoint=this._lastCheckpoint=0,this._totalBytes=this._intervalBytes=0,this._lastSecondBytes=0}addBytes(e){this._firstCheckpoint===0?(this._firstCheckpoint=this._now(),this._lastCheckpoint=this._firstCheckpoint,this._intervalBytes+=e,this._totalBytes+=e):this._now()-this._lastCheckpoint<1e3?(this._intervalBytes+=e,this._totalBytes+=e):(this._lastSecondBytes=this._intervalBytes,this._intervalBytes=e,this._totalBytes+=e,this._lastCheckpoint=this._now())}get currentKBps(){this.addBytes(0);let e=(this._now()-this._lastCheckpoint)/1e3;return e==0&&(e=1),this._intervalBytes/e/1024}get lastSecondKBps(){return this.addBytes(0),this._lastSecondBytes!==0?this._lastSecondBytes/1024:this._now()-this._lastCheckpoint>=500?this.currentKBps:0}get averageKBps(){let e=(this._now()-this._firstCheckpoint)/1e3;return this._totalBytes/e/1024}},Dt=_i;var B={kIdle:0,kConnecting:1,kBuffering:2,kError:3,kComplete:4},V={OK:"OK",EXCEPTION:"Exception",HTTP_STATUS_CODE_INVALID:"HttpStatusCodeInvalid",CONNECTING_TIMEOUT:"ConnectingTimeout",EARLY_EOF:"EarlyEof",UNRECOVERABLE_EARLY_EOF:"UnrecoverableEarlyEof"},ue=class{constructor(e){this._type=e||"undefined",this._status=B.kIdle,this._needStash=!1,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}destroy(){this._status=B.kIdle,this._onContentLengthKnown=null,this._onURLRedirect=null,this._onDataArrival=null,this._onError=null,this._onComplete=null}isWorking(){return this._status===B.kConnecting||this._status===B.kBuffering}get type(){return this._type}get status(){return this._status}get needStashBuffer(){return this._needStash}get onContentLengthKnown(){return this._onContentLengthKnown}set onContentLengthKnown(e){this._onContentLengthKnown=e}get onURLRedirect(){return this._onURLRedirect}set onURLRedirect(e){this._onURLRedirect=e}get onDataArrival(){return this._onDataArrival}set onDataArrival(e){this._onDataArrival=e}get onError(){return this._onError}set onError(e){this._onError=e}get onComplete(){return this._onComplete}set onComplete(e){this._onComplete=e}open(e,t){throw new et("Unimplemented abstract function!")}abort(){throw new et("Unimplemented abstract function!")}};var fi=class extends ue{static isSupported(){try{let e=W.msedge&&W.version.minor>=15048,t=W.msedge?e:!0;return self.fetch&&self.ReadableStream&&t}catch{return!1}}constructor(e,t){super("fetch-stream-loader"),this.TAG="FetchStreamLoader",this._seekHandler=e,this._config=t,this._needStash=!0,this._requestAbort=!1,this._abortController=null,this._contentLength=null,this._receivedLength=0}destroy(){this.isWorking()&&this.abort(),super.destroy()}open(e,t){this._dataSource=e,this._range=t;let i=e.url;this._config.reuseRedirectedURL&&e.redirectedURL!=null&&(i=e.redirectedURL);let n=this._seekHandler.getConfig(i,t),r=new self.Headers;if(typeof n.headers=="object"){let o=n.headers;for(let l in o)o.hasOwnProperty(l)&&r.append(l,o[l])}let a={method:"GET",headers:r,mode:"cors",cache:"default",referrerPolicy:"no-referrer-when-downgrade"};if(typeof this._config.headers=="object")for(let o in this._config.headers)r.append(o,this._config.headers[o]);e.cors===!1&&(a.mode="same-origin"),e.withCredentials&&(a.credentials="include"),e.referrerPolicy&&(a.referrerPolicy=e.referrerPolicy),self.AbortController&&(this._abortController=new self.AbortController,a.signal=this._abortController.signal),this._status=B.kConnecting,self.fetch(n.url,a).then(o=>{if(this._requestAbort){this._status=B.kIdle,o.body.cancel();return}if(o.ok&&o.status>=200&&o.status<=299){if(o.url!==n.url&&this._onURLRedirect){let c=this._seekHandler.removeURLParameters(o.url);this._onURLRedirect(c)}let l=o.headers.get("Content-Length");return l!=null&&(this._contentLength=parseInt(l),this._contentLength!==0&&this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)),this._pump.call(this,o.body.getReader())}else if(this._status=B.kError,this._onError)this._onError(V.HTTP_STATUS_CODE_INVALID,{code:o.status,msg:o.statusText});else throw new K("FetchStreamLoader: Http code invalid, "+o.status+" "+o.statusText)}).catch(o=>{if(!(this._abortController&&this._abortController.signal.aborted))if(this._status=B.kError,this._onError)this._onError(V.EXCEPTION,{code:-1,msg:o.message});else throw o})}abort(){if(this._requestAbort=!0,(this._status!==B.kBuffering||!W.chrome)&&this._abortController)try{this._abortController.abort()}catch{}}_pump(e){return e.read().then(t=>{if(t.done)if(this._contentLength!==null&&this._receivedLength<this._contentLength){this._status=B.kError;let i=V.EARLY_EOF,n={code:-1,msg:"Fetch stream meet Early-EOF"};if(this._onError)this._onError(i,n);else throw new K(n.msg)}else this._status=B.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1);else{if(this._abortController&&this._abortController.signal.aborted){this._status=B.kComplete;return}else if(this._requestAbort===!0)return this._status=B.kComplete,e.cancel();this._status=B.kBuffering;let i=t.value.buffer,n=this._range.from+this._receivedLength;this._receivedLength+=i.byteLength,this._onDataArrival&&this._onDataArrival(i,n,this._receivedLength),this._pump(e)}}).catch(t=>{if(this._abortController&&this._abortController.signal.aborted){this._status=B.kComplete;return}if(t.code===11&&W.msedge)return;this._status=B.kError;let i=0,n=null;if((t.code===19||t.message==="network error")&&(this._contentLength===null||this._contentLength!==null&&this._receivedLength<this._contentLength)?(i=V.EARLY_EOF,n={code:t.code,msg:"Fetch stream meet Early-EOF"}):(i=V.EXCEPTION,n={code:t.code,msg:t.message}),this._onError)this._onError(i,n);else throw new K(n.msg)})}},mi=fi;var pi=class extends ue{static isSupported(){try{let e=new XMLHttpRequest;return e.open("GET","https://example.com",!0),e.responseType="moz-chunked-arraybuffer",e.responseType==="moz-chunked-arraybuffer"}catch(e){return u.w("MozChunkedLoader",e.message),!1}}constructor(e,t){super("xhr-moz-chunked-loader"),this.TAG="MozChunkedLoader",this._seekHandler=e,this._config=t,this._needStash=!0,this._xhr=null,this._requestAbort=!1,this._contentLength=null,this._receivedLength=0}destroy(){this.isWorking()&&this.abort(),this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onloadend=null,this._xhr.onerror=null,this._xhr=null),super.destroy()}open(e,t){this._dataSource=e,this._range=t;let i=e.url;this._config.reuseRedirectedURL&&e.redirectedURL!=null&&(i=e.redirectedURL);let n=this._seekHandler.getConfig(i,t);this._requestURL=n.url;let r=this._xhr=new XMLHttpRequest;if(r.open("GET",n.url,!0),r.responseType="moz-chunked-arraybuffer",r.onreadystatechange=this._onReadyStateChange.bind(this),r.onprogress=this._onProgress.bind(this),r.onloadend=this._onLoadEnd.bind(this),r.onerror=this._onXhrError.bind(this),e.withCredentials&&(r.withCredentials=!0),typeof n.headers=="object"){let a=n.headers;for(let o in a)a.hasOwnProperty(o)&&r.setRequestHeader(o,a[o])}if(typeof this._config.headers=="object"){let a=this._config.headers;for(let o in a)a.hasOwnProperty(o)&&r.setRequestHeader(o,a[o])}this._status=B.kConnecting,r.send()}abort(){this._requestAbort=!0,this._xhr&&this._xhr.abort(),this._status=B.kComplete}_onReadyStateChange(e){let t=e.target;if(t.readyState===2){if(t.responseURL!=null&&t.responseURL!==this._requestURL&&this._onURLRedirect){let i=this._seekHandler.removeURLParameters(t.responseURL);this._onURLRedirect(i)}if(t.status!==0&&(t.status<200||t.status>299))if(this._status=B.kError,this._onError)this._onError(V.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText});else throw new K("MozChunkedLoader: Http code invalid, "+t.status+" "+t.statusText);else this._status=B.kBuffering}}_onProgress(e){if(this._status===B.kError)return;this._contentLength===null&&e.total!==null&&e.total!==0&&(this._contentLength=e.total,this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength));let t=e.target.response,i=this._range.from+this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,i,this._receivedLength)}_onLoadEnd(e){if(this._requestAbort===!0){this._requestAbort=!1;return}else if(this._status===B.kError)return;this._status=B.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1)}_onXhrError(e){this._status=B.kError;let t=0,i=null;if(this._contentLength&&e.loaded<this._contentLength?(t=V.EARLY_EOF,i={code:-1,msg:"Moz-Chunked stream meet Early-Eof"}):(t=V.EXCEPTION,i={code:-1,msg:e.constructor.name+" "+e.type}),this._onError)this._onError(t,i);else throw new K(i.msg)}},gi=pi;var xi=class extends ue{static isSupported(){try{let e=new XMLHttpRequest;return e.open("GET","https://example.com",!0),e.responseType="arraybuffer",e.responseType==="arraybuffer"}catch(e){return u.w("RangeLoader",e.message),!1}}constructor(e,t){super("xhr-range-loader"),this.TAG="RangeLoader",this._seekHandler=e,this._config=t,this._needStash=!1,this._chunkSizeKBList=[128,256,384,512,768,1024,1536,2048,3072,4096,5120,6144,7168,8192],this._currentChunkSizeKB=384,this._currentSpeedNormalized=0,this._zeroSpeedChunkCount=0,this._xhr=null,this._speedSampler=new Dt,this._requestAbort=!1,this._waitForTotalLength=!1,this._totalLengthReceived=!1,this._currentRequestURL=null,this._currentRedirectedURL=null,this._currentRequestRange=null,this._totalLength=null,this._contentLength=null,this._receivedLength=0,this._lastTimeLoaded=0}destroy(){this.isWorking()&&this.abort(),this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr=null),super.destroy()}get currentSpeed(){return this._speedSampler.lastSecondKBps}open(e,t){this._dataSource=e,this._range=t,this._status=B.kConnecting;let i=!1;this._dataSource.filesize!=null&&this._dataSource.filesize!==0&&(i=!0,this._totalLength=this._dataSource.filesize),!this._totalLengthReceived&&!i?(this._waitForTotalLength=!0,this._internalOpen(this._dataSource,{from:0,to:-1})):this._openSubRange()}_openSubRange(){let e=this._currentChunkSizeKB*1024,t=this._range.from+this._receivedLength,i=t+e;this._contentLength!=null&&i-this._range.from>=this._contentLength&&(i=this._range.from+this._contentLength-1),this._currentRequestRange={from:t,to:i},this._internalOpen(this._dataSource,this._currentRequestRange)}_internalOpen(e,t){this._lastTimeLoaded=0;let i=e.url;this._config.reuseRedirectedURL&&(this._currentRedirectedURL!=null?i=this._currentRedirectedURL:e.redirectedURL!=null&&(i=e.redirectedURL));let n=this._seekHandler.getConfig(i,t);this._currentRequestURL=n.url;let r=this._xhr=new XMLHttpRequest;if(r.open("GET",n.url,!0),r.responseType="arraybuffer",r.onreadystatechange=this._onReadyStateChange.bind(this),r.onprogress=this._onProgress.bind(this),r.onload=this._onLoad.bind(this),r.onerror=this._onXhrError.bind(this),e.withCredentials&&(r.withCredentials=!0),typeof n.headers=="object"){let a=n.headers;for(let o in a)a.hasOwnProperty(o)&&r.setRequestHeader(o,a[o])}if(typeof this._config.headers=="object"){let a=this._config.headers;for(let o in a)a.hasOwnProperty(o)&&r.setRequestHeader(o,a[o])}r.send()}abort(){this._requestAbort=!0,this._internalAbort(),this._status=B.kComplete}_internalAbort(){this._xhr&&(this._xhr.onreadystatechange=null,this._xhr.onprogress=null,this._xhr.onload=null,this._xhr.onerror=null,this._xhr.abort(),this._xhr=null)}_onReadyStateChange(e){let t=e.target;if(t.readyState===2){if(t.responseURL!=null){let i=this._seekHandler.removeURLParameters(t.responseURL);t.responseURL!==this._currentRequestURL&&i!==this._currentRedirectedURL&&(this._currentRedirectedURL=i,this._onURLRedirect&&this._onURLRedirect(i))}if(t.status>=200&&t.status<=299){if(this._waitForTotalLength)return;this._status=B.kBuffering}else if(this._status=B.kError,this._onError)this._onError(V.HTTP_STATUS_CODE_INVALID,{code:t.status,msg:t.statusText});else throw new K("RangeLoader: Http code invalid, "+t.status+" "+t.statusText)}}_onProgress(e){if(this._status===B.kError)return;if(this._contentLength===null){let i=!1;if(this._waitForTotalLength){this._waitForTotalLength=!1,this._totalLengthReceived=!0,i=!0;let n=e.total;this._internalAbort(),n!=null&n!==0&&(this._totalLength=n)}if(this._range.to===-1?this._contentLength=this._totalLength-this._range.from:this._contentLength=this._range.to-this._range.from+1,i){this._openSubRange();return}this._onContentLengthKnown&&this._onContentLengthKnown(this._contentLength)}let t=e.loaded-this._lastTimeLoaded;this._lastTimeLoaded=e.loaded,this._speedSampler.addBytes(t)}_normalizeSpeed(e){let t=this._chunkSizeKBList,i=t.length-1,n=0,r=0,a=i;if(e<t[0])return t[0];for(;r<=a;){if(n=r+Math.floor((a-r)/2),n===i||e>=t[n]&&e<t[n+1])return t[n];t[n]<e?r=n+1:a=n-1}}_onLoad(e){if(this._status===B.kError)return;if(this._waitForTotalLength){this._waitForTotalLength=!1;return}this._lastTimeLoaded=0;let t=this._speedSampler.lastSecondKBps;if(t===0&&(this._zeroSpeedChunkCount++,this._zeroSpeedChunkCount>=3&&(t=this._speedSampler.currentKBps)),t!==0){let a=this._normalizeSpeed(t);this._currentSpeedNormalized!==a&&(this._currentSpeedNormalized=a,this._currentChunkSizeKB=a)}let i=e.target.response,n=this._range.from+this._receivedLength;this._receivedLength+=i.byteLength;let r=!1;this._contentLength!=null&&this._receivedLength<this._contentLength?this._openSubRange():r=!0,this._onDataArrival&&this._onDataArrival(i,n,this._receivedLength),r&&(this._status=B.kComplete,this._onComplete&&this._onComplete(this._range.from,this._range.from+this._receivedLength-1))}_onXhrError(e){this._status=B.kError;let t=0,i=null;if(this._contentLength&&this._receivedLength>0&&this._receivedLength<this._contentLength?(t=V.EARLY_EOF,i={code:-1,msg:"RangeLoader meet Early-Eof"}):(t=V.EXCEPTION,i={code:-1,msg:e.constructor.name+" "+e.type}),this._onError)this._onError(t,i);else throw new K(i.msg)}},Lt=xi;var bi=class extends ue{static isSupported(){try{return typeof self.WebSocket<"u"}catch{return!1}}constructor(){super("websocket-loader"),this.TAG="WebSocketLoader",this._needStash=!0,this._ws=null,this._requestAbort=!1,this._receivedLength=0}destroy(){this._ws&&this.abort(),super.destroy()}open(e){try{let t=this._ws=new self.WebSocket(e.url);t.binaryType="arraybuffer",t.onopen=this._onWebSocketOpen.bind(this),t.onclose=this._onWebSocketClose.bind(this),t.onmessage=this._onWebSocketMessage.bind(this),t.onerror=this._onWebSocketError.bind(this),this._status=B.kConnecting}catch(t){this._status=B.kError;let i={code:t.code,msg:t.message};if(this._onError)this._onError(V.EXCEPTION,i);else throw new K(i.msg)}}abort(){let e=this._ws;e&&(e.readyState===0||e.readyState===1)&&(this._requestAbort=!0,e.close()),this._ws=null,this._status=B.kComplete}_onWebSocketOpen(e){this._status=B.kBuffering}_onWebSocketClose(e){if(this._requestAbort===!0){this._requestAbort=!1;return}this._status=B.kComplete,this._onComplete&&this._onComplete(0,this._receivedLength-1)}_onWebSocketMessage(e){if(e.data instanceof ArrayBuffer)this._dispatchArrayBuffer(e.data);else if(e.data instanceof Blob){let t=new FileReader;t.onload=()=>{this._dispatchArrayBuffer(t.result)},t.readAsArrayBuffer(e.data)}else{this._status=B.kError;let t={code:-1,msg:"Unsupported WebSocket message type: "+e.data.constructor.name};if(this._onError)this._onError(V.EXCEPTION,t);else throw new K(t.msg)}}_dispatchArrayBuffer(e){let t=e,i=this._receivedLength;this._receivedLength+=t.byteLength,this._onDataArrival&&this._onDataArrival(t,i,this._receivedLength)}_onWebSocketError(e){this._status=B.kError;let t={code:e.code,msg:e.message};if(this._onError)this._onError(V.EXCEPTION,t);else throw new K(t.msg)}},ur=bi;var Si=class{constructor(e){this._zeroStart=e||!1}getConfig(e,t){let i={};if(t.from!==0||t.to!==-1){let n;t.to!==-1?n=`bytes=${t.from.toString()}-${t.to.toString()}`:n=`bytes=${t.from.toString()}-`,i.Range=n}else this._zeroStart&&(i.Range="bytes=0-");return{url:e,headers:i}}removeURLParameters(e){return e}},hr=Si;var yi=class{constructor(e,t){this._startName=e,this._endName=t}getConfig(e,t){let i=e;if(t.from!==0||t.to!==-1){let n=!0;i.indexOf("?")===-1&&(i+="?",n=!1),n&&(i+="&"),i+=`${this._startName}=${t.from.toString()}`,t.to!==-1&&(i+=`&${this._endName}=${t.to.toString()}`)}return{url:i,headers:{}}}removeURLParameters(e){let t=e.split("?")[0],i,n=e.indexOf("?");n!==-1&&(i=e.substring(n+1));let r="";if(i!=null&&i.length>0){let a=i.split("&");for(let o=0;o<a.length;o++){let l=a[o].split("="),c=o>0;l[0]!==this._startName&&l[0]!==this._endName&&(c&&(r+="&"),r+=a[o])}}return r.length===0?t:t+"?"+r}},_r=yi;var Ai=class{constructor(e,t,i){this.TAG="IOController",this._config=t,this._extraData=i,this._stashInitialSize=64*1024,t.stashInitialSize!=null&&t.stashInitialSize>0&&(this._stashInitialSize=t.stashInitialSize),this._stashUsed=0,this._stashSize=this._stashInitialSize,this._bufferSize=Math.max(this._stashSize,1024*1024*3),this._stashBuffer=new ArrayBuffer(this._bufferSize),this._stashByteStart=0,this._enableStash=!0,t.enableStashBuffer===!1&&(this._enableStash=!1),this._loader=null,this._loaderClass=null,this._seekHandler=null,this._dataSource=e,this._isWebSocketURL=/wss?:\/\/(.+?)/.test(e.url),this._refTotalLength=e.filesize?e.filesize:null,this._totalLength=this._refTotalLength,this._fullRequestFlag=!1,this._currentRange=null,this._redirectedURL=null,this._speedNormalized=0,this._speedSampler=new Dt,this._speedNormalizeList=[32,64,96,128,192,256,384,512,768,1024,1536,2048,3072,4096],this._isEarlyEofReconnecting=!1,this._paused=!1,this._resumeFrom=0,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._selectSeekHandler(),this._selectLoader(),this._createLoader()}destroy(){this._loader.isWorking()&&this._loader.abort(),this._loader.destroy(),this._loader=null,this._loaderClass=null,this._dataSource=null,this._stashBuffer=null,this._stashUsed=this._stashSize=this._bufferSize=this._stashByteStart=0,this._currentRange=null,this._speedSampler=null,this._isEarlyEofReconnecting=!1,this._onDataArrival=null,this._onSeeked=null,this._onError=null,this._onComplete=null,this._onRedirect=null,this._onRecoveredEarlyEof=null,this._extraData=null}isWorking(){return this._loader&&this._loader.isWorking()&&!this._paused}isPaused(){return this._paused}get status(){return this._loader.status}get extraData(){return this._extraData}set extraData(e){this._extraData=e}get onDataArrival(){return this._onDataArrival}set onDataArrival(e){this._onDataArrival=e}get onSeeked(){return this._onSeeked}set onSeeked(e){this._onSeeked=e}get onError(){return this._onError}set onError(e){this._onError=e}get onComplete(){return this._onComplete}set onComplete(e){this._onComplete=e}get onRedirect(){return this._onRedirect}set onRedirect(e){this._onRedirect=e}get onRecoveredEarlyEof(){return this._onRecoveredEarlyEof}set onRecoveredEarlyEof(e){this._onRecoveredEarlyEof=e}get currentURL(){return this._dataSource.url}get hasRedirect(){return this._redirectedURL!=null||this._dataSource.redirectedURL!=null}get currentRedirectedURL(){return this._redirectedURL||this._dataSource.redirectedURL}get currentSpeed(){return this._loaderClass===Lt?this._loader.currentSpeed:this._speedSampler.lastSecondKBps}get loaderType(){return this._loader.type}_selectSeekHandler(){let e=this._config;if(e.seekType==="range")this._seekHandler=new hr(this._config.rangeLoadZeroStart);else if(e.seekType==="param"){let t=e.seekParamStart||"bstart",i=e.seekParamEnd||"bend";this._seekHandler=new _r(t,i)}else if(e.seekType==="custom"){if(typeof e.customSeekHandler!="function")throw new ne("Custom seekType specified in config but invalid customSeekHandler!");this._seekHandler=new e.customSeekHandler}else throw new ne(`Invalid seekType in config: ${e.seekType}`)}_selectLoader(){if(this._config.customLoader!=null)this._loaderClass=this._config.customLoader;else if(this._isWebSocketURL)this._loaderClass=ur;else if(mi.isSupported())this._loaderClass=mi;else if(gi.isSupported())this._loaderClass=gi;else if(Lt.isSupported())this._loaderClass=Lt;else throw new K("Your browser doesn't support xhr with arraybuffer responseType!")}_createLoader(){this._loader=new this._loaderClass(this._seekHandler,this._config),this._loader.needStashBuffer===!1&&(this._enableStash=!1),this._loader.onContentLengthKnown=this._onContentLengthKnown.bind(this),this._loader.onURLRedirect=this._onURLRedirect.bind(this),this._loader.onDataArrival=this._onLoaderChunkArrival.bind(this),this._loader.onComplete=this._onLoaderComplete.bind(this),this._loader.onError=this._onLoaderError.bind(this)}open(e){this._currentRange={from:0,to:-1},e&&(this._currentRange.from=e),this._speedSampler.reset(),e||(this._fullRequestFlag=!0),this._loader.open(this._dataSource,Object.assign({},this._currentRange))}abort(){this._loader.abort(),this._paused&&(this._paused=!1,this._resumeFrom=0)}pause(){this.isWorking()&&(this._loader.abort(),this._stashUsed!==0?(this._resumeFrom=this._stashByteStart,this._currentRange.to=this._stashByteStart-1):this._resumeFrom=this._currentRange.to+1,this._stashUsed=0,this._stashByteStart=0,this._paused=!0)}resume(){if(this._paused){this._paused=!1;let e=this._resumeFrom;this._resumeFrom=0,this._internalSeek(e,!0)}}seek(e){this._paused=!1,this._stashUsed=0,this._stashByteStart=0,this._internalSeek(e,!0)}_internalSeek(e,t){this._loader.isWorking()&&this._loader.abort(),this._flushStashBuffer(t),this._loader.destroy(),this._loader=null;let i={from:e,to:-1};this._currentRange={from:i.from,to:-1},this._speedSampler.reset(),this._stashSize=this._stashInitialSize,this._createLoader(),this._loader.open(this._dataSource,i),this._onSeeked&&this._onSeeked()}updateUrl(e){if(!e||typeof e!="string"||e.length===0)throw new ne("Url must be a non-empty string!");this._dataSource.url=e}_expandBuffer(e){let t=this._stashSize;for(;t+1024*1024*1<e;)t*=2;if(t+=1024*1024*1,t===this._bufferSize)return;let i=new ArrayBuffer(t);if(this._stashUsed>0){let n=new Uint8Array(this._stashBuffer,0,this._stashUsed);new Uint8Array(i,0,t).set(n,0)}this._stashBuffer=i,this._bufferSize=t}_normalizeSpeed(e){let t=this._speedNormalizeList,i=t.length-1,n=0,r=0,a=i;if(e<t[0])return t[0];for(;r<=a;){if(n=r+Math.floor((a-r)/2),n===i||e>=t[n]&&e<t[n+1])return t[n];t[n]<e?r=n+1:a=n-1}}_adjustStashSize(e){let t=0;this._config.isLive?t=e/8:e<512?t=e:e>=512&&e<=1024?t=Math.floor(e*1.5):t=e*2,t>8192&&(t=8192);let i=t*1024+1024*1024*1;this._bufferSize<i&&this._expandBuffer(i),this._stashSize=t*1024}_dispatchChunks(e,t){return this._currentRange.to=t+e.byteLength-1,this._onDataArrival(e,t)}_onURLRedirect(e){this._redirectedURL=e,this._onRedirect&&this._onRedirect(e)}_onContentLengthKnown(e){e&&this._fullRequestFlag&&(this._totalLength=e,this._fullRequestFlag=!1)}_onLoaderChunkArrival(e,t,i){if(!this._onDataArrival)throw new X("IOController: No existing consumer (onDataArrival) callback!");if(this._paused)return;this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,this._onRecoveredEarlyEof&&this._onRecoveredEarlyEof()),this._speedSampler.addBytes(e.byteLength);let n=this._speedSampler.lastSecondKBps;if(n!==0){let r=this._normalizeSpeed(n);this._speedNormalized!==r&&(this._speedNormalized=r,this._adjustStashSize(r))}if(this._enableStash)if(this._stashUsed===0&&this._stashByteStart===0&&(this._stashByteStart=t),this._stashUsed+e.byteLength<=this._stashSize)new Uint8Array(this._stashBuffer,0,this._stashSize).set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength;else{let r=new Uint8Array(this._stashBuffer,0,this._bufferSize);if(this._stashUsed>0){let a=this._stashBuffer.slice(0,this._stashUsed),o=this._dispatchChunks(a,this._stashByteStart);if(o<a.byteLength){if(o>0){let l=new Uint8Array(a,o);r.set(l,0),this._stashUsed=l.byteLength,this._stashByteStart+=o}}else this._stashUsed=0,this._stashByteStart+=o;this._stashUsed+e.byteLength>this._bufferSize&&(this._expandBuffer(this._stashUsed+e.byteLength),r=new Uint8Array(this._stashBuffer,0,this._bufferSize)),r.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength}else{let a=this._dispatchChunks(e,t);if(a<e.byteLength){let o=e.byteLength-a;o>this._bufferSize&&(this._expandBuffer(o),r=new Uint8Array(this._stashBuffer,0,this._bufferSize)),r.set(new Uint8Array(e,a),0),this._stashUsed+=o,this._stashByteStart=t+a}}}else if(this._stashUsed===0){let r=this._dispatchChunks(e,t);if(r<e.byteLength){let a=e.byteLength-r;a>this._bufferSize&&this._expandBuffer(a),new Uint8Array(this._stashBuffer,0,this._bufferSize).set(new Uint8Array(e,r),0),this._stashUsed+=a,this._stashByteStart=t+r}}else{this._stashUsed+e.byteLength>this._bufferSize&&this._expandBuffer(this._stashUsed+e.byteLength);let r=new Uint8Array(this._stashBuffer,0,this._bufferSize);r.set(new Uint8Array(e),this._stashUsed),this._stashUsed+=e.byteLength;let a=this._dispatchChunks(this._stashBuffer.slice(0,this._stashUsed),this._stashByteStart);if(a<this._stashUsed&&a>0){let o=new Uint8Array(this._stashBuffer,a);r.set(o,0)}this._stashUsed-=a,this._stashByteStart+=a}}_flushStashBuffer(e){if(this._stashUsed>0){let t=this._stashBuffer.slice(0,this._stashUsed),i=this._dispatchChunks(t,this._stashByteStart),n=t.byteLength-i;if(i<t.byteLength)if(e)u.w(this.TAG,`${n} bytes unconsumed data remain when flush buffer, dropped`);else{if(i>0){let r=new Uint8Array(this._stashBuffer,0,this._bufferSize),a=new Uint8Array(t,i);r.set(a,0),this._stashUsed=a.byteLength,this._stashByteStart+=i}return 0}return this._stashUsed=0,this._stashByteStart=0,n}return 0}_onLoaderComplete(e,t){this._flushStashBuffer(!0),this._onComplete&&this._onComplete(this._extraData)}_onLoaderError(e,t){switch(u.e(this.TAG,`Loader error, code = ${t.code}, msg = ${t.msg}`),this._flushStashBuffer(!1),this._isEarlyEofReconnecting&&(this._isEarlyEofReconnecting=!1,e=V.UNRECOVERABLE_EARLY_EOF),e){case V.EARLY_EOF:{if(!this._config.isLive&&this._totalLength){let i=this._currentRange.to+1;i<this._totalLength&&(u.w(this.TAG,"Connection lost, trying reconnect..."),this._isEarlyEofReconnecting=!0,this._internalSeek(i,!1));return}e=V.UNRECOVERABLE_EARLY_EOF;break}case V.UNRECOVERABLE_EARLY_EOF:case V.CONNECTING_TIMEOUT:case V.HTTP_STATUS_CODE_INVALID:case V.EXCEPTION:break}if(this._onError)this._onError(e,t);else throw new K("IOException: "+t.msg)}},st=Ai;var fr=(S=>(S.IO_ERROR="io_error",S.DEMUX_ERROR="demux_error",S.INIT_SEGMENT="init_segment",S.MEDIA_SEGMENT="media_segment",S.LOADING_COMPLETE="loading_complete",S.RECOVERED_EARLY_EOF="recovered_early_eof",S.MEDIA_INFO="media_info",S.METADATA_ARRIVED="metadata_arrived",S.SCRIPTDATA_ARRIVED="scriptdata_arrived",S.TIMED_ID3_METADATA_ARRIVED="timed_id3_metadata_arrived",S.PGS_SUBTITLE_ARRIVED="pgs_subtitle_arrived",S.SYNCHRONOUS_KLV_METADATA_ARRIVED="synchronous_klv_metadata_arrived",S.ASYNCHRONOUS_KLV_METADATA_ARRIVED="asynchronous_klv_metadata_arrived",S.SMPTE2038_METADATA_ARRIVED="smpte2038_metadata_arrived",S.SCTE35_METADATA_ARRIVED="scte35_metadata_arrived",S.PES_PRIVATE_DATA_DESCRIPTOR="pes_private_data_descriptor",S.PES_PRIVATE_DATA_ARRIVED="pes_private_data_arrived",S.STATISTICS_INFO="statistics_info",S.RECOMMEND_SEEKPOINT="recommend_seekpoint",S))(fr||{}),A=fr;var vi=class{TAG="TransmuxingController";_emitter=new re;_config;_mediaDataSource;_currentSegmentIndex=0;_remuxer;_demuxer=null;_mediaInfo=null;_ioctl=null;_pendingSeekTime=null;_pendingResolveSeekPoint=null;_statisticsReporter=null;constructor(e,t){this._config=t,e.segments||(e.segments=[{duration:e.duration,filesize:e.filesize,url:e.url}]),typeof e.cors!="boolean"&&(e.cors=!0),typeof e.withCredentials!="boolean"&&(e.withCredentials=!1),this._mediaDataSource=e,this._mediaDataSource.useWebM?this._remuxer=new We(t):this._remuxer=new Ct(t);let i=0;this._mediaDataSource.segments.forEach(n=>{n.timestampBase=i,i+=n.duration,n.cors=e.cors,n.withCredentials=e.withCredentials,t.referrerPolicy&&(n.referrerPolicy=t.referrerPolicy)}),!isNaN(i)&&this._mediaDataSource.duration!==i&&(this._mediaDataSource.duration=i)}destroy(){this._mediaInfo=null,this._mediaDataSource=null,this._statisticsReporter&&this._disableStatisticsReporter(),this._ioctl&&(this._ioctl.destroy(),this._ioctl=null),this._demuxer&&(this._demuxer.destroy(),this._demuxer=null),this._remuxer&&this._remuxer.destroy(),this._emitter.removeAllListeners()}on(e,t){this._emitter.addListener(e,t)}off(e,t){this._emitter.removeListener(e,t)}start(){this._loadSegment(0),this._enableStatisticsReporter()}_loadSegment(e,t){this._currentSegmentIndex=e;let i=this._mediaDataSource.segments[e],n=this._ioctl=new st(i,this._config,e);n.onError=this._onIOException.bind(this),n.onSeeked=this._onIOSeeked.bind(this),n.onComplete=this._onIOComplete.bind(this),n.onRedirect=this._onIORedirect.bind(this),n.onRecoveredEarlyEof=this._onIORecoveredEarlyEof.bind(this),t?this._demuxer.bindDataSource(this._ioctl):n.onDataArrival=this._onInitChunkArrival.bind(this),n.open(t)}stop(){this._internalAbort(),this._disableStatisticsReporter()}_internalAbort(){this._ioctl&&(this._ioctl.destroy(),this._ioctl=null)}pause(){this._ioctl&&this._ioctl.isWorking()&&(this._ioctl.pause(),this._disableStatisticsReporter())}resume(){this._ioctl&&this._ioctl.isPaused()&&(this._ioctl.resume(),this._enableStatisticsReporter())}seek(e){if(this._mediaInfo==null||!this._mediaInfo.isSeekable())return;let t=this._searchSegmentIndexContains(e);if(t===this._currentSegmentIndex){let i=this._mediaInfo.segments[t];if(i==null)this._pendingSeekTime=e;else{let n=i.getNearestKeyframe(e);this._remuxer.clear(),this._ioctl.seek(n.fileposition),this._pendingResolveSeekPoint=n.milliseconds}}else{let i=this._mediaInfo.segments[t];if(i==null)this._pendingSeekTime=e,this._internalAbort(),this._remuxer.clear(),this._remuxer.insertDiscontinuity(),this._loadSegment(t);else{let n=i.getNearestKeyframe(e);this._internalAbort(),this._remuxer.clear(),this._remuxer.insertDiscontinuity(),this._demuxer.resetMediaInfo(),this._demuxer.timestampBase=this._mediaDataSource.segments[t].timestampBase,this._loadSegment(t,n.fileposition),this._pendingResolveSeekPoint=n.milliseconds,this._reportSegmentMediaInfo(t)}}this._enableStatisticsReporter()}_searchSegmentIndexContains(e){let t=this._mediaDataSource.segments,i=t.length-1;for(let n=0;n<t.length;n++)if(e<t[n].timestampBase){i=n-1;break}return i}_onInitChunkArrival(e,t){let i=0;if(t>0)this._demuxer.bindDataSource(this._ioctl),this._demuxer.timestampBase=this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase,i=this._demuxer.parseChunks(e,t);else{let n=li.probe(e);"match"in n&&n.match?(this._setupFLVDemuxerRemuxer(n),i=this._demuxer.parseChunks(e,t)):"needMoreData"in n&&n.needMoreData||(n=qe.probe(e),"match"in n&&n.match?(this._setupASFStreamDemuxerRemuxer(n),i=this._demuxer.parseChunks(e,t)):"needMoreData"in n&&n.needMoreData||(u.e(this.TAG,"Non MPEG-TS/FLV, Unsupported media type!"),Promise.resolve().then(()=>{this._internalAbort()}),this._emitter.emit(A.DEMUX_ERROR,P.FORMAT_UNSUPPORTED,"Non MPEG-TS/FLV, Unsupported media type!")))}return i}_setupFLVDemuxerRemuxer(e){this._remuxer||(this._mediaDataSource.useWebM?this._remuxer=new We(this._config):this._remuxer=new Ct(this._config)),this._demuxer=new li(e,this._config,this._remuxer);let t=this._mediaDataSource;t.duration!=null&&!isNaN(t.duration)&&(this._demuxer.overridedDuration=t.duration),typeof t.hasAudio=="boolean"&&(this._demuxer.overridedHasAudio=t.hasAudio),typeof t.hasVideo=="boolean"&&(this._demuxer.overridedHasVideo=t.hasVideo),this._demuxer.timestampBase=t.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onScriptMetadata=this._onScriptMetadata.bind(this),this._demuxer.onScriptData=this._onScriptData.bind(this);this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this)}_setupASFStreamDemuxerRemuxer(e){this._remuxer||(this._mediaDataSource.useWebM?this._remuxer=new We(this._config):this._remuxer=new Ct(this._config)),this._demuxer=new qe(e,this._config,this._remuxer);let t=this._mediaDataSource;t.duration!=null&&!isNaN(t.duration)&&(this._demuxer.overridedDuration=t.duration),typeof t.hasAudio=="boolean"&&(this._demuxer.overridedHasAudio=t.hasAudio),typeof t.hasVideo=="boolean"&&(this._demuxer.overridedHasVideo=t.hasVideo),this._demuxer.timestampBase=t.segments[this._currentSegmentIndex].timestampBase,this._demuxer.onError=this._onDemuxException.bind(this),this._demuxer.onMediaInfo=this._onMediaInfo.bind(this),this._demuxer.onScriptMetadata=this._onScriptMetadata.bind(this),this._demuxer.onScriptData=this._onScriptData.bind(this);this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)),this._remuxer.onInitSegment=this._onRemuxerInitSegmentArrival.bind(this),this._remuxer.onMediaSegment=this._onRemuxerMediaSegmentArrival.bind(this)}_onMediaInfo(e){this._mediaInfo==null&&(this._mediaInfo=Object.assign({},e),this._mediaInfo.keyframesIndex=null,this._mediaInfo.segments=[],this._mediaInfo.segmentCount=this._mediaDataSource.segments.length,Object.setPrototypeOf(this._mediaInfo,_e.prototype));let t=Object.assign({},e);Object.setPrototypeOf(t,_e.prototype),this._mediaInfo.segments[this._currentSegmentIndex]=t,this._reportSegmentMediaInfo(this._currentSegmentIndex),this._pendingSeekTime!=null&&Promise.resolve().then(()=>{let i=this._pendingSeekTime;this._pendingSeekTime=null,this.seek(i)})}_onScriptMetadata(e){this._emitter.emit(A.METADATA_ARRIVED,e)}_onScriptData(e){this._emitter.emit(A.SCRIPTDATA_ARRIVED,e)}_onTimedID3Metadata(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.dts!=null&&(e.dts-=t),this._emitter.emit(A.TIMED_ID3_METADATA_ARRIVED,e))}_onPGSSubtitle(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.dts!=null&&(e.dts-=t),this._emitter.emit(A.PGS_SUBTITLE_ARRIVED,e))}_onSynchronousKLVMetadata(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.dts!=null&&(e.dts-=t),this._emitter.emit(A.SYNCHRONOUS_KLV_METADATA_ARRIVED,e))}_onAsynchronousKLVMetadata(e){this._emitter.emit(A.ASYNCHRONOUS_KLV_METADATA_ARRIVED,e)}_onSMPTE2038Metadata(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.dts!=null&&(e.dts-=t),e.nearest_pts!=null&&(e.nearest_pts-=t),this._emitter.emit(A.SMPTE2038_METADATA_ARRIVED,e))}_onSCTE35Metadata(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.nearest_pts!=null&&(e.nearest_pts-=t),this._emitter.emit(A.SCTE35_METADATA_ARRIVED,e))}_onPESPrivateDataDescriptor(e){this._emitter.emit(A.PES_PRIVATE_DATA_DESCRIPTOR,e)}_onPESPrivateData(e){let t=this._remuxer.timestampBase;t!=null&&(e.pts!=null&&(e.pts-=t),e.nearest_pts!=null&&(e.nearest_pts-=t),e.dts!=null&&(e.dts-=t),this._emitter.emit(A.PES_PRIVATE_DATA_ARRIVED,e))}_onIOSeeked(){this._remuxer.insertDiscontinuity()}_onIOComplete(e){let i=e+1;i<this._mediaDataSource.segments.length?(this._internalAbort(),this._remuxer&&this._remuxer.flushStashedFrames(),this._loadSegment(i)):(this._remuxer&&this._remuxer.flushStashedFrames(),this._emitter.emit(A.LOADING_COMPLETE),this._disableStatisticsReporter())}_onIORedirect(e){let t=this._ioctl.extraData;this._mediaDataSource.segments[t].redirectedURL=e}_onIORecoveredEarlyEof(){this._emitter.emit(A.RECOVERED_EARLY_EOF)}_onIOException(e,t){u.e(this.TAG,`IOException: type = ${e}, code = ${t.code}, msg = ${t.msg}`),this._emitter.emit(A.IO_ERROR,e,t),this._disableStatisticsReporter()}_onDemuxException(e,t){u.e(this.TAG,`DemuxException: type = ${e}, info = ${t}`),this._emitter.emit(A.DEMUX_ERROR,e,t)}_onRemuxerInitSegmentArrival(e,t){this._emitter.emit(A.INIT_SEGMENT,e,t)}_onRemuxerMediaSegmentArrival(e,t){if(this._pendingSeekTime==null&&(this._emitter.emit(A.MEDIA_SEGMENT,e,t),this._pendingResolveSeekPoint!=null&&e==="video")){let i=t.info.syncPoints,n=this._pendingResolveSeekPoint;this._pendingResolveSeekPoint=null,W.safari&&i.length>0&&i[0].originalDts===n&&(n=i[0].pts),this._emitter.emit(A.RECOMMEND_SEEKPOINT,n)}}_enableStatisticsReporter(){this._statisticsReporter==null&&(this._statisticsReporter=self.setInterval(this._reportStatisticsInfo.bind(this),this._config.statisticsInfoReportInterval))}_disableStatisticsReporter(){this._statisticsReporter&&(self.clearInterval(this._statisticsReporter),this._statisticsReporter=null)}_reportSegmentMediaInfo(e){let t=this._mediaInfo,i=t?.segments?.[e];if(!i)return;let{keyframesIndex:n,segments:r,...a}=i,o={...a,duration:t.duration,segmentCount:t.segmentCount};this._emitter.emit(A.MEDIA_INFO,o)}_reportStatisticsInfo(){let e={};e.url=this._ioctl.currentURL,e.hasRedirect=this._ioctl.hasRedirect,e.hasRedirect&&(e.redirectedURL=this._ioctl.currentRedirectedURL),e.speed=this._ioctl.currentSpeed,e.loaderType=this._ioctl.loaderType,e.currentSegmentIndex=this._currentSegmentIndex,e.totalSegmentCount=this._mediaDataSource.segments.length,this._emitter.emit(A.STATISTICS_INFO,e)}},Ei=vi;var jr={},Ri=class{constructor(e,t){if(this.TAG="Transmuxer",this._emitter=new re,t.enableWorker&&typeof Worker<"u")try{this._worker=new Worker(new URL("./transmuxing-worker.js",jr.url)),this._workerDestroying=!1,this._worker.addEventListener("message",this._onWorkerMessage.bind(this)),this._worker.postMessage({cmd:"init",param:[e,t]}),this.e={onLoggingConfigChanged:this._onLoggingConfigChanged.bind(this)},pe.registerListener(this.e.onLoggingConfigChanged),this._worker.postMessage({cmd:"logging_config",param:pe.getConfig()})}catch{u.e(this.TAG,"Error while initialize transmuxing worker, fallback to inline transmuxing"),this._worker=null,this._controller=new Ei(e,t)}else this._controller=new Ei(e,t);if(this._controller){let i=this._controller;i.on(A.IO_ERROR,this._onIOError.bind(this)),i.on(A.DEMUX_ERROR,this._onDemuxError.bind(this)),i.on(A.INIT_SEGMENT,this._onInitSegment.bind(this)),i.on(A.MEDIA_SEGMENT,this._onMediaSegment.bind(this)),i.on(A.LOADING_COMPLETE,this._onLoadingComplete.bind(this)),i.on(A.RECOVERED_EARLY_EOF,this._onRecoveredEarlyEof.bind(this)),i.on(A.MEDIA_INFO,this._onMediaInfo.bind(this)),i.on(A.METADATA_ARRIVED,this._onScriptMetadata.bind(this)),i.on(A.SCRIPTDATA_ARRIVED,this._onScriptData.bind(this)),i.on(A.TIMED_ID3_METADATA_ARRIVED,this._onTimedID3MetadataArrived.bind(this)),i.on(A.SYNCHRONOUS_KLV_METADATA_ARRIVED,this._onSynchronousKLVMetadataArrived.bind(this)),i.on(A.ASYNCHRONOUS_KLV_METADATA_ARRIVED,this._onAsynchronousKLVMetadataArrived.bind(this)),i.on(A.SMPTE2038_METADATA_ARRIVED,this._onSMPTE2038MetadataArrived.bind(this)),i.on(A.SCTE35_METADATA_ARRIVED,this._onSCTE35MetadataArrived.bind(this)),i.on(A.PES_PRIVATE_DATA_DESCRIPTOR,this._onPESPrivateDataDescriptor.bind(this)),i.on(A.PES_PRIVATE_DATA_ARRIVED,this._onPESPrivateDataArrived.bind(this)),i.on(A.STATISTICS_INFO,this._onStatisticsInfo.bind(this)),i.on(A.RECOMMEND_SEEKPOINT,this._onRecommendSeekpoint.bind(this))}}destroy(){this._worker?this._workerDestroying||(this._workerDestroying=!0,this._worker.postMessage({cmd:"destroy"}),pe.removeListener(this.e.onLoggingConfigChanged),this.e=null):(this._controller.destroy(),this._controller=null),this._emitter.removeAllListeners(),this._emitter=null}on(e,t){this._emitter.addListener(e,t)}off(e,t){this._emitter.removeListener(e,t)}hasWorker(){return this._worker!=null}open(){this._worker?this._worker.postMessage({cmd:"start"}):this._controller.start()}close(){this._worker?this._worker.postMessage({cmd:"stop"}):this._controller.stop()}seek(e){this._worker?this._worker.postMessage({cmd:"seek",param:e}):this._controller.seek(e)}pause(){this._worker?this._worker.postMessage({cmd:"pause"}):this._controller.pause()}resume(){this._worker?this._worker.postMessage({cmd:"resume"}):this._controller.resume()}_onInitSegment(e,t){Promise.resolve().then(()=>{this._emitter.emit(A.INIT_SEGMENT,e,t)})}_onMediaSegment(e,t){Promise.resolve().then(()=>{this._emitter.emit(A.MEDIA_SEGMENT,e,t)})}_onLoadingComplete(){Promise.resolve().then(()=>{this._emitter.emit(A.LOADING_COMPLETE)})}_onRecoveredEarlyEof(){Promise.resolve().then(()=>{this._emitter.emit(A.RECOVERED_EARLY_EOF)})}_onMediaInfo(e){Promise.resolve().then(()=>{this._emitter.emit(A.MEDIA_INFO,e)})}_onScriptMetadata(e){Promise.resolve().then(()=>{this._emitter.emit(A.METADATA_ARRIVED,e)})}_onScriptData(e){Promise.resolve().then(()=>{this._emitter.emit(A.SCRIPTDATA_ARRIVED,e)})}_onTimedID3MetadataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.TIMED_ID3_METADATA_ARRIVED,e)})}_onPGSSubtitleArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.PGS_SUBTITLE_ARRIVED,e)})}_onSynchronousKLVMetadataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.SYNCHRONOUS_KLV_METADATA_ARRIVED,e)})}_onAsynchronousKLVMetadataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.ASYNCHRONOUS_KLV_METADATA_ARRIVED,e)})}_onSMPTE2038MetadataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.SMPTE2038_METADATA_ARRIVED,e)})}_onSCTE35MetadataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.SCTE35_METADATA_ARRIVED,e)})}_onPESPrivateDataDescriptor(e){Promise.resolve().then(()=>{this._emitter.emit(A.PES_PRIVATE_DATA_DESCRIPTOR,e)})}_onPESPrivateDataArrived(e){Promise.resolve().then(()=>{this._emitter.emit(A.PES_PRIVATE_DATA_ARRIVED,e)})}_onStatisticsInfo(e){Promise.resolve().then(()=>{this._emitter.emit(A.STATISTICS_INFO,e)})}_onIOError(e,t){Promise.resolve().then(()=>{this._emitter.emit(A.IO_ERROR,e,t)})}_onDemuxError(e,t){Promise.resolve().then(()=>{this._emitter.emit(A.DEMUX_ERROR,e,t)})}_onRecommendSeekpoint(e){Promise.resolve().then(()=>{this._emitter.emit(A.RECOMMEND_SEEKPOINT,e)})}_onLoggingConfigChanged(e){this._worker&&this._worker.postMessage({cmd:"logging_config",param:e})}_onWorkerMessage(e){let t=e.data,i=t.data;if(t.msg==="destroyed"||this._workerDestroying){this._workerDestroying=!1,this._worker.terminate(),this._worker=null;return}switch(t.msg){case A.INIT_SEGMENT:case A.MEDIA_SEGMENT:this._emitter.emit(t.msg,i.type,i.data);break;case A.LOADING_COMPLETE:case A.RECOVERED_EARLY_EOF:this._emitter.emit(t.msg);break;case A.MEDIA_INFO:Object.setPrototypeOf(i,_e.prototype),this._emitter.emit(t.msg,i);break;case A.METADATA_ARRIVED:case A.SCRIPTDATA_ARRIVED:case A.TIMED_ID3_METADATA_ARRIVED:case A.PGS_SUBTITLE_ARRIVED:case A.SYNCHRONOUS_KLV_METADATA_ARRIVED:case A.ASYNCHRONOUS_KLV_METADATA_ARRIVED:case A.SMPTE2038_METADATA_ARRIVED:case A.SCTE35_METADATA_ARRIVED:case A.PES_PRIVATE_DATA_DESCRIPTOR:case A.PES_PRIVATE_DATA_ARRIVED:case A.STATISTICS_INFO:this._emitter.emit(t.msg,i);break;case A.IO_ERROR:case A.DEMUX_ERROR:this._emitter.emit(t.msg,i.type,i.info);break;case A.RECOMMEND_SEEKPOINT:this._emitter.emit(t.msg,i);break;case"logcat_callback":u.emitter.emit("log",i.type,i.logcat);break;default:break}}},mr=Ri;var Ke={NETWORK_ERROR:"NetworkError",MEDIA_ERROR:"MediaError",OTHER_ERROR:"OtherError"},Bt={NETWORK_EXCEPTION:V.EXCEPTION,NETWORK_STATUS_CODE_INVALID:V.HTTP_STATUS_CODE_INVALID,NETWORK_TIMEOUT:V.CONNECTING_TIMEOUT,NETWORK_UNRECOVERABLE_EARLY_EOF:V.UNRECOVERABLE_EARLY_EOF,MEDIA_MSE_ERROR:"MediaMSEError",MEDIA_FORMAT_ERROR:P.FORMAT_ERROR,MEDIA_FORMAT_UNSUPPORTED:P.FORMAT_UNSUPPORTED,MEDIA_CODEC_UNSUPPORTED:P.CODEC_UNSUPPORTED};var be=W,ki=class s{TAG="SeekingHandler";_config;_media_element;_always_seek_keyframe=!1;_on_unbuffered_seek;_request_set_current_time=!1;_seek_request_record_clocktime=null;_idr_sample_list=new Ft;e=null;constructor(e,t,i){this._config=e,this._media_element=t,this._on_unbuffered_seek=i,this.e={onMediaSeeking:this._onMediaSeeking.bind(this)};let n=be.chrome&&(be.version.major<50||be.version.major===50&&be.version.build<2661);this._always_seek_keyframe=!!(n||be.msedge||be.msie),this._always_seek_keyframe&&(this._config.accurateSeek=!1),this._media_element.addEventListener("seeking",this.e.onMediaSeeking)}destroy(){this._idr_sample_list.clear(),this._media_element.removeEventListener("seeking",this.e.onMediaSeeking)}seek(e){let t=this._isPositionBuffered(e),i=!1;if(e<1&&this._media_element.buffered.length>0){let n=this._media_element.buffered.start(0);(n<1&&e<n||be.safari)&&(i=!0,e=be.safari?.1:n)}if(i)this.directSeek(e);else if(t)if(!this._always_seek_keyframe)this.directSeek(e);else{let n=this._getNearestKeyframe(Math.floor(e*1e3));n!=null&&(e=n.dts/1e3),this.directSeek(e)}else this._idr_sample_list.clear(),this._on_unbuffered_seek(Math.floor(e*1e3)),this._config.accurateSeek&&this.directSeek(e)}directSeek(e){this._request_set_current_time=!0,this._media_element.currentTime=e}appendSyncPoints(e){this._idr_sample_list.appendArray(e)}_onMediaSeeking(e){if(this._request_set_current_time){this._request_set_current_time=!1;return}let t=this._media_element.currentTime,i=this._media_element.buffered;if(t<1&&i.length>0){let n=i.start(0);if(n<1&&t<n||be.safari){let r=be.safari?.1:n;this.directSeek(r);return}}if(this._isPositionBuffered(t)){if(this._always_seek_keyframe){let n=this._getNearestKeyframe(Math.floor(t*1e3));n!=null&&(t=n.dts/1e3,this.directSeek(t))}return}this._seek_request_record_clocktime=s._getClockTime(),window.setTimeout(this._pollAndApplyUnbufferedSeek.bind(this),50)}_pollAndApplyUnbufferedSeek(){if(this._seek_request_record_clocktime==null)return;if(this._seek_request_record_clocktime<=s._getClockTime()-100){let t=this._media_element.currentTime;this._seek_request_record_clocktime=null,this._isPositionBuffered(t)||(this._idr_sample_list.clear(),this._on_unbuffered_seek(Math.floor(t*1e3)),this._config.accurateSeek&&this.directSeek(t))}else window.setTimeout(this._pollAndApplyUnbufferedSeek.bind(this),50)}_isPositionBuffered(e){let t=this._media_element.buffered;for(let i=0;i<t.length;i++){let n=t.start(i),r=t.end(i);if(e>=n&&e<r)return!0}return!1}_getNearestKeyframe(e){return this._idr_sample_list.getLastSyncPointBeforeDts(e)}static _getClockTime(){return self.performance&&self.performance.now?self.performance.now():Date.now()}},wt=ki;var Fi=class s{static TAG="LoadingController";_config;_media_element;_on_pause_transmuxer;_on_resume_transmuxer;_paused=!1;e=null;_lazyLoadMaxDuration;_lazyLoadRecoverDuration;constructor(e,t,i,n){this._config=e,this._lazyLoadMaxDuration=e.lazyLoadMaxDuration,this._lazyLoadRecoverDuration=e.lazyLoadRecoverDuration,this._media_element=t,this._on_pause_transmuxer=i,this._on_resume_transmuxer=n,this.e={onMediaTimeUpdate:this._onMediaTimeUpdate.bind(this)}}destroy(){this._media_element.removeEventListener("timeupdate",this.e.onMediaTimeUpdate),this.e=null}adjustLazyLoadDurations(e){this._lazyLoadMaxDuration=Math.max(4,this._lazyLoadMaxDuration*e),this._lazyLoadRecoverDuration=Math.max(2,this._lazyLoadRecoverDuration*e),u.v(s.TAG,`Adjusted lazy load durations (factor: ${e}) to - Max: ${this._lazyLoadMaxDuration}, Recover: ${this._lazyLoadRecoverDuration}`)}notifyBufferedPositionChanged(e){this._config.isLive||!this._config.lazyLoad||(e==null?this._suspendTransmuxerIfNeeded():this._suspendTransmuxerIfBufferedPositionExceeded(e))}_onMediaTimeUpdate(e){this._paused&&this._resumeTransmuxerIfNeeded()}_suspendTransmuxerIfNeeded(){let e=this._media_element.buffered,t=this._media_element.currentTime,i=0;for(let n=0;n<e.length;n++){let r=e.start(n),a=e.end(n);if(r<=t&&t<a){i=a;break}}i>0&&this._suspendTransmuxerIfBufferedPositionExceeded(i)}_suspendTransmuxerIfBufferedPositionExceeded(e){let t=this._media_element.currentTime;e>=t+this._lazyLoadMaxDuration&&!this._paused&&(u.v(s.TAG,".   Maximum buffering duration exceeded, suspend transmuxing task"),this.suspendTransmuxer(),this._media_element.addEventListener("timeupdate",this.e.onMediaTimeUpdate))}suspendTransmuxer(){this._paused=!0,this._on_pause_transmuxer()}_resumeTransmuxerIfNeeded(){let e=this._media_element.buffered,t=this._media_element.currentTime,i=this._lazyLoadRecoverDuration,n=!1;for(let r=0;r<e.length;r++){let a=e.start(r),o=e.end(r);if(t>=a&&t<o){t>=o-i&&(n=!0);break}}n&&(u.v(s.TAG,"Continue loading from paused position"),this.resumeTransmuxer(),this._media_element.removeEventListener("timeupdate",this.e.onMediaTimeUpdate))}resumeTransmuxer(){this._paused=!1,this._on_resume_transmuxer()}},Mt=Fi;var Ci=class{TAG="StartupStallJumper";_media_element;_on_direct_seek;_canplay_received=!1;e=null;constructor(e,t){this._media_element=e,this._on_direct_seek=t,this.e={onMediaCanPlay:this._onMediaCanPlay.bind(this),onMediaStalled:this._onMediaStalled.bind(this),onMediaProgress:this._onMediaProgress.bind(this)},this._media_element.addEventListener("canplay",this.e.onMediaCanPlay),this._media_element.addEventListener("stalled",this.e.onMediaStalled),this._media_element.addEventListener("progress",this.e.onMediaProgress)}destroy(){this._media_element.removeEventListener("canplay",this.e.onMediaCanPlay),this._media_element.removeEventListener("stalled",this.e.onMediaStalled),this._media_element.removeEventListener("progress",this.e.onMediaProgress)}_onMediaCanPlay(e){this._canplay_received=!0,this._media_element.removeEventListener("canplay",this.e.onMediaCanPlay)}_onMediaStalled(e){this._detectAndFixStuckPlayback(!0)}_onMediaProgress(e){this._detectAndFixStuckPlayback()}_detectAndFixStuckPlayback(e){let t=this._media_element,i=t.buffered;e||!this._canplay_received||t.readyState<2?i.length>0&&t.currentTime<i.start(0)&&(u.w(this.TAG,`Playback seems stuck at ${t.currentTime}, seek to ${i.start(0)}`),this._on_direct_seek(i.start(0)),this._media_element.removeEventListener("progress",this.e.onMediaProgress)):this._media_element.removeEventListener("progress",this.e.onMediaProgress)}},It=Ci;var Ti=class{_config;_media_element;_on_direct_seek;constructor(e,t,i){this._config=e,this._media_element=t,this._on_direct_seek=i}notifyBufferedRangeUpdate(){this._chaseLiveLatency()}_chaseLiveLatency(){let e=this._media_element.buffered,t=this._media_element.currentTime,i=this._media_element.paused;if(!this._config.isLive||!this._config.liveBufferLatencyChasing||e.length==0||!this._config.liveBufferLatencyChasingOnPaused&&i)return;let n=e.end(e.length-1);if(n>this._config.liveBufferLatencyMaxLatency&&n-t>this._config.liveBufferLatencyMaxLatency){let r=n-this._config.liveBufferLatencyMinRemain;this._on_direct_seek(r)}}},Ut=Ti;var Di=class{_config=null;_media_element;e=null;constructor(e,t){this._config=e,this._media_element=t,this.e={onMediaTimeUpdate:this._onMediaTimeUpdate.bind(this)},this._media_element.addEventListener("timeupdate",this.e.onMediaTimeUpdate)}destroy(){this._media_element.removeEventListener("timeupdate",this.e.onMediaTimeUpdate),this._media_element=null,this._config=null}_onMediaTimeUpdate(e){if(!this._config.isLive||!this._config.liveSync)return;let t=this._getCurrentLatency();if(t>this._config.liveSyncMaxLatency){let i=Math.min(2,Math.max(1,this._config.liveSyncPlaybackRate));this._media_element.playbackRate=i}else t>this._config.liveSyncTargetLatency||this._media_element.playbackRate!==1&&this._media_element.playbackRate!==0&&(this._media_element.playbackRate=1)}_getCurrentLatency(){if(!this._media_element)return 0;let e=this._media_element.buffered,t=this._media_element.currentTime;return e.length==0?0:e.end(e.length-1)-t}},Vt=Di;var Li=class{TAG="PlayerEngineMainThread";_emitter=new re;_media_data_source;_config;_media_element=null;_mse_controller=null;_transmuxer=null;_pending_seek_time=null;_seeking_handler=null;_loading_controller=null;_startup_stall_jumper=null;_live_latency_chaser=null;_live_latency_synchronizer=null;_mse_source_opened=!1;_has_pending_load=!1;_loaded_metadata_received=!1;_media_info=null;_statistics_info=null;e=null;constructor(e,t){this._media_data_source=e,this._config={...Ae(),...t,...e.isLive===!0&&{isLive:!0}},this.e={onMediaLoadedMetadata:this._onMediaLoadedMetadata.bind(this)}}destroy(){this._emitter?.emit(M.DESTROYING),this._transmuxer&&this.unload(),this._media_element&&this.detachMediaElement(),this.e=null,this._media_data_source=null,this._emitter?.removeAllListeners(),this._emitter=null}on(e,t){this._emitter?.addListener(e,t),e===M.MEDIA_INFO&&this._media_info?Promise.resolve().then(()=>this._emitter?.emit(M.MEDIA_INFO,this.mediaInfo)):e==M.STATISTICS_INFO&&this._statistics_info&&Promise.resolve().then(()=>this._emitter?.emit(M.STATISTICS_INFO,this.statisticsInfo))}off(e,t){this._emitter?.removeListener(e,t)}attachMediaElement(e){this._media_element=e,e.src="",e.removeAttribute("src"),e.srcObject=null,e.load(),e.addEventListener("loadedmetadata",this.e.onMediaLoadedMetadata);let t={getCurrentTime:()=>e.currentTime,getReadyState:()=>e.readyState,getError:()=>e.error,setOnMediaTimeUpdate:i=>{e.ontimeupdate=i}};this._mse_controller=new Ji(this._config,t),this._mse_controller.on(j.UPDATE_END,this._onMSEUpdateEnd.bind(this)),this._mse_controller.on(j.BUFFER_FULL,this._onMSEBufferFull.bind(this)),this._mse_controller.on(j.QUOTA_EXCEEDED_BUFFER_FULL,this._onMSEQuotaExceededBufferFull.bind(this)),this._mse_controller.on(j.SOURCE_OPEN,this._onMSESourceOpen.bind(this)),this._mse_controller.on(j.ERROR,this._onMSEError.bind(this)),this._mse_controller.on(j.START_STREAMING,this._onMSEStartStreaming.bind(this)),this._mse_controller.on(j.END_STREAMING,this._onMSEEndStreaming.bind(this)),this._mse_controller.isManagedMediaSource()?(e.disableRemotePlayback=!0,e.srcObject=this._mse_controller.getObject()):e.src=this._mse_controller.getObjectURL()}detachMediaElement(){this._media_element&&(this._mse_controller?.shutdown(),this._media_element.removeEventListener("loadedmetadata",this.e.onMediaLoadedMetadata),this._media_element.src="",this._media_element.removeAttribute("src"),this._media_element.srcObject=null,this._media_element.load(),this._media_element=null,this._mse_controller?.revokeObjectURL()),this._mse_controller&&(this._mse_controller.destroy(),this._mse_controller=null)}load(){if(!this._media_element)throw new X("HTMLMediaElement must be attached before load()!");if(this._transmuxer)throw new X("load() has been called, please call unload() first!");if(!this._has_pending_load){if(this._config.deferLoadAfterSourceOpen&&!this._mse_source_opened){this._has_pending_load=!0;return}this._transmuxer=new mr(this._media_data_source,this._config),this._transmuxer.on(A.INIT_SEGMENT,(e,t)=>{this._mse_controller?.appendInitSegment(t)}),this._transmuxer.on(A.MEDIA_SEGMENT,(e,t)=>{this._mse_controller?.appendMediaSegment(t),!this._config.isLive&&e==="video"&&t.data&&t.data.byteLength>0&&"info"in t&&this._seeking_handler?.appendSyncPoints(t.info.syncPoints),this._loading_controller?.notifyBufferedPositionChanged(t.info.endDts/1e3)}),this._transmuxer.on(A.LOADING_COMPLETE,()=>{this._mse_controller?.endOfStream(),this._emitter?.emit(M.LOADING_COMPLETE)}),this._transmuxer.on(A.RECOVERED_EARLY_EOF,()=>{this._emitter?.emit(M.RECOVERED_EARLY_EOF)}),this._transmuxer.on(A.IO_ERROR,(e,t)=>{this._emitter?.emit(M.ERROR,Ke.NETWORK_ERROR,e,t)}),this._transmuxer.on(A.DEMUX_ERROR,(e,t)=>{this._emitter?.emit(M.ERROR,Ke.MEDIA_ERROR,e,t)}),this._transmuxer.on(A.MEDIA_INFO,e=>{this._media_info=e,this._emitter?.emit(M.MEDIA_INFO,Object.assign({},e))}),this._transmuxer.on(A.STATISTICS_INFO,e=>{this._statistics_info=this._fillStatisticsInfo(e),this._emitter?.emit(M.STATISTICS_INFO,Object.assign({},e))}),this._transmuxer.on(A.RECOMMEND_SEEKPOINT,e=>{this._media_element&&!this._config.accurateSeek&&this._seeking_handler?.directSeek(e/1e3)}),this._transmuxer.on(A.METADATA_ARRIVED,e=>{this._emitter?.emit(M.METADATA_ARRIVED,e)}),this._transmuxer.on(A.SCRIPTDATA_ARRIVED,e=>{this._emitter?.emit(M.SCRIPTDATA_ARRIVED,e)}),this._transmuxer.on(A.TIMED_ID3_METADATA_ARRIVED,e=>{this._emitter?.emit(M.TIMED_ID3_METADATA_ARRIVED,e)}),this._transmuxer.on(A.PGS_SUBTITLE_ARRIVED,e=>{this._emitter?.emit(M.PGS_SUBTITLE_ARRIVED,e)}),this._transmuxer.on(A.SYNCHRONOUS_KLV_METADATA_ARRIVED,e=>{this._emitter?.emit(M.SYNCHRONOUS_KLV_METADATA_ARRIVED,e)}),this._transmuxer.on(A.ASYNCHRONOUS_KLV_METADATA_ARRIVED,e=>{this._emitter?.emit(M.ASYNCHRONOUS_KLV_METADATA_ARRIVED,e)}),this._transmuxer.on(A.SMPTE2038_METADATA_ARRIVED,e=>{this._emitter?.emit(M.SMPTE2038_METADATA_ARRIVED,e)}),this._transmuxer.on(A.SCTE35_METADATA_ARRIVED,e=>{this._emitter?.emit(M.SCTE35_METADATA_ARRIVED,e)}),this._transmuxer.on(A.PES_PRIVATE_DATA_DESCRIPTOR,e=>{this._emitter?.emit(M.PES_PRIVATE_DATA_DESCRIPTOR,e)}),this._transmuxer.on(A.PES_PRIVATE_DATA_ARRIVED,e=>{this._emitter?.emit(M.PES_PRIVATE_DATA_ARRIVED,e)}),this._seeking_handler=new wt(this._config,this._media_element,this._onRequiredUnbufferedSeek.bind(this)),this._loading_controller=new Mt(this._config,this._media_element,this._onRequestPauseTransmuxer.bind(this),this._onRequestResumeTransmuxer.bind(this)),this._startup_stall_jumper=new It(this._media_element,this._onRequestDirectSeek.bind(this)),this._config.isLive&&this._config.liveBufferLatencyChasing&&(this._live_latency_chaser=new Ut(this._config,this._media_element,this._onRequestDirectSeek.bind(this))),this._config.isLive&&this._config.liveSync&&(this._live_latency_synchronizer=new Vt(this._config,this._media_element)),this._media_element.readyState>0&&this._seeking_handler.directSeek(0),this._transmuxer.open()}}unload(){this._media_element?.pause(),this._live_latency_synchronizer?.destroy(),this._live_latency_synchronizer=null,this._live_latency_chaser=null,this._startup_stall_jumper?.destroy(),this._startup_stall_jumper=null,this._loading_controller?.destroy(),this._loading_controller=null,this._seeking_handler?.destroy(),this._seeking_handler=null,this._mse_controller?.flush(),this._transmuxer?.close(),this._transmuxer?.destroy(),this._transmuxer=null}play(){return this._media_element.play()}pause(){this._media_element.pause()}seek(e){this._media_element&&this._seeking_handler?this._seeking_handler.seek(e):this._pending_seek_time=e}get mediaInfo(){return Object.assign({},this._media_info)}get statisticsInfo(){return Object.assign({},this._statistics_info)}_onMSESourceOpen(){this._mse_source_opened=!0,this._has_pending_load&&(this._has_pending_load=!1,this.load())}_onMSEUpdateEnd(){this._config.isLive&&this._config.liveBufferLatencyChasing&&this._live_latency_chaser&&this._live_latency_chaser.notifyBufferedRangeUpdate(),this._loading_controller?.notifyBufferedPositionChanged()}_onMSEQuotaExceededBufferFull(e){if(u.w(this.TAG,`Quota exceeded - reducing buffer durations. Type: ${e.type}, Buffer length: ${e.currentBufferLength}, Segment size: ${e.segmentSize}`),!this._loading_controller){u.w(this.TAG,"LoadingController not available for quota adjustment");return}this._loading_controller?.adjustLazyLoadDurations(.5)}_onMSEBufferFull(){u.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),this._loading_controller?.suspendTransmuxer()}_onMSEError(e){this._emitter?.emit(M.ERROR,Ke.MEDIA_ERROR,Bt.MEDIA_MSE_ERROR,e)}_onMSEStartStreaming(){this._loaded_metadata_received&&(this._config.isLive||(u.v(this.TAG,"Resume transmuxing task due to ManagedMediaSource onStartStreaming"),this._loading_controller?.resumeTransmuxer()))}_onMSEEndStreaming(){this._config.isLive||(u.v(this.TAG,"Suspend transmuxing task due to ManagedMediaSource onEndStreaming"),this._loading_controller?.suspendTransmuxer())}_onMediaLoadedMetadata(e){this._loaded_metadata_received=!0,this._pending_seek_time!=null&&(this._seeking_handler?.seek(this._pending_seek_time),this._pending_seek_time=null)}_onRequestDirectSeek(e){this._seeking_handler?.directSeek(e)}_onRequiredUnbufferedSeek(e){this._mse_controller?.flush(),this._transmuxer?.seek(e)}_onRequestPauseTransmuxer(){this._transmuxer?.pause()}_onRequestResumeTransmuxer(){this._transmuxer?.resume()}_fillStatisticsInfo(e){if(e.playerType="MSEPlayer",!(this._media_element instanceof HTMLVideoElement))return e;let t=!0,i=0,n=0;if(this._media_element.getVideoPlaybackQuality){let r=this._media_element.getVideoPlaybackQuality();i=r.totalVideoFrames,n=r.droppedVideoFrames}else this._media_element.webkitDecodedFrameCount!=null?(i=this._media_element.webkitDecodedFrameCount,n=this._media_element.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=i,e.droppedFrames=n),e}},Bi=Li;var Yr={},wi=class{TAG="PlayerEngineDedicatedThread";_emitter=new re;_media_data_source;_config;_media_element=null;_worker;_worker_destroying=!1;_seeking_handler=null;_loading_controller=null;_startup_stall_jumper=null;_live_latency_chaser=null;_live_latency_synchronizer=null;_pending_seek_time=NaN;_media_info=null;_statistics_info=null;e=null;static isSupported(){return self.Worker?!!(self.MediaSource&&"canConstructInDedicatedWorker"in self.MediaSource&&self.MediaSource.canConstructInDedicatedWorker===!0||self.ManagedMediaSource&&"canConstructInDedicatedWorker"in self.ManagedMediaSource&&self.ManagedMediaSource.canConstructInDedicatedWorker===!0):!1}constructor(e,t){this._media_data_source=e,this._config=Ae(),typeof t=="object"&&Object.assign(this._config,t),e.isLive===!0&&(this._config.isLive=!0),this.e={onLoggingConfigChanged:this._onLoggingConfigChanged.bind(this),onMediaLoadedMetadata:this._onMediaLoadedMetadata.bind(this),onMediaTimeUpdate:this._onMediaTimeUpdate.bind(this),onMediaReadyStateChanged:this._onMediaReadyStateChange.bind(this)},pe.registerListener(this.e.onLoggingConfigChanged),this._worker=new Worker(new URL("./player-engine-worker.js",Yr.url),{type:"module"}),this._worker.addEventListener("message",this._onWorkerMessage.bind(this)),this._worker.postMessage({cmd:"init",media_data_source:this._media_data_source,config:this._config}),this._worker.postMessage({cmd:"logging_config",logging_config:pe.getConfig()})}destroy(){this._emitter.emit(M.DESTROYING),this.unload(),this.detachMediaElement(),this._worker_destroying=!0,this._worker?.postMessage({cmd:"destroy"}),pe.removeListener(this.e.onLoggingConfigChanged),this.e=null,this._media_data_source=null,this._emitter.removeAllListeners()}on(e,t){this._emitter.addListener(e,t),e===M.MEDIA_INFO&&this._media_info?Promise.resolve().then(()=>this._emitter.emit(M.MEDIA_INFO,this.mediaInfo)):e==M.STATISTICS_INFO&&this._statistics_info&&Promise.resolve().then(()=>this._emitter.emit(M.STATISTICS_INFO,this.statisticsInfo))}off(e,t){this._emitter.removeListener(e,t)}attachMediaElement(e){this._media_element=e,this._media_element.src="",this._media_element.removeAttribute("src"),this._media_element.srcObject=null,this._media_element.load(),this._media_element.addEventListener("loadedmetadata",this.e.onMediaLoadedMetadata),this._media_element.addEventListener("timeupdate",this.e.onMediaTimeUpdate),this._media_element.addEventListener("readystatechange",this.e.onMediaReadyStateChanged),this._worker?.postMessage({cmd:"initialize_mse"})}detachMediaElement(){this._worker?.postMessage({cmd:"shutdown_mse"}),this._media_element&&(this._media_element.removeEventListener("loadedmetadata",this.e.onMediaLoadedMetadata),this._media_element.removeEventListener("timeupdate",this.e.onMediaTimeUpdate),this._media_element.removeEventListener("readystatechange",this.e.onMediaReadyStateChanged),this._media_element.src="",this._media_element.removeAttribute("src"),this._media_element.srcObject=null,this._media_element.load(),this._media_element=null)}load(){this._worker?.postMessage({cmd:"load"}),this._seeking_handler=new wt(this._config,this._media_element,this._onRequiredUnbufferedSeek.bind(this)),this._loading_controller=new Mt(this._config,this._media_element,this._onRequestPauseTransmuxer.bind(this),this._onRequestResumeTransmuxer.bind(this)),this._startup_stall_jumper=new It(this._media_element,this._onRequestDirectSeek.bind(this)),this._config.isLive&&this._config.liveBufferLatencyChasing&&(this._live_latency_chaser=new Ut(this._config,this._media_element,this._onRequestDirectSeek.bind(this))),this._config.isLive&&this._config.liveSync&&(this._live_latency_synchronizer=new Vt(this._config,this._media_element)),this._media_element.readyState>0&&this._seeking_handler?.directSeek(0)}unload(){this._media_element?.pause(),this._worker?.postMessage({cmd:"unload"}),this._live_latency_synchronizer?.destroy(),this._live_latency_synchronizer=null,this._live_latency_chaser=null,this._startup_stall_jumper?.destroy(),this._startup_stall_jumper=null,this._loading_controller?.destroy(),this._loading_controller=null,this._seeking_handler?.destroy(),this._seeking_handler=null}play(){return this._media_element?.play()||Promise.resolve()}pause(){this._media_element?.pause()}seek(e){this._media_element&&this._seeking_handler?this._seeking_handler.seek(e):this._pending_seek_time=e}get mediaInfo(){return Object.assign({},this._media_info)}get statisticsInfo(){return Object.assign({},this._statistics_info)}_onLoggingConfigChanged(e){this._worker?.postMessage({cmd:"logging_config",logging_config:e})}_onMSEUpdateEnd(){this._config.isLive&&this._config.liveBufferLatencyChasing&&this._live_latency_chaser&&this._live_latency_chaser.notifyBufferedRangeUpdate(),this._loading_controller?.notifyBufferedPositionChanged()}_onMSEBufferFull(){u.v(this.TAG,"MSE SourceBuffer is full, suspend transmuxing task"),this._loading_controller?.suspendTransmuxer()}_onMediaLoadedMetadata(e){Number.isNaN(this._pending_seek_time)||(this._seeking_handler?.seek(this._pending_seek_time),this._pending_seek_time=NaN)}_onRequestDirectSeek(e){this._seeking_handler?.directSeek(e)}_onRequiredUnbufferedSeek(e){this._worker?.postMessage({cmd:"unbuffered_seek",milliseconds:e})}_onRequestPauseTransmuxer(){this._worker?.postMessage({cmd:"pause_transmuxer"})}_onRequestResumeTransmuxer(){this._worker?.postMessage({cmd:"resume_transmuxer"})}_onMediaTimeUpdate(e){this._worker?.postMessage({cmd:"timeupdate",current_time:e.target.currentTime})}_onMediaReadyStateChange(e){this._worker?.postMessage({cmd:"readystatechange",ready_state:e.target.readyState})}_onWorkerMessage(e){let t=e.data,i=t.msg;if(i=="destroyed"||this._worker_destroying){this._worker_destroying=!1,this._worker?.terminate(),this._worker=null;return}switch(i){case"mse_init":{let n=t;"ManagedMediaSource"in self&&!("MediaSource"in self)&&(this._media_element.disableRemotePlayback=!0),this._media_element.srcObject=n.handle;break}case"mse_event":{let n=t;n.event==j.UPDATE_END?this._onMSEUpdateEnd():n.event==j.BUFFER_FULL?this._onMSEBufferFull():n.event==j.QUOTA_EXCEEDED_BUFFER_FULL&&this._onMSEQuotaExceededBufferFull(n.data);break}case"transmuxing_event":{let n=t;if(n.event==A.MEDIA_INFO){let r=t;this._media_info=r.info,this._emitter.emit(M.MEDIA_INFO,Object.assign({},r.info))}else if(n.event==A.STATISTICS_INFO){let r=t;this._statistics_info=this._fillStatisticsInfo(r.info),this._emitter.emit(M.STATISTICS_INFO,Object.assign({},r.info))}else if(n.event==A.RECOMMEND_SEEKPOINT){let r=t;this._media_element&&!this._config.accurateSeek&&this._seeking_handler?.directSeek(r.milliseconds/1e3)}break}case"player_event":{let n=t;if(n.event==M.ERROR){let r=t;this._emitter.emit(M.ERROR,r.error_type,r.error_detail,r.info)}else if("extraData"in n){let r=t;this._emitter.emit(r.event,r.extraData)}break}case"logcat_callback":{let n=t;u.emitLog(n.type,n.logcat);break}case"buffered_position_changed":{let n=t;this._loading_controller?.notifyBufferedPositionChanged(n.buffered_position_milliseconds/1e3);break}}}_onMSEQuotaExceededBufferFull(e){if(u.w(this.TAG,`Quota exceeded - reducing buffer durations. Type: ${e.type}, Buffer length: ${e.currentBufferLength}, Segment size: ${e.segmentSize}`),!this._loading_controller){u.w(this.TAG,"LoadingController not available for quota adjustment");return}this._loading_controller.adjustLazyLoadDurations(.5)}_fillStatisticsInfo(e){if(e.playerType="MSEPlayer",!(this._media_element instanceof HTMLVideoElement))return e;let t=!0,i=0,n=0;if(this._media_element.getVideoPlaybackQuality){let r=this._media_element.getVideoPlaybackQuality();i=r.totalVideoFrames,n=r.droppedVideoFrames}else this._media_element.webkitDecodedFrameCount!=null?(i=this._media_element.webkitDecodedFrameCount,n=this._media_element.webkitDroppedFrameCount):t=!1;return t&&(e.decodedFrames=i,e.droppedFrames=n),e}},Mi=wi;var Ii=class{TAG="MSEPlayer";_type="MSEPlayer";_media_element=null;_player_engine=null;constructor(e,t){let i=e.type.toLowerCase();if(i!=="mse"&&i!=="flv")throw new ne("MSEPlayer requires an mse/flv MediaDataSource input!");if(t?.enableWorkerForMSE&&Mi.isSupported())try{this._player_engine=new Mi(e,t)}catch{u.e(this.TAG,"Error while initializing PlayerEngineDedicatedThread, fallback to PlayerEngineMainThread"),this._player_engine=new Bi(e,t)}else this._player_engine=new Bi(e,t)}destroy(){this._player_engine.destroy(),this._player_engine=null,this._media_element=null}on(e,t){this._player_engine.on(e,t)}off(e,t){this._player_engine.off(e,t)}attachMediaElement(e){this._media_element=e,this._player_engine.attachMediaElement(e)}detachMediaElement(){this._media_element=null,this._player_engine.detachMediaElement()}load(){this._player_engine.load()}unload(){this._player_engine.unload()}play(){return this._player_engine.play()}pause(){this._player_engine.pause()}get type(){return this._type}get buffered(){return this._media_element.buffered}get duration(){return this._media_element.duration}get volume(){return this._media_element.volume}set volume(e){this._media_element.volume=e}get muted(){return this._media_element.muted}set muted(e){this._media_element.muted=e}get currentTime(){return this._media_element?this._media_element.currentTime:0}set currentTime(e){this._player_engine.seek(e)}get mediaInfo(){return this._player_engine.mediaInfo}get statisticsInfo(){return this._player_engine.statisticsInfo}},at=Ii;var Ui=class s{static supportMSEH264Playback(){let e='video/mp4; codecs="avc1.42E01E,mp4a.40.2"',t=self.MediaSource&&self.MediaSource.isTypeSupported(e),i=self.ManagedMediaSource&&self.ManagedMediaSource.isTypeSupported(e);return t||i}static supportMSEH265Playback(){let e='video/mp4; codecs="hvc1.1.6.L93.B0"',t=self.MediaSource&&self.MediaSource.isTypeSupported(e),i=self.ManagedMediaSource&&self.ManagedMediaSource.isTypeSupported(e);return t||i}static supportNetworkStreamIO(){let e=new st({},Ae()),t=e.loaderType;return e.destroy(),t=="fetch-stream-loader"||t=="xhr-moz-chunked-loader"}static getNetworkLoaderTypeName(){let e=new st({},Ae()),t=e.loaderType;return e.destroy(),t}static supportNativeMediaPlayback(e){s.videoElement==null&&(s.videoElement=window.document.createElement("video"));let t=s.videoElement.canPlayType(e);return t==="probably"||t=="maybe"}static getFeatureList(){let e={msePlayback:!1,mseLivePlayback:!1,mseH265Playback:!1,networkStreamIO:!1,networkLoaderName:"",nativeMP4H264Playback:!1,nativeMP4H265Playback:!1,nativeWebmVP8Playback:!1,nativeWebmVP9Playback:!1};return e.msePlayback=s.supportMSEH264Playback(),e.networkStreamIO=s.supportNetworkStreamIO(),e.networkLoaderName=s.getNetworkLoaderTypeName(),e.mseLivePlayback=e.msePlayback&&e.networkStreamIO,e.mseH265Playback=s.supportMSEH265Playback(),e.nativeMP4H264Playback=s.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"'),e.nativeMP4H265Playback=s.supportNativeMediaPlayback('video/mp4; codecs="hvc1.1.6.L93.B0"'),e.nativeWebmVP8Playback=s.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"'),e.nativeWebmVP9Playback=s.supportNativeMediaPlayback('video/webm; codecs="vp9"'),e}},Vi=Ui;function Xr(s,e){let t=s;if(t==null||typeof t!="object")throw new ne("MediaDataSource must be a javascript object!");if(!t.hasOwnProperty("type"))throw new ne("MediaDataSource must has type field to indicate video file type!");switch(t.type){case"mse":case"flv":return new at(t,e);default:return new tt(t,e)}}function Qr(){return Vi.supportMSEH264Playback()}function Zr(){return Vi.getFeatureList()}var Jr={createPlayer:Xr,isSupported:Qr,getFeatureList:Zr,BaseLoader:ue,LoaderStatus:B,LoaderErrors:V,Events:M,ErrorTypes:Ke,ErrorDetails:Bt,MSEPlayer:at,NativePlayer:tt,LoggingControl:pe,get version(){return"0.0.1-alpha.0"}},pr=Jr;return kr(en);})();
    </script>
    <style>
        /* {IȃZbgƍ̃X^CO */
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            background-color: #0b0f19;
            color: #e2e8f0;
            font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
            padding: 20px;
            display: flex;
            flex-direction: column;
            align-items: center;
            min-height: 100vh;
        }
        main {
            width: 100%;
            max-width: 800px;
            display: flex;
            flex-direction: column;
            gap: 20px;
        }
        
        /* rfIvC[̃X^CO */
        .player-container {
            position: relative;
            background-color: #000000;
            border: 1px solid #1e293b;
            border-radius: 8px;
            overflow: hidden;
            aspect-ratio: 16 / 9;
            width: 100%;
        }
        video {
            width: 100%;
            height: 100%;
            object-fit: contain;
            display: block;
        }

        /* Xe[^XZNVi|[gԕ\j */
        .status-container {
            background-color: #0f172a;
            border: 1px solid #1e293b;
            border-radius: 8px;
            padding: 16px;
            font-size: 12px;
            line-height: 1.6;
        }
        .status-title {
            font-size: 14px;
            font-weight: bold;
            color: #818cf8;
            border-bottom: 1px solid #1e293b;
            padding-bottom: 8px;
            margin-bottom: 12px;
            display: flex;
            align-items: center;
            gap: 8px;
        }
        .status-title::before {
            content: "";
            display: inline-block;
            width: 8px;
            height: 8px;
            background-color: #22c55e;
            border-radius: 50%;
        }

        /* Xe[^XObh */
        .grid {
            display: grid;
            grid-template-columns: 1fr;
            gap: 12px;
        }
        @media (min-width: 600px) {
            .grid {
                grid-template-columns: 1fr 1fr;
                gap: 24px;
            }
        }
        .info-block {
            display: flex;
            flex-direction: column;
            gap: 4px;
        }
        .info-item {
            display: flex;
            justify-content: space-between;
            border-bottom: 1px dashed #1e293b;
            padding-bottom: 4px;
        }
        .label {
            color: #94a3b8;
        }
        .value {
            color: #f1f5f9;
            text-align: right;
            word-break: break-all;
            max-width: 70%;
        }
        .value a {
            color: #818cf8;
            text-decoration: none;
        }
        .value a:hover {
            text-decoration: underline;
        }
    </style>
</head>
<body>

    <main>
        <!-- rfIRei -->
        <div class="player-container" id="player-container">
            <!-- WRg[gp -->
            <video id="video-element" controls playsinline></video>
        </div>

        <!-- |[gԕ\ / Xe[^XZNV -->
        <div class="status-container">
            <div class="status-title">|[gԕ\</div>

            <div class="grid">
                <!-- { -->
                <div class="info-block">
                    <div class="info-item">
                        <span class="label">zMURL:</span>
                        <span class="value"><SRC_URL></span>
                    </div>
                    <div class="info-item">
                        <span class="label">^Cg:</span>
                        <span class="value"><TITLE></span>
                    </div>
                    <div class="info-item">
                        <span class="label">Rg:</span>
                        <span class="value"><COMMENT></span>
                    </div>
                    <div class="info-item">
                        <span class="label">URL:</span>
                        <span class="value">
                            <a href="<LIVE_URL>" target="_blank"><LIVE_URL></a>
                        </span>
                    </div>
                </div>

                <!-- ڑptH[}X -->
                <div class="info-block">
                    <div class="info-item">
                        <span class="label">ڑ:</span>
                        <span class="value"><TIME></span>
                    </div>
                    <div class="info-item">
                        <span class="label">݂̐ڑ:</span>
                        <span class="value">
                            <CONN> / <MAXCONN>
                        </span>
                    </div>
                    <div class="info-item">
                        <span class="label">rbg[g:</span>
                        <span class="value" style="color: #4ade80;"><CURRENT></span>
                    </div>
                    <div class="info-item">
                        <span class="label">\rbg[g:</span>
                        <span class="value"><BITRATE></span>
                    </div>
                    <div class="info-item">
                        <span class="label">ш搧:</span>
                        <span class="value"><BANDWIDTH></span>
                    </div>
                </div>
            </div>

            <!-- G[JE^Ȇ -->
            <div class="grid" style="margin-top: 12px; padding-top: 12px; border-top: 1px dashed #1e293b;">
                <div class="info-block">
                    <div class="info-item">
                        <span class="label">rW[JE^:</span>
                        <span class="value"><BUSYCOUNT></span>
                    </div>
                    <div class="info-item">
                        <span class="label">IMG[JE^:</span>
                        <span class="value" style="color: #f87171;"><IMPORT_ERROR></span>
                    </div>
                    <div class="info-item">
                        <span class="label">EXG[JE^:</span>
                        <span class="value" style="color: #f87171;"><EXPORT_ERROR></span>
                    </div>
                </div>

                <div class="info-block">
                    <div class="info-item">
                        <span class="label">q:</span>
                        <span class="value"><CHILD></span>
                    </div>
                    <div class="info-item">
                        <span class="label">o[W:</span>
                        <span class="value" style="color: #64748b;"><VERSION></span>
                    </div>
                </div>
            </div>
        </div>
    </main>

    <!-- zMVXe̋ɏĐXNvg -->
    <script>
        if (asf_stream.eflv.getFeatureList().mseLivePlayback) {
            let videoElement = document.getElementById('video-element');
            let player = asf_stream.eflv.createPlayer({
                type: 'mse',
                isLive: true,
                url: '/play?stream-switch'
            });
            player.attachMediaElement(videoElement);
            player.load();
            player.play();
        }
    </script>
</body>
</html>