From ccee9157a70725e7f6bf77dc43ff2566bfa14540 Mon Sep 17 00:00:00 2001 From: Harvey Zhao Date: Sat, 12 Sep 2026 20:21:25 +0800 Subject: [PATCH] refactor(mediabunny): [PKG-MB-06] own audio clocks, buffers and context lifecycle --- docs/compiled/artplayer-proxy-mediabunny.js | 2 +- .../artplayer-proxy-mediabunny.legacy.js | 2 +- docs/compiled/artplayer-proxy-mediabunny.mjs | 745 +- package.json | 4 +- .../ARCHITECTURE.md | 63 +- .../dist/artplayer-proxy-mediabunny.js | 2 +- .../dist/artplayer-proxy-mediabunny.legacy.js | 2 +- .../dist/artplayer-proxy-mediabunny.mjs | 745 +- .../src/AudioEngine.d.ts | 6 - .../src/AudioEngine.js | 289 - .../src/AudioEngine.ts | 288 + .../src/MediaBunnyEngine.ts | 13 +- .../src/audio-clock.ts | 20 + .../src/audio-context.ts | 92 + .../src/audio-nodes.ts | 88 + .../src/audio-pump.ts | 106 + .../src/audio-task.ts | 50 + .../src/engine-ports.ts | 1 + .../src/playback.ts | 16 +- refactor/baselines/mb-audio-source.json | 10 + refactor/baselines/mb-audio-validation.json | 13360 ++++++++++++++++ .../changes/2026-09-12-PKG-MB-06-audio.md | 72 + refactor/mb-validation.md | 10 + refactor/plan.md | 5 +- refactor/progress.md | 13 + refactor/risks.json | 6 +- refactor/tasks.json | 8 +- test/browser/mediabunny-audio.spec.js | 254 + test/mediabunny-audio.test.js | 642 + test/mediabunny-coordination.test.js | 4 +- 30 files changed, 16182 insertions(+), 736 deletions(-) delete mode 100644 packages/artplayer-proxy-mediabunny/src/AudioEngine.d.ts delete mode 100644 packages/artplayer-proxy-mediabunny/src/AudioEngine.js create mode 100644 packages/artplayer-proxy-mediabunny/src/AudioEngine.ts create mode 100644 packages/artplayer-proxy-mediabunny/src/audio-clock.ts create mode 100644 packages/artplayer-proxy-mediabunny/src/audio-context.ts create mode 100644 packages/artplayer-proxy-mediabunny/src/audio-nodes.ts create mode 100644 packages/artplayer-proxy-mediabunny/src/audio-pump.ts create mode 100644 packages/artplayer-proxy-mediabunny/src/audio-task.ts create mode 100644 refactor/baselines/mb-audio-source.json create mode 100644 refactor/baselines/mb-audio-validation.json create mode 100644 refactor/changes/2026-09-12-PKG-MB-06-audio.md create mode 100644 test/browser/mediabunny-audio.spec.js create mode 100644 test/mediabunny-audio.test.js diff --git a/docs/compiled/artplayer-proxy-mediabunny.js b/docs/compiled/artplayer-proxy-mediabunny.js index 8f94a1cb0..d0f027a72 100644 --- a/docs/compiled/artplayer-proxy-mediabunny.js +++ b/docs/compiled/artplayer-proxy-mediabunny.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,a,s,n,o,c,l,u,d,h,f,m,p,g,k,y,b,w=e=>{throw TypeError(e)},T=(e,t,i)=>t.has(e)||w("Cannot "+i),S=(e,t,i)=>(T(e,t,"read from private field"),i?i.call(e):t.get(e)),v=(e,t,i)=>t.has(e)?w("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),P=(e,t,i,r)=>(T(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),I=(e,t,i)=>(T(e,t,"access private method"),i),x=(e,t,i,r)=>({set _(r){P(e,t,r,i)},get _(){return S(e,t,r)}});function C(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class B{constructor(){v(this,e,!1),this.listeners=new Map}addEventListener(t,i){S(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),this.listeners.get(t)?.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){if(S(this,e))return;const r=Object.assign(new Event(t),{detail:i});this.listeners.get(t)?.forEach(t=>{S(this,e)||t(r)})}destroy(){P(this,e,!0),this.listeners.clear()}}function E(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const _=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},R=e=>e&&e[e.length-1],F=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-2**r)},D=e=>{const t=F(e);return 0===(1&t)?-(t>>1):t+1>>1},M=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),N=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),O=new TextDecoder,z=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),L={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},U=z(L),q={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},W=z(q),H={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},V=z(H),j=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,K={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},X=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class ${constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,await i,e}}const G=/^[0-9a-fA-F]+$/,Q=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),Y=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,J=(e,t,i)=>{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+a>>1,o=i(e[n]);o===t?(s=n,a=n-1):o{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+(a-r+1)/2|0;i(e[n])<=t?(s=n,r=n+1):a=n-1}return s},ee=(e,t,i)=>{const r=Z(e,i(t),i);e.splice(r+1,0,t)},te=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},ie=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},re=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},ae=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},se=e=>{throw new Error(`Unexpected value: ${e}`)},ne=(e,t,i)=>{const r=e.getUint8(t),a=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|a<<8|s<<16:r<<16|a<<8|s},oe=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},ce=(e,t)=>({async next(){const i=await e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),le=(e,t,i)=>Math.max(t,Math.min(i,e)),ue="und",de=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},he=(e,t)=>Math.round(e/t)*t,fe=(e,t)=>Math.round(e*t)/t,me=(e,t)=>Math.floor(e/t)*t,pe=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},ge=/^[a-z]{3}$/,ke=e=>ge.test(e),ye=1e6*(1+Number.EPSILON),be=(e,t)=>{const i={...e,...t};if(e.headers||t.headers){const r=e.headers?we(e.headers):{},a=t.headers?we(t.headers):{},s={...r};Object.entries(a).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},we=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Te=async(e,t,i,r,a)=>{let s=0;for(;;)try{return await e(t,i)}catch(n){if(a())throw n;s++;const e=r(s,n,t);if(null===e)throw n;if(Ke._error("Retrying failed fetch. Error:",n),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&await We(1e3*e),a())throw n}};class Se{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let ve=null;const Pe=()=>null!==ve?ve:ve=!("undefined"===typeof navigator||!(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)));let Ie=null;const xe=()=>null!==Ie?Ie:Ie="undefined"!==typeof navigator&&navigator.userAgent?.includes("Firefox");let Ce=null;const Be=()=>null!==Ce?Ce:Ce=!("undefined"===typeof navigator||!navigator.vendor?.includes("Google Inc")&&!/Chrome/.test(navigator.userAgent)),Ee=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,_e=(async()=>{})().constructor,Re=e=>e instanceof _e||e instanceof Promise||"function"===typeof e?.then,Fe=(e,t)=>-1!==e?e:t,Ae=(e,t,i,r)=>e<=r&&i<=t,De=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{Symbol.dispose??(Symbol.dispose=Symbol("Symbol.dispose"))},Ne=e=>"number"===typeof e&&!Number.isNaN(e),Oe=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const a=e.indexOf("/",r+3);i=-1===a?e+t:e.slice(0,a)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const a=i.indexOf("://");if(-1!==a){const e=i.indexOf("/",a+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),n=[];for(const o of s)".."===o?n.pop():"."!==o&&n.push(o);return r+n.join("/")},ze=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let a=0;a{E(Number.isInteger(e.num)),E(Number.isInteger(e.den)),E(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},qe=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},We=e=>new Promise(t=>setTimeout(t,e));class He{constructor(){this._listeners=new Map}on(e,t,i){this._listeners.has(e)||this._listeners.set(e,new Set);const r={fn:t,once:i?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(a){console.error(a)}s.once&&r.delete(s)}}}var Ve,je;(je=Ve||(Ve={}))[je.Silent=0]="Silent",je[je.Errors=1]="Errors",je[je.Warnings=2]="Warnings",je[je.Info=3]="Info";class Ke{constructor(){}static get level(){return Ke._level}static set level(e){if(e!==Ve.Silent&&e!==Ve.Errors&&e!==Ve.Warnings&&e!==Ve.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");Ke._level=e}static get _emitter(){return Ke._emitterInstance??(Ke._emitterInstance=new He)}static on(e,t,i){return Ke._emitter.on(e,t,i)}static _error(...e){Ke._emitter._emit("error",e),Ke._level>=Ve.Errors&&console.error(...e)}static _warn(...e){Ke._emitter._emit("warn",e),Ke._level>=Ve.Warnings&&console.warn(...e)}static _info(...e){Ke._emitter._emit("info",e),Ke._level>=Ve.Info&&console.info(...e)}}Ke._level=Ve.Info,Ke._emitterInstance=null;class Xe{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class $e{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const Ge={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class Qe{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),t=this.bytes[e]??0,i=7-(7&this.pos),r=(t&1<>i;return this.pos++,r}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new Qe(this.bytes);return e.pos=this.pos,e}}const Ye=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Je=[-1,1,2,3,4,5,6,8],Ze=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new Qe(e),i=et(t),{frequencyIndex:r,sampleRate:a}=tt(t),s=t.readBits(4);let n=null;s>=1&&s<=7&&(n=Je[s]);let o=i,c=!1,l=a;if(5===i||29===i)c=29===i,l=tt(t).sampleRate,o=et(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===et(t)&&t.readBits(1)&&(l=tt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(c=!!t.readBits(1)));break}t.pos=e+1}return null!==n&&n>1&&(c=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:c&&1===n?2:n}},et=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},tt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let a=0;t+3i&&(yield{offset:i,length:t-i}),i=t+a,t=i):t++}-1!==i&&i{if(t.description){const i=3&M(t.description)[4];return lt(e,i+1)}return ct(e)},dt=e=>31&e,ht=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+ft.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const a of e)i.set(ft,r),r+=ft.byteLength,i.set(a,r),r+=a.byteLength;return i},pt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let a=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(a,s.byteLength);break;case 2:e.setUint16(a,s.byteLength,!1);break;case 3:oe(e,a,s.byteLength);break;case 4:e.setUint32(a,s.byteLength,!1)}a+=t,r.set(s,a),a+=s.byteLength}return r},gt=e=>{try{const t=[],i=[],r=[];for(const o of ct(e)){const a=e.subarray(o.offset,o.offset+o.length),s=dt(a[0]);s===at.SPS?t.push(a):s===at.PPS?i.push(a):s===at.SPS_EXT&&r.push(a)}if(0===t.length)return null;if(0===i.length)return null;const a=t[0],s=wt(a);E(null!==s);const n=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:n?s.chromaFormatIdc:null,bitDepthLumaMinus8:n?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:n?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:n?r:null}}catch(t){return Ke._error("Error building AVC Decoder Configuration Record:",t),null}},kt=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=N(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=t.getUint8(i++),n=t.getUint8(i++),o=3&t.getUint8(i++),c=31&t.getUint8(i++),l=[];for(let f=0;f{try{const t=ht(e),i=new Qe(t);i.skipBits(1),i.skipBits(2);if(7!==i.readBits(5))return null;const r=i.readAlignedByte(),a=i.readAlignedByte(),s=i.readAlignedByte();F(i);let n=1,o=0,c=0,l=0;if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=F(i),3===n&&(l=i.readBits(1)),o=F(i),c=F(i),i.skipBits(1);if(i.readBits(1))for(let e=0;e<(3!==n?8:12);e++){if(i.readBits(1)){const t=e<6?16:64;let r=8,a=8;for(let e=0;ee.level>=s)??R(ki),r=Math.min(Math.floor(i.maxDpbMbs/(e*t)),16);v=r,P=r}else v=0,P=0}return E(null!==P),{emulationUnpreventedBytes:t,profileIdc:r,constraintFlags:a,levelIdc:s,frameMbsOnlyFlag:k,chromaFormatIdc:n,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:m,displayWidth:p,displayHeight:g,pixelAspectRatio:S,colourPrimaries:y,matrixCoefficients:w,transferCharacteristics:b,fullRangeFlag:T,numReorderFrames:v,maxDecFrameBuffering:P,vuiParametersFlagBitOffset:C,bitstreamRestrictionFlagBitOffset:I,bitstreamRestrictionFlag:x}}catch(t){return Ke._error("Error parsing AVC SPS:",t),null}},Tt=e=>{const t=F(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)F(e),F(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},St=e=>{E(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new Qe(e.emulationUnpreventedBytes),r=new Qe(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(E(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),A(r,2),A(r,1),A(r,16),A(r,16),A(r,e.numReorderFrames),A(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const a=r.pos/8;return E(Number.isInteger(a)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,a))},vt=(e,t)=>{if(t.description){const i=3&M(t.description)[21];return lt(e,i+1)}return ct(e)},Pt=e=>e>>1&63,It=e=>{try{const t=new Qe(ht(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:a,general_tier_flag:s,general_profile_idc:n,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:l}=Ct(t,i);F(t);const u=F(t);let d=0;3===u&&(d=t.readBits(1));const h=F(t),f=F(t);let m=h,p=f;if(t.readBits(1)){const e=F(t),i=F(t),r=F(t),a=F(t);let s=1,n=1;const o=0===d?u:0;1===o?(s=2,n=2):2===o&&(s=2,n=1),m-=(e+i)*s,p-=(r+a)*n}const g=F(t),k=F(t);F(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)F(t),b=F(t),F(t);F(t),F(t),F(t),F(t),F(t),F(t),t.readBits(1)&&t.readBits(1)&&Bt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),F(t),F(t),t.skipBits(1));const w=F(t);if(Et(t,w),t.readBits(1)){const e=F(t);for(let i=0;i{try{const t=[],i=[],r=[],a=[];for(const c of ct(e)){const s=e.subarray(c.offset,c.offset+c.length),n=Pt(s[0]);n===nt.VPS_NUT?t.push(s):n===nt.SPS_NUT?i.push(s):n===nt.PPS_NUT?r.push(s):n!==nt.PREFIX_SEI_NUT&&n!==nt.SUFFIX_SEI_NUT||a.push(s)}if(0===i.length||0===r.length)return null;const s=It(i[0]);if(!s)return null;let n=0;if(r.length>0){const e=r[0],t=new Qe(ht(e));t.skipBits(16),F(t),F(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),F(t),F(t),D(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&F(t),D(t),D(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),a=t.readBits(1);n=i||a?i&&!a?2:!i&&a?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:nt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:nt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:nt.PPS_NUT,nalUnits:r}]:[],...a.length?[{arrayCompleteness:1,nalUnitType:Pt(a[0][0]),nalUnits:a}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:n,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return Ke._error("Error building HEVC Decoder Configuration Record:",t),null}},Ct=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),a=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const n=new Uint8Array(6);for(let u=0;u<6;u++)n[u]=e.readBits(8);const o=e.readBits(8),c=[],l=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&D(e);for(let t=0;t{const i=[];for(let r=0;r{let a=0,s=0,n=0;if(0!==t&&(s=e.readBits(1)),s){if(t===i){n=t-(F(e)+1)}else n=t-1;e.readBits(1),F(e);const s=r[n]??0;for(let t=0;t<=s;t++){e.readBits(1)||e.readBits(1)}a=r[n]}else{const t=F(e),i=F(e);for(let r=0;r{let i=2,r=2,a=2,s=0,n=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=bt[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),a=e.readBits(8))),e.readBits(1)&&(F(e),F(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(F(e),F(e),F(e),F(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&F(e),e.readBits(1)&&Ft(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),n=F(e),F(e),F(e),F(e),F(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:a,fullRangeFlag:s,minSpatialSegmentationIdc:n}},Ft=(e,t,i)=>{let r=!1,a=!1,s=!1;r=1===e.readBits(1),a=1===e.readBits(1),(r||a)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let n=0;n<=i;n++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?F(e):i=1===e.readBits(1);let n=1;if(!i){n=F(e)+1}r&&At(e,n,s),a&&At(e,n,s)}},At=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Dt.audAllowed;for(const s of vt(e,t)){if(r===Dt.noMoreDataAllowed){i.add(s.offset);continue}const t=Pt(e[s.offset]);if(r===Dt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let a=!1;35===t?r>Dt.audAllowed?a=!0:r=Dt.beforeFirstVcl:t<=31?r>Dt.afterFirstVcl?a=!0:r=Dt.afterFirstVcl:36===t?r!==Dt.afterFirstVcl?a=!0:r=Dt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Dt.beforeFirstVcl?a=!0:r=Dt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&M(t.description)[21];return pt(e,i+1)}return mt(e)})(a,t)},Ot={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},zt=e=>{const t=new Qe(e);if(2!==t.readBits(2))return null;const i=t.readBits(1),r=(t.readBits(1)<<1)+i;3===r&&t.skipBits(1);if(1===t.readBits(1))return null;if(0!==t.readBits(1))return null;t.skipBits(2);if(4817730!==t.readBits(24))return null;let a=8;if(r>=2){a=t.readBits(1)?12:10}const s=t.readBits(3);let n=0,o=0;if(7!==s){if(o=t.readBits(1),1===r||3===r){const e=t.readBits(1),i=t.readBits(1);n=e||i?e&&!i?2:1:3,t.skipBits(1)}else n=1}else n=3,o=1;const c=(t.readBits(16)+1)*(t.readBits(16)+1);let l=R(yi).level;for(const d of yi)if(c<=d.maxPictureSize){l=d.level;break}const u=Ot[s];return{profile:r,level:l,bitDepth:a,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:u?.colourPrimaries??2,transferCharacteristics:u?.transferCharacteristics??2,matrixCoefficients:u?.matrixCoefficients??2}},Lt=function*(e){const t=new Qe(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*2**(7*i),!(128&r))break;if(7===i&&128&r)return null}return e>2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),a=t.readBits(1),s=t.readBits(1);let n;if(t.skipBits(1),a&&t.skipBits(8),s){const e=i();if(null===e)return;n=e}else n=Math.floor(t.getBitsLeft()/8);E(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+n)},t.skipBits(8*n)}},Ut=e=>{for(const{type:t,data:i}of Lt(e)){if(1!==t)continue;const e=new Qe(i),r=e.readBits(3);e.readBits(1);const a=e.readBits(1);let s=0,n=0,o=0;if(a)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let a=0;a<=r;a++){e.skipBits(12);const r=e.readBits(5);if(0===a&&(s=r),r>7){const t=e.readBits(1);0===a&&(n=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);const d=l+1;e.skipBits(d);let h=0;if(h=a?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!a){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,w=1,T=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,w=0,T=0):(b=e.readBits(1),0===r?(w=1,T=1):1===r?(w=0,T=0):12===m?(w=e.readBits(1),T=w?e.readBits(1):0):(w=1,T=0),w&&T&&(S=e.readBits(2))),{profile:r,level:s,tier:n,bitDepth:m,monochrome:p,chromaSubsamplingX:w,chromaSubsamplingY:T,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},qt=e=>{if(e.length<36)return null;const t=N(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},Wt=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],Ht=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){a=r.pos;break}if(0===a)throw new Error("Invalid Setup header: framing bit not found.");let s=0,n=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),a=r.readBits(16);if(t>63||0!==i||0!==a){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(n=!0,o=s)}if(!n)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const c=o;r.pos=0,r.skipBits(a);const l=Array(c).fill(0);for(let u=c-1;u>=0;u--)r.skipBits(40),l[u]=r.readBits(1);return{modeBlockflags:l}},Vt=(e,t,i)=>{switch(e){case"avc":for(const e of ut(i,t)){const t=i[e.offset],r=dt(t);if(r>=at.NON_IDR_SLICE&&r<=at.SLICE_DPC)return"delta";if(r===at.IDR)return"key";if(r===at.SEI&&!Be()){const t=i.subarray(e.offset,e.offset+e.length),r=ht(t);let a=1;do{let e=0;for(;;){const t=r[a++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[a++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new Qe(r);e.pos=8*a;const t=F(e),i=e.readBits(1);if(0===t&&1===i)return"key"}a+=t}while(a{var i,r;const a=N(e);let s=0;const n=a.getUint32(s,!0);s+=4;const o=O.decode(e.subarray(s,s+n));s+=n,n>0&&(t.raw??(t.raw={}),(i=t.raw).vendor??(i.vendor=o));const c=a.getUint32(s,!0);s+=4;for(let l=0;l0&&(t.trackNumber??(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=l.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(t.discNumber??(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.discsTotal??(t.discsTotal=e))}break;case"DATE":{const e=new Date(l);Number.isNaN(e.getTime())||(t.date??(t.date=e))}break;case"GENRE":t.genre??(t.genre=l);break;case"METADATA_BLOCK_PICTURE":{const e=De(l),i=N(e),r=i.getUint32(0,!1),a=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+a)),n=i.getUint32(8+a,!1),o=O.decode(e.subarray(12+a,12+a+n)),c=i.getUint32(a+n+28),u=e.subarray(a+n+32,a+n+32+c);t.images??(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},$t=[2,1,2,3,3,4,4,5],Gt=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new Qe(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),a=t.readBits(5);if(a>8)return null;const s=t.readBits(3),n=t.readBits(3);0!==(1&n)&&1!==n&&t.skipBits(2),0!==(4&n)&&t.skipBits(2),2===n&&t.skipBits(2);return{fscod:i,bsid:a,bsmod:s,acmod:n,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},Qt=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],Yt=[1,2,3,6],Jt=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new Qe(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),a=t.readBits(2);let s,n=0;3===a?(n=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;const u=Yt[s];let d;d=a<3?it[a]/1e3:rt[n]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:a,fscod2:n,bsid:l,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},Zt=e=>{const t=e.substreams[0];return E(t),t.fscod<3?it[t.fscod]:null!==t.fscod2&&t.fscod2<3?rt[t.fscod2]:null},ei=e=>{const t=e.substreams[0];E(t);let i=$t[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},ti=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],ii=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],ri=[16,16,20,20,0,24,24,0],ai=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],si=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],ni=[32e3,44100,48e3,0],oi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],ci=[512,1024,2048,4096],li=e=>{const t=di(e),i=N(e);let r=t?4*Math.ceil(t.frameSize/4):0,a=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=hi(e.subarray(r));if(!t)break;a??(a=t),r+=t.frameSize}if(t)return{frameSize:a?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==a};if(!a?.asset)return null;const{asset:s}=a;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},ui=e=>{const t=li(e);return t?.core?t.hasExtensions?"dtsh":"dtsc":null},di=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new Qe(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const a=t.readBits(14)+1;if(a<96)return null;const s=t.readBits(6);if(s>=ai.length)return null;const n=ti[t.readBits(4)];if(0===n)return null;const o=ii[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const c=t.readBits(2);if(3===c)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const l=ri[t.readBits(3)];if(0===l)return null;const u=0!==c;return{frameSize:a,sampleRate:n,numberOfChannels:ai[s]+(u?1:0),sampleCount:32*r,channelLayout:si[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:l}},hi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new Qe(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),a=8+4*r,s=16+4*r;t.skipBits(a);const n=t.readBits(s)+1,o={frameSize:n,asset:null};if(!t.readBits(1))return o;const c=ni[t.readBits(2)],l=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===c||t.getBitsLeft()<0?o:{frameSize:n,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(l*m/c),channelLayout:g,pcmResolution:f}}},fi=e=>pe(e)+pe(44646&e),mi=["avc","hevc","vp9","av1","vp8","prores"],pi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],gi=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...pi],ki=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],yi=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],bi=".01.01.01.01.00",wi=".0.110.01.01.01.0",Ti=["ap4x","ap4h","apch","apcn","apcs","apco"],Si=["dtsc","dtsh","dtsl","dtse"],vi=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:a,hevcCodecInfo:s,vp9CodecInfo:n,av1CodecInfo:o,proresFormat:c}=e;if("avc"===t){if(E(null!==e.avcType),a){const t=new Uint8Array([a.avcProfileIndication,a.profileCompatibility,a.avcLevelIndication]);return`avc${e.avcType}.${Q(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Q(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,a,n,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=Y(s.generalProfileCompatibilityFlags),a=s.generalTierFlag,n=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=N(i),c=s.getUint8(1);e=c>>6&3,t=31&c,r=Y(s.getUint32(2)),a=c>>5&1,n=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let c="hev1.";for(c+=["","A","B","C"][e]+t,c+=".",c+=r.toString(16).toUpperCase(),c+=".",c+=0===a?"L":"H",c+=n;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(c+=".",c+=o.map(e=>e.toString(16).toUpperCase()).join(".")),c}if("vp8"===t)return"vp8";if("vp9"===t){if(!n){const t=e.width*e.height;let i=R(yi).level;for(const e of yi)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${n.profile.toString().padStart(2,"0")}.${n.level.toString().padStart(2,"0")}.${n.bitDepth.toString().padStart(2,"0")}.${n.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${n.colourPrimaries.toString().padStart(2,"0")}.${n.transferCharacteristics.toString().padStart(2,"0")}.${n.matrixCoefficients.toString().padStart(2,"0")}.${n.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(bi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=R(yi).level;for(const e of yi)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),a=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),n=o.monochrome?"1":"0",c=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),l=r?.primaries?L[r.primaries]:1,u=r?.transfer?q[r.transfer]:1,d=r?.matrix?H[r.matrix]:1,h=r?.fullRange?1:0;let f=`av01.${t}.${i}${a}.${s}`;return f+=`.${n}.${c.toString().padStart(3,"0")}`,f+=`.${l.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(wi)&&(f=f.slice(0,-17)),f}if("prores"===t)return c??"apch";throw null!==t&&se(t),new TypeError(`Unhandled codec '${t}'.`)},Pi=e=>{switch(e.codec){case"avc":{let t=e.avcCodecInfo?.sequenceParameterSets[0];if(!t&&e.codecDescription&&(t=yt(e.codecDescription)?.sequenceParameterSets[0]),t){const e=wt(t);if(e)return{primaries:U[e.colourPrimaries],transfer:W[e.transferCharacteristics],matrix:V[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=e.hevcCodecInfo?.arrays.find(e=>e.nalUnitType===nt.SPS_NUT)?.nalUnits[0];if(!t&&e.codecDescription&&(t=(e=>{try{const t=N(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=a>>6&3,n=a>>5&1,o=31&a,c=t.getUint32(i,!1);i+=4;const l=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,w=k>>2&1,T=3&k,S=t.getUint8(i++),v=[];for(let P=0;P>7&1,s=63&r,n=t.getUint16(i,!1);i+=2;const o=[];for(let c=0;ce.nalUnitType===nt.SPS_NUT)?.nalUnits[0]),t){const e=It(t);if(e)return{primaries:U[e.colourPrimaries],transfer:W[e.transferCharacteristics],matrix:V[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:U[e.vp9CodecInfo.colourPrimaries],transfer:W[e.vp9CodecInfo.transferCharacteristics],matrix:V[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:U[e.av1CodecInfo.colourPrimaries],transfer:W[e.av1CodecInfo.transferCharacteristics],matrix:V[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:U[e.proresCodecInfo.colourPrimaries],transfer:W[e.proresCodecInfo.transferCharacteristics],matrix:V[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},Ii=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:a}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=Ze(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return a??"dtsc";if(t&&pi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},xi=48e3,Ci=/^pcm-([usf])(\d+)(be)?$/,Bi=e=>{if(E(pi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Ci.exec(e);let i;E(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?128:0}},Ei=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Ti.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Si.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Ci.test(e)?e:"webvtt"===e?"webvtt":null,_i=[44100,48e3,32e3],Ri=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],Fi=1483304551,Ai=1231971951,Di=(e,t)=>3===e?3===t?21:36:3===t?13:21,Mi=(e,t)=>{const i=e>>>24,r=e>>>16&255,a=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==a&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let n=0,o=0;16&r?n=8&r?0:1:(n=1,o=1);const c=r>>3&3,l=r>>1&3,u=(a>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Ri[16*n*4+16*l+(a>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=_i[u]>>n+o,b=((e,t,i,r,a)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Oi,zi;(zi=Oi||(Oi={}))[zi.FrameCount=1]="FrameCount",zi[zi.FileSize=2]="FileSize",zi[zi.Toc=4]="Toc";const Li=e=>3===e?1:2;class Ui{constructor(e){this.input=e}dispose(){}}const qi=new Uint8Array(0);class Wi{constructor(e,t,i,r,a=-1,s,n){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=a,e===qi&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(a))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==n&&("object"!==typeof n||!n))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==n?.alpha&&!(n.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==n?.alphaByteLength&&(!Number.isInteger(n.alphaByteLength)||n.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=n??{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===qi}get microsecondTimestamp(){return Math.trunc(ye*this.timestamp)}get microsecondDuration(){return Math.trunc(ye*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const i=new Uint8Array(e.byteLength);return e.copyTo(i),new Wi(i,e.type,e.timestamp/1e6,(e.duration??0)/1e6,void 0,void 0,t)}clone(e){if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==e?.data&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==e?.type&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==e?.timestamp&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==e?.duration&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==e?.sequenceNumber&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==e?.sideData&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new Wi(e?.data??this.data,e?.type??this.type,e?.timestamp??this.timestamp,e?.duration??this.duration,e?.sequenceNumber??this.sequenceNumber,this.byteLength,e?.sideData??this.sideData)}}const Hi=e=>{const t=N(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const a=Q(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=$o(e);const i=rc(e,4);let r=8;1===t&&(t=Jo(e),r=16);const a=t-r;return a<0?null:{name:i,totalSize:t,headerSize:r,contentSize:a}},Ki=e=>Qo(e)/65536,Xi=e=>Qo(e)/1073741824,$i=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=Wo(e);if(t|=127&i,0===(128&i))break}return t},Gi=e=>{let t=Vo(e);return e.skip(2),t=Math.min(t,e.remainingLength),O.decode(qo(e,t))},Qi=e=>{const t=ji(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=$o(e);e.skip(4);const r=qo(e,t.contentSize-8);switch(i){case 1:return O.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new Xe(r,"image/jpeg");case 14:return new Xe(r,"image/png");case 27:return new Xe(r,"image/bmp");default:return r}},Yi=16,Ji=new Uint32Array(256),Zi=new Uint32Array(256),er=new Uint32Array(256),tr=new Uint32Array(256),ir=new Uint32Array(256),rr=new Uint32Array(256),ar=new Uint32Array(10);let sr=!1;class nr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(Yi/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(Yi),this.out=new Uint8Array(Yi),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){E(16===e.byteLength),E(16===t.byteLength),sr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,n=1;s<256;s++)i[s]=n,t[n]=s,n=n^n<<1^(128&n?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let a=r^r<<1^r<<2^r<<3^r<<4;a=a>>>8^255&a^99,e[s]=a}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);Ji[s]=t<<24|t<<16|t<<8|t,rr[s]=i<<24|i<<16|i<<8|i;const a=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);Zi[s]=a,er[s]=a>>>8|a<<24,tr[s]=a>>>16|a<<16,ir[s]=a>>>24|a<<8}let a=1;for(let s=0;s<10;s++)ar[s]=a<<24,a=a<<1^(128&a?283:0);sr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let a=4;a<44;a+=4){const e=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^4278190080&Ji[e>>>16&255]^16711680&Ji[e>>>8&255]^65280&Ji[e>>>0&255]^255&Ji[e>>>24&255]^ar[a/4-1],this.roundkey[a+1]=this.roundkey[a-3]^this.roundkey[a],this.roundkey[a+2]=this.roundkey[a-2]^this.roundkey[a+1],this.roundkey[a+3]=this.roundkey[a-1]^this.roundkey[a+2]}for(let a=0,s=40;a>>24&255]]^er[255&Ji[t>>>16&255]]^tr[255&Ji[t>>>8&255]]^ir[255&Ji[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const a=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),n=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let c,l,u,d;for(let g=1;g<10;g++){const a=4*g;c=Zi[e>>>24]^er[r>>>16&255]^tr[i>>>8&255]^ir[255&t]^this.roundkey[a],l=Zi[t>>>24]^er[e>>>16&255]^tr[r>>>8&255]^ir[255&i]^this.roundkey[a+1],u=Zi[i>>>24]^er[t>>>16&255]^tr[e>>>8&255]^ir[255&r]^this.roundkey[a+2],d=Zi[r>>>24]^er[i>>>16&255]^tr[t>>>8&255]^ir[255&e]^this.roundkey[a+3],e=c,t=l,i=u,r=d}const h=4278190080&rr[e>>>24&255]^16711680&rr[r>>>16&255]^65280&rr[i>>>8&255]^255&rr[t>>>0&255]^this.roundkey[40],f=4278190080&rr[t>>>24&255]^16711680&rr[e>>>16&255]^65280&rr[r>>>8&255]^255&rr[i>>>0&255]^this.roundkey[41],m=4278190080&rr[i>>>24&255]^16711680&rr[t>>>16&255]^65280&rr[e>>>8&255]^255&rr[r>>>0&255]^this.roundkey[42],p=4278190080&rr[r>>>24&255]^16711680&rr[i>>>16&255]^65280&rr[t>>>8&255]^255&rr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=a,this.iv[1]=s,this.iv[2]=n,this.iv[3]=o}}class or extends Ui{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.tracks.map(e=>e.trackBacking)}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>"video"===e.info?.type),hasAudio:this.tracks.some(e=>"audio"===e.info?.type),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Re(r)&&(r=await r),!r)break;const a=e,s=ji(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=rc(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Re(e)&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>a+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');await this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=a+s.totalSize}if(!i&&this.input._initInput&&await this.copyMetadataFromInitInput(this.input._initInput),t){E(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Re(e)&&(e=await e),E(e);const t=$o(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Re(e)&&(e=await e),e){const t=ji(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Re(i)&&(i=await i),i&&this.readContiguousBoxes(i)}}}}})())}async copyMetadataFromInitInput(e){const t=await e._getDemuxer();if(t.constructor!==or)throw new Error("Init input must match the input's format.");await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const i of t.tracks){const e={id:i.id,demuxer:this,trackBacking:null,disposition:i.disposition,timescale:i.timescale,durationInMediaTimescale:i.durationInMediaTimescale,durationInMovieTimescale:i.durationInMovieTimescale,rotation:i.rotation,internalCodecId:i.internalCodecId,name:i.name,languageCode:i.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:i.editListPreviousSegmentDurations,editListOffset:i.editListOffset,encryptionInfo:i.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:i.info};if(i.trackBacking)if(E(e.info),"video"===e.info.type&&-1!==e.info.width){const t=e;e.trackBacking=new lr(t),this.tracks.push(e)}else if("audio"===e.info.type&&-1!==e.info.numberOfChannels){const t=e;e.trackBacking=new ur(t),this.tracks.push(e)}}}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;const t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,null===e.sampleTableByteOffset)return t;E(this.moovSlice);const i=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(i),this.currentTrack=null;if("audio"===e.info?.type&&e.info.codec&&pi.includes(e.info.codec)&&0===t.sampleCompositionTimeOffsets.length){E("audio"===e.info?.type);const i=Bi(e.info.codec),r=[],a=[];for(let s=0;se.startIndex),u=t.sampleTimingEntries[l],d=Z(t.sampleTimingEntries,c,e=>e.startIndex),h=t.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(c-h.startIndex)*h.delta-f,p=R(r);p&&p.delta===m?p.count++:r.push({startIndex:n.startChunkIndex+s,startDecodeTimestamp:f,count:1,delta:m});const g=n.samplesPerChunk*i.sampleSize*e.info.numberOfChannels;a.push(g)}n.startSampleIndex=n.startChunkIndex,n.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=a}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(const e of t.sampleTimingEntries)for(let i=0;ie.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===a.moofOffset);if(i)pr(s,i.timestamp);else{const e=Z(t,a.moofOffset-1,e=>e.moofOffset);if(-1!==e){const i=t[e];pr(s,i.endTimestamp)}}s.startTimestampIsFinal=!0}const i=Z(t,s.startTimestamp,e=>e.startTimestamp);if(-1!==i&&t[i].moofOffset===a.moofOffset||t.splice(i+1,0,{moofOffset:a.moofOffset,startTimestamp:s.startTimestamp,endTimestamp:s.endTimestamp}),s.encryptionAuxInfo&&e.encryptionInfo){const t=await br(this.reader,e.encryptionInfo,s.encryptionAuxInfo);for(let e=0;e0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;ke(t.languageCode)||(t.languageCode=ue)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=rc(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:{...K},avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=L,this.readContiguousBoxes(e.slice(H,q.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=Wo(e);e.skip(3);const r=$o(e);for(let a=0;a0&&(1===n?(e.skip(4),c=8*$o(e),e.skip(8)):2===n&&(e.skip(4),l=ic(e),o=$o(e),e.skip(4),c=$o(e),u=$o(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+a.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=xi;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(Si.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===c?t.info.codec="pcm-s8":16===c?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(Ke._warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===c?t.info.codec="pcm-s8":16===c?t.info.codec="pcm-s16":(Ke._warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(Ke._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(Ke._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(Ke._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(Ke._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=c+7>>3,i=Boolean(1&u),r=Boolean(2&u),a=4&u?-1:0;c>0&&c<=64&&(i?32===c&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):a&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==Wo(e),t.encryptionInfo.defaultPerSampleIvSize=Wo(e),t.encryptionInfo.defaultKid=Q(qo(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=Wo(e),r=new Uint8Array(16);r.set(qo(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(E(t.info),0===q.contentSize)break;t.info.codecDescription=qo(e,q.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(E(t.info),0===q.contentSize)break;t.info.codecDescription=qo(e,q.contentSize)}break;case"vpcC":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type),e.skip(4);const i=Wo(e),r=Wo(e),a=Wo(e),s=a>>4,n=a>>1&7,o=1&a,c=Wo(e),l=Wo(e),u=Wo(e);t.info.vp9CodecInfo={profile:i,level:r,bitDepth:s,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case"av1C":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type),e.skip(1);const i=Wo(e),r=i>>5,a=31&i,s=Wo(e),n=s>>7,o=s>>6&1,c=s>>4&1,l=s>>3&1,u=s>>2&1,d=3&s,h=2===r&&o?s>>5&1?12:10:o?10:8;e.skip(1);const f=qo(e,q.contentSize-4),m=Ut(f);t.info.av1CodecInfo={profile:r,level:a,tier:n,bitDepth:h,monochrome:c,chromaSubsamplingX:l,chromaSubsamplingY:u,chromaSamplePosition:d,videoFullRangeFlag:m?.videoFullRangeFlag??0,colourPrimaries:m?.colourPrimaries??2,transferCharacteristics:m?.transferCharacteristics??2,matrixCoefficients:m?.matrixCoefficients??2}}break;case"colr":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type);const i=rc(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=Vo(e),a=Vo(e),s=Vo(e);let n;"nclx"===i&&(n=Boolean(128&Wo(e))),t.info.colorSpace={primaries:U[r],transfer:W[a],matrix:V[s],fullRange:n}}break;case"pasp":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type);const i=$o(e),r=$o(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==t.info?.type)break;e.skip(4);E(3===Wo(e)),$i(e),e.skip(2);const i=Wo(e),r=0!==(64&i),a=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=Wo(e);e.skip(t)}a&&e.skip(2);E(4===Wo(e));const s=$i(e),n=e.filePos,o=Wo(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":Ke._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-n){E(5===Wo(e));const i=$i(e);if(t.info.codecDescription=qo(e,i),"aac"===t.info.codec){const e=Ze(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),t.info.pcmLittleEndian=!!(255&Vo(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(4);const i=Wo(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=Wo(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(1);const i=Wo(e),r=Vo(e),a=$o(e),s=Ko(e),n=Wo(e);let o;o=0!==n?qo(e,2+i):new Uint8Array(0);const c=new Uint8Array(19+o.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,i),l.setUint16(10,r,!0),l.setUint32(12,a,!0),l.setInt16(16,s,!0),l.setUint8(18,n),c.set(o,19),t.info.codecDescription=c,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(4);const i=127,r=128,a=e.filePos;for(;e.filePos>>12,a=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=a,e.skip(20)}else e.skip(s);if(a&r)break}const s=e.filePos;e.filePos=a;const n=qo(e,s-a),o=new Uint8Array(4+n.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(n,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=qo(e,3),r=new Qe(i),a=r.readBits(2);r.skipBits(8);const s=r.readBits(3),n=r.readBits(1);a<3&&(t.info.sampleRate=it[a]),t.info.numberOfChannels=$t[s]+n}break;case"dec3":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=(e=>{if(e.length<2)return null;const t=new Qe(e),i=t.readBits(13),r=t.readBits(3),a=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),n=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let c=0;o>0?c=t.readBits(9):t.skipBits(1),a.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:n,numDepSub:o,chanLoc:c})}return 0===a.length?null:{dataRate:i,substreams:a}})(qo(e,q.contentSize));if(!i){Ke._warn("Invalid dec3 box contents, ignoring.");break}const r=Zt(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=ei(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=(e=>{if(e.length<20)return null;const t=N(e),i=t.getUint32(0);if(0===i)return null;const r=new Qe(e);r.seekToByte(13);const a=r.readBits(2);r.skipBits(5);const s=r.readBits(1),n=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let c=null;return 0!==o?c=fi(o):ne.id===i);if(!r)break;const a=$o(e),s=(12&a)>>2,n=3&a,o=[Wo,Vo,jo,$o],c=o[(48&a)>>4],l=o[s],u=o[n],d=$o(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let a=0;ae.id===l);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:d?.defaultSampleDescriptionIndex??null,defaultSampleDuration:d?.defaultSampleDuration??null,defaultSampleSize:d?.defaultSampleSize??null,defaultSampleFlags:d?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=Jo(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=$o(e)),a&&(u.currentFragmentState.defaultSampleDuration=$o(e)),s&&(u.currentFragmentState.defaultSampleSize=$o(e)),n&&(u.currentFragmentState.defaultSampleFlags=$o(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;E(t.currentFragmentState);const i=Wo(e);e.skip(3);const r=0===i?$o(e):Jo(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;E(this.currentFragment),E(t.currentFragmentState);const i=Wo(e),r=jo(e),a=Boolean(1&r),s=Boolean(4&r),n=Boolean(256&r),o=Boolean(512&r),c=Boolean(1024&r),l=Boolean(2048&r),u=$o(e);let d=null;a&&(d=Qo(e));let h,f=null;s&&(f=$o(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(d??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(a=qo(e,r));const s=yr(t);s.defaultSampleInfoSize=i,s.sampleSizes=a,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=Wo(e);if(1&jo(e)){const i=rc(e,4),r=$o(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=$o(e);if(0===r)break;r>1&&Ke._warn("Multiple saio entries are not supported; using the first offset only.");let a=0===i?$o(e):Number(Jo(e));this.currentFragment&&(a+=this.currentFragment.moofOffset);yr(t).offset=a}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;E(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=jo(e),a=Boolean(2&r),s=$o(e),n=t.encryptionInfo.defaultPerSampleIvSize;E(null!==n);for(let o=0;o0?r.set(qo(e,n),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(a){const t=Vo(e);s=[];for(let i=0;i0&&((B=this.metadataTags).trackNumber??(B.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((F=this.metadataTags).tracksTotal??(F.tracksTotal=i))}break;case"trkn":if(a instanceof Uint8Array&&a.length>=6){const e=N(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((A=this.metadataTags).trackNumber??(A.trackNumber=t)),i>0&&((D=this.metadataTags).tracksTotal??(D.tracksTotal=i))}break;case"disc":case"disk":if(a instanceof Uint8Array&&a.length>=6){const e=N(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((M=this.metadataTags).discNumber??(M.discNumber=t)),i>0&&((z=this.metadataTags).discsTotal??(z.discsTotal=i))}}}}}return e.filePos=j,!0}}class cr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.internalTrack;if(e.durationInMediaTimescale<=0)return null;E(e.trackBacking);const t=await e.trackBacking.getFirstPacket({metadataOnly:!0});return(t?.timestamp??0)+e.durationInMediaTimescale/e.timescale}async getLiveRefreshInterval(){return null}async getFirstPacket(e){const t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return de(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=dr(r,i),s=await this.fetchPacketForSampleIndex(a,t);return kr(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Z(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=ae(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return E(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=fr(i,e);if(!r)return null;let a;if(t.metadataOnly)a=qi;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Re(t)&&(t=await t),!t)return null;if(a=qo(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=await br(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),u=-1!==l?this.internalTrack.fragmentLookupTable[l]:null,d=Z(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),h=-1!==d?this.internalTrack.fragmentPositionCache[d]:null,f=Math.max(u?.moofOffset??0,h?.moofOffset??0)||null;let m;for(e?null===f||e.moofOffset>=f?(m=e.moofOffset+e.moofSize,n=e):m=f:m=f??0;;){if(n){const e=n.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(m,8,16);if(Re(e)&&(e=await e),!e)break;const i=m,l=ji(e);if(!l)break;if("moof"===l.name){n=await s.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(n);if(r)return this.fetchPacketInFragment(n,e,a);-1!==e&&(o=n,c=e)}m=i+l.totalSize}if(u&&(!o||o.moofOffset{var e,t,i,r,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=await this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&qt(e.data)}}else{const e=await this.getFirstPacket({}),t=e&&Ut(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const e=await this.getFirstPacket({}),t=e&&zt(e.data);t&&(this.internalTrack.info.vp9CodecInfo={...this.internalTrack.info.vp9CodecInfo??t,videoFullRangeFlag:t.videoFullRangeFlag,colourPrimaries:t.colourPrimaries,transferCharacteristics:t.transferCharacteristics,matrixCoefficients:t.matrixCoefficients})}else{const e=await this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&xt(e.data)}else{const e=await this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&>(e.data)}if(!j(this.internalTrack.info.colorSpace)){const a=Pi(this.internalTrack.info);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const s={codec:vi(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(s.displayAspectWidth=this.internalTrack.info.squarePixelWidth,s.displayAspectHeight=this.internalTrack.info.squarePixelHeight),s})()):null}}class ur extends cr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&ui(e.data)}return{codec:Ii(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const dr=(e,t)=>{if(e.presentationTimestamps){const i=Z(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=Z(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},hr=(e,t)=>{if(!e.keySampleIndices)return dr(e,t);if(e.presentationTimestamps){const i=Z(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==J(e.keySampleIndices,i,e=>e))return i}return-1}{const i=dr(e,t),r=Z(e.keySampleIndices,i,e=>e);return e.keySampleIndices[r]??-1}},fr=(e,t)=>{const i=Z(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=Z(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),n=e.sampleCompositionTimeOffsets[s];n&&t-n.startIndexe.startSampleIndex),l=e.sampleToChunk[c];E(l);const u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=e.chunkOffsets[u],h=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*l.samplesPerChunk;else for(let g=h;ge)}},mr=(e,t)=>{if(!e.keySampleIndices)return t+1;const i=Z(e.keySampleIndices,t,e=>e);return e.keySampleIndices[i+1]??-1},pr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},gr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},kr=e=>0===e.sampleSizes.length,yr=e=>{var t;return e.currentFragmentState?(t=e.currentFragmentState).encryptionAuxInfo??(t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}):e.encryptionAuxInfo??(e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null})},br=async(e,t,i)=>{if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{E(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[o],r=new Uint8Array(16);s>0?r.set(qo(a,s),0):r.set(t.defaultConstantIv,0);let c=null;if(e>s){const e=Vo(a);c=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Tr=async(e,t,i,r)=>{E(e.encryptionInfo);const a=e.encryptionInfo;E(null!==a.defaultKid);const s=a.defaultKid;let n;const o=e.demuxer.decryptionKeyCache.get(s);if(o)n=await o;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(s));for(let e=0;e{E(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;i{const a=new Uint8Array(16);a.set(i.iv,0);const s=await crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),n=async e=>{const t=await crypto.subtle.decrypt({name:"AES-CTR",counter:a,length:64},s,e);return new Uint8Array(t)};if(!i.subsamples)return n(r);E(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Pr(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let c=0;for(const m of o)for(const e of m.perSubsample)c+=e.length;const l=new Uint8Array(c);let u=0;for(const m of o)for(const e of m.perSubsample)l.set(r.subarray(e.offset,e.offset+e.length),u),u+=e.length;const d=await n(l),h=new Uint8Array(r);let f=0;for(const m of o)for(const e of m.perSubsample)h.set(d.subarray(f,f+e.length),e.offset),f+=e.length;return h},vr=(e,t,i,r)=>{const a=new nr;a.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,n=t.defaultSkipByteBlock;if(E(null!==s&&null!==n),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],a=0!==t||0!==i;let s=0;for(const n of e){s+=n.clearLen;const e=[];if(a){let r=n.protectedLen,a=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:a,length:s}),a+=s,r-=s;const n=Math.min(16*i,r);a+=n,r-=n}s+=n.protectedLen}else n.protectedLen>0&&e.push({offset:s,length:n.protectedLen}),s+=n.protectedLen;r.push({perSubsample:e})}return r};var Ir,xr;(xr=Ir||(Ir={}))[xr.EBML=440786851]="EBML",xr[xr.EBMLVersion=17030]="EBMLVersion",xr[xr.EBMLReadVersion=17143]="EBMLReadVersion",xr[xr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",xr[xr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",xr[xr.DocType=17026]="DocType",xr[xr.DocTypeVersion=17031]="DocTypeVersion",xr[xr.DocTypeReadVersion=17029]="DocTypeReadVersion",xr[xr.Void=236]="Void",xr[xr.Segment=408125543]="Segment",xr[xr.SeekHead=290298740]="SeekHead",xr[xr.Seek=19899]="Seek",xr[xr.SeekID=21419]="SeekID",xr[xr.SeekPosition=21420]="SeekPosition",xr[xr.Duration=17545]="Duration",xr[xr.Info=357149030]="Info",xr[xr.TimestampScale=2807729]="TimestampScale",xr[xr.MuxingApp=19840]="MuxingApp",xr[xr.WritingApp=22337]="WritingApp",xr[xr.Tracks=374648427]="Tracks",xr[xr.TrackEntry=174]="TrackEntry",xr[xr.TrackNumber=215]="TrackNumber",xr[xr.TrackUID=29637]="TrackUID",xr[xr.TrackType=131]="TrackType",xr[xr.FlagEnabled=185]="FlagEnabled",xr[xr.FlagDefault=136]="FlagDefault",xr[xr.FlagForced=21930]="FlagForced",xr[xr.FlagOriginal=21934]="FlagOriginal",xr[xr.FlagHearingImpaired=21931]="FlagHearingImpaired",xr[xr.FlagVisualImpaired=21932]="FlagVisualImpaired",xr[xr.FlagCommentary=21935]="FlagCommentary",xr[xr.FlagLacing=156]="FlagLacing",xr[xr.Name=21358]="Name",xr[xr.Language=2274716]="Language",xr[xr.LanguageBCP47=2274717]="LanguageBCP47",xr[xr.CodecID=134]="CodecID",xr[xr.CodecPrivate=25506]="CodecPrivate",xr[xr.CodecDelay=22186]="CodecDelay",xr[xr.SeekPreRoll=22203]="SeekPreRoll",xr[xr.DefaultDuration=2352003]="DefaultDuration",xr[xr.Video=224]="Video",xr[xr.PixelWidth=176]="PixelWidth",xr[xr.PixelHeight=186]="PixelHeight",xr[xr.DisplayWidth=21680]="DisplayWidth",xr[xr.DisplayHeight=21690]="DisplayHeight",xr[xr.DisplayUnit=21682]="DisplayUnit",xr[xr.AlphaMode=21440]="AlphaMode",xr[xr.Audio=225]="Audio",xr[xr.SamplingFrequency=181]="SamplingFrequency",xr[xr.Channels=159]="Channels",xr[xr.BitDepth=25188]="BitDepth",xr[xr.SimpleBlock=163]="SimpleBlock",xr[xr.BlockGroup=160]="BlockGroup",xr[xr.Block=161]="Block",xr[xr.BlockAdditions=30113]="BlockAdditions",xr[xr.BlockMore=166]="BlockMore",xr[xr.BlockAdditional=165]="BlockAdditional",xr[xr.BlockAddID=238]="BlockAddID",xr[xr.BlockDuration=155]="BlockDuration",xr[xr.ReferenceBlock=251]="ReferenceBlock",xr[xr.Cluster=524531317]="Cluster",xr[xr.Timestamp=231]="Timestamp",xr[xr.Cues=475249515]="Cues",xr[xr.CuePoint=187]="CuePoint",xr[xr.CueTime=179]="CueTime",xr[xr.CueTrackPositions=183]="CueTrackPositions",xr[xr.CueTrack=247]="CueTrack",xr[xr.CueClusterPosition=241]="CueClusterPosition",xr[xr.Colour=21936]="Colour",xr[xr.MatrixCoefficients=21937]="MatrixCoefficients",xr[xr.TransferCharacteristics=21946]="TransferCharacteristics",xr[xr.Primaries=21947]="Primaries",xr[xr.Range=21945]="Range",xr[xr.Projection=30320]="Projection",xr[xr.ProjectionType=30321]="ProjectionType",xr[xr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",xr[xr.Attachments=423732329]="Attachments",xr[xr.AttachedFile=24999]="AttachedFile",xr[xr.FileDescription=18046]="FileDescription",xr[xr.FileName=18030]="FileName",xr[xr.FileMediaType=18016]="FileMediaType",xr[xr.FileData=18012]="FileData",xr[xr.FileUID=18094]="FileUID",xr[xr.Chapters=272869232]="Chapters",xr[xr.Tags=307544935]="Tags",xr[xr.Tag=29555]="Tag",xr[xr.Targets=25536]="Targets",xr[xr.TargetTypeValue=26826]="TargetTypeValue",xr[xr.TargetType=25546]="TargetType",xr[xr.TagTrackUID=25541]="TagTrackUID",xr[xr.TagEditionUID=25545]="TagEditionUID",xr[xr.TagChapterUID=25540]="TagChapterUID",xr[xr.TagAttachmentUID=25542]="TagAttachmentUID",xr[xr.SimpleTag=26568]="SimpleTag",xr[xr.TagName=17827]="TagName",xr[xr.TagLanguage=17530]="TagLanguage",xr[xr.TagString=17543]="TagString",xr[xr.TagBinary=17541]="TagBinary",xr[xr.ContentEncodings=28032]="ContentEncodings",xr[xr.ContentEncoding=25152]="ContentEncoding",xr[xr.ContentEncodingOrder=20529]="ContentEncodingOrder",xr[xr.ContentEncodingScope=20530]="ContentEncodingScope",xr[xr.ContentCompression=20532]="ContentCompression",xr[xr.ContentCompAlgo=16980]="ContentCompAlgo",xr[xr.ContentCompSettings=16981]="ContentCompSettings",xr[xr.ContentEncryption=20533]="ContentEncryption";const Cr=[Ir.EBML,Ir.Segment],Br=[Ir.SeekHead,Ir.Info,Ir.Cluster,Ir.Tracks,Ir.Cues,Ir.Attachments,Ir.Chapters,Ir.Tags],Er=[...Cr,...Br],_r=16,Rr=e=>{if(e.remainingLength<1)return null;const t=Wo(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=Wo(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Rr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===Wo(e))return;e.skip(-1);const t=Fr(e);return null===t?null:72057594037927940!==t?t:void 0},Nr=e=>{E(e.remainingLength>=2);const t=Dr(e);if(null===t)return null;const i=Mr(e);return null===i?null:{id:t,size:i}},Or=(e,t)=>{const i=qo(e,t);let r=0;for(;r{const i=qo(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?tc(e):ic(e)},Ur=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}},qr=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;se.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>"video"===e.info?.type)),hasAudio:this.segments.some(e=>e.tracks.some(e=>"audio"===e.info?.type)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&await this.loadSegmentMetadata(t),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??(this.readMetadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,_r);if(Re(t)&&(t=await t),!t)break;const i=Nr(t);if(!i)break;const r=i.id;let a=i.size;const s=t.filePos;if(r===Ir.EBML){ia(a);let e=this.reader.requestSlice(s,a);if(Re(e)&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===Ir.Segment){if(await this.readSegment(s,a),void 0===a)break;if(null===this.reader.fileSize)break}else if(r===Ir.Cluster){if(null===this.reader.fileSize)break;if(void 0===a){a=(await Ur(this.reader,s,Er,this.reader.fileSize)).pos-s}const e=R(this.segments);e&&(e.elementEndPos=s+a)}ia(a),e=s+a}})())}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;null===this.currentSegment.elementEndPos||ie.id===a);if(-1!==o){const e=la[o].flag;this.currentSegment[e]=!0,ia(s);let t=this.reader.requestSlice(n,s);Re(t)&&(t=await t),t&&this.readContiguousElements(t)}else if(a===Ir.Tags||a===Ir.Attachments){a===Ir.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,ia(s);let e=this.reader.requestSlice(n,s);Re(e)&&(e=await e),e&&this.readContiguousElements(e)}else if(a===Ir.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===s)break;i=n+s}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const n of this.currentSegment.seekEntries){const t=la.find(e=>e.id===n.id);if(!t)continue;if(this.currentSegment[t.flag])continue;let i=this.reader.requestSliceRange(e+n.segmentPosition,2,_r);if(Re(i)&&(i=await i),!i)continue;const r=Nr(i);if(!r)continue;const{id:a,size:s}=r;if(a!==t.id)continue;ia(s),this.currentSegment[t.flag]=!0;let o=this.reader.requestSlice(i.filePos,s);Re(o)&&(o=await o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const n of this.currentSegment.tracks)null!==n.defaultDurationNs&&(n.defaultDuration=this.currentSegment.timestampFactor*n.defaultDurationNs/1e9);const r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const n of this.currentSegment.cuePoints){const e=r.get(n.trackId);e&&e.cuePoints.push(n)}for(const n of this.currentSegment.tracks){n.cuePoints.sort((e,t)=>e.time-t.time);for(let e=0;es&&(s=n.cuePoints.length,a=n);for(const n of this.currentSegment.tracks)0===n.cuePoints.length&&(n.cuePoints=a.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let i=this.reader.requestSliceRange(e,2,_r);Re(i)&&(i=await i),E(i);const r=e,a=Nr(i);E(a);E(a.id===Ir.Cluster);let s=a.size;const n=i.filePos;if(void 0===s){s=(await Ur(this.reader,n,Er,t.elementEndPos)).pos-n}let o=this.reader.requestSlice(n,s);Re(o)&&(o=await o);const c={segment:t,elementStartPos:r,elementEndPos:n+s,dataStartPos:n,timestamp:-1,trackData:new Map};if(this.currentCluster=c,o){const e=this.readContiguousElements(o,Er);c.elementEndPos=e}for(const[,l]of c.trackData){const e=l.track;E(l.blocks.length>0);let t=!1;for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const i=l.blocks[l.presentationTimestamps[0].blockIndex],a=l.blocks[R(l.presentationTimestamps).blockIndex];l.startTimestamp=i.timestamp,l.endTimestamp=a.timestamp+a.duration;const s=Z(e.clusterPositionCache,l.startTimestamp,e=>e.startTimestamp);-1!==s&&e.clusterPositionCache[s].elementStartPos===r||e.clusterPositionCache.splice(s+1,0,{elementStartPos:c.elementStartPos,startTimestamp:l.startTimestamp})}return t.lastReadCluster=c,c}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){for(let i=0;i=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){const i=Nr(e);if(!i)return!1;if(t&&t.includes(i.id))return!1;const{id:r,size:a}=i,s=e.filePos;switch(ia(a),r){case Ir.DocType:this.isWebM="webm"===Or(e,a);break;case Ir.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case Ir.SeekID:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Ar(e,a)}break;case Ir.SeekPosition:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Ar(e,a)}break;case Ir.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Ar(e,a),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case Ir.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Lr(e,a);break;case Ir.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...Ge,primary:!1},trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(s,a)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>"decompress"!==e.data?.type||e.scope!==sa.Block||e.data.algorithm!==oa.HeaderStripping)&&(Ke._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===Wr)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===Hr)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===Vr)this.currentTrack.info.codec="vp8";else if(t===jr)this.currentTrack.info.codec="vp9";else if(t===Kr)this.currentTrack.info.codec="av1";else if(t===Xr){const e=this.currentTrack.codecPrivate?O.decode(this.currentTrack.codecPrivate):"";Ti.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new fa(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===$r?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Gr?this.currentTrack.info.codec="mp3":t===Qr?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=xi):t===Yr?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Jr?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Zr?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ea?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ta?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new ma(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case Ir.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Ar(e,a);break;case Ir.TrackType:{if(!this.currentTrack)break;const t=Ar(e,a);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:{...K},alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case Ir.FlagEnabled:if(!this.currentTrack)break;Ar(e,a)||(this.currentTrack=null);break;case Ir.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Ar(e,a);break;case Ir.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Ar(e,a);break;case Ir.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Ar(e,a);break;case Ir.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Ar(e,a);break;case Ir.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Ar(e,a);break;case Ir.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Ar(e,a);break;case Ir.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Or(e,a);break;case Ir.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=qo(e,a);break;case Ir.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Ar(e,a);break;case Ir.Name:if(!this.currentTrack)break;this.currentTrack.name=zr(e,a);break;case Ir.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Or(e,a),ke(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ue);break;case Ir.LanguageBCP47:{if(!this.currentTrack)break;const t=Or(e,a).split("-")[0];this.currentTrack.languageCode=t||ue,this.currentTrack.hasLanguageBcp47=!0}break;case Ir.Video:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.PixelWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.width=Ar(e,a);break;case Ir.PixelHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.height=Ar(e,a);break;case Ir.DisplayWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayWidth=Ar(e,a);break;case Ir.DisplayHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayHeight=Ar(e,a);break;case Ir.DisplayUnit:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayUnit=Ar(e,a);break;case Ir.AlphaMode:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.alphaMode=1===Ar(e,a);break;case Ir.Colour:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.MatrixCoefficients:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=V[t];this.currentTrack.info.colorSpace.matrix=i}break;case Ir.Range:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case Ir.TransferCharacteristics:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=W[t];this.currentTrack.info.colorSpace.transfer=i}break;case Ir.Primaries:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=U[t];this.currentTrack.info.colorSpace.primaries=i}break;case Ir.Projection:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.ProjectionPoseRoll:{if("video"!==this.currentTrack?.info?.type)break;const t=-Lr(e,a);try{this.currentTrack.info.rotation=_(t)}catch{}}break;case Ir.Audio:if("audio"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.SamplingFrequency:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.sampleRate=Lr(e,a);break;case Ir.Channels:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.numberOfChannels=Ar(e,a);break;case Ir.BitDepth:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.bitDepth=Ar(e,a);break;case Ir.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(s,a)),this.currentCueTime=null;break;case Ir.CueTime:this.currentCueTime=Ar(e,a);break;case Ir.CueTrackPositions:{if(null===this.currentCueTime)break;E(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case Ir.CueTrack:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Ar(e,a)}break;case Ir.CueClusterPosition:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;E(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Ar(e,a)}break;case Ir.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Ar(e,a);break;case Ir.SimpleBlock:{if(!this.currentCluster)break;const t=Fr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=Ko(e),n=Wo(e),o=n>>1&3;let c=!!(128&n);"audio"===i.track.info?.type&&i.track.info.codec&&(c=!0);const l=qo(e,a-(e.filePos-s)),u=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:o,decoded:!u,postProcessed:!1,mainAdditional:null})}break;case Ir.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(s,a)),this.currentBlock=null;break;case Ir.Block:{if(!this.currentCluster)break;const t=Fr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=Ko(e),n=Wo(e)>>1&3,o=qo(e,a-(e.filePos-s)),c=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:o,lacing:n,decoded:!c,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case Ir.BlockAdditions:this.readContiguousElements(e.slice(s,a));break;case Ir.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(s,a)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case Ir.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=qo(e,a);break;case Ir.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Ar(e,a);break;case Ir.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Ar(e,a);break;case Ir.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case Ir.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(s,a));break;case Ir.Targets:this.readContiguousElements(e.slice(s,a));break;case Ir.TargetTypeValue:50!==Ar(e,a)&&(this.currentTagTargetIsMovie=!1);break;case Ir.TagTrackUID:case Ir.TagEditionUID:case Ir.TagChapterUID:case Ir.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case Ir.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(s,a));break;case Ir.TagName:this.currentSimpleTagName=zr(e,a);break;case Ir.TagString:{if(!this.currentSimpleTagName)break;const t=zr(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case Ir.TagBinary:{if(!this.currentSimpleTagName)break;const t=qo(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case Ir.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(s,a));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new $e(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}t.images??(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case Ir.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=0n;for(let r=0;rt.order-e.order);break;case Ir.ContentEncoding:this.currentDecodingInstruction={order:0,scope:sa.Block,data:null},this.readContiguousElements(e.slice(s,a)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case Ir.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Ar(e,a);break;case Ir.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Ar(e,a);break;case Ir.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:oa.Zlib,settings:null},this.readContiguousElements(e.slice(s,a));break;case Ir.ContentCompAlgo:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.algorithm=Ar(e,a);break;case Ir.ContentCompSettings:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.settings=qo(e,a);break;case Ir.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=s+a,!0}decodeBlockData(e,t){E(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(E(r.data),"decompress"===r.data.type)if(r.data.algorithm===oa.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i;if(!this.currentSegment?.metadataTags)return;const r=this.currentSegment.metadataTags;if(r.raw??(r.raw={}),(i=r.raw)[e]??(i[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":r.title??(r.title=t);break;case"description":r.description??(r.description=t);break;case"artist":r.artist??(r.artist=t);break;case"album":r.album??(r.album=t);break;case"album_artist":r.albumArtist??(r.albumArtist=t);break;case"genre":r.genre??(r.genre=t);break;case"comment":r.comment??(r.comment=t);break;case"lyrics":r.lyrics??(r.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||(r.date??(r.date=e))}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.trackNumber??(r.trackNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.tracksTotal??(r.tracksTotal=a))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.discNumber??(r.discNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.discsTotal??(r.discsTotal=a))}}}async getDurationFromMetadata(e){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){E(r.trackBacking);const e=await r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(t??1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=t??0,i}}class ha{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return de(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Z(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=ae(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return E(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,i){if(-1===t)return null;const r=e.trackData.get(this.internalTrack.id).blocks[t];if(E(r),r.decoded||(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),r.decoded=!0),!r.postProcessed){if("prores"===this.internalTrack.info?.codec){if(!(r.data.length>=8&&105===r.data[4]&&99===r.data[5]&&112===r.data[6]&&102===r.data[7])){const e=new Uint8Array(r.data.length+8);N(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(r.data,8),r.data=e}}r.postProcessed=!0}const a=i.metadataOnly?qi:r.data,s=r.timestamp/this.internalTrack.segment.timestampFactor,n=r.duration/this.internalTrack.segment.timestampFactor,o={};r.mainAdditional&&"video"===this.internalTrack.info?.type&&this.internalTrack.info.alphaMode&&(o.alpha=i.metadataOnly?qi:r.mainAdditional,o.alphaByteLength=r.mainAdditional.byteLength);const c=new Wi(a,r.isKeyFrame?"key":"delta",s,n,e.dataStartPos+t,r.data.byteLength,o);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,i,r,a){const{demuxer:s,segment:n}=this.internalTrack;let o=null,c=null,l=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,a);-1!==i&&(c=e,l=i)}const u=Z(this.internalTrack.cuePoints,i,e=>e.time),d=-1!==u?this.internalTrack.cuePoints[u]:null,h=Z(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),f=-1!==h?this.internalTrack.clusterPositionCache[h]:null,m=Math.max(d?.clusterPosition??0,f?.elementStartPos??0)||null;let p;for(e?null===m||e.elementStartPos>=m?(p=e.elementEndPos,o=e):p=m:p=m??n.clusterSeekStartPos;null===n.elementEndPos||p<=n.elementEndPos-2;){if(o){const e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(p,2,_r);if(Re(e)&&(e=await e),!e)break;const i=p,u=Nr(e);if(!u||!Br.includes(u.id)&&u.id!==Ir.Void){const e=await qr(s.reader,i,Br,Math.min(n.elementEndPos??1/0,i+ua));if(e){p=e;continue}break}const d=u.id;let h=u.size;const f=e.filePos;if(d===Ir.Cluster){o=await s.readCluster(i,n),h=o.elementEndPos-f;const{blockIndex:e,correctBlockFound:r}=t(o);if(r)return this.fetchPacketInCluster(o,e,a);-1!==e&&(c=o,l=e)}if(void 0===h){E(d!==Ir.Cluster);h=(await Ur(s.reader,f,Er,n.elementEndPos)).pos-f}const m=f+h;if(null===n.elementEndPos){let e=s.reader.requestSliceRange(m,2,_r);if(Re(e)&&(e=await e),!e)break;if(Dr(e)===Ir.Segment){n.elementEndPos=m;break}}p=m}if(d&&(!c||c.elementStartPos{var e,t,i,r;let a=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(a=await this.getFirstPacket({}));const s={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&a?gt(a.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&a?xt(a.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&a?zt(a.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&a?Ut(a.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&a?qt(a.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!j(this.internalTrack.info.colorSpace)){const a=Pi(s);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const n={codec:vi(s),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})()):null}}class ma extends ha{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&ui(e.data)}return{codec:Ii({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const pa=async(e,t,i,r=null)=>{let a=t;for(;null===i||a=4;){const t=s.filePos,i=$o(s),n=null!==e.fileSize?e.fileSize-a:null,o=Mi(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&Li(o.header.channel)===Li(r.channel)))return{header:o.header,startPos:a};s.filePos=t+o.bytesAdvanced,a=s.filePos}}return null};class ga extends Ui{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new $,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new ka(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=mc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=await pa(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Di(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Re(r)&&(r=await r),r){const a=$o(r);if(a===Fi||a===Ai){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Re(t)&&(t=await t),t){const e=qo(t,12),i=N(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Oi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Oi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const a=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:a,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=!0;let a=this.reader.requestSlice(i.filePos,r.size);if(Re(a)&&(a=await a),!a)break;pc(a,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=lc){let e=this.reader.requestSlice(this.reader.fileSize-lc,lc);Re(e)&&(e=await e),E(e);"TAG"===rc(e,3)&&hc(e,this.metadataTags)}return this.metadataTags}finally{e()}}}class ka{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return E(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.demuxer;if(E(null!==e.firstFrameHeader),E(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,a=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(a<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const wa=e=>{const t=N(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let a=0;a>>24^t])>>>0}return t.setUint32(22,i,!0),r},Ta=(e,t,i)=>{let r=0,a=null;if(e.length>0)if("vorbis"===t.codec){E(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,n=(e[0]&s)>>1;if(n>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const c=t.vorbisInfo.modeBlockflags[n];if(a=t.vorbisInfo.blocksizes[c],1===c){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+a>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:Wt[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:a}},Sa=27,va=282,Pa=e=>{const t=e.filePos;if(Go(e)!==ya)return null;e.skip(1);const i=Wo(e),r=ec(e),a=Go(e),s=Go(e),n=Go(e),o=Wo(e),c=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:i,granulePosition:r,serialNumber:a,sequenceNumber:s,checksum:n,lacingValues:c}},Ia=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===ya)return!0;e.skip(1)}}return!1};class xa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Sa,va);if(Re(t)&&(t=await t),!t)break;const i=Pa(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=await this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?await this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&await this.readOpusMetadata(e,t),null!==t.codecInfo.codec&&this.trackBackings.push(new Ca(t,this)))}})())}async readVorbisMetadata(e,t){let i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=await this.findNextPacketStart(r),!i)return;const a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a)return;if(3!==r.data[0]||5!==a.data[0])return;const s=[],n=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};n(e.data.length),n(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+a.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(a.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=a;const c=N(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);const l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&l),1<<(l>>4)],modeBlockflags:Ht(a.data).modeBlockflags},Xt(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){const i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const a=(e=>{const t=N(e),i=t.getUint8(9),r=t.getUint16(10,!0),a=t.getUint32(12,!0),s=t.getInt16(16,!0),n=t.getUint8(18);let o=null;return n&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:a,outputGain:s,channelMappingFamily:n,channelMappingTable:o}})(e.data);t.numberOfChannels=a.outputChannelCount,t.sampleRate=xi,t.codecInfo.opusInfo={preSkip:a.preSkip},Xt(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){E(te+t.length,0);if(0===o)return null;const c=new Uint8Array(o);let l=0;for(let u=0;u{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}class Ca{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new $,this.internalSampleRate="opus"===e.codecInfo.codec?xi:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return E(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return E(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:this.bitstream.description??void 0}}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge,primary:!1}}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(E(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:a}=Ta(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new Wi(i.metadataOnly?qi:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(e){E(this.bitstream.lastMetadataPacket);const t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(E(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=await this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const a=i.timestampInSamples+i.durationInSamples,s=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:i.vorbisBlockSize},t)}async getPacket(e,t){if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const i=de(e*this.internalSampleRate);if(0===i)return this.getFirstPacket(t);if(i<0)return null;E(this.bitstream.lastMetadataPacket);const r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let a=r.startPage,s=this.demuxer.reader.fileSize;const n=[a];e:for(;a.headerStartPos+a.totalSizei?s=l.headerStartPos:(a=l,n.push(l));continue e}r=l.headerStartPos+l.totalSize}}let o=r.startPage;for(const k of n){if(k.granulePosition===a.granulePosition)break;(!o||k.headerStartPos>o.headerStartPos)&&(o=k)}let c=o;const l=[c];for(;c.serialNumber!==this.bitstream.serialNumber||c.granulePosition!==a.granulePosition;){const e=c.headerStartPos+c.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Sa,va);Re(t)&&(t=await t),E(t);const i=Pa(t);E(i),c=i,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}E(-1!==c.granulePosition);let u,d,h=null,f=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)u=this.granulePositionToTimestampInSamples(0),d=!0,h=0;else{u=0,d=!1;for(let t=c.lacingValues.length-1;t>=0;t--){if(c.lacingValues[t]<255){h=t+1;break}}if(null===h)throw new Error("Invalid page with granule position: no packets end on this page.");m=h-1;const e={data:qi,endPage:f,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){const e=Ea(l,c,h);E(e);const t=Ba(l,e.page,e.segmentIndex);t&&(c=t.page,h=t.segmentIndex)}else for(;;){const e=Ea(l,c,h);if(!e)break;const t=Ba(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,h=t.segmentIndex,e.page.headerStartPos!==f.headerStartPos){f=e.page,m=e.segmentIndex;break}}}let p=null,g=null;for(;null!==c;){E(null!==h);const e=await this.demuxer.readPacket(c,h);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&hi||Math.max(a.timestampInSamples,0)===i))break}const a=await this.demuxer.findNextPacketStart(e);if(!a)break;c=a.startPage,h=a.startSegmentIndex}return p}async getPacketSequential(e,t){const i=await this.sequentialScanMutex.acquire();try{const i=de(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=Z(this.sequentialScanCache,i,e=>e.timestampInSamples);let a;if(-1!==r){const e=this.sequentialScanCache[r];a=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else a=await this.getFirstPacket(t);let s=0;for(;a&&a.timestampe)break;if(a=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(a);E(e),this.sequentialScanCache.length>0&&E(R(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return a}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Ba=(e,t,i)=>{let r=t,a=i;e:for(;;){for(a--;a>=0;a--){if(r.lacingValues[a]<255){a++;break e}}E(-1===a);if(!(1&r.headerType)){a=0;break}const t=re(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=re(e,e=>e.headerStartPos{let e=this.reader.requestSlice(0,12);Re(e)&&(e=await e),E(e);const t=rc(e,4),i="RIFX"!==t,r="RF64"===t,a=Xo(e,i);let s=r?this.reader.fileSize:Math.min(a+8,this.reader.fileSize??1/0);if("WAVE"!==rc(e,4))throw new Error("Invalid WAVE file - wrong format");let n=0,o=null,c=e.filePos;for(;null===s||c=18&&357!==a){const e=Ho(r,i),s=t-18;if(Math.min(s,e)>=22&&a===_a.EXTENSIBLE){r.skip(6);const e=qo(r,16);a=e[0]|e[1]<<8}}if(a!==_a.MULAW&&a!==_a.ALAW||(c=8),a!==_a.PCM&&a!==_a.IEEE_FLOAT&&a!==_a.ALAW&&a!==_a.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${a}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(a===_a.PCM&&![8,16,24,32].includes(c))throw new Error(`Unsupported WAVE PCM bit depth (${c}). Only 8, 16, 24, and 32 bits are supported.`);if(a===_a.IEEE_FLOAT&&![32,64].includes(c))throw new Error(`Unsupported WAVE float bit depth (${c}). Only 32 and 64 bits are supported.`);this.audioInfo={format:a,numberOfChannels:s,sampleRate:n,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:o}}async parseListChunk(e,t,i){var r,a,s,n,o,c,l,u,d,h,f;let m=this.reader.requestSlice(e,t);if(Re(m)&&(m=await m),!m)return;const p=rc(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=rc(m,4),t=Xo(m,i),p=qo(m,t);let k=0;for(let i=0;i0&&((c=this.metadataTags).trackNumber??(c.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((l=this.metadataTags).tracksTotal??(l.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||((u=this.metadataTags).date??(u.date=e))}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&((d=this.metadataTags).date??(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":(h=this.metadataTags).genre??(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":(f=this.metadataTags).comment??(f.comment=y)}g+=8+t+(1&t)}}async parseId3Chunk(e,t){let i=this.reader.requestSlice(e,t);if(Re(i)&&(i=await i),!i)return;const r=mc(i);if(r){const a=t-uc;if(r.size=Math.min(r.size,a),r.size>0){const t=i.slice(e+uc,r.size);pc(t,r,this.metadataTags)}}}getCodec(){if(E(this.audioInfo),this.audioInfo.format===_a.MULAW)return"ulaw";if(this.audioInfo.format===_a.ALAW)return"alaw";if(this.audioInfo.format===_a.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===_a.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}E(!1)}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}const Aa=2048;class Da{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){const e=this.demuxer.getCodec();return e?(E(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return E(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge}}async getPacketAtIndex(e,t){E(e>=0),E(this.demuxer.audioInfo);const i=e*Aa*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Aa*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Re(e)&&(e=await e),!e)return null}let a;if(t.metadataOnly)a=qi;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Re(e)&&(e=await e),E(e),a=qo(e,r)}const s=e*Aa/this.demuxer.audioInfo.sampleRate,n=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new Wi(a,"key",s,n,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){E(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Aa,(this.demuxer.dataSize-1)/(Aa*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=await this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;E(null===this.demuxer.reader.fileSize);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;a;){const e=await this.getNextPacket(a,t);if(!e)break;a=e}return a}getNextPacket(e,t){E(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Aa);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Ma=e=>{const t=e.filePos,i=qo(e,9),r=new Qe(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const a=r.readBits(1),s=r.readBits(2)+1,n=r.readBits(4);if(15===n)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const c=r.readBits(13);r.skipBits(11);const l=r.readBits(2)+1;if(1!==l)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===a?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:n,channelConfiguration:o,frameLength:c,numberOfAacFrames:l,crcCheck:u,startPos:t}},Na=1024;class Oa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new $,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();E(this.firstFrameHeader),this.trackBackings=[new za(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=mc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Ma(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=Ye[t.samplingFrequencyIndex];E(void 0!==i);const r=Na/i,a={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(a),this.nextTimestampInSamples+=Na,this.lastLoadedPos=t.startPos+t.frameLength}async getMimeType(){return"audio/aac"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,uc);if(Re(t)&&(t=await t),!t)break;const i=mc(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Re(r)&&(r=await r),!r)break;pc(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}}}class za{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Na}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ue}getCodec(){return"aac"}getInternalCodecId(){return E(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){E(this.demuxer.firstFrameHeader);const e=Je[this.demuxer.firstFrameHeader.channelConfiguration];return E(void 0!==e),e}getSampleRate(){E(this.demuxer.firstFrameHeader);const e=Ye[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return E(void 0!==e),e}getDisposition(){return{...Ge}}async getDecoderConfig(){return E(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=qi;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Re(e)&&(e=await e),!e)return null;r=qo(e,i.dataSize)}return new Wi(r,"key",i.timestamp,i.duration,e,i.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=J(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1{var e;let t=0;for(;;){let e=this.reader.requestSlice(t,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const i=mc(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Re(r)&&(r=await r),E(r),pc(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:s.end-e,isLastFrame:!0};if(255===Wo(s)){const t=s.filePos;if(Wo(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-n.num!==1){s.filePos=t;continue}}else if(r.num-n.num!==n.blockSize){s.filePos=t;continue}return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:i,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=qo(e,4),a=new Qe(r);if(32764!==a.readBits(15))return null;if(null===this.blockingBit){E(t);const e=a.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){E(!t);if(1!==a.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");E(!t);if(0!==a.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*2**e:6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?2**e:null)(a.readBits(4));if(!s)return null;E(this.audioInfo);const n=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(a.readBits(4),this.audioInfo.sampleRate);if(!n)return null;a.readBits(4),a.readBits(3);if(0!==a.readBits(1))return null;const o=(e=>{let t=0;const i=new Qe(qo(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],a=t-1,s=new Qe(qo(e,a)),n=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?Vo(e)+1:"uncommon-u8"===t?Wo(e)+1:"number"===typeof t?t:(se(t),void E(!1)))(e,s),l=((e,t)=>"uncommon-u16"===t?Vo(e):"uncommon-u16-10"===t?10*Vo(e):"uncommon-u8"===t?Wo(e):"number"===typeof t?t:null)(e,n);if(null===l)return null;if(l!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=Wo(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(qo(e,u));return d!==h?null:{num:o,blockSize:c,sampleRate:l}}async advanceReader(){await this.readMetadata(),E(null!==this.lastLoadedPos),E(this.audioInfo);const e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)}}class Ua{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ue}getTimeResolution(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return E(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...Ge}}async getDecoderConfig(){return E(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(E(this.demuxer.audioInfo),e<0)return null;const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){await this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],a=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(a+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader()}}finally{i()}}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=qi;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Re(e)&&(e=await e),!e)return null;r=qo(e,i.byteSize)}E(this.demuxer.audioInfo);const a=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new Wi(r,"key",a,s,e,i.byteSize)}async getFirstPacket(e){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}const qa=9e4,Wa=2**33,Ha=188,Va="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",ja=new Set([133,134,162]),Ka=new Set;class Xa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,205);Re(e)&&(e=await e),E(e);const t=qo(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=Ha;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,a=!1,s=!1;for(;;){const e=await this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=await this.readSection(i,!0,!s);if(!t)break;const n=3,o=32;let c=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i);c=2===e.readBits(8)}}if(0!==t.pid||a)if(t.pid!==r&&!c||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=Ga(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(await this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new es(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,await r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=gt(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];E(t);const i=wt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const a=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;a>0&&s>0&&(a>s?(e.info.squarePixelWidth=Math.round(e.info.width*a/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/a))),e.info.colorSpace={primaries:U[i.colourPrimaries],transfer:W[i.transferCharacteristics],matrix:V[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=xt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===nt.SPS_NUT).nalUnits[0];E(t);const i=It(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:U[i.colourPrimaries],transfer:W[i.transferCharacteristics],matrix:V[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:vi({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=Lo.tempFromBytes(r.suppliedPacket.data),i=Ma(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=Je[i.channelConfiguration],e.info.sampleRate=Ye[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=$o(Lo.tempFromBytes(r.suppliedPacket.data)),i=Mi(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=Li(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=Gt(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=$t[t.acmod]+t.lfeon,e.info.sampleRate=it[t.fscod]}else if("eac3"===e.info.codec){const t=Jt(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=Zt(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=ei(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=li(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:Ii({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const a=e.readBits(10),c=e.pos+8*a;let l=!1;for(;e.pos=4){const t=e.readBits(32);l||(l=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=c;8*(r+n)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),a=e.pos+8*r;let s=!1,n=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let c=null;const u=l&&ja.has(t)?130:t;switch(u){case 27:case 36:c={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",c={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:n?c={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?c={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(c={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:Ka.has(t)||(Ke._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),Ka.add(t))}c&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:c,referencePesPackets:[]})}s=!0}else{const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+n)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");a=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!a)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const n of this.elementaryStreams)n.initialized&&("video"===n.info.type?this.trackBackingEntries.push(new Ya(n)):this.trackBackingEntries.push(new Ja(n)))})())}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){await this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,i=!1){let r=e,a=e;const s=[];let n,o=0,c=null,l=!0,u=0;for(;;){const e=await this.readPacket(a);if(a+=this.packetStride,!e)break;if(c){if(e.pid!==c.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;c=e}const n=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(n&&(h=1+e.body[0],e===c&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=a,!t&&o>=64){l=!1;break}if(-1!==J(this.sectionEndPositions,r,e=>e)){l=!1;break}}if(l){const e=Z(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!c)return null;if(1===s.length)n=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);n=new Uint8Array(e);let t=0;for(const i of s)n.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:c.pid,payload:n,randomAccessIndicator:u}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(Re(t)&&(t=await t),!t)return null;if(71!==Wo(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=Vo(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:Wo(t)>>4&3}}async readPacket(e){let t=this.reader.requestSlice(e,Ha);if(Re(t)&&(t=await t),!t)return null;const i=qo(t,Ha);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=Wa-t?-8589934592:Wa}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new Qe(t.payload);if(1!==r.readBits(24))return null;const a=r.readBits(8);if(r.skipBits(16),188===a||190===a||191===a||240===a||241===a||255===a||242===a||248===a)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let n=null;if(2===s||3===s)n=0,r.skipBits(4),n+=r.readBits(3)*(1<<30),r.skipBits(1),n+=32768*r.readBits(15),r.skipBits(1),n+=r.readBits(15),n=e.normalizeTimestamp(n);else if(i)throw new Error(Va);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:n,randomAccessIndicator:t.randomAccessIndicator}},Ga=(e,t,i)=>{E(null!==t.endPos);const r=$a(e,t,i);if(!r)return null;const a=new Qe(t.payload);a.skipBits(32);const s=a.readBits(16);a.skipBits(16);const n=a.readBits(8),o=a.pos+8*n;a.pos=o;const c=o/8;E(Number.isInteger(c));const l=t.payload.subarray(c,s>0?6+s:t.payload.byteLength);return{...r,data:l}};class Qa{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,E(r instanceof Qa),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge,primary:!1}}getTimeResolution(){return qa}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new Wi(i.metadataOnly?qi:e.data,r,e.pts/qa,Math.max(t/qa,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){const t=this.elementaryStream.firstSection;E(t);const i=Ga(this.elementaryStream.demuxer,t,!0);E(i);const r=new es(this.elementaryStream,i),a=new ts(this,r),s=await a.readNext();if(!s)return null;const n=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(n,a),this.packetSectionStarts.set(n,s.packet.sectionStartPos),n}async getNextPacket(e,t){let i=this.packetBuffers.get(e);if(i){const r=await i.readNext();if(!r)return null;this.packetBuffers.delete(e);const a=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(a,i),this.packetSectionStarts.set(a,r.packet.sectionStartPos),a}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const a=this.elementaryStream.demuxer,s=await a.readSection(r,!0);E(s);const n=Ga(a,s,!0);E(n);const o=new es(this.elementaryStream,n);i=new ts(this,o);const c=e.sequenceNumber;for(;;){const e=await i.readNext();if(!e)return null;if(e.packet.sequenceNumber>c){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let i=e;for(;;){if(i=await this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,i){const r=de(e*qa),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:n}=a,o=this.elementaryStream.pid,c=async(e,t,i)=>{let r=e;for(;re.pts),m=-1!==f?h[f]:null;if(m&&r-m.pts<45e3)d=m.sectionStartPos;else{let e=0;if(null!==s.fileSize){const t=Math.ceil(s.fileSize/n);if(t>1){let i=0,s=t-1;for(e=i;i<=s;){const t=Math.floor((i+s)/2),o=me(t*n,a.packetStride)+u.sectionStartPos,l=o+n,d=await c(o,l,!1);d?d.pesPacketHeader.pts<=r?(e=t,i=t+1):s=t-1:s=t-1}}}d=me(e*n,a.packetStride)+u.sectionStartPos}const p=await c(d,s.fileSize??1/0,!1);let g=p?.pesPacketHeader??null;g||(g=u);const k=this.getReorderSize(),y=async(e,t)=>{const s=await a.readSection(e,!0);E(s);const n=Ga(a,s,!0);E(n);const o=new es(this.elementaryStream,n),c=new ts(this,o);for(;;){if((R(c.presentationOrderPackets)?.pts??-1/0)>=r)break;if(!(await c.readNextPacket()))break}const l=ae(c.presentationOrderPackets,t);if(-1===l)return null;const u=c.presentationOrderPackets[l],d=0===l?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=d;const h=await c.readNext();E(h);const f=this.createEncodedPacket(h.packet,h.duration,i);return this.packetBuffers.set(f,c),this.packetSectionStarts.set(f,h.packet.sectionStartPos),f};if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=g.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){if(e.pts>r)break e;g=e,Za(this.elementaryStream,g);break}}}e+=a.packetStride}}e:for(let e=0;e=a.packetOffset;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){g=e;break}}}e-=a.packetStride}}return y(g.sectionStartPos,e=>e.pts<=r)}{let e=d,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let d=null;const h=e<=u.sectionStartPos;let f,m=null;if(h)f=u,m=l;else{const t=await c(e,s.fileSize??1/0,i);f=t?.pesPacketHeader??null,m=t?.section??null}let p=!1,g=0;e:for(;f&&!(null!==t&&f.sectionStartPos>=t);){if(f.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===f.randomAccessIndicator;else{E(m);const t=Ga(a,m,!0);E(t);const i=new es(this.elementaryStream,t);await i.markNextPacket(),e=1===i.suppliedPacket?.randomAccessIndicator}e&&(d=f)}if(f.pts>r&&(p=!0),p&&(g++,g>k))break;let e=f.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,i);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){f=e,m=t,Za(this.elementaryStream,f);break}}}e+=a.packetStride}}if(d){let e=d;if(0===g)e:for(let r=0;r=a.packetOffset;){const r=await a.readPacketHeader(t);if(!r)break e;if(r.pid===o&&1===r.payloadUnitStartIndicator){const r=await a.readSection(t,i);if(r){const t=$a(a,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=a.packetStride}}const t=await y(e.sectionStartPos,e=>e.pts<=r&&1===e.randomAccessIndicator);return E(t),t}if(h)return null;t=e,e=Math.max(me(e-u.sectionStartPos-n,a.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}}class Ya extends Qa{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}async getColorSpace(){return this.elementaryStream.info.colorSpace}async canBeTransparent(){return!1}async getDecoderConfig(){return E(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class Ja extends Qa{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return E(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const Za=(e,t)=>{const i=e.referencePesPackets,r=Z(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const a=i[r];if(t.pts<=a.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-a.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return E(e),e}async bufferData(e){const t=this.endPos+e;for(;this.endPos=l)break;u=e;const i=o+u;if(u+3>=l){this.seekTo(i);break}const d=c[u+1],h=c[u+2],f=c[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=i;a??(a=p);const g=u+m,k=g+r,y=6;if(k+("avc"===t?y:1)>l){this.seekTo(i);break}const b=c[g];let w,T,S;if("avc"===t)w=dt(b),T=w===at.NON_IDR_SLICE||w===at.SLICE_DPA||w===at.IDR,S=w===at.SEI||w===at.SPS||w===at.PPS||w===at.AUD;else{w=Pt(b);if(((1&b)<<5|c[g+1]>>3)>0){u+=m;continue}T=w<=nt.RASL_R||w>=nt.BLA_W_LP&&w<=21,S=w>=nt.VPS_NUT&&w<=37||w===nt.PREFIX_SEI_NUT||w>=41&&w<=44||w>=48&&w<=55}let v=!1;if(T){let e;if("avc"===t){const t=c.subarray(k,k+y),i=F(new Qe(t));e=!s||i<=n,n=i}else e=c[k]>>7===1;e&&(s?v=!0:s=!0)}else S&&s&&(v=!0);if(v){const e=p-a;return this.seekTo(a),this.supplyPacket(e,0)}u+=m}if(ea){const e=this.endPos-a;return this.seekTo(a),this.supplyPacket(e,0)}}else{const t=e.info.codec,i=128;for(;;){let r=this.ensureBuffered(i);Re(r)&&(r=await r);const a=this.currentPos;for(;this.currentPos-a>6,n=63&a[4];if(3===s||n>37){this.seekTo(t+1);continue}const o=Qt[3*n+s];E(void 0!==o),this.seekTo(t),r=this.ensureBuffered(o),Re(r)&&(r=await r);const c=Math.round(13824e4/e.info.sampleRate);return this.supplyPacket(r,c)}if("eac3"===t){if(11!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(5);if(Re(r)&&(r=await r),r<5)return;const a=this.readBytes(5);if(11!==a[0]||119!==a[1]){this.seekTo(t+1);continue}const s=2*(((7&a[2])<<8|a[3])+1),n=3===a[4]>>6?3:a[4]>>4&3,o=Yt[n];this.seekTo(t),r=this.ensureBuffered(s),Re(r)&&(r=await r);const c=256*o,l=Math.round(c*qa/e.info.sampleRate);return this.supplyPacket(r,l)}if("dts"===t){if(127!==i&&100!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(18);if(Re(r)&&(r=await r),r<18)return;const a=this.readBytes(18),s=di(a);let n=s?null:hi(a);if(!s&&!n){this.seekTo(t+1);continue}if(n&&!n.asset){this.seekTo(t);const e=Math.min(n.frameSize,4096);let i=this.ensureBuffered(e);Re(i)&&(i=await i),n=hi(this.readBytes(i))??n}let o=s?s.frameSize:n.frameSize;if(s){let e=4*Math.ceil(s.frameSize/4);for(;;){this.seekTo(t);const i=e+10;let r=this.ensureBuffered(i);if(Re(r)&&(r=await r),r=0)}async readNext(){if(0===this.decodeOrderPackets.length){if(!(await this.readNextPacket()))return null}await this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(E(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){const e=this.decodeOrderPackets[0];for(E(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(await this.readNextPacket()))break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const is="application/vnd.apple.mpegurl",rs="#EXT-X-STREAM-INF:",as="#EXT-X-I-FRAME-STREAM-INF:",ss="#EXT-X-MEDIA:",ns="#EXTINF:",os="#EXT-X-MAP:",cs="#EXT-X-KEY:",ls="#EXT-X-MEDIA-SEQUENCE:",us="#EXT-X-BYTERANGE:",ds="#EXT-X-PROGRAM-DATE-TIME:",hs="#EXT-X-TARGETDURATION:",fs="#EXT-X-PLAYLIST-TYPE:",ms=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class ps{constructor(e){this._attributes={};let t="",i="",r=!1,a=!1;for(let s=0;s{const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=ze(e,e=>"video"===e.getType())+1;e.push(new ys(this,t,i))}else if("audio"===t.type){const i=ze(e,e=>"audio"===e.getType())+1;e.push(new bs(this,t,i))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=await t.getTracks();for(const r of i)if("video"===r.type){const t=ze(e,e=>"video"===e.getType())+1;e.push(new ys(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=ze(e,e=>"audio"===e.getType())+1;e.push(new bs(this,{id:e.length+1,type:"audio"},t))}}return e})())}async getFirstTimestampForInput(e){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i}async getMediaOffset(e,t){const i=e.firstSegment??e;let r;if(this.firstSegmentFirstTimestamps.has(i))r=this.firstSegmentFirstTimestamps.get(i);else{const e=this.getInputForSegment(i);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(i,r)}if(i===e)return i.timestamp-r;const a=await this.getFirstTimestampForInput(t),s=e.timestamp-i.timestamp,n=a-r-s;return Math.abs(n)<=Math.min(.25,s)?i.timestamp-r:e.timestamp-a}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class ks{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{var e;if((e=this.segmentedInput).firstSegment??(e.firstSegment=await this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let t=this.segmentedInput.firstSegment,i=null;for(;t;){const e=this.segmentedInput.getInputForSegment(t);if(i=(await e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number)??null,i)break;t=await this.segmentedInput.getNextSegment(t,{})}if(!i)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=i,this.firstSegment=t})())}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),E(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,i){E(e.sequenceNumber>=0),E(this.segmentedInput.firstSegment);const r=await this.segmentedInput.getMediaOffset(t,i.input),a=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:fe(e.timestamp+r,await i.getTimeResolution()),sequenceNumber:Math.floor(1e8*a)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s}async getFirstPacket(e){await this.hydrate(),E(this.firstInputTrack),E(this.firstSegment);let t=this.firstInputTrack,i=this.firstSegment;for(;;){if(t){const r=await t._backing.getFirstPacket(e);if(r)return this.createAdjustedPacket(r,i,t)}if(i=await this.segmentedInput.getNextSegment(i,{skipLiveWait:e.skipLiveWait}),!i)break;const r=this.segmentedInput.getInputForSegment(i);t=(await r.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number)??null}return null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,i){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const a=i?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(a)return this.createAdjustedPacket(a,r.segment,r.track);let s=r.segment;for(;;){const e=await this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),a=(await i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!a){s=e;continue}const n=await a._backing.getFirstPacket(t);return n?this.createAdjustedPacket(n,e,a):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,i){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){const a=this.segmentedInput.getInputForSegment(r),s=(await a.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const n=e-await this.segmentedInput.getMediaOffset(r,a),o=i?await s._backing.getKeyPacket(n,t):await s._backing.getPacket(n,t);if(o)return this.createAdjustedPacket(o,r,s);r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null}}class ys extends ks{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}async getColorSpace(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())}async canBeTransparent(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}class bs extends ks{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}Me();const ws=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ts extends He{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new Oo;return this._sizePromise??(this._sizePromise=(async()=>{let e=this._getFileSize();return void 0!==e||(await this._read(0,1,0,ws),e=this._getFileSize(),E(void 0!==e)),e})())}async getSize(){if(this._disposed)throw new Oo;const e=await this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Ns(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new Ss(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ss{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),e._refFinalizationRegistry?.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const e=this.source;E(e._refCount>0),e._decrementRefCount(),e._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class vs extends Ts{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ts||e instanceof Ss))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ts?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Re(t)?t.then(i):i(t)}}const Ps=(e,t)=>e.path===t.path;class Is extends vs{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ts?e.ref():e;return this._root=t,this._rootRequest=null,t};Re(e)?this._rootRequest=e.then(t):(t(e),E(this._root))}if(this._rootRequest)return this._rootRequest.then(a=>a.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const xs="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Cs extends Ts{constructor(e,t={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Ne(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new Ms({maxCacheSize:t.maxCacheSize??8388608,maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),xs?.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Ds.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}async _runWorker(e){E(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Pe()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),xs?.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch{}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return Ke._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(2**(e-2),16)},Es=new Set;class _s extends vs{constructor(e,t={}){if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Ne(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new _s(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=t.getRetryDelay??Bs,this._requestInit={...t.requestInit};let i=null;if(t.requestInit?.headers){const e={...we(t.requestInit.headers)},r=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==r&&(i=e[r],delete e[r],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){i??(i=t);const r=new Request(e);r.headers.delete("Range"),this._url=r}}if(null!==i){const e=Fs(i);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new Ms({maxCacheSize:t.maxCacheSize??67108864,maxWorkerCount:t.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:Ds.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const e=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===e?null!==this._length?this._length:null:le(e-this._offset,0,this._length??1/0)}_read(e,t,i,r){if(null!==this._length&&t>this._length)return null;const a=this._offset,s=this._sequentialBacking?this._sequentialBacking._read(a+e,a+t):this._orchestrator.read(a+e,a+t,Math.max(a+i,a),a+Math.min(r,this._length??1/0)),n=e=>e?(e.offset-=this._offset,e):null;return Re(s)?s.then(n):n(s)}async _runWorker(e){for(;;){const i=new AbortController,r=await Te(this._options.fetchFn??fetch,this._url,be(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:i.signal}),this._getRetryDelay,()=>this._disposed);if(!r.ok)throw new Error(`Error fetching ${String(this._url)}: ${r.status} ${r.statusText}`);r.redirected&&(this.rootPath=r.url);e:if(null===this._orchestrator.fileSize&&(206===r.status||"basic"===r.type&&!r.headers.has("Content-Encoding"))){const t=r.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=r.headers.get("Content-Length");if(i){const t=206===r.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!r.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==r.status){if(this._sequentialBacking)return void r.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Es.has(e.origin)||(Ke._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Es.add(e.origin))}return void this._transitionToSequentialMode(r.body)}const a=r.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return i.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let r;try{r=await a.read()}catch(t){if(this._disposed)throw t;const e=this._getRetryDelay(1,t,this._url);if(null!==e){Ke._error("Error while reading response stream. Attempting to resume.",t),await We(1e3*e);break}throw t}if(e.aborted)continue;const{done:s,value:n}=r;if(s){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+n.length),this._orchestrator.supplyWorkerData(e,n)}}}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const a=new ReadableStream({pull:async e=>{for(;;){let s;try{s=await t.read()}catch(a){if(this._disposed)throw a;const e=this._getRetryDelay(1,a,this._url);if(null===e)throw a;Ke._error("Error while reading response stream. Attempting to resume.",a),await We(1e3*e);const s=await Te(this._options.fetchFn??fetch,this._url,be(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!s.ok)throw new Error(`Error fetching ${String(this._url)}: ${s.status} ${s.statusText}`);if(!s.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=s.body.getReader(),r=206===s.status?0:i;continue}if(s.done)return void e.close();let n=s.value;if(r>0){const e=Math.min(r,n.length);r-=e,n=n.subarray(e)}if(0!==n.length)return i+=n.length,void e.enqueue(n)}},cancel:()=>t.cancel()}),s=new As(a,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const n=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)n.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)n.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of n){const e=s._read(o.start,o.start+o.bytes.length);Re(e)?e.then(e=>{e?(E(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(E(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Rs=/^bytes=(\d+)-(\d*)$/,Fs=e=>{const t=Rs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=Z(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let a=e;const s=new Uint8Array(t-e);if(-1!==i)for(let l=i;l=t)break;const r=Math.max(e,i.start);r>a&&this._throwDueToCacheMiss();const n=Math.min(t,i.end);ra&&this._throwDueToCacheMiss();const{promise:n,resolve:o,reject:c}=te();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),n}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}async _pull(){for(this._reader??(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){for(const e of this._pendingSlices)e.reject(new Oo);this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}}const Ds={fileSystem:(e,t)=>{const i=65536;return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=65536;e=Math.max(0,Math.floor((e-r)/r)*r);for(const a of i){const i=8388608,r=Math.max((a.startPos+a.targetPos)/2,a.targetPos-i);if(Ae(e,t,r,a.targetPos)){const e=a.targetPos-a.startPos,r=Math.ceil((e+1)/i)*i,s=2**Math.ceil(Math.log2(e+1)),n=Math.min(s,r);t=Math.max(t,a.startPos+n)}}return{start:e,end:t=Math.max(t,e+524288)}}};class Ms{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){E(!this.disposed);const a=this.options.prefetchProfile(e,t,this.workers),s=Math.max(a.start,i),n=Math.min(a.end,this.fileSize??1/0,r);E(s<=e&&t<=n);let o=null;const c=Z(this.cache,e,e=>e.start),l=-1!==c?this.cache[c]:null;l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,o={bytes:l.bytes,view:l.view,offset:l.start});const u=Z(this.cache,s,e=>e.start),d=o?null:new Uint8Array(t-e);let h=0,f=s;const m=[];if(-1!==u){for(let i=u;i=n)break;if(r.end<=s)continue;const a=Math.max(s,r.start),o=Math.min(n,r.end);if(E(a<=o),f=d.length&&(o={bytes:d,view:N(d),offset:e}),0===m.length)return E(o),o;const{promise:p,resolve:g,reject:k}=te(),y=[];for(const w of m){const i=Math.max(e,w.start),r=Math.min(t,w.end);i===w.start&&r===w.end?y.push(w):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&w.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,w.end),i.strictTarget&&(i.strictTarget=e),b&&i.pendingSlices.push(b)):(t++,i={hole:{start:w.start,end:w.end},strictTarget:e,pendingSlices:b?[b]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return o?p.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(E(d),o=p.then(t=>t&&{bytes:t,view:N(t),offset:e})),o}checkHoleAgainstWorker(e,t,i){if(Ae(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=r),t.end<=t.start&&(s.holes.splice(e,1),e--)}0===s.holes.length&&(s.resolve(s.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){const t=this.workers.indexOf(e);E(-1!==t),e.running=!1,this.workers.splice(t,1),this.options.onIdleWorkerRemoved?.(e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const i of e.pendingSlices)i.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=Z(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=N(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=N(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const a=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Re(a)?a.then(s):s(a)}_dispose(){this._ref?.free()}ref(){return this._ref??(this._ref=this._baseSource.ref()),super.ref()}}var Os=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},zs=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const Ls=/^0[xX][0-9a-fA-F]+$/,Us=/^data:.*;base64,/i;class qs extends gs{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??(this.currentUpdateSegmentsPromise=(async()=>{try{const e=this.getRemainingWaitTimeMs();e>0&&await We(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})())}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){const t={stack:[],error:void 0,hasError:!1};try{const i=Os(t,await this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),r=new zo(i.source),a=await r.requestEntireFile();E(a),e=ac(a,a.length,{ignore:ms}),i.source instanceof vs&&(this.rootPath=i.source.rootPath)}catch(y){t.error=y,t.hasError=!0}finally{zs(t)}}const t=!1!==this.input._formatOptions.hls?.offsetTimestampsByDateTime;let i=!1,r=0,a=null,s=null,n=null,o=0,c=null,l=null,u=null,d=null,h=null,f=null,m=!1,p=R(this.segments)??null;const g=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},k=e=>{o=e,p&&(E(null!==p.sequenceNumber),p.sequenceNumber0&&null!==f&&(r=o*f),m=!0);const e=y.slice(8),t=e.indexOf(","),i=-1===t?e:e.slice(0,t),a=Number(i);if(!Number.isFinite(a)||a<0)throw new Error(`Invalid #EXTINF tag duration '${i}'.`);s=a}else if(y.startsWith(os)){const e=new ps(y.slice(11)),t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const i=e.get("byterange");let o=null;if(null!==i&&(o=g(i)),o&&null===o.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!p){const e={path:Oe(this.rootPath,t),offset:o?.offset??0,length:o?.length??null};if("AES-128"===n?.method&&!n.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");l={timestamp:r,unixEpochTimestamp:a,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:n,initSegment:null,lastProgramDateTimeSeconds:h}}s=null,null===d?u=null:d=null}else if(y.startsWith(cs)){const e=new ps(y.slice(11)),t=e.get("method");if("NONE"===t)n=null;else if("AES-128"===t){const t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=e.get("iv");if(r){if(!Ls.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(Yi);for(let t=0;t=8&&112===t[4]&&115===t[5]&&115===t[6]&&104===t[7]){const e=N(t).getUint32(0);r=Hi(t.subarray(8,Math.min(e,t.length)))}}n={method:t,psshBox:r}}}}else if(y.startsWith(ls)){const e=y.slice(22),t=Number(e);if(!Number.isInteger(t)||t<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);k(t)}else if(y.startsWith(us)){const e=g(y.slice(17));if(null===e.offset){if(null===u)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");e.offset=u}d=e,u=e.offset+e.length}else if(y.startsWith(ds)){if(p)continue;const e=y.slice(25),i=Date.parse(e);if(!Number.isFinite(i))continue;const s=i/1e3;if(h===s)continue;if(null===h&&this.segments.length>0){const e=R(this.segments),i=s-(e.timestamp+e.duration);for(const r of this.segments)r.unixEpochTimestamp=r.timestamp+i,t&&(r.timestamp=r.unixEpochTimestamp)}h=s,a=s,t&&(r=s)}else if("#EXT-X-DISCONTINUITY"===y)c=null;else if(y.startsWith(hs)){const e=y.slice(22),t=Number(e);if(!Number.isFinite(t)||t<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,f=t}else{if("#EXT-X-ENDLIST"===y){this.streamHasEnded=!0;break}if(y.startsWith(fs)){"vod"===y.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==y)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");i=!0}}if(!i)throw new Error("Invalid M3U8 file; no #EXTM3U header.")}async getFirstSegment(){return 0===this.segments.length&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){0===this.segments.length&&await this.runUpdateSegments();let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=Z(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===t);if(i)return i.age=this.nextInputCacheAge++,i.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));const a={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let i=e.psshBoxes;const{psshBox:r}=t.encryption;return null!==r.keyIds&&!r.keyIds.includes(e.keyId)||i.some(e=>Vi(e,r))||(i=[...i,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:i})})}},s=new Mo({source:new Is(t.location.path,async e=>{E(e.isRoot);const i={...e,isRoot:!1};let r;const a=t.location.offset>0||null!==t.location.length;if(t.encryption&&"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method)if("AES-128"===t.encryption.method){const e=t.encryption;E(e.iv);let s=await this.input._getSourceCached(i);if(a){const e=s.source.slice(t.location.offset,t.location.length??void 0).ref();s.free(),s=e}const n=((e,t,i)=>{let r=!1,a=0;const s=new nr;return new ReadableStream({pull:async n=>{r||(s.init(await t()),r=!0);let o=e.requestSliceRange(a,0,65552);if(Re(o)&&(o=await o),!o||0===o.length)throw new Error("Invalid ciphertext.");const c=o.length;if(c%16!==0)throw new Error("Invalid ciphertext.");const l=65552===c?c-16:c,u=qo(o,l),d=new Uint8Array(l);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=d.subarray(0,l-e);n.enqueue(t),n.close(),i()}},cancel:()=>{i()}})})(new zo(s.source),async()=>{const t={stack:[],error:void 0,hasError:!1};try{const i=Os(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},Do),!1),r=new zo(i.source),a=await r.requestSlice(0,Yi);if(!a)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:qo(a,Yi),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{zs(t)}},()=>{s.free()});r=new As(n).ref()}else E(!1);else if(r=await this.input._getSourceCached(i),a){const e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}return r}),formats:this.input._formats.filter(e=>!(e instanceof cn)),initInput:r??void 0,formatOptions:a});s._onFormatDetermined=e=>{if(("SAMPLE-AES"===t.encryption?.method||"SAMPLE-AES-CTR"===t.encryption?.method)&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:t,input:s,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=Le(this.inputCache,e=>e.age);E(-1!==e),this.inputCache.splice(e,1)}return s}async getLiveRefreshInterval(){return 0===this.getRemainingWaitTimeMs()&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}class Ws extends Ui{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{E(this.input._rootSource instanceof vs);const e=await this.input._reader.requestEntireFile();E(e);const t=ac(e,e.length,{ignore:ms}),{rootPath:i}=this.input._rootSource,r=[],a=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],n=[...new Set(a.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=await Promise.all(r.map(async(e,t)=>{const r=[],o=e.attributes.get("codecs");let c;if(o)c=o.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=await t.getTrackBackings(),r=await Promise.all(i.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const l=e.attributes.get("video"),u=e.attributes.get("audio"),d=c.some(e=>mi.includes(Ei(e))),h=c.some(e=>gi.includes(Ei(e)));if(null!==l&&!d){if(!s.includes(l))throw new Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===l&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Oe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);E(null!==n),c.push(n)}}if(null!==u&&!h){if(!n.includes(u))throw new Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===u&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Oe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);E(null!==n),c.push(n)}}c=[...new Set(c)];let f=null,m=null;const p=e.attributes.getAsNumber("bandwidth");E(null!==p);const g=e.attributes.getAsNumber("average-bandwidth"),k=e.attributes.get("name");for(const i of c){const o=Ei(i);if(null!==o)if(mi.includes(o)){if(null!==f)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");f=i;const n=e.attributes.get("video");if(null===n){const i=e.attributes.get("resolution");let a=null,s=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(a=Number(e[1]),s=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:ue,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:f,pairingMask:1n<0?a:null}})}else{if(!n.includes(s))throw new Error(`Invalid M3U8 file; variant stream references audio group "${s}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of a){const a=i.attributes.get("group-id"),n=i.attributes.get("type");if(a!==s||"audio"!==n.toLowerCase())continue;const o=i.attributes.get("channels")??e.attributes.get("channels"),c=null!==o?Number(o.split("/")[0]):null;r.push({id:-1,demuxer:this,backingTrack:null,default:Ks(i.attributes),autoselect:Ks(i.attributes)||Xs(i.attributes),languageCode:$s(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:i.fullPath??e.fullPath,fullCodecString:m,pairingMask:1n<0?c:null}})}}}}return r})),c=[],l=e=>{const t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||(t.default=e.default),t.autoselect||(t.autoselect=e.autoselect),t.lineNumber=Math.min(t.lineNumber,e.lineNumber),null!==e.peakBitrate&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),null!==e.averageBitrate&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===ue&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(const u of o)for(const e of u)l(e);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of c)"video"===u.info.type?this.trackBackings.push(new Vs(u)):this.trackBackings.push(new js(u));this.internalTracks=c})())}async getTrackBackings(){return await this.readMetadata(),E(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new qs(this,e,i,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return is}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class Hs{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof Vs){for(const r of i)if(await r.getCodec()===this.getCodec()){t=r;break}}else{E(this instanceof js);for(const e of i)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t})())}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return{...Ge,default:this.internalTrack.autoselect,primary:this.internalTrack.default}}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){E(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}}class Vs extends Hs{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return Ei(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}async getColorSpace(){return await this.hydrate(),this.backingVideoTrack.getColorSpace()}async canBeTransparent(){return await this.hydrate(),this.backingVideoTrack.canBeTransparent()}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingVideoTrack.getDecoderConfig()}}class js extends Hs{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return Ei(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}}const Ks=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Xs=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},$s=e=>{if(null===e)return ue;const t=e.split("-")[0];return t||ue};class Gs{constructor(){this._isIsobmff=!1}}class Qs extends Gs{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(Re(t)&&(t=await t),!t)return null;t.skip(4);const i=rc(t,4);return"ftyp"!==i&&"styp"!==i?null:rc(t,4)}_createDemuxer(e){return new or(e)}}class Ys extends Qs{async _canReadInput(e){const t=await this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Re(t)&&(t=await t),!t)return!1;let r=$o(t),a=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Re(t)&&(t=await t),!t)return!1;r=Jo(t),a=16}if(r8)return!1;if(Ar(i,r)!==Ir.EBML)return!1;const a=Mr(i);if("number"!==typeof a)return!1;let s=e._reader.requestSlice(i.filePos,a);if(Re(s)&&(s=await s),!s)return!1;const n=i.filePos;for(;s.filePos<=n+a-2;){const e=Nr(s);if(!e)break;const{id:i,size:r}=e,a=s.filePos;if(void 0===r)return!1;switch(i){case Ir.EBMLVersion:if(1!==Ar(s,r))return!1;break;case Ir.EBMLReadVersion:if(1!==Ar(s,r))return!1;break;case Ir.DocType:if(Or(s,r)!==t)return!1;break;case Ir.DocTypeVersion:if(Ar(s,r)>4)return!1}s.filePos=a+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new da(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class en extends Zs{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class tn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}const i=await pa(e._reader,t,t+4096);if(!i)return!1;const r=i.header,a=Di(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+a,4);if(Re(s)&&(s=await s),!s)return!1;const n=$o(s);if(n===Fi||n===Ai)return!0;t=i.startPos+i.header.totalSize;const o=await pa(e._reader,t,t+4);if(!o)return!1;const c=o.header;return r.channel===c.channel&&r.sampleRate===c.sampleRate}_createDemuxer(e){return new ga(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class rn extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(Re(t)&&(t=await t),!t)return!1;const i=rc(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===rc(t,4)}_createDemuxer(e){return new Fa(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class an extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return Re(t)&&(t=await t),!!t&&"OggS"===rc(t,4)}_createDemuxer(e){return new xa(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class sn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Re(i)&&(i=await i),!!i&&"fLaC"===rc(i,4)}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new La(e)}}class nn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Re(i)&&(i=await i),!i)return!1;const r=Ma(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Re(i)&&(i=await i),!i)return!1;const a=Ma(i);return!!a&&(r.objectType===a.objectType&&r.samplingFrequencyIndex===a.samplingFrequencyIndex&&r.channelConfiguration===a.channelConfiguration)}_createDemuxer(e){return new Oa(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class on extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,205);if(Re(t)&&(t=await t),!t)return!1;const i=qo(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])}_createDemuxer(e){return new Xa(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class cn extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(Re(t)&&(t=await t),!t)return!1;if(!("#EXTM3U"===rc(t,7)))return!1;if(!(e._rootSource instanceof vs))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new Ws(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return is}}const ln=new Ys,un=new Js,dn=new Zs,hn=new en,fn=new tn,mn=new rn,pn=new an,gn=new nn,kn=new sn,yn=new on,bn=new cn,wn=[bn,ln,un,dn,hn,mn,pn,kn,fn,gn,yn],Tn=[bn,ln,un,fn,gn,yn];var Sn=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});Me();let vn=-1/0,Pn=-1/0,In=null;"undefined"!==typeof FinalizationRegistry&&(In=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-vn>=1e3&&(Ke._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),vn=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-Pn>=1e3&&(Ke._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),Pn=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class xn{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Cn=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],Bn=new Set(Cn);class En{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(ye*this.timestamp)}get microsecondDuration(){return Math.trunc(ye*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!Bn.has(t.format))throw new TypeError("init.format must be one of: "+Cn.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&qe(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0;const i=t.layout??Ln(t.format,t.codedWidth,t.codedHeight);let r=t.colorSpace??null;null===r&&(r="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:t.visibleRect?.left??0,top:t.visibleRect?.top??0,width:t.visibleRect?.width??t.codedWidth,height:t.visibleRect?.height??t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?M(e):M(e).slice(),this._layout=i,this.colorSpace=new Dn(r)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==t?.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==t?.timestamp&&!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==t?.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==t?.visibleRect&&qe(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:e.visibleRect?.x??0,top:e.visibleRect?.y??0,width:e.visibleRect?.width??e.codedWidth,height:e.visibleRect?.height??e.codedHeight},this.rotation=t?.rotation??0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=t?.timestamp??e.timestamp/1e6,this.duration=t?.duration??(e.duration??0)/1e6,this.colorSpace=new Dn(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&qe(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new En(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*ye),duration:Math.trunc((t.duration??0)*ye)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const a=t.visibleRect??{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(a.width,a.height),n=s.getContext("2d",{alpha:xe(),willReadFrequently:!0});if(!n)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");n.drawImage(e,-a.left,-a.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:a.width,height:a.height},this.squarePixelWidth=a.width,this.squarePixelHeight=a.height,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new Dn({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof xn))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Cn.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=e.getColorSpace()}this.encodeOptions=t?.encodeOptions??{},this.pixelAspectRatio=Ue({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),In?.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return E(null!==this._data),this._data instanceof xn?new En(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):Mn(this._data)?new En(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(E(this._layout),new En(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new En(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(In?.unregister(this),this._data instanceof xn?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Mn(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){if(zn(e),this._closed)throw new Error("VideoSample is closed.");if(null==(e.format??this.format))throw new Error("Cannot get allocation size when format is null.");if(Mn(this._data))return this._data.allocationSize(e);return qn(this,e).allocationSize}async copyTo(e,t={}){if(!X(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(zn(t),this._closed)throw new Error("VideoSample is closed.");if(null==(t.format??this.format))throw new Error("Cannot copy video sample data when format is null.");if(E(null!==this._data),Mn(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof xn)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=await i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},t.colorSpace??"srgb"),!1);if(!(r instanceof En))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(r.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${r.format}' instead.`);return await r.copyTo(e,t)}catch(c){i.error=c,i.hasError=!0}finally{Sn(i)}}}const i=qn(this,t);E(this.format);const r=M(e);if(r.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');s=e}else if(this._data instanceof Uint8Array)E(this._layout),E(this._layout.length===a.length),s=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");E(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);s=[{data:M(t.data),stride:4*this.codedWidth}]}const n=[],o=a.length;for(let l=0;la.byteLength)throw new Error("Source buffer OOB read.");if(c+u>r.byteLength)throw new Error("Destination buffer OOB write.");const i=a.subarray(o,o+u);r.set(i,c),o+=t,c+=e.destinationStride}n.push(d)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),a=this.format.includes("X")&&t.format.includes("A");if(e||a)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const a=[];for(const s of e)i.set(s.data,r),a.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:a[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return Mn(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(E(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,a,s,n,o,c){let l=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(l=t,u=i,d=r,h=a,f=s,m=n,void 0!==o?(p=o,g=c):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=a)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(l))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:l,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(l,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const w=this.rotation%180===0?1:p/g;e.scale(1/w,w),e.drawImage(k,l,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&On(t.crop,"options.");const i=e.canvas.width,r=e.canvas.height,a=t.rotation??this.rotation,[s,n]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let o,c,l,u,d=t.crop;d&&(d=Nn(d,s,n));const{sx:h,sy:f,sWidth:m,sHeight:p}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??s,t.crop?.height??n,a);if("fill"===t.fit)o=0,c=0,l=i,u=r;else{const[e,a]=t.crop?[t.crop.width,t.crop.height]:[s,n],d="contain"===t.fit?Math.min(i/e,r/a):Math.max(i/e,r/a);l=e*d,u=a*d,o=(i-l)/2,c=(r-u)/2}e.save();const g=a%180===0?1:l/u;e.translate(i/2,r/2),e.rotate(a*Math.PI/180),e.scale(1/g,g),e.translate(-i/2,-r/2),e.drawImage(this.toCanvasImageSource(),h,f,m,p,o,c,l,u),e.restore()}_rotateSourceRegion(e,t,i,r,a){return 90===a?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===a?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===a&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,a=e.height,[s,n]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,c=i.crop?i.crop.height:n;let l=0;2*r0?An(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=l;p>1;p--){const e=r*2**p,t=a*2**p;f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",l>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*a,0,0,r,a),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(E(null!==this._data),this._data instanceof xn||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}async transform(e){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&On(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const t=_(this.rotation+(e.rotate??0)),[i,r]=t%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let a=e.crop;a&&(a=Nn(a,i,r));const s=a?a.width:i,n=a?a.height:r,o=s/n;let c,l;void 0!==e.width&&void 0===e.height?(c=e.width,l=c/o):void 0===e.width&&void 0!==e.height?(l=e.height,c=l*o):void 0!==e.width&&void 0!==e.height?(c=e.width,l=e.height):(c=s,l=n),c=he(c,e.roundDimensionsTo??1),l=he(l,e.roundDimensionsTo??1);const u={width:c,height:l,fit:e.fit??"fill",rotation:t,crop:a??{left:0,top:0,width:i,height:r},alpha:e.alpha??"keep"};for(const m of _n){let e=m(this,u);if(Re(e)&&(e=await e),null!==e)return e}const{canvas:d,context:h,isNew:f}=An(u.width,u.height);return this._drawWithFitAndMipmapping(d,h,{fit:u.fit,rotation:u.rotation,crop:u.crop,targetIsFresh:f,fillBlack:"discard"===u.alpha}),new En(d,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const _n=[],Rn=[];let Fn=0;const An=(e,t)=>{for(const a of Rn)if(a.canvas.width===e&&a.canvas.height===t)return a.age=Fn++,{canvas:a.canvas,context:a.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return Rn.length>=3&&Rn.splice(Le(Rn,e=>e.age),1),Rn.push({canvas:i,context:r,age:Fn++}),{canvas:i,context:r,isNew:!0}};class Dn{constructor(e){if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(L);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(q);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(H);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const Mn=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Nn=(e,t,i)=>{const r=Math.min(e.left,t),a=Math.min(e.top,i),s=Math.min(e.width,t-r),n=Math.min(e.height,i-a);return E(s>=0),E(n>=0),{left:r,top:a,width:s,height:n}},On=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},zn=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Ln=(e,t,i)=>{const r=Un(e),a=[];let s=0;for(const n of r){const e=Math.ceil(t/n.widthDivisor),r=Math.ceil(i/n.heightDivisor),o=e*n.sampleBytes,c=o*r;a.push({offset:s,stride:o}),s+=c}return a},Un=e=>{const t=(e,t,i,r,a)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return a&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:se(e),E(!1)}},qn=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,a=Wn(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let n;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");n=t.format}else n=e.format;return Vn(a,n,s)},Wn=(e,t,i,r,a)=>{const s={...e};if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!Hn(a,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},Hn=(e,t)=>{if(null===e)return!0;const i=Un(e);for(let r=0;r{const r=Un(t),a=r.length;if(void 0!==i&&i.length!==a)throw new TypeError(`Layout must have ${a} planes.`);let s=0;const n=[],o=[];for(let c=0;c4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/($n(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*$n(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const r=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-i;if(r>this.numberOfFrames-i)throw new RangeError("frameCount out of range");const a=$n(t),s=Gn(t);if(s&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(s?r:r*this.numberOfChannels)*a}copyTo(e,t){if(!X(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!jn.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:a}=t;let{planeIndex:s}=t,n=this.format;const o=i??this.format;if(!o)throw new Error("Destination format not determined");const c=this.numberOfFrames,l=this.numberOfChannels,u=a??0;if(u>=c)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:c-u;if(d>c-u)throw new RangeError("frameCount out of range");const h=$n(o),f=Gn(o);if(f&&s>=l)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*l)*h;if(e.byteLength2&&o!==n)return void Zn(this._data,p,n,o,l,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(S){if("f32-planar"===o)throw S;n="f32-planar"}}const k=Qn(n),y=$n(n),b=Gn(n);let w;if(this._data instanceof Kn){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=c*y*(b?1:l);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)w=e(s),s=0;else{w=new Uint8Array(c*y*l);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(a,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new Xn({data:a,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(In?.unregister(this),this._data instanceof Kn?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Jn(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof Kn?this._createAudioDataFromData():Jn(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(Gn(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const a=Math.min(s,o),c=new Float32Array(i*a);for(let t=0;t0;){const a=Math.min(s,o),l=new Float32Array(i*a);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},Gn=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Qn=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},Yn=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,le(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,le(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,le(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},Jn=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,Zn=(e,t,i,r,a,s,n,o)=>{const c=Qn(i),l=Yn(r),u=$n(i),d=$n(r),h=Gn(i);if(Gn(r))if(h){const r=new ArrayBuffer(o*u),a=N(r);e.copyTo(r,{planeIndex:s,frameOffset:n,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},ro=e=>{if(!Ne(e))throw new TypeError("timestamp must be a number.")},ao=(e,t,i)=>i.verifyKeyPackets?t.then(async t=>{if(!t||"delta"===t.type)return t;const i=await e.determinePacketType(t);return i&&(t.type=i),t}):t;class so{constructor(e){if(!(e instanceof To))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(io(e),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){io(e);const t=await this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(ro(e),io(t),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(io(t),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(ro(e),io(t),this._track.input._disposed)throw new Oo;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=await this._track._backing.getKeyPacket(e,t);if(!i)return i;E("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getKeyPacket(i.timestamp-1/await this._track.getTimeResolution(),t):i}async getNextKeyPacket(e,t={}){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(io(t),this._track.input._disposed)throw new Oo;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=await this._track._backing.getNextKeyPacket(e,t);if(!i)return i;E("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getNextKeyPacket(i,t):i}packets(e,t,i={}){if(void 0!==e&&!(e instanceof Wi))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!i?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof Wi))throw new TypeError("endPacket must be an EncodedPacket.");if(io(i),this._track.input._disposed)throw new Oo;const r=[];let{promise:a,resolve:s}=te(),{promise:n,resolve:o}=te(),c=!1,l=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(async()=>{let u=e??await this.getFirstPacket(i);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);)r.length>f()?(({promise:n,resolve:o}=te()),await n):(r.push(u),s(),({promise:a,resolve:s}=te()),u=await this.getNextPacket(u,i));c=!0,s()})().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{async next(){for(;;){if(m.input._disposed)throw new Oo;if(l)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};await a}},return:async()=>(l=!0,o(),s(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}class no{constructor(e,t){this.onSample=e,this.onError=t}}class oo{mediaSamplesInRange(e=-1/0,t=1/0,i){ro(e),ro(t);const r=[];let a=!1,s=null,{promise:n,resolve:o}=te(),{promise:c,resolve:l}=te(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g={...i,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{f=await this._createDecoder(i=>{l(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),a=!0):s.close()),i.timestamp>=e&&(r.push(i),a=!0),s=a?null:i,r.length>0&&(o(),({promise:n,resolve:o}=te())))},e=>{p||(m=e,p=!0,o())});const i=this._createPacketSink(),k=await i.getKeyPacket(e,g)??await i.getFirstKeyPacket(g);let y=k;const b=i.packets(k??void 0,void 0,g);for(await b.next();y&&!d&&!this._track.input._disposed;){const e=co(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:c,resolve:l}=te()),await c;continue}f.decode(y);const t=await b.next();if(t.done)break;y=t.value}await b.return(),h||this._track.input._disposed||await f.flush(),!a&&s&&r.push(s),u=!0,o()})().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{f?.close()});const k=this._track,y=()=>{s?.close();for(const e of r)e.close()};return{async next(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new Oo;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return l(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};await n}},return:async()=>(h=!0,d=!0,l(),o(),y(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()}(e),r=[],a=[];let{promise:s,resolve:n}=te(),{promise:o,resolve:c}=te(),l=!1,u=!1,d=null,h=null,f=!1;const m=e=>{a.push(e),n(),({promise:s,resolve:n}=te())},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{d=await this._createDecoder(e=>{if(c(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,n())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=async()=>{E(s),E(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:c}=te()),await o;if(u)break;const r=await e.getNextPacket(t,p);E(r),d.decode(r),t=r}g=-1},y=async()=>{E(d),await d.flush();for(let e=0;e{f||(h=e,f=!0,n())}).finally(()=>{d?.close()});const g=this._track,k=()=>{for(const e of a)e?.close()};return{async next(){for(;;){if(g.input._disposed)throw u=!0,k(),new Oo;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(a.length>0){const e=a.shift();return E(void 0!==e),c(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};await s}},return:async()=>(u=!0,c(),n(),k(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}const co=e=>0===e?40:8;class lo extends no{constructor(e,t,i,r,a,s){super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=a,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Se,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const n=eo.find(e=>e.supports(i,r));if(n)this.customDecoder=new n,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof En))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();E(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(Be()){if("avc"===i&&this.decoderConfig.description){const e=yt(M(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=wt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"}),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=St(t),this.decoderConfig={...this.decoderConfig,description:kt(e)}))}}j(this.decoderConfig.colorSpace)||(this.decoderConfig={...this.decoderConfig,colorSpace:{primaries:this.decoderConfig.colorSpace?.primaries??"bt709",matrix:this.decoderConfig.colorSpace?.matrix??"bt709",transfer:this.decoderConfig.colorSpace?.transfer??"bt709",fullRange:this.decoderConfig.colorSpace?.fullRange??!1}})}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(E(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(E(this.decoder),Pe()||ee(this.inputTimestamps,e.timestamp,e=>e),Be()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const a of ut(e.data,this.decoderConfig)){const r=dt(e.data[a.offset]);if(i||(i=r>=1&&r<=5),r===at.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(a.offset,a.offset+a.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&M(t.description)[4];return pt(e,i+1)}return mt(e)})(t,this.decoderConfig);e=new Wi(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Nt(e.data,this.decoderConfig);t&&(e=new Wi(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new ho),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();E(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();E(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=Vt(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(t??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of vt(e,this.decoderConfig)){const i=Pt(e[t.offset]);if(i===nt.RASL_N||i===nt.RASL_R)return!0}return!1}sampleHandler(e){if(Pe()){if(this.sampleQueue.length>0&&e.timestamp>=R(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}ee(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();E(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){const i=te();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){E(this.merger);const i=await this.merger.merge(e,t);r.sample=new En(i)}else r.sample=new En(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(a){ie(this.finalSamples,r),this.onError(a)}finally{ie(this.mergeAlphaPromises,i.promise),i.resolve()}}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(E(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Pe()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(E(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.merger?.close());for(const e of this.sampleQueue)e.close();this.sampleQueue.length=0}}let uo=null;class ho{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!uo){const e=new Blob([`(${fo.toString()})()`],{type:"application/javascript"});uo=URL.createObjectURL(e)}const e=le(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=te();this.pendingRequests.set(i,r);const a=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,a.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const fo=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:a,alpha:s}=e.data;i=i.then(async()=>{try{const e=await r(a,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{a.close(),s.close()}})});const r=async(e,t)=>{const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),c=i.includes("P12"),l=r.includes("P10"),u=r.includes("P12");if(l!==o||u!==c)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return await a(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return await s(e,t,i);if("NV12"===i)return await n(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)},a=async(e,t,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=new Uint8Array(4*s);await e.copyTo(n);const c=await o(t,r,a,1);for(let o=0,u=3;o{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=i.includes("P10"),n=i.includes("P12"),c=s||n?2:1;let l,u;i.startsWith("I420")?(l=Math.ceil(r/2),u=Math.ceil(a/2)):i.startsWith("I422")?(l=Math.ceil(r/2),u=a):(l=r,u=a);const d=r*a,h=d*c,f=l*u*c,m=new Uint8Array(h+2*f+d*c);await e.copyTo(m);const p=await o(t,r,a,c),g=h+2*f;m.set(p,g);const k={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:r,codedHeight:a,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[m.buffer]};return new VideoFrame(m,k)},n=async(e,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=Math.ceil(r/2)*Math.ceil(a/2),c=e.allocationSize();t&&t.byteLength===c||(t=new Uint8Array(c)),await e.copyTo(t);const l=new Uint8Array(s+2*n+s);l.set(t.subarray(0,s),0);const u=s,d=s+n,h=s;for(let o=0;o{const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),await t.copyTo(e);const n=t.format;if("RGBA"===n||"BGRA"===n||"RGBX"===n||"BGRX"===n){const t="RGBA"===n||"RGBX"===n?0:2,a=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class po extends oo{constructor(e,t={}){if(!(e instanceof Po))throw new TypeError("videoTrack must be an InputVideoTrack.");mo(t),super(),this._track=e,this._decoderOptions=t}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(Ee("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getRotation();let a=await this._track.getDecoderConfig();const s=await this._track.getTimeResolution();return E(i&&a),a={...a,hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency},new lo(e,t,i,a,r,s)}_createPacketSink(){return new so(this._track)}async getSample(e,t={}){ro(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class go{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof Po))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&On(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&mo(t.decoderOptions),this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??"fill",this._videoSampleSink=new po(e,t.decoderOptions),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??(this._initPromise=(async()=>{const e=this._options,t=this._videoTrack,i=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),a=await t.getSquarePixelHeight(),[s,n]=i%180===0?[r,a]:[a,r];let o=e.crop;o&&(o=Nn(o,s,n));let[c,l]=o?[o.width,o.height]:[s,n];const u=c/l;void 0!==e.width&&void 0===e.height?(c=e.width,l=Math.round(c/u)):void 0===e.width&&void 0!==e.height?(l=e.height,c=Math.round(l*u)):void 0!==e.width&&void 0!==e.height&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=i,this._crop=o})())}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],a=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||xe()});E(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:a,fillBlack:!this._alpha&&xe()});const n={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),n}async getCanvas(e,t){ro(e),await this._ensureInit();const i=await this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)}async*canvases(e,t,i){await this._ensureInit(),yield*ce(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*ce(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}}class ko extends no{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Se,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const a=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const a=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(a*s)/s),e(t)},s=to.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Xn))throw new TypeError("The argument passed to onSample must be an AudioSample.");a(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{a(new Xn(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(E(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(E(this.decoder),this.expectedFirstTimestamp??(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(E(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(E(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class yo extends no{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,E(pi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:a,littleEndian:s}=Bi(this.codec);switch(this.inputSampleSize=a,a){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-128:"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const a=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let a=0;return a=4!==i?1<e.getUint16(t,s)-32768:"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):E(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>ne(e,t,s)-2**23:"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>ne(e,t,i)<<8>>8)(e,t,s):E(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-2**31:"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):E(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):E(!1);break;default:se(a),E(!1)}switch(a){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+128));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:se(a),E(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=N(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,a=new ArrayBuffer(r),s=new DataView(a);for(let l=0;l=n)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=n;const c=new Xn({format:this.outputFormat,data:a,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(c)}async flush(){}close(){}}class bo extends oo{constructor(e){if(!(e instanceof Io))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(Ee("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getDecoderConfig();return E(i&&r),pi.includes(r.codec)?new yo(e,t,r):new ko(e,t,i,r)}_createPacketSink(){return new so(this._track)}async getSample(e,t={}){ro(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class wo{constructor(e){if(!(e instanceof Io))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new bo(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){ro(e);const i=await this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)}buffers(e,t,i){return ce(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return ce(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class To{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof Po}isAudioTrack(){return this instanceof Io}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return So(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return So(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return So(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return So(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(e){return this._backing.getUnixTimeForTimestamp(e)}async hasUnixTimeMapping(){return null!==await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())}async getDisposition(){return this._backing.getDisposition()}get disposition(){return So(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){const e=await this._backing.getFirstPacket({metadataOnly:!0});return e?.timestamp??0}async computeDuration(e){const t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return fe((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){const i=new so(this);let r=1/0,a=-1/0,s=0,n=0;for await(const o of i.packets(void 0,void 0,{metadataOnly:!0,...t})){if(s>=e&&o.timestamp>=a)break;r=Math.min(r,o.timestamp),a=Math.max(a,o.timestamp+o.duration),s++,n+=o.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-r)).toPrecision(16)):0,averageBitrate:s?Number((8*n/(a-r)).toPrecision(16)):0}}async isLive(){return null!==await this._backing.getLiveRefreshInterval()}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(e){if(!(e instanceof To))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&0n!==(this._backing.getPairingMask()&e._backing.getPairingMask())}async getPairableTracks(e){return this.input.getTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Eo({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&(e=vo(e));const t=await this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||await e(i)))return!0;return!1}hasPairableVideoTrack(e){return e&&(e=vo(e)),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&(e=vo(e)),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}}const So=(e,t,i)=>{if(Re(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},vo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Re(r)?r.then(i):i(r)}:void 0};class Po extends To{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return So(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??"prores"===await this._backing.getCodec()}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return So(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return So(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return So(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return So(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return So(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ue({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()}))}get pixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ue({num:So(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*So(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:So(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*So(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")}))}async getDisplayWidth(){const e=await(this._backing.getMetadataDisplayWidth?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()}get displayWidth(){const e=this._backing.getMetadataDisplayWidth?.();if(void 0!==e){const t=So(e,"displayWidth","getDisplayWidth");if(null!==t)return t}const t=So(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return So(t,"displayWidth","getDisplayWidth")}async getDisplayHeight(){const e=await(this._backing.getMetadataDisplayHeight?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()}get displayHeight(){const e=this._backing.getMetadataDisplayHeight?.();if(void 0!==e){const t=So(e,"displayHeight","getDisplayHeight");if(null!==t)return t}const t=So(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return So(t,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){const e=await this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(E(null!==t),eo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(await VideoDecoder.isConfigSupported(e)).supported}catch(e){return Ke._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=await this.getCodec();if(null===t)return null;const i=await this.getDecoderConfig();return E(i),Vt(t,i,e.data)}async computeFrameRateMetrics(e={}){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Ne(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const t=await this.getTimeResolution(),i=e.targetPacketCount??256,r=new so(this),a=[];let s=-1/0,n=0;for await(const I of r.packets(void 0,void 0,{metadataOnly:!0})){if(a.length>=i&&I.timestamp>=s)break;a.push(I.timestamp),s=Math.max(s,I.timestamp),n++}const o=new Float64Array(a.length);for(let I=0;Ie-t),b=k-1>>1,w=k>>1;let T=0,S=0,v=0;for(const I of y)if(v+=f.get(I),0===T&&v>b&&(T=I),v>w){S=I;break}const P=(d/T+d/S)/2;return{underlyingFrameRate:u,bestGuessFrameRate:null!==u?u:Ao(P),minFrameRate:d/p,maxFrameRate:d/m,averageFrameRate:d*k/g,medianFrameRate:P,frameRateIsConstant:null!==u&&1===m&&1===p,probedPacketCount:n}}}class Io extends To{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return So(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return So(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return So(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(E(null!==t),to.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(await AudioDecoder.isConfigSupported(e)).supported}catch(e){return Ke._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");return null===await this.getCodec()?null:"key"}}const xo=e=>-(e??-1/0),Co=e=>-e,Bo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Re(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Re(r)?r.then(i):i(r)}:void 0}},Eo=(e,t)=>({filter:e?.filter||t?.filter?i=>{const r=e?.filter?.(i)??!0,a=e=>!1!==e&&(t?.filter?.(i)??!0);return Re(r)?r.then(a):a(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?i=>{const r=e?.sortBy?.(i)??[],a=t?.sortBy?.(i)??[],s=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Re(r)||Re(a)?Promise.all([r,a]).then(([e,t])=>s(e,t)):s(r,a)}:void 0}),_o=async(e,t)=>{let i=e;if(t?.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Re(e))){const t=await Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!t?.sortBy)return i;const r=i.map(e=>t.sortBy(e)),a=r.some(e=>Re(e))?await Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:a[t]})).sort((e,t)=>{const i=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(i.length,r.length);for(let s=0;se.track)},Ro=(e,t)=>{const i=1e6,r=1+1e-9,a=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let T=1;T0))return null;s[T-1]=t}const n=s.slice();n.sort();let o=n[Math.floor(.05*n.length)];for(let T=0;T<6;T++){let e=0,t=0;for(const a of s){const i=Math.max(1,Math.round(a/o));Math.abs(a-i*o)>=r||(e+=a,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let c=0,l=0,u=0;for(const T of s){const e=Math.max(1,Math.round(T/o));Math.abs(T-e*o)>=r||(c++,l+=T,u+=e)}if(c/s.length<.98)return null;o=l/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const T of a){if(Tp)continue;const e=Math.abs(T/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,a=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof Gs)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ts||e.source instanceof Ss))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ts&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof Mo))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ts?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){E(this._rootSource instanceof vs);const t=await this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&Ps(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&Ps(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const a=(async()=>{const i=await this._getSourceUncached(e);if(ze(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=Le(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);E(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),ie(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);E(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:a}),a.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??(this._demuxerPromise=(async()=>{this._reader=new zo(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const e of this._formats){if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this)}throw new No})())}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),E(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof No)return!1;throw e}}async getFirstTimestamp(e){e??(e=await this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=await Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>e?.timestamp??1/0));return r===1/0?0:r}async computeDuration(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=await Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e),r=(await Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)}async getTracks(e){e&&(e=Bo(e));const t=(await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return _o(t,e)}async getVideoTracks(e){e&&(e=Bo(e));const t=(await this.getTracks()).filter(e=>e.isVideoTrack());return _o(t,e)}async getAudioTracks(e){e&&(e=Bo(e));const t=(await this.getTracks()).filter(e=>e.isAudioTrack());return _o(t,e)}async getPrimaryVideoTrack(e){e&&(e=Bo(e));const t=Eo(e,{sortBy:async e=>[Co((await e.getDisposition()).default),Co(await e.hasPairableAudioTrack()),Co(!(await e.hasOnlyKeyPackets())),xo(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&(e=Bo(e));const t=await this.getPrimaryVideoTrack(),i=Eo(e,{sortBy:async e=>[Co(!t||e.canBePairedWith(t)),Co((await e.getDisposition()).default),xo(await e.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){const e=await this._getDemuxer();return this._trackBackingsCache??(this._trackBackingsCache=await e.getTrackBackings())}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new Po(this,e):new Io(this,e);return this._backingToTrack.set(e,i),i}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class No extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class Oo extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class zo{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new Oo;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new Lo(t,N(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,ws);return Re(r)?r.then(t=>t?new Lo(t.bytes,t.view,t.offset,e,i):null):r?new Lo(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new Oo;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,le(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),a=r=>r||(E(null!==this.fileSizeNonStrict),this.requestSlice(e,le(this.fileSizeNonStrict-e,t,i)));return Re(r)?r.then(a):a(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(async()=>{const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Re(i)&&(i=await i),!i||0===i.length)break;const r=qo(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const a of e)i.set(a,r),r+=a.length;return new Lo(i,N(i),0,0,t)})()}}class Lo{constructor(e,t,i,r,a){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=a,this.bufferPos=r-i}static tempFromBytes(e){return new Lo(e,N(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new Lo(this.bytes,this.view,this.offset,e,e+t)}}const Uo=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},qo=(e,t)=>{Uo(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},Wo=e=>(Uo(e,1),e.view.getUint8(e.bufferPos++)),Ho=(e,t)=>{Uo(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},Vo=e=>{Uo(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},jo=e=>{Uo(e,3);const t=ne(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},Ko=e=>{Uo(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},Xo=(e,t)=>{Uo(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},$o=e=>{Uo(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},Go=e=>{Uo(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},Qo=e=>{Uo(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Yo=(e,t)=>{let i,r;return t?(i=Xo(e,!0),r=Xo(e,!0)):(r=Xo(e,!1),i=Xo(e,!1)),4294967296*r+i},Jo=e=>4294967296*$o(e)+$o(e),Zo=e=>4294967296*Qo(e)+$o(e),ec=e=>{const t=Go(e),i=(e=>{Uo(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},tc=e=>{Uo(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},ic=e=>{Uo(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},rc=(e,t)=>{Uo(e,t);let i="";for(let r=0;rO.decode(qo(e,t)).split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!i?.ignore?.(e));var sc,nc,oc,cc;(nc=sc||(sc={}))[nc.Unsynchronisation=128]="Unsynchronisation",nc[nc.ExtendedHeader=64]="ExtendedHeader",nc[nc.ExperimentalIndicator=32]="ExperimentalIndicator",nc[nc.Footer=16]="Footer",(cc=oc||(oc={}))[cc.ISO_8859_1=0]="ISO_8859_1",cc[cc.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",cc[cc.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",cc[cc.UTF_8=3]="UTF_8";const lc=128,uc=10,dc=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],hc=(e,t)=>{var i;const r=e.filePos;t.raw??(t.raw={}),(i=t.raw).TAG??(i.TAG=qo(e,lc-3)),e.filePos=r;const a=fc(e,30);a&&(t.title??(t.title=a));const s=fc(e,30);s&&(t.artist??(t.artist=s));const n=fc(e,30);n&&(t.album??(t.album=n));const o=fc(e,4),c=Number.parseInt(o,10);Number.isInteger(c)&&c>0&&(t.date??(t.date=new Date(String(c))));const l=qo(e,30);let u;if(0===l[28]&&0!==l[29]){const i=l[29];i>0&&(t.trackNumber??(t.trackNumber=i)),e.skip(-30),u=fc(e,28),e.skip(2)}else e.skip(-30),u=fc(e,30);u&&(t.comment??(t.comment=u));const d=Wo(e);d{const i=qo(e,t),r=Fe(i.indexOf(0),i.length),a=i.subarray(0,r);let s="";for(let n=0;n{const t=e.filePos,i=rc(e,3),r=Wo(e),a=Wo(e),s=Wo(e),n=$o(e);if("ID3"!==i||255===r||255===a||0!==(2155905152&n))return e.filePos=t,null;let o=Ni(n);return s&sc.Footer&&(o+=uc),{majorVersion:r,revision:a,flags:s,size:o}},pc=(e,t,i)=>{var r,a,s,n,o;if(![2,3,4].includes(t.majorVersion))return void Ke._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&sc.Footer?t.size-uc:t.size,l=qo(e,c),u=new gc(t,l);if(t.flags&sc.Unsynchronisation&&3===t.majorVersion&&u.ununsynchronizeAll(),t.flags&sc.ExtendedHeader){const e=u.readU32();3===t.majorVersion?u.pos+=e:u.pos+=e-4}for(;u.pos<=u.bytes.length-u.frameHeaderSize();){const e=u.readId3V2Frame();if(!e)break;const c=u.pos,l=u.pos+e.size;let d=!1,h=!1,f=!1;if(3===t.majorVersion?(d=!!(64&e.flags),h=!!(128&e.flags)):4===t.majorVersion&&(d=!!(4&e.flags),h=!!(8&e.flags),f=!!(2&e.flags)||!!(t.flags&sc.Unsynchronisation)),d)Ke._warn(`Skipping encrypted ID3v2 frame ${e.id}`),u.pos=l;else if(h)Ke._warn(`Skipping compressed ID3v2 frame ${e.id}`),u.pos=l;else{if(f&&u.ununsynchronizeRegion(u.pos,l),i.raw??(i.raw={}),"TXXX"===e.id){const e=(r=i.raw).TXXX??(r.TXXX={}),t=u.readId3V2TextEncoding(),a=u.readId3V2Text(t,l),s=u.readId3V2Text(t,l);e[a]??(e[a]=s)}else"T"===e.id[0]?(a=i.raw)[s=e.id]??(a[s]=u.readId3V2EncodingAndText(l)):(n=i.raw)[o=e.id]??(n[o]=u.readBytes(e.size));switch(u.pos=c,e.id){case"TIT2":case"TT2":i.title??(i.title=u.readId3V2EncodingAndText(l));break;case"TIT3":case"TT3":i.description??(i.description=u.readId3V2EncodingAndText(l));break;case"TPE1":case"TP1":i.artist??(i.artist=u.readId3V2EncodingAndText(l));break;case"TALB":case"TAL":i.album??(i.album=u.readId3V2EncodingAndText(l));break;case"TPE2":case"TP2":i.albumArtist??(i.albumArtist=u.readId3V2EncodingAndText(l));break;case"TRCK":case"TRK":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.trackNumber??(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.tracksTotal??(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.discNumber??(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.discsTotal??(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=u.readId3V2EncodingAndText(l);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==dc[e]){i.genre??(i.genre=dc[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==dc[e]){i.genre??(i.genre=dc[e]);break}}i.genre??(i.genre=e)}break;case"TDRC":case"TDAT":{const e=u.readId3V2EncodingAndText(l),t=new Date(e);Number.isNaN(t.getTime())||(i.date??(i.date=t))}break;case"TYER":case"TYE":{const e=u.readId3V2EncodingAndText(l),t=Number.parseInt(e,10);Number.isInteger(t)&&(i.date??(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.lyrics??(i.lyrics=u.readId3V2Text(e,l))}break;case"COMM":case"COM":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.comment??(i.comment=u.readId3V2Text(e,l))}break;case"APIC":case"PIC":{const e=u.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=u.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=u.readId3V2Text(e,l);const a=u.readU8(),s=u.readId3V2Text(e,l).trimEnd(),n=l-u.pos;if(n>=0){const e=u.readBytes(n);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===a?"coverFront":4===a?"coverBack":"unknown",description:s})}}break;default:u.pos+=e.size}u.pos=l}}};class gc{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Ni(t);s(e)&&(i=e)}return this.pos=a,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case oc.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=Fe(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=Fe(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),O.decode(r.subarray(0,e))}case oc.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=Fe(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case oc.UTF_8:{const e=Fe(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),O.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class kc{constructor(e){this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set}get currentTime(){return this.paused?this.playbackTimeAtStart:(this.audioContext.currentTime-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart}ensureAudioContext(e){if(this.audioContext)return;const t=window.AudioContext||window.webkitAudioContext;try{this.audioContext=new t({sampleRate:e})}catch{this.audioContext=new t}this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.updateGain()}updateGain(){if(!this.gainNode)return;const e=this.muted?0:this.volume;this.gainNode.gain.value=e*e}stopQueuedNodes(){this.queuedNodes.forEach(e=>e.stop()),this.queuedNodes.clear()}async stopIterator(){await(this.audioIterator?.return()),this.audioIterator=null}handleNoAudioTrack(){this.audioSink=null,this.ensureAudioContext()}async load(e,t){++this.asyncId,await this.stopIterator(),this.stopQueuedNodes(),this.paused=!0,this.playbackTimeAtStart=0,this.audioContextStartTime=0;const{input:i,audioTrack:r,duration:a}=e;return this.input=i,this.duration=a,r?null!==r.codec&&await r.canDecode()?(this.ensureAudioContext(r.sampleRate),this.audioSink=new wo(r),void t?.()):(this.audioSink=null,this.ensureAudioContext(),void t?.()):(this.handleNoAudioTrack(),void t?.())}async runIterator(e){if(!this.audioSink)return;await this.stopIterator(),this.audioIterator=this.audioSink.buffers(this.currentTime);for(;;){if(e!==this.asyncId||this.paused)return;const i=[];let r=!1;try{for(let e=0;e<16;e++){const e=await this.audioIterator.next();if(e.done){r=!0;break}i.push(e.value)}}catch(t){console.error("Audio iterator error:",t),r=!0}if(e!==this.asyncId||this.paused)return;i.length>0&&"suspended"===this.audioContext.state&&(await this.audioContext.resume(),this.events.emit("canplay"),this.events.emit("playing"));for(const{buffer:e,timestamp:t}of i){const i=this.audioContext.createBufferSource();i.buffer=e,i.connect(this.gainNode),i.playbackRate.value=this.playbackRate;const r=this.audioContextStartTime+(t-this.playbackTimeAtStart)/this.playbackRate,a=(r+e.duration/this.playbackRate-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart;a>this.latestScheduledEndTime&&(this.latestScheduledEndTime=a),r>=this.audioContext.currentTime?i.start(r):i.start(this.audioContext.currentTime,(this.audioContext.currentTime-r)*this.playbackRate),this.queuedNodes.add(i),i.onended=()=>this.queuedNodes.delete(i)}if(r)break;await new Promise(e=>setTimeout(e,0));const a=1;for(;this.latestScheduledEndTime-this.currentTime>a;){if(e!==this.asyncId||this.paused)return;await new Promise(e=>setTimeout(e,50))}}}async play(){if(!this.paused)return;this.audioContext||this.ensureAudioContext(),"suspended"===this.audioContext.state&&await this.audioContext.resume(),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1;const e=++this.asyncId;this.runIterator(e)}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime,this.paused=!0,this.stopIterator(),this.stopQueuedNodes())}async seek(e){this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart;const t=++this.asyncId;this.paused||this.runIterator(t)}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(e!==this.playbackRate&&(this.paused||(this.playbackTimeAtStart=this.currentTime,this.audioContextStartTime=this.audioContext.currentTime),this.playbackRate=e,!this.paused)){const e=++this.asyncId;this.runIterator(e)}}destroy(){this.asyncId++,this.pause(),this.audioContext?.close(),this.audioContext=null,this.input=null,this.audioSink=null}}async function yc(e){return await e.getAverageBitrate()??await e.getBitrate()??0}const bc=/\.m3u8(?:$|[?#])/i;function wc(e){return"string"===typeof e&&bc.test(e)}function Tc(e){const t=function(e){return"string"===typeof e?new _s(e):e instanceof Blob?new Cs(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new As(e):e??null}(e);return t?new Mo({source:t,formats:wc(e)?Tn:wn}):null}class Sc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){return this.controller?.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}async wait(e,t){try{await Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,e?.dispose()}cancel(){if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),this.controller?.abort(),this.disposeInput()}}}function vc(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}async function Pc({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),a=t||i,s=Boolean(a&&await a.isLive());let n=Number.NaN;return r.length>0&&(n=await e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==n||s||(n=await e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:n??Number.NaN}function Ic(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class xc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null,this.audioStart=null}operation(){return{...Ic(),source:this.host.loadSeq,complete:Ic()}}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,e?.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,e?.complete.resolve(),e?.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}async startAudio(){this.audioStart||(this.audioStart=this.host.audio.play());const e=this.audioStart;try{await e}finally{this.audioStart===e&&(this.audioStart=null)}}async runPlay(e){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(await this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,await this.startAudio(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),vc(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}}seek(e,t){return this.position(async t=>{const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();await Promise.all([i,r])},["seeked"],!1,t)}replace(e,t){return this.position(async i=>{e.duration=await Pc(e),i()&&(this.host.media=e,await Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(await Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))},["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=r??(this.seeking?this.wanted:!this.host.paused),this.cancelPlay();const a=this.seeking,s=this.operation();return this.seeking=s,a?.complete.resolve(),a?.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}async runPosition(e,t,i,r){const a=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!a())return;if(this.host.ended=!1,this.host.seeking=!0,vc(this.host.events,a,["seeking","waiting"]),!a())return;if(r||this.stop(),!a())return;if(await t(a),!a())return;if(this.host.seeking=!1,e.complete.resolve(),vc(this.host.events,a,i),!a())return;this.seeking=null,s=this.wanted}catch(n){if(!a())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(n),n}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&await this.play()}}const Cc=new WeakMap,Bc=new WeakMap;function Ec(e){const t=Bc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>e.value??null);Bc.set(e,i);const r=()=>{Bc.get(e)===i&&Bc.delete(e)};return i.then(r,r),i}function _c(e,t,i,r,a){const s=i?Math.max(.06,r/Math.max(1,a)):0;return i&&e{if(this.image===a&&t()){this.cancel();try{i(a)}catch(e){r(e)}}},a.onerror=()=>{this.image===a&&this.cancel()},a.src=e}}class Fc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}async update(e){const t=this.host.videoIterator;if(!t||!this.ready()||!this.current(e)||this.host.isFetching)return;const i={};this.fetching=i,this.host.isFetching=!0;const r=()=>this.current(e)&&this.host.videoIterator===t;try{for(;r();){const e=await Ec(t);if(!r()||!e)return;const i=this.host.audioClock?.currentTime;if(void 0===i)return;const a=_c(e.timestamp,i,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==a){if("draw"!==a)return void(this.host.nextFrame=e);this.draw(e)}}}catch(a){if(r())throw a}finally{this.fetching===i&&(this.fetching=null,this.host.isFetching=!1)}}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void vc(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(vc(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!S(this,o),e=>I(this,d,g).call(this,e,!0),e=>I(this,d,m).call(this,e)))}async preflight(e,t,i){return async function(e,t,i,r,a=()=>!0){if(r?.aborted||!a())return!1;if(!t||"string"!==typeof e||wc(e))return!0;try{const t=await fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if(r?.aborted||!a())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!(r?.aborted||!a())&&(console.warn("Preflight check failed:",s),!0)}}(e,this.preflightRange,this.events,t,i)}drawPoster(){if(S(this,n)||!this.poster||this.posterDrawn)return;const e=S(this,t);S(this,c).draw(this.poster,()=>I(this,d,h).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,I(this,d,f).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>I(this,d,m).call(this,e))}async stopIterator(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,await function(e){if(!e)return Promise.resolve();const t=Cc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return Cc.set(e,i),i}(e)}clear(){I(this,d,f).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){x(this,t)._++,x(this,i)._++,this.stop(),I(this,d,p).call(this),S(this,c).cancel(),P(this,o,!1),P(this,r,null),P(this,a,null),P(this,s,null),this.videoSink=null,this.input=null}async load(e,a){if(S(this,n))return;this.cancelPending();const s=S(this,t),c=S(this,i);P(this,o,!0);const l=Promise.resolve().then(()=>I(this,d,k).call(this,e,s,c,a));P(this,r,l);try{await l}finally{S(this,r)===l&&P(this,r,null)}}handleNoVideoTrack(){S(this,n)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}async resetIterator(e){if(S(this,n))return;const a=S(this,t),s=++x(this,i)._,l=S(this,r);this.stop(),S(this,c).cancel(),P(this,o,!0);try{l&&await l,await I(this,d,y).call(this,e,a,s)}catch(u){if(I(this,d,h).call(this,a)&&S(this,i)===s)throw I(this,d,p).call(this),u}finally{I(this,d,h).call(this,a)&&S(this,i)===s&&P(this,o,!1)}}async updateNextFrame(e){await S(this,l).update(e)}render(){S(this,l).render()}start(e){S(this,l).start(e)}stop(){S(this,l).stop()}async seek(e){await this.resetIterator(e)}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){S(this,n)||(P(this,n,!0),x(this,t)._++,S(this,l).destroy(),S(this,c).cancel(),I(this,d,p).call(this),this.posterDrawn=!1,P(this,a,null),P(this,s,null),this.videoSink=null,this.input=null,this.audioClock=null)}}t=new WeakMap,i=new WeakMap,r=new WeakMap,a=new WeakMap,s=new WeakMap,n=new WeakMap,o=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,d=new WeakSet,h=function(e){return!S(this,n)&&S(this,t)===e},f=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},m=function(e){S(this,n)||(I(this,d,p).call(this),S(this,u)?S(this,u).call(this,e):this.events.emit("error",e))},p=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},g=function(e,t){S(this,c).cancel(),t&&this.clear(),I(this,d,f).call(this).drawImage(e.canvas,0,0)},k=async function(e,t,r,s){if(I(this,d,h).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:i,videoTrack:n,duration:o}=e;if(this.input=i,this.duration=o,!n)return this.handleNoVideoTrack(),void s?.();const c=null!==n.codec&&await n.canDecode();if(!I(this,d,h).call(this,t))return;if(!c)return this.handleNoVideoTrack(),void s?.();const l=await n.canBeTransparent();if(!I(this,d,h).call(this,t))return;P(this,a,()=>new go(n,{poolSize:2,fit:"contain",alpha:l})),this.videoSink=S(this,a).call(this),this.width=n.displayWidth,this.height=n.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,s?.(),I(this,d,h).call(this,t)&&await I(this,d,y).call(this,0,t,r)}catch(n){if(I(this,d,h).call(this,t))throw I(this,d,p).call(this),n}finally{I(this,d,h).call(this,t)&&S(this,i)===r&&P(this,o,!1)}},y=async function(e,t,r){if(!I(this,d,h).call(this,t)||S(this,i)!==r)return;I(this,d,p).call(this),S(this,a)&&this.videoSink===S(this,s)&&(this.videoSink=S(this,a).call(this));const n=this.videoSink;if(!n||!I(this,d,h).call(this,t))return;P(this,s,n);const o=n.canvases(e);this.videoIterator=o;const c=()=>I(this,d,h).call(this,t)&&S(this,i)===r&&this.videoIterator===o,l=await Ec(o);if(!c())return;const u=await Ec(o);c()&&(this.nextFrame=u,l?I(this,d,g).call(this,l,!1):this.drawPoster())};class Dc{constructor({canvas:e,ctx:t,events:i,option:r={}}){v(this,b),this.events=i,this.option=r,this.audio=new kc(i),this.video=new Ac({canvas:e,ctx:t,events:i,timeupdateInterval:r.timeupdateInterval??250,avSyncTolerance:r.avSyncTolerance??.12,dropLateFrames:r.dropLateFrames??!1,poster:r.poster??"",preflightRange:r.preflightRange??!1,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,P(this,b,new xc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,S(this,b).ended())})}async load(e){if(this.destroyed)return;const t=++this.loadSeq;if(S(this,b).invalidate(),this.video.cancelPending(),this.loadSession?.cancel(),t!==this.loadSeq||this.destroyed)return;if(this.pause(),t!==this.loadSeq||this.destroyed)return;this.disposeInput();const i=new Sc;this.loadSession=i,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,i.defer(()=>this.events.emit("waiting")),i.defer(()=>this.events.emit("loadstart"));const r=Number.isFinite(this.option.loadTimeout)?this.option.loadTimeout??0:0;try{await i.wait(this.performLoad(e,t,i),r)}catch(a){if(t!==this.loadSeq)return;const e=++this.loadSeq;if(S(this,b).invalidate(),this.video.cancelPending(),i.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}}async performLoad(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(await this.video.preflight(e,i.signal,r))||!r())return;const a=Tc(e);if(!a)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(a);const s=await async function(e,t){const i=await e.getPrimaryVideoTrack(),r=i?await i.getPrimaryPairableAudioTrack():await e.getPrimaryAudioTrack(),a=await Pc({input:e,videoTrack:i,audioTrack:r}),s=i||r,n=wc(t);return{input:e,videoTrack:i,audioTrack:r,duration:a,isLive:!Number.isFinite(a)&&Boolean(s&&await s.isLive()),isHls:n,videoMode:n?"auto":"manual",audioMode:n?"auto":"manual"}}(a,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=a,this.media=s;const n=function(e,t){let i=!1,r=!1,a=!1;function s(s){t()&&!a&&("video"===s?i=!0:r=!0,i&&r&&(a=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,vc(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,n.video),t=r()?this.audio.load(s,n.audio):Promise.resolve();if(await Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,vc(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){this.loadSession?.disposeInput(),this.input=null,this.media=null}async replaceTracks(e){if(this.media&&!this.destroyed)return S(this,b).replace({...this.media,...e},this.currentTime)}async selectHlsQuality(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getVideoTracks();if(!s())return;const a="auto"===t?await i.getPrimaryVideoTrack():e.find(e=>e.id===t)??r.videoTrack;if(!s()||!a)return;let o=r.audioTrack,c=r.audioMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableAudioTrack(),c="auto"),n={videoTrack:a,audioTrack:o,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async selectHlsAudio(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getAudioTracks();if(!s())return;const a="auto"===t?r.videoTrack?await r.videoTrack.getPrimaryPairableAudioTrack():await i.getPrimaryAudioTrack():e.find(e=>e.id===t)??r.audioTrack;if(!s()||!a)return;let o=r.videoTrack,c=r.videoMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableVideoTrack(),c="auto"),n={videoTrack:o,audioTrack:a,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async getHlsState(){const e=this.media;if(this.destroyed)return null;try{const t=await async function(e){if(!e?.isHls||!e.input)return null;const[t,i]=await Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[r,a]=await Promise.all([Promise.all(t.map(async(e,t)=>({id:e.id,track:e,index:t,name:await e.getName(),height:await e.getDisplayHeight(),bitrate:await yc(e)}))),Promise.all(i.map(async(e,t)=>{const i=await e.getName(),r=await e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:await yc(e)}}))]);return{levels:r,audios:a,currentLevel:e.videoTrack?r.find(t=>t.id===e.videoTrack?.id)??null:null,currentAudio:e.audioTrack?a.find(t=>t.id===e.audioTrack?.id)??null:null,videoMode:e.videoMode??"auto",audioMode:e.audioMode??"auto"}}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}}async play(){return S(this,b).play()}pause(){S(this,b).pause()}async seek(e){return S(this,b).seek(e)}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,S(this,b).invalidate();const e=[];for(const i of[()=>this.loadSession?.cancel(),()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){return this.media?.duration??this.audio.duration??this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}b=new WeakMap;const Mc=new WeakMap;function Nc(e){let t=Mc.get(e);return t||(t={closed:!1,frames:new Set},Mc.set(e,t)),t}class Oc{constructor({art:e,canvas:t,ctx:i,option:r}){this.art=e,this.canvas=t,this.option=r,this.events=new B,this.engine=new Dc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=r.volume??.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:e.option?.url&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=Nc(e);if(i.closed)return 0;const r=requestAnimationFrame(a=>{i.frames.delete(r),i.closed||t(a,{presentationTime:e.engine.currentTime,expectedDisplayTime:a+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:a,receiveTime:a,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){Nc(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=Nc(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,a=r("canvas"),s=a.getContext("2d"),n=new Oc({art:t,canvas:a,ctx:s,option:e});t.mediabunny=n;const o={};for(const e in a)"function"===typeof a[e]&&(o[e]=a[e].bind(a));const c=new Set([...Object.getOwnPropertyNames(n),...Object.getOwnPropertyNames(Object.getPrototypeOf(n))]);for(const e of c)"constructor"!==e&&(e in a||Object.defineProperty(a,e,{get(){const t=n[e];return"function"===typeof t?t.bind(n):t},set(t){n[e]=t},configurable:!0,enumerable:!0}));for(const e in o)a[e]=(...t)=>o[e](...t);function l(){const e=t.template?.$player;e&&!t.option.autoSize&&Object.assign(a.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",l),t.on("video:loadedmetadata",l),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function a(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),a("mediabunny-quality")}function n(){r("mediabunny-audio"),a("mediabunny-audio")}function o(e={}){return e.control||e.setting}async function c(r){const a=i.m3u8?.quality||{};if(!o(a)||!r?.levels.length)return void s();const n=a.auto||"Auto",c=a.title||"Quality",l=a.getName||(e=>e.name||`${e.height}P`),d=r.currentLevel?l(r.currentLevel):n,h=C(r.levels.map(e=>({html:l(e),value:e.id,default:r.currentLevel?.id===e.id})),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),a=r.levels.find(e=>e.id===t.value);return(a?.height||0)-(i?.height||0)});h.push({html:n,value:"auto",default:!r.currentLevel});const f=async i=>(await t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:d,style:{padding:"0 10px"},selector:h,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:d,html:c,icon:'',width:200,selector:h,onSelect:f})}async function l(r){const a=i.m3u8?.audio||{};if(!o(a)||!r?.audios.length||r.audios.length<2)return void n();const s=a.auto||"Auto",c=a.title||"Audio",l=a.getName||(e=>e.name||e.lang||e.language),d=r.currentAudio?l(r.currentAudio):s,h=C(r.audios.map(e=>({html:l(e),value:e.id,default:r.currentAudio?.id===e.id})),"html");h.push({html:s,value:"auto",default:!r.currentAudio});const f=async i=>(await t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:d,style:{padding:"0 10px"},selector:h,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-audio",tooltip:d,html:c,icon:'',width:200,selector:h,onSelect:f})}async function u(){const e=await t.getM3u8State();if(!e)return s(),void n();await Promise.all([c(e),l(e)])}}({art:t,shim:n,option:e}),t.on("destroy",()=>{delete t.mediabunny,n.destroy()}),a}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,a,s,n,o,c,l,u,h,d,f,m,p,g,k,y,b,w,T,S,v,P,I,x,C,B,E,_,R,F,A=e=>{throw TypeError(e)},M=(e,t,i)=>t.has(e)||A("Cannot "+i),D=(e,t,i)=>(M(e,t,"read from private field"),i?i.call(e):t.get(e)),N=(e,t,i)=>t.has(e)?A("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),O=(e,t,i,r)=>(M(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),z=(e,t,i)=>(M(e,t,"access private method"),i),L=(e,t,i,r)=>({set _(r){O(e,t,r,i)},get _(){return D(e,t,r)}});function U(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class q{constructor(){N(this,e,!1),this.listeners=new Map}addEventListener(t,i){D(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),this.listeners.get(t)?.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){if(D(this,e))return;const r=Object.assign(new Event(t),{detail:i});this.listeners.get(t)?.forEach(t=>{D(this,e)||t(r)})}destroy(){O(this,e,!0),this.listeners.clear()}}function W(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const H=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},V=e=>e&&e[e.length-1],j=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-2**r)},X=e=>{const t=j(e);return 0===(1&t)?-(t>>1):t+1>>1},$=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),G=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Q=new TextDecoder,Y=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),J={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Z=Y(J),ee={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},te=Y(ee),ie={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},re=Y(ie),ae=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,se={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},ne=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class oe{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,await i,e}}const ce=/^[0-9a-fA-F]+$/,le=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),ue=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,he=(e,t,i)=>{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+a>>1,o=i(e[n]);o===t?(s=n,a=n-1):o{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+(a-r+1)/2|0;i(e[n])<=t?(s=n,r=n+1):a=n-1}return s},fe=(e,t,i)=>{const r=de(e,i(t),i);e.splice(r+1,0,t)},me=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},pe=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},ge=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},ke=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},ye=e=>{throw new Error(`Unexpected value: ${e}`)},be=(e,t,i)=>{const r=e.getUint8(t),a=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|a<<8|s<<16:r<<16|a<<8|s},we=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Te=(e,t)=>({async next(){const i=await e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),Se=(e,t,i)=>Math.max(t,Math.min(i,e)),ve="und",Pe=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},Ie=(e,t)=>Math.round(e/t)*t,xe=(e,t)=>Math.round(e*t)/t,Ce=(e,t)=>Math.floor(e/t)*t,Be=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},Ee=/^[a-z]{3}$/,_e=e=>Ee.test(e),Re=1e6*(1+Number.EPSILON),Fe=(e,t)=>{const i={...e,...t};if(e.headers||t.headers){const r=e.headers?Ae(e.headers):{},a=t.headers?Ae(t.headers):{},s={...r};Object.entries(a).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ae=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Me=async(e,t,i,r,a)=>{let s=0;for(;;)try{return await e(t,i)}catch(n){if(a())throw n;s++;const e=r(s,n,t);if(null===e)throw n;if(st._error("Retrying failed fetch. Error:",n),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&await tt(1e3*e),a())throw n}};class De{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Ne=null;const Oe=()=>null!==Ne?Ne:Ne=!("undefined"===typeof navigator||!(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)));let ze=null;const Le=()=>null!==ze?ze:ze="undefined"!==typeof navigator&&navigator.userAgent?.includes("Firefox");let Ue=null;const qe=()=>null!==Ue?Ue:Ue=!("undefined"===typeof navigator||!navigator.vendor?.includes("Google Inc")&&!/Chrome/.test(navigator.userAgent)),We=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,He=(async()=>{})().constructor,Ve=e=>e instanceof He||e instanceof Promise||"function"===typeof e?.then,je=(e,t)=>-1!==e?e:t,Ke=(e,t,i,r)=>e<=r&&i<=t,Xe=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{Symbol.dispose??(Symbol.dispose=Symbol("Symbol.dispose"))},Ge=e=>"number"===typeof e&&!Number.isNaN(e),Qe=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const a=e.indexOf("/",r+3);i=-1===a?e+t:e.slice(0,a)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const a=i.indexOf("://");if(-1!==a){const e=i.indexOf("/",a+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),n=[];for(const o of s)".."===o?n.pop():"."!==o&&n.push(o);return r+n.join("/")},Ye=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let a=0;a{W(Number.isInteger(e.num)),W(Number.isInteger(e.den)),W(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},et=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},tt=e=>new Promise(t=>setTimeout(t,e));class it{constructor(){this._listeners=new Map}on(e,t,i){this._listeners.has(e)||this._listeners.set(e,new Set);const r={fn:t,once:i?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(a){console.error(a)}s.once&&r.delete(s)}}}var rt,at;(at=rt||(rt={}))[at.Silent=0]="Silent",at[at.Errors=1]="Errors",at[at.Warnings=2]="Warnings",at[at.Info=3]="Info";class st{constructor(){}static get level(){return st._level}static set level(e){if(e!==rt.Silent&&e!==rt.Errors&&e!==rt.Warnings&&e!==rt.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");st._level=e}static get _emitter(){return st._emitterInstance??(st._emitterInstance=new it)}static on(e,t,i){return st._emitter.on(e,t,i)}static _error(...e){st._emitter._emit("error",e),st._level>=rt.Errors&&console.error(...e)}static _warn(...e){st._emitter._emit("warn",e),st._level>=rt.Warnings&&console.warn(...e)}static _info(...e){st._emitter._emit("info",e),st._level>=rt.Info&&console.info(...e)}}st._level=rt.Info,st._emitterInstance=null;class nt{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class ot{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const ct={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class lt{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),t=this.bytes[e]??0,i=7-(7&this.pos),r=(t&1<>i;return this.pos++,r}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new lt(this.bytes);return e.pos=this.pos,e}}const ut=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ht=[-1,1,2,3,4,5,6,8],dt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new lt(e),i=ft(t),{frequencyIndex:r,sampleRate:a}=mt(t),s=t.readBits(4);let n=null;s>=1&&s<=7&&(n=ht[s]);let o=i,c=!1,l=a;if(5===i||29===i)c=29===i,l=mt(t).sampleRate,o=ft(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===ft(t)&&t.readBits(1)&&(l=mt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(c=!!t.readBits(1)));break}t.pos=e+1}return null!==n&&n>1&&(c=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:c&&1===n?2:n}},ft=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},mt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let a=0;t+3i&&(yield{offset:i,length:t-i}),i=t+a,t=i):t++}-1!==i&&i{if(t.description){const i=3&$(t.description)[4];return St(e,i+1)}return Tt(e)},Pt=e=>31&e,It=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+xt.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const a of e)i.set(xt,r),r+=xt.byteLength,i.set(a,r),r+=a.byteLength;return i},Bt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let a=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(a,s.byteLength);break;case 2:e.setUint16(a,s.byteLength,!1);break;case 3:we(e,a,s.byteLength);break;case 4:e.setUint32(a,s.byteLength,!1)}a+=t,r.set(s,a),a+=s.byteLength}return r},Et=e=>{try{const t=[],i=[],r=[];for(const o of Tt(e)){const a=e.subarray(o.offset,o.offset+o.length),s=Pt(a[0]);s===kt.SPS?t.push(a):s===kt.PPS?i.push(a):s===kt.SPS_EXT&&r.push(a)}if(0===t.length)return null;if(0===i.length)return null;const a=t[0],s=At(a);W(null!==s);const n=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:n?s.chromaFormatIdc:null,bitDepthLumaMinus8:n?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:n?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:n?r:null}}catch(t){return st._error("Error building AVC Decoder Configuration Record:",t),null}},_t=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=G(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=t.getUint8(i++),n=t.getUint8(i++),o=3&t.getUint8(i++),c=31&t.getUint8(i++),l=[];for(let f=0;f{try{const t=It(e),i=new lt(t);i.skipBits(1),i.skipBits(2);if(7!==i.readBits(5))return null;const r=i.readAlignedByte(),a=i.readAlignedByte(),s=i.readAlignedByte();j(i);let n=1,o=0,c=0,l=0;if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=j(i),3===n&&(l=i.readBits(1)),o=j(i),c=j(i),i.skipBits(1);if(i.readBits(1))for(let e=0;e<(3!==n?8:12);e++){if(i.readBits(1)){const t=e<6?16:64;let r=8,a=8;for(let e=0;ee.level>=s)??V(_i),r=Math.min(Math.floor(i.maxDpbMbs/(e*t)),16);v=r,P=r}else v=0,P=0}return W(null!==P),{emulationUnpreventedBytes:t,profileIdc:r,constraintFlags:a,levelIdc:s,frameMbsOnlyFlag:k,chromaFormatIdc:n,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:m,displayWidth:p,displayHeight:g,pixelAspectRatio:S,colourPrimaries:y,matrixCoefficients:w,transferCharacteristics:b,fullRangeFlag:T,numReorderFrames:v,maxDecFrameBuffering:P,vuiParametersFlagBitOffset:C,bitstreamRestrictionFlagBitOffset:I,bitstreamRestrictionFlag:x}}catch(t){return st._error("Error parsing AVC SPS:",t),null}},Mt=e=>{const t=j(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)j(e),j(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Dt=e=>{W(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new lt(e.emulationUnpreventedBytes),r=new lt(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(W(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),K(r,2),K(r,1),K(r,16),K(r,16),K(r,e.numReorderFrames),K(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const a=r.pos/8;return W(Number.isInteger(a)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,a))},Nt=(e,t)=>{if(t.description){const i=3&$(t.description)[21];return St(e,i+1)}return Tt(e)},Ot=e=>e>>1&63,zt=e=>{try{const t=new lt(It(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:a,general_tier_flag:s,general_profile_idc:n,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:l}=Ut(t,i);j(t);const u=j(t);let h=0;3===u&&(h=t.readBits(1));const d=j(t),f=j(t);let m=d,p=f;if(t.readBits(1)){const e=j(t),i=j(t),r=j(t),a=j(t);let s=1,n=1;const o=0===h?u:0;1===o?(s=2,n=2):2===o&&(s=2,n=1),m-=(e+i)*s,p-=(r+a)*n}const g=j(t),k=j(t);j(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)j(t),b=j(t),j(t);j(t),j(t),j(t),j(t),j(t),j(t),t.readBits(1)&&t.readBits(1)&&qt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),j(t),j(t),t.skipBits(1));const w=j(t);if(Wt(t,w),t.readBits(1)){const e=j(t);for(let i=0;i{try{const t=[],i=[],r=[],a=[];for(const c of Tt(e)){const s=e.subarray(c.offset,c.offset+c.length),n=Ot(s[0]);n===bt.VPS_NUT?t.push(s):n===bt.SPS_NUT?i.push(s):n===bt.PPS_NUT?r.push(s):n!==bt.PREFIX_SEI_NUT&&n!==bt.SUFFIX_SEI_NUT||a.push(s)}if(0===i.length||0===r.length)return null;const s=zt(i[0]);if(!s)return null;let n=0;if(r.length>0){const e=r[0],t=new lt(It(e));t.skipBits(16),j(t),j(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),j(t),j(t),X(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&j(t),X(t),X(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),a=t.readBits(1);n=i||a?i&&!a?2:!i&&a?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:bt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:bt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:bt.PPS_NUT,nalUnits:r}]:[],...a.length?[{arrayCompleteness:1,nalUnitType:Ot(a[0][0]),nalUnits:a}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:n,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return st._error("Error building HEVC Decoder Configuration Record:",t),null}},Ut=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),a=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const n=new Uint8Array(6);for(let u=0;u<6;u++)n[u]=e.readBits(8);const o=e.readBits(8),c=[],l=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&X(e);for(let t=0;t{const i=[];for(let r=0;r{let a=0,s=0,n=0;if(0!==t&&(s=e.readBits(1)),s){if(t===i){n=t-(j(e)+1)}else n=t-1;e.readBits(1),j(e);const s=r[n]??0;for(let t=0;t<=s;t++){e.readBits(1)||e.readBits(1)}a=r[n]}else{const t=j(e),i=j(e);for(let r=0;r{let i=2,r=2,a=2,s=0,n=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=Ft[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),a=e.readBits(8))),e.readBits(1)&&(j(e),j(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(j(e),j(e),j(e),j(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&j(e),e.readBits(1)&&jt(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),n=j(e),j(e),j(e),j(e),j(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:a,fullRangeFlag:s,minSpatialSegmentationIdc:n}},jt=(e,t,i)=>{let r=!1,a=!1,s=!1;r=1===e.readBits(1),a=1===e.readBits(1),(r||a)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let n=0;n<=i;n++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?j(e):i=1===e.readBits(1);let n=1;if(!i){n=j(e)+1}r&&Kt(e,n,s),a&&Kt(e,n,s)}},Kt=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Xt.audAllowed;for(const s of Nt(e,t)){if(r===Xt.noMoreDataAllowed){i.add(s.offset);continue}const t=Ot(e[s.offset]);if(r===Xt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let a=!1;35===t?r>Xt.audAllowed?a=!0:r=Xt.beforeFirstVcl:t<=31?r>Xt.afterFirstVcl?a=!0:r=Xt.afterFirstVcl:36===t?r!==Xt.afterFirstVcl?a=!0:r=Xt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Xt.beforeFirstVcl?a=!0:r=Xt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&$(t.description)[21];return Bt(e,i+1)}return Ct(e)})(a,t)},Qt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},Yt=e=>{const t=new lt(e);if(2!==t.readBits(2))return null;const i=t.readBits(1),r=(t.readBits(1)<<1)+i;3===r&&t.skipBits(1);if(1===t.readBits(1))return null;if(0!==t.readBits(1))return null;t.skipBits(2);if(4817730!==t.readBits(24))return null;let a=8;if(r>=2){a=t.readBits(1)?12:10}const s=t.readBits(3);let n=0,o=0;if(7!==s){if(o=t.readBits(1),1===r||3===r){const e=t.readBits(1),i=t.readBits(1);n=e||i?e&&!i?2:1:3,t.skipBits(1)}else n=1}else n=3,o=1;const c=(t.readBits(16)+1)*(t.readBits(16)+1);let l=V(Ri).level;for(const h of Ri)if(c<=h.maxPictureSize){l=h.level;break}const u=Qt[s];return{profile:r,level:l,bitDepth:a,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:u?.colourPrimaries??2,transferCharacteristics:u?.transferCharacteristics??2,matrixCoefficients:u?.matrixCoefficients??2}},Jt=function*(e){const t=new lt(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*2**(7*i),!(128&r))break;if(7===i&&128&r)return null}return e>2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),a=t.readBits(1),s=t.readBits(1);let n;if(t.skipBits(1),a&&t.skipBits(8),s){const e=i();if(null===e)return;n=e}else n=Math.floor(t.getBitsLeft()/8);W(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+n)},t.skipBits(8*n)}},Zt=e=>{for(const{type:t,data:i}of Jt(e)){if(1!==t)continue;const e=new lt(i),r=e.readBits(3);e.readBits(1);const a=e.readBits(1);let s=0,n=0,o=0;if(a)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let a=0;a<=r;a++){e.skipBits(12);const r=e.readBits(5);if(0===a&&(s=r),r>7){const t=e.readBits(1);0===a&&(n=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);const h=l+1;e.skipBits(h);let d=0;if(d=a?0:e.readBits(1),d&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!a){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,w=1,T=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,w=0,T=0):(b=e.readBits(1),0===r?(w=1,T=1):1===r?(w=0,T=0):12===m?(w=e.readBits(1),T=w?e.readBits(1):0):(w=1,T=0),w&&T&&(S=e.readBits(2))),{profile:r,level:s,tier:n,bitDepth:m,monochrome:p,chromaSubsamplingX:w,chromaSubsamplingY:T,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},ei=e=>{if(e.length<36)return null;const t=G(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ti=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],ii=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){a=r.pos;break}if(0===a)throw new Error("Invalid Setup header: framing bit not found.");let s=0,n=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),a=r.readBits(16);if(t>63||0!==i||0!==a){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(n=!0,o=s)}if(!n)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const c=o;r.pos=0,r.skipBits(a);const l=Array(c).fill(0);for(let u=c-1;u>=0;u--)r.skipBits(40),l[u]=r.readBits(1);return{modeBlockflags:l}},ri=(e,t,i)=>{switch(e){case"avc":for(const e of vt(i,t)){const t=i[e.offset],r=Pt(t);if(r>=kt.NON_IDR_SLICE&&r<=kt.SLICE_DPC)return"delta";if(r===kt.IDR)return"key";if(r===kt.SEI&&!qe()){const t=i.subarray(e.offset,e.offset+e.length),r=It(t);let a=1;do{let e=0;for(;;){const t=r[a++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[a++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new lt(r);e.pos=8*a;const t=j(e),i=e.readBits(1);if(0===t&&1===i)return"key"}a+=t}while(a{var i,r;const a=G(e);let s=0;const n=a.getUint32(s,!0);s+=4;const o=Q.decode(e.subarray(s,s+n));s+=n,n>0&&(t.raw??(t.raw={}),(i=t.raw).vendor??(i.vendor=o));const c=a.getUint32(s,!0);s+=4;for(let l=0;l0&&(t.trackNumber??(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=l.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(t.discNumber??(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.discsTotal??(t.discsTotal=e))}break;case"DATE":{const e=new Date(l);Number.isNaN(e.getTime())||(t.date??(t.date=e))}break;case"GENRE":t.genre??(t.genre=l);break;case"METADATA_BLOCK_PICTURE":{const e=Xe(l),i=G(e),r=i.getUint32(0,!1),a=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+a)),n=i.getUint32(8+a,!1),o=Q.decode(e.subarray(12+a,12+a+n)),c=i.getUint32(a+n+28),u=e.subarray(a+n+32,a+n+32+c);t.images??(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},oi=[2,1,2,3,3,4,4,5],ci=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new lt(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),a=t.readBits(5);if(a>8)return null;const s=t.readBits(3),n=t.readBits(3);0!==(1&n)&&1!==n&&t.skipBits(2),0!==(4&n)&&t.skipBits(2),2===n&&t.skipBits(2);return{fscod:i,bsid:a,bsmod:s,acmod:n,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},li=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],ui=[1,2,3,6],hi=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new lt(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),a=t.readBits(2);let s,n=0;3===a?(n=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;const u=ui[s];let h;h=a<3?pt[a]/1e3:gt[n]/1e3;return{dataRate:Math.round((r+1)*h/(16*u)),substreams:[{fscod:a,fscod2:n,bsid:l,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},di=e=>{const t=e.substreams[0];return W(t),t.fscod<3?pt[t.fscod]:null!==t.fscod2&&t.fscod2<3?gt[t.fscod2]:null},fi=e=>{const t=e.substreams[0];W(t);let i=oi[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},mi=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],pi=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],gi=[16,16,20,20,0,24,24,0],ki=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],yi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],bi=[32e3,44100,48e3,0],wi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Ti=[512,1024,2048,4096],Si=e=>{const t=Pi(e),i=G(e);let r=t?4*Math.ceil(t.frameSize/4):0,a=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=Ii(e.subarray(r));if(!t)break;a??(a=t),r+=t.frameSize}if(t)return{frameSize:a?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==a};if(!a?.asset)return null;const{asset:s}=a;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},vi=e=>{const t=Si(e);return t?.core?t.hasExtensions?"dtsh":"dtsc":null},Pi=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new lt(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const a=t.readBits(14)+1;if(a<96)return null;const s=t.readBits(6);if(s>=ki.length)return null;const n=mi[t.readBits(4)];if(0===n)return null;const o=pi[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const c=t.readBits(2);if(3===c)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const l=gi[t.readBits(3)];if(0===l)return null;const u=0!==c;return{frameSize:a,sampleRate:n,numberOfChannels:ki[s]+(u?1:0),sampleCount:32*r,channelLayout:yi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:l}},Ii=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new lt(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),a=8+4*r,s=16+4*r;t.skipBits(a);const n=t.readBits(s)+1,o={frameSize:n,asset:null};if(!t.readBits(1))return o;const c=bi[t.readBits(2)],l=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,h=t.readBits(3)+1,d=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===c||t.getBitsLeft()<0?o:{frameSize:n,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(l*m/c),channelLayout:g,pcmResolution:f}}},xi=e=>Be(e)+Be(44646&e),Ci=["avc","hevc","vp9","av1","vp8","prores"],Bi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Ei=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Bi],_i=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Ri=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],Fi=".01.01.01.01.00",Ai=".0.110.01.01.01.0",Mi=["ap4x","ap4h","apch","apcn","apcs","apco"],Di=["dtsc","dtsh","dtsl","dtse"],Ni=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:a,hevcCodecInfo:s,vp9CodecInfo:n,av1CodecInfo:o,proresFormat:c}=e;if("avc"===t){if(W(null!==e.avcType),a){const t=new Uint8Array([a.avcProfileIndication,a.profileCompatibility,a.avcLevelIndication]);return`avc${e.avcType}.${le(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${le(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,a,n,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=ue(s.generalProfileCompatibilityFlags),a=s.generalTierFlag,n=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=G(i),c=s.getUint8(1);e=c>>6&3,t=31&c,r=ue(s.getUint32(2)),a=c>>5&1,n=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let c="hev1.";for(c+=["","A","B","C"][e]+t,c+=".",c+=r.toString(16).toUpperCase(),c+=".",c+=0===a?"L":"H",c+=n;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(c+=".",c+=o.map(e=>e.toString(16).toUpperCase()).join(".")),c}if("vp8"===t)return"vp8";if("vp9"===t){if(!n){const t=e.width*e.height;let i=V(Ri).level;for(const e of Ri)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${n.profile.toString().padStart(2,"0")}.${n.level.toString().padStart(2,"0")}.${n.bitDepth.toString().padStart(2,"0")}.${n.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${n.colourPrimaries.toString().padStart(2,"0")}.${n.transferCharacteristics.toString().padStart(2,"0")}.${n.matrixCoefficients.toString().padStart(2,"0")}.${n.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(Fi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=V(Ri).level;for(const e of Ri)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),a=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),n=o.monochrome?"1":"0",c=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),l=r?.primaries?J[r.primaries]:1,u=r?.transfer?ee[r.transfer]:1,h=r?.matrix?ie[r.matrix]:1,d=r?.fullRange?1:0;let f=`av01.${t}.${i}${a}.${s}`;return f+=`.${n}.${c.toString().padStart(3,"0")}`,f+=`.${l.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${h.toString().padStart(2,"0")}`,f+=`.${d}`,f.endsWith(Ai)&&(f=f.slice(0,-17)),f}if("prores"===t)return c??"apch";throw null!==t&&ye(t),new TypeError(`Unhandled codec '${t}'.`)},Oi=e=>{switch(e.codec){case"avc":{let t=e.avcCodecInfo?.sequenceParameterSets[0];if(!t&&e.codecDescription&&(t=Rt(e.codecDescription)?.sequenceParameterSets[0]),t){const e=At(t);if(e)return{primaries:Z[e.colourPrimaries],transfer:te[e.transferCharacteristics],matrix:re[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=e.hevcCodecInfo?.arrays.find(e=>e.nalUnitType===bt.SPS_NUT)?.nalUnits[0];if(!t&&e.codecDescription&&(t=(e=>{try{const t=G(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=a>>6&3,n=a>>5&1,o=31&a,c=t.getUint32(i,!1);i+=4;const l=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),h=(15&t.getUint8(i++))<<8|t.getUint8(i++),d=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,w=k>>2&1,T=3&k,S=t.getUint8(i++),v=[];for(let P=0;P>7&1,s=63&r,n=t.getUint16(i,!1);i+=2;const o=[];for(let c=0;ce.nalUnitType===bt.SPS_NUT)?.nalUnits[0]),t){const e=zt(t);if(e)return{primaries:Z[e.colourPrimaries],transfer:te[e.transferCharacteristics],matrix:re[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:Z[e.vp9CodecInfo.colourPrimaries],transfer:te[e.vp9CodecInfo.transferCharacteristics],matrix:re[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:Z[e.av1CodecInfo.colourPrimaries],transfer:te[e.av1CodecInfo.transferCharacteristics],matrix:re[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:Z[e.proresCodecInfo.colourPrimaries],transfer:te[e.proresCodecInfo.transferCharacteristics],matrix:re[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},zi=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:a}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=dt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return a??"dtsc";if(t&&Bi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},Li=48e3,Ui=/^pcm-([usf])(\d+)(be)?$/,qi=e=>{if(W(Bi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Ui.exec(e);let i;W(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?128:0}},Wi=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Mi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Di.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Ui.test(e)?e:"webvtt"===e?"webvtt":null,Hi=[44100,48e3,32e3],Vi=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],ji=1483304551,Ki=1231971951,Xi=(e,t)=>3===e?3===t?21:36:3===t?13:21,$i=(e,t)=>{const i=e>>>24,r=e>>>16&255,a=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==a&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let n=0,o=0;16&r?n=8&r?0:1:(n=1,o=1);const c=r>>3&3,l=r>>1&3,u=(a>>2&3)%3,h=s>>6&3,d=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Vi[16*n*4+16*l+(a>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=Hi[u]>>n+o,b=((e,t,i,r,a)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Qi,Yi;(Yi=Qi||(Qi={}))[Yi.FrameCount=1]="FrameCount",Yi[Yi.FileSize=2]="FileSize",Yi[Yi.Toc=4]="Toc";const Ji=e=>3===e?1:2;class Zi{constructor(e){this.input=e}dispose(){}}const er=new Uint8Array(0);class tr{constructor(e,t,i,r,a=-1,s,n){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=a,e===er&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(a))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==n&&("object"!==typeof n||!n))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==n?.alpha&&!(n.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==n?.alphaByteLength&&(!Number.isInteger(n.alphaByteLength)||n.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=n??{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===er}get microsecondTimestamp(){return Math.trunc(Re*this.timestamp)}get microsecondDuration(){return Math.trunc(Re*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const i=new Uint8Array(e.byteLength);return e.copyTo(i),new tr(i,e.type,e.timestamp/1e6,(e.duration??0)/1e6,void 0,void 0,t)}clone(e){if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==e?.data&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==e?.type&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==e?.timestamp&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==e?.duration&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==e?.sequenceNumber&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==e?.sideData&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new tr(e?.data??this.data,e?.type??this.type,e?.timestamp??this.timestamp,e?.duration??this.duration,e?.sequenceNumber??this.sequenceNumber,this.byteLength,e?.sideData??this.sideData)}}const ir=e=>{const t=G(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const a=le(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=oc(e);const i=gc(e,4);let r=8;1===t&&(t=hc(e),r=16);const a=t-r;return a<0?null:{name:i,totalSize:t,headerSize:r,contentSize:a}},sr=e=>lc(e)/65536,nr=e=>lc(e)/1073741824,or=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=tc(e);if(t|=127&i,0===(128&i))break}return t},cr=e=>{let t=rc(e);return e.skip(2),t=Math.min(t,e.remainingLength),Q.decode(ec(e,t))},lr=e=>{const t=ar(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=oc(e);e.skip(4);const r=ec(e,t.contentSize-8);switch(i){case 1:return Q.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new nt(r,"image/jpeg");case 14:return new nt(r,"image/png");case 27:return new nt(r,"image/bmp");default:return r}},ur=16,hr=new Uint32Array(256),dr=new Uint32Array(256),fr=new Uint32Array(256),mr=new Uint32Array(256),pr=new Uint32Array(256),gr=new Uint32Array(256),kr=new Uint32Array(10);let yr=!1;class br{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(ur/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(ur),this.out=new Uint8Array(ur),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){W(16===e.byteLength),W(16===t.byteLength),yr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,n=1;s<256;s++)i[s]=n,t[n]=s,n=n^n<<1^(128&n?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let a=r^r<<1^r<<2^r<<3^r<<4;a=a>>>8^255&a^99,e[s]=a}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);hr[s]=t<<24|t<<16|t<<8|t,gr[s]=i<<24|i<<16|i<<8|i;const a=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);dr[s]=a,fr[s]=a>>>8|a<<24,mr[s]=a>>>16|a<<16,pr[s]=a>>>24|a<<8}let a=1;for(let s=0;s<10;s++)kr[s]=a<<24,a=a<<1^(128&a?283:0);yr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let a=4;a<44;a+=4){const e=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^4278190080&hr[e>>>16&255]^16711680&hr[e>>>8&255]^65280&hr[e>>>0&255]^255&hr[e>>>24&255]^kr[a/4-1],this.roundkey[a+1]=this.roundkey[a-3]^this.roundkey[a],this.roundkey[a+2]=this.roundkey[a-2]^this.roundkey[a+1],this.roundkey[a+3]=this.roundkey[a-1]^this.roundkey[a+2]}for(let a=0,s=40;a>>24&255]]^fr[255&hr[t>>>16&255]]^mr[255&hr[t>>>8&255]]^pr[255&hr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const a=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),n=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let c,l,u,h;for(let g=1;g<10;g++){const a=4*g;c=dr[e>>>24]^fr[r>>>16&255]^mr[i>>>8&255]^pr[255&t]^this.roundkey[a],l=dr[t>>>24]^fr[e>>>16&255]^mr[r>>>8&255]^pr[255&i]^this.roundkey[a+1],u=dr[i>>>24]^fr[t>>>16&255]^mr[e>>>8&255]^pr[255&r]^this.roundkey[a+2],h=dr[r>>>24]^fr[i>>>16&255]^mr[t>>>8&255]^pr[255&e]^this.roundkey[a+3],e=c,t=l,i=u,r=h}const d=4278190080&gr[e>>>24&255]^16711680&gr[r>>>16&255]^65280&gr[i>>>8&255]^255&gr[t>>>0&255]^this.roundkey[40],f=4278190080&gr[t>>>24&255]^16711680&gr[e>>>16&255]^65280&gr[r>>>8&255]^255&gr[i>>>0&255]^this.roundkey[41],m=4278190080&gr[i>>>24&255]^16711680&gr[t>>>16&255]^65280&gr[e>>>8&255]^255&gr[r>>>0&255]^this.roundkey[42],p=4278190080&gr[r>>>24&255]^16711680&gr[i>>>16&255]^65280&gr[t>>>8&255]^255&gr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,d^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=a,this.iv[1]=s,this.iv[2]=n,this.iv[3]=o}}class wr extends Zi{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.tracks.map(e=>e.trackBacking)}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>"video"===e.info?.type),hasAudio:this.tracks.some(e=>"audio"===e.info?.type),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Ve(r)&&(r=await r),!r)break;const a=e,s=ar(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=gc(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Ve(e)&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>a+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');await this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=a+s.totalSize}if(!i&&this.input._initInput&&await this.copyMetadataFromInitInput(this.input._initInput),t){W(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Ve(e)&&(e=await e),W(e);const t=oc(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Ve(e)&&(e=await e),e){const t=ar(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Ve(i)&&(i=await i),i&&this.readContiguousBoxes(i)}}}}})())}async copyMetadataFromInitInput(e){const t=await e._getDemuxer();if(t.constructor!==wr)throw new Error("Init input must match the input's format.");await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const i of t.tracks){const e={id:i.id,demuxer:this,trackBacking:null,disposition:i.disposition,timescale:i.timescale,durationInMediaTimescale:i.durationInMediaTimescale,durationInMovieTimescale:i.durationInMovieTimescale,rotation:i.rotation,internalCodecId:i.internalCodecId,name:i.name,languageCode:i.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:i.editListPreviousSegmentDurations,editListOffset:i.editListOffset,encryptionInfo:i.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:i.info};if(i.trackBacking)if(W(e.info),"video"===e.info.type&&-1!==e.info.width){const t=e;e.trackBacking=new Sr(t),this.tracks.push(e)}else if("audio"===e.info.type&&-1!==e.info.numberOfChannels){const t=e;e.trackBacking=new vr(t),this.tracks.push(e)}}}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;const t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,null===e.sampleTableByteOffset)return t;W(this.moovSlice);const i=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(i),this.currentTrack=null;if("audio"===e.info?.type&&e.info.codec&&Bi.includes(e.info.codec)&&0===t.sampleCompositionTimeOffsets.length){W("audio"===e.info?.type);const i=qi(e.info.codec),r=[],a=[];for(let s=0;se.startIndex),u=t.sampleTimingEntries[l],h=de(t.sampleTimingEntries,c,e=>e.startIndex),d=t.sampleTimingEntries[h],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=d.startDecodeTimestamp+(c-d.startIndex)*d.delta-f,p=V(r);p&&p.delta===m?p.count++:r.push({startIndex:n.startChunkIndex+s,startDecodeTimestamp:f,count:1,delta:m});const g=n.samplesPerChunk*i.sampleSize*e.info.numberOfChannels;a.push(g)}n.startSampleIndex=n.startChunkIndex,n.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=a}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(const e of t.sampleTimingEntries)for(let i=0;ie.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===a.moofOffset);if(i)Br(s,i.timestamp);else{const e=de(t,a.moofOffset-1,e=>e.moofOffset);if(-1!==e){const i=t[e];Br(s,i.endTimestamp)}}s.startTimestampIsFinal=!0}const i=de(t,s.startTimestamp,e=>e.startTimestamp);if(-1!==i&&t[i].moofOffset===a.moofOffset||t.splice(i+1,0,{moofOffset:a.moofOffset,startTimestamp:s.startTimestamp,endTimestamp:s.endTimestamp}),s.encryptionAuxInfo&&e.encryptionInfo){const t=await Fr(this.reader,e.encryptionInfo,s.encryptionAuxInfo);for(let e=0;e0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;_e(t.languageCode)||(t.languageCode=ve)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=gc(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:{...se},avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=M,this.readContiguousBoxes(e.slice(N,D.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=tc(e);e.skip(3);const r=oc(e);for(let a=0;a0&&(1===n?(e.skip(4),c=8*oc(e),e.skip(8)):2===n&&(e.skip(4),l=pc(e),o=oc(e),e.skip(4),c=oc(e),u=oc(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+a.totalSize-e.filePos));const h="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===h);else if("opus"===h)t.info.codec="opus",t.info.sampleRate=Li;else if("flac"===h)t.info.codec="flac";else if("ulaw"===h)t.info.codec="ulaw";else if("alaw"===h)t.info.codec="alaw";else if("ac-3"===h)t.info.codec="ac3";else if("ec-3"===h)t.info.codec="eac3";else if(Di.includes(h))t.info.codec="dts",t.info.dtsFormat=h;else if("twos"===h)8===c?t.info.codec="pcm-s8":16===c?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(st._warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if("sowt"===h)8===c?t.info.codec="pcm-s8":16===c?t.info.codec="pcm-s16":(st._warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if("raw "===h)t.info.codec="pcm-u8";else if("in24"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===h){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(st._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(st._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===h){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(st._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(st._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===h&&null!==u){const e=c+7>>3,i=Boolean(1&u),r=Boolean(2&u),a=4&u?-1:0;c>0&&c<=64&&(i?32===c&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):a&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==tc(e),t.encryptionInfo.defaultPerSampleIvSize=tc(e),t.encryptionInfo.defaultKid=le(ec(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=tc(e),r=new Uint8Array(16);r.set(ec(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(W(t.info),0===D.contentSize)break;t.info.codecDescription=ec(e,D.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(W(t.info),0===D.contentSize)break;t.info.codecDescription=ec(e,D.contentSize)}break;case"vpcC":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type),e.skip(4);const i=tc(e),r=tc(e),a=tc(e),s=a>>4,n=a>>1&7,o=1&a,c=tc(e),l=tc(e),u=tc(e);t.info.vp9CodecInfo={profile:i,level:r,bitDepth:s,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case"av1C":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type),e.skip(1);const i=tc(e),r=i>>5,a=31&i,s=tc(e),n=s>>7,o=s>>6&1,c=s>>4&1,l=s>>3&1,u=s>>2&1,h=3&s,d=2===r&&o?s>>5&1?12:10:o?10:8;e.skip(1);const f=ec(e,D.contentSize-4),m=Zt(f);t.info.av1CodecInfo={profile:r,level:a,tier:n,bitDepth:d,monochrome:c,chromaSubsamplingX:l,chromaSubsamplingY:u,chromaSamplePosition:h,videoFullRangeFlag:m?.videoFullRangeFlag??0,colourPrimaries:m?.colourPrimaries??2,transferCharacteristics:m?.transferCharacteristics??2,matrixCoefficients:m?.matrixCoefficients??2}}break;case"colr":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type);const i=gc(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=rc(e),a=rc(e),s=rc(e);let n;"nclx"===i&&(n=Boolean(128&tc(e))),t.info.colorSpace={primaries:Z[r],transfer:te[a],matrix:re[s],fullRange:n}}break;case"pasp":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type);const i=oc(e),r=oc(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==t.info?.type)break;e.skip(4);W(3===tc(e)),or(e),e.skip(2);const i=tc(e),r=0!==(64&i),a=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=tc(e);e.skip(t)}a&&e.skip(2);W(4===tc(e));const s=or(e),n=e.filePos,o=tc(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":st._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-n){W(5===tc(e));const i=or(e);if(t.info.codecDescription=ec(e,i),"aac"===t.info.codec){const e=dt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),t.info.pcmLittleEndian=!!(255&rc(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(4);const i=tc(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=tc(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(1);const i=tc(e),r=rc(e),a=oc(e),s=sc(e),n=tc(e);let o;o=0!==n?ec(e,2+i):new Uint8Array(0);const c=new Uint8Array(19+o.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,i),l.setUint16(10,r,!0),l.setUint32(12,a,!0),l.setInt16(16,s,!0),l.setUint8(18,n),c.set(o,19),t.info.codecDescription=c,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(4);const i=127,r=128,a=e.filePos;for(;e.filePos>>12,a=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=a,e.skip(20)}else e.skip(s);if(a&r)break}const s=e.filePos;e.filePos=a;const n=ec(e,s-a),o=new Uint8Array(4+n.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(n,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=ec(e,3),r=new lt(i),a=r.readBits(2);r.skipBits(8);const s=r.readBits(3),n=r.readBits(1);a<3&&(t.info.sampleRate=pt[a]),t.info.numberOfChannels=oi[s]+n}break;case"dec3":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=(e=>{if(e.length<2)return null;const t=new lt(e),i=t.readBits(13),r=t.readBits(3),a=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),n=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let c=0;o>0?c=t.readBits(9):t.skipBits(1),a.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:n,numDepSub:o,chanLoc:c})}return 0===a.length?null:{dataRate:i,substreams:a}})(ec(e,D.contentSize));if(!i){st._warn("Invalid dec3 box contents, ignoring.");break}const r=di(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=fi(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=(e=>{if(e.length<20)return null;const t=G(e),i=t.getUint32(0);if(0===i)return null;const r=new lt(e);r.seekToByte(13);const a=r.readBits(2);r.skipBits(5);const s=r.readBits(1),n=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let c=null;return 0!==o?c=xi(o):ne.id===i);if(!r)break;const a=oc(e),s=(12&a)>>2,n=3&a,o=[tc,rc,ac,oc],c=o[(48&a)>>4],l=o[s],u=o[n],h=oc(e);for(let d=0;de.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let a=0;ae.id===l);if(!u)break;const h=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:h?.defaultSampleDescriptionIndex??null,defaultSampleDuration:h?.defaultSampleDuration??null,defaultSampleSize:h?.defaultSampleSize??null,defaultSampleFlags:h?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=hc(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=oc(e)),a&&(u.currentFragmentState.defaultSampleDuration=oc(e)),s&&(u.currentFragmentState.defaultSampleSize=oc(e)),n&&(u.currentFragmentState.defaultSampleFlags=oc(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;W(t.currentFragmentState);const i=tc(e);e.skip(3);const r=0===i?oc(e):hc(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;W(this.currentFragment),W(t.currentFragmentState);const i=tc(e),r=ac(e),a=Boolean(1&r),s=Boolean(4&r),n=Boolean(256&r),o=Boolean(512&r),c=Boolean(1024&r),l=Boolean(2048&r),u=oc(e);let h=null;a&&(h=lc(e));let d,f=null;s&&(f=oc(e)),this.currentFragment.trackData.has(t.id)?(d=this.currentFragment.trackData.get(t.id),null!==h&&(d.currentOffset=t.currentFragmentState.baseDataOffset+h)):(d={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(h??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,d));for(let m=0;m0&&(a=ec(e,r));const s=Rr(t);s.defaultSampleInfoSize=i,s.sampleSizes=a,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=tc(e);if(1&ac(e)){const i=gc(e,4),r=oc(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=oc(e);if(0===r)break;r>1&&st._warn("Multiple saio entries are not supported; using the first offset only.");let a=0===i?oc(e):Number(hc(e));this.currentFragment&&(a+=this.currentFragment.moofOffset);Rr(t).offset=a}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;W(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=ac(e),a=Boolean(2&r),s=oc(e),n=t.encryptionInfo.defaultPerSampleIvSize;W(null!==n);for(let o=0;o0?r.set(ec(e,n),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(a){const t=rc(e);s=[];for(let i=0;i0&&((B=this.metadataTags).trackNumber??(B.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((E=this.metadataTags).tracksTotal??(E.tracksTotal=i))}break;case"trkn":if(a instanceof Uint8Array&&a.length>=6){const e=G(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((_=this.metadataTags).trackNumber??(_.trackNumber=t)),i>0&&((R=this.metadataTags).tracksTotal??(R.tracksTotal=i))}break;case"disc":case"disk":if(a instanceof Uint8Array&&a.length>=6){const e=G(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((F=this.metadataTags).discNumber??(F.discNumber=t)),i>0&&((A=this.metadataTags).discsTotal??(A.discsTotal=i))}}}}}return e.filePos=O,!0}}class Tr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.internalTrack;if(e.durationInMediaTimescale<=0)return null;W(e.trackBacking);const t=await e.trackBacking.getFirstPacket({metadataOnly:!0});return(t?.timestamp??0)+e.durationInMediaTimescale/e.timescale}async getLiveRefreshInterval(){return null}async getFirstPacket(e){const t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return Pe(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=Pr(r,i),s=await this.fetchPacketForSampleIndex(a,t);return _r(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=de(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=ke(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return W(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=xr(i,e);if(!r)return null;let a;if(t.metadataOnly)a=er;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Ve(t)&&(t=await t),!t)return null;if(a=ec(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=await Fr(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),u=-1!==l?this.internalTrack.fragmentLookupTable[l]:null,h=de(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),d=-1!==h?this.internalTrack.fragmentPositionCache[h]:null,f=Math.max(u?.moofOffset??0,d?.moofOffset??0)||null;let m;for(e?null===f||e.moofOffset>=f?(m=e.moofOffset+e.moofSize,n=e):m=f:m=f??0;;){if(n){const e=n.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(m,8,16);if(Ve(e)&&(e=await e),!e)break;const i=m,l=ar(e);if(!l)break;if("moof"===l.name){n=await s.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(n);if(r)return this.fetchPacketInFragment(n,e,a);-1!==e&&(o=n,c=e)}m=i+l.totalSize}if(u&&(!o||o.moofOffset{var e,t,i,r,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=await this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&ei(e.data)}}else{const e=await this.getFirstPacket({}),t=e&&Zt(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const e=await this.getFirstPacket({}),t=e&&Yt(e.data);t&&(this.internalTrack.info.vp9CodecInfo={...this.internalTrack.info.vp9CodecInfo??t,videoFullRangeFlag:t.videoFullRangeFlag,colourPrimaries:t.colourPrimaries,transferCharacteristics:t.transferCharacteristics,matrixCoefficients:t.matrixCoefficients})}else{const e=await this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&Lt(e.data)}else{const e=await this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&Et(e.data)}if(!ae(this.internalTrack.info.colorSpace)){const a=Oi(this.internalTrack.info);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const s={codec:Ni(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(s.displayAspectWidth=this.internalTrack.info.squarePixelWidth,s.displayAspectHeight=this.internalTrack.info.squarePixelHeight),s})()):null}}class vr extends Tr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&vi(e.data)}return{codec:zi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const Pr=(e,t)=>{if(e.presentationTimestamps){const i=de(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=de(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Ir=(e,t)=>{if(!e.keySampleIndices)return Pr(e,t);if(e.presentationTimestamps){const i=de(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==he(e.keySampleIndices,i,e=>e))return i}return-1}{const i=Pr(e,t),r=de(e.keySampleIndices,i,e=>e);return e.keySampleIndices[r]??-1}},xr=(e,t)=>{const i=de(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=de(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),n=e.sampleCompositionTimeOffsets[s];n&&t-n.startIndexe.startSampleIndex),l=e.sampleToChunk[c];W(l);const u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),h=e.chunkOffsets[u],d=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk;let f=0,m=h;if(1===e.sampleSizes.length)m+=o*(t-d),f+=o*l.samplesPerChunk;else for(let g=d;ge)}},Cr=(e,t)=>{if(!e.keySampleIndices)return t+1;const i=de(e.keySampleIndices,t,e=>e);return e.keySampleIndices[i+1]??-1},Br=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},Er=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},_r=e=>0===e.sampleSizes.length,Rr=e=>{var t;return e.currentFragmentState?(t=e.currentFragmentState).encryptionAuxInfo??(t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}):e.encryptionAuxInfo??(e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null})},Fr=async(e,t,i)=>{if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{W(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[o],r=new Uint8Array(16);s>0?r.set(ec(a,s),0):r.set(t.defaultConstantIv,0);let c=null;if(e>s){const e=rc(a);c=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Mr=async(e,t,i,r)=>{W(e.encryptionInfo);const a=e.encryptionInfo;W(null!==a.defaultKid);const s=a.defaultKid;let n;const o=e.demuxer.decryptionKeyCache.get(s);if(o)n=await o;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(s));for(let e=0;e{W(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;i{const a=new Uint8Array(16);a.set(i.iv,0);const s=await crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),n=async e=>{const t=await crypto.subtle.decrypt({name:"AES-CTR",counter:a,length:64},s,e);return new Uint8Array(t)};if(!i.subsamples)return n(r);W(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Or(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let c=0;for(const m of o)for(const e of m.perSubsample)c+=e.length;const l=new Uint8Array(c);let u=0;for(const m of o)for(const e of m.perSubsample)l.set(r.subarray(e.offset,e.offset+e.length),u),u+=e.length;const h=await n(l),d=new Uint8Array(r);let f=0;for(const m of o)for(const e of m.perSubsample)d.set(h.subarray(f,f+e.length),e.offset),f+=e.length;return d},Nr=(e,t,i,r)=>{const a=new br;a.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,n=t.defaultSkipByteBlock;if(W(null!==s&&null!==n),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],a=0!==t||0!==i;let s=0;for(const n of e){s+=n.clearLen;const e=[];if(a){let r=n.protectedLen,a=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:a,length:s}),a+=s,r-=s;const n=Math.min(16*i,r);a+=n,r-=n}s+=n.protectedLen}else n.protectedLen>0&&e.push({offset:s,length:n.protectedLen}),s+=n.protectedLen;r.push({perSubsample:e})}return r};var zr,Lr;(Lr=zr||(zr={}))[Lr.EBML=440786851]="EBML",Lr[Lr.EBMLVersion=17030]="EBMLVersion",Lr[Lr.EBMLReadVersion=17143]="EBMLReadVersion",Lr[Lr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",Lr[Lr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",Lr[Lr.DocType=17026]="DocType",Lr[Lr.DocTypeVersion=17031]="DocTypeVersion",Lr[Lr.DocTypeReadVersion=17029]="DocTypeReadVersion",Lr[Lr.Void=236]="Void",Lr[Lr.Segment=408125543]="Segment",Lr[Lr.SeekHead=290298740]="SeekHead",Lr[Lr.Seek=19899]="Seek",Lr[Lr.SeekID=21419]="SeekID",Lr[Lr.SeekPosition=21420]="SeekPosition",Lr[Lr.Duration=17545]="Duration",Lr[Lr.Info=357149030]="Info",Lr[Lr.TimestampScale=2807729]="TimestampScale",Lr[Lr.MuxingApp=19840]="MuxingApp",Lr[Lr.WritingApp=22337]="WritingApp",Lr[Lr.Tracks=374648427]="Tracks",Lr[Lr.TrackEntry=174]="TrackEntry",Lr[Lr.TrackNumber=215]="TrackNumber",Lr[Lr.TrackUID=29637]="TrackUID",Lr[Lr.TrackType=131]="TrackType",Lr[Lr.FlagEnabled=185]="FlagEnabled",Lr[Lr.FlagDefault=136]="FlagDefault",Lr[Lr.FlagForced=21930]="FlagForced",Lr[Lr.FlagOriginal=21934]="FlagOriginal",Lr[Lr.FlagHearingImpaired=21931]="FlagHearingImpaired",Lr[Lr.FlagVisualImpaired=21932]="FlagVisualImpaired",Lr[Lr.FlagCommentary=21935]="FlagCommentary",Lr[Lr.FlagLacing=156]="FlagLacing",Lr[Lr.Name=21358]="Name",Lr[Lr.Language=2274716]="Language",Lr[Lr.LanguageBCP47=2274717]="LanguageBCP47",Lr[Lr.CodecID=134]="CodecID",Lr[Lr.CodecPrivate=25506]="CodecPrivate",Lr[Lr.CodecDelay=22186]="CodecDelay",Lr[Lr.SeekPreRoll=22203]="SeekPreRoll",Lr[Lr.DefaultDuration=2352003]="DefaultDuration",Lr[Lr.Video=224]="Video",Lr[Lr.PixelWidth=176]="PixelWidth",Lr[Lr.PixelHeight=186]="PixelHeight",Lr[Lr.DisplayWidth=21680]="DisplayWidth",Lr[Lr.DisplayHeight=21690]="DisplayHeight",Lr[Lr.DisplayUnit=21682]="DisplayUnit",Lr[Lr.AlphaMode=21440]="AlphaMode",Lr[Lr.Audio=225]="Audio",Lr[Lr.SamplingFrequency=181]="SamplingFrequency",Lr[Lr.Channels=159]="Channels",Lr[Lr.BitDepth=25188]="BitDepth",Lr[Lr.SimpleBlock=163]="SimpleBlock",Lr[Lr.BlockGroup=160]="BlockGroup",Lr[Lr.Block=161]="Block",Lr[Lr.BlockAdditions=30113]="BlockAdditions",Lr[Lr.BlockMore=166]="BlockMore",Lr[Lr.BlockAdditional=165]="BlockAdditional",Lr[Lr.BlockAddID=238]="BlockAddID",Lr[Lr.BlockDuration=155]="BlockDuration",Lr[Lr.ReferenceBlock=251]="ReferenceBlock",Lr[Lr.Cluster=524531317]="Cluster",Lr[Lr.Timestamp=231]="Timestamp",Lr[Lr.Cues=475249515]="Cues",Lr[Lr.CuePoint=187]="CuePoint",Lr[Lr.CueTime=179]="CueTime",Lr[Lr.CueTrackPositions=183]="CueTrackPositions",Lr[Lr.CueTrack=247]="CueTrack",Lr[Lr.CueClusterPosition=241]="CueClusterPosition",Lr[Lr.Colour=21936]="Colour",Lr[Lr.MatrixCoefficients=21937]="MatrixCoefficients",Lr[Lr.TransferCharacteristics=21946]="TransferCharacteristics",Lr[Lr.Primaries=21947]="Primaries",Lr[Lr.Range=21945]="Range",Lr[Lr.Projection=30320]="Projection",Lr[Lr.ProjectionType=30321]="ProjectionType",Lr[Lr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",Lr[Lr.Attachments=423732329]="Attachments",Lr[Lr.AttachedFile=24999]="AttachedFile",Lr[Lr.FileDescription=18046]="FileDescription",Lr[Lr.FileName=18030]="FileName",Lr[Lr.FileMediaType=18016]="FileMediaType",Lr[Lr.FileData=18012]="FileData",Lr[Lr.FileUID=18094]="FileUID",Lr[Lr.Chapters=272869232]="Chapters",Lr[Lr.Tags=307544935]="Tags",Lr[Lr.Tag=29555]="Tag",Lr[Lr.Targets=25536]="Targets",Lr[Lr.TargetTypeValue=26826]="TargetTypeValue",Lr[Lr.TargetType=25546]="TargetType",Lr[Lr.TagTrackUID=25541]="TagTrackUID",Lr[Lr.TagEditionUID=25545]="TagEditionUID",Lr[Lr.TagChapterUID=25540]="TagChapterUID",Lr[Lr.TagAttachmentUID=25542]="TagAttachmentUID",Lr[Lr.SimpleTag=26568]="SimpleTag",Lr[Lr.TagName=17827]="TagName",Lr[Lr.TagLanguage=17530]="TagLanguage",Lr[Lr.TagString=17543]="TagString",Lr[Lr.TagBinary=17541]="TagBinary",Lr[Lr.ContentEncodings=28032]="ContentEncodings",Lr[Lr.ContentEncoding=25152]="ContentEncoding",Lr[Lr.ContentEncodingOrder=20529]="ContentEncodingOrder",Lr[Lr.ContentEncodingScope=20530]="ContentEncodingScope",Lr[Lr.ContentCompression=20532]="ContentCompression",Lr[Lr.ContentCompAlgo=16980]="ContentCompAlgo",Lr[Lr.ContentCompSettings=16981]="ContentCompSettings",Lr[Lr.ContentEncryption=20533]="ContentEncryption";const Ur=[zr.EBML,zr.Segment],qr=[zr.SeekHead,zr.Info,zr.Cluster,zr.Tracks,zr.Cues,zr.Attachments,zr.Chapters,zr.Tags],Wr=[...Ur,...qr],Hr=16,Vr=e=>{if(e.remainingLength<1)return null;const t=tc(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=tc(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Vr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===tc(e))return;e.skip(-1);const t=jr(e);return null===t?null:72057594037927940!==t?t:void 0},Gr=e=>{W(e.remainingLength>=2);const t=Xr(e);if(null===t)return null;const i=$r(e);return null===i?null:{id:t,size:i}},Qr=(e,t)=>{const i=ec(e,t);let r=0;for(;r{const i=ec(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?mc(e):pc(e)},Zr=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}},ea=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;se.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>"video"===e.info?.type)),hasAudio:this.segments.some(e=>e.tracks.some(e=>"audio"===e.info?.type)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&await this.loadSegmentMetadata(t),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??(this.readMetadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,Hr);if(Ve(t)&&(t=await t),!t)break;const i=Gr(t);if(!i)break;const r=i.id;let a=i.size;const s=t.filePos;if(r===zr.EBML){pa(a);let e=this.reader.requestSlice(s,a);if(Ve(e)&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===zr.Segment){if(await this.readSegment(s,a),void 0===a)break;if(null===this.reader.fileSize)break}else if(r===zr.Cluster){if(null===this.reader.fileSize)break;if(void 0===a){a=(await Zr(this.reader,s,Wr,this.reader.fileSize)).pos-s}const e=V(this.segments);e&&(e.elementEndPos=s+a)}pa(a),e=s+a}})())}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;null===this.currentSegment.elementEndPos||ie.id===a);if(-1!==o){const e=Sa[o].flag;this.currentSegment[e]=!0,pa(s);let t=this.reader.requestSlice(n,s);Ve(t)&&(t=await t),t&&this.readContiguousElements(t)}else if(a===zr.Tags||a===zr.Attachments){a===zr.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,pa(s);let e=this.reader.requestSlice(n,s);Ve(e)&&(e=await e),e&&this.readContiguousElements(e)}else if(a===zr.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===s)break;i=n+s}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const n of this.currentSegment.seekEntries){const t=Sa.find(e=>e.id===n.id);if(!t)continue;if(this.currentSegment[t.flag])continue;let i=this.reader.requestSliceRange(e+n.segmentPosition,2,Hr);if(Ve(i)&&(i=await i),!i)continue;const r=Gr(i);if(!r)continue;const{id:a,size:s}=r;if(a!==t.id)continue;pa(s),this.currentSegment[t.flag]=!0;let o=this.reader.requestSlice(i.filePos,s);Ve(o)&&(o=await o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const n of this.currentSegment.tracks)null!==n.defaultDurationNs&&(n.defaultDuration=this.currentSegment.timestampFactor*n.defaultDurationNs/1e9);const r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const n of this.currentSegment.cuePoints){const e=r.get(n.trackId);e&&e.cuePoints.push(n)}for(const n of this.currentSegment.tracks){n.cuePoints.sort((e,t)=>e.time-t.time);for(let e=0;es&&(s=n.cuePoints.length,a=n);for(const n of this.currentSegment.tracks)0===n.cuePoints.length&&(n.cuePoints=a.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let i=this.reader.requestSliceRange(e,2,Hr);Ve(i)&&(i=await i),W(i);const r=e,a=Gr(i);W(a);W(a.id===zr.Cluster);let s=a.size;const n=i.filePos;if(void 0===s){s=(await Zr(this.reader,n,Wr,t.elementEndPos)).pos-n}let o=this.reader.requestSlice(n,s);Ve(o)&&(o=await o);const c={segment:t,elementStartPos:r,elementEndPos:n+s,dataStartPos:n,timestamp:-1,trackData:new Map};if(this.currentCluster=c,o){const e=this.readContiguousElements(o,Wr);c.elementEndPos=e}for(const[,l]of c.trackData){const e=l.track;W(l.blocks.length>0);let t=!1;for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const i=l.blocks[l.presentationTimestamps[0].blockIndex],a=l.blocks[V(l.presentationTimestamps).blockIndex];l.startTimestamp=i.timestamp,l.endTimestamp=a.timestamp+a.duration;const s=de(e.clusterPositionCache,l.startTimestamp,e=>e.startTimestamp);-1!==s&&e.clusterPositionCache[s].elementStartPos===r||e.clusterPositionCache.splice(s+1,0,{elementStartPos:c.elementStartPos,startTimestamp:l.startTimestamp})}return t.lastReadCluster=c,c}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){for(let i=0;i=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){const i=Gr(e);if(!i)return!1;if(t&&t.includes(i.id))return!1;const{id:r,size:a}=i,s=e.filePos;switch(pa(a),r){case zr.DocType:this.isWebM="webm"===Qr(e,a);break;case zr.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case zr.SeekID:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Kr(e,a)}break;case zr.SeekPosition:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Kr(e,a)}break;case zr.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Kr(e,a),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case zr.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Jr(e,a);break;case zr.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...ct,primary:!1},trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(s,a)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>"decompress"!==e.data?.type||e.scope!==ya.Block||e.data.algorithm!==wa.HeaderStripping)&&(st._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===ta)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===ia)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===ra)this.currentTrack.info.codec="vp8";else if(t===aa)this.currentTrack.info.codec="vp9";else if(t===sa)this.currentTrack.info.codec="av1";else if(t===na){const e=this.currentTrack.codecPrivate?Q.decode(this.currentTrack.codecPrivate):"";Mi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new xa(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===oa?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===ca?this.currentTrack.info.codec="mp3":t===la?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=Li):t===ua?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ha?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===da?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===fa?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ma?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Ca(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case zr.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Kr(e,a);break;case zr.TrackType:{if(!this.currentTrack)break;const t=Kr(e,a);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:{...se},alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case zr.FlagEnabled:if(!this.currentTrack)break;Kr(e,a)||(this.currentTrack=null);break;case zr.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Kr(e,a);break;case zr.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Kr(e,a);break;case zr.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Kr(e,a);break;case zr.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Kr(e,a);break;case zr.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Kr(e,a);break;case zr.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Kr(e,a);break;case zr.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Qr(e,a);break;case zr.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=ec(e,a);break;case zr.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Kr(e,a);break;case zr.Name:if(!this.currentTrack)break;this.currentTrack.name=Yr(e,a);break;case zr.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Qr(e,a),_e(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ve);break;case zr.LanguageBCP47:{if(!this.currentTrack)break;const t=Qr(e,a).split("-")[0];this.currentTrack.languageCode=t||ve,this.currentTrack.hasLanguageBcp47=!0}break;case zr.Video:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.PixelWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.width=Kr(e,a);break;case zr.PixelHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.height=Kr(e,a);break;case zr.DisplayWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayWidth=Kr(e,a);break;case zr.DisplayHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayHeight=Kr(e,a);break;case zr.DisplayUnit:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayUnit=Kr(e,a);break;case zr.AlphaMode:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.alphaMode=1===Kr(e,a);break;case zr.Colour:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.MatrixCoefficients:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=re[t];this.currentTrack.info.colorSpace.matrix=i}break;case zr.Range:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case zr.TransferCharacteristics:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=te[t];this.currentTrack.info.colorSpace.transfer=i}break;case zr.Primaries:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=Z[t];this.currentTrack.info.colorSpace.primaries=i}break;case zr.Projection:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.ProjectionPoseRoll:{if("video"!==this.currentTrack?.info?.type)break;const t=-Jr(e,a);try{this.currentTrack.info.rotation=H(t)}catch{}}break;case zr.Audio:if("audio"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.SamplingFrequency:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.sampleRate=Jr(e,a);break;case zr.Channels:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.numberOfChannels=Kr(e,a);break;case zr.BitDepth:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.bitDepth=Kr(e,a);break;case zr.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(s,a)),this.currentCueTime=null;break;case zr.CueTime:this.currentCueTime=Kr(e,a);break;case zr.CueTrackPositions:{if(null===this.currentCueTime)break;W(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case zr.CueTrack:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Kr(e,a)}break;case zr.CueClusterPosition:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;W(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Kr(e,a)}break;case zr.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Kr(e,a);break;case zr.SimpleBlock:{if(!this.currentCluster)break;const t=jr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=sc(e),n=tc(e),o=n>>1&3;let c=!!(128&n);"audio"===i.track.info?.type&&i.track.info.codec&&(c=!0);const l=ec(e,a-(e.filePos-s)),u=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:o,decoded:!u,postProcessed:!1,mainAdditional:null})}break;case zr.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(s,a)),this.currentBlock=null;break;case zr.Block:{if(!this.currentCluster)break;const t=jr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=sc(e),n=tc(e)>>1&3,o=ec(e,a-(e.filePos-s)),c=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:o,lacing:n,decoded:!c,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case zr.BlockAdditions:this.readContiguousElements(e.slice(s,a));break;case zr.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(s,a)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case zr.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=ec(e,a);break;case zr.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Kr(e,a);break;case zr.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Kr(e,a);break;case zr.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case zr.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(s,a));break;case zr.Targets:this.readContiguousElements(e.slice(s,a));break;case zr.TargetTypeValue:50!==Kr(e,a)&&(this.currentTagTargetIsMovie=!1);break;case zr.TagTrackUID:case zr.TagEditionUID:case zr.TagChapterUID:case zr.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case zr.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(s,a));break;case zr.TagName:this.currentSimpleTagName=Yr(e,a);break;case zr.TagString:{if(!this.currentSimpleTagName)break;const t=Yr(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case zr.TagBinary:{if(!this.currentSimpleTagName)break;const t=ec(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case zr.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(s,a));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new ot(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}t.images??(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case zr.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=0n;for(let r=0;rt.order-e.order);break;case zr.ContentEncoding:this.currentDecodingInstruction={order:0,scope:ya.Block,data:null},this.readContiguousElements(e.slice(s,a)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case zr.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Kr(e,a);break;case zr.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Kr(e,a);break;case zr.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:wa.Zlib,settings:null},this.readContiguousElements(e.slice(s,a));break;case zr.ContentCompAlgo:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.algorithm=Kr(e,a);break;case zr.ContentCompSettings:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.settings=ec(e,a);break;case zr.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=s+a,!0}decodeBlockData(e,t){W(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(W(r.data),"decompress"===r.data.type)if(r.data.algorithm===wa.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i;if(!this.currentSegment?.metadataTags)return;const r=this.currentSegment.metadataTags;if(r.raw??(r.raw={}),(i=r.raw)[e]??(i[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":r.title??(r.title=t);break;case"description":r.description??(r.description=t);break;case"artist":r.artist??(r.artist=t);break;case"album":r.album??(r.album=t);break;case"album_artist":r.albumArtist??(r.albumArtist=t);break;case"genre":r.genre??(r.genre=t);break;case"comment":r.comment??(r.comment=t);break;case"lyrics":r.lyrics??(r.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||(r.date??(r.date=e))}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.trackNumber??(r.trackNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.tracksTotal??(r.tracksTotal=a))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.discNumber??(r.discNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.discsTotal??(r.discsTotal=a))}}}async getDurationFromMetadata(e){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){W(r.trackBacking);const e=await r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(t??1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=t??0,i}}class Ia{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return Pe(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=de(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=ke(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return W(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,i){if(-1===t)return null;const r=e.trackData.get(this.internalTrack.id).blocks[t];if(W(r),r.decoded||(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),r.decoded=!0),!r.postProcessed){if("prores"===this.internalTrack.info?.codec){if(!(r.data.length>=8&&105===r.data[4]&&99===r.data[5]&&112===r.data[6]&&102===r.data[7])){const e=new Uint8Array(r.data.length+8);G(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(r.data,8),r.data=e}}r.postProcessed=!0}const a=i.metadataOnly?er:r.data,s=r.timestamp/this.internalTrack.segment.timestampFactor,n=r.duration/this.internalTrack.segment.timestampFactor,o={};r.mainAdditional&&"video"===this.internalTrack.info?.type&&this.internalTrack.info.alphaMode&&(o.alpha=i.metadataOnly?er:r.mainAdditional,o.alphaByteLength=r.mainAdditional.byteLength);const c=new tr(a,r.isKeyFrame?"key":"delta",s,n,e.dataStartPos+t,r.data.byteLength,o);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,i,r,a){const{demuxer:s,segment:n}=this.internalTrack;let o=null,c=null,l=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,a);-1!==i&&(c=e,l=i)}const u=de(this.internalTrack.cuePoints,i,e=>e.time),h=-1!==u?this.internalTrack.cuePoints[u]:null,d=de(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),f=-1!==d?this.internalTrack.clusterPositionCache[d]:null,m=Math.max(h?.clusterPosition??0,f?.elementStartPos??0)||null;let p;for(e?null===m||e.elementStartPos>=m?(p=e.elementEndPos,o=e):p=m:p=m??n.clusterSeekStartPos;null===n.elementEndPos||p<=n.elementEndPos-2;){if(o){const e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(p,2,Hr);if(Ve(e)&&(e=await e),!e)break;const i=p,u=Gr(e);if(!u||!qr.includes(u.id)&&u.id!==zr.Void){const e=await ea(s.reader,i,qr,Math.min(n.elementEndPos??1/0,i+va));if(e){p=e;continue}break}const h=u.id;let d=u.size;const f=e.filePos;if(h===zr.Cluster){o=await s.readCluster(i,n),d=o.elementEndPos-f;const{blockIndex:e,correctBlockFound:r}=t(o);if(r)return this.fetchPacketInCluster(o,e,a);-1!==e&&(c=o,l=e)}if(void 0===d){W(h!==zr.Cluster);d=(await Zr(s.reader,f,Wr,n.elementEndPos)).pos-f}const m=f+d;if(null===n.elementEndPos){let e=s.reader.requestSliceRange(m,2,Hr);if(Ve(e)&&(e=await e),!e)break;if(Xr(e)===zr.Segment){n.elementEndPos=m;break}}p=m}if(h&&(!c||c.elementStartPos{var e,t,i,r;let a=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(a=await this.getFirstPacket({}));const s={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&a?Et(a.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&a?Lt(a.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&a?Yt(a.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&a?Zt(a.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&a?ei(a.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!ae(this.internalTrack.info.colorSpace)){const a=Oi(s);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const n={codec:Ni(s),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})()):null}}class Ca extends Ia{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&vi(e.data)}return{codec:zi({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const Ba=async(e,t,i,r=null)=>{let a=t;for(;null===i||a=4;){const t=s.filePos,i=oc(s),n=null!==e.fileSize?e.fileSize-a:null,o=$i(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&Ji(o.header.channel)===Ji(r.channel)))return{header:o.header,startPos:a};s.filePos=t+o.bytesAdvanced,a=s.filePos}}return null};class Ea extends Zi{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new oe,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new _a(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Cc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=await Ba(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Xi(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Ve(r)&&(r=await r),r){const a=oc(r);if(a===ji||a===Ki){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Ve(t)&&(t=await t),t){const e=ec(t,12),i=G(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Qi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Qi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const a=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:a,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=!0;let a=this.reader.requestSlice(i.filePos,r.size);if(Ve(a)&&(a=await a),!a)break;Bc(a,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=Sc){let e=this.reader.requestSlice(this.reader.fileSize-Sc,Sc);Ve(e)&&(e=await e),W(e);"TAG"===gc(e,3)&&Ic(e,this.metadataTags)}return this.metadataTags}finally{e()}}}class _a{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return W(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.demuxer;if(W(null!==e.firstFrameHeader),W(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,a=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(a<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const Aa=e=>{const t=G(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let a=0;a>>24^t])>>>0}return t.setUint32(22,i,!0),r},Ma=(e,t,i)=>{let r=0,a=null;if(e.length>0)if("vorbis"===t.codec){W(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,n=(e[0]&s)>>1;if(n>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const c=t.vorbisInfo.modeBlockflags[n];if(a=t.vorbisInfo.blocksizes[c],1===c){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+a>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ti[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:a}},Da=27,Na=282,Oa=e=>{const t=e.filePos;if(cc(e)!==Ra)return null;e.skip(1);const i=tc(e),r=fc(e),a=cc(e),s=cc(e),n=cc(e),o=tc(e),c=new Uint8Array(o);for(let h=0;he+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:i,granulePosition:r,serialNumber:a,sequenceNumber:s,checksum:n,lacingValues:c}},za=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===Ra)return!0;e.skip(1)}}return!1};class La extends Zi{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Da,Na);if(Ve(t)&&(t=await t),!t)break;const i=Oa(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=await this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?await this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&await this.readOpusMetadata(e,t),null!==t.codecInfo.codec&&this.trackBackings.push(new Ua(t,this)))}})())}async readVorbisMetadata(e,t){let i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=await this.findNextPacketStart(r),!i)return;const a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a)return;if(3!==r.data[0]||5!==a.data[0])return;const s=[],n=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};n(e.data.length),n(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+a.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(a.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=a;const c=G(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);const l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&l),1<<(l>>4)],modeBlockflags:ii(a.data).modeBlockflags},ni(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){const i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const a=(e=>{const t=G(e),i=t.getUint8(9),r=t.getUint16(10,!0),a=t.getUint32(12,!0),s=t.getInt16(16,!0),n=t.getUint8(18);let o=null;return n&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:a,outputGain:s,channelMappingFamily:n,channelMappingTable:o}})(e.data);t.numberOfChannels=a.outputChannelCount,t.sampleRate=Li,t.codecInfo.opusInfo={preSkip:a.preSkip},ni(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){W(te+t.length,0);if(0===o)return null;const c=new Uint8Array(o);let l=0;for(let u=0;u{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}class Ua{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new oe,this.internalSampleRate="opus"===e.codecInfo.codec?Li:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return W(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return W(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:this.bitstream.description??void 0}}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct,primary:!1}}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(W(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:a}=Ma(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new tr(i.metadataOnly?er:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(e){W(this.bitstream.lastMetadataPacket);const t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(W(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=await this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const a=i.timestampInSamples+i.durationInSamples,s=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:i.vorbisBlockSize},t)}async getPacket(e,t){if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const i=Pe(e*this.internalSampleRate);if(0===i)return this.getFirstPacket(t);if(i<0)return null;W(this.bitstream.lastMetadataPacket);const r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let a=r.startPage,s=this.demuxer.reader.fileSize;const n=[a];e:for(;a.headerStartPos+a.totalSizei?s=l.headerStartPos:(a=l,n.push(l));continue e}r=l.headerStartPos+l.totalSize}}let o=r.startPage;for(const k of n){if(k.granulePosition===a.granulePosition)break;(!o||k.headerStartPos>o.headerStartPos)&&(o=k)}let c=o;const l=[c];for(;c.serialNumber!==this.bitstream.serialNumber||c.granulePosition!==a.granulePosition;){const e=c.headerStartPos+c.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Da,Na);Ve(t)&&(t=await t),W(t);const i=Oa(t);W(i),c=i,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}W(-1!==c.granulePosition);let u,h,d=null,f=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)u=this.granulePositionToTimestampInSamples(0),h=!0,d=0;else{u=0,h=!1;for(let t=c.lacingValues.length-1;t>=0;t--){if(c.lacingValues[t]<255){d=t+1;break}}if(null===d)throw new Error("Invalid page with granule position: no packets end on this page.");m=d-1;const e={data:er,endPage:f,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){const e=Wa(l,c,d);W(e);const t=qa(l,e.page,e.segmentIndex);t&&(c=t.page,d=t.segmentIndex)}else for(;;){const e=Wa(l,c,d);if(!e)break;const t=qa(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,d=t.segmentIndex,e.page.headerStartPos!==f.headerStartPos){f=e.page,m=e.segmentIndex;break}}}let p=null,g=null;for(;null!==c;){W(null!==d);const e=await this.demuxer.readPacket(c,d);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&di||Math.max(a.timestampInSamples,0)===i))break}const a=await this.demuxer.findNextPacketStart(e);if(!a)break;c=a.startPage,d=a.startSegmentIndex}return p}async getPacketSequential(e,t){const i=await this.sequentialScanMutex.acquire();try{const i=Pe(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=de(this.sequentialScanCache,i,e=>e.timestampInSamples);let a;if(-1!==r){const e=this.sequentialScanCache[r];a=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else a=await this.getFirstPacket(t);let s=0;for(;a&&a.timestampe)break;if(a=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(a);W(e),this.sequentialScanCache.length>0&&W(V(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return a}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const qa=(e,t,i)=>{let r=t,a=i;e:for(;;){for(a--;a>=0;a--){if(r.lacingValues[a]<255){a++;break e}}W(-1===a);if(!(1&r.headerType)){a=0;break}const t=ge(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=ge(e,e=>e.headerStartPos{let e=this.reader.requestSlice(0,12);Ve(e)&&(e=await e),W(e);const t=gc(e,4),i="RIFX"!==t,r="RF64"===t,a=nc(e,i);let s=r?this.reader.fileSize:Math.min(a+8,this.reader.fileSize??1/0);if("WAVE"!==gc(e,4))throw new Error("Invalid WAVE file - wrong format");let n=0,o=null,c=e.filePos;for(;null===s||c=18&&357!==a){const e=ic(r,i),s=t-18;if(Math.min(s,e)>=22&&a===Ha.EXTENSIBLE){r.skip(6);const e=ec(r,16);a=e[0]|e[1]<<8}}if(a!==Ha.MULAW&&a!==Ha.ALAW||(c=8),a!==Ha.PCM&&a!==Ha.IEEE_FLOAT&&a!==Ha.ALAW&&a!==Ha.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${a}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(a===Ha.PCM&&![8,16,24,32].includes(c))throw new Error(`Unsupported WAVE PCM bit depth (${c}). Only 8, 16, 24, and 32 bits are supported.`);if(a===Ha.IEEE_FLOAT&&![32,64].includes(c))throw new Error(`Unsupported WAVE float bit depth (${c}). Only 32 and 64 bits are supported.`);this.audioInfo={format:a,numberOfChannels:s,sampleRate:n,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:o}}async parseListChunk(e,t,i){var r,a,s,n,o,c,l,u,h,d,f;let m=this.reader.requestSlice(e,t);if(Ve(m)&&(m=await m),!m)return;const p=gc(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=gc(m,4),t=nc(m,i),p=ec(m,t);let k=0;for(let i=0;i0&&((c=this.metadataTags).trackNumber??(c.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((l=this.metadataTags).tracksTotal??(l.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||((u=this.metadataTags).date??(u.date=e))}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&((h=this.metadataTags).date??(h.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":(d=this.metadataTags).genre??(d.genre=y);break;case"ICMT":case"CMNT":case"COMM":(f=this.metadataTags).comment??(f.comment=y)}g+=8+t+(1&t)}}async parseId3Chunk(e,t){let i=this.reader.requestSlice(e,t);if(Ve(i)&&(i=await i),!i)return;const r=Cc(i);if(r){const a=t-vc;if(r.size=Math.min(r.size,a),r.size>0){const t=i.slice(e+vc,r.size);Bc(t,r,this.metadataTags)}}}getCodec(){if(W(this.audioInfo),this.audioInfo.format===Ha.MULAW)return"ulaw";if(this.audioInfo.format===Ha.ALAW)return"alaw";if(this.audioInfo.format===Ha.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===Ha.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}W(!1)}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}const Ka=2048;class Xa{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){const e=this.demuxer.getCodec();return e?(W(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return W(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct}}async getPacketAtIndex(e,t){W(e>=0),W(this.demuxer.audioInfo);const i=e*Ka*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Ka*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Ve(e)&&(e=await e),!e)return null}let a;if(t.metadataOnly)a=er;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Ve(e)&&(e=await e),W(e),a=ec(e,r)}const s=e*Ka/this.demuxer.audioInfo.sampleRate,n=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new tr(a,"key",s,n,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){W(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Ka,(this.demuxer.dataSize-1)/(Ka*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=await this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;W(null===this.demuxer.reader.fileSize);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;a;){const e=await this.getNextPacket(a,t);if(!e)break;a=e}return a}getNextPacket(e,t){W(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Ka);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const $a=e=>{const t=e.filePos,i=ec(e,9),r=new lt(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const a=r.readBits(1),s=r.readBits(2)+1,n=r.readBits(4);if(15===n)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const c=r.readBits(13);r.skipBits(11);const l=r.readBits(2)+1;if(1!==l)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===a?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:n,channelConfiguration:o,frameLength:c,numberOfAacFrames:l,crcCheck:u,startPos:t}},Ga=1024;class Qa extends Zi{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new oe,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();W(this.firstFrameHeader),this.trackBackings=[new Ya(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Cc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=$a(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=ut[t.samplingFrequencyIndex];W(void 0!==i);const r=Ga/i,a={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(a),this.nextTimestampInSamples+=Ga,this.lastLoadedPos=t.startPos+t.frameLength}async getMimeType(){return"audio/aac"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,vc);if(Ve(t)&&(t=await t),!t)break;const i=Cc(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Ve(r)&&(r=await r),!r)break;Bc(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}}}class Ya{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Ga}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ve}getCodec(){return"aac"}getInternalCodecId(){return W(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){W(this.demuxer.firstFrameHeader);const e=ht[this.demuxer.firstFrameHeader.channelConfiguration];return W(void 0!==e),e}getSampleRate(){W(this.demuxer.firstFrameHeader);const e=ut[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return W(void 0!==e),e}getDisposition(){return{...ct}}async getDecoderConfig(){return W(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=er;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Ve(e)&&(e=await e),!e)return null;r=ec(e,i.dataSize)}return new tr(r,"key",i.timestamp,i.duration,e,i.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=he(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1{var e;let t=0;for(;;){let e=this.reader.requestSlice(t,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const i=Cc(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Ve(r)&&(r=await r),W(r),Bc(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:s.end-e,isLastFrame:!0};if(255===tc(s)){const t=s.filePos;if(tc(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-n.num!==1){s.filePos=t;continue}}else if(r.num-n.num!==n.blockSize){s.filePos=t;continue}return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:i,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=ec(e,4),a=new lt(r);if(32764!==a.readBits(15))return null;if(null===this.blockingBit){W(t);const e=a.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){W(!t);if(1!==a.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");W(!t);if(0!==a.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*2**e:6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?2**e:null)(a.readBits(4));if(!s)return null;W(this.audioInfo);const n=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(a.readBits(4),this.audioInfo.sampleRate);if(!n)return null;a.readBits(4),a.readBits(3);if(0!==a.readBits(1))return null;const o=(e=>{let t=0;const i=new lt(ec(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],a=t-1,s=new lt(ec(e,a)),n=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?rc(e)+1:"uncommon-u8"===t?tc(e)+1:"number"===typeof t?t:(ye(t),void W(!1)))(e,s),l=((e,t)=>"uncommon-u16"===t?rc(e):"uncommon-u16-10"===t?10*rc(e):"uncommon-u8"===t?tc(e):"number"===typeof t?t:null)(e,n);if(null===l)return null;if(l!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,h=tc(e);e.skip(-u),e.skip(-1);const d=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(ec(e,u));return h!==d?null:{num:o,blockSize:c,sampleRate:l}}async advanceReader(){await this.readMetadata(),W(null!==this.lastLoadedPos),W(this.audioInfo);const e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)}}class Za{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ve}getTimeResolution(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return W(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...ct}}async getDecoderConfig(){return W(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(W(this.demuxer.audioInfo),e<0)return null;const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){await this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],a=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(a+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader()}}finally{i()}}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=er;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Ve(e)&&(e=await e),!e)return null;r=ec(e,i.byteSize)}W(this.demuxer.audioInfo);const a=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new tr(r,"key",a,s,e,i.byteSize)}async getFirstPacket(e){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}const es=9e4,ts=2**33,is=188,rs="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",as=new Set([133,134,162]),ss=new Set;class ns extends Zi{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,205);Ve(e)&&(e=await e),W(e);const t=ec(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=is;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,a=!1,s=!1;for(;;){const e=await this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=await this.readSection(i,!0,!s);if(!t)break;const n=3,o=32;let c=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i);c=2===e.readBits(8)}}if(0!==t.pid||a)if(t.pid!==r&&!c||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=cs(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(await this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new fs(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,await r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=Et(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];W(t);const i=At(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const a=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;a>0&&s>0&&(a>s?(e.info.squarePixelWidth=Math.round(e.info.width*a/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/a))),e.info.colorSpace={primaries:Z[i.colourPrimaries],transfer:te[i.transferCharacteristics],matrix:re[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=Lt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===bt.SPS_NUT).nalUnits[0];W(t);const i=zt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:Z[i.colourPrimaries],transfer:te[i.transferCharacteristics],matrix:re[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Ni({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=Jo.tempFromBytes(r.suppliedPacket.data),i=$a(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=ht[i.channelConfiguration],e.info.sampleRate=ut[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=oc(Jo.tempFromBytes(r.suppliedPacket.data)),i=$i(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=Ji(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=ci(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=oi[t.acmod]+t.lfeon,e.info.sampleRate=pt[t.fscod]}else if("eac3"===e.info.codec){const t=hi(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=di(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=fi(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=Si(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:zi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const a=e.readBits(10),c=e.pos+8*a;let l=!1;for(;e.pos=4){const t=e.readBits(32);l||(l=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=c;8*(r+n)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),a=e.pos+8*r;let s=!1,n=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let c=null;const u=l&&as.has(t)?130:t;switch(u){case 27:case 36:c={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",c={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:n?c={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?c={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(c={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:ss.has(t)||(st._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),ss.add(t))}c&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:c,referencePesPackets:[]})}s=!0}else{const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+n)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");a=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!a)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const n of this.elementaryStreams)n.initialized&&("video"===n.info.type?this.trackBackingEntries.push(new us(n)):this.trackBackingEntries.push(new hs(n)))})())}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){await this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,i=!1){let r=e,a=e;const s=[];let n,o=0,c=null,l=!0,u=0;for(;;){const e=await this.readPacket(a);if(a+=this.packetStride,!e)break;if(c){if(e.pid!==c.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;c=e}const n=!!(2&e.adaptationFieldControl),h=!!(1&e.adaptationFieldControl);let d=0;if(n&&(d=1+e.body[0],e===c&&d>1&&(u=e.body[1]>>6&1)),h&&(0===d?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(d)),o+=e.body.byteLength-d)),r=a,!t&&o>=64){l=!1;break}if(-1!==he(this.sectionEndPositions,r,e=>e)){l=!1;break}}if(l){const e=de(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!c)return null;if(1===s.length)n=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);n=new Uint8Array(e);let t=0;for(const i of s)n.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:c.pid,payload:n,randomAccessIndicator:u}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(Ve(t)&&(t=await t),!t)return null;if(71!==tc(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=rc(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:tc(t)>>4&3}}async readPacket(e){let t=this.reader.requestSlice(e,is);if(Ve(t)&&(t=await t),!t)return null;const i=ec(t,is);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ts-t?-8589934592:ts}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new lt(t.payload);if(1!==r.readBits(24))return null;const a=r.readBits(8);if(r.skipBits(16),188===a||190===a||191===a||240===a||241===a||255===a||242===a||248===a)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let n=null;if(2===s||3===s)n=0,r.skipBits(4),n+=r.readBits(3)*(1<<30),r.skipBits(1),n+=32768*r.readBits(15),r.skipBits(1),n+=r.readBits(15),n=e.normalizeTimestamp(n);else if(i)throw new Error(rs);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:n,randomAccessIndicator:t.randomAccessIndicator}},cs=(e,t,i)=>{W(null!==t.endPos);const r=os(e,t,i);if(!r)return null;const a=new lt(t.payload);a.skipBits(32);const s=a.readBits(16);a.skipBits(16);const n=a.readBits(8),o=a.pos+8*n;a.pos=o;const c=o/8;W(Number.isInteger(c));const l=t.payload.subarray(c,s>0?6+s:t.payload.byteLength);return{...r,data:l}};class ls{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,W(r instanceof ls),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct,primary:!1}}getTimeResolution(){return es}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new tr(i.metadataOnly?er:e.data,r,e.pts/es,Math.max(t/es,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){const t=this.elementaryStream.firstSection;W(t);const i=cs(this.elementaryStream.demuxer,t,!0);W(i);const r=new fs(this.elementaryStream,i),a=new ms(this,r),s=await a.readNext();if(!s)return null;const n=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(n,a),this.packetSectionStarts.set(n,s.packet.sectionStartPos),n}async getNextPacket(e,t){let i=this.packetBuffers.get(e);if(i){const r=await i.readNext();if(!r)return null;this.packetBuffers.delete(e);const a=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(a,i),this.packetSectionStarts.set(a,r.packet.sectionStartPos),a}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const a=this.elementaryStream.demuxer,s=await a.readSection(r,!0);W(s);const n=cs(a,s,!0);W(n);const o=new fs(this.elementaryStream,n);i=new ms(this,o);const c=e.sequenceNumber;for(;;){const e=await i.readNext();if(!e)return null;if(e.packet.sequenceNumber>c){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let i=e;for(;;){if(i=await this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,i){const r=Pe(e*es),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:n}=a,o=this.elementaryStream.pid,c=async(e,t,i)=>{let r=e;for(;re.pts),m=-1!==f?d[f]:null;if(m&&r-m.pts<45e3)h=m.sectionStartPos;else{let e=0;if(null!==s.fileSize){const t=Math.ceil(s.fileSize/n);if(t>1){let i=0,s=t-1;for(e=i;i<=s;){const t=Math.floor((i+s)/2),o=Ce(t*n,a.packetStride)+u.sectionStartPos,l=o+n,h=await c(o,l,!1);h?h.pesPacketHeader.pts<=r?(e=t,i=t+1):s=t-1:s=t-1}}}h=Ce(e*n,a.packetStride)+u.sectionStartPos}const p=await c(h,s.fileSize??1/0,!1);let g=p?.pesPacketHeader??null;g||(g=u);const k=this.getReorderSize(),y=async(e,t)=>{const s=await a.readSection(e,!0);W(s);const n=cs(a,s,!0);W(n);const o=new fs(this.elementaryStream,n),c=new ms(this,o);for(;;){if((V(c.presentationOrderPackets)?.pts??-1/0)>=r)break;if(!(await c.readNextPacket()))break}const l=ke(c.presentationOrderPackets,t);if(-1===l)return null;const u=c.presentationOrderPackets[l],h=0===l?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=h;const d=await c.readNext();W(d);const f=this.createEncodedPacket(d.packet,d.duration,i);return this.packetBuffers.set(f,c),this.packetSectionStarts.set(f,d.packet.sectionStartPos),f};if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=g.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){if(e.pts>r)break e;g=e,ds(this.elementaryStream,g);break}}}e+=a.packetStride}}e:for(let e=0;e=a.packetOffset;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){g=e;break}}}e-=a.packetStride}}return y(g.sectionStartPos,e=>e.pts<=r)}{let e=h,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let h=null;const d=e<=u.sectionStartPos;let f,m=null;if(d)f=u,m=l;else{const t=await c(e,s.fileSize??1/0,i);f=t?.pesPacketHeader??null,m=t?.section??null}let p=!1,g=0;e:for(;f&&!(null!==t&&f.sectionStartPos>=t);){if(f.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===f.randomAccessIndicator;else{W(m);const t=cs(a,m,!0);W(t);const i=new fs(this.elementaryStream,t);await i.markNextPacket(),e=1===i.suppliedPacket?.randomAccessIndicator}e&&(h=f)}if(f.pts>r&&(p=!0),p&&(g++,g>k))break;let e=f.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,i);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){f=e,m=t,ds(this.elementaryStream,f);break}}}e+=a.packetStride}}if(h){let e=h;if(0===g)e:for(let r=0;r=a.packetOffset;){const r=await a.readPacketHeader(t);if(!r)break e;if(r.pid===o&&1===r.payloadUnitStartIndicator){const r=await a.readSection(t,i);if(r){const t=os(a,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=a.packetStride}}const t=await y(e.sectionStartPos,e=>e.pts<=r&&1===e.randomAccessIndicator);return W(t),t}if(d)return null;t=e,e=Math.max(Ce(e-u.sectionStartPos-n,a.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}}class us extends ls{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}async getColorSpace(){return this.elementaryStream.info.colorSpace}async canBeTransparent(){return!1}async getDecoderConfig(){return W(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class hs extends ls{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return W(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const ds=(e,t)=>{const i=e.referencePesPackets,r=de(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const a=i[r];if(t.pts<=a.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-a.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return W(e),e}async bufferData(e){const t=this.endPos+e;for(;this.endPos=l)break;u=e;const i=o+u;if(u+3>=l){this.seekTo(i);break}const h=c[u+1],d=c[u+2],f=c[u+3];let m=0;if(0===h&&0===d&&1===f?m=4:0===h&&1===d&&(m=3),0===m){u++;continue}const p=i;a??(a=p);const g=u+m,k=g+r,y=6;if(k+("avc"===t?y:1)>l){this.seekTo(i);break}const b=c[g];let w,T,S;if("avc"===t)w=Pt(b),T=w===kt.NON_IDR_SLICE||w===kt.SLICE_DPA||w===kt.IDR,S=w===kt.SEI||w===kt.SPS||w===kt.PPS||w===kt.AUD;else{w=Ot(b);if(((1&b)<<5|c[g+1]>>3)>0){u+=m;continue}T=w<=bt.RASL_R||w>=bt.BLA_W_LP&&w<=21,S=w>=bt.VPS_NUT&&w<=37||w===bt.PREFIX_SEI_NUT||w>=41&&w<=44||w>=48&&w<=55}let v=!1;if(T){let e;if("avc"===t){const t=c.subarray(k,k+y),i=j(new lt(t));e=!s||i<=n,n=i}else e=c[k]>>7===1;e&&(s?v=!0:s=!0)}else S&&s&&(v=!0);if(v){const e=p-a;return this.seekTo(a),this.supplyPacket(e,0)}u+=m}if(ea){const e=this.endPos-a;return this.seekTo(a),this.supplyPacket(e,0)}}else{const t=e.info.codec,i=128;for(;;){let r=this.ensureBuffered(i);Ve(r)&&(r=await r);const a=this.currentPos;for(;this.currentPos-a>6,n=63&a[4];if(3===s||n>37){this.seekTo(t+1);continue}const o=li[3*n+s];W(void 0!==o),this.seekTo(t),r=this.ensureBuffered(o),Ve(r)&&(r=await r);const c=Math.round(13824e4/e.info.sampleRate);return this.supplyPacket(r,c)}if("eac3"===t){if(11!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(5);if(Ve(r)&&(r=await r),r<5)return;const a=this.readBytes(5);if(11!==a[0]||119!==a[1]){this.seekTo(t+1);continue}const s=2*(((7&a[2])<<8|a[3])+1),n=3===a[4]>>6?3:a[4]>>4&3,o=ui[n];this.seekTo(t),r=this.ensureBuffered(s),Ve(r)&&(r=await r);const c=256*o,l=Math.round(c*es/e.info.sampleRate);return this.supplyPacket(r,l)}if("dts"===t){if(127!==i&&100!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(18);if(Ve(r)&&(r=await r),r<18)return;const a=this.readBytes(18),s=Pi(a);let n=s?null:Ii(a);if(!s&&!n){this.seekTo(t+1);continue}if(n&&!n.asset){this.seekTo(t);const e=Math.min(n.frameSize,4096);let i=this.ensureBuffered(e);Ve(i)&&(i=await i),n=Ii(this.readBytes(i))??n}let o=s?s.frameSize:n.frameSize;if(s){let e=4*Math.ceil(s.frameSize/4);for(;;){this.seekTo(t);const i=e+10;let r=this.ensureBuffered(i);if(Ve(r)&&(r=await r),r=0)}async readNext(){if(0===this.decodeOrderPackets.length){if(!(await this.readNextPacket()))return null}await this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(W(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){const e=this.decodeOrderPackets[0];for(W(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(await this.readNextPacket()))break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const ps="application/vnd.apple.mpegurl",gs="#EXT-X-STREAM-INF:",ks="#EXT-X-I-FRAME-STREAM-INF:",ys="#EXT-X-MEDIA:",bs="#EXTINF:",ws="#EXT-X-MAP:",Ts="#EXT-X-KEY:",Ss="#EXT-X-MEDIA-SEQUENCE:",vs="#EXT-X-BYTERANGE:",Ps="#EXT-X-PROGRAM-DATE-TIME:",Is="#EXT-X-TARGETDURATION:",xs="#EXT-X-PLAYLIST-TYPE:",Cs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class Bs{constructor(e){this._attributes={};let t="",i="",r=!1,a=!1;for(let s=0;s{const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=Ye(e,e=>"video"===e.getType())+1;e.push(new Rs(this,t,i))}else if("audio"===t.type){const i=Ye(e,e=>"audio"===e.getType())+1;e.push(new Fs(this,t,i))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=await t.getTracks();for(const r of i)if("video"===r.type){const t=Ye(e,e=>"video"===e.getType())+1;e.push(new Rs(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=Ye(e,e=>"audio"===e.getType())+1;e.push(new Fs(this,{id:e.length+1,type:"audio"},t))}}return e})())}async getFirstTimestampForInput(e){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i}async getMediaOffset(e,t){const i=e.firstSegment??e;let r;if(this.firstSegmentFirstTimestamps.has(i))r=this.firstSegmentFirstTimestamps.get(i);else{const e=this.getInputForSegment(i);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(i,r)}if(i===e)return i.timestamp-r;const a=await this.getFirstTimestampForInput(t),s=e.timestamp-i.timestamp,n=a-r-s;return Math.abs(n)<=Math.min(.25,s)?i.timestamp-r:e.timestamp-a}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class _s{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{var e;if((e=this.segmentedInput).firstSegment??(e.firstSegment=await this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let t=this.segmentedInput.firstSegment,i=null;for(;t;){const e=this.segmentedInput.getInputForSegment(t);if(i=(await e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number)??null,i)break;t=await this.segmentedInput.getNextSegment(t,{})}if(!i)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=i,this.firstSegment=t})())}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),W(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,i){W(e.sequenceNumber>=0),W(this.segmentedInput.firstSegment);const r=await this.segmentedInput.getMediaOffset(t,i.input),a=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:xe(e.timestamp+r,await i.getTimeResolution()),sequenceNumber:Math.floor(1e8*a)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s}async getFirstPacket(e){await this.hydrate(),W(this.firstInputTrack),W(this.firstSegment);let t=this.firstInputTrack,i=this.firstSegment;for(;;){if(t){const r=await t._backing.getFirstPacket(e);if(r)return this.createAdjustedPacket(r,i,t)}if(i=await this.segmentedInput.getNextSegment(i,{skipLiveWait:e.skipLiveWait}),!i)break;const r=this.segmentedInput.getInputForSegment(i);t=(await r.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number)??null}return null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,i){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const a=i?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(a)return this.createAdjustedPacket(a,r.segment,r.track);let s=r.segment;for(;;){const e=await this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),a=(await i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!a){s=e;continue}const n=await a._backing.getFirstPacket(t);return n?this.createAdjustedPacket(n,e,a):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,i){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){const a=this.segmentedInput.getInputForSegment(r),s=(await a.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const n=e-await this.segmentedInput.getMediaOffset(r,a),o=i?await s._backing.getKeyPacket(n,t):await s._backing.getPacket(n,t);if(o)return this.createAdjustedPacket(o,r,s);r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null}}class Rs extends _s{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}async getColorSpace(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())}async canBeTransparent(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}class Fs extends _s{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}$e();const As=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ms extends it{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new Qo;return this._sizePromise??(this._sizePromise=(async()=>{let e=this._getFileSize();return void 0!==e||(await this._read(0,1,0,As),e=this._getFileSize(),W(void 0!==e)),e})())}async getSize(){if(this._disposed)throw new Qo;const e=await this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Gs(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new Ds(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ds{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),e._refFinalizationRegistry?.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const e=this.source;W(e._refCount>0),e._decrementRefCount(),e._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Ns extends Ms{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ms||e instanceof Ds))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ms?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Ve(t)?t.then(i):i(t)}}const Os=(e,t)=>e.path===t.path;class zs extends Ns{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ms?e.ref():e;return this._root=t,this._rootRequest=null,t};Ve(e)?this._rootRequest=e.then(t):(t(e),W(this._root))}if(this._rootRequest)return this._rootRequest.then(a=>a.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const Ls="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Us extends Ms{constructor(e,t={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Ge(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new $s({maxCacheSize:t.maxCacheSize??8388608,maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),Ls?.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Xs.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}async _runWorker(e){W(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Oe()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),Ls?.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch{}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return st._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(2**(e-2),16)},Ws=new Set;class Hs extends Ns{constructor(e,t={}){if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Ge(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new Hs(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=t.getRetryDelay??qs,this._requestInit={...t.requestInit};let i=null;if(t.requestInit?.headers){const e={...Ae(t.requestInit.headers)},r=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==r&&(i=e[r],delete e[r],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){i??(i=t);const r=new Request(e);r.headers.delete("Range"),this._url=r}}if(null!==i){const e=js(i);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new $s({maxCacheSize:t.maxCacheSize??67108864,maxWorkerCount:t.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:Xs.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const e=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===e?null!==this._length?this._length:null:Se(e-this._offset,0,this._length??1/0)}_read(e,t,i,r){if(null!==this._length&&t>this._length)return null;const a=this._offset,s=this._sequentialBacking?this._sequentialBacking._read(a+e,a+t):this._orchestrator.read(a+e,a+t,Math.max(a+i,a),a+Math.min(r,this._length??1/0)),n=e=>e?(e.offset-=this._offset,e):null;return Ve(s)?s.then(n):n(s)}async _runWorker(e){for(;;){const i=new AbortController,r=await Me(this._options.fetchFn??fetch,this._url,Fe(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:i.signal}),this._getRetryDelay,()=>this._disposed);if(!r.ok)throw new Error(`Error fetching ${String(this._url)}: ${r.status} ${r.statusText}`);r.redirected&&(this.rootPath=r.url);e:if(null===this._orchestrator.fileSize&&(206===r.status||"basic"===r.type&&!r.headers.has("Content-Encoding"))){const t=r.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=r.headers.get("Content-Length");if(i){const t=206===r.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!r.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==r.status){if(this._sequentialBacking)return void r.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Ws.has(e.origin)||(st._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Ws.add(e.origin))}return void this._transitionToSequentialMode(r.body)}const a=r.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return i.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let r;try{r=await a.read()}catch(t){if(this._disposed)throw t;const e=this._getRetryDelay(1,t,this._url);if(null!==e){st._error("Error while reading response stream. Attempting to resume.",t),await tt(1e3*e);break}throw t}if(e.aborted)continue;const{done:s,value:n}=r;if(s){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+n.length),this._orchestrator.supplyWorkerData(e,n)}}}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const a=new ReadableStream({pull:async e=>{for(;;){let s;try{s=await t.read()}catch(a){if(this._disposed)throw a;const e=this._getRetryDelay(1,a,this._url);if(null===e)throw a;st._error("Error while reading response stream. Attempting to resume.",a),await tt(1e3*e);const s=await Me(this._options.fetchFn??fetch,this._url,Fe(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!s.ok)throw new Error(`Error fetching ${String(this._url)}: ${s.status} ${s.statusText}`);if(!s.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=s.body.getReader(),r=206===s.status?0:i;continue}if(s.done)return void e.close();let n=s.value;if(r>0){const e=Math.min(r,n.length);r-=e,n=n.subarray(e)}if(0!==n.length)return i+=n.length,void e.enqueue(n)}},cancel:()=>t.cancel()}),s=new Ks(a,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const n=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)n.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)n.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of n){const e=s._read(o.start,o.start+o.bytes.length);Ve(e)?e.then(e=>{e?(W(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(W(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Vs=/^bytes=(\d+)-(\d*)$/,js=e=>{const t=Vs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=de(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let a=e;const s=new Uint8Array(t-e);if(-1!==i)for(let l=i;l=t)break;const r=Math.max(e,i.start);r>a&&this._throwDueToCacheMiss();const n=Math.min(t,i.end);ra&&this._throwDueToCacheMiss();const{promise:n,resolve:o,reject:c}=me();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),n}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}async _pull(){for(this._reader??(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){for(const e of this._pendingSlices)e.reject(new Qo);this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}}const Xs={fileSystem:(e,t)=>{const i=65536;return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=65536;e=Math.max(0,Math.floor((e-r)/r)*r);for(const a of i){const i=8388608,r=Math.max((a.startPos+a.targetPos)/2,a.targetPos-i);if(Ke(e,t,r,a.targetPos)){const e=a.targetPos-a.startPos,r=Math.ceil((e+1)/i)*i,s=2**Math.ceil(Math.log2(e+1)),n=Math.min(s,r);t=Math.max(t,a.startPos+n)}}return{start:e,end:t=Math.max(t,e+524288)}}};class $s{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){W(!this.disposed);const a=this.options.prefetchProfile(e,t,this.workers),s=Math.max(a.start,i),n=Math.min(a.end,this.fileSize??1/0,r);W(s<=e&&t<=n);let o=null;const c=de(this.cache,e,e=>e.start),l=-1!==c?this.cache[c]:null;l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,o={bytes:l.bytes,view:l.view,offset:l.start});const u=de(this.cache,s,e=>e.start),h=o?null:new Uint8Array(t-e);let d=0,f=s;const m=[];if(-1!==u){for(let i=u;i=n)break;if(r.end<=s)continue;const a=Math.max(s,r.start),o=Math.min(n,r.end);if(W(a<=o),f=h.length&&(o={bytes:h,view:G(h),offset:e}),0===m.length)return W(o),o;const{promise:p,resolve:g,reject:k}=me(),y=[];for(const w of m){const i=Math.max(e,w.start),r=Math.min(t,w.end);i===w.start&&r===w.end?y.push(w):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&w.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,w.end),i.strictTarget&&(i.strictTarget=e),b&&i.pendingSlices.push(b)):(t++,i={hole:{start:w.start,end:w.end},strictTarget:e,pendingSlices:b?[b]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return o?p.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(W(h),o=p.then(t=>t&&{bytes:t,view:G(t),offset:e})),o}checkHoleAgainstWorker(e,t,i){if(Ke(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=r),t.end<=t.start&&(s.holes.splice(e,1),e--)}0===s.holes.length&&(s.resolve(s.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){const t=this.workers.indexOf(e);W(-1!==t),e.running=!1,this.workers.splice(t,1),this.options.onIdleWorkerRemoved?.(e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const i of e.pendingSlices)i.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=de(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=G(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=G(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const a=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Ve(a)?a.then(s):s(a)}_dispose(){this._ref?.free()}ref(){return this._ref??(this._ref=this._baseSource.ref()),super.ref()}}var Qs=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},Ys=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const Js=/^0[xX][0-9a-fA-F]+$/,Zs=/^data:.*;base64,/i;class en extends Es{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??(this.currentUpdateSegmentsPromise=(async()=>{try{const e=this.getRemainingWaitTimeMs();e>0&&await tt(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})())}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){const t={stack:[],error:void 0,hasError:!1};try{const i=Qs(t,await this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),r=new Yo(i.source),a=await r.requestEntireFile();W(a),e=kc(a,a.length,{ignore:Cs}),i.source instanceof Ns&&(this.rootPath=i.source.rootPath)}catch(y){t.error=y,t.hasError=!0}finally{Ys(t)}}const t=!1!==this.input._formatOptions.hls?.offsetTimestampsByDateTime;let i=!1,r=0,a=null,s=null,n=null,o=0,c=null,l=null,u=null,h=null,d=null,f=null,m=!1,p=V(this.segments)??null;const g=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},k=e=>{o=e,p&&(W(null!==p.sequenceNumber),p.sequenceNumber0&&null!==f&&(r=o*f),m=!0);const e=y.slice(8),t=e.indexOf(","),i=-1===t?e:e.slice(0,t),a=Number(i);if(!Number.isFinite(a)||a<0)throw new Error(`Invalid #EXTINF tag duration '${i}'.`);s=a}else if(y.startsWith(ws)){const e=new Bs(y.slice(11)),t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const i=e.get("byterange");let o=null;if(null!==i&&(o=g(i)),o&&null===o.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!p){const e={path:Qe(this.rootPath,t),offset:o?.offset??0,length:o?.length??null};if("AES-128"===n?.method&&!n.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");l={timestamp:r,unixEpochTimestamp:a,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:n,initSegment:null,lastProgramDateTimeSeconds:d}}s=null,null===h?u=null:h=null}else if(y.startsWith(Ts)){const e=new Bs(y.slice(11)),t=e.get("method");if("NONE"===t)n=null;else if("AES-128"===t){const t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=e.get("iv");if(r){if(!Js.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(ur);for(let t=0;t=8&&112===t[4]&&115===t[5]&&115===t[6]&&104===t[7]){const e=G(t).getUint32(0);r=ir(t.subarray(8,Math.min(e,t.length)))}}n={method:t,psshBox:r}}}}else if(y.startsWith(Ss)){const e=y.slice(22),t=Number(e);if(!Number.isInteger(t)||t<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);k(t)}else if(y.startsWith(vs)){const e=g(y.slice(17));if(null===e.offset){if(null===u)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");e.offset=u}h=e,u=e.offset+e.length}else if(y.startsWith(Ps)){if(p)continue;const e=y.slice(25),i=Date.parse(e);if(!Number.isFinite(i))continue;const s=i/1e3;if(d===s)continue;if(null===d&&this.segments.length>0){const e=V(this.segments),i=s-(e.timestamp+e.duration);for(const r of this.segments)r.unixEpochTimestamp=r.timestamp+i,t&&(r.timestamp=r.unixEpochTimestamp)}d=s,a=s,t&&(r=s)}else if("#EXT-X-DISCONTINUITY"===y)c=null;else if(y.startsWith(Is)){const e=y.slice(22),t=Number(e);if(!Number.isFinite(t)||t<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,f=t}else{if("#EXT-X-ENDLIST"===y){this.streamHasEnded=!0;break}if(y.startsWith(xs)){"vod"===y.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==y)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");i=!0}}if(!i)throw new Error("Invalid M3U8 file; no #EXTM3U header.")}async getFirstSegment(){return 0===this.segments.length&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){0===this.segments.length&&await this.runUpdateSegments();let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=de(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===t);if(i)return i.age=this.nextInputCacheAge++,i.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));const a={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let i=e.psshBoxes;const{psshBox:r}=t.encryption;return null!==r.keyIds&&!r.keyIds.includes(e.keyId)||i.some(e=>rr(e,r))||(i=[...i,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:i})})}},s=new $o({source:new zs(t.location.path,async e=>{W(e.isRoot);const i={...e,isRoot:!1};let r;const a=t.location.offset>0||null!==t.location.length;if(t.encryption&&"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method)if("AES-128"===t.encryption.method){const e=t.encryption;W(e.iv);let s=await this.input._getSourceCached(i);if(a){const e=s.source.slice(t.location.offset,t.location.length??void 0).ref();s.free(),s=e}const n=((e,t,i)=>{let r=!1,a=0;const s=new br;return new ReadableStream({pull:async n=>{r||(s.init(await t()),r=!0);let o=e.requestSliceRange(a,0,65552);if(Ve(o)&&(o=await o),!o||0===o.length)throw new Error("Invalid ciphertext.");const c=o.length;if(c%16!==0)throw new Error("Invalid ciphertext.");const l=65552===c?c-16:c,u=ec(o,l),h=new Uint8Array(l);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=h.subarray(0,l-e);n.enqueue(t),n.close(),i()}},cancel:()=>{i()}})})(new Yo(s.source),async()=>{const t={stack:[],error:void 0,hasError:!1};try{const i=Qs(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},Xo),!1),r=new Yo(i.source),a=await r.requestSlice(0,ur);if(!a)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:ec(a,ur),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{Ys(t)}},()=>{s.free()});r=new Ks(n).ref()}else W(!1);else if(r=await this.input._getSourceCached(i),a){const e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}return r}),formats:this.input._formats.filter(e=>!(e instanceof Tn)),initInput:r??void 0,formatOptions:a});s._onFormatDetermined=e=>{if(("SAMPLE-AES"===t.encryption?.method||"SAMPLE-AES-CTR"===t.encryption?.method)&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:t,input:s,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=Je(this.inputCache,e=>e.age);W(-1!==e),this.inputCache.splice(e,1)}return s}async getLiveRefreshInterval(){return 0===this.getRemainingWaitTimeMs()&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}class tn extends Zi{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{W(this.input._rootSource instanceof Ns);const e=await this.input._reader.requestEntireFile();W(e);const t=kc(e,e.length,{ignore:Cs}),{rootPath:i}=this.input._rootSource,r=[],a=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],n=[...new Set(a.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=await Promise.all(r.map(async(e,t)=>{const r=[],o=e.attributes.get("codecs");let c;if(o)c=o.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=await t.getTrackBackings(),r=await Promise.all(i.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const l=e.attributes.get("video"),u=e.attributes.get("audio"),h=c.some(e=>Ci.includes(Wi(e))),d=c.some(e=>Ei.includes(Wi(e)));if(null!==l&&!h){if(!s.includes(l))throw new Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===l&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Qe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);W(null!==n),c.push(n)}}if(null!==u&&!d){if(!n.includes(u))throw new Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===u&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Qe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);W(null!==n),c.push(n)}}c=[...new Set(c)];let f=null,m=null;const p=e.attributes.getAsNumber("bandwidth");W(null!==p);const g=e.attributes.getAsNumber("average-bandwidth"),k=e.attributes.get("name");for(const i of c){const o=Wi(i);if(null!==o)if(Ci.includes(o)){if(null!==f)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");f=i;const n=e.attributes.get("video");if(null===n){const i=e.attributes.get("resolution");let a=null,s=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(a=Number(e[1]),s=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:ve,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:f,pairingMask:1n<0?a:null}})}else{if(!n.includes(s))throw new Error(`Invalid M3U8 file; variant stream references audio group "${s}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of a){const a=i.attributes.get("group-id"),n=i.attributes.get("type");if(a!==s||"audio"!==n.toLowerCase())continue;const o=i.attributes.get("channels")??e.attributes.get("channels"),c=null!==o?Number(o.split("/")[0]):null;r.push({id:-1,demuxer:this,backingTrack:null,default:nn(i.attributes),autoselect:nn(i.attributes)||on(i.attributes),languageCode:cn(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:i.fullPath??e.fullPath,fullCodecString:m,pairingMask:1n<0?c:null}})}}}}return r})),c=[],l=e=>{const t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||(t.default=e.default),t.autoselect||(t.autoselect=e.autoselect),t.lineNumber=Math.min(t.lineNumber,e.lineNumber),null!==e.peakBitrate&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),null!==e.averageBitrate&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===ve&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(const u of o)for(const e of u)l(e);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of c)"video"===u.info.type?this.trackBackings.push(new an(u)):this.trackBackings.push(new sn(u));this.internalTracks=c})())}async getTrackBackings(){return await this.readMetadata(),W(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new en(this,e,i,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return ps}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class rn{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof an){for(const r of i)if(await r.getCodec()===this.getCodec()){t=r;break}}else{W(this instanceof sn);for(const e of i)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t})())}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return{...ct,default:this.internalTrack.autoselect,primary:this.internalTrack.default}}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){W(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}}class an extends rn{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return Wi(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}async getColorSpace(){return await this.hydrate(),this.backingVideoTrack.getColorSpace()}async canBeTransparent(){return await this.hydrate(),this.backingVideoTrack.canBeTransparent()}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingVideoTrack.getDecoderConfig()}}class sn extends rn{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return Wi(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}}const nn=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},on=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},cn=e=>{if(null===e)return ve;const t=e.split("-")[0];return t||ve};class ln{constructor(){this._isIsobmff=!1}}class un extends ln{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(Ve(t)&&(t=await t),!t)return null;t.skip(4);const i=gc(t,4);return"ftyp"!==i&&"styp"!==i?null:gc(t,4)}_createDemuxer(e){return new wr(e)}}class hn extends un{async _canReadInput(e){const t=await this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Ve(t)&&(t=await t),!t)return!1;let r=oc(t),a=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Ve(t)&&(t=await t),!t)return!1;r=hc(t),a=16}if(r8)return!1;if(Kr(i,r)!==zr.EBML)return!1;const a=$r(i);if("number"!==typeof a)return!1;let s=e._reader.requestSlice(i.filePos,a);if(Ve(s)&&(s=await s),!s)return!1;const n=i.filePos;for(;s.filePos<=n+a-2;){const e=Gr(s);if(!e)break;const{id:i,size:r}=e,a=s.filePos;if(void 0===r)return!1;switch(i){case zr.EBMLVersion:if(1!==Kr(s,r))return!1;break;case zr.EBMLReadVersion:if(1!==Kr(s,r))return!1;break;case zr.DocType:if(Qr(s,r)!==t)return!1;break;case zr.DocTypeVersion:if(Kr(s,r)>4)return!1}s.filePos=a+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new Pa(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class mn extends fn{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class pn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}const i=await Ba(e._reader,t,t+4096);if(!i)return!1;const r=i.header,a=Xi(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+a,4);if(Ve(s)&&(s=await s),!s)return!1;const n=oc(s);if(n===ji||n===Ki)return!0;t=i.startPos+i.header.totalSize;const o=await Ba(e._reader,t,t+4);if(!o)return!1;const c=o.header;return r.channel===c.channel&&r.sampleRate===c.sampleRate}_createDemuxer(e){return new Ea(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class gn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(Ve(t)&&(t=await t),!t)return!1;const i=gc(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===gc(t,4)}_createDemuxer(e){return new ja(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class kn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return Ve(t)&&(t=await t),!!t&&"OggS"===gc(t,4)}_createDemuxer(e){return new La(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class yn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Ve(i)&&(i=await i),!!i&&"fLaC"===gc(i,4)}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new Ja(e)}}class bn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Ve(i)&&(i=await i),!i)return!1;const r=$a(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Ve(i)&&(i=await i),!i)return!1;const a=$a(i);return!!a&&(r.objectType===a.objectType&&r.samplingFrequencyIndex===a.samplingFrequencyIndex&&r.channelConfiguration===a.channelConfiguration)}_createDemuxer(e){return new Qa(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class wn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,205);if(Ve(t)&&(t=await t),!t)return!1;const i=ec(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])}_createDemuxer(e){return new ns(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class Tn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(Ve(t)&&(t=await t),!t)return!1;if(!("#EXTM3U"===gc(t,7)))return!1;if(!(e._rootSource instanceof Ns))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new tn(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return ps}}const Sn=new hn,vn=new dn,Pn=new fn,In=new mn,xn=new pn,Cn=new gn,Bn=new kn,En=new bn,_n=new yn,Rn=new wn,Fn=new Tn,An=[Fn,Sn,vn,Pn,In,Cn,Bn,_n,xn,En,Rn],Mn=[Fn,Sn,vn,xn,En,Rn];var Dn=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});$e();let Nn=-1/0,On=-1/0,zn=null;"undefined"!==typeof FinalizationRegistry&&(zn=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Nn>=1e3&&(st._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Nn=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-On>=1e3&&(st._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),On=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class Ln{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Un=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],qn=new Set(Un);class Wn{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(Re*this.timestamp)}get microsecondDuration(){return Math.trunc(Re*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!qn.has(t.format))throw new TypeError("init.format must be one of: "+Un.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&et(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0;const i=t.layout??Jn(t.format,t.codedWidth,t.codedHeight);let r=t.colorSpace??null;null===r&&(r="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:t.visibleRect?.left??0,top:t.visibleRect?.top??0,width:t.visibleRect?.width??t.codedWidth,height:t.visibleRect?.height??t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?$(e):$(e).slice(),this._layout=i,this.colorSpace=new Xn(r)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==t?.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==t?.timestamp&&!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==t?.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==t?.visibleRect&&et(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:e.visibleRect?.x??0,top:e.visibleRect?.y??0,width:e.visibleRect?.width??e.codedWidth,height:e.visibleRect?.height??e.codedHeight},this.rotation=t?.rotation??0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=t?.timestamp??e.timestamp/1e6,this.duration=t?.duration??(e.duration??0)/1e6,this.colorSpace=new Xn(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&et(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new Wn(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*Re),duration:Math.trunc((t.duration??0)*Re)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const a=t.visibleRect??{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(a.width,a.height),n=s.getContext("2d",{alpha:Le(),willReadFrequently:!0});if(!n)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");n.drawImage(e,-a.left,-a.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:a.width,height:a.height},this.squarePixelWidth=a.width,this.squarePixelHeight=a.height,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new Xn({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof Ln))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Un.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=e.getColorSpace()}this.encodeOptions=t?.encodeOptions??{},this.pixelAspectRatio=Ze({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),zn?.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return W(null!==this._data),this._data instanceof Ln?new Wn(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):$n(this._data)?new Wn(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(W(this._layout),new Wn(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new Wn(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(zn?.unregister(this),this._data instanceof Ln?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):$n(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){if(Yn(e),this._closed)throw new Error("VideoSample is closed.");if(null==(e.format??this.format))throw new Error("Cannot get allocation size when format is null.");if($n(this._data))return this._data.allocationSize(e);return eo(this,e).allocationSize}async copyTo(e,t={}){if(!ne(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(Yn(t),this._closed)throw new Error("VideoSample is closed.");if(null==(t.format??this.format))throw new Error("Cannot copy video sample data when format is null.");if(W(null!==this._data),$n(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof Ln)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=await i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},t.colorSpace??"srgb"),!1);if(!(r instanceof Wn))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(r.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${r.format}' instead.`);return await r.copyTo(e,t)}catch(c){i.error=c,i.hasError=!0}finally{Dn(i)}}}const i=eo(this,t);W(this.format);const r=$(e);if(r.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');s=e}else if(this._data instanceof Uint8Array)W(this._layout),W(this._layout.length===a.length),s=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");W(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);s=[{data:$(t.data),stride:4*this.codedWidth}]}const n=[],o=a.length;for(let l=0;la.byteLength)throw new Error("Source buffer OOB read.");if(c+u>r.byteLength)throw new Error("Destination buffer OOB write.");const i=a.subarray(o,o+u);r.set(i,c),o+=t,c+=e.destinationStride}n.push(h)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),a=this.format.includes("X")&&t.format.includes("A");if(e||a)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const a=[];for(const s of e)i.set(s.data,r),a.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:a[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return $n(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(W(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,a,s,n,o,c){let l=0,u=0,h=this.displayWidth,d=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(l=t,u=i,h=r,d=a,f=s,m=n,void 0!==o?(p=o,g=c):(p=h,g=d)):(f=t,m=i,void 0!==r&&(p=r,g=a)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(l))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:l,sy:u,sWidth:h,sHeight:d}=this._rotateSourceRegion(l,u,h,d,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const w=this.rotation%180===0?1:p/g;e.scale(1/w,w),e.drawImage(k,l,u,h,d,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&Qn(t.crop,"options.");const i=e.canvas.width,r=e.canvas.height,a=t.rotation??this.rotation,[s,n]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let o,c,l,u,h=t.crop;h&&(h=Gn(h,s,n));const{sx:d,sy:f,sWidth:m,sHeight:p}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??s,t.crop?.height??n,a);if("fill"===t.fit)o=0,c=0,l=i,u=r;else{const[e,a]=t.crop?[t.crop.width,t.crop.height]:[s,n],h="contain"===t.fit?Math.min(i/e,r/a):Math.max(i/e,r/a);l=e*h,u=a*h,o=(i-l)/2,c=(r-u)/2}e.save();const g=a%180===0?1:l/u;e.translate(i/2,r/2),e.rotate(a*Math.PI/180),e.scale(1/g,g),e.translate(-i/2,-r/2),e.drawImage(this.toCanvasImageSource(),d,f,m,p,o,c,l,u),e.restore()}_rotateSourceRegion(e,t,i,r,a){return 90===a?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===a?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===a&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,a=e.height,[s,n]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,c=i.crop?i.crop.height:n;let l=0;2*r0?Kn(u,h):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,h)):m||f.clearRect(0,0,u,h),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=l;p>1;p--){const e=r*2**p,t=a*2**p;f.drawImage(d,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",l>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(d,0,0,2*r,2*a,0,0,r,a),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(W(null!==this._data),this._data instanceof Ln||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}async transform(e){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&Qn(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const t=H(this.rotation+(e.rotate??0)),[i,r]=t%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let a=e.crop;a&&(a=Gn(a,i,r));const s=a?a.width:i,n=a?a.height:r,o=s/n;let c,l;void 0!==e.width&&void 0===e.height?(c=e.width,l=c/o):void 0===e.width&&void 0!==e.height?(l=e.height,c=l*o):void 0!==e.width&&void 0!==e.height?(c=e.width,l=e.height):(c=s,l=n),c=Ie(c,e.roundDimensionsTo??1),l=Ie(l,e.roundDimensionsTo??1);const u={width:c,height:l,fit:e.fit??"fill",rotation:t,crop:a??{left:0,top:0,width:i,height:r},alpha:e.alpha??"keep"};for(const m of Hn){let e=m(this,u);if(Ve(e)&&(e=await e),null!==e)return e}const{canvas:h,context:d,isNew:f}=Kn(u.width,u.height);return this._drawWithFitAndMipmapping(h,d,{fit:u.fit,rotation:u.rotation,crop:u.crop,targetIsFresh:f,fillBlack:"discard"===u.alpha}),new Wn(h,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const Hn=[],Vn=[];let jn=0;const Kn=(e,t)=>{for(const a of Vn)if(a.canvas.width===e&&a.canvas.height===t)return a.age=jn++,{canvas:a.canvas,context:a.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return Vn.length>=3&&Vn.splice(Je(Vn,e=>e.age),1),Vn.push({canvas:i,context:r,age:jn++}),{canvas:i,context:r,isNew:!0}};class Xn{constructor(e){if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(J);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(ee);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(ie);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const $n=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Gn=(e,t,i)=>{const r=Math.min(e.left,t),a=Math.min(e.top,i),s=Math.min(e.width,t-r),n=Math.min(e.height,i-a);return W(s>=0),W(n>=0),{left:r,top:a,width:s,height:n}},Qn=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},Yn=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Jn=(e,t,i)=>{const r=Zn(e),a=[];let s=0;for(const n of r){const e=Math.ceil(t/n.widthDivisor),r=Math.ceil(i/n.heightDivisor),o=e*n.sampleBytes,c=o*r;a.push({offset:s,stride:o}),s+=c}return a},Zn=e=>{const t=(e,t,i,r,a)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return a&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:ye(e),W(!1)}},eo=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,a=to(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let n;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");n=t.format}else n=e.format;return ro(a,n,s)},to=(e,t,i,r,a)=>{const s={...e};if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!io(a,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},io=(e,t)=>{if(null===e)return!0;const i=Zn(e);for(let r=0;r{const r=Zn(t),a=r.length;if(void 0!==i&&i.length!==a)throw new TypeError(`Layout must have ${a} planes.`);let s=0;const n=[],o=[];for(let c=0;c4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(d),s=Math.max(s,d);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(oo(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*oo(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const r=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-i;if(r>this.numberOfFrames-i)throw new RangeError("frameCount out of range");const a=oo(t),s=co(t);if(s&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(s?r:r*this.numberOfChannels)*a}copyTo(e,t){if(!ne(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!ao.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:a}=t;let{planeIndex:s}=t,n=this.format;const o=i??this.format;if(!o)throw new Error("Destination format not determined");const c=this.numberOfFrames,l=this.numberOfChannels,u=a??0;if(u>=c)throw new RangeError("frameOffset out of range");const h=void 0!==r?r:c-u;if(h>c-u)throw new RangeError("frameCount out of range");const d=oo(o),f=co(o);if(f&&s>=l)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?h:h*l)*d;if(e.byteLength2&&o!==n)return void fo(this._data,p,n,o,l,s,u,h);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:h,format:o})}catch(S){if("f32-planar"===o)throw S;n="f32-planar"}}const k=lo(n),y=oo(n),b=co(n);let w;if(this._data instanceof so){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=c*y*(b?1:l);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)w=e(s),s=0;else{w=new Uint8Array(c*y*l);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(a,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new no({data:a,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(zn?.unregister(this),this._data instanceof so?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):ho(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof so?this._createAudioDataFromData():ho(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(co(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const a=Math.min(s,o),c=new Float32Array(i*a);for(let t=0;t0;){const a=Math.min(s,o),l=new Float32Array(i*a);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},co=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},lo=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},uo=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,Se(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,Se(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,Se(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},ho=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,fo=(e,t,i,r,a,s,n,o)=>{const c=lo(i),l=uo(r),u=oo(i),h=oo(r),d=co(i);if(co(r))if(d){const r=new ArrayBuffer(o*u),a=G(r);e.copyTo(r,{planeIndex:s,frameOffset:n,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},ko=e=>{if(!Ge(e))throw new TypeError("timestamp must be a number.")},yo=(e,t,i)=>i.verifyKeyPackets?t.then(async t=>{if(!t||"delta"===t.type)return t;const i=await e.determinePacketType(t);return i&&(t.type=i),t}):t;class bo{constructor(e){if(!(e instanceof Mo))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(go(e),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){go(e);const t=await this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(ko(e),go(t),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(go(t),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(ko(e),go(t),this._track.input._disposed)throw new Qo;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=await this._track._backing.getKeyPacket(e,t);if(!i)return i;W("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getKeyPacket(i.timestamp-1/await this._track.getTimeResolution(),t):i}async getNextKeyPacket(e,t={}){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(go(t),this._track.input._disposed)throw new Qo;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=await this._track._backing.getNextKeyPacket(e,t);if(!i)return i;W("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getNextKeyPacket(i,t):i}packets(e,t,i={}){if(void 0!==e&&!(e instanceof tr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!i?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof tr))throw new TypeError("endPacket must be an EncodedPacket.");if(go(i),this._track.input._disposed)throw new Qo;const r=[];let{promise:a,resolve:s}=me(),{promise:n,resolve:o}=me(),c=!1,l=!1,u=null,h=!1;const d=[],f=()=>Math.max(2,d.length);(async()=>{let u=e??await this.getFirstPacket(i);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);)r.length>f()?(({promise:n,resolve:o}=me()),await n):(r.push(u),s(),({promise:a,resolve:s}=me()),u=await this.getNextPacket(u,i));c=!0,s()})().catch(e=>{h||(u=e,h=!0,s())});const m=this._track;return{async next(){for(;;){if(m.input._disposed)throw new Qo;if(l)return{value:void 0,done:!0};if(h)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(d.push(t);d.length>0&&t-d[0]>=1e3;)d.shift();return o(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};await a}},return:async()=>(l=!0,o(),s(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}class wo{constructor(e,t){this.onSample=e,this.onError=t}}class To{mediaSamplesInRange(e=-1/0,t=1/0,i){ko(e),ko(t);const r=[];let a=!1,s=null,{promise:n,resolve:o}=me(),{promise:c,resolve:l}=me(),u=!1,h=!1,d=!1,f=null,m=null,p=!1;const g={...i,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{f=await this._createDecoder(i=>{l(),i.timestamp>=t&&(h=!0),h?i.close():(s&&(i.timestamp>e?(r.push(s),a=!0):s.close()),i.timestamp>=e&&(r.push(i),a=!0),s=a?null:i,r.length>0&&(o(),({promise:n,resolve:o}=me())))},e=>{p||(m=e,p=!0,o())});const i=this._createPacketSink(),k=await i.getKeyPacket(e,g)??await i.getFirstKeyPacket(g);let y=k;const b=i.packets(k??void 0,void 0,g);for(await b.next();y&&!h&&!this._track.input._disposed;){const e=So(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:c,resolve:l}=me()),await c;continue}f.decode(y);const t=await b.next();if(t.done)break;y=t.value}await b.return(),d||this._track.input._disposed||await f.flush(),!a&&s&&r.push(s),u=!0,o()})().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{f?.close()});const k=this._track,y=()=>{s?.close();for(const e of r)e.close()};return{async next(){for(;;){if(k.input._disposed)throw d=!0,h=!0,y(),new Qo;if(d)return{value:void 0,done:!0};if(p)throw d=!0,h=!0,y(),m;if(r.length>0){const e=r.shift();return l(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};await n}},return:async()=>(d=!0,h=!0,l(),o(),y(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()}(e),r=[],a=[];let{promise:s,resolve:n}=me(),{promise:o,resolve:c}=me(),l=!1,u=!1,h=null,d=null,f=!1;const m=e=>{a.push(e),n(),({promise:s,resolve:n}=me())},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{h=await this._createDecoder(e=>{if(c(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(d=e,f=!0,n())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=async()=>{W(s),W(h);let t=s;for(h.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:c}=me()),await o;if(u)break;const r=await e.getNextPacket(t,p);W(r),h.decode(r),t=r}g=-1},y=async()=>{W(h),await h.flush();for(let e=0;e{f||(d=e,f=!0,n())}).finally(()=>{h?.close()});const g=this._track,k=()=>{for(const e of a)e?.close()};return{async next(){for(;;){if(g.input._disposed)throw u=!0,k(),new Qo;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),d;if(a.length>0){const e=a.shift();return W(void 0!==e),c(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};await s}},return:async()=>(u=!0,c(),n(),k(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}const So=e=>0===e?40:8;class vo extends wo{constructor(e,t,i,r,a,s){super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=a,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new De,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const n=mo.find(e=>e.supports(i,r));if(n)this.customDecoder=new n,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Wn))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();W(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(qe()){if("avc"===i&&this.decoderConfig.description){const e=Rt($(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=At(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"}),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=Dt(t),this.decoderConfig={...this.decoderConfig,description:_t(e)}))}}ae(this.decoderConfig.colorSpace)||(this.decoderConfig={...this.decoderConfig,colorSpace:{primaries:this.decoderConfig.colorSpace?.primaries??"bt709",matrix:this.decoderConfig.colorSpace?.matrix??"bt709",transfer:this.decoderConfig.colorSpace?.transfer??"bt709",fullRange:this.decoderConfig.colorSpace?.fullRange??!1}})}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(W(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(W(this.decoder),Oe()||fe(this.inputTimestamps,e.timestamp,e=>e),qe()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const a of vt(e.data,this.decoderConfig)){const r=Pt(e.data[a.offset]);if(i||(i=r>=1&&r<=5),r===kt.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(a.offset,a.offset+a.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&$(t.description)[4];return Bt(e,i+1)}return Ct(e)})(t,this.decoderConfig);e=new tr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Gt(e.data,this.decoderConfig);t&&(e=new tr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Io),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();W(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();W(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=ri(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(t??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Nt(e,this.decoderConfig)){const i=Ot(e[t.offset]);if(i===bt.RASL_N||i===bt.RASL_R)return!0}return!1}sampleHandler(e){if(Oe()){if(this.sampleQueue.length>0&&e.timestamp>=V(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}fe(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();W(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){const i=me();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){W(this.merger);const i=await this.merger.merge(e,t);r.sample=new Wn(i)}else r.sample=new Wn(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(a){pe(this.finalSamples,r),this.onError(a)}finally{pe(this.mergeAlphaPromises,i.promise),i.resolve()}}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(W(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Oe()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(W(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.merger?.close());for(const e of this.sampleQueue)e.close();this.sampleQueue.length=0}}let Po=null;class Io{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!Po){const e=new Blob([`(${xo.toString()})()`],{type:"application/javascript"});Po=URL.createObjectURL(e)}const e=Se(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=me();this.pendingRequests.set(i,r);const a=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,a.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const xo=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:a,alpha:s}=e.data;i=i.then(async()=>{try{const e=await r(a,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{a.close(),s.close()}})});const r=async(e,t)=>{const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),c=i.includes("P12"),l=r.includes("P10"),u=r.includes("P12");if(l!==o||u!==c)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return await a(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return await s(e,t,i);if("NV12"===i)return await n(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)},a=async(e,t,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=new Uint8Array(4*s);await e.copyTo(n);const c=await o(t,r,a,1);for(let o=0,u=3;o{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=i.includes("P10"),n=i.includes("P12"),c=s||n?2:1;let l,u;i.startsWith("I420")?(l=Math.ceil(r/2),u=Math.ceil(a/2)):i.startsWith("I422")?(l=Math.ceil(r/2),u=a):(l=r,u=a);const h=r*a,d=h*c,f=l*u*c,m=new Uint8Array(d+2*f+h*c);await e.copyTo(m);const p=await o(t,r,a,c),g=d+2*f;m.set(p,g);const k={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:r,codedHeight:a,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[m.buffer]};return new VideoFrame(m,k)},n=async(e,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=Math.ceil(r/2)*Math.ceil(a/2),c=e.allocationSize();t&&t.byteLength===c||(t=new Uint8Array(c)),await e.copyTo(t);const l=new Uint8Array(s+2*n+s);l.set(t.subarray(0,s),0);const u=s,h=s+n,d=s;for(let o=0;o{const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),await t.copyTo(e);const n=t.format;if("RGBA"===n||"BGRA"===n||"RGBX"===n||"BGRX"===n){const t="RGBA"===n||"RGBX"===n?0:2,a=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class Bo extends To{constructor(e,t={}){if(!(e instanceof Oo))throw new TypeError("videoTrack must be an InputVideoTrack.");Co(t),super(),this._track=e,this._decoderOptions=t}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(We("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getRotation();let a=await this._track.getDecoderConfig();const s=await this._track.getTimeResolution();return W(i&&a),a={...a,hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency},new vo(e,t,i,a,r,s)}_createPacketSink(){return new bo(this._track)}async getSample(e,t={}){ko(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Eo{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof Oo))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&Qn(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Co(t.decoderOptions),this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??"fill",this._videoSampleSink=new Bo(e,t.decoderOptions),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??(this._initPromise=(async()=>{const e=this._options,t=this._videoTrack,i=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),a=await t.getSquarePixelHeight(),[s,n]=i%180===0?[r,a]:[a,r];let o=e.crop;o&&(o=Gn(o,s,n));let[c,l]=o?[o.width,o.height]:[s,n];const u=c/l;void 0!==e.width&&void 0===e.height?(c=e.width,l=Math.round(c/u)):void 0===e.width&&void 0!==e.height?(l=e.height,c=Math.round(l*u)):void 0!==e.width&&void 0!==e.height&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=i,this._crop=o})())}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],a=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||Le()});W(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:a,fillBlack:!this._alpha&&Le()});const n={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),n}async getCanvas(e,t){ko(e),await this._ensureInit();const i=await this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)}async*canvases(e,t,i){await this._ensureInit(),yield*Te(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*Te(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}}class _o extends wo{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new De,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const a=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const a=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(a*s)/s),e(t)},s=po.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof no))throw new TypeError("The argument passed to onSample must be an AudioSample.");a(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{a(new no(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(W(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(W(this.decoder),this.expectedFirstTimestamp??(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(W(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(W(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class Ro extends wo{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,W(Bi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:a,littleEndian:s}=qi(this.codec);switch(this.inputSampleSize=a,a){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-128:"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const a=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let a=0;return a=4!==i?1<e.getUint16(t,s)-32768:"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):W(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>be(e,t,s)-2**23:"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>be(e,t,i)<<8>>8)(e,t,s):W(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-2**31:"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):W(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):W(!1);break;default:ye(a),W(!1)}switch(a){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+128));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:ye(a),W(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=G(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,a=new ArrayBuffer(r),s=new DataView(a);for(let l=0;l=n)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=n;const c=new no({format:this.outputFormat,data:a,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(c)}async flush(){}close(){}}class Fo extends To{constructor(e){if(!(e instanceof zo))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(We("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getDecoderConfig();return W(i&&r),Bi.includes(r.codec)?new Ro(e,t,r):new _o(e,t,i,r)}_createPacketSink(){return new bo(this._track)}async getSample(e,t={}){ko(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ao{constructor(e){if(!(e instanceof zo))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Fo(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){ko(e);const i=await this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)}buffers(e,t,i){return Te(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Te(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class Mo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof Oo}isAudioTrack(){return this instanceof zo}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return Do(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return Do(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return Do(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return Do(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(e){return this._backing.getUnixTimeForTimestamp(e)}async hasUnixTimeMapping(){return null!==await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())}async getDisposition(){return this._backing.getDisposition()}get disposition(){return Do(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){const e=await this._backing.getFirstPacket({metadataOnly:!0});return e?.timestamp??0}async computeDuration(e){const t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return xe((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){const i=new bo(this);let r=1/0,a=-1/0,s=0,n=0;for await(const o of i.packets(void 0,void 0,{metadataOnly:!0,...t})){if(s>=e&&o.timestamp>=a)break;r=Math.min(r,o.timestamp),a=Math.max(a,o.timestamp+o.duration),s++,n+=o.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-r)).toPrecision(16)):0,averageBitrate:s?Number((8*n/(a-r)).toPrecision(16)):0}}async isLive(){return null!==await this._backing.getLiveRefreshInterval()}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(e){if(!(e instanceof Mo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&0n!==(this._backing.getPairingMask()&e._backing.getPairingMask())}async getPairableTracks(e){return this.input.getTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Wo({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&(e=No(e));const t=await this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||await e(i)))return!0;return!1}hasPairableVideoTrack(e){return e&&(e=No(e)),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&(e=No(e)),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}}const Do=(e,t,i)=>{if(Ve(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},No=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Ve(r)?r.then(i):i(r)}:void 0};class Oo extends Mo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return Do(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??"prores"===await this._backing.getCodec()}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return Do(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return Do(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return Do(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return Do(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return Do(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ze({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()}))}get pixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ze({num:Do(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Do(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Do(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Do(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")}))}async getDisplayWidth(){const e=await(this._backing.getMetadataDisplayWidth?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()}get displayWidth(){const e=this._backing.getMetadataDisplayWidth?.();if(void 0!==e){const t=Do(e,"displayWidth","getDisplayWidth");if(null!==t)return t}const t=Do(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Do(t,"displayWidth","getDisplayWidth")}async getDisplayHeight(){const e=await(this._backing.getMetadataDisplayHeight?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()}get displayHeight(){const e=this._backing.getMetadataDisplayHeight?.();if(void 0!==e){const t=Do(e,"displayHeight","getDisplayHeight");if(null!==t)return t}const t=Do(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Do(t,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){const e=await this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(W(null!==t),mo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(await VideoDecoder.isConfigSupported(e)).supported}catch(e){return st._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=await this.getCodec();if(null===t)return null;const i=await this.getDecoderConfig();return W(i),ri(t,i,e.data)}async computeFrameRateMetrics(e={}){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Ge(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const t=await this.getTimeResolution(),i=e.targetPacketCount??256,r=new bo(this),a=[];let s=-1/0,n=0;for await(const I of r.packets(void 0,void 0,{metadataOnly:!0})){if(a.length>=i&&I.timestamp>=s)break;a.push(I.timestamp),s=Math.max(s,I.timestamp),n++}const o=new Float64Array(a.length);for(let I=0;Ie-t),b=k-1>>1,w=k>>1;let T=0,S=0,v=0;for(const I of y)if(v+=f.get(I),0===T&&v>b&&(T=I),v>w){S=I;break}const P=(h/T+h/S)/2;return{underlyingFrameRate:u,bestGuessFrameRate:null!==u?u:Ko(P),minFrameRate:h/p,maxFrameRate:h/m,averageFrameRate:h*k/g,medianFrameRate:P,frameRateIsConstant:null!==u&&1===m&&1===p,probedPacketCount:n}}}class zo extends Mo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return Do(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return Do(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return Do(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(W(null!==t),po.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(await AudioDecoder.isConfigSupported(e)).supported}catch(e){return st._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");return null===await this.getCodec()?null:"key"}}const Lo=e=>-(e??-1/0),Uo=e=>-e,qo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Ve(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Ve(r)?r.then(i):i(r)}:void 0}},Wo=(e,t)=>({filter:e?.filter||t?.filter?i=>{const r=e?.filter?.(i)??!0,a=e=>!1!==e&&(t?.filter?.(i)??!0);return Ve(r)?r.then(a):a(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?i=>{const r=e?.sortBy?.(i)??[],a=t?.sortBy?.(i)??[],s=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Ve(r)||Ve(a)?Promise.all([r,a]).then(([e,t])=>s(e,t)):s(r,a)}:void 0}),Ho=async(e,t)=>{let i=e;if(t?.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Ve(e))){const t=await Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!t?.sortBy)return i;const r=i.map(e=>t.sortBy(e)),a=r.some(e=>Ve(e))?await Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:a[t]})).sort((e,t)=>{const i=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(i.length,r.length);for(let s=0;se.track)},Vo=(e,t)=>{const i=1e6,r=1+1e-9,a=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let T=1;T0))return null;s[T-1]=t}const n=s.slice();n.sort();let o=n[Math.floor(.05*n.length)];for(let T=0;T<6;T++){let e=0,t=0;for(const a of s){const i=Math.max(1,Math.round(a/o));Math.abs(a-i*o)>=r||(e+=a,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let c=0,l=0,u=0;for(const T of s){const e=Math.max(1,Math.round(T/o));Math.abs(T-e*o)>=r||(c++,l+=T,u+=e)}if(c/s.length<.98)return null;o=l/u;const h=1/Math.min(u,1e3),d=Math.max(Number.EPSILON,o-h),f=o+h,m=t/f,p=t/d,g=t/o;let k=null,y=1/0;for(const T of a){if(Tp)continue;const e=Math.abs(T/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,a=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof ln)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ms||e.source instanceof Ds))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ms&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof $o))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ms?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){W(this._rootSource instanceof Ns);const t=await this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&Os(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&Os(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const a=(async()=>{const i=await this._getSourceUncached(e);if(Ye(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=Je(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);W(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),pe(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);W(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:a}),a.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??(this._demuxerPromise=(async()=>{this._reader=new Yo(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const e of this._formats){if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this)}throw new Go})())}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),W(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof Go)return!1;throw e}}async getFirstTimestamp(e){e??(e=await this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=await Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>e?.timestamp??1/0));return r===1/0?0:r}async computeDuration(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=await Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e),r=(await Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)}async getTracks(e){e&&(e=qo(e));const t=(await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return Ho(t,e)}async getVideoTracks(e){e&&(e=qo(e));const t=(await this.getTracks()).filter(e=>e.isVideoTrack());return Ho(t,e)}async getAudioTracks(e){e&&(e=qo(e));const t=(await this.getTracks()).filter(e=>e.isAudioTrack());return Ho(t,e)}async getPrimaryVideoTrack(e){e&&(e=qo(e));const t=Wo(e,{sortBy:async e=>[Uo((await e.getDisposition()).default),Uo(await e.hasPairableAudioTrack()),Uo(!(await e.hasOnlyKeyPackets())),Lo(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&(e=qo(e));const t=await this.getPrimaryVideoTrack(),i=Wo(e,{sortBy:async e=>[Uo(!t||e.canBePairedWith(t)),Uo((await e.getDisposition()).default),Lo(await e.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){const e=await this._getDemuxer();return this._trackBackingsCache??(this._trackBackingsCache=await e.getTrackBackings())}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new Oo(this,e):new zo(this,e);return this._backingToTrack.set(e,i),i}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class Go extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class Qo extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class Yo{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new Qo;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new Jo(t,G(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,As);return Ve(r)?r.then(t=>t?new Jo(t.bytes,t.view,t.offset,e,i):null):r?new Jo(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new Qo;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,Se(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),a=r=>r||(W(null!==this.fileSizeNonStrict),this.requestSlice(e,Se(this.fileSizeNonStrict-e,t,i)));return Ve(r)?r.then(a):a(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(async()=>{const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Ve(i)&&(i=await i),!i||0===i.length)break;const r=ec(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const a of e)i.set(a,r),r+=a.length;return new Jo(i,G(i),0,0,t)})()}}class Jo{constructor(e,t,i,r,a){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=a,this.bufferPos=r-i}static tempFromBytes(e){return new Jo(e,G(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new Jo(this.bytes,this.view,this.offset,e,e+t)}}const Zo=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},ec=(e,t)=>{Zo(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},tc=e=>(Zo(e,1),e.view.getUint8(e.bufferPos++)),ic=(e,t)=>{Zo(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},rc=e=>{Zo(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},ac=e=>{Zo(e,3);const t=be(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},sc=e=>{Zo(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},nc=(e,t)=>{Zo(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},oc=e=>{Zo(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},cc=e=>{Zo(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},lc=e=>{Zo(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},uc=(e,t)=>{let i,r;return t?(i=nc(e,!0),r=nc(e,!0)):(r=nc(e,!1),i=nc(e,!1)),4294967296*r+i},hc=e=>4294967296*oc(e)+oc(e),dc=e=>4294967296*lc(e)+oc(e),fc=e=>{const t=cc(e),i=(e=>{Zo(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},mc=e=>{Zo(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},pc=e=>{Zo(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},gc=(e,t)=>{Zo(e,t);let i="";for(let r=0;rQ.decode(ec(e,t)).split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!i?.ignore?.(e));var yc,bc,wc,Tc;(bc=yc||(yc={}))[bc.Unsynchronisation=128]="Unsynchronisation",bc[bc.ExtendedHeader=64]="ExtendedHeader",bc[bc.ExperimentalIndicator=32]="ExperimentalIndicator",bc[bc.Footer=16]="Footer",(Tc=wc||(wc={}))[Tc.ISO_8859_1=0]="ISO_8859_1",Tc[Tc.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",Tc[Tc.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",Tc[Tc.UTF_8=3]="UTF_8";const Sc=128,vc=10,Pc=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],Ic=(e,t)=>{var i;const r=e.filePos;t.raw??(t.raw={}),(i=t.raw).TAG??(i.TAG=ec(e,Sc-3)),e.filePos=r;const a=xc(e,30);a&&(t.title??(t.title=a));const s=xc(e,30);s&&(t.artist??(t.artist=s));const n=xc(e,30);n&&(t.album??(t.album=n));const o=xc(e,4),c=Number.parseInt(o,10);Number.isInteger(c)&&c>0&&(t.date??(t.date=new Date(String(c))));const l=ec(e,30);let u;if(0===l[28]&&0!==l[29]){const i=l[29];i>0&&(t.trackNumber??(t.trackNumber=i)),e.skip(-30),u=xc(e,28),e.skip(2)}else e.skip(-30),u=xc(e,30);u&&(t.comment??(t.comment=u));const h=tc(e);h{const i=ec(e,t),r=je(i.indexOf(0),i.length),a=i.subarray(0,r);let s="";for(let n=0;n{const t=e.filePos,i=gc(e,3),r=tc(e),a=tc(e),s=tc(e),n=oc(e);if("ID3"!==i||255===r||255===a||0!==(2155905152&n))return e.filePos=t,null;let o=Gi(n);return s&yc.Footer&&(o+=vc),{majorVersion:r,revision:a,flags:s,size:o}},Bc=(e,t,i)=>{var r,a,s,n,o;if(![2,3,4].includes(t.majorVersion))return void st._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&yc.Footer?t.size-vc:t.size,l=ec(e,c),u=new Ec(t,l);if(t.flags&yc.Unsynchronisation&&3===t.majorVersion&&u.ununsynchronizeAll(),t.flags&yc.ExtendedHeader){const e=u.readU32();3===t.majorVersion?u.pos+=e:u.pos+=e-4}for(;u.pos<=u.bytes.length-u.frameHeaderSize();){const e=u.readId3V2Frame();if(!e)break;const c=u.pos,l=u.pos+e.size;let h=!1,d=!1,f=!1;if(3===t.majorVersion?(h=!!(64&e.flags),d=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),d=!!(8&e.flags),f=!!(2&e.flags)||!!(t.flags&yc.Unsynchronisation)),h)st._warn(`Skipping encrypted ID3v2 frame ${e.id}`),u.pos=l;else if(d)st._warn(`Skipping compressed ID3v2 frame ${e.id}`),u.pos=l;else{if(f&&u.ununsynchronizeRegion(u.pos,l),i.raw??(i.raw={}),"TXXX"===e.id){const e=(r=i.raw).TXXX??(r.TXXX={}),t=u.readId3V2TextEncoding(),a=u.readId3V2Text(t,l),s=u.readId3V2Text(t,l);e[a]??(e[a]=s)}else"T"===e.id[0]?(a=i.raw)[s=e.id]??(a[s]=u.readId3V2EncodingAndText(l)):(n=i.raw)[o=e.id]??(n[o]=u.readBytes(e.size));switch(u.pos=c,e.id){case"TIT2":case"TT2":i.title??(i.title=u.readId3V2EncodingAndText(l));break;case"TIT3":case"TT3":i.description??(i.description=u.readId3V2EncodingAndText(l));break;case"TPE1":case"TP1":i.artist??(i.artist=u.readId3V2EncodingAndText(l));break;case"TALB":case"TAL":i.album??(i.album=u.readId3V2EncodingAndText(l));break;case"TPE2":case"TP2":i.albumArtist??(i.albumArtist=u.readId3V2EncodingAndText(l));break;case"TRCK":case"TRK":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.trackNumber??(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.tracksTotal??(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.discNumber??(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.discsTotal??(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=u.readId3V2EncodingAndText(l);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==Pc[e]){i.genre??(i.genre=Pc[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==Pc[e]){i.genre??(i.genre=Pc[e]);break}}i.genre??(i.genre=e)}break;case"TDRC":case"TDAT":{const e=u.readId3V2EncodingAndText(l),t=new Date(e);Number.isNaN(t.getTime())||(i.date??(i.date=t))}break;case"TYER":case"TYE":{const e=u.readId3V2EncodingAndText(l),t=Number.parseInt(e,10);Number.isInteger(t)&&(i.date??(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.lyrics??(i.lyrics=u.readId3V2Text(e,l))}break;case"COMM":case"COM":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.comment??(i.comment=u.readId3V2Text(e,l))}break;case"APIC":case"PIC":{const e=u.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=u.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=u.readId3V2Text(e,l);const a=u.readU8(),s=u.readId3V2Text(e,l).trimEnd(),n=l-u.pos;if(n>=0){const e=u.readBytes(n);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===a?"coverFront":4===a?"coverBack":"unknown",description:s})}}break;default:u.pos+=e.size}u.pos=l}}};class Ec{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Gi(t);s(e)&&(i=e)}return this.pos=a,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case wc.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=je(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=je(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Q.decode(r.subarray(0,e))}case wc.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=je(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case wc.UTF_8:{const e=je(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Q.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class _c{constructor(e){this.host=e,this.closed=!1,this.resumes=new WeakMap}ensure(e){if(this.closed)return null;if(this.host.audioContext)return this.host.audioContext;const t=window.AudioContext||window.webkitAudioContext;let i;try{i=new t({sampleRate:e})}catch{i=new t}if(this.closed)return i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null;let r=null;try{r=i.createGain(),r.connect(i.destination);const e=this.host.muted?0:this.host.volume;return r.gain.value=e*e,this.closed?(r.disconnect(),i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null):(this.host.audioContext=i,this.host.gainNode=r,i)}catch(a){try{r?.disconnect()}catch(s){console.warn("MediaBunny gain setup cleanup:",s)}throw i.close().catch(e=>console.warn("MediaBunny context setup cleanup:",e)),a}}updateGain(){if(!this.host.gainNode)return;const e=this.host.muted?0:this.host.volume;this.host.gainNode.gain.value=e*e}resume(e){const t=this.resumes.get(e);if(t)return t;const i=e.resume();this.resumes.set(e,i);const r=()=>{this.resumes.get(e)===i&&this.resumes.delete(e)};return i.then(r,r),i}destroy(){if(this.closed)return;this.closed=!0;const{audioContext:e,gainNode:t}=this.host;this.host.audioContext=null,this.host.gainNode=null;try{t?.disconnect()}finally{e&&e.close().catch(e=>console.warn("MediaBunny context close error:",e))}}}class Rc{constructor(e){this.host=e}release(e,t){this.host.queuedNodes.delete(e),e.onended=null;let i,r=!1;try{t&&e.stop()}catch(a){r=!0,i=a}try{e.disconnect()}catch(a){r||(r=!0,i=a)}if(r)throw i}stop(){const e=[];for(const i of[...this.host.queuedNodes])try{this.release(i,!0)}catch(t){e.push(t)}if(e.length)throw e[0]}schedule({buffer:e,timestamp:t}){const i=this.host.audioContext,r=this.host.gainNode;if(!i||!r)return;const a=function(e,t,i,r){const a=e.audioContextStartTime+(t-e.playbackTimeAtStart)/e.playbackRate,s=(a+i/e.playbackRate-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;return{startAt:Math.max(a,r),offset:a=e.duration)return;const s=i.createBufferSource();this.host.queuedNodes.add(s);try{s.buffer=e,s.connect(r),s.playbackRate.value=this.host.playbackRate,s.onended=()=>{if(this.host.queuedNodes.has(s))try{this.release(s,!1)}catch(e){console.warn("MediaBunny ended node cleanup:",e)}},null===a.offset?s.start(a.startAt):s.start(a.startAt,a.offset),this.host.latestScheduledEndTime=Math.max(this.host.latestScheduledEndTime,a.endMediaTime)}catch(n){try{this.release(s,!0)}catch(o){console.warn("MediaBunny audio node cleanup:",o)}throw n}}}const Fc=Symbol("cancelled");class Ac{constructor(){this.cancelled=!1,this.waits=new Set,this.timers=new Map}wait(e){return new Promise((t,i)=>{const r=()=>t(Fc);this.cancelled?r():this.waits.add(r),e.then(e=>{this.waits.delete(r),t(e)},e=>{this.waits.delete(r),i(e)})})}delay(e){return this.cancelled?Promise.resolve(!1):new Promise(t=>{const i=setTimeout(()=>{this.timers.delete(i),t(!this.cancelled)},e);this.timers.set(i,t)})}cancel(){if(!this.cancelled){this.cancelled=!0;for(const e of this.waits)e();this.waits.clear();for(const[e,t]of this.timers)clearTimeout(e),t(!1);this.timers.clear()}}}function Mc(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}class Dc{constructor(e,t,i){this.host=e,this.contexts=t,this.nodes=i,this.task=null,this.closing=new WeakMap}async stopIterator(){const e=this.host.audioIterator;if(this.host.audioIterator=null,!e)return;let t=this.closing.get(e);t||(t=Promise.resolve().then(()=>e.return()).then(()=>{}),this.closing.set(e,t)),await t}cancel(){this.task?.cancel(),this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e))}async run(e){if(this.host.asyncId!==e)return;this.cancel();const t=this.host.audioSink,i=this.host.audioContext;if(!t||!i||this.host.paused||this.host.asyncId!==e)return;const r=new Ac;this.task=r;let a=null;const s=()=>!r.cancelled&&this.task===r&&this.host.asyncId===e&&!this.host.paused&&this.host.audioContext===i&&(!a||this.host.audioIterator===a);try{for(a=t.buffers(this.host.currentTime),this.host.audioIterator=a;s();){const e=[];let t=!1;for(let i=0;i<16;i++){const i=await r.wait(a.next());if(i===Fc||!s())return;if(i.done){t=!0;break}e.push(i.value)}if(e.length&&"suspended"===i.state){if(await r.wait(this.contexts.resume(i))===Fc||!s())return;Mc(this.host.events,s,["canplay","playing"])}for(const i of e){if(!s())return;this.nodes.schedule(i)}if(t)return;if(!(await r.delay(0))||!s())return;for(;this.host.latestScheduledEndTime-this.host.currentTime>1;)if(!(await r.delay(50))||!s())return}}catch(n){if(s())throw n}finally{r.cancel(),this.task===r&&(this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e)))}}}class Nc{constructor(e,h){N(this,u),N(this,t,!1),N(this,i,0),N(this,r),N(this,a),N(this,s),N(this,n,null),N(this,o,null),N(this,c,null),N(this,l),this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set,O(this,r,new _c(this)),O(this,a,new Rc(this)),O(this,s,new Dc(this,D(this,r),D(this,a))),O(this,l,h)}get currentTime(){return(e=this).paused||!e.audioContext?e.playbackTimeAtStart:(e.audioContext.currentTime-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;var e}ensureAudioContext(e){D(this,r).ensure(e)}updateGain(){D(this,r).updateGain()}stopQueuedNodes(){D(this,a).stop()}async stopIterator(){await D(this,s).stopIterator()}handleNoAudioTrack(){D(this,t)||(this.audioSink=null,this.ensureAudioContext())}cancelPending(){L(this,i)._++;try{this.pause()}finally{O(this,c,null),this.input=null,this.audioSink=null}}async load(e,r){if(D(this,t))return;this.cancelPending();const a=D(this,i);this.playbackTimeAtStart=0,this.audioContextStartTime=0,this.latestScheduledEndTime=0;const s=Promise.resolve().then(()=>z(this,u,h).call(this,e,a,r));O(this,c,s);try{await s}finally{D(this,c)===s&&O(this,c,null)}}async runIterator(e){D(this,t)||await D(this,s).run(e)}async play(){if(D(this,t))return;if(D(this,o))return D(this,o);if(!this.paused)return;const e=new Ac;O(this,n,e);const r=D(this,i),a=z(this,u,f).call(this,e,r);O(this,o,a);try{await a}finally{D(this,n)===e&&(O(this,n,null),O(this,o,null))}}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime),this.paused=!0,this.asyncId++,D(this,n)?.cancel(),O(this,n,null),O(this,o,null),D(this,s).cancel(),this.stopQueuedNodes()}async seek(e){if(D(this,t))return;const i=!this.paused;D(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext?.currentTime??0,this.latestScheduledEndTime=this.playbackTimeAtStart;const r=++this.asyncId;i&&z(this,u,d).call(this,r)}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(D(this,t)||e===this.playbackRate)return;const i=this.currentTime;D(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=i,this.audioContextStartTime=this.audioContext?.currentTime??0,this.playbackRate=e,this.latestScheduledEndTime=i;const r=++this.asyncId;this.paused||z(this,u,d).call(this,r)}destroy(){if(D(this,t))return;O(this,t,!0),L(this,i)._++;const e=[];for(const t of[()=>this.pause(),()=>D(this,r).destroy()])try{t()}catch(a){e.push(a)}if(this.input=null,this.audioSink=null,O(this,c,null),e.length)throw e[0]}}async function Oc(e){return await e.getAverageBitrate()??await e.getBitrate()??0}t=new WeakMap,i=new WeakMap,r=new WeakMap,a=new WeakMap,s=new WeakMap,n=new WeakMap,o=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakSet,h=async function({input:e,audioTrack:r,duration:a},s,n){const o=()=>!D(this,t)&&D(this,i)===s;if(o()){this.input=e,this.duration=a;try{const e=r&&null!==r.codec&&await r.canDecode();if(!o())return;if(e){if(this.ensureAudioContext(r.sampleRate),!o())return;this.audioSink=new Ao(r)}else this.handleNoAudioTrack();o()&&n?.()}catch(c){if(o())throw c}}},d=function(e){this.runIterator(e).catch(i=>{if(!D(this,t)&&e===this.asyncId){try{this.pause()}catch(r){console.warn("MediaBunny audio failure cleanup:",r)}try{D(this,l)?D(this,l).call(this,i):this.events.emit("error",i)}catch(r){console.warn("MediaBunny audio error listener:",r)}}})},f=async function(e,a){const s=()=>!D(this,t)&&!e.cancelled&&D(this,i)===a;try{const t=D(this,r).ensure();if(!t||!s())return;if("suspended"===t.state){if(await e.wait(D(this,r).resume(t))===Fc||!s())return}if(D(this,c)){if(await e.wait(D(this,c))===Fc||!s())return}this.audioContextStartTime=t.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1,z(this,u,d).call(this,++this.asyncId)}catch(n){if(s())throw n}};const zc=/\.m3u8(?:$|[?#])/i;function Lc(e){return"string"===typeof e&&zc.test(e)}function Uc(e){const t=function(e){return"string"===typeof e?new Hs(e):e instanceof Blob?new Us(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new Ks(e):e??null}(e);return t?new $o({source:t,formats:Lc(e)?Mn:An}):null}class qc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){return this.controller?.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}async wait(e,t){try{await Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,e?.dispose()}cancel(){if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),this.controller?.abort(),this.disposeInput()}}}async function Wc({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),a=t||i,s=Boolean(a&&await a.isLive());let n=Number.NaN;return r.length>0&&(n=await e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==n||s||(n=await e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:n??Number.NaN}function Hc(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class Vc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null}operation(){return{...Hc(),source:this.host.loadSeq,complete:Hc()}}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,e?.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,e?.complete.resolve(),e?.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}async runPlay(e){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(await this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,await this.host.audio.play(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Mc(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}}seek(e,t){return this.position(async t=>{const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();await Promise.all([i,r])},["seeked"],!1,t)}replace(e,t){return this.position(async i=>{e.duration=await Wc(e),i()&&(this.host.media=e,await Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(await Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))},["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=r??(this.seeking?this.wanted:!this.host.paused),this.cancelPlay();const a=this.seeking,s=this.operation();return this.seeking=s,a?.complete.resolve(),a?.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}async runPosition(e,t,i,r){const a=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!a())return;if(this.host.ended=!1,this.host.seeking=!0,Mc(this.host.events,a,["seeking","waiting"]),!a())return;if(r||this.stop(),!a())return;if(await t(a),!a())return;if(this.host.seeking=!1,e.complete.resolve(),Mc(this.host.events,a,i),!a())return;this.seeking=null,s=this.wanted}catch(n){if(!a())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(n),n}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&await this.play()}}const jc=new WeakMap,Kc=new WeakMap;function Xc(e){const t=Kc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>e.value??null);Kc.set(e,i);const r=()=>{Kc.get(e)===i&&Kc.delete(e)};return i.then(r,r),i}function $c(e,t,i,r,a){const s=i?Math.max(.06,r/Math.max(1,a)):0;return i&&e{if(this.image===a&&t()){this.cancel();try{i(a)}catch(e){r(e)}}},a.onerror=()=>{this.image===a&&this.cancel()},a.src=e}}class Qc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}async update(e){const t=this.host.videoIterator;if(!t||!this.ready()||!this.current(e)||this.host.isFetching)return;const i={};this.fetching=i,this.host.isFetching=!0;const r=()=>this.current(e)&&this.host.videoIterator===t;try{for(;r();){const e=await Xc(t);if(!r()||!e)return;const i=this.host.audioClock?.currentTime;if(void 0===i)return;const a=$c(e.timestamp,i,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==a){if("draw"!==a)return void(this.host.nextFrame=e);this.draw(e)}}}catch(a){if(r())throw a}finally{this.fetching===i&&(this.fetching=null,this.host.isFetching=!1)}}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Mc(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Mc(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!D(this,w),e=>z(this,P,E).call(this,e,!0),e=>z(this,P,C).call(this,e)))}async preflight(e,t,i){return async function(e,t,i,r,a=()=>!0){if(r?.aborted||!a())return!1;if(!t||"string"!==typeof e||Lc(e))return!0;try{const t=await fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if(r?.aborted||!a())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!(r?.aborted||!a())&&(console.warn("Preflight check failed:",s),!0)}}(e,this.preflightRange,this.events,t,i)}drawPoster(){if(D(this,b)||!this.poster||this.posterDrawn)return;const e=D(this,m);D(this,T).draw(this.poster,()=>z(this,P,I).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,z(this,P,x).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>z(this,P,C).call(this,e))}async stopIterator(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,await function(e){if(!e)return Promise.resolve();const t=jc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return jc.set(e,i),i}(e)}clear(){z(this,P,x).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){L(this,m)._++,L(this,p)._++,this.stop(),z(this,P,B).call(this),D(this,T).cancel(),O(this,w,!1),O(this,g,null),O(this,k,null),O(this,y,null),this.videoSink=null,this.input=null}async load(e,t){if(D(this,b))return;this.cancelPending();const i=D(this,m),r=D(this,p);O(this,w,!0);const a=Promise.resolve().then(()=>z(this,P,_).call(this,e,i,r,t));O(this,g,a);try{await a}finally{D(this,g)===a&&O(this,g,null)}}handleNoVideoTrack(){D(this,b)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}async resetIterator(e){if(D(this,b))return;const t=D(this,m),i=++L(this,p)._,r=D(this,g);this.stop(),D(this,T).cancel(),O(this,w,!0);try{r&&await r,await z(this,P,R).call(this,e,t,i)}catch(a){if(z(this,P,I).call(this,t)&&D(this,p)===i)throw z(this,P,B).call(this),a}finally{z(this,P,I).call(this,t)&&D(this,p)===i&&O(this,w,!1)}}async updateNextFrame(e){await D(this,S).update(e)}render(){D(this,S).render()}start(e){D(this,S).start(e)}stop(){D(this,S).stop()}async seek(e){await this.resetIterator(e)}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){D(this,b)||(O(this,b,!0),L(this,m)._++,D(this,S).destroy(),D(this,T).cancel(),z(this,P,B).call(this),this.posterDrawn=!1,O(this,k,null),O(this,y,null),this.videoSink=null,this.input=null,this.audioClock=null)}}m=new WeakMap,p=new WeakMap,g=new WeakMap,k=new WeakMap,y=new WeakMap,b=new WeakMap,w=new WeakMap,T=new WeakMap,S=new WeakMap,v=new WeakMap,P=new WeakSet,I=function(e){return!D(this,b)&&D(this,m)===e},x=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},C=function(e){D(this,b)||(z(this,P,B).call(this),D(this,v)?D(this,v).call(this,e):this.events.emit("error",e))},B=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},E=function(e,t){D(this,T).cancel(),t&&this.clear(),z(this,P,x).call(this).drawImage(e.canvas,0,0)},_=async function(e,t,i,r){if(z(this,P,I).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:a,videoTrack:s,duration:n}=e;if(this.input=a,this.duration=n,!s)return this.handleNoVideoTrack(),void r?.();const o=null!==s.codec&&await s.canDecode();if(!z(this,P,I).call(this,t))return;if(!o)return this.handleNoVideoTrack(),void r?.();const c=await s.canBeTransparent();if(!z(this,P,I).call(this,t))return;O(this,k,()=>new Eo(s,{poolSize:2,fit:"contain",alpha:c})),this.videoSink=D(this,k).call(this),this.width=s.displayWidth,this.height=s.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,r?.(),z(this,P,I).call(this,t)&&await z(this,P,R).call(this,0,t,i)}catch(a){if(z(this,P,I).call(this,t))throw z(this,P,B).call(this),a}finally{z(this,P,I).call(this,t)&&D(this,p)===i&&O(this,w,!1)}},R=async function(e,t,i){if(!z(this,P,I).call(this,t)||D(this,p)!==i)return;z(this,P,B).call(this),D(this,k)&&this.videoSink===D(this,y)&&(this.videoSink=D(this,k).call(this));const r=this.videoSink;if(!r||!z(this,P,I).call(this,t))return;O(this,y,r);const a=r.canvases(e);this.videoIterator=a;const s=()=>z(this,P,I).call(this,t)&&D(this,p)===i&&this.videoIterator===a,n=await Xc(a);if(!s())return;const o=await Xc(a);s()&&(this.nextFrame=o,n?z(this,P,E).call(this,n,!1):this.drawPoster())};class Jc{constructor({canvas:e,ctx:t,events:i,option:r={}}){N(this,F),this.events=i,this.option=r,this.audio=new Nc(i,e=>{try{this.pause()}catch(t){console.warn("MediaBunny audio coordinator cleanup:",t)}this.reportError(e)}),this.video=new Yc({canvas:e,ctx:t,events:i,timeupdateInterval:r.timeupdateInterval??250,avSyncTolerance:r.avSyncTolerance??.12,dropLateFrames:r.dropLateFrames??!1,poster:r.poster??"",preflightRange:r.preflightRange??!1,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,O(this,F,new Vc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,D(this,F).ended(),this.audio.pause())})}async load(e){if(this.destroyed)return;const t=++this.loadSeq;if(D(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),this.loadSession?.cancel(),t!==this.loadSeq||this.destroyed)return;if(this.pause(),t!==this.loadSeq||this.destroyed)return;this.disposeInput();const i=new qc;this.loadSession=i,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,i.defer(()=>this.events.emit("waiting")),i.defer(()=>this.events.emit("loadstart"));const r=Number.isFinite(this.option.loadTimeout)?this.option.loadTimeout??0:0;try{await i.wait(this.performLoad(e,t,i),r)}catch(a){if(t!==this.loadSeq)return;const e=++this.loadSeq;if(D(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),i.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}}async performLoad(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(await this.video.preflight(e,i.signal,r))||!r())return;const a=Uc(e);if(!a)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(a);const s=await async function(e,t){const i=await e.getPrimaryVideoTrack(),r=i?await i.getPrimaryPairableAudioTrack():await e.getPrimaryAudioTrack(),a=await Wc({input:e,videoTrack:i,audioTrack:r}),s=i||r,n=Lc(t);return{input:e,videoTrack:i,audioTrack:r,duration:a,isLive:!Number.isFinite(a)&&Boolean(s&&await s.isLive()),isHls:n,videoMode:n?"auto":"manual",audioMode:n?"auto":"manual"}}(a,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=a,this.media=s;const n=function(e,t){let i=!1,r=!1,a=!1;function s(s){t()&&!a&&("video"===s?i=!0:r=!0,i&&r&&(a=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Mc(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,n.video),t=r()?this.audio.load(s,n.audio):Promise.resolve();if(await Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Mc(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){this.loadSession?.disposeInput(),this.input=null,this.media=null}async replaceTracks(e){if(this.media&&!this.destroyed)return D(this,F).replace({...this.media,...e},this.currentTime)}async selectHlsQuality(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getVideoTracks();if(!s())return;const a="auto"===t?await i.getPrimaryVideoTrack():e.find(e=>e.id===t)??r.videoTrack;if(!s()||!a)return;let o=r.audioTrack,c=r.audioMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableAudioTrack(),c="auto"),n={videoTrack:a,audioTrack:o,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async selectHlsAudio(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getAudioTracks();if(!s())return;const a="auto"===t?r.videoTrack?await r.videoTrack.getPrimaryPairableAudioTrack():await i.getPrimaryAudioTrack():e.find(e=>e.id===t)??r.audioTrack;if(!s()||!a)return;let o=r.videoTrack,c=r.videoMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableVideoTrack(),c="auto"),n={videoTrack:o,audioTrack:a,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async getHlsState(){const e=this.media;if(this.destroyed)return null;try{const t=await async function(e){if(!e?.isHls||!e.input)return null;const[t,i]=await Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[r,a]=await Promise.all([Promise.all(t.map(async(e,t)=>({id:e.id,track:e,index:t,name:await e.getName(),height:await e.getDisplayHeight(),bitrate:await Oc(e)}))),Promise.all(i.map(async(e,t)=>{const i=await e.getName(),r=await e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:await Oc(e)}}))]);return{levels:r,audios:a,currentLevel:e.videoTrack?r.find(t=>t.id===e.videoTrack?.id)??null:null,currentAudio:e.audioTrack?a.find(t=>t.id===e.audioTrack?.id)??null:null,videoMode:e.videoMode??"auto",audioMode:e.audioMode??"auto"}}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}}async play(){return D(this,F).play()}pause(){D(this,F).pause()}async seek(e){return D(this,F).seek(e)}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,D(this,F).invalidate();const e=[];for(const i of[()=>this.loadSession?.cancel(),()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){return this.media?.duration??this.audio.duration??this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}F=new WeakMap;const Zc=new WeakMap;function el(e){let t=Zc.get(e);return t||(t={closed:!1,frames:new Set},Zc.set(e,t)),t}class tl{constructor({art:e,canvas:t,ctx:i,option:r}){this.art=e,this.canvas=t,this.option=r,this.events=new q,this.engine=new Jc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=r.volume??.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:e.option?.url&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=el(e);if(i.closed)return 0;const r=requestAnimationFrame(a=>{i.frames.delete(r),i.closed||t(a,{presentationTime:e.engine.currentTime,expectedDisplayTime:a+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:a,receiveTime:a,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){el(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=el(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,a=r("canvas"),s=a.getContext("2d"),n=new tl({art:t,canvas:a,ctx:s,option:e});t.mediabunny=n;const o={};for(const e in a)"function"===typeof a[e]&&(o[e]=a[e].bind(a));const c=new Set([...Object.getOwnPropertyNames(n),...Object.getOwnPropertyNames(Object.getPrototypeOf(n))]);for(const e of c)"constructor"!==e&&(e in a||Object.defineProperty(a,e,{get(){const t=n[e];return"function"===typeof t?t.bind(n):t},set(t){n[e]=t},configurable:!0,enumerable:!0}));for(const e in o)a[e]=(...t)=>o[e](...t);function l(){const e=t.template?.$player;e&&!t.option.autoSize&&Object.assign(a.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",l),t.on("video:loadedmetadata",l),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function a(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),a("mediabunny-quality")}function n(){r("mediabunny-audio"),a("mediabunny-audio")}function o(e={}){return e.control||e.setting}async function c(r){const a=i.m3u8?.quality||{};if(!o(a)||!r?.levels.length)return void s();const n=a.auto||"Auto",c=a.title||"Quality",l=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?l(r.currentLevel):n,d=U(r.levels.map(e=>({html:l(e),value:e.id,default:r.currentLevel?.id===e.id})),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),a=r.levels.find(e=>e.id===t.value);return(a?.height||0)-(i?.height||0)});d.push({html:n,value:"auto",default:!r.currentLevel});const f=async i=>(await t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:d,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:d,onSelect:f})}async function l(r){const a=i.m3u8?.audio||{};if(!o(a)||!r?.audios.length||r.audios.length<2)return void n();const s=a.auto||"Auto",c=a.title||"Audio",l=a.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?l(r.currentAudio):s,d=U(r.audios.map(e=>({html:l(e),value:e.id,default:r.currentAudio?.id===e.id})),"html");d.push({html:s,value:"auto",default:!r.currentAudio});const f=async i=>(await t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:d,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:d,onSelect:f})}async function u(){const e=await t.getM3u8State();if(!e)return s(),void n();await Promise.all([c(e),l(e)])}}({art:t,shim:n,option:e}),t.on("destroy",()=>{delete t.mediabunny,n.destroy()}),a}}}); diff --git a/docs/compiled/artplayer-proxy-mediabunny.legacy.js b/docs/compiled/artplayer-proxy-mediabunny.legacy.js index b8aed882d..8fcdbb50d 100644 --- a/docs/compiled/artplayer-proxy-mediabunny.legacy.js +++ b/docs/compiled/artplayer-proxy-mediabunny.legacy.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T=Object.defineProperty,v=Object.defineProperties,S=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,P=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,x=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),C=e=>{throw TypeError(e)},B=Math.pow,E=(e,t,i)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,_=(e,t)=>{for(var i in t||(t={}))P.call(t,i)&&E(e,i,t[i]);if(w)for(var i of w(t))I.call(t,i)&&E(e,i,t[i]);return e},R=(e,t)=>v(e,S(t)),F=(e,t,i)=>t.has(e)||C("Cannot "+i),A=(e,t,i)=>(F(e,t,"read from private field"),i?i.call(e):t.get(e)),D=(e,t,i)=>t.has(e)?C("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),M=(e,t,i,r)=>(F(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),N=(e,t,i)=>(F(e,t,"access private method"),i),O=(e,t,i,r)=>({set _(r){M(e,t,r,i)},get _(){return A(e,t,r)}}),z=(e,t,i)=>new Promise((r,n)=>{var s=e=>{try{o(i.next(e))}catch(t){n(t)}},a=e=>{try{o(i.throw(e))}catch(t){n(t)}},o=e=>e.done?r(e.value):Promise.resolve(e.value).then(s,a);o((i=i.apply(e,t)).next())}),L=function(e,t){this[0]=e,this[1]=t},U=(e,t,i)=>{var r,n=(e,t,r,s)=>{try{var a=i[e](t),o=(t=a.value)instanceof L,l=a.done;Promise.resolve(o?t[0]:t).then(i=>o?n("return"===e?e:"next",t[1]?{done:i.done,value:i.value}:i,r,s):r({value:i,done:l})).catch(e=>n("throw",e,r,s))}catch(c){s(c)}},s=(e,t,i,s)=>a[e]=a=>(t=new Promise((t,i,s)=>(s=()=>n(e,a,t,i),r?r.then(s):s())),s=()=>r===i&&(r=0),r=i=t.then(s,s),t),a={};return i=i.apply(e,t),a[x("asyncIterator")]=()=>a,s("next"),s("throw"),s("return"),a},q=e=>{var t,i=e[x("asyncIterator")],r=!1,n={};return null==i?(i=e[x("iterator")](),t=e=>n[e]=t=>i[e](t)):(i=i.call(e),t=e=>n[e]=t=>{if(r){if(r=!1,"throw"===e)throw t;return t}return r=!0,{done:!1,value:new L(new Promise(r=>{var n=i[e](t);n instanceof Object||C("Object expected"),r(n)}),1)}}),n[x("iterator")]=()=>n,t("next"),"throw"in i?t("throw"):n.throw=e=>{throw e},"return"in i&&t("return"),n},W=(e,t,i)=>(t=e[x("asyncIterator")])?t.call(e):(e=e[x("iterator")](),t={},(i=(i,r)=>(r=e[i])&&(t[i]=t=>new Promise((i,n,s)=>(t=r.call(e,t),s=t.done,Promise.resolve(t.value).then(e=>i({value:e,done:s}),n)))))("next"),i("return"),t);function H(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class V{constructor(){D(this,e,!1),this.listeners=new Map}addEventListener(t,i){var r;A(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),null==(r=this.listeners.get(t))||r.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){var r;if(A(this,e))return;const n=Object.assign(new Event(t),{detail:i});null==(r=this.listeners.get(t))||r.forEach(t=>{A(this,e)||t(n)})}destroy(){M(this,e,!0),this.listeners.clear()}}function j(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const K=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},X=e=>e&&e[e.length-1],$=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-B(2,r))},Q=e=>{const t=$(e);return 0===(1&t)?-(t>>1):t+1>>1},Y=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),J=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Z=new TextDecoder,ee=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),te={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},ie=ee(te),re={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ne=ee(re),se={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},ae=ee(se),oe=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,le={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},ce=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class ue{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}acquire(){return z(this,null,function*(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,yield i,e})}}const de=/^[0-9a-fA-F]+$/,he=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),fe=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,me=(e,t,i)=>{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+n>>1,o=i(e[a]);o===t?(s=a,n=a-1):o{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+(n-r+1)/2|0;i(e[a])<=t?(s=a,r=a+1):n=a-1}return s},ge=(e,t,i)=>{const r=pe(e,i(t),i);e.splice(r+1,0,t)},ke=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},ye=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},be=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},Te=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},ve=e=>{throw new Error(`Unexpected value: ${e}`)},Se=(e,t,i)=>{const r=e.getUint8(t),n=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|n<<8|s<<16:r<<16|n<<8|s},we=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Pe=(e,t)=>({next(){return z(this,null,function*(){const i=yield e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}})},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),Ie=(e,t,i)=>Math.max(t,Math.min(i,e)),xe="und",Ce=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},Be=(e,t)=>Math.round(e/t)*t,Ee=(e,t)=>Math.round(e*t)/t,_e=(e,t)=>Math.floor(e/t)*t,Re=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},Fe=/^[a-z]{3}$/,Ae=e=>Fe.test(e),De=1e6*(1+Number.EPSILON),Me=(e,t)=>{const i=_(_({},e),t);if(e.headers||t.headers){const r=e.headers?Ne(e.headers):{},n=t.headers?Ne(t.headers):{},s=_({},r);Object.entries(n).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ne=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Oe=(e,t,i,r,n)=>z(null,null,function*(){let s=0;for(;;)try{return yield e(t,i)}catch(a){if(n())throw a;s++;const e=r(s,a,t);if(null===e)throw a;if(lt._error("Retrying failed fetch. Error:",a),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&(yield nt(1e3*e)),n())throw a}});class ze{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Le=null;const Ue=()=>{var e;return null!==Le?Le:Le=!("undefined"===typeof navigator||!((null==(e=navigator.vendor)?void 0:e.match(/apple/i))||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)))};let qe=null;const We=()=>{var e;return null!==qe?qe:qe="undefined"!==typeof navigator&&(null==(e=navigator.userAgent)?void 0:e.includes("Firefox"))};let He=null;const Ve=()=>{var e;return null!==He?He:He=!("undefined"===typeof navigator||!(null==(e=navigator.vendor)?void 0:e.includes("Google Inc"))&&!/Chrome/.test(navigator.userAgent))},je=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,Ke=z(null,null,function*(){}).constructor,Xe=e=>e instanceof Ke||e instanceof Promise||"function"===typeof(null==e?void 0:e.then),$e=(e,t)=>-1!==e?e:t,Ge=(e,t,i,r)=>e<=r&&i<=t,Qe=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{null!=Symbol.dispose||(Symbol.dispose=Symbol("Symbol.dispose"))},Je=e=>"number"===typeof e&&!Number.isNaN(e),Ze=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const n=e.indexOf("/",r+3);i=-1===n?e+t:e.slice(0,n)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const n=i.indexOf("://");if(-1!==n){const e=i.indexOf("/",n+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),a=[];for(const o of s)".."===o?a.pop():"."!==o&&a.push(o);return r+a.join("/")},et=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let n=0;n{j(Number.isInteger(e.num)),j(Number.isInteger(e.den)),j(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},rt=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},nt=e=>new Promise(t=>setTimeout(t,e));class st{constructor(){this._listeners=new Map}on(e,t,i){var r;this._listeners.has(e)||this._listeners.set(e,new Set);const n={fn:t,once:null!=(r=null==i?void 0:i.once)&&r};return this._listeners.get(e).add(n),()=>{var t;null==(t=this._listeners.get(e))||t.delete(n)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(n){console.error(n)}s.once&&r.delete(s)}}}var at,ot;(ot=at||(at={}))[ot.Silent=0]="Silent",ot[ot.Errors=1]="Errors",ot[ot.Warnings=2]="Warnings",ot[ot.Info=3]="Info";class lt{constructor(){}static get level(){return lt._level}static set level(e){if(e!==at.Silent&&e!==at.Errors&&e!==at.Warnings&&e!==at.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");lt._level=e}static get _emitter(){var e;return null!=(e=lt._emitterInstance)?e:lt._emitterInstance=new st}static on(e,t,i){return lt._emitter.on(e,t,i)}static _error(...e){lt._emitter._emit("error",e),lt._level>=at.Errors&&console.error(...e)}static _warn(...e){lt._emitter._emit("warn",e),lt._level>=at.Warnings&&console.warn(...e)}static _info(...e){lt._emitter._emit("info",e),lt._level>=at.Info&&console.info(...e)}}lt._level=at.Info,lt._emitterInstance=null;class ct{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class ut{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const dt={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class ht{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){var e;const t=Math.floor(this.pos/8),i=null!=(e=this.bytes[t])?e:0,r=7-(7&this.pos),n=(i&1<>r;return this.pos++,n}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){var e;if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const t=this.pos/8,i=null!=(e=this.bytes[t])?e:0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new ht(this.bytes);return e.pos=this.pos,e}}const ft=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],mt=[-1,1,2,3,4,5,6,8],pt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new ht(e),i=gt(t),{frequencyIndex:r,sampleRate:n}=kt(t),s=t.readBits(4);let a=null;s>=1&&s<=7&&(a=mt[s]);let o=i,l=!1,c=n;if(5===i||29===i)l=29===i,c=kt(t).sampleRate,o=gt(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===gt(t)&&t.readBits(1)&&(c=kt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(l=!!t.readBits(1)));break}t.pos=e+1}return null!==a&&a>1&&(l=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:c,outputNumberOfChannels:l&&1===a?2:a}},gt=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},kt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let n=0;t+3i&&(yield{offset:i,length:t-i}),i=t+n,t=i):t++}-1!==i&&i{if(t.description){const i=3&Y(t.description)[4];return It(e,i+1)}return Pt(e)},Ct=e=>31&e,Bt=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+Et.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const n of e)i.set(Et,r),r+=Et.byteLength,i.set(n,r),r+=n.byteLength;return i},Rt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let n=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(n,s.byteLength);break;case 2:e.setUint16(n,s.byteLength,!1);break;case 3:we(e,n,s.byteLength);break;case 4:e.setUint32(n,s.byteLength,!1)}n+=t,r.set(s,n),n+=s.byteLength}return r},Ft=e=>{try{const t=[],i=[],r=[];for(const o of Pt(e)){const n=e.subarray(o.offset,o.offset+o.length),s=Ct(n[0]);s===Tt.SPS?t.push(n):s===Tt.PPS?i.push(n):s===Tt.SPS_EXT&&r.push(n)}if(0===t.length)return null;if(0===i.length)return null;const n=t[0],s=Nt(n);j(null!==s);const a=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?r:null}}catch(t){return lt._error("Error building AVC Decoder Configuration Record:",t),null}},At=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=J(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=t.getUint8(i++),a=t.getUint8(i++),o=3&t.getUint8(i++),l=31&t.getUint8(i++),c=[];for(let f=0;f{var t;try{const i=Bt(e),r=new ht(i);r.skipBits(1),r.skipBits(2);if(7!==r.readBits(5))return null;const n=r.readAlignedByte(),s=r.readAlignedByte(),a=r.readAlignedByte();$(r);let o=1,l=0,c=0,u=0;if(100===n||110===n||122===n||244===n||44===n||83===n||86===n||118===n||128===n){o=$(r),3===o&&(u=r.readBits(1)),l=$(r),c=$(r),r.skipBits(1);if(r.readBits(1))for(let e=0;e<(3!==o?8:12);e++){if(r.readBits(1)){const t=e<6?16:64;let i=8,n=8;for(let e=0;ee.level>=a))?t:X(Ai),n=Math.min(Math.floor(r.maxDpbMbs/(e*i)),16);P=n,I=n}else P=0,I=0}return j(null!==I),{emulationUnpreventedBytes:i,profileIdc:n,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:o,bitDepthLumaMinus8:l,bitDepthChromaMinus8:c,codedWidth:m,codedHeight:p,displayWidth:g,displayHeight:k,pixelAspectRatio:w,colourPrimaries:b,matrixCoefficients:v,transferCharacteristics:T,fullRangeFlag:S,numReorderFrames:P,maxDecFrameBuffering:I,vuiParametersFlagBitOffset:B,bitstreamRestrictionFlagBitOffset:x,bitstreamRestrictionFlag:C}}catch(i){return lt._error("Error parsing AVC SPS:",i),null}},Ot=e=>{const t=$(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)$(e),$(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},zt=e=>{j(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new ht(e.emulationUnpreventedBytes),r=new ht(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(j(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),G(r,2),G(r,1),G(r,16),G(r,16),G(r,e.numReorderFrames),G(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const n=r.pos/8;return j(Number.isInteger(n)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,n))},Lt=(e,t)=>{if(t.description){const i=3&Y(t.description)[21];return It(e,i+1)}return Pt(e)},Ut=e=>e>>1&63,qt=e=>{try{const t=new ht(Bt(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:o,general_constraint_indicator_flags:l,general_level_idc:c}=Ht(t,i);$(t);const u=$(t);let d=0;3===u&&(d=t.readBits(1));const h=$(t),f=$(t);let m=h,p=f;if(t.readBits(1)){const e=$(t),i=$(t),r=$(t),n=$(t);let s=1,a=1;const o=0===d?u:0;1===o?(s=2,a=2):2===o&&(s=2,a=1),m-=(e+i)*s,p-=(r+n)*a}const g=$(t),k=$(t);$(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)$(t),b=$(t),$(t);$(t),$(t),$(t),$(t),$(t),$(t),t.readBits(1)&&t.readBits(1)&&Vt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),$(t),$(t),t.skipBits(1));const T=$(t);if(jt(t,T),t.readBits(1)){const e=$(t);for(let i=0;i{try{const t=[],i=[],r=[],n=[];for(const l of Pt(e)){const s=e.subarray(l.offset,l.offset+l.length),a=Ut(s[0]);a===St.VPS_NUT?t.push(s):a===St.SPS_NUT?i.push(s):a===St.PPS_NUT?r.push(s):a!==St.PREFIX_SEI_NUT&&a!==St.SUFFIX_SEI_NUT||n.push(s)}if(0===i.length||0===r.length)return null;const s=qt(i[0]);if(!s)return null;let a=0;if(r.length>0){const e=r[0],t=new ht(Bt(e));t.skipBits(16),$(t),$(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),$(t),$(t),Q(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&$(t),Q(t),Q(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),n=t.readBits(1);a=i||n?i&&!n?2:!i&&n?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:St.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:St.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:St.PPS_NUT,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Ut(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return lt._error("Error building HEVC Decoder Configuration Record:",t),null}},Ht=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),n=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=e.readBits(8);const o=e.readBits(8),l=[],c=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&Q(e);for(let t=0;t{const i=[];for(let r=0;r{var n;let s=0,a=0,o=0;if(0!==t&&(a=e.readBits(1)),a){if(t===i){o=t-($(e)+1)}else o=t-1;e.readBits(1),$(e);const a=null!=(n=r[o])?n:0;for(let t=0;t<=a;t++){e.readBits(1)||e.readBits(1)}s=r[o]}else{const t=$(e),i=$(e);for(let r=0;r{let i=2,r=2,n=2,s=0,a=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=Mt[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),n=e.readBits(8))),e.readBits(1)&&($(e),$(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&($(e),$(e),$(e),$(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&$(e),e.readBits(1)&&$t(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=$(e),$(e),$(e),$(e),$(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},$t=(e,t,i)=>{let r=!1,n=!1,s=!1;r=1===e.readBits(1),n=1===e.readBits(1),(r||n)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let a=0;a<=i;a++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?$(e):i=1===e.readBits(1);let a=1;if(!i){a=$(e)+1}r&&Gt(e,a,s),n&&Gt(e,a,s)}},Gt=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Qt.audAllowed;for(const s of Lt(e,t)){if(r===Qt.noMoreDataAllowed){i.add(s.offset);continue}const t=Ut(e[s.offset]);if(r===Qt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let n=!1;35===t?r>Qt.audAllowed?n=!0:r=Qt.beforeFirstVcl:t<=31?r>Qt.afterFirstVcl?n=!0:r=Qt.afterFirstVcl:36===t?r!==Qt.afterFirstVcl?n=!0:r=Qt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Qt.beforeFirstVcl?n=!0:r=Qt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&Y(t.description)[21];return Rt(e,i+1)}return _t(e)})(n,t)},Zt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ei=e=>{var t,i,r;const n=new ht(e);if(2!==n.readBits(2))return null;const s=n.readBits(1),a=(n.readBits(1)<<1)+s;3===a&&n.skipBits(1);if(1===n.readBits(1))return null;if(0!==n.readBits(1))return null;n.skipBits(2);if(4817730!==n.readBits(24))return null;let o=8;if(a>=2){o=n.readBits(1)?12:10}const l=n.readBits(3);let c=0,u=0;if(7!==l){if(u=n.readBits(1),1===a||3===a){const e=n.readBits(1),t=n.readBits(1);c=e||t?e&&!t?2:1:3,n.skipBits(1)}else c=1}else c=3,u=1;const d=(n.readBits(16)+1)*(n.readBits(16)+1);let h=X(Di).level;for(const m of Di)if(d<=m.maxPictureSize){h=m.level;break}const f=Zt[l];return{profile:a,level:h,bitDepth:o,chromaSubsampling:c,videoFullRangeFlag:u,colourPrimaries:null!=(t=null==f?void 0:f.colourPrimaries)?t:2,transferCharacteristics:null!=(i=null==f?void 0:f.transferCharacteristics)?i:2,matrixCoefficients:null!=(r=null==f?void 0:f.matrixCoefficients)?r:2}},ti=function*(e){const t=new ht(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*B(2,7*i),!(128&r))break;if(7===i&&128&r)return null}return e>B(2,32)-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),n=t.readBits(1),s=t.readBits(1);let a;if(t.skipBits(1),n&&t.skipBits(8),s){const e=i();if(null===e)return;a=e}else a=Math.floor(t.getBitsLeft()/8);j(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+a)},t.skipBits(8*a)}},ii=e=>{for(const{type:t,data:i}of ti(e)){if(1!==t)continue;const e=new ht(i),r=e.readBits(3);e.readBits(1);const n=e.readBits(1);let s=0,a=0,o=0;if(n)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let n=0;n<=r;n++){e.skipBits(12);const r=e.readBits(5);if(0===n&&(s=r),r>7){const t=e.readBits(1);0===n&&(a=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const l=e.readBits(4),c=e.readBits(4),u=l+1;e.skipBits(u);const d=c+1;e.skipBits(d);let h=0;if(h=n?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!n){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,T=1,v=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,T=0,v=0):(b=e.readBits(1),0===r?(T=1,v=1):1===r?(T=0,v=0):12===m?(T=e.readBits(1),v=T?e.readBits(1):0):(T=1,v=0),T&&v&&(S=e.readBits(2))),{profile:r,level:s,tier:a,bitDepth:m,monochrome:p,chromaSubsamplingX:T,chromaSubsamplingY:v,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},ri=e=>{if(e.length<36)return null;const t=J(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ni=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],si=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){n=r.pos;break}if(0===n)throw new Error("Invalid Setup header: framing bit not found.");let s=0,a=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),n=r.readBits(16);if(t>63||0!==i||0!==n){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(a=!0,o=s)}if(!a)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const l=o;r.pos=0,r.skipBits(n);const c=Array(l).fill(0);for(let u=l-1;u>=0;u--)r.skipBits(40),c[u]=r.readBits(1);return{modeBlockflags:c}},ai=(e,t,i)=>{switch(e){case"avc":for(const e of xt(i,t)){const t=i[e.offset],r=Ct(t);if(r>=Tt.NON_IDR_SLICE&&r<=Tt.SLICE_DPC)return"delta";if(r===Tt.IDR)return"key";if(r===Tt.SEI&&!Ve()){const t=i.subarray(e.offset,e.offset+e.length),r=Bt(t);let n=1;do{let e=0;for(;;){const t=r[n++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[n++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new ht(r);e.pos=8*n;const t=$(e),i=e.readBits(1);if(0===t&&1===i)return"key"}n+=t}while(n{var i,r;const n=J(e);let s=0;const a=n.getUint32(s,!0);s+=4;const o=Z.decode(e.subarray(s,s+a));s+=a,a>0&&(null!=t.raw||(t.raw={}),null!=(i=t.raw).vendor||(i.vendor=o));const l=n.getUint32(s,!0);s+=4;for(let c=0;c0&&(null!=t.trackNumber||(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.tracksTotal||(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.tracksTotal||(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=c.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=t.discNumber||(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.discsTotal||(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.discsTotal||(t.discsTotal=e))}break;case"DATE":{const e=new Date(c);Number.isNaN(e.getTime())||null!=t.date||(t.date=e)}break;case"GENRE":null!=t.genre||(t.genre=c);break;case"METADATA_BLOCK_PICTURE":{const e=Qe(c),i=J(e),r=i.getUint32(0,!1),n=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+n)),a=i.getUint32(8+n,!1),o=Z.decode(e.subarray(12+n,12+n+a)),l=i.getUint32(n+a+28),u=e.subarray(n+a+32,n+a+32+l);null!=t.images||(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},ui=[2,1,2,3,3,4,4,5],di=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new ht(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),n=t.readBits(5);if(n>8)return null;const s=t.readBits(3),a=t.readBits(3);0!==(1&a)&&1!==a&&t.skipBits(2),0!==(4&a)&&t.skipBits(2),2===a&&t.skipBits(2);return{fscod:i,bsid:n,bsmod:s,acmod:a,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},hi=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],fi=[1,2,3,6],mi=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new ht(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),n=t.readBits(2);let s,a=0;3===n?(a=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),l=t.readBits(1),c=t.readBits(5);if(c<11||c>16)return null;const u=fi[s];let d;d=n<3?yt[n]/1e3:bt[a]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:n,fscod2:a,bsid:c,bsmod:0,acmod:o,lfeon:l,numDepSub:0,chanLoc:0}]}},pi=e=>{const t=e.substreams[0];return j(t),t.fscod<3?yt[t.fscod]:null!==t.fscod2&&t.fscod2<3?bt[t.fscod2]:null},gi=e=>{const t=e.substreams[0];j(t);let i=ui[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},ki=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],yi=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],bi=[16,16,20,20,0,24,24,0],Ti=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],vi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],Si=[32e3,44100,48e3,0],wi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Pi=[512,1024,2048,4096],Ii=e=>{const t=Ci(e),i=J(e);let r=t?4*Math.ceil(t.frameSize/4):0,n=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=Bi(e.subarray(r));if(!t)break;null!=n||(n=t),r+=t.frameSize}if(t)return{frameSize:n?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==n};if(!(null==n?void 0:n.asset))return null;const{asset:s}=n;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},xi=e=>{const t=Ii(e);return(null==t?void 0:t.core)?t.hasExtensions?"dtsh":"dtsc":null},Ci=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new ht(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const n=t.readBits(14)+1;if(n<96)return null;const s=t.readBits(6);if(s>=Ti.length)return null;const a=ki[t.readBits(4)];if(0===a)return null;const o=yi[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const l=t.readBits(2);if(3===l)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const c=bi[t.readBits(3)];if(0===c)return null;const u=0!==l;return{frameSize:n,sampleRate:a,numberOfChannels:Ti[s]+(u?1:0),sampleCount:32*r,channelLayout:vi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:c}},Bi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new ht(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),n=8+4*r,s=16+4*r;t.skipBits(n);const a=t.readBits(s)+1,o={frameSize:a,asset:null};if(!t.readBits(1))return o;const l=Si[t.readBits(2)],c=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===l||t.getBitsLeft()<0?o:{frameSize:a,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(c*m/l),channelLayout:g,pcmResolution:f}}},Ei=e=>Re(e)+Re(44646&e),_i=["avc","hevc","vp9","av1","vp8","prores"],Ri=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Fi=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Ri],Ai=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Di=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],Mi=".01.01.01.01.00",Ni=".0.110.01.01.01.0",Oi=["ap4x","ap4h","apch","apcn","apcs","apco"],zi=["dtsc","dtsh","dtsl","dtse"],Li=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:o,proresFormat:l}=e;if("avc"===t){if(j(null!==e.avcType),n){const t=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${e.avcType}.${he(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${he(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,n,a,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=fe(s.generalProfileCompatibilityFlags),n=s.generalTierFlag,a=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=J(i),l=s.getUint8(1);e=l>>6&3,t=31&l,r=fe(s.getUint32(2)),n=l>>5&1,a=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let l="hev1.";for(l+=["","A","B","C"][e]+t,l+=".",l+=r.toString(16).toUpperCase(),l+=".",l+=0===n?"L":"H",l+=a;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(l+=".",l+=o.map(e=>e.toString(16).toUpperCase()).join(".")),l}if("vp8"===t)return"vp8";if("vp9"===t){if(!a){const t=e.width*e.height;let i=X(Di).level;for(const e of Di)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${a.profile.toString().padStart(2,"0")}.${a.level.toString().padStart(2,"0")}.${a.bitDepth.toString().padStart(2,"0")}.${a.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${a.colourPrimaries.toString().padStart(2,"0")}.${a.transferCharacteristics.toString().padStart(2,"0")}.${a.matrixCoefficients.toString().padStart(2,"0")}.${a.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(Mi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=X(Di).level;for(const e of Di)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),n=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),a=o.monochrome?"1":"0",l=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),c=(null==r?void 0:r.primaries)?te[r.primaries]:1,u=(null==r?void 0:r.transfer)?re[r.transfer]:1,d=(null==r?void 0:r.matrix)?se[r.matrix]:1,h=(null==r?void 0:r.fullRange)?1:0;let f=`av01.${t}.${i}${n}.${s}`;return f+=`.${a}.${l.toString().padStart(3,"0")}`,f+=`.${c.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(Ni)&&(f=f.slice(0,-17)),f}if("prores"===t)return null!=l?l:"apch";throw null!==t&&ve(t),new TypeError(`Unhandled codec '${t}'.`)},Ui=e=>{var t,i,r,n,s,a;switch(e.codec){case"avc":{let r=null==(t=e.avcCodecInfo)?void 0:t.sequenceParameterSets[0];if(!r&&e.codecDescription&&(r=null==(i=Dt(e.codecDescription))?void 0:i.sequenceParameterSets[0]),r){const e=Nt(r);if(e)return{primaries:ie[e.colourPrimaries],transfer:ne[e.transferCharacteristics],matrix:ae[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=null==(n=null==(r=e.hevcCodecInfo)?void 0:r.arrays.find(e=>e.nalUnitType===St.SPS_NUT))?void 0:n.nalUnits[0];if(!t&&e.codecDescription&&(t=null==(a=null==(s=(e=>{try{const t=J(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=n>>6&3,a=n>>5&1,o=31&n,l=t.getUint32(i,!1);i+=4;const c=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,T=k>>2&1,v=3&k,S=t.getUint8(i++),w=[];for(let P=0;P>7&1,s=63&r,a=t.getUint16(i,!1);i+=2;const o=[];for(let l=0;le.nalUnitType===St.SPS_NUT))?void 0:a.nalUnits[0]),t){const e=qt(t);if(e)return{primaries:ie[e.colourPrimaries],transfer:ne[e.transferCharacteristics],matrix:ae[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:ie[e.vp9CodecInfo.colourPrimaries],transfer:ne[e.vp9CodecInfo.transferCharacteristics],matrix:ae[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:ie[e.av1CodecInfo.colourPrimaries],transfer:ne[e.av1CodecInfo.transferCharacteristics],matrix:ae[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:ie[e.proresCodecInfo.colourPrimaries],transfer:ne[e.proresCodecInfo.transferCharacteristics],matrix:ae[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},qi=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:n}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=pt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return null!=n?n:"dtsc";if(t&&Ri.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},Wi=48e3,Hi=/^pcm-([usf])(\d+)(be)?$/,Vi=e=>{if(j(Ri.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Hi.exec(e);let i;j(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?B(2,7):0}},ji=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Oi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":zi.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Hi.test(e)?e:"webvtt"===e?"webvtt":null,Ki=[44100,48e3,32e3],Xi=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],$i=1483304551,Gi=1231971951,Qi=(e,t)=>3===e?3===t?21:36:3===t?13:21,Yi=(e,t)=>{const i=e>>>24,r=e>>>16&255,n=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==n&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let a=0,o=0;16&r?a=8&r?0:1:(a=1,o=1);const l=r>>3&3,c=r>>1&3,u=(n>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Xi[16*a*4+16*c+(n>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=Ki[u]>>a+o,b=((e,t,i,r,n)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Zi,er;(er=Zi||(Zi={}))[er.FrameCount=1]="FrameCount",er[er.FileSize=2]="FileSize",er[er.Toc=4]="Toc";const tr=e=>3===e?1:2;class ir{constructor(e){this.input=e}dispose(){}}const rr=new Uint8Array(0);class nr{constructor(e,t,i,r,n=-1,s,a){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=n,e===rr&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(n))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==a&&("object"!==typeof a||!a))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==(null==a?void 0:a.alpha)&&!(a.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==(null==a?void 0:a.alphaByteLength)&&(!Number.isInteger(a.alphaByteLength)||a.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=null!=a?a:{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===rr}get microsecondTimestamp(){return Math.trunc(De*this.timestamp)}get microsecondDuration(){return Math.trunc(De*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){var i;if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const r=new Uint8Array(e.byteLength);return e.copyTo(r),new nr(r,e.type,e.timestamp/1e6,(null!=(i=e.duration)?i:0)/1e6,void 0,void 0,t)}clone(e){var t,i,r,n,s,a;if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==(null==e?void 0:e.data)&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==(null==e?void 0:e.type)&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==(null==e?void 0:e.timestamp)&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==(null==e?void 0:e.duration)&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sequenceNumber)&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sideData)&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new nr(null!=(t=null==e?void 0:e.data)?t:this.data,null!=(i=null==e?void 0:e.type)?i:this.type,null!=(r=null==e?void 0:e.timestamp)?r:this.timestamp,null!=(n=null==e?void 0:e.duration)?n:this.duration,null!=(s=null==e?void 0:e.sequenceNumber)?s:this.sequenceNumber,this.byteLength,null!=(a=null==e?void 0:e.sideData)?a:this.sideData)}}const sr=e=>{const t=J(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const n=he(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=dl(e);const i=Tl(e,4);let r=8;1===t&&(t=pl(e),r=16);const n=t-r;return n<0?null:{name:i,totalSize:t,headerSize:r,contentSize:n}},lr=e=>fl(e)/65536,cr=e=>fl(e)/1073741824,ur=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=sl(e);if(t|=127&i,0===(128&i))break}return t},dr=e=>{let t=ol(e);return e.skip(2),t=Math.min(t,e.remainingLength),Z.decode(nl(e,t))},hr=e=>{const t=or(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=dl(e);e.skip(4);const r=nl(e,t.contentSize-8);switch(i){case 1:return Z.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new ct(r,"image/jpeg");case 14:return new ct(r,"image/png");case 27:return new ct(r,"image/bmp");default:return r}},fr=16,mr=new Uint32Array(256),pr=new Uint32Array(256),gr=new Uint32Array(256),kr=new Uint32Array(256),yr=new Uint32Array(256),br=new Uint32Array(256),Tr=new Uint32Array(10);let vr=!1;class Sr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(fr/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(fr),this.out=new Uint8Array(fr),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){j(16===e.byteLength),j(16===t.byteLength),vr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,a=1;s<256;s++)i[s]=a,t[a]=s,a=a^a<<1^(128&a?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let n=r^r<<1^r<<2^r<<3^r<<4;n=n>>>8^255&n^99,e[s]=n}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);mr[s]=t<<24|t<<16|t<<8|t,br[s]=i<<24|i<<16|i<<8|i;const n=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);pr[s]=n,gr[s]=n>>>8|n<<24,kr[s]=n>>>16|n<<16,yr[s]=n>>>24|n<<8}let n=1;for(let s=0;s<10;s++)Tr[s]=n<<24,n=n<<1^(128&n?283:0);vr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let n=4;n<44;n+=4){const e=this.roundkey[n-1];this.roundkey[n]=this.roundkey[n-4]^4278190080&mr[e>>>16&255]^16711680&mr[e>>>8&255]^65280&mr[e>>>0&255]^255&mr[e>>>24&255]^Tr[n/4-1],this.roundkey[n+1]=this.roundkey[n-3]^this.roundkey[n],this.roundkey[n+2]=this.roundkey[n-2]^this.roundkey[n+1],this.roundkey[n+3]=this.roundkey[n-1]^this.roundkey[n+2]}for(let n=0,s=40;n>>24&255]]^gr[255&mr[t>>>16&255]]^kr[255&mr[t>>>8&255]]^yr[255&mr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const n=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),a=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let l,c,u,d;for(let g=1;g<10;g++){const n=4*g;l=pr[e>>>24]^gr[r>>>16&255]^kr[i>>>8&255]^yr[255&t]^this.roundkey[n],c=pr[t>>>24]^gr[e>>>16&255]^kr[r>>>8&255]^yr[255&i]^this.roundkey[n+1],u=pr[i>>>24]^gr[t>>>16&255]^kr[e>>>8&255]^yr[255&r]^this.roundkey[n+2],d=pr[r>>>24]^gr[i>>>16&255]^kr[t>>>8&255]^yr[255&e]^this.roundkey[n+3],e=l,t=c,i=u,r=d}const h=4278190080&br[e>>>24&255]^16711680&br[r>>>16&255]^65280&br[i>>>8&255]^255&br[t>>>0&255]^this.roundkey[40],f=4278190080&br[t>>>24&255]^16711680&br[e>>>16&255]^65280&br[r>>>8&255]^255&br[i>>>0&255]^this.roundkey[41],m=4278190080&br[i>>>24&255]^16711680&br[t>>>16&255]^65280&br[e>>>8&255]^255&br[r>>>0&255]^this.roundkey[42],p=4278190080&br[r>>>24&255]^16711680&br[i>>>16&255]^65280&br[t>>>8&255]^255&br[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=n,this.iv[1]=s,this.iv[2]=a,this.iv[3]=o}}class wr extends ir{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.tracks.map(e=>e.trackBacking)})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)}),hasAudio:this.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)}),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Xe(r)&&(r=yield r),!r)break;const n=e,s=or(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=Tl(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Xe(e)&&(e=yield e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>n+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');yield this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=n+s.totalSize}if(!i&&this.input._initInput&&(yield this.copyMetadataFromInitInput(this.input._initInput)),t){j(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Xe(e)&&(e=yield e),j(e);const t=dl(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Xe(e)&&(e=yield e),e){const t=or(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Xe(i)&&(i=yield i),i&&this.readContiguousBoxes(i)}}}}}))()}copyMetadataFromInitInput(e){return z(this,null,function*(){const t=yield e._getDemuxer();if(t.constructor!==wr)throw new Error("Init input must match the input's format.");yield t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const e of t.tracks){const t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};if(e.trackBacking)if(j(t.info),"video"===t.info.type&&-1!==t.info.width){const e=t;t.trackBacking=new Ir(e),this.tracks.push(t)}else if("audio"===t.info.type&&-1!==t.info.numberOfChannels){const e=t;t.trackBacking=new xr(e),this.tracks.push(t)}}})}getSampleTableForTrack(e){var t,i;if(e.sampleTable)return e.sampleTable;const r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=r,null===e.sampleTableByteOffset)return r;j(this.moovSlice);const n=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(n),this.currentTrack=null;if("audio"===(null==(t=e.info)?void 0:t.type)&&e.info.codec&&Ri.includes(e.info.codec)&&0===r.sampleCompositionTimeOffsets.length){j("audio"===(null==(i=e.info)?void 0:i.type));const t=Vi(e.info.codec),n=[],s=[];for(let i=0;ie.startIndex),u=r.sampleTimingEntries[c],d=pe(r.sampleTimingEntries,l,e=>e.startIndex),h=r.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(l-h.startIndex)*h.delta-f,p=X(n);p&&p.delta===m?p.count++:n.push({startIndex:a.startChunkIndex+i,startDecodeTimestamp:f,count:1,delta:m});const g=a.samplesPerChunk*t.sampleSize*e.info.numberOfChannels;s.push(g)}a.startSampleIndex=a.startChunkIndex,a.samplesPerChunk=1}r.sampleTimingEntries=n,r.sampleSizes=s}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(const e of r.sampleTimingEntries)for(let t=0;te.presentationTimestamp-t.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===s.moofOffset);if(r)Rr(e,r.timestamp);else{const t=pe(i,s.moofOffset-1,e=>e.moofOffset);if(-1!==t){const r=i[t];Rr(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}const r=pe(i,e.startTimestamp,e=>e.startTimestamp);if(-1!==r&&i[r].moofOffset===s.moofOffset||i.splice(r+1,0,{moofOffset:s.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){const i=yield Mr(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;Ae(t.languageCode)||(t.languageCode=xe)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=Tl(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:_({},le),avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=fe,this.readContiguousBoxes(e.slice(pe,me.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=sl(e);e.skip(3);const r=dl(e);for(let n=0;n0&&(1===a?(e.skip(4),l=8*dl(e),e.skip(8)):2===a&&(e.skip(4),c=bl(e),o=dl(e),e.skip(4),l=dl(e),u=dl(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=c,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+n.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=Wi;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(zi.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(lt._warn(`Unsupported sample size ${l} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec="pcm-s16":(lt._warn(`Unsupported sample size ${l} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(lt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(lt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(lt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(lt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=l+7>>3,i=Boolean(1&u),r=Boolean(2&u),n=4&u?-1:0;l>0&&l<=64&&(i?32===l&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):n&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==sl(e),t.encryptionInfo.defaultPerSampleIvSize=sl(e),t.encryptionInfo.defaultKid=he(nl(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=sl(e),r=new Uint8Array(16);r.set(nl(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(j(t.info),0===me.contentSize)break;t.info.codecDescription=nl(e,me.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(j(t.info),0===me.contentSize)break;t.info.codecDescription=nl(e,me.contentSize)}break;case"vpcC":{const i=this.currentTrack;if(!i)break;j("video"===(null==(t=i.info)?void 0:t.type)),e.skip(4);const r=sl(e),n=sl(e),s=sl(e),a=s>>4,o=s>>1&7,l=1&s,c=sl(e),u=sl(e),d=sl(e);i.info.vp9CodecInfo={profile:r,level:n,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:l,colourPrimaries:c,transferCharacteristics:u,matrixCoefficients:d}}break;case"av1C":{const t=this.currentTrack;if(!t)break;j("video"===(null==(i=t.info)?void 0:i.type)),e.skip(1);const o=sl(e),l=o>>5,c=31&o,u=sl(e),d=u>>7,h=u>>6&1,f=u>>4&1,m=u>>3&1,p=u>>2&1,g=3&u,k=2===l&&h?u>>5&1?12:10:h?10:8;e.skip(1);const y=nl(e,me.contentSize-4),b=ii(y);t.info.av1CodecInfo={profile:l,level:c,tier:d,bitDepth:k,monochrome:f,chromaSubsamplingX:m,chromaSubsamplingY:p,chromaSamplePosition:g,videoFullRangeFlag:null!=(r=null==b?void 0:b.videoFullRangeFlag)?r:0,colourPrimaries:null!=(n=null==b?void 0:b.colourPrimaries)?n:2,transferCharacteristics:null!=(s=null==b?void 0:b.transferCharacteristics)?s:2,matrixCoefficients:null!=(a=null==b?void 0:b.matrixCoefficients)?a:2}}break;case"colr":{const t=this.currentTrack;if(!t)break;j("video"===(null==(o=t.info)?void 0:o.type));const i=Tl(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=ol(e),n=ol(e),s=ol(e);let a;"nclx"===i&&(a=Boolean(128&sl(e))),t.info.colorSpace={primaries:ie[r],transfer:ne[n],matrix:ae[s],fullRange:a}}break;case"pasp":{const t=this.currentTrack;if(!t)break;j("video"===(null==(l=t.info)?void 0:l.type));const i=dl(e),r=dl(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==(null==(c=t.info)?void 0:c.type))break;e.skip(4);j(3===sl(e)),ur(e),e.skip(2);const i=sl(e),r=0!==(64&i),n=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=sl(e);e.skip(t)}n&&e.skip(2);j(4===sl(e));const s=ur(e),a=e.filePos,o=sl(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":lt._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-a){j(5===sl(e));const i=ur(e);if(t.info.codecDescription=nl(e,i),"aac"===t.info.codec){const e=pt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(u=t.info)?void 0:u.type)),t.info.pcmLittleEndian=!!(255&ol(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(d=t.info)?void 0:d.type)),e.skip(4);const i=sl(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=sl(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(h=t.info)?void 0:h.type)),e.skip(1);const i=sl(e),r=ol(e),n=dl(e),s=cl(e),a=sl(e);let o;o=0!==a?nl(e,2+i):new Uint8Array(0);const l=new Uint8Array(19+o.byteLength),c=new DataView(l.buffer);c.setUint32(0,1332770163,!1),c.setUint32(4,1214603620,!1),c.setUint8(8,1),c.setUint8(9,i),c.setUint16(10,r,!0),c.setUint32(12,n,!0),c.setInt16(16,s,!0),c.setUint8(18,a),l.set(o,19),t.info.codecDescription=l,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(f=t.info)?void 0:f.type)),e.skip(4);const i=127,r=128,n=e.filePos;for(;e.filePos>>12,n=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=n,e.skip(20)}else e.skip(s);if(n&r)break}const s=e.filePos;e.filePos=n;const a=nl(e,s-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(m=t.info)?void 0:m.type));const i=nl(e,3),r=new ht(i),n=r.readBits(2);r.skipBits(8);const s=r.readBits(3),a=r.readBits(1);n<3&&(t.info.sampleRate=yt[n]),t.info.numberOfChannels=ui[s]+a}break;case"dec3":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(p=t.info)?void 0:p.type));const i=(e=>{if(e.length<2)return null;const t=new ht(e),i=t.readBits(13),r=t.readBits(3),n=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),a=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let l=0;o>0?l=t.readBits(9):t.skipBits(1),n.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:a,numDepSub:o,chanLoc:l})}return 0===n.length?null:{dataRate:i,substreams:n}})(nl(e,me.contentSize));if(!i){lt._warn("Invalid dec3 box contents, ignoring.");break}const r=pi(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=gi(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(g=t.info)?void 0:g.type));const i=(e=>{if(e.length<20)return null;const t=J(e),i=t.getUint32(0);if(0===i)return null;const r=new ht(e);r.seekToByte(13);const n=r.readBits(2);r.skipBits(5);const s=r.readBits(1),a=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let l=null;return 0!==o?l=Ei(o):ae.id===i);if(!r)break;const n=dl(e),s=(12&n)>>2,a=3&n,o=[sl,ol,ll,dl],l=o[(48&n)>>4],c=o[s],u=o[a],d=dl(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let n=0;ne.id===c);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===c);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:null!=(y=null==d?void 0:d.defaultSampleDescriptionIndex)?y:null,defaultSampleDuration:null!=(b=null==d?void 0:d.defaultSampleDuration)?b:null,defaultSampleSize:null!=(T=null==d?void 0:d.defaultSampleSize)?T:null,defaultSampleFlags:null!=(v=null==d?void 0:d.defaultSampleFlags)?v:null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=pl(e):l&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=dl(e)),n&&(u.currentFragmentState.defaultSampleDuration=dl(e)),s&&(u.currentFragmentState.defaultSampleSize=dl(e)),a&&(u.currentFragmentState.defaultSampleFlags=dl(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;j(t.currentFragmentState);const i=sl(e);e.skip(3);const r=0===i?dl(e):pl(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;j(this.currentFragment),j(t.currentFragmentState);const i=sl(e),r=ll(e),n=Boolean(1&r),s=Boolean(4&r),a=Boolean(256&r),o=Boolean(512&r),l=Boolean(1024&r),c=Boolean(2048&r),u=dl(e);let d=null;n&&(d=fl(e));let h,f=null;s&&(f=dl(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(null!=d?d:0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(n=nl(e,r));const s=Dr(t);s.defaultSampleInfoSize=i,s.sampleSizes=n,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=sl(e);if(1&ll(e)){const i=Tl(e,4),r=dl(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=dl(e);if(0===r)break;r>1&<._warn("Multiple saio entries are not supported; using the first offset only.");let n=0===i?dl(e):Number(pl(e));this.currentFragment&&(n+=this.currentFragment.moofOffset);Dr(t).offset=n}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;j(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=ll(e),n=Boolean(2&r),s=dl(e),a=t.encryptionInfo.defaultPerSampleIvSize;j(null!==a);for(let o=0;o0?r.set(nl(e,a),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(n){const t=ol(e);s=[];for(let i=0;i0&&(null!=(re=this.metadataTags).trackNumber||(re.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(se=this.metadataTags).tracksTotal||(se.tracksTotal=i))}break;case"trkn":if(n instanceof Uint8Array&&n.length>=6){const e=J(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(oe=this.metadataTags).trackNumber||(oe.trackNumber=t)),i>0&&(null!=(ce=this.metadataTags).tracksTotal||(ce.tracksTotal=i))}break;case"disc":case"disk":if(n instanceof Uint8Array&&n.length>=6){const e=J(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(ue=this.metadataTags).discNumber||(ue.discNumber=t)),i>0&&(null!=(de=this.metadataTags).discsTotal||(de.discsTotal=i))}}}}}return e.filePos=ge,!0}}class Pr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){var e;const t=this.internalTrack;if(t.durationInMediaTimescale<=0)return null;j(t.trackBacking);const i=yield t.trackBacking.getFirstPacket({metadataOnly:!0});return(null!=(e=null==i?void 0:i.timestamp)?e:0)+t.durationInMediaTimescale/t.timescale})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getFirstPacket(e){return z(this,null,function*(){const t=yield this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)})}mapTimestampIntoTimescale(e){return Ce(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}getPacket(e,t){return z(this,null,function*(){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Cr(r,i),s=yield this.fetchPacketForSampleIndex(n,t);return Ar(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=pe(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Te(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return j(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)})}fetchPacketForSampleIndex(e,t){return z(this,null,function*(){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=Er(i,e);if(!r)return null;let n;if(t.metadataOnly)n=rr;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Xe(t)&&(t=yield t),!t)return null;if(n=nl(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=yield Mr(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),f=-1!==h?this.internalTrack.fragmentLookupTable[h]:null,m=pe(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),p=-1!==m?this.internalTrack.fragmentPositionCache[m]:null,g=Math.max(null!=(s=null==f?void 0:f.moofOffset)?s:0,null!=(a=null==p?void 0:p.moofOffset)?a:0)||null;let k;for(e?null===g||e.moofOffset>=g?(k=e.moofOffset+e.moofSize,c=e):k=g:k=null!=g?g:0;;){if(c){const e=c.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=l.reader.requestSliceRange(k,8,16);if(Xe(e)&&(e=yield e),!e)break;const i=k,s=or(e);if(!s)break;if("moof"===s.name){c=yield l.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(c);if(r)return this.fetchPacketInFragment(c,e,n);-1!==e&&(u=c,d=e)}k=i+s.totalSize}if(f&&(!u||u.moofOffsetz(this,null,function*(){var e,t,i,r,n,s,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=yield this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&ri(e.data)}}else{const e=yield this.getFirstPacket({}),t=e&&ii(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const t=yield this.getFirstPacket({}),i=t&&ei(t.data);i&&(this.internalTrack.info.vp9CodecInfo=R(_({},null!=(e=this.internalTrack.info.vp9CodecInfo)?e:i),{videoFullRangeFlag:i.videoFullRangeFlag,colourPrimaries:i.colourPrimaries,transferCharacteristics:i.transferCharacteristics,matrixCoefficients:i.matrixCoefficients}))}else{const e=yield this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&Wt(e.data)}else{const e=yield this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&Ft(e.data)}if(!oe(this.internalTrack.info.colorSpace)){const e=Ui(this.internalTrack.info);null!=(t=this.internalTrack.info.colorSpace).primaries||(t.primaries=e.primaries),null!=(i=this.internalTrack.info.colorSpace).transfer||(i.transfer=e.transfer),null!=(r=this.internalTrack.info.colorSpace).matrix||(r.matrix=e.matrix),null!=(n=this.internalTrack.info.colorSpace).fullRange||(n.fullRange=e.fullRange)}const o={codec:Li(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(s=this.internalTrack.info.codecDescription)?s:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class xr extends Pr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>z(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&xi(e.data)}return{codec:qi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Cr=(e,t)=>{if(e.presentationTimestamps){const i=pe(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=pe(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Br=(e,t)=>{var i;if(!e.keySampleIndices)return Cr(e,t);if(e.presentationTimestamps){const i=pe(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==me(e.keySampleIndices,i,e=>e))return i}return-1}{const r=Cr(e,t),n=pe(e.keySampleIndices,r,e=>e);return null!=(i=e.keySampleIndices[n])?i:-1}},Er=(e,t)=>{const i=pe(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let n=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=pe(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),a=e.sampleCompositionTimeOffsets[s];a&&t-a.startIndexe.startSampleIndex),c=e.sampleToChunk[l];j(c);const u=c.startChunkIndex+Math.floor((t-c.startSampleIndex)/c.samplesPerChunk),d=e.chunkOffsets[u],h=c.startSampleIndex+(u-c.startChunkIndex)*c.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*c.samplesPerChunk;else for(let g=h;ge)}},_r=(e,t)=>{var i;if(!e.keySampleIndices)return t+1;const r=pe(e.keySampleIndices,t,e=>e);return null!=(i=e.keySampleIndices[r+1])?i:-1},Rr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},Fr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},Ar=e=>0===e.sampleSizes.length,Dr=e=>{var t,i,r;return e.currentFragmentState?null!=(i=(t=e.currentFragmentState).encryptionAuxInfo)?i:t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:null!=(r=e.encryptionAuxInfo)?r:e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}},Mr=(e,t,i)=>z(null,null,function*(){if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{j(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[e],o=new Uint8Array(16);s>0?o.set(nl(n,s),0):o.set(t.defaultConstantIv,0);let l=null;if(r>s){const e=ol(n);l=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Or=(e,t,i,r)=>z(null,null,function*(){var n;j(e.encryptionInfo);const s=e.encryptionInfo;j(null!==s.defaultKid);const a=s.defaultKid;let o;const l=e.demuxer.decryptionKeyCache.get(a);if(l)o=yield l;else{if(!(null==(n=e.demuxer.input._formatOptions.isobmff)?void 0:n.resolveKeyId))throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=z(null,null,function*(){let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(a));for(let e=0;e{j(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;iz(null,null,function*(){const n=new Uint8Array(16);n.set(i.iv,0);const s=yield crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),a=e=>z(null,null,function*(){const t=yield crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},s,e);return new Uint8Array(t)});if(!i.subsamples)return a(r);j(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Ur(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let l=0;for(const e of o)for(const t of e.perSubsample)l+=t.length;const c=new Uint8Array(l);let u=0;for(const e of o)for(const t of e.perSubsample)c.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;const d=yield a(c),h=new Uint8Array(r);let f=0;for(const e of o)for(const t of e.perSubsample)h.set(d.subarray(f,f+t.length),t.offset),f+=t.length;return h}),Lr=(e,t,i,r)=>{const n=new Sr;n.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,a=t.defaultSkipByteBlock;if(j(null!==s&&null!==a),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],n=0!==t||0!==i;let s=0;for(const a of e){s+=a.clearLen;const e=[];if(n){let r=a.protectedLen,n=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:n,length:s}),n+=s,r-=s;const a=Math.min(16*i,r);n+=a,r-=a}s+=a.protectedLen}else a.protectedLen>0&&e.push({offset:s,length:a.protectedLen}),s+=a.protectedLen;r.push({perSubsample:e})}return r};var qr,Wr;(Wr=qr||(qr={}))[Wr.EBML=440786851]="EBML",Wr[Wr.EBMLVersion=17030]="EBMLVersion",Wr[Wr.EBMLReadVersion=17143]="EBMLReadVersion",Wr[Wr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",Wr[Wr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",Wr[Wr.DocType=17026]="DocType",Wr[Wr.DocTypeVersion=17031]="DocTypeVersion",Wr[Wr.DocTypeReadVersion=17029]="DocTypeReadVersion",Wr[Wr.Void=236]="Void",Wr[Wr.Segment=408125543]="Segment",Wr[Wr.SeekHead=290298740]="SeekHead",Wr[Wr.Seek=19899]="Seek",Wr[Wr.SeekID=21419]="SeekID",Wr[Wr.SeekPosition=21420]="SeekPosition",Wr[Wr.Duration=17545]="Duration",Wr[Wr.Info=357149030]="Info",Wr[Wr.TimestampScale=2807729]="TimestampScale",Wr[Wr.MuxingApp=19840]="MuxingApp",Wr[Wr.WritingApp=22337]="WritingApp",Wr[Wr.Tracks=374648427]="Tracks",Wr[Wr.TrackEntry=174]="TrackEntry",Wr[Wr.TrackNumber=215]="TrackNumber",Wr[Wr.TrackUID=29637]="TrackUID",Wr[Wr.TrackType=131]="TrackType",Wr[Wr.FlagEnabled=185]="FlagEnabled",Wr[Wr.FlagDefault=136]="FlagDefault",Wr[Wr.FlagForced=21930]="FlagForced",Wr[Wr.FlagOriginal=21934]="FlagOriginal",Wr[Wr.FlagHearingImpaired=21931]="FlagHearingImpaired",Wr[Wr.FlagVisualImpaired=21932]="FlagVisualImpaired",Wr[Wr.FlagCommentary=21935]="FlagCommentary",Wr[Wr.FlagLacing=156]="FlagLacing",Wr[Wr.Name=21358]="Name",Wr[Wr.Language=2274716]="Language",Wr[Wr.LanguageBCP47=2274717]="LanguageBCP47",Wr[Wr.CodecID=134]="CodecID",Wr[Wr.CodecPrivate=25506]="CodecPrivate",Wr[Wr.CodecDelay=22186]="CodecDelay",Wr[Wr.SeekPreRoll=22203]="SeekPreRoll",Wr[Wr.DefaultDuration=2352003]="DefaultDuration",Wr[Wr.Video=224]="Video",Wr[Wr.PixelWidth=176]="PixelWidth",Wr[Wr.PixelHeight=186]="PixelHeight",Wr[Wr.DisplayWidth=21680]="DisplayWidth",Wr[Wr.DisplayHeight=21690]="DisplayHeight",Wr[Wr.DisplayUnit=21682]="DisplayUnit",Wr[Wr.AlphaMode=21440]="AlphaMode",Wr[Wr.Audio=225]="Audio",Wr[Wr.SamplingFrequency=181]="SamplingFrequency",Wr[Wr.Channels=159]="Channels",Wr[Wr.BitDepth=25188]="BitDepth",Wr[Wr.SimpleBlock=163]="SimpleBlock",Wr[Wr.BlockGroup=160]="BlockGroup",Wr[Wr.Block=161]="Block",Wr[Wr.BlockAdditions=30113]="BlockAdditions",Wr[Wr.BlockMore=166]="BlockMore",Wr[Wr.BlockAdditional=165]="BlockAdditional",Wr[Wr.BlockAddID=238]="BlockAddID",Wr[Wr.BlockDuration=155]="BlockDuration",Wr[Wr.ReferenceBlock=251]="ReferenceBlock",Wr[Wr.Cluster=524531317]="Cluster",Wr[Wr.Timestamp=231]="Timestamp",Wr[Wr.Cues=475249515]="Cues",Wr[Wr.CuePoint=187]="CuePoint",Wr[Wr.CueTime=179]="CueTime",Wr[Wr.CueTrackPositions=183]="CueTrackPositions",Wr[Wr.CueTrack=247]="CueTrack",Wr[Wr.CueClusterPosition=241]="CueClusterPosition",Wr[Wr.Colour=21936]="Colour",Wr[Wr.MatrixCoefficients=21937]="MatrixCoefficients",Wr[Wr.TransferCharacteristics=21946]="TransferCharacteristics",Wr[Wr.Primaries=21947]="Primaries",Wr[Wr.Range=21945]="Range",Wr[Wr.Projection=30320]="Projection",Wr[Wr.ProjectionType=30321]="ProjectionType",Wr[Wr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",Wr[Wr.Attachments=423732329]="Attachments",Wr[Wr.AttachedFile=24999]="AttachedFile",Wr[Wr.FileDescription=18046]="FileDescription",Wr[Wr.FileName=18030]="FileName",Wr[Wr.FileMediaType=18016]="FileMediaType",Wr[Wr.FileData=18012]="FileData",Wr[Wr.FileUID=18094]="FileUID",Wr[Wr.Chapters=272869232]="Chapters",Wr[Wr.Tags=307544935]="Tags",Wr[Wr.Tag=29555]="Tag",Wr[Wr.Targets=25536]="Targets",Wr[Wr.TargetTypeValue=26826]="TargetTypeValue",Wr[Wr.TargetType=25546]="TargetType",Wr[Wr.TagTrackUID=25541]="TagTrackUID",Wr[Wr.TagEditionUID=25545]="TagEditionUID",Wr[Wr.TagChapterUID=25540]="TagChapterUID",Wr[Wr.TagAttachmentUID=25542]="TagAttachmentUID",Wr[Wr.SimpleTag=26568]="SimpleTag",Wr[Wr.TagName=17827]="TagName",Wr[Wr.TagLanguage=17530]="TagLanguage",Wr[Wr.TagString=17543]="TagString",Wr[Wr.TagBinary=17541]="TagBinary",Wr[Wr.ContentEncodings=28032]="ContentEncodings",Wr[Wr.ContentEncoding=25152]="ContentEncoding",Wr[Wr.ContentEncodingOrder=20529]="ContentEncodingOrder",Wr[Wr.ContentEncodingScope=20530]="ContentEncodingScope",Wr[Wr.ContentCompression=20532]="ContentCompression",Wr[Wr.ContentCompAlgo=16980]="ContentCompAlgo",Wr[Wr.ContentCompSettings=16981]="ContentCompSettings",Wr[Wr.ContentEncryption=20533]="ContentEncryption";const Hr=[qr.EBML,qr.Segment],Vr=[qr.SeekHead,qr.Info,qr.Cluster,qr.Tracks,qr.Cues,qr.Attachments,qr.Chapters,qr.Tags],jr=[...Hr,...Vr],Kr=16,Xr=e=>{if(e.remainingLength<1)return null;const t=sl(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=sl(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Xr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===sl(e))return;e.skip(-1);const t=$r(e);return null===t?null:72057594037927940!==t?t:void 0},Jr=e=>{j(e.remainingLength>=2);const t=Qr(e);if(null===t)return null;const i=Yr(e);return null===i?null:{id:t,size:i}},Zr=(e,t)=>{const i=nl(e,t);let r=0;for(;r{const i=nl(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?yl(e):bl(e)},rn=(e,t,i,r)=>z(null,null,function*(){const n=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}}),nn=(e,t,i,r)=>z(null,null,function*(){const n=B(2,16),s=new Set(i);let a=t;for(;ae.tracks.map(e=>e.trackBacking))})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)})),hasAudio:this.segments.some(e=>e.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)})),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return z(this,null,function*(){yield this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&(yield this.loadSegmentMetadata(t)),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e=_(_({},e),t.metadataTags);return e})}readMetadata(){var e;return null!=(e=this.readMetadataPromise)?e:this.readMetadataPromise=(()=>z(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,Kr);if(Xe(t)&&(t=yield t),!t)break;const i=Jr(t);if(!i)break;const r=i.id;let n=i.size;const s=t.filePos;if(r===qr.EBML){bn(n);let e=this.reader.requestSlice(s,n);if(Xe(e)&&(e=yield e),!e)break;this.readContiguousElements(e)}else if(r===qr.Segment){if(yield this.readSegment(s,n),void 0===n)break;if(null===this.reader.fileSize)break}else if(r===qr.Cluster){if(null===this.reader.fileSize)break;if(void 0===n){n=(yield rn(this.reader,s,jr,this.reader.fileSize)).pos-s}const e=X(this.segments);e&&(e.elementEndPos=s+n)}bn(n),e=s+n}}))()}readSegment(e,t){return z(this,null,function*(){var i;this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let r=e;for(;null===this.currentSegment.elementEndPos||re.id===s);if(-1!==l){const e=xn[l].flag;this.currentSegment[e]=!0,bn(a);let t=this.reader.requestSlice(o,a);Xe(t)&&(t=yield t),t&&this.readContiguousElements(t)}else if(s===qr.Tags||s===qr.Attachments){s===qr.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,bn(a);let e=this.reader.requestSlice(o,a);Xe(e)&&(e=yield e),e&&this.readContiguousElements(e)}else if(s===qr.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===a)break;r=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const t of this.currentSegment.seekEntries){const i=xn.find(e=>e.id===t.id);if(!i)continue;if(this.currentSegment[i.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,2,Kr);if(Xe(r)&&(r=yield r),!r)continue;const n=Jr(r);if(!n)continue;const{id:s,size:a}=n;if(s!==i.id)continue;bn(a),this.currentSegment[i.flag]=!0;let o=this.reader.requestSlice(r.filePos,a);Xe(o)&&(o=yield o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const e of this.currentSegment.tracks)null!==e.defaultDurationNs&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);const n=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const e of this.currentSegment.cuePoints){const t=n.get(e.trackId);t&&t.cuePoints.push(e)}for(const e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;ta&&(a=e.cuePoints.length,s=e);for(const e of this.currentSegment.tracks)0===e.cuePoints.length&&(e.cuePoints=s.cuePoints);this.currentSegment=null})}readCluster(e,t){return z(this,null,function*(){var i;if((null==(i=t.lastReadCluster)?void 0:i.elementStartPos)===e)return t.lastReadCluster;let r=this.reader.requestSliceRange(e,2,Kr);Xe(r)&&(r=yield r),j(r);const n=e,s=Jr(r);j(s);j(s.id===qr.Cluster);let a=s.size;const o=r.filePos;if(void 0===a){a=(yield rn(this.reader,o,jr,t.elementEndPos)).pos-o}let l=this.reader.requestSlice(o,a);Xe(l)&&(l=yield l);const c={segment:t,elementStartPos:n,elementEndPos:o+a,dataStartPos:o,timestamp:-1,trackData:new Map};if(this.currentCluster=c,l){const e=this.readContiguousElements(l,jr);c.elementEndPos=e}for(const[,e]of c.trackData){const t=e.track;j(e.blocks.length>0);let i=!1;for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const r=e.blocks[e.presentationTimestamps[0].blockIndex],s=e.blocks[X(e.presentationTimestamps).blockIndex];e.startTimestamp=r.timestamp,e.endTimestamp=s.timestamp+s.duration;const a=pe(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);-1!==a&&t.clusterPositionCache[a].elementStartPos===n||t.clusterPositionCache.splice(a+1,0,{elementStartPos:c.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=c,c})}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){var i;for(let r=0;r=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,S,w,P,I,x,C,B,E,F,A,D,M,N,O,z,L,U,q,W,H,V,X,$,G,Q,Y,J,ee,te,re,se;const oe=Jr(e);if(!oe)return!1;if(t&&t.includes(oe.id))return!1;const{id:ce,size:ue}=oe,de=e.filePos;switch(bn(ue),ce){case qr.DocType:this.isWebM="webm"===Zr(e,ue);break;case qr.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(de,ue)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case qr.SeekID:{const t=null==(i=this.currentSegment)?void 0:i.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Gr(e,ue)}break;case qr.SeekPosition:{const t=null==(r=this.currentSegment)?void 0:r.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Gr(e,ue)}break;case qr.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Gr(e,ue),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case qr.Duration:if(!this.currentSegment)break;this.currentSegment.duration=tn(e,ue);break;case qr.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:R(_({},dt),{primary:!1}),trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(de,ue)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>{var t;return"decompress"!==(null==(t=e.data)?void 0:t.type)||e.scope!==Sn.Block||e.data.algorithm!==Pn.HeaderStripping})&&(lt._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===sn)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===an)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===on)this.currentTrack.info.codec="vp8";else if(t===ln)this.currentTrack.info.codec="vp9";else if(t===cn)this.currentTrack.info.codec="av1";else if(t===un){const e=this.currentTrack.codecPrivate?Z.decode(this.currentTrack.codecPrivate):"";Oi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new _n(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===dn?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===hn?this.currentTrack.info.codec="mp3":t===fn?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=Wi):t===mn?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===pn?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===gn?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===kn?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===yn?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Rn(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case qr.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Gr(e,ue);break;case qr.TrackType:{if(!this.currentTrack)break;const t=Gr(e,ue);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:_({},le),alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case qr.FlagEnabled:if(!this.currentTrack)break;Gr(e,ue)||(this.currentTrack=null);break;case qr.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Gr(e,ue);break;case qr.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Gr(e,ue);break;case qr.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Gr(e,ue);break;case qr.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Gr(e,ue);break;case qr.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Gr(e,ue);break;case qr.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Gr(e,ue);break;case qr.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Zr(e,ue);break;case qr.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=nl(e,ue);break;case qr.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Gr(e,ue);break;case qr.Name:if(!this.currentTrack)break;this.currentTrack.name=en(e,ue);break;case qr.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Zr(e,ue),Ae(this.currentTrack.languageCode)||(this.currentTrack.languageCode=xe);break;case qr.LanguageBCP47:{if(!this.currentTrack)break;const t=Zr(e,ue).split("-")[0];this.currentTrack.languageCode=t||xe,this.currentTrack.hasLanguageBcp47=!0}break;case qr.Video:if("video"!==(null==(s=null==(n=this.currentTrack)?void 0:n.info)?void 0:s.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.PixelWidth:if("video"!==(null==(o=null==(a=this.currentTrack)?void 0:a.info)?void 0:o.type))break;this.currentTrack.info.width=Gr(e,ue);break;case qr.PixelHeight:if("video"!==(null==(c=null==(l=this.currentTrack)?void 0:l.info)?void 0:c.type))break;this.currentTrack.info.height=Gr(e,ue);break;case qr.DisplayWidth:if("video"!==(null==(d=null==(u=this.currentTrack)?void 0:u.info)?void 0:d.type))break;this.currentTrack.info.displayWidth=Gr(e,ue);break;case qr.DisplayHeight:if("video"!==(null==(f=null==(h=this.currentTrack)?void 0:h.info)?void 0:f.type))break;this.currentTrack.info.displayHeight=Gr(e,ue);break;case qr.DisplayUnit:if("video"!==(null==(p=null==(m=this.currentTrack)?void 0:m.info)?void 0:p.type))break;this.currentTrack.info.displayUnit=Gr(e,ue);break;case qr.AlphaMode:if("video"!==(null==(k=null==(g=this.currentTrack)?void 0:g.info)?void 0:k.type))break;this.currentTrack.info.alphaMode=1===Gr(e,ue);break;case qr.Colour:if("video"!==(null==(b=null==(y=this.currentTrack)?void 0:y.info)?void 0:b.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.MatrixCoefficients:{if("video"!==(null==(v=null==(T=this.currentTrack)?void 0:T.info)?void 0:v.type))break;const t=Gr(e,ue),i=ae[t];this.currentTrack.info.colorSpace.matrix=i}break;case qr.Range:{if("video"!==(null==(w=null==(S=this.currentTrack)?void 0:S.info)?void 0:w.type))break;const t=Gr(e,ue);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case qr.TransferCharacteristics:{if("video"!==(null==(I=null==(P=this.currentTrack)?void 0:P.info)?void 0:I.type))break;const t=Gr(e,ue),i=ne[t];this.currentTrack.info.colorSpace.transfer=i}break;case qr.Primaries:{if("video"!==(null==(C=null==(x=this.currentTrack)?void 0:x.info)?void 0:C.type))break;const t=Gr(e,ue),i=ie[t];this.currentTrack.info.colorSpace.primaries=i}break;case qr.Projection:if("video"!==(null==(E=null==(B=this.currentTrack)?void 0:B.info)?void 0:E.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.ProjectionPoseRoll:{if("video"!==(null==(A=null==(F=this.currentTrack)?void 0:F.info)?void 0:A.type))break;const t=-tn(e,ue);try{this.currentTrack.info.rotation=K(t)}catch(he){}}break;case qr.Audio:if("audio"!==(null==(M=null==(D=this.currentTrack)?void 0:D.info)?void 0:M.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.SamplingFrequency:if("audio"!==(null==(O=null==(N=this.currentTrack)?void 0:N.info)?void 0:O.type))break;this.currentTrack.info.sampleRate=tn(e,ue);break;case qr.Channels:if("audio"!==(null==(L=null==(z=this.currentTrack)?void 0:z.info)?void 0:L.type))break;this.currentTrack.info.numberOfChannels=Gr(e,ue);break;case qr.BitDepth:if("audio"!==(null==(q=null==(U=this.currentTrack)?void 0:U.info)?void 0:q.type))break;this.currentTrack.info.bitDepth=Gr(e,ue);break;case qr.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(de,ue)),this.currentCueTime=null;break;case qr.CueTime:this.currentCueTime=Gr(e,ue);break;case qr.CueTrackPositions:{if(null===this.currentCueTime)break;j(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(de,ue)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case qr.CueTrack:{const t=null==(W=this.currentSegment)?void 0:W.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Gr(e,ue)}break;case qr.CueClusterPosition:{const t=null==(H=this.currentSegment)?void 0:H.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;j(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Gr(e,ue)}break;case qr.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Gr(e,ue);break;case qr.SimpleBlock:{if(!this.currentCluster)break;const t=$r(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=cl(e),n=sl(e),s=n>>1&3;let a=!!(128&n);"audio"===(null==(V=i.track.info)?void 0:V.type)&&i.track.info.codec&&(a=!0);const o=nl(e,ue-(e.filePos-de)),l=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:a,data:o,lacing:s,decoded:!l,postProcessed:!1,mainAdditional:null})}break;case qr.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(de,ue)),this.currentBlock=null;break;case qr.Block:{if(!this.currentCluster)break;const t=$r(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=cl(e),n=sl(e)>>1&3,s=nl(e,ue-(e.filePos-de)),a=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:s,lacing:n,decoded:!a,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case qr.BlockAdditions:this.readContiguousElements(e.slice(de,ue));break;case qr.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(de,ue)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case qr.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=nl(e,ue);break;case qr.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Gr(e,ue);break;case qr.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Gr(e,ue);break;case qr.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case qr.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(de,ue));break;case qr.Targets:this.readContiguousElements(e.slice(de,ue));break;case qr.TargetTypeValue:50!==Gr(e,ue)&&(this.currentTagTargetIsMovie=!1);break;case qr.TagTrackUID:case qr.TagEditionUID:case qr.TagChapterUID:case qr.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case qr.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(de,ue));break;case qr.TagName:this.currentSimpleTagName=en(e,ue);break;case qr.TagString:{if(!this.currentSimpleTagName)break;const t=en(e,ue);this.processTagValue(this.currentSimpleTagName,t)}break;case qr.TagBinary:{if(!this.currentSimpleTagName)break;const t=nl(e,ue);this.processTagValue(this.currentSimpleTagName,t)}break;case qr.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(de,ue));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(null!=t.raw||(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new ut(this.currentAttachedFile.fileData,null!=(X=this.currentAttachedFile.fileMediaType)?X:void 0,null!=($=this.currentAttachedFile.fileName)?$:void 0,null!=(G=this.currentAttachedFile.fileDescription)?G:void 0)),(null==(Q=this.currentAttachedFile.fileMediaType)?void 0:Q.startsWith("image/"))&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}null!=t.images||(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:null!=(Y=this.currentAttachedFile.fileName)?Y:void 0,description:null!=(J=this.currentAttachedFile.fileDescription)?J:void 0})}this.currentAttachedFile=null}break;case qr.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=BigInt("0");for(let r=0;rt.order-e.order);break;case qr.ContentEncoding:this.currentDecodingInstruction={order:0,scope:Sn.Block,data:null},this.readContiguousElements(e.slice(de,ue)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case qr.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Gr(e,ue);break;case qr.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Gr(e,ue);break;case qr.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:Pn.Zlib,settings:null},this.readContiguousElements(e.slice(de,ue));break;case qr.ContentCompAlgo:if("decompress"!==(null==(te=null==(ee=this.currentDecodingInstruction)?void 0:ee.data)?void 0:te.type))break;this.currentDecodingInstruction.data.algorithm=Gr(e,ue);break;case qr.ContentCompSettings:if("decompress"!==(null==(se=null==(re=this.currentDecodingInstruction)?void 0:re.data)?void 0:se.type))break;this.currentDecodingInstruction.data.settings=nl(e,ue);break;case qr.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=de+ue,!0}decodeBlockData(e,t){j(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(j(r.data),"decompress"===r.data.type)if(r.data.algorithm===Pn.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i,r;if(!(null==(i=this.currentSegment)?void 0:i.metadataTags))return;const n=this.currentSegment.metadataTags;if(null!=n.raw||(n.raw={}),null!=(r=n.raw)[e]||(r[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":null!=n.title||(n.title=t);break;case"description":null!=n.description||(n.description=t);break;case"artist":null!=n.artist||(n.artist=t);break;case"album":null!=n.album||(n.album=t);break;case"album_artist":null!=n.albumArtist||(n.albumArtist=t);break;case"genre":null!=n.genre||(n.genre=t);break;case"comment":null!=n.comment||(n.comment=t);break;case"lyrics":null!=n.lyrics||(n.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||null!=n.date||(n.date=e)}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.trackNumber||(n.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.tracksTotal||(n.tracksTotal=r))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.discNumber||(n.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.discsTotal||(n.discsTotal=r))}}}getDurationFromMetadata(e){return z(this,null,function*(){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){j(r.trackBacking);const e=yield r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(null!=t?t:1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=null!=t?t:0,i})}}class En{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getFirstPacket(e){return z(this,null,function*(){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)})}intoTimescale(e){return Ce(e*this.internalTrack.segment.timestampFactor)}getPacket(e,t){return z(this,null,function*(){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=pe(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Te(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return j(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)})}fetchPacketInCluster(e,t,i){return z(this,null,function*(){var r,n;if(-1===t)return null;const s=e.trackData.get(this.internalTrack.id).blocks[t];if(j(s),s.decoded||(s.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,s.data),s.decoded=!0),!s.postProcessed){if("prores"===(null==(r=this.internalTrack.info)?void 0:r.codec)){if(!(s.data.length>=8&&105===s.data[4]&&99===s.data[5]&&112===s.data[6]&&102===s.data[7])){const e=new Uint8Array(s.data.length+8);J(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(s.data,8),s.data=e}}s.postProcessed=!0}const a=i.metadataOnly?rr:s.data,o=s.timestamp/this.internalTrack.segment.timestampFactor,l=s.duration/this.internalTrack.segment.timestampFactor,c={};s.mainAdditional&&"video"===(null==(n=this.internalTrack.info)?void 0:n.type)&&this.internalTrack.info.alphaMode&&(c.alpha=i.metadataOnly?rr:s.mainAdditional,c.alphaByteLength=s.mainAdditional.byteLength);const u=new nr(a,s.isKeyFrame?"key":"delta",o,l,e.dataStartPos+t,s.data.byteLength,c);return this.packetToClusterLocation.set(u,{cluster:e,blockIndex:t}),u})}performClusterLookup(e,t,i,r,n){return z(this,null,function*(){var s,a,o,l;const{demuxer:c,segment:u}=this.internalTrack;let d=null,h=null,f=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,n);-1!==i&&(h=e,f=i)}const m=pe(this.internalTrack.cuePoints,i,e=>e.time),p=-1!==m?this.internalTrack.cuePoints[m]:null,g=pe(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),k=-1!==g?this.internalTrack.clusterPositionCache[g]:null,y=Math.max(null!=(s=null==p?void 0:p.clusterPosition)?s:0,null!=(a=null==k?void 0:k.elementStartPos)?a:0)||null;let b;for(e?null===y||e.elementStartPos>=y?(b=e.elementEndPos,d=e):b=y:b=null!=y?y:u.clusterSeekStartPos;null===u.elementEndPos||b<=u.elementEndPos-2;){if(d){const e=d.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=c.reader.requestSliceRange(b,2,Kr);if(Xe(e)&&(e=yield e),!e)break;const i=b,s=Jr(e);if(!s||!Vr.includes(s.id)&&s.id!==qr.Void){const e=yield nn(c.reader,i,Vr,Math.min(null!=(o=u.elementEndPos)?o:1/0,i+Cn));if(e){b=e;continue}break}const a=s.id;let l=s.size;const m=e.filePos;if(a===qr.Cluster){d=yield c.readCluster(i,u),l=d.elementEndPos-m;const{blockIndex:e,correctBlockFound:r}=t(d);if(r)return this.fetchPacketInCluster(d,e,n);-1!==e&&(h=d,f=e)}if(void 0===l){j(a!==qr.Cluster);l=(yield rn(c.reader,m,jr,u.elementEndPos)).pos-m}const p=m+l;if(null===u.elementEndPos){let e=c.reader.requestSliceRange(p,2,Kr);if(Xe(e)&&(e=yield e),!e)break;if(Qr(e)===qr.Segment){u.elementEndPos=p;break}}b=p}if(p&&(!h||h.elementStartPosz(this,null,function*(){var e,t,i,r,n;let s=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(s=yield this.getFirstPacket({}));const a={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&s?Ft(s.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&s?Wt(s.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&s?ei(s.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&s?ii(s.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&s?ri(s.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!oe(this.internalTrack.info.colorSpace)){const n=Ui(a);null!=(e=this.internalTrack.info.colorSpace).primaries||(e.primaries=n.primaries),null!=(t=this.internalTrack.info.colorSpace).transfer||(t.transfer=n.transfer),null!=(i=this.internalTrack.info.colorSpace).matrix||(i.matrix=n.matrix),null!=(r=this.internalTrack.info.colorSpace).fullRange||(r.fullRange=n.fullRange)}const o={codec:Li(a),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(n=this.internalTrack.info.codecDescription)?n:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Rn extends En{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>z(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&xi(e.data)}return{codec:qi({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Fn=(e,t,i,r=null)=>z(null,null,function*(){const n=B(2,16);let s=t;for(;null===i||s=4;){const t=a.filePos,i=dl(a),n=null!==e.fileSize?e.fileSize-s:null,o=Yi(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&tr(o.header.channel)===tr(r.channel)))return{header:o.header,startPos:s};a.filePos=t+o.bytesAdvanced,s=a.filePos}}return null});class An extends ir{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new ue,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new Dn(this)]}))()})}advanceReader(){return z(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Rl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=yield Fn(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Qi(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Xe(r)&&(r=yield r),r){const n=dl(r);if(n===$i||n===Gi){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Xe(t)&&(t=yield t),t){const e=nl(t,12),i=J(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Zi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Zi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const n=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:n,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame})}getMimeType(){return z(this,null,function*(){return"audio/mpeg"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=!0;let n=this.reader.requestSlice(i.filePos,r.size);if(Xe(n)&&(n=yield n),!n)break;Fl(n,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=xl){let e=this.reader.requestSlice(this.reader.fileSize-xl,xl);Xe(e)&&(e=yield e),j(e);"TAG"===Tl(e,3)&&El(e,this.metadataTags)}return this.metadataTags}finally{e()}})}}class Dn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return j(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){const e=this.demuxer;if(j(null!==e.firstFrameHeader),j(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,n=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(n<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const On=e=>{const t=J(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^t])>>>0}return t.setUint32(22,i,!0),r},zn=(e,t,i)=>{let r=0,n=null;if(e.length>0)if("vorbis"===t.codec){j(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,a=(e[0]&s)>>1;if(a>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const l=t.vorbisInfo.modeBlockflags[a];if(n=t.vorbisInfo.blocksizes[l],1===l){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+n>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ni[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:n}},Ln=27,Un=282,qn=e=>{const t=e.filePos;if(hl(e)!==Mn)return null;e.skip(1);const i=sl(e),r=kl(e),n=hl(e),s=hl(e),a=hl(e),o=sl(e),l=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:c+u,dataStartPos:t+c,dataSize:u,headerType:i,granulePosition:r,serialNumber:n,sequenceNumber:s,checksum:a,lacingValues:l}},Wn=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===Mn)return!0;e.skip(1)}}return!1};class Hn extends ir{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,Ln,Un);if(Xe(t)&&(t=yield t),!t)break;const i=qn(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=yield this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?yield this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&(yield this.readOpusMetadata(e,t)),null!==t.codecInfo.codec&&this.trackBackings.push(new Vn(t,this)))}}))()})}readVorbisMetadata(e,t){return z(this,null,function*(){let i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=yield this.findNextPacketStart(r),!i)return;const n=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!n)return;if(3!==r.data[0]||5!==n.data[0])return;const s=[],a=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};a(e.data.length),a(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+n.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(n.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=n;const l=J(e.data);t.numberOfChannels=l.getUint8(11),t.sampleRate=l.getUint32(12,!0);const c=l.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&c),1<<(c>>4)],modeBlockflags:si(n.data).modeBlockflags},ci(r.data.subarray(7),this.metadataTags)})}readOpusMetadata(e,t){return z(this,null,function*(){const i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const n=(e=>{const t=J(e),i=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),s=t.getInt16(16,!0),a=t.getUint8(18);let o=null;return a&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:n,outputGain:s,channelMappingFamily:a,channelMappingTable:o}})(e.data);t.numberOfChannels=n.outputChannelCount,t.sampleRate=Wi,t.codecInfo.opusInfo={preSkip:n.preSkip},ci(r.data.subarray(8),this.metadataTags)})}readPacket(e,t){return z(this,null,function*(){j(te+t.length,0);if(0===o)return null;const l=new Uint8Array(o);let c=0;for(let e=0;e{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(yield Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})))).filter(Boolean)})})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}class Vn{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new ue,this.internalSampleRate="opus"===e.codecInfo.codec?Wi:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return j(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}getDecoderConfig(){return z(this,null,function*(){var e;return j(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:null!=(e=this.bitstream.description)?e:void 0}})}getName(){return null}getLanguageCode(){return xe}getDisposition(){return R(_({},dt),{primary:!1})}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(j(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:n}=zn(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new nr(i.metadataOnly?rr:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:n}),s}getFirstPacket(e){return z(this,null,function*(){j(this.bitstream.lastMetadataPacket);const t=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(j(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=yield this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)})}getNextPacket(e,t){return z(this,null,function*(){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=yield this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const n=i.timestampInSamples+i.durationInSamples,s=yield this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:n,vorbisLastBlocksize:i.vorbisBlockSize},t)})}getPacket(e,t){return z(this,null,function*(){var i,r;if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const n=Ce(e*this.internalSampleRate);if(0===n)return this.getFirstPacket(t);if(n<0)return null;j(this.bitstream.lastMetadataPacket);const s=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!s)return null;let a=s.startPage,o=this.demuxer.reader.fileSize;const l=[a];e:for(;a.headerStartPos+a.totalSizen?o=c.headerStartPos:(a=c,l.push(c));continue e}i=c.headerStartPos+c.totalSize}}let c=s.startPage;for(const e of l){if(e.granulePosition===a.granulePosition)break;(!c||e.headerStartPos>c.headerStartPos)&&(c=e)}let u=c;const d=[u];for(;u.serialNumber!==this.bitstream.serialNumber||u.granulePosition!==a.granulePosition;){const e=u.headerStartPos+u.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Ln,Un);Xe(t)&&(t=yield t),j(t);const i=qn(t);j(i),u=i,u.serialNumber===this.bitstream.serialNumber&&d.push(u)}j(-1!==u.granulePosition);let h,f,m=null,p=u,g=0;if(u.headerStartPos===s.startPage.headerStartPos)h=this.granulePositionToTimestampInSamples(0),f=!0,m=0;else{h=0,f=!1;for(let t=u.lacingValues.length-1;t>=0;t--){if(u.lacingValues[t]<255){m=t+1;break}}if(null===m)throw new Error("Invalid page with granule position: no packets end on this page.");g=m-1;const e={data:rr,endPage:p,endSegmentIndex:g};if(yield this.demuxer.findNextPacketStart(e)){const e=Kn(d,u,m);j(e);const t=jn(d,e.page,e.segmentIndex);t&&(u=t.page,m=t.segmentIndex)}else for(;;){const e=Kn(d,u,m);if(!e)break;const t=jn(d,e.page,e.segmentIndex);if(!t)break;if(u=t.page,m=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,g=e.segmentIndex;break}}}let k=null,y=null;for(;null!==u;){j(null!==m);const e=yield this.demuxer.readPacket(u,m);if(!e)break;if(!(u.headerStartPos===s.startPage.headerStartPos&&mn||Math.max(a.timestampInSamples,0)===n))break}const a=yield this.demuxer.findNextPacketStart(e);if(!a)break;u=a.startPage,m=a.startSegmentIndex}return k})}getPacketSequential(e,t){return z(this,null,function*(){const i=yield this.sequentialScanMutex.acquire();try{const i=Ce(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=pe(this.sequentialScanCache,i,e=>e.timestampInSamples);let n;if(-1!==r){const e=this.sequentialScanCache[r];n=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else n=yield this.getFirstPacket(t);let s=0;for(;n&&n.timestampe)break;if(n=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(n);j(e),this.sequentialScanCache.length>0&&j(X(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return n}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const jn=(e,t,i)=>{let r=t,n=i;e:for(;;){for(n--;n>=0;n--){if(r.lacingValues[n]<255){n++;break e}}j(-1===n);if(!(1&r.headerType)){n=0;break}const t=be(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=be(e,e=>e.headerStartPosz(this,null,function*(){var e,t;let i=this.reader.requestSlice(0,12);Xe(i)&&(i=yield i),j(i);const r=Tl(i,4),n="RIFX"!==r,s="RF64"===r,a=ul(i,n);let o=s?this.reader.fileSize:Math.min(a+8,null!=(e=this.reader.fileSize)?e:1/0);if("WAVE"!==Tl(i,4))throw new Error("Invalid WAVE file - wrong format");let l=0,c=null,u=i.filePos;for(;null===o||u=18&&357!==n){const e=al(r,i),s=t-18;if(Math.min(s,e)>=22&&n===Xn.EXTENSIBLE){r.skip(6);const e=nl(r,16);n=e[0]|e[1]<<8}}if(n!==Xn.MULAW&&n!==Xn.ALAW||(l=8),n!==Xn.PCM&&n!==Xn.IEEE_FLOAT&&n!==Xn.ALAW&&n!==Xn.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${n}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(n===Xn.PCM&&![8,16,24,32].includes(l))throw new Error(`Unsupported WAVE PCM bit depth (${l}). Only 8, 16, 24, and 32 bits are supported.`);if(n===Xn.IEEE_FLOAT&&![32,64].includes(l))throw new Error(`Unsupported WAVE float bit depth (${l}). Only 32 and 64 bits are supported.`);this.audioInfo={format:n,numberOfChannels:s,sampleRate:a,sampleSizeInBytes:Math.ceil(l/8),blockSizeInBytes:o}})}parseListChunk(e,t,i){return z(this,null,function*(){var r,n,s,a,o,l,c,u,d,h,f;let m=this.reader.requestSlice(e,t);if(Xe(m)&&(m=yield m),!m)return;const p=Tl(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=Tl(m,4),t=ul(m,i),p=nl(m,t);let k=0;for(let i=0;i0&&(null!=(l=this.metadataTags).trackNumber||(l.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(c=this.metadataTags).tracksTotal||(c.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||null!=(u=this.metadataTags).date||(u.date=e)}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&(null!=(d=this.metadataTags).date||(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":null!=(h=this.metadataTags).genre||(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":null!=(f=this.metadataTags).comment||(f.comment=y)}g+=8+t+(1&t)}})}parseId3Chunk(e,t){return z(this,null,function*(){let i=this.reader.requestSlice(e,t);if(Xe(i)&&(i=yield i),!i)return;const r=Rl(i);if(r){const n=t-Cl;if(r.size=Math.min(r.size,n),r.size>0){const t=i.slice(e+Cl,r.size);Fl(t,r,this.metadataTags)}}})}getCodec(){if(j(this.audioInfo),this.audioInfo.format===Xn.MULAW)return"ulaw";if(this.audioInfo.format===Xn.ALAW)return"alaw";if(this.audioInfo.format===Xn.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===Xn.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}j(!1)}getMimeType(){return z(this,null,function*(){return"audio/wav"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}const Qn=2048;class Yn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.format}getDecoderConfig(){return z(this,null,function*(){const e=this.demuxer.getCodec();return e?(j(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null})}getNumberOfChannels(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return j(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return xe}getDisposition(){return _({},dt)}getPacketAtIndex(e,t){return z(this,null,function*(){j(e>=0),j(this.demuxer.audioInfo);const i=e*Qn*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Qn*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Xe(e)&&(e=yield e),!e)return null}let n;if(t.metadataOnly)n=rr;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Xe(e)&&(e=yield e),j(e),n=nl(e,r)}const s=e*Qn/this.demuxer.audioInfo.sampleRate,a=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new nr(n,"key",s,a,e,r)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getPacket(e,t){return z(this,null,function*(){j(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Qn,(this.demuxer.dataSize-1)/(Qn*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=yield this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;j(null===this.demuxer.reader.fileSize);let n=yield this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;n;){const e=yield this.getNextPacket(n,t);if(!e)break;n=e}return n})}getNextPacket(e,t){j(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Qn);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Jn=e=>{const t=e.filePos,i=nl(e,9),r=new ht(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const n=r.readBits(1),s=r.readBits(2)+1,a=r.readBits(4);if(15===a)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const l=r.readBits(13);r.skipBits(11);const c=r.readBits(2)+1;if(1!==c)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===n?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:l,numberOfAacFrames:c,crcCheck:u,startPos:t}},Zn=1024;class es extends ir{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new ue,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();j(this.firstFrameHeader),this.trackBackings=[new ts(this)]}))()})}advanceReader(){return z(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Rl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Jn(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=ft[t.samplingFrequencyIndex];j(void 0!==i);const r=Zn/i,n={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(n),this.nextTimestampInSamples+=Zn,this.lastLoadedPos=t.startPos+t.frameLength})}getMimeType(){return z(this,null,function*(){return"audio/aac"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,Cl);if(Xe(t)&&(t=yield t),!t)break;const i=Rl(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Xe(r)&&(r=yield r),!r)break;Fl(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}})}}class ts{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Zn}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return xe}getCodec(){return"aac"}getInternalCodecId(){return j(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){j(this.demuxer.firstFrameHeader);const e=mt[this.demuxer.firstFrameHeader.channelConfiguration];return j(void 0!==e),e}getSampleRate(){j(this.demuxer.firstFrameHeader);const e=ft[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return j(void 0!==e),e}getDisposition(){return _({},dt)}getDecoderConfig(){return z(this,null,function*(){return j(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}})}getPacketAtIndex(e,t){return z(this,null,function*(){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=rr;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Xe(e)&&(e=yield e),!e)return null;r=nl(e,i.dataSize)}return new nr(r,"key",i.timestamp,i.duration,e,i.dataSize)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getNextPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=me(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1z(this,null,function*(){var e;let t=0;for(;;){let e=this.reader.requestSlice(t,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const i=Rl(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Xe(r)&&(r=yield r),j(r),Fl(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:s.end-e,isLastFrame:!0};if(255===sl(s)){const t=s.filePos;if(sl(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-a.num!==1){s.filePos=t;continue}}else if(r.num-a.num!==a.blockSize){s.filePos=t;continue}return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:i,isLastFrame:!1}}}})}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=nl(e,4),n=new ht(r);if(32764!==n.readBits(15))return null;if(null===this.blockingBit){j(t);const e=n.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){j(!t);if(1!==n.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");j(!t);if(0!==n.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*B(2,e):6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?B(2,e):null)(n.readBits(4));if(!s)return null;j(this.audioInfo);const a=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(n.readBits(4),this.audioInfo.sampleRate);if(!a)return null;n.readBits(4),n.readBits(3);if(0!==n.readBits(1))return null;const o=(e=>{let t=0;const i=new ht(nl(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],n=t-1,s=new ht(nl(e,n)),a=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?ol(e)+1:"uncommon-u8"===t?sl(e)+1:"number"===typeof t?t:(ve(t),void j(!1)))(e,s),c=((e,t)=>"uncommon-u16"===t?ol(e):"uncommon-u16-10"===t?10*ol(e):"uncommon-u8"===t?sl(e):"number"===typeof t?t:null)(e,a);if(null===c)return null;if(c!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=sl(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(nl(e,u));return d!==h?null:{num:o,blockSize:l,sampleRate:c}}advanceReader(){return z(this,null,function*(){yield this.readMetadata(),j(null!==this.lastLoadedPos),j(this.audioInfo);const e=this.lastLoadedPos,t=yield this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)})}}class rs{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return xe}getTimeResolution(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return j(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getDisposition(){return _({},dt)}getDecoderConfig(){return z(this,null,function*(){return j(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}})}getPacket(e,t){return z(this,null,function*(){if(j(this.demuxer.audioInfo),e<0)return null;const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){yield this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],n=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(n+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);yield this.demuxer.advanceReader()}}finally{i()}})}getNextPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}getPacketAtIndex(e,t){return z(this,null,function*(){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=rr;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Xe(e)&&(e=yield e),!e)return null;r=nl(e,i.byteSize)}j(this.demuxer.audioInfo);const n=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new nr(r,"key",n,s,e,i.byteSize)})}getFirstPacket(e){return z(this,null,function*(){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)})}}const ns=9e4,ss=B(2,33),as=188,os="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",ls=new Set([133,134,162]),cs=new Set;class us extends ir{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=this.reader.requestSlice(0,205);Xe(e)&&(e=yield e),j(e);const t=nl(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=as;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,n=!1,s=!1;for(;;){const e=yield this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=yield this.readSection(i,!0,!s);if(!t)break;const a=3,o=32;let l=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i);l=2===e.readBits(8)}}if(0!==t.pid||n)if(t.pid!==r&&!l||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=hs(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(yield this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new ks(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,yield r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=Ft(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];j(t);const i=Nt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const n=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;n>0&&s>0&&(n>s?(e.info.squarePixelWidth=Math.round(e.info.width*n/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/n))),e.info.colorSpace={primaries:ie[i.colourPrimaries],transfer:ne[i.transferCharacteristics],matrix:ae[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=Wt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===St.SPS_NUT).nalUnits[0];j(t);const i=qt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:ie[i.colourPrimaries],transfer:ne[i.transferCharacteristics],matrix:ae[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Li({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(yield r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=il.tempFromBytes(r.suppliedPacket.data),i=Jn(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=mt[i.channelConfiguration],e.info.sampleRate=ft[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=dl(il.tempFromBytes(r.suppliedPacket.data)),i=Yi(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=tr(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=di(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=ui[t.acmod]+t.lfeon,e.info.sampleRate=yt[t.fscod]}else if("eac3"===e.info.codec){const t=mi(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=pi(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=gi(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=Ii(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:qi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const n=e.readBits(10),l=e.pos+8*n;let c=!1;for(;e.pos=4){const t=e.readBits(32);c||(c=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=l;8*(r+a)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),n=e.pos+8*r;let s=!1,a=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let l=null;const u=c&&ls.has(t)?130:t;switch(u){case 27:case 36:l={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",l={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:a?l={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?l={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(l={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:cs.has(t)||(lt._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),cs.add(t))}l&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:l,referencePesPackets:[]})}s=!0}else{const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+a)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");n=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!n)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const a of this.elementaryStreams)a.initialized&&("video"===a.info.type?this.trackBackingEntries.push(new ms(a)):this.trackBackingEntries.push(new ps(a)))}))()})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackingEntries})}getMetadataTags(){return z(this,null,function*(){return{}})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(yield Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null}))))})}readSection(e,t,i=!1){return z(this,null,function*(){let r=e,n=e;const s=[];let a,o=0,l=null,c=!0,u=0;for(;;){const e=yield this.readPacket(n);if(n+=this.packetStride,!e)break;if(l){if(e.pid!==l.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;l=e}const a=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(a&&(h=1+e.body[0],e===l&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=n,!t&&o>=64){c=!1;break}if(-1!==me(this.sectionEndPositions,r,e=>e)){c=!1;break}}if(c){const e=pe(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!l)return null;if(1===s.length)a=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);a=new Uint8Array(e);let t=0;for(const i of s)a.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:l.pid,payload:a,randomAccessIndicator:u}})}readPacketHeader(e){return z(this,null,function*(){let t=this.reader.requestSlice(e,4);if(Xe(t)&&(t=yield t),!t)return null;if(71!==sl(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=ol(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:sl(t)>>4&3}})}readPacket(e){return z(this,null,function*(){let t=this.reader.requestSlice(e,as);if(Xe(t)&&(t=yield t),!t)return null;const i=nl(t,as);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}})}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ss-t?-ss:ss}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new ht(t.payload);if(1!==r.readBits(24))return null;const n=r.readBits(8);if(r.skipBits(16),188===n||190===n||191===n||240===n||241===n||255===n||242===n||248===n)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let a=null;if(2===s||3===s)a=0,r.skipBits(4),a+=r.readBits(3)*(1<<30),r.skipBits(1),a+=32768*r.readBits(15),r.skipBits(1),a+=r.readBits(15),a=e.normalizeTimestamp(a);else if(i)throw new Error(os);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:a,randomAccessIndicator:t.randomAccessIndicator}},hs=(e,t,i)=>{j(null!==t.endPos);const r=ds(e,t,i);if(!r)return null;const n=new ht(t.payload);n.skipBits(32);const s=n.readBits(16);n.skipBits(16);const a=n.readBits(8),o=n.pos+8*a;n.pos=o;const l=o/8;j(Number.isInteger(l));const c=t.payload.subarray(l,s>0?6+s:t.payload.byteLength);return R(_({},r),{data:c})};class fs{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,j(r instanceof fs),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return xe}getDisposition(){return R(_({},dt),{primary:!1})}getTimeResolution(){return ns}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new nr(i.metadataOnly?rr:e.data,r,e.pts/ns,Math.max(t/ns,0),e.sequenceNumber,e.data.byteLength)}getFirstPacket(e){return z(this,null,function*(){const t=this.elementaryStream.firstSection;j(t);const i=hs(this.elementaryStream.demuxer,t,!0);j(i);const r=new ks(this.elementaryStream,i),n=new ys(this,r),s=yield n.readNext();if(!s)return null;const a=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(a,n),this.packetSectionStarts.set(a,s.packet.sectionStartPos),a})}getNextPacket(e,t){return z(this,null,function*(){let i=this.packetBuffers.get(e);if(i){const r=yield i.readNext();if(!r)return null;this.packetBuffers.delete(e);const n=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(n,i),this.packetSectionStarts.set(n,r.packet.sectionStartPos),n}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const n=this.elementaryStream.demuxer,s=yield n.readSection(r,!0);j(s);const a=hs(n,s,!0);j(a);const o=new ks(this.elementaryStream,a);i=new ys(this,o);const l=e.sequenceNumber;for(;;){const e=yield i.readNext();if(!e)return null;if(e.packet.sequenceNumber>l){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}})}getNextKeyPacket(e,t){return z(this,null,function*(){let i=e;for(;;){if(i=yield this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}})}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}doPacketLookup(e,t,i){return z(this,null,function*(){var r,n,s,a,o,l;const c=Ce(e*ns),u=this.elementaryStream.demuxer,{reader:d,seekChunkSize:h}=u,f=this.elementaryStream.pid,m=(e,t,i)=>z(this,null,function*(){let r=e;for(;re.pts),T=-1!==b?y[b]:null;if(T&&c-T.pts<45e3)k=T.sectionStartPos;else{let e=0;if(null!==d.fileSize){const t=Math.ceil(d.fileSize/h);if(t>1){let i=0,r=t-1;for(e=i;i<=r;){const t=Math.floor((i+r)/2),n=_e(t*h,u.packetStride)+g.sectionStartPos,s=n+h,a=yield m(n,s,!1);a?a.pesPacketHeader.pts<=c?(e=t,i=t+1):r=t-1:r=t-1}}}k=_e(e*h,u.packetStride)+g.sectionStartPos}const v=yield m(k,null!=(r=d.fileSize)?r:1/0,!1);let S=null!=(n=null==v?void 0:v.pesPacketHeader)?n:null;S||(S=g);const w=this.getReorderSize(),P=(e,t)=>z(this,null,function*(){var r,n;const s=yield u.readSection(e,!0);j(s);const a=hs(u,s,!0);j(a);const o=new ks(this.elementaryStream,a),l=new ys(this,o);for(;;){if((null!=(n=null==(r=X(l.presentationOrderPackets))?void 0:r.pts)?n:-1/0)>=c)break;if(!(yield l.readNextPacket()))break}const d=Te(l.presentationOrderPackets,t);if(-1===d)return null;const h=l.presentationOrderPackets[d],f=0===d?0:h.pts-l.presentationOrderPackets[d-1].pts;for(;l.decodeOrderPackets[0]!==h;)l.decodeOrderPackets.shift();l.lastDuration=f;const m=yield l.readNext();j(m);const p=this.createEncodedPacket(m.packet,m.duration,i);return this.packetBuffers.set(p,l),this.packetSectionStarts.set(p,m.packet.sectionStartPos),p});if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=S.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){if(e.pts>c)break e;S=e,gs(this.elementaryStream,S);break}}}e+=u.packetStride}}e:for(let e=0;e=u.packetOffset;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){S=e;break}}}e-=u.packetStride}}return P(S.sectionStartPos,e=>e.pts<=c)}{let e=k,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let r=null;const n=e<=g.sectionStartPos;let k,y=null;if(n)k=g,y=p;else{const t=yield m(e,null!=(s=d.fileSize)?s:1/0,i);k=null!=(a=null==t?void 0:t.pesPacketHeader)?a:null,y=null!=(o=null==t?void 0:t.section)?o:null}let b=!1,T=0;e:for(;k&&!(null!==t&&k.sectionStartPos>=t);){if(k.pts<=c){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===k.randomAccessIndicator;else{j(y);const t=hs(u,y,!0);j(t);const i=new ks(this.elementaryStream,t);yield i.markNextPacket(),e=1===(null==(l=i.suppliedPacket)?void 0:l.randomAccessIndicator)}e&&(r=k)}if(k.pts>c&&(b=!0),b&&(T++,T>w))break;let e=k.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,i);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){k=e,y=t,gs(this.elementaryStream,k);break}}}e+=u.packetStride}}if(r){let e=r;if(0===T)e:for(let r=0;r=u.packetOffset;){const r=yield u.readPacketHeader(t);if(!r)break e;if(r.pid===f&&1===r.payloadUnitStartIndicator){const r=yield u.readSection(t,i);if(r){const t=ds(u,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=u.packetStride}}const t=yield P(e.sectionStartPos,e=>e.pts<=c&&1===e.randomAccessIndicator);return j(t),t}if(n)return null;t=e,e=Math.max(_e(e-g.sectionStartPos-h,u.packetStride)+g.sectionStartPos,g.sectionStartPos)}}})}}class ms extends fs{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}getColorSpace(){return z(this,null,function*(){return this.elementaryStream.info.colorSpace})}canBeTransparent(){return z(this,null,function*(){return!1})}getDecoderConfig(){return z(this,null,function*(){return j(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class ps extends fs{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){return j(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const gs=(e,t)=>{const i=e.referencePesPackets,r=pe(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const n=i[r];if(t.pts<=n.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return j(e),e}bufferData(e){return z(this,null,function*(){const t=this.endPos+e;for(;this.endPos=c)break;u=t;const r=o+u;if(u+3>=c){this.seekTo(r);break}const d=l[u+1],h=l[u+2],f=l[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=r;null!=n||(n=p);const g=u+m,k=g+i,y=6;if(k+("avc"===e?y:1)>c){this.seekTo(r);break}const b=l[g];let T,v,S;if("avc"===e)T=Ct(b),v=T===Tt.NON_IDR_SLICE||T===Tt.SLICE_DPA||T===Tt.IDR,S=T===Tt.SEI||T===Tt.SPS||T===Tt.PPS||T===Tt.AUD;else{T=Ut(b);if(((1&b)<<5|l[g+1]>>3)>0){u+=m;continue}v=T<=St.RASL_R||T>=St.BLA_W_LP&&T<=21,S=T>=St.VPS_NUT&&T<=37||T===St.PREFIX_SEI_NUT||T>=41&&T<=44||T>=48&&T<=55}let w=!1;if(v){let t;if("avc"===e){const e=l.subarray(k,k+y),i=$(new ht(e));t=!s||i<=a,a=i}else t=l[k]>>7===1;t&&(s?w=!0:s=!0)}else S&&s&&(w=!0);if(w){const e=p-n;return this.seekTo(n),this.supplyPacket(e,0)}u+=m}if(rn){const e=this.endPos-n;return this.seekTo(n),this.supplyPacket(e,0)}}else{const n=r.info.codec,s=128;for(;;){let a=this.ensureBuffered(s);Xe(a)&&(a=yield a);const o=this.currentPos;for(;this.currentPos-o>6,a=63&i[4];if(3===n||a>37){this.seekTo(e+1);continue}const o=hi[3*a+n];j(void 0!==o),this.seekTo(e),t=this.ensureBuffered(o),Xe(t)&&(t=yield t);const l=Math.round(13824e4/r.info.sampleRate);return this.supplyPacket(t,l)}if("eac3"===n){if(11!==s)continue;this.skip(-1);const e=this.currentPos;let t=this.ensureBuffered(5);if(Xe(t)&&(t=yield t),t<5)return;const i=this.readBytes(5);if(11!==i[0]||119!==i[1]){this.seekTo(e+1);continue}const n=2*(((7&i[2])<<8|i[3])+1),a=3===i[4]>>6?3:i[4]>>4&3,o=fi[a];this.seekTo(e),t=this.ensureBuffered(n),Xe(t)&&(t=yield t);const l=256*o,c=Math.round(l*ns/r.info.sampleRate);return this.supplyPacket(t,c)}if("dts"===n){if(127!==s&&100!==s)continue;this.skip(-1);const n=this.currentPos;let a=this.ensureBuffered(18);if(Xe(a)&&(a=yield a),a<18)return;const o=this.readBytes(18),l=Ci(o);let c=l?null:Bi(o);if(!l&&!c){this.seekTo(n+1);continue}if(c&&!c.asset){this.seekTo(n);const t=Math.min(c.frameSize,4096);let i=this.ensureBuffered(t);Xe(i)&&(i=yield i),c=null!=(e=Bi(this.readBytes(i)))?e:c}let u=l?l.frameSize:c.frameSize;if(l){let e=4*Math.ceil(l.frameSize/4);for(;;){this.seekTo(n);const t=e+10;let i=this.ensureBuffered(t);if(Xe(i)&&(i=yield i),i=0)}readNext(){return z(this,null,function*(){if(0===this.decodeOrderPackets.length){if(!(yield this.readNextPacket()))return null}yield this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(j(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}})}readNextPacket(){return z(this,null,function*(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||(yield this.context.markNextPacket()),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)})}ensureCurrentPacketHasNext(){return z(this,null,function*(){const e=this.decodeOrderPackets[0];for(j(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(yield this.readNextPacket()))break}})}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const bs="application/vnd.apple.mpegurl",Ts="#EXT-X-STREAM-INF:",vs="#EXT-X-I-FRAME-STREAM-INF:",Ss="#EXT-X-MEDIA:",ws="#EXTINF:",Ps="#EXT-X-MAP:",Is="#EXT-X-KEY:",xs="#EXT-X-MEDIA-SEQUENCE:",Cs="#EXT-X-BYTERANGE:",Bs="#EXT-X-PROGRAM-DATE-TIME:",Es="#EXT-X-TARGETDURATION:",_s="#EXT-X-PLAYLIST-TYPE:",Rs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class Fs{constructor(e){this._attributes={};let t="",i="",r=!1,n=!1;for(let s=0;sz(this,null,function*(){const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=et(e,e=>"video"===e.getType())+1;e.push(new Ms(this,t,i))}else if("audio"===t.type){const i=et(e,e=>"audio"===e.getType())+1;e.push(new Ns(this,t,i))}}else{if(this.firstSegment=yield this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=yield t.getTracks();for(const r of i)if("video"===r.type){const t=et(e,e=>"video"===e.getType())+1;e.push(new Ms(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=et(e,e=>"audio"===e.getType())+1;e.push(new Ns(this,{id:e.length+1,type:"audio"},t))}}return e}))()})}getFirstTimestampForInput(e){return z(this,null,function*(){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=yield e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i})}getMediaOffset(e,t){return z(this,null,function*(){var i;const r=null!=(i=e.firstSegment)?i:e;let n;if(this.firstSegmentFirstTimestamps.has(r))n=this.firstSegmentFirstTimestamps.get(r);else{const e=this.getInputForSegment(r);n=yield this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(r,n)}if(r===e)return r.timestamp-n;const s=yield this.getFirstTimestampForInput(t),a=e.timestamp-r.timestamp,o=s-n-a;return Math.abs(o)<=Math.min(.25,a)?r.timestamp-n:e.timestamp-s})}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class Ds{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>z(this,null,function*(){var e,t;if(null!=(e=this.segmentedInput).firstSegment||(e.firstSegment=yield this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let i=this.segmentedInput.firstSegment,r=null;for(;i;){const e=this.segmentedInput.getInputForSegment(i);if(r=null!=(t=(yield e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number))?t:null,r)break;i=yield this.segmentedInput.getNextSegment(i,{})}if(!r)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=r,this.firstSegment=i}))()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}getHasOnlyKeyPackets(){return this.delegate(()=>{var e,t,i;return null!=(i=null==(t=(e=this.firstInputTrack._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:null})}getPairingMask(){return BigInt("1")}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}isRelativeToUnixEpoch(){return z(this,null,function*(){return yield this.hydrate(),j(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp})}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}createAdjustedPacket(e,t,i){return z(this,null,function*(){j(e.sequenceNumber>=0),j(this.segmentedInput.firstSegment);const r=yield this.segmentedInput.getMediaOffset(t,i.input),n=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:Ee(e.timestamp+r,yield i.getTimeResolution()),sequenceNumber:Math.floor(1e8*n)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s})}getFirstPacket(e){return z(this,null,function*(){var t;yield this.hydrate(),j(this.firstInputTrack),j(this.firstSegment);let i=this.firstInputTrack,r=this.firstSegment;for(;;){if(i){const t=yield i._backing.getFirstPacket(e);if(t)return this.createAdjustedPacket(t,r,i)}if(r=yield this.segmentedInput.getNextSegment(r,{skipLiveWait:e.skipLiveWait}),!r)break;const n=this.segmentedInput.getInputForSegment(r);i=null!=(t=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number))?t:null}return null})}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}_getNextInternal(e,t,i){return z(this,null,function*(){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const n=i?yield r.track._backing.getNextKeyPacket(r.sourcePacket,t):yield r.track._backing.getNextPacket(r.sourcePacket,t);if(n)return this.createAdjustedPacket(n,r.segment,r.track);let s=r.segment;for(;;){const e=yield this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),n=(yield i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){s=e;continue}const a=yield n._backing.getFirstPacket(t);return a?this.createAdjustedPacket(a,e,n):null}})}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}_getPacketInternal(e,t,i){return z(this,null,function*(){let r=yield this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(yield this.hydrate();r;){const n=this.segmentedInput.getInputForSegment(r),s=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const a=yield this.segmentedInput.getMediaOffset(r,n),o=e-a,l=i?yield s._backing.getKeyPacket(o,t):yield s._backing.getPacket(o,t);if(l)return this.createAdjustedPacket(l,r,s);r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null})}}class Ms extends Ds{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}getColorSpace(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())})}canBeTransparent(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())})}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}class Ns extends Ds{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}Ye();const Os=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class zs extends st{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}getSizeOrNull(){return z(this,null,function*(){var e;if(this._disposed)throw new el;return null!=(e=this._sizePromise)?e:this._sizePromise=(()=>z(this,null,function*(){let e=this._getFileSize();return void 0!==e||(yield this._read(0,1,0,Os),e=this._getFileSize(),j(void 0!==e)),e}))()})}getSize(){return z(this,null,function*(){if(this._disposed)throw new el;const e=yield this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e})}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new ea(this,e,t)}_dispatchRead(e,t){var i;null==(i=this.onread)||i.call(this,e,t),this._emit("read",{start:e,end:t})}ref(){return new Ls(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ls{constructor(e){var t;if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),null==(t=e._refFinalizationRegistry)||t.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){var e;if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const t=this.source;j(t._refCount>0),t._decrementRefCount(),null==(e=t._refFinalizationRegistry)||e.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Us extends zs{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof zs||e instanceof Ls))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof zs?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Xe(t)?t.then(i):i(t)}}const qs=(e,t)=>e.path===t.path;class Ws extends Us{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof zs?e.ref():e;return this._root=t,this._rootRequest=null,t};Xe(e)?this._rootRequest=e.then(t):(t(e),j(this._root))}if(this._rootRequest)return this._rootRequest.then(n=>n.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const Hs="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Vs extends zs{constructor(e,t={}){var i;if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Je(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new Zs({maxCacheSize:null!=(i=t.maxCacheSize)?i:8*B(2,20),maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),null==Hs||Hs.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Js.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}_runWorker(e){return z(this,null,function*(){j(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Ue()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),null==Hs||Hs.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch(r){}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return lt._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(B(2,e-2),16)},Xs=new Set;class $s extends Us{constructor(e,t={}){var i,r,n,s;if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Je(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new $s(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=null!=(i=t.getRetryDelay)?i:Ks,this._requestInit=_({},t.requestInit);let a=null;if(null==(r=t.requestInit)?void 0:r.headers){const e=_({},Ne(t.requestInit.headers)),i=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==i&&(a=e[i],delete e[i],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){null!=a||(a=t);const i=new Request(e);i.headers.delete("Range"),this._url=i}}if(null!==a){const e=Qs(a);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new Zs({maxCacheSize:null!=(n=t.maxCacheSize)?n:64*B(2,20),maxWorkerCount:null!=(s=t.parallelism)?s:2,runWorker:this._runWorker.bind(this),prefetchProfile:Js.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){var e;if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const t=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===t?null!==this._length?this._length:null:Ie(t-this._offset,0,null!=(e=this._length)?e:1/0)}_read(e,t,i,r){var n;if(null!==this._length&&t>this._length)return null;const s=this._offset,a=this._sequentialBacking?this._sequentialBacking._read(s+e,s+t):this._orchestrator.read(s+e,s+t,Math.max(s+i,s),s+Math.min(r,null!=(n=this._length)?n:1/0)),o=e=>e?(e.offset-=this._offset,e):null;return Xe(a)?a.then(o):o(a)}_runWorker(e){return z(this,null,function*(){for(var t;;){const r=new AbortController,n=yield Oe(null!=(t=this._options.fetchFn)?t:fetch,this._url,Me(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw new Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);n.redirected&&(this.rootPath=n.url);e:if(null===this._orchestrator.fileSize&&(206===n.status||"basic"===n.type&&!n.headers.has("Content-Encoding"))){const t=n.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=n.headers.get("Content-Length");if(i){const t=206===n.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!n.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==n.status){if(this._sequentialBacking)return void n.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Xs.has(e.origin)||(lt._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Xs.add(e.origin))}return void this._transitionToSequentialMode(n.body)}const s=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return r.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let t;try{t=yield s.read()}catch(i){if(this._disposed)throw i;const e=this._getRetryDelay(1,i,this._url);if(null!==e){lt._error("Error while reading response stream. Attempting to resume.",i),yield nt(1e3*e);break}throw i}if(e.aborted)continue;const{done:n,value:a}=t;if(n){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+a.length),this._orchestrator.supplyWorkerData(e,a)}}})}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const n=new ReadableStream({pull:e=>z(this,null,function*(){for(var n;;){let a;try{a=yield t.read()}catch(s){if(this._disposed)throw s;const e=this._getRetryDelay(1,s,this._url);if(null===e)throw s;lt._error("Error while reading response stream. Attempting to resume.",s),yield nt(1e3*e);const a=yield Oe(null!=(n=this._options.fetchFn)?n:fetch,this._url,Me(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!a.ok)throw new Error(`Error fetching ${String(this._url)}: ${a.status} ${a.statusText}`);if(!a.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=a.body.getReader(),r=206===a.status?0:i;continue}if(a.done)return void e.close();let o=a.value;if(r>0){const e=Math.min(r,o.length);r-=e,o=o.subarray(e)}if(0!==o.length)return i+=o.length,void e.enqueue(o)}}),cancel:()=>t.cancel()}),s=new Ys(n,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const a=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)a.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)a.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of a){const e=s._read(o.start,o.start+o.bytes.length);Xe(e)?e.then(e=>{e?(j(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(j(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Gs=/^bytes=(\d+)-(\d*)$/,Qs=e=>{const t=Gs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=pe(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let n=e;const s=new Uint8Array(t-e);if(-1!==i)for(let c=i;c=t)break;const r=Math.max(e,i.start);r>n&&this._throwDueToCacheMiss();const a=Math.min(t,i.end);rn&&this._throwDueToCacheMiss();const{promise:a,resolve:o,reject:l}=ke();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:l}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),a}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}_pull(){return z(this,null,function*(){for(null!=this._reader||(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1})}_dispose(){var e;for(const t of this._pendingSlices)t.reject(new el);this._pendingSlices.length=0,this._cache.length=0,null==(e=this._reader)||e.cancel()}}const Js={fileSystem:(e,t)=>{const i=B(2,16);return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=B(2,16);e=Math.max(0,Math.floor((e-r)/r)*r);for(const n of i){const i=8*B(2,20),r=Math.max((n.startPos+n.targetPos)/2,n.targetPos-i);if(Ge(e,t,r,n.targetPos)){const e=n.targetPos-n.startPos,r=Math.ceil((e+1)/i)*i,s=B(2,Math.ceil(Math.log2(e+1))),a=Math.min(s,r);t=Math.max(t,n.startPos+a)}}return{start:e,end:t=Math.max(t,e+js)}}};class Zs{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){var n;j(!this.disposed);const s=this.options.prefetchProfile(e,t,this.workers),a=Math.max(s.start,i),o=Math.min(s.end,null!=(n=this.fileSize)?n:1/0,r);j(a<=e&&t<=o);let l=null;const c=pe(this.cache,e,e=>e.start),u=-1!==c?this.cache[c]:null;u&&u.start<=e&&t<=u.end&&(u.age=this.nextAge++,l={bytes:u.bytes,view:u.view,offset:u.start});const d=pe(this.cache,a,e=>e.start),h=l?null:new Uint8Array(t-e);let f=0,m=a;const p=[];if(-1!==d){for(let i=d;i=o)break;if(r.end<=a)continue;const n=Math.max(a,r.start),s=Math.min(o,r.end);if(j(n<=s),m=h.length&&(l={bytes:h,view:J(h),offset:e}),0===p.length)return j(l),l;const{promise:g,resolve:k,reject:y}=ke(),b=[];for(const v of p){const i=Math.max(e,v.start),r=Math.min(t,v.end);i===v.start&&r===v.end?b.push(v):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&v.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,v.end),i.strictTarget&&(i.strictTarget=e),T&&i.pendingSlices.push(T)):(t++,i={hole:{start:v.start,end:v.end},strictTarget:e,pendingSlices:T?[T]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return l?g.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(j(h),l=g.then(t=>t&&{bytes:t,view:J(t),offset:e})),l}checkHoleAgainstWorker(e,t,i){const r=B(2,17);if(Ge(t.start-r,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=s),t.end<=t.start&&(i.holes.splice(e,1),e--)}0===i.holes.length&&(i.resolve(i.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){var t,i;const r=this.workers.indexOf(e);j(-1!==r),e.running=!1,this.workers.splice(r,1),null==(i=(t=this.options).onIdleWorkerRemoved)||i.call(t,e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const n of e.pendingSlices)n.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=pe(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=J(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=J(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const n=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Xe(n)?n.then(s):s(n)}_dispose(){var e;null==(e=this._ref)||e.free()}ref(){return null!=this._ref||(this._ref=this._baseSource.ref()),super.ref()}}var ta=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},ia=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const ra=/^0[xX][0-9a-fA-F]+$/,na=/^data:.*;base64,/i;class sa extends As{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){var e;return null!=(e=this.currentUpdateSegmentsPromise)?e:this.currentUpdateSegmentsPromise=(()=>z(this,null,function*(){try{const e=this.getRemainingWaitTimeMs();e>0&&(yield nt(e)),this.lastSegmentUpdateTime=performance.now(),yield this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}}))()}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}updateSegments(){return z(this,null,function*(){var e,t,i,r,n,s,a,o;let l=this.nextLines;if(this.nextLines=null,!l){const e={stack:[],error:void 0,hasError:!1};try{const t=ta(e,yield this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),i=new tl(t.source),r=yield i.requestEntireFile();j(r),l=vl(r,r.length,{ignore:Rs}),t.source instanceof Us&&(this.rootPath=t.source.rootPath)}catch(x){e.error=x,e.hasError=!0}finally{ia(e)}}const c=!1!==(null==(e=this.input._formatOptions.hls)?void 0:e.offsetTimestampsByDateTime);let u=!1,d=0,h=null,f=null,m=null,p=0,g=null,k=null,y=null,b=null,T=null,v=null,S=!1,w=null!=(t=X(this.segments))?t:null;const P=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},I=e=>{p=e,w&&(j(null!==w.sequenceNumber),w.sequenceNumber0&&null!==v&&(d=p*v),S=!0);const t=e.slice(8),i=t.indexOf(","),r=-1===i?t:t.slice(0,i),n=Number(r);if(!Number.isFinite(n)||n<0)throw new Error(`Invalid #EXTINF tag duration '${r}'.`);f=n}else if(e.startsWith(Ps)){const t=new Fs(e.slice(11)),i=t.get("uri");if(!i)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const r=t.get("byterange");let a=null;if(null!==r&&(a=P(r)),a&&null===a.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!w){const e={path:Ze(this.rootPath,i),offset:null!=(n=null==a?void 0:a.offset)?n:0,length:null!=(s=null==a?void 0:a.length)?s:null};if("AES-128"===(null==m?void 0:m.method)&&!m.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");k={timestamp:d,unixEpochTimestamp:h,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:m,initSegment:null,lastProgramDateTimeSeconds:T}}f=null,null===b?y=null:b=null}else if(e.startsWith(Is)){const t=new Fs(e.slice(11)),i=t.get("method");if("NONE"===i)m=null;else if("AES-128"===i){const e=t.get("uri");if(!e)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=t.get("iv");if(r){if(!ra.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(fr);for(let t=0;t=8&&112===i[4]&&115===i[5]&&115===i[6]&&104===i[7]){const e=J(i).getUint32(0);r=sr(i.subarray(8,Math.min(e,i.length)))}}m={method:i,psshBox:r}}}}else if(e.startsWith(xs)){const t=e.slice(22),i=Number(t);if(!Number.isInteger(i)||i<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${t}'.`);I(i)}else if(e.startsWith(Cs)){const t=P(e.slice(17));if(null===t.offset){if(null===y)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");t.offset=y}b=t,y=t.offset+t.length}else if(e.startsWith(Bs)){if(w)continue;const t=e.slice(25),i=Date.parse(t);if(!Number.isFinite(i))continue;const r=i/1e3;if(T===r)continue;if(null===T&&this.segments.length>0){const e=X(this.segments),t=r-(e.timestamp+e.duration);for(const i of this.segments)i.unixEpochTimestamp=i.timestamp+t,c&&(i.timestamp=i.unixEpochTimestamp)}T=r,h=r,c&&(d=r)}else if("#EXT-X-DISCONTINUITY"===e)g=null;else if(e.startsWith(Es)){const t=e.slice(22),i=Number(t);if(!Number.isFinite(i)||i<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${t}'.`);this.refreshInterval=i,v=i}else{if("#EXT-X-ENDLIST"===e){this.streamHasEnded=!0;break}if(e.startsWith(_s)){"vod"===e.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==e)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");u=!0}}if(!u)throw new Error("Invalid M3U8 file; no #EXTM3U header.")})}getFirstSegment(){return z(this,null,function*(){var e;return 0===this.segments.length&&(yield this.runUpdateSegments()),null!=(e=this.segments[0])?e:null})}getSegmentAt(e,t){return z(this,null,function*(){0===this.segments.length&&(yield this.runUpdateSegments());let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=pe(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===r);if(n)return n.age=this.nextInputCacheAge++,n.input;let s=null;(r.initSegment||r.firstSegment)&&(s=this.getInputForSegment(null!=(t=r.initSegment)?t:r.firstSegment));const a=R(_({},this.input._formatOptions),{isobmff:R(_({},this.input._formatOptions.isobmff),{resolveKeyId:(null==(i=this.input._formatOptions.isobmff)?void 0:i.resolveKeyId)&&(e=>{if(!r.encryption||"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method||!r.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let t=e.psshBoxes;const{psshBox:i}=r.encryption;return null!==i.keyIds&&!i.keyIds.includes(e.keyId)||t.some(e=>ar(e,i))||(t=[...t,i]),this.input._formatOptions.isobmff.resolveKeyId(R(_({},e),{psshBoxes:t}))})})}),o=new Jo({source:new Ws(r.location.path,e=>z(this,null,function*(){var t,i;j(e.isRoot);const n=R(_({},e),{isRoot:!1});let s;const a=r.location.offset>0||null!==r.location.length;if(r.encryption&&"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method)if("AES-128"===r.encryption.method){const e=r.encryption;j(e.iv);let t=yield this.input._getSourceCached(n);if(a){const e=t.source.slice(r.location.offset,null!=(i=r.location.length)?i:void 0).ref();t.free(),t=e}const o=((e,t,i)=>{let r=!1,n=0;const s=B(2,16),a=new Sr;return new ReadableStream({pull:o=>z(null,null,function*(){r||(a.init(yield t()),r=!0);const l=s+16;let c=e.requestSliceRange(n,0,l);if(Xe(c)&&(c=yield c),!c||0===c.length)throw new Error("Invalid ciphertext.");const u=c.length;if(u%16!==0)throw new Error("Invalid ciphertext.");const d=u===l?u-16:u,h=nl(c,d),f=new Uint8Array(d);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=f.subarray(0,d-e);o.enqueue(t),o.close(),i()}}),cancel:()=>{i()}})})(new tl(t.source),()=>z(this,null,function*(){const t={stack:[],error:void 0,hasError:!1};try{const i=ta(t,yield this.input._getSourceCached({path:e.keyUri,isRoot:!1},Yo),!1),r=new tl(i.source),n=yield r.requestSlice(0,fr);if(!n)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:nl(n,fr),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{ia(t)}}),()=>{t.free()});s=new Ys(o).ref()}else j(!1);else if(s=yield this.input._getSourceCached(n),a){const e=s.source.slice(r.location.offset,null!=(t=r.location.length)?t:void 0).ref();s.free(),s=e}return s})),formats:this.input._formats.filter(e=>!(e instanceof Ia)),initInput:null!=s?s:void 0,formatOptions:a});o._onFormatDetermined=e=>{var t,i;if(("SAMPLE-AES"===(null==(t=r.encryption)?void 0:t.method)||"SAMPLE-AES-CTR"===(null==(i=r.encryption)?void 0:i.method))&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:r,input:o,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=tt(this.inputCache,e=>e.age);j(-1!==e),this.inputCache.splice(e,1)}return o}getLiveRefreshInterval(){return z(this,null,function*(){return 0===this.getRemainingWaitTimeMs()&&(yield this.runUpdateSegments()),this.streamHasEnded?null:this.refreshInterval})}}class aa extends ir{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){j(this.input._rootSource instanceof Us);const e=yield this.input._reader.requestEntireFile();j(e);const t=vl(e,e.length,{ignore:Rs}),{rootPath:i}=this.input._rootSource,r=[],n=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],a=[...new Set(n.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=yield Promise.all(r.map((e,t)=>z(this,null,function*(){var r,o,l,c;const u=[],d=e.attributes.get("codecs");let h;if(d)h=d.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=yield t.getTrackBackings(),r=yield Promise.all(i.map(e=>z(this,null,function*(){return{track:e,codec:yield e.getCodec()}})));h=yield Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const f=e.attributes.get("video"),m=e.attributes.get("audio"),p=h.some(e=>_i.includes(ji(e))),g=h.some(e=>Fi.includes(ji(e)));if(null!==f&&!p){if(!s.includes(f))throw new Error(`Invalid M3U8 file; variant stream references video group "${f}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===f&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Ze(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});j(null!==a),h.push(a)}}if(null!==m&&!g){if(!a.includes(m))throw new Error(`Invalid M3U8 file; variant stream references audio group "${m}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===m&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Ze(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});j(null!==a),h.push(a)}}h=[...new Set(h)];let k=null,y=null;const b=e.attributes.getAsNumber("bandwidth");j(null!==b);const T=e.attributes.getAsNumber("average-bandwidth"),v=e.attributes.get("name");for(const i of h){const d=ji(i);if(null!==d)if(_i.includes(d)){if(null!==k)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");k=i;const a=e.attributes.get("video");if(null===a){const i=e.attributes.get("resolution");let r=null,n=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(r=Number(e[1]),n=Number(e[2]))}u.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xe,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:k,pairingMask:BigInt("1")<0?r:null}})}else{if(!a.includes(r))throw new Error(`Invalid M3U8 file; variant stream references audio group "${r}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of n){const n=i.attributes.get("group-id"),s=i.attributes.get("type");if(n!==r||"audio"!==s.toLowerCase())continue;const a=null!=(l=i.attributes.get("channels"))?l:e.attributes.get("channels"),o=null!==a?Number(a.split("/")[0]):null;u.push({id:-1,demuxer:this,backingTrack:null,default:ua(i.attributes),autoselect:ua(i.attributes)||da(i.attributes),languageCode:ha(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:null!=(c=i.fullPath)?c:e.fullPath,fullCodecString:y,pairingMask:BigInt("1")<0?o:null}})}}}}return u}))),l=[],c=e=>{var t,i;const r=l.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);r?(r.pairingMask|=e.pairingMask,r.default||(r.default=e.default),r.autoselect||(r.autoselect=e.autoselect),r.lineNumber=Math.min(r.lineNumber,e.lineNumber),null!==e.peakBitrate&&(r.peakBitrate=Math.max(null!=(t=r.peakBitrate)?t:-1/0,e.peakBitrate)),null!==e.averageBitrate&&(r.averageBitrate=Math.max(null!=(i=r.averageBitrate)?i:-1/0,e.averageBitrate)),r.languageCode===xe&&(r.languageCode=e.languageCode)):(e.id=l.length+1,l.push(e))};for(const u of o)for(const e of u)c(e);l.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of l)"video"===u.info.type?this.trackBackings.push(new la(u)):this.trackBackings.push(new ca(u));this.internalTracks=l}))()}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),j(this.trackBackings),this.trackBackings})}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new sa(this,e,i,null),this.segmentedInputs.push(t),t}getMetadataTags(){return z(this,null,function*(){return{}})}getMimeType(){return z(this,null,function*(){return bs})}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class oa{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>z(this,null,function*(){const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(yield e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof la){for(const r of i)if((yield r.getCodec())===this.getCodec()){t=r;break}}else{j(this instanceof ca);for(const e of i)if((yield e.getCodec())===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t}))()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return R(_({},dt),{default:this.internalTrack.autoselect,primary:this.internalTrack.default})}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){j(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}getDurationFromMetadata(e){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)})}getLiveRefreshInterval(){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()})}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}getFirstPacket(e){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)})}getPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)})}getKeyPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)})}getNextPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)})}getNextKeyPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)})}}class la extends oa{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return ji(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}getColorSpace(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getColorSpace()})}canBeTransparent(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.canBeTransparent()})}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getDecoderConfig()})}}class ca extends oa{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return ji(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return z(this,null,function*(){return yield this.hydrate(),this.backingAudioTrack.getDecoderConfig()})}}const ua=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},da=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},ha=e=>{if(null===e)return xe;const t=e.split("-")[0];return t||xe};class fa{constructor(){this._isIsobmff=!1}}class ma extends fa{constructor(){super(...arguments),this._isIsobmff=!0}_getMajorBrand(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,12);if(Xe(t)&&(t=yield t),!t)return null;t.skip(4);const i=Tl(t,4);return"ftyp"!==i&&"styp"!==i?null:Tl(t,4)})}_createDemuxer(e){return new wr(e)}}class pa extends ma{_canReadInput(e){return z(this,null,function*(){const t=yield this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Xe(t)&&(t=yield t),!t)return!1;let r=dl(t),n=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Xe(t)&&(t=yield t),!t)return!1;r=pl(t),n=16}if(r8)return!1;if(Gr(i,r)!==qr.EBML)return!1;const n=Yr(i);if("number"!==typeof n)return!1;let s=e._reader.requestSlice(i.filePos,n);if(Xe(s)&&(s=yield s),!s)return!1;const a=i.filePos;for(;s.filePos<=a+n-2;){const e=Jr(s);if(!e)break;const{id:i,size:r}=e,n=s.filePos;if(void 0===r)return!1;switch(i){case qr.EBMLVersion:if(1!==Gr(s,r))return!1;break;case qr.EBMLReadVersion:if(1!==Gr(s,r))return!1;break;case qr.DocType:if(Zr(s,r)!==t)return!1;break;case qr.DocTypeVersion:if(Gr(s,r)>4)return!1}s.filePos=n+r}return!0})}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new Bn(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class ya extends ka{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class ba extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}const i=yield Fn(e._reader,t,t+4096);if(!i)return!1;const r=i.header,n=Qi(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+n,4);if(Xe(s)&&(s=yield s),!s)return!1;const a=dl(s);if(a===$i||a===Gi)return!0;t=i.startPos+i.header.totalSize;const o=yield Fn(e._reader,t,t+4);if(!o)return!1;const l=o.header;return r.channel===l.channel&&r.sampleRate===l.sampleRate})}_createDemuxer(e){return new An(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class Ta extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,12);if(Xe(t)&&(t=yield t),!t)return!1;const i=Tl(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===Tl(t,4)})}_createDemuxer(e){return new Gn(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class va extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,4);return Xe(t)&&(t=yield t),!!t&&"OggS"===Tl(t,4)})}_createDemuxer(e){return new Hn(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class Sa extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Xe(i)&&(i=yield i),!!i&&"fLaC"===Tl(i,4)})}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new is(e)}}class wa extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Xe(i)&&(i=yield i),!i)return!1;const r=Jn(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Xe(i)&&(i=yield i),!i)return!1;const n=Jn(i);return!!n&&(r.objectType===n.objectType&&r.samplingFrequencyIndex===n.samplingFrequencyIndex&&r.channelConfiguration===n.channelConfiguration)})}_createDemuxer(e){return new es(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class Pa extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,205);if(Xe(t)&&(t=yield t),!t)return!1;const i=nl(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])})}_createDemuxer(e){return new us(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class Ia extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,7);if(Xe(t)&&(t=yield t),!t)return!1;if(!("#EXTM3U"===Tl(t,7)))return!1;if(!(e._rootSource instanceof Us))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0})}_createDemuxer(e){return new aa(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return bs}}const xa=new pa,Ca=new ga,Ba=new ka,Ea=new ya,_a=new ba,Ra=new Ta,Fa=new va,Aa=new wa,Da=new Sa,Ma=new Pa,Na=new Ia,Oa=[Na,xa,Ca,Ba,Ea,Ra,Fa,Da,_a,Aa,Ma],za=[Na,xa,Ca,_a,Aa,Ma];var La=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});Ye();let Ua=-1/0,qa=-1/0,Wa=null;"undefined"!==typeof FinalizationRegistry&&(Wa=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Ua>=1e3&&(lt._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Ua=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-qa>=1e3&&(lt._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),qa=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class Ha{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Va=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],ja=new Set(Va);class Ka{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(De*this.timestamp)}get microsecondDuration(){return Math.trunc(De*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,S,w,P,I,x,C,B,E,_,R,F;if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!ja.has(t.format))throw new TypeError("init.format must be one of: "+Va.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&rt(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=null!=(i=t.rotation)?i:0,this.timestamp=t.timestamp,this.duration=null!=(r=t.duration)?r:0;const m=null!=(n=t.layout)?n:io(t.format,t.codedWidth,t.codedHeight);let p=null!=(s=t.colorSpace)?s:null;null===p&&(p="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:null!=(o=null==(a=t.visibleRect)?void 0:a.left)?o:0,top:null!=(c=null==(l=t.visibleRect)?void 0:l.top)?c:0,width:null!=(d=null==(u=t.visibleRect)?void 0:u.width)?d:t.codedWidth,height:null!=(f=null==(h=t.visibleRect)?void 0:h.height)?f:t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?Y(e):Y(e).slice(),this._layout=m,this.colorSpace=new Ya(p)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==(null==t?void 0:t.rotation)&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==(null==t?void 0:t.timestamp)&&!Number.isFinite(null==t?void 0:t.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==(null==t?void 0:t.duration)&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==(null==t?void 0:t.visibleRect)&&rt(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:null!=(p=null==(m=e.visibleRect)?void 0:m.x)?p:0,top:null!=(k=null==(g=e.visibleRect)?void 0:g.y)?k:0,width:null!=(b=null==(y=e.visibleRect)?void 0:y.width)?b:e.codedWidth,height:null!=(v=null==(T=e.visibleRect)?void 0:T.height)?v:e.codedHeight},this.rotation=null!=(S=null==t?void 0:t.rotation)?S:0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=null!=(w=null==t?void 0:t.timestamp)?w:e.timestamp/1e6,this.duration=null!=(I=null==t?void 0:t.duration)?I:(null!=(P=e.duration)?P:0)/1e6,this.colorSpace=new Ya(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&rt(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new Ka(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*De),duration:Math.trunc((null!=(x=t.duration)?x:0)*De)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const n=null!=(C=t.visibleRect)?C:{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(n.width,n.height),a=s.getContext("2d",{alpha:We(),willReadFrequently:!0});if(!a)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");a.drawImage(e,-n.left,-n.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:n.width,height:n.height},this.squarePixelWidth=n.width,this.squarePixelHeight=n.height,this.rotation=null!=(B=t.rotation)?B:0,this.timestamp=t.timestamp,this.duration=null!=(E=t.duration)?E:0,this.colorSpace=new Ya({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof Ha))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Va.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=null!=(_=t.rotation)?_:0,this.timestamp=t.timestamp,this.duration=null!=(R=t.duration)?R:0,this.colorSpace=e.getColorSpace()}this.encodeOptions=null!=(F=null==t?void 0:t.encodeOptions)?F:{},this.pixelAspectRatio=it({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),null==Wa||Wa.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return j(null!==this._data),this._data instanceof Ha?new Ka(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):Ja(this._data)?new Ka(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(j(this._layout),new Ka(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new Ka(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(null==Wa||Wa.unregister(this),this._data instanceof Ha?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Ja(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){var t;if(to(e),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(t=e.format)?t:this.format))throw new Error("Cannot get allocation size when format is null.");if(Ja(this._data))return this._data.allocationSize(e);return no(this,e).allocationSize}copyTo(e){return z(this,arguments,function*(e,t={}){var i,r;if(!ce(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(to(t),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(i=t.format)?i:this.format))throw new Error("Cannot copy video sample data when format is null.");if(j(null!==this._data),Ja(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof Ha)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=yield i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,yield this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},null!=(r=t.colorSpace)?r:"srgb"),!1);if(!(n instanceof Ka))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(n.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${n.format}' instead.`);return yield n.copyTo(e,t)}catch(u){i.error=u,i.hasError=!0}finally{La(i)}}}const n=no(this,t);j(this.format);const s=Y(e);if(s.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');o=e}else if(this._data instanceof Uint8Array)j(this._layout),j(this._layout.length===a.length),o=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");j(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);o=[{data:Y(t.data),stride:4*this.codedWidth}]}const l=[],c=a.length;for(let d=0;di.byteLength)throw new Error("Source buffer OOB read.");if(a+c>s.byteLength)throw new Error("Destination buffer OOB write.");const n=i.subarray(r,r+c);s.set(n,a),r+=t,a+=e.destinationStride}l.push(u)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),i=this.format.includes("X")&&t.format.includes("A");if(e||i)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const n=[];for(const s of e)i.set(s.data,r),n.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:n[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return Ja(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(j(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,n,s,a,o,l){let c=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(c=t,u=i,d=r,h=n,f=s,m=a,void 0!==o?(p=o,g=l):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=n)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(c))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:c,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(c,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const T=this.rotation%180===0?1:p/g;e.scale(1/T,T),e.drawImage(k,c,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){var i,r,n,s,a,o,l,c,u;if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&eo(t.crop,"options.");const d=e.canvas.width,h=e.canvas.height,f=null!=(i=t.rotation)?i:this.rotation,[m,p]=f%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let g,k,y,b,T=t.crop;T&&(T=Za(T,m,p));const{sx:v,sy:S,sWidth:w,sHeight:P}=this._rotateSourceRegion(null!=(n=null==(r=t.crop)?void 0:r.left)?n:0,null!=(a=null==(s=t.crop)?void 0:s.top)?a:0,null!=(l=null==(o=t.crop)?void 0:o.width)?l:m,null!=(u=null==(c=t.crop)?void 0:c.height)?u:p,f);if("fill"===t.fit)g=0,k=0,y=d,b=h;else{const[e,i]=t.crop?[t.crop.width,t.crop.height]:[m,p],r="contain"===t.fit?Math.min(d/e,h/i):Math.max(d/e,h/i);y=e*r,b=i*r,g=(d-y)/2,k=(h-b)/2}e.save();const I=f%180===0?1:y/b;e.translate(d/2,h/2),e.rotate(f*Math.PI/180),e.scale(1/I,I),e.translate(-d/2,-h/2),e.drawImage(this.toCanvasImageSource(),v,S,w,P,g,k,y,b),e.restore()}_rotateSourceRegion(e,t,i,r,n){return 90===n?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===n?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===n&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,n=e.height,[s,a]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,l=i.crop?i.crop.height:a;let c=0;2*r0?Qa(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=c;p>1;p--){const e=r*B(2,p),t=n*B(2,p);f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",c>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*n,0,0,r,n),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(j(null!==this._data),this._data instanceof Ha||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}transform(e){return z(this,null,function*(){var t,i,r,n,s;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&eo(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const a=K(this.rotation+(null!=(t=e.rotate)?t:0)),[o,l]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let c=e.crop;c&&(c=Za(c,o,l));const u=c?c.width:o,d=c?c.height:l,h=u/d;let f,m;void 0!==e.width&&void 0===e.height?(f=e.width,m=f/h):void 0===e.width&&void 0!==e.height?(m=e.height,f=m*h):void 0!==e.width&&void 0!==e.height?(f=e.width,m=e.height):(f=u,m=d),f=Be(f,null!=(i=e.roundDimensionsTo)?i:1),m=Be(m,null!=(r=e.roundDimensionsTo)?r:1);const p={width:f,height:m,fit:null!=(n=e.fit)?n:"fill",rotation:a,crop:null!=c?c:{left:0,top:0,width:o,height:l},alpha:null!=(s=e.alpha)?s:"keep"};for(const e of Xa){let t=e(this,p);if(Xe(t)&&(t=yield t),null!==t)return t}const{canvas:g,context:k,isNew:y}=Qa(p.width,p.height);return this._drawWithFitAndMipmapping(g,k,{fit:p.fit,rotation:p.rotation,crop:p.crop,targetIsFresh:y,fillBlack:"discard"===p.alpha}),new Ka(g,{timestamp:this.timestamp,duration:this.duration,rotation:0})})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const Xa=[],$a=[];let Ga=0;const Qa=(e,t)=>{for(const n of $a)if(n.canvas.width===e&&n.canvas.height===t)return n.age=Ga++,{canvas:n.canvas,context:n.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return $a.length>=3&&$a.splice(tt($a,e=>e.age),1),$a.push({canvas:i,context:r,age:Ga++}),{canvas:i,context:r,isNew:!0}};class Ya{constructor(e){var t,i,r,n;if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(te);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(re);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(se);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=null!=(t=null==e?void 0:e.primaries)?t:null,this.transfer=null!=(i=null==e?void 0:e.transfer)?i:null,this.matrix=null!=(r=null==e?void 0:e.matrix)?r:null,this.fullRange=null!=(n=null==e?void 0:e.fullRange)?n:null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const Ja=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Za=(e,t,i)=>{const r=Math.min(e.left,t),n=Math.min(e.top,i),s=Math.min(e.width,t-r),a=Math.min(e.height,i-n);return j(s>=0),j(a>=0),{left:r,top:n,width:s,height:a}},eo=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},to=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},io=(e,t,i)=>{const r=ro(e),n=[];let s=0;for(const a of r){const e=Math.ceil(t/a.widthDivisor),r=Math.ceil(i/a.heightDivisor),o=e*a.sampleBytes,l=o*r;n.push({offset:s,stride:o}),s+=l}return n},ro=e=>{const t=(e,t,i,r,n)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return n&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:ve(e),j(!1)}},no=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,n=so(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let a;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");a=t.format}else a=e.format;return oo(n,a,s)},so=(e,t,i,r,n)=>{const s=_({},e);if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!ao(n,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},ao=(e,t)=>{if(null===e)return!0;const i=ro(e);for(let r=0;r{const r=ro(t),n=r.length;if(void 0!==i&&i.length!==n)throw new TypeError(`Layout must have ${n} planes.`);let s=0;const a=[],o=[];for(let l=0;l4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(null==e?void 0:e.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(ho(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*ho(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const s=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-n;if(s>this.numberOfFrames-n)throw new RangeError("frameCount out of range");const a=ho(r),o=fo(r);if(o&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!o&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(o?s:s*this.numberOfChannels)*a}copyTo(e,t){if(!ce(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!lo.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:n}=t;let{planeIndex:s}=t,a=this.format;const o=null!=i?i:this.format;if(!o)throw new Error("Destination format not determined");const l=this.numberOfFrames,c=this.numberOfChannels,u=null!=n?n:0;if(u>=l)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:l-u;if(d>l-u)throw new RangeError("frameCount out of range");const h=ho(o),f=fo(o);if(f&&s>=c)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*c)*h;if(e.byteLength2&&o!==a)return void ko(this._data,p,a,o,c,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(S){if("f32-planar"===o)throw S;a="f32-planar"}}const k=mo(a),y=ho(a),b=fo(a);let T;if(this._data instanceof co){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=l*y*(b?1:c);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)T=e(s),s=0;else{T=new Uint8Array(l*y*c);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(n,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new uo({data:n,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(null==Wa||Wa.unregister(this),this._data instanceof co?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):go(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof co?this._createAudioDataFromData():go(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(fo(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const n=Math.min(s,o),l=new Float32Array(i*n);for(let t=0;t0;){const n=Math.min(s,o),c=new Float32Array(i*n);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},fo=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},mo=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},po=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,Ie(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,Ie(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,Ie(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},go=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,ko=(e,t,i,r,n,s,a,o)=>{const l=mo(i),c=po(r),u=ho(i),d=ho(r),h=fo(i);if(fo(r))if(h){const r=new ArrayBuffer(o*u),n=J(r);e.copyTo(r,{planeIndex:s,frameOffset:a,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},vo=e=>{if(!Je(e))throw new TypeError("timestamp must be a number.")},So=(e,t,i)=>i.verifyKeyPackets?t.then(t=>z(null,null,function*(){if(!t||"delta"===t.type)return t;const i=yield e.determinePacketType(t);return i&&(t.type=i),t})):t;class wo{constructor(e){if(!(e instanceof zo))throw new TypeError("track must be an InputTrack.");this._track=e}getFirstPacket(){return z(this,arguments,function*(e={}){if(To(e),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getFirstPacket(e),e)})}getFirstKeyPacket(){return z(this,arguments,function*(e={}){To(e);const t=yield this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null})}getPacket(e){return z(this,arguments,function*(e,t={}){if(vo(e),To(t),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getPacket(e,t),t)})}getNextPacket(e){return z(this,arguments,function*(e,t={}){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(To(t),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getNextPacket(e,t),t)})}getKeyPacket(e){return z(this,arguments,function*(e,t={}){if(vo(e),To(t),this._track.input._disposed)throw new el;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=yield this._track._backing.getKeyPacket(e,t);if(!i)return i;j("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getKeyPacket(i.timestamp-1/(yield this._track.getTimeResolution()),t):i})}getNextKeyPacket(e){return z(this,arguments,function*(e,t={}){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(To(t),this._track.input._disposed)throw new el;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=yield this._track._backing.getNextKeyPacket(e,t);if(!i)return i;j("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getNextKeyPacket(i,t):i})}packets(e,t,i={}){if(void 0!==e&&!(e instanceof nr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!(null==i?void 0:i.metadataOnly))throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof nr))throw new TypeError("endPacket must be an EncodedPacket.");if(To(i),this._track.input._disposed)throw new el;const r=[];let{promise:n,resolve:s}=ke(),{promise:a,resolve:o}=ke(),l=!1,c=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(()=>z(this,null,function*(){let u=null!=e?e:yield this.getFirstPacket(i);for(;u&&!c&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=(null==t?void 0:t.sequenceNumber));)r.length>f()?(({promise:a,resolve:o}=ke()),yield a):(r.push(u),s(),({promise:n,resolve:s}=ke()),u=yield this.getNextPacket(u,i));l=!0,s()}))().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{next(){return z(this,null,function*(){for(;;){if(m.input._disposed)throw new el;if(c)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};yield n}})},return(){return z(this,null,function*(){return c=!0,o(),s(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}class Po{constructor(e,t){this.onSample=e,this.onError=t}}class Io{mediaSamplesInRange(e=-1/0,t=1/0,i){vo(e),vo(t);const r=[];let n=!1,s=null,{promise:a,resolve:o}=ke(),{promise:l,resolve:c}=ke(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g=R(_({},i),{verifyKeyPackets:!0,metadataOnly:!1});(()=>z(this,null,function*(){var i;f=yield this._createDecoder(i=>{c(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),n=!0):s.close()),i.timestamp>=e&&(r.push(i),n=!0),s=n?null:i,r.length>0&&(o(),({promise:a,resolve:o}=ke())))},e=>{p||(m=e,p=!0,o())});const k=this._createPacketSink(),y=null!=(i=yield k.getKeyPacket(e,g))?i:yield k.getFirstKeyPacket(g);let b=y;const T=k.packets(null!=y?y:void 0,void 0,g);for(yield T.next();b&&!d&&!this._track.input._disposed;){const e=xo(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:l,resolve:c}=ke()),yield l;continue}f.decode(b);const t=yield T.next();if(t.done)break;b=t.value}yield T.return(),h||this._track.input._disposed||(yield f.flush()),!n&&s&&r.push(s),u=!0,o()}))().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{null==f||f.close()});const k=this._track,y=()=>{null==s||s.close();for(const e of r)e.close()};return{next(){return z(this,null,function*(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new el;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return c(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};yield a}})},return(){return z(this,null,function*(){return h=!0,d=!0,c(),o(),y(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=function(e){return U(this,null,function*(){Symbol.iterator in e?yield*q(e[Symbol.iterator]()):yield*q(e[Symbol.asyncIterator]())})}(e),r=[],n=[];let{promise:s,resolve:a}=ke(),{promise:o,resolve:l}=ke(),c=!1,u=!1,d=null,h=null,f=!1;const m=e=>{n.push(e),a(),({promise:s,resolve:a}=ke())},p=R(_({},t),{verifyKeyPackets:!0,metadataOnly:!1});(()=>z(this,null,function*(){d=yield this._createDecoder(e=>{if(l(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,a())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=()=>z(this,null,function*(){j(s),j(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:l}=ke()),yield o;if(u)break;const r=yield e.getNextPacket(t,p);j(r),d.decode(r),t=r}g=-1}),y=()=>z(this,null,function*(){j(d),yield d.flush();for(let e=0;e{f||(h=e,f=!0,a())}).finally(()=>{null==d||d.close()});const g=this._track,k=()=>{for(const e of n)null==e||e.close()};return{next(){return z(this,null,function*(){for(;;){if(g.input._disposed)throw u=!0,k(),new el;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(n.length>0){const e=n.shift();return j(void 0!==e),l(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};yield s}})},return(){return z(this,null,function*(){return u=!0,l(),a(),k(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}const xo=e=>0===e?40:8;class Co extends Po{constructor(e,t,i,r,n,s){var a,o,l,c,u,d,h,f;super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=n,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new ze,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const m=yo.find(e=>e.supports(i,r));if(m)this.customDecoder=new m,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Ka))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();j(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(Ve()){if("avc"===i&&this.decoderConfig.description){const e=Dt(Y(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=Nt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig=R(_({},this.decoderConfig),{hardwareAcceleration:"prefer-software"})),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=zt(t),this.decoderConfig=R(_({},this.decoderConfig),{description:At(e)})))}}oe(this.decoderConfig.colorSpace)||(this.decoderConfig=R(_({},this.decoderConfig),{colorSpace:{primaries:null!=(o=null==(a=this.decoderConfig.colorSpace)?void 0:a.primaries)?o:"bt709",matrix:null!=(c=null==(l=this.decoderConfig.colorSpace)?void 0:l.matrix)?c:"bt709",transfer:null!=(d=null==(u=this.decoderConfig.colorSpace)?void 0:u.transfer)?d:"bt709",fullRange:null!=(f=null==(h=this.decoderConfig.colorSpace)?void 0:h.fullRange)&&f}}))}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){var e,t;return this.customDecoder?this.customDecoderQueueSize:(j(this.decoder),Math.max(this.decoder.decodeQueueSize,null!=(t=null==(e=this.alphaDecoder)?void 0:e.decodeQueueSize)?t:0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(j(this.decoder),Ue()||ge(this.inputTimestamps,e.timestamp,e=>e),Ve()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const n of xt(e.data,this.decoderConfig)){const r=Ct(e.data[n.offset]);if(i||(i=r>=1&&r<=5),r===Tt.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&Y(t.description)[4];return Rt(e,i+1)}return _t(e)})(t,this.decoderConfig);e=new nr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Jt(e.data,this.decoderConfig);t&&(e=new nr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Eo),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();j(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();j(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=ai(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(null!=t?t:e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Lt(e,this.decoderConfig)){const i=Ut(e[t.offset]);if(i===St.RASL_N||i===St.RASL_R)return!0}return!1}sampleHandler(e){if(Ue()){if(this.sampleQueue.length>0&&e.timestamp>=X(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}ge(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();j(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}mergeAlpha(e,t){return z(this,null,function*(){const i=ke();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){j(this.merger);const i=yield this.merger.merge(e,t);r.sample=new Ka(i)}else r.sample=new Ka(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(n){ye(this.finalSamples,r),this.onError(n)}finally{ye(this.mergeAlphaPromises,i.promise),i.resolve()}})}flush(){return z(this,null,function*(){var e;if(this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(j(this.decoder),yield Promise.all([this.decoder.flush(),null==(e=this.alphaDecoder)?void 0:e.flush()]),yield Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Ue()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1})}close(){var e;this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(j(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,null==(e=this.merger)||e.close());for(const t of this.sampleQueue)t.close();this.sampleQueue.length=0}}let Bo=null;class Eo{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!Bo){const e=new Blob([`(${_o.toString()})()`],{type:"application/javascript"});Bo=URL.createObjectURL(e)}const e=Ie(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=ke();this.pendingRequests.set(i,r);const n=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,n.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const _o=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:n,alpha:s}=e.data;i=i.then(()=>z(null,null,function*(){try{const e=yield r(n,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{n.close(),s.close()}}))});const r=(e,t)=>z(null,null,function*(){const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),l=i.includes("P12"),c=r.includes("P10"),u=r.includes("P12");if(c!==o||u!==l)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return yield n(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return yield s(e,t,i);if("NV12"===i)return yield a(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)}),n=(e,t,i)=>z(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=new Uint8Array(4*d);yield e.copyTo(h);const f=yield o(t,c,u,1);for(let e=0,t=3;ez(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=i.includes("P10"),h=i.includes("P12"),f=d||h?2:1;let m,p;i.startsWith("I420")?(m=Math.ceil(c/2),p=Math.ceil(u/2)):i.startsWith("I422")?(m=Math.ceil(c/2),p=u):(m=c,p=u);const g=c*u,k=g*f,y=m*p*f,b=new Uint8Array(k+2*y+g*f);yield e.copyTo(b);const T=yield o(t,c,u,f),v=k+2*y;b.set(T,v);const S={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:c,codedHeight:u,timestamp:e.timestamp,duration:null!=(l=e.duration)?l:void 0,transfer:[b.buffer]};return new VideoFrame(b,S)}),a=(e,i)=>z(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=Math.ceil(c/2)*Math.ceil(u/2),f=e.allocationSize();t&&t.byteLength===f||(t=new Uint8Array(f)),yield e.copyTo(t);const m=new Uint8Array(d+2*h+d);m.set(t.subarray(0,d),0);const p=d,g=d+h,k=d;for(let e=0;ez(null,null,function*(){const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),yield t.copyTo(e);const a=t.format;if("RGBA"===a||"BGRA"===a||"RGBX"===a||"BGRX"===a){const t="RGBA"===a||"RGBX"===a?0:2,n=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class Fo extends Io{constructor(e,t={}){if(!(e instanceof qo))throw new TypeError("videoTrack must be an InputVideoTrack.");Ro(t),super(),this._track=e,this._decoderOptions=t}_createDecoder(e,t){return z(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(je("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getRotation();let n=yield this._track.getDecoderConfig();const s=yield this._track.getTimeResolution();return j(i&&n),n=R(_({},n),{hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency}),new Co(e,t,i,n,r,s)})}_createPacketSink(){return new wo(this._track)}getSample(e){return z(this,arguments,function*(e,t={}){vo(e);try{for(var i,r,n,s=W(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ao{constructor(e,t={}){var i,r,n;if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof qo))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&eo(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Ro(t.decoderOptions),this._videoTrack=e,this._alpha=null!=(i=t.alpha)&&i,this._options=t,this._fit=null!=(r=t.fit)?r:"fill",this._videoSampleSink=new Fo(e,t.decoderOptions),this._canvasPool=Array.from({length:null!=(n=t.poolSize)?n:0},()=>null)}_ensureInit(){var e;return null!=(e=this._initPromise)?e:this._initPromise=(()=>z(this,null,function*(){var e;const t=this._options,i=this._videoTrack,r=null!=(e=t.rotation)?e:yield i.getRotation(),n=yield i.getSquarePixelWidth(),s=yield i.getSquarePixelHeight(),[a,o]=r%180===0?[n,s]:[s,n];let l=t.crop;l&&(l=Za(l,a,o));let[c,u]=l?[l.width,l.height]:[a,o];const d=c/u;void 0!==t.width&&void 0===t.height?(c=t.width,u=Math.round(c/d)):void 0===t.width&&void 0!==t.height?(u=t.height,c=Math.round(u*d)):void 0!==t.width&&void 0!==t.height&&(c=t.width,u=t.height),this._width=c,this._height=u,this._rotation=r,this._crop=l}))()}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],n=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),n=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||We()});j(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:n,fillBlack:!this._alpha&&We()});const a={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),a}getCanvas(e,t){return z(this,null,function*(){vo(e),yield this._ensureInit();const i=yield this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)})}canvases(e,t,i){return U(this,null,function*(){yield new L(this._ensureInit()),yield*q(Pe(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e)))})}canvasesAtTimestamps(e,t){return U(this,null,function*(){yield new L(this._ensureInit()),yield*q(Pe(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e)))})}}class Do extends Po{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new ze,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const n=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const n=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(n*s)/s),e(t)},s=bo.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof uo))throw new TypeError("The argument passed to onSample must be an AudioSample.");n(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{n(new uo(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(j(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(j(this.decoder),null!=this.expectedFirstTimestamp||(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return z(this,null,function*(){this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(j(this.decoder),yield this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0})}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(j(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class Mo extends Po{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,j(Ri.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:n,littleEndian:s}=Vi(this.codec);switch(this.inputSampleSize=n,n){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-B(2,7):"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const n=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let n=0;return n=4!==i?1<e.getUint16(t,s)-B(2,15):"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):j(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>Se(e,t,s)-B(2,23):"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>Se(e,t,i)<<8>>8)(e,t,s):j(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-B(2,31):"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):j(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):j(!1);break;default:ve(n),j(!1)}switch(n){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+B(2,7)));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:ve(n),j(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=J(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,n=new ArrayBuffer(r),s=new DataView(n);for(let c=0;c=a)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=a;const l=new uo({format:this.outputFormat,data:n,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(l)}flush(){return z(this,null,function*(){})}close(){}}class No extends Io{constructor(e){if(!(e instanceof Wo))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}_createDecoder(e,t){return z(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(je("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getDecoderConfig();return j(i&&r),Ri.includes(r.codec)?new Mo(e,t,r):new Do(e,t,i,r)})}_createPacketSink(){return new wo(this._track)}getSample(e){return z(this,arguments,function*(e,t={}){vo(e);try{for(var i,r,n,s=W(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Oo{constructor(e){if(!(e instanceof Wo))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new No(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}getBuffer(e,t){return z(this,null,function*(){vo(e);const i=yield this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)})}buffers(e,t,i){return Pe(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Pe(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class zo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof qo}isAudioTrack(){return this instanceof Wo}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}getInternalCodecId(){return z(this,null,function*(){return this._backing.getInternalCodecId()})}get internalCodecId(){return Lo(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}getLanguageCode(){return z(this,null,function*(){return this._backing.getLanguageCode()})}get languageCode(){return Lo(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}getName(){return z(this,null,function*(){return this._backing.getName()})}get name(){return Lo(this._backing.getName(),"name","getName")}getTimeResolution(){return z(this,null,function*(){return this._backing.getTimeResolution()})}get timeResolution(){return Lo(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}isRelativeToUnixEpoch(){return z(this,null,function*(){return this._backing.isRelativeToUnixEpoch()})}getUnixTimeForTimestamp(e){return z(this,null,function*(){return this._backing.getUnixTimeForTimestamp(e)})}hasUnixTimeMapping(){return z(this,null,function*(){return null!==(yield this._backing.getUnixTimeForTimestamp(yield this.getFirstTimestamp()))})}getDisposition(){return z(this,null,function*(){return this._backing.getDisposition()})}get disposition(){return Lo(this._backing.getDisposition(),"disposition","getDisposition")}getBitrate(){return z(this,null,function*(){return this._backing.getBitrate()})}getAverageBitrate(){return z(this,null,function*(){return this._backing.getAverageBitrate()})}getFirstTimestamp(){return z(this,null,function*(){var e;const t=yield this._backing.getFirstPacket({metadataOnly:!0});return null!=(e=null==t?void 0:t.timestamp)?e:0})}computeDuration(e){return z(this,null,function*(){var t,i;const r=yield this._backing.getPacket(1/0,_({metadataOnly:!0},e)),n=(null!=(t=null==r?void 0:r.timestamp)?t:0)+(null!=(i=null==r?void 0:r.duration)?i:0);return Ee(n,yield this.getTimeResolution())})}getDurationFromMetadata(){return z(this,arguments,function*(e={}){return this._backing.getDurationFromMetadata(e)})}computePacketStats(e=1/0,t){return z(this,null,function*(){const i=new wo(this);let r=1/0,n=-1/0,s=0,a=0;try{for(var o,l,c,u=W(i.packets(void 0,void 0,_({metadataOnly:!0},t)));o=!(l=yield u.next()).done;o=!1){const t=l.value;if(s>=e&&t.timestamp>=n)break;r=Math.min(r,t.timestamp),n=Math.max(n,t.timestamp+t.duration),s++,a+=t.byteLength}}catch(l){c=[l]}finally{try{o&&(l=u.return)&&(yield l.call(u))}finally{if(c)throw c[0]}}return{packetCount:s,averagePacketRate:s?Number((s/(n-r)).toPrecision(16)):0,averageBitrate:s?Number((8*a/(n-r)).toPrecision(16)):0}})}isLive(){return z(this,null,function*(){return null!==(yield this._backing.getLiveRefreshInterval())})}getLiveRefreshInterval(){return z(this,null,function*(){return this._backing.getLiveRefreshInterval()})}canBePairedWith(e){if(!(e instanceof zo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&(this._backing.getPairingMask()&e._backing.getPairingMask())!==BigInt("0")}getPairableTracks(e){return z(this,null,function*(){return this.input.getTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPairableVideoTracks(e){return z(this,null,function*(){return this.input.getVideoTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPairableAudioTracks(e){return z(this,null,function*(){return this.input.getAudioTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableVideoTrack(e){return z(this,null,function*(){return this.input.getPrimaryVideoTrack(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableAudioTrack(e){return z(this,null,function*(){return this.input.getPrimaryAudioTrack(Ko({filter:e=>e.canBePairedWith(this)},e))})}hasPairableTrack(e){return z(this,null,function*(){e&&(e=Uo(e));const t=yield this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||(yield e(i))))return!0;return!1})}hasPairableVideoTrack(e){return e&&(e=Uo(e)),this.hasPairableTrack(t=>z(this,null,function*(){return t.isVideoTrack()&&(!e||(yield e(t)))}))}hasPairableAudioTrack(e){return e&&(e=Uo(e)),this.hasPairableTrack(t=>z(this,null,function*(){return t.isAudioTrack()&&(!e||(yield e(t)))}))}}const Lo=(e,t,i)=>{if(Xe(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},Uo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Xe(r)?r.then(i):i(r)}:void 0};class qo extends zo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}getCodec(){return z(this,null,function*(){return this._backing.getCodec()})}get codec(){return Lo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return z(this,null,function*(){var e,t,i;return null!=(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:"prores"===(yield this._backing.getCodec())})}getCodedWidth(){return z(this,null,function*(){return this._backing.getCodedWidth()})}get codedWidth(){return Lo(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}getCodedHeight(){return z(this,null,function*(){return this._backing.getCodedHeight()})}get codedHeight(){return Lo(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}getRotation(){return z(this,null,function*(){return this._backing.getRotation()})}get rotation(){return Lo(this._backing.getRotation(),"rotation","getRotation")}getSquarePixelWidth(){return z(this,null,function*(){return this._backing.getSquarePixelWidth()})}get squarePixelWidth(){return Lo(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}getSquarePixelHeight(){return z(this,null,function*(){return this._backing.getSquarePixelHeight()})}get squarePixelHeight(){return Lo(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}getPixelAspectRatio(){return z(this,null,function*(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=it({num:(yield this.getSquarePixelWidth())*(yield this.getCodedHeight()),den:(yield this.getSquarePixelHeight())*(yield this.getCodedWidth())})})}get pixelAspectRatio(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=it({num:Lo(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Lo(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Lo(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Lo(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}getDisplayWidth(){return z(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()})}get displayWidth(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(void 0!==i){const e=Lo(i,"displayWidth","getDisplayWidth");if(null!==e)return e}const r=Lo(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Lo(r,"displayWidth","getDisplayWidth")}getDisplayHeight(){return z(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()})}get displayHeight(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(void 0!==i){const e=Lo(i,"displayHeight","getDisplayHeight");if(null!==e)return e}const r=Lo(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Lo(r,"displayHeight","getDisplayHeight")}getColorSpace(){return z(this,null,function*(){return this._backing.getColorSpace()})}hasHighDynamicRange(){return z(this,null,function*(){const e=yield this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix})}canBeTransparent(){return z(this,null,function*(){return this._backing.canBeTransparent()})}getDecoderConfig(){return z(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return z(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return z(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(j(null!==t),yo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(yield VideoDecoder.isConfigSupported(e)).supported}catch(e){return lt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return z(this,null,function*(){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=yield this.getCodec();if(null===t)return null;const i=yield this.getDecoderConfig();return j(i),ai(t,i,e.data)})}computeFrameRateMetrics(){return z(this,arguments,function*(e={}){var t,i;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Je(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const r=yield this.getTimeResolution(),n=null!=(t=e.targetPacketCount)?t:256,s=new wo(this),a=[];let o=-1/0,l=0;try{for(var c,u,d,h=W(s.packets(void 0,void 0,{metadataOnly:!0}));c=!(u=yield h.next()).done;c=!1){const e=u.value;if(a.length>=n&&e.timestamp>=o)break;a.push(e.timestamp),o=Math.max(o,e.timestamp),l++}}catch(u){d=[u]}finally{try{c&&(u=h.return)&&(yield u.call(h))}finally{if(d)throw d[0]}}const f=new Float64Array(a.length);for(let R=0;Re-t),I=w-1>>1,x=w>>1;let C=0,B=0,E=0;for(const R of P)if(E+=b.get(R),0===C&&E>I&&(C=R),E>x){B=R;break}const _=(k/C+k/B)/2;return{underlyingFrameRate:g,bestGuessFrameRate:null!==g?g:Qo(_),minFrameRate:k/v,maxFrameRate:k/T,averageFrameRate:k*w/S,medianFrameRate:_,frameRateIsConstant:null!==g&&1===T&&1===v,probedPacketCount:l}})}}class Wo extends zo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}getCodec(){return z(this,null,function*(){return this._backing.getCodec()})}get codec(){return Lo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return z(this,null,function*(){var e,t,i;return null==(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))||i})}getNumberOfChannels(){return z(this,null,function*(){return this._backing.getNumberOfChannels()})}get numberOfChannels(){return Lo(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}getSampleRate(){return z(this,null,function*(){return this._backing.getSampleRate()})}get sampleRate(){return Lo(this._backing.getSampleRate(),"sampleRate","getSampleRate")}getDecoderConfig(){return z(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return z(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return z(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(j(null!==t),bo.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(yield AudioDecoder.isConfigSupported(e)).supported}catch(e){return lt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return z(this,null,function*(){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");return null===(yield this.getCodec())?null:"key"})}}const Ho=e=>-(null!=e?e:-1/0),Vo=e=>-e,jo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Xe(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Xe(r)?r.then(i):i(r)}:void 0}},Ko=(e,t)=>({filter:(null==e?void 0:e.filter)||(null==t?void 0:t.filter)?i=>{var r,n;const s=null==(n=null==(r=null==e?void 0:e.filter)?void 0:r.call(e,i))||n,a=e=>{var r,n;return!1!==e&&(null==(n=null==(r=null==t?void 0:t.filter)?void 0:r.call(t,i))||n)};return Xe(s)?s.then(a):a(s)}:void 0,sortBy:(null==e?void 0:e.sortBy)||(null==t?void 0:t.sortBy)?i=>{var r,n,s,a;const o=null!=(n=null==(r=null==e?void 0:e.sortBy)?void 0:r.call(e,i))?n:[],l=null!=(a=null==(s=null==t?void 0:t.sortBy)?void 0:s.call(t,i))?a:[],c=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Xe(o)||Xe(l)?Promise.all([o,l]).then(([e,t])=>c(e,t)):c(o,l)}:void 0}),Xo=(e,t)=>z(null,null,function*(){let i=e;if(null==t?void 0:t.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Xe(e))){const t=yield Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!(null==t?void 0:t.sortBy))return i;const r=i.map(e=>t.sortBy(e)),n=r.some(e=>Xe(e))?yield Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:n[t]})).sort((e,t)=>{var i,r;const n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],s=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(n.length,s.length);for(let o=0;oe.track)}),$o=(e,t)=>{const i=1e6,r=1+1e-9,n=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let v=1;v0))return null;s[v-1]=t}const a=s.slice();a.sort();let o=a[Math.floor(.05*a.length)];for(let v=0;v<6;v++){let e=0,t=0;for(const n of s){const i=Math.max(1,Math.round(n/o));Math.abs(n-i*o)>=r||(e+=n,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let l=0,c=0,u=0;for(const v of s){const e=Math.max(1,Math.round(v/o));Math.abs(v-e*o)>=r||(l++,c+=v,u+=e)}if(l/s.length<.98)return null;o=c/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const v of n){if(vp)continue;const e=Math.abs(v/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,n=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof fa)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof zs||e.source instanceof Ls))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof zs&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof Jo))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=null!=(t=e.initInput)?t:null,this._formatOptions=null!=(i=e.formatOptions)?i:{},e.source instanceof zs?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}_getSourceUncached(e){return z(this,null,function*(){j(this._rootSource instanceof Us);const t=yield this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t})}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&qs(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&qs(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const n=(()=>z(this,null,function*(){const i=yield this._getSourceUncached(e);if(et(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=tt(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);j(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),ye(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);j(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}}))();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:n}),n.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){var e;return null!=(e=this._demuxerPromise)?e:this._demuxerPromise=(()=>z(this,null,function*(){var e;this._reader=new tl(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const t of this._formats){if(yield t._canReadInput(this))return this._format=t,null==(e=this._onFormatDetermined)||e.call(this,t),t._createDemuxer(this)}throw new Zo}))()}get source(){return this._rootSource}getFormat(){return z(this,null,function*(){return yield this._getDemuxer(),j(this._format),this._format})}canRead(){return z(this,null,function*(){try{return yield this._getDemuxer(),!0}catch(e){if(e instanceof Zo)return!1;throw e}})}getFirstTimestamp(e){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=yield Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>{var t;return null!=(t=null==e?void 0:e.timestamp)?t:1/0}));return r===1/0?0:r})}computeDuration(e,t){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=yield Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)})}getDurationFromMetadata(e,t){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e),r=(yield Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)})}getTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return Xo(t,e)})}getVideoTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this.getTracks()).filter(e=>e.isVideoTrack());return Xo(t,e)})}getAudioTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this.getTracks()).filter(e=>e.isAudioTrack());return Xo(t,e)})}getPrimaryVideoTrack(e){return z(this,null,function*(){var t;e&&(e=jo(e));const i=Ko(e,{sortBy:e=>z(null,null,function*(){return[Vo((yield e.getDisposition()).default),Vo(yield e.hasPairableAudioTrack()),Vo(!(yield e.hasOnlyKeyPackets())),Ho(yield e.getBitrate())]})});return null!=(t=(yield this.getVideoTracks(i))[0])?t:null})}getPrimaryAudioTrack(e){return z(this,null,function*(){var t;e&&(e=jo(e));const i=yield this.getPrimaryVideoTrack(),r=Ko(e,{sortBy:e=>z(this,null,function*(){return[Vo(!i||e.canBePairedWith(i)),Vo((yield e.getDisposition()).default),Ho(yield e.getBitrate())]})});return null!=(t=(yield this.getAudioTracks(r))[0])?t:null})}_getTrackBackings(){return z(this,null,function*(){var e;const t=yield this._getDemuxer();return null!=(e=this._trackBackingsCache)?e:this._trackBackingsCache=yield t.getTrackBackings()})}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new qo(this,e):new Wo(this,e);return this._backingToTrack.set(e,i),i}getMimeType(){return z(this,null,function*(){return(yield this._getDemuxer()).getMimeType()})}getMetadataTags(){return z(this,null,function*(){return(yield this._getDemuxer()).getMetadataTags()})}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class Zo extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class el extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class tl{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){var e;return null!=(e=this.source._getFileSize())?e:null}requestSlice(e,t){if(this.source._disposed)throw new el;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new il(t,J(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,Os);return Xe(r)?r.then(t=>t?new il(t.bytes,t.view,t.offset,e,i):null):r?new il(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new el;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,Ie(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),n=r=>r||(j(null!==this.fileSizeNonStrict),this.requestSlice(e,Ie(this.fileSizeNonStrict-e,t,i)));return Xe(r)?r.then(n):n(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(()=>z(this,null,function*(){const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Xe(i)&&(i=yield i),!i||0===i.length)break;const r=nl(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const n of e)i.set(n,r),r+=n.length;return new il(i,J(i),0,0,t)}))()}}class il{constructor(e,t,i,r,n){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=n,this.bufferPos=r-i}static tempFromBytes(e){return new il(e,J(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new il(this.bytes,this.view,this.offset,e,e+t)}}const rl=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},nl=(e,t)=>{rl(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},sl=e=>(rl(e,1),e.view.getUint8(e.bufferPos++)),al=(e,t)=>{rl(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},ol=e=>{rl(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},ll=e=>{rl(e,3);const t=Se(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},cl=e=>{rl(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},ul=(e,t)=>{rl(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},dl=e=>{rl(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},hl=e=>{rl(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},fl=e=>{rl(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},ml=(e,t)=>{let i,r;return t?(i=ul(e,!0),r=ul(e,!0)):(r=ul(e,!1),i=ul(e,!1)),4294967296*r+i},pl=e=>4294967296*dl(e)+dl(e),gl=e=>4294967296*fl(e)+dl(e),kl=e=>{const t=hl(e),i=(e=>{rl(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},yl=e=>{rl(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},bl=e=>{rl(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},Tl=(e,t)=>{rl(e,t);let i="";for(let r=0;rZ.decode(nl(e,t)).split("\n").map(e=>e.trim()).filter(e=>{var t;return e.length>0&&!(null==(t=null==i?void 0:i.ignore)?void 0:t.call(i,e))});var Sl,wl,Pl,Il;(wl=Sl||(Sl={}))[wl.Unsynchronisation=128]="Unsynchronisation",wl[wl.ExtendedHeader=64]="ExtendedHeader",wl[wl.ExperimentalIndicator=32]="ExperimentalIndicator",wl[wl.Footer=16]="Footer",(Il=Pl||(Pl={}))[Il.ISO_8859_1=0]="ISO_8859_1",Il[Il.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",Il[Il.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",Il[Il.UTF_8=3]="UTF_8";const xl=128,Cl=10,Bl=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],El=(e,t)=>{var i;const r=e.filePos;null!=t.raw||(t.raw={}),null!=(i=t.raw).TAG||(i.TAG=nl(e,xl-3)),e.filePos=r;const n=_l(e,30);n&&(null!=t.title||(t.title=n));const s=_l(e,30);s&&(null!=t.artist||(t.artist=s));const a=_l(e,30);a&&(null!=t.album||(t.album=a));const o=_l(e,4),l=Number.parseInt(o,10);Number.isInteger(l)&&l>0&&(null!=t.date||(t.date=new Date(String(l))));const c=nl(e,30);let u;if(0===c[28]&&0!==c[29]){const i=c[29];i>0&&(null!=t.trackNumber||(t.trackNumber=i)),e.skip(-30),u=_l(e,28),e.skip(2)}else e.skip(-30),u=_l(e,30);u&&(null!=t.comment||(t.comment=u));const d=sl(e);d{const i=nl(e,t),r=$e(i.indexOf(0),i.length),n=i.subarray(0,r);let s="";for(let a=0;a{const t=e.filePos,i=Tl(e,3),r=sl(e),n=sl(e),s=sl(e),a=dl(e);if("ID3"!==i||255===r||255===n||0!==(2155905152&a))return e.filePos=t,null;let o=Ji(a);return s&Sl.Footer&&(o+=Cl),{majorVersion:r,revision:n,flags:s,size:o}},Fl=(e,t,i)=>{var r,n,s,a,o,l;if(![2,3,4].includes(t.majorVersion))return void lt._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&Sl.Footer?t.size-Cl:t.size,u=nl(e,c),d=new Al(t,u);if(t.flags&Sl.Unsynchronisation&&3===t.majorVersion&&d.ununsynchronizeAll(),t.flags&Sl.ExtendedHeader){const e=d.readU32();3===t.majorVersion?d.pos+=e:d.pos+=e-4}for(;d.pos<=d.bytes.length-d.frameHeaderSize();){const e=d.readId3V2Frame();if(!e)break;const c=d.pos,u=d.pos+e.size;let h=!1,f=!1,m=!1;if(3===t.majorVersion?(h=!!(64&e.flags),f=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),f=!!(8&e.flags),m=!!(2&e.flags)||!!(t.flags&Sl.Unsynchronisation)),h)lt._warn(`Skipping encrypted ID3v2 frame ${e.id}`),d.pos=u;else if(f)lt._warn(`Skipping compressed ID3v2 frame ${e.id}`),d.pos=u;else{if(m&&d.ununsynchronizeRegion(d.pos,u),null!=i.raw||(i.raw={}),"TXXX"===e.id){const e=null!=(n=(r=i.raw).TXXX)?n:r.TXXX={},t=d.readId3V2TextEncoding(),s=d.readId3V2Text(t,u),a=d.readId3V2Text(t,u);null!=e[s]||(e[s]=a)}else"T"===e.id[0]?null!=(s=i.raw)[a=e.id]||(s[a]=d.readId3V2EncodingAndText(u)):null!=(o=i.raw)[l=e.id]||(o[l]=d.readBytes(e.size));switch(d.pos=c,e.id){case"TIT2":case"TT2":null!=i.title||(i.title=d.readId3V2EncodingAndText(u));break;case"TIT3":case"TT3":null!=i.description||(i.description=d.readId3V2EncodingAndText(u));break;case"TPE1":case"TP1":null!=i.artist||(i.artist=d.readId3V2EncodingAndText(u));break;case"TALB":case"TAL":null!=i.album||(i.album=d.readId3V2EncodingAndText(u));break;case"TPE2":case"TP2":null!=i.albumArtist||(i.albumArtist=d.readId3V2EncodingAndText(u));break;case"TRCK":case"TRK":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.trackNumber||(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.tracksTotal||(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.discNumber||(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.discsTotal||(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=d.readId3V2EncodingAndText(u);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==Bl[e]){null!=i.genre||(i.genre=Bl[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==Bl[e]){null!=i.genre||(i.genre=Bl[e]);break}}null!=i.genre||(i.genre=e)}break;case"TDRC":case"TDAT":{const e=d.readId3V2EncodingAndText(u),t=new Date(e);Number.isNaN(t.getTime())||null!=i.date||(i.date=t)}break;case"TYER":case"TYE":{const e=d.readId3V2EncodingAndText(u),t=Number.parseInt(e,10);Number.isInteger(t)&&(null!=i.date||(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.lyrics||(i.lyrics=d.readId3V2Text(e,u))}break;case"COMM":case"COM":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.comment||(i.comment=d.readId3V2Text(e,u))}break;case"APIC":case"PIC":{const e=d.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=d.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=d.readId3V2Text(e,u);const n=d.readU8(),s=d.readId3V2Text(e,u).trimEnd(),a=u-d.pos;if(a>=0){const e=d.readBytes(a);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===n?"coverFront":4===n?"coverBack":"unknown",description:s})}}break;default:d.pos+=e.size}d.pos=u}}};class Al{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Ji(t);s(e)&&(i=e)}return this.pos=n,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case Pl.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=$e(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=$e(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Z.decode(r.subarray(0,e))}case Pl.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=$e(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Pl.UTF_8:{const e=$e(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Z.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class Dl{constructor(e){this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set}get currentTime(){return this.paused?this.playbackTimeAtStart:(this.audioContext.currentTime-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart}ensureAudioContext(e){if(this.audioContext)return;const t=window.AudioContext||window.webkitAudioContext;try{this.audioContext=new t({sampleRate:e})}catch(i){this.audioContext=new t}this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.updateGain()}updateGain(){if(!this.gainNode)return;const e=this.muted?0:this.volume;this.gainNode.gain.value=e*e}stopQueuedNodes(){this.queuedNodes.forEach(e=>e.stop()),this.queuedNodes.clear()}stopIterator(){return z(this,null,function*(){var e;yield null==(e=this.audioIterator)?void 0:e.return(),this.audioIterator=null})}handleNoAudioTrack(){this.audioSink=null,this.ensureAudioContext()}load(e,t){return z(this,null,function*(){++this.asyncId,yield this.stopIterator(),this.stopQueuedNodes(),this.paused=!0,this.playbackTimeAtStart=0,this.audioContextStartTime=0;const{input:i,audioTrack:r,duration:n}=e;return this.input=i,this.duration=n,r?null!==r.codec&&(yield r.canDecode())?(this.ensureAudioContext(r.sampleRate),this.audioSink=new Oo(r),void(null==t||t())):(this.audioSink=null,this.ensureAudioContext(),void(null==t||t())):(this.handleNoAudioTrack(),void(null==t||t()))})}runIterator(e){return z(this,null,function*(){if(!this.audioSink)return;yield this.stopIterator(),this.audioIterator=this.audioSink.buffers(this.currentTime);for(;;){if(e!==this.asyncId||this.paused)return;const i=[];let r=!1;try{for(let e=0;e<16;e++){const e=yield this.audioIterator.next();if(e.done){r=!0;break}i.push(e.value)}}catch(t){console.error("Audio iterator error:",t),r=!0}if(e!==this.asyncId||this.paused)return;i.length>0&&"suspended"===this.audioContext.state&&(yield this.audioContext.resume(),this.events.emit("canplay"),this.events.emit("playing"));for(const{buffer:e,timestamp:t}of i){const i=this.audioContext.createBufferSource();i.buffer=e,i.connect(this.gainNode),i.playbackRate.value=this.playbackRate;const r=this.audioContextStartTime+(t-this.playbackTimeAtStart)/this.playbackRate,n=(r+e.duration/this.playbackRate-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart;n>this.latestScheduledEndTime&&(this.latestScheduledEndTime=n),r>=this.audioContext.currentTime?i.start(r):i.start(this.audioContext.currentTime,(this.audioContext.currentTime-r)*this.playbackRate),this.queuedNodes.add(i),i.onended=()=>this.queuedNodes.delete(i)}if(r)break;yield new Promise(e=>setTimeout(e,0));const n=1;for(;this.latestScheduledEndTime-this.currentTime>n;){if(e!==this.asyncId||this.paused)return;yield new Promise(e=>setTimeout(e,50))}}})}play(){return z(this,null,function*(){if(!this.paused)return;this.audioContext||this.ensureAudioContext(),"suspended"===this.audioContext.state&&(yield this.audioContext.resume()),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1;const e=++this.asyncId;this.runIterator(e)})}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime,this.paused=!0,this.stopIterator(),this.stopQueuedNodes())}seek(e){return z(this,null,function*(){this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart;const t=++this.asyncId;this.paused||this.runIterator(t)})}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(e!==this.playbackRate&&(this.paused||(this.playbackTimeAtStart=this.currentTime,this.audioContextStartTime=this.audioContext.currentTime),this.playbackRate=e,!this.paused)){const e=++this.asyncId;this.runIterator(e)}}destroy(){var e;this.asyncId++,this.pause(),null==(e=this.audioContext)||e.close(),this.audioContext=null,this.input=null,this.audioSink=null}}function Ml(e){return z(this,null,function*(){var t,i;return null!=(i=null!=(t=yield e.getAverageBitrate())?t:yield e.getBitrate())?i:0})}const Nl=/\.m3u8(?:$|[?#])/i;function Ol(e){return"string"===typeof e&&Nl.test(e)}function zl(e){const t=function(e){return"string"===typeof e?new $s(e):e instanceof Blob?new Vs(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new Ys(e):null!=e?e:null}(e);return t?new Jo({source:t,formats:Ol(e)?za:Oa}):null}class Ll{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){var e;return null==(e=this.controller)?void 0:e.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}wait(e,t){return z(this,null,function*(){try{yield Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}})}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,null==e||e.dispose()}cancel(){var e;if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),null==(e=this.controller)||e.abort(),this.disposeInput()}}}function Ul(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}function ql(e){return z(this,arguments,function*({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),n=t||i,s=Boolean(n&&(yield n.isLive()));let a=Number.NaN;return r.length>0&&(a=yield e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==a||s||(a=yield e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:null!=a?a:Number.NaN})}function Wl(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class Hl{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null,this.audioStart=null}operation(){return R(_({},Wl()),{source:this.host.loadSeq,complete:Wl()})}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,null==e||e.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,null==e||e.complete.resolve(),null==e||e.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}startAudio(){return z(this,null,function*(){this.audioStart||(this.audioStart=this.host.audio.play());const e=this.audioStart;try{yield e}finally{this.audioStart===e&&(this.audioStart=null)}})}runPlay(e){return z(this,null,function*(){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(yield this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,yield this.startAudio(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Ul(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}})}seek(e,t){return this.position(t=>z(this,null,function*(){const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();yield Promise.all([i,r])}),["seeked"],!1,t)}replace(e,t){return this.position(i=>z(this,null,function*(){e.duration=yield ql(e),i()&&(this.host.media=e,yield Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(yield Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))}),["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=null!=r?r:this.seeking?this.wanted:!this.host.paused,this.cancelPlay();const n=this.seeking,s=this.operation();return this.seeking=s,null==n||n.complete.resolve(),null==n||n.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}runPosition(e,t,i,r){return z(this,null,function*(){const n=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!n())return;if(this.host.ended=!1,this.host.seeking=!0,Ul(this.host.events,n,["seeking","waiting"]),!n())return;if(r||this.stop(),!n())return;if(yield t(n),!n())return;if(this.host.seeking=!1,e.complete.resolve(),Ul(this.host.events,n,i),!n())return;this.seeking=null,s=this.wanted}catch(a){if(!n())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(a),a}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&(yield this.play())})}}const Vl=new WeakMap,jl=new WeakMap;function Kl(e){const t=jl.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>{var t;return null!=(t=e.value)?t:null});jl.set(e,i);const r=()=>{jl.get(e)===i&&jl.delete(e)};return i.then(r,r),i}function Xl(e,t,i,r,n){const s=i?Math.max(.06,r/Math.max(1,n)):0;return i&&e{if(this.image===n&&t()){this.cancel();try{i(n)}catch(e){r(e)}}},n.onerror=()=>{this.image===n&&this.cancel()},n.src=e}}class Gl{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}update(e){return z(this,null,function*(){var t;const i=this.host.videoIterator;if(!i||!this.ready()||!this.current(e)||this.host.isFetching)return;const r={};this.fetching=r,this.host.isFetching=!0;const n=()=>this.current(e)&&this.host.videoIterator===i;try{for(;n();){const e=yield Kl(i);if(!n()||!e)return;const r=null==(t=this.host.audioClock)?void 0:t.currentTime;if(void 0===r)return;const s=Xl(e.timestamp,r,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==s){if("draw"!==s)return void(this.host.nextFrame=e);this.draw(e)}}}catch(s){if(n())throw s}finally{this.fetching===r&&(this.fetching=null,this.host.isFetching=!1)}})}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Ul(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Ul(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!A(this,o),e=>N(this,d,g).call(this,e,!0),e=>N(this,d,m).call(this,e)))}preflight(e,t,i){return z(this,null,function*(){return function(e,t,i,r,n=()=>!0){return z(this,null,function*(){if((null==r?void 0:r.aborted)||!n())return!1;if(!t||"string"!==typeof e||Ol(e))return!0;try{const t=yield fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if((null==r?void 0:r.aborted)||!n())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!((null==r?void 0:r.aborted)||!n())&&(console.warn("Preflight check failed:",s),!0)}})}(e,this.preflightRange,this.events,t,i)})}drawPoster(){if(A(this,a)||!this.poster||this.posterDrawn)return;const e=A(this,t);A(this,l).draw(this.poster,()=>N(this,d,h).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,N(this,d,f).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>N(this,d,m).call(this,e))}stopIterator(){return z(this,null,function*(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,yield function(e){if(!e)return Promise.resolve();const t=Vl.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return Vl.set(e,i),i}(e)})}clear(){N(this,d,f).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){O(this,t)._++,O(this,i)._++,this.stop(),N(this,d,p).call(this),A(this,l).cancel(),M(this,o,!1),M(this,r,null),M(this,n,null),M(this,s,null),this.videoSink=null,this.input=null}load(e,n){return z(this,null,function*(){if(A(this,a))return;this.cancelPending();const s=A(this,t),l=A(this,i);M(this,o,!0);const c=Promise.resolve().then(()=>N(this,d,k).call(this,e,s,l,n));M(this,r,c);try{yield c}finally{A(this,r)===c&&M(this,r,null)}})}handleNoVideoTrack(){A(this,a)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}resetIterator(e){return z(this,null,function*(){if(A(this,a))return;const n=A(this,t),s=++O(this,i)._,c=A(this,r);this.stop(),A(this,l).cancel(),M(this,o,!0);try{c&&(yield c),yield N(this,d,y).call(this,e,n,s)}catch(u){if(N(this,d,h).call(this,n)&&A(this,i)===s)throw N(this,d,p).call(this),u}finally{N(this,d,h).call(this,n)&&A(this,i)===s&&M(this,o,!1)}})}updateNextFrame(e){return z(this,null,function*(){yield A(this,c).update(e)})}render(){A(this,c).render()}start(e){A(this,c).start(e)}stop(){A(this,c).stop()}seek(e){return z(this,null,function*(){yield this.resetIterator(e)})}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){A(this,a)||(M(this,a,!0),O(this,t)._++,A(this,c).destroy(),A(this,l).cancel(),N(this,d,p).call(this),this.posterDrawn=!1,M(this,n,null),M(this,s,null),this.videoSink=null,this.input=null,this.audioClock=null)}}t=new WeakMap,i=new WeakMap,r=new WeakMap,n=new WeakMap,s=new WeakMap,a=new WeakMap,o=new WeakMap,l=new WeakMap,c=new WeakMap,u=new WeakMap,d=new WeakSet,h=function(e){return!A(this,a)&&A(this,t)===e},f=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},m=function(e){A(this,a)||(N(this,d,p).call(this),A(this,u)?A(this,u).call(this,e):this.events.emit("error",e))},p=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},g=function(e,t){A(this,l).cancel(),t&&this.clear(),N(this,d,f).call(this).drawImage(e.canvas,0,0)},k=function(e,t,r,s){return z(this,null,function*(){if(N(this,d,h).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:i,videoTrack:a,duration:o}=e;if(this.input=i,this.duration=o,!a)return this.handleNoVideoTrack(),void(null==s||s());const l=null!==a.codec&&(yield a.canDecode());if(!N(this,d,h).call(this,t))return;if(!l)return this.handleNoVideoTrack(),void(null==s||s());const c=yield a.canBeTransparent();if(!N(this,d,h).call(this,t))return;M(this,n,()=>new Ao(a,{poolSize:2,fit:"contain",alpha:c})),this.videoSink=A(this,n).call(this),this.width=a.displayWidth,this.height=a.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,null==s||s(),N(this,d,h).call(this,t)&&(yield N(this,d,y).call(this,0,t,r))}catch(a){if(N(this,d,h).call(this,t))throw N(this,d,p).call(this),a}finally{N(this,d,h).call(this,t)&&A(this,i)===r&&M(this,o,!1)}})},y=function(e,t,r){return z(this,null,function*(){if(!N(this,d,h).call(this,t)||A(this,i)!==r)return;N(this,d,p).call(this),A(this,n)&&this.videoSink===A(this,s)&&(this.videoSink=A(this,n).call(this));const a=this.videoSink;if(!a||!N(this,d,h).call(this,t))return;M(this,s,a);const o=a.canvases(e);this.videoIterator=o;const l=()=>N(this,d,h).call(this,t)&&A(this,i)===r&&this.videoIterator===o,c=yield Kl(o);if(!l())return;const u=yield Kl(o);l()&&(this.nextFrame=u,c?N(this,d,g).call(this,c,!1):this.drawPoster())})};class Yl{constructor({canvas:e,ctx:t,events:i,option:r={}}){var n,s,a,o,l;D(this,b),this.events=i,this.option=r,this.audio=new Dl(i),this.video=new Ql({canvas:e,ctx:t,events:i,timeupdateInterval:null!=(n=r.timeupdateInterval)?n:250,avSyncTolerance:null!=(s=r.avSyncTolerance)?s:.12,dropLateFrames:null!=(a=r.dropLateFrames)&&a,poster:null!=(o=r.poster)?o:"",preflightRange:null!=(l=r.preflightRange)&&l,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,M(this,b,new Hl(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,A(this,b).ended())})}load(e){return z(this,null,function*(){var t,i;if(this.destroyed)return;const r=++this.loadSeq;if(A(this,b).invalidate(),this.video.cancelPending(),null==(t=this.loadSession)||t.cancel(),r!==this.loadSeq||this.destroyed)return;if(this.pause(),r!==this.loadSeq||this.destroyed)return;this.disposeInput();const n=new Ll;this.loadSession=n,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,n.defer(()=>this.events.emit("waiting")),n.defer(()=>this.events.emit("loadstart"));const s=Number.isFinite(this.option.loadTimeout)&&null!=(i=this.option.loadTimeout)?i:0;try{yield n.wait(this.performLoad(e,r,n),s)}catch(a){if(r!==this.loadSeq)return;const e=++this.loadSeq;if(A(this,b).invalidate(),this.video.cancelPending(),n.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}})}performLoad(e,t){return z(this,arguments,function*(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(yield this.video.preflight(e,i.signal,r))||!r())return;const n=zl(e);if(!n)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(n);const s=yield function(e,t){return z(this,null,function*(){const i=yield e.getPrimaryVideoTrack(),r=i?yield i.getPrimaryPairableAudioTrack():yield e.getPrimaryAudioTrack(),n=yield ql({input:e,videoTrack:i,audioTrack:r}),s=i||r,a=Ol(t);return{input:e,videoTrack:i,audioTrack:r,duration:n,isLive:!Number.isFinite(n)&&Boolean(s&&(yield s.isLive())),isHls:a,videoMode:a?"auto":"manual",audioMode:a?"auto":"manual"}})}(n,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=n,this.media=s;const a=function(e,t){let i=!1,r=!1,n=!1;function s(s){t()&&!n&&("video"===s?i=!0:r=!0,i&&r&&(n=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Ul(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,a.video),t=r()?this.audio.load(s,a.audio):Promise.resolve();if(yield Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Ul(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}})}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){var e;null==(e=this.loadSession)||e.disposeInput(),this.input=null,this.media=null}replaceTracks(e){return z(this,null,function*(){if(this.media&&!this.destroyed)return A(this,b).replace(_(_({},this.media),e),this.currentTime)})}selectHlsQuality(e){return z(this,null,function*(){return function(e,t){return z(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getVideoTracks();if(!a())return;const s="auto"===t?yield r.getPrimaryVideoTrack():null!=(i=e.find(e=>e.id===t))?i:n.videoTrack;if(!a()||!s)return;let l=n.audioTrack,c=n.audioMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableAudioTrack(),c="auto"),o={videoTrack:s,audioTrack:l,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}selectHlsAudio(e){return z(this,null,function*(){return function(e,t){return z(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getAudioTracks();if(!a())return;const s="auto"===t?n.videoTrack?yield n.videoTrack.getPrimaryPairableAudioTrack():yield r.getPrimaryAudioTrack():null!=(i=e.find(e=>e.id===t))?i:n.audioTrack;if(!a()||!s)return;let l=n.videoTrack,c=n.videoMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableVideoTrack(),c="auto"),o={videoTrack:l,audioTrack:s,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}getHlsState(){return z(this,null,function*(){const e=this.media;if(this.destroyed)return null;try{const t=yield function(e){return z(this,null,function*(){var t,i,r,n;if(!(null==e?void 0:e.isHls)||!e.input)return null;const[s,a]=yield Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[o,l]=yield Promise.all([Promise.all(s.map((e,t)=>z(null,null,function*(){return{id:e.id,track:e,index:t,name:yield e.getName(),height:yield e.getDisplayHeight(),bitrate:yield Ml(e)}}))),Promise.all(a.map((e,t)=>z(null,null,function*(){const i=yield e.getName(),r=yield e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:yield Ml(e)}})))]);return{levels:o,audios:l,currentLevel:e.videoTrack&&null!=(t=o.find(t=>{var i;return t.id===(null==(i=e.videoTrack)?void 0:i.id)}))?t:null,currentAudio:e.audioTrack&&null!=(i=l.find(t=>{var i;return t.id===(null==(i=e.audioTrack)?void 0:i.id)}))?i:null,videoMode:null!=(r=e.videoMode)?r:"auto",audioMode:null!=(n=e.audioMode)?n:"auto"}})}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}})}play(){return z(this,null,function*(){return A(this,b).play()})}pause(){A(this,b).pause()}seek(e){return z(this,null,function*(){return A(this,b).seek(e)})}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,A(this,b).invalidate();const e=[];for(const i of[()=>{var e;return null==(e=this.loadSession)?void 0:e.cancel()},()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){var e,t,i;return null!=(i=null!=(t=null==(e=this.media)?void 0:e.duration)?t:this.audio.duration)?i:this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}b=new WeakMap;const Jl=new WeakMap;function Zl(e){let t=Jl.get(e);return t||(t={closed:!1,frames:new Set},Jl.set(e,t)),t}class ec{constructor({art:e,canvas:t,ctx:i,option:r}){var n,s;this.art=e,this.canvas=t,this.option=r,this.events=new V,this.engine=new Yl({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=null!=(n=r.volume)?n:.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:(null==(s=e.option)?void 0:s.url)&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=Zl(e);if(i.closed)return 0;const r=requestAnimationFrame(n=>{i.frames.delete(r),i.closed||t(n,{presentationTime:e.engine.currentTime,expectedDisplayTime:n+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:n,receiveTime:n,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){Zl(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=Zl(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,n=r("canvas"),s=n.getContext("2d"),a=new ec({art:t,canvas:n,ctx:s,option:e});t.mediabunny=a;const o={};for(const e in n)"function"===typeof n[e]&&(o[e]=n[e].bind(n));const l=new Set([...Object.getOwnPropertyNames(a),...Object.getOwnPropertyNames(Object.getPrototypeOf(a))]);for(const e of l)"constructor"!==e&&(e in n||Object.defineProperty(n,e,{get(){const t=a[e];return"function"===typeof t?t.bind(a):t},set(t){a[e]=t},configurable:!0,enumerable:!0}));for(const e in o)n[e]=(...t)=>o[e](...t);function c(){var e;(null==(e=t.template)?void 0:e.$player)&&!t.option.autoSize&&Object.assign(n.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",c),t.on("video:loadedmetadata",c),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function n(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),n("mediabunny-quality")}function a(){r("mediabunny-audio"),n("mediabunny-audio")}function o(e={}){return e.control||e.setting}function l(r){return z(this,null,function*(){var n;const a=(null==(n=i.m3u8)?void 0:n.quality)||{};if(!o(a)||!(null==r?void 0:r.levels.length))return void s();const l=a.auto||"Auto",c=a.title||"Quality",d=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?d(r.currentLevel):l,f=H(r.levels.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentLevel)?void 0:t.id)===e.id}}),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),n=r.levels.find(e=>e.id===t.value);return((null==n?void 0:n.height)||0)-((null==i?void 0:i.height)||0)});f.push({html:l,value:"auto",default:!r.currentLevel});const m=i=>z(null,null,function*(){return yield t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function c(r){return z(this,null,function*(){var n;const s=(null==(n=i.m3u8)?void 0:n.audio)||{};if(!o(s)||!(null==r?void 0:r.audios.length)||r.audios.length<2)return void a();const l=s.auto||"Auto",c=s.title||"Audio",d=s.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?d(r.currentAudio):l,f=H(r.audios.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentAudio)?void 0:t.id)===e.id}}),"html");f.push({html:l,value:"auto",default:!r.currentAudio});const m=i=>z(null,null,function*(){return yield t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});s.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function u(){return z(this,null,function*(){const e=yield t.getM3u8State();if(!e)return s(),void a();yield Promise.all([l(e),c(e)])})}}({art:t,shim:a,option:e}),t.on("destroy",()=>{delete t.mediabunny,a.destroy()}),n}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F,A=Object.defineProperty,M=Object.defineProperties,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable,L=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),U=e=>{throw TypeError(e)},q=Math.pow,W=(e,t,i)=>t in e?A(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,H=(e,t)=>{for(var i in t||(t={}))O.call(t,i)&&W(e,i,t[i]);if(N)for(var i of N(t))z.call(t,i)&&W(e,i,t[i]);return e},V=(e,t)=>M(e,D(t)),j=(e,t,i)=>t.has(e)||U("Cannot "+i),K=(e,t,i)=>(j(e,t,"read from private field"),i?i.call(e):t.get(e)),X=(e,t,i)=>t.has(e)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),$=(e,t,i,r)=>(j(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),G=(e,t,i)=>(j(e,t,"access private method"),i),Q=(e,t,i,r)=>({set _(r){$(e,t,r,i)},get _(){return K(e,t,r)}}),Y=(e,t,i)=>new Promise((r,n)=>{var s=e=>{try{o(i.next(e))}catch(t){n(t)}},a=e=>{try{o(i.throw(e))}catch(t){n(t)}},o=e=>e.done?r(e.value):Promise.resolve(e.value).then(s,a);o((i=i.apply(e,t)).next())}),J=function(e,t){this[0]=e,this[1]=t},Z=(e,t,i)=>{var r,n=(e,t,r,s)=>{try{var a=i[e](t),o=(t=a.value)instanceof J,l=a.done;Promise.resolve(o?t[0]:t).then(i=>o?n("return"===e?e:"next",t[1]?{done:i.done,value:i.value}:i,r,s):r({value:i,done:l})).catch(e=>n("throw",e,r,s))}catch(c){s(c)}},s=(e,t,i,s)=>a[e]=a=>(t=new Promise((t,i,s)=>(s=()=>n(e,a,t,i),r?r.then(s):s())),s=()=>r===i&&(r=0),r=i=t.then(s,s),t),a={};return i=i.apply(e,t),a[L("asyncIterator")]=()=>a,s("next"),s("throw"),s("return"),a},ee=e=>{var t,i=e[L("asyncIterator")],r=!1,n={};return null==i?(i=e[L("iterator")](),t=e=>n[e]=t=>i[e](t)):(i=i.call(e),t=e=>n[e]=t=>{if(r){if(r=!1,"throw"===e)throw t;return t}return r=!0,{done:!1,value:new J(new Promise(r=>{var n=i[e](t);n instanceof Object||U("Object expected"),r(n)}),1)}}),n[L("iterator")]=()=>n,t("next"),"throw"in i?t("throw"):n.throw=e=>{throw e},"return"in i&&t("return"),n},te=(e,t,i)=>(t=e[L("asyncIterator")])?t.call(e):(e=e[L("iterator")](),t={},(i=(i,r)=>(r=e[i])&&(t[i]=t=>new Promise((i,n,s)=>(t=r.call(e,t),s=t.done,Promise.resolve(t.value).then(e=>i({value:e,done:s}),n)))))("next"),i("return"),t);function ie(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class re{constructor(){X(this,e,!1),this.listeners=new Map}addEventListener(t,i){var r;K(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),null==(r=this.listeners.get(t))||r.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){var r;if(K(this,e))return;const n=Object.assign(new Event(t),{detail:i});null==(r=this.listeners.get(t))||r.forEach(t=>{K(this,e)||t(n)})}destroy(){$(this,e,!0),this.listeners.clear()}}function ne(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const se=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},ae=e=>e&&e[e.length-1],oe=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-q(2,r))},ce=e=>{const t=oe(e);return 0===(1&t)?-(t>>1):t+1>>1},ue=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),de=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),he=new TextDecoder,fe=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),me={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},pe=fe(me),ge={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ke=fe(ge),ye={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},be=fe(ye),Te=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,ve={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},we=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class Se{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}acquire(){return Y(this,null,function*(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,yield i,e})}}const Pe=/^[0-9a-fA-F]+$/,Ie=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),xe=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,Ce=(e,t,i)=>{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+n>>1,o=i(e[a]);o===t?(s=a,n=a-1):o{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+(n-r+1)/2|0;i(e[a])<=t?(s=a,r=a+1):n=a-1}return s},Ee=(e,t,i)=>{const r=Be(e,i(t),i);e.splice(r+1,0,t)},_e=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},Re=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},Fe=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},Ae=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},Me=e=>{throw new Error(`Unexpected value: ${e}`)},De=(e,t,i)=>{const r=e.getUint8(t),n=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|n<<8|s<<16:r<<16|n<<8|s},Ne=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Oe=(e,t)=>({next(){return Y(this,null,function*(){const i=yield e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}})},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),ze=(e,t,i)=>Math.max(t,Math.min(i,e)),Le="und",Ue=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},qe=(e,t)=>Math.round(e/t)*t,We=(e,t)=>Math.round(e*t)/t,He=(e,t)=>Math.floor(e/t)*t,Ve=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},je=/^[a-z]{3}$/,Ke=e=>je.test(e),Xe=1e6*(1+Number.EPSILON),$e=(e,t)=>{const i=H(H({},e),t);if(e.headers||t.headers){const r=e.headers?Ge(e.headers):{},n=t.headers?Ge(t.headers):{},s=H({},r);Object.entries(n).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ge=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Qe=(e,t,i,r,n)=>Y(null,null,function*(){let s=0;for(;;)try{return yield e(t,i)}catch(a){if(n())throw a;s++;const e=r(s,a,t);if(null===e)throw a;if(vt._error("Retrying failed fetch. Error:",a),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&(yield kt(1e3*e)),n())throw a}});class Ye{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Je=null;const Ze=()=>{var e;return null!==Je?Je:Je=!("undefined"===typeof navigator||!((null==(e=navigator.vendor)?void 0:e.match(/apple/i))||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)))};let et=null;const tt=()=>{var e;return null!==et?et:et="undefined"!==typeof navigator&&(null==(e=navigator.userAgent)?void 0:e.includes("Firefox"))};let it=null;const rt=()=>{var e;return null!==it?it:it=!("undefined"===typeof navigator||!(null==(e=navigator.vendor)?void 0:e.includes("Google Inc"))&&!/Chrome/.test(navigator.userAgent))},nt=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,st=Y(null,null,function*(){}).constructor,at=e=>e instanceof st||e instanceof Promise||"function"===typeof(null==e?void 0:e.then),ot=(e,t)=>-1!==e?e:t,lt=(e,t,i,r)=>e<=r&&i<=t,ct=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{null!=Symbol.dispose||(Symbol.dispose=Symbol("Symbol.dispose"))},dt=e=>"number"===typeof e&&!Number.isNaN(e),ht=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const n=e.indexOf("/",r+3);i=-1===n?e+t:e.slice(0,n)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const n=i.indexOf("://");if(-1!==n){const e=i.indexOf("/",n+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),a=[];for(const o of s)".."===o?a.pop():"."!==o&&a.push(o);return r+a.join("/")},ft=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let n=0;n{ne(Number.isInteger(e.num)),ne(Number.isInteger(e.den)),ne(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},gt=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},kt=e=>new Promise(t=>setTimeout(t,e));class yt{constructor(){this._listeners=new Map}on(e,t,i){var r;this._listeners.has(e)||this._listeners.set(e,new Set);const n={fn:t,once:null!=(r=null==i?void 0:i.once)&&r};return this._listeners.get(e).add(n),()=>{var t;null==(t=this._listeners.get(e))||t.delete(n)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(n){console.error(n)}s.once&&r.delete(s)}}}var bt,Tt;(Tt=bt||(bt={}))[Tt.Silent=0]="Silent",Tt[Tt.Errors=1]="Errors",Tt[Tt.Warnings=2]="Warnings",Tt[Tt.Info=3]="Info";class vt{constructor(){}static get level(){return vt._level}static set level(e){if(e!==bt.Silent&&e!==bt.Errors&&e!==bt.Warnings&&e!==bt.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");vt._level=e}static get _emitter(){var e;return null!=(e=vt._emitterInstance)?e:vt._emitterInstance=new yt}static on(e,t,i){return vt._emitter.on(e,t,i)}static _error(...e){vt._emitter._emit("error",e),vt._level>=bt.Errors&&console.error(...e)}static _warn(...e){vt._emitter._emit("warn",e),vt._level>=bt.Warnings&&console.warn(...e)}static _info(...e){vt._emitter._emit("info",e),vt._level>=bt.Info&&console.info(...e)}}vt._level=bt.Info,vt._emitterInstance=null;class wt{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class St{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const Pt={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class It{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){var e;const t=Math.floor(this.pos/8),i=null!=(e=this.bytes[t])?e:0,r=7-(7&this.pos),n=(i&1<>r;return this.pos++,n}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){var e;if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const t=this.pos/8,i=null!=(e=this.bytes[t])?e:0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new It(this.bytes);return e.pos=this.pos,e}}const xt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ct=[-1,1,2,3,4,5,6,8],Bt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new It(e),i=Et(t),{frequencyIndex:r,sampleRate:n}=_t(t),s=t.readBits(4);let a=null;s>=1&&s<=7&&(a=Ct[s]);let o=i,l=!1,c=n;if(5===i||29===i)l=29===i,c=_t(t).sampleRate,o=Et(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===Et(t)&&t.readBits(1)&&(c=_t(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(l=!!t.readBits(1)));break}t.pos=e+1}return null!==a&&a>1&&(l=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:c,outputNumberOfChannels:l&&1===a?2:a}},Et=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},_t=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let n=0;t+3i&&(yield{offset:i,length:t-i}),i=t+n,t=i):t++}-1!==i&&i{if(t.description){const i=3&ue(t.description)[4];return zt(e,i+1)}return Ot(e)},Ut=e=>31&e,qt=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+Wt.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const n of e)i.set(Wt,r),r+=Wt.byteLength,i.set(n,r),r+=n.byteLength;return i},Vt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let n=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(n,s.byteLength);break;case 2:e.setUint16(n,s.byteLength,!1);break;case 3:Ne(e,n,s.byteLength);break;case 4:e.setUint32(n,s.byteLength,!1)}n+=t,r.set(s,n),n+=s.byteLength}return r},jt=e=>{try{const t=[],i=[],r=[];for(const o of Ot(e)){const n=e.subarray(o.offset,o.offset+o.length),s=Ut(n[0]);s===At.SPS?t.push(n):s===At.PPS?i.push(n):s===At.SPS_EXT&&r.push(n)}if(0===t.length)return null;if(0===i.length)return null;const n=t[0],s=Gt(n);ne(null!==s);const a=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?r:null}}catch(t){return vt._error("Error building AVC Decoder Configuration Record:",t),null}},Kt=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=de(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=t.getUint8(i++),a=t.getUint8(i++),o=3&t.getUint8(i++),l=31&t.getUint8(i++),c=[];for(let f=0;f{var t;try{const i=qt(e),r=new It(i);r.skipBits(1),r.skipBits(2);if(7!==r.readBits(5))return null;const n=r.readAlignedByte(),s=r.readAlignedByte(),a=r.readAlignedByte();oe(r);let o=1,l=0,c=0,u=0;if(100===n||110===n||122===n||244===n||44===n||83===n||86===n||118===n||128===n){o=oe(r),3===o&&(u=r.readBits(1)),l=oe(r),c=oe(r),r.skipBits(1);if(r.readBits(1))for(let e=0;e<(3!==o?8:12);e++){if(r.readBits(1)){const t=e<6?16:64;let i=8,n=8;for(let e=0;ee.level>=a))?t:ae(Ki),n=Math.min(Math.floor(r.maxDpbMbs/(e*i)),16);P=n,I=n}else P=0,I=0}return ne(null!==I),{emulationUnpreventedBytes:i,profileIdc:n,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:o,bitDepthLumaMinus8:l,bitDepthChromaMinus8:c,codedWidth:m,codedHeight:p,displayWidth:g,displayHeight:k,pixelAspectRatio:S,colourPrimaries:b,matrixCoefficients:v,transferCharacteristics:T,fullRangeFlag:w,numReorderFrames:P,maxDecFrameBuffering:I,vuiParametersFlagBitOffset:B,bitstreamRestrictionFlagBitOffset:x,bitstreamRestrictionFlag:C}}catch(i){return vt._error("Error parsing AVC SPS:",i),null}},Qt=e=>{const t=oe(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)oe(e),oe(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Yt=e=>{ne(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new It(e.emulationUnpreventedBytes),r=new It(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(ne(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),le(r,2),le(r,1),le(r,16),le(r,16),le(r,e.numReorderFrames),le(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const n=r.pos/8;return ne(Number.isInteger(n)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,n))},Jt=(e,t)=>{if(t.description){const i=3&ue(t.description)[21];return zt(e,i+1)}return Ot(e)},Zt=e=>e>>1&63,ei=e=>{try{const t=new It(qt(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:o,general_constraint_indicator_flags:l,general_level_idc:c}=ii(t,i);oe(t);const u=oe(t);let d=0;3===u&&(d=t.readBits(1));const h=oe(t),f=oe(t);let m=h,p=f;if(t.readBits(1)){const e=oe(t),i=oe(t),r=oe(t),n=oe(t);let s=1,a=1;const o=0===d?u:0;1===o?(s=2,a=2):2===o&&(s=2,a=1),m-=(e+i)*s,p-=(r+n)*a}const g=oe(t),k=oe(t);oe(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)oe(t),b=oe(t),oe(t);oe(t),oe(t),oe(t),oe(t),oe(t),oe(t),t.readBits(1)&&t.readBits(1)&&ri(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),oe(t),oe(t),t.skipBits(1));const T=oe(t);if(ni(t,T),t.readBits(1)){const e=oe(t);for(let i=0;i{try{const t=[],i=[],r=[],n=[];for(const l of Ot(e)){const s=e.subarray(l.offset,l.offset+l.length),a=Zt(s[0]);a===Dt.VPS_NUT?t.push(s):a===Dt.SPS_NUT?i.push(s):a===Dt.PPS_NUT?r.push(s):a!==Dt.PREFIX_SEI_NUT&&a!==Dt.SUFFIX_SEI_NUT||n.push(s)}if(0===i.length||0===r.length)return null;const s=ei(i[0]);if(!s)return null;let a=0;if(r.length>0){const e=r[0],t=new It(qt(e));t.skipBits(16),oe(t),oe(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),oe(t),oe(t),ce(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&oe(t),ce(t),ce(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),n=t.readBits(1);a=i||n?i&&!n?2:!i&&n?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:Dt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Dt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:Dt.PPS_NUT,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Zt(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return vt._error("Error building HEVC Decoder Configuration Record:",t),null}},ii=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),n=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=e.readBits(8);const o=e.readBits(8),l=[],c=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&ce(e);for(let t=0;t{const i=[];for(let r=0;r{var n;let s=0,a=0,o=0;if(0!==t&&(a=e.readBits(1)),a){if(t===i){o=t-(oe(e)+1)}else o=t-1;e.readBits(1),oe(e);const a=null!=(n=r[o])?n:0;for(let t=0;t<=a;t++){e.readBits(1)||e.readBits(1)}s=r[o]}else{const t=oe(e),i=oe(e);for(let r=0;r{let i=2,r=2,n=2,s=0,a=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=$t[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),n=e.readBits(8))),e.readBits(1)&&(oe(e),oe(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(oe(e),oe(e),oe(e),oe(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&oe(e),e.readBits(1)&&oi(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=oe(e),oe(e),oe(e),oe(e),oe(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},oi=(e,t,i)=>{let r=!1,n=!1,s=!1;r=1===e.readBits(1),n=1===e.readBits(1),(r||n)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let a=0;a<=i;a++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?oe(e):i=1===e.readBits(1);let a=1;if(!i){a=oe(e)+1}r&&li(e,a,s),n&&li(e,a,s)}},li=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=ci.audAllowed;for(const s of Jt(e,t)){if(r===ci.noMoreDataAllowed){i.add(s.offset);continue}const t=Zt(e[s.offset]);if(r===ci.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let n=!1;35===t?r>ci.audAllowed?n=!0:r=ci.beforeFirstVcl:t<=31?r>ci.afterFirstVcl?n=!0:r=ci.afterFirstVcl:36===t?r!==ci.afterFirstVcl?n=!0:r=ci.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>ci.beforeFirstVcl?n=!0:r=ci.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&ue(t.description)[21];return Vt(e,i+1)}return Ht(e)})(n,t)},hi={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},fi=e=>{var t,i,r;const n=new It(e);if(2!==n.readBits(2))return null;const s=n.readBits(1),a=(n.readBits(1)<<1)+s;3===a&&n.skipBits(1);if(1===n.readBits(1))return null;if(0!==n.readBits(1))return null;n.skipBits(2);if(4817730!==n.readBits(24))return null;let o=8;if(a>=2){o=n.readBits(1)?12:10}const l=n.readBits(3);let c=0,u=0;if(7!==l){if(u=n.readBits(1),1===a||3===a){const e=n.readBits(1),t=n.readBits(1);c=e||t?e&&!t?2:1:3,n.skipBits(1)}else c=1}else c=3,u=1;const d=(n.readBits(16)+1)*(n.readBits(16)+1);let h=ae(Xi).level;for(const m of Xi)if(d<=m.maxPictureSize){h=m.level;break}const f=hi[l];return{profile:a,level:h,bitDepth:o,chromaSubsampling:c,videoFullRangeFlag:u,colourPrimaries:null!=(t=null==f?void 0:f.colourPrimaries)?t:2,transferCharacteristics:null!=(i=null==f?void 0:f.transferCharacteristics)?i:2,matrixCoefficients:null!=(r=null==f?void 0:f.matrixCoefficients)?r:2}},mi=function*(e){const t=new It(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*q(2,7*i),!(128&r))break;if(7===i&&128&r)return null}return e>q(2,32)-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),n=t.readBits(1),s=t.readBits(1);let a;if(t.skipBits(1),n&&t.skipBits(8),s){const e=i();if(null===e)return;a=e}else a=Math.floor(t.getBitsLeft()/8);ne(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+a)},t.skipBits(8*a)}},pi=e=>{for(const{type:t,data:i}of mi(e)){if(1!==t)continue;const e=new It(i),r=e.readBits(3);e.readBits(1);const n=e.readBits(1);let s=0,a=0,o=0;if(n)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let n=0;n<=r;n++){e.skipBits(12);const r=e.readBits(5);if(0===n&&(s=r),r>7){const t=e.readBits(1);0===n&&(a=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const l=e.readBits(4),c=e.readBits(4),u=l+1;e.skipBits(u);const d=c+1;e.skipBits(d);let h=0;if(h=n?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!n){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,T=1,v=1,w=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,T=0,v=0):(b=e.readBits(1),0===r?(T=1,v=1):1===r?(T=0,v=0):12===m?(T=e.readBits(1),v=T?e.readBits(1):0):(T=1,v=0),T&&v&&(w=e.readBits(2))),{profile:r,level:s,tier:a,bitDepth:m,monochrome:p,chromaSubsamplingX:T,chromaSubsamplingY:v,chromaSamplePosition:w,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},gi=e=>{if(e.length<36)return null;const t=de(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ki=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],yi=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){n=r.pos;break}if(0===n)throw new Error("Invalid Setup header: framing bit not found.");let s=0,a=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),n=r.readBits(16);if(t>63||0!==i||0!==n){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(a=!0,o=s)}if(!a)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const l=o;r.pos=0,r.skipBits(n);const c=Array(l).fill(0);for(let u=l-1;u>=0;u--)r.skipBits(40),c[u]=r.readBits(1);return{modeBlockflags:c}},bi=(e,t,i)=>{switch(e){case"avc":for(const e of Lt(i,t)){const t=i[e.offset],r=Ut(t);if(r>=At.NON_IDR_SLICE&&r<=At.SLICE_DPC)return"delta";if(r===At.IDR)return"key";if(r===At.SEI&&!rt()){const t=i.subarray(e.offset,e.offset+e.length),r=qt(t);let n=1;do{let e=0;for(;;){const t=r[n++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[n++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new It(r);e.pos=8*n;const t=oe(e),i=e.readBits(1);if(0===t&&1===i)return"key"}n+=t}while(n{var i,r;const n=de(e);let s=0;const a=n.getUint32(s,!0);s+=4;const o=he.decode(e.subarray(s,s+a));s+=a,a>0&&(null!=t.raw||(t.raw={}),null!=(i=t.raw).vendor||(i.vendor=o));const l=n.getUint32(s,!0);s+=4;for(let c=0;c0&&(null!=t.trackNumber||(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.tracksTotal||(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.tracksTotal||(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=c.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=t.discNumber||(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.discsTotal||(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.discsTotal||(t.discsTotal=e))}break;case"DATE":{const e=new Date(c);Number.isNaN(e.getTime())||null!=t.date||(t.date=e)}break;case"GENRE":null!=t.genre||(t.genre=c);break;case"METADATA_BLOCK_PICTURE":{const e=ct(c),i=de(e),r=i.getUint32(0,!1),n=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+n)),a=i.getUint32(8+n,!1),o=he.decode(e.subarray(12+n,12+n+a)),l=i.getUint32(n+a+28),u=e.subarray(n+a+32,n+a+32+l);null!=t.images||(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},Si=[2,1,2,3,3,4,4,5],Pi=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new It(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),n=t.readBits(5);if(n>8)return null;const s=t.readBits(3),a=t.readBits(3);0!==(1&a)&&1!==a&&t.skipBits(2),0!==(4&a)&&t.skipBits(2),2===a&&t.skipBits(2);return{fscod:i,bsid:n,bsmod:s,acmod:a,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},Ii=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],xi=[1,2,3,6],Ci=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new It(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),n=t.readBits(2);let s,a=0;3===n?(a=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),l=t.readBits(1),c=t.readBits(5);if(c<11||c>16)return null;const u=xi[s];let d;d=n<3?Rt[n]/1e3:Ft[a]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:n,fscod2:a,bsid:c,bsmod:0,acmod:o,lfeon:l,numDepSub:0,chanLoc:0}]}},Bi=e=>{const t=e.substreams[0];return ne(t),t.fscod<3?Rt[t.fscod]:null!==t.fscod2&&t.fscod2<3?Ft[t.fscod2]:null},Ei=e=>{const t=e.substreams[0];ne(t);let i=Si[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},_i=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],Ri=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],Fi=[16,16,20,20,0,24,24,0],Ai=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],Mi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],Di=[32e3,44100,48e3,0],Ni=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Oi=[512,1024,2048,4096],zi=e=>{const t=Ui(e),i=de(e);let r=t?4*Math.ceil(t.frameSize/4):0,n=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=qi(e.subarray(r));if(!t)break;null!=n||(n=t),r+=t.frameSize}if(t)return{frameSize:n?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==n};if(!(null==n?void 0:n.asset))return null;const{asset:s}=n;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},Li=e=>{const t=zi(e);return(null==t?void 0:t.core)?t.hasExtensions?"dtsh":"dtsc":null},Ui=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new It(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const n=t.readBits(14)+1;if(n<96)return null;const s=t.readBits(6);if(s>=Ai.length)return null;const a=_i[t.readBits(4)];if(0===a)return null;const o=Ri[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const l=t.readBits(2);if(3===l)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const c=Fi[t.readBits(3)];if(0===c)return null;const u=0!==l;return{frameSize:n,sampleRate:a,numberOfChannels:Ai[s]+(u?1:0),sampleCount:32*r,channelLayout:Mi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:c}},qi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new It(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),n=8+4*r,s=16+4*r;t.skipBits(n);const a=t.readBits(s)+1,o={frameSize:a,asset:null};if(!t.readBits(1))return o;const l=Di[t.readBits(2)],c=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===l||t.getBitsLeft()<0?o:{frameSize:a,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(c*m/l),channelLayout:g,pcmResolution:f}}},Wi=e=>Ve(e)+Ve(44646&e),Hi=["avc","hevc","vp9","av1","vp8","prores"],Vi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],ji=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Vi],Ki=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Xi=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],$i=".01.01.01.01.00",Gi=".0.110.01.01.01.0",Qi=["ap4x","ap4h","apch","apcn","apcs","apco"],Yi=["dtsc","dtsh","dtsl","dtse"],Ji=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:o,proresFormat:l}=e;if("avc"===t){if(ne(null!==e.avcType),n){const t=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${e.avcType}.${Ie(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Ie(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,n,a,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=xe(s.generalProfileCompatibilityFlags),n=s.generalTierFlag,a=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=de(i),l=s.getUint8(1);e=l>>6&3,t=31&l,r=xe(s.getUint32(2)),n=l>>5&1,a=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let l="hev1.";for(l+=["","A","B","C"][e]+t,l+=".",l+=r.toString(16).toUpperCase(),l+=".",l+=0===n?"L":"H",l+=a;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(l+=".",l+=o.map(e=>e.toString(16).toUpperCase()).join(".")),l}if("vp8"===t)return"vp8";if("vp9"===t){if(!a){const t=e.width*e.height;let i=ae(Xi).level;for(const e of Xi)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${a.profile.toString().padStart(2,"0")}.${a.level.toString().padStart(2,"0")}.${a.bitDepth.toString().padStart(2,"0")}.${a.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${a.colourPrimaries.toString().padStart(2,"0")}.${a.transferCharacteristics.toString().padStart(2,"0")}.${a.matrixCoefficients.toString().padStart(2,"0")}.${a.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith($i)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=ae(Xi).level;for(const e of Xi)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),n=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),a=o.monochrome?"1":"0",l=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),c=(null==r?void 0:r.primaries)?me[r.primaries]:1,u=(null==r?void 0:r.transfer)?ge[r.transfer]:1,d=(null==r?void 0:r.matrix)?ye[r.matrix]:1,h=(null==r?void 0:r.fullRange)?1:0;let f=`av01.${t}.${i}${n}.${s}`;return f+=`.${a}.${l.toString().padStart(3,"0")}`,f+=`.${c.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(Gi)&&(f=f.slice(0,-17)),f}if("prores"===t)return null!=l?l:"apch";throw null!==t&&Me(t),new TypeError(`Unhandled codec '${t}'.`)},Zi=e=>{var t,i,r,n,s,a;switch(e.codec){case"avc":{let r=null==(t=e.avcCodecInfo)?void 0:t.sequenceParameterSets[0];if(!r&&e.codecDescription&&(r=null==(i=Xt(e.codecDescription))?void 0:i.sequenceParameterSets[0]),r){const e=Gt(r);if(e)return{primaries:pe[e.colourPrimaries],transfer:ke[e.transferCharacteristics],matrix:be[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=null==(n=null==(r=e.hevcCodecInfo)?void 0:r.arrays.find(e=>e.nalUnitType===Dt.SPS_NUT))?void 0:n.nalUnits[0];if(!t&&e.codecDescription&&(t=null==(a=null==(s=(e=>{try{const t=de(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=n>>6&3,a=n>>5&1,o=31&n,l=t.getUint32(i,!1);i+=4;const c=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,T=k>>2&1,v=3&k,w=t.getUint8(i++),S=[];for(let P=0;P>7&1,s=63&r,a=t.getUint16(i,!1);i+=2;const o=[];for(let l=0;le.nalUnitType===Dt.SPS_NUT))?void 0:a.nalUnits[0]),t){const e=ei(t);if(e)return{primaries:pe[e.colourPrimaries],transfer:ke[e.transferCharacteristics],matrix:be[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:pe[e.vp9CodecInfo.colourPrimaries],transfer:ke[e.vp9CodecInfo.transferCharacteristics],matrix:be[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:pe[e.av1CodecInfo.colourPrimaries],transfer:ke[e.av1CodecInfo.transferCharacteristics],matrix:be[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:pe[e.proresCodecInfo.colourPrimaries],transfer:ke[e.proresCodecInfo.transferCharacteristics],matrix:be[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},er=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:n}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=Bt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return null!=n?n:"dtsc";if(t&&Vi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},tr=48e3,ir=/^pcm-([usf])(\d+)(be)?$/,rr=e=>{if(ne(Vi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=ir.exec(e);let i;ne(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?q(2,7):0}},nr=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Qi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Yi.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":ir.test(e)?e:"webvtt"===e?"webvtt":null,sr=[44100,48e3,32e3],ar=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],or=1483304551,lr=1231971951,cr=(e,t)=>3===e?3===t?21:36:3===t?13:21,ur=(e,t)=>{const i=e>>>24,r=e>>>16&255,n=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==n&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let a=0,o=0;16&r?a=8&r?0:1:(a=1,o=1);const l=r>>3&3,c=r>>1&3,u=(n>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=ar[16*a*4+16*c+(n>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=sr[u]>>a+o,b=((e,t,i,r,n)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var hr,fr;(fr=hr||(hr={}))[fr.FrameCount=1]="FrameCount",fr[fr.FileSize=2]="FileSize",fr[fr.Toc=4]="Toc";const mr=e=>3===e?1:2;class pr{constructor(e){this.input=e}dispose(){}}const gr=new Uint8Array(0);class kr{constructor(e,t,i,r,n=-1,s,a){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=n,e===gr&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(n))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==a&&("object"!==typeof a||!a))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==(null==a?void 0:a.alpha)&&!(a.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==(null==a?void 0:a.alphaByteLength)&&(!Number.isInteger(a.alphaByteLength)||a.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=null!=a?a:{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===gr}get microsecondTimestamp(){return Math.trunc(Xe*this.timestamp)}get microsecondDuration(){return Math.trunc(Xe*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){var i;if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const r=new Uint8Array(e.byteLength);return e.copyTo(r),new kr(r,e.type,e.timestamp/1e6,(null!=(i=e.duration)?i:0)/1e6,void 0,void 0,t)}clone(e){var t,i,r,n,s,a;if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==(null==e?void 0:e.data)&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==(null==e?void 0:e.type)&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==(null==e?void 0:e.timestamp)&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==(null==e?void 0:e.duration)&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sequenceNumber)&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sideData)&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new kr(null!=(t=null==e?void 0:e.data)?t:this.data,null!=(i=null==e?void 0:e.type)?i:this.type,null!=(r=null==e?void 0:e.timestamp)?r:this.timestamp,null!=(n=null==e?void 0:e.duration)?n:this.duration,null!=(s=null==e?void 0:e.sequenceNumber)?s:this.sequenceNumber,this.byteLength,null!=(a=null==e?void 0:e.sideData)?a:this.sideData)}}const yr=e=>{const t=de(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const n=Ie(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=Pl(e);const i=Al(e,4);let r=8;1===t&&(t=Bl(e),r=16);const n=t-r;return n<0?null:{name:i,totalSize:t,headerSize:r,contentSize:n}},vr=e=>xl(e)/65536,wr=e=>xl(e)/1073741824,Sr=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=yl(e);if(t|=127&i,0===(128&i))break}return t},Pr=e=>{let t=Tl(e);return e.skip(2),t=Math.min(t,e.remainingLength),he.decode(kl(e,t))},Ir=e=>{const t=Tr(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=Pl(e);e.skip(4);const r=kl(e,t.contentSize-8);switch(i){case 1:return he.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new wt(r,"image/jpeg");case 14:return new wt(r,"image/png");case 27:return new wt(r,"image/bmp");default:return r}},xr=16,Cr=new Uint32Array(256),Br=new Uint32Array(256),Er=new Uint32Array(256),_r=new Uint32Array(256),Rr=new Uint32Array(256),Fr=new Uint32Array(256),Ar=new Uint32Array(10);let Mr=!1;class Dr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(xr/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(xr),this.out=new Uint8Array(xr),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){ne(16===e.byteLength),ne(16===t.byteLength),Mr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,a=1;s<256;s++)i[s]=a,t[a]=s,a=a^a<<1^(128&a?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let n=r^r<<1^r<<2^r<<3^r<<4;n=n>>>8^255&n^99,e[s]=n}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);Cr[s]=t<<24|t<<16|t<<8|t,Fr[s]=i<<24|i<<16|i<<8|i;const n=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);Br[s]=n,Er[s]=n>>>8|n<<24,_r[s]=n>>>16|n<<16,Rr[s]=n>>>24|n<<8}let n=1;for(let s=0;s<10;s++)Ar[s]=n<<24,n=n<<1^(128&n?283:0);Mr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let n=4;n<44;n+=4){const e=this.roundkey[n-1];this.roundkey[n]=this.roundkey[n-4]^4278190080&Cr[e>>>16&255]^16711680&Cr[e>>>8&255]^65280&Cr[e>>>0&255]^255&Cr[e>>>24&255]^Ar[n/4-1],this.roundkey[n+1]=this.roundkey[n-3]^this.roundkey[n],this.roundkey[n+2]=this.roundkey[n-2]^this.roundkey[n+1],this.roundkey[n+3]=this.roundkey[n-1]^this.roundkey[n+2]}for(let n=0,s=40;n>>24&255]]^Er[255&Cr[t>>>16&255]]^_r[255&Cr[t>>>8&255]]^Rr[255&Cr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const n=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),a=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let l,c,u,d;for(let g=1;g<10;g++){const n=4*g;l=Br[e>>>24]^Er[r>>>16&255]^_r[i>>>8&255]^Rr[255&t]^this.roundkey[n],c=Br[t>>>24]^Er[e>>>16&255]^_r[r>>>8&255]^Rr[255&i]^this.roundkey[n+1],u=Br[i>>>24]^Er[t>>>16&255]^_r[e>>>8&255]^Rr[255&r]^this.roundkey[n+2],d=Br[r>>>24]^Er[i>>>16&255]^_r[t>>>8&255]^Rr[255&e]^this.roundkey[n+3],e=l,t=c,i=u,r=d}const h=4278190080&Fr[e>>>24&255]^16711680&Fr[r>>>16&255]^65280&Fr[i>>>8&255]^255&Fr[t>>>0&255]^this.roundkey[40],f=4278190080&Fr[t>>>24&255]^16711680&Fr[e>>>16&255]^65280&Fr[r>>>8&255]^255&Fr[i>>>0&255]^this.roundkey[41],m=4278190080&Fr[i>>>24&255]^16711680&Fr[t>>>16&255]^65280&Fr[e>>>8&255]^255&Fr[r>>>0&255]^this.roundkey[42],p=4278190080&Fr[r>>>24&255]^16711680&Fr[i>>>16&255]^65280&Fr[t>>>8&255]^255&Fr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=n,this.iv[1]=s,this.iv[2]=a,this.iv[3]=o}}class Nr extends pr{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.tracks.map(e=>e.trackBacking)})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)}),hasAudio:this.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)}),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(at(r)&&(r=yield r),!r)break;const n=e,s=Tr(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=Al(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(at(e)&&(e=yield e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>n+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');yield this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=n+s.totalSize}if(!i&&this.input._initInput&&(yield this.copyMetadataFromInitInput(this.input._initInput)),t){ne(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);at(e)&&(e=yield e),ne(e);const t=Pl(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(at(e)&&(e=yield e),e){const t=Tr(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);at(i)&&(i=yield i),i&&this.readContiguousBoxes(i)}}}}}))()}copyMetadataFromInitInput(e){return Y(this,null,function*(){const t=yield e._getDemuxer();if(t.constructor!==Nr)throw new Error("Init input must match the input's format.");yield t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const e of t.tracks){const t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};if(e.trackBacking)if(ne(t.info),"video"===t.info.type&&-1!==t.info.width){const e=t;t.trackBacking=new zr(e),this.tracks.push(t)}else if("audio"===t.info.type&&-1!==t.info.numberOfChannels){const e=t;t.trackBacking=new Lr(e),this.tracks.push(t)}}})}getSampleTableForTrack(e){var t,i;if(e.sampleTable)return e.sampleTable;const r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=r,null===e.sampleTableByteOffset)return r;ne(this.moovSlice);const n=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(n),this.currentTrack=null;if("audio"===(null==(t=e.info)?void 0:t.type)&&e.info.codec&&Vi.includes(e.info.codec)&&0===r.sampleCompositionTimeOffsets.length){ne("audio"===(null==(i=e.info)?void 0:i.type));const t=rr(e.info.codec),n=[],s=[];for(let i=0;ie.startIndex),u=r.sampleTimingEntries[c],d=Be(r.sampleTimingEntries,l,e=>e.startIndex),h=r.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(l-h.startIndex)*h.delta-f,p=ae(n);p&&p.delta===m?p.count++:n.push({startIndex:a.startChunkIndex+i,startDecodeTimestamp:f,count:1,delta:m});const g=a.samplesPerChunk*t.sampleSize*e.info.numberOfChannels;s.push(g)}a.startSampleIndex=a.startChunkIndex,a.samplesPerChunk=1}r.sampleTimingEntries=n,r.sampleSizes=s}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(const e of r.sampleTimingEntries)for(let t=0;te.presentationTimestamp-t.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===s.moofOffset);if(r)Vr(e,r.timestamp);else{const t=Be(i,s.moofOffset-1,e=>e.moofOffset);if(-1!==t){const r=i[t];Vr(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}const r=Be(i,e.startTimestamp,e=>e.startTimestamp);if(-1!==r&&i[r].moofOffset===s.moofOffset||i.splice(r+1,0,{moofOffset:s.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){const i=yield $r(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;Ke(t.languageCode)||(t.languageCode=Le)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=Al(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:H({},ve),avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=re,this.readContiguousBoxes(e.slice(le,oe.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=yl(e);e.skip(3);const r=Pl(e);for(let n=0;n0&&(1===a?(e.skip(4),l=8*Pl(e),e.skip(8)):2===a&&(e.skip(4),c=Fl(e),o=Pl(e),e.skip(4),l=Pl(e),u=Pl(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=c,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+n.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=tr;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(Yi.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(vt._warn(`Unsupported sample size ${l} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec="pcm-s16":(vt._warn(`Unsupported sample size ${l} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(vt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(vt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(vt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(vt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=l+7>>3,i=Boolean(1&u),r=Boolean(2&u),n=4&u?-1:0;l>0&&l<=64&&(i?32===l&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):n&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==yl(e),t.encryptionInfo.defaultPerSampleIvSize=yl(e),t.encryptionInfo.defaultKid=Ie(kl(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=yl(e),r=new Uint8Array(16);r.set(kl(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(ne(t.info),0===oe.contentSize)break;t.info.codecDescription=kl(e,oe.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(ne(t.info),0===oe.contentSize)break;t.info.codecDescription=kl(e,oe.contentSize)}break;case"vpcC":{const i=this.currentTrack;if(!i)break;ne("video"===(null==(t=i.info)?void 0:t.type)),e.skip(4);const r=yl(e),n=yl(e),s=yl(e),a=s>>4,o=s>>1&7,l=1&s,c=yl(e),u=yl(e),d=yl(e);i.info.vp9CodecInfo={profile:r,level:n,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:l,colourPrimaries:c,transferCharacteristics:u,matrixCoefficients:d}}break;case"av1C":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(i=t.info)?void 0:i.type)),e.skip(1);const o=yl(e),l=o>>5,c=31&o,u=yl(e),d=u>>7,h=u>>6&1,f=u>>4&1,m=u>>3&1,p=u>>2&1,g=3&u,k=2===l&&h?u>>5&1?12:10:h?10:8;e.skip(1);const y=kl(e,oe.contentSize-4),b=pi(y);t.info.av1CodecInfo={profile:l,level:c,tier:d,bitDepth:k,monochrome:f,chromaSubsamplingX:m,chromaSubsamplingY:p,chromaSamplePosition:g,videoFullRangeFlag:null!=(r=null==b?void 0:b.videoFullRangeFlag)?r:0,colourPrimaries:null!=(n=null==b?void 0:b.colourPrimaries)?n:2,transferCharacteristics:null!=(s=null==b?void 0:b.transferCharacteristics)?s:2,matrixCoefficients:null!=(a=null==b?void 0:b.matrixCoefficients)?a:2}}break;case"colr":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(o=t.info)?void 0:o.type));const i=Al(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=Tl(e),n=Tl(e),s=Tl(e);let a;"nclx"===i&&(a=Boolean(128&yl(e))),t.info.colorSpace={primaries:pe[r],transfer:ke[n],matrix:be[s],fullRange:a}}break;case"pasp":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(l=t.info)?void 0:l.type));const i=Pl(e),r=Pl(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==(null==(c=t.info)?void 0:c.type))break;e.skip(4);ne(3===yl(e)),Sr(e),e.skip(2);const i=yl(e),r=0!==(64&i),n=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=yl(e);e.skip(t)}n&&e.skip(2);ne(4===yl(e));const s=Sr(e),a=e.filePos,o=yl(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":vt._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-a){ne(5===yl(e));const i=Sr(e);if(t.info.codecDescription=kl(e,i),"aac"===t.info.codec){const e=Bt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(u=t.info)?void 0:u.type)),t.info.pcmLittleEndian=!!(255&Tl(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(d=t.info)?void 0:d.type)),e.skip(4);const i=yl(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=yl(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(h=t.info)?void 0:h.type)),e.skip(1);const i=yl(e),r=Tl(e),n=Pl(e),s=wl(e),a=yl(e);let o;o=0!==a?kl(e,2+i):new Uint8Array(0);const l=new Uint8Array(19+o.byteLength),c=new DataView(l.buffer);c.setUint32(0,1332770163,!1),c.setUint32(4,1214603620,!1),c.setUint8(8,1),c.setUint8(9,i),c.setUint16(10,r,!0),c.setUint32(12,n,!0),c.setInt16(16,s,!0),c.setUint8(18,a),l.set(o,19),t.info.codecDescription=l,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(f=t.info)?void 0:f.type)),e.skip(4);const i=127,r=128,n=e.filePos;for(;e.filePos>>12,n=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=n,e.skip(20)}else e.skip(s);if(n&r)break}const s=e.filePos;e.filePos=n;const a=kl(e,s-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(m=t.info)?void 0:m.type));const i=kl(e,3),r=new It(i),n=r.readBits(2);r.skipBits(8);const s=r.readBits(3),a=r.readBits(1);n<3&&(t.info.sampleRate=Rt[n]),t.info.numberOfChannels=Si[s]+a}break;case"dec3":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(p=t.info)?void 0:p.type));const i=(e=>{if(e.length<2)return null;const t=new It(e),i=t.readBits(13),r=t.readBits(3),n=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),a=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let l=0;o>0?l=t.readBits(9):t.skipBits(1),n.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:a,numDepSub:o,chanLoc:l})}return 0===n.length?null:{dataRate:i,substreams:n}})(kl(e,oe.contentSize));if(!i){vt._warn("Invalid dec3 box contents, ignoring.");break}const r=Bi(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=Ei(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(g=t.info)?void 0:g.type));const i=(e=>{if(e.length<20)return null;const t=de(e),i=t.getUint32(0);if(0===i)return null;const r=new It(e);r.seekToByte(13);const n=r.readBits(2);r.skipBits(5);const s=r.readBits(1),a=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let l=null;return 0!==o?l=Wi(o):ae.id===i);if(!r)break;const n=Pl(e),s=(12&n)>>2,a=3&n,o=[yl,Tl,vl,Pl],l=o[(48&n)>>4],c=o[s],u=o[a],d=Pl(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let n=0;ne.id===c);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===c);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:null!=(y=null==d?void 0:d.defaultSampleDescriptionIndex)?y:null,defaultSampleDuration:null!=(b=null==d?void 0:d.defaultSampleDuration)?b:null,defaultSampleSize:null!=(T=null==d?void 0:d.defaultSampleSize)?T:null,defaultSampleFlags:null!=(v=null==d?void 0:d.defaultSampleFlags)?v:null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=Bl(e):l&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=Pl(e)),n&&(u.currentFragmentState.defaultSampleDuration=Pl(e)),s&&(u.currentFragmentState.defaultSampleSize=Pl(e)),a&&(u.currentFragmentState.defaultSampleFlags=Pl(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;ne(t.currentFragmentState);const i=yl(e);e.skip(3);const r=0===i?Pl(e):Bl(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;ne(this.currentFragment),ne(t.currentFragmentState);const i=yl(e),r=vl(e),n=Boolean(1&r),s=Boolean(4&r),a=Boolean(256&r),o=Boolean(512&r),l=Boolean(1024&r),c=Boolean(2048&r),u=Pl(e);let d=null;n&&(d=xl(e));let h,f=null;s&&(f=Pl(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(null!=d?d:0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(n=kl(e,r));const s=Xr(t);s.defaultSampleInfoSize=i,s.sampleSizes=n,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=yl(e);if(1&vl(e)){const i=Al(e,4),r=Pl(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=Pl(e);if(0===r)break;r>1&&vt._warn("Multiple saio entries are not supported; using the first offset only.");let n=0===i?Pl(e):Number(Bl(e));this.currentFragment&&(n+=this.currentFragment.moofOffset);Xr(t).offset=n}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;ne(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=vl(e),n=Boolean(2&r),s=Pl(e),a=t.encryptionInfo.defaultPerSampleIvSize;ne(null!==a);for(let o=0;o0?r.set(kl(e,a),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(n){const t=Tl(e);s=[];for(let i=0;i0&&(null!=(Y=this.metadataTags).trackNumber||(Y.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(J=this.metadataTags).tracksTotal||(J.tracksTotal=i))}break;case"trkn":if(n instanceof Uint8Array&&n.length>=6){const e=de(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(Z=this.metadataTags).trackNumber||(Z.trackNumber=t)),i>0&&(null!=(ee=this.metadataTags).tracksTotal||(ee.tracksTotal=i))}break;case"disc":case"disk":if(n instanceof Uint8Array&&n.length>=6){const e=de(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(te=this.metadataTags).discNumber||(te.discNumber=t)),i>0&&(null!=(ie=this.metadataTags).discsTotal||(ie.discsTotal=i))}}}}}return e.filePos=ce,!0}}class Or{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){var e;const t=this.internalTrack;if(t.durationInMediaTimescale<=0)return null;ne(t.trackBacking);const i=yield t.trackBacking.getFirstPacket({metadataOnly:!0});return(null!=(e=null==i?void 0:i.timestamp)?e:0)+t.durationInMediaTimescale/t.timescale})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getFirstPacket(e){return Y(this,null,function*(){const t=yield this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)})}mapTimestampIntoTimescale(e){return Ue(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}getPacket(e,t){return Y(this,null,function*(){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Ur(r,i),s=yield this.fetchPacketForSampleIndex(n,t);return Kr(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Be(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Ae(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return ne(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)})}fetchPacketForSampleIndex(e,t){return Y(this,null,function*(){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=Wr(i,e);if(!r)return null;let n;if(t.metadataOnly)n=gr;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(at(t)&&(t=yield t),!t)return null;if(n=kl(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=yield $r(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),f=-1!==h?this.internalTrack.fragmentLookupTable[h]:null,m=Be(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),p=-1!==m?this.internalTrack.fragmentPositionCache[m]:null,g=Math.max(null!=(s=null==f?void 0:f.moofOffset)?s:0,null!=(a=null==p?void 0:p.moofOffset)?a:0)||null;let k;for(e?null===g||e.moofOffset>=g?(k=e.moofOffset+e.moofSize,c=e):k=g:k=null!=g?g:0;;){if(c){const e=c.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=l.reader.requestSliceRange(k,8,16);if(at(e)&&(e=yield e),!e)break;const i=k,s=Tr(e);if(!s)break;if("moof"===s.name){c=yield l.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(c);if(r)return this.fetchPacketInFragment(c,e,n);-1!==e&&(u=c,d=e)}k=i+s.totalSize}if(f&&(!u||u.moofOffsetY(this,null,function*(){var e,t,i,r,n,s,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=yield this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&gi(e.data)}}else{const e=yield this.getFirstPacket({}),t=e&&pi(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const t=yield this.getFirstPacket({}),i=t&&fi(t.data);i&&(this.internalTrack.info.vp9CodecInfo=V(H({},null!=(e=this.internalTrack.info.vp9CodecInfo)?e:i),{videoFullRangeFlag:i.videoFullRangeFlag,colourPrimaries:i.colourPrimaries,transferCharacteristics:i.transferCharacteristics,matrixCoefficients:i.matrixCoefficients}))}else{const e=yield this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&ti(e.data)}else{const e=yield this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&jt(e.data)}if(!Te(this.internalTrack.info.colorSpace)){const e=Zi(this.internalTrack.info);null!=(t=this.internalTrack.info.colorSpace).primaries||(t.primaries=e.primaries),null!=(i=this.internalTrack.info.colorSpace).transfer||(i.transfer=e.transfer),null!=(r=this.internalTrack.info.colorSpace).matrix||(r.matrix=e.matrix),null!=(n=this.internalTrack.info.colorSpace).fullRange||(n.fullRange=e.fullRange)}const o={codec:Ji(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(s=this.internalTrack.info.codecDescription)?s:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Lr extends Or{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>Y(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&Li(e.data)}return{codec:er(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Ur=(e,t)=>{if(e.presentationTimestamps){const i=Be(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=Be(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},qr=(e,t)=>{var i;if(!e.keySampleIndices)return Ur(e,t);if(e.presentationTimestamps){const i=Be(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==Ce(e.keySampleIndices,i,e=>e))return i}return-1}{const r=Ur(e,t),n=Be(e.keySampleIndices,r,e=>e);return null!=(i=e.keySampleIndices[n])?i:-1}},Wr=(e,t)=>{const i=Be(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let n=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=Be(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),a=e.sampleCompositionTimeOffsets[s];a&&t-a.startIndexe.startSampleIndex),c=e.sampleToChunk[l];ne(c);const u=c.startChunkIndex+Math.floor((t-c.startSampleIndex)/c.samplesPerChunk),d=e.chunkOffsets[u],h=c.startSampleIndex+(u-c.startChunkIndex)*c.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*c.samplesPerChunk;else for(let g=h;ge)}},Hr=(e,t)=>{var i;if(!e.keySampleIndices)return t+1;const r=Be(e.keySampleIndices,t,e=>e);return null!=(i=e.keySampleIndices[r+1])?i:-1},Vr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},jr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},Kr=e=>0===e.sampleSizes.length,Xr=e=>{var t,i,r;return e.currentFragmentState?null!=(i=(t=e.currentFragmentState).encryptionAuxInfo)?i:t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:null!=(r=e.encryptionAuxInfo)?r:e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}},$r=(e,t,i)=>Y(null,null,function*(){if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{ne(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[e],o=new Uint8Array(16);s>0?o.set(kl(n,s),0):o.set(t.defaultConstantIv,0);let l=null;if(r>s){const e=Tl(n);l=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Qr=(e,t,i,r)=>Y(null,null,function*(){var n;ne(e.encryptionInfo);const s=e.encryptionInfo;ne(null!==s.defaultKid);const a=s.defaultKid;let o;const l=e.demuxer.decryptionKeyCache.get(a);if(l)o=yield l;else{if(!(null==(n=e.demuxer.input._formatOptions.isobmff)?void 0:n.resolveKeyId))throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=Y(null,null,function*(){let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(a));for(let e=0;e{ne(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;iY(null,null,function*(){const n=new Uint8Array(16);n.set(i.iv,0);const s=yield crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),a=e=>Y(null,null,function*(){const t=yield crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},s,e);return new Uint8Array(t)});if(!i.subsamples)return a(r);ne(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Zr(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let l=0;for(const e of o)for(const t of e.perSubsample)l+=t.length;const c=new Uint8Array(l);let u=0;for(const e of o)for(const t of e.perSubsample)c.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;const d=yield a(c),h=new Uint8Array(r);let f=0;for(const e of o)for(const t of e.perSubsample)h.set(d.subarray(f,f+t.length),t.offset),f+=t.length;return h}),Jr=(e,t,i,r)=>{const n=new Dr;n.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,a=t.defaultSkipByteBlock;if(ne(null!==s&&null!==a),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],n=0!==t||0!==i;let s=0;for(const a of e){s+=a.clearLen;const e=[];if(n){let r=a.protectedLen,n=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:n,length:s}),n+=s,r-=s;const a=Math.min(16*i,r);n+=a,r-=a}s+=a.protectedLen}else a.protectedLen>0&&e.push({offset:s,length:a.protectedLen}),s+=a.protectedLen;r.push({perSubsample:e})}return r};var en,tn;(tn=en||(en={}))[tn.EBML=440786851]="EBML",tn[tn.EBMLVersion=17030]="EBMLVersion",tn[tn.EBMLReadVersion=17143]="EBMLReadVersion",tn[tn.EBMLMaxIDLength=17138]="EBMLMaxIDLength",tn[tn.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",tn[tn.DocType=17026]="DocType",tn[tn.DocTypeVersion=17031]="DocTypeVersion",tn[tn.DocTypeReadVersion=17029]="DocTypeReadVersion",tn[tn.Void=236]="Void",tn[tn.Segment=408125543]="Segment",tn[tn.SeekHead=290298740]="SeekHead",tn[tn.Seek=19899]="Seek",tn[tn.SeekID=21419]="SeekID",tn[tn.SeekPosition=21420]="SeekPosition",tn[tn.Duration=17545]="Duration",tn[tn.Info=357149030]="Info",tn[tn.TimestampScale=2807729]="TimestampScale",tn[tn.MuxingApp=19840]="MuxingApp",tn[tn.WritingApp=22337]="WritingApp",tn[tn.Tracks=374648427]="Tracks",tn[tn.TrackEntry=174]="TrackEntry",tn[tn.TrackNumber=215]="TrackNumber",tn[tn.TrackUID=29637]="TrackUID",tn[tn.TrackType=131]="TrackType",tn[tn.FlagEnabled=185]="FlagEnabled",tn[tn.FlagDefault=136]="FlagDefault",tn[tn.FlagForced=21930]="FlagForced",tn[tn.FlagOriginal=21934]="FlagOriginal",tn[tn.FlagHearingImpaired=21931]="FlagHearingImpaired",tn[tn.FlagVisualImpaired=21932]="FlagVisualImpaired",tn[tn.FlagCommentary=21935]="FlagCommentary",tn[tn.FlagLacing=156]="FlagLacing",tn[tn.Name=21358]="Name",tn[tn.Language=2274716]="Language",tn[tn.LanguageBCP47=2274717]="LanguageBCP47",tn[tn.CodecID=134]="CodecID",tn[tn.CodecPrivate=25506]="CodecPrivate",tn[tn.CodecDelay=22186]="CodecDelay",tn[tn.SeekPreRoll=22203]="SeekPreRoll",tn[tn.DefaultDuration=2352003]="DefaultDuration",tn[tn.Video=224]="Video",tn[tn.PixelWidth=176]="PixelWidth",tn[tn.PixelHeight=186]="PixelHeight",tn[tn.DisplayWidth=21680]="DisplayWidth",tn[tn.DisplayHeight=21690]="DisplayHeight",tn[tn.DisplayUnit=21682]="DisplayUnit",tn[tn.AlphaMode=21440]="AlphaMode",tn[tn.Audio=225]="Audio",tn[tn.SamplingFrequency=181]="SamplingFrequency",tn[tn.Channels=159]="Channels",tn[tn.BitDepth=25188]="BitDepth",tn[tn.SimpleBlock=163]="SimpleBlock",tn[tn.BlockGroup=160]="BlockGroup",tn[tn.Block=161]="Block",tn[tn.BlockAdditions=30113]="BlockAdditions",tn[tn.BlockMore=166]="BlockMore",tn[tn.BlockAdditional=165]="BlockAdditional",tn[tn.BlockAddID=238]="BlockAddID",tn[tn.BlockDuration=155]="BlockDuration",tn[tn.ReferenceBlock=251]="ReferenceBlock",tn[tn.Cluster=524531317]="Cluster",tn[tn.Timestamp=231]="Timestamp",tn[tn.Cues=475249515]="Cues",tn[tn.CuePoint=187]="CuePoint",tn[tn.CueTime=179]="CueTime",tn[tn.CueTrackPositions=183]="CueTrackPositions",tn[tn.CueTrack=247]="CueTrack",tn[tn.CueClusterPosition=241]="CueClusterPosition",tn[tn.Colour=21936]="Colour",tn[tn.MatrixCoefficients=21937]="MatrixCoefficients",tn[tn.TransferCharacteristics=21946]="TransferCharacteristics",tn[tn.Primaries=21947]="Primaries",tn[tn.Range=21945]="Range",tn[tn.Projection=30320]="Projection",tn[tn.ProjectionType=30321]="ProjectionType",tn[tn.ProjectionPoseRoll=30325]="ProjectionPoseRoll",tn[tn.Attachments=423732329]="Attachments",tn[tn.AttachedFile=24999]="AttachedFile",tn[tn.FileDescription=18046]="FileDescription",tn[tn.FileName=18030]="FileName",tn[tn.FileMediaType=18016]="FileMediaType",tn[tn.FileData=18012]="FileData",tn[tn.FileUID=18094]="FileUID",tn[tn.Chapters=272869232]="Chapters",tn[tn.Tags=307544935]="Tags",tn[tn.Tag=29555]="Tag",tn[tn.Targets=25536]="Targets",tn[tn.TargetTypeValue=26826]="TargetTypeValue",tn[tn.TargetType=25546]="TargetType",tn[tn.TagTrackUID=25541]="TagTrackUID",tn[tn.TagEditionUID=25545]="TagEditionUID",tn[tn.TagChapterUID=25540]="TagChapterUID",tn[tn.TagAttachmentUID=25542]="TagAttachmentUID",tn[tn.SimpleTag=26568]="SimpleTag",tn[tn.TagName=17827]="TagName",tn[tn.TagLanguage=17530]="TagLanguage",tn[tn.TagString=17543]="TagString",tn[tn.TagBinary=17541]="TagBinary",tn[tn.ContentEncodings=28032]="ContentEncodings",tn[tn.ContentEncoding=25152]="ContentEncoding",tn[tn.ContentEncodingOrder=20529]="ContentEncodingOrder",tn[tn.ContentEncodingScope=20530]="ContentEncodingScope",tn[tn.ContentCompression=20532]="ContentCompression",tn[tn.ContentCompAlgo=16980]="ContentCompAlgo",tn[tn.ContentCompSettings=16981]="ContentCompSettings",tn[tn.ContentEncryption=20533]="ContentEncryption";const rn=[en.EBML,en.Segment],nn=[en.SeekHead,en.Info,en.Cluster,en.Tracks,en.Cues,en.Attachments,en.Chapters,en.Tags],sn=[...rn,...nn],an=16,on=e=>{if(e.remainingLength<1)return null;const t=yl(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=yl(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=on(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===yl(e))return;e.skip(-1);const t=ln(e);return null===t?null:72057594037927940!==t?t:void 0},hn=e=>{ne(e.remainingLength>=2);const t=un(e);if(null===t)return null;const i=dn(e);return null===i?null:{id:t,size:i}},fn=(e,t)=>{const i=kl(e,t);let r=0;for(;r{const i=kl(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?Rl(e):Fl(e)},gn=(e,t,i,r)=>Y(null,null,function*(){const n=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}}),kn=(e,t,i,r)=>Y(null,null,function*(){const n=q(2,16),s=new Set(i);let a=t;for(;ae.tracks.map(e=>e.trackBacking))})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)})),hasAudio:this.segments.some(e=>e.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)})),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return Y(this,null,function*(){yield this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&(yield this.loadSegmentMetadata(t)),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e=H(H({},e),t.metadataTags);return e})}readMetadata(){var e;return null!=(e=this.readMetadataPromise)?e:this.readMetadataPromise=(()=>Y(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,an);if(at(t)&&(t=yield t),!t)break;const i=hn(t);if(!i)break;const r=i.id;let n=i.size;const s=t.filePos;if(r===en.EBML){Fn(n);let e=this.reader.requestSlice(s,n);if(at(e)&&(e=yield e),!e)break;this.readContiguousElements(e)}else if(r===en.Segment){if(yield this.readSegment(s,n),void 0===n)break;if(null===this.reader.fileSize)break}else if(r===en.Cluster){if(null===this.reader.fileSize)break;if(void 0===n){n=(yield gn(this.reader,s,sn,this.reader.fileSize)).pos-s}const e=ae(this.segments);e&&(e.elementEndPos=s+n)}Fn(n),e=s+n}}))()}readSegment(e,t){return Y(this,null,function*(){var i;this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let r=e;for(;null===this.currentSegment.elementEndPos||re.id===s);if(-1!==l){const e=Ln[l].flag;this.currentSegment[e]=!0,Fn(a);let t=this.reader.requestSlice(o,a);at(t)&&(t=yield t),t&&this.readContiguousElements(t)}else if(s===en.Tags||s===en.Attachments){s===en.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,Fn(a);let e=this.reader.requestSlice(o,a);at(e)&&(e=yield e),e&&this.readContiguousElements(e)}else if(s===en.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===a)break;r=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const t of this.currentSegment.seekEntries){const i=Ln.find(e=>e.id===t.id);if(!i)continue;if(this.currentSegment[i.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,2,an);if(at(r)&&(r=yield r),!r)continue;const n=hn(r);if(!n)continue;const{id:s,size:a}=n;if(s!==i.id)continue;Fn(a),this.currentSegment[i.flag]=!0;let o=this.reader.requestSlice(r.filePos,a);at(o)&&(o=yield o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const e of this.currentSegment.tracks)null!==e.defaultDurationNs&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);const n=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const e of this.currentSegment.cuePoints){const t=n.get(e.trackId);t&&t.cuePoints.push(e)}for(const e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;ta&&(a=e.cuePoints.length,s=e);for(const e of this.currentSegment.tracks)0===e.cuePoints.length&&(e.cuePoints=s.cuePoints);this.currentSegment=null})}readCluster(e,t){return Y(this,null,function*(){var i;if((null==(i=t.lastReadCluster)?void 0:i.elementStartPos)===e)return t.lastReadCluster;let r=this.reader.requestSliceRange(e,2,an);at(r)&&(r=yield r),ne(r);const n=e,s=hn(r);ne(s);ne(s.id===en.Cluster);let a=s.size;const o=r.filePos;if(void 0===a){a=(yield gn(this.reader,o,sn,t.elementEndPos)).pos-o}let l=this.reader.requestSlice(o,a);at(l)&&(l=yield l);const c={segment:t,elementStartPos:n,elementEndPos:o+a,dataStartPos:o,timestamp:-1,trackData:new Map};if(this.currentCluster=c,l){const e=this.readContiguousElements(l,sn);c.elementEndPos=e}for(const[,e]of c.trackData){const t=e.track;ne(e.blocks.length>0);let i=!1;for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const r=e.blocks[e.presentationTimestamps[0].blockIndex],s=e.blocks[ae(e.presentationTimestamps).blockIndex];e.startTimestamp=r.timestamp,e.endTimestamp=s.timestamp+s.duration;const a=Be(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);-1!==a&&t.clusterPositionCache[a].elementStartPos===n||t.clusterPositionCache.splice(a+1,0,{elementStartPos:c.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=c,c})}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){var i;for(let r=0;r=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F,A,M,D,N,O,z,L,U,q,W,j,K,X,$,G,Q,Y,J,Z,ee;const te=hn(e);if(!te)return!1;if(t&&t.includes(te.id))return!1;const{id:ie,size:re}=te,ae=e.filePos;switch(Fn(re),ie){case en.DocType:this.isWebM="webm"===fn(e,re);break;case en.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(ae,re)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case en.SeekID:{const t=null==(i=this.currentSegment)?void 0:i.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=cn(e,re)}break;case en.SeekPosition:{const t=null==(r=this.currentSegment)?void 0:r.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=cn(e,re)}break;case en.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=cn(e,re),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case en.Duration:if(!this.currentSegment)break;this.currentSegment.duration=pn(e,re);break;case en.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:V(H({},Pt),{primary:!1}),trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(ae,re)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>{var t;return"decompress"!==(null==(t=e.data)?void 0:t.type)||e.scope!==Dn.Block||e.data.algorithm!==On.HeaderStripping})&&(vt._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===yn)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===bn)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===Tn)this.currentTrack.info.codec="vp8";else if(t===vn)this.currentTrack.info.codec="vp9";else if(t===wn)this.currentTrack.info.codec="av1";else if(t===Sn){const e=this.currentTrack.codecPrivate?he.decode(this.currentTrack.codecPrivate):"";Qi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new Hn(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===Pn?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===In?this.currentTrack.info.codec="mp3":t===xn?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=tr):t===Cn?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Bn?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===En?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===_n?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Rn?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Vn(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case en.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=cn(e,re);break;case en.TrackType:{if(!this.currentTrack)break;const t=cn(e,re);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:H({},ve),alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case en.FlagEnabled:if(!this.currentTrack)break;cn(e,re)||(this.currentTrack=null);break;case en.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!cn(e,re);break;case en.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!cn(e,re);break;case en.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!cn(e,re);break;case en.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!cn(e,re);break;case en.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!cn(e,re);break;case en.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!cn(e,re);break;case en.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=fn(e,re);break;case en.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=kl(e,re);break;case en.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=cn(e,re);break;case en.Name:if(!this.currentTrack)break;this.currentTrack.name=mn(e,re);break;case en.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=fn(e,re),Ke(this.currentTrack.languageCode)||(this.currentTrack.languageCode=Le);break;case en.LanguageBCP47:{if(!this.currentTrack)break;const t=fn(e,re).split("-")[0];this.currentTrack.languageCode=t||Le,this.currentTrack.hasLanguageBcp47=!0}break;case en.Video:if("video"!==(null==(s=null==(n=this.currentTrack)?void 0:n.info)?void 0:s.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.PixelWidth:if("video"!==(null==(o=null==(a=this.currentTrack)?void 0:a.info)?void 0:o.type))break;this.currentTrack.info.width=cn(e,re);break;case en.PixelHeight:if("video"!==(null==(c=null==(l=this.currentTrack)?void 0:l.info)?void 0:c.type))break;this.currentTrack.info.height=cn(e,re);break;case en.DisplayWidth:if("video"!==(null==(d=null==(u=this.currentTrack)?void 0:u.info)?void 0:d.type))break;this.currentTrack.info.displayWidth=cn(e,re);break;case en.DisplayHeight:if("video"!==(null==(f=null==(h=this.currentTrack)?void 0:h.info)?void 0:f.type))break;this.currentTrack.info.displayHeight=cn(e,re);break;case en.DisplayUnit:if("video"!==(null==(p=null==(m=this.currentTrack)?void 0:m.info)?void 0:p.type))break;this.currentTrack.info.displayUnit=cn(e,re);break;case en.AlphaMode:if("video"!==(null==(k=null==(g=this.currentTrack)?void 0:g.info)?void 0:k.type))break;this.currentTrack.info.alphaMode=1===cn(e,re);break;case en.Colour:if("video"!==(null==(b=null==(y=this.currentTrack)?void 0:y.info)?void 0:b.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.MatrixCoefficients:{if("video"!==(null==(v=null==(T=this.currentTrack)?void 0:T.info)?void 0:v.type))break;const t=cn(e,re),i=be[t];this.currentTrack.info.colorSpace.matrix=i}break;case en.Range:{if("video"!==(null==(S=null==(w=this.currentTrack)?void 0:w.info)?void 0:S.type))break;const t=cn(e,re);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case en.TransferCharacteristics:{if("video"!==(null==(I=null==(P=this.currentTrack)?void 0:P.info)?void 0:I.type))break;const t=cn(e,re),i=ke[t];this.currentTrack.info.colorSpace.transfer=i}break;case en.Primaries:{if("video"!==(null==(C=null==(x=this.currentTrack)?void 0:x.info)?void 0:C.type))break;const t=cn(e,re),i=pe[t];this.currentTrack.info.colorSpace.primaries=i}break;case en.Projection:if("video"!==(null==(E=null==(B=this.currentTrack)?void 0:B.info)?void 0:E.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.ProjectionPoseRoll:{if("video"!==(null==(R=null==(_=this.currentTrack)?void 0:_.info)?void 0:R.type))break;const t=-pn(e,re);try{this.currentTrack.info.rotation=se(t)}catch(oe){}}break;case en.Audio:if("audio"!==(null==(A=null==(F=this.currentTrack)?void 0:F.info)?void 0:A.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.SamplingFrequency:if("audio"!==(null==(D=null==(M=this.currentTrack)?void 0:M.info)?void 0:D.type))break;this.currentTrack.info.sampleRate=pn(e,re);break;case en.Channels:if("audio"!==(null==(O=null==(N=this.currentTrack)?void 0:N.info)?void 0:O.type))break;this.currentTrack.info.numberOfChannels=cn(e,re);break;case en.BitDepth:if("audio"!==(null==(L=null==(z=this.currentTrack)?void 0:z.info)?void 0:L.type))break;this.currentTrack.info.bitDepth=cn(e,re);break;case en.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(ae,re)),this.currentCueTime=null;break;case en.CueTime:this.currentCueTime=cn(e,re);break;case en.CueTrackPositions:{if(null===this.currentCueTime)break;ne(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(ae,re)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case en.CueTrack:{const t=null==(U=this.currentSegment)?void 0:U.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=cn(e,re)}break;case en.CueClusterPosition:{const t=null==(q=this.currentSegment)?void 0:q.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;ne(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+cn(e,re)}break;case en.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=cn(e,re);break;case en.SimpleBlock:{if(!this.currentCluster)break;const t=ln(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=wl(e),n=yl(e),s=n>>1&3;let a=!!(128&n);"audio"===(null==(W=i.track.info)?void 0:W.type)&&i.track.info.codec&&(a=!0);const o=kl(e,re-(e.filePos-ae)),l=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:a,data:o,lacing:s,decoded:!l,postProcessed:!1,mainAdditional:null})}break;case en.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(ae,re)),this.currentBlock=null;break;case en.Block:{if(!this.currentCluster)break;const t=ln(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=wl(e),n=yl(e)>>1&3,s=kl(e,re-(e.filePos-ae)),a=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:s,lacing:n,decoded:!a,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case en.BlockAdditions:this.readContiguousElements(e.slice(ae,re));break;case en.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(ae,re)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case en.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=kl(e,re);break;case en.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=cn(e,re);break;case en.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=cn(e,re);break;case en.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case en.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(ae,re));break;case en.Targets:this.readContiguousElements(e.slice(ae,re));break;case en.TargetTypeValue:50!==cn(e,re)&&(this.currentTagTargetIsMovie=!1);break;case en.TagTrackUID:case en.TagEditionUID:case en.TagChapterUID:case en.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case en.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(ae,re));break;case en.TagName:this.currentSimpleTagName=mn(e,re);break;case en.TagString:{if(!this.currentSimpleTagName)break;const t=mn(e,re);this.processTagValue(this.currentSimpleTagName,t)}break;case en.TagBinary:{if(!this.currentSimpleTagName)break;const t=kl(e,re);this.processTagValue(this.currentSimpleTagName,t)}break;case en.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(ae,re));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(null!=t.raw||(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new St(this.currentAttachedFile.fileData,null!=(j=this.currentAttachedFile.fileMediaType)?j:void 0,null!=(K=this.currentAttachedFile.fileName)?K:void 0,null!=(X=this.currentAttachedFile.fileDescription)?X:void 0)),(null==($=this.currentAttachedFile.fileMediaType)?void 0:$.startsWith("image/"))&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}null!=t.images||(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:null!=(G=this.currentAttachedFile.fileName)?G:void 0,description:null!=(Q=this.currentAttachedFile.fileDescription)?Q:void 0})}this.currentAttachedFile=null}break;case en.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=BigInt("0");for(let r=0;rt.order-e.order);break;case en.ContentEncoding:this.currentDecodingInstruction={order:0,scope:Dn.Block,data:null},this.readContiguousElements(e.slice(ae,re)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case en.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=cn(e,re);break;case en.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=cn(e,re);break;case en.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:On.Zlib,settings:null},this.readContiguousElements(e.slice(ae,re));break;case en.ContentCompAlgo:if("decompress"!==(null==(J=null==(Y=this.currentDecodingInstruction)?void 0:Y.data)?void 0:J.type))break;this.currentDecodingInstruction.data.algorithm=cn(e,re);break;case en.ContentCompSettings:if("decompress"!==(null==(ee=null==(Z=this.currentDecodingInstruction)?void 0:Z.data)?void 0:ee.type))break;this.currentDecodingInstruction.data.settings=kl(e,re);break;case en.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=ae+re,!0}decodeBlockData(e,t){ne(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(ne(r.data),"decompress"===r.data.type)if(r.data.algorithm===On.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i,r;if(!(null==(i=this.currentSegment)?void 0:i.metadataTags))return;const n=this.currentSegment.metadataTags;if(null!=n.raw||(n.raw={}),null!=(r=n.raw)[e]||(r[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":null!=n.title||(n.title=t);break;case"description":null!=n.description||(n.description=t);break;case"artist":null!=n.artist||(n.artist=t);break;case"album":null!=n.album||(n.album=t);break;case"album_artist":null!=n.albumArtist||(n.albumArtist=t);break;case"genre":null!=n.genre||(n.genre=t);break;case"comment":null!=n.comment||(n.comment=t);break;case"lyrics":null!=n.lyrics||(n.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||null!=n.date||(n.date=e)}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.trackNumber||(n.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.tracksTotal||(n.tracksTotal=r))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.discNumber||(n.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.discsTotal||(n.discsTotal=r))}}}getDurationFromMetadata(e){return Y(this,null,function*(){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){ne(r.trackBacking);const e=yield r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(null!=t?t:1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=null!=t?t:0,i})}}class Wn{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getFirstPacket(e){return Y(this,null,function*(){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)})}intoTimescale(e){return Ue(e*this.internalTrack.segment.timestampFactor)}getPacket(e,t){return Y(this,null,function*(){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Be(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Ae(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return ne(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)})}fetchPacketInCluster(e,t,i){return Y(this,null,function*(){var r,n;if(-1===t)return null;const s=e.trackData.get(this.internalTrack.id).blocks[t];if(ne(s),s.decoded||(s.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,s.data),s.decoded=!0),!s.postProcessed){if("prores"===(null==(r=this.internalTrack.info)?void 0:r.codec)){if(!(s.data.length>=8&&105===s.data[4]&&99===s.data[5]&&112===s.data[6]&&102===s.data[7])){const e=new Uint8Array(s.data.length+8);de(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(s.data,8),s.data=e}}s.postProcessed=!0}const a=i.metadataOnly?gr:s.data,o=s.timestamp/this.internalTrack.segment.timestampFactor,l=s.duration/this.internalTrack.segment.timestampFactor,c={};s.mainAdditional&&"video"===(null==(n=this.internalTrack.info)?void 0:n.type)&&this.internalTrack.info.alphaMode&&(c.alpha=i.metadataOnly?gr:s.mainAdditional,c.alphaByteLength=s.mainAdditional.byteLength);const u=new kr(a,s.isKeyFrame?"key":"delta",o,l,e.dataStartPos+t,s.data.byteLength,c);return this.packetToClusterLocation.set(u,{cluster:e,blockIndex:t}),u})}performClusterLookup(e,t,i,r,n){return Y(this,null,function*(){var s,a,o,l;const{demuxer:c,segment:u}=this.internalTrack;let d=null,h=null,f=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,n);-1!==i&&(h=e,f=i)}const m=Be(this.internalTrack.cuePoints,i,e=>e.time),p=-1!==m?this.internalTrack.cuePoints[m]:null,g=Be(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),k=-1!==g?this.internalTrack.clusterPositionCache[g]:null,y=Math.max(null!=(s=null==p?void 0:p.clusterPosition)?s:0,null!=(a=null==k?void 0:k.elementStartPos)?a:0)||null;let b;for(e?null===y||e.elementStartPos>=y?(b=e.elementEndPos,d=e):b=y:b=null!=y?y:u.clusterSeekStartPos;null===u.elementEndPos||b<=u.elementEndPos-2;){if(d){const e=d.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=c.reader.requestSliceRange(b,2,an);if(at(e)&&(e=yield e),!e)break;const i=b,s=hn(e);if(!s||!nn.includes(s.id)&&s.id!==en.Void){const e=yield kn(c.reader,i,nn,Math.min(null!=(o=u.elementEndPos)?o:1/0,i+Un));if(e){b=e;continue}break}const a=s.id;let l=s.size;const m=e.filePos;if(a===en.Cluster){d=yield c.readCluster(i,u),l=d.elementEndPos-m;const{blockIndex:e,correctBlockFound:r}=t(d);if(r)return this.fetchPacketInCluster(d,e,n);-1!==e&&(h=d,f=e)}if(void 0===l){ne(a!==en.Cluster);l=(yield gn(c.reader,m,sn,u.elementEndPos)).pos-m}const p=m+l;if(null===u.elementEndPos){let e=c.reader.requestSliceRange(p,2,an);if(at(e)&&(e=yield e),!e)break;if(un(e)===en.Segment){u.elementEndPos=p;break}}b=p}if(p&&(!h||h.elementStartPosY(this,null,function*(){var e,t,i,r,n;let s=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(s=yield this.getFirstPacket({}));const a={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&s?jt(s.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&s?ti(s.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&s?fi(s.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&s?pi(s.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&s?gi(s.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!Te(this.internalTrack.info.colorSpace)){const n=Zi(a);null!=(e=this.internalTrack.info.colorSpace).primaries||(e.primaries=n.primaries),null!=(t=this.internalTrack.info.colorSpace).transfer||(t.transfer=n.transfer),null!=(i=this.internalTrack.info.colorSpace).matrix||(i.matrix=n.matrix),null!=(r=this.internalTrack.info.colorSpace).fullRange||(r.fullRange=n.fullRange)}const o={codec:Ji(a),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(n=this.internalTrack.info.codecDescription)?n:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Vn extends Wn{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>Y(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&Li(e.data)}return{codec:er({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const jn=(e,t,i,r=null)=>Y(null,null,function*(){const n=q(2,16);let s=t;for(;null===i||s=4;){const t=a.filePos,i=Pl(a),n=null!==e.fileSize?e.fileSize-s:null,o=ur(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&mr(o.header.channel)===mr(r.channel)))return{header:o.header,startPos:s};a.filePos=t+o.bytesAdvanced,s=a.filePos}}return null});class Kn extends pr{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new Se,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new Xn(this)]}))()})}advanceReader(){return Y(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Vl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=yield jn(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=cr(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(at(r)&&(r=yield r),r){const n=Pl(r);if(n===or||n===lr){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(at(t)&&(t=yield t),t){const e=kl(t,12),i=de(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&hr.FrameCount?i.getUint32(4,!1):null,fileSize:r&hr.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const n=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:n,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame})}getMimeType(){return Y(this,null,function*(){return"audio/mpeg"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=!0;let n=this.reader.requestSlice(i.filePos,r.size);if(at(n)&&(n=yield n),!n)break;jl(n,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=Ll){let e=this.reader.requestSlice(this.reader.fileSize-Ll,Ll);at(e)&&(e=yield e),ne(e);"TAG"===Al(e,3)&&Wl(e,this.metadataTags)}return this.metadataTags}finally{e()}})}}class Xn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return ne(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){const e=this.demuxer;if(ne(null!==e.firstFrameHeader),ne(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,n=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(n<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const Qn=e=>{const t=de(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^t])>>>0}return t.setUint32(22,i,!0),r},Yn=(e,t,i)=>{let r=0,n=null;if(e.length>0)if("vorbis"===t.codec){ne(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,a=(e[0]&s)>>1;if(a>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const l=t.vorbisInfo.modeBlockflags[a];if(n=t.vorbisInfo.blocksizes[l],1===l){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+n>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ki[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:n}},Jn=27,Zn=282,es=e=>{const t=e.filePos;if(Il(e)!==$n)return null;e.skip(1);const i=yl(e),r=_l(e),n=Il(e),s=Il(e),a=Il(e),o=yl(e),l=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:c+u,dataStartPos:t+c,dataSize:u,headerType:i,granulePosition:r,serialNumber:n,sequenceNumber:s,checksum:a,lacingValues:l}},ts=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===$n)return!0;e.skip(1)}}return!1};class is extends pr{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,Jn,Zn);if(at(t)&&(t=yield t),!t)break;const i=es(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=yield this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?yield this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&(yield this.readOpusMetadata(e,t)),null!==t.codecInfo.codec&&this.trackBackings.push(new rs(t,this)))}}))()})}readVorbisMetadata(e,t){return Y(this,null,function*(){let i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=yield this.findNextPacketStart(r),!i)return;const n=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!n)return;if(3!==r.data[0]||5!==n.data[0])return;const s=[],a=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};a(e.data.length),a(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+n.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(n.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=n;const l=de(e.data);t.numberOfChannels=l.getUint8(11),t.sampleRate=l.getUint32(12,!0);const c=l.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&c),1<<(c>>4)],modeBlockflags:yi(n.data).modeBlockflags},wi(r.data.subarray(7),this.metadataTags)})}readOpusMetadata(e,t){return Y(this,null,function*(){const i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const n=(e=>{const t=de(e),i=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),s=t.getInt16(16,!0),a=t.getUint8(18);let o=null;return a&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:n,outputGain:s,channelMappingFamily:a,channelMappingTable:o}})(e.data);t.numberOfChannels=n.outputChannelCount,t.sampleRate=tr,t.codecInfo.opusInfo={preSkip:n.preSkip},wi(r.data.subarray(8),this.metadataTags)})}readPacket(e,t){return Y(this,null,function*(){ne(te+t.length,0);if(0===o)return null;const l=new Uint8Array(o);let c=0;for(let e=0;e{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(yield Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})))).filter(Boolean)})})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}class rs{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new Se,this.internalSampleRate="opus"===e.codecInfo.codec?tr:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return ne(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}getDecoderConfig(){return Y(this,null,function*(){var e;return ne(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:null!=(e=this.bitstream.description)?e:void 0}})}getName(){return null}getLanguageCode(){return Le}getDisposition(){return V(H({},Pt),{primary:!1})}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(ne(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:n}=Yn(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new kr(i.metadataOnly?gr:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:n}),s}getFirstPacket(e){return Y(this,null,function*(){ne(this.bitstream.lastMetadataPacket);const t=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(ne(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=yield this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)})}getNextPacket(e,t){return Y(this,null,function*(){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=yield this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const n=i.timestampInSamples+i.durationInSamples,s=yield this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:n,vorbisLastBlocksize:i.vorbisBlockSize},t)})}getPacket(e,t){return Y(this,null,function*(){var i,r;if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const n=Ue(e*this.internalSampleRate);if(0===n)return this.getFirstPacket(t);if(n<0)return null;ne(this.bitstream.lastMetadataPacket);const s=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!s)return null;let a=s.startPage,o=this.demuxer.reader.fileSize;const l=[a];e:for(;a.headerStartPos+a.totalSizen?o=c.headerStartPos:(a=c,l.push(c));continue e}i=c.headerStartPos+c.totalSize}}let c=s.startPage;for(const e of l){if(e.granulePosition===a.granulePosition)break;(!c||e.headerStartPos>c.headerStartPos)&&(c=e)}let u=c;const d=[u];for(;u.serialNumber!==this.bitstream.serialNumber||u.granulePosition!==a.granulePosition;){const e=u.headerStartPos+u.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Jn,Zn);at(t)&&(t=yield t),ne(t);const i=es(t);ne(i),u=i,u.serialNumber===this.bitstream.serialNumber&&d.push(u)}ne(-1!==u.granulePosition);let h,f,m=null,p=u,g=0;if(u.headerStartPos===s.startPage.headerStartPos)h=this.granulePositionToTimestampInSamples(0),f=!0,m=0;else{h=0,f=!1;for(let t=u.lacingValues.length-1;t>=0;t--){if(u.lacingValues[t]<255){m=t+1;break}}if(null===m)throw new Error("Invalid page with granule position: no packets end on this page.");g=m-1;const e={data:gr,endPage:p,endSegmentIndex:g};if(yield this.demuxer.findNextPacketStart(e)){const e=ss(d,u,m);ne(e);const t=ns(d,e.page,e.segmentIndex);t&&(u=t.page,m=t.segmentIndex)}else for(;;){const e=ss(d,u,m);if(!e)break;const t=ns(d,e.page,e.segmentIndex);if(!t)break;if(u=t.page,m=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,g=e.segmentIndex;break}}}let k=null,y=null;for(;null!==u;){ne(null!==m);const e=yield this.demuxer.readPacket(u,m);if(!e)break;if(!(u.headerStartPos===s.startPage.headerStartPos&&mn||Math.max(a.timestampInSamples,0)===n))break}const a=yield this.demuxer.findNextPacketStart(e);if(!a)break;u=a.startPage,m=a.startSegmentIndex}return k})}getPacketSequential(e,t){return Y(this,null,function*(){const i=yield this.sequentialScanMutex.acquire();try{const i=Ue(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=Be(this.sequentialScanCache,i,e=>e.timestampInSamples);let n;if(-1!==r){const e=this.sequentialScanCache[r];n=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else n=yield this.getFirstPacket(t);let s=0;for(;n&&n.timestampe)break;if(n=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(n);ne(e),this.sequentialScanCache.length>0&&ne(ae(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return n}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const ns=(e,t,i)=>{let r=t,n=i;e:for(;;){for(n--;n>=0;n--){if(r.lacingValues[n]<255){n++;break e}}ne(-1===n);if(!(1&r.headerType)){n=0;break}const t=Fe(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=Fe(e,e=>e.headerStartPosY(this,null,function*(){var e,t;let i=this.reader.requestSlice(0,12);at(i)&&(i=yield i),ne(i);const r=Al(i,4),n="RIFX"!==r,s="RF64"===r,a=Sl(i,n);let o=s?this.reader.fileSize:Math.min(a+8,null!=(e=this.reader.fileSize)?e:1/0);if("WAVE"!==Al(i,4))throw new Error("Invalid WAVE file - wrong format");let l=0,c=null,u=i.filePos;for(;null===o||u=18&&357!==n){const e=bl(r,i),s=t-18;if(Math.min(s,e)>=22&&n===as.EXTENSIBLE){r.skip(6);const e=kl(r,16);n=e[0]|e[1]<<8}}if(n!==as.MULAW&&n!==as.ALAW||(l=8),n!==as.PCM&&n!==as.IEEE_FLOAT&&n!==as.ALAW&&n!==as.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${n}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(n===as.PCM&&![8,16,24,32].includes(l))throw new Error(`Unsupported WAVE PCM bit depth (${l}). Only 8, 16, 24, and 32 bits are supported.`);if(n===as.IEEE_FLOAT&&![32,64].includes(l))throw new Error(`Unsupported WAVE float bit depth (${l}). Only 32 and 64 bits are supported.`);this.audioInfo={format:n,numberOfChannels:s,sampleRate:a,sampleSizeInBytes:Math.ceil(l/8),blockSizeInBytes:o}})}parseListChunk(e,t,i){return Y(this,null,function*(){var r,n,s,a,o,l,c,u,d,h,f;let m=this.reader.requestSlice(e,t);if(at(m)&&(m=yield m),!m)return;const p=Al(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=Al(m,4),t=Sl(m,i),p=kl(m,t);let k=0;for(let i=0;i0&&(null!=(l=this.metadataTags).trackNumber||(l.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(c=this.metadataTags).tracksTotal||(c.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||null!=(u=this.metadataTags).date||(u.date=e)}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&(null!=(d=this.metadataTags).date||(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":null!=(h=this.metadataTags).genre||(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":null!=(f=this.metadataTags).comment||(f.comment=y)}g+=8+t+(1&t)}})}parseId3Chunk(e,t){return Y(this,null,function*(){let i=this.reader.requestSlice(e,t);if(at(i)&&(i=yield i),!i)return;const r=Vl(i);if(r){const n=t-Ul;if(r.size=Math.min(r.size,n),r.size>0){const t=i.slice(e+Ul,r.size);jl(t,r,this.metadataTags)}}})}getCodec(){if(ne(this.audioInfo),this.audioInfo.format===as.MULAW)return"ulaw";if(this.audioInfo.format===as.ALAW)return"alaw";if(this.audioInfo.format===as.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===as.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}ne(!1)}getMimeType(){return Y(this,null,function*(){return"audio/wav"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}const cs=2048;class us{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.format}getDecoderConfig(){return Y(this,null,function*(){const e=this.demuxer.getCodec();return e?(ne(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null})}getNumberOfChannels(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return ne(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return Le}getDisposition(){return H({},Pt)}getPacketAtIndex(e,t){return Y(this,null,function*(){ne(e>=0),ne(this.demuxer.audioInfo);const i=e*cs*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(cs*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(at(e)&&(e=yield e),!e)return null}let n;if(t.metadataOnly)n=gr;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);at(e)&&(e=yield e),ne(e),n=kl(e,r)}const s=e*cs/this.demuxer.audioInfo.sampleRate,a=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new kr(n,"key",s,a,e,r)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getPacket(e,t){return Y(this,null,function*(){ne(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/cs,(this.demuxer.dataSize-1)/(cs*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=yield this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;ne(null===this.demuxer.reader.fileSize);let n=yield this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;n;){const e=yield this.getNextPacket(n,t);if(!e)break;n=e}return n})}getNextPacket(e,t){ne(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/cs);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const ds=e=>{const t=e.filePos,i=kl(e,9),r=new It(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const n=r.readBits(1),s=r.readBits(2)+1,a=r.readBits(4);if(15===a)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const l=r.readBits(13);r.skipBits(11);const c=r.readBits(2)+1;if(1!==c)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===n?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:l,numberOfAacFrames:c,crcCheck:u,startPos:t}},hs=1024;class fs extends pr{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new Se,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();ne(this.firstFrameHeader),this.trackBackings=[new ms(this)]}))()})}advanceReader(){return Y(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Vl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=ds(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=xt[t.samplingFrequencyIndex];ne(void 0!==i);const r=hs/i,n={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(n),this.nextTimestampInSamples+=hs,this.lastLoadedPos=t.startPos+t.frameLength})}getMimeType(){return Y(this,null,function*(){return"audio/aac"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,Ul);if(at(t)&&(t=yield t),!t)break;const i=Vl(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(at(r)&&(r=yield r),!r)break;jl(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}})}}class ms{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/hs}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return Le}getCodec(){return"aac"}getInternalCodecId(){return ne(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){ne(this.demuxer.firstFrameHeader);const e=Ct[this.demuxer.firstFrameHeader.channelConfiguration];return ne(void 0!==e),e}getSampleRate(){ne(this.demuxer.firstFrameHeader);const e=xt[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return ne(void 0!==e),e}getDisposition(){return H({},Pt)}getDecoderConfig(){return Y(this,null,function*(){return ne(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}})}getPacketAtIndex(e,t){return Y(this,null,function*(){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=gr;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(at(e)&&(e=yield e),!e)return null;r=kl(e,i.dataSize)}return new kr(r,"key",i.timestamp,i.duration,e,i.dataSize)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getNextPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=Ce(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1Y(this,null,function*(){var e;let t=0;for(;;){let e=this.reader.requestSlice(t,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const i=Vl(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);at(r)&&(r=yield r),ne(r),jl(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:s.end-e,isLastFrame:!0};if(255===yl(s)){const t=s.filePos;if(yl(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-a.num!==1){s.filePos=t;continue}}else if(r.num-a.num!==a.blockSize){s.filePos=t;continue}return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:i,isLastFrame:!1}}}})}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=kl(e,4),n=new It(r);if(32764!==n.readBits(15))return null;if(null===this.blockingBit){ne(t);const e=n.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){ne(!t);if(1!==n.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");ne(!t);if(0!==n.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*q(2,e):6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?q(2,e):null)(n.readBits(4));if(!s)return null;ne(this.audioInfo);const a=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(n.readBits(4),this.audioInfo.sampleRate);if(!a)return null;n.readBits(4),n.readBits(3);if(0!==n.readBits(1))return null;const o=(e=>{let t=0;const i=new It(kl(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],n=t-1,s=new It(kl(e,n)),a=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?Tl(e)+1:"uncommon-u8"===t?yl(e)+1:"number"===typeof t?t:(Me(t),void ne(!1)))(e,s),c=((e,t)=>"uncommon-u16"===t?Tl(e):"uncommon-u16-10"===t?10*Tl(e):"uncommon-u8"===t?yl(e):"number"===typeof t?t:null)(e,a);if(null===c)return null;if(c!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=yl(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(kl(e,u));return d!==h?null:{num:o,blockSize:l,sampleRate:c}}advanceReader(){return Y(this,null,function*(){yield this.readMetadata(),ne(null!==this.lastLoadedPos),ne(this.audioInfo);const e=this.lastLoadedPos,t=yield this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)})}}class gs{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return Le}getTimeResolution(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return ne(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getDisposition(){return H({},Pt)}getDecoderConfig(){return Y(this,null,function*(){return ne(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}})}getPacket(e,t){return Y(this,null,function*(){if(ne(this.demuxer.audioInfo),e<0)return null;const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){yield this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],n=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(n+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);yield this.demuxer.advanceReader()}}finally{i()}})}getNextPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}getPacketAtIndex(e,t){return Y(this,null,function*(){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=gr;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(at(e)&&(e=yield e),!e)return null;r=kl(e,i.byteSize)}ne(this.demuxer.audioInfo);const n=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new kr(r,"key",n,s,e,i.byteSize)})}getFirstPacket(e){return Y(this,null,function*(){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)})}}const ks=9e4,ys=q(2,33),bs=188,Ts="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",vs=new Set([133,134,162]),ws=new Set;class Ss extends pr{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=this.reader.requestSlice(0,205);at(e)&&(e=yield e),ne(e);const t=kl(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=bs;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,n=!1,s=!1;for(;;){const e=yield this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=yield this.readSection(i,!0,!s);if(!t)break;const a=3,o=32;let l=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i);l=2===e.readBits(8)}}if(0!==t.pid||n)if(t.pid!==r&&!l||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=Is(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(yield this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new _s(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,yield r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=jt(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];ne(t);const i=Gt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const n=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;n>0&&s>0&&(n>s?(e.info.squarePixelWidth=Math.round(e.info.width*n/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/n))),e.info.colorSpace={primaries:pe[i.colourPrimaries],transfer:ke[i.transferCharacteristics],matrix:be[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=ti(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===Dt.SPS_NUT).nalUnits[0];ne(t);const i=ei(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:pe[i.colourPrimaries],transfer:ke[i.transferCharacteristics],matrix:be[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Ji({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(yield r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=pl.tempFromBytes(r.suppliedPacket.data),i=ds(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=Ct[i.channelConfiguration],e.info.sampleRate=xt[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=Pl(pl.tempFromBytes(r.suppliedPacket.data)),i=ur(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=mr(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=Pi(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=Si[t.acmod]+t.lfeon,e.info.sampleRate=Rt[t.fscod]}else if("eac3"===e.info.codec){const t=Ci(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=Bi(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=Ei(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=zi(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:er({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const n=e.readBits(10),l=e.pos+8*n;let c=!1;for(;e.pos=4){const t=e.readBits(32);c||(c=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=l;8*(r+a)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),n=e.pos+8*r;let s=!1,a=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let l=null;const u=c&&vs.has(t)?130:t;switch(u){case 27:case 36:l={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",l={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:a?l={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?l={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(l={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:ws.has(t)||(vt._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),ws.add(t))}l&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:l,referencePesPackets:[]})}s=!0}else{const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+a)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");n=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!n)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const a of this.elementaryStreams)a.initialized&&("video"===a.info.type?this.trackBackingEntries.push(new Cs(a)):this.trackBackingEntries.push(new Bs(a)))}))()})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackingEntries})}getMetadataTags(){return Y(this,null,function*(){return{}})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(yield Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null}))))})}readSection(e,t,i=!1){return Y(this,null,function*(){let r=e,n=e;const s=[];let a,o=0,l=null,c=!0,u=0;for(;;){const e=yield this.readPacket(n);if(n+=this.packetStride,!e)break;if(l){if(e.pid!==l.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;l=e}const a=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(a&&(h=1+e.body[0],e===l&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=n,!t&&o>=64){c=!1;break}if(-1!==Ce(this.sectionEndPositions,r,e=>e)){c=!1;break}}if(c){const e=Be(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!l)return null;if(1===s.length)a=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);a=new Uint8Array(e);let t=0;for(const i of s)a.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:l.pid,payload:a,randomAccessIndicator:u}})}readPacketHeader(e){return Y(this,null,function*(){let t=this.reader.requestSlice(e,4);if(at(t)&&(t=yield t),!t)return null;if(71!==yl(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=Tl(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:yl(t)>>4&3}})}readPacket(e){return Y(this,null,function*(){let t=this.reader.requestSlice(e,bs);if(at(t)&&(t=yield t),!t)return null;const i=kl(t,bs);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}})}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ys-t?-ys:ys}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new It(t.payload);if(1!==r.readBits(24))return null;const n=r.readBits(8);if(r.skipBits(16),188===n||190===n||191===n||240===n||241===n||255===n||242===n||248===n)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let a=null;if(2===s||3===s)a=0,r.skipBits(4),a+=r.readBits(3)*(1<<30),r.skipBits(1),a+=32768*r.readBits(15),r.skipBits(1),a+=r.readBits(15),a=e.normalizeTimestamp(a);else if(i)throw new Error(Ts);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:a,randomAccessIndicator:t.randomAccessIndicator}},Is=(e,t,i)=>{ne(null!==t.endPos);const r=Ps(e,t,i);if(!r)return null;const n=new It(t.payload);n.skipBits(32);const s=n.readBits(16);n.skipBits(16);const a=n.readBits(8),o=n.pos+8*a;n.pos=o;const l=o/8;ne(Number.isInteger(l));const c=t.payload.subarray(l,s>0?6+s:t.payload.byteLength);return V(H({},r),{data:c})};class xs{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,ne(r instanceof xs),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return Le}getDisposition(){return V(H({},Pt),{primary:!1})}getTimeResolution(){return ks}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new kr(i.metadataOnly?gr:e.data,r,e.pts/ks,Math.max(t/ks,0),e.sequenceNumber,e.data.byteLength)}getFirstPacket(e){return Y(this,null,function*(){const t=this.elementaryStream.firstSection;ne(t);const i=Is(this.elementaryStream.demuxer,t,!0);ne(i);const r=new _s(this.elementaryStream,i),n=new Rs(this,r),s=yield n.readNext();if(!s)return null;const a=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(a,n),this.packetSectionStarts.set(a,s.packet.sectionStartPos),a})}getNextPacket(e,t){return Y(this,null,function*(){let i=this.packetBuffers.get(e);if(i){const r=yield i.readNext();if(!r)return null;this.packetBuffers.delete(e);const n=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(n,i),this.packetSectionStarts.set(n,r.packet.sectionStartPos),n}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const n=this.elementaryStream.demuxer,s=yield n.readSection(r,!0);ne(s);const a=Is(n,s,!0);ne(a);const o=new _s(this.elementaryStream,a);i=new Rs(this,o);const l=e.sequenceNumber;for(;;){const e=yield i.readNext();if(!e)return null;if(e.packet.sequenceNumber>l){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}})}getNextKeyPacket(e,t){return Y(this,null,function*(){let i=e;for(;;){if(i=yield this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}})}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}doPacketLookup(e,t,i){return Y(this,null,function*(){var r,n,s,a,o,l;const c=Ue(e*ks),u=this.elementaryStream.demuxer,{reader:d,seekChunkSize:h}=u,f=this.elementaryStream.pid,m=(e,t,i)=>Y(this,null,function*(){let r=e;for(;re.pts),T=-1!==b?y[b]:null;if(T&&c-T.pts<45e3)k=T.sectionStartPos;else{let e=0;if(null!==d.fileSize){const t=Math.ceil(d.fileSize/h);if(t>1){let i=0,r=t-1;for(e=i;i<=r;){const t=Math.floor((i+r)/2),n=He(t*h,u.packetStride)+g.sectionStartPos,s=n+h,a=yield m(n,s,!1);a?a.pesPacketHeader.pts<=c?(e=t,i=t+1):r=t-1:r=t-1}}}k=He(e*h,u.packetStride)+g.sectionStartPos}const v=yield m(k,null!=(r=d.fileSize)?r:1/0,!1);let w=null!=(n=null==v?void 0:v.pesPacketHeader)?n:null;w||(w=g);const S=this.getReorderSize(),P=(e,t)=>Y(this,null,function*(){var r,n;const s=yield u.readSection(e,!0);ne(s);const a=Is(u,s,!0);ne(a);const o=new _s(this.elementaryStream,a),l=new Rs(this,o);for(;;){if((null!=(n=null==(r=ae(l.presentationOrderPackets))?void 0:r.pts)?n:-1/0)>=c)break;if(!(yield l.readNextPacket()))break}const d=Ae(l.presentationOrderPackets,t);if(-1===d)return null;const h=l.presentationOrderPackets[d],f=0===d?0:h.pts-l.presentationOrderPackets[d-1].pts;for(;l.decodeOrderPackets[0]!==h;)l.decodeOrderPackets.shift();l.lastDuration=f;const m=yield l.readNext();ne(m);const p=this.createEncodedPacket(m.packet,m.duration,i);return this.packetBuffers.set(p,l),this.packetSectionStarts.set(p,m.packet.sectionStartPos),p});if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=w.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){if(e.pts>c)break e;w=e,Es(this.elementaryStream,w);break}}}e+=u.packetStride}}e:for(let e=0;e=u.packetOffset;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){w=e;break}}}e-=u.packetStride}}return P(w.sectionStartPos,e=>e.pts<=c)}{let e=k,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let r=null;const n=e<=g.sectionStartPos;let k,y=null;if(n)k=g,y=p;else{const t=yield m(e,null!=(s=d.fileSize)?s:1/0,i);k=null!=(a=null==t?void 0:t.pesPacketHeader)?a:null,y=null!=(o=null==t?void 0:t.section)?o:null}let b=!1,T=0;e:for(;k&&!(null!==t&&k.sectionStartPos>=t);){if(k.pts<=c){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===k.randomAccessIndicator;else{ne(y);const t=Is(u,y,!0);ne(t);const i=new _s(this.elementaryStream,t);yield i.markNextPacket(),e=1===(null==(l=i.suppliedPacket)?void 0:l.randomAccessIndicator)}e&&(r=k)}if(k.pts>c&&(b=!0),b&&(T++,T>S))break;let e=k.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,i);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){k=e,y=t,Es(this.elementaryStream,k);break}}}e+=u.packetStride}}if(r){let e=r;if(0===T)e:for(let r=0;r=u.packetOffset;){const r=yield u.readPacketHeader(t);if(!r)break e;if(r.pid===f&&1===r.payloadUnitStartIndicator){const r=yield u.readSection(t,i);if(r){const t=Ps(u,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=u.packetStride}}const t=yield P(e.sectionStartPos,e=>e.pts<=c&&1===e.randomAccessIndicator);return ne(t),t}if(n)return null;t=e,e=Math.max(He(e-g.sectionStartPos-h,u.packetStride)+g.sectionStartPos,g.sectionStartPos)}}})}}class Cs extends xs{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}getColorSpace(){return Y(this,null,function*(){return this.elementaryStream.info.colorSpace})}canBeTransparent(){return Y(this,null,function*(){return!1})}getDecoderConfig(){return Y(this,null,function*(){return ne(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class Bs extends xs{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){return ne(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const Es=(e,t)=>{const i=e.referencePesPackets,r=Be(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const n=i[r];if(t.pts<=n.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return ne(e),e}bufferData(e){return Y(this,null,function*(){const t=this.endPos+e;for(;this.endPos=c)break;u=t;const r=o+u;if(u+3>=c){this.seekTo(r);break}const d=l[u+1],h=l[u+2],f=l[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=r;null!=n||(n=p);const g=u+m,k=g+i,y=6;if(k+("avc"===e?y:1)>c){this.seekTo(r);break}const b=l[g];let T,v,w;if("avc"===e)T=Ut(b),v=T===At.NON_IDR_SLICE||T===At.SLICE_DPA||T===At.IDR,w=T===At.SEI||T===At.SPS||T===At.PPS||T===At.AUD;else{T=Zt(b);if(((1&b)<<5|l[g+1]>>3)>0){u+=m;continue}v=T<=Dt.RASL_R||T>=Dt.BLA_W_LP&&T<=21,w=T>=Dt.VPS_NUT&&T<=37||T===Dt.PREFIX_SEI_NUT||T>=41&&T<=44||T>=48&&T<=55}let S=!1;if(v){let t;if("avc"===e){const e=l.subarray(k,k+y),i=oe(new It(e));t=!s||i<=a,a=i}else t=l[k]>>7===1;t&&(s?S=!0:s=!0)}else w&&s&&(S=!0);if(S){const e=p-n;return this.seekTo(n),this.supplyPacket(e,0)}u+=m}if(rn){const e=this.endPos-n;return this.seekTo(n),this.supplyPacket(e,0)}}else{const n=r.info.codec,s=128;for(;;){let a=this.ensureBuffered(s);at(a)&&(a=yield a);const o=this.currentPos;for(;this.currentPos-o>6,a=63&i[4];if(3===n||a>37){this.seekTo(e+1);continue}const o=Ii[3*a+n];ne(void 0!==o),this.seekTo(e),t=this.ensureBuffered(o),at(t)&&(t=yield t);const l=Math.round(13824e4/r.info.sampleRate);return this.supplyPacket(t,l)}if("eac3"===n){if(11!==s)continue;this.skip(-1);const e=this.currentPos;let t=this.ensureBuffered(5);if(at(t)&&(t=yield t),t<5)return;const i=this.readBytes(5);if(11!==i[0]||119!==i[1]){this.seekTo(e+1);continue}const n=2*(((7&i[2])<<8|i[3])+1),a=3===i[4]>>6?3:i[4]>>4&3,o=xi[a];this.seekTo(e),t=this.ensureBuffered(n),at(t)&&(t=yield t);const l=256*o,c=Math.round(l*ks/r.info.sampleRate);return this.supplyPacket(t,c)}if("dts"===n){if(127!==s&&100!==s)continue;this.skip(-1);const n=this.currentPos;let a=this.ensureBuffered(18);if(at(a)&&(a=yield a),a<18)return;const o=this.readBytes(18),l=Ui(o);let c=l?null:qi(o);if(!l&&!c){this.seekTo(n+1);continue}if(c&&!c.asset){this.seekTo(n);const t=Math.min(c.frameSize,4096);let i=this.ensureBuffered(t);at(i)&&(i=yield i),c=null!=(e=qi(this.readBytes(i)))?e:c}let u=l?l.frameSize:c.frameSize;if(l){let e=4*Math.ceil(l.frameSize/4);for(;;){this.seekTo(n);const t=e+10;let i=this.ensureBuffered(t);if(at(i)&&(i=yield i),i=0)}readNext(){return Y(this,null,function*(){if(0===this.decodeOrderPackets.length){if(!(yield this.readNextPacket()))return null}yield this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(ne(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}})}readNextPacket(){return Y(this,null,function*(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||(yield this.context.markNextPacket()),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)})}ensureCurrentPacketHasNext(){return Y(this,null,function*(){const e=this.decodeOrderPackets[0];for(ne(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(yield this.readNextPacket()))break}})}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const Fs="application/vnd.apple.mpegurl",As="#EXT-X-STREAM-INF:",Ms="#EXT-X-I-FRAME-STREAM-INF:",Ds="#EXT-X-MEDIA:",Ns="#EXTINF:",Os="#EXT-X-MAP:",zs="#EXT-X-KEY:",Ls="#EXT-X-MEDIA-SEQUENCE:",Us="#EXT-X-BYTERANGE:",qs="#EXT-X-PROGRAM-DATE-TIME:",Ws="#EXT-X-TARGETDURATION:",Hs="#EXT-X-PLAYLIST-TYPE:",Vs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class js{constructor(e){this._attributes={};let t="",i="",r=!1,n=!1;for(let s=0;sY(this,null,function*(){const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=ft(e,e=>"video"===e.getType())+1;e.push(new $s(this,t,i))}else if("audio"===t.type){const i=ft(e,e=>"audio"===e.getType())+1;e.push(new Gs(this,t,i))}}else{if(this.firstSegment=yield this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=yield t.getTracks();for(const r of i)if("video"===r.type){const t=ft(e,e=>"video"===e.getType())+1;e.push(new $s(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=ft(e,e=>"audio"===e.getType())+1;e.push(new Gs(this,{id:e.length+1,type:"audio"},t))}}return e}))()})}getFirstTimestampForInput(e){return Y(this,null,function*(){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=yield e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i})}getMediaOffset(e,t){return Y(this,null,function*(){var i;const r=null!=(i=e.firstSegment)?i:e;let n;if(this.firstSegmentFirstTimestamps.has(r))n=this.firstSegmentFirstTimestamps.get(r);else{const e=this.getInputForSegment(r);n=yield this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(r,n)}if(r===e)return r.timestamp-n;const s=yield this.getFirstTimestampForInput(t),a=e.timestamp-r.timestamp,o=s-n-a;return Math.abs(o)<=Math.min(.25,a)?r.timestamp-n:e.timestamp-s})}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class Xs{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>Y(this,null,function*(){var e,t;if(null!=(e=this.segmentedInput).firstSegment||(e.firstSegment=yield this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let i=this.segmentedInput.firstSegment,r=null;for(;i;){const e=this.segmentedInput.getInputForSegment(i);if(r=null!=(t=(yield e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number))?t:null,r)break;i=yield this.segmentedInput.getNextSegment(i,{})}if(!r)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=r,this.firstSegment=i}))()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}getHasOnlyKeyPackets(){return this.delegate(()=>{var e,t,i;return null!=(i=null==(t=(e=this.firstInputTrack._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:null})}getPairingMask(){return BigInt("1")}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}isRelativeToUnixEpoch(){return Y(this,null,function*(){return yield this.hydrate(),ne(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp})}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}createAdjustedPacket(e,t,i){return Y(this,null,function*(){ne(e.sequenceNumber>=0),ne(this.segmentedInput.firstSegment);const r=yield this.segmentedInput.getMediaOffset(t,i.input),n=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:We(e.timestamp+r,yield i.getTimeResolution()),sequenceNumber:Math.floor(1e8*n)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s})}getFirstPacket(e){return Y(this,null,function*(){var t;yield this.hydrate(),ne(this.firstInputTrack),ne(this.firstSegment);let i=this.firstInputTrack,r=this.firstSegment;for(;;){if(i){const t=yield i._backing.getFirstPacket(e);if(t)return this.createAdjustedPacket(t,r,i)}if(r=yield this.segmentedInput.getNextSegment(r,{skipLiveWait:e.skipLiveWait}),!r)break;const n=this.segmentedInput.getInputForSegment(r);i=null!=(t=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number))?t:null}return null})}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}_getNextInternal(e,t,i){return Y(this,null,function*(){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const n=i?yield r.track._backing.getNextKeyPacket(r.sourcePacket,t):yield r.track._backing.getNextPacket(r.sourcePacket,t);if(n)return this.createAdjustedPacket(n,r.segment,r.track);let s=r.segment;for(;;){const e=yield this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),n=(yield i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){s=e;continue}const a=yield n._backing.getFirstPacket(t);return a?this.createAdjustedPacket(a,e,n):null}})}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}_getPacketInternal(e,t,i){return Y(this,null,function*(){let r=yield this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(yield this.hydrate();r;){const n=this.segmentedInput.getInputForSegment(r),s=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const a=yield this.segmentedInput.getMediaOffset(r,n),o=e-a,l=i?yield s._backing.getKeyPacket(o,t):yield s._backing.getPacket(o,t);if(l)return this.createAdjustedPacket(l,r,s);r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null})}}class $s extends Xs{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}getColorSpace(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())})}canBeTransparent(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())})}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}class Gs extends Xs{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}ut();const Qs=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ys extends yt{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}getSizeOrNull(){return Y(this,null,function*(){var e;if(this._disposed)throw new fl;return null!=(e=this._sizePromise)?e:this._sizePromise=(()=>Y(this,null,function*(){let e=this._getFileSize();return void 0!==e||(yield this._read(0,1,0,Qs),e=this._getFileSize(),ne(void 0!==e)),e}))()})}getSize(){return Y(this,null,function*(){if(this._disposed)throw new fl;const e=yield this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e})}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new fa(this,e,t)}_dispatchRead(e,t){var i;null==(i=this.onread)||i.call(this,e,t),this._emit("read",{start:e,end:t})}ref(){return new Js(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Js{constructor(e){var t;if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),null==(t=e._refFinalizationRegistry)||t.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){var e;if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const t=this.source;ne(t._refCount>0),t._decrementRefCount(),null==(e=t._refFinalizationRegistry)||e.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Zs extends Ys{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ys||e instanceof Js))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ys?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return at(t)?t.then(i):i(t)}}const ea=(e,t)=>e.path===t.path;class ta extends Zs{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ys?e.ref():e;return this._root=t,this._rootRequest=null,t};at(e)?this._rootRequest=e.then(t):(t(e),ne(this._root))}if(this._rootRequest)return this._rootRequest.then(n=>n.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const ia="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class ra extends Ys{constructor(e,t={}){var i;if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!dt(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new ha({maxCacheSize:null!=(i=t.maxCacheSize)?i:8*q(2,20),maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),null==ia||ia.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:da.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}_runWorker(e){return Y(this,null,function*(){ne(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Ze()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),null==ia||ia.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch(r){}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return vt._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(q(2,e-2),16)},aa=new Set;class oa extends Zs{constructor(e,t={}){var i,r,n,s;if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!dt(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new oa(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=null!=(i=t.getRetryDelay)?i:sa,this._requestInit=H({},t.requestInit);let a=null;if(null==(r=t.requestInit)?void 0:r.headers){const e=H({},Ge(t.requestInit.headers)),i=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==i&&(a=e[i],delete e[i],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){null!=a||(a=t);const i=new Request(e);i.headers.delete("Range"),this._url=i}}if(null!==a){const e=ca(a);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new ha({maxCacheSize:null!=(n=t.maxCacheSize)?n:64*q(2,20),maxWorkerCount:null!=(s=t.parallelism)?s:2,runWorker:this._runWorker.bind(this),prefetchProfile:da.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){var e;if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const t=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===t?null!==this._length?this._length:null:ze(t-this._offset,0,null!=(e=this._length)?e:1/0)}_read(e,t,i,r){var n;if(null!==this._length&&t>this._length)return null;const s=this._offset,a=this._sequentialBacking?this._sequentialBacking._read(s+e,s+t):this._orchestrator.read(s+e,s+t,Math.max(s+i,s),s+Math.min(r,null!=(n=this._length)?n:1/0)),o=e=>e?(e.offset-=this._offset,e):null;return at(a)?a.then(o):o(a)}_runWorker(e){return Y(this,null,function*(){for(var t;;){const r=new AbortController,n=yield Qe(null!=(t=this._options.fetchFn)?t:fetch,this._url,$e(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw new Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);n.redirected&&(this.rootPath=n.url);e:if(null===this._orchestrator.fileSize&&(206===n.status||"basic"===n.type&&!n.headers.has("Content-Encoding"))){const t=n.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=n.headers.get("Content-Length");if(i){const t=206===n.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!n.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==n.status){if(this._sequentialBacking)return void n.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||aa.has(e.origin)||(vt._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),aa.add(e.origin))}return void this._transitionToSequentialMode(n.body)}const s=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return r.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let t;try{t=yield s.read()}catch(i){if(this._disposed)throw i;const e=this._getRetryDelay(1,i,this._url);if(null!==e){vt._error("Error while reading response stream. Attempting to resume.",i),yield kt(1e3*e);break}throw i}if(e.aborted)continue;const{done:n,value:a}=t;if(n){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+a.length),this._orchestrator.supplyWorkerData(e,a)}}})}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const n=new ReadableStream({pull:e=>Y(this,null,function*(){for(var n;;){let a;try{a=yield t.read()}catch(s){if(this._disposed)throw s;const e=this._getRetryDelay(1,s,this._url);if(null===e)throw s;vt._error("Error while reading response stream. Attempting to resume.",s),yield kt(1e3*e);const a=yield Qe(null!=(n=this._options.fetchFn)?n:fetch,this._url,$e(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!a.ok)throw new Error(`Error fetching ${String(this._url)}: ${a.status} ${a.statusText}`);if(!a.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=a.body.getReader(),r=206===a.status?0:i;continue}if(a.done)return void e.close();let o=a.value;if(r>0){const e=Math.min(r,o.length);r-=e,o=o.subarray(e)}if(0!==o.length)return i+=o.length,void e.enqueue(o)}}),cancel:()=>t.cancel()}),s=new ua(n,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const a=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)a.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)a.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of a){const e=s._read(o.start,o.start+o.bytes.length);at(e)?e.then(e=>{e?(ne(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(ne(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const la=/^bytes=(\d+)-(\d*)$/,ca=e=>{const t=la.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=Be(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let n=e;const s=new Uint8Array(t-e);if(-1!==i)for(let c=i;c=t)break;const r=Math.max(e,i.start);r>n&&this._throwDueToCacheMiss();const a=Math.min(t,i.end);rn&&this._throwDueToCacheMiss();const{promise:a,resolve:o,reject:l}=_e();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:l}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),a}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}_pull(){return Y(this,null,function*(){for(null!=this._reader||(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1})}_dispose(){var e;for(const t of this._pendingSlices)t.reject(new fl);this._pendingSlices.length=0,this._cache.length=0,null==(e=this._reader)||e.cancel()}}const da={fileSystem:(e,t)=>{const i=q(2,16);return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=q(2,16);e=Math.max(0,Math.floor((e-r)/r)*r);for(const n of i){const i=8*q(2,20),r=Math.max((n.startPos+n.targetPos)/2,n.targetPos-i);if(lt(e,t,r,n.targetPos)){const e=n.targetPos-n.startPos,r=Math.ceil((e+1)/i)*i,s=q(2,Math.ceil(Math.log2(e+1))),a=Math.min(s,r);t=Math.max(t,n.startPos+a)}}return{start:e,end:t=Math.max(t,e+na)}}};class ha{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){var n;ne(!this.disposed);const s=this.options.prefetchProfile(e,t,this.workers),a=Math.max(s.start,i),o=Math.min(s.end,null!=(n=this.fileSize)?n:1/0,r);ne(a<=e&&t<=o);let l=null;const c=Be(this.cache,e,e=>e.start),u=-1!==c?this.cache[c]:null;u&&u.start<=e&&t<=u.end&&(u.age=this.nextAge++,l={bytes:u.bytes,view:u.view,offset:u.start});const d=Be(this.cache,a,e=>e.start),h=l?null:new Uint8Array(t-e);let f=0,m=a;const p=[];if(-1!==d){for(let i=d;i=o)break;if(r.end<=a)continue;const n=Math.max(a,r.start),s=Math.min(o,r.end);if(ne(n<=s),m=h.length&&(l={bytes:h,view:de(h),offset:e}),0===p.length)return ne(l),l;const{promise:g,resolve:k,reject:y}=_e(),b=[];for(const v of p){const i=Math.max(e,v.start),r=Math.min(t,v.end);i===v.start&&r===v.end?b.push(v):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&v.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,v.end),i.strictTarget&&(i.strictTarget=e),T&&i.pendingSlices.push(T)):(t++,i={hole:{start:v.start,end:v.end},strictTarget:e,pendingSlices:T?[T]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return l?g.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(ne(h),l=g.then(t=>t&&{bytes:t,view:de(t),offset:e})),l}checkHoleAgainstWorker(e,t,i){const r=q(2,17);if(lt(t.start-r,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=s),t.end<=t.start&&(i.holes.splice(e,1),e--)}0===i.holes.length&&(i.resolve(i.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){var t,i;const r=this.workers.indexOf(e);ne(-1!==r),e.running=!1,this.workers.splice(r,1),null==(i=(t=this.options).onIdleWorkerRemoved)||i.call(t,e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const n of e.pendingSlices)n.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=Be(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=de(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=de(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const n=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return at(n)?n.then(s):s(n)}_dispose(){var e;null==(e=this._ref)||e.free()}ref(){return null!=this._ref||(this._ref=this._baseSource.ref()),super.ref()}}var ma=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},pa=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const ga=/^0[xX][0-9a-fA-F]+$/,ka=/^data:.*;base64,/i;class ya extends Ks{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){var e;return null!=(e=this.currentUpdateSegmentsPromise)?e:this.currentUpdateSegmentsPromise=(()=>Y(this,null,function*(){try{const e=this.getRemainingWaitTimeMs();e>0&&(yield kt(e)),this.lastSegmentUpdateTime=performance.now(),yield this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}}))()}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}updateSegments(){return Y(this,null,function*(){var e,t,i,r,n,s,a,o;let l=this.nextLines;if(this.nextLines=null,!l){const e={stack:[],error:void 0,hasError:!1};try{const t=ma(e,yield this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),i=new ml(t.source),r=yield i.requestEntireFile();ne(r),l=Ml(r,r.length,{ignore:Vs}),t.source instanceof Zs&&(this.rootPath=t.source.rootPath)}catch(x){e.error=x,e.hasError=!0}finally{pa(e)}}const c=!1!==(null==(e=this.input._formatOptions.hls)?void 0:e.offsetTimestampsByDateTime);let u=!1,d=0,h=null,f=null,m=null,p=0,g=null,k=null,y=null,b=null,T=null,v=null,w=!1,S=null!=(t=ae(this.segments))?t:null;const P=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},I=e=>{p=e,S&&(ne(null!==S.sequenceNumber),S.sequenceNumber0&&null!==v&&(d=p*v),w=!0);const t=e.slice(8),i=t.indexOf(","),r=-1===i?t:t.slice(0,i),n=Number(r);if(!Number.isFinite(n)||n<0)throw new Error(`Invalid #EXTINF tag duration '${r}'.`);f=n}else if(e.startsWith(Os)){const t=new js(e.slice(11)),i=t.get("uri");if(!i)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const r=t.get("byterange");let a=null;if(null!==r&&(a=P(r)),a&&null===a.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!S){const e={path:ht(this.rootPath,i),offset:null!=(n=null==a?void 0:a.offset)?n:0,length:null!=(s=null==a?void 0:a.length)?s:null};if("AES-128"===(null==m?void 0:m.method)&&!m.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");k={timestamp:d,unixEpochTimestamp:h,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:m,initSegment:null,lastProgramDateTimeSeconds:T}}f=null,null===b?y=null:b=null}else if(e.startsWith(zs)){const t=new js(e.slice(11)),i=t.get("method");if("NONE"===i)m=null;else if("AES-128"===i){const e=t.get("uri");if(!e)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=t.get("iv");if(r){if(!ga.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(xr);for(let t=0;t=8&&112===i[4]&&115===i[5]&&115===i[6]&&104===i[7]){const e=de(i).getUint32(0);r=yr(i.subarray(8,Math.min(e,i.length)))}}m={method:i,psshBox:r}}}}else if(e.startsWith(Ls)){const t=e.slice(22),i=Number(t);if(!Number.isInteger(i)||i<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${t}'.`);I(i)}else if(e.startsWith(Us)){const t=P(e.slice(17));if(null===t.offset){if(null===y)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");t.offset=y}b=t,y=t.offset+t.length}else if(e.startsWith(qs)){if(S)continue;const t=e.slice(25),i=Date.parse(t);if(!Number.isFinite(i))continue;const r=i/1e3;if(T===r)continue;if(null===T&&this.segments.length>0){const e=ae(this.segments),t=r-(e.timestamp+e.duration);for(const i of this.segments)i.unixEpochTimestamp=i.timestamp+t,c&&(i.timestamp=i.unixEpochTimestamp)}T=r,h=r,c&&(d=r)}else if("#EXT-X-DISCONTINUITY"===e)g=null;else if(e.startsWith(Ws)){const t=e.slice(22),i=Number(t);if(!Number.isFinite(i)||i<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${t}'.`);this.refreshInterval=i,v=i}else{if("#EXT-X-ENDLIST"===e){this.streamHasEnded=!0;break}if(e.startsWith(Hs)){"vod"===e.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==e)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");u=!0}}if(!u)throw new Error("Invalid M3U8 file; no #EXTM3U header.")})}getFirstSegment(){return Y(this,null,function*(){var e;return 0===this.segments.length&&(yield this.runUpdateSegments()),null!=(e=this.segments[0])?e:null})}getSegmentAt(e,t){return Y(this,null,function*(){0===this.segments.length&&(yield this.runUpdateSegments());let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=Be(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===r);if(n)return n.age=this.nextInputCacheAge++,n.input;let s=null;(r.initSegment||r.firstSegment)&&(s=this.getInputForSegment(null!=(t=r.initSegment)?t:r.firstSegment));const a=V(H({},this.input._formatOptions),{isobmff:V(H({},this.input._formatOptions.isobmff),{resolveKeyId:(null==(i=this.input._formatOptions.isobmff)?void 0:i.resolveKeyId)&&(e=>{if(!r.encryption||"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method||!r.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let t=e.psshBoxes;const{psshBox:i}=r.encryption;return null!==i.keyIds&&!i.keyIds.includes(e.keyId)||t.some(e=>br(e,i))||(t=[...t,i]),this.input._formatOptions.isobmff.resolveKeyId(V(H({},e),{psshBoxes:t}))})})}),o=new dl({source:new ta(r.location.path,e=>Y(this,null,function*(){var t,i;ne(e.isRoot);const n=V(H({},e),{isRoot:!1});let s;const a=r.location.offset>0||null!==r.location.length;if(r.encryption&&"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method)if("AES-128"===r.encryption.method){const e=r.encryption;ne(e.iv);let t=yield this.input._getSourceCached(n);if(a){const e=t.source.slice(r.location.offset,null!=(i=r.location.length)?i:void 0).ref();t.free(),t=e}const o=((e,t,i)=>{let r=!1,n=0;const s=q(2,16),a=new Dr;return new ReadableStream({pull:o=>Y(null,null,function*(){r||(a.init(yield t()),r=!0);const l=s+16;let c=e.requestSliceRange(n,0,l);if(at(c)&&(c=yield c),!c||0===c.length)throw new Error("Invalid ciphertext.");const u=c.length;if(u%16!==0)throw new Error("Invalid ciphertext.");const d=u===l?u-16:u,h=kl(c,d),f=new Uint8Array(d);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=f.subarray(0,d-e);o.enqueue(t),o.close(),i()}}),cancel:()=>{i()}})})(new ml(t.source),()=>Y(this,null,function*(){const t={stack:[],error:void 0,hasError:!1};try{const i=ma(t,yield this.input._getSourceCached({path:e.keyUri,isRoot:!1},ul),!1),r=new ml(i.source),n=yield r.requestSlice(0,xr);if(!n)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:kl(n,xr),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{pa(t)}}),()=>{t.free()});s=new ua(o).ref()}else ne(!1);else if(s=yield this.input._getSourceCached(n),a){const e=s.source.slice(r.location.offset,null!=(t=r.location.length)?t:void 0).ref();s.free(),s=e}return s})),formats:this.input._formats.filter(e=>!(e instanceof za)),initInput:null!=s?s:void 0,formatOptions:a});o._onFormatDetermined=e=>{var t,i;if(("SAMPLE-AES"===(null==(t=r.encryption)?void 0:t.method)||"SAMPLE-AES-CTR"===(null==(i=r.encryption)?void 0:i.method))&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:r,input:o,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=mt(this.inputCache,e=>e.age);ne(-1!==e),this.inputCache.splice(e,1)}return o}getLiveRefreshInterval(){return Y(this,null,function*(){return 0===this.getRemainingWaitTimeMs()&&(yield this.runUpdateSegments()),this.streamHasEnded?null:this.refreshInterval})}}class ba extends pr{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){ne(this.input._rootSource instanceof Zs);const e=yield this.input._reader.requestEntireFile();ne(e);const t=Ml(e,e.length,{ignore:Vs}),{rootPath:i}=this.input._rootSource,r=[],n=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],a=[...new Set(n.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=yield Promise.all(r.map((e,t)=>Y(this,null,function*(){var r,o,l,c;const u=[],d=e.attributes.get("codecs");let h;if(d)h=d.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=yield t.getTrackBackings(),r=yield Promise.all(i.map(e=>Y(this,null,function*(){return{track:e,codec:yield e.getCodec()}})));h=yield Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const f=e.attributes.get("video"),m=e.attributes.get("audio"),p=h.some(e=>Hi.includes(nr(e))),g=h.some(e=>ji.includes(nr(e)));if(null!==f&&!p){if(!s.includes(f))throw new Error(`Invalid M3U8 file; variant stream references video group "${f}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===f&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=ht(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});ne(null!==a),h.push(a)}}if(null!==m&&!g){if(!a.includes(m))throw new Error(`Invalid M3U8 file; variant stream references audio group "${m}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===m&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=ht(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});ne(null!==a),h.push(a)}}h=[...new Set(h)];let k=null,y=null;const b=e.attributes.getAsNumber("bandwidth");ne(null!==b);const T=e.attributes.getAsNumber("average-bandwidth"),v=e.attributes.get("name");for(const i of h){const d=nr(i);if(null!==d)if(Hi.includes(d)){if(null!==k)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");k=i;const a=e.attributes.get("video");if(null===a){const i=e.attributes.get("resolution");let r=null,n=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(r=Number(e[1]),n=Number(e[2]))}u.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:Le,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:k,pairingMask:BigInt("1")<0?r:null}})}else{if(!a.includes(r))throw new Error(`Invalid M3U8 file; variant stream references audio group "${r}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of n){const n=i.attributes.get("group-id"),s=i.attributes.get("type");if(n!==r||"audio"!==s.toLowerCase())continue;const a=null!=(l=i.attributes.get("channels"))?l:e.attributes.get("channels"),o=null!==a?Number(a.split("/")[0]):null;u.push({id:-1,demuxer:this,backingTrack:null,default:Sa(i.attributes),autoselect:Sa(i.attributes)||Pa(i.attributes),languageCode:Ia(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:null!=(c=i.fullPath)?c:e.fullPath,fullCodecString:y,pairingMask:BigInt("1")<0?o:null}})}}}}return u}))),l=[],c=e=>{var t,i;const r=l.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);r?(r.pairingMask|=e.pairingMask,r.default||(r.default=e.default),r.autoselect||(r.autoselect=e.autoselect),r.lineNumber=Math.min(r.lineNumber,e.lineNumber),null!==e.peakBitrate&&(r.peakBitrate=Math.max(null!=(t=r.peakBitrate)?t:-1/0,e.peakBitrate)),null!==e.averageBitrate&&(r.averageBitrate=Math.max(null!=(i=r.averageBitrate)?i:-1/0,e.averageBitrate)),r.languageCode===Le&&(r.languageCode=e.languageCode)):(e.id=l.length+1,l.push(e))};for(const u of o)for(const e of u)c(e);l.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of l)"video"===u.info.type?this.trackBackings.push(new va(u)):this.trackBackings.push(new wa(u));this.internalTracks=l}))()}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),ne(this.trackBackings),this.trackBackings})}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new ya(this,e,i,null),this.segmentedInputs.push(t),t}getMetadataTags(){return Y(this,null,function*(){return{}})}getMimeType(){return Y(this,null,function*(){return Fs})}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class Ta{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>Y(this,null,function*(){const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(yield e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof va){for(const r of i)if((yield r.getCodec())===this.getCodec()){t=r;break}}else{ne(this instanceof wa);for(const e of i)if((yield e.getCodec())===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t}))()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return V(H({},Pt),{default:this.internalTrack.autoselect,primary:this.internalTrack.default})}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){ne(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}getDurationFromMetadata(e){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)})}getLiveRefreshInterval(){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()})}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}getFirstPacket(e){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)})}getPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)})}getKeyPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)})}getNextPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)})}getNextKeyPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)})}}class va extends Ta{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return nr(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}getColorSpace(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getColorSpace()})}canBeTransparent(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.canBeTransparent()})}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getDecoderConfig()})}}class wa extends Ta{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return nr(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return Y(this,null,function*(){return yield this.hydrate(),this.backingAudioTrack.getDecoderConfig()})}}const Sa=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Pa=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},Ia=e=>{if(null===e)return Le;const t=e.split("-")[0];return t||Le};class xa{constructor(){this._isIsobmff=!1}}class Ca extends xa{constructor(){super(...arguments),this._isIsobmff=!0}_getMajorBrand(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,12);if(at(t)&&(t=yield t),!t)return null;t.skip(4);const i=Al(t,4);return"ftyp"!==i&&"styp"!==i?null:Al(t,4)})}_createDemuxer(e){return new Nr(e)}}class Ba extends Ca{_canReadInput(e){return Y(this,null,function*(){const t=yield this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(at(t)&&(t=yield t),!t)return!1;let r=Pl(t),n=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(at(t)&&(t=yield t),!t)return!1;r=Bl(t),n=16}if(r8)return!1;if(cn(i,r)!==en.EBML)return!1;const n=dn(i);if("number"!==typeof n)return!1;let s=e._reader.requestSlice(i.filePos,n);if(at(s)&&(s=yield s),!s)return!1;const a=i.filePos;for(;s.filePos<=a+n-2;){const e=hn(s);if(!e)break;const{id:i,size:r}=e,n=s.filePos;if(void 0===r)return!1;switch(i){case en.EBMLVersion:if(1!==cn(s,r))return!1;break;case en.EBMLReadVersion:if(1!==cn(s,r))return!1;break;case en.DocType:if(fn(s,r)!==t)return!1;break;case en.DocTypeVersion:if(cn(s,r)>4)return!1}s.filePos=n+r}return!0})}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new qn(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class Ra extends _a{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class Fa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}const i=yield jn(e._reader,t,t+4096);if(!i)return!1;const r=i.header,n=cr(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+n,4);if(at(s)&&(s=yield s),!s)return!1;const a=Pl(s);if(a===or||a===lr)return!0;t=i.startPos+i.header.totalSize;const o=yield jn(e._reader,t,t+4);if(!o)return!1;const l=o.header;return r.channel===l.channel&&r.sampleRate===l.sampleRate})}_createDemuxer(e){return new Kn(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class Aa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,12);if(at(t)&&(t=yield t),!t)return!1;const i=Al(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===Al(t,4)})}_createDemuxer(e){return new ls(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class Ma extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,4);return at(t)&&(t=yield t),!!t&&"OggS"===Al(t,4)})}_createDemuxer(e){return new is(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class Da extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return at(i)&&(i=yield i),!!i&&"fLaC"===Al(i,4)})}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new ps(e)}}class Na extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(at(i)&&(i=yield i),!i)return!1;const r=ds(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),at(i)&&(i=yield i),!i)return!1;const n=ds(i);return!!n&&(r.objectType===n.objectType&&r.samplingFrequencyIndex===n.samplingFrequencyIndex&&r.channelConfiguration===n.channelConfiguration)})}_createDemuxer(e){return new fs(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class Oa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,205);if(at(t)&&(t=yield t),!t)return!1;const i=kl(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])})}_createDemuxer(e){return new Ss(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class za extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,7);if(at(t)&&(t=yield t),!t)return!1;if(!("#EXTM3U"===Al(t,7)))return!1;if(!(e._rootSource instanceof Zs))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0})}_createDemuxer(e){return new ba(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return Fs}}const La=new Ba,Ua=new Ea,qa=new _a,Wa=new Ra,Ha=new Fa,Va=new Aa,ja=new Ma,Ka=new Na,Xa=new Da,$a=new Oa,Ga=new za,Qa=[Ga,La,Ua,qa,Wa,Va,ja,Xa,Ha,Ka,$a],Ya=[Ga,La,Ua,Ha,Ka,$a];var Ja=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});ut();let Za=-1/0,eo=-1/0,to=null;"undefined"!==typeof FinalizationRegistry&&(to=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Za>=1e3&&(vt._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Za=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-eo>=1e3&&(vt._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),eo=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class io{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const ro=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],no=new Set(ro);class so{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(Xe*this.timestamp)}get microsecondDuration(){return Math.trunc(Xe*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F;if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!no.has(t.format))throw new TypeError("init.format must be one of: "+ro.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&>(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=null!=(i=t.rotation)?i:0,this.timestamp=t.timestamp,this.duration=null!=(r=t.duration)?r:0;const m=null!=(n=t.layout)?n:go(t.format,t.codedWidth,t.codedHeight);let p=null!=(s=t.colorSpace)?s:null;null===p&&(p="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:null!=(o=null==(a=t.visibleRect)?void 0:a.left)?o:0,top:null!=(c=null==(l=t.visibleRect)?void 0:l.top)?c:0,width:null!=(d=null==(u=t.visibleRect)?void 0:u.width)?d:t.codedWidth,height:null!=(f=null==(h=t.visibleRect)?void 0:h.height)?f:t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?ue(e):ue(e).slice(),this._layout=m,this.colorSpace=new uo(p)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==(null==t?void 0:t.rotation)&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==(null==t?void 0:t.timestamp)&&!Number.isFinite(null==t?void 0:t.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==(null==t?void 0:t.duration)&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==(null==t?void 0:t.visibleRect)&>(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:null!=(p=null==(m=e.visibleRect)?void 0:m.x)?p:0,top:null!=(k=null==(g=e.visibleRect)?void 0:g.y)?k:0,width:null!=(b=null==(y=e.visibleRect)?void 0:y.width)?b:e.codedWidth,height:null!=(v=null==(T=e.visibleRect)?void 0:T.height)?v:e.codedHeight},this.rotation=null!=(w=null==t?void 0:t.rotation)?w:0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=null!=(S=null==t?void 0:t.timestamp)?S:e.timestamp/1e6,this.duration=null!=(I=null==t?void 0:t.duration)?I:(null!=(P=e.duration)?P:0)/1e6,this.colorSpace=new uo(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&>(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new so(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*Xe),duration:Math.trunc((null!=(x=t.duration)?x:0)*Xe)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const n=null!=(C=t.visibleRect)?C:{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(n.width,n.height),a=s.getContext("2d",{alpha:tt(),willReadFrequently:!0});if(!a)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");a.drawImage(e,-n.left,-n.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:n.width,height:n.height},this.squarePixelWidth=n.width,this.squarePixelHeight=n.height,this.rotation=null!=(B=t.rotation)?B:0,this.timestamp=t.timestamp,this.duration=null!=(E=t.duration)?E:0,this.colorSpace=new uo({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof io))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!ro.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=null!=(_=t.rotation)?_:0,this.timestamp=t.timestamp,this.duration=null!=(R=t.duration)?R:0,this.colorSpace=e.getColorSpace()}this.encodeOptions=null!=(F=null==t?void 0:t.encodeOptions)?F:{},this.pixelAspectRatio=pt({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),null==to||to.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return ne(null!==this._data),this._data instanceof io?new so(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):ho(this._data)?new so(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(ne(this._layout),new so(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new so(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(null==to||to.unregister(this),this._data instanceof io?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):ho(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){var t;if(po(e),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(t=e.format)?t:this.format))throw new Error("Cannot get allocation size when format is null.");if(ho(this._data))return this._data.allocationSize(e);return yo(this,e).allocationSize}copyTo(e){return Y(this,arguments,function*(e,t={}){var i,r;if(!we(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(po(t),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(i=t.format)?i:this.format))throw new Error("Cannot copy video sample data when format is null.");if(ne(null!==this._data),ho(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof io)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=yield i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,yield this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},null!=(r=t.colorSpace)?r:"srgb"),!1);if(!(n instanceof so))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(n.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${n.format}' instead.`);return yield n.copyTo(e,t)}catch(u){i.error=u,i.hasError=!0}finally{Ja(i)}}}const n=yo(this,t);ne(this.format);const s=ue(e);if(s.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');o=e}else if(this._data instanceof Uint8Array)ne(this._layout),ne(this._layout.length===a.length),o=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");ne(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);o=[{data:ue(t.data),stride:4*this.codedWidth}]}const l=[],c=a.length;for(let d=0;di.byteLength)throw new Error("Source buffer OOB read.");if(a+c>s.byteLength)throw new Error("Destination buffer OOB write.");const n=i.subarray(r,r+c);s.set(n,a),r+=t,a+=e.destinationStride}l.push(u)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),i=this.format.includes("X")&&t.format.includes("A");if(e||i)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const n=[];for(const s of e)i.set(s.data,r),n.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:n[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return ho(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(ne(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,n,s,a,o,l){let c=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(c=t,u=i,d=r,h=n,f=s,m=a,void 0!==o?(p=o,g=l):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=n)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(c))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:c,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(c,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const T=this.rotation%180===0?1:p/g;e.scale(1/T,T),e.drawImage(k,c,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){var i,r,n,s,a,o,l,c,u;if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&mo(t.crop,"options.");const d=e.canvas.width,h=e.canvas.height,f=null!=(i=t.rotation)?i:this.rotation,[m,p]=f%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let g,k,y,b,T=t.crop;T&&(T=fo(T,m,p));const{sx:v,sy:w,sWidth:S,sHeight:P}=this._rotateSourceRegion(null!=(n=null==(r=t.crop)?void 0:r.left)?n:0,null!=(a=null==(s=t.crop)?void 0:s.top)?a:0,null!=(l=null==(o=t.crop)?void 0:o.width)?l:m,null!=(u=null==(c=t.crop)?void 0:c.height)?u:p,f);if("fill"===t.fit)g=0,k=0,y=d,b=h;else{const[e,i]=t.crop?[t.crop.width,t.crop.height]:[m,p],r="contain"===t.fit?Math.min(d/e,h/i):Math.max(d/e,h/i);y=e*r,b=i*r,g=(d-y)/2,k=(h-b)/2}e.save();const I=f%180===0?1:y/b;e.translate(d/2,h/2),e.rotate(f*Math.PI/180),e.scale(1/I,I),e.translate(-d/2,-h/2),e.drawImage(this.toCanvasImageSource(),v,w,S,P,g,k,y,b),e.restore()}_rotateSourceRegion(e,t,i,r,n){return 90===n?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===n?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===n&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,n=e.height,[s,a]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,l=i.crop?i.crop.height:a;let c=0;2*r0?co(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=c;p>1;p--){const e=r*q(2,p),t=n*q(2,p);f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",c>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*n,0,0,r,n),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(ne(null!==this._data),this._data instanceof io||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}transform(e){return Y(this,null,function*(){var t,i,r,n,s;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&mo(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const a=se(this.rotation+(null!=(t=e.rotate)?t:0)),[o,l]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let c=e.crop;c&&(c=fo(c,o,l));const u=c?c.width:o,d=c?c.height:l,h=u/d;let f,m;void 0!==e.width&&void 0===e.height?(f=e.width,m=f/h):void 0===e.width&&void 0!==e.height?(m=e.height,f=m*h):void 0!==e.width&&void 0!==e.height?(f=e.width,m=e.height):(f=u,m=d),f=qe(f,null!=(i=e.roundDimensionsTo)?i:1),m=qe(m,null!=(r=e.roundDimensionsTo)?r:1);const p={width:f,height:m,fit:null!=(n=e.fit)?n:"fill",rotation:a,crop:null!=c?c:{left:0,top:0,width:o,height:l},alpha:null!=(s=e.alpha)?s:"keep"};for(const e of ao){let t=e(this,p);if(at(t)&&(t=yield t),null!==t)return t}const{canvas:g,context:k,isNew:y}=co(p.width,p.height);return this._drawWithFitAndMipmapping(g,k,{fit:p.fit,rotation:p.rotation,crop:p.crop,targetIsFresh:y,fillBlack:"discard"===p.alpha}),new so(g,{timestamp:this.timestamp,duration:this.duration,rotation:0})})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const ao=[],oo=[];let lo=0;const co=(e,t)=>{for(const n of oo)if(n.canvas.width===e&&n.canvas.height===t)return n.age=lo++,{canvas:n.canvas,context:n.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return oo.length>=3&&oo.splice(mt(oo,e=>e.age),1),oo.push({canvas:i,context:r,age:lo++}),{canvas:i,context:r,isNew:!0}};class uo{constructor(e){var t,i,r,n;if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(me);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(ge);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(ye);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=null!=(t=null==e?void 0:e.primaries)?t:null,this.transfer=null!=(i=null==e?void 0:e.transfer)?i:null,this.matrix=null!=(r=null==e?void 0:e.matrix)?r:null,this.fullRange=null!=(n=null==e?void 0:e.fullRange)?n:null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const ho=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,fo=(e,t,i)=>{const r=Math.min(e.left,t),n=Math.min(e.top,i),s=Math.min(e.width,t-r),a=Math.min(e.height,i-n);return ne(s>=0),ne(a>=0),{left:r,top:n,width:s,height:a}},mo=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},po=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},go=(e,t,i)=>{const r=ko(e),n=[];let s=0;for(const a of r){const e=Math.ceil(t/a.widthDivisor),r=Math.ceil(i/a.heightDivisor),o=e*a.sampleBytes,l=o*r;n.push({offset:s,stride:o}),s+=l}return n},ko=e=>{const t=(e,t,i,r,n)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return n&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:Me(e),ne(!1)}},yo=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,n=bo(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let a;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");a=t.format}else a=e.format;return vo(n,a,s)},bo=(e,t,i,r,n)=>{const s=H({},e);if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!To(n,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},To=(e,t)=>{if(null===e)return!0;const i=ko(e);for(let r=0;r{const r=ko(t),n=r.length;if(void 0!==i&&i.length!==n)throw new TypeError(`Layout must have ${n} planes.`);let s=0;const a=[],o=[];for(let l=0;l4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(null==e?void 0:e.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(Io(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*Io(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const s=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-n;if(s>this.numberOfFrames-n)throw new RangeError("frameCount out of range");const a=Io(r),o=xo(r);if(o&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!o&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(o?s:s*this.numberOfChannels)*a}copyTo(e,t){if(!we(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!wo.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:n}=t;let{planeIndex:s}=t,a=this.format;const o=null!=i?i:this.format;if(!o)throw new Error("Destination format not determined");const l=this.numberOfFrames,c=this.numberOfChannels,u=null!=n?n:0;if(u>=l)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:l-u;if(d>l-u)throw new RangeError("frameCount out of range");const h=Io(o),f=xo(o);if(f&&s>=c)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*c)*h;if(e.byteLength2&&o!==a)return void _o(this._data,p,a,o,c,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(w){if("f32-planar"===o)throw w;a="f32-planar"}}const k=Co(a),y=Io(a),b=xo(a);let T;if(this._data instanceof So){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=l*y*(b?1:c);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)T=e(s),s=0;else{T=new Uint8Array(l*y*c);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(n,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new Po({data:n,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(null==to||to.unregister(this),this._data instanceof So?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Eo(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof So?this._createAudioDataFromData():Eo(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(xo(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const n=Math.min(s,o),l=new Float32Array(i*n);for(let t=0;t0;){const n=Math.min(s,o),c=new Float32Array(i*n);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},xo=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Co=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},Bo=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,ze(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,ze(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,ze(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},Eo=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,_o=(e,t,i,r,n,s,a,o)=>{const l=Co(i),c=Bo(r),u=Io(i),d=Io(r),h=xo(i);if(xo(r))if(h){const r=new ArrayBuffer(o*u),n=de(r);e.copyTo(r,{planeIndex:s,frameOffset:a,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},Mo=e=>{if(!dt(e))throw new TypeError("timestamp must be a number.")},Do=(e,t,i)=>i.verifyKeyPackets?t.then(t=>Y(null,null,function*(){if(!t||"delta"===t.type)return t;const i=yield e.determinePacketType(t);return i&&(t.type=i),t})):t;class No{constructor(e){if(!(e instanceof Yo))throw new TypeError("track must be an InputTrack.");this._track=e}getFirstPacket(){return Y(this,arguments,function*(e={}){if(Ao(e),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getFirstPacket(e),e)})}getFirstKeyPacket(){return Y(this,arguments,function*(e={}){Ao(e);const t=yield this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null})}getPacket(e){return Y(this,arguments,function*(e,t={}){if(Mo(e),Ao(t),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getPacket(e,t),t)})}getNextPacket(e){return Y(this,arguments,function*(e,t={}){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(Ao(t),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getNextPacket(e,t),t)})}getKeyPacket(e){return Y(this,arguments,function*(e,t={}){if(Mo(e),Ao(t),this._track.input._disposed)throw new fl;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=yield this._track._backing.getKeyPacket(e,t);if(!i)return i;ne("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getKeyPacket(i.timestamp-1/(yield this._track.getTimeResolution()),t):i})}getNextKeyPacket(e){return Y(this,arguments,function*(e,t={}){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(Ao(t),this._track.input._disposed)throw new fl;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=yield this._track._backing.getNextKeyPacket(e,t);if(!i)return i;ne("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getNextKeyPacket(i,t):i})}packets(e,t,i={}){if(void 0!==e&&!(e instanceof kr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!(null==i?void 0:i.metadataOnly))throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof kr))throw new TypeError("endPacket must be an EncodedPacket.");if(Ao(i),this._track.input._disposed)throw new fl;const r=[];let{promise:n,resolve:s}=_e(),{promise:a,resolve:o}=_e(),l=!1,c=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(()=>Y(this,null,function*(){let u=null!=e?e:yield this.getFirstPacket(i);for(;u&&!c&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=(null==t?void 0:t.sequenceNumber));)r.length>f()?(({promise:a,resolve:o}=_e()),yield a):(r.push(u),s(),({promise:n,resolve:s}=_e()),u=yield this.getNextPacket(u,i));l=!0,s()}))().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{next(){return Y(this,null,function*(){for(;;){if(m.input._disposed)throw new fl;if(c)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};yield n}})},return(){return Y(this,null,function*(){return c=!0,o(),s(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}class Oo{constructor(e,t){this.onSample=e,this.onError=t}}class zo{mediaSamplesInRange(e=-1/0,t=1/0,i){Mo(e),Mo(t);const r=[];let n=!1,s=null,{promise:a,resolve:o}=_e(),{promise:l,resolve:c}=_e(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g=V(H({},i),{verifyKeyPackets:!0,metadataOnly:!1});(()=>Y(this,null,function*(){var i;f=yield this._createDecoder(i=>{c(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),n=!0):s.close()),i.timestamp>=e&&(r.push(i),n=!0),s=n?null:i,r.length>0&&(o(),({promise:a,resolve:o}=_e())))},e=>{p||(m=e,p=!0,o())});const k=this._createPacketSink(),y=null!=(i=yield k.getKeyPacket(e,g))?i:yield k.getFirstKeyPacket(g);let b=y;const T=k.packets(null!=y?y:void 0,void 0,g);for(yield T.next();b&&!d&&!this._track.input._disposed;){const e=Lo(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:l,resolve:c}=_e()),yield l;continue}f.decode(b);const t=yield T.next();if(t.done)break;b=t.value}yield T.return(),h||this._track.input._disposed||(yield f.flush()),!n&&s&&r.push(s),u=!0,o()}))().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{null==f||f.close()});const k=this._track,y=()=>{null==s||s.close();for(const e of r)e.close()};return{next(){return Y(this,null,function*(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new fl;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return c(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};yield a}})},return(){return Y(this,null,function*(){return h=!0,d=!0,c(),o(),y(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=function(e){return Z(this,null,function*(){Symbol.iterator in e?yield*ee(e[Symbol.iterator]()):yield*ee(e[Symbol.asyncIterator]())})}(e),r=[],n=[];let{promise:s,resolve:a}=_e(),{promise:o,resolve:l}=_e(),c=!1,u=!1,d=null,h=null,f=!1;const m=e=>{n.push(e),a(),({promise:s,resolve:a}=_e())},p=V(H({},t),{verifyKeyPackets:!0,metadataOnly:!1});(()=>Y(this,null,function*(){d=yield this._createDecoder(e=>{if(l(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,a())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=()=>Y(this,null,function*(){ne(s),ne(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:l}=_e()),yield o;if(u)break;const r=yield e.getNextPacket(t,p);ne(r),d.decode(r),t=r}g=-1}),y=()=>Y(this,null,function*(){ne(d),yield d.flush();for(let e=0;e{f||(h=e,f=!0,a())}).finally(()=>{null==d||d.close()});const g=this._track,k=()=>{for(const e of n)null==e||e.close()};return{next(){return Y(this,null,function*(){for(;;){if(g.input._disposed)throw u=!0,k(),new fl;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(n.length>0){const e=n.shift();return ne(void 0!==e),l(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};yield s}})},return(){return Y(this,null,function*(){return u=!0,l(),a(),k(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}const Lo=e=>0===e?40:8;class Uo extends Oo{constructor(e,t,i,r,n,s){var a,o,l,c,u,d,h,f;super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=n,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Ye,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const m=Ro.find(e=>e.supports(i,r));if(m)this.customDecoder=new m,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof so))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();ne(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(rt()){if("avc"===i&&this.decoderConfig.description){const e=Xt(ue(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=Gt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig=V(H({},this.decoderConfig),{hardwareAcceleration:"prefer-software"})),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=Yt(t),this.decoderConfig=V(H({},this.decoderConfig),{description:Kt(e)})))}}Te(this.decoderConfig.colorSpace)||(this.decoderConfig=V(H({},this.decoderConfig),{colorSpace:{primaries:null!=(o=null==(a=this.decoderConfig.colorSpace)?void 0:a.primaries)?o:"bt709",matrix:null!=(c=null==(l=this.decoderConfig.colorSpace)?void 0:l.matrix)?c:"bt709",transfer:null!=(d=null==(u=this.decoderConfig.colorSpace)?void 0:u.transfer)?d:"bt709",fullRange:null!=(f=null==(h=this.decoderConfig.colorSpace)?void 0:h.fullRange)&&f}}))}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){var e,t;return this.customDecoder?this.customDecoderQueueSize:(ne(this.decoder),Math.max(this.decoder.decodeQueueSize,null!=(t=null==(e=this.alphaDecoder)?void 0:e.decodeQueueSize)?t:0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(ne(this.decoder),Ze()||Ee(this.inputTimestamps,e.timestamp,e=>e),rt()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const n of Lt(e.data,this.decoderConfig)){const r=Ut(e.data[n.offset]);if(i||(i=r>=1&&r<=5),r===At.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&ue(t.description)[4];return Vt(e,i+1)}return Ht(e)})(t,this.decoderConfig);e=new kr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=di(e.data,this.decoderConfig);t&&(e=new kr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Wo),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();ne(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();ne(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=bi(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(null!=t?t:e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Jt(e,this.decoderConfig)){const i=Zt(e[t.offset]);if(i===Dt.RASL_N||i===Dt.RASL_R)return!0}return!1}sampleHandler(e){if(Ze()){if(this.sampleQueue.length>0&&e.timestamp>=ae(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}Ee(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();ne(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}mergeAlpha(e,t){return Y(this,null,function*(){const i=_e();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){ne(this.merger);const i=yield this.merger.merge(e,t);r.sample=new so(i)}else r.sample=new so(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(n){Re(this.finalSamples,r),this.onError(n)}finally{Re(this.mergeAlphaPromises,i.promise),i.resolve()}})}flush(){return Y(this,null,function*(){var e;if(this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(ne(this.decoder),yield Promise.all([this.decoder.flush(),null==(e=this.alphaDecoder)?void 0:e.flush()]),yield Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Ze()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1})}close(){var e;this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(ne(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,null==(e=this.merger)||e.close());for(const t of this.sampleQueue)t.close();this.sampleQueue.length=0}}let qo=null;class Wo{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!qo){const e=new Blob([`(${Ho.toString()})()`],{type:"application/javascript"});qo=URL.createObjectURL(e)}const e=ze(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=_e();this.pendingRequests.set(i,r);const n=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,n.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const Ho=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:n,alpha:s}=e.data;i=i.then(()=>Y(null,null,function*(){try{const e=yield r(n,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{n.close(),s.close()}}))});const r=(e,t)=>Y(null,null,function*(){const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),l=i.includes("P12"),c=r.includes("P10"),u=r.includes("P12");if(c!==o||u!==l)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return yield n(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return yield s(e,t,i);if("NV12"===i)return yield a(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)}),n=(e,t,i)=>Y(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=new Uint8Array(4*d);yield e.copyTo(h);const f=yield o(t,c,u,1);for(let e=0,t=3;eY(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=i.includes("P10"),h=i.includes("P12"),f=d||h?2:1;let m,p;i.startsWith("I420")?(m=Math.ceil(c/2),p=Math.ceil(u/2)):i.startsWith("I422")?(m=Math.ceil(c/2),p=u):(m=c,p=u);const g=c*u,k=g*f,y=m*p*f,b=new Uint8Array(k+2*y+g*f);yield e.copyTo(b);const T=yield o(t,c,u,f),v=k+2*y;b.set(T,v);const w={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:c,codedHeight:u,timestamp:e.timestamp,duration:null!=(l=e.duration)?l:void 0,transfer:[b.buffer]};return new VideoFrame(b,w)}),a=(e,i)=>Y(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=Math.ceil(c/2)*Math.ceil(u/2),f=e.allocationSize();t&&t.byteLength===f||(t=new Uint8Array(f)),yield e.copyTo(t);const m=new Uint8Array(d+2*h+d);m.set(t.subarray(0,d),0);const p=d,g=d+h,k=d;for(let e=0;eY(null,null,function*(){const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),yield t.copyTo(e);const a=t.format;if("RGBA"===a||"BGRA"===a||"RGBX"===a||"BGRX"===a){const t="RGBA"===a||"RGBX"===a?0:2,n=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class jo extends zo{constructor(e,t={}){if(!(e instanceof el))throw new TypeError("videoTrack must be an InputVideoTrack.");Vo(t),super(),this._track=e,this._decoderOptions=t}_createDecoder(e,t){return Y(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(nt("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getRotation();let n=yield this._track.getDecoderConfig();const s=yield this._track.getTimeResolution();return ne(i&&n),n=V(H({},n),{hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency}),new Uo(e,t,i,n,r,s)})}_createPacketSink(){return new No(this._track)}getSample(e){return Y(this,arguments,function*(e,t={}){Mo(e);try{for(var i,r,n,s=te(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ko{constructor(e,t={}){var i,r,n;if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof el))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&mo(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Vo(t.decoderOptions),this._videoTrack=e,this._alpha=null!=(i=t.alpha)&&i,this._options=t,this._fit=null!=(r=t.fit)?r:"fill",this._videoSampleSink=new jo(e,t.decoderOptions),this._canvasPool=Array.from({length:null!=(n=t.poolSize)?n:0},()=>null)}_ensureInit(){var e;return null!=(e=this._initPromise)?e:this._initPromise=(()=>Y(this,null,function*(){var e;const t=this._options,i=this._videoTrack,r=null!=(e=t.rotation)?e:yield i.getRotation(),n=yield i.getSquarePixelWidth(),s=yield i.getSquarePixelHeight(),[a,o]=r%180===0?[n,s]:[s,n];let l=t.crop;l&&(l=fo(l,a,o));let[c,u]=l?[l.width,l.height]:[a,o];const d=c/u;void 0!==t.width&&void 0===t.height?(c=t.width,u=Math.round(c/d)):void 0===t.width&&void 0!==t.height?(u=t.height,c=Math.round(u*d)):void 0!==t.width&&void 0!==t.height&&(c=t.width,u=t.height),this._width=c,this._height=u,this._rotation=r,this._crop=l}))()}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],n=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),n=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||tt()});ne(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:n,fillBlack:!this._alpha&&tt()});const a={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),a}getCanvas(e,t){return Y(this,null,function*(){Mo(e),yield this._ensureInit();const i=yield this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)})}canvases(e,t,i){return Z(this,null,function*(){yield new J(this._ensureInit()),yield*ee(Oe(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e)))})}canvasesAtTimestamps(e,t){return Z(this,null,function*(){yield new J(this._ensureInit()),yield*ee(Oe(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e)))})}}class Xo extends Oo{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Ye,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const n=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const n=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(n*s)/s),e(t)},s=Fo.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Po))throw new TypeError("The argument passed to onSample must be an AudioSample.");n(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{n(new Po(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(ne(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(ne(this.decoder),null!=this.expectedFirstTimestamp||(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return Y(this,null,function*(){this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(ne(this.decoder),yield this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0})}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(ne(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class $o extends Oo{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,ne(Vi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:n,littleEndian:s}=rr(this.codec);switch(this.inputSampleSize=n,n){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-q(2,7):"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const n=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let n=0;return n=4!==i?1<e.getUint16(t,s)-q(2,15):"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):ne(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>De(e,t,s)-q(2,23):"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>De(e,t,i)<<8>>8)(e,t,s):ne(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-q(2,31):"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):ne(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):ne(!1);break;default:Me(n),ne(!1)}switch(n){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+q(2,7)));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:Me(n),ne(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=de(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,n=new ArrayBuffer(r),s=new DataView(n);for(let c=0;c=a)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=a;const l=new Po({format:this.outputFormat,data:n,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(l)}flush(){return Y(this,null,function*(){})}close(){}}class Go extends zo{constructor(e){if(!(e instanceof tl))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}_createDecoder(e,t){return Y(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(nt("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getDecoderConfig();return ne(i&&r),Vi.includes(r.codec)?new $o(e,t,r):new Xo(e,t,i,r)})}_createPacketSink(){return new No(this._track)}getSample(e){return Y(this,arguments,function*(e,t={}){Mo(e);try{for(var i,r,n,s=te(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Qo{constructor(e){if(!(e instanceof tl))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Go(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}getBuffer(e,t){return Y(this,null,function*(){Mo(e);const i=yield this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)})}buffers(e,t,i){return Oe(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Oe(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class Yo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof el}isAudioTrack(){return this instanceof tl}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}getInternalCodecId(){return Y(this,null,function*(){return this._backing.getInternalCodecId()})}get internalCodecId(){return Jo(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}getLanguageCode(){return Y(this,null,function*(){return this._backing.getLanguageCode()})}get languageCode(){return Jo(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}getName(){return Y(this,null,function*(){return this._backing.getName()})}get name(){return Jo(this._backing.getName(),"name","getName")}getTimeResolution(){return Y(this,null,function*(){return this._backing.getTimeResolution()})}get timeResolution(){return Jo(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}isRelativeToUnixEpoch(){return Y(this,null,function*(){return this._backing.isRelativeToUnixEpoch()})}getUnixTimeForTimestamp(e){return Y(this,null,function*(){return this._backing.getUnixTimeForTimestamp(e)})}hasUnixTimeMapping(){return Y(this,null,function*(){return null!==(yield this._backing.getUnixTimeForTimestamp(yield this.getFirstTimestamp()))})}getDisposition(){return Y(this,null,function*(){return this._backing.getDisposition()})}get disposition(){return Jo(this._backing.getDisposition(),"disposition","getDisposition")}getBitrate(){return Y(this,null,function*(){return this._backing.getBitrate()})}getAverageBitrate(){return Y(this,null,function*(){return this._backing.getAverageBitrate()})}getFirstTimestamp(){return Y(this,null,function*(){var e;const t=yield this._backing.getFirstPacket({metadataOnly:!0});return null!=(e=null==t?void 0:t.timestamp)?e:0})}computeDuration(e){return Y(this,null,function*(){var t,i;const r=yield this._backing.getPacket(1/0,H({metadataOnly:!0},e)),n=(null!=(t=null==r?void 0:r.timestamp)?t:0)+(null!=(i=null==r?void 0:r.duration)?i:0);return We(n,yield this.getTimeResolution())})}getDurationFromMetadata(){return Y(this,arguments,function*(e={}){return this._backing.getDurationFromMetadata(e)})}computePacketStats(e=1/0,t){return Y(this,null,function*(){const i=new No(this);let r=1/0,n=-1/0,s=0,a=0;try{for(var o,l,c,u=te(i.packets(void 0,void 0,H({metadataOnly:!0},t)));o=!(l=yield u.next()).done;o=!1){const t=l.value;if(s>=e&&t.timestamp>=n)break;r=Math.min(r,t.timestamp),n=Math.max(n,t.timestamp+t.duration),s++,a+=t.byteLength}}catch(l){c=[l]}finally{try{o&&(l=u.return)&&(yield l.call(u))}finally{if(c)throw c[0]}}return{packetCount:s,averagePacketRate:s?Number((s/(n-r)).toPrecision(16)):0,averageBitrate:s?Number((8*a/(n-r)).toPrecision(16)):0}})}isLive(){return Y(this,null,function*(){return null!==(yield this._backing.getLiveRefreshInterval())})}getLiveRefreshInterval(){return Y(this,null,function*(){return this._backing.getLiveRefreshInterval()})}canBePairedWith(e){if(!(e instanceof Yo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&(this._backing.getPairingMask()&e._backing.getPairingMask())!==BigInt("0")}getPairableTracks(e){return Y(this,null,function*(){return this.input.getTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPairableVideoTracks(e){return Y(this,null,function*(){return this.input.getVideoTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPairableAudioTracks(e){return Y(this,null,function*(){return this.input.getAudioTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableVideoTrack(e){return Y(this,null,function*(){return this.input.getPrimaryVideoTrack(sl({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableAudioTrack(e){return Y(this,null,function*(){return this.input.getPrimaryAudioTrack(sl({filter:e=>e.canBePairedWith(this)},e))})}hasPairableTrack(e){return Y(this,null,function*(){e&&(e=Zo(e));const t=yield this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||(yield e(i))))return!0;return!1})}hasPairableVideoTrack(e){return e&&(e=Zo(e)),this.hasPairableTrack(t=>Y(this,null,function*(){return t.isVideoTrack()&&(!e||(yield e(t)))}))}hasPairableAudioTrack(e){return e&&(e=Zo(e)),this.hasPairableTrack(t=>Y(this,null,function*(){return t.isAudioTrack()&&(!e||(yield e(t)))}))}}const Jo=(e,t,i)=>{if(at(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},Zo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return at(r)?r.then(i):i(r)}:void 0};class el extends Yo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}getCodec(){return Y(this,null,function*(){return this._backing.getCodec()})}get codec(){return Jo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return Y(this,null,function*(){var e,t,i;return null!=(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:"prores"===(yield this._backing.getCodec())})}getCodedWidth(){return Y(this,null,function*(){return this._backing.getCodedWidth()})}get codedWidth(){return Jo(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}getCodedHeight(){return Y(this,null,function*(){return this._backing.getCodedHeight()})}get codedHeight(){return Jo(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}getRotation(){return Y(this,null,function*(){return this._backing.getRotation()})}get rotation(){return Jo(this._backing.getRotation(),"rotation","getRotation")}getSquarePixelWidth(){return Y(this,null,function*(){return this._backing.getSquarePixelWidth()})}get squarePixelWidth(){return Jo(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}getSquarePixelHeight(){return Y(this,null,function*(){return this._backing.getSquarePixelHeight()})}get squarePixelHeight(){return Jo(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}getPixelAspectRatio(){return Y(this,null,function*(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=pt({num:(yield this.getSquarePixelWidth())*(yield this.getCodedHeight()),den:(yield this.getSquarePixelHeight())*(yield this.getCodedWidth())})})}get pixelAspectRatio(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=pt({num:Jo(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Jo(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Jo(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Jo(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}getDisplayWidth(){return Y(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()})}get displayWidth(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(void 0!==i){const e=Jo(i,"displayWidth","getDisplayWidth");if(null!==e)return e}const r=Jo(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Jo(r,"displayWidth","getDisplayWidth")}getDisplayHeight(){return Y(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()})}get displayHeight(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(void 0!==i){const e=Jo(i,"displayHeight","getDisplayHeight");if(null!==e)return e}const r=Jo(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Jo(r,"displayHeight","getDisplayHeight")}getColorSpace(){return Y(this,null,function*(){return this._backing.getColorSpace()})}hasHighDynamicRange(){return Y(this,null,function*(){const e=yield this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix})}canBeTransparent(){return Y(this,null,function*(){return this._backing.canBeTransparent()})}getDecoderConfig(){return Y(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return Y(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return Y(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(ne(null!==t),Ro.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(yield VideoDecoder.isConfigSupported(e)).supported}catch(e){return vt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return Y(this,null,function*(){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=yield this.getCodec();if(null===t)return null;const i=yield this.getDecoderConfig();return ne(i),bi(t,i,e.data)})}computeFrameRateMetrics(){return Y(this,arguments,function*(e={}){var t,i;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!dt(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const r=yield this.getTimeResolution(),n=null!=(t=e.targetPacketCount)?t:256,s=new No(this),a=[];let o=-1/0,l=0;try{for(var c,u,d,h=te(s.packets(void 0,void 0,{metadataOnly:!0}));c=!(u=yield h.next()).done;c=!1){const e=u.value;if(a.length>=n&&e.timestamp>=o)break;a.push(e.timestamp),o=Math.max(o,e.timestamp),l++}}catch(u){d=[u]}finally{try{c&&(u=h.return)&&(yield u.call(h))}finally{if(d)throw d[0]}}const f=new Float64Array(a.length);for(let R=0;Re-t),I=S-1>>1,x=S>>1;let C=0,B=0,E=0;for(const R of P)if(E+=b.get(R),0===C&&E>I&&(C=R),E>x){B=R;break}const _=(k/C+k/B)/2;return{underlyingFrameRate:g,bestGuessFrameRate:null!==g?g:cl(_),minFrameRate:k/v,maxFrameRate:k/T,averageFrameRate:k*S/w,medianFrameRate:_,frameRateIsConstant:null!==g&&1===T&&1===v,probedPacketCount:l}})}}class tl extends Yo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}getCodec(){return Y(this,null,function*(){return this._backing.getCodec()})}get codec(){return Jo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return Y(this,null,function*(){var e,t,i;return null==(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))||i})}getNumberOfChannels(){return Y(this,null,function*(){return this._backing.getNumberOfChannels()})}get numberOfChannels(){return Jo(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}getSampleRate(){return Y(this,null,function*(){return this._backing.getSampleRate()})}get sampleRate(){return Jo(this._backing.getSampleRate(),"sampleRate","getSampleRate")}getDecoderConfig(){return Y(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return Y(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return Y(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(ne(null!==t),Fo.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(yield AudioDecoder.isConfigSupported(e)).supported}catch(e){return vt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return Y(this,null,function*(){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");return null===(yield this.getCodec())?null:"key"})}}const il=e=>-(null!=e?e:-1/0),rl=e=>-e,nl=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return at(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return at(r)?r.then(i):i(r)}:void 0}},sl=(e,t)=>({filter:(null==e?void 0:e.filter)||(null==t?void 0:t.filter)?i=>{var r,n;const s=null==(n=null==(r=null==e?void 0:e.filter)?void 0:r.call(e,i))||n,a=e=>{var r,n;return!1!==e&&(null==(n=null==(r=null==t?void 0:t.filter)?void 0:r.call(t,i))||n)};return at(s)?s.then(a):a(s)}:void 0,sortBy:(null==e?void 0:e.sortBy)||(null==t?void 0:t.sortBy)?i=>{var r,n,s,a;const o=null!=(n=null==(r=null==e?void 0:e.sortBy)?void 0:r.call(e,i))?n:[],l=null!=(a=null==(s=null==t?void 0:t.sortBy)?void 0:s.call(t,i))?a:[],c=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return at(o)||at(l)?Promise.all([o,l]).then(([e,t])=>c(e,t)):c(o,l)}:void 0}),al=(e,t)=>Y(null,null,function*(){let i=e;if(null==t?void 0:t.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>at(e))){const t=yield Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!(null==t?void 0:t.sortBy))return i;const r=i.map(e=>t.sortBy(e)),n=r.some(e=>at(e))?yield Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:n[t]})).sort((e,t)=>{var i,r;const n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],s=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(n.length,s.length);for(let o=0;oe.track)}),ol=(e,t)=>{const i=1e6,r=1+1e-9,n=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let v=1;v0))return null;s[v-1]=t}const a=s.slice();a.sort();let o=a[Math.floor(.05*a.length)];for(let v=0;v<6;v++){let e=0,t=0;for(const n of s){const i=Math.max(1,Math.round(n/o));Math.abs(n-i*o)>=r||(e+=n,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let l=0,c=0,u=0;for(const v of s){const e=Math.max(1,Math.round(v/o));Math.abs(v-e*o)>=r||(l++,c+=v,u+=e)}if(l/s.length<.98)return null;o=c/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const v of n){if(vp)continue;const e=Math.abs(v/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,n=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof xa)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ys||e.source instanceof Js))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ys&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof dl))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=null!=(t=e.initInput)?t:null,this._formatOptions=null!=(i=e.formatOptions)?i:{},e.source instanceof Ys?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}_getSourceUncached(e){return Y(this,null,function*(){ne(this._rootSource instanceof Zs);const t=yield this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t})}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&ea(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&ea(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const n=(()=>Y(this,null,function*(){const i=yield this._getSourceUncached(e);if(ft(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=mt(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);ne(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),Re(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);ne(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}}))();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:n}),n.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){var e;return null!=(e=this._demuxerPromise)?e:this._demuxerPromise=(()=>Y(this,null,function*(){var e;this._reader=new ml(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const t of this._formats){if(yield t._canReadInput(this))return this._format=t,null==(e=this._onFormatDetermined)||e.call(this,t),t._createDemuxer(this)}throw new hl}))()}get source(){return this._rootSource}getFormat(){return Y(this,null,function*(){return yield this._getDemuxer(),ne(this._format),this._format})}canRead(){return Y(this,null,function*(){try{return yield this._getDemuxer(),!0}catch(e){if(e instanceof hl)return!1;throw e}})}getFirstTimestamp(e){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=yield Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>{var t;return null!=(t=null==e?void 0:e.timestamp)?t:1/0}));return r===1/0?0:r})}computeDuration(e,t){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=yield Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)})}getDurationFromMetadata(e,t){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e),r=(yield Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)})}getTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return al(t,e)})}getVideoTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this.getTracks()).filter(e=>e.isVideoTrack());return al(t,e)})}getAudioTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this.getTracks()).filter(e=>e.isAudioTrack());return al(t,e)})}getPrimaryVideoTrack(e){return Y(this,null,function*(){var t;e&&(e=nl(e));const i=sl(e,{sortBy:e=>Y(null,null,function*(){return[rl((yield e.getDisposition()).default),rl(yield e.hasPairableAudioTrack()),rl(!(yield e.hasOnlyKeyPackets())),il(yield e.getBitrate())]})});return null!=(t=(yield this.getVideoTracks(i))[0])?t:null})}getPrimaryAudioTrack(e){return Y(this,null,function*(){var t;e&&(e=nl(e));const i=yield this.getPrimaryVideoTrack(),r=sl(e,{sortBy:e=>Y(this,null,function*(){return[rl(!i||e.canBePairedWith(i)),rl((yield e.getDisposition()).default),il(yield e.getBitrate())]})});return null!=(t=(yield this.getAudioTracks(r))[0])?t:null})}_getTrackBackings(){return Y(this,null,function*(){var e;const t=yield this._getDemuxer();return null!=(e=this._trackBackingsCache)?e:this._trackBackingsCache=yield t.getTrackBackings()})}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new el(this,e):new tl(this,e);return this._backingToTrack.set(e,i),i}getMimeType(){return Y(this,null,function*(){return(yield this._getDemuxer()).getMimeType()})}getMetadataTags(){return Y(this,null,function*(){return(yield this._getDemuxer()).getMetadataTags()})}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class hl extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class fl extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class ml{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){var e;return null!=(e=this.source._getFileSize())?e:null}requestSlice(e,t){if(this.source._disposed)throw new fl;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new pl(t,de(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,Qs);return at(r)?r.then(t=>t?new pl(t.bytes,t.view,t.offset,e,i):null):r?new pl(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new fl;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,ze(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),n=r=>r||(ne(null!==this.fileSizeNonStrict),this.requestSlice(e,ze(this.fileSizeNonStrict-e,t,i)));return at(r)?r.then(n):n(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(()=>Y(this,null,function*(){const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(at(i)&&(i=yield i),!i||0===i.length)break;const r=kl(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const n of e)i.set(n,r),r+=n.length;return new pl(i,de(i),0,0,t)}))()}}class pl{constructor(e,t,i,r,n){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=n,this.bufferPos=r-i}static tempFromBytes(e){return new pl(e,de(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new pl(this.bytes,this.view,this.offset,e,e+t)}}const gl=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},kl=(e,t)=>{gl(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},yl=e=>(gl(e,1),e.view.getUint8(e.bufferPos++)),bl=(e,t)=>{gl(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},Tl=e=>{gl(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},vl=e=>{gl(e,3);const t=De(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},wl=e=>{gl(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},Sl=(e,t)=>{gl(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},Pl=e=>{gl(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},Il=e=>{gl(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},xl=e=>{gl(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Cl=(e,t)=>{let i,r;return t?(i=Sl(e,!0),r=Sl(e,!0)):(r=Sl(e,!1),i=Sl(e,!1)),4294967296*r+i},Bl=e=>4294967296*Pl(e)+Pl(e),El=e=>4294967296*xl(e)+Pl(e),_l=e=>{const t=Il(e),i=(e=>{gl(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},Rl=e=>{gl(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},Fl=e=>{gl(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},Al=(e,t)=>{gl(e,t);let i="";for(let r=0;rhe.decode(kl(e,t)).split("\n").map(e=>e.trim()).filter(e=>{var t;return e.length>0&&!(null==(t=null==i?void 0:i.ignore)?void 0:t.call(i,e))});var Dl,Nl,Ol,zl;(Nl=Dl||(Dl={}))[Nl.Unsynchronisation=128]="Unsynchronisation",Nl[Nl.ExtendedHeader=64]="ExtendedHeader",Nl[Nl.ExperimentalIndicator=32]="ExperimentalIndicator",Nl[Nl.Footer=16]="Footer",(zl=Ol||(Ol={}))[zl.ISO_8859_1=0]="ISO_8859_1",zl[zl.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",zl[zl.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",zl[zl.UTF_8=3]="UTF_8";const Ll=128,Ul=10,ql=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],Wl=(e,t)=>{var i;const r=e.filePos;null!=t.raw||(t.raw={}),null!=(i=t.raw).TAG||(i.TAG=kl(e,Ll-3)),e.filePos=r;const n=Hl(e,30);n&&(null!=t.title||(t.title=n));const s=Hl(e,30);s&&(null!=t.artist||(t.artist=s));const a=Hl(e,30);a&&(null!=t.album||(t.album=a));const o=Hl(e,4),l=Number.parseInt(o,10);Number.isInteger(l)&&l>0&&(null!=t.date||(t.date=new Date(String(l))));const c=kl(e,30);let u;if(0===c[28]&&0!==c[29]){const i=c[29];i>0&&(null!=t.trackNumber||(t.trackNumber=i)),e.skip(-30),u=Hl(e,28),e.skip(2)}else e.skip(-30),u=Hl(e,30);u&&(null!=t.comment||(t.comment=u));const d=yl(e);d{const i=kl(e,t),r=ot(i.indexOf(0),i.length),n=i.subarray(0,r);let s="";for(let a=0;a{const t=e.filePos,i=Al(e,3),r=yl(e),n=yl(e),s=yl(e),a=Pl(e);if("ID3"!==i||255===r||255===n||0!==(2155905152&a))return e.filePos=t,null;let o=dr(a);return s&Dl.Footer&&(o+=Ul),{majorVersion:r,revision:n,flags:s,size:o}},jl=(e,t,i)=>{var r,n,s,a,o,l;if(![2,3,4].includes(t.majorVersion))return void vt._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&Dl.Footer?t.size-Ul:t.size,u=kl(e,c),d=new Kl(t,u);if(t.flags&Dl.Unsynchronisation&&3===t.majorVersion&&d.ununsynchronizeAll(),t.flags&Dl.ExtendedHeader){const e=d.readU32();3===t.majorVersion?d.pos+=e:d.pos+=e-4}for(;d.pos<=d.bytes.length-d.frameHeaderSize();){const e=d.readId3V2Frame();if(!e)break;const c=d.pos,u=d.pos+e.size;let h=!1,f=!1,m=!1;if(3===t.majorVersion?(h=!!(64&e.flags),f=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),f=!!(8&e.flags),m=!!(2&e.flags)||!!(t.flags&Dl.Unsynchronisation)),h)vt._warn(`Skipping encrypted ID3v2 frame ${e.id}`),d.pos=u;else if(f)vt._warn(`Skipping compressed ID3v2 frame ${e.id}`),d.pos=u;else{if(m&&d.ununsynchronizeRegion(d.pos,u),null!=i.raw||(i.raw={}),"TXXX"===e.id){const e=null!=(n=(r=i.raw).TXXX)?n:r.TXXX={},t=d.readId3V2TextEncoding(),s=d.readId3V2Text(t,u),a=d.readId3V2Text(t,u);null!=e[s]||(e[s]=a)}else"T"===e.id[0]?null!=(s=i.raw)[a=e.id]||(s[a]=d.readId3V2EncodingAndText(u)):null!=(o=i.raw)[l=e.id]||(o[l]=d.readBytes(e.size));switch(d.pos=c,e.id){case"TIT2":case"TT2":null!=i.title||(i.title=d.readId3V2EncodingAndText(u));break;case"TIT3":case"TT3":null!=i.description||(i.description=d.readId3V2EncodingAndText(u));break;case"TPE1":case"TP1":null!=i.artist||(i.artist=d.readId3V2EncodingAndText(u));break;case"TALB":case"TAL":null!=i.album||(i.album=d.readId3V2EncodingAndText(u));break;case"TPE2":case"TP2":null!=i.albumArtist||(i.albumArtist=d.readId3V2EncodingAndText(u));break;case"TRCK":case"TRK":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.trackNumber||(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.tracksTotal||(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.discNumber||(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.discsTotal||(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=d.readId3V2EncodingAndText(u);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==ql[e]){null!=i.genre||(i.genre=ql[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==ql[e]){null!=i.genre||(i.genre=ql[e]);break}}null!=i.genre||(i.genre=e)}break;case"TDRC":case"TDAT":{const e=d.readId3V2EncodingAndText(u),t=new Date(e);Number.isNaN(t.getTime())||null!=i.date||(i.date=t)}break;case"TYER":case"TYE":{const e=d.readId3V2EncodingAndText(u),t=Number.parseInt(e,10);Number.isInteger(t)&&(null!=i.date||(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.lyrics||(i.lyrics=d.readId3V2Text(e,u))}break;case"COMM":case"COM":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.comment||(i.comment=d.readId3V2Text(e,u))}break;case"APIC":case"PIC":{const e=d.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=d.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=d.readId3V2Text(e,u);const n=d.readU8(),s=d.readId3V2Text(e,u).trimEnd(),a=u-d.pos;if(a>=0){const e=d.readBytes(a);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===n?"coverFront":4===n?"coverBack":"unknown",description:s})}}break;default:d.pos+=e.size}d.pos=u}}};class Kl{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:dr(t);s(e)&&(i=e)}return this.pos=n,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case Ol.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=ot(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=ot(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),he.decode(r.subarray(0,e))}case Ol.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=ot(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Ol.UTF_8:{const e=ot(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),he.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class Xl{constructor(e){this.host=e,this.closed=!1,this.resumes=new WeakMap}ensure(e){if(this.closed)return null;if(this.host.audioContext)return this.host.audioContext;const t=window.AudioContext||window.webkitAudioContext;let i;try{i=new t({sampleRate:e})}catch(n){i=new t}if(this.closed)return i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null;let r=null;try{r=i.createGain(),r.connect(i.destination);const e=this.host.muted?0:this.host.volume;return r.gain.value=e*e,this.closed?(r.disconnect(),i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null):(this.host.audioContext=i,this.host.gainNode=r,i)}catch(s){try{null==r||r.disconnect()}catch(a){console.warn("MediaBunny gain setup cleanup:",a)}throw i.close().catch(e=>console.warn("MediaBunny context setup cleanup:",e)),s}}updateGain(){if(!this.host.gainNode)return;const e=this.host.muted?0:this.host.volume;this.host.gainNode.gain.value=e*e}resume(e){const t=this.resumes.get(e);if(t)return t;const i=e.resume();this.resumes.set(e,i);const r=()=>{this.resumes.get(e)===i&&this.resumes.delete(e)};return i.then(r,r),i}destroy(){if(this.closed)return;this.closed=!0;const{audioContext:e,gainNode:t}=this.host;this.host.audioContext=null,this.host.gainNode=null;try{null==t||t.disconnect()}finally{e&&e.close().catch(e=>console.warn("MediaBunny context close error:",e))}}}class $l{constructor(e){this.host=e}release(e,t){this.host.queuedNodes.delete(e),e.onended=null;let i,r=!1;try{t&&e.stop()}catch(n){r=!0,i=n}try{e.disconnect()}catch(n){r||(r=!0,i=n)}if(r)throw i}stop(){const e=[];for(const i of[...this.host.queuedNodes])try{this.release(i,!0)}catch(t){e.push(t)}if(e.length)throw e[0]}schedule({buffer:e,timestamp:t}){const i=this.host.audioContext,r=this.host.gainNode;if(!i||!r)return;const n=function(e,t,i,r){const n=e.audioContextStartTime+(t-e.playbackTimeAtStart)/e.playbackRate,s=(n+i/e.playbackRate-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;return{startAt:Math.max(n,r),offset:n=e.duration)return;const s=i.createBufferSource();this.host.queuedNodes.add(s);try{s.buffer=e,s.connect(r),s.playbackRate.value=this.host.playbackRate,s.onended=()=>{if(this.host.queuedNodes.has(s))try{this.release(s,!1)}catch(e){console.warn("MediaBunny ended node cleanup:",e)}},null===n.offset?s.start(n.startAt):s.start(n.startAt,n.offset),this.host.latestScheduledEndTime=Math.max(this.host.latestScheduledEndTime,n.endMediaTime)}catch(a){try{this.release(s,!0)}catch(o){console.warn("MediaBunny audio node cleanup:",o)}throw a}}}const Gl=Symbol("cancelled");class Ql{constructor(){this.cancelled=!1,this.waits=new Set,this.timers=new Map}wait(e){return new Promise((t,i)=>{const r=()=>t(Gl);this.cancelled?r():this.waits.add(r),e.then(e=>{this.waits.delete(r),t(e)},e=>{this.waits.delete(r),i(e)})})}delay(e){return this.cancelled?Promise.resolve(!1):new Promise(t=>{const i=setTimeout(()=>{this.timers.delete(i),t(!this.cancelled)},e);this.timers.set(i,t)})}cancel(){if(!this.cancelled){this.cancelled=!0;for(const e of this.waits)e();this.waits.clear();for(const[e,t]of this.timers)clearTimeout(e),t(!1);this.timers.clear()}}}function Yl(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}class Jl{constructor(e,t,i){this.host=e,this.contexts=t,this.nodes=i,this.task=null,this.closing=new WeakMap}stopIterator(){return Y(this,null,function*(){const e=this.host.audioIterator;if(this.host.audioIterator=null,!e)return;let t=this.closing.get(e);t||(t=Promise.resolve().then(()=>e.return()).then(()=>{}),this.closing.set(e,t)),yield t})}cancel(){var e;null==(e=this.task)||e.cancel(),this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e))}run(e){return Y(this,null,function*(){if(this.host.asyncId!==e)return;this.cancel();const t=this.host.audioSink,i=this.host.audioContext;if(!t||!i||this.host.paused||this.host.asyncId!==e)return;const r=new Ql;this.task=r;let n=null;const s=()=>!r.cancelled&&this.task===r&&this.host.asyncId===e&&!this.host.paused&&this.host.audioContext===i&&(!n||this.host.audioIterator===n);try{for(n=t.buffers(this.host.currentTime),this.host.audioIterator=n;s();){const e=[];let t=!1;for(let i=0;i<16;i++){const i=yield r.wait(n.next());if(i===Gl||!s())return;if(i.done){t=!0;break}e.push(i.value)}if(e.length&&"suspended"===i.state){if((yield r.wait(this.contexts.resume(i)))===Gl||!s())return;Yl(this.host.events,s,["canplay","playing"])}for(const i of e){if(!s())return;this.nodes.schedule(i)}if(t)return;if(!(yield r.delay(0))||!s())return;for(;this.host.latestScheduledEndTime-this.host.currentTime>1;)if(!(yield r.delay(50))||!s())return}}catch(a){if(s())throw a}finally{r.cancel(),this.task===r&&(this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e)))}})}}class Zl{constructor(e,d){X(this,u),X(this,t,!1),X(this,i,0),X(this,r),X(this,n),X(this,s),X(this,a,null),X(this,o,null),X(this,l,null),X(this,c),this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set,$(this,r,new Xl(this)),$(this,n,new $l(this)),$(this,s,new Jl(this,K(this,r),K(this,n))),$(this,c,d)}get currentTime(){return(e=this).paused||!e.audioContext?e.playbackTimeAtStart:(e.audioContext.currentTime-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;var e}ensureAudioContext(e){K(this,r).ensure(e)}updateGain(){K(this,r).updateGain()}stopQueuedNodes(){K(this,n).stop()}stopIterator(){return Y(this,null,function*(){yield K(this,s).stopIterator()})}handleNoAudioTrack(){K(this,t)||(this.audioSink=null,this.ensureAudioContext())}cancelPending(){Q(this,i)._++;try{this.pause()}finally{$(this,l,null),this.input=null,this.audioSink=null}}load(e,r){return Y(this,null,function*(){if(K(this,t))return;this.cancelPending();const n=K(this,i);this.playbackTimeAtStart=0,this.audioContextStartTime=0,this.latestScheduledEndTime=0;const s=Promise.resolve().then(()=>G(this,u,d).call(this,e,n,r));$(this,l,s);try{yield s}finally{K(this,l)===s&&$(this,l,null)}})}runIterator(e){return Y(this,null,function*(){K(this,t)||(yield K(this,s).run(e))})}play(){return Y(this,null,function*(){if(K(this,t))return;if(K(this,o))return K(this,o);if(!this.paused)return;const e=new Ql;$(this,a,e);const r=K(this,i),n=G(this,u,f).call(this,e,r);$(this,o,n);try{yield n}finally{K(this,a)===e&&($(this,a,null),$(this,o,null))}})}pause(){var e;this.paused||(this.playbackTimeAtStart=this.currentTime),this.paused=!0,this.asyncId++,null==(e=K(this,a))||e.cancel(),$(this,a,null),$(this,o,null),K(this,s).cancel(),this.stopQueuedNodes()}seek(e){return Y(this,null,function*(){var i,r;if(K(this,t))return;const n=!this.paused;K(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=null!=(r=null==(i=this.audioContext)?void 0:i.currentTime)?r:0,this.latestScheduledEndTime=this.playbackTimeAtStart;const a=++this.asyncId;n&&G(this,u,h).call(this,a)})}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){var i,r;if(K(this,t)||e===this.playbackRate)return;const n=this.currentTime;K(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=n,this.audioContextStartTime=null!=(r=null==(i=this.audioContext)?void 0:i.currentTime)?r:0,this.playbackRate=e,this.latestScheduledEndTime=n;const a=++this.asyncId;this.paused||G(this,u,h).call(this,a)}destroy(){if(K(this,t))return;$(this,t,!0),Q(this,i)._++;const e=[];for(const t of[()=>this.pause(),()=>K(this,r).destroy()])try{t()}catch(n){e.push(n)}if(this.input=null,this.audioSink=null,$(this,l,null),e.length)throw e[0]}}function ec(e){return Y(this,null,function*(){var t,i;return null!=(i=null!=(t=yield e.getAverageBitrate())?t:yield e.getBitrate())?i:0})}t=new WeakMap,i=new WeakMap,r=new WeakMap,n=new WeakMap,s=new WeakMap,a=new WeakMap,o=new WeakMap,l=new WeakMap,c=new WeakMap,u=new WeakSet,d=function(e,r,n){return Y(this,arguments,function*({input:e,audioTrack:r,duration:n},s,a){const o=()=>!K(this,t)&&K(this,i)===s;if(o()){this.input=e,this.duration=n;try{const e=r&&null!==r.codec&&(yield r.canDecode());if(!o())return;if(e){if(this.ensureAudioContext(r.sampleRate),!o())return;this.audioSink=new Qo(r)}else this.handleNoAudioTrack();o()&&(null==a||a())}catch(l){if(o())throw l}}})},h=function(e){this.runIterator(e).catch(i=>{if(!K(this,t)&&e===this.asyncId){try{this.pause()}catch(r){console.warn("MediaBunny audio failure cleanup:",r)}try{K(this,c)?K(this,c).call(this,i):this.events.emit("error",i)}catch(r){console.warn("MediaBunny audio error listener:",r)}}})},f=function(e,n){return Y(this,null,function*(){const s=()=>!K(this,t)&&!e.cancelled&&K(this,i)===n;try{const t=K(this,r).ensure();if(!t||!s())return;if("suspended"===t.state){if((yield e.wait(K(this,r).resume(t)))===Gl||!s())return}if(K(this,l)){if((yield e.wait(K(this,l)))===Gl||!s())return}this.audioContextStartTime=t.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1,G(this,u,h).call(this,++this.asyncId)}catch(a){if(s())throw a}})};const tc=/\.m3u8(?:$|[?#])/i;function ic(e){return"string"===typeof e&&tc.test(e)}function rc(e){const t=function(e){return"string"===typeof e?new oa(e):e instanceof Blob?new ra(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new ua(e):null!=e?e:null}(e);return t?new dl({source:t,formats:ic(e)?Ya:Qa}):null}class nc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){var e;return null==(e=this.controller)?void 0:e.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}wait(e,t){return Y(this,null,function*(){try{yield Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}})}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,null==e||e.dispose()}cancel(){var e;if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),null==(e=this.controller)||e.abort(),this.disposeInput()}}}function sc(e){return Y(this,arguments,function*({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),n=t||i,s=Boolean(n&&(yield n.isLive()));let a=Number.NaN;return r.length>0&&(a=yield e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==a||s||(a=yield e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:null!=a?a:Number.NaN})}function ac(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class oc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null}operation(){return V(H({},ac()),{source:this.host.loadSeq,complete:ac()})}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,null==e||e.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,null==e||e.complete.resolve(),null==e||e.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}runPlay(e){return Y(this,null,function*(){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(yield this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,yield this.host.audio.play(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Yl(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}})}seek(e,t){return this.position(t=>Y(this,null,function*(){const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();yield Promise.all([i,r])}),["seeked"],!1,t)}replace(e,t){return this.position(i=>Y(this,null,function*(){e.duration=yield sc(e),i()&&(this.host.media=e,yield Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(yield Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))}),["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=null!=r?r:this.seeking?this.wanted:!this.host.paused,this.cancelPlay();const n=this.seeking,s=this.operation();return this.seeking=s,null==n||n.complete.resolve(),null==n||n.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}runPosition(e,t,i,r){return Y(this,null,function*(){const n=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!n())return;if(this.host.ended=!1,this.host.seeking=!0,Yl(this.host.events,n,["seeking","waiting"]),!n())return;if(r||this.stop(),!n())return;if(yield t(n),!n())return;if(this.host.seeking=!1,e.complete.resolve(),Yl(this.host.events,n,i),!n())return;this.seeking=null,s=this.wanted}catch(a){if(!n())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(a),a}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&(yield this.play())})}}const lc=new WeakMap,cc=new WeakMap;function uc(e){const t=cc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>{var t;return null!=(t=e.value)?t:null});cc.set(e,i);const r=()=>{cc.get(e)===i&&cc.delete(e)};return i.then(r,r),i}function dc(e,t,i,r,n){const s=i?Math.max(.06,r/Math.max(1,n)):0;return i&&e{if(this.image===n&&t()){this.cancel();try{i(n)}catch(e){r(e)}}},n.onerror=()=>{this.image===n&&this.cancel()},n.src=e}}class fc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}update(e){return Y(this,null,function*(){var t;const i=this.host.videoIterator;if(!i||!this.ready()||!this.current(e)||this.host.isFetching)return;const r={};this.fetching=r,this.host.isFetching=!0;const n=()=>this.current(e)&&this.host.videoIterator===i;try{for(;n();){const e=yield uc(i);if(!n()||!e)return;const r=null==(t=this.host.audioClock)?void 0:t.currentTime;if(void 0===r)return;const s=dc(e.timestamp,r,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==s){if("draw"!==s)return void(this.host.nextFrame=e);this.draw(e)}}}catch(s){if(n())throw s}finally{this.fetching===r&&(this.fetching=null,this.host.isFetching=!1)}})}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Yl(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Yl(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!K(this,T),e=>G(this,P,E).call(this,e,!0),e=>G(this,P,C).call(this,e)))}preflight(e,t,i){return Y(this,null,function*(){return function(e,t,i,r,n=()=>!0){return Y(this,null,function*(){if((null==r?void 0:r.aborted)||!n())return!1;if(!t||"string"!==typeof e||ic(e))return!0;try{const t=yield fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if((null==r?void 0:r.aborted)||!n())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!((null==r?void 0:r.aborted)||!n())&&(console.warn("Preflight check failed:",s),!0)}})}(e,this.preflightRange,this.events,t,i)})}drawPoster(){if(K(this,b)||!this.poster||this.posterDrawn)return;const e=K(this,m);K(this,v).draw(this.poster,()=>G(this,P,I).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,G(this,P,x).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>G(this,P,C).call(this,e))}stopIterator(){return Y(this,null,function*(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,yield function(e){if(!e)return Promise.resolve();const t=lc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return lc.set(e,i),i}(e)})}clear(){G(this,P,x).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){Q(this,m)._++,Q(this,p)._++,this.stop(),G(this,P,B).call(this),K(this,v).cancel(),$(this,T,!1),$(this,g,null),$(this,k,null),$(this,y,null),this.videoSink=null,this.input=null}load(e,t){return Y(this,null,function*(){if(K(this,b))return;this.cancelPending();const i=K(this,m),r=K(this,p);$(this,T,!0);const n=Promise.resolve().then(()=>G(this,P,_).call(this,e,i,r,t));$(this,g,n);try{yield n}finally{K(this,g)===n&&$(this,g,null)}})}handleNoVideoTrack(){K(this,b)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}resetIterator(e){return Y(this,null,function*(){if(K(this,b))return;const t=K(this,m),i=++Q(this,p)._,r=K(this,g);this.stop(),K(this,v).cancel(),$(this,T,!0);try{r&&(yield r),yield G(this,P,R).call(this,e,t,i)}catch(n){if(G(this,P,I).call(this,t)&&K(this,p)===i)throw G(this,P,B).call(this),n}finally{G(this,P,I).call(this,t)&&K(this,p)===i&&$(this,T,!1)}})}updateNextFrame(e){return Y(this,null,function*(){yield K(this,w).update(e)})}render(){K(this,w).render()}start(e){K(this,w).start(e)}stop(){K(this,w).stop()}seek(e){return Y(this,null,function*(){yield this.resetIterator(e)})}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){K(this,b)||($(this,b,!0),Q(this,m)._++,K(this,w).destroy(),K(this,v).cancel(),G(this,P,B).call(this),this.posterDrawn=!1,$(this,k,null),$(this,y,null),this.videoSink=null,this.input=null,this.audioClock=null)}}m=new WeakMap,p=new WeakMap,g=new WeakMap,k=new WeakMap,y=new WeakMap,b=new WeakMap,T=new WeakMap,v=new WeakMap,w=new WeakMap,S=new WeakMap,P=new WeakSet,I=function(e){return!K(this,b)&&K(this,m)===e},x=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},C=function(e){K(this,b)||(G(this,P,B).call(this),K(this,S)?K(this,S).call(this,e):this.events.emit("error",e))},B=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},E=function(e,t){K(this,v).cancel(),t&&this.clear(),G(this,P,x).call(this).drawImage(e.canvas,0,0)},_=function(e,t,i,r){return Y(this,null,function*(){if(G(this,P,I).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:n,videoTrack:s,duration:a}=e;if(this.input=n,this.duration=a,!s)return this.handleNoVideoTrack(),void(null==r||r());const o=null!==s.codec&&(yield s.canDecode());if(!G(this,P,I).call(this,t))return;if(!o)return this.handleNoVideoTrack(),void(null==r||r());const l=yield s.canBeTransparent();if(!G(this,P,I).call(this,t))return;$(this,k,()=>new Ko(s,{poolSize:2,fit:"contain",alpha:l})),this.videoSink=K(this,k).call(this),this.width=s.displayWidth,this.height=s.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,null==r||r(),G(this,P,I).call(this,t)&&(yield G(this,P,R).call(this,0,t,i))}catch(n){if(G(this,P,I).call(this,t))throw G(this,P,B).call(this),n}finally{G(this,P,I).call(this,t)&&K(this,p)===i&&$(this,T,!1)}})},R=function(e,t,i){return Y(this,null,function*(){if(!G(this,P,I).call(this,t)||K(this,p)!==i)return;G(this,P,B).call(this),K(this,k)&&this.videoSink===K(this,y)&&(this.videoSink=K(this,k).call(this));const r=this.videoSink;if(!r||!G(this,P,I).call(this,t))return;$(this,y,r);const n=r.canvases(e);this.videoIterator=n;const s=()=>G(this,P,I).call(this,t)&&K(this,p)===i&&this.videoIterator===n,a=yield uc(n);if(!s())return;const o=yield uc(n);s()&&(this.nextFrame=o,a?G(this,P,E).call(this,a,!1):this.drawPoster())})};class pc{constructor({canvas:e,ctx:t,events:i,option:r={}}){var n,s,a,o,l;X(this,F),this.events=i,this.option=r,this.audio=new Zl(i,e=>{try{this.pause()}catch(t){console.warn("MediaBunny audio coordinator cleanup:",t)}this.reportError(e)}),this.video=new mc({canvas:e,ctx:t,events:i,timeupdateInterval:null!=(n=r.timeupdateInterval)?n:250,avSyncTolerance:null!=(s=r.avSyncTolerance)?s:.12,dropLateFrames:null!=(a=r.dropLateFrames)&&a,poster:null!=(o=r.poster)?o:"",preflightRange:null!=(l=r.preflightRange)&&l,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,$(this,F,new oc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,K(this,F).ended(),this.audio.pause())})}load(e){return Y(this,null,function*(){var t,i;if(this.destroyed)return;const r=++this.loadSeq;if(K(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),null==(t=this.loadSession)||t.cancel(),r!==this.loadSeq||this.destroyed)return;if(this.pause(),r!==this.loadSeq||this.destroyed)return;this.disposeInput();const n=new nc;this.loadSession=n,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,n.defer(()=>this.events.emit("waiting")),n.defer(()=>this.events.emit("loadstart"));const s=Number.isFinite(this.option.loadTimeout)&&null!=(i=this.option.loadTimeout)?i:0;try{yield n.wait(this.performLoad(e,r,n),s)}catch(a){if(r!==this.loadSeq)return;const e=++this.loadSeq;if(K(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),n.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}})}performLoad(e,t){return Y(this,arguments,function*(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(yield this.video.preflight(e,i.signal,r))||!r())return;const n=rc(e);if(!n)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(n);const s=yield function(e,t){return Y(this,null,function*(){const i=yield e.getPrimaryVideoTrack(),r=i?yield i.getPrimaryPairableAudioTrack():yield e.getPrimaryAudioTrack(),n=yield sc({input:e,videoTrack:i,audioTrack:r}),s=i||r,a=ic(t);return{input:e,videoTrack:i,audioTrack:r,duration:n,isLive:!Number.isFinite(n)&&Boolean(s&&(yield s.isLive())),isHls:a,videoMode:a?"auto":"manual",audioMode:a?"auto":"manual"}})}(n,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=n,this.media=s;const a=function(e,t){let i=!1,r=!1,n=!1;function s(s){t()&&!n&&("video"===s?i=!0:r=!0,i&&r&&(n=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Yl(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,a.video),t=r()?this.audio.load(s,a.audio):Promise.resolve();if(yield Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Yl(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}})}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){var e;null==(e=this.loadSession)||e.disposeInput(),this.input=null,this.media=null}replaceTracks(e){return Y(this,null,function*(){if(this.media&&!this.destroyed)return K(this,F).replace(H(H({},this.media),e),this.currentTime)})}selectHlsQuality(e){return Y(this,null,function*(){return function(e,t){return Y(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getVideoTracks();if(!a())return;const s="auto"===t?yield r.getPrimaryVideoTrack():null!=(i=e.find(e=>e.id===t))?i:n.videoTrack;if(!a()||!s)return;let l=n.audioTrack,c=n.audioMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableAudioTrack(),c="auto"),o={videoTrack:s,audioTrack:l,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}selectHlsAudio(e){return Y(this,null,function*(){return function(e,t){return Y(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getAudioTracks();if(!a())return;const s="auto"===t?n.videoTrack?yield n.videoTrack.getPrimaryPairableAudioTrack():yield r.getPrimaryAudioTrack():null!=(i=e.find(e=>e.id===t))?i:n.audioTrack;if(!a()||!s)return;let l=n.videoTrack,c=n.videoMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableVideoTrack(),c="auto"),o={videoTrack:l,audioTrack:s,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}getHlsState(){return Y(this,null,function*(){const e=this.media;if(this.destroyed)return null;try{const t=yield function(e){return Y(this,null,function*(){var t,i,r,n;if(!(null==e?void 0:e.isHls)||!e.input)return null;const[s,a]=yield Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[o,l]=yield Promise.all([Promise.all(s.map((e,t)=>Y(null,null,function*(){return{id:e.id,track:e,index:t,name:yield e.getName(),height:yield e.getDisplayHeight(),bitrate:yield ec(e)}}))),Promise.all(a.map((e,t)=>Y(null,null,function*(){const i=yield e.getName(),r=yield e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:yield ec(e)}})))]);return{levels:o,audios:l,currentLevel:e.videoTrack&&null!=(t=o.find(t=>{var i;return t.id===(null==(i=e.videoTrack)?void 0:i.id)}))?t:null,currentAudio:e.audioTrack&&null!=(i=l.find(t=>{var i;return t.id===(null==(i=e.audioTrack)?void 0:i.id)}))?i:null,videoMode:null!=(r=e.videoMode)?r:"auto",audioMode:null!=(n=e.audioMode)?n:"auto"}})}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}})}play(){return Y(this,null,function*(){return K(this,F).play()})}pause(){K(this,F).pause()}seek(e){return Y(this,null,function*(){return K(this,F).seek(e)})}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,K(this,F).invalidate();const e=[];for(const i of[()=>{var e;return null==(e=this.loadSession)?void 0:e.cancel()},()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){var e,t,i;return null!=(i=null!=(t=null==(e=this.media)?void 0:e.duration)?t:this.audio.duration)?i:this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}F=new WeakMap;const gc=new WeakMap;function kc(e){let t=gc.get(e);return t||(t={closed:!1,frames:new Set},gc.set(e,t)),t}class yc{constructor({art:e,canvas:t,ctx:i,option:r}){var n,s;this.art=e,this.canvas=t,this.option=r,this.events=new re,this.engine=new pc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=null!=(n=r.volume)?n:.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:(null==(s=e.option)?void 0:s.url)&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=kc(e);if(i.closed)return 0;const r=requestAnimationFrame(n=>{i.frames.delete(r),i.closed||t(n,{presentationTime:e.engine.currentTime,expectedDisplayTime:n+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:n,receiveTime:n,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){kc(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=kc(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,n=r("canvas"),s=n.getContext("2d"),a=new yc({art:t,canvas:n,ctx:s,option:e});t.mediabunny=a;const o={};for(const e in n)"function"===typeof n[e]&&(o[e]=n[e].bind(n));const l=new Set([...Object.getOwnPropertyNames(a),...Object.getOwnPropertyNames(Object.getPrototypeOf(a))]);for(const e of l)"constructor"!==e&&(e in n||Object.defineProperty(n,e,{get(){const t=a[e];return"function"===typeof t?t.bind(a):t},set(t){a[e]=t},configurable:!0,enumerable:!0}));for(const e in o)n[e]=(...t)=>o[e](...t);function c(){var e;(null==(e=t.template)?void 0:e.$player)&&!t.option.autoSize&&Object.assign(n.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",c),t.on("video:loadedmetadata",c),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function n(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),n("mediabunny-quality")}function a(){r("mediabunny-audio"),n("mediabunny-audio")}function o(e={}){return e.control||e.setting}function l(r){return Y(this,null,function*(){var n;const a=(null==(n=i.m3u8)?void 0:n.quality)||{};if(!o(a)||!(null==r?void 0:r.levels.length))return void s();const l=a.auto||"Auto",c=a.title||"Quality",d=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?d(r.currentLevel):l,f=ie(r.levels.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentLevel)?void 0:t.id)===e.id}}),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),n=r.levels.find(e=>e.id===t.value);return((null==n?void 0:n.height)||0)-((null==i?void 0:i.height)||0)});f.push({html:l,value:"auto",default:!r.currentLevel});const m=i=>Y(null,null,function*(){return yield t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function c(r){return Y(this,null,function*(){var n;const s=(null==(n=i.m3u8)?void 0:n.audio)||{};if(!o(s)||!(null==r?void 0:r.audios.length)||r.audios.length<2)return void a();const l=s.auto||"Auto",c=s.title||"Audio",d=s.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?d(r.currentAudio):l,f=ie(r.audios.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentAudio)?void 0:t.id)===e.id}}),"html");f.push({html:l,value:"auto",default:!r.currentAudio});const m=i=>Y(null,null,function*(){return yield t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});s.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function u(){return Y(this,null,function*(){const e=yield t.getM3u8State();if(!e)return s(),void a();yield Promise.all([l(e),c(e)])})}}({art:t,shim:a,option:e}),t.on("destroy",()=>{delete t.mediabunny,a.destroy()}),n}}}); diff --git a/docs/compiled/artplayer-proxy-mediabunny.mjs b/docs/compiled/artplayer-proxy-mediabunny.mjs index 322e9ce8b..be3f97e5e 100644 --- a/docs/compiled/artplayer-proxy-mediabunny.mjs +++ b/docs/compiled/artplayer-proxy-mediabunny.mjs @@ -20,7 +20,7 @@ var __privateWrapper = (obj, member, setter, getter) => ({ return __privateGet(obj, member, getter); } }); -var _closed, _generation, _iteration, _loading, _createSink, _usedSink, _destroyed, _preparing, _poster, _renderer, _onError, _VideoEngine_instances, current_fn, context_fn, report_fn, release_fn, draw_fn, load_fn, reset_fn, _playback; +var _closed, _closed2, _generation, _contexts, _nodes, _pump, _playTask, _playing, _loading, _onError, _AudioEngine_instances, load_fn, startPump_fn, play_fn, _generation2, _iteration, _loading2, _createSink, _usedSink, _destroyed, _preparing, _poster, _renderer, _onError2, _VideoEngine_instances, current_fn, context_fn, report_fn, release_fn, draw_fn, load_fn2, reset_fn, _playback; const $audio = ''; const $quality = ''; function uniqBy(array, property) { @@ -5317,13 +5317,13 @@ class IsobmffDemuxer extends Demuxer { const entryCount = readU32Be(slice); for (let i = 0; i < entryCount; i++) { const segmentDuration = version === 1 ? readU64Be(slice) : readU32Be(slice); - const mediaTime = version === 1 ? readI64Be(slice) : readI32Be(slice); + const mediaTime2 = version === 1 ? readI64Be(slice) : readI32Be(slice); const mediaRate = readFixed_16_16(slice); if (relevantEntryFound) { Logging._warn("Unsupported edit list: multiple edits are not currently supported. Only using first edit."); break; } - if (mediaTime === -1) { + if (mediaTime2 === -1) { previousSegmentDurations += segmentDuration; continue; } @@ -5332,7 +5332,7 @@ class IsobmffDemuxer extends Demuxer { break; } track.editListPreviousSegmentDurations = previousSegmentDurations; - track.editListOffset = mediaTime; + track.editListOffset = mediaTime2; relevantEntryFound = true; } } @@ -24076,8 +24076,344 @@ class Id3V2Reader { return this.readId3V2Text(encoding, until); } } +function mediaTime(clock) { + if (clock.paused || !clock.audioContext) + return clock.playbackTimeAtStart; + return (clock.audioContext.currentTime - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart; +} +function bufferTiming(clock, timestamp, duration, now) { + const startAt = clock.audioContextStartTime + (timestamp - clock.playbackTimeAtStart) / clock.playbackRate; + const endAt = startAt + duration / clock.playbackRate; + const endMediaTime = (endAt - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart; + return { startAt: Math.max(startAt, now), offset: startAt < now ? (now - startAt) * clock.playbackRate : null, endMediaTime }; +} +class ContextOwner { + constructor(host) { + this.host = host; + this.closed = false; + this.resumes = /* @__PURE__ */ new WeakMap(); + } + ensure(sampleRate) { + if (this.closed) + return null; + if (this.host.audioContext) + return this.host.audioContext; + const Context = window.AudioContext || window.webkitAudioContext; + let context; + try { + context = new Context({ sampleRate }); + } catch { + context = new Context(); + } + if (this.closed) { + void context.close().catch((error) => console.warn("MediaBunny obsolete context cleanup:", error)); + return null; + } + let gain = null; + try { + gain = context.createGain(); + gain.connect(context.destination); + const volume = this.host.muted ? 0 : this.host.volume; + gain.gain.value = volume * volume; + if (this.closed) { + gain.disconnect(); + void context.close().catch((error) => console.warn("MediaBunny obsolete context cleanup:", error)); + return null; + } + this.host.audioContext = context; + this.host.gainNode = gain; + return context; + } catch (error) { + try { + gain?.disconnect(); + } catch (failure) { + console.warn("MediaBunny gain setup cleanup:", failure); + } + void context.close().catch((failure) => console.warn("MediaBunny context setup cleanup:", failure)); + throw error; + } + } + updateGain() { + if (!this.host.gainNode) + return; + const volume = this.host.muted ? 0 : this.host.volume; + this.host.gainNode.gain.value = volume * volume; + } + resume(context) { + const previous = this.resumes.get(context); + if (previous) + return previous; + const pending = context.resume(); + this.resumes.set(context, pending); + const clear = () => { + if (this.resumes.get(context) === pending) + this.resumes.delete(context); + }; + pending.then(clear, clear); + return pending; + } + destroy() { + if (this.closed) + return; + this.closed = true; + const { audioContext: context, gainNode: gain } = this.host; + this.host.audioContext = null; + this.host.gainNode = null; + try { + gain?.disconnect(); + } finally { + if (context) + void context.close().catch((error) => console.warn("MediaBunny context close error:", error)); + } + } +} +class NodeQueue { + constructor(host) { + this.host = host; + } + release(node, stop) { + this.host.queuedNodes.delete(node); + node.onended = null; + let failed = false; + let failure; + try { + if (stop) + node.stop(); + } catch (error) { + failed = true; + failure = error; + } + try { + node.disconnect(); + } catch (error) { + if (!failed) { + failed = true; + failure = error; + } + } + if (failed) + throw failure; + } + stop() { + const failures = []; + for (const node of [...this.host.queuedNodes]) { + try { + this.release(node, true); + } catch (error) { + failures.push(error); + } + } + if (failures.length) + throw failures[0]; + } + schedule({ buffer, timestamp }) { + const context = this.host.audioContext; + const gain = this.host.gainNode; + if (!context || !gain) + return; + const timing = bufferTiming(this.host, timestamp, buffer.duration, context.currentTime); + if (timing.offset !== null && timing.offset >= buffer.duration) + return; + const node = context.createBufferSource(); + this.host.queuedNodes.add(node); + try { + node.buffer = buffer; + node.connect(gain); + node.playbackRate.value = this.host.playbackRate; + node.onended = () => { + if (!this.host.queuedNodes.has(node)) + return; + try { + this.release(node, false); + } catch (error) { + console.warn("MediaBunny ended node cleanup:", error); + } + }; + if (timing.offset === null) + node.start(timing.startAt); + else + node.start(timing.startAt, timing.offset); + this.host.latestScheduledEndTime = Math.max(this.host.latestScheduledEndTime, timing.endMediaTime); + } catch (error) { + try { + this.release(node, true); + } catch (failure) { + console.warn("MediaBunny audio node cleanup:", failure); + } + throw error; + } + } +} +const CANCELLED = /* @__PURE__ */ Symbol("cancelled"); +class AudioTask { + constructor() { + this.cancelled = false; + this.waits = /* @__PURE__ */ new Set(); + this.timers = /* @__PURE__ */ new Map(); + } + wait(pending) { + return new Promise((resolve, reject) => { + const cancel = () => resolve(CANCELLED); + if (this.cancelled) + cancel(); + else + this.waits.add(cancel); + pending.then((value) => { + this.waits.delete(cancel); + resolve(value); + }, (error) => { + this.waits.delete(cancel); + reject(error); + }); + }); + } + delay(ms) { + if (this.cancelled) + return Promise.resolve(false); + return new Promise((resolve) => { + const timer = setTimeout(() => { + this.timers.delete(timer); + resolve(!this.cancelled); + }, ms); + this.timers.set(timer, resolve); + }); + } + cancel() { + if (this.cancelled) + return; + this.cancelled = true; + for (const cancel of this.waits) + cancel(); + this.waits.clear(); + for (const [timer, resolve] of this.timers) { + clearTimeout(timer); + resolve(false); + } + this.timers.clear(); + } +} +function publish(events, current, names) { + for (const name of names) { + if (!current()) + return; + events.emit(name); + } +} +function metadataBarrier(ready, current) { + let video = false; + let audio = false; + let published = false; + function complete(part) { + if (!current() || published) + return; + if (part === "video") + video = true; + else audio = true; + if (video && audio) { + published = true; + ready(); + } + } + return { video: () => complete("video"), audio: () => complete("audio") }; +} +class AudioPump { + constructor(host, contexts, nodes) { + this.host = host; + this.contexts = contexts; + this.nodes = nodes; + this.task = null; + this.closing = /* @__PURE__ */ new WeakMap(); + } + async stopIterator() { + const iterator = this.host.audioIterator; + this.host.audioIterator = null; + if (!iterator) + return; + let pending = this.closing.get(iterator); + if (!pending) { + pending = Promise.resolve().then(() => iterator.return()).then(() => { + }); + this.closing.set(iterator, pending); + } + await pending; + } + cancel() { + this.task?.cancel(); + this.task = null; + void this.stopIterator().catch((error) => console.warn("MediaBunny audio iterator cleanup:", error)); + } + async run(id) { + if (this.host.asyncId !== id) + return; + this.cancel(); + const sink = this.host.audioSink; + const context = this.host.audioContext; + if (!sink || !context || this.host.paused || this.host.asyncId !== id) + return; + const task = new AudioTask(); + this.task = task; + let iterator = null; + const current = () => !task.cancelled && this.task === task && this.host.asyncId === id && !this.host.paused && this.host.audioContext === context && (!iterator || this.host.audioIterator === iterator); + try { + iterator = sink.buffers(this.host.currentTime); + this.host.audioIterator = iterator; + while (current()) { + const batch = []; + let done = false; + for (let index = 0; index < 16; index++) { + const result = await task.wait(iterator.next()); + if (result === CANCELLED || !current()) + return; + if (result.done) { + done = true; + break; + } + batch.push(result.value); + } + if (batch.length && context.state === "suspended") { + const resumed = await task.wait(this.contexts.resume(context)); + if (resumed === CANCELLED || !current()) + return; + publish(this.host.events, current, ["canplay", "playing"]); + } + for (const buffer of batch) { + if (!current()) + return; + this.nodes.schedule(buffer); + } + if (done) + return; + if (!await task.delay(0) || !current()) + return; + while (this.host.latestScheduledEndTime - this.host.currentTime > 1) { + if (!await task.delay(50) || !current()) + return; + } + } + } catch (error) { + if (current()) + throw error; + } finally { + task.cancel(); + if (this.task === task) { + this.task = null; + void this.stopIterator().catch((error) => console.warn("MediaBunny audio iterator cleanup:", error)); + } + } + } +} class AudioEngine { - constructor(events) { + constructor(events, onError) { + __privateAdd(this, _AudioEngine_instances); + __privateAdd(this, _closed2, false); + __privateAdd(this, _generation, 0); + __privateAdd(this, _contexts); + __privateAdd(this, _nodes); + __privateAdd(this, _pump); + __privateAdd(this, _playTask, null); + __privateAdd(this, _playing, null); + __privateAdd(this, _loading, null); + __privateAdd(this, _onError); this.events = events; this.input = null; this.audioSink = null; @@ -24094,164 +24430,108 @@ class AudioEngine { this.playbackRate = 1; this.asyncId = 0; this.queuedNodes = /* @__PURE__ */ new Set(); + __privateSet(this, _contexts, new ContextOwner(this)); + __privateSet(this, _nodes, new NodeQueue(this)); + __privateSet(this, _pump, new AudioPump(this, __privateGet(this, _contexts), __privateGet(this, _nodes))); + __privateSet(this, _onError, onError); } get currentTime() { - if (this.paused) - return this.playbackTimeAtStart; - return (this.audioContext.currentTime - this.audioContextStartTime) * this.playbackRate + this.playbackTimeAtStart; + return mediaTime(this); } ensureAudioContext(sampleRate) { - if (this.audioContext) - return; - const AudioContext = window.AudioContext || window.webkitAudioContext; - try { - this.audioContext = new AudioContext({ sampleRate }); - } catch { - this.audioContext = new AudioContext(); - } - this.gainNode = this.audioContext.createGain(); - this.gainNode.connect(this.audioContext.destination); - this.updateGain(); + __privateGet(this, _contexts).ensure(sampleRate); } updateGain() { - if (!this.gainNode) - return; - const v = this.muted ? 0 : this.volume; - this.gainNode.gain.value = v * v; + __privateGet(this, _contexts).updateGain(); } stopQueuedNodes() { - this.queuedNodes.forEach((node) => node.stop()); - this.queuedNodes.clear(); + __privateGet(this, _nodes).stop(); } async stopIterator() { - await this.audioIterator?.return(); - this.audioIterator = null; + await __privateGet(this, _pump).stopIterator(); } handleNoAudioTrack() { + if (__privateGet(this, _closed2)) + return; this.audioSink = null; this.ensureAudioContext(); } + cancelPending() { + __privateWrapper(this, _generation)._++; + try { + this.pause(); + } finally { + __privateSet(this, _loading, null); + this.input = null; + this.audioSink = null; + } + } async load(media, onMetadata) { - ++this.asyncId; - await this.stopIterator(); - this.stopQueuedNodes(); - this.paused = true; + if (__privateGet(this, _closed2)) + return; + this.cancelPending(); + const generation = __privateGet(this, _generation); this.playbackTimeAtStart = 0; this.audioContextStartTime = 0; - const { input, audioTrack, duration } = media; - this.input = input; - this.duration = duration; - if (!audioTrack) { - this.handleNoAudioTrack(); - onMetadata?.(); - return; + this.latestScheduledEndTime = 0; + const pending = Promise.resolve().then(() => __privateMethod(this, _AudioEngine_instances, load_fn).call(this, media, generation, onMetadata)); + __privateSet(this, _loading, pending); + try { + await pending; + } finally { + if (__privateGet(this, _loading) === pending) + __privateSet(this, _loading, null); } - if (audioTrack.codec === null || !await audioTrack.canDecode()) { - this.audioSink = null; - this.ensureAudioContext(); - onMetadata?.(); - return; - } - this.ensureAudioContext(audioTrack.sampleRate); - this.audioSink = new AudioBufferSink(audioTrack); - onMetadata?.(); } async runIterator(localId) { - if (!this.audioSink) + if (__privateGet(this, _closed2)) return; - await this.stopIterator(); - this.audioIterator = this.audioSink.buffers(this.currentTime); - const BATCH_SIZE = 16; - while (true) { - if (localId !== this.asyncId || this.paused) - return; - const batch = []; - let batchDone = false; - try { - for (let i = 0; i < BATCH_SIZE; i++) { - const result = await this.audioIterator.next(); - if (result.done) { - batchDone = true; - break; - } - batch.push(result.value); - } - } catch (e) { - console.error("Audio iterator error:", e); - batchDone = true; - } - if (localId !== this.asyncId || this.paused) - return; - if (batch.length > 0 && this.audioContext.state === "suspended") { - await this.audioContext.resume(); - this.events.emit("canplay"); - this.events.emit("playing"); - } - for (const { buffer, timestamp } of batch) { - const node = this.audioContext.createBufferSource(); - node.buffer = buffer; - node.connect(this.gainNode); - node.playbackRate.value = this.playbackRate; - const startAt = this.audioContextStartTime + (timestamp - this.playbackTimeAtStart) / this.playbackRate; - const duration = buffer.duration; - const endAt = startAt + duration / this.playbackRate; - const endMediaTime = (endAt - this.audioContextStartTime) * this.playbackRate + this.playbackTimeAtStart; - if (endMediaTime > this.latestScheduledEndTime) { - this.latestScheduledEndTime = endMediaTime; - } - if (startAt >= this.audioContext.currentTime) { - node.start(startAt); - } else { - node.start( - this.audioContext.currentTime, - (this.audioContext.currentTime - startAt) * this.playbackRate - ); - } - this.queuedNodes.add(node); - node.onended = () => this.queuedNodes.delete(node); - } - if (batchDone) - break; - await new Promise((resolve) => setTimeout(resolve, 0)); - const BUFFER_AHEAD = 1; - while (this.latestScheduledEndTime - this.currentTime > BUFFER_AHEAD) { - if (localId !== this.asyncId || this.paused) - return; - await new Promise((resolve) => setTimeout(resolve, 50)); - } - } + await __privateGet(this, _pump).run(localId); } async play() { + if (__privateGet(this, _closed2)) + return; + if (__privateGet(this, _playing)) + return __privateGet(this, _playing); if (!this.paused) return; - if (!this.audioContext) { - this.ensureAudioContext(); + const task = new AudioTask(); + __privateSet(this, _playTask, task); + const generation = __privateGet(this, _generation); + const pending = __privateMethod(this, _AudioEngine_instances, play_fn).call(this, task, generation); + __privateSet(this, _playing, pending); + try { + await pending; + } finally { + if (__privateGet(this, _playTask) === task) { + __privateSet(this, _playTask, null); + __privateSet(this, _playing, null); + } } - if (this.audioContext.state === "suspended") { - await this.audioContext.resume(); - } - this.audioContextStartTime = this.audioContext.currentTime; - this.latestScheduledEndTime = this.playbackTimeAtStart; - this.paused = false; - const id = ++this.asyncId; - this.runIterator(id); } pause() { - if (this.paused) - return; - this.playbackTimeAtStart = this.currentTime; + if (!this.paused) + this.playbackTimeAtStart = this.currentTime; this.paused = true; - this.stopIterator(); + this.asyncId++; + __privateGet(this, _playTask)?.cancel(); + __privateSet(this, _playTask, null); + __privateSet(this, _playing, null); + __privateGet(this, _pump).cancel(); this.stopQueuedNodes(); } async seek(time) { + if (__privateGet(this, _closed2)) + return; + const playing = !this.paused; + __privateGet(this, _pump).cancel(); + this.stopQueuedNodes(); this.playbackTimeAtStart = Math.max(0, time); - this.audioContextStartTime = this.audioContext.currentTime; + this.audioContextStartTime = this.audioContext?.currentTime ?? 0; this.latestScheduledEndTime = this.playbackTimeAtStart; const id = ++this.asyncId; - if (!this.paused) { - this.runIterator(id); - } + if (playing) + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, id); } setVolume(volume, muted) { this.volume = volume; @@ -24259,27 +24539,118 @@ class AudioEngine { this.updateGain(); } setPlaybackRate(rate) { - if (rate === this.playbackRate) + if (__privateGet(this, _closed2) || rate === this.playbackRate) return; - if (!this.paused) { - this.playbackTimeAtStart = this.currentTime; - this.audioContextStartTime = this.audioContext.currentTime; - } + const time = this.currentTime; + __privateGet(this, _pump).cancel(); + this.stopQueuedNodes(); + this.playbackTimeAtStart = time; + this.audioContextStartTime = this.audioContext?.currentTime ?? 0; this.playbackRate = rate; - if (!this.paused) { - const id = ++this.asyncId; - this.runIterator(id); - } + this.latestScheduledEndTime = time; + const id = ++this.asyncId; + if (!this.paused) + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, id); } destroy() { - this.asyncId++; - this.pause(); - this.audioContext?.close(); - this.audioContext = null; + if (__privateGet(this, _closed2)) + return; + __privateSet(this, _closed2, true); + __privateWrapper(this, _generation)._++; + const failures = []; + for (const release of [() => this.pause(), () => __privateGet(this, _contexts).destroy()]) { + try { + release(); + } catch (error) { + failures.push(error); + } + } this.input = null; this.audioSink = null; + __privateSet(this, _loading, null); + if (failures.length) + throw failures[0]; } } +_closed2 = new WeakMap(); +_generation = new WeakMap(); +_contexts = new WeakMap(); +_nodes = new WeakMap(); +_pump = new WeakMap(); +_playTask = new WeakMap(); +_playing = new WeakMap(); +_loading = new WeakMap(); +_onError = new WeakMap(); +_AudioEngine_instances = new WeakSet(); +load_fn = async function({ input, audioTrack, duration }, generation, onMetadata) { + const current = () => !__privateGet(this, _closed2) && __privateGet(this, _generation) === generation; + if (!current()) + return; + this.input = input; + this.duration = duration; + try { + const decodable = audioTrack && audioTrack.codec !== null && await audioTrack.canDecode(); + if (!current()) + return; + if (!decodable) { + this.handleNoAudioTrack(); + } else { + this.ensureAudioContext(audioTrack.sampleRate); + if (!current()) + return; + this.audioSink = new AudioBufferSink(audioTrack); + } + if (current()) + onMetadata?.(); + } catch (error) { + if (current()) + throw error; + } +}; +startPump_fn = function(id) { + void this.runIterator(id).catch((error) => { + if (__privateGet(this, _closed2) || id !== this.asyncId) + return; + try { + this.pause(); + } catch (failure) { + console.warn("MediaBunny audio failure cleanup:", failure); + } + try { + if (__privateGet(this, _onError)) + __privateGet(this, _onError).call(this, error); + else + this.events.emit("error", error); + } catch (failure) { + console.warn("MediaBunny audio error listener:", failure); + } + }); +}; +play_fn = async function(task, generation) { + const current = () => !__privateGet(this, _closed2) && !task.cancelled && __privateGet(this, _generation) === generation; + try { + const context = __privateGet(this, _contexts).ensure(); + if (!context || !current()) + return; + if (context.state === "suspended") { + const resumed = await task.wait(__privateGet(this, _contexts).resume(context)); + if (resumed === CANCELLED || !current()) + return; + } + if (__privateGet(this, _loading)) { + const loaded = await task.wait(__privateGet(this, _loading)); + if (loaded === CANCELLED || !current()) + return; + } + this.audioContextStartTime = context.currentTime; + this.latestScheduledEndTime = this.playbackTimeAtStart; + this.paused = false; + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, ++this.asyncId); + } catch (error) { + if (current()) + throw error; + } +}; async function selectQuality(host, value) { const { input, media, loadSeq } = host; if (!media?.isHls || !input || host.destroyed) @@ -24469,30 +24840,6 @@ class LoadSession { this.disposeInput(); } } -function publish(events, current, names) { - for (const name of names) { - if (!current()) - return; - events.emit(name); - } -} -function metadataBarrier(ready, current) { - let video = false; - let audio = false; - let published = false; - function complete(part) { - if (!current() || published) - return; - if (part === "video") - video = true; - else audio = true; - if (video && audio) { - published = true; - ready(); - } - } - return { video: () => complete("video"), audio: () => complete("audio") }; -} async function resolveDuration({ input, videoTrack, audioTrack }) { const tracks = [videoTrack, audioTrack].filter((track) => track !== null); const referenceTrack = videoTrack || audioTrack; @@ -24537,7 +24884,6 @@ class Playback { this.wanted = false; this.playing = null; this.seeking = null; - this.audioStart = null; } operation() { return { ...completion(), source: this.host.loadSeq, complete: completion() }; @@ -24602,17 +24948,6 @@ class Playback { this.runPlay(operation).then(operation.resolve, operation.reject); return operation.promise; } - async startAudio() { - if (!this.audioStart) - this.audioStart = this.host.audio.play(); - const pending = this.audioStart; - try { - await pending; - } finally { - if (this.audioStart === pending) - this.audioStart = null; - } - } async runPlay(operation) { const current = () => this.current(operation, "playing") && this.wanted; try { @@ -24624,7 +24959,7 @@ class Playback { if (!current()) return; this.host.paused = false; - await this.startAudio(); + await this.host.audio.play(); if (!current()) { if (!this.wanted || this.host.destroyed) this.host.audio.pause(); @@ -24974,16 +25309,16 @@ class Renderer { class VideoEngine { constructor({ canvas, ctx, events, timeupdateInterval = 250, avSyncTolerance = 0.12, dropLateFrames = false, poster = "", preflightRange: preflightRange2 = false, onError }) { __privateAdd(this, _VideoEngine_instances); - __privateAdd(this, _generation, 0); + __privateAdd(this, _generation2, 0); __privateAdd(this, _iteration, 0); - __privateAdd(this, _loading, null); + __privateAdd(this, _loading2, null); __privateAdd(this, _createSink, null); __privateAdd(this, _usedSink, null); __privateAdd(this, _destroyed, false); __privateAdd(this, _preparing, false); __privateAdd(this, _poster, new Poster()); __privateAdd(this, _renderer); - __privateAdd(this, _onError); + __privateAdd(this, _onError2); this.canvas = canvas; this.ctx = ctx; this.events = events; @@ -25007,7 +25342,7 @@ class VideoEngine { this.playbackRate = 1; this.posterDrawn = false; this.isFetching = false; - __privateSet(this, _onError, onError); + __privateSet(this, _onError2, onError); __privateSet(this, _renderer, new Renderer(this, () => !__privateGet(this, _preparing), (frame) => __privateMethod(this, _VideoEngine_instances, draw_fn).call(this, frame, true), (error) => __privateMethod(this, _VideoEngine_instances, report_fn).call(this, error))); } async preflight(source, signal, current) { @@ -25016,7 +25351,7 @@ class VideoEngine { drawPoster() { if (__privateGet(this, _destroyed) || !this.poster || this.posterDrawn) return; - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); __privateGet(this, _poster).draw(this.poster, () => __privateMethod(this, _VideoEngine_instances, current_fn).call(this, generation), (image) => { this.clear(); this.canvas.width = image.naturalWidth || this.canvas.width; @@ -25035,13 +25370,13 @@ class VideoEngine { __privateMethod(this, _VideoEngine_instances, context_fn).call(this).clearRect(0, 0, this.canvas.width, this.canvas.height); } cancelPending() { - __privateWrapper(this, _generation)._++; + __privateWrapper(this, _generation2)._++; __privateWrapper(this, _iteration)._++; this.stop(); __privateMethod(this, _VideoEngine_instances, release_fn).call(this); __privateGet(this, _poster).cancel(); __privateSet(this, _preparing, false); - __privateSet(this, _loading, null); + __privateSet(this, _loading2, null); __privateSet(this, _createSink, null); __privateSet(this, _usedSink, null); this.videoSink = null; @@ -25051,16 +25386,16 @@ class VideoEngine { if (__privateGet(this, _destroyed)) return; this.cancelPending(); - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); const iteration = __privateGet(this, _iteration); __privateSet(this, _preparing, true); - const pending = Promise.resolve().then(() => __privateMethod(this, _VideoEngine_instances, load_fn).call(this, media, generation, iteration, onMetadata)); - __privateSet(this, _loading, pending); + const pending = Promise.resolve().then(() => __privateMethod(this, _VideoEngine_instances, load_fn2).call(this, media, generation, iteration, onMetadata)); + __privateSet(this, _loading2, pending); try { await pending; } finally { - if (__privateGet(this, _loading) === pending) - __privateSet(this, _loading, null); + if (__privateGet(this, _loading2) === pending) + __privateSet(this, _loading2, null); } } handleNoVideoTrack() { @@ -25077,9 +25412,9 @@ class VideoEngine { async resetIterator(time) { if (__privateGet(this, _destroyed)) return; - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); const iteration = ++__privateWrapper(this, _iteration)._; - const loading = __privateGet(this, _loading); + const loading = __privateGet(this, _loading2); this.stop(); __privateGet(this, _poster).cancel(); __privateSet(this, _preparing, true); @@ -25119,7 +25454,7 @@ class VideoEngine { if (__privateGet(this, _destroyed)) return; __privateSet(this, _destroyed, true); - __privateWrapper(this, _generation)._++; + __privateWrapper(this, _generation2)._++; __privateGet(this, _renderer).destroy(); __privateGet(this, _poster).cancel(); __privateMethod(this, _VideoEngine_instances, release_fn).call(this); @@ -25131,19 +25466,19 @@ class VideoEngine { this.audioClock = null; } } -_generation = new WeakMap(); +_generation2 = new WeakMap(); _iteration = new WeakMap(); -_loading = new WeakMap(); +_loading2 = new WeakMap(); _createSink = new WeakMap(); _usedSink = new WeakMap(); _destroyed = new WeakMap(); _preparing = new WeakMap(); _poster = new WeakMap(); _renderer = new WeakMap(); -_onError = new WeakMap(); +_onError2 = new WeakMap(); _VideoEngine_instances = new WeakSet(); current_fn = function(generation) { - return !__privateGet(this, _destroyed) && __privateGet(this, _generation) === generation; + return !__privateGet(this, _destroyed) && __privateGet(this, _generation2) === generation; }; context_fn = function() { if (!this.ctx) @@ -25154,8 +25489,8 @@ report_fn = function(error) { if (__privateGet(this, _destroyed)) return; __privateMethod(this, _VideoEngine_instances, release_fn).call(this); - if (__privateGet(this, _onError)) - __privateGet(this, _onError).call(this, error); + if (__privateGet(this, _onError2)) + __privateGet(this, _onError2).call(this, error); else this.events.emit("error", error); }; @@ -25168,7 +25503,7 @@ draw_fn = function(frame, clear) { this.clear(); __privateMethod(this, _VideoEngine_instances, context_fn).call(this).drawImage(frame.canvas, 0, 0); }; -load_fn = async function(media, generation, iteration, onMetadata) { +load_fn2 = async function(media, generation, iteration, onMetadata) { if (!__privateMethod(this, _VideoEngine_instances, current_fn).call(this, generation)) return; try { @@ -25242,7 +25577,14 @@ class MediaBunnyEngine { __privateAdd(this, _playback); this.events = events; this.option = option; - this.audio = new AudioEngine(events); + this.audio = new AudioEngine(events, (error) => { + try { + this.pause(); + } catch (failure) { + console.warn("MediaBunny audio coordinator cleanup:", failure); + } + this.reportError(error); + }); this.video = new VideoEngine({ canvas, ctx, @@ -25279,6 +25621,7 @@ class MediaBunnyEngine { this.ended = true; this.paused = true; __privateGet(this, _playback).ended(); + this.audio.pause(); }); } async load(src) { @@ -25287,6 +25630,7 @@ class MediaBunnyEngine { const id = ++this.loadSeq; __privateGet(this, _playback).invalidate(); this.video.cancelPending(); + this.audio.cancelPending(); this.loadSession?.cancel(); if (id !== this.loadSeq || this.destroyed) return; @@ -25311,6 +25655,7 @@ class MediaBunnyEngine { const failed = ++this.loadSeq; __privateGet(this, _playback).invalidate(); this.video.cancelPending(); + this.audio.cancelPending(); session.cancel(); if (failed !== this.loadSeq || this.destroyed) return; diff --git a/package.json b/package.json index 0828b3057..e165eb578 100644 --- a/package.json +++ b/package.json @@ -51,7 +51,7 @@ "ci:build": "yarn build:types && yarn build all && yarn build:i18n && yarn build:ts && yarn build:docs && yarn test:imports", "test:imports": "node --test test/esm.test.js test/i18n.test.js test/ssr.test.js", "typecheck": "node scripts/typecheck.mjs", - "test:unit": "node --test test/mediabunny.test.js test/mediabunny-shim.test.js test/mediabunny-coordination.test.js test/mediabunny-video.test.js test/mediabunny-load.test.js test/mediabunny-input.test.js test/dpip.test.js test/dpip-lifecycle.test.js test/canvas.test.js test/canvas-lifecycle.test.js test/ambilight.test.js test/ambilight-lifecycle.test.js test/ambilight-proxy.test.js test/vast.test.js test/vast-lifecycle.test.js test/ads.test.js test/ads-lifecycle.test.js test/playback.test.js test/dash-control.test.js test/dash-contract.test.js test/dash-lifecycle.test.js test/dash-events.test.js test/hls-control.test.js test/audio-track.test.js test/public-behavior.test.js test/helpers.test.js test/chapter.test.js test/utils.test.js test/resource-scope.test.js test/instance-lifecycle.test.js test/options.test.js test/media-hosts.test.js test/plugins.test.js test/source.test.js test/playback-properties.test.js test/media-events.test.js test/template-resources.test.js test/core-vendor.test.js test/component-resources.test.js test/setting-model.test.js test/setting-layout.test.js test/setting-resources.test.js test/subtitle.test.js test/display-native.test.js test/display-video-fullscreen.test.js test/display-pip.test.js test/display-mini.test.js test/display-sizing.test.js test/display-orientation.test.js test/hotkey.test.js test/listener-registry.test.js test/global-events.test.js test/pointer-events.test.js test/gesture.test.js test/event-scheduling.test.js test/notice.test.js test/fast-forward.test.js test/auto-playback.test.js test/builtin-layers.test.js test/prompt-components.test.js test/screenshot.test.js test/thumbnails.test.js test/progress.test.js test/environment.test.js test/storage.test.js test/facade-properties.test.js test/dom-boundaries.test.js test/initialization.test.js test/entry.test.js test/accessibility-button.test.js test/accessibility-focus.test.js test/accessibility-slider.test.js", + "test:unit": "node --test test/mediabunny.test.js test/mediabunny-shim.test.js test/mediabunny-coordination.test.js test/mediabunny-video.test.js test/mediabunny-audio.test.js test/mediabunny-load.test.js test/mediabunny-input.test.js test/dpip.test.js test/dpip-lifecycle.test.js test/canvas.test.js test/canvas-lifecycle.test.js test/ambilight.test.js test/ambilight-lifecycle.test.js test/ambilight-proxy.test.js test/vast.test.js test/vast-lifecycle.test.js test/ads.test.js test/ads-lifecycle.test.js test/playback.test.js test/dash-control.test.js test/dash-contract.test.js test/dash-lifecycle.test.js test/dash-events.test.js test/hls-control.test.js test/audio-track.test.js test/public-behavior.test.js test/helpers.test.js test/chapter.test.js test/utils.test.js test/resource-scope.test.js test/instance-lifecycle.test.js test/options.test.js test/media-hosts.test.js test/plugins.test.js test/source.test.js test/playback-properties.test.js test/media-events.test.js test/template-resources.test.js test/core-vendor.test.js test/component-resources.test.js test/setting-model.test.js test/setting-layout.test.js test/setting-resources.test.js test/subtitle.test.js test/display-native.test.js test/display-video-fullscreen.test.js test/display-pip.test.js test/display-mini.test.js test/display-sizing.test.js test/display-orientation.test.js test/hotkey.test.js test/listener-registry.test.js test/global-events.test.js test/pointer-events.test.js test/gesture.test.js test/event-scheduling.test.js test/notice.test.js test/fast-forward.test.js test/auto-playback.test.js test/builtin-layers.test.js test/prompt-components.test.js test/screenshot.test.js test/thumbnails.test.js test/progress.test.js test/environment.test.js test/storage.test.js test/facade-properties.test.js test/dom-boundaries.test.js test/initialization.test.js test/entry.test.js test/accessibility-button.test.js test/accessibility-focus.test.js test/accessibility-slider.test.js", "test:coverage": "node --test test/coverage.test.js && node scripts/coverage.mjs", "test": "yarn test:node && yarn test:baseline", "test:browser": "playwright test", @@ -76,7 +76,7 @@ "test:canvas-types-package": "node refactor/scripts/canvas-package-types.mjs", "test:dpip": "node --test test/dpip.test.js test/dpip-lifecycle.test.js", "test:dpip-types-package": "node refactor/scripts/dpip-package-types.mjs", - "test:mediabunny": "node --test test/mediabunny.test.js test/mediabunny-shim.test.js test/mediabunny-coordination.test.js test/mediabunny-video.test.js test/mediabunny-load.test.js test/mediabunny-input.test.js" + "test:mediabunny": "node --test test/mediabunny.test.js test/mediabunny-shim.test.js test/mediabunny-coordination.test.js test/mediabunny-video.test.js test/mediabunny-audio.test.js test/mediabunny-load.test.js test/mediabunny-input.test.js" }, "browserslist": "last 1 Chrome version", "devDependencies": { diff --git a/packages/artplayer-proxy-mediabunny/ARCHITECTURE.md b/packages/artplayer-proxy-mediabunny/ARCHITECTURE.md index 4a79bfd44..69c656761 100644 --- a/packages/artplayer-proxy-mediabunny/ARCHITECTURE.md +++ b/packages/artplayer-proxy-mediabunny/ARCHITECTURE.md @@ -16,25 +16,29 @@ declarations, the factory signature, canvas forwarding, or package entrypoints. | `preflight.ts` | Optional HEAD Range check, historical warning/error policy, cancellation and stale-result guard | | `load-session.ts` | Ownership of the pending/active SDK Input, HEAD AbortController, deferred load events and deadline | | `MediaBunnyEngine.ts` | Load/readiness coordinator, source identity, errors and terminal teardown | -| `playback.ts` | Playback intent, cancellable play/seek/replacement operations and shared pending audio resume | +| `playback.ts` | Playback intent and cancellable play/seek/replacement operations | | `readiness.ts` | One metadata publication after both participants, guarded event sequences | | `hls-selection.ts` | Source-bound track queries, pairing and active replacement errors | | `VideoEngine.ts` | Video capability/setup, source and seek ownership, first frames and terminal cleanup | | `video-frames.ts` | Shared pending iterator reads, idempotent iterator release and existing frame timing policy | | `video-renderer.ts` | Owned RAF, stale frame rejection, clock-driven draw/stall/end events | | `video-poster.ts` | Per-request image callbacks, source guards and handler cleanup | -| `AudioEngine.js` | Remaining Web Audio clock, audio decoding and scheduling implementation | +| `AudioEngine.ts` | Audio load/play generation, clock anchors and decoder-error forwarding | +| `audio-clock.ts` | Existing media-clock and future/partially-late buffer scheduling formulas | +| `audio-context.ts` | Context/gain setup, sample-rate fallback, shared native resume and terminal close | +| `audio-nodes.ts` | Scheduled source nodes, rate, ended handlers and complete stop/disconnect | +| `audio-pump.ts` | SDK buffer iterator, bounded batches, backpressure and stale-result guards | +| `audio-task.ts` | Cancelable waits and owned batch/backpressure timers | | `VideoShim.ts` / `EventTarget.ts` | Video-like descriptors, synchronous/Promise forwarding and owned event lifecycle | | `shim-values.ts` | Existing volume coercion and synthetic TimeRanges values | | `shim-frames.ts` | Synthetic frame callbacks, per-instance RAF ownership and terminal cleanup | | `engine-types.ts` / `engine-ports.ts` | Internal shim, coordinator and decoder interfaces | -| `AudioEngine.d.ts` | Temporary boundary for the remaining JS audio engine, removed in MB-06 | | `m3u8.js` | Current ArtPlayer control/setting integration | -The twenty production TypeScript modules use strict checking with `skipLibCheck: false` -and no ambient Node types. The coordinator and video engine are checked implementations. -The adjacent audio declaration is a temporary boundary, not checking of its JavaScript -implementation. Remaining JavaScript is scheduled in PKG-MB-06/07/08. +The twenty-six production TypeScript modules use strict checking with `skipLibCheck: false` +and no ambient Node types. The coordinator and both decoder engines are checked +implementations; there are no remaining adjacent JavaScript declaration bridges. +The public factory and HLS integration remain JavaScript, scheduled in PKG-MB-07/08. Do not describe the whole package as migrated yet. The shim keeps its existing own-property order and direct prototype surface because @@ -86,7 +90,10 @@ for the seek completion signal, resolved before optional resume to avoid a cycle A pending AudioContext resume is shared across play-pause-play; only the current operation starts video and emits play/playing. Source change and destroy invalidate both operations. Cancellation settles the public operation while observing the underlying late result; -video frame ownership is detailed below; remaining audio work belongs to MB-06. +video and audio ownership are detailed below. Native resume coalescing belongs to the +context owner: each new playback intent calls audio.play(), but shares the same pending +native resume. Sharing a canceled upper-level play Promise would incorrectly start video +before the latest audio intent is active. Normal play, pause, seek/resume and HLS replacement event order is retained. Before each event the coordinator rechecks ownership, since a listener may synchronously pause, seek, @@ -140,6 +147,39 @@ stopIterator still rejects. Missing 2D context fails at use with a descriptive e than becoming falsely ready. Capability handling for existing undecodable tracks remains under MB-CAP-01/MB-READY-01; the current no-video fallback is preserved for that separate review. +## Audio clock and resource ownership + +AudioEngine keeps source generation separate from pump IDs and cancellable play intent. +Pause invalidates a suspended resume even when the audio clock has not started; source +replacement invalidates audio before track parsing. Late resume, capability checks and +buffer reads cannot install a sink, schedule nodes or resurrect a destroyed instance. +Native AudioContext.resume is coalesced per context, while canceled callers settle early +and late rejections stay observed. A valid no-audio-track source retains the Web Audio +clock fallback; this is distinct from rejecting a container with neither track. + +The clock retains the existing anchor/rate formula and squared gain with mute. Pause +captures media time; seek/rate changes cancel the old iterator and stop/disconnect its +scheduled nodes before rebuilding the queue at the new anchor. The renderer's ended +event freezes the audio clock and releases remaining nodes. Source load resets position. +Fully expired buffers do not allocate nodes; partially late buffers retain the old offset +calculation. Audio playbackRate changes still change pitch through native source playbackRate; +no new pitch-preservation or acoustic synchronization guarantee is introduced. + +AudioPump owns 16-buffer batches, a zero-delay yield and the existing one-second/50ms +backpressure policy. Its timers include ID zero and are canceled with its task. Iterator +detachment is synchronous and return is observed once; obsolete cleanup cannot clear a +new iterator. Native AudioBuffers have no close() contract: the SDK closes its AudioSamples, +while the proxy releases buffer/node/iterator references. Every scheduled source is owned +before start, cleared on ended, stopped/disconnected on cancellation, and has its callback +removed. Cleanup attempts all nodes and context resources before throwing the first error; +background cleanup failures are observed, and do not replace an active decoder failure. + +ContextOwner installs context/gain references only after successful setup. Setup failure +releases partial resources, destroy nulls references and observes the asynchronous close, +and repeated destroy is inert. Real-browser teardown assertions poll the native closed state. +Tests deliberately delay native resume completion or decoded buffer delivery, without +substituting fake audio decoding for native acceptance. + ## Types and dependencies The locked runtime SDK remains MediaBunny 1.56.1. Its pinned WebCodecs declaration @@ -160,6 +200,7 @@ yarn build artplayer-proxy-mediabunny yarn test:browser test/browser/mediabunny-inputs.spec.js test/browser/mediabunny.spec.js test/browser/mediabunny-load.spec.js yarn test:browser test/browser/mediabunny-shim.spec.js yarn test:browser test/browser/mediabunny-video.spec.js +yarn test:browser test/browser/mediabunny-audio.spec.js ``` Node tests use actual SDK parsing and controlled lifecycle interleavings. Browser tests @@ -174,9 +215,9 @@ inputs, not a rebuilt dist. Package-specific evidence and remaining tasks are in `refactor/mb-validation.md`. The full refactor plan is at the repository root. PKG-MB-04 covers duplicate/trackless readiness, reentrant event sequences and -pending play/seek coordination. PKG-MB-05/06 own late frame and audio callbacks, -including operations already inside decoders at cancellation; releasing Input alone -does not prove those resources are fully handled. PKG-MB-07 owns HLS UI/selection +pending play/seek coordination. PKG-MB-05/06 cover late frame and audio callbacks, +including operations already inside decoders at cancellation. These bounded cases do not +replace long-run synchronization and combination validation. PKG-MB-07 owns HLS UI/selection races. PKG-MB-09 owns long-run AV sync, full core/proxy/plugin combinations and device validation. PKG-MB-10 owns the demo, installed package and MPL/source notice gate. Windows WebKit without WebCodecs/Web Audio is recorded as a capability failure, diff --git a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js index 8f94a1cb0..d0f027a72 100644 --- a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js +++ b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,a,s,n,o,c,l,u,d,h,f,m,p,g,k,y,b,w=e=>{throw TypeError(e)},T=(e,t,i)=>t.has(e)||w("Cannot "+i),S=(e,t,i)=>(T(e,t,"read from private field"),i?i.call(e):t.get(e)),v=(e,t,i)=>t.has(e)?w("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),P=(e,t,i,r)=>(T(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),I=(e,t,i)=>(T(e,t,"access private method"),i),x=(e,t,i,r)=>({set _(r){P(e,t,r,i)},get _(){return S(e,t,r)}});function C(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class B{constructor(){v(this,e,!1),this.listeners=new Map}addEventListener(t,i){S(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),this.listeners.get(t)?.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){if(S(this,e))return;const r=Object.assign(new Event(t),{detail:i});this.listeners.get(t)?.forEach(t=>{S(this,e)||t(r)})}destroy(){P(this,e,!0),this.listeners.clear()}}function E(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const _=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},R=e=>e&&e[e.length-1],F=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-2**r)},D=e=>{const t=F(e);return 0===(1&t)?-(t>>1):t+1>>1},M=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),N=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),O=new TextDecoder,z=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),L={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},U=z(L),q={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},W=z(q),H={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},V=z(H),j=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,K={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},X=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class ${constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,await i,e}}const G=/^[0-9a-fA-F]+$/,Q=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),Y=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,J=(e,t,i)=>{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+a>>1,o=i(e[n]);o===t?(s=n,a=n-1):o{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+(a-r+1)/2|0;i(e[n])<=t?(s=n,r=n+1):a=n-1}return s},ee=(e,t,i)=>{const r=Z(e,i(t),i);e.splice(r+1,0,t)},te=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},ie=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},re=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},ae=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},se=e=>{throw new Error(`Unexpected value: ${e}`)},ne=(e,t,i)=>{const r=e.getUint8(t),a=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|a<<8|s<<16:r<<16|a<<8|s},oe=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},ce=(e,t)=>({async next(){const i=await e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),le=(e,t,i)=>Math.max(t,Math.min(i,e)),ue="und",de=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},he=(e,t)=>Math.round(e/t)*t,fe=(e,t)=>Math.round(e*t)/t,me=(e,t)=>Math.floor(e/t)*t,pe=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},ge=/^[a-z]{3}$/,ke=e=>ge.test(e),ye=1e6*(1+Number.EPSILON),be=(e,t)=>{const i={...e,...t};if(e.headers||t.headers){const r=e.headers?we(e.headers):{},a=t.headers?we(t.headers):{},s={...r};Object.entries(a).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},we=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Te=async(e,t,i,r,a)=>{let s=0;for(;;)try{return await e(t,i)}catch(n){if(a())throw n;s++;const e=r(s,n,t);if(null===e)throw n;if(Ke._error("Retrying failed fetch. Error:",n),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&await We(1e3*e),a())throw n}};class Se{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let ve=null;const Pe=()=>null!==ve?ve:ve=!("undefined"===typeof navigator||!(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)));let Ie=null;const xe=()=>null!==Ie?Ie:Ie="undefined"!==typeof navigator&&navigator.userAgent?.includes("Firefox");let Ce=null;const Be=()=>null!==Ce?Ce:Ce=!("undefined"===typeof navigator||!navigator.vendor?.includes("Google Inc")&&!/Chrome/.test(navigator.userAgent)),Ee=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,_e=(async()=>{})().constructor,Re=e=>e instanceof _e||e instanceof Promise||"function"===typeof e?.then,Fe=(e,t)=>-1!==e?e:t,Ae=(e,t,i,r)=>e<=r&&i<=t,De=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{Symbol.dispose??(Symbol.dispose=Symbol("Symbol.dispose"))},Ne=e=>"number"===typeof e&&!Number.isNaN(e),Oe=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const a=e.indexOf("/",r+3);i=-1===a?e+t:e.slice(0,a)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const a=i.indexOf("://");if(-1!==a){const e=i.indexOf("/",a+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),n=[];for(const o of s)".."===o?n.pop():"."!==o&&n.push(o);return r+n.join("/")},ze=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let a=0;a{E(Number.isInteger(e.num)),E(Number.isInteger(e.den)),E(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},qe=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},We=e=>new Promise(t=>setTimeout(t,e));class He{constructor(){this._listeners=new Map}on(e,t,i){this._listeners.has(e)||this._listeners.set(e,new Set);const r={fn:t,once:i?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(a){console.error(a)}s.once&&r.delete(s)}}}var Ve,je;(je=Ve||(Ve={}))[je.Silent=0]="Silent",je[je.Errors=1]="Errors",je[je.Warnings=2]="Warnings",je[je.Info=3]="Info";class Ke{constructor(){}static get level(){return Ke._level}static set level(e){if(e!==Ve.Silent&&e!==Ve.Errors&&e!==Ve.Warnings&&e!==Ve.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");Ke._level=e}static get _emitter(){return Ke._emitterInstance??(Ke._emitterInstance=new He)}static on(e,t,i){return Ke._emitter.on(e,t,i)}static _error(...e){Ke._emitter._emit("error",e),Ke._level>=Ve.Errors&&console.error(...e)}static _warn(...e){Ke._emitter._emit("warn",e),Ke._level>=Ve.Warnings&&console.warn(...e)}static _info(...e){Ke._emitter._emit("info",e),Ke._level>=Ve.Info&&console.info(...e)}}Ke._level=Ve.Info,Ke._emitterInstance=null;class Xe{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class $e{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const Ge={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class Qe{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),t=this.bytes[e]??0,i=7-(7&this.pos),r=(t&1<>i;return this.pos++,r}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new Qe(this.bytes);return e.pos=this.pos,e}}const Ye=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Je=[-1,1,2,3,4,5,6,8],Ze=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new Qe(e),i=et(t),{frequencyIndex:r,sampleRate:a}=tt(t),s=t.readBits(4);let n=null;s>=1&&s<=7&&(n=Je[s]);let o=i,c=!1,l=a;if(5===i||29===i)c=29===i,l=tt(t).sampleRate,o=et(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===et(t)&&t.readBits(1)&&(l=tt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(c=!!t.readBits(1)));break}t.pos=e+1}return null!==n&&n>1&&(c=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:c&&1===n?2:n}},et=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},tt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let a=0;t+3i&&(yield{offset:i,length:t-i}),i=t+a,t=i):t++}-1!==i&&i{if(t.description){const i=3&M(t.description)[4];return lt(e,i+1)}return ct(e)},dt=e=>31&e,ht=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+ft.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const a of e)i.set(ft,r),r+=ft.byteLength,i.set(a,r),r+=a.byteLength;return i},pt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let a=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(a,s.byteLength);break;case 2:e.setUint16(a,s.byteLength,!1);break;case 3:oe(e,a,s.byteLength);break;case 4:e.setUint32(a,s.byteLength,!1)}a+=t,r.set(s,a),a+=s.byteLength}return r},gt=e=>{try{const t=[],i=[],r=[];for(const o of ct(e)){const a=e.subarray(o.offset,o.offset+o.length),s=dt(a[0]);s===at.SPS?t.push(a):s===at.PPS?i.push(a):s===at.SPS_EXT&&r.push(a)}if(0===t.length)return null;if(0===i.length)return null;const a=t[0],s=wt(a);E(null!==s);const n=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:n?s.chromaFormatIdc:null,bitDepthLumaMinus8:n?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:n?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:n?r:null}}catch(t){return Ke._error("Error building AVC Decoder Configuration Record:",t),null}},kt=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=N(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=t.getUint8(i++),n=t.getUint8(i++),o=3&t.getUint8(i++),c=31&t.getUint8(i++),l=[];for(let f=0;f{try{const t=ht(e),i=new Qe(t);i.skipBits(1),i.skipBits(2);if(7!==i.readBits(5))return null;const r=i.readAlignedByte(),a=i.readAlignedByte(),s=i.readAlignedByte();F(i);let n=1,o=0,c=0,l=0;if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=F(i),3===n&&(l=i.readBits(1)),o=F(i),c=F(i),i.skipBits(1);if(i.readBits(1))for(let e=0;e<(3!==n?8:12);e++){if(i.readBits(1)){const t=e<6?16:64;let r=8,a=8;for(let e=0;ee.level>=s)??R(ki),r=Math.min(Math.floor(i.maxDpbMbs/(e*t)),16);v=r,P=r}else v=0,P=0}return E(null!==P),{emulationUnpreventedBytes:t,profileIdc:r,constraintFlags:a,levelIdc:s,frameMbsOnlyFlag:k,chromaFormatIdc:n,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:m,displayWidth:p,displayHeight:g,pixelAspectRatio:S,colourPrimaries:y,matrixCoefficients:w,transferCharacteristics:b,fullRangeFlag:T,numReorderFrames:v,maxDecFrameBuffering:P,vuiParametersFlagBitOffset:C,bitstreamRestrictionFlagBitOffset:I,bitstreamRestrictionFlag:x}}catch(t){return Ke._error("Error parsing AVC SPS:",t),null}},Tt=e=>{const t=F(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)F(e),F(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},St=e=>{E(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new Qe(e.emulationUnpreventedBytes),r=new Qe(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(E(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),A(r,2),A(r,1),A(r,16),A(r,16),A(r,e.numReorderFrames),A(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const a=r.pos/8;return E(Number.isInteger(a)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,a))},vt=(e,t)=>{if(t.description){const i=3&M(t.description)[21];return lt(e,i+1)}return ct(e)},Pt=e=>e>>1&63,It=e=>{try{const t=new Qe(ht(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:a,general_tier_flag:s,general_profile_idc:n,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:l}=Ct(t,i);F(t);const u=F(t);let d=0;3===u&&(d=t.readBits(1));const h=F(t),f=F(t);let m=h,p=f;if(t.readBits(1)){const e=F(t),i=F(t),r=F(t),a=F(t);let s=1,n=1;const o=0===d?u:0;1===o?(s=2,n=2):2===o&&(s=2,n=1),m-=(e+i)*s,p-=(r+a)*n}const g=F(t),k=F(t);F(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)F(t),b=F(t),F(t);F(t),F(t),F(t),F(t),F(t),F(t),t.readBits(1)&&t.readBits(1)&&Bt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),F(t),F(t),t.skipBits(1));const w=F(t);if(Et(t,w),t.readBits(1)){const e=F(t);for(let i=0;i{try{const t=[],i=[],r=[],a=[];for(const c of ct(e)){const s=e.subarray(c.offset,c.offset+c.length),n=Pt(s[0]);n===nt.VPS_NUT?t.push(s):n===nt.SPS_NUT?i.push(s):n===nt.PPS_NUT?r.push(s):n!==nt.PREFIX_SEI_NUT&&n!==nt.SUFFIX_SEI_NUT||a.push(s)}if(0===i.length||0===r.length)return null;const s=It(i[0]);if(!s)return null;let n=0;if(r.length>0){const e=r[0],t=new Qe(ht(e));t.skipBits(16),F(t),F(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),F(t),F(t),D(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&F(t),D(t),D(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),a=t.readBits(1);n=i||a?i&&!a?2:!i&&a?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:nt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:nt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:nt.PPS_NUT,nalUnits:r}]:[],...a.length?[{arrayCompleteness:1,nalUnitType:Pt(a[0][0]),nalUnits:a}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:n,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return Ke._error("Error building HEVC Decoder Configuration Record:",t),null}},Ct=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),a=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const n=new Uint8Array(6);for(let u=0;u<6;u++)n[u]=e.readBits(8);const o=e.readBits(8),c=[],l=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&D(e);for(let t=0;t{const i=[];for(let r=0;r{let a=0,s=0,n=0;if(0!==t&&(s=e.readBits(1)),s){if(t===i){n=t-(F(e)+1)}else n=t-1;e.readBits(1),F(e);const s=r[n]??0;for(let t=0;t<=s;t++){e.readBits(1)||e.readBits(1)}a=r[n]}else{const t=F(e),i=F(e);for(let r=0;r{let i=2,r=2,a=2,s=0,n=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=bt[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),a=e.readBits(8))),e.readBits(1)&&(F(e),F(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(F(e),F(e),F(e),F(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&F(e),e.readBits(1)&&Ft(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),n=F(e),F(e),F(e),F(e),F(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:a,fullRangeFlag:s,minSpatialSegmentationIdc:n}},Ft=(e,t,i)=>{let r=!1,a=!1,s=!1;r=1===e.readBits(1),a=1===e.readBits(1),(r||a)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let n=0;n<=i;n++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?F(e):i=1===e.readBits(1);let n=1;if(!i){n=F(e)+1}r&&At(e,n,s),a&&At(e,n,s)}},At=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Dt.audAllowed;for(const s of vt(e,t)){if(r===Dt.noMoreDataAllowed){i.add(s.offset);continue}const t=Pt(e[s.offset]);if(r===Dt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let a=!1;35===t?r>Dt.audAllowed?a=!0:r=Dt.beforeFirstVcl:t<=31?r>Dt.afterFirstVcl?a=!0:r=Dt.afterFirstVcl:36===t?r!==Dt.afterFirstVcl?a=!0:r=Dt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Dt.beforeFirstVcl?a=!0:r=Dt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&M(t.description)[21];return pt(e,i+1)}return mt(e)})(a,t)},Ot={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},zt=e=>{const t=new Qe(e);if(2!==t.readBits(2))return null;const i=t.readBits(1),r=(t.readBits(1)<<1)+i;3===r&&t.skipBits(1);if(1===t.readBits(1))return null;if(0!==t.readBits(1))return null;t.skipBits(2);if(4817730!==t.readBits(24))return null;let a=8;if(r>=2){a=t.readBits(1)?12:10}const s=t.readBits(3);let n=0,o=0;if(7!==s){if(o=t.readBits(1),1===r||3===r){const e=t.readBits(1),i=t.readBits(1);n=e||i?e&&!i?2:1:3,t.skipBits(1)}else n=1}else n=3,o=1;const c=(t.readBits(16)+1)*(t.readBits(16)+1);let l=R(yi).level;for(const d of yi)if(c<=d.maxPictureSize){l=d.level;break}const u=Ot[s];return{profile:r,level:l,bitDepth:a,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:u?.colourPrimaries??2,transferCharacteristics:u?.transferCharacteristics??2,matrixCoefficients:u?.matrixCoefficients??2}},Lt=function*(e){const t=new Qe(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*2**(7*i),!(128&r))break;if(7===i&&128&r)return null}return e>2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),a=t.readBits(1),s=t.readBits(1);let n;if(t.skipBits(1),a&&t.skipBits(8),s){const e=i();if(null===e)return;n=e}else n=Math.floor(t.getBitsLeft()/8);E(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+n)},t.skipBits(8*n)}},Ut=e=>{for(const{type:t,data:i}of Lt(e)){if(1!==t)continue;const e=new Qe(i),r=e.readBits(3);e.readBits(1);const a=e.readBits(1);let s=0,n=0,o=0;if(a)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let a=0;a<=r;a++){e.skipBits(12);const r=e.readBits(5);if(0===a&&(s=r),r>7){const t=e.readBits(1);0===a&&(n=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);const d=l+1;e.skipBits(d);let h=0;if(h=a?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!a){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,w=1,T=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,w=0,T=0):(b=e.readBits(1),0===r?(w=1,T=1):1===r?(w=0,T=0):12===m?(w=e.readBits(1),T=w?e.readBits(1):0):(w=1,T=0),w&&T&&(S=e.readBits(2))),{profile:r,level:s,tier:n,bitDepth:m,monochrome:p,chromaSubsamplingX:w,chromaSubsamplingY:T,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},qt=e=>{if(e.length<36)return null;const t=N(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},Wt=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],Ht=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){a=r.pos;break}if(0===a)throw new Error("Invalid Setup header: framing bit not found.");let s=0,n=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),a=r.readBits(16);if(t>63||0!==i||0!==a){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(n=!0,o=s)}if(!n)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const c=o;r.pos=0,r.skipBits(a);const l=Array(c).fill(0);for(let u=c-1;u>=0;u--)r.skipBits(40),l[u]=r.readBits(1);return{modeBlockflags:l}},Vt=(e,t,i)=>{switch(e){case"avc":for(const e of ut(i,t)){const t=i[e.offset],r=dt(t);if(r>=at.NON_IDR_SLICE&&r<=at.SLICE_DPC)return"delta";if(r===at.IDR)return"key";if(r===at.SEI&&!Be()){const t=i.subarray(e.offset,e.offset+e.length),r=ht(t);let a=1;do{let e=0;for(;;){const t=r[a++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[a++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new Qe(r);e.pos=8*a;const t=F(e),i=e.readBits(1);if(0===t&&1===i)return"key"}a+=t}while(a{var i,r;const a=N(e);let s=0;const n=a.getUint32(s,!0);s+=4;const o=O.decode(e.subarray(s,s+n));s+=n,n>0&&(t.raw??(t.raw={}),(i=t.raw).vendor??(i.vendor=o));const c=a.getUint32(s,!0);s+=4;for(let l=0;l0&&(t.trackNumber??(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=l.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(t.discNumber??(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.discsTotal??(t.discsTotal=e))}break;case"DATE":{const e=new Date(l);Number.isNaN(e.getTime())||(t.date??(t.date=e))}break;case"GENRE":t.genre??(t.genre=l);break;case"METADATA_BLOCK_PICTURE":{const e=De(l),i=N(e),r=i.getUint32(0,!1),a=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+a)),n=i.getUint32(8+a,!1),o=O.decode(e.subarray(12+a,12+a+n)),c=i.getUint32(a+n+28),u=e.subarray(a+n+32,a+n+32+c);t.images??(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},$t=[2,1,2,3,3,4,4,5],Gt=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new Qe(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),a=t.readBits(5);if(a>8)return null;const s=t.readBits(3),n=t.readBits(3);0!==(1&n)&&1!==n&&t.skipBits(2),0!==(4&n)&&t.skipBits(2),2===n&&t.skipBits(2);return{fscod:i,bsid:a,bsmod:s,acmod:n,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},Qt=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],Yt=[1,2,3,6],Jt=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new Qe(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),a=t.readBits(2);let s,n=0;3===a?(n=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;const u=Yt[s];let d;d=a<3?it[a]/1e3:rt[n]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:a,fscod2:n,bsid:l,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},Zt=e=>{const t=e.substreams[0];return E(t),t.fscod<3?it[t.fscod]:null!==t.fscod2&&t.fscod2<3?rt[t.fscod2]:null},ei=e=>{const t=e.substreams[0];E(t);let i=$t[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},ti=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],ii=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],ri=[16,16,20,20,0,24,24,0],ai=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],si=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],ni=[32e3,44100,48e3,0],oi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],ci=[512,1024,2048,4096],li=e=>{const t=di(e),i=N(e);let r=t?4*Math.ceil(t.frameSize/4):0,a=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=hi(e.subarray(r));if(!t)break;a??(a=t),r+=t.frameSize}if(t)return{frameSize:a?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==a};if(!a?.asset)return null;const{asset:s}=a;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},ui=e=>{const t=li(e);return t?.core?t.hasExtensions?"dtsh":"dtsc":null},di=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new Qe(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const a=t.readBits(14)+1;if(a<96)return null;const s=t.readBits(6);if(s>=ai.length)return null;const n=ti[t.readBits(4)];if(0===n)return null;const o=ii[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const c=t.readBits(2);if(3===c)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const l=ri[t.readBits(3)];if(0===l)return null;const u=0!==c;return{frameSize:a,sampleRate:n,numberOfChannels:ai[s]+(u?1:0),sampleCount:32*r,channelLayout:si[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:l}},hi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new Qe(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),a=8+4*r,s=16+4*r;t.skipBits(a);const n=t.readBits(s)+1,o={frameSize:n,asset:null};if(!t.readBits(1))return o;const c=ni[t.readBits(2)],l=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===c||t.getBitsLeft()<0?o:{frameSize:n,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(l*m/c),channelLayout:g,pcmResolution:f}}},fi=e=>pe(e)+pe(44646&e),mi=["avc","hevc","vp9","av1","vp8","prores"],pi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],gi=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...pi],ki=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],yi=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],bi=".01.01.01.01.00",wi=".0.110.01.01.01.0",Ti=["ap4x","ap4h","apch","apcn","apcs","apco"],Si=["dtsc","dtsh","dtsl","dtse"],vi=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:a,hevcCodecInfo:s,vp9CodecInfo:n,av1CodecInfo:o,proresFormat:c}=e;if("avc"===t){if(E(null!==e.avcType),a){const t=new Uint8Array([a.avcProfileIndication,a.profileCompatibility,a.avcLevelIndication]);return`avc${e.avcType}.${Q(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Q(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,a,n,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=Y(s.generalProfileCompatibilityFlags),a=s.generalTierFlag,n=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=N(i),c=s.getUint8(1);e=c>>6&3,t=31&c,r=Y(s.getUint32(2)),a=c>>5&1,n=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let c="hev1.";for(c+=["","A","B","C"][e]+t,c+=".",c+=r.toString(16).toUpperCase(),c+=".",c+=0===a?"L":"H",c+=n;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(c+=".",c+=o.map(e=>e.toString(16).toUpperCase()).join(".")),c}if("vp8"===t)return"vp8";if("vp9"===t){if(!n){const t=e.width*e.height;let i=R(yi).level;for(const e of yi)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${n.profile.toString().padStart(2,"0")}.${n.level.toString().padStart(2,"0")}.${n.bitDepth.toString().padStart(2,"0")}.${n.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${n.colourPrimaries.toString().padStart(2,"0")}.${n.transferCharacteristics.toString().padStart(2,"0")}.${n.matrixCoefficients.toString().padStart(2,"0")}.${n.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(bi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=R(yi).level;for(const e of yi)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),a=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),n=o.monochrome?"1":"0",c=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),l=r?.primaries?L[r.primaries]:1,u=r?.transfer?q[r.transfer]:1,d=r?.matrix?H[r.matrix]:1,h=r?.fullRange?1:0;let f=`av01.${t}.${i}${a}.${s}`;return f+=`.${n}.${c.toString().padStart(3,"0")}`,f+=`.${l.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(wi)&&(f=f.slice(0,-17)),f}if("prores"===t)return c??"apch";throw null!==t&&se(t),new TypeError(`Unhandled codec '${t}'.`)},Pi=e=>{switch(e.codec){case"avc":{let t=e.avcCodecInfo?.sequenceParameterSets[0];if(!t&&e.codecDescription&&(t=yt(e.codecDescription)?.sequenceParameterSets[0]),t){const e=wt(t);if(e)return{primaries:U[e.colourPrimaries],transfer:W[e.transferCharacteristics],matrix:V[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=e.hevcCodecInfo?.arrays.find(e=>e.nalUnitType===nt.SPS_NUT)?.nalUnits[0];if(!t&&e.codecDescription&&(t=(e=>{try{const t=N(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=a>>6&3,n=a>>5&1,o=31&a,c=t.getUint32(i,!1);i+=4;const l=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,w=k>>2&1,T=3&k,S=t.getUint8(i++),v=[];for(let P=0;P>7&1,s=63&r,n=t.getUint16(i,!1);i+=2;const o=[];for(let c=0;ce.nalUnitType===nt.SPS_NUT)?.nalUnits[0]),t){const e=It(t);if(e)return{primaries:U[e.colourPrimaries],transfer:W[e.transferCharacteristics],matrix:V[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:U[e.vp9CodecInfo.colourPrimaries],transfer:W[e.vp9CodecInfo.transferCharacteristics],matrix:V[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:U[e.av1CodecInfo.colourPrimaries],transfer:W[e.av1CodecInfo.transferCharacteristics],matrix:V[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:U[e.proresCodecInfo.colourPrimaries],transfer:W[e.proresCodecInfo.transferCharacteristics],matrix:V[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},Ii=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:a}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=Ze(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return a??"dtsc";if(t&&pi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},xi=48e3,Ci=/^pcm-([usf])(\d+)(be)?$/,Bi=e=>{if(E(pi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Ci.exec(e);let i;E(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?128:0}},Ei=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Ti.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Si.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Ci.test(e)?e:"webvtt"===e?"webvtt":null,_i=[44100,48e3,32e3],Ri=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],Fi=1483304551,Ai=1231971951,Di=(e,t)=>3===e?3===t?21:36:3===t?13:21,Mi=(e,t)=>{const i=e>>>24,r=e>>>16&255,a=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==a&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let n=0,o=0;16&r?n=8&r?0:1:(n=1,o=1);const c=r>>3&3,l=r>>1&3,u=(a>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Ri[16*n*4+16*l+(a>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=_i[u]>>n+o,b=((e,t,i,r,a)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Oi,zi;(zi=Oi||(Oi={}))[zi.FrameCount=1]="FrameCount",zi[zi.FileSize=2]="FileSize",zi[zi.Toc=4]="Toc";const Li=e=>3===e?1:2;class Ui{constructor(e){this.input=e}dispose(){}}const qi=new Uint8Array(0);class Wi{constructor(e,t,i,r,a=-1,s,n){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=a,e===qi&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(a))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==n&&("object"!==typeof n||!n))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==n?.alpha&&!(n.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==n?.alphaByteLength&&(!Number.isInteger(n.alphaByteLength)||n.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=n??{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===qi}get microsecondTimestamp(){return Math.trunc(ye*this.timestamp)}get microsecondDuration(){return Math.trunc(ye*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const i=new Uint8Array(e.byteLength);return e.copyTo(i),new Wi(i,e.type,e.timestamp/1e6,(e.duration??0)/1e6,void 0,void 0,t)}clone(e){if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==e?.data&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==e?.type&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==e?.timestamp&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==e?.duration&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==e?.sequenceNumber&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==e?.sideData&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new Wi(e?.data??this.data,e?.type??this.type,e?.timestamp??this.timestamp,e?.duration??this.duration,e?.sequenceNumber??this.sequenceNumber,this.byteLength,e?.sideData??this.sideData)}}const Hi=e=>{const t=N(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const a=Q(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=$o(e);const i=rc(e,4);let r=8;1===t&&(t=Jo(e),r=16);const a=t-r;return a<0?null:{name:i,totalSize:t,headerSize:r,contentSize:a}},Ki=e=>Qo(e)/65536,Xi=e=>Qo(e)/1073741824,$i=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=Wo(e);if(t|=127&i,0===(128&i))break}return t},Gi=e=>{let t=Vo(e);return e.skip(2),t=Math.min(t,e.remainingLength),O.decode(qo(e,t))},Qi=e=>{const t=ji(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=$o(e);e.skip(4);const r=qo(e,t.contentSize-8);switch(i){case 1:return O.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new Xe(r,"image/jpeg");case 14:return new Xe(r,"image/png");case 27:return new Xe(r,"image/bmp");default:return r}},Yi=16,Ji=new Uint32Array(256),Zi=new Uint32Array(256),er=new Uint32Array(256),tr=new Uint32Array(256),ir=new Uint32Array(256),rr=new Uint32Array(256),ar=new Uint32Array(10);let sr=!1;class nr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(Yi/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(Yi),this.out=new Uint8Array(Yi),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){E(16===e.byteLength),E(16===t.byteLength),sr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,n=1;s<256;s++)i[s]=n,t[n]=s,n=n^n<<1^(128&n?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let a=r^r<<1^r<<2^r<<3^r<<4;a=a>>>8^255&a^99,e[s]=a}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);Ji[s]=t<<24|t<<16|t<<8|t,rr[s]=i<<24|i<<16|i<<8|i;const a=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);Zi[s]=a,er[s]=a>>>8|a<<24,tr[s]=a>>>16|a<<16,ir[s]=a>>>24|a<<8}let a=1;for(let s=0;s<10;s++)ar[s]=a<<24,a=a<<1^(128&a?283:0);sr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let a=4;a<44;a+=4){const e=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^4278190080&Ji[e>>>16&255]^16711680&Ji[e>>>8&255]^65280&Ji[e>>>0&255]^255&Ji[e>>>24&255]^ar[a/4-1],this.roundkey[a+1]=this.roundkey[a-3]^this.roundkey[a],this.roundkey[a+2]=this.roundkey[a-2]^this.roundkey[a+1],this.roundkey[a+3]=this.roundkey[a-1]^this.roundkey[a+2]}for(let a=0,s=40;a>>24&255]]^er[255&Ji[t>>>16&255]]^tr[255&Ji[t>>>8&255]]^ir[255&Ji[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const a=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),n=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let c,l,u,d;for(let g=1;g<10;g++){const a=4*g;c=Zi[e>>>24]^er[r>>>16&255]^tr[i>>>8&255]^ir[255&t]^this.roundkey[a],l=Zi[t>>>24]^er[e>>>16&255]^tr[r>>>8&255]^ir[255&i]^this.roundkey[a+1],u=Zi[i>>>24]^er[t>>>16&255]^tr[e>>>8&255]^ir[255&r]^this.roundkey[a+2],d=Zi[r>>>24]^er[i>>>16&255]^tr[t>>>8&255]^ir[255&e]^this.roundkey[a+3],e=c,t=l,i=u,r=d}const h=4278190080&rr[e>>>24&255]^16711680&rr[r>>>16&255]^65280&rr[i>>>8&255]^255&rr[t>>>0&255]^this.roundkey[40],f=4278190080&rr[t>>>24&255]^16711680&rr[e>>>16&255]^65280&rr[r>>>8&255]^255&rr[i>>>0&255]^this.roundkey[41],m=4278190080&rr[i>>>24&255]^16711680&rr[t>>>16&255]^65280&rr[e>>>8&255]^255&rr[r>>>0&255]^this.roundkey[42],p=4278190080&rr[r>>>24&255]^16711680&rr[i>>>16&255]^65280&rr[t>>>8&255]^255&rr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=a,this.iv[1]=s,this.iv[2]=n,this.iv[3]=o}}class or extends Ui{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.tracks.map(e=>e.trackBacking)}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>"video"===e.info?.type),hasAudio:this.tracks.some(e=>"audio"===e.info?.type),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Re(r)&&(r=await r),!r)break;const a=e,s=ji(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=rc(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Re(e)&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>a+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');await this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=a+s.totalSize}if(!i&&this.input._initInput&&await this.copyMetadataFromInitInput(this.input._initInput),t){E(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Re(e)&&(e=await e),E(e);const t=$o(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Re(e)&&(e=await e),e){const t=ji(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Re(i)&&(i=await i),i&&this.readContiguousBoxes(i)}}}}})())}async copyMetadataFromInitInput(e){const t=await e._getDemuxer();if(t.constructor!==or)throw new Error("Init input must match the input's format.");await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const i of t.tracks){const e={id:i.id,demuxer:this,trackBacking:null,disposition:i.disposition,timescale:i.timescale,durationInMediaTimescale:i.durationInMediaTimescale,durationInMovieTimescale:i.durationInMovieTimescale,rotation:i.rotation,internalCodecId:i.internalCodecId,name:i.name,languageCode:i.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:i.editListPreviousSegmentDurations,editListOffset:i.editListOffset,encryptionInfo:i.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:i.info};if(i.trackBacking)if(E(e.info),"video"===e.info.type&&-1!==e.info.width){const t=e;e.trackBacking=new lr(t),this.tracks.push(e)}else if("audio"===e.info.type&&-1!==e.info.numberOfChannels){const t=e;e.trackBacking=new ur(t),this.tracks.push(e)}}}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;const t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,null===e.sampleTableByteOffset)return t;E(this.moovSlice);const i=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(i),this.currentTrack=null;if("audio"===e.info?.type&&e.info.codec&&pi.includes(e.info.codec)&&0===t.sampleCompositionTimeOffsets.length){E("audio"===e.info?.type);const i=Bi(e.info.codec),r=[],a=[];for(let s=0;se.startIndex),u=t.sampleTimingEntries[l],d=Z(t.sampleTimingEntries,c,e=>e.startIndex),h=t.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(c-h.startIndex)*h.delta-f,p=R(r);p&&p.delta===m?p.count++:r.push({startIndex:n.startChunkIndex+s,startDecodeTimestamp:f,count:1,delta:m});const g=n.samplesPerChunk*i.sampleSize*e.info.numberOfChannels;a.push(g)}n.startSampleIndex=n.startChunkIndex,n.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=a}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(const e of t.sampleTimingEntries)for(let i=0;ie.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===a.moofOffset);if(i)pr(s,i.timestamp);else{const e=Z(t,a.moofOffset-1,e=>e.moofOffset);if(-1!==e){const i=t[e];pr(s,i.endTimestamp)}}s.startTimestampIsFinal=!0}const i=Z(t,s.startTimestamp,e=>e.startTimestamp);if(-1!==i&&t[i].moofOffset===a.moofOffset||t.splice(i+1,0,{moofOffset:a.moofOffset,startTimestamp:s.startTimestamp,endTimestamp:s.endTimestamp}),s.encryptionAuxInfo&&e.encryptionInfo){const t=await br(this.reader,e.encryptionInfo,s.encryptionAuxInfo);for(let e=0;e0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;ke(t.languageCode)||(t.languageCode=ue)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=rc(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:{...K},avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=L,this.readContiguousBoxes(e.slice(H,q.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=Wo(e);e.skip(3);const r=$o(e);for(let a=0;a0&&(1===n?(e.skip(4),c=8*$o(e),e.skip(8)):2===n&&(e.skip(4),l=ic(e),o=$o(e),e.skip(4),c=$o(e),u=$o(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+a.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=xi;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(Si.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===c?t.info.codec="pcm-s8":16===c?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(Ke._warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===c?t.info.codec="pcm-s8":16===c?t.info.codec="pcm-s16":(Ke._warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(Ke._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(Ke._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(Ke._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(Ke._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=c+7>>3,i=Boolean(1&u),r=Boolean(2&u),a=4&u?-1:0;c>0&&c<=64&&(i?32===c&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):a&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==Wo(e),t.encryptionInfo.defaultPerSampleIvSize=Wo(e),t.encryptionInfo.defaultKid=Q(qo(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=Wo(e),r=new Uint8Array(16);r.set(qo(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(E(t.info),0===q.contentSize)break;t.info.codecDescription=qo(e,q.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(E(t.info),0===q.contentSize)break;t.info.codecDescription=qo(e,q.contentSize)}break;case"vpcC":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type),e.skip(4);const i=Wo(e),r=Wo(e),a=Wo(e),s=a>>4,n=a>>1&7,o=1&a,c=Wo(e),l=Wo(e),u=Wo(e);t.info.vp9CodecInfo={profile:i,level:r,bitDepth:s,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case"av1C":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type),e.skip(1);const i=Wo(e),r=i>>5,a=31&i,s=Wo(e),n=s>>7,o=s>>6&1,c=s>>4&1,l=s>>3&1,u=s>>2&1,d=3&s,h=2===r&&o?s>>5&1?12:10:o?10:8;e.skip(1);const f=qo(e,q.contentSize-4),m=Ut(f);t.info.av1CodecInfo={profile:r,level:a,tier:n,bitDepth:h,monochrome:c,chromaSubsamplingX:l,chromaSubsamplingY:u,chromaSamplePosition:d,videoFullRangeFlag:m?.videoFullRangeFlag??0,colourPrimaries:m?.colourPrimaries??2,transferCharacteristics:m?.transferCharacteristics??2,matrixCoefficients:m?.matrixCoefficients??2}}break;case"colr":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type);const i=rc(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=Vo(e),a=Vo(e),s=Vo(e);let n;"nclx"===i&&(n=Boolean(128&Wo(e))),t.info.colorSpace={primaries:U[r],transfer:W[a],matrix:V[s],fullRange:n}}break;case"pasp":{const t=this.currentTrack;if(!t)break;E("video"===t.info?.type);const i=$o(e),r=$o(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==t.info?.type)break;e.skip(4);E(3===Wo(e)),$i(e),e.skip(2);const i=Wo(e),r=0!==(64&i),a=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=Wo(e);e.skip(t)}a&&e.skip(2);E(4===Wo(e));const s=$i(e),n=e.filePos,o=Wo(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":Ke._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-n){E(5===Wo(e));const i=$i(e);if(t.info.codecDescription=qo(e,i),"aac"===t.info.codec){const e=Ze(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),t.info.pcmLittleEndian=!!(255&Vo(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(4);const i=Wo(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=Wo(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(1);const i=Wo(e),r=Vo(e),a=$o(e),s=Ko(e),n=Wo(e);let o;o=0!==n?qo(e,2+i):new Uint8Array(0);const c=new Uint8Array(19+o.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,i),l.setUint16(10,r,!0),l.setUint32(12,a,!0),l.setInt16(16,s,!0),l.setUint8(18,n),c.set(o,19),t.info.codecDescription=c,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type),e.skip(4);const i=127,r=128,a=e.filePos;for(;e.filePos>>12,a=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=a,e.skip(20)}else e.skip(s);if(a&r)break}const s=e.filePos;e.filePos=a;const n=qo(e,s-a),o=new Uint8Array(4+n.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(n,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=qo(e,3),r=new Qe(i),a=r.readBits(2);r.skipBits(8);const s=r.readBits(3),n=r.readBits(1);a<3&&(t.info.sampleRate=it[a]),t.info.numberOfChannels=$t[s]+n}break;case"dec3":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=(e=>{if(e.length<2)return null;const t=new Qe(e),i=t.readBits(13),r=t.readBits(3),a=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),n=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let c=0;o>0?c=t.readBits(9):t.skipBits(1),a.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:n,numDepSub:o,chanLoc:c})}return 0===a.length?null:{dataRate:i,substreams:a}})(qo(e,q.contentSize));if(!i){Ke._warn("Invalid dec3 box contents, ignoring.");break}const r=Zt(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=ei(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;E("audio"===t.info?.type);const i=(e=>{if(e.length<20)return null;const t=N(e),i=t.getUint32(0);if(0===i)return null;const r=new Qe(e);r.seekToByte(13);const a=r.readBits(2);r.skipBits(5);const s=r.readBits(1),n=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let c=null;return 0!==o?c=fi(o):ne.id===i);if(!r)break;const a=$o(e),s=(12&a)>>2,n=3&a,o=[Wo,Vo,jo,$o],c=o[(48&a)>>4],l=o[s],u=o[n],d=$o(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let a=0;ae.id===l);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:d?.defaultSampleDescriptionIndex??null,defaultSampleDuration:d?.defaultSampleDuration??null,defaultSampleSize:d?.defaultSampleSize??null,defaultSampleFlags:d?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=Jo(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=$o(e)),a&&(u.currentFragmentState.defaultSampleDuration=$o(e)),s&&(u.currentFragmentState.defaultSampleSize=$o(e)),n&&(u.currentFragmentState.defaultSampleFlags=$o(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;E(t.currentFragmentState);const i=Wo(e);e.skip(3);const r=0===i?$o(e):Jo(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;E(this.currentFragment),E(t.currentFragmentState);const i=Wo(e),r=jo(e),a=Boolean(1&r),s=Boolean(4&r),n=Boolean(256&r),o=Boolean(512&r),c=Boolean(1024&r),l=Boolean(2048&r),u=$o(e);let d=null;a&&(d=Qo(e));let h,f=null;s&&(f=$o(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(d??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(a=qo(e,r));const s=yr(t);s.defaultSampleInfoSize=i,s.sampleSizes=a,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=Wo(e);if(1&jo(e)){const i=rc(e,4),r=$o(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=$o(e);if(0===r)break;r>1&&Ke._warn("Multiple saio entries are not supported; using the first offset only.");let a=0===i?$o(e):Number(Jo(e));this.currentFragment&&(a+=this.currentFragment.moofOffset);yr(t).offset=a}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;E(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=jo(e),a=Boolean(2&r),s=$o(e),n=t.encryptionInfo.defaultPerSampleIvSize;E(null!==n);for(let o=0;o0?r.set(qo(e,n),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(a){const t=Vo(e);s=[];for(let i=0;i0&&((B=this.metadataTags).trackNumber??(B.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((F=this.metadataTags).tracksTotal??(F.tracksTotal=i))}break;case"trkn":if(a instanceof Uint8Array&&a.length>=6){const e=N(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((A=this.metadataTags).trackNumber??(A.trackNumber=t)),i>0&&((D=this.metadataTags).tracksTotal??(D.tracksTotal=i))}break;case"disc":case"disk":if(a instanceof Uint8Array&&a.length>=6){const e=N(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((M=this.metadataTags).discNumber??(M.discNumber=t)),i>0&&((z=this.metadataTags).discsTotal??(z.discsTotal=i))}}}}}return e.filePos=j,!0}}class cr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.internalTrack;if(e.durationInMediaTimescale<=0)return null;E(e.trackBacking);const t=await e.trackBacking.getFirstPacket({metadataOnly:!0});return(t?.timestamp??0)+e.durationInMediaTimescale/e.timescale}async getLiveRefreshInterval(){return null}async getFirstPacket(e){const t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return de(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=dr(r,i),s=await this.fetchPacketForSampleIndex(a,t);return kr(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Z(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=ae(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return E(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=fr(i,e);if(!r)return null;let a;if(t.metadataOnly)a=qi;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Re(t)&&(t=await t),!t)return null;if(a=qo(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=await br(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),u=-1!==l?this.internalTrack.fragmentLookupTable[l]:null,d=Z(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),h=-1!==d?this.internalTrack.fragmentPositionCache[d]:null,f=Math.max(u?.moofOffset??0,h?.moofOffset??0)||null;let m;for(e?null===f||e.moofOffset>=f?(m=e.moofOffset+e.moofSize,n=e):m=f:m=f??0;;){if(n){const e=n.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(m,8,16);if(Re(e)&&(e=await e),!e)break;const i=m,l=ji(e);if(!l)break;if("moof"===l.name){n=await s.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(n);if(r)return this.fetchPacketInFragment(n,e,a);-1!==e&&(o=n,c=e)}m=i+l.totalSize}if(u&&(!o||o.moofOffset{var e,t,i,r,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=await this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&qt(e.data)}}else{const e=await this.getFirstPacket({}),t=e&&Ut(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const e=await this.getFirstPacket({}),t=e&&zt(e.data);t&&(this.internalTrack.info.vp9CodecInfo={...this.internalTrack.info.vp9CodecInfo??t,videoFullRangeFlag:t.videoFullRangeFlag,colourPrimaries:t.colourPrimaries,transferCharacteristics:t.transferCharacteristics,matrixCoefficients:t.matrixCoefficients})}else{const e=await this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&xt(e.data)}else{const e=await this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&>(e.data)}if(!j(this.internalTrack.info.colorSpace)){const a=Pi(this.internalTrack.info);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const s={codec:vi(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(s.displayAspectWidth=this.internalTrack.info.squarePixelWidth,s.displayAspectHeight=this.internalTrack.info.squarePixelHeight),s})()):null}}class ur extends cr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&ui(e.data)}return{codec:Ii(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const dr=(e,t)=>{if(e.presentationTimestamps){const i=Z(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=Z(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},hr=(e,t)=>{if(!e.keySampleIndices)return dr(e,t);if(e.presentationTimestamps){const i=Z(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==J(e.keySampleIndices,i,e=>e))return i}return-1}{const i=dr(e,t),r=Z(e.keySampleIndices,i,e=>e);return e.keySampleIndices[r]??-1}},fr=(e,t)=>{const i=Z(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=Z(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),n=e.sampleCompositionTimeOffsets[s];n&&t-n.startIndexe.startSampleIndex),l=e.sampleToChunk[c];E(l);const u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=e.chunkOffsets[u],h=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*l.samplesPerChunk;else for(let g=h;ge)}},mr=(e,t)=>{if(!e.keySampleIndices)return t+1;const i=Z(e.keySampleIndices,t,e=>e);return e.keySampleIndices[i+1]??-1},pr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},gr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},kr=e=>0===e.sampleSizes.length,yr=e=>{var t;return e.currentFragmentState?(t=e.currentFragmentState).encryptionAuxInfo??(t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}):e.encryptionAuxInfo??(e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null})},br=async(e,t,i)=>{if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{E(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[o],r=new Uint8Array(16);s>0?r.set(qo(a,s),0):r.set(t.defaultConstantIv,0);let c=null;if(e>s){const e=Vo(a);c=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Tr=async(e,t,i,r)=>{E(e.encryptionInfo);const a=e.encryptionInfo;E(null!==a.defaultKid);const s=a.defaultKid;let n;const o=e.demuxer.decryptionKeyCache.get(s);if(o)n=await o;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(s));for(let e=0;e{E(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;i{const a=new Uint8Array(16);a.set(i.iv,0);const s=await crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),n=async e=>{const t=await crypto.subtle.decrypt({name:"AES-CTR",counter:a,length:64},s,e);return new Uint8Array(t)};if(!i.subsamples)return n(r);E(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Pr(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let c=0;for(const m of o)for(const e of m.perSubsample)c+=e.length;const l=new Uint8Array(c);let u=0;for(const m of o)for(const e of m.perSubsample)l.set(r.subarray(e.offset,e.offset+e.length),u),u+=e.length;const d=await n(l),h=new Uint8Array(r);let f=0;for(const m of o)for(const e of m.perSubsample)h.set(d.subarray(f,f+e.length),e.offset),f+=e.length;return h},vr=(e,t,i,r)=>{const a=new nr;a.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,n=t.defaultSkipByteBlock;if(E(null!==s&&null!==n),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],a=0!==t||0!==i;let s=0;for(const n of e){s+=n.clearLen;const e=[];if(a){let r=n.protectedLen,a=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:a,length:s}),a+=s,r-=s;const n=Math.min(16*i,r);a+=n,r-=n}s+=n.protectedLen}else n.protectedLen>0&&e.push({offset:s,length:n.protectedLen}),s+=n.protectedLen;r.push({perSubsample:e})}return r};var Ir,xr;(xr=Ir||(Ir={}))[xr.EBML=440786851]="EBML",xr[xr.EBMLVersion=17030]="EBMLVersion",xr[xr.EBMLReadVersion=17143]="EBMLReadVersion",xr[xr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",xr[xr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",xr[xr.DocType=17026]="DocType",xr[xr.DocTypeVersion=17031]="DocTypeVersion",xr[xr.DocTypeReadVersion=17029]="DocTypeReadVersion",xr[xr.Void=236]="Void",xr[xr.Segment=408125543]="Segment",xr[xr.SeekHead=290298740]="SeekHead",xr[xr.Seek=19899]="Seek",xr[xr.SeekID=21419]="SeekID",xr[xr.SeekPosition=21420]="SeekPosition",xr[xr.Duration=17545]="Duration",xr[xr.Info=357149030]="Info",xr[xr.TimestampScale=2807729]="TimestampScale",xr[xr.MuxingApp=19840]="MuxingApp",xr[xr.WritingApp=22337]="WritingApp",xr[xr.Tracks=374648427]="Tracks",xr[xr.TrackEntry=174]="TrackEntry",xr[xr.TrackNumber=215]="TrackNumber",xr[xr.TrackUID=29637]="TrackUID",xr[xr.TrackType=131]="TrackType",xr[xr.FlagEnabled=185]="FlagEnabled",xr[xr.FlagDefault=136]="FlagDefault",xr[xr.FlagForced=21930]="FlagForced",xr[xr.FlagOriginal=21934]="FlagOriginal",xr[xr.FlagHearingImpaired=21931]="FlagHearingImpaired",xr[xr.FlagVisualImpaired=21932]="FlagVisualImpaired",xr[xr.FlagCommentary=21935]="FlagCommentary",xr[xr.FlagLacing=156]="FlagLacing",xr[xr.Name=21358]="Name",xr[xr.Language=2274716]="Language",xr[xr.LanguageBCP47=2274717]="LanguageBCP47",xr[xr.CodecID=134]="CodecID",xr[xr.CodecPrivate=25506]="CodecPrivate",xr[xr.CodecDelay=22186]="CodecDelay",xr[xr.SeekPreRoll=22203]="SeekPreRoll",xr[xr.DefaultDuration=2352003]="DefaultDuration",xr[xr.Video=224]="Video",xr[xr.PixelWidth=176]="PixelWidth",xr[xr.PixelHeight=186]="PixelHeight",xr[xr.DisplayWidth=21680]="DisplayWidth",xr[xr.DisplayHeight=21690]="DisplayHeight",xr[xr.DisplayUnit=21682]="DisplayUnit",xr[xr.AlphaMode=21440]="AlphaMode",xr[xr.Audio=225]="Audio",xr[xr.SamplingFrequency=181]="SamplingFrequency",xr[xr.Channels=159]="Channels",xr[xr.BitDepth=25188]="BitDepth",xr[xr.SimpleBlock=163]="SimpleBlock",xr[xr.BlockGroup=160]="BlockGroup",xr[xr.Block=161]="Block",xr[xr.BlockAdditions=30113]="BlockAdditions",xr[xr.BlockMore=166]="BlockMore",xr[xr.BlockAdditional=165]="BlockAdditional",xr[xr.BlockAddID=238]="BlockAddID",xr[xr.BlockDuration=155]="BlockDuration",xr[xr.ReferenceBlock=251]="ReferenceBlock",xr[xr.Cluster=524531317]="Cluster",xr[xr.Timestamp=231]="Timestamp",xr[xr.Cues=475249515]="Cues",xr[xr.CuePoint=187]="CuePoint",xr[xr.CueTime=179]="CueTime",xr[xr.CueTrackPositions=183]="CueTrackPositions",xr[xr.CueTrack=247]="CueTrack",xr[xr.CueClusterPosition=241]="CueClusterPosition",xr[xr.Colour=21936]="Colour",xr[xr.MatrixCoefficients=21937]="MatrixCoefficients",xr[xr.TransferCharacteristics=21946]="TransferCharacteristics",xr[xr.Primaries=21947]="Primaries",xr[xr.Range=21945]="Range",xr[xr.Projection=30320]="Projection",xr[xr.ProjectionType=30321]="ProjectionType",xr[xr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",xr[xr.Attachments=423732329]="Attachments",xr[xr.AttachedFile=24999]="AttachedFile",xr[xr.FileDescription=18046]="FileDescription",xr[xr.FileName=18030]="FileName",xr[xr.FileMediaType=18016]="FileMediaType",xr[xr.FileData=18012]="FileData",xr[xr.FileUID=18094]="FileUID",xr[xr.Chapters=272869232]="Chapters",xr[xr.Tags=307544935]="Tags",xr[xr.Tag=29555]="Tag",xr[xr.Targets=25536]="Targets",xr[xr.TargetTypeValue=26826]="TargetTypeValue",xr[xr.TargetType=25546]="TargetType",xr[xr.TagTrackUID=25541]="TagTrackUID",xr[xr.TagEditionUID=25545]="TagEditionUID",xr[xr.TagChapterUID=25540]="TagChapterUID",xr[xr.TagAttachmentUID=25542]="TagAttachmentUID",xr[xr.SimpleTag=26568]="SimpleTag",xr[xr.TagName=17827]="TagName",xr[xr.TagLanguage=17530]="TagLanguage",xr[xr.TagString=17543]="TagString",xr[xr.TagBinary=17541]="TagBinary",xr[xr.ContentEncodings=28032]="ContentEncodings",xr[xr.ContentEncoding=25152]="ContentEncoding",xr[xr.ContentEncodingOrder=20529]="ContentEncodingOrder",xr[xr.ContentEncodingScope=20530]="ContentEncodingScope",xr[xr.ContentCompression=20532]="ContentCompression",xr[xr.ContentCompAlgo=16980]="ContentCompAlgo",xr[xr.ContentCompSettings=16981]="ContentCompSettings",xr[xr.ContentEncryption=20533]="ContentEncryption";const Cr=[Ir.EBML,Ir.Segment],Br=[Ir.SeekHead,Ir.Info,Ir.Cluster,Ir.Tracks,Ir.Cues,Ir.Attachments,Ir.Chapters,Ir.Tags],Er=[...Cr,...Br],_r=16,Rr=e=>{if(e.remainingLength<1)return null;const t=Wo(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=Wo(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Rr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===Wo(e))return;e.skip(-1);const t=Fr(e);return null===t?null:72057594037927940!==t?t:void 0},Nr=e=>{E(e.remainingLength>=2);const t=Dr(e);if(null===t)return null;const i=Mr(e);return null===i?null:{id:t,size:i}},Or=(e,t)=>{const i=qo(e,t);let r=0;for(;r{const i=qo(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?tc(e):ic(e)},Ur=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}},qr=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;se.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>"video"===e.info?.type)),hasAudio:this.segments.some(e=>e.tracks.some(e=>"audio"===e.info?.type)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&await this.loadSegmentMetadata(t),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??(this.readMetadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,_r);if(Re(t)&&(t=await t),!t)break;const i=Nr(t);if(!i)break;const r=i.id;let a=i.size;const s=t.filePos;if(r===Ir.EBML){ia(a);let e=this.reader.requestSlice(s,a);if(Re(e)&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===Ir.Segment){if(await this.readSegment(s,a),void 0===a)break;if(null===this.reader.fileSize)break}else if(r===Ir.Cluster){if(null===this.reader.fileSize)break;if(void 0===a){a=(await Ur(this.reader,s,Er,this.reader.fileSize)).pos-s}const e=R(this.segments);e&&(e.elementEndPos=s+a)}ia(a),e=s+a}})())}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;null===this.currentSegment.elementEndPos||ie.id===a);if(-1!==o){const e=la[o].flag;this.currentSegment[e]=!0,ia(s);let t=this.reader.requestSlice(n,s);Re(t)&&(t=await t),t&&this.readContiguousElements(t)}else if(a===Ir.Tags||a===Ir.Attachments){a===Ir.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,ia(s);let e=this.reader.requestSlice(n,s);Re(e)&&(e=await e),e&&this.readContiguousElements(e)}else if(a===Ir.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===s)break;i=n+s}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const n of this.currentSegment.seekEntries){const t=la.find(e=>e.id===n.id);if(!t)continue;if(this.currentSegment[t.flag])continue;let i=this.reader.requestSliceRange(e+n.segmentPosition,2,_r);if(Re(i)&&(i=await i),!i)continue;const r=Nr(i);if(!r)continue;const{id:a,size:s}=r;if(a!==t.id)continue;ia(s),this.currentSegment[t.flag]=!0;let o=this.reader.requestSlice(i.filePos,s);Re(o)&&(o=await o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const n of this.currentSegment.tracks)null!==n.defaultDurationNs&&(n.defaultDuration=this.currentSegment.timestampFactor*n.defaultDurationNs/1e9);const r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const n of this.currentSegment.cuePoints){const e=r.get(n.trackId);e&&e.cuePoints.push(n)}for(const n of this.currentSegment.tracks){n.cuePoints.sort((e,t)=>e.time-t.time);for(let e=0;es&&(s=n.cuePoints.length,a=n);for(const n of this.currentSegment.tracks)0===n.cuePoints.length&&(n.cuePoints=a.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let i=this.reader.requestSliceRange(e,2,_r);Re(i)&&(i=await i),E(i);const r=e,a=Nr(i);E(a);E(a.id===Ir.Cluster);let s=a.size;const n=i.filePos;if(void 0===s){s=(await Ur(this.reader,n,Er,t.elementEndPos)).pos-n}let o=this.reader.requestSlice(n,s);Re(o)&&(o=await o);const c={segment:t,elementStartPos:r,elementEndPos:n+s,dataStartPos:n,timestamp:-1,trackData:new Map};if(this.currentCluster=c,o){const e=this.readContiguousElements(o,Er);c.elementEndPos=e}for(const[,l]of c.trackData){const e=l.track;E(l.blocks.length>0);let t=!1;for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const i=l.blocks[l.presentationTimestamps[0].blockIndex],a=l.blocks[R(l.presentationTimestamps).blockIndex];l.startTimestamp=i.timestamp,l.endTimestamp=a.timestamp+a.duration;const s=Z(e.clusterPositionCache,l.startTimestamp,e=>e.startTimestamp);-1!==s&&e.clusterPositionCache[s].elementStartPos===r||e.clusterPositionCache.splice(s+1,0,{elementStartPos:c.elementStartPos,startTimestamp:l.startTimestamp})}return t.lastReadCluster=c,c}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){for(let i=0;i=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){const i=Nr(e);if(!i)return!1;if(t&&t.includes(i.id))return!1;const{id:r,size:a}=i,s=e.filePos;switch(ia(a),r){case Ir.DocType:this.isWebM="webm"===Or(e,a);break;case Ir.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case Ir.SeekID:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Ar(e,a)}break;case Ir.SeekPosition:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Ar(e,a)}break;case Ir.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Ar(e,a),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case Ir.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Lr(e,a);break;case Ir.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...Ge,primary:!1},trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(s,a)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>"decompress"!==e.data?.type||e.scope!==sa.Block||e.data.algorithm!==oa.HeaderStripping)&&(Ke._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===Wr)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===Hr)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===Vr)this.currentTrack.info.codec="vp8";else if(t===jr)this.currentTrack.info.codec="vp9";else if(t===Kr)this.currentTrack.info.codec="av1";else if(t===Xr){const e=this.currentTrack.codecPrivate?O.decode(this.currentTrack.codecPrivate):"";Ti.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new fa(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===$r?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Gr?this.currentTrack.info.codec="mp3":t===Qr?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=xi):t===Yr?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Jr?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Zr?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ea?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ta?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new ma(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case Ir.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Ar(e,a);break;case Ir.TrackType:{if(!this.currentTrack)break;const t=Ar(e,a);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:{...K},alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case Ir.FlagEnabled:if(!this.currentTrack)break;Ar(e,a)||(this.currentTrack=null);break;case Ir.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Ar(e,a);break;case Ir.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Ar(e,a);break;case Ir.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Ar(e,a);break;case Ir.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Ar(e,a);break;case Ir.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Ar(e,a);break;case Ir.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Ar(e,a);break;case Ir.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Or(e,a);break;case Ir.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=qo(e,a);break;case Ir.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Ar(e,a);break;case Ir.Name:if(!this.currentTrack)break;this.currentTrack.name=zr(e,a);break;case Ir.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Or(e,a),ke(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ue);break;case Ir.LanguageBCP47:{if(!this.currentTrack)break;const t=Or(e,a).split("-")[0];this.currentTrack.languageCode=t||ue,this.currentTrack.hasLanguageBcp47=!0}break;case Ir.Video:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.PixelWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.width=Ar(e,a);break;case Ir.PixelHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.height=Ar(e,a);break;case Ir.DisplayWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayWidth=Ar(e,a);break;case Ir.DisplayHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayHeight=Ar(e,a);break;case Ir.DisplayUnit:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayUnit=Ar(e,a);break;case Ir.AlphaMode:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.alphaMode=1===Ar(e,a);break;case Ir.Colour:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.MatrixCoefficients:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=V[t];this.currentTrack.info.colorSpace.matrix=i}break;case Ir.Range:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case Ir.TransferCharacteristics:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=W[t];this.currentTrack.info.colorSpace.transfer=i}break;case Ir.Primaries:{if("video"!==this.currentTrack?.info?.type)break;const t=Ar(e,a),i=U[t];this.currentTrack.info.colorSpace.primaries=i}break;case Ir.Projection:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.ProjectionPoseRoll:{if("video"!==this.currentTrack?.info?.type)break;const t=-Lr(e,a);try{this.currentTrack.info.rotation=_(t)}catch{}}break;case Ir.Audio:if("audio"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case Ir.SamplingFrequency:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.sampleRate=Lr(e,a);break;case Ir.Channels:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.numberOfChannels=Ar(e,a);break;case Ir.BitDepth:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.bitDepth=Ar(e,a);break;case Ir.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(s,a)),this.currentCueTime=null;break;case Ir.CueTime:this.currentCueTime=Ar(e,a);break;case Ir.CueTrackPositions:{if(null===this.currentCueTime)break;E(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case Ir.CueTrack:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Ar(e,a)}break;case Ir.CueClusterPosition:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;E(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Ar(e,a)}break;case Ir.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Ar(e,a);break;case Ir.SimpleBlock:{if(!this.currentCluster)break;const t=Fr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=Ko(e),n=Wo(e),o=n>>1&3;let c=!!(128&n);"audio"===i.track.info?.type&&i.track.info.codec&&(c=!0);const l=qo(e,a-(e.filePos-s)),u=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:o,decoded:!u,postProcessed:!1,mainAdditional:null})}break;case Ir.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(s,a)),this.currentBlock=null;break;case Ir.Block:{if(!this.currentCluster)break;const t=Fr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=Ko(e),n=Wo(e)>>1&3,o=qo(e,a-(e.filePos-s)),c=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:o,lacing:n,decoded:!c,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case Ir.BlockAdditions:this.readContiguousElements(e.slice(s,a));break;case Ir.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(s,a)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case Ir.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=qo(e,a);break;case Ir.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Ar(e,a);break;case Ir.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Ar(e,a);break;case Ir.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case Ir.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(s,a));break;case Ir.Targets:this.readContiguousElements(e.slice(s,a));break;case Ir.TargetTypeValue:50!==Ar(e,a)&&(this.currentTagTargetIsMovie=!1);break;case Ir.TagTrackUID:case Ir.TagEditionUID:case Ir.TagChapterUID:case Ir.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case Ir.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(s,a));break;case Ir.TagName:this.currentSimpleTagName=zr(e,a);break;case Ir.TagString:{if(!this.currentSimpleTagName)break;const t=zr(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case Ir.TagBinary:{if(!this.currentSimpleTagName)break;const t=qo(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case Ir.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(s,a));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new $e(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}t.images??(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case Ir.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=0n;for(let r=0;rt.order-e.order);break;case Ir.ContentEncoding:this.currentDecodingInstruction={order:0,scope:sa.Block,data:null},this.readContiguousElements(e.slice(s,a)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case Ir.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Ar(e,a);break;case Ir.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Ar(e,a);break;case Ir.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:oa.Zlib,settings:null},this.readContiguousElements(e.slice(s,a));break;case Ir.ContentCompAlgo:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.algorithm=Ar(e,a);break;case Ir.ContentCompSettings:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.settings=qo(e,a);break;case Ir.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=s+a,!0}decodeBlockData(e,t){E(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(E(r.data),"decompress"===r.data.type)if(r.data.algorithm===oa.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i;if(!this.currentSegment?.metadataTags)return;const r=this.currentSegment.metadataTags;if(r.raw??(r.raw={}),(i=r.raw)[e]??(i[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":r.title??(r.title=t);break;case"description":r.description??(r.description=t);break;case"artist":r.artist??(r.artist=t);break;case"album":r.album??(r.album=t);break;case"album_artist":r.albumArtist??(r.albumArtist=t);break;case"genre":r.genre??(r.genre=t);break;case"comment":r.comment??(r.comment=t);break;case"lyrics":r.lyrics??(r.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||(r.date??(r.date=e))}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.trackNumber??(r.trackNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.tracksTotal??(r.tracksTotal=a))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.discNumber??(r.discNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.discsTotal??(r.discsTotal=a))}}}async getDurationFromMetadata(e){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){E(r.trackBacking);const e=await r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(t??1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=t??0,i}}class ha{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return de(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Z(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=ae(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return E(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,i){if(-1===t)return null;const r=e.trackData.get(this.internalTrack.id).blocks[t];if(E(r),r.decoded||(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),r.decoded=!0),!r.postProcessed){if("prores"===this.internalTrack.info?.codec){if(!(r.data.length>=8&&105===r.data[4]&&99===r.data[5]&&112===r.data[6]&&102===r.data[7])){const e=new Uint8Array(r.data.length+8);N(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(r.data,8),r.data=e}}r.postProcessed=!0}const a=i.metadataOnly?qi:r.data,s=r.timestamp/this.internalTrack.segment.timestampFactor,n=r.duration/this.internalTrack.segment.timestampFactor,o={};r.mainAdditional&&"video"===this.internalTrack.info?.type&&this.internalTrack.info.alphaMode&&(o.alpha=i.metadataOnly?qi:r.mainAdditional,o.alphaByteLength=r.mainAdditional.byteLength);const c=new Wi(a,r.isKeyFrame?"key":"delta",s,n,e.dataStartPos+t,r.data.byteLength,o);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,i,r,a){const{demuxer:s,segment:n}=this.internalTrack;let o=null,c=null,l=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,a);-1!==i&&(c=e,l=i)}const u=Z(this.internalTrack.cuePoints,i,e=>e.time),d=-1!==u?this.internalTrack.cuePoints[u]:null,h=Z(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),f=-1!==h?this.internalTrack.clusterPositionCache[h]:null,m=Math.max(d?.clusterPosition??0,f?.elementStartPos??0)||null;let p;for(e?null===m||e.elementStartPos>=m?(p=e.elementEndPos,o=e):p=m:p=m??n.clusterSeekStartPos;null===n.elementEndPos||p<=n.elementEndPos-2;){if(o){const e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(p,2,_r);if(Re(e)&&(e=await e),!e)break;const i=p,u=Nr(e);if(!u||!Br.includes(u.id)&&u.id!==Ir.Void){const e=await qr(s.reader,i,Br,Math.min(n.elementEndPos??1/0,i+ua));if(e){p=e;continue}break}const d=u.id;let h=u.size;const f=e.filePos;if(d===Ir.Cluster){o=await s.readCluster(i,n),h=o.elementEndPos-f;const{blockIndex:e,correctBlockFound:r}=t(o);if(r)return this.fetchPacketInCluster(o,e,a);-1!==e&&(c=o,l=e)}if(void 0===h){E(d!==Ir.Cluster);h=(await Ur(s.reader,f,Er,n.elementEndPos)).pos-f}const m=f+h;if(null===n.elementEndPos){let e=s.reader.requestSliceRange(m,2,_r);if(Re(e)&&(e=await e),!e)break;if(Dr(e)===Ir.Segment){n.elementEndPos=m;break}}p=m}if(d&&(!c||c.elementStartPos{var e,t,i,r;let a=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(a=await this.getFirstPacket({}));const s={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&a?gt(a.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&a?xt(a.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&a?zt(a.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&a?Ut(a.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&a?qt(a.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!j(this.internalTrack.info.colorSpace)){const a=Pi(s);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const n={codec:vi(s),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})()):null}}class ma extends ha{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&ui(e.data)}return{codec:Ii({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const pa=async(e,t,i,r=null)=>{let a=t;for(;null===i||a=4;){const t=s.filePos,i=$o(s),n=null!==e.fileSize?e.fileSize-a:null,o=Mi(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&Li(o.header.channel)===Li(r.channel)))return{header:o.header,startPos:a};s.filePos=t+o.bytesAdvanced,a=s.filePos}}return null};class ga extends Ui{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new $,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new ka(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=mc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=await pa(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Di(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Re(r)&&(r=await r),r){const a=$o(r);if(a===Fi||a===Ai){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Re(t)&&(t=await t),t){const e=qo(t,12),i=N(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Oi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Oi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const a=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:a,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=!0;let a=this.reader.requestSlice(i.filePos,r.size);if(Re(a)&&(a=await a),!a)break;pc(a,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=lc){let e=this.reader.requestSlice(this.reader.fileSize-lc,lc);Re(e)&&(e=await e),E(e);"TAG"===rc(e,3)&&hc(e,this.metadataTags)}return this.metadataTags}finally{e()}}}class ka{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return E(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.demuxer;if(E(null!==e.firstFrameHeader),E(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,a=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(a<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const wa=e=>{const t=N(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let a=0;a>>24^t])>>>0}return t.setUint32(22,i,!0),r},Ta=(e,t,i)=>{let r=0,a=null;if(e.length>0)if("vorbis"===t.codec){E(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,n=(e[0]&s)>>1;if(n>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const c=t.vorbisInfo.modeBlockflags[n];if(a=t.vorbisInfo.blocksizes[c],1===c){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+a>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:Wt[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:a}},Sa=27,va=282,Pa=e=>{const t=e.filePos;if(Go(e)!==ya)return null;e.skip(1);const i=Wo(e),r=ec(e),a=Go(e),s=Go(e),n=Go(e),o=Wo(e),c=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:i,granulePosition:r,serialNumber:a,sequenceNumber:s,checksum:n,lacingValues:c}},Ia=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===ya)return!0;e.skip(1)}}return!1};class xa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Sa,va);if(Re(t)&&(t=await t),!t)break;const i=Pa(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=await this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?await this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&await this.readOpusMetadata(e,t),null!==t.codecInfo.codec&&this.trackBackings.push(new Ca(t,this)))}})())}async readVorbisMetadata(e,t){let i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=await this.findNextPacketStart(r),!i)return;const a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a)return;if(3!==r.data[0]||5!==a.data[0])return;const s=[],n=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};n(e.data.length),n(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+a.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(a.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=a;const c=N(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);const l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&l),1<<(l>>4)],modeBlockflags:Ht(a.data).modeBlockflags},Xt(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){const i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const a=(e=>{const t=N(e),i=t.getUint8(9),r=t.getUint16(10,!0),a=t.getUint32(12,!0),s=t.getInt16(16,!0),n=t.getUint8(18);let o=null;return n&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:a,outputGain:s,channelMappingFamily:n,channelMappingTable:o}})(e.data);t.numberOfChannels=a.outputChannelCount,t.sampleRate=xi,t.codecInfo.opusInfo={preSkip:a.preSkip},Xt(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){E(te+t.length,0);if(0===o)return null;const c=new Uint8Array(o);let l=0;for(let u=0;u{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}class Ca{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new $,this.internalSampleRate="opus"===e.codecInfo.codec?xi:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return E(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return E(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:this.bitstream.description??void 0}}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge,primary:!1}}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(E(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:a}=Ta(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new Wi(i.metadataOnly?qi:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(e){E(this.bitstream.lastMetadataPacket);const t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(E(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=await this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const a=i.timestampInSamples+i.durationInSamples,s=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:i.vorbisBlockSize},t)}async getPacket(e,t){if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const i=de(e*this.internalSampleRate);if(0===i)return this.getFirstPacket(t);if(i<0)return null;E(this.bitstream.lastMetadataPacket);const r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let a=r.startPage,s=this.demuxer.reader.fileSize;const n=[a];e:for(;a.headerStartPos+a.totalSizei?s=l.headerStartPos:(a=l,n.push(l));continue e}r=l.headerStartPos+l.totalSize}}let o=r.startPage;for(const k of n){if(k.granulePosition===a.granulePosition)break;(!o||k.headerStartPos>o.headerStartPos)&&(o=k)}let c=o;const l=[c];for(;c.serialNumber!==this.bitstream.serialNumber||c.granulePosition!==a.granulePosition;){const e=c.headerStartPos+c.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Sa,va);Re(t)&&(t=await t),E(t);const i=Pa(t);E(i),c=i,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}E(-1!==c.granulePosition);let u,d,h=null,f=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)u=this.granulePositionToTimestampInSamples(0),d=!0,h=0;else{u=0,d=!1;for(let t=c.lacingValues.length-1;t>=0;t--){if(c.lacingValues[t]<255){h=t+1;break}}if(null===h)throw new Error("Invalid page with granule position: no packets end on this page.");m=h-1;const e={data:qi,endPage:f,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){const e=Ea(l,c,h);E(e);const t=Ba(l,e.page,e.segmentIndex);t&&(c=t.page,h=t.segmentIndex)}else for(;;){const e=Ea(l,c,h);if(!e)break;const t=Ba(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,h=t.segmentIndex,e.page.headerStartPos!==f.headerStartPos){f=e.page,m=e.segmentIndex;break}}}let p=null,g=null;for(;null!==c;){E(null!==h);const e=await this.demuxer.readPacket(c,h);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&hi||Math.max(a.timestampInSamples,0)===i))break}const a=await this.demuxer.findNextPacketStart(e);if(!a)break;c=a.startPage,h=a.startSegmentIndex}return p}async getPacketSequential(e,t){const i=await this.sequentialScanMutex.acquire();try{const i=de(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=Z(this.sequentialScanCache,i,e=>e.timestampInSamples);let a;if(-1!==r){const e=this.sequentialScanCache[r];a=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else a=await this.getFirstPacket(t);let s=0;for(;a&&a.timestampe)break;if(a=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(a);E(e),this.sequentialScanCache.length>0&&E(R(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return a}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Ba=(e,t,i)=>{let r=t,a=i;e:for(;;){for(a--;a>=0;a--){if(r.lacingValues[a]<255){a++;break e}}E(-1===a);if(!(1&r.headerType)){a=0;break}const t=re(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=re(e,e=>e.headerStartPos{let e=this.reader.requestSlice(0,12);Re(e)&&(e=await e),E(e);const t=rc(e,4),i="RIFX"!==t,r="RF64"===t,a=Xo(e,i);let s=r?this.reader.fileSize:Math.min(a+8,this.reader.fileSize??1/0);if("WAVE"!==rc(e,4))throw new Error("Invalid WAVE file - wrong format");let n=0,o=null,c=e.filePos;for(;null===s||c=18&&357!==a){const e=Ho(r,i),s=t-18;if(Math.min(s,e)>=22&&a===_a.EXTENSIBLE){r.skip(6);const e=qo(r,16);a=e[0]|e[1]<<8}}if(a!==_a.MULAW&&a!==_a.ALAW||(c=8),a!==_a.PCM&&a!==_a.IEEE_FLOAT&&a!==_a.ALAW&&a!==_a.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${a}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(a===_a.PCM&&![8,16,24,32].includes(c))throw new Error(`Unsupported WAVE PCM bit depth (${c}). Only 8, 16, 24, and 32 bits are supported.`);if(a===_a.IEEE_FLOAT&&![32,64].includes(c))throw new Error(`Unsupported WAVE float bit depth (${c}). Only 32 and 64 bits are supported.`);this.audioInfo={format:a,numberOfChannels:s,sampleRate:n,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:o}}async parseListChunk(e,t,i){var r,a,s,n,o,c,l,u,d,h,f;let m=this.reader.requestSlice(e,t);if(Re(m)&&(m=await m),!m)return;const p=rc(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=rc(m,4),t=Xo(m,i),p=qo(m,t);let k=0;for(let i=0;i0&&((c=this.metadataTags).trackNumber??(c.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((l=this.metadataTags).tracksTotal??(l.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||((u=this.metadataTags).date??(u.date=e))}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&((d=this.metadataTags).date??(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":(h=this.metadataTags).genre??(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":(f=this.metadataTags).comment??(f.comment=y)}g+=8+t+(1&t)}}async parseId3Chunk(e,t){let i=this.reader.requestSlice(e,t);if(Re(i)&&(i=await i),!i)return;const r=mc(i);if(r){const a=t-uc;if(r.size=Math.min(r.size,a),r.size>0){const t=i.slice(e+uc,r.size);pc(t,r,this.metadataTags)}}}getCodec(){if(E(this.audioInfo),this.audioInfo.format===_a.MULAW)return"ulaw";if(this.audioInfo.format===_a.ALAW)return"alaw";if(this.audioInfo.format===_a.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===_a.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}E(!1)}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}const Aa=2048;class Da{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){const e=this.demuxer.getCodec();return e?(E(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return E(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge}}async getPacketAtIndex(e,t){E(e>=0),E(this.demuxer.audioInfo);const i=e*Aa*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Aa*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Re(e)&&(e=await e),!e)return null}let a;if(t.metadataOnly)a=qi;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Re(e)&&(e=await e),E(e),a=qo(e,r)}const s=e*Aa/this.demuxer.audioInfo.sampleRate,n=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new Wi(a,"key",s,n,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){E(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Aa,(this.demuxer.dataSize-1)/(Aa*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=await this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;E(null===this.demuxer.reader.fileSize);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;a;){const e=await this.getNextPacket(a,t);if(!e)break;a=e}return a}getNextPacket(e,t){E(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Aa);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Ma=e=>{const t=e.filePos,i=qo(e,9),r=new Qe(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const a=r.readBits(1),s=r.readBits(2)+1,n=r.readBits(4);if(15===n)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const c=r.readBits(13);r.skipBits(11);const l=r.readBits(2)+1;if(1!==l)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===a?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:n,channelConfiguration:o,frameLength:c,numberOfAacFrames:l,crcCheck:u,startPos:t}},Na=1024;class Oa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new $,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();E(this.firstFrameHeader),this.trackBackings=[new za(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=mc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Ma(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=Ye[t.samplingFrequencyIndex];E(void 0!==i);const r=Na/i,a={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(a),this.nextTimestampInSamples+=Na,this.lastLoadedPos=t.startPos+t.frameLength}async getMimeType(){return"audio/aac"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,uc);if(Re(t)&&(t=await t),!t)break;const i=mc(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Re(r)&&(r=await r),!r)break;pc(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}}}class za{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Na}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ue}getCodec(){return"aac"}getInternalCodecId(){return E(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){E(this.demuxer.firstFrameHeader);const e=Je[this.demuxer.firstFrameHeader.channelConfiguration];return E(void 0!==e),e}getSampleRate(){E(this.demuxer.firstFrameHeader);const e=Ye[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return E(void 0!==e),e}getDisposition(){return{...Ge}}async getDecoderConfig(){return E(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=qi;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Re(e)&&(e=await e),!e)return null;r=qo(e,i.dataSize)}return new Wi(r,"key",i.timestamp,i.duration,e,i.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=J(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1{var e;let t=0;for(;;){let e=this.reader.requestSlice(t,uc);if(Re(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const i=mc(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Re(r)&&(r=await r),E(r),pc(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:s.end-e,isLastFrame:!0};if(255===Wo(s)){const t=s.filePos;if(Wo(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-n.num!==1){s.filePos=t;continue}}else if(r.num-n.num!==n.blockSize){s.filePos=t;continue}return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:i,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=qo(e,4),a=new Qe(r);if(32764!==a.readBits(15))return null;if(null===this.blockingBit){E(t);const e=a.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){E(!t);if(1!==a.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");E(!t);if(0!==a.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*2**e:6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?2**e:null)(a.readBits(4));if(!s)return null;E(this.audioInfo);const n=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(a.readBits(4),this.audioInfo.sampleRate);if(!n)return null;a.readBits(4),a.readBits(3);if(0!==a.readBits(1))return null;const o=(e=>{let t=0;const i=new Qe(qo(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],a=t-1,s=new Qe(qo(e,a)),n=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?Vo(e)+1:"uncommon-u8"===t?Wo(e)+1:"number"===typeof t?t:(se(t),void E(!1)))(e,s),l=((e,t)=>"uncommon-u16"===t?Vo(e):"uncommon-u16-10"===t?10*Vo(e):"uncommon-u8"===t?Wo(e):"number"===typeof t?t:null)(e,n);if(null===l)return null;if(l!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=Wo(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(qo(e,u));return d!==h?null:{num:o,blockSize:c,sampleRate:l}}async advanceReader(){await this.readMetadata(),E(null!==this.lastLoadedPos),E(this.audioInfo);const e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)}}class Ua{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ue}getTimeResolution(){return E(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return E(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...Ge}}async getDecoderConfig(){return E(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(E(this.demuxer.audioInfo),e<0)return null;const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=Z(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){await this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],a=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(a+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader()}}finally{i()}}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=qi;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Re(e)&&(e=await e),!e)return null;r=qo(e,i.byteSize)}E(this.demuxer.audioInfo);const a=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new Wi(r,"key",a,s,e,i.byteSize)}async getFirstPacket(e){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}const qa=9e4,Wa=2**33,Ha=188,Va="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",ja=new Set([133,134,162]),Ka=new Set;class Xa extends Ui{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,205);Re(e)&&(e=await e),E(e);const t=qo(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=Ha;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,a=!1,s=!1;for(;;){const e=await this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=await this.readSection(i,!0,!s);if(!t)break;const n=3,o=32;let c=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i);c=2===e.readBits(8)}}if(0!==t.pid||a)if(t.pid!==r&&!c||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=Ga(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(await this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new es(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,await r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=gt(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];E(t);const i=wt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const a=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;a>0&&s>0&&(a>s?(e.info.squarePixelWidth=Math.round(e.info.width*a/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/a))),e.info.colorSpace={primaries:U[i.colourPrimaries],transfer:W[i.transferCharacteristics],matrix:V[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=xt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===nt.SPS_NUT).nalUnits[0];E(t);const i=It(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:U[i.colourPrimaries],transfer:W[i.transferCharacteristics],matrix:V[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:vi({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=Lo.tempFromBytes(r.suppliedPacket.data),i=Ma(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=Je[i.channelConfiguration],e.info.sampleRate=Ye[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=$o(Lo.tempFromBytes(r.suppliedPacket.data)),i=Mi(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=Li(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=Gt(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=$t[t.acmod]+t.lfeon,e.info.sampleRate=it[t.fscod]}else if("eac3"===e.info.codec){const t=Jt(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=Zt(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=ei(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=li(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:Ii({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const a=e.readBits(10),c=e.pos+8*a;let l=!1;for(;e.pos=4){const t=e.readBits(32);l||(l=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=c;8*(r+n)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),a=e.pos+8*r;let s=!1,n=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let c=null;const u=l&&ja.has(t)?130:t;switch(u){case 27:case 36:c={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",c={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:n?c={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?c={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(c={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:Ka.has(t)||(Ke._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),Ka.add(t))}c&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:c,referencePesPackets:[]})}s=!0}else{const e=new Qe(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+n)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");a=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!a)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const n of this.elementaryStreams)n.initialized&&("video"===n.info.type?this.trackBackingEntries.push(new Ya(n)):this.trackBackingEntries.push(new Ja(n)))})())}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){await this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,i=!1){let r=e,a=e;const s=[];let n,o=0,c=null,l=!0,u=0;for(;;){const e=await this.readPacket(a);if(a+=this.packetStride,!e)break;if(c){if(e.pid!==c.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;c=e}const n=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(n&&(h=1+e.body[0],e===c&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=a,!t&&o>=64){l=!1;break}if(-1!==J(this.sectionEndPositions,r,e=>e)){l=!1;break}}if(l){const e=Z(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!c)return null;if(1===s.length)n=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);n=new Uint8Array(e);let t=0;for(const i of s)n.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:c.pid,payload:n,randomAccessIndicator:u}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(Re(t)&&(t=await t),!t)return null;if(71!==Wo(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=Vo(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:Wo(t)>>4&3}}async readPacket(e){let t=this.reader.requestSlice(e,Ha);if(Re(t)&&(t=await t),!t)return null;const i=qo(t,Ha);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=Wa-t?-8589934592:Wa}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new Qe(t.payload);if(1!==r.readBits(24))return null;const a=r.readBits(8);if(r.skipBits(16),188===a||190===a||191===a||240===a||241===a||255===a||242===a||248===a)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let n=null;if(2===s||3===s)n=0,r.skipBits(4),n+=r.readBits(3)*(1<<30),r.skipBits(1),n+=32768*r.readBits(15),r.skipBits(1),n+=r.readBits(15),n=e.normalizeTimestamp(n);else if(i)throw new Error(Va);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:n,randomAccessIndicator:t.randomAccessIndicator}},Ga=(e,t,i)=>{E(null!==t.endPos);const r=$a(e,t,i);if(!r)return null;const a=new Qe(t.payload);a.skipBits(32);const s=a.readBits(16);a.skipBits(16);const n=a.readBits(8),o=a.pos+8*n;a.pos=o;const c=o/8;E(Number.isInteger(c));const l=t.payload.subarray(c,s>0?6+s:t.payload.byteLength);return{...r,data:l}};class Qa{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,E(r instanceof Qa),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return ue}getDisposition(){return{...Ge,primary:!1}}getTimeResolution(){return qa}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new Wi(i.metadataOnly?qi:e.data,r,e.pts/qa,Math.max(t/qa,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){const t=this.elementaryStream.firstSection;E(t);const i=Ga(this.elementaryStream.demuxer,t,!0);E(i);const r=new es(this.elementaryStream,i),a=new ts(this,r),s=await a.readNext();if(!s)return null;const n=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(n,a),this.packetSectionStarts.set(n,s.packet.sectionStartPos),n}async getNextPacket(e,t){let i=this.packetBuffers.get(e);if(i){const r=await i.readNext();if(!r)return null;this.packetBuffers.delete(e);const a=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(a,i),this.packetSectionStarts.set(a,r.packet.sectionStartPos),a}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const a=this.elementaryStream.demuxer,s=await a.readSection(r,!0);E(s);const n=Ga(a,s,!0);E(n);const o=new es(this.elementaryStream,n);i=new ts(this,o);const c=e.sequenceNumber;for(;;){const e=await i.readNext();if(!e)return null;if(e.packet.sequenceNumber>c){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let i=e;for(;;){if(i=await this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,i){const r=de(e*qa),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:n}=a,o=this.elementaryStream.pid,c=async(e,t,i)=>{let r=e;for(;re.pts),m=-1!==f?h[f]:null;if(m&&r-m.pts<45e3)d=m.sectionStartPos;else{let e=0;if(null!==s.fileSize){const t=Math.ceil(s.fileSize/n);if(t>1){let i=0,s=t-1;for(e=i;i<=s;){const t=Math.floor((i+s)/2),o=me(t*n,a.packetStride)+u.sectionStartPos,l=o+n,d=await c(o,l,!1);d?d.pesPacketHeader.pts<=r?(e=t,i=t+1):s=t-1:s=t-1}}}d=me(e*n,a.packetStride)+u.sectionStartPos}const p=await c(d,s.fileSize??1/0,!1);let g=p?.pesPacketHeader??null;g||(g=u);const k=this.getReorderSize(),y=async(e,t)=>{const s=await a.readSection(e,!0);E(s);const n=Ga(a,s,!0);E(n);const o=new es(this.elementaryStream,n),c=new ts(this,o);for(;;){if((R(c.presentationOrderPackets)?.pts??-1/0)>=r)break;if(!(await c.readNextPacket()))break}const l=ae(c.presentationOrderPackets,t);if(-1===l)return null;const u=c.presentationOrderPackets[l],d=0===l?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=d;const h=await c.readNext();E(h);const f=this.createEncodedPacket(h.packet,h.duration,i);return this.packetBuffers.set(f,c),this.packetSectionStarts.set(f,h.packet.sectionStartPos),f};if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=g.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){if(e.pts>r)break e;g=e,Za(this.elementaryStream,g);break}}}e+=a.packetStride}}e:for(let e=0;e=a.packetOffset;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){g=e;break}}}e-=a.packetStride}}return y(g.sectionStartPos,e=>e.pts<=r)}{let e=d,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let d=null;const h=e<=u.sectionStartPos;let f,m=null;if(h)f=u,m=l;else{const t=await c(e,s.fileSize??1/0,i);f=t?.pesPacketHeader??null,m=t?.section??null}let p=!1,g=0;e:for(;f&&!(null!==t&&f.sectionStartPos>=t);){if(f.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===f.randomAccessIndicator;else{E(m);const t=Ga(a,m,!0);E(t);const i=new es(this.elementaryStream,t);await i.markNextPacket(),e=1===i.suppliedPacket?.randomAccessIndicator}e&&(d=f)}if(f.pts>r&&(p=!0),p&&(g++,g>k))break;let e=f.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,i);if(t){const e=$a(a,t,!1);if(e&&null!==e.pts){f=e,m=t,Za(this.elementaryStream,f);break}}}e+=a.packetStride}}if(d){let e=d;if(0===g)e:for(let r=0;r=a.packetOffset;){const r=await a.readPacketHeader(t);if(!r)break e;if(r.pid===o&&1===r.payloadUnitStartIndicator){const r=await a.readSection(t,i);if(r){const t=$a(a,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=a.packetStride}}const t=await y(e.sectionStartPos,e=>e.pts<=r&&1===e.randomAccessIndicator);return E(t),t}if(h)return null;t=e,e=Math.max(me(e-u.sectionStartPos-n,a.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}}class Ya extends Qa{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}async getColorSpace(){return this.elementaryStream.info.colorSpace}async canBeTransparent(){return!1}async getDecoderConfig(){return E(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class Ja extends Qa{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return E(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const Za=(e,t)=>{const i=e.referencePesPackets,r=Z(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const a=i[r];if(t.pts<=a.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-a.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return E(e),e}async bufferData(e){const t=this.endPos+e;for(;this.endPos=l)break;u=e;const i=o+u;if(u+3>=l){this.seekTo(i);break}const d=c[u+1],h=c[u+2],f=c[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=i;a??(a=p);const g=u+m,k=g+r,y=6;if(k+("avc"===t?y:1)>l){this.seekTo(i);break}const b=c[g];let w,T,S;if("avc"===t)w=dt(b),T=w===at.NON_IDR_SLICE||w===at.SLICE_DPA||w===at.IDR,S=w===at.SEI||w===at.SPS||w===at.PPS||w===at.AUD;else{w=Pt(b);if(((1&b)<<5|c[g+1]>>3)>0){u+=m;continue}T=w<=nt.RASL_R||w>=nt.BLA_W_LP&&w<=21,S=w>=nt.VPS_NUT&&w<=37||w===nt.PREFIX_SEI_NUT||w>=41&&w<=44||w>=48&&w<=55}let v=!1;if(T){let e;if("avc"===t){const t=c.subarray(k,k+y),i=F(new Qe(t));e=!s||i<=n,n=i}else e=c[k]>>7===1;e&&(s?v=!0:s=!0)}else S&&s&&(v=!0);if(v){const e=p-a;return this.seekTo(a),this.supplyPacket(e,0)}u+=m}if(ea){const e=this.endPos-a;return this.seekTo(a),this.supplyPacket(e,0)}}else{const t=e.info.codec,i=128;for(;;){let r=this.ensureBuffered(i);Re(r)&&(r=await r);const a=this.currentPos;for(;this.currentPos-a>6,n=63&a[4];if(3===s||n>37){this.seekTo(t+1);continue}const o=Qt[3*n+s];E(void 0!==o),this.seekTo(t),r=this.ensureBuffered(o),Re(r)&&(r=await r);const c=Math.round(13824e4/e.info.sampleRate);return this.supplyPacket(r,c)}if("eac3"===t){if(11!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(5);if(Re(r)&&(r=await r),r<5)return;const a=this.readBytes(5);if(11!==a[0]||119!==a[1]){this.seekTo(t+1);continue}const s=2*(((7&a[2])<<8|a[3])+1),n=3===a[4]>>6?3:a[4]>>4&3,o=Yt[n];this.seekTo(t),r=this.ensureBuffered(s),Re(r)&&(r=await r);const c=256*o,l=Math.round(c*qa/e.info.sampleRate);return this.supplyPacket(r,l)}if("dts"===t){if(127!==i&&100!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(18);if(Re(r)&&(r=await r),r<18)return;const a=this.readBytes(18),s=di(a);let n=s?null:hi(a);if(!s&&!n){this.seekTo(t+1);continue}if(n&&!n.asset){this.seekTo(t);const e=Math.min(n.frameSize,4096);let i=this.ensureBuffered(e);Re(i)&&(i=await i),n=hi(this.readBytes(i))??n}let o=s?s.frameSize:n.frameSize;if(s){let e=4*Math.ceil(s.frameSize/4);for(;;){this.seekTo(t);const i=e+10;let r=this.ensureBuffered(i);if(Re(r)&&(r=await r),r=0)}async readNext(){if(0===this.decodeOrderPackets.length){if(!(await this.readNextPacket()))return null}await this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(E(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){const e=this.decodeOrderPackets[0];for(E(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(await this.readNextPacket()))break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const is="application/vnd.apple.mpegurl",rs="#EXT-X-STREAM-INF:",as="#EXT-X-I-FRAME-STREAM-INF:",ss="#EXT-X-MEDIA:",ns="#EXTINF:",os="#EXT-X-MAP:",cs="#EXT-X-KEY:",ls="#EXT-X-MEDIA-SEQUENCE:",us="#EXT-X-BYTERANGE:",ds="#EXT-X-PROGRAM-DATE-TIME:",hs="#EXT-X-TARGETDURATION:",fs="#EXT-X-PLAYLIST-TYPE:",ms=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class ps{constructor(e){this._attributes={};let t="",i="",r=!1,a=!1;for(let s=0;s{const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=ze(e,e=>"video"===e.getType())+1;e.push(new ys(this,t,i))}else if("audio"===t.type){const i=ze(e,e=>"audio"===e.getType())+1;e.push(new bs(this,t,i))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=await t.getTracks();for(const r of i)if("video"===r.type){const t=ze(e,e=>"video"===e.getType())+1;e.push(new ys(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=ze(e,e=>"audio"===e.getType())+1;e.push(new bs(this,{id:e.length+1,type:"audio"},t))}}return e})())}async getFirstTimestampForInput(e){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i}async getMediaOffset(e,t){const i=e.firstSegment??e;let r;if(this.firstSegmentFirstTimestamps.has(i))r=this.firstSegmentFirstTimestamps.get(i);else{const e=this.getInputForSegment(i);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(i,r)}if(i===e)return i.timestamp-r;const a=await this.getFirstTimestampForInput(t),s=e.timestamp-i.timestamp,n=a-r-s;return Math.abs(n)<=Math.min(.25,s)?i.timestamp-r:e.timestamp-a}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class ks{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{var e;if((e=this.segmentedInput).firstSegment??(e.firstSegment=await this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let t=this.segmentedInput.firstSegment,i=null;for(;t;){const e=this.segmentedInput.getInputForSegment(t);if(i=(await e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number)??null,i)break;t=await this.segmentedInput.getNextSegment(t,{})}if(!i)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=i,this.firstSegment=t})())}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),E(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,i){E(e.sequenceNumber>=0),E(this.segmentedInput.firstSegment);const r=await this.segmentedInput.getMediaOffset(t,i.input),a=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:fe(e.timestamp+r,await i.getTimeResolution()),sequenceNumber:Math.floor(1e8*a)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s}async getFirstPacket(e){await this.hydrate(),E(this.firstInputTrack),E(this.firstSegment);let t=this.firstInputTrack,i=this.firstSegment;for(;;){if(t){const r=await t._backing.getFirstPacket(e);if(r)return this.createAdjustedPacket(r,i,t)}if(i=await this.segmentedInput.getNextSegment(i,{skipLiveWait:e.skipLiveWait}),!i)break;const r=this.segmentedInput.getInputForSegment(i);t=(await r.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number)??null}return null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,i){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const a=i?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(a)return this.createAdjustedPacket(a,r.segment,r.track);let s=r.segment;for(;;){const e=await this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),a=(await i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!a){s=e;continue}const n=await a._backing.getFirstPacket(t);return n?this.createAdjustedPacket(n,e,a):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,i){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){const a=this.segmentedInput.getInputForSegment(r),s=(await a.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const n=e-await this.segmentedInput.getMediaOffset(r,a),o=i?await s._backing.getKeyPacket(n,t):await s._backing.getPacket(n,t);if(o)return this.createAdjustedPacket(o,r,s);r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null}}class ys extends ks{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}async getColorSpace(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())}async canBeTransparent(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}class bs extends ks{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}Me();const ws=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ts extends He{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new Oo;return this._sizePromise??(this._sizePromise=(async()=>{let e=this._getFileSize();return void 0!==e||(await this._read(0,1,0,ws),e=this._getFileSize(),E(void 0!==e)),e})())}async getSize(){if(this._disposed)throw new Oo;const e=await this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Ns(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new Ss(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ss{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),e._refFinalizationRegistry?.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const e=this.source;E(e._refCount>0),e._decrementRefCount(),e._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class vs extends Ts{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ts||e instanceof Ss))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ts?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Re(t)?t.then(i):i(t)}}const Ps=(e,t)=>e.path===t.path;class Is extends vs{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ts?e.ref():e;return this._root=t,this._rootRequest=null,t};Re(e)?this._rootRequest=e.then(t):(t(e),E(this._root))}if(this._rootRequest)return this._rootRequest.then(a=>a.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const xs="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Cs extends Ts{constructor(e,t={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Ne(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new Ms({maxCacheSize:t.maxCacheSize??8388608,maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),xs?.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Ds.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}async _runWorker(e){E(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Pe()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),xs?.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch{}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return Ke._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(2**(e-2),16)},Es=new Set;class _s extends vs{constructor(e,t={}){if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Ne(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new _s(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=t.getRetryDelay??Bs,this._requestInit={...t.requestInit};let i=null;if(t.requestInit?.headers){const e={...we(t.requestInit.headers)},r=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==r&&(i=e[r],delete e[r],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){i??(i=t);const r=new Request(e);r.headers.delete("Range"),this._url=r}}if(null!==i){const e=Fs(i);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new Ms({maxCacheSize:t.maxCacheSize??67108864,maxWorkerCount:t.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:Ds.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const e=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===e?null!==this._length?this._length:null:le(e-this._offset,0,this._length??1/0)}_read(e,t,i,r){if(null!==this._length&&t>this._length)return null;const a=this._offset,s=this._sequentialBacking?this._sequentialBacking._read(a+e,a+t):this._orchestrator.read(a+e,a+t,Math.max(a+i,a),a+Math.min(r,this._length??1/0)),n=e=>e?(e.offset-=this._offset,e):null;return Re(s)?s.then(n):n(s)}async _runWorker(e){for(;;){const i=new AbortController,r=await Te(this._options.fetchFn??fetch,this._url,be(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:i.signal}),this._getRetryDelay,()=>this._disposed);if(!r.ok)throw new Error(`Error fetching ${String(this._url)}: ${r.status} ${r.statusText}`);r.redirected&&(this.rootPath=r.url);e:if(null===this._orchestrator.fileSize&&(206===r.status||"basic"===r.type&&!r.headers.has("Content-Encoding"))){const t=r.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=r.headers.get("Content-Length");if(i){const t=206===r.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!r.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==r.status){if(this._sequentialBacking)return void r.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Es.has(e.origin)||(Ke._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Es.add(e.origin))}return void this._transitionToSequentialMode(r.body)}const a=r.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return i.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let r;try{r=await a.read()}catch(t){if(this._disposed)throw t;const e=this._getRetryDelay(1,t,this._url);if(null!==e){Ke._error("Error while reading response stream. Attempting to resume.",t),await We(1e3*e);break}throw t}if(e.aborted)continue;const{done:s,value:n}=r;if(s){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+n.length),this._orchestrator.supplyWorkerData(e,n)}}}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const a=new ReadableStream({pull:async e=>{for(;;){let s;try{s=await t.read()}catch(a){if(this._disposed)throw a;const e=this._getRetryDelay(1,a,this._url);if(null===e)throw a;Ke._error("Error while reading response stream. Attempting to resume.",a),await We(1e3*e);const s=await Te(this._options.fetchFn??fetch,this._url,be(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!s.ok)throw new Error(`Error fetching ${String(this._url)}: ${s.status} ${s.statusText}`);if(!s.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=s.body.getReader(),r=206===s.status?0:i;continue}if(s.done)return void e.close();let n=s.value;if(r>0){const e=Math.min(r,n.length);r-=e,n=n.subarray(e)}if(0!==n.length)return i+=n.length,void e.enqueue(n)}},cancel:()=>t.cancel()}),s=new As(a,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const n=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)n.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)n.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of n){const e=s._read(o.start,o.start+o.bytes.length);Re(e)?e.then(e=>{e?(E(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(E(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Rs=/^bytes=(\d+)-(\d*)$/,Fs=e=>{const t=Rs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=Z(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let a=e;const s=new Uint8Array(t-e);if(-1!==i)for(let l=i;l=t)break;const r=Math.max(e,i.start);r>a&&this._throwDueToCacheMiss();const n=Math.min(t,i.end);ra&&this._throwDueToCacheMiss();const{promise:n,resolve:o,reject:c}=te();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),n}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}async _pull(){for(this._reader??(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){for(const e of this._pendingSlices)e.reject(new Oo);this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}}const Ds={fileSystem:(e,t)=>{const i=65536;return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=65536;e=Math.max(0,Math.floor((e-r)/r)*r);for(const a of i){const i=8388608,r=Math.max((a.startPos+a.targetPos)/2,a.targetPos-i);if(Ae(e,t,r,a.targetPos)){const e=a.targetPos-a.startPos,r=Math.ceil((e+1)/i)*i,s=2**Math.ceil(Math.log2(e+1)),n=Math.min(s,r);t=Math.max(t,a.startPos+n)}}return{start:e,end:t=Math.max(t,e+524288)}}};class Ms{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){E(!this.disposed);const a=this.options.prefetchProfile(e,t,this.workers),s=Math.max(a.start,i),n=Math.min(a.end,this.fileSize??1/0,r);E(s<=e&&t<=n);let o=null;const c=Z(this.cache,e,e=>e.start),l=-1!==c?this.cache[c]:null;l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,o={bytes:l.bytes,view:l.view,offset:l.start});const u=Z(this.cache,s,e=>e.start),d=o?null:new Uint8Array(t-e);let h=0,f=s;const m=[];if(-1!==u){for(let i=u;i=n)break;if(r.end<=s)continue;const a=Math.max(s,r.start),o=Math.min(n,r.end);if(E(a<=o),f=d.length&&(o={bytes:d,view:N(d),offset:e}),0===m.length)return E(o),o;const{promise:p,resolve:g,reject:k}=te(),y=[];for(const w of m){const i=Math.max(e,w.start),r=Math.min(t,w.end);i===w.start&&r===w.end?y.push(w):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&w.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,w.end),i.strictTarget&&(i.strictTarget=e),b&&i.pendingSlices.push(b)):(t++,i={hole:{start:w.start,end:w.end},strictTarget:e,pendingSlices:b?[b]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return o?p.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(E(d),o=p.then(t=>t&&{bytes:t,view:N(t),offset:e})),o}checkHoleAgainstWorker(e,t,i){if(Ae(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=r),t.end<=t.start&&(s.holes.splice(e,1),e--)}0===s.holes.length&&(s.resolve(s.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){const t=this.workers.indexOf(e);E(-1!==t),e.running=!1,this.workers.splice(t,1),this.options.onIdleWorkerRemoved?.(e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const i of e.pendingSlices)i.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=Z(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=N(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=N(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const a=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Re(a)?a.then(s):s(a)}_dispose(){this._ref?.free()}ref(){return this._ref??(this._ref=this._baseSource.ref()),super.ref()}}var Os=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},zs=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const Ls=/^0[xX][0-9a-fA-F]+$/,Us=/^data:.*;base64,/i;class qs extends gs{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??(this.currentUpdateSegmentsPromise=(async()=>{try{const e=this.getRemainingWaitTimeMs();e>0&&await We(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})())}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){const t={stack:[],error:void 0,hasError:!1};try{const i=Os(t,await this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),r=new zo(i.source),a=await r.requestEntireFile();E(a),e=ac(a,a.length,{ignore:ms}),i.source instanceof vs&&(this.rootPath=i.source.rootPath)}catch(y){t.error=y,t.hasError=!0}finally{zs(t)}}const t=!1!==this.input._formatOptions.hls?.offsetTimestampsByDateTime;let i=!1,r=0,a=null,s=null,n=null,o=0,c=null,l=null,u=null,d=null,h=null,f=null,m=!1,p=R(this.segments)??null;const g=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},k=e=>{o=e,p&&(E(null!==p.sequenceNumber),p.sequenceNumber0&&null!==f&&(r=o*f),m=!0);const e=y.slice(8),t=e.indexOf(","),i=-1===t?e:e.slice(0,t),a=Number(i);if(!Number.isFinite(a)||a<0)throw new Error(`Invalid #EXTINF tag duration '${i}'.`);s=a}else if(y.startsWith(os)){const e=new ps(y.slice(11)),t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const i=e.get("byterange");let o=null;if(null!==i&&(o=g(i)),o&&null===o.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!p){const e={path:Oe(this.rootPath,t),offset:o?.offset??0,length:o?.length??null};if("AES-128"===n?.method&&!n.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");l={timestamp:r,unixEpochTimestamp:a,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:n,initSegment:null,lastProgramDateTimeSeconds:h}}s=null,null===d?u=null:d=null}else if(y.startsWith(cs)){const e=new ps(y.slice(11)),t=e.get("method");if("NONE"===t)n=null;else if("AES-128"===t){const t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=e.get("iv");if(r){if(!Ls.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(Yi);for(let t=0;t=8&&112===t[4]&&115===t[5]&&115===t[6]&&104===t[7]){const e=N(t).getUint32(0);r=Hi(t.subarray(8,Math.min(e,t.length)))}}n={method:t,psshBox:r}}}}else if(y.startsWith(ls)){const e=y.slice(22),t=Number(e);if(!Number.isInteger(t)||t<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);k(t)}else if(y.startsWith(us)){const e=g(y.slice(17));if(null===e.offset){if(null===u)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");e.offset=u}d=e,u=e.offset+e.length}else if(y.startsWith(ds)){if(p)continue;const e=y.slice(25),i=Date.parse(e);if(!Number.isFinite(i))continue;const s=i/1e3;if(h===s)continue;if(null===h&&this.segments.length>0){const e=R(this.segments),i=s-(e.timestamp+e.duration);for(const r of this.segments)r.unixEpochTimestamp=r.timestamp+i,t&&(r.timestamp=r.unixEpochTimestamp)}h=s,a=s,t&&(r=s)}else if("#EXT-X-DISCONTINUITY"===y)c=null;else if(y.startsWith(hs)){const e=y.slice(22),t=Number(e);if(!Number.isFinite(t)||t<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,f=t}else{if("#EXT-X-ENDLIST"===y){this.streamHasEnded=!0;break}if(y.startsWith(fs)){"vod"===y.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==y)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");i=!0}}if(!i)throw new Error("Invalid M3U8 file; no #EXTM3U header.")}async getFirstSegment(){return 0===this.segments.length&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){0===this.segments.length&&await this.runUpdateSegments();let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=Z(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===t);if(i)return i.age=this.nextInputCacheAge++,i.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));const a={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let i=e.psshBoxes;const{psshBox:r}=t.encryption;return null!==r.keyIds&&!r.keyIds.includes(e.keyId)||i.some(e=>Vi(e,r))||(i=[...i,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:i})})}},s=new Mo({source:new Is(t.location.path,async e=>{E(e.isRoot);const i={...e,isRoot:!1};let r;const a=t.location.offset>0||null!==t.location.length;if(t.encryption&&"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method)if("AES-128"===t.encryption.method){const e=t.encryption;E(e.iv);let s=await this.input._getSourceCached(i);if(a){const e=s.source.slice(t.location.offset,t.location.length??void 0).ref();s.free(),s=e}const n=((e,t,i)=>{let r=!1,a=0;const s=new nr;return new ReadableStream({pull:async n=>{r||(s.init(await t()),r=!0);let o=e.requestSliceRange(a,0,65552);if(Re(o)&&(o=await o),!o||0===o.length)throw new Error("Invalid ciphertext.");const c=o.length;if(c%16!==0)throw new Error("Invalid ciphertext.");const l=65552===c?c-16:c,u=qo(o,l),d=new Uint8Array(l);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=d.subarray(0,l-e);n.enqueue(t),n.close(),i()}},cancel:()=>{i()}})})(new zo(s.source),async()=>{const t={stack:[],error:void 0,hasError:!1};try{const i=Os(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},Do),!1),r=new zo(i.source),a=await r.requestSlice(0,Yi);if(!a)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:qo(a,Yi),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{zs(t)}},()=>{s.free()});r=new As(n).ref()}else E(!1);else if(r=await this.input._getSourceCached(i),a){const e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}return r}),formats:this.input._formats.filter(e=>!(e instanceof cn)),initInput:r??void 0,formatOptions:a});s._onFormatDetermined=e=>{if(("SAMPLE-AES"===t.encryption?.method||"SAMPLE-AES-CTR"===t.encryption?.method)&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:t,input:s,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=Le(this.inputCache,e=>e.age);E(-1!==e),this.inputCache.splice(e,1)}return s}async getLiveRefreshInterval(){return 0===this.getRemainingWaitTimeMs()&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}class Ws extends Ui{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{E(this.input._rootSource instanceof vs);const e=await this.input._reader.requestEntireFile();E(e);const t=ac(e,e.length,{ignore:ms}),{rootPath:i}=this.input._rootSource,r=[],a=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],n=[...new Set(a.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=await Promise.all(r.map(async(e,t)=>{const r=[],o=e.attributes.get("codecs");let c;if(o)c=o.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=await t.getTrackBackings(),r=await Promise.all(i.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const l=e.attributes.get("video"),u=e.attributes.get("audio"),d=c.some(e=>mi.includes(Ei(e))),h=c.some(e=>gi.includes(Ei(e)));if(null!==l&&!d){if(!s.includes(l))throw new Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===l&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Oe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);E(null!==n),c.push(n)}}if(null!==u&&!h){if(!n.includes(u))throw new Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===u&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Oe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);E(null!==n),c.push(n)}}c=[...new Set(c)];let f=null,m=null;const p=e.attributes.getAsNumber("bandwidth");E(null!==p);const g=e.attributes.getAsNumber("average-bandwidth"),k=e.attributes.get("name");for(const i of c){const o=Ei(i);if(null!==o)if(mi.includes(o)){if(null!==f)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");f=i;const n=e.attributes.get("video");if(null===n){const i=e.attributes.get("resolution");let a=null,s=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(a=Number(e[1]),s=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:ue,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:f,pairingMask:1n<0?a:null}})}else{if(!n.includes(s))throw new Error(`Invalid M3U8 file; variant stream references audio group "${s}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of a){const a=i.attributes.get("group-id"),n=i.attributes.get("type");if(a!==s||"audio"!==n.toLowerCase())continue;const o=i.attributes.get("channels")??e.attributes.get("channels"),c=null!==o?Number(o.split("/")[0]):null;r.push({id:-1,demuxer:this,backingTrack:null,default:Ks(i.attributes),autoselect:Ks(i.attributes)||Xs(i.attributes),languageCode:$s(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:i.fullPath??e.fullPath,fullCodecString:m,pairingMask:1n<0?c:null}})}}}}return r})),c=[],l=e=>{const t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||(t.default=e.default),t.autoselect||(t.autoselect=e.autoselect),t.lineNumber=Math.min(t.lineNumber,e.lineNumber),null!==e.peakBitrate&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),null!==e.averageBitrate&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===ue&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(const u of o)for(const e of u)l(e);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of c)"video"===u.info.type?this.trackBackings.push(new Vs(u)):this.trackBackings.push(new js(u));this.internalTracks=c})())}async getTrackBackings(){return await this.readMetadata(),E(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new qs(this,e,i,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return is}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class Hs{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof Vs){for(const r of i)if(await r.getCodec()===this.getCodec()){t=r;break}}else{E(this instanceof js);for(const e of i)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t})())}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return{...Ge,default:this.internalTrack.autoselect,primary:this.internalTrack.default}}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){E(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}}class Vs extends Hs{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return Ei(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}async getColorSpace(){return await this.hydrate(),this.backingVideoTrack.getColorSpace()}async canBeTransparent(){return await this.hydrate(),this.backingVideoTrack.canBeTransparent()}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingVideoTrack.getDecoderConfig()}}class js extends Hs{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return Ei(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}}const Ks=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Xs=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},$s=e=>{if(null===e)return ue;const t=e.split("-")[0];return t||ue};class Gs{constructor(){this._isIsobmff=!1}}class Qs extends Gs{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(Re(t)&&(t=await t),!t)return null;t.skip(4);const i=rc(t,4);return"ftyp"!==i&&"styp"!==i?null:rc(t,4)}_createDemuxer(e){return new or(e)}}class Ys extends Qs{async _canReadInput(e){const t=await this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Re(t)&&(t=await t),!t)return!1;let r=$o(t),a=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Re(t)&&(t=await t),!t)return!1;r=Jo(t),a=16}if(r8)return!1;if(Ar(i,r)!==Ir.EBML)return!1;const a=Mr(i);if("number"!==typeof a)return!1;let s=e._reader.requestSlice(i.filePos,a);if(Re(s)&&(s=await s),!s)return!1;const n=i.filePos;for(;s.filePos<=n+a-2;){const e=Nr(s);if(!e)break;const{id:i,size:r}=e,a=s.filePos;if(void 0===r)return!1;switch(i){case Ir.EBMLVersion:if(1!==Ar(s,r))return!1;break;case Ir.EBMLReadVersion:if(1!==Ar(s,r))return!1;break;case Ir.DocType:if(Or(s,r)!==t)return!1;break;case Ir.DocTypeVersion:if(Ar(s,r)>4)return!1}s.filePos=a+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new da(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class en extends Zs{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class tn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}const i=await pa(e._reader,t,t+4096);if(!i)return!1;const r=i.header,a=Di(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+a,4);if(Re(s)&&(s=await s),!s)return!1;const n=$o(s);if(n===Fi||n===Ai)return!0;t=i.startPos+i.header.totalSize;const o=await pa(e._reader,t,t+4);if(!o)return!1;const c=o.header;return r.channel===c.channel&&r.sampleRate===c.sampleRate}_createDemuxer(e){return new ga(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class rn extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(Re(t)&&(t=await t),!t)return!1;const i=rc(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===rc(t,4)}_createDemuxer(e){return new Fa(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class an extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return Re(t)&&(t=await t),!!t&&"OggS"===rc(t,4)}_createDemuxer(e){return new xa(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class sn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Re(i)&&(i=await i),!!i&&"fLaC"===rc(i,4)}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new La(e)}}class nn extends Gs{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,uc);if(Re(i)&&(i=await i),!i)break;const r=mc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Re(i)&&(i=await i),!i)return!1;const r=Ma(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Re(i)&&(i=await i),!i)return!1;const a=Ma(i);return!!a&&(r.objectType===a.objectType&&r.samplingFrequencyIndex===a.samplingFrequencyIndex&&r.channelConfiguration===a.channelConfiguration)}_createDemuxer(e){return new Oa(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class on extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,205);if(Re(t)&&(t=await t),!t)return!1;const i=qo(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])}_createDemuxer(e){return new Xa(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class cn extends Gs{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(Re(t)&&(t=await t),!t)return!1;if(!("#EXTM3U"===rc(t,7)))return!1;if(!(e._rootSource instanceof vs))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new Ws(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return is}}const ln=new Ys,un=new Js,dn=new Zs,hn=new en,fn=new tn,mn=new rn,pn=new an,gn=new nn,kn=new sn,yn=new on,bn=new cn,wn=[bn,ln,un,dn,hn,mn,pn,kn,fn,gn,yn],Tn=[bn,ln,un,fn,gn,yn];var Sn=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});Me();let vn=-1/0,Pn=-1/0,In=null;"undefined"!==typeof FinalizationRegistry&&(In=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-vn>=1e3&&(Ke._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),vn=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-Pn>=1e3&&(Ke._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),Pn=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class xn{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Cn=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],Bn=new Set(Cn);class En{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(ye*this.timestamp)}get microsecondDuration(){return Math.trunc(ye*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!Bn.has(t.format))throw new TypeError("init.format must be one of: "+Cn.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&qe(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0;const i=t.layout??Ln(t.format,t.codedWidth,t.codedHeight);let r=t.colorSpace??null;null===r&&(r="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:t.visibleRect?.left??0,top:t.visibleRect?.top??0,width:t.visibleRect?.width??t.codedWidth,height:t.visibleRect?.height??t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?M(e):M(e).slice(),this._layout=i,this.colorSpace=new Dn(r)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==t?.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==t?.timestamp&&!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==t?.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==t?.visibleRect&&qe(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:e.visibleRect?.x??0,top:e.visibleRect?.y??0,width:e.visibleRect?.width??e.codedWidth,height:e.visibleRect?.height??e.codedHeight},this.rotation=t?.rotation??0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=t?.timestamp??e.timestamp/1e6,this.duration=t?.duration??(e.duration??0)/1e6,this.colorSpace=new Dn(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&qe(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new En(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*ye),duration:Math.trunc((t.duration??0)*ye)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const a=t.visibleRect??{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(a.width,a.height),n=s.getContext("2d",{alpha:xe(),willReadFrequently:!0});if(!n)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");n.drawImage(e,-a.left,-a.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:a.width,height:a.height},this.squarePixelWidth=a.width,this.squarePixelHeight=a.height,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new Dn({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof xn))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Cn.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=e.getColorSpace()}this.encodeOptions=t?.encodeOptions??{},this.pixelAspectRatio=Ue({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),In?.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return E(null!==this._data),this._data instanceof xn?new En(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):Mn(this._data)?new En(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(E(this._layout),new En(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new En(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(In?.unregister(this),this._data instanceof xn?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Mn(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){if(zn(e),this._closed)throw new Error("VideoSample is closed.");if(null==(e.format??this.format))throw new Error("Cannot get allocation size when format is null.");if(Mn(this._data))return this._data.allocationSize(e);return qn(this,e).allocationSize}async copyTo(e,t={}){if(!X(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(zn(t),this._closed)throw new Error("VideoSample is closed.");if(null==(t.format??this.format))throw new Error("Cannot copy video sample data when format is null.");if(E(null!==this._data),Mn(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof xn)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=await i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},t.colorSpace??"srgb"),!1);if(!(r instanceof En))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(r.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${r.format}' instead.`);return await r.copyTo(e,t)}catch(c){i.error=c,i.hasError=!0}finally{Sn(i)}}}const i=qn(this,t);E(this.format);const r=M(e);if(r.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');s=e}else if(this._data instanceof Uint8Array)E(this._layout),E(this._layout.length===a.length),s=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");E(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);s=[{data:M(t.data),stride:4*this.codedWidth}]}const n=[],o=a.length;for(let l=0;la.byteLength)throw new Error("Source buffer OOB read.");if(c+u>r.byteLength)throw new Error("Destination buffer OOB write.");const i=a.subarray(o,o+u);r.set(i,c),o+=t,c+=e.destinationStride}n.push(d)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),a=this.format.includes("X")&&t.format.includes("A");if(e||a)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const a=[];for(const s of e)i.set(s.data,r),a.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:a[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return Mn(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(E(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,a,s,n,o,c){let l=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(l=t,u=i,d=r,h=a,f=s,m=n,void 0!==o?(p=o,g=c):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=a)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(l))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:l,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(l,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const w=this.rotation%180===0?1:p/g;e.scale(1/w,w),e.drawImage(k,l,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&On(t.crop,"options.");const i=e.canvas.width,r=e.canvas.height,a=t.rotation??this.rotation,[s,n]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let o,c,l,u,d=t.crop;d&&(d=Nn(d,s,n));const{sx:h,sy:f,sWidth:m,sHeight:p}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??s,t.crop?.height??n,a);if("fill"===t.fit)o=0,c=0,l=i,u=r;else{const[e,a]=t.crop?[t.crop.width,t.crop.height]:[s,n],d="contain"===t.fit?Math.min(i/e,r/a):Math.max(i/e,r/a);l=e*d,u=a*d,o=(i-l)/2,c=(r-u)/2}e.save();const g=a%180===0?1:l/u;e.translate(i/2,r/2),e.rotate(a*Math.PI/180),e.scale(1/g,g),e.translate(-i/2,-r/2),e.drawImage(this.toCanvasImageSource(),h,f,m,p,o,c,l,u),e.restore()}_rotateSourceRegion(e,t,i,r,a){return 90===a?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===a?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===a&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,a=e.height,[s,n]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,c=i.crop?i.crop.height:n;let l=0;2*r0?An(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=l;p>1;p--){const e=r*2**p,t=a*2**p;f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",l>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*a,0,0,r,a),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(E(null!==this._data),this._data instanceof xn||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}async transform(e){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&On(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const t=_(this.rotation+(e.rotate??0)),[i,r]=t%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let a=e.crop;a&&(a=Nn(a,i,r));const s=a?a.width:i,n=a?a.height:r,o=s/n;let c,l;void 0!==e.width&&void 0===e.height?(c=e.width,l=c/o):void 0===e.width&&void 0!==e.height?(l=e.height,c=l*o):void 0!==e.width&&void 0!==e.height?(c=e.width,l=e.height):(c=s,l=n),c=he(c,e.roundDimensionsTo??1),l=he(l,e.roundDimensionsTo??1);const u={width:c,height:l,fit:e.fit??"fill",rotation:t,crop:a??{left:0,top:0,width:i,height:r},alpha:e.alpha??"keep"};for(const m of _n){let e=m(this,u);if(Re(e)&&(e=await e),null!==e)return e}const{canvas:d,context:h,isNew:f}=An(u.width,u.height);return this._drawWithFitAndMipmapping(d,h,{fit:u.fit,rotation:u.rotation,crop:u.crop,targetIsFresh:f,fillBlack:"discard"===u.alpha}),new En(d,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const _n=[],Rn=[];let Fn=0;const An=(e,t)=>{for(const a of Rn)if(a.canvas.width===e&&a.canvas.height===t)return a.age=Fn++,{canvas:a.canvas,context:a.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return Rn.length>=3&&Rn.splice(Le(Rn,e=>e.age),1),Rn.push({canvas:i,context:r,age:Fn++}),{canvas:i,context:r,isNew:!0}};class Dn{constructor(e){if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(L);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(q);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(H);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const Mn=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Nn=(e,t,i)=>{const r=Math.min(e.left,t),a=Math.min(e.top,i),s=Math.min(e.width,t-r),n=Math.min(e.height,i-a);return E(s>=0),E(n>=0),{left:r,top:a,width:s,height:n}},On=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},zn=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Ln=(e,t,i)=>{const r=Un(e),a=[];let s=0;for(const n of r){const e=Math.ceil(t/n.widthDivisor),r=Math.ceil(i/n.heightDivisor),o=e*n.sampleBytes,c=o*r;a.push({offset:s,stride:o}),s+=c}return a},Un=e=>{const t=(e,t,i,r,a)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return a&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:se(e),E(!1)}},qn=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,a=Wn(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let n;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");n=t.format}else n=e.format;return Vn(a,n,s)},Wn=(e,t,i,r,a)=>{const s={...e};if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!Hn(a,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},Hn=(e,t)=>{if(null===e)return!0;const i=Un(e);for(let r=0;r{const r=Un(t),a=r.length;if(void 0!==i&&i.length!==a)throw new TypeError(`Layout must have ${a} planes.`);let s=0;const n=[],o=[];for(let c=0;c4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/($n(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*$n(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const r=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-i;if(r>this.numberOfFrames-i)throw new RangeError("frameCount out of range");const a=$n(t),s=Gn(t);if(s&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(s?r:r*this.numberOfChannels)*a}copyTo(e,t){if(!X(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!jn.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:a}=t;let{planeIndex:s}=t,n=this.format;const o=i??this.format;if(!o)throw new Error("Destination format not determined");const c=this.numberOfFrames,l=this.numberOfChannels,u=a??0;if(u>=c)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:c-u;if(d>c-u)throw new RangeError("frameCount out of range");const h=$n(o),f=Gn(o);if(f&&s>=l)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*l)*h;if(e.byteLength2&&o!==n)return void Zn(this._data,p,n,o,l,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(S){if("f32-planar"===o)throw S;n="f32-planar"}}const k=Qn(n),y=$n(n),b=Gn(n);let w;if(this._data instanceof Kn){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=c*y*(b?1:l);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)w=e(s),s=0;else{w=new Uint8Array(c*y*l);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(a,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new Xn({data:a,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(In?.unregister(this),this._data instanceof Kn?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Jn(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof Kn?this._createAudioDataFromData():Jn(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(Gn(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const a=Math.min(s,o),c=new Float32Array(i*a);for(let t=0;t0;){const a=Math.min(s,o),l=new Float32Array(i*a);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},Gn=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Qn=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},Yn=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,le(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,le(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,le(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},Jn=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,Zn=(e,t,i,r,a,s,n,o)=>{const c=Qn(i),l=Yn(r),u=$n(i),d=$n(r),h=Gn(i);if(Gn(r))if(h){const r=new ArrayBuffer(o*u),a=N(r);e.copyTo(r,{planeIndex:s,frameOffset:n,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},ro=e=>{if(!Ne(e))throw new TypeError("timestamp must be a number.")},ao=(e,t,i)=>i.verifyKeyPackets?t.then(async t=>{if(!t||"delta"===t.type)return t;const i=await e.determinePacketType(t);return i&&(t.type=i),t}):t;class so{constructor(e){if(!(e instanceof To))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(io(e),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){io(e);const t=await this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(ro(e),io(t),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(io(t),this._track.input._disposed)throw new Oo;return ao(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(ro(e),io(t),this._track.input._disposed)throw new Oo;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=await this._track._backing.getKeyPacket(e,t);if(!i)return i;E("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getKeyPacket(i.timestamp-1/await this._track.getTimeResolution(),t):i}async getNextKeyPacket(e,t={}){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(io(t),this._track.input._disposed)throw new Oo;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=await this._track._backing.getNextKeyPacket(e,t);if(!i)return i;E("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getNextKeyPacket(i,t):i}packets(e,t,i={}){if(void 0!==e&&!(e instanceof Wi))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!i?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof Wi))throw new TypeError("endPacket must be an EncodedPacket.");if(io(i),this._track.input._disposed)throw new Oo;const r=[];let{promise:a,resolve:s}=te(),{promise:n,resolve:o}=te(),c=!1,l=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(async()=>{let u=e??await this.getFirstPacket(i);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);)r.length>f()?(({promise:n,resolve:o}=te()),await n):(r.push(u),s(),({promise:a,resolve:s}=te()),u=await this.getNextPacket(u,i));c=!0,s()})().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{async next(){for(;;){if(m.input._disposed)throw new Oo;if(l)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};await a}},return:async()=>(l=!0,o(),s(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}class no{constructor(e,t){this.onSample=e,this.onError=t}}class oo{mediaSamplesInRange(e=-1/0,t=1/0,i){ro(e),ro(t);const r=[];let a=!1,s=null,{promise:n,resolve:o}=te(),{promise:c,resolve:l}=te(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g={...i,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{f=await this._createDecoder(i=>{l(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),a=!0):s.close()),i.timestamp>=e&&(r.push(i),a=!0),s=a?null:i,r.length>0&&(o(),({promise:n,resolve:o}=te())))},e=>{p||(m=e,p=!0,o())});const i=this._createPacketSink(),k=await i.getKeyPacket(e,g)??await i.getFirstKeyPacket(g);let y=k;const b=i.packets(k??void 0,void 0,g);for(await b.next();y&&!d&&!this._track.input._disposed;){const e=co(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:c,resolve:l}=te()),await c;continue}f.decode(y);const t=await b.next();if(t.done)break;y=t.value}await b.return(),h||this._track.input._disposed||await f.flush(),!a&&s&&r.push(s),u=!0,o()})().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{f?.close()});const k=this._track,y=()=>{s?.close();for(const e of r)e.close()};return{async next(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new Oo;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return l(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};await n}},return:async()=>(h=!0,d=!0,l(),o(),y(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()}(e),r=[],a=[];let{promise:s,resolve:n}=te(),{promise:o,resolve:c}=te(),l=!1,u=!1,d=null,h=null,f=!1;const m=e=>{a.push(e),n(),({promise:s,resolve:n}=te())},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{d=await this._createDecoder(e=>{if(c(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,n())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=async()=>{E(s),E(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:c}=te()),await o;if(u)break;const r=await e.getNextPacket(t,p);E(r),d.decode(r),t=r}g=-1},y=async()=>{E(d),await d.flush();for(let e=0;e{f||(h=e,f=!0,n())}).finally(()=>{d?.close()});const g=this._track,k=()=>{for(const e of a)e?.close()};return{async next(){for(;;){if(g.input._disposed)throw u=!0,k(),new Oo;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(a.length>0){const e=a.shift();return E(void 0!==e),c(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};await s}},return:async()=>(u=!0,c(),n(),k(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}const co=e=>0===e?40:8;class lo extends no{constructor(e,t,i,r,a,s){super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=a,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Se,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const n=eo.find(e=>e.supports(i,r));if(n)this.customDecoder=new n,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof En))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();E(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(Be()){if("avc"===i&&this.decoderConfig.description){const e=yt(M(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=wt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"}),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=St(t),this.decoderConfig={...this.decoderConfig,description:kt(e)}))}}j(this.decoderConfig.colorSpace)||(this.decoderConfig={...this.decoderConfig,colorSpace:{primaries:this.decoderConfig.colorSpace?.primaries??"bt709",matrix:this.decoderConfig.colorSpace?.matrix??"bt709",transfer:this.decoderConfig.colorSpace?.transfer??"bt709",fullRange:this.decoderConfig.colorSpace?.fullRange??!1}})}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(E(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(E(this.decoder),Pe()||ee(this.inputTimestamps,e.timestamp,e=>e),Be()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const a of ut(e.data,this.decoderConfig)){const r=dt(e.data[a.offset]);if(i||(i=r>=1&&r<=5),r===at.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(a.offset,a.offset+a.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&M(t.description)[4];return pt(e,i+1)}return mt(e)})(t,this.decoderConfig);e=new Wi(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Nt(e.data,this.decoderConfig);t&&(e=new Wi(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new ho),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();E(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();E(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=Vt(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(t??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of vt(e,this.decoderConfig)){const i=Pt(e[t.offset]);if(i===nt.RASL_N||i===nt.RASL_R)return!0}return!1}sampleHandler(e){if(Pe()){if(this.sampleQueue.length>0&&e.timestamp>=R(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}ee(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();E(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){const i=te();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){E(this.merger);const i=await this.merger.merge(e,t);r.sample=new En(i)}else r.sample=new En(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(a){ie(this.finalSamples,r),this.onError(a)}finally{ie(this.mergeAlphaPromises,i.promise),i.resolve()}}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(E(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Pe()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(E(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.merger?.close());for(const e of this.sampleQueue)e.close();this.sampleQueue.length=0}}let uo=null;class ho{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!uo){const e=new Blob([`(${fo.toString()})()`],{type:"application/javascript"});uo=URL.createObjectURL(e)}const e=le(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=te();this.pendingRequests.set(i,r);const a=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,a.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const fo=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:a,alpha:s}=e.data;i=i.then(async()=>{try{const e=await r(a,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{a.close(),s.close()}})});const r=async(e,t)=>{const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),c=i.includes("P12"),l=r.includes("P10"),u=r.includes("P12");if(l!==o||u!==c)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return await a(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return await s(e,t,i);if("NV12"===i)return await n(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)},a=async(e,t,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=new Uint8Array(4*s);await e.copyTo(n);const c=await o(t,r,a,1);for(let o=0,u=3;o{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=i.includes("P10"),n=i.includes("P12"),c=s||n?2:1;let l,u;i.startsWith("I420")?(l=Math.ceil(r/2),u=Math.ceil(a/2)):i.startsWith("I422")?(l=Math.ceil(r/2),u=a):(l=r,u=a);const d=r*a,h=d*c,f=l*u*c,m=new Uint8Array(h+2*f+d*c);await e.copyTo(m);const p=await o(t,r,a,c),g=h+2*f;m.set(p,g);const k={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:r,codedHeight:a,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[m.buffer]};return new VideoFrame(m,k)},n=async(e,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=Math.ceil(r/2)*Math.ceil(a/2),c=e.allocationSize();t&&t.byteLength===c||(t=new Uint8Array(c)),await e.copyTo(t);const l=new Uint8Array(s+2*n+s);l.set(t.subarray(0,s),0);const u=s,d=s+n,h=s;for(let o=0;o{const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),await t.copyTo(e);const n=t.format;if("RGBA"===n||"BGRA"===n||"RGBX"===n||"BGRX"===n){const t="RGBA"===n||"RGBX"===n?0:2,a=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class po extends oo{constructor(e,t={}){if(!(e instanceof Po))throw new TypeError("videoTrack must be an InputVideoTrack.");mo(t),super(),this._track=e,this._decoderOptions=t}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(Ee("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getRotation();let a=await this._track.getDecoderConfig();const s=await this._track.getTimeResolution();return E(i&&a),a={...a,hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency},new lo(e,t,i,a,r,s)}_createPacketSink(){return new so(this._track)}async getSample(e,t={}){ro(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class go{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof Po))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&On(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&mo(t.decoderOptions),this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??"fill",this._videoSampleSink=new po(e,t.decoderOptions),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??(this._initPromise=(async()=>{const e=this._options,t=this._videoTrack,i=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),a=await t.getSquarePixelHeight(),[s,n]=i%180===0?[r,a]:[a,r];let o=e.crop;o&&(o=Nn(o,s,n));let[c,l]=o?[o.width,o.height]:[s,n];const u=c/l;void 0!==e.width&&void 0===e.height?(c=e.width,l=Math.round(c/u)):void 0===e.width&&void 0!==e.height?(l=e.height,c=Math.round(l*u)):void 0!==e.width&&void 0!==e.height&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=i,this._crop=o})())}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],a=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||xe()});E(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:a,fillBlack:!this._alpha&&xe()});const n={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),n}async getCanvas(e,t){ro(e),await this._ensureInit();const i=await this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)}async*canvases(e,t,i){await this._ensureInit(),yield*ce(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*ce(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}}class ko extends no{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Se,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const a=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const a=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(a*s)/s),e(t)},s=to.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Xn))throw new TypeError("The argument passed to onSample must be an AudioSample.");a(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{a(new Xn(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(E(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(E(this.decoder),this.expectedFirstTimestamp??(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(E(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(E(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class yo extends no{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,E(pi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:a,littleEndian:s}=Bi(this.codec);switch(this.inputSampleSize=a,a){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-128:"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const a=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let a=0;return a=4!==i?1<e.getUint16(t,s)-32768:"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):E(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>ne(e,t,s)-2**23:"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>ne(e,t,i)<<8>>8)(e,t,s):E(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-2**31:"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):E(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):E(!1);break;default:se(a),E(!1)}switch(a){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+128));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:se(a),E(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=N(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,a=new ArrayBuffer(r),s=new DataView(a);for(let l=0;l=n)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=n;const c=new Xn({format:this.outputFormat,data:a,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(c)}async flush(){}close(){}}class bo extends oo{constructor(e){if(!(e instanceof Io))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(Ee("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getDecoderConfig();return E(i&&r),pi.includes(r.codec)?new yo(e,t,r):new ko(e,t,i,r)}_createPacketSink(){return new so(this._track)}async getSample(e,t={}){ro(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class wo{constructor(e){if(!(e instanceof Io))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new bo(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){ro(e);const i=await this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)}buffers(e,t,i){return ce(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return ce(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class To{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof Po}isAudioTrack(){return this instanceof Io}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return So(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return So(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return So(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return So(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(e){return this._backing.getUnixTimeForTimestamp(e)}async hasUnixTimeMapping(){return null!==await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())}async getDisposition(){return this._backing.getDisposition()}get disposition(){return So(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){const e=await this._backing.getFirstPacket({metadataOnly:!0});return e?.timestamp??0}async computeDuration(e){const t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return fe((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){const i=new so(this);let r=1/0,a=-1/0,s=0,n=0;for await(const o of i.packets(void 0,void 0,{metadataOnly:!0,...t})){if(s>=e&&o.timestamp>=a)break;r=Math.min(r,o.timestamp),a=Math.max(a,o.timestamp+o.duration),s++,n+=o.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-r)).toPrecision(16)):0,averageBitrate:s?Number((8*n/(a-r)).toPrecision(16)):0}}async isLive(){return null!==await this._backing.getLiveRefreshInterval()}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(e){if(!(e instanceof To))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&0n!==(this._backing.getPairingMask()&e._backing.getPairingMask())}async getPairableTracks(e){return this.input.getTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Eo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Eo({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&(e=vo(e));const t=await this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||await e(i)))return!0;return!1}hasPairableVideoTrack(e){return e&&(e=vo(e)),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&(e=vo(e)),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}}const So=(e,t,i)=>{if(Re(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},vo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Re(r)?r.then(i):i(r)}:void 0};class Po extends To{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return So(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??"prores"===await this._backing.getCodec()}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return So(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return So(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return So(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return So(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return So(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ue({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()}))}get pixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ue({num:So(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*So(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:So(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*So(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")}))}async getDisplayWidth(){const e=await(this._backing.getMetadataDisplayWidth?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()}get displayWidth(){const e=this._backing.getMetadataDisplayWidth?.();if(void 0!==e){const t=So(e,"displayWidth","getDisplayWidth");if(null!==t)return t}const t=So(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return So(t,"displayWidth","getDisplayWidth")}async getDisplayHeight(){const e=await(this._backing.getMetadataDisplayHeight?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()}get displayHeight(){const e=this._backing.getMetadataDisplayHeight?.();if(void 0!==e){const t=So(e,"displayHeight","getDisplayHeight");if(null!==t)return t}const t=So(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return So(t,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){const e=await this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(E(null!==t),eo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(await VideoDecoder.isConfigSupported(e)).supported}catch(e){return Ke._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=await this.getCodec();if(null===t)return null;const i=await this.getDecoderConfig();return E(i),Vt(t,i,e.data)}async computeFrameRateMetrics(e={}){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Ne(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const t=await this.getTimeResolution(),i=e.targetPacketCount??256,r=new so(this),a=[];let s=-1/0,n=0;for await(const I of r.packets(void 0,void 0,{metadataOnly:!0})){if(a.length>=i&&I.timestamp>=s)break;a.push(I.timestamp),s=Math.max(s,I.timestamp),n++}const o=new Float64Array(a.length);for(let I=0;Ie-t),b=k-1>>1,w=k>>1;let T=0,S=0,v=0;for(const I of y)if(v+=f.get(I),0===T&&v>b&&(T=I),v>w){S=I;break}const P=(d/T+d/S)/2;return{underlyingFrameRate:u,bestGuessFrameRate:null!==u?u:Ao(P),minFrameRate:d/p,maxFrameRate:d/m,averageFrameRate:d*k/g,medianFrameRate:P,frameRateIsConstant:null!==u&&1===m&&1===p,probedPacketCount:n}}}class Io extends To{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return So(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return So(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return So(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(E(null!==t),to.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(await AudioDecoder.isConfigSupported(e)).supported}catch(e){return Ke._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Wi))throw new TypeError("packet must be an EncodedPacket.");return null===await this.getCodec()?null:"key"}}const xo=e=>-(e??-1/0),Co=e=>-e,Bo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Re(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Re(r)?r.then(i):i(r)}:void 0}},Eo=(e,t)=>({filter:e?.filter||t?.filter?i=>{const r=e?.filter?.(i)??!0,a=e=>!1!==e&&(t?.filter?.(i)??!0);return Re(r)?r.then(a):a(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?i=>{const r=e?.sortBy?.(i)??[],a=t?.sortBy?.(i)??[],s=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Re(r)||Re(a)?Promise.all([r,a]).then(([e,t])=>s(e,t)):s(r,a)}:void 0}),_o=async(e,t)=>{let i=e;if(t?.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Re(e))){const t=await Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!t?.sortBy)return i;const r=i.map(e=>t.sortBy(e)),a=r.some(e=>Re(e))?await Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:a[t]})).sort((e,t)=>{const i=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(i.length,r.length);for(let s=0;se.track)},Ro=(e,t)=>{const i=1e6,r=1+1e-9,a=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let T=1;T0))return null;s[T-1]=t}const n=s.slice();n.sort();let o=n[Math.floor(.05*n.length)];for(let T=0;T<6;T++){let e=0,t=0;for(const a of s){const i=Math.max(1,Math.round(a/o));Math.abs(a-i*o)>=r||(e+=a,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let c=0,l=0,u=0;for(const T of s){const e=Math.max(1,Math.round(T/o));Math.abs(T-e*o)>=r||(c++,l+=T,u+=e)}if(c/s.length<.98)return null;o=l/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const T of a){if(Tp)continue;const e=Math.abs(T/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,a=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof Gs)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ts||e.source instanceof Ss))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ts&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof Mo))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ts?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){E(this._rootSource instanceof vs);const t=await this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&Ps(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&Ps(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const a=(async()=>{const i=await this._getSourceUncached(e);if(ze(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=Le(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);E(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),ie(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);E(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:a}),a.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??(this._demuxerPromise=(async()=>{this._reader=new zo(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const e of this._formats){if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this)}throw new No})())}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),E(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof No)return!1;throw e}}async getFirstTimestamp(e){e??(e=await this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=await Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>e?.timestamp??1/0));return r===1/0?0:r}async computeDuration(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=await Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e),r=(await Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)}async getTracks(e){e&&(e=Bo(e));const t=(await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return _o(t,e)}async getVideoTracks(e){e&&(e=Bo(e));const t=(await this.getTracks()).filter(e=>e.isVideoTrack());return _o(t,e)}async getAudioTracks(e){e&&(e=Bo(e));const t=(await this.getTracks()).filter(e=>e.isAudioTrack());return _o(t,e)}async getPrimaryVideoTrack(e){e&&(e=Bo(e));const t=Eo(e,{sortBy:async e=>[Co((await e.getDisposition()).default),Co(await e.hasPairableAudioTrack()),Co(!(await e.hasOnlyKeyPackets())),xo(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&(e=Bo(e));const t=await this.getPrimaryVideoTrack(),i=Eo(e,{sortBy:async e=>[Co(!t||e.canBePairedWith(t)),Co((await e.getDisposition()).default),xo(await e.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){const e=await this._getDemuxer();return this._trackBackingsCache??(this._trackBackingsCache=await e.getTrackBackings())}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new Po(this,e):new Io(this,e);return this._backingToTrack.set(e,i),i}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class No extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class Oo extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class zo{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new Oo;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new Lo(t,N(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,ws);return Re(r)?r.then(t=>t?new Lo(t.bytes,t.view,t.offset,e,i):null):r?new Lo(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new Oo;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,le(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),a=r=>r||(E(null!==this.fileSizeNonStrict),this.requestSlice(e,le(this.fileSizeNonStrict-e,t,i)));return Re(r)?r.then(a):a(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(async()=>{const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Re(i)&&(i=await i),!i||0===i.length)break;const r=qo(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const a of e)i.set(a,r),r+=a.length;return new Lo(i,N(i),0,0,t)})()}}class Lo{constructor(e,t,i,r,a){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=a,this.bufferPos=r-i}static tempFromBytes(e){return new Lo(e,N(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new Lo(this.bytes,this.view,this.offset,e,e+t)}}const Uo=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},qo=(e,t)=>{Uo(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},Wo=e=>(Uo(e,1),e.view.getUint8(e.bufferPos++)),Ho=(e,t)=>{Uo(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},Vo=e=>{Uo(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},jo=e=>{Uo(e,3);const t=ne(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},Ko=e=>{Uo(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},Xo=(e,t)=>{Uo(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},$o=e=>{Uo(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},Go=e=>{Uo(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},Qo=e=>{Uo(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Yo=(e,t)=>{let i,r;return t?(i=Xo(e,!0),r=Xo(e,!0)):(r=Xo(e,!1),i=Xo(e,!1)),4294967296*r+i},Jo=e=>4294967296*$o(e)+$o(e),Zo=e=>4294967296*Qo(e)+$o(e),ec=e=>{const t=Go(e),i=(e=>{Uo(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},tc=e=>{Uo(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},ic=e=>{Uo(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},rc=(e,t)=>{Uo(e,t);let i="";for(let r=0;rO.decode(qo(e,t)).split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!i?.ignore?.(e));var sc,nc,oc,cc;(nc=sc||(sc={}))[nc.Unsynchronisation=128]="Unsynchronisation",nc[nc.ExtendedHeader=64]="ExtendedHeader",nc[nc.ExperimentalIndicator=32]="ExperimentalIndicator",nc[nc.Footer=16]="Footer",(cc=oc||(oc={}))[cc.ISO_8859_1=0]="ISO_8859_1",cc[cc.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",cc[cc.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",cc[cc.UTF_8=3]="UTF_8";const lc=128,uc=10,dc=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],hc=(e,t)=>{var i;const r=e.filePos;t.raw??(t.raw={}),(i=t.raw).TAG??(i.TAG=qo(e,lc-3)),e.filePos=r;const a=fc(e,30);a&&(t.title??(t.title=a));const s=fc(e,30);s&&(t.artist??(t.artist=s));const n=fc(e,30);n&&(t.album??(t.album=n));const o=fc(e,4),c=Number.parseInt(o,10);Number.isInteger(c)&&c>0&&(t.date??(t.date=new Date(String(c))));const l=qo(e,30);let u;if(0===l[28]&&0!==l[29]){const i=l[29];i>0&&(t.trackNumber??(t.trackNumber=i)),e.skip(-30),u=fc(e,28),e.skip(2)}else e.skip(-30),u=fc(e,30);u&&(t.comment??(t.comment=u));const d=Wo(e);d{const i=qo(e,t),r=Fe(i.indexOf(0),i.length),a=i.subarray(0,r);let s="";for(let n=0;n{const t=e.filePos,i=rc(e,3),r=Wo(e),a=Wo(e),s=Wo(e),n=$o(e);if("ID3"!==i||255===r||255===a||0!==(2155905152&n))return e.filePos=t,null;let o=Ni(n);return s&sc.Footer&&(o+=uc),{majorVersion:r,revision:a,flags:s,size:o}},pc=(e,t,i)=>{var r,a,s,n,o;if(![2,3,4].includes(t.majorVersion))return void Ke._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&sc.Footer?t.size-uc:t.size,l=qo(e,c),u=new gc(t,l);if(t.flags&sc.Unsynchronisation&&3===t.majorVersion&&u.ununsynchronizeAll(),t.flags&sc.ExtendedHeader){const e=u.readU32();3===t.majorVersion?u.pos+=e:u.pos+=e-4}for(;u.pos<=u.bytes.length-u.frameHeaderSize();){const e=u.readId3V2Frame();if(!e)break;const c=u.pos,l=u.pos+e.size;let d=!1,h=!1,f=!1;if(3===t.majorVersion?(d=!!(64&e.flags),h=!!(128&e.flags)):4===t.majorVersion&&(d=!!(4&e.flags),h=!!(8&e.flags),f=!!(2&e.flags)||!!(t.flags&sc.Unsynchronisation)),d)Ke._warn(`Skipping encrypted ID3v2 frame ${e.id}`),u.pos=l;else if(h)Ke._warn(`Skipping compressed ID3v2 frame ${e.id}`),u.pos=l;else{if(f&&u.ununsynchronizeRegion(u.pos,l),i.raw??(i.raw={}),"TXXX"===e.id){const e=(r=i.raw).TXXX??(r.TXXX={}),t=u.readId3V2TextEncoding(),a=u.readId3V2Text(t,l),s=u.readId3V2Text(t,l);e[a]??(e[a]=s)}else"T"===e.id[0]?(a=i.raw)[s=e.id]??(a[s]=u.readId3V2EncodingAndText(l)):(n=i.raw)[o=e.id]??(n[o]=u.readBytes(e.size));switch(u.pos=c,e.id){case"TIT2":case"TT2":i.title??(i.title=u.readId3V2EncodingAndText(l));break;case"TIT3":case"TT3":i.description??(i.description=u.readId3V2EncodingAndText(l));break;case"TPE1":case"TP1":i.artist??(i.artist=u.readId3V2EncodingAndText(l));break;case"TALB":case"TAL":i.album??(i.album=u.readId3V2EncodingAndText(l));break;case"TPE2":case"TP2":i.albumArtist??(i.albumArtist=u.readId3V2EncodingAndText(l));break;case"TRCK":case"TRK":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.trackNumber??(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.tracksTotal??(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.discNumber??(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.discsTotal??(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=u.readId3V2EncodingAndText(l);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==dc[e]){i.genre??(i.genre=dc[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==dc[e]){i.genre??(i.genre=dc[e]);break}}i.genre??(i.genre=e)}break;case"TDRC":case"TDAT":{const e=u.readId3V2EncodingAndText(l),t=new Date(e);Number.isNaN(t.getTime())||(i.date??(i.date=t))}break;case"TYER":case"TYE":{const e=u.readId3V2EncodingAndText(l),t=Number.parseInt(e,10);Number.isInteger(t)&&(i.date??(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.lyrics??(i.lyrics=u.readId3V2Text(e,l))}break;case"COMM":case"COM":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.comment??(i.comment=u.readId3V2Text(e,l))}break;case"APIC":case"PIC":{const e=u.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=u.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=u.readId3V2Text(e,l);const a=u.readU8(),s=u.readId3V2Text(e,l).trimEnd(),n=l-u.pos;if(n>=0){const e=u.readBytes(n);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===a?"coverFront":4===a?"coverBack":"unknown",description:s})}}break;default:u.pos+=e.size}u.pos=l}}};class gc{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Ni(t);s(e)&&(i=e)}return this.pos=a,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case oc.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=Fe(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=Fe(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),O.decode(r.subarray(0,e))}case oc.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=Fe(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case oc.UTF_8:{const e=Fe(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),O.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class kc{constructor(e){this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set}get currentTime(){return this.paused?this.playbackTimeAtStart:(this.audioContext.currentTime-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart}ensureAudioContext(e){if(this.audioContext)return;const t=window.AudioContext||window.webkitAudioContext;try{this.audioContext=new t({sampleRate:e})}catch{this.audioContext=new t}this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.updateGain()}updateGain(){if(!this.gainNode)return;const e=this.muted?0:this.volume;this.gainNode.gain.value=e*e}stopQueuedNodes(){this.queuedNodes.forEach(e=>e.stop()),this.queuedNodes.clear()}async stopIterator(){await(this.audioIterator?.return()),this.audioIterator=null}handleNoAudioTrack(){this.audioSink=null,this.ensureAudioContext()}async load(e,t){++this.asyncId,await this.stopIterator(),this.stopQueuedNodes(),this.paused=!0,this.playbackTimeAtStart=0,this.audioContextStartTime=0;const{input:i,audioTrack:r,duration:a}=e;return this.input=i,this.duration=a,r?null!==r.codec&&await r.canDecode()?(this.ensureAudioContext(r.sampleRate),this.audioSink=new wo(r),void t?.()):(this.audioSink=null,this.ensureAudioContext(),void t?.()):(this.handleNoAudioTrack(),void t?.())}async runIterator(e){if(!this.audioSink)return;await this.stopIterator(),this.audioIterator=this.audioSink.buffers(this.currentTime);for(;;){if(e!==this.asyncId||this.paused)return;const i=[];let r=!1;try{for(let e=0;e<16;e++){const e=await this.audioIterator.next();if(e.done){r=!0;break}i.push(e.value)}}catch(t){console.error("Audio iterator error:",t),r=!0}if(e!==this.asyncId||this.paused)return;i.length>0&&"suspended"===this.audioContext.state&&(await this.audioContext.resume(),this.events.emit("canplay"),this.events.emit("playing"));for(const{buffer:e,timestamp:t}of i){const i=this.audioContext.createBufferSource();i.buffer=e,i.connect(this.gainNode),i.playbackRate.value=this.playbackRate;const r=this.audioContextStartTime+(t-this.playbackTimeAtStart)/this.playbackRate,a=(r+e.duration/this.playbackRate-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart;a>this.latestScheduledEndTime&&(this.latestScheduledEndTime=a),r>=this.audioContext.currentTime?i.start(r):i.start(this.audioContext.currentTime,(this.audioContext.currentTime-r)*this.playbackRate),this.queuedNodes.add(i),i.onended=()=>this.queuedNodes.delete(i)}if(r)break;await new Promise(e=>setTimeout(e,0));const a=1;for(;this.latestScheduledEndTime-this.currentTime>a;){if(e!==this.asyncId||this.paused)return;await new Promise(e=>setTimeout(e,50))}}}async play(){if(!this.paused)return;this.audioContext||this.ensureAudioContext(),"suspended"===this.audioContext.state&&await this.audioContext.resume(),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1;const e=++this.asyncId;this.runIterator(e)}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime,this.paused=!0,this.stopIterator(),this.stopQueuedNodes())}async seek(e){this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart;const t=++this.asyncId;this.paused||this.runIterator(t)}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(e!==this.playbackRate&&(this.paused||(this.playbackTimeAtStart=this.currentTime,this.audioContextStartTime=this.audioContext.currentTime),this.playbackRate=e,!this.paused)){const e=++this.asyncId;this.runIterator(e)}}destroy(){this.asyncId++,this.pause(),this.audioContext?.close(),this.audioContext=null,this.input=null,this.audioSink=null}}async function yc(e){return await e.getAverageBitrate()??await e.getBitrate()??0}const bc=/\.m3u8(?:$|[?#])/i;function wc(e){return"string"===typeof e&&bc.test(e)}function Tc(e){const t=function(e){return"string"===typeof e?new _s(e):e instanceof Blob?new Cs(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new As(e):e??null}(e);return t?new Mo({source:t,formats:wc(e)?Tn:wn}):null}class Sc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){return this.controller?.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}async wait(e,t){try{await Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,e?.dispose()}cancel(){if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),this.controller?.abort(),this.disposeInput()}}}function vc(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}async function Pc({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),a=t||i,s=Boolean(a&&await a.isLive());let n=Number.NaN;return r.length>0&&(n=await e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==n||s||(n=await e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:n??Number.NaN}function Ic(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class xc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null,this.audioStart=null}operation(){return{...Ic(),source:this.host.loadSeq,complete:Ic()}}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,e?.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,e?.complete.resolve(),e?.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}async startAudio(){this.audioStart||(this.audioStart=this.host.audio.play());const e=this.audioStart;try{await e}finally{this.audioStart===e&&(this.audioStart=null)}}async runPlay(e){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(await this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,await this.startAudio(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),vc(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}}seek(e,t){return this.position(async t=>{const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();await Promise.all([i,r])},["seeked"],!1,t)}replace(e,t){return this.position(async i=>{e.duration=await Pc(e),i()&&(this.host.media=e,await Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(await Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))},["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=r??(this.seeking?this.wanted:!this.host.paused),this.cancelPlay();const a=this.seeking,s=this.operation();return this.seeking=s,a?.complete.resolve(),a?.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}async runPosition(e,t,i,r){const a=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!a())return;if(this.host.ended=!1,this.host.seeking=!0,vc(this.host.events,a,["seeking","waiting"]),!a())return;if(r||this.stop(),!a())return;if(await t(a),!a())return;if(this.host.seeking=!1,e.complete.resolve(),vc(this.host.events,a,i),!a())return;this.seeking=null,s=this.wanted}catch(n){if(!a())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(n),n}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&await this.play()}}const Cc=new WeakMap,Bc=new WeakMap;function Ec(e){const t=Bc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>e.value??null);Bc.set(e,i);const r=()=>{Bc.get(e)===i&&Bc.delete(e)};return i.then(r,r),i}function _c(e,t,i,r,a){const s=i?Math.max(.06,r/Math.max(1,a)):0;return i&&e{if(this.image===a&&t()){this.cancel();try{i(a)}catch(e){r(e)}}},a.onerror=()=>{this.image===a&&this.cancel()},a.src=e}}class Fc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}async update(e){const t=this.host.videoIterator;if(!t||!this.ready()||!this.current(e)||this.host.isFetching)return;const i={};this.fetching=i,this.host.isFetching=!0;const r=()=>this.current(e)&&this.host.videoIterator===t;try{for(;r();){const e=await Ec(t);if(!r()||!e)return;const i=this.host.audioClock?.currentTime;if(void 0===i)return;const a=_c(e.timestamp,i,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==a){if("draw"!==a)return void(this.host.nextFrame=e);this.draw(e)}}}catch(a){if(r())throw a}finally{this.fetching===i&&(this.fetching=null,this.host.isFetching=!1)}}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void vc(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(vc(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!S(this,o),e=>I(this,d,g).call(this,e,!0),e=>I(this,d,m).call(this,e)))}async preflight(e,t,i){return async function(e,t,i,r,a=()=>!0){if(r?.aborted||!a())return!1;if(!t||"string"!==typeof e||wc(e))return!0;try{const t=await fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if(r?.aborted||!a())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!(r?.aborted||!a())&&(console.warn("Preflight check failed:",s),!0)}}(e,this.preflightRange,this.events,t,i)}drawPoster(){if(S(this,n)||!this.poster||this.posterDrawn)return;const e=S(this,t);S(this,c).draw(this.poster,()=>I(this,d,h).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,I(this,d,f).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>I(this,d,m).call(this,e))}async stopIterator(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,await function(e){if(!e)return Promise.resolve();const t=Cc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return Cc.set(e,i),i}(e)}clear(){I(this,d,f).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){x(this,t)._++,x(this,i)._++,this.stop(),I(this,d,p).call(this),S(this,c).cancel(),P(this,o,!1),P(this,r,null),P(this,a,null),P(this,s,null),this.videoSink=null,this.input=null}async load(e,a){if(S(this,n))return;this.cancelPending();const s=S(this,t),c=S(this,i);P(this,o,!0);const l=Promise.resolve().then(()=>I(this,d,k).call(this,e,s,c,a));P(this,r,l);try{await l}finally{S(this,r)===l&&P(this,r,null)}}handleNoVideoTrack(){S(this,n)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}async resetIterator(e){if(S(this,n))return;const a=S(this,t),s=++x(this,i)._,l=S(this,r);this.stop(),S(this,c).cancel(),P(this,o,!0);try{l&&await l,await I(this,d,y).call(this,e,a,s)}catch(u){if(I(this,d,h).call(this,a)&&S(this,i)===s)throw I(this,d,p).call(this),u}finally{I(this,d,h).call(this,a)&&S(this,i)===s&&P(this,o,!1)}}async updateNextFrame(e){await S(this,l).update(e)}render(){S(this,l).render()}start(e){S(this,l).start(e)}stop(){S(this,l).stop()}async seek(e){await this.resetIterator(e)}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){S(this,n)||(P(this,n,!0),x(this,t)._++,S(this,l).destroy(),S(this,c).cancel(),I(this,d,p).call(this),this.posterDrawn=!1,P(this,a,null),P(this,s,null),this.videoSink=null,this.input=null,this.audioClock=null)}}t=new WeakMap,i=new WeakMap,r=new WeakMap,a=new WeakMap,s=new WeakMap,n=new WeakMap,o=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakMap,d=new WeakSet,h=function(e){return!S(this,n)&&S(this,t)===e},f=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},m=function(e){S(this,n)||(I(this,d,p).call(this),S(this,u)?S(this,u).call(this,e):this.events.emit("error",e))},p=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},g=function(e,t){S(this,c).cancel(),t&&this.clear(),I(this,d,f).call(this).drawImage(e.canvas,0,0)},k=async function(e,t,r,s){if(I(this,d,h).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:i,videoTrack:n,duration:o}=e;if(this.input=i,this.duration=o,!n)return this.handleNoVideoTrack(),void s?.();const c=null!==n.codec&&await n.canDecode();if(!I(this,d,h).call(this,t))return;if(!c)return this.handleNoVideoTrack(),void s?.();const l=await n.canBeTransparent();if(!I(this,d,h).call(this,t))return;P(this,a,()=>new go(n,{poolSize:2,fit:"contain",alpha:l})),this.videoSink=S(this,a).call(this),this.width=n.displayWidth,this.height=n.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,s?.(),I(this,d,h).call(this,t)&&await I(this,d,y).call(this,0,t,r)}catch(n){if(I(this,d,h).call(this,t))throw I(this,d,p).call(this),n}finally{I(this,d,h).call(this,t)&&S(this,i)===r&&P(this,o,!1)}},y=async function(e,t,r){if(!I(this,d,h).call(this,t)||S(this,i)!==r)return;I(this,d,p).call(this),S(this,a)&&this.videoSink===S(this,s)&&(this.videoSink=S(this,a).call(this));const n=this.videoSink;if(!n||!I(this,d,h).call(this,t))return;P(this,s,n);const o=n.canvases(e);this.videoIterator=o;const c=()=>I(this,d,h).call(this,t)&&S(this,i)===r&&this.videoIterator===o,l=await Ec(o);if(!c())return;const u=await Ec(o);c()&&(this.nextFrame=u,l?I(this,d,g).call(this,l,!1):this.drawPoster())};class Dc{constructor({canvas:e,ctx:t,events:i,option:r={}}){v(this,b),this.events=i,this.option=r,this.audio=new kc(i),this.video=new Ac({canvas:e,ctx:t,events:i,timeupdateInterval:r.timeupdateInterval??250,avSyncTolerance:r.avSyncTolerance??.12,dropLateFrames:r.dropLateFrames??!1,poster:r.poster??"",preflightRange:r.preflightRange??!1,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,P(this,b,new xc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,S(this,b).ended())})}async load(e){if(this.destroyed)return;const t=++this.loadSeq;if(S(this,b).invalidate(),this.video.cancelPending(),this.loadSession?.cancel(),t!==this.loadSeq||this.destroyed)return;if(this.pause(),t!==this.loadSeq||this.destroyed)return;this.disposeInput();const i=new Sc;this.loadSession=i,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,i.defer(()=>this.events.emit("waiting")),i.defer(()=>this.events.emit("loadstart"));const r=Number.isFinite(this.option.loadTimeout)?this.option.loadTimeout??0:0;try{await i.wait(this.performLoad(e,t,i),r)}catch(a){if(t!==this.loadSeq)return;const e=++this.loadSeq;if(S(this,b).invalidate(),this.video.cancelPending(),i.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}}async performLoad(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(await this.video.preflight(e,i.signal,r))||!r())return;const a=Tc(e);if(!a)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(a);const s=await async function(e,t){const i=await e.getPrimaryVideoTrack(),r=i?await i.getPrimaryPairableAudioTrack():await e.getPrimaryAudioTrack(),a=await Pc({input:e,videoTrack:i,audioTrack:r}),s=i||r,n=wc(t);return{input:e,videoTrack:i,audioTrack:r,duration:a,isLive:!Number.isFinite(a)&&Boolean(s&&await s.isLive()),isHls:n,videoMode:n?"auto":"manual",audioMode:n?"auto":"manual"}}(a,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=a,this.media=s;const n=function(e,t){let i=!1,r=!1,a=!1;function s(s){t()&&!a&&("video"===s?i=!0:r=!0,i&&r&&(a=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,vc(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,n.video),t=r()?this.audio.load(s,n.audio):Promise.resolve();if(await Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,vc(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){this.loadSession?.disposeInput(),this.input=null,this.media=null}async replaceTracks(e){if(this.media&&!this.destroyed)return S(this,b).replace({...this.media,...e},this.currentTime)}async selectHlsQuality(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getVideoTracks();if(!s())return;const a="auto"===t?await i.getPrimaryVideoTrack():e.find(e=>e.id===t)??r.videoTrack;if(!s()||!a)return;let o=r.audioTrack,c=r.audioMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableAudioTrack(),c="auto"),n={videoTrack:a,audioTrack:o,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async selectHlsAudio(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getAudioTracks();if(!s())return;const a="auto"===t?r.videoTrack?await r.videoTrack.getPrimaryPairableAudioTrack():await i.getPrimaryAudioTrack():e.find(e=>e.id===t)??r.audioTrack;if(!s()||!a)return;let o=r.videoTrack,c=r.videoMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableVideoTrack(),c="auto"),n={videoTrack:o,audioTrack:a,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async getHlsState(){const e=this.media;if(this.destroyed)return null;try{const t=await async function(e){if(!e?.isHls||!e.input)return null;const[t,i]=await Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[r,a]=await Promise.all([Promise.all(t.map(async(e,t)=>({id:e.id,track:e,index:t,name:await e.getName(),height:await e.getDisplayHeight(),bitrate:await yc(e)}))),Promise.all(i.map(async(e,t)=>{const i=await e.getName(),r=await e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:await yc(e)}}))]);return{levels:r,audios:a,currentLevel:e.videoTrack?r.find(t=>t.id===e.videoTrack?.id)??null:null,currentAudio:e.audioTrack?a.find(t=>t.id===e.audioTrack?.id)??null:null,videoMode:e.videoMode??"auto",audioMode:e.audioMode??"auto"}}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}}async play(){return S(this,b).play()}pause(){S(this,b).pause()}async seek(e){return S(this,b).seek(e)}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,S(this,b).invalidate();const e=[];for(const i of[()=>this.loadSession?.cancel(),()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){return this.media?.duration??this.audio.duration??this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}b=new WeakMap;const Mc=new WeakMap;function Nc(e){let t=Mc.get(e);return t||(t={closed:!1,frames:new Set},Mc.set(e,t)),t}class Oc{constructor({art:e,canvas:t,ctx:i,option:r}){this.art=e,this.canvas=t,this.option=r,this.events=new B,this.engine=new Dc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=r.volume??.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:e.option?.url&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=Nc(e);if(i.closed)return 0;const r=requestAnimationFrame(a=>{i.frames.delete(r),i.closed||t(a,{presentationTime:e.engine.currentTime,expectedDisplayTime:a+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:a,receiveTime:a,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){Nc(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=Nc(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,a=r("canvas"),s=a.getContext("2d"),n=new Oc({art:t,canvas:a,ctx:s,option:e});t.mediabunny=n;const o={};for(const e in a)"function"===typeof a[e]&&(o[e]=a[e].bind(a));const c=new Set([...Object.getOwnPropertyNames(n),...Object.getOwnPropertyNames(Object.getPrototypeOf(n))]);for(const e of c)"constructor"!==e&&(e in a||Object.defineProperty(a,e,{get(){const t=n[e];return"function"===typeof t?t.bind(n):t},set(t){n[e]=t},configurable:!0,enumerable:!0}));for(const e in o)a[e]=(...t)=>o[e](...t);function l(){const e=t.template?.$player;e&&!t.option.autoSize&&Object.assign(a.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",l),t.on("video:loadedmetadata",l),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function a(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),a("mediabunny-quality")}function n(){r("mediabunny-audio"),a("mediabunny-audio")}function o(e={}){return e.control||e.setting}async function c(r){const a=i.m3u8?.quality||{};if(!o(a)||!r?.levels.length)return void s();const n=a.auto||"Auto",c=a.title||"Quality",l=a.getName||(e=>e.name||`${e.height}P`),d=r.currentLevel?l(r.currentLevel):n,h=C(r.levels.map(e=>({html:l(e),value:e.id,default:r.currentLevel?.id===e.id})),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),a=r.levels.find(e=>e.id===t.value);return(a?.height||0)-(i?.height||0)});h.push({html:n,value:"auto",default:!r.currentLevel});const f=async i=>(await t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:d,style:{padding:"0 10px"},selector:h,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:d,html:c,icon:'',width:200,selector:h,onSelect:f})}async function l(r){const a=i.m3u8?.audio||{};if(!o(a)||!r?.audios.length||r.audios.length<2)return void n();const s=a.auto||"Auto",c=a.title||"Audio",l=a.getName||(e=>e.name||e.lang||e.language),d=r.currentAudio?l(r.currentAudio):s,h=C(r.audios.map(e=>({html:l(e),value:e.id,default:r.currentAudio?.id===e.id})),"html");h.push({html:s,value:"auto",default:!r.currentAudio});const f=async i=>(await t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:d,style:{padding:"0 10px"},selector:h,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-audio",tooltip:d,html:c,icon:'',width:200,selector:h,onSelect:f})}async function u(){const e=await t.getM3u8State();if(!e)return s(),void n();await Promise.all([c(e),l(e)])}}({art:t,shim:n,option:e}),t.on("destroy",()=>{delete t.mediabunny,n.destroy()}),a}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,a,s,n,o,c,l,u,h,d,f,m,p,g,k,y,b,w,T,S,v,P,I,x,C,B,E,_,R,F,A=e=>{throw TypeError(e)},M=(e,t,i)=>t.has(e)||A("Cannot "+i),D=(e,t,i)=>(M(e,t,"read from private field"),i?i.call(e):t.get(e)),N=(e,t,i)=>t.has(e)?A("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),O=(e,t,i,r)=>(M(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),z=(e,t,i)=>(M(e,t,"access private method"),i),L=(e,t,i,r)=>({set _(r){O(e,t,r,i)},get _(){return D(e,t,r)}});function U(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class q{constructor(){N(this,e,!1),this.listeners=new Map}addEventListener(t,i){D(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),this.listeners.get(t)?.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){if(D(this,e))return;const r=Object.assign(new Event(t),{detail:i});this.listeners.get(t)?.forEach(t=>{D(this,e)||t(r)})}destroy(){O(this,e,!0),this.listeners.clear()}}function W(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const H=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},V=e=>e&&e[e.length-1],j=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-2**r)},X=e=>{const t=j(e);return 0===(1&t)?-(t>>1):t+1>>1},$=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),G=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Q=new TextDecoder,Y=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),J={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Z=Y(J),ee={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},te=Y(ee),ie={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},re=Y(ie),ae=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,se={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},ne=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class oe{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,await i,e}}const ce=/^[0-9a-fA-F]+$/,le=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),ue=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,he=(e,t,i)=>{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+a>>1,o=i(e[n]);o===t?(s=n,a=n-1):o{let r=0,a=e.length-1,s=-1;for(;r<=a;){const n=r+(a-r+1)/2|0;i(e[n])<=t?(s=n,r=n+1):a=n-1}return s},fe=(e,t,i)=>{const r=de(e,i(t),i);e.splice(r+1,0,t)},me=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},pe=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},ge=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},ke=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},ye=e=>{throw new Error(`Unexpected value: ${e}`)},be=(e,t,i)=>{const r=e.getUint8(t),a=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|a<<8|s<<16:r<<16|a<<8|s},we=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Te=(e,t)=>({async next(){const i=await e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),Se=(e,t,i)=>Math.max(t,Math.min(i,e)),ve="und",Pe=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},Ie=(e,t)=>Math.round(e/t)*t,xe=(e,t)=>Math.round(e*t)/t,Ce=(e,t)=>Math.floor(e/t)*t,Be=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},Ee=/^[a-z]{3}$/,_e=e=>Ee.test(e),Re=1e6*(1+Number.EPSILON),Fe=(e,t)=>{const i={...e,...t};if(e.headers||t.headers){const r=e.headers?Ae(e.headers):{},a=t.headers?Ae(t.headers):{},s={...r};Object.entries(a).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ae=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Me=async(e,t,i,r,a)=>{let s=0;for(;;)try{return await e(t,i)}catch(n){if(a())throw n;s++;const e=r(s,n,t);if(null===e)throw n;if(st._error("Retrying failed fetch. Error:",n),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&await tt(1e3*e),a())throw n}};class De{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Ne=null;const Oe=()=>null!==Ne?Ne:Ne=!("undefined"===typeof navigator||!(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)));let ze=null;const Le=()=>null!==ze?ze:ze="undefined"!==typeof navigator&&navigator.userAgent?.includes("Firefox");let Ue=null;const qe=()=>null!==Ue?Ue:Ue=!("undefined"===typeof navigator||!navigator.vendor?.includes("Google Inc")&&!/Chrome/.test(navigator.userAgent)),We=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,He=(async()=>{})().constructor,Ve=e=>e instanceof He||e instanceof Promise||"function"===typeof e?.then,je=(e,t)=>-1!==e?e:t,Ke=(e,t,i,r)=>e<=r&&i<=t,Xe=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{Symbol.dispose??(Symbol.dispose=Symbol("Symbol.dispose"))},Ge=e=>"number"===typeof e&&!Number.isNaN(e),Qe=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const a=e.indexOf("/",r+3);i=-1===a?e+t:e.slice(0,a)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const a=i.indexOf("://");if(-1!==a){const e=i.indexOf("/",a+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),n=[];for(const o of s)".."===o?n.pop():"."!==o&&n.push(o);return r+n.join("/")},Ye=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let a=0;a{W(Number.isInteger(e.num)),W(Number.isInteger(e.den)),W(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},et=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},tt=e=>new Promise(t=>setTimeout(t,e));class it{constructor(){this._listeners=new Map}on(e,t,i){this._listeners.has(e)||this._listeners.set(e,new Set);const r={fn:t,once:i?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(a){console.error(a)}s.once&&r.delete(s)}}}var rt,at;(at=rt||(rt={}))[at.Silent=0]="Silent",at[at.Errors=1]="Errors",at[at.Warnings=2]="Warnings",at[at.Info=3]="Info";class st{constructor(){}static get level(){return st._level}static set level(e){if(e!==rt.Silent&&e!==rt.Errors&&e!==rt.Warnings&&e!==rt.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");st._level=e}static get _emitter(){return st._emitterInstance??(st._emitterInstance=new it)}static on(e,t,i){return st._emitter.on(e,t,i)}static _error(...e){st._emitter._emit("error",e),st._level>=rt.Errors&&console.error(...e)}static _warn(...e){st._emitter._emit("warn",e),st._level>=rt.Warnings&&console.warn(...e)}static _info(...e){st._emitter._emit("info",e),st._level>=rt.Info&&console.info(...e)}}st._level=rt.Info,st._emitterInstance=null;class nt{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class ot{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const ct={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class lt{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){const e=Math.floor(this.pos/8),t=this.bytes[e]??0,i=7-(7&this.pos),r=(t&1<>i;return this.pos++,r}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new lt(this.bytes);return e.pos=this.pos,e}}const ut=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ht=[-1,1,2,3,4,5,6,8],dt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new lt(e),i=ft(t),{frequencyIndex:r,sampleRate:a}=mt(t),s=t.readBits(4);let n=null;s>=1&&s<=7&&(n=ht[s]);let o=i,c=!1,l=a;if(5===i||29===i)c=29===i,l=mt(t).sampleRate,o=ft(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===ft(t)&&t.readBits(1)&&(l=mt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(c=!!t.readBits(1)));break}t.pos=e+1}return null!==n&&n>1&&(c=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:c&&1===n?2:n}},ft=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},mt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let a=0;t+3i&&(yield{offset:i,length:t-i}),i=t+a,t=i):t++}-1!==i&&i{if(t.description){const i=3&$(t.description)[4];return St(e,i+1)}return Tt(e)},Pt=e=>31&e,It=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+xt.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const a of e)i.set(xt,r),r+=xt.byteLength,i.set(a,r),r+=a.byteLength;return i},Bt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let a=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(a,s.byteLength);break;case 2:e.setUint16(a,s.byteLength,!1);break;case 3:we(e,a,s.byteLength);break;case 4:e.setUint32(a,s.byteLength,!1)}a+=t,r.set(s,a),a+=s.byteLength}return r},Et=e=>{try{const t=[],i=[],r=[];for(const o of Tt(e)){const a=e.subarray(o.offset,o.offset+o.length),s=Pt(a[0]);s===kt.SPS?t.push(a):s===kt.PPS?i.push(a):s===kt.SPS_EXT&&r.push(a)}if(0===t.length)return null;if(0===i.length)return null;const a=t[0],s=At(a);W(null!==s);const n=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:n?s.chromaFormatIdc:null,bitDepthLumaMinus8:n?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:n?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:n?r:null}}catch(t){return st._error("Error building AVC Decoder Configuration Record:",t),null}},_t=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=G(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=t.getUint8(i++),n=t.getUint8(i++),o=3&t.getUint8(i++),c=31&t.getUint8(i++),l=[];for(let f=0;f{try{const t=It(e),i=new lt(t);i.skipBits(1),i.skipBits(2);if(7!==i.readBits(5))return null;const r=i.readAlignedByte(),a=i.readAlignedByte(),s=i.readAlignedByte();j(i);let n=1,o=0,c=0,l=0;if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){n=j(i),3===n&&(l=i.readBits(1)),o=j(i),c=j(i),i.skipBits(1);if(i.readBits(1))for(let e=0;e<(3!==n?8:12);e++){if(i.readBits(1)){const t=e<6?16:64;let r=8,a=8;for(let e=0;ee.level>=s)??V(_i),r=Math.min(Math.floor(i.maxDpbMbs/(e*t)),16);v=r,P=r}else v=0,P=0}return W(null!==P),{emulationUnpreventedBytes:t,profileIdc:r,constraintFlags:a,levelIdc:s,frameMbsOnlyFlag:k,chromaFormatIdc:n,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:m,displayWidth:p,displayHeight:g,pixelAspectRatio:S,colourPrimaries:y,matrixCoefficients:w,transferCharacteristics:b,fullRangeFlag:T,numReorderFrames:v,maxDecFrameBuffering:P,vuiParametersFlagBitOffset:C,bitstreamRestrictionFlagBitOffset:I,bitstreamRestrictionFlag:x}}catch(t){return st._error("Error parsing AVC SPS:",t),null}},Mt=e=>{const t=j(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)j(e),j(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Dt=e=>{W(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new lt(e.emulationUnpreventedBytes),r=new lt(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(W(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),K(r,2),K(r,1),K(r,16),K(r,16),K(r,e.numReorderFrames),K(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const a=r.pos/8;return W(Number.isInteger(a)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,a))},Nt=(e,t)=>{if(t.description){const i=3&$(t.description)[21];return St(e,i+1)}return Tt(e)},Ot=e=>e>>1&63,zt=e=>{try{const t=new lt(It(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:a,general_tier_flag:s,general_profile_idc:n,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:l}=Ut(t,i);j(t);const u=j(t);let h=0;3===u&&(h=t.readBits(1));const d=j(t),f=j(t);let m=d,p=f;if(t.readBits(1)){const e=j(t),i=j(t),r=j(t),a=j(t);let s=1,n=1;const o=0===h?u:0;1===o?(s=2,n=2):2===o&&(s=2,n=1),m-=(e+i)*s,p-=(r+a)*n}const g=j(t),k=j(t);j(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)j(t),b=j(t),j(t);j(t),j(t),j(t),j(t),j(t),j(t),t.readBits(1)&&t.readBits(1)&&qt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),j(t),j(t),t.skipBits(1));const w=j(t);if(Wt(t,w),t.readBits(1)){const e=j(t);for(let i=0;i{try{const t=[],i=[],r=[],a=[];for(const c of Tt(e)){const s=e.subarray(c.offset,c.offset+c.length),n=Ot(s[0]);n===bt.VPS_NUT?t.push(s):n===bt.SPS_NUT?i.push(s):n===bt.PPS_NUT?r.push(s):n!==bt.PREFIX_SEI_NUT&&n!==bt.SUFFIX_SEI_NUT||a.push(s)}if(0===i.length||0===r.length)return null;const s=zt(i[0]);if(!s)return null;let n=0;if(r.length>0){const e=r[0],t=new lt(It(e));t.skipBits(16),j(t),j(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),j(t),j(t),X(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&j(t),X(t),X(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),a=t.readBits(1);n=i||a?i&&!a?2:!i&&a?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:bt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:bt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:bt.PPS_NUT,nalUnits:r}]:[],...a.length?[{arrayCompleteness:1,nalUnitType:Ot(a[0][0]),nalUnits:a}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:n,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return st._error("Error building HEVC Decoder Configuration Record:",t),null}},Ut=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),a=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const n=new Uint8Array(6);for(let u=0;u<6;u++)n[u]=e.readBits(8);const o=e.readBits(8),c=[],l=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&X(e);for(let t=0;t{const i=[];for(let r=0;r{let a=0,s=0,n=0;if(0!==t&&(s=e.readBits(1)),s){if(t===i){n=t-(j(e)+1)}else n=t-1;e.readBits(1),j(e);const s=r[n]??0;for(let t=0;t<=s;t++){e.readBits(1)||e.readBits(1)}a=r[n]}else{const t=j(e),i=j(e);for(let r=0;r{let i=2,r=2,a=2,s=0,n=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=Ft[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),a=e.readBits(8))),e.readBits(1)&&(j(e),j(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(j(e),j(e),j(e),j(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&j(e),e.readBits(1)&&jt(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),n=j(e),j(e),j(e),j(e),j(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:a,fullRangeFlag:s,minSpatialSegmentationIdc:n}},jt=(e,t,i)=>{let r=!1,a=!1,s=!1;r=1===e.readBits(1),a=1===e.readBits(1),(r||a)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let n=0;n<=i;n++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?j(e):i=1===e.readBits(1);let n=1;if(!i){n=j(e)+1}r&&Kt(e,n,s),a&&Kt(e,n,s)}},Kt=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Xt.audAllowed;for(const s of Nt(e,t)){if(r===Xt.noMoreDataAllowed){i.add(s.offset);continue}const t=Ot(e[s.offset]);if(r===Xt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let a=!1;35===t?r>Xt.audAllowed?a=!0:r=Xt.beforeFirstVcl:t<=31?r>Xt.afterFirstVcl?a=!0:r=Xt.afterFirstVcl:36===t?r!==Xt.afterFirstVcl?a=!0:r=Xt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Xt.beforeFirstVcl?a=!0:r=Xt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&$(t.description)[21];return Bt(e,i+1)}return Ct(e)})(a,t)},Qt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},Yt=e=>{const t=new lt(e);if(2!==t.readBits(2))return null;const i=t.readBits(1),r=(t.readBits(1)<<1)+i;3===r&&t.skipBits(1);if(1===t.readBits(1))return null;if(0!==t.readBits(1))return null;t.skipBits(2);if(4817730!==t.readBits(24))return null;let a=8;if(r>=2){a=t.readBits(1)?12:10}const s=t.readBits(3);let n=0,o=0;if(7!==s){if(o=t.readBits(1),1===r||3===r){const e=t.readBits(1),i=t.readBits(1);n=e||i?e&&!i?2:1:3,t.skipBits(1)}else n=1}else n=3,o=1;const c=(t.readBits(16)+1)*(t.readBits(16)+1);let l=V(Ri).level;for(const h of Ri)if(c<=h.maxPictureSize){l=h.level;break}const u=Qt[s];return{profile:r,level:l,bitDepth:a,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:u?.colourPrimaries??2,transferCharacteristics:u?.transferCharacteristics??2,matrixCoefficients:u?.matrixCoefficients??2}},Jt=function*(e){const t=new lt(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*2**(7*i),!(128&r))break;if(7===i&&128&r)return null}return e>2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),a=t.readBits(1),s=t.readBits(1);let n;if(t.skipBits(1),a&&t.skipBits(8),s){const e=i();if(null===e)return;n=e}else n=Math.floor(t.getBitsLeft()/8);W(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+n)},t.skipBits(8*n)}},Zt=e=>{for(const{type:t,data:i}of Jt(e)){if(1!==t)continue;const e=new lt(i),r=e.readBits(3);e.readBits(1);const a=e.readBits(1);let s=0,n=0,o=0;if(a)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let a=0;a<=r;a++){e.skipBits(12);const r=e.readBits(5);if(0===a&&(s=r),r>7){const t=e.readBits(1);0===a&&(n=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);const h=l+1;e.skipBits(h);let d=0;if(d=a?0:e.readBits(1),d&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!a){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,w=1,T=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,w=0,T=0):(b=e.readBits(1),0===r?(w=1,T=1):1===r?(w=0,T=0):12===m?(w=e.readBits(1),T=w?e.readBits(1):0):(w=1,T=0),w&&T&&(S=e.readBits(2))),{profile:r,level:s,tier:n,bitDepth:m,monochrome:p,chromaSubsamplingX:w,chromaSubsamplingY:T,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},ei=e=>{if(e.length<36)return null;const t=G(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ti=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],ii=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){a=r.pos;break}if(0===a)throw new Error("Invalid Setup header: framing bit not found.");let s=0,n=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),a=r.readBits(16);if(t>63||0!==i||0!==a){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(n=!0,o=s)}if(!n)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const c=o;r.pos=0,r.skipBits(a);const l=Array(c).fill(0);for(let u=c-1;u>=0;u--)r.skipBits(40),l[u]=r.readBits(1);return{modeBlockflags:l}},ri=(e,t,i)=>{switch(e){case"avc":for(const e of vt(i,t)){const t=i[e.offset],r=Pt(t);if(r>=kt.NON_IDR_SLICE&&r<=kt.SLICE_DPC)return"delta";if(r===kt.IDR)return"key";if(r===kt.SEI&&!qe()){const t=i.subarray(e.offset,e.offset+e.length),r=It(t);let a=1;do{let e=0;for(;;){const t=r[a++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[a++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new lt(r);e.pos=8*a;const t=j(e),i=e.readBits(1);if(0===t&&1===i)return"key"}a+=t}while(a{var i,r;const a=G(e);let s=0;const n=a.getUint32(s,!0);s+=4;const o=Q.decode(e.subarray(s,s+n));s+=n,n>0&&(t.raw??(t.raw={}),(i=t.raw).vendor??(i.vendor=o));const c=a.getUint32(s,!0);s+=4;for(let l=0;l0&&(t.trackNumber??(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=l.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(t.discNumber??(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(l,10);Number.isInteger(e)&&e>0&&(t.discsTotal??(t.discsTotal=e))}break;case"DATE":{const e=new Date(l);Number.isNaN(e.getTime())||(t.date??(t.date=e))}break;case"GENRE":t.genre??(t.genre=l);break;case"METADATA_BLOCK_PICTURE":{const e=Xe(l),i=G(e),r=i.getUint32(0,!1),a=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+a)),n=i.getUint32(8+a,!1),o=Q.decode(e.subarray(12+a,12+a+n)),c=i.getUint32(a+n+28),u=e.subarray(a+n+32,a+n+32+c);t.images??(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},oi=[2,1,2,3,3,4,4,5],ci=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new lt(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),a=t.readBits(5);if(a>8)return null;const s=t.readBits(3),n=t.readBits(3);0!==(1&n)&&1!==n&&t.skipBits(2),0!==(4&n)&&t.skipBits(2),2===n&&t.skipBits(2);return{fscod:i,bsid:a,bsmod:s,acmod:n,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},li=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],ui=[1,2,3,6],hi=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new lt(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),a=t.readBits(2);let s,n=0;3===a?(n=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;const u=ui[s];let h;h=a<3?pt[a]/1e3:gt[n]/1e3;return{dataRate:Math.round((r+1)*h/(16*u)),substreams:[{fscod:a,fscod2:n,bsid:l,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},di=e=>{const t=e.substreams[0];return W(t),t.fscod<3?pt[t.fscod]:null!==t.fscod2&&t.fscod2<3?gt[t.fscod2]:null},fi=e=>{const t=e.substreams[0];W(t);let i=oi[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},mi=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],pi=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],gi=[16,16,20,20,0,24,24,0],ki=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],yi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],bi=[32e3,44100,48e3,0],wi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Ti=[512,1024,2048,4096],Si=e=>{const t=Pi(e),i=G(e);let r=t?4*Math.ceil(t.frameSize/4):0,a=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=Ii(e.subarray(r));if(!t)break;a??(a=t),r+=t.frameSize}if(t)return{frameSize:a?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==a};if(!a?.asset)return null;const{asset:s}=a;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},vi=e=>{const t=Si(e);return t?.core?t.hasExtensions?"dtsh":"dtsc":null},Pi=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new lt(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const a=t.readBits(14)+1;if(a<96)return null;const s=t.readBits(6);if(s>=ki.length)return null;const n=mi[t.readBits(4)];if(0===n)return null;const o=pi[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const c=t.readBits(2);if(3===c)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const l=gi[t.readBits(3)];if(0===l)return null;const u=0!==c;return{frameSize:a,sampleRate:n,numberOfChannels:ki[s]+(u?1:0),sampleCount:32*r,channelLayout:yi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:l}},Ii=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new lt(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),a=8+4*r,s=16+4*r;t.skipBits(a);const n=t.readBits(s)+1,o={frameSize:n,asset:null};if(!t.readBits(1))return o;const c=bi[t.readBits(2)],l=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,h=t.readBits(3)+1,d=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===c||t.getBitsLeft()<0?o:{frameSize:n,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(l*m/c),channelLayout:g,pcmResolution:f}}},xi=e=>Be(e)+Be(44646&e),Ci=["avc","hevc","vp9","av1","vp8","prores"],Bi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Ei=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Bi],_i=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Ri=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],Fi=".01.01.01.01.00",Ai=".0.110.01.01.01.0",Mi=["ap4x","ap4h","apch","apcn","apcs","apco"],Di=["dtsc","dtsh","dtsl","dtse"],Ni=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:a,hevcCodecInfo:s,vp9CodecInfo:n,av1CodecInfo:o,proresFormat:c}=e;if("avc"===t){if(W(null!==e.avcType),a){const t=new Uint8Array([a.avcProfileIndication,a.profileCompatibility,a.avcLevelIndication]);return`avc${e.avcType}.${le(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${le(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,a,n,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=ue(s.generalProfileCompatibilityFlags),a=s.generalTierFlag,n=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=G(i),c=s.getUint8(1);e=c>>6&3,t=31&c,r=ue(s.getUint32(2)),a=c>>5&1,n=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let c="hev1.";for(c+=["","A","B","C"][e]+t,c+=".",c+=r.toString(16).toUpperCase(),c+=".",c+=0===a?"L":"H",c+=n;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(c+=".",c+=o.map(e=>e.toString(16).toUpperCase()).join(".")),c}if("vp8"===t)return"vp8";if("vp9"===t){if(!n){const t=e.width*e.height;let i=V(Ri).level;for(const e of Ri)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${n.profile.toString().padStart(2,"0")}.${n.level.toString().padStart(2,"0")}.${n.bitDepth.toString().padStart(2,"0")}.${n.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${n.colourPrimaries.toString().padStart(2,"0")}.${n.transferCharacteristics.toString().padStart(2,"0")}.${n.matrixCoefficients.toString().padStart(2,"0")}.${n.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(Fi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=V(Ri).level;for(const e of Ri)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),a=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),n=o.monochrome?"1":"0",c=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),l=r?.primaries?J[r.primaries]:1,u=r?.transfer?ee[r.transfer]:1,h=r?.matrix?ie[r.matrix]:1,d=r?.fullRange?1:0;let f=`av01.${t}.${i}${a}.${s}`;return f+=`.${n}.${c.toString().padStart(3,"0")}`,f+=`.${l.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${h.toString().padStart(2,"0")}`,f+=`.${d}`,f.endsWith(Ai)&&(f=f.slice(0,-17)),f}if("prores"===t)return c??"apch";throw null!==t&&ye(t),new TypeError(`Unhandled codec '${t}'.`)},Oi=e=>{switch(e.codec){case"avc":{let t=e.avcCodecInfo?.sequenceParameterSets[0];if(!t&&e.codecDescription&&(t=Rt(e.codecDescription)?.sequenceParameterSets[0]),t){const e=At(t);if(e)return{primaries:Z[e.colourPrimaries],transfer:te[e.transferCharacteristics],matrix:re[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=e.hevcCodecInfo?.arrays.find(e=>e.nalUnitType===bt.SPS_NUT)?.nalUnits[0];if(!t&&e.codecDescription&&(t=(e=>{try{const t=G(e);let i=0;const r=t.getUint8(i++),a=t.getUint8(i++),s=a>>6&3,n=a>>5&1,o=31&a,c=t.getUint32(i,!1);i+=4;const l=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),h=(15&t.getUint8(i++))<<8|t.getUint8(i++),d=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,w=k>>2&1,T=3&k,S=t.getUint8(i++),v=[];for(let P=0;P>7&1,s=63&r,n=t.getUint16(i,!1);i+=2;const o=[];for(let c=0;ce.nalUnitType===bt.SPS_NUT)?.nalUnits[0]),t){const e=zt(t);if(e)return{primaries:Z[e.colourPrimaries],transfer:te[e.transferCharacteristics],matrix:re[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:Z[e.vp9CodecInfo.colourPrimaries],transfer:te[e.vp9CodecInfo.transferCharacteristics],matrix:re[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:Z[e.av1CodecInfo.colourPrimaries],transfer:te[e.av1CodecInfo.transferCharacteristics],matrix:re[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:Z[e.proresCodecInfo.colourPrimaries],transfer:te[e.proresCodecInfo.transferCharacteristics],matrix:re[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},zi=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:a}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=dt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return a??"dtsc";if(t&&Bi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},Li=48e3,Ui=/^pcm-([usf])(\d+)(be)?$/,qi=e=>{if(W(Bi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Ui.exec(e);let i;W(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?128:0}},Wi=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Mi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Di.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Ui.test(e)?e:"webvtt"===e?"webvtt":null,Hi=[44100,48e3,32e3],Vi=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],ji=1483304551,Ki=1231971951,Xi=(e,t)=>3===e?3===t?21:36:3===t?13:21,$i=(e,t)=>{const i=e>>>24,r=e>>>16&255,a=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==a&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let n=0,o=0;16&r?n=8&r?0:1:(n=1,o=1);const c=r>>3&3,l=r>>1&3,u=(a>>2&3)%3,h=s>>6&3,d=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Vi[16*n*4+16*l+(a>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=Hi[u]>>n+o,b=((e,t,i,r,a)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Qi,Yi;(Yi=Qi||(Qi={}))[Yi.FrameCount=1]="FrameCount",Yi[Yi.FileSize=2]="FileSize",Yi[Yi.Toc=4]="Toc";const Ji=e=>3===e?1:2;class Zi{constructor(e){this.input=e}dispose(){}}const er=new Uint8Array(0);class tr{constructor(e,t,i,r,a=-1,s,n){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=a,e===er&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(a))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==n&&("object"!==typeof n||!n))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==n?.alpha&&!(n.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==n?.alphaByteLength&&(!Number.isInteger(n.alphaByteLength)||n.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=n??{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===er}get microsecondTimestamp(){return Math.trunc(Re*this.timestamp)}get microsecondDuration(){return Math.trunc(Re*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const i=new Uint8Array(e.byteLength);return e.copyTo(i),new tr(i,e.type,e.timestamp/1e6,(e.duration??0)/1e6,void 0,void 0,t)}clone(e){if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==e?.data&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==e?.type&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==e?.timestamp&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==e?.duration&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==e?.sequenceNumber&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==e?.sideData&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new tr(e?.data??this.data,e?.type??this.type,e?.timestamp??this.timestamp,e?.duration??this.duration,e?.sequenceNumber??this.sequenceNumber,this.byteLength,e?.sideData??this.sideData)}}const ir=e=>{const t=G(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const a=le(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=oc(e);const i=gc(e,4);let r=8;1===t&&(t=hc(e),r=16);const a=t-r;return a<0?null:{name:i,totalSize:t,headerSize:r,contentSize:a}},sr=e=>lc(e)/65536,nr=e=>lc(e)/1073741824,or=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=tc(e);if(t|=127&i,0===(128&i))break}return t},cr=e=>{let t=rc(e);return e.skip(2),t=Math.min(t,e.remainingLength),Q.decode(ec(e,t))},lr=e=>{const t=ar(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=oc(e);e.skip(4);const r=ec(e,t.contentSize-8);switch(i){case 1:return Q.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new nt(r,"image/jpeg");case 14:return new nt(r,"image/png");case 27:return new nt(r,"image/bmp");default:return r}},ur=16,hr=new Uint32Array(256),dr=new Uint32Array(256),fr=new Uint32Array(256),mr=new Uint32Array(256),pr=new Uint32Array(256),gr=new Uint32Array(256),kr=new Uint32Array(10);let yr=!1;class br{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(ur/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(ur),this.out=new Uint8Array(ur),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){W(16===e.byteLength),W(16===t.byteLength),yr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,n=1;s<256;s++)i[s]=n,t[n]=s,n=n^n<<1^(128&n?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let a=r^r<<1^r<<2^r<<3^r<<4;a=a>>>8^255&a^99,e[s]=a}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);hr[s]=t<<24|t<<16|t<<8|t,gr[s]=i<<24|i<<16|i<<8|i;const a=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);dr[s]=a,fr[s]=a>>>8|a<<24,mr[s]=a>>>16|a<<16,pr[s]=a>>>24|a<<8}let a=1;for(let s=0;s<10;s++)kr[s]=a<<24,a=a<<1^(128&a?283:0);yr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let a=4;a<44;a+=4){const e=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^4278190080&hr[e>>>16&255]^16711680&hr[e>>>8&255]^65280&hr[e>>>0&255]^255&hr[e>>>24&255]^kr[a/4-1],this.roundkey[a+1]=this.roundkey[a-3]^this.roundkey[a],this.roundkey[a+2]=this.roundkey[a-2]^this.roundkey[a+1],this.roundkey[a+3]=this.roundkey[a-1]^this.roundkey[a+2]}for(let a=0,s=40;a>>24&255]]^fr[255&hr[t>>>16&255]]^mr[255&hr[t>>>8&255]]^pr[255&hr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const a=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),n=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let c,l,u,h;for(let g=1;g<10;g++){const a=4*g;c=dr[e>>>24]^fr[r>>>16&255]^mr[i>>>8&255]^pr[255&t]^this.roundkey[a],l=dr[t>>>24]^fr[e>>>16&255]^mr[r>>>8&255]^pr[255&i]^this.roundkey[a+1],u=dr[i>>>24]^fr[t>>>16&255]^mr[e>>>8&255]^pr[255&r]^this.roundkey[a+2],h=dr[r>>>24]^fr[i>>>16&255]^mr[t>>>8&255]^pr[255&e]^this.roundkey[a+3],e=c,t=l,i=u,r=h}const d=4278190080&gr[e>>>24&255]^16711680&gr[r>>>16&255]^65280&gr[i>>>8&255]^255&gr[t>>>0&255]^this.roundkey[40],f=4278190080&gr[t>>>24&255]^16711680&gr[e>>>16&255]^65280&gr[r>>>8&255]^255&gr[i>>>0&255]^this.roundkey[41],m=4278190080&gr[i>>>24&255]^16711680&gr[t>>>16&255]^65280&gr[e>>>8&255]^255&gr[r>>>0&255]^this.roundkey[42],p=4278190080&gr[r>>>24&255]^16711680&gr[i>>>16&255]^65280&gr[t>>>8&255]^255&gr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,d^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=a,this.iv[1]=s,this.iv[2]=n,this.iv[3]=o}}class wr extends Zi{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.tracks.map(e=>e.trackBacking)}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>"video"===e.info?.type),hasAudio:this.tracks.some(e=>"audio"===e.info?.type),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Ve(r)&&(r=await r),!r)break;const a=e,s=ar(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=gc(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Ve(e)&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>a+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');await this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=a+s.totalSize}if(!i&&this.input._initInput&&await this.copyMetadataFromInitInput(this.input._initInput),t){W(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Ve(e)&&(e=await e),W(e);const t=oc(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Ve(e)&&(e=await e),e){const t=ar(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Ve(i)&&(i=await i),i&&this.readContiguousBoxes(i)}}}}})())}async copyMetadataFromInitInput(e){const t=await e._getDemuxer();if(t.constructor!==wr)throw new Error("Init input must match the input's format.");await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const i of t.tracks){const e={id:i.id,demuxer:this,trackBacking:null,disposition:i.disposition,timescale:i.timescale,durationInMediaTimescale:i.durationInMediaTimescale,durationInMovieTimescale:i.durationInMovieTimescale,rotation:i.rotation,internalCodecId:i.internalCodecId,name:i.name,languageCode:i.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:i.editListPreviousSegmentDurations,editListOffset:i.editListOffset,encryptionInfo:i.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:i.info};if(i.trackBacking)if(W(e.info),"video"===e.info.type&&-1!==e.info.width){const t=e;e.trackBacking=new Sr(t),this.tracks.push(e)}else if("audio"===e.info.type&&-1!==e.info.numberOfChannels){const t=e;e.trackBacking=new vr(t),this.tracks.push(e)}}}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;const t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,null===e.sampleTableByteOffset)return t;W(this.moovSlice);const i=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(i),this.currentTrack=null;if("audio"===e.info?.type&&e.info.codec&&Bi.includes(e.info.codec)&&0===t.sampleCompositionTimeOffsets.length){W("audio"===e.info?.type);const i=qi(e.info.codec),r=[],a=[];for(let s=0;se.startIndex),u=t.sampleTimingEntries[l],h=de(t.sampleTimingEntries,c,e=>e.startIndex),d=t.sampleTimingEntries[h],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=d.startDecodeTimestamp+(c-d.startIndex)*d.delta-f,p=V(r);p&&p.delta===m?p.count++:r.push({startIndex:n.startChunkIndex+s,startDecodeTimestamp:f,count:1,delta:m});const g=n.samplesPerChunk*i.sampleSize*e.info.numberOfChannels;a.push(g)}n.startSampleIndex=n.startChunkIndex,n.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=a}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(const e of t.sampleTimingEntries)for(let i=0;ie.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===a.moofOffset);if(i)Br(s,i.timestamp);else{const e=de(t,a.moofOffset-1,e=>e.moofOffset);if(-1!==e){const i=t[e];Br(s,i.endTimestamp)}}s.startTimestampIsFinal=!0}const i=de(t,s.startTimestamp,e=>e.startTimestamp);if(-1!==i&&t[i].moofOffset===a.moofOffset||t.splice(i+1,0,{moofOffset:a.moofOffset,startTimestamp:s.startTimestamp,endTimestamp:s.endTimestamp}),s.encryptionAuxInfo&&e.encryptionInfo){const t=await Fr(this.reader,e.encryptionInfo,s.encryptionAuxInfo);for(let e=0;e0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;_e(t.languageCode)||(t.languageCode=ve)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=gc(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:{...se},avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=M,this.readContiguousBoxes(e.slice(N,D.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=tc(e);e.skip(3);const r=oc(e);for(let a=0;a0&&(1===n?(e.skip(4),c=8*oc(e),e.skip(8)):2===n&&(e.skip(4),l=pc(e),o=oc(e),e.skip(4),c=oc(e),u=oc(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+a.totalSize-e.filePos));const h="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===h);else if("opus"===h)t.info.codec="opus",t.info.sampleRate=Li;else if("flac"===h)t.info.codec="flac";else if("ulaw"===h)t.info.codec="ulaw";else if("alaw"===h)t.info.codec="alaw";else if("ac-3"===h)t.info.codec="ac3";else if("ec-3"===h)t.info.codec="eac3";else if(Di.includes(h))t.info.codec="dts",t.info.dtsFormat=h;else if("twos"===h)8===c?t.info.codec="pcm-s8":16===c?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(st._warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if("sowt"===h)8===c?t.info.codec="pcm-s8":16===c?t.info.codec="pcm-s16":(st._warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if("raw "===h)t.info.codec="pcm-u8";else if("in24"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===h)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===h){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(st._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(st._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===h){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(st._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(st._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===h&&null!==u){const e=c+7>>3,i=Boolean(1&u),r=Boolean(2&u),a=4&u?-1:0;c>0&&c<=64&&(i?32===c&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):a&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==tc(e),t.encryptionInfo.defaultPerSampleIvSize=tc(e),t.encryptionInfo.defaultKid=le(ec(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=tc(e),r=new Uint8Array(16);r.set(ec(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(W(t.info),0===D.contentSize)break;t.info.codecDescription=ec(e,D.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(W(t.info),0===D.contentSize)break;t.info.codecDescription=ec(e,D.contentSize)}break;case"vpcC":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type),e.skip(4);const i=tc(e),r=tc(e),a=tc(e),s=a>>4,n=a>>1&7,o=1&a,c=tc(e),l=tc(e),u=tc(e);t.info.vp9CodecInfo={profile:i,level:r,bitDepth:s,chromaSubsampling:n,videoFullRangeFlag:o,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case"av1C":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type),e.skip(1);const i=tc(e),r=i>>5,a=31&i,s=tc(e),n=s>>7,o=s>>6&1,c=s>>4&1,l=s>>3&1,u=s>>2&1,h=3&s,d=2===r&&o?s>>5&1?12:10:o?10:8;e.skip(1);const f=ec(e,D.contentSize-4),m=Zt(f);t.info.av1CodecInfo={profile:r,level:a,tier:n,bitDepth:d,monochrome:c,chromaSubsamplingX:l,chromaSubsamplingY:u,chromaSamplePosition:h,videoFullRangeFlag:m?.videoFullRangeFlag??0,colourPrimaries:m?.colourPrimaries??2,transferCharacteristics:m?.transferCharacteristics??2,matrixCoefficients:m?.matrixCoefficients??2}}break;case"colr":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type);const i=gc(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=rc(e),a=rc(e),s=rc(e);let n;"nclx"===i&&(n=Boolean(128&tc(e))),t.info.colorSpace={primaries:Z[r],transfer:te[a],matrix:re[s],fullRange:n}}break;case"pasp":{const t=this.currentTrack;if(!t)break;W("video"===t.info?.type);const i=oc(e),r=oc(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==t.info?.type)break;e.skip(4);W(3===tc(e)),or(e),e.skip(2);const i=tc(e),r=0!==(64&i),a=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=tc(e);e.skip(t)}a&&e.skip(2);W(4===tc(e));const s=or(e),n=e.filePos,o=tc(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":st._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-n){W(5===tc(e));const i=or(e);if(t.info.codecDescription=ec(e,i),"aac"===t.info.codec){const e=dt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),t.info.pcmLittleEndian=!!(255&rc(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(4);const i=tc(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=tc(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(1);const i=tc(e),r=rc(e),a=oc(e),s=sc(e),n=tc(e);let o;o=0!==n?ec(e,2+i):new Uint8Array(0);const c=new Uint8Array(19+o.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,i),l.setUint16(10,r,!0),l.setUint32(12,a,!0),l.setInt16(16,s,!0),l.setUint8(18,n),c.set(o,19),t.info.codecDescription=c,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type),e.skip(4);const i=127,r=128,a=e.filePos;for(;e.filePos>>12,a=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=a,e.skip(20)}else e.skip(s);if(a&r)break}const s=e.filePos;e.filePos=a;const n=ec(e,s-a),o=new Uint8Array(4+n.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(n,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=ec(e,3),r=new lt(i),a=r.readBits(2);r.skipBits(8);const s=r.readBits(3),n=r.readBits(1);a<3&&(t.info.sampleRate=pt[a]),t.info.numberOfChannels=oi[s]+n}break;case"dec3":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=(e=>{if(e.length<2)return null;const t=new lt(e),i=t.readBits(13),r=t.readBits(3),a=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),n=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let c=0;o>0?c=t.readBits(9):t.skipBits(1),a.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:n,numDepSub:o,chanLoc:c})}return 0===a.length?null:{dataRate:i,substreams:a}})(ec(e,D.contentSize));if(!i){st._warn("Invalid dec3 box contents, ignoring.");break}const r=di(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=fi(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;W("audio"===t.info?.type);const i=(e=>{if(e.length<20)return null;const t=G(e),i=t.getUint32(0);if(0===i)return null;const r=new lt(e);r.seekToByte(13);const a=r.readBits(2);r.skipBits(5);const s=r.readBits(1),n=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let c=null;return 0!==o?c=xi(o):ne.id===i);if(!r)break;const a=oc(e),s=(12&a)>>2,n=3&a,o=[tc,rc,ac,oc],c=o[(48&a)>>4],l=o[s],u=o[n],h=oc(e);for(let d=0;de.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let a=0;ae.id===l);if(!u)break;const h=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:h?.defaultSampleDescriptionIndex??null,defaultSampleDuration:h?.defaultSampleDuration??null,defaultSampleSize:h?.defaultSampleSize??null,defaultSampleFlags:h?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=hc(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=oc(e)),a&&(u.currentFragmentState.defaultSampleDuration=oc(e)),s&&(u.currentFragmentState.defaultSampleSize=oc(e)),n&&(u.currentFragmentState.defaultSampleFlags=oc(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;W(t.currentFragmentState);const i=tc(e);e.skip(3);const r=0===i?oc(e):hc(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;W(this.currentFragment),W(t.currentFragmentState);const i=tc(e),r=ac(e),a=Boolean(1&r),s=Boolean(4&r),n=Boolean(256&r),o=Boolean(512&r),c=Boolean(1024&r),l=Boolean(2048&r),u=oc(e);let h=null;a&&(h=lc(e));let d,f=null;s&&(f=oc(e)),this.currentFragment.trackData.has(t.id)?(d=this.currentFragment.trackData.get(t.id),null!==h&&(d.currentOffset=t.currentFragmentState.baseDataOffset+h)):(d={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(h??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,d));for(let m=0;m0&&(a=ec(e,r));const s=Rr(t);s.defaultSampleInfoSize=i,s.sampleSizes=a,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=tc(e);if(1&ac(e)){const i=gc(e,4),r=oc(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=oc(e);if(0===r)break;r>1&&st._warn("Multiple saio entries are not supported; using the first offset only.");let a=0===i?oc(e):Number(hc(e));this.currentFragment&&(a+=this.currentFragment.moofOffset);Rr(t).offset=a}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;W(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=ac(e),a=Boolean(2&r),s=oc(e),n=t.encryptionInfo.defaultPerSampleIvSize;W(null!==n);for(let o=0;o0?r.set(ec(e,n),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(a){const t=rc(e);s=[];for(let i=0;i0&&((B=this.metadataTags).trackNumber??(B.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((E=this.metadataTags).tracksTotal??(E.tracksTotal=i))}break;case"trkn":if(a instanceof Uint8Array&&a.length>=6){const e=G(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((_=this.metadataTags).trackNumber??(_.trackNumber=t)),i>0&&((R=this.metadataTags).tracksTotal??(R.tracksTotal=i))}break;case"disc":case"disk":if(a instanceof Uint8Array&&a.length>=6){const e=G(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((F=this.metadataTags).discNumber??(F.discNumber=t)),i>0&&((A=this.metadataTags).discsTotal??(A.discsTotal=i))}}}}}return e.filePos=O,!0}}class Tr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.internalTrack;if(e.durationInMediaTimescale<=0)return null;W(e.trackBacking);const t=await e.trackBacking.getFirstPacket({metadataOnly:!0});return(t?.timestamp??0)+e.durationInMediaTimescale/e.timescale}async getLiveRefreshInterval(){return null}async getFirstPacket(e){const t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return Pe(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=Pr(r,i),s=await this.fetchPacketForSampleIndex(a,t);return _r(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=de(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=ke(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return W(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=xr(i,e);if(!r)return null;let a;if(t.metadataOnly)a=er;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Ve(t)&&(t=await t),!t)return null;if(a=ec(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=await Fr(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),u=-1!==l?this.internalTrack.fragmentLookupTable[l]:null,h=de(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),d=-1!==h?this.internalTrack.fragmentPositionCache[h]:null,f=Math.max(u?.moofOffset??0,d?.moofOffset??0)||null;let m;for(e?null===f||e.moofOffset>=f?(m=e.moofOffset+e.moofSize,n=e):m=f:m=f??0;;){if(n){const e=n.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(m,8,16);if(Ve(e)&&(e=await e),!e)break;const i=m,l=ar(e);if(!l)break;if("moof"===l.name){n=await s.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(n);if(r)return this.fetchPacketInFragment(n,e,a);-1!==e&&(o=n,c=e)}m=i+l.totalSize}if(u&&(!o||o.moofOffset{var e,t,i,r,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=await this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&ei(e.data)}}else{const e=await this.getFirstPacket({}),t=e&&Zt(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const e=await this.getFirstPacket({}),t=e&&Yt(e.data);t&&(this.internalTrack.info.vp9CodecInfo={...this.internalTrack.info.vp9CodecInfo??t,videoFullRangeFlag:t.videoFullRangeFlag,colourPrimaries:t.colourPrimaries,transferCharacteristics:t.transferCharacteristics,matrixCoefficients:t.matrixCoefficients})}else{const e=await this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&Lt(e.data)}else{const e=await this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&Et(e.data)}if(!ae(this.internalTrack.info.colorSpace)){const a=Oi(this.internalTrack.info);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const s={codec:Ni(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(s.displayAspectWidth=this.internalTrack.info.squarePixelWidth,s.displayAspectHeight=this.internalTrack.info.squarePixelHeight),s})()):null}}class vr extends Tr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&vi(e.data)}return{codec:zi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const Pr=(e,t)=>{if(e.presentationTimestamps){const i=de(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=de(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Ir=(e,t)=>{if(!e.keySampleIndices)return Pr(e,t);if(e.presentationTimestamps){const i=de(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==he(e.keySampleIndices,i,e=>e))return i}return-1}{const i=Pr(e,t),r=de(e.keySampleIndices,i,e=>e);return e.keySampleIndices[r]??-1}},xr=(e,t)=>{const i=de(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=de(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),n=e.sampleCompositionTimeOffsets[s];n&&t-n.startIndexe.startSampleIndex),l=e.sampleToChunk[c];W(l);const u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),h=e.chunkOffsets[u],d=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk;let f=0,m=h;if(1===e.sampleSizes.length)m+=o*(t-d),f+=o*l.samplesPerChunk;else for(let g=d;ge)}},Cr=(e,t)=>{if(!e.keySampleIndices)return t+1;const i=de(e.keySampleIndices,t,e=>e);return e.keySampleIndices[i+1]??-1},Br=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},Er=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},_r=e=>0===e.sampleSizes.length,Rr=e=>{var t;return e.currentFragmentState?(t=e.currentFragmentState).encryptionAuxInfo??(t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}):e.encryptionAuxInfo??(e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null})},Fr=async(e,t,i)=>{if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{W(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[o],r=new Uint8Array(16);s>0?r.set(ec(a,s),0):r.set(t.defaultConstantIv,0);let c=null;if(e>s){const e=rc(a);c=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Mr=async(e,t,i,r)=>{W(e.encryptionInfo);const a=e.encryptionInfo;W(null!==a.defaultKid);const s=a.defaultKid;let n;const o=e.demuxer.decryptionKeyCache.get(s);if(o)n=await o;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(s));for(let e=0;e{W(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;i{const a=new Uint8Array(16);a.set(i.iv,0);const s=await crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),n=async e=>{const t=await crypto.subtle.decrypt({name:"AES-CTR",counter:a,length:64},s,e);return new Uint8Array(t)};if(!i.subsamples)return n(r);W(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Or(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let c=0;for(const m of o)for(const e of m.perSubsample)c+=e.length;const l=new Uint8Array(c);let u=0;for(const m of o)for(const e of m.perSubsample)l.set(r.subarray(e.offset,e.offset+e.length),u),u+=e.length;const h=await n(l),d=new Uint8Array(r);let f=0;for(const m of o)for(const e of m.perSubsample)d.set(h.subarray(f,f+e.length),e.offset),f+=e.length;return d},Nr=(e,t,i,r)=>{const a=new br;a.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,n=t.defaultSkipByteBlock;if(W(null!==s&&null!==n),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],a=0!==t||0!==i;let s=0;for(const n of e){s+=n.clearLen;const e=[];if(a){let r=n.protectedLen,a=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:a,length:s}),a+=s,r-=s;const n=Math.min(16*i,r);a+=n,r-=n}s+=n.protectedLen}else n.protectedLen>0&&e.push({offset:s,length:n.protectedLen}),s+=n.protectedLen;r.push({perSubsample:e})}return r};var zr,Lr;(Lr=zr||(zr={}))[Lr.EBML=440786851]="EBML",Lr[Lr.EBMLVersion=17030]="EBMLVersion",Lr[Lr.EBMLReadVersion=17143]="EBMLReadVersion",Lr[Lr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",Lr[Lr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",Lr[Lr.DocType=17026]="DocType",Lr[Lr.DocTypeVersion=17031]="DocTypeVersion",Lr[Lr.DocTypeReadVersion=17029]="DocTypeReadVersion",Lr[Lr.Void=236]="Void",Lr[Lr.Segment=408125543]="Segment",Lr[Lr.SeekHead=290298740]="SeekHead",Lr[Lr.Seek=19899]="Seek",Lr[Lr.SeekID=21419]="SeekID",Lr[Lr.SeekPosition=21420]="SeekPosition",Lr[Lr.Duration=17545]="Duration",Lr[Lr.Info=357149030]="Info",Lr[Lr.TimestampScale=2807729]="TimestampScale",Lr[Lr.MuxingApp=19840]="MuxingApp",Lr[Lr.WritingApp=22337]="WritingApp",Lr[Lr.Tracks=374648427]="Tracks",Lr[Lr.TrackEntry=174]="TrackEntry",Lr[Lr.TrackNumber=215]="TrackNumber",Lr[Lr.TrackUID=29637]="TrackUID",Lr[Lr.TrackType=131]="TrackType",Lr[Lr.FlagEnabled=185]="FlagEnabled",Lr[Lr.FlagDefault=136]="FlagDefault",Lr[Lr.FlagForced=21930]="FlagForced",Lr[Lr.FlagOriginal=21934]="FlagOriginal",Lr[Lr.FlagHearingImpaired=21931]="FlagHearingImpaired",Lr[Lr.FlagVisualImpaired=21932]="FlagVisualImpaired",Lr[Lr.FlagCommentary=21935]="FlagCommentary",Lr[Lr.FlagLacing=156]="FlagLacing",Lr[Lr.Name=21358]="Name",Lr[Lr.Language=2274716]="Language",Lr[Lr.LanguageBCP47=2274717]="LanguageBCP47",Lr[Lr.CodecID=134]="CodecID",Lr[Lr.CodecPrivate=25506]="CodecPrivate",Lr[Lr.CodecDelay=22186]="CodecDelay",Lr[Lr.SeekPreRoll=22203]="SeekPreRoll",Lr[Lr.DefaultDuration=2352003]="DefaultDuration",Lr[Lr.Video=224]="Video",Lr[Lr.PixelWidth=176]="PixelWidth",Lr[Lr.PixelHeight=186]="PixelHeight",Lr[Lr.DisplayWidth=21680]="DisplayWidth",Lr[Lr.DisplayHeight=21690]="DisplayHeight",Lr[Lr.DisplayUnit=21682]="DisplayUnit",Lr[Lr.AlphaMode=21440]="AlphaMode",Lr[Lr.Audio=225]="Audio",Lr[Lr.SamplingFrequency=181]="SamplingFrequency",Lr[Lr.Channels=159]="Channels",Lr[Lr.BitDepth=25188]="BitDepth",Lr[Lr.SimpleBlock=163]="SimpleBlock",Lr[Lr.BlockGroup=160]="BlockGroup",Lr[Lr.Block=161]="Block",Lr[Lr.BlockAdditions=30113]="BlockAdditions",Lr[Lr.BlockMore=166]="BlockMore",Lr[Lr.BlockAdditional=165]="BlockAdditional",Lr[Lr.BlockAddID=238]="BlockAddID",Lr[Lr.BlockDuration=155]="BlockDuration",Lr[Lr.ReferenceBlock=251]="ReferenceBlock",Lr[Lr.Cluster=524531317]="Cluster",Lr[Lr.Timestamp=231]="Timestamp",Lr[Lr.Cues=475249515]="Cues",Lr[Lr.CuePoint=187]="CuePoint",Lr[Lr.CueTime=179]="CueTime",Lr[Lr.CueTrackPositions=183]="CueTrackPositions",Lr[Lr.CueTrack=247]="CueTrack",Lr[Lr.CueClusterPosition=241]="CueClusterPosition",Lr[Lr.Colour=21936]="Colour",Lr[Lr.MatrixCoefficients=21937]="MatrixCoefficients",Lr[Lr.TransferCharacteristics=21946]="TransferCharacteristics",Lr[Lr.Primaries=21947]="Primaries",Lr[Lr.Range=21945]="Range",Lr[Lr.Projection=30320]="Projection",Lr[Lr.ProjectionType=30321]="ProjectionType",Lr[Lr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",Lr[Lr.Attachments=423732329]="Attachments",Lr[Lr.AttachedFile=24999]="AttachedFile",Lr[Lr.FileDescription=18046]="FileDescription",Lr[Lr.FileName=18030]="FileName",Lr[Lr.FileMediaType=18016]="FileMediaType",Lr[Lr.FileData=18012]="FileData",Lr[Lr.FileUID=18094]="FileUID",Lr[Lr.Chapters=272869232]="Chapters",Lr[Lr.Tags=307544935]="Tags",Lr[Lr.Tag=29555]="Tag",Lr[Lr.Targets=25536]="Targets",Lr[Lr.TargetTypeValue=26826]="TargetTypeValue",Lr[Lr.TargetType=25546]="TargetType",Lr[Lr.TagTrackUID=25541]="TagTrackUID",Lr[Lr.TagEditionUID=25545]="TagEditionUID",Lr[Lr.TagChapterUID=25540]="TagChapterUID",Lr[Lr.TagAttachmentUID=25542]="TagAttachmentUID",Lr[Lr.SimpleTag=26568]="SimpleTag",Lr[Lr.TagName=17827]="TagName",Lr[Lr.TagLanguage=17530]="TagLanguage",Lr[Lr.TagString=17543]="TagString",Lr[Lr.TagBinary=17541]="TagBinary",Lr[Lr.ContentEncodings=28032]="ContentEncodings",Lr[Lr.ContentEncoding=25152]="ContentEncoding",Lr[Lr.ContentEncodingOrder=20529]="ContentEncodingOrder",Lr[Lr.ContentEncodingScope=20530]="ContentEncodingScope",Lr[Lr.ContentCompression=20532]="ContentCompression",Lr[Lr.ContentCompAlgo=16980]="ContentCompAlgo",Lr[Lr.ContentCompSettings=16981]="ContentCompSettings",Lr[Lr.ContentEncryption=20533]="ContentEncryption";const Ur=[zr.EBML,zr.Segment],qr=[zr.SeekHead,zr.Info,zr.Cluster,zr.Tracks,zr.Cues,zr.Attachments,zr.Chapters,zr.Tags],Wr=[...Ur,...qr],Hr=16,Vr=e=>{if(e.remainingLength<1)return null;const t=tc(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=tc(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Vr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===tc(e))return;e.skip(-1);const t=jr(e);return null===t?null:72057594037927940!==t?t:void 0},Gr=e=>{W(e.remainingLength>=2);const t=Xr(e);if(null===t)return null;const i=$r(e);return null===i?null:{id:t,size:i}},Qr=(e,t)=>{const i=ec(e,t);let r=0;for(;r{const i=ec(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?mc(e):pc(e)},Zr=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}},ea=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;se.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();const e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>"video"===e.info?.type)),hasAudio:this.segments.some(e=>e.tracks.some(e=>"audio"===e.info?.type)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&await this.loadSegmentMetadata(t),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??(this.readMetadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,Hr);if(Ve(t)&&(t=await t),!t)break;const i=Gr(t);if(!i)break;const r=i.id;let a=i.size;const s=t.filePos;if(r===zr.EBML){pa(a);let e=this.reader.requestSlice(s,a);if(Ve(e)&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===zr.Segment){if(await this.readSegment(s,a),void 0===a)break;if(null===this.reader.fileSize)break}else if(r===zr.Cluster){if(null===this.reader.fileSize)break;if(void 0===a){a=(await Zr(this.reader,s,Wr,this.reader.fileSize)).pos-s}const e=V(this.segments);e&&(e.elementEndPos=s+a)}pa(a),e=s+a}})())}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;null===this.currentSegment.elementEndPos||ie.id===a);if(-1!==o){const e=Sa[o].flag;this.currentSegment[e]=!0,pa(s);let t=this.reader.requestSlice(n,s);Ve(t)&&(t=await t),t&&this.readContiguousElements(t)}else if(a===zr.Tags||a===zr.Attachments){a===zr.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,pa(s);let e=this.reader.requestSlice(n,s);Ve(e)&&(e=await e),e&&this.readContiguousElements(e)}else if(a===zr.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===s)break;i=n+s}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const n of this.currentSegment.seekEntries){const t=Sa.find(e=>e.id===n.id);if(!t)continue;if(this.currentSegment[t.flag])continue;let i=this.reader.requestSliceRange(e+n.segmentPosition,2,Hr);if(Ve(i)&&(i=await i),!i)continue;const r=Gr(i);if(!r)continue;const{id:a,size:s}=r;if(a!==t.id)continue;pa(s),this.currentSegment[t.flag]=!0;let o=this.reader.requestSlice(i.filePos,s);Ve(o)&&(o=await o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const n of this.currentSegment.tracks)null!==n.defaultDurationNs&&(n.defaultDuration=this.currentSegment.timestampFactor*n.defaultDurationNs/1e9);const r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const n of this.currentSegment.cuePoints){const e=r.get(n.trackId);e&&e.cuePoints.push(n)}for(const n of this.currentSegment.tracks){n.cuePoints.sort((e,t)=>e.time-t.time);for(let e=0;es&&(s=n.cuePoints.length,a=n);for(const n of this.currentSegment.tracks)0===n.cuePoints.length&&(n.cuePoints=a.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let i=this.reader.requestSliceRange(e,2,Hr);Ve(i)&&(i=await i),W(i);const r=e,a=Gr(i);W(a);W(a.id===zr.Cluster);let s=a.size;const n=i.filePos;if(void 0===s){s=(await Zr(this.reader,n,Wr,t.elementEndPos)).pos-n}let o=this.reader.requestSlice(n,s);Ve(o)&&(o=await o);const c={segment:t,elementStartPos:r,elementEndPos:n+s,dataStartPos:n,timestamp:-1,trackData:new Map};if(this.currentCluster=c,o){const e=this.readContiguousElements(o,Wr);c.elementEndPos=e}for(const[,l]of c.trackData){const e=l.track;W(l.blocks.length>0);let t=!1;for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let r=0;r({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const i=l.blocks[l.presentationTimestamps[0].blockIndex],a=l.blocks[V(l.presentationTimestamps).blockIndex];l.startTimestamp=i.timestamp,l.endTimestamp=a.timestamp+a.duration;const s=de(e.clusterPositionCache,l.startTimestamp,e=>e.startTimestamp);-1!==s&&e.clusterPositionCache[s].elementStartPos===r||e.clusterPositionCache.splice(s+1,0,{elementStartPos:c.elementStartPos,startTimestamp:l.startTimestamp})}return t.lastReadCluster=c,c}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){for(let i=0;i=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){const i=Gr(e);if(!i)return!1;if(t&&t.includes(i.id))return!1;const{id:r,size:a}=i,s=e.filePos;switch(pa(a),r){case zr.DocType:this.isWebM="webm"===Qr(e,a);break;case zr.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case zr.SeekID:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Kr(e,a)}break;case zr.SeekPosition:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Kr(e,a)}break;case zr.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Kr(e,a),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case zr.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Jr(e,a);break;case zr.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...ct,primary:!1},trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(s,a)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>"decompress"!==e.data?.type||e.scope!==ya.Block||e.data.algorithm!==wa.HeaderStripping)&&(st._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===ta)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===ia)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===ra)this.currentTrack.info.codec="vp8";else if(t===aa)this.currentTrack.info.codec="vp9";else if(t===sa)this.currentTrack.info.codec="av1";else if(t===na){const e=this.currentTrack.codecPrivate?Q.decode(this.currentTrack.codecPrivate):"";Mi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new xa(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===oa?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===ca?this.currentTrack.info.codec="mp3":t===la?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=Li):t===ua?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ha?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===da?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===fa?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===ma?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Ca(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case zr.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Kr(e,a);break;case zr.TrackType:{if(!this.currentTrack)break;const t=Kr(e,a);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:{...se},alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case zr.FlagEnabled:if(!this.currentTrack)break;Kr(e,a)||(this.currentTrack=null);break;case zr.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Kr(e,a);break;case zr.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Kr(e,a);break;case zr.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Kr(e,a);break;case zr.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Kr(e,a);break;case zr.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Kr(e,a);break;case zr.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Kr(e,a);break;case zr.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Qr(e,a);break;case zr.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=ec(e,a);break;case zr.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Kr(e,a);break;case zr.Name:if(!this.currentTrack)break;this.currentTrack.name=Yr(e,a);break;case zr.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Qr(e,a),_e(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ve);break;case zr.LanguageBCP47:{if(!this.currentTrack)break;const t=Qr(e,a).split("-")[0];this.currentTrack.languageCode=t||ve,this.currentTrack.hasLanguageBcp47=!0}break;case zr.Video:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.PixelWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.width=Kr(e,a);break;case zr.PixelHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.height=Kr(e,a);break;case zr.DisplayWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayWidth=Kr(e,a);break;case zr.DisplayHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayHeight=Kr(e,a);break;case zr.DisplayUnit:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayUnit=Kr(e,a);break;case zr.AlphaMode:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.alphaMode=1===Kr(e,a);break;case zr.Colour:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.MatrixCoefficients:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=re[t];this.currentTrack.info.colorSpace.matrix=i}break;case zr.Range:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case zr.TransferCharacteristics:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=te[t];this.currentTrack.info.colorSpace.transfer=i}break;case zr.Primaries:{if("video"!==this.currentTrack?.info?.type)break;const t=Kr(e,a),i=Z[t];this.currentTrack.info.colorSpace.primaries=i}break;case zr.Projection:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.ProjectionPoseRoll:{if("video"!==this.currentTrack?.info?.type)break;const t=-Jr(e,a);try{this.currentTrack.info.rotation=H(t)}catch{}}break;case zr.Audio:if("audio"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(s,a));break;case zr.SamplingFrequency:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.sampleRate=Jr(e,a);break;case zr.Channels:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.numberOfChannels=Kr(e,a);break;case zr.BitDepth:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.bitDepth=Kr(e,a);break;case zr.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(s,a)),this.currentCueTime=null;break;case zr.CueTime:this.currentCueTime=Kr(e,a);break;case zr.CueTrackPositions:{if(null===this.currentCueTime)break;W(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(s,a)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case zr.CueTrack:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Kr(e,a)}break;case zr.CueClusterPosition:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;W(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Kr(e,a)}break;case zr.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Kr(e,a);break;case zr.SimpleBlock:{if(!this.currentCluster)break;const t=jr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=sc(e),n=tc(e),o=n>>1&3;let c=!!(128&n);"audio"===i.track.info?.type&&i.track.info.codec&&(c=!0);const l=ec(e,a-(e.filePos-s)),u=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:o,decoded:!u,postProcessed:!1,mainAdditional:null})}break;case zr.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(s,a)),this.currentBlock=null;break;case zr.Block:{if(!this.currentCluster)break;const t=jr(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=sc(e),n=tc(e)>>1&3,o=ec(e,a-(e.filePos-s)),c=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:o,lacing:n,decoded:!c,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case zr.BlockAdditions:this.readContiguousElements(e.slice(s,a));break;case zr.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(s,a)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case zr.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=ec(e,a);break;case zr.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Kr(e,a);break;case zr.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Kr(e,a);break;case zr.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case zr.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(s,a));break;case zr.Targets:this.readContiguousElements(e.slice(s,a));break;case zr.TargetTypeValue:50!==Kr(e,a)&&(this.currentTagTargetIsMovie=!1);break;case zr.TagTrackUID:case zr.TagEditionUID:case zr.TagChapterUID:case zr.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case zr.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(s,a));break;case zr.TagName:this.currentSimpleTagName=Yr(e,a);break;case zr.TagString:{if(!this.currentSimpleTagName)break;const t=Yr(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case zr.TagBinary:{if(!this.currentSimpleTagName)break;const t=ec(e,a);this.processTagValue(this.currentSimpleTagName,t)}break;case zr.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(s,a));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new ot(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}t.images??(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case zr.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=0n;for(let r=0;rt.order-e.order);break;case zr.ContentEncoding:this.currentDecodingInstruction={order:0,scope:ya.Block,data:null},this.readContiguousElements(e.slice(s,a)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case zr.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Kr(e,a);break;case zr.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Kr(e,a);break;case zr.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:wa.Zlib,settings:null},this.readContiguousElements(e.slice(s,a));break;case zr.ContentCompAlgo:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.algorithm=Kr(e,a);break;case zr.ContentCompSettings:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.settings=ec(e,a);break;case zr.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=s+a,!0}decodeBlockData(e,t){W(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(W(r.data),"decompress"===r.data.type)if(r.data.algorithm===wa.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i;if(!this.currentSegment?.metadataTags)return;const r=this.currentSegment.metadataTags;if(r.raw??(r.raw={}),(i=r.raw)[e]??(i[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":r.title??(r.title=t);break;case"description":r.description??(r.description=t);break;case"artist":r.artist??(r.artist=t);break;case"album":r.album??(r.album=t);break;case"album_artist":r.albumArtist??(r.albumArtist=t);break;case"genre":r.genre??(r.genre=t);break;case"comment":r.comment??(r.comment=t);break;case"lyrics":r.lyrics??(r.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||(r.date??(r.date=e))}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.trackNumber??(r.trackNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.tracksTotal??(r.tracksTotal=a))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),a=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(r.discNumber??(r.discNumber=i)),a&&Number.isInteger(a)&&a>0&&(r.discsTotal??(r.discsTotal=a))}}}async getDurationFromMetadata(e){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){W(r.trackBacking);const e=await r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(t??1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=t??0,i}}class Ia{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return Pe(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=de(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=ke(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return W(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,i){if(-1===t)return null;const r=e.trackData.get(this.internalTrack.id).blocks[t];if(W(r),r.decoded||(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),r.decoded=!0),!r.postProcessed){if("prores"===this.internalTrack.info?.codec){if(!(r.data.length>=8&&105===r.data[4]&&99===r.data[5]&&112===r.data[6]&&102===r.data[7])){const e=new Uint8Array(r.data.length+8);G(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(r.data,8),r.data=e}}r.postProcessed=!0}const a=i.metadataOnly?er:r.data,s=r.timestamp/this.internalTrack.segment.timestampFactor,n=r.duration/this.internalTrack.segment.timestampFactor,o={};r.mainAdditional&&"video"===this.internalTrack.info?.type&&this.internalTrack.info.alphaMode&&(o.alpha=i.metadataOnly?er:r.mainAdditional,o.alphaByteLength=r.mainAdditional.byteLength);const c=new tr(a,r.isKeyFrame?"key":"delta",s,n,e.dataStartPos+t,r.data.byteLength,o);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,i,r,a){const{demuxer:s,segment:n}=this.internalTrack;let o=null,c=null,l=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,a);-1!==i&&(c=e,l=i)}const u=de(this.internalTrack.cuePoints,i,e=>e.time),h=-1!==u?this.internalTrack.cuePoints[u]:null,d=de(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),f=-1!==d?this.internalTrack.clusterPositionCache[d]:null,m=Math.max(h?.clusterPosition??0,f?.elementStartPos??0)||null;let p;for(e?null===m||e.elementStartPos>=m?(p=e.elementEndPos,o=e):p=m:p=m??n.clusterSeekStartPos;null===n.elementEndPos||p<=n.elementEndPos-2;){if(o){const e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=s.reader.requestSliceRange(p,2,Hr);if(Ve(e)&&(e=await e),!e)break;const i=p,u=Gr(e);if(!u||!qr.includes(u.id)&&u.id!==zr.Void){const e=await ea(s.reader,i,qr,Math.min(n.elementEndPos??1/0,i+va));if(e){p=e;continue}break}const h=u.id;let d=u.size;const f=e.filePos;if(h===zr.Cluster){o=await s.readCluster(i,n),d=o.elementEndPos-f;const{blockIndex:e,correctBlockFound:r}=t(o);if(r)return this.fetchPacketInCluster(o,e,a);-1!==e&&(c=o,l=e)}if(void 0===d){W(h!==zr.Cluster);d=(await Zr(s.reader,f,Wr,n.elementEndPos)).pos-f}const m=f+d;if(null===n.elementEndPos){let e=s.reader.requestSliceRange(m,2,Hr);if(Ve(e)&&(e=await e),!e)break;if(Xr(e)===zr.Segment){n.elementEndPos=m;break}}p=m}if(h&&(!c||c.elementStartPos{var e,t,i,r;let a=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(a=await this.getFirstPacket({}));const s={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&a?Et(a.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&a?Lt(a.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&a?Yt(a.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&a?Zt(a.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&a?ei(a.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!ae(this.internalTrack.info.colorSpace)){const a=Oi(s);(e=this.internalTrack.info.colorSpace).primaries??(e.primaries=a.primaries),(t=this.internalTrack.info.colorSpace).transfer??(t.transfer=a.transfer),(i=this.internalTrack.info.colorSpace).matrix??(i.matrix=a.matrix),(r=this.internalTrack.info.colorSpace).fullRange??(r.fullRange=a.fullRange)}const n={codec:Ni(s),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})()):null}}class Ca extends Ia{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=await this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&vi(e.data)}return{codec:zi({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}})()):null}}const Ba=async(e,t,i,r=null)=>{let a=t;for(;null===i||a=4;){const t=s.filePos,i=oc(s),n=null!==e.fileSize?e.fileSize-a:null,o=$i(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&Ji(o.header.channel)===Ji(r.channel)))return{header:o.header,startPos:a};s.filePos=t+o.bytesAdvanced,a=s.filePos}}return null};class Ea extends Zi{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new oe,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new _a(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Cc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=await Ba(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Xi(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Ve(r)&&(r=await r),r){const a=oc(r);if(a===ji||a===Ki){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Ve(t)&&(t=await t),t){const e=ec(t,12),i=G(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Qi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Qi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const a=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:a,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=!0;let a=this.reader.requestSlice(i.filePos,r.size);if(Ve(a)&&(a=await a),!a)break;Bc(a,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=Sc){let e=this.reader.requestSlice(this.reader.fileSize-Sc,Sc);Ve(e)&&(e=await e),W(e);"TAG"===gc(e,3)&&Ic(e,this.metadataTags)}return this.metadataTags}finally{e()}}}class _a{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return W(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.demuxer;if(W(null!==e.firstFrameHeader),W(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,a=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(a<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const Aa=e=>{const t=G(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let a=0;a>>24^t])>>>0}return t.setUint32(22,i,!0),r},Ma=(e,t,i)=>{let r=0,a=null;if(e.length>0)if("vorbis"===t.codec){W(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,n=(e[0]&s)>>1;if(n>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const c=t.vorbisInfo.modeBlockflags[n];if(a=t.vorbisInfo.blocksizes[c],1===c){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+a>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ti[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:a}},Da=27,Na=282,Oa=e=>{const t=e.filePos;if(cc(e)!==Ra)return null;e.skip(1);const i=tc(e),r=fc(e),a=cc(e),s=cc(e),n=cc(e),o=tc(e),c=new Uint8Array(o);for(let h=0;he+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:i,granulePosition:r,serialNumber:a,sequenceNumber:s,checksum:n,lacingValues:c}},za=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===Ra)return!0;e.skip(1)}}return!1};class La extends Zi{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Da,Na);if(Ve(t)&&(t=await t),!t)break;const i=Oa(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=await this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?await this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&await this.readOpusMetadata(e,t),null!==t.codecInfo.codec&&this.trackBackings.push(new Ua(t,this)))}})())}async readVorbisMetadata(e,t){let i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=await this.findNextPacketStart(r),!i)return;const a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a)return;if(3!==r.data[0]||5!==a.data[0])return;const s=[],n=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};n(e.data.length),n(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+a.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(a.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=a;const c=G(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);const l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&l),1<<(l>>4)],modeBlockflags:ii(a.data).modeBlockflags},ni(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){const i=await this.findNextPacketStart(e);if(!i)return;const r=await this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const a=(e=>{const t=G(e),i=t.getUint8(9),r=t.getUint16(10,!0),a=t.getUint32(12,!0),s=t.getInt16(16,!0),n=t.getUint8(18);let o=null;return n&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:a,outputGain:s,channelMappingFamily:n,channelMappingTable:o}})(e.data);t.numberOfChannels=a.outputChannelCount,t.sampleRate=Li,t.codecInfo.opusInfo={preSkip:a.preSkip},ni(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){W(te+t.length,0);if(0===o)return null;const c=new Uint8Array(o);let l=0;for(let u=0;u{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}class Ua{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new oe,this.internalSampleRate="opus"===e.codecInfo.codec?Li:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return W(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return W(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:this.bitstream.description??void 0}}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct,primary:!1}}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(W(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:a}=Ma(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new tr(i.metadataOnly?er:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(e){W(this.bitstream.lastMetadataPacket);const t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(W(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=await this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const a=i.timestampInSamples+i.durationInSamples,s=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:i.vorbisBlockSize},t)}async getPacket(e,t){if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const i=Pe(e*this.internalSampleRate);if(0===i)return this.getFirstPacket(t);if(i<0)return null;W(this.bitstream.lastMetadataPacket);const r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let a=r.startPage,s=this.demuxer.reader.fileSize;const n=[a];e:for(;a.headerStartPos+a.totalSizei?s=l.headerStartPos:(a=l,n.push(l));continue e}r=l.headerStartPos+l.totalSize}}let o=r.startPage;for(const k of n){if(k.granulePosition===a.granulePosition)break;(!o||k.headerStartPos>o.headerStartPos)&&(o=k)}let c=o;const l=[c];for(;c.serialNumber!==this.bitstream.serialNumber||c.granulePosition!==a.granulePosition;){const e=c.headerStartPos+c.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Da,Na);Ve(t)&&(t=await t),W(t);const i=Oa(t);W(i),c=i,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}W(-1!==c.granulePosition);let u,h,d=null,f=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)u=this.granulePositionToTimestampInSamples(0),h=!0,d=0;else{u=0,h=!1;for(let t=c.lacingValues.length-1;t>=0;t--){if(c.lacingValues[t]<255){d=t+1;break}}if(null===d)throw new Error("Invalid page with granule position: no packets end on this page.");m=d-1;const e={data:er,endPage:f,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){const e=Wa(l,c,d);W(e);const t=qa(l,e.page,e.segmentIndex);t&&(c=t.page,d=t.segmentIndex)}else for(;;){const e=Wa(l,c,d);if(!e)break;const t=qa(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,d=t.segmentIndex,e.page.headerStartPos!==f.headerStartPos){f=e.page,m=e.segmentIndex;break}}}let p=null,g=null;for(;null!==c;){W(null!==d);const e=await this.demuxer.readPacket(c,d);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&di||Math.max(a.timestampInSamples,0)===i))break}const a=await this.demuxer.findNextPacketStart(e);if(!a)break;c=a.startPage,d=a.startSegmentIndex}return p}async getPacketSequential(e,t){const i=await this.sequentialScanMutex.acquire();try{const i=Pe(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=de(this.sequentialScanCache,i,e=>e.timestampInSamples);let a;if(-1!==r){const e=this.sequentialScanCache[r];a=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else a=await this.getFirstPacket(t);let s=0;for(;a&&a.timestampe)break;if(a=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(a);W(e),this.sequentialScanCache.length>0&&W(V(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return a}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const qa=(e,t,i)=>{let r=t,a=i;e:for(;;){for(a--;a>=0;a--){if(r.lacingValues[a]<255){a++;break e}}W(-1===a);if(!(1&r.headerType)){a=0;break}const t=ge(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=ge(e,e=>e.headerStartPos{let e=this.reader.requestSlice(0,12);Ve(e)&&(e=await e),W(e);const t=gc(e,4),i="RIFX"!==t,r="RF64"===t,a=nc(e,i);let s=r?this.reader.fileSize:Math.min(a+8,this.reader.fileSize??1/0);if("WAVE"!==gc(e,4))throw new Error("Invalid WAVE file - wrong format");let n=0,o=null,c=e.filePos;for(;null===s||c=18&&357!==a){const e=ic(r,i),s=t-18;if(Math.min(s,e)>=22&&a===Ha.EXTENSIBLE){r.skip(6);const e=ec(r,16);a=e[0]|e[1]<<8}}if(a!==Ha.MULAW&&a!==Ha.ALAW||(c=8),a!==Ha.PCM&&a!==Ha.IEEE_FLOAT&&a!==Ha.ALAW&&a!==Ha.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${a}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(a===Ha.PCM&&![8,16,24,32].includes(c))throw new Error(`Unsupported WAVE PCM bit depth (${c}). Only 8, 16, 24, and 32 bits are supported.`);if(a===Ha.IEEE_FLOAT&&![32,64].includes(c))throw new Error(`Unsupported WAVE float bit depth (${c}). Only 32 and 64 bits are supported.`);this.audioInfo={format:a,numberOfChannels:s,sampleRate:n,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:o}}async parseListChunk(e,t,i){var r,a,s,n,o,c,l,u,h,d,f;let m=this.reader.requestSlice(e,t);if(Ve(m)&&(m=await m),!m)return;const p=gc(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=gc(m,4),t=nc(m,i),p=ec(m,t);let k=0;for(let i=0;i0&&((c=this.metadataTags).trackNumber??(c.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((l=this.metadataTags).tracksTotal??(l.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||((u=this.metadataTags).date??(u.date=e))}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&((h=this.metadataTags).date??(h.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":(d=this.metadataTags).genre??(d.genre=y);break;case"ICMT":case"CMNT":case"COMM":(f=this.metadataTags).comment??(f.comment=y)}g+=8+t+(1&t)}}async parseId3Chunk(e,t){let i=this.reader.requestSlice(e,t);if(Ve(i)&&(i=await i),!i)return;const r=Cc(i);if(r){const a=t-vc;if(r.size=Math.min(r.size,a),r.size>0){const t=i.slice(e+vc,r.size);Bc(t,r,this.metadataTags)}}}getCodec(){if(W(this.audioInfo),this.audioInfo.format===Ha.MULAW)return"ulaw";if(this.audioInfo.format===Ha.ALAW)return"alaw";if(this.audioInfo.format===Ha.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===Ha.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}W(!1)}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}const Ka=2048;class Xa{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){const e=this.demuxer.getCodec();return e?(W(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return W(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct}}async getPacketAtIndex(e,t){W(e>=0),W(this.demuxer.audioInfo);const i=e*Ka*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Ka*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Ve(e)&&(e=await e),!e)return null}let a;if(t.metadataOnly)a=er;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Ve(e)&&(e=await e),W(e),a=ec(e,r)}const s=e*Ka/this.demuxer.audioInfo.sampleRate,n=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new tr(a,"key",s,n,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){W(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Ka,(this.demuxer.dataSize-1)/(Ka*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=await this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;W(null===this.demuxer.reader.fileSize);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;a;){const e=await this.getNextPacket(a,t);if(!e)break;a=e}return a}getNextPacket(e,t){W(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Ka);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const $a=e=>{const t=e.filePos,i=ec(e,9),r=new lt(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const a=r.readBits(1),s=r.readBits(2)+1,n=r.readBits(4);if(15===n)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const c=r.readBits(13);r.skipBits(11);const l=r.readBits(2)+1;if(1!==l)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===a?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:n,channelConfiguration:o,frameLength:c,numberOfAacFrames:l,crcCheck:u,startPos:t}},Ga=1024;class Qa extends Zi{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new oe,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();W(this.firstFrameHeader),this.trackBackings=[new Ya(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Cc(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=$a(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=ut[t.samplingFrequencyIndex];W(void 0!==i);const r=Ga/i,a={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(a),this.nextTimestampInSamples+=Ga,this.lastLoadedPos=t.startPos+t.frameLength}async getMimeType(){return"audio/aac"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){const e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,vc);if(Ve(t)&&(t=await t),!t)break;const i=Cc(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Ve(r)&&(r=await r),!r)break;Bc(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}}}class Ya{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Ga}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ve}getCodec(){return"aac"}getInternalCodecId(){return W(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){W(this.demuxer.firstFrameHeader);const e=ht[this.demuxer.firstFrameHeader.channelConfiguration];return W(void 0!==e),e}getSampleRate(){W(this.demuxer.firstFrameHeader);const e=ut[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return W(void 0!==e),e}getDisposition(){return{...ct}}async getDecoderConfig(){return W(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=er;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Ve(e)&&(e=await e),!e)return null;r=ec(e,i.dataSize)}return new tr(r,"key",i.timestamp,i.duration,e,i.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=he(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}}async getPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1{var e;let t=0;for(;;){let e=this.reader.requestSlice(t,vc);if(Ve(e)&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const i=Cc(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Ve(r)&&(r=await r),W(r),Bc(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:s.end-e,isLastFrame:!0};if(255===tc(s)){const t=s.filePos;if(tc(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-n.num!==1){s.filePos=t;continue}}else if(r.num-n.num!==n.blockSize){s.filePos=t;continue}return{num:n.num,blockSize:n.blockSize,sampleRate:n.sampleRate,size:i,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=ec(e,4),a=new lt(r);if(32764!==a.readBits(15))return null;if(null===this.blockingBit){W(t);const e=a.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){W(!t);if(1!==a.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");W(!t);if(0!==a.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*2**e:6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?2**e:null)(a.readBits(4));if(!s)return null;W(this.audioInfo);const n=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(a.readBits(4),this.audioInfo.sampleRate);if(!n)return null;a.readBits(4),a.readBits(3);if(0!==a.readBits(1))return null;const o=(e=>{let t=0;const i=new lt(ec(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],a=t-1,s=new lt(ec(e,a)),n=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?rc(e)+1:"uncommon-u8"===t?tc(e)+1:"number"===typeof t?t:(ye(t),void W(!1)))(e,s),l=((e,t)=>"uncommon-u16"===t?rc(e):"uncommon-u16-10"===t?10*rc(e):"uncommon-u8"===t?tc(e):"number"===typeof t?t:null)(e,n);if(null===l)return null;if(l!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,h=tc(e);e.skip(-u),e.skip(-1);const d=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(ec(e,u));return h!==d?null:{num:o,blockSize:c,sampleRate:l}}async advanceReader(){await this.readMetadata(),W(null!==this.lastLoadedPos),W(this.audioInfo);const e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)}}class Za{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ve}getTimeResolution(){return W(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return W(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...ct}}async getDecoderConfig(){return W(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(W(this.demuxer.audioInfo),e<0)return null;const i=await this.demuxer.readingMutex.acquire();try{for(;;){const i=de(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){await this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],a=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(a+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader()}}finally{i()}}async getNextPacket(e,t){const i=await this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=er;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Ve(e)&&(e=await e),!e)return null;r=ec(e,i.byteSize)}W(this.demuxer.audioInfo);const a=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new tr(r,"key",a,s,e,i.byteSize)}async getFirstPacket(e){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}const es=9e4,ts=2**33,is=188,rs="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",as=new Set([133,134,162]),ss=new Set;class ns extends Zi{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,205);Ve(e)&&(e=await e),W(e);const t=ec(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=is;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,a=!1,s=!1;for(;;){const e=await this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=await this.readSection(i,!0,!s);if(!t)break;const n=3,o=32;let c=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i);c=2===e.readBits(8)}}if(0!==t.pid||a)if(t.pid!==r&&!c||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=cs(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(await this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new fs(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,await r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=Et(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];W(t);const i=At(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const a=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;a>0&&s>0&&(a>s?(e.info.squarePixelWidth=Math.round(e.info.width*a/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/a))),e.info.colorSpace={primaries:Z[i.colourPrimaries],transfer:te[i.transferCharacteristics],matrix:re[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=Lt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===bt.SPS_NUT).nalUnits[0];W(t);const i=zt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:Z[i.colourPrimaries],transfer:te[i.transferCharacteristics],matrix:re[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Ni({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=Jo.tempFromBytes(r.suppliedPacket.data),i=$a(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=ht[i.channelConfiguration],e.info.sampleRate=ut[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=oc(Jo.tempFromBytes(r.suppliedPacket.data)),i=$i(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=Ji(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=ci(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=oi[t.acmod]+t.lfeon,e.info.sampleRate=pt[t.fscod]}else if("eac3"===e.info.codec){const t=hi(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=di(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=fi(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=Si(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:zi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const a=e.readBits(10),c=e.pos+8*a;let l=!1;for(;e.pos=4){const t=e.readBits(32);l||(l=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=c;8*(r+n)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),a=e.pos+8*r;let s=!1,n=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let c=null;const u=l&&as.has(t)?130:t;switch(u){case 27:case 36:c={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",c={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:n?c={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?c={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(c={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:ss.has(t)||(st._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),ss.add(t))}c&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:c,referencePesPackets:[]})}s=!0}else{const e=new lt(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+n)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");a=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!a)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const n of this.elementaryStreams)n.initialized&&("video"===n.info.type?this.trackBackingEntries.push(new us(n)):this.trackBackingEntries.push(new hs(n)))})())}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){await this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,i=!1){let r=e,a=e;const s=[];let n,o=0,c=null,l=!0,u=0;for(;;){const e=await this.readPacket(a);if(a+=this.packetStride,!e)break;if(c){if(e.pid!==c.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;c=e}const n=!!(2&e.adaptationFieldControl),h=!!(1&e.adaptationFieldControl);let d=0;if(n&&(d=1+e.body[0],e===c&&d>1&&(u=e.body[1]>>6&1)),h&&(0===d?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(d)),o+=e.body.byteLength-d)),r=a,!t&&o>=64){l=!1;break}if(-1!==he(this.sectionEndPositions,r,e=>e)){l=!1;break}}if(l){const e=de(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!c)return null;if(1===s.length)n=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);n=new Uint8Array(e);let t=0;for(const i of s)n.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:c.pid,payload:n,randomAccessIndicator:u}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(Ve(t)&&(t=await t),!t)return null;if(71!==tc(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=rc(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:tc(t)>>4&3}}async readPacket(e){let t=this.reader.requestSlice(e,is);if(Ve(t)&&(t=await t),!t)return null;const i=ec(t,is);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ts-t?-8589934592:ts}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new lt(t.payload);if(1!==r.readBits(24))return null;const a=r.readBits(8);if(r.skipBits(16),188===a||190===a||191===a||240===a||241===a||255===a||242===a||248===a)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let n=null;if(2===s||3===s)n=0,r.skipBits(4),n+=r.readBits(3)*(1<<30),r.skipBits(1),n+=32768*r.readBits(15),r.skipBits(1),n+=r.readBits(15),n=e.normalizeTimestamp(n);else if(i)throw new Error(rs);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:n,randomAccessIndicator:t.randomAccessIndicator}},cs=(e,t,i)=>{W(null!==t.endPos);const r=os(e,t,i);if(!r)return null;const a=new lt(t.payload);a.skipBits(32);const s=a.readBits(16);a.skipBits(16);const n=a.readBits(8),o=a.pos+8*n;a.pos=o;const c=o/8;W(Number.isInteger(c));const l=t.payload.subarray(c,s>0?6+s:t.payload.byteLength);return{...r,data:l}};class ls{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,W(r instanceof ls),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return ve}getDisposition(){return{...ct,primary:!1}}getTimeResolution(){return es}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new tr(i.metadataOnly?er:e.data,r,e.pts/es,Math.max(t/es,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){const t=this.elementaryStream.firstSection;W(t);const i=cs(this.elementaryStream.demuxer,t,!0);W(i);const r=new fs(this.elementaryStream,i),a=new ms(this,r),s=await a.readNext();if(!s)return null;const n=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(n,a),this.packetSectionStarts.set(n,s.packet.sectionStartPos),n}async getNextPacket(e,t){let i=this.packetBuffers.get(e);if(i){const r=await i.readNext();if(!r)return null;this.packetBuffers.delete(e);const a=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(a,i),this.packetSectionStarts.set(a,r.packet.sectionStartPos),a}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const a=this.elementaryStream.demuxer,s=await a.readSection(r,!0);W(s);const n=cs(a,s,!0);W(n);const o=new fs(this.elementaryStream,n);i=new ms(this,o);const c=e.sequenceNumber;for(;;){const e=await i.readNext();if(!e)return null;if(e.packet.sequenceNumber>c){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let i=e;for(;;){if(i=await this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,i){const r=Pe(e*es),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:n}=a,o=this.elementaryStream.pid,c=async(e,t,i)=>{let r=e;for(;re.pts),m=-1!==f?d[f]:null;if(m&&r-m.pts<45e3)h=m.sectionStartPos;else{let e=0;if(null!==s.fileSize){const t=Math.ceil(s.fileSize/n);if(t>1){let i=0,s=t-1;for(e=i;i<=s;){const t=Math.floor((i+s)/2),o=Ce(t*n,a.packetStride)+u.sectionStartPos,l=o+n,h=await c(o,l,!1);h?h.pesPacketHeader.pts<=r?(e=t,i=t+1):s=t-1:s=t-1}}}h=Ce(e*n,a.packetStride)+u.sectionStartPos}const p=await c(h,s.fileSize??1/0,!1);let g=p?.pesPacketHeader??null;g||(g=u);const k=this.getReorderSize(),y=async(e,t)=>{const s=await a.readSection(e,!0);W(s);const n=cs(a,s,!0);W(n);const o=new fs(this.elementaryStream,n),c=new ms(this,o);for(;;){if((V(c.presentationOrderPackets)?.pts??-1/0)>=r)break;if(!(await c.readNextPacket()))break}const l=ke(c.presentationOrderPackets,t);if(-1===l)return null;const u=c.presentationOrderPackets[l],h=0===l?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=h;const d=await c.readNext();W(d);const f=this.createEncodedPacket(d.packet,d.duration,i);return this.packetBuffers.set(f,c),this.packetSectionStarts.set(f,d.packet.sectionStartPos),f};if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=g.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){if(e.pts>r)break e;g=e,ds(this.elementaryStream,g);break}}}e+=a.packetStride}}e:for(let e=0;e=a.packetOffset;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,!1);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){g=e;break}}}e-=a.packetStride}}return y(g.sectionStartPos,e=>e.pts<=r)}{let e=h,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let h=null;const d=e<=u.sectionStartPos;let f,m=null;if(d)f=u,m=l;else{const t=await c(e,s.fileSize??1/0,i);f=t?.pesPacketHeader??null,m=t?.section??null}let p=!1,g=0;e:for(;f&&!(null!==t&&f.sectionStartPos>=t);){if(f.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===f.randomAccessIndicator;else{W(m);const t=cs(a,m,!0);W(t);const i=new fs(this.elementaryStream,t);await i.markNextPacket(),e=1===i.suppliedPacket?.randomAccessIndicator}e&&(h=f)}if(f.pts>r&&(p=!0),p&&(g++,g>k))break;let e=f.sectionStartPos+a.packetStride;for(;;){const t=await a.readPacketHeader(e);if(!t)break e;if(t.pid===o&&1===t.payloadUnitStartIndicator){const t=await a.readSection(e,i);if(t){const e=os(a,t,!1);if(e&&null!==e.pts){f=e,m=t,ds(this.elementaryStream,f);break}}}e+=a.packetStride}}if(h){let e=h;if(0===g)e:for(let r=0;r=a.packetOffset;){const r=await a.readPacketHeader(t);if(!r)break e;if(r.pid===o&&1===r.payloadUnitStartIndicator){const r=await a.readSection(t,i);if(r){const t=os(a,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=a.packetStride}}const t=await y(e.sectionStartPos,e=>e.pts<=r&&1===e.randomAccessIndicator);return W(t),t}if(d)return null;t=e,e=Math.max(Ce(e-u.sectionStartPos-n,a.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}}class us extends ls{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}async getColorSpace(){return this.elementaryStream.info.colorSpace}async canBeTransparent(){return!1}async getDecoderConfig(){return W(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class hs extends ls{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return W(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const ds=(e,t)=>{const i=e.referencePesPackets,r=de(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const a=i[r];if(t.pts<=a.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-a.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return W(e),e}async bufferData(e){const t=this.endPos+e;for(;this.endPos=l)break;u=e;const i=o+u;if(u+3>=l){this.seekTo(i);break}const h=c[u+1],d=c[u+2],f=c[u+3];let m=0;if(0===h&&0===d&&1===f?m=4:0===h&&1===d&&(m=3),0===m){u++;continue}const p=i;a??(a=p);const g=u+m,k=g+r,y=6;if(k+("avc"===t?y:1)>l){this.seekTo(i);break}const b=c[g];let w,T,S;if("avc"===t)w=Pt(b),T=w===kt.NON_IDR_SLICE||w===kt.SLICE_DPA||w===kt.IDR,S=w===kt.SEI||w===kt.SPS||w===kt.PPS||w===kt.AUD;else{w=Ot(b);if(((1&b)<<5|c[g+1]>>3)>0){u+=m;continue}T=w<=bt.RASL_R||w>=bt.BLA_W_LP&&w<=21,S=w>=bt.VPS_NUT&&w<=37||w===bt.PREFIX_SEI_NUT||w>=41&&w<=44||w>=48&&w<=55}let v=!1;if(T){let e;if("avc"===t){const t=c.subarray(k,k+y),i=j(new lt(t));e=!s||i<=n,n=i}else e=c[k]>>7===1;e&&(s?v=!0:s=!0)}else S&&s&&(v=!0);if(v){const e=p-a;return this.seekTo(a),this.supplyPacket(e,0)}u+=m}if(ea){const e=this.endPos-a;return this.seekTo(a),this.supplyPacket(e,0)}}else{const t=e.info.codec,i=128;for(;;){let r=this.ensureBuffered(i);Ve(r)&&(r=await r);const a=this.currentPos;for(;this.currentPos-a>6,n=63&a[4];if(3===s||n>37){this.seekTo(t+1);continue}const o=li[3*n+s];W(void 0!==o),this.seekTo(t),r=this.ensureBuffered(o),Ve(r)&&(r=await r);const c=Math.round(13824e4/e.info.sampleRate);return this.supplyPacket(r,c)}if("eac3"===t){if(11!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(5);if(Ve(r)&&(r=await r),r<5)return;const a=this.readBytes(5);if(11!==a[0]||119!==a[1]){this.seekTo(t+1);continue}const s=2*(((7&a[2])<<8|a[3])+1),n=3===a[4]>>6?3:a[4]>>4&3,o=ui[n];this.seekTo(t),r=this.ensureBuffered(s),Ve(r)&&(r=await r);const c=256*o,l=Math.round(c*es/e.info.sampleRate);return this.supplyPacket(r,l)}if("dts"===t){if(127!==i&&100!==i)continue;this.skip(-1);const t=this.currentPos;let r=this.ensureBuffered(18);if(Ve(r)&&(r=await r),r<18)return;const a=this.readBytes(18),s=Pi(a);let n=s?null:Ii(a);if(!s&&!n){this.seekTo(t+1);continue}if(n&&!n.asset){this.seekTo(t);const e=Math.min(n.frameSize,4096);let i=this.ensureBuffered(e);Ve(i)&&(i=await i),n=Ii(this.readBytes(i))??n}let o=s?s.frameSize:n.frameSize;if(s){let e=4*Math.ceil(s.frameSize/4);for(;;){this.seekTo(t);const i=e+10;let r=this.ensureBuffered(i);if(Ve(r)&&(r=await r),r=0)}async readNext(){if(0===this.decodeOrderPackets.length){if(!(await this.readNextPacket()))return null}await this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(W(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){const e=this.decodeOrderPackets[0];for(W(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(await this.readNextPacket()))break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const ps="application/vnd.apple.mpegurl",gs="#EXT-X-STREAM-INF:",ks="#EXT-X-I-FRAME-STREAM-INF:",ys="#EXT-X-MEDIA:",bs="#EXTINF:",ws="#EXT-X-MAP:",Ts="#EXT-X-KEY:",Ss="#EXT-X-MEDIA-SEQUENCE:",vs="#EXT-X-BYTERANGE:",Ps="#EXT-X-PROGRAM-DATE-TIME:",Is="#EXT-X-TARGETDURATION:",xs="#EXT-X-PLAYLIST-TYPE:",Cs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class Bs{constructor(e){this._attributes={};let t="",i="",r=!1,a=!1;for(let s=0;s{const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=Ye(e,e=>"video"===e.getType())+1;e.push(new Rs(this,t,i))}else if("audio"===t.type){const i=Ye(e,e=>"audio"===e.getType())+1;e.push(new Fs(this,t,i))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=await t.getTracks();for(const r of i)if("video"===r.type){const t=Ye(e,e=>"video"===e.getType())+1;e.push(new Rs(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=Ye(e,e=>"audio"===e.getType())+1;e.push(new Fs(this,{id:e.length+1,type:"audio"},t))}}return e})())}async getFirstTimestampForInput(e){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i}async getMediaOffset(e,t){const i=e.firstSegment??e;let r;if(this.firstSegmentFirstTimestamps.has(i))r=this.firstSegmentFirstTimestamps.get(i);else{const e=this.getInputForSegment(i);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(i,r)}if(i===e)return i.timestamp-r;const a=await this.getFirstTimestampForInput(t),s=e.timestamp-i.timestamp,n=a-r-s;return Math.abs(n)<=Math.min(.25,s)?i.timestamp-r:e.timestamp-a}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class _s{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{var e;if((e=this.segmentedInput).firstSegment??(e.firstSegment=await this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let t=this.segmentedInput.firstSegment,i=null;for(;t;){const e=this.segmentedInput.getInputForSegment(t);if(i=(await e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number)??null,i)break;t=await this.segmentedInput.getNextSegment(t,{})}if(!i)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=i,this.firstSegment=t})())}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),W(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,i){W(e.sequenceNumber>=0),W(this.segmentedInput.firstSegment);const r=await this.segmentedInput.getMediaOffset(t,i.input),a=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:xe(e.timestamp+r,await i.getTimeResolution()),sequenceNumber:Math.floor(1e8*a)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s}async getFirstPacket(e){await this.hydrate(),W(this.firstInputTrack),W(this.firstSegment);let t=this.firstInputTrack,i=this.firstSegment;for(;;){if(t){const r=await t._backing.getFirstPacket(e);if(r)return this.createAdjustedPacket(r,i,t)}if(i=await this.segmentedInput.getNextSegment(i,{skipLiveWait:e.skipLiveWait}),!i)break;const r=this.segmentedInput.getInputForSegment(i);t=(await r.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number)??null}return null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,i){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const a=i?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(a)return this.createAdjustedPacket(a,r.segment,r.track);let s=r.segment;for(;;){const e=await this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),a=(await i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!a){s=e;continue}const n=await a._backing.getFirstPacket(t);return n?this.createAdjustedPacket(n,e,a):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,i){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){const a=this.segmentedInput.getInputForSegment(r),s=(await a.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const n=e-await this.segmentedInput.getMediaOffset(r,a),o=i?await s._backing.getKeyPacket(n,t):await s._backing.getPacket(n,t);if(o)return this.createAdjustedPacket(o,r,s);r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null}}class Rs extends _s{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}async getColorSpace(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())}async canBeTransparent(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}class Fs extends _s{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}}$e();const As=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ms extends it{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new Qo;return this._sizePromise??(this._sizePromise=(async()=>{let e=this._getFileSize();return void 0!==e||(await this._read(0,1,0,As),e=this._getFileSize(),W(void 0!==e)),e})())}async getSize(){if(this._disposed)throw new Qo;const e=await this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Gs(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new Ds(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ds{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),e._refFinalizationRegistry?.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const e=this.source;W(e._refCount>0),e._decrementRefCount(),e._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Ns extends Ms{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ms||e instanceof Ds))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ms?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Ve(t)?t.then(i):i(t)}}const Os=(e,t)=>e.path===t.path;class zs extends Ns{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ms?e.ref():e;return this._root=t,this._rootRequest=null,t};Ve(e)?this._rootRequest=e.then(t):(t(e),W(this._root))}if(this._rootRequest)return this._rootRequest.then(a=>a.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const Ls="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Us extends Ms{constructor(e,t={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Ge(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new $s({maxCacheSize:t.maxCacheSize??8388608,maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),Ls?.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Xs.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}async _runWorker(e){W(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Oe()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),Ls?.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch{}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return st._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(2**(e-2),16)},Ws=new Set;class Hs extends Ns{constructor(e,t={}){if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Ge(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new Hs(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=t.getRetryDelay??qs,this._requestInit={...t.requestInit};let i=null;if(t.requestInit?.headers){const e={...Ae(t.requestInit.headers)},r=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==r&&(i=e[r],delete e[r],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){i??(i=t);const r=new Request(e);r.headers.delete("Range"),this._url=r}}if(null!==i){const e=js(i);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new $s({maxCacheSize:t.maxCacheSize??67108864,maxWorkerCount:t.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:Xs.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const e=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===e?null!==this._length?this._length:null:Se(e-this._offset,0,this._length??1/0)}_read(e,t,i,r){if(null!==this._length&&t>this._length)return null;const a=this._offset,s=this._sequentialBacking?this._sequentialBacking._read(a+e,a+t):this._orchestrator.read(a+e,a+t,Math.max(a+i,a),a+Math.min(r,this._length??1/0)),n=e=>e?(e.offset-=this._offset,e):null;return Ve(s)?s.then(n):n(s)}async _runWorker(e){for(;;){const i=new AbortController,r=await Me(this._options.fetchFn??fetch,this._url,Fe(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:i.signal}),this._getRetryDelay,()=>this._disposed);if(!r.ok)throw new Error(`Error fetching ${String(this._url)}: ${r.status} ${r.statusText}`);r.redirected&&(this.rootPath=r.url);e:if(null===this._orchestrator.fileSize&&(206===r.status||"basic"===r.type&&!r.headers.has("Content-Encoding"))){const t=r.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=r.headers.get("Content-Length");if(i){const t=206===r.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!r.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==r.status){if(this._sequentialBacking)return void r.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Ws.has(e.origin)||(st._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Ws.add(e.origin))}return void this._transitionToSequentialMode(r.body)}const a=r.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return i.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let r;try{r=await a.read()}catch(t){if(this._disposed)throw t;const e=this._getRetryDelay(1,t,this._url);if(null!==e){st._error("Error while reading response stream. Attempting to resume.",t),await tt(1e3*e);break}throw t}if(e.aborted)continue;const{done:s,value:n}=r;if(s){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+n.length),this._orchestrator.supplyWorkerData(e,n)}}}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const a=new ReadableStream({pull:async e=>{for(;;){let s;try{s=await t.read()}catch(a){if(this._disposed)throw a;const e=this._getRetryDelay(1,a,this._url);if(null===e)throw a;st._error("Error while reading response stream. Attempting to resume.",a),await tt(1e3*e);const s=await Me(this._options.fetchFn??fetch,this._url,Fe(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!s.ok)throw new Error(`Error fetching ${String(this._url)}: ${s.status} ${s.statusText}`);if(!s.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=s.body.getReader(),r=206===s.status?0:i;continue}if(s.done)return void e.close();let n=s.value;if(r>0){const e=Math.min(r,n.length);r-=e,n=n.subarray(e)}if(0!==n.length)return i+=n.length,void e.enqueue(n)}},cancel:()=>t.cancel()}),s=new Ks(a,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const n=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)n.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)n.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of n){const e=s._read(o.start,o.start+o.bytes.length);Ve(e)?e.then(e=>{e?(W(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(W(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Vs=/^bytes=(\d+)-(\d*)$/,js=e=>{const t=Vs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=de(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let a=e;const s=new Uint8Array(t-e);if(-1!==i)for(let l=i;l=t)break;const r=Math.max(e,i.start);r>a&&this._throwDueToCacheMiss();const n=Math.min(t,i.end);ra&&this._throwDueToCacheMiss();const{promise:n,resolve:o,reject:c}=me();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),n}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}async _pull(){for(this._reader??(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){for(const e of this._pendingSlices)e.reject(new Qo);this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}}const Xs={fileSystem:(e,t)=>{const i=65536;return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=65536;e=Math.max(0,Math.floor((e-r)/r)*r);for(const a of i){const i=8388608,r=Math.max((a.startPos+a.targetPos)/2,a.targetPos-i);if(Ke(e,t,r,a.targetPos)){const e=a.targetPos-a.startPos,r=Math.ceil((e+1)/i)*i,s=2**Math.ceil(Math.log2(e+1)),n=Math.min(s,r);t=Math.max(t,a.startPos+n)}}return{start:e,end:t=Math.max(t,e+524288)}}};class $s{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){W(!this.disposed);const a=this.options.prefetchProfile(e,t,this.workers),s=Math.max(a.start,i),n=Math.min(a.end,this.fileSize??1/0,r);W(s<=e&&t<=n);let o=null;const c=de(this.cache,e,e=>e.start),l=-1!==c?this.cache[c]:null;l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,o={bytes:l.bytes,view:l.view,offset:l.start});const u=de(this.cache,s,e=>e.start),h=o?null:new Uint8Array(t-e);let d=0,f=s;const m=[];if(-1!==u){for(let i=u;i=n)break;if(r.end<=s)continue;const a=Math.max(s,r.start),o=Math.min(n,r.end);if(W(a<=o),f=h.length&&(o={bytes:h,view:G(h),offset:e}),0===m.length)return W(o),o;const{promise:p,resolve:g,reject:k}=me(),y=[];for(const w of m){const i=Math.max(e,w.start),r=Math.min(t,w.end);i===w.start&&r===w.end?y.push(w):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&w.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,w.end),i.strictTarget&&(i.strictTarget=e),b&&i.pendingSlices.push(b)):(t++,i={hole:{start:w.start,end:w.end},strictTarget:e,pendingSlices:b?[b]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return o?p.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(W(h),o=p.then(t=>t&&{bytes:t,view:G(t),offset:e})),o}checkHoleAgainstWorker(e,t,i){if(Ke(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=r),t.end<=t.start&&(s.holes.splice(e,1),e--)}0===s.holes.length&&(s.resolve(s.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){const t=this.workers.indexOf(e);W(-1!==t),e.running=!1,this.workers.splice(t,1),this.options.onIdleWorkerRemoved?.(e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const i of e.pendingSlices)i.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=de(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=G(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=G(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const a=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Ve(a)?a.then(s):s(a)}_dispose(){this._ref?.free()}ref(){return this._ref??(this._ref=this._baseSource.ref()),super.ref()}}var Qs=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},Ys=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const Js=/^0[xX][0-9a-fA-F]+$/,Zs=/^data:.*;base64,/i;class en extends Es{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??(this.currentUpdateSegmentsPromise=(async()=>{try{const e=this.getRemainingWaitTimeMs();e>0&&await tt(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})())}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){const t={stack:[],error:void 0,hasError:!1};try{const i=Qs(t,await this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),r=new Yo(i.source),a=await r.requestEntireFile();W(a),e=kc(a,a.length,{ignore:Cs}),i.source instanceof Ns&&(this.rootPath=i.source.rootPath)}catch(y){t.error=y,t.hasError=!0}finally{Ys(t)}}const t=!1!==this.input._formatOptions.hls?.offsetTimestampsByDateTime;let i=!1,r=0,a=null,s=null,n=null,o=0,c=null,l=null,u=null,h=null,d=null,f=null,m=!1,p=V(this.segments)??null;const g=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},k=e=>{o=e,p&&(W(null!==p.sequenceNumber),p.sequenceNumber0&&null!==f&&(r=o*f),m=!0);const e=y.slice(8),t=e.indexOf(","),i=-1===t?e:e.slice(0,t),a=Number(i);if(!Number.isFinite(a)||a<0)throw new Error(`Invalid #EXTINF tag duration '${i}'.`);s=a}else if(y.startsWith(ws)){const e=new Bs(y.slice(11)),t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const i=e.get("byterange");let o=null;if(null!==i&&(o=g(i)),o&&null===o.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!p){const e={path:Qe(this.rootPath,t),offset:o?.offset??0,length:o?.length??null};if("AES-128"===n?.method&&!n.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");l={timestamp:r,unixEpochTimestamp:a,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:n,initSegment:null,lastProgramDateTimeSeconds:d}}s=null,null===h?u=null:h=null}else if(y.startsWith(Ts)){const e=new Bs(y.slice(11)),t=e.get("method");if("NONE"===t)n=null;else if("AES-128"===t){const t=e.get("uri");if(!t)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=e.get("iv");if(r){if(!Js.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(ur);for(let t=0;t=8&&112===t[4]&&115===t[5]&&115===t[6]&&104===t[7]){const e=G(t).getUint32(0);r=ir(t.subarray(8,Math.min(e,t.length)))}}n={method:t,psshBox:r}}}}else if(y.startsWith(Ss)){const e=y.slice(22),t=Number(e);if(!Number.isInteger(t)||t<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);k(t)}else if(y.startsWith(vs)){const e=g(y.slice(17));if(null===e.offset){if(null===u)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");e.offset=u}h=e,u=e.offset+e.length}else if(y.startsWith(Ps)){if(p)continue;const e=y.slice(25),i=Date.parse(e);if(!Number.isFinite(i))continue;const s=i/1e3;if(d===s)continue;if(null===d&&this.segments.length>0){const e=V(this.segments),i=s-(e.timestamp+e.duration);for(const r of this.segments)r.unixEpochTimestamp=r.timestamp+i,t&&(r.timestamp=r.unixEpochTimestamp)}d=s,a=s,t&&(r=s)}else if("#EXT-X-DISCONTINUITY"===y)c=null;else if(y.startsWith(Is)){const e=y.slice(22),t=Number(e);if(!Number.isFinite(t)||t<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,f=t}else{if("#EXT-X-ENDLIST"===y){this.streamHasEnded=!0;break}if(y.startsWith(xs)){"vod"===y.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==y)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");i=!0}}if(!i)throw new Error("Invalid M3U8 file; no #EXTM3U header.")}async getFirstSegment(){return 0===this.segments.length&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){0===this.segments.length&&await this.runUpdateSegments();let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=de(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===t);if(i)return i.age=this.nextInputCacheAge++,i.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));const a={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let i=e.psshBoxes;const{psshBox:r}=t.encryption;return null!==r.keyIds&&!r.keyIds.includes(e.keyId)||i.some(e=>rr(e,r))||(i=[...i,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:i})})}},s=new $o({source:new zs(t.location.path,async e=>{W(e.isRoot);const i={...e,isRoot:!1};let r;const a=t.location.offset>0||null!==t.location.length;if(t.encryption&&"SAMPLE-AES"!==t.encryption.method&&"SAMPLE-AES-CTR"!==t.encryption.method)if("AES-128"===t.encryption.method){const e=t.encryption;W(e.iv);let s=await this.input._getSourceCached(i);if(a){const e=s.source.slice(t.location.offset,t.location.length??void 0).ref();s.free(),s=e}const n=((e,t,i)=>{let r=!1,a=0;const s=new br;return new ReadableStream({pull:async n=>{r||(s.init(await t()),r=!0);let o=e.requestSliceRange(a,0,65552);if(Ve(o)&&(o=await o),!o||0===o.length)throw new Error("Invalid ciphertext.");const c=o.length;if(c%16!==0)throw new Error("Invalid ciphertext.");const l=65552===c?c-16:c,u=ec(o,l),h=new Uint8Array(l);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=h.subarray(0,l-e);n.enqueue(t),n.close(),i()}},cancel:()=>{i()}})})(new Yo(s.source),async()=>{const t={stack:[],error:void 0,hasError:!1};try{const i=Qs(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},Xo),!1),r=new Yo(i.source),a=await r.requestSlice(0,ur);if(!a)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:ec(a,ur),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{Ys(t)}},()=>{s.free()});r=new Ks(n).ref()}else W(!1);else if(r=await this.input._getSourceCached(i),a){const e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}return r}),formats:this.input._formats.filter(e=>!(e instanceof Tn)),initInput:r??void 0,formatOptions:a});s._onFormatDetermined=e=>{if(("SAMPLE-AES"===t.encryption?.method||"SAMPLE-AES-CTR"===t.encryption?.method)&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:t,input:s,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=Je(this.inputCache,e=>e.age);W(-1!==e),this.inputCache.splice(e,1)}return s}async getLiveRefreshInterval(){return 0===this.getRemainingWaitTimeMs()&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}class tn extends Zi{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{W(this.input._rootSource instanceof Ns);const e=await this.input._reader.requestEntireFile();W(e);const t=kc(e,e.length,{ignore:Cs}),{rootPath:i}=this.input._rootSource,r=[],a=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],n=[...new Set(a.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=await Promise.all(r.map(async(e,t)=>{const r=[],o=e.attributes.get("codecs");let c;if(o)c=o.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=await t.getTrackBackings(),r=await Promise.all(i.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const l=e.attributes.get("video"),u=e.attributes.get("audio"),h=c.some(e=>Ci.includes(Wi(e))),d=c.some(e=>Ei.includes(Wi(e)));if(null!==l&&!h){if(!s.includes(l))throw new Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===l&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Qe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);W(null!==n),c.push(n)}}if(null!==u&&!d){if(!n.includes(u))throw new Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);const e=a.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===u&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Qe(i,t),a=this.getSegmentedInputForPath(r),s=(await a.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===await s.getCodec())break e;const n=await s.getDecoderConfig().then(e=>e?.codec??null);W(null!==n),c.push(n)}}c=[...new Set(c)];let f=null,m=null;const p=e.attributes.getAsNumber("bandwidth");W(null!==p);const g=e.attributes.getAsNumber("average-bandwidth"),k=e.attributes.get("name");for(const i of c){const o=Wi(i);if(null!==o)if(Ci.includes(o)){if(null!==f)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");f=i;const n=e.attributes.get("video");if(null===n){const i=e.attributes.get("resolution");let a=null,s=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(a=Number(e[1]),s=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:ve,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:f,pairingMask:1n<0?a:null}})}else{if(!n.includes(s))throw new Error(`Invalid M3U8 file; variant stream references audio group "${s}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of a){const a=i.attributes.get("group-id"),n=i.attributes.get("type");if(a!==s||"audio"!==n.toLowerCase())continue;const o=i.attributes.get("channels")??e.attributes.get("channels"),c=null!==o?Number(o.split("/")[0]):null;r.push({id:-1,demuxer:this,backingTrack:null,default:nn(i.attributes),autoselect:nn(i.attributes)||on(i.attributes),languageCode:cn(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:i.fullPath??e.fullPath,fullCodecString:m,pairingMask:1n<0?c:null}})}}}}return r})),c=[],l=e=>{const t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||(t.default=e.default),t.autoselect||(t.autoselect=e.autoselect),t.lineNumber=Math.min(t.lineNumber,e.lineNumber),null!==e.peakBitrate&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),null!==e.averageBitrate&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===ve&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(const u of o)for(const e of u)l(e);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of c)"video"===u.info.type?this.trackBackings.push(new an(u)):this.trackBackings.push(new sn(u));this.internalTracks=c})())}async getTrackBackings(){return await this.readMetadata(),W(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new en(this,e,i,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return ps}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class rn{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??(this.hydrationPromise=(async()=>{const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof an){for(const r of i)if(await r.getCodec()===this.getCodec()){t=r;break}}else{W(this instanceof sn);for(const e of i)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t})())}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return{...ct,default:this.internalTrack.autoselect,primary:this.internalTrack.default}}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){W(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}}class an extends rn{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return Wi(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}async getColorSpace(){return await this.hydrate(),this.backingVideoTrack.getColorSpace()}async canBeTransparent(){return await this.hydrate(),this.backingVideoTrack.canBeTransparent()}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingVideoTrack.getDecoderConfig()}}class sn extends rn{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return Wi(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}}const nn=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},on=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},cn=e=>{if(null===e)return ve;const t=e.split("-")[0];return t||ve};class ln{constructor(){this._isIsobmff=!1}}class un extends ln{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(Ve(t)&&(t=await t),!t)return null;t.skip(4);const i=gc(t,4);return"ftyp"!==i&&"styp"!==i?null:gc(t,4)}_createDemuxer(e){return new wr(e)}}class hn extends un{async _canReadInput(e){const t=await this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Ve(t)&&(t=await t),!t)return!1;let r=oc(t),a=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Ve(t)&&(t=await t),!t)return!1;r=hc(t),a=16}if(r8)return!1;if(Kr(i,r)!==zr.EBML)return!1;const a=$r(i);if("number"!==typeof a)return!1;let s=e._reader.requestSlice(i.filePos,a);if(Ve(s)&&(s=await s),!s)return!1;const n=i.filePos;for(;s.filePos<=n+a-2;){const e=Gr(s);if(!e)break;const{id:i,size:r}=e,a=s.filePos;if(void 0===r)return!1;switch(i){case zr.EBMLVersion:if(1!==Kr(s,r))return!1;break;case zr.EBMLReadVersion:if(1!==Kr(s,r))return!1;break;case zr.DocType:if(Qr(s,r)!==t)return!1;break;case zr.DocTypeVersion:if(Kr(s,r)>4)return!1}s.filePos=a+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new Pa(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class mn extends fn{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class pn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}const i=await Ba(e._reader,t,t+4096);if(!i)return!1;const r=i.header,a=Xi(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+a,4);if(Ve(s)&&(s=await s),!s)return!1;const n=oc(s);if(n===ji||n===Ki)return!0;t=i.startPos+i.header.totalSize;const o=await Ba(e._reader,t,t+4);if(!o)return!1;const c=o.header;return r.channel===c.channel&&r.sampleRate===c.sampleRate}_createDemuxer(e){return new Ea(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class gn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(Ve(t)&&(t=await t),!t)return!1;const i=gc(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===gc(t,4)}_createDemuxer(e){return new ja(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class kn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return Ve(t)&&(t=await t),!!t&&"OggS"===gc(t,4)}_createDemuxer(e){return new La(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class yn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Ve(i)&&(i=await i),!!i&&"fLaC"===gc(i,4)}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new Ja(e)}}class bn extends ln{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,vc);if(Ve(i)&&(i=await i),!i)break;const r=Cc(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Ve(i)&&(i=await i),!i)return!1;const r=$a(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Ve(i)&&(i=await i),!i)return!1;const a=$a(i);return!!a&&(r.objectType===a.objectType&&r.samplingFrequencyIndex===a.samplingFrequencyIndex&&r.channelConfiguration===a.channelConfiguration)}_createDemuxer(e){return new Qa(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class wn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,205);if(Ve(t)&&(t=await t),!t)return!1;const i=ec(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])}_createDemuxer(e){return new ns(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class Tn extends ln{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(Ve(t)&&(t=await t),!t)return!1;if(!("#EXTM3U"===gc(t,7)))return!1;if(!(e._rootSource instanceof Ns))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new tn(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return ps}}const Sn=new hn,vn=new dn,Pn=new fn,In=new mn,xn=new pn,Cn=new gn,Bn=new kn,En=new bn,_n=new yn,Rn=new wn,Fn=new Tn,An=[Fn,Sn,vn,Pn,In,Cn,Bn,_n,xn,En,Rn],Mn=[Fn,Sn,vn,xn,En,Rn];var Dn=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,a=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===a)return a=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return a|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else a|=1}catch(n){i(n)}if(1===a)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});$e();let Nn=-1/0,On=-1/0,zn=null;"undefined"!==typeof FinalizationRegistry&&(zn=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Nn>=1e3&&(st._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Nn=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-On>=1e3&&(st._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),On=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class Ln{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Un=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],qn=new Set(Un);class Wn{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(Re*this.timestamp)}get microsecondDuration(){return Math.trunc(Re*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!qn.has(t.format))throw new TypeError("init.format must be one of: "+Un.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&et(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0;const i=t.layout??Jn(t.format,t.codedWidth,t.codedHeight);let r=t.colorSpace??null;null===r&&(r="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:t.visibleRect?.left??0,top:t.visibleRect?.top??0,width:t.visibleRect?.width??t.codedWidth,height:t.visibleRect?.height??t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?$(e):$(e).slice(),this._layout=i,this.colorSpace=new Xn(r)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==t?.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==t?.timestamp&&!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==t?.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==t?.visibleRect&&et(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:e.visibleRect?.x??0,top:e.visibleRect?.y??0,width:e.visibleRect?.width??e.codedWidth,height:e.visibleRect?.height??e.codedHeight},this.rotation=t?.rotation??0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=t?.timestamp??e.timestamp/1e6,this.duration=t?.duration??(e.duration??0)/1e6,this.colorSpace=new Xn(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&et(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new Wn(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*Re),duration:Math.trunc((t.duration??0)*Re)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const a=t.visibleRect??{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(a.width,a.height),n=s.getContext("2d",{alpha:Le(),willReadFrequently:!0});if(!n)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");n.drawImage(e,-a.left,-a.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:a.width,height:a.height},this.squarePixelWidth=a.width,this.squarePixelHeight=a.height,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new Xn({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof Ln))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Un.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=e.getColorSpace()}this.encodeOptions=t?.encodeOptions??{},this.pixelAspectRatio=Ze({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),zn?.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return W(null!==this._data),this._data instanceof Ln?new Wn(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):$n(this._data)?new Wn(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(W(this._layout),new Wn(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new Wn(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(zn?.unregister(this),this._data instanceof Ln?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):$n(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){if(Yn(e),this._closed)throw new Error("VideoSample is closed.");if(null==(e.format??this.format))throw new Error("Cannot get allocation size when format is null.");if($n(this._data))return this._data.allocationSize(e);return eo(this,e).allocationSize}async copyTo(e,t={}){if(!ne(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(Yn(t),this._closed)throw new Error("VideoSample is closed.");if(null==(t.format??this.format))throw new Error("Cannot copy video sample data when format is null.");if(W(null!==this._data),$n(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof Ln)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=await i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const r=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,a;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(a=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");a&&(r=function(){try{a.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},t.colorSpace??"srgb"),!1);if(!(r instanceof Wn))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(r.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${r.format}' instead.`);return await r.copyTo(e,t)}catch(c){i.error=c,i.hasError=!0}finally{Dn(i)}}}const i=eo(this,t);W(this.format);const r=$(e);if(r.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');s=e}else if(this._data instanceof Uint8Array)W(this._layout),W(this._layout.length===a.length),s=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");W(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);s=[{data:$(t.data),stride:4*this.codedWidth}]}const n=[],o=a.length;for(let l=0;la.byteLength)throw new Error("Source buffer OOB read.");if(c+u>r.byteLength)throw new Error("Destination buffer OOB write.");const i=a.subarray(o,o+u);r.set(i,c),o+=t,c+=e.destinationStride}n.push(h)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),a=this.format.includes("X")&&t.format.includes("A");if(e||a)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const a=[];for(const s of e)i.set(s.data,r),a.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:a[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return $n(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(W(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,a,s,n,o,c){let l=0,u=0,h=this.displayWidth,d=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(l=t,u=i,h=r,d=a,f=s,m=n,void 0!==o?(p=o,g=c):(p=h,g=d)):(f=t,m=i,void 0!==r&&(p=r,g=a)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(l))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:l,sy:u,sWidth:h,sHeight:d}=this._rotateSourceRegion(l,u,h,d,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const w=this.rotation%180===0?1:p/g;e.scale(1/w,w),e.drawImage(k,l,u,h,d,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&Qn(t.crop,"options.");const i=e.canvas.width,r=e.canvas.height,a=t.rotation??this.rotation,[s,n]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let o,c,l,u,h=t.crop;h&&(h=Gn(h,s,n));const{sx:d,sy:f,sWidth:m,sHeight:p}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??s,t.crop?.height??n,a);if("fill"===t.fit)o=0,c=0,l=i,u=r;else{const[e,a]=t.crop?[t.crop.width,t.crop.height]:[s,n],h="contain"===t.fit?Math.min(i/e,r/a):Math.max(i/e,r/a);l=e*h,u=a*h,o=(i-l)/2,c=(r-u)/2}e.save();const g=a%180===0?1:l/u;e.translate(i/2,r/2),e.rotate(a*Math.PI/180),e.scale(1/g,g),e.translate(-i/2,-r/2),e.drawImage(this.toCanvasImageSource(),d,f,m,p,o,c,l,u),e.restore()}_rotateSourceRegion(e,t,i,r,a){return 90===a?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===a?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===a&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,a=e.height,[s,n]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,c=i.crop?i.crop.height:n;let l=0;2*r0?Kn(u,h):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,h)):m||f.clearRect(0,0,u,h),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=l;p>1;p--){const e=r*2**p,t=a*2**p;f.drawImage(d,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",l>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(d,0,0,2*r,2*a,0,0,r,a),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(W(null!==this._data),this._data instanceof Ln||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}async transform(e){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&Qn(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const t=H(this.rotation+(e.rotate??0)),[i,r]=t%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let a=e.crop;a&&(a=Gn(a,i,r));const s=a?a.width:i,n=a?a.height:r,o=s/n;let c,l;void 0!==e.width&&void 0===e.height?(c=e.width,l=c/o):void 0===e.width&&void 0!==e.height?(l=e.height,c=l*o):void 0!==e.width&&void 0!==e.height?(c=e.width,l=e.height):(c=s,l=n),c=Ie(c,e.roundDimensionsTo??1),l=Ie(l,e.roundDimensionsTo??1);const u={width:c,height:l,fit:e.fit??"fill",rotation:t,crop:a??{left:0,top:0,width:i,height:r},alpha:e.alpha??"keep"};for(const m of Hn){let e=m(this,u);if(Ve(e)&&(e=await e),null!==e)return e}const{canvas:h,context:d,isNew:f}=Kn(u.width,u.height);return this._drawWithFitAndMipmapping(h,d,{fit:u.fit,rotation:u.rotation,crop:u.crop,targetIsFresh:f,fillBlack:"discard"===u.alpha}),new Wn(h,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const Hn=[],Vn=[];let jn=0;const Kn=(e,t)=>{for(const a of Vn)if(a.canvas.width===e&&a.canvas.height===t)return a.age=jn++,{canvas:a.canvas,context:a.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return Vn.length>=3&&Vn.splice(Je(Vn,e=>e.age),1),Vn.push({canvas:i,context:r,age:jn++}),{canvas:i,context:r,isNew:!0}};class Xn{constructor(e){if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(J);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(ee);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(ie);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const $n=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Gn=(e,t,i)=>{const r=Math.min(e.left,t),a=Math.min(e.top,i),s=Math.min(e.width,t-r),n=Math.min(e.height,i-a);return W(s>=0),W(n>=0),{left:r,top:a,width:s,height:n}},Qn=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},Yn=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Jn=(e,t,i)=>{const r=Zn(e),a=[];let s=0;for(const n of r){const e=Math.ceil(t/n.widthDivisor),r=Math.ceil(i/n.heightDivisor),o=e*n.sampleBytes,c=o*r;a.push({offset:s,stride:o}),s+=c}return a},Zn=e=>{const t=(e,t,i,r,a)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return a&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:ye(e),W(!1)}},eo=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,a=to(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let n;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");n=t.format}else n=e.format;return ro(a,n,s)},to=(e,t,i,r,a)=>{const s={...e};if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!io(a,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},io=(e,t)=>{if(null===e)return!0;const i=Zn(e);for(let r=0;r{const r=Zn(t),a=r.length;if(void 0!==i&&i.length!==a)throw new TypeError(`Layout must have ${a} planes.`);let s=0;const n=[],o=[];for(let c=0;c4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(d),s=Math.max(s,d);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(oo(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*oo(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const r=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-i;if(r>this.numberOfFrames-i)throw new RangeError("frameCount out of range");const a=oo(t),s=co(t);if(s&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(s?r:r*this.numberOfChannels)*a}copyTo(e,t){if(!ne(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!ao.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:a}=t;let{planeIndex:s}=t,n=this.format;const o=i??this.format;if(!o)throw new Error("Destination format not determined");const c=this.numberOfFrames,l=this.numberOfChannels,u=a??0;if(u>=c)throw new RangeError("frameOffset out of range");const h=void 0!==r?r:c-u;if(h>c-u)throw new RangeError("frameCount out of range");const d=oo(o),f=co(o);if(f&&s>=l)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?h:h*l)*d;if(e.byteLength2&&o!==n)return void fo(this._data,p,n,o,l,s,u,h);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:h,format:o})}catch(S){if("f32-planar"===o)throw S;n="f32-planar"}}const k=lo(n),y=oo(n),b=co(n);let w;if(this._data instanceof so){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=c*y*(b?1:l);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)w=e(s),s=0;else{w=new Uint8Array(c*y*l);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(a,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new no({data:a,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(zn?.unregister(this),this._data instanceof so?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):ho(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof so?this._createAudioDataFromData():ho(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(co(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const a=Math.min(s,o),c=new Float32Array(i*a);for(let t=0;t0;){const a=Math.min(s,o),l=new Float32Array(i*a);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},co=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},lo=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},uo=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,Se(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,Se(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,Se(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},ho=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,fo=(e,t,i,r,a,s,n,o)=>{const c=lo(i),l=uo(r),u=oo(i),h=oo(r),d=co(i);if(co(r))if(d){const r=new ArrayBuffer(o*u),a=G(r);e.copyTo(r,{planeIndex:s,frameOffset:n,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},ko=e=>{if(!Ge(e))throw new TypeError("timestamp must be a number.")},yo=(e,t,i)=>i.verifyKeyPackets?t.then(async t=>{if(!t||"delta"===t.type)return t;const i=await e.determinePacketType(t);return i&&(t.type=i),t}):t;class bo{constructor(e){if(!(e instanceof Mo))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(go(e),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){go(e);const t=await this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(ko(e),go(t),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(go(t),this._track.input._disposed)throw new Qo;return yo(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(ko(e),go(t),this._track.input._disposed)throw new Qo;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=await this._track._backing.getKeyPacket(e,t);if(!i)return i;W("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getKeyPacket(i.timestamp-1/await this._track.getTimeResolution(),t):i}async getNextKeyPacket(e,t={}){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(go(t),this._track.input._disposed)throw new Qo;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=await this._track._backing.getNextKeyPacket(e,t);if(!i)return i;W("key"===i.type);return"delta"===await this._track.determinePacketType(i)?this.getNextKeyPacket(i,t):i}packets(e,t,i={}){if(void 0!==e&&!(e instanceof tr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!i?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof tr))throw new TypeError("endPacket must be an EncodedPacket.");if(go(i),this._track.input._disposed)throw new Qo;const r=[];let{promise:a,resolve:s}=me(),{promise:n,resolve:o}=me(),c=!1,l=!1,u=null,h=!1;const d=[],f=()=>Math.max(2,d.length);(async()=>{let u=e??await this.getFirstPacket(i);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);)r.length>f()?(({promise:n,resolve:o}=me()),await n):(r.push(u),s(),({promise:a,resolve:s}=me()),u=await this.getNextPacket(u,i));c=!0,s()})().catch(e=>{h||(u=e,h=!0,s())});const m=this._track;return{async next(){for(;;){if(m.input._disposed)throw new Qo;if(l)return{value:void 0,done:!0};if(h)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(d.push(t);d.length>0&&t-d[0]>=1e3;)d.shift();return o(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};await a}},return:async()=>(l=!0,o(),s(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}class wo{constructor(e,t){this.onSample=e,this.onError=t}}class To{mediaSamplesInRange(e=-1/0,t=1/0,i){ko(e),ko(t);const r=[];let a=!1,s=null,{promise:n,resolve:o}=me(),{promise:c,resolve:l}=me(),u=!1,h=!1,d=!1,f=null,m=null,p=!1;const g={...i,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{f=await this._createDecoder(i=>{l(),i.timestamp>=t&&(h=!0),h?i.close():(s&&(i.timestamp>e?(r.push(s),a=!0):s.close()),i.timestamp>=e&&(r.push(i),a=!0),s=a?null:i,r.length>0&&(o(),({promise:n,resolve:o}=me())))},e=>{p||(m=e,p=!0,o())});const i=this._createPacketSink(),k=await i.getKeyPacket(e,g)??await i.getFirstKeyPacket(g);let y=k;const b=i.packets(k??void 0,void 0,g);for(await b.next();y&&!h&&!this._track.input._disposed;){const e=So(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:c,resolve:l}=me()),await c;continue}f.decode(y);const t=await b.next();if(t.done)break;y=t.value}await b.return(),d||this._track.input._disposed||await f.flush(),!a&&s&&r.push(s),u=!0,o()})().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{f?.close()});const k=this._track,y=()=>{s?.close();for(const e of r)e.close()};return{async next(){for(;;){if(k.input._disposed)throw d=!0,h=!0,y(),new Qo;if(d)return{value:void 0,done:!0};if(p)throw d=!0,h=!0,y(),m;if(r.length>0){const e=r.shift();return l(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};await n}},return:async()=>(d=!0,h=!0,l(),o(),y(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()}(e),r=[],a=[];let{promise:s,resolve:n}=me(),{promise:o,resolve:c}=me(),l=!1,u=!1,h=null,d=null,f=!1;const m=e=>{a.push(e),n(),({promise:s,resolve:n}=me())},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{h=await this._createDecoder(e=>{if(c(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(d=e,f=!0,n())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=async()=>{W(s),W(h);let t=s;for(h.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:c}=me()),await o;if(u)break;const r=await e.getNextPacket(t,p);W(r),h.decode(r),t=r}g=-1},y=async()=>{W(h),await h.flush();for(let e=0;e{f||(d=e,f=!0,n())}).finally(()=>{h?.close()});const g=this._track,k=()=>{for(const e of a)e?.close()};return{async next(){for(;;){if(g.input._disposed)throw u=!0,k(),new Qo;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),d;if(a.length>0){const e=a.shift();return W(void 0!==e),c(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};await s}},return:async()=>(u=!0,c(),n(),k(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}const So=e=>0===e?40:8;class vo extends wo{constructor(e,t,i,r,a,s){super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=a,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new De,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const n=mo.find(e=>e.supports(i,r));if(n)this.customDecoder=new n,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Wn))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();W(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(qe()){if("avc"===i&&this.decoderConfig.description){const e=Rt($(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=At(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"}),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=Dt(t),this.decoderConfig={...this.decoderConfig,description:_t(e)}))}}ae(this.decoderConfig.colorSpace)||(this.decoderConfig={...this.decoderConfig,colorSpace:{primaries:this.decoderConfig.colorSpace?.primaries??"bt709",matrix:this.decoderConfig.colorSpace?.matrix??"bt709",transfer:this.decoderConfig.colorSpace?.transfer??"bt709",fullRange:this.decoderConfig.colorSpace?.fullRange??!1}})}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(W(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(W(this.decoder),Oe()||fe(this.inputTimestamps,e.timestamp,e=>e),qe()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const a of vt(e.data,this.decoderConfig)){const r=Pt(e.data[a.offset]);if(i||(i=r>=1&&r<=5),r===kt.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(a.offset,a.offset+a.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&$(t.description)[4];return Bt(e,i+1)}return Ct(e)})(t,this.decoderConfig);e=new tr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Gt(e.data,this.decoderConfig);t&&(e=new tr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Io),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();W(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();W(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=ri(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(t??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Nt(e,this.decoderConfig)){const i=Ot(e[t.offset]);if(i===bt.RASL_N||i===bt.RASL_R)return!0}return!1}sampleHandler(e){if(Oe()){if(this.sampleQueue.length>0&&e.timestamp>=V(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}fe(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();W(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){const i=me();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){W(this.merger);const i=await this.merger.merge(e,t);r.sample=new Wn(i)}else r.sample=new Wn(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(a){pe(this.finalSamples,r),this.onError(a)}finally{pe(this.mergeAlphaPromises,i.promise),i.resolve()}}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(W(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Oe()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(W(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.merger?.close());for(const e of this.sampleQueue)e.close();this.sampleQueue.length=0}}let Po=null;class Io{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!Po){const e=new Blob([`(${xo.toString()})()`],{type:"application/javascript"});Po=URL.createObjectURL(e)}const e=Se(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=me();this.pendingRequests.set(i,r);const a=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,a.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const xo=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:a,alpha:s}=e.data;i=i.then(async()=>{try{const e=await r(a,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{a.close(),s.close()}})});const r=async(e,t)=>{const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),c=i.includes("P12"),l=r.includes("P10"),u=r.includes("P12");if(l!==o||u!==c)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return await a(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return await s(e,t,i);if("NV12"===i)return await n(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)},a=async(e,t,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=new Uint8Array(4*s);await e.copyTo(n);const c=await o(t,r,a,1);for(let o=0,u=3;o{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=i.includes("P10"),n=i.includes("P12"),c=s||n?2:1;let l,u;i.startsWith("I420")?(l=Math.ceil(r/2),u=Math.ceil(a/2)):i.startsWith("I422")?(l=Math.ceil(r/2),u=a):(l=r,u=a);const h=r*a,d=h*c,f=l*u*c,m=new Uint8Array(d+2*f+h*c);await e.copyTo(m);const p=await o(t,r,a,c),g=d+2*f;m.set(p,g);const k={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:r,codedHeight:a,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[m.buffer]};return new VideoFrame(m,k)},n=async(e,i)=>{const r=e.visibleRect?.width??e.codedWidth,a=e.visibleRect?.height??e.codedHeight,s=r*a,n=Math.ceil(r/2)*Math.ceil(a/2),c=e.allocationSize();t&&t.byteLength===c||(t=new Uint8Array(c)),await e.copyTo(t);const l=new Uint8Array(s+2*n+s);l.set(t.subarray(0,s),0);const u=s,h=s+n,d=s;for(let o=0;o{const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),await t.copyTo(e);const n=t.format;if("RGBA"===n||"BGRA"===n||"RGBX"===n||"BGRX"===n){const t="RGBA"===n||"RGBX"===n?0:2,a=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class Bo extends To{constructor(e,t={}){if(!(e instanceof Oo))throw new TypeError("videoTrack must be an InputVideoTrack.");Co(t),super(),this._track=e,this._decoderOptions=t}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(We("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getRotation();let a=await this._track.getDecoderConfig();const s=await this._track.getTimeResolution();return W(i&&a),a={...a,hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency},new vo(e,t,i,a,r,s)}_createPacketSink(){return new bo(this._track)}async getSample(e,t={}){ko(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Eo{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof Oo))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&Qn(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Co(t.decoderOptions),this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??"fill",this._videoSampleSink=new Bo(e,t.decoderOptions),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??(this._initPromise=(async()=>{const e=this._options,t=this._videoTrack,i=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),a=await t.getSquarePixelHeight(),[s,n]=i%180===0?[r,a]:[a,r];let o=e.crop;o&&(o=Gn(o,s,n));let[c,l]=o?[o.width,o.height]:[s,n];const u=c/l;void 0!==e.width&&void 0===e.height?(c=e.width,l=Math.round(c/u)):void 0===e.width&&void 0!==e.height?(l=e.height,c=Math.round(l*u)):void 0!==e.width&&void 0!==e.height&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=i,this._crop=o})())}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],a=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||Le()});W(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:a,fillBlack:!this._alpha&&Le()});const n={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),n}async getCanvas(e,t){ko(e),await this._ensureInit();const i=await this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)}async*canvases(e,t,i){await this._ensureInit(),yield*Te(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*Te(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}}class _o extends wo{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new De,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const a=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const a=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(a*s)/s),e(t)},s=po.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof no))throw new TypeError("The argument passed to onSample must be an AudioSample.");a(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{a(new no(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(W(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(W(this.decoder),this.expectedFirstTimestamp??(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(W(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(W(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class Ro extends wo{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,W(Bi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:a,littleEndian:s}=qi(this.codec);switch(this.inputSampleSize=a,a){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-128:"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const a=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let a=0;return a=4!==i?1<e.getUint16(t,s)-32768:"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):W(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>be(e,t,s)-2**23:"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>be(e,t,i)<<8>>8)(e,t,s):W(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-2**31:"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):W(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):W(!1);break;default:ye(a),W(!1)}switch(a){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+128));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:ye(a),W(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=G(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,a=new ArrayBuffer(r),s=new DataView(a);for(let l=0;l=n)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=n;const c=new no({format:this.outputFormat,data:a,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(c)}async flush(){}close(){}}class Fo extends To{constructor(e){if(!(e instanceof zo))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(We("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=await this._track.getCodec(),r=await this._track.getDecoderConfig();return W(i&&r),Bi.includes(r.codec)?new Ro(e,t,r):new _o(e,t,i,r)}_createPacketSink(){return new bo(this._track)}async getSample(e,t={}){ko(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ao{constructor(e){if(!(e instanceof zo))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Fo(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){ko(e);const i=await this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)}buffers(e,t,i){return Te(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Te(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class Mo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof Oo}isAudioTrack(){return this instanceof zo}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return Do(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return Do(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return Do(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return Do(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(e){return this._backing.getUnixTimeForTimestamp(e)}async hasUnixTimeMapping(){return null!==await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())}async getDisposition(){return this._backing.getDisposition()}get disposition(){return Do(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){const e=await this._backing.getFirstPacket({metadataOnly:!0});return e?.timestamp??0}async computeDuration(e){const t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return xe((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){const i=new bo(this);let r=1/0,a=-1/0,s=0,n=0;for await(const o of i.packets(void 0,void 0,{metadataOnly:!0,...t})){if(s>=e&&o.timestamp>=a)break;r=Math.min(r,o.timestamp),a=Math.max(a,o.timestamp+o.duration),s++,n+=o.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-r)).toPrecision(16)):0,averageBitrate:s?Number((8*n/(a-r)).toPrecision(16)):0}}async isLive(){return null!==await this._backing.getLiveRefreshInterval()}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(e){if(!(e instanceof Mo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&0n!==(this._backing.getPairingMask()&e._backing.getPairingMask())}async getPairableTracks(e){return this.input.getTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Wo({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Wo({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&(e=No(e));const t=await this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||await e(i)))return!0;return!1}hasPairableVideoTrack(e){return e&&(e=No(e)),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&(e=No(e)),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}}const Do=(e,t,i)=>{if(Ve(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},No=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Ve(r)?r.then(i):i(r)}:void 0};class Oo extends Mo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return Do(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??"prores"===await this._backing.getCodec()}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return Do(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return Do(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return Do(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return Do(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return Do(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ze({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()}))}get pixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=Ze({num:Do(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Do(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Do(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Do(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")}))}async getDisplayWidth(){const e=await(this._backing.getMetadataDisplayWidth?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()}get displayWidth(){const e=this._backing.getMetadataDisplayWidth?.();if(void 0!==e){const t=Do(e,"displayWidth","getDisplayWidth");if(null!==t)return t}const t=Do(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Do(t,"displayWidth","getDisplayWidth")}async getDisplayHeight(){const e=await(this._backing.getMetadataDisplayHeight?.());if(null!=e)return e;return await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()}get displayHeight(){const e=this._backing.getMetadataDisplayHeight?.();if(void 0!==e){const t=Do(e,"displayHeight","getDisplayHeight");if(null!==t)return t}const t=Do(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Do(t,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){const e=await this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(W(null!==t),mo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(await VideoDecoder.isConfigSupported(e)).supported}catch(e){return st._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=await this.getCodec();if(null===t)return null;const i=await this.getDecoderConfig();return W(i),ri(t,i,e.data)}async computeFrameRateMetrics(e={}){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Ge(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const t=await this.getTimeResolution(),i=e.targetPacketCount??256,r=new bo(this),a=[];let s=-1/0,n=0;for await(const I of r.packets(void 0,void 0,{metadataOnly:!0})){if(a.length>=i&&I.timestamp>=s)break;a.push(I.timestamp),s=Math.max(s,I.timestamp),n++}const o=new Float64Array(a.length);for(let I=0;Ie-t),b=k-1>>1,w=k>>1;let T=0,S=0,v=0;for(const I of y)if(v+=f.get(I),0===T&&v>b&&(T=I),v>w){S=I;break}const P=(h/T+h/S)/2;return{underlyingFrameRate:u,bestGuessFrameRate:null!==u?u:Ko(P),minFrameRate:h/p,maxFrameRate:h/m,averageFrameRate:h*k/g,medianFrameRate:P,frameRateIsConstant:null!==u&&1===m&&1===p,probedPacketCount:n}}}class zo extends Mo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return Do(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return Do(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return Do(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){const e=await(this._backing.getMetadataCodecParameterString?.());if(null!=e)return e;const t=await this._backing.getDecoderConfig();return t?.codec??null}async canDecode(){try{const e=await this._backing.getDecoderConfig();if(!e)return!1;const t=await this._backing.getCodec();if(W(null!==t),po.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(await AudioDecoder.isConfigSupported(e)).supported}catch(e){return st._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof tr))throw new TypeError("packet must be an EncodedPacket.");return null===await this.getCodec()?null:"key"}}const Lo=e=>-(e??-1/0),Uo=e=>-e,qo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Ve(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Ve(r)?r.then(i):i(r)}:void 0}},Wo=(e,t)=>({filter:e?.filter||t?.filter?i=>{const r=e?.filter?.(i)??!0,a=e=>!1!==e&&(t?.filter?.(i)??!0);return Ve(r)?r.then(a):a(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?i=>{const r=e?.sortBy?.(i)??[],a=t?.sortBy?.(i)??[],s=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Ve(r)||Ve(a)?Promise.all([r,a]).then(([e,t])=>s(e,t)):s(r,a)}:void 0}),Ho=async(e,t)=>{let i=e;if(t?.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Ve(e))){const t=await Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!t?.sortBy)return i;const r=i.map(e=>t.sortBy(e)),a=r.some(e=>Ve(e))?await Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:a[t]})).sort((e,t)=>{const i=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(i.length,r.length);for(let s=0;se.track)},Vo=(e,t)=>{const i=1e6,r=1+1e-9,a=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let T=1;T0))return null;s[T-1]=t}const n=s.slice();n.sort();let o=n[Math.floor(.05*n.length)];for(let T=0;T<6;T++){let e=0,t=0;for(const a of s){const i=Math.max(1,Math.round(a/o));Math.abs(a-i*o)>=r||(e+=a,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let c=0,l=0,u=0;for(const T of s){const e=Math.max(1,Math.round(T/o));Math.abs(T-e*o)>=r||(c++,l+=T,u+=e)}if(c/s.length<.98)return null;o=l/u;const h=1/Math.min(u,1e3),d=Math.max(Number.EPSILON,o-h),f=o+h,m=t/f,p=t/d,g=t/o;let k=null,y=1/0;for(const T of a){if(Tp)continue;const e=Math.abs(T/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,a=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof ln)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ms||e.source instanceof Ds))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ms&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof $o))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ms?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){W(this._rootSource instanceof Ns);const t=await this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&Os(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&Os(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const a=(async()=>{const i=await this._getSourceUncached(e);if(Ye(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=Je(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);W(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),pe(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);W(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:a}),a.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??(this._demuxerPromise=(async()=>{this._reader=new Yo(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const e of this._formats){if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this)}throw new Go})())}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),W(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof Go)return!1;throw e}}async getFirstTimestamp(e){e??(e=await this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=await Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>e?.timestamp??1/0));return r===1/0?0:r}async computeDuration(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=await Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??(e=await this.getTracks());const i=e.filter(e=>null!==e),r=(await Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)}async getTracks(e){e&&(e=qo(e));const t=(await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return Ho(t,e)}async getVideoTracks(e){e&&(e=qo(e));const t=(await this.getTracks()).filter(e=>e.isVideoTrack());return Ho(t,e)}async getAudioTracks(e){e&&(e=qo(e));const t=(await this.getTracks()).filter(e=>e.isAudioTrack());return Ho(t,e)}async getPrimaryVideoTrack(e){e&&(e=qo(e));const t=Wo(e,{sortBy:async e=>[Uo((await e.getDisposition()).default),Uo(await e.hasPairableAudioTrack()),Uo(!(await e.hasOnlyKeyPackets())),Lo(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&(e=qo(e));const t=await this.getPrimaryVideoTrack(),i=Wo(e,{sortBy:async e=>[Uo(!t||e.canBePairedWith(t)),Uo((await e.getDisposition()).default),Lo(await e.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){const e=await this._getDemuxer();return this._trackBackingsCache??(this._trackBackingsCache=await e.getTrackBackings())}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new Oo(this,e):new zo(this,e);return this._backingToTrack.set(e,i),i}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class Go extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class Qo extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class Yo{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new Qo;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new Jo(t,G(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,As);return Ve(r)?r.then(t=>t?new Jo(t.bytes,t.view,t.offset,e,i):null):r?new Jo(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new Qo;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,Se(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),a=r=>r||(W(null!==this.fileSizeNonStrict),this.requestSlice(e,Se(this.fileSizeNonStrict-e,t,i)));return Ve(r)?r.then(a):a(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(async()=>{const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Ve(i)&&(i=await i),!i||0===i.length)break;const r=ec(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const a of e)i.set(a,r),r+=a.length;return new Jo(i,G(i),0,0,t)})()}}class Jo{constructor(e,t,i,r,a){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=a,this.bufferPos=r-i}static tempFromBytes(e){return new Jo(e,G(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new Jo(this.bytes,this.view,this.offset,e,e+t)}}const Zo=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},ec=(e,t)=>{Zo(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},tc=e=>(Zo(e,1),e.view.getUint8(e.bufferPos++)),ic=(e,t)=>{Zo(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},rc=e=>{Zo(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},ac=e=>{Zo(e,3);const t=be(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},sc=e=>{Zo(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},nc=(e,t)=>{Zo(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},oc=e=>{Zo(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},cc=e=>{Zo(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},lc=e=>{Zo(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},uc=(e,t)=>{let i,r;return t?(i=nc(e,!0),r=nc(e,!0)):(r=nc(e,!1),i=nc(e,!1)),4294967296*r+i},hc=e=>4294967296*oc(e)+oc(e),dc=e=>4294967296*lc(e)+oc(e),fc=e=>{const t=cc(e),i=(e=>{Zo(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},mc=e=>{Zo(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},pc=e=>{Zo(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},gc=(e,t)=>{Zo(e,t);let i="";for(let r=0;rQ.decode(ec(e,t)).split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!i?.ignore?.(e));var yc,bc,wc,Tc;(bc=yc||(yc={}))[bc.Unsynchronisation=128]="Unsynchronisation",bc[bc.ExtendedHeader=64]="ExtendedHeader",bc[bc.ExperimentalIndicator=32]="ExperimentalIndicator",bc[bc.Footer=16]="Footer",(Tc=wc||(wc={}))[Tc.ISO_8859_1=0]="ISO_8859_1",Tc[Tc.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",Tc[Tc.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",Tc[Tc.UTF_8=3]="UTF_8";const Sc=128,vc=10,Pc=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],Ic=(e,t)=>{var i;const r=e.filePos;t.raw??(t.raw={}),(i=t.raw).TAG??(i.TAG=ec(e,Sc-3)),e.filePos=r;const a=xc(e,30);a&&(t.title??(t.title=a));const s=xc(e,30);s&&(t.artist??(t.artist=s));const n=xc(e,30);n&&(t.album??(t.album=n));const o=xc(e,4),c=Number.parseInt(o,10);Number.isInteger(c)&&c>0&&(t.date??(t.date=new Date(String(c))));const l=ec(e,30);let u;if(0===l[28]&&0!==l[29]){const i=l[29];i>0&&(t.trackNumber??(t.trackNumber=i)),e.skip(-30),u=xc(e,28),e.skip(2)}else e.skip(-30),u=xc(e,30);u&&(t.comment??(t.comment=u));const h=tc(e);h{const i=ec(e,t),r=je(i.indexOf(0),i.length),a=i.subarray(0,r);let s="";for(let n=0;n{const t=e.filePos,i=gc(e,3),r=tc(e),a=tc(e),s=tc(e),n=oc(e);if("ID3"!==i||255===r||255===a||0!==(2155905152&n))return e.filePos=t,null;let o=Gi(n);return s&yc.Footer&&(o+=vc),{majorVersion:r,revision:a,flags:s,size:o}},Bc=(e,t,i)=>{var r,a,s,n,o;if(![2,3,4].includes(t.majorVersion))return void st._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&yc.Footer?t.size-vc:t.size,l=ec(e,c),u=new Ec(t,l);if(t.flags&yc.Unsynchronisation&&3===t.majorVersion&&u.ununsynchronizeAll(),t.flags&yc.ExtendedHeader){const e=u.readU32();3===t.majorVersion?u.pos+=e:u.pos+=e-4}for(;u.pos<=u.bytes.length-u.frameHeaderSize();){const e=u.readId3V2Frame();if(!e)break;const c=u.pos,l=u.pos+e.size;let h=!1,d=!1,f=!1;if(3===t.majorVersion?(h=!!(64&e.flags),d=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),d=!!(8&e.flags),f=!!(2&e.flags)||!!(t.flags&yc.Unsynchronisation)),h)st._warn(`Skipping encrypted ID3v2 frame ${e.id}`),u.pos=l;else if(d)st._warn(`Skipping compressed ID3v2 frame ${e.id}`),u.pos=l;else{if(f&&u.ununsynchronizeRegion(u.pos,l),i.raw??(i.raw={}),"TXXX"===e.id){const e=(r=i.raw).TXXX??(r.TXXX={}),t=u.readId3V2TextEncoding(),a=u.readId3V2Text(t,l),s=u.readId3V2Text(t,l);e[a]??(e[a]=s)}else"T"===e.id[0]?(a=i.raw)[s=e.id]??(a[s]=u.readId3V2EncodingAndText(l)):(n=i.raw)[o=e.id]??(n[o]=u.readBytes(e.size));switch(u.pos=c,e.id){case"TIT2":case"TT2":i.title??(i.title=u.readId3V2EncodingAndText(l));break;case"TIT3":case"TT3":i.description??(i.description=u.readId3V2EncodingAndText(l));break;case"TPE1":case"TP1":i.artist??(i.artist=u.readId3V2EncodingAndText(l));break;case"TALB":case"TAL":i.album??(i.album=u.readId3V2EncodingAndText(l));break;case"TPE2":case"TP2":i.albumArtist??(i.albumArtist=u.readId3V2EncodingAndText(l));break;case"TRCK":case"TRK":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.trackNumber??(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.tracksTotal??(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=u.readId3V2EncodingAndText(l).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(i.discNumber??(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(i.discsTotal??(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=u.readId3V2EncodingAndText(l);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==Pc[e]){i.genre??(i.genre=Pc[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==Pc[e]){i.genre??(i.genre=Pc[e]);break}}i.genre??(i.genre=e)}break;case"TDRC":case"TDAT":{const e=u.readId3V2EncodingAndText(l),t=new Date(e);Number.isNaN(t.getTime())||(i.date??(i.date=t))}break;case"TYER":case"TYE":{const e=u.readId3V2EncodingAndText(l),t=Number.parseInt(e,10);Number.isInteger(t)&&(i.date??(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.lyrics??(i.lyrics=u.readId3V2Text(e,l))}break;case"COMM":case"COM":{const e=u.readU8();u.pos+=3,u.readId3V2Text(e,l),i.comment??(i.comment=u.readId3V2Text(e,l))}break;case"APIC":case"PIC":{const e=u.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=u.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=u.readId3V2Text(e,l);const a=u.readU8(),s=u.readId3V2Text(e,l).trimEnd(),n=l-u.pos;if(n>=0){const e=u.readBytes(n);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===a?"coverFront":4===a?"coverBack":"unknown",description:s})}}break;default:u.pos+=e.size}u.pos=l}}};class Ec{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Gi(t);s(e)&&(i=e)}return this.pos=a,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case wc.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=je(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=je(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Q.decode(r.subarray(0,e))}case wc.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=je(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case wc.UTF_8:{const e=je(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Q.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class _c{constructor(e){this.host=e,this.closed=!1,this.resumes=new WeakMap}ensure(e){if(this.closed)return null;if(this.host.audioContext)return this.host.audioContext;const t=window.AudioContext||window.webkitAudioContext;let i;try{i=new t({sampleRate:e})}catch{i=new t}if(this.closed)return i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null;let r=null;try{r=i.createGain(),r.connect(i.destination);const e=this.host.muted?0:this.host.volume;return r.gain.value=e*e,this.closed?(r.disconnect(),i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null):(this.host.audioContext=i,this.host.gainNode=r,i)}catch(a){try{r?.disconnect()}catch(s){console.warn("MediaBunny gain setup cleanup:",s)}throw i.close().catch(e=>console.warn("MediaBunny context setup cleanup:",e)),a}}updateGain(){if(!this.host.gainNode)return;const e=this.host.muted?0:this.host.volume;this.host.gainNode.gain.value=e*e}resume(e){const t=this.resumes.get(e);if(t)return t;const i=e.resume();this.resumes.set(e,i);const r=()=>{this.resumes.get(e)===i&&this.resumes.delete(e)};return i.then(r,r),i}destroy(){if(this.closed)return;this.closed=!0;const{audioContext:e,gainNode:t}=this.host;this.host.audioContext=null,this.host.gainNode=null;try{t?.disconnect()}finally{e&&e.close().catch(e=>console.warn("MediaBunny context close error:",e))}}}class Rc{constructor(e){this.host=e}release(e,t){this.host.queuedNodes.delete(e),e.onended=null;let i,r=!1;try{t&&e.stop()}catch(a){r=!0,i=a}try{e.disconnect()}catch(a){r||(r=!0,i=a)}if(r)throw i}stop(){const e=[];for(const i of[...this.host.queuedNodes])try{this.release(i,!0)}catch(t){e.push(t)}if(e.length)throw e[0]}schedule({buffer:e,timestamp:t}){const i=this.host.audioContext,r=this.host.gainNode;if(!i||!r)return;const a=function(e,t,i,r){const a=e.audioContextStartTime+(t-e.playbackTimeAtStart)/e.playbackRate,s=(a+i/e.playbackRate-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;return{startAt:Math.max(a,r),offset:a=e.duration)return;const s=i.createBufferSource();this.host.queuedNodes.add(s);try{s.buffer=e,s.connect(r),s.playbackRate.value=this.host.playbackRate,s.onended=()=>{if(this.host.queuedNodes.has(s))try{this.release(s,!1)}catch(e){console.warn("MediaBunny ended node cleanup:",e)}},null===a.offset?s.start(a.startAt):s.start(a.startAt,a.offset),this.host.latestScheduledEndTime=Math.max(this.host.latestScheduledEndTime,a.endMediaTime)}catch(n){try{this.release(s,!0)}catch(o){console.warn("MediaBunny audio node cleanup:",o)}throw n}}}const Fc=Symbol("cancelled");class Ac{constructor(){this.cancelled=!1,this.waits=new Set,this.timers=new Map}wait(e){return new Promise((t,i)=>{const r=()=>t(Fc);this.cancelled?r():this.waits.add(r),e.then(e=>{this.waits.delete(r),t(e)},e=>{this.waits.delete(r),i(e)})})}delay(e){return this.cancelled?Promise.resolve(!1):new Promise(t=>{const i=setTimeout(()=>{this.timers.delete(i),t(!this.cancelled)},e);this.timers.set(i,t)})}cancel(){if(!this.cancelled){this.cancelled=!0;for(const e of this.waits)e();this.waits.clear();for(const[e,t]of this.timers)clearTimeout(e),t(!1);this.timers.clear()}}}function Mc(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}class Dc{constructor(e,t,i){this.host=e,this.contexts=t,this.nodes=i,this.task=null,this.closing=new WeakMap}async stopIterator(){const e=this.host.audioIterator;if(this.host.audioIterator=null,!e)return;let t=this.closing.get(e);t||(t=Promise.resolve().then(()=>e.return()).then(()=>{}),this.closing.set(e,t)),await t}cancel(){this.task?.cancel(),this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e))}async run(e){if(this.host.asyncId!==e)return;this.cancel();const t=this.host.audioSink,i=this.host.audioContext;if(!t||!i||this.host.paused||this.host.asyncId!==e)return;const r=new Ac;this.task=r;let a=null;const s=()=>!r.cancelled&&this.task===r&&this.host.asyncId===e&&!this.host.paused&&this.host.audioContext===i&&(!a||this.host.audioIterator===a);try{for(a=t.buffers(this.host.currentTime),this.host.audioIterator=a;s();){const e=[];let t=!1;for(let i=0;i<16;i++){const i=await r.wait(a.next());if(i===Fc||!s())return;if(i.done){t=!0;break}e.push(i.value)}if(e.length&&"suspended"===i.state){if(await r.wait(this.contexts.resume(i))===Fc||!s())return;Mc(this.host.events,s,["canplay","playing"])}for(const i of e){if(!s())return;this.nodes.schedule(i)}if(t)return;if(!(await r.delay(0))||!s())return;for(;this.host.latestScheduledEndTime-this.host.currentTime>1;)if(!(await r.delay(50))||!s())return}}catch(n){if(s())throw n}finally{r.cancel(),this.task===r&&(this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e)))}}}class Nc{constructor(e,h){N(this,u),N(this,t,!1),N(this,i,0),N(this,r),N(this,a),N(this,s),N(this,n,null),N(this,o,null),N(this,c,null),N(this,l),this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set,O(this,r,new _c(this)),O(this,a,new Rc(this)),O(this,s,new Dc(this,D(this,r),D(this,a))),O(this,l,h)}get currentTime(){return(e=this).paused||!e.audioContext?e.playbackTimeAtStart:(e.audioContext.currentTime-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;var e}ensureAudioContext(e){D(this,r).ensure(e)}updateGain(){D(this,r).updateGain()}stopQueuedNodes(){D(this,a).stop()}async stopIterator(){await D(this,s).stopIterator()}handleNoAudioTrack(){D(this,t)||(this.audioSink=null,this.ensureAudioContext())}cancelPending(){L(this,i)._++;try{this.pause()}finally{O(this,c,null),this.input=null,this.audioSink=null}}async load(e,r){if(D(this,t))return;this.cancelPending();const a=D(this,i);this.playbackTimeAtStart=0,this.audioContextStartTime=0,this.latestScheduledEndTime=0;const s=Promise.resolve().then(()=>z(this,u,h).call(this,e,a,r));O(this,c,s);try{await s}finally{D(this,c)===s&&O(this,c,null)}}async runIterator(e){D(this,t)||await D(this,s).run(e)}async play(){if(D(this,t))return;if(D(this,o))return D(this,o);if(!this.paused)return;const e=new Ac;O(this,n,e);const r=D(this,i),a=z(this,u,f).call(this,e,r);O(this,o,a);try{await a}finally{D(this,n)===e&&(O(this,n,null),O(this,o,null))}}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime),this.paused=!0,this.asyncId++,D(this,n)?.cancel(),O(this,n,null),O(this,o,null),D(this,s).cancel(),this.stopQueuedNodes()}async seek(e){if(D(this,t))return;const i=!this.paused;D(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext?.currentTime??0,this.latestScheduledEndTime=this.playbackTimeAtStart;const r=++this.asyncId;i&&z(this,u,d).call(this,r)}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(D(this,t)||e===this.playbackRate)return;const i=this.currentTime;D(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=i,this.audioContextStartTime=this.audioContext?.currentTime??0,this.playbackRate=e,this.latestScheduledEndTime=i;const r=++this.asyncId;this.paused||z(this,u,d).call(this,r)}destroy(){if(D(this,t))return;O(this,t,!0),L(this,i)._++;const e=[];for(const t of[()=>this.pause(),()=>D(this,r).destroy()])try{t()}catch(a){e.push(a)}if(this.input=null,this.audioSink=null,O(this,c,null),e.length)throw e[0]}}async function Oc(e){return await e.getAverageBitrate()??await e.getBitrate()??0}t=new WeakMap,i=new WeakMap,r=new WeakMap,a=new WeakMap,s=new WeakMap,n=new WeakMap,o=new WeakMap,c=new WeakMap,l=new WeakMap,u=new WeakSet,h=async function({input:e,audioTrack:r,duration:a},s,n){const o=()=>!D(this,t)&&D(this,i)===s;if(o()){this.input=e,this.duration=a;try{const e=r&&null!==r.codec&&await r.canDecode();if(!o())return;if(e){if(this.ensureAudioContext(r.sampleRate),!o())return;this.audioSink=new Ao(r)}else this.handleNoAudioTrack();o()&&n?.()}catch(c){if(o())throw c}}},d=function(e){this.runIterator(e).catch(i=>{if(!D(this,t)&&e===this.asyncId){try{this.pause()}catch(r){console.warn("MediaBunny audio failure cleanup:",r)}try{D(this,l)?D(this,l).call(this,i):this.events.emit("error",i)}catch(r){console.warn("MediaBunny audio error listener:",r)}}})},f=async function(e,a){const s=()=>!D(this,t)&&!e.cancelled&&D(this,i)===a;try{const t=D(this,r).ensure();if(!t||!s())return;if("suspended"===t.state){if(await e.wait(D(this,r).resume(t))===Fc||!s())return}if(D(this,c)){if(await e.wait(D(this,c))===Fc||!s())return}this.audioContextStartTime=t.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1,z(this,u,d).call(this,++this.asyncId)}catch(n){if(s())throw n}};const zc=/\.m3u8(?:$|[?#])/i;function Lc(e){return"string"===typeof e&&zc.test(e)}function Uc(e){const t=function(e){return"string"===typeof e?new Hs(e):e instanceof Blob?new Us(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new Ks(e):e??null}(e);return t?new $o({source:t,formats:Lc(e)?Mn:An}):null}class qc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){return this.controller?.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}async wait(e,t){try{await Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,e?.dispose()}cancel(){if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),this.controller?.abort(),this.disposeInput()}}}async function Wc({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),a=t||i,s=Boolean(a&&await a.isLive());let n=Number.NaN;return r.length>0&&(n=await e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==n||s||(n=await e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:n??Number.NaN}function Hc(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class Vc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null}operation(){return{...Hc(),source:this.host.loadSeq,complete:Hc()}}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,e?.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,e?.complete.resolve(),e?.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}async runPlay(e){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(await this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,await this.host.audio.play(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Mc(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}}seek(e,t){return this.position(async t=>{const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();await Promise.all([i,r])},["seeked"],!1,t)}replace(e,t){return this.position(async i=>{e.duration=await Wc(e),i()&&(this.host.media=e,await Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(await Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))},["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=r??(this.seeking?this.wanted:!this.host.paused),this.cancelPlay();const a=this.seeking,s=this.operation();return this.seeking=s,a?.complete.resolve(),a?.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}async runPosition(e,t,i,r){const a=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!a())return;if(this.host.ended=!1,this.host.seeking=!0,Mc(this.host.events,a,["seeking","waiting"]),!a())return;if(r||this.stop(),!a())return;if(await t(a),!a())return;if(this.host.seeking=!1,e.complete.resolve(),Mc(this.host.events,a,i),!a())return;this.seeking=null,s=this.wanted}catch(n){if(!a())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(n),n}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&await this.play()}}const jc=new WeakMap,Kc=new WeakMap;function Xc(e){const t=Kc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>e.value??null);Kc.set(e,i);const r=()=>{Kc.get(e)===i&&Kc.delete(e)};return i.then(r,r),i}function $c(e,t,i,r,a){const s=i?Math.max(.06,r/Math.max(1,a)):0;return i&&e{if(this.image===a&&t()){this.cancel();try{i(a)}catch(e){r(e)}}},a.onerror=()=>{this.image===a&&this.cancel()},a.src=e}}class Qc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}async update(e){const t=this.host.videoIterator;if(!t||!this.ready()||!this.current(e)||this.host.isFetching)return;const i={};this.fetching=i,this.host.isFetching=!0;const r=()=>this.current(e)&&this.host.videoIterator===t;try{for(;r();){const e=await Xc(t);if(!r()||!e)return;const i=this.host.audioClock?.currentTime;if(void 0===i)return;const a=$c(e.timestamp,i,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==a){if("draw"!==a)return void(this.host.nextFrame=e);this.draw(e)}}}catch(a){if(r())throw a}finally{this.fetching===i&&(this.fetching=null,this.host.isFetching=!1)}}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Mc(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Mc(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!D(this,w),e=>z(this,P,E).call(this,e,!0),e=>z(this,P,C).call(this,e)))}async preflight(e,t,i){return async function(e,t,i,r,a=()=>!0){if(r?.aborted||!a())return!1;if(!t||"string"!==typeof e||Lc(e))return!0;try{const t=await fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if(r?.aborted||!a())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!(r?.aborted||!a())&&(console.warn("Preflight check failed:",s),!0)}}(e,this.preflightRange,this.events,t,i)}drawPoster(){if(D(this,b)||!this.poster||this.posterDrawn)return;const e=D(this,m);D(this,T).draw(this.poster,()=>z(this,P,I).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,z(this,P,x).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>z(this,P,C).call(this,e))}async stopIterator(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,await function(e){if(!e)return Promise.resolve();const t=jc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return jc.set(e,i),i}(e)}clear(){z(this,P,x).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){L(this,m)._++,L(this,p)._++,this.stop(),z(this,P,B).call(this),D(this,T).cancel(),O(this,w,!1),O(this,g,null),O(this,k,null),O(this,y,null),this.videoSink=null,this.input=null}async load(e,t){if(D(this,b))return;this.cancelPending();const i=D(this,m),r=D(this,p);O(this,w,!0);const a=Promise.resolve().then(()=>z(this,P,_).call(this,e,i,r,t));O(this,g,a);try{await a}finally{D(this,g)===a&&O(this,g,null)}}handleNoVideoTrack(){D(this,b)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}async resetIterator(e){if(D(this,b))return;const t=D(this,m),i=++L(this,p)._,r=D(this,g);this.stop(),D(this,T).cancel(),O(this,w,!0);try{r&&await r,await z(this,P,R).call(this,e,t,i)}catch(a){if(z(this,P,I).call(this,t)&&D(this,p)===i)throw z(this,P,B).call(this),a}finally{z(this,P,I).call(this,t)&&D(this,p)===i&&O(this,w,!1)}}async updateNextFrame(e){await D(this,S).update(e)}render(){D(this,S).render()}start(e){D(this,S).start(e)}stop(){D(this,S).stop()}async seek(e){await this.resetIterator(e)}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){D(this,b)||(O(this,b,!0),L(this,m)._++,D(this,S).destroy(),D(this,T).cancel(),z(this,P,B).call(this),this.posterDrawn=!1,O(this,k,null),O(this,y,null),this.videoSink=null,this.input=null,this.audioClock=null)}}m=new WeakMap,p=new WeakMap,g=new WeakMap,k=new WeakMap,y=new WeakMap,b=new WeakMap,w=new WeakMap,T=new WeakMap,S=new WeakMap,v=new WeakMap,P=new WeakSet,I=function(e){return!D(this,b)&&D(this,m)===e},x=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},C=function(e){D(this,b)||(z(this,P,B).call(this),D(this,v)?D(this,v).call(this,e):this.events.emit("error",e))},B=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},E=function(e,t){D(this,T).cancel(),t&&this.clear(),z(this,P,x).call(this).drawImage(e.canvas,0,0)},_=async function(e,t,i,r){if(z(this,P,I).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:a,videoTrack:s,duration:n}=e;if(this.input=a,this.duration=n,!s)return this.handleNoVideoTrack(),void r?.();const o=null!==s.codec&&await s.canDecode();if(!z(this,P,I).call(this,t))return;if(!o)return this.handleNoVideoTrack(),void r?.();const c=await s.canBeTransparent();if(!z(this,P,I).call(this,t))return;O(this,k,()=>new Eo(s,{poolSize:2,fit:"contain",alpha:c})),this.videoSink=D(this,k).call(this),this.width=s.displayWidth,this.height=s.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,r?.(),z(this,P,I).call(this,t)&&await z(this,P,R).call(this,0,t,i)}catch(a){if(z(this,P,I).call(this,t))throw z(this,P,B).call(this),a}finally{z(this,P,I).call(this,t)&&D(this,p)===i&&O(this,w,!1)}},R=async function(e,t,i){if(!z(this,P,I).call(this,t)||D(this,p)!==i)return;z(this,P,B).call(this),D(this,k)&&this.videoSink===D(this,y)&&(this.videoSink=D(this,k).call(this));const r=this.videoSink;if(!r||!z(this,P,I).call(this,t))return;O(this,y,r);const a=r.canvases(e);this.videoIterator=a;const s=()=>z(this,P,I).call(this,t)&&D(this,p)===i&&this.videoIterator===a,n=await Xc(a);if(!s())return;const o=await Xc(a);s()&&(this.nextFrame=o,n?z(this,P,E).call(this,n,!1):this.drawPoster())};class Jc{constructor({canvas:e,ctx:t,events:i,option:r={}}){N(this,F),this.events=i,this.option=r,this.audio=new Nc(i,e=>{try{this.pause()}catch(t){console.warn("MediaBunny audio coordinator cleanup:",t)}this.reportError(e)}),this.video=new Yc({canvas:e,ctx:t,events:i,timeupdateInterval:r.timeupdateInterval??250,avSyncTolerance:r.avSyncTolerance??.12,dropLateFrames:r.dropLateFrames??!1,poster:r.poster??"",preflightRange:r.preflightRange??!1,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,O(this,F,new Vc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,D(this,F).ended(),this.audio.pause())})}async load(e){if(this.destroyed)return;const t=++this.loadSeq;if(D(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),this.loadSession?.cancel(),t!==this.loadSeq||this.destroyed)return;if(this.pause(),t!==this.loadSeq||this.destroyed)return;this.disposeInput();const i=new qc;this.loadSession=i,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,i.defer(()=>this.events.emit("waiting")),i.defer(()=>this.events.emit("loadstart"));const r=Number.isFinite(this.option.loadTimeout)?this.option.loadTimeout??0:0;try{await i.wait(this.performLoad(e,t,i),r)}catch(a){if(t!==this.loadSeq)return;const e=++this.loadSeq;if(D(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),i.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}}async performLoad(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(await this.video.preflight(e,i.signal,r))||!r())return;const a=Uc(e);if(!a)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(a);const s=await async function(e,t){const i=await e.getPrimaryVideoTrack(),r=i?await i.getPrimaryPairableAudioTrack():await e.getPrimaryAudioTrack(),a=await Wc({input:e,videoTrack:i,audioTrack:r}),s=i||r,n=Lc(t);return{input:e,videoTrack:i,audioTrack:r,duration:a,isLive:!Number.isFinite(a)&&Boolean(s&&await s.isLive()),isHls:n,videoMode:n?"auto":"manual",audioMode:n?"auto":"manual"}}(a,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=a,this.media=s;const n=function(e,t){let i=!1,r=!1,a=!1;function s(s){t()&&!a&&("video"===s?i=!0:r=!0,i&&r&&(a=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Mc(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,n.video),t=r()?this.audio.load(s,n.audio):Promise.resolve();if(await Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Mc(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){this.loadSession?.disposeInput(),this.input=null,this.media=null}async replaceTracks(e){if(this.media&&!this.destroyed)return D(this,F).replace({...this.media,...e},this.currentTime)}async selectHlsQuality(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getVideoTracks();if(!s())return;const a="auto"===t?await i.getPrimaryVideoTrack():e.find(e=>e.id===t)??r.videoTrack;if(!s()||!a)return;let o=r.audioTrack,c=r.audioMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableAudioTrack(),c="auto"),n={videoTrack:a,audioTrack:o,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async selectHlsAudio(e){return async function(e,t){const{input:i,media:r,loadSeq:a}=e;if(!r?.isHls||!i||e.destroyed)return;const s=()=>!e.destroyed&&e.loadSeq===a&&e.input===i&&e.media===r;let n;try{const e=await i.getAudioTracks();if(!s())return;const a="auto"===t?r.videoTrack?await r.videoTrack.getPrimaryPairableAudioTrack():await i.getPrimaryAudioTrack():e.find(e=>e.id===t)??r.audioTrack;if(!s()||!a)return;let o=r.videoTrack,c=r.videoMode;o&&a.canBePairedWith(o)||(o=await a.getPrimaryPairableVideoTrack(),c="auto"),n={videoTrack:o,audioTrack:a,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(o){if(!s())return;throw o}s()&&await e.replaceTracks(n)}(this,e)}async getHlsState(){const e=this.media;if(this.destroyed)return null;try{const t=await async function(e){if(!e?.isHls||!e.input)return null;const[t,i]=await Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[r,a]=await Promise.all([Promise.all(t.map(async(e,t)=>({id:e.id,track:e,index:t,name:await e.getName(),height:await e.getDisplayHeight(),bitrate:await Oc(e)}))),Promise.all(i.map(async(e,t)=>{const i=await e.getName(),r=await e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:await Oc(e)}}))]);return{levels:r,audios:a,currentLevel:e.videoTrack?r.find(t=>t.id===e.videoTrack?.id)??null:null,currentAudio:e.audioTrack?a.find(t=>t.id===e.audioTrack?.id)??null:null,videoMode:e.videoMode??"auto",audioMode:e.audioMode??"auto"}}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}}async play(){return D(this,F).play()}pause(){D(this,F).pause()}async seek(e){return D(this,F).seek(e)}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,D(this,F).invalidate();const e=[];for(const i of[()=>this.loadSession?.cancel(),()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){return this.media?.duration??this.audio.duration??this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}F=new WeakMap;const Zc=new WeakMap;function el(e){let t=Zc.get(e);return t||(t={closed:!1,frames:new Set},Zc.set(e,t)),t}class tl{constructor({art:e,canvas:t,ctx:i,option:r}){this.art=e,this.canvas=t,this.option=r,this.events=new q,this.engine=new Jc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=r.volume??.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:e.option?.url&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=el(e);if(i.closed)return 0;const r=requestAnimationFrame(a=>{i.frames.delete(r),i.closed||t(a,{presentationTime:e.engine.currentTime,expectedDisplayTime:a+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:a,receiveTime:a,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){el(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=el(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,a=r("canvas"),s=a.getContext("2d"),n=new tl({art:t,canvas:a,ctx:s,option:e});t.mediabunny=n;const o={};for(const e in a)"function"===typeof a[e]&&(o[e]=a[e].bind(a));const c=new Set([...Object.getOwnPropertyNames(n),...Object.getOwnPropertyNames(Object.getPrototypeOf(n))]);for(const e of c)"constructor"!==e&&(e in a||Object.defineProperty(a,e,{get(){const t=n[e];return"function"===typeof t?t.bind(n):t},set(t){n[e]=t},configurable:!0,enumerable:!0}));for(const e in o)a[e]=(...t)=>o[e](...t);function l(){const e=t.template?.$player;e&&!t.option.autoSize&&Object.assign(a.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",l),t.on("video:loadedmetadata",l),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function a(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),a("mediabunny-quality")}function n(){r("mediabunny-audio"),a("mediabunny-audio")}function o(e={}){return e.control||e.setting}async function c(r){const a=i.m3u8?.quality||{};if(!o(a)||!r?.levels.length)return void s();const n=a.auto||"Auto",c=a.title||"Quality",l=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?l(r.currentLevel):n,d=U(r.levels.map(e=>({html:l(e),value:e.id,default:r.currentLevel?.id===e.id})),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),a=r.levels.find(e=>e.id===t.value);return(a?.height||0)-(i?.height||0)});d.push({html:n,value:"auto",default:!r.currentLevel});const f=async i=>(await t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:d,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:d,onSelect:f})}async function l(r){const a=i.m3u8?.audio||{};if(!o(a)||!r?.audios.length||r.audios.length<2)return void n();const s=a.auto||"Auto",c=a.title||"Audio",l=a.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?l(r.currentAudio):s,d=U(r.audios.map(e=>({html:l(e),value:e.id,default:r.currentAudio?.id===e.id})),"html");d.push({html:s,value:"auto",default:!r.currentAudio});const f=async i=>(await t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,await u(),i.html);a.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:d,onSelect:f}),a.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:d,onSelect:f})}async function u(){const e=await t.getM3u8State();if(!e)return s(),void n();await Promise.all([c(e),l(e)])}}({art:t,shim:n,option:e}),t.on("destroy",()=>{delete t.mediabunny,n.destroy()}),a}}}); diff --git a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js index b8aed882d..8fcdbb50d 100644 --- a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js +++ b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js @@ -4,4 +4,4 @@ * (c) 2017-2026 Harvey Zhao * Released under the MIT License. */ -!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T=Object.defineProperty,v=Object.defineProperties,S=Object.getOwnPropertyDescriptors,w=Object.getOwnPropertySymbols,P=Object.prototype.hasOwnProperty,I=Object.prototype.propertyIsEnumerable,x=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),C=e=>{throw TypeError(e)},B=Math.pow,E=(e,t,i)=>t in e?T(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,_=(e,t)=>{for(var i in t||(t={}))P.call(t,i)&&E(e,i,t[i]);if(w)for(var i of w(t))I.call(t,i)&&E(e,i,t[i]);return e},R=(e,t)=>v(e,S(t)),F=(e,t,i)=>t.has(e)||C("Cannot "+i),A=(e,t,i)=>(F(e,t,"read from private field"),i?i.call(e):t.get(e)),D=(e,t,i)=>t.has(e)?C("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),M=(e,t,i,r)=>(F(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),N=(e,t,i)=>(F(e,t,"access private method"),i),O=(e,t,i,r)=>({set _(r){M(e,t,r,i)},get _(){return A(e,t,r)}}),z=(e,t,i)=>new Promise((r,n)=>{var s=e=>{try{o(i.next(e))}catch(t){n(t)}},a=e=>{try{o(i.throw(e))}catch(t){n(t)}},o=e=>e.done?r(e.value):Promise.resolve(e.value).then(s,a);o((i=i.apply(e,t)).next())}),L=function(e,t){this[0]=e,this[1]=t},U=(e,t,i)=>{var r,n=(e,t,r,s)=>{try{var a=i[e](t),o=(t=a.value)instanceof L,l=a.done;Promise.resolve(o?t[0]:t).then(i=>o?n("return"===e?e:"next",t[1]?{done:i.done,value:i.value}:i,r,s):r({value:i,done:l})).catch(e=>n("throw",e,r,s))}catch(c){s(c)}},s=(e,t,i,s)=>a[e]=a=>(t=new Promise((t,i,s)=>(s=()=>n(e,a,t,i),r?r.then(s):s())),s=()=>r===i&&(r=0),r=i=t.then(s,s),t),a={};return i=i.apply(e,t),a[x("asyncIterator")]=()=>a,s("next"),s("throw"),s("return"),a},q=e=>{var t,i=e[x("asyncIterator")],r=!1,n={};return null==i?(i=e[x("iterator")](),t=e=>n[e]=t=>i[e](t)):(i=i.call(e),t=e=>n[e]=t=>{if(r){if(r=!1,"throw"===e)throw t;return t}return r=!0,{done:!1,value:new L(new Promise(r=>{var n=i[e](t);n instanceof Object||C("Object expected"),r(n)}),1)}}),n[x("iterator")]=()=>n,t("next"),"throw"in i?t("throw"):n.throw=e=>{throw e},"return"in i&&t("return"),n},W=(e,t,i)=>(t=e[x("asyncIterator")])?t.call(e):(e=e[x("iterator")](),t={},(i=(i,r)=>(r=e[i])&&(t[i]=t=>new Promise((i,n,s)=>(t=r.call(e,t),s=t.done,Promise.resolve(t.value).then(e=>i({value:e,done:s}),n)))))("next"),i("return"),t);function H(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class V{constructor(){D(this,e,!1),this.listeners=new Map}addEventListener(t,i){var r;A(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),null==(r=this.listeners.get(t))||r.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){var r;if(A(this,e))return;const n=Object.assign(new Event(t),{detail:i});null==(r=this.listeners.get(t))||r.forEach(t=>{A(this,e)||t(n)})}destroy(){M(this,e,!0),this.listeners.clear()}}function j(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const K=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},X=e=>e&&e[e.length-1],$=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-B(2,r))},Q=e=>{const t=$(e);return 0===(1&t)?-(t>>1):t+1>>1},Y=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),J=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Z=new TextDecoder,ee=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),te={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},ie=ee(te),re={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ne=ee(re),se={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},ae=ee(se),oe=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,le={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},ce=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class ue{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}acquire(){return z(this,null,function*(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,yield i,e})}}const de=/^[0-9a-fA-F]+$/,he=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),fe=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,me=(e,t,i)=>{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+n>>1,o=i(e[a]);o===t?(s=a,n=a-1):o{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+(n-r+1)/2|0;i(e[a])<=t?(s=a,r=a+1):n=a-1}return s},ge=(e,t,i)=>{const r=pe(e,i(t),i);e.splice(r+1,0,t)},ke=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},ye=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},be=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},Te=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},ve=e=>{throw new Error(`Unexpected value: ${e}`)},Se=(e,t,i)=>{const r=e.getUint8(t),n=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|n<<8|s<<16:r<<16|n<<8|s},we=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Pe=(e,t)=>({next(){return z(this,null,function*(){const i=yield e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}})},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),Ie=(e,t,i)=>Math.max(t,Math.min(i,e)),xe="und",Ce=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},Be=(e,t)=>Math.round(e/t)*t,Ee=(e,t)=>Math.round(e*t)/t,_e=(e,t)=>Math.floor(e/t)*t,Re=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},Fe=/^[a-z]{3}$/,Ae=e=>Fe.test(e),De=1e6*(1+Number.EPSILON),Me=(e,t)=>{const i=_(_({},e),t);if(e.headers||t.headers){const r=e.headers?Ne(e.headers):{},n=t.headers?Ne(t.headers):{},s=_({},r);Object.entries(n).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ne=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Oe=(e,t,i,r,n)=>z(null,null,function*(){let s=0;for(;;)try{return yield e(t,i)}catch(a){if(n())throw a;s++;const e=r(s,a,t);if(null===e)throw a;if(lt._error("Retrying failed fetch. Error:",a),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&(yield nt(1e3*e)),n())throw a}});class ze{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Le=null;const Ue=()=>{var e;return null!==Le?Le:Le=!("undefined"===typeof navigator||!((null==(e=navigator.vendor)?void 0:e.match(/apple/i))||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)))};let qe=null;const We=()=>{var e;return null!==qe?qe:qe="undefined"!==typeof navigator&&(null==(e=navigator.userAgent)?void 0:e.includes("Firefox"))};let He=null;const Ve=()=>{var e;return null!==He?He:He=!("undefined"===typeof navigator||!(null==(e=navigator.vendor)?void 0:e.includes("Google Inc"))&&!/Chrome/.test(navigator.userAgent))},je=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,Ke=z(null,null,function*(){}).constructor,Xe=e=>e instanceof Ke||e instanceof Promise||"function"===typeof(null==e?void 0:e.then),$e=(e,t)=>-1!==e?e:t,Ge=(e,t,i,r)=>e<=r&&i<=t,Qe=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{null!=Symbol.dispose||(Symbol.dispose=Symbol("Symbol.dispose"))},Je=e=>"number"===typeof e&&!Number.isNaN(e),Ze=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const n=e.indexOf("/",r+3);i=-1===n?e+t:e.slice(0,n)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const n=i.indexOf("://");if(-1!==n){const e=i.indexOf("/",n+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),a=[];for(const o of s)".."===o?a.pop():"."!==o&&a.push(o);return r+a.join("/")},et=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let n=0;n{j(Number.isInteger(e.num)),j(Number.isInteger(e.den)),j(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},rt=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},nt=e=>new Promise(t=>setTimeout(t,e));class st{constructor(){this._listeners=new Map}on(e,t,i){var r;this._listeners.has(e)||this._listeners.set(e,new Set);const n={fn:t,once:null!=(r=null==i?void 0:i.once)&&r};return this._listeners.get(e).add(n),()=>{var t;null==(t=this._listeners.get(e))||t.delete(n)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(n){console.error(n)}s.once&&r.delete(s)}}}var at,ot;(ot=at||(at={}))[ot.Silent=0]="Silent",ot[ot.Errors=1]="Errors",ot[ot.Warnings=2]="Warnings",ot[ot.Info=3]="Info";class lt{constructor(){}static get level(){return lt._level}static set level(e){if(e!==at.Silent&&e!==at.Errors&&e!==at.Warnings&&e!==at.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");lt._level=e}static get _emitter(){var e;return null!=(e=lt._emitterInstance)?e:lt._emitterInstance=new st}static on(e,t,i){return lt._emitter.on(e,t,i)}static _error(...e){lt._emitter._emit("error",e),lt._level>=at.Errors&&console.error(...e)}static _warn(...e){lt._emitter._emit("warn",e),lt._level>=at.Warnings&&console.warn(...e)}static _info(...e){lt._emitter._emit("info",e),lt._level>=at.Info&&console.info(...e)}}lt._level=at.Info,lt._emitterInstance=null;class ct{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class ut{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const dt={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class ht{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){var e;const t=Math.floor(this.pos/8),i=null!=(e=this.bytes[t])?e:0,r=7-(7&this.pos),n=(i&1<>r;return this.pos++,n}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){var e;if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const t=this.pos/8,i=null!=(e=this.bytes[t])?e:0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new ht(this.bytes);return e.pos=this.pos,e}}const ft=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],mt=[-1,1,2,3,4,5,6,8],pt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new ht(e),i=gt(t),{frequencyIndex:r,sampleRate:n}=kt(t),s=t.readBits(4);let a=null;s>=1&&s<=7&&(a=mt[s]);let o=i,l=!1,c=n;if(5===i||29===i)l=29===i,c=kt(t).sampleRate,o=gt(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===gt(t)&&t.readBits(1)&&(c=kt(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(l=!!t.readBits(1)));break}t.pos=e+1}return null!==a&&a>1&&(l=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:c,outputNumberOfChannels:l&&1===a?2:a}},gt=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},kt=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let n=0;t+3i&&(yield{offset:i,length:t-i}),i=t+n,t=i):t++}-1!==i&&i{if(t.description){const i=3&Y(t.description)[4];return It(e,i+1)}return Pt(e)},Ct=e=>31&e,Bt=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+Et.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const n of e)i.set(Et,r),r+=Et.byteLength,i.set(n,r),r+=n.byteLength;return i},Rt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let n=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(n,s.byteLength);break;case 2:e.setUint16(n,s.byteLength,!1);break;case 3:we(e,n,s.byteLength);break;case 4:e.setUint32(n,s.byteLength,!1)}n+=t,r.set(s,n),n+=s.byteLength}return r},Ft=e=>{try{const t=[],i=[],r=[];for(const o of Pt(e)){const n=e.subarray(o.offset,o.offset+o.length),s=Ct(n[0]);s===Tt.SPS?t.push(n):s===Tt.PPS?i.push(n):s===Tt.SPS_EXT&&r.push(n)}if(0===t.length)return null;if(0===i.length)return null;const n=t[0],s=Nt(n);j(null!==s);const a=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?r:null}}catch(t){return lt._error("Error building AVC Decoder Configuration Record:",t),null}},At=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=J(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=t.getUint8(i++),a=t.getUint8(i++),o=3&t.getUint8(i++),l=31&t.getUint8(i++),c=[];for(let f=0;f{var t;try{const i=Bt(e),r=new ht(i);r.skipBits(1),r.skipBits(2);if(7!==r.readBits(5))return null;const n=r.readAlignedByte(),s=r.readAlignedByte(),a=r.readAlignedByte();$(r);let o=1,l=0,c=0,u=0;if(100===n||110===n||122===n||244===n||44===n||83===n||86===n||118===n||128===n){o=$(r),3===o&&(u=r.readBits(1)),l=$(r),c=$(r),r.skipBits(1);if(r.readBits(1))for(let e=0;e<(3!==o?8:12);e++){if(r.readBits(1)){const t=e<6?16:64;let i=8,n=8;for(let e=0;ee.level>=a))?t:X(Ai),n=Math.min(Math.floor(r.maxDpbMbs/(e*i)),16);P=n,I=n}else P=0,I=0}return j(null!==I),{emulationUnpreventedBytes:i,profileIdc:n,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:o,bitDepthLumaMinus8:l,bitDepthChromaMinus8:c,codedWidth:m,codedHeight:p,displayWidth:g,displayHeight:k,pixelAspectRatio:w,colourPrimaries:b,matrixCoefficients:v,transferCharacteristics:T,fullRangeFlag:S,numReorderFrames:P,maxDecFrameBuffering:I,vuiParametersFlagBitOffset:B,bitstreamRestrictionFlagBitOffset:x,bitstreamRestrictionFlag:C}}catch(i){return lt._error("Error parsing AVC SPS:",i),null}},Ot=e=>{const t=$(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)$(e),$(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},zt=e=>{j(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new ht(e.emulationUnpreventedBytes),r=new ht(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(j(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),G(r,2),G(r,1),G(r,16),G(r,16),G(r,e.numReorderFrames),G(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const n=r.pos/8;return j(Number.isInteger(n)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,n))},Lt=(e,t)=>{if(t.description){const i=3&Y(t.description)[21];return It(e,i+1)}return Pt(e)},Ut=e=>e>>1&63,qt=e=>{try{const t=new ht(Bt(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:o,general_constraint_indicator_flags:l,general_level_idc:c}=Ht(t,i);$(t);const u=$(t);let d=0;3===u&&(d=t.readBits(1));const h=$(t),f=$(t);let m=h,p=f;if(t.readBits(1)){const e=$(t),i=$(t),r=$(t),n=$(t);let s=1,a=1;const o=0===d?u:0;1===o?(s=2,a=2):2===o&&(s=2,a=1),m-=(e+i)*s,p-=(r+n)*a}const g=$(t),k=$(t);$(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)$(t),b=$(t),$(t);$(t),$(t),$(t),$(t),$(t),$(t),t.readBits(1)&&t.readBits(1)&&Vt(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),$(t),$(t),t.skipBits(1));const T=$(t);if(jt(t,T),t.readBits(1)){const e=$(t);for(let i=0;i{try{const t=[],i=[],r=[],n=[];for(const l of Pt(e)){const s=e.subarray(l.offset,l.offset+l.length),a=Ut(s[0]);a===St.VPS_NUT?t.push(s):a===St.SPS_NUT?i.push(s):a===St.PPS_NUT?r.push(s):a!==St.PREFIX_SEI_NUT&&a!==St.SUFFIX_SEI_NUT||n.push(s)}if(0===i.length||0===r.length)return null;const s=qt(i[0]);if(!s)return null;let a=0;if(r.length>0){const e=r[0],t=new ht(Bt(e));t.skipBits(16),$(t),$(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),$(t),$(t),Q(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&$(t),Q(t),Q(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),n=t.readBits(1);a=i||n?i&&!n?2:!i&&n?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:St.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:St.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:St.PPS_NUT,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Ut(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return lt._error("Error building HEVC Decoder Configuration Record:",t),null}},Ht=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),n=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=e.readBits(8);const o=e.readBits(8),l=[],c=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&Q(e);for(let t=0;t{const i=[];for(let r=0;r{var n;let s=0,a=0,o=0;if(0!==t&&(a=e.readBits(1)),a){if(t===i){o=t-($(e)+1)}else o=t-1;e.readBits(1),$(e);const a=null!=(n=r[o])?n:0;for(let t=0;t<=a;t++){e.readBits(1)||e.readBits(1)}s=r[o]}else{const t=$(e),i=$(e);for(let r=0;r{let i=2,r=2,n=2,s=0,a=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=Mt[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),n=e.readBits(8))),e.readBits(1)&&($(e),$(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&($(e),$(e),$(e),$(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&$(e),e.readBits(1)&&$t(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=$(e),$(e),$(e),$(e),$(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},$t=(e,t,i)=>{let r=!1,n=!1,s=!1;r=1===e.readBits(1),n=1===e.readBits(1),(r||n)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let a=0;a<=i;a++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?$(e):i=1===e.readBits(1);let a=1;if(!i){a=$(e)+1}r&&Gt(e,a,s),n&&Gt(e,a,s)}},Gt=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=Qt.audAllowed;for(const s of Lt(e,t)){if(r===Qt.noMoreDataAllowed){i.add(s.offset);continue}const t=Ut(e[s.offset]);if(r===Qt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let n=!1;35===t?r>Qt.audAllowed?n=!0:r=Qt.beforeFirstVcl:t<=31?r>Qt.afterFirstVcl?n=!0:r=Qt.afterFirstVcl:36===t?r!==Qt.afterFirstVcl?n=!0:r=Qt.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>Qt.beforeFirstVcl?n=!0:r=Qt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&Y(t.description)[21];return Rt(e,i+1)}return _t(e)})(n,t)},Zt={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},ei=e=>{var t,i,r;const n=new ht(e);if(2!==n.readBits(2))return null;const s=n.readBits(1),a=(n.readBits(1)<<1)+s;3===a&&n.skipBits(1);if(1===n.readBits(1))return null;if(0!==n.readBits(1))return null;n.skipBits(2);if(4817730!==n.readBits(24))return null;let o=8;if(a>=2){o=n.readBits(1)?12:10}const l=n.readBits(3);let c=0,u=0;if(7!==l){if(u=n.readBits(1),1===a||3===a){const e=n.readBits(1),t=n.readBits(1);c=e||t?e&&!t?2:1:3,n.skipBits(1)}else c=1}else c=3,u=1;const d=(n.readBits(16)+1)*(n.readBits(16)+1);let h=X(Di).level;for(const m of Di)if(d<=m.maxPictureSize){h=m.level;break}const f=Zt[l];return{profile:a,level:h,bitDepth:o,chromaSubsampling:c,videoFullRangeFlag:u,colourPrimaries:null!=(t=null==f?void 0:f.colourPrimaries)?t:2,transferCharacteristics:null!=(i=null==f?void 0:f.transferCharacteristics)?i:2,matrixCoefficients:null!=(r=null==f?void 0:f.matrixCoefficients)?r:2}},ti=function*(e){const t=new ht(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*B(2,7*i),!(128&r))break;if(7===i&&128&r)return null}return e>B(2,32)-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),n=t.readBits(1),s=t.readBits(1);let a;if(t.skipBits(1),n&&t.skipBits(8),s){const e=i();if(null===e)return;a=e}else a=Math.floor(t.getBitsLeft()/8);j(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+a)},t.skipBits(8*a)}},ii=e=>{for(const{type:t,data:i}of ti(e)){if(1!==t)continue;const e=new ht(i),r=e.readBits(3);e.readBits(1);const n=e.readBits(1);let s=0,a=0,o=0;if(n)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let n=0;n<=r;n++){e.skipBits(12);const r=e.readBits(5);if(0===n&&(s=r),r>7){const t=e.readBits(1);0===n&&(a=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const l=e.readBits(4),c=e.readBits(4),u=l+1;e.skipBits(u);const d=c+1;e.skipBits(d);let h=0;if(h=n?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!n){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,T=1,v=1,S=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,T=0,v=0):(b=e.readBits(1),0===r?(T=1,v=1):1===r?(T=0,v=0):12===m?(T=e.readBits(1),v=T?e.readBits(1):0):(T=1,v=0),T&&v&&(S=e.readBits(2))),{profile:r,level:s,tier:a,bitDepth:m,monochrome:p,chromaSubsamplingX:T,chromaSubsamplingY:v,chromaSamplePosition:S,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},ri=e=>{if(e.length<36)return null;const t=J(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ni=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],si=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){n=r.pos;break}if(0===n)throw new Error("Invalid Setup header: framing bit not found.");let s=0,a=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),n=r.readBits(16);if(t>63||0!==i||0!==n){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(a=!0,o=s)}if(!a)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const l=o;r.pos=0,r.skipBits(n);const c=Array(l).fill(0);for(let u=l-1;u>=0;u--)r.skipBits(40),c[u]=r.readBits(1);return{modeBlockflags:c}},ai=(e,t,i)=>{switch(e){case"avc":for(const e of xt(i,t)){const t=i[e.offset],r=Ct(t);if(r>=Tt.NON_IDR_SLICE&&r<=Tt.SLICE_DPC)return"delta";if(r===Tt.IDR)return"key";if(r===Tt.SEI&&!Ve()){const t=i.subarray(e.offset,e.offset+e.length),r=Bt(t);let n=1;do{let e=0;for(;;){const t=r[n++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[n++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new ht(r);e.pos=8*n;const t=$(e),i=e.readBits(1);if(0===t&&1===i)return"key"}n+=t}while(n{var i,r;const n=J(e);let s=0;const a=n.getUint32(s,!0);s+=4;const o=Z.decode(e.subarray(s,s+a));s+=a,a>0&&(null!=t.raw||(t.raw={}),null!=(i=t.raw).vendor||(i.vendor=o));const l=n.getUint32(s,!0);s+=4;for(let c=0;c0&&(null!=t.trackNumber||(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.tracksTotal||(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.tracksTotal||(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=c.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=t.discNumber||(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.discsTotal||(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.discsTotal||(t.discsTotal=e))}break;case"DATE":{const e=new Date(c);Number.isNaN(e.getTime())||null!=t.date||(t.date=e)}break;case"GENRE":null!=t.genre||(t.genre=c);break;case"METADATA_BLOCK_PICTURE":{const e=Qe(c),i=J(e),r=i.getUint32(0,!1),n=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+n)),a=i.getUint32(8+n,!1),o=Z.decode(e.subarray(12+n,12+n+a)),l=i.getUint32(n+a+28),u=e.subarray(n+a+32,n+a+32+l);null!=t.images||(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},ui=[2,1,2,3,3,4,4,5],di=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new ht(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),n=t.readBits(5);if(n>8)return null;const s=t.readBits(3),a=t.readBits(3);0!==(1&a)&&1!==a&&t.skipBits(2),0!==(4&a)&&t.skipBits(2),2===a&&t.skipBits(2);return{fscod:i,bsid:n,bsmod:s,acmod:a,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},hi=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],fi=[1,2,3,6],mi=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new ht(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),n=t.readBits(2);let s,a=0;3===n?(a=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),l=t.readBits(1),c=t.readBits(5);if(c<11||c>16)return null;const u=fi[s];let d;d=n<3?yt[n]/1e3:bt[a]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:n,fscod2:a,bsid:c,bsmod:0,acmod:o,lfeon:l,numDepSub:0,chanLoc:0}]}},pi=e=>{const t=e.substreams[0];return j(t),t.fscod<3?yt[t.fscod]:null!==t.fscod2&&t.fscod2<3?bt[t.fscod2]:null},gi=e=>{const t=e.substreams[0];j(t);let i=ui[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},ki=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],yi=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],bi=[16,16,20,20,0,24,24,0],Ti=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],vi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],Si=[32e3,44100,48e3,0],wi=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Pi=[512,1024,2048,4096],Ii=e=>{const t=Ci(e),i=J(e);let r=t?4*Math.ceil(t.frameSize/4):0,n=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=Bi(e.subarray(r));if(!t)break;null!=n||(n=t),r+=t.frameSize}if(t)return{frameSize:n?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==n};if(!(null==n?void 0:n.asset))return null;const{asset:s}=n;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},xi=e=>{const t=Ii(e);return(null==t?void 0:t.core)?t.hasExtensions?"dtsh":"dtsc":null},Ci=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new ht(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const n=t.readBits(14)+1;if(n<96)return null;const s=t.readBits(6);if(s>=Ti.length)return null;const a=ki[t.readBits(4)];if(0===a)return null;const o=yi[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const l=t.readBits(2);if(3===l)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const c=bi[t.readBits(3)];if(0===c)return null;const u=0!==l;return{frameSize:n,sampleRate:a,numberOfChannels:Ti[s]+(u?1:0),sampleCount:32*r,channelLayout:vi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:c}},Bi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new ht(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),n=8+4*r,s=16+4*r;t.skipBits(n);const a=t.readBits(s)+1,o={frameSize:a,asset:null};if(!t.readBits(1))return o;const l=Si[t.readBits(2)],c=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===l||t.getBitsLeft()<0?o:{frameSize:a,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(c*m/l),channelLayout:g,pcmResolution:f}}},Ei=e=>Re(e)+Re(44646&e),_i=["avc","hevc","vp9","av1","vp8","prores"],Ri=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Fi=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Ri],Ai=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Di=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],Mi=".01.01.01.01.00",Ni=".0.110.01.01.01.0",Oi=["ap4x","ap4h","apch","apcn","apcs","apco"],zi=["dtsc","dtsh","dtsl","dtse"],Li=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:o,proresFormat:l}=e;if("avc"===t){if(j(null!==e.avcType),n){const t=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${e.avcType}.${he(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${he(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,n,a,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=fe(s.generalProfileCompatibilityFlags),n=s.generalTierFlag,a=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=J(i),l=s.getUint8(1);e=l>>6&3,t=31&l,r=fe(s.getUint32(2)),n=l>>5&1,a=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let l="hev1.";for(l+=["","A","B","C"][e]+t,l+=".",l+=r.toString(16).toUpperCase(),l+=".",l+=0===n?"L":"H",l+=a;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(l+=".",l+=o.map(e=>e.toString(16).toUpperCase()).join(".")),l}if("vp8"===t)return"vp8";if("vp9"===t){if(!a){const t=e.width*e.height;let i=X(Di).level;for(const e of Di)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${a.profile.toString().padStart(2,"0")}.${a.level.toString().padStart(2,"0")}.${a.bitDepth.toString().padStart(2,"0")}.${a.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${a.colourPrimaries.toString().padStart(2,"0")}.${a.transferCharacteristics.toString().padStart(2,"0")}.${a.matrixCoefficients.toString().padStart(2,"0")}.${a.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(Mi)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=X(Di).level;for(const e of Di)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),n=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),a=o.monochrome?"1":"0",l=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),c=(null==r?void 0:r.primaries)?te[r.primaries]:1,u=(null==r?void 0:r.transfer)?re[r.transfer]:1,d=(null==r?void 0:r.matrix)?se[r.matrix]:1,h=(null==r?void 0:r.fullRange)?1:0;let f=`av01.${t}.${i}${n}.${s}`;return f+=`.${a}.${l.toString().padStart(3,"0")}`,f+=`.${c.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(Ni)&&(f=f.slice(0,-17)),f}if("prores"===t)return null!=l?l:"apch";throw null!==t&&ve(t),new TypeError(`Unhandled codec '${t}'.`)},Ui=e=>{var t,i,r,n,s,a;switch(e.codec){case"avc":{let r=null==(t=e.avcCodecInfo)?void 0:t.sequenceParameterSets[0];if(!r&&e.codecDescription&&(r=null==(i=Dt(e.codecDescription))?void 0:i.sequenceParameterSets[0]),r){const e=Nt(r);if(e)return{primaries:ie[e.colourPrimaries],transfer:ne[e.transferCharacteristics],matrix:ae[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=null==(n=null==(r=e.hevcCodecInfo)?void 0:r.arrays.find(e=>e.nalUnitType===St.SPS_NUT))?void 0:n.nalUnits[0];if(!t&&e.codecDescription&&(t=null==(a=null==(s=(e=>{try{const t=J(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=n>>6&3,a=n>>5&1,o=31&n,l=t.getUint32(i,!1);i+=4;const c=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,T=k>>2&1,v=3&k,S=t.getUint8(i++),w=[];for(let P=0;P>7&1,s=63&r,a=t.getUint16(i,!1);i+=2;const o=[];for(let l=0;le.nalUnitType===St.SPS_NUT))?void 0:a.nalUnits[0]),t){const e=qt(t);if(e)return{primaries:ie[e.colourPrimaries],transfer:ne[e.transferCharacteristics],matrix:ae[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:ie[e.vp9CodecInfo.colourPrimaries],transfer:ne[e.vp9CodecInfo.transferCharacteristics],matrix:ae[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:ie[e.av1CodecInfo.colourPrimaries],transfer:ne[e.av1CodecInfo.transferCharacteristics],matrix:ae[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:ie[e.proresCodecInfo.colourPrimaries],transfer:ne[e.proresCodecInfo.transferCharacteristics],matrix:ae[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},qi=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:n}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=pt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return null!=n?n:"dtsc";if(t&&Ri.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},Wi=48e3,Hi=/^pcm-([usf])(\d+)(be)?$/,Vi=e=>{if(j(Ri.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=Hi.exec(e);let i;j(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?B(2,7):0}},ji=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Oi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":zi.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Hi.test(e)?e:"webvtt"===e?"webvtt":null,Ki=[44100,48e3,32e3],Xi=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],$i=1483304551,Gi=1231971951,Qi=(e,t)=>3===e?3===t?21:36:3===t?13:21,Yi=(e,t)=>{const i=e>>>24,r=e>>>16&255,n=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==n&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let a=0,o=0;16&r?a=8&r?0:1:(a=1,o=1);const l=r>>3&3,c=r>>1&3,u=(n>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=Xi[16*a*4+16*c+(n>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=Ki[u]>>a+o,b=((e,t,i,r,n)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Zi,er;(er=Zi||(Zi={}))[er.FrameCount=1]="FrameCount",er[er.FileSize=2]="FileSize",er[er.Toc=4]="Toc";const tr=e=>3===e?1:2;class ir{constructor(e){this.input=e}dispose(){}}const rr=new Uint8Array(0);class nr{constructor(e,t,i,r,n=-1,s,a){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=n,e===rr&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(n))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==a&&("object"!==typeof a||!a))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==(null==a?void 0:a.alpha)&&!(a.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==(null==a?void 0:a.alphaByteLength)&&(!Number.isInteger(a.alphaByteLength)||a.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=null!=a?a:{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===rr}get microsecondTimestamp(){return Math.trunc(De*this.timestamp)}get microsecondDuration(){return Math.trunc(De*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){var i;if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const r=new Uint8Array(e.byteLength);return e.copyTo(r),new nr(r,e.type,e.timestamp/1e6,(null!=(i=e.duration)?i:0)/1e6,void 0,void 0,t)}clone(e){var t,i,r,n,s,a;if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==(null==e?void 0:e.data)&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==(null==e?void 0:e.type)&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==(null==e?void 0:e.timestamp)&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==(null==e?void 0:e.duration)&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sequenceNumber)&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sideData)&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new nr(null!=(t=null==e?void 0:e.data)?t:this.data,null!=(i=null==e?void 0:e.type)?i:this.type,null!=(r=null==e?void 0:e.timestamp)?r:this.timestamp,null!=(n=null==e?void 0:e.duration)?n:this.duration,null!=(s=null==e?void 0:e.sequenceNumber)?s:this.sequenceNumber,this.byteLength,null!=(a=null==e?void 0:e.sideData)?a:this.sideData)}}const sr=e=>{const t=J(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const n=he(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=dl(e);const i=Tl(e,4);let r=8;1===t&&(t=pl(e),r=16);const n=t-r;return n<0?null:{name:i,totalSize:t,headerSize:r,contentSize:n}},lr=e=>fl(e)/65536,cr=e=>fl(e)/1073741824,ur=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=sl(e);if(t|=127&i,0===(128&i))break}return t},dr=e=>{let t=ol(e);return e.skip(2),t=Math.min(t,e.remainingLength),Z.decode(nl(e,t))},hr=e=>{const t=or(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=dl(e);e.skip(4);const r=nl(e,t.contentSize-8);switch(i){case 1:return Z.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new ct(r,"image/jpeg");case 14:return new ct(r,"image/png");case 27:return new ct(r,"image/bmp");default:return r}},fr=16,mr=new Uint32Array(256),pr=new Uint32Array(256),gr=new Uint32Array(256),kr=new Uint32Array(256),yr=new Uint32Array(256),br=new Uint32Array(256),Tr=new Uint32Array(10);let vr=!1;class Sr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(fr/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(fr),this.out=new Uint8Array(fr),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){j(16===e.byteLength),j(16===t.byteLength),vr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,a=1;s<256;s++)i[s]=a,t[a]=s,a=a^a<<1^(128&a?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let n=r^r<<1^r<<2^r<<3^r<<4;n=n>>>8^255&n^99,e[s]=n}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);mr[s]=t<<24|t<<16|t<<8|t,br[s]=i<<24|i<<16|i<<8|i;const n=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);pr[s]=n,gr[s]=n>>>8|n<<24,kr[s]=n>>>16|n<<16,yr[s]=n>>>24|n<<8}let n=1;for(let s=0;s<10;s++)Tr[s]=n<<24,n=n<<1^(128&n?283:0);vr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let n=4;n<44;n+=4){const e=this.roundkey[n-1];this.roundkey[n]=this.roundkey[n-4]^4278190080&mr[e>>>16&255]^16711680&mr[e>>>8&255]^65280&mr[e>>>0&255]^255&mr[e>>>24&255]^Tr[n/4-1],this.roundkey[n+1]=this.roundkey[n-3]^this.roundkey[n],this.roundkey[n+2]=this.roundkey[n-2]^this.roundkey[n+1],this.roundkey[n+3]=this.roundkey[n-1]^this.roundkey[n+2]}for(let n=0,s=40;n>>24&255]]^gr[255&mr[t>>>16&255]]^kr[255&mr[t>>>8&255]]^yr[255&mr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const n=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),a=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let l,c,u,d;for(let g=1;g<10;g++){const n=4*g;l=pr[e>>>24]^gr[r>>>16&255]^kr[i>>>8&255]^yr[255&t]^this.roundkey[n],c=pr[t>>>24]^gr[e>>>16&255]^kr[r>>>8&255]^yr[255&i]^this.roundkey[n+1],u=pr[i>>>24]^gr[t>>>16&255]^kr[e>>>8&255]^yr[255&r]^this.roundkey[n+2],d=pr[r>>>24]^gr[i>>>16&255]^kr[t>>>8&255]^yr[255&e]^this.roundkey[n+3],e=l,t=c,i=u,r=d}const h=4278190080&br[e>>>24&255]^16711680&br[r>>>16&255]^65280&br[i>>>8&255]^255&br[t>>>0&255]^this.roundkey[40],f=4278190080&br[t>>>24&255]^16711680&br[e>>>16&255]^65280&br[r>>>8&255]^255&br[i>>>0&255]^this.roundkey[41],m=4278190080&br[i>>>24&255]^16711680&br[t>>>16&255]^65280&br[e>>>8&255]^255&br[r>>>0&255]^this.roundkey[42],p=4278190080&br[r>>>24&255]^16711680&br[i>>>16&255]^65280&br[t>>>8&255]^255&br[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=n,this.iv[1]=s,this.iv[2]=a,this.iv[3]=o}}class wr extends ir{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.tracks.map(e=>e.trackBacking)})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)}),hasAudio:this.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)}),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(Xe(r)&&(r=yield r),!r)break;const n=e,s=or(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=Tl(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(Xe(e)&&(e=yield e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>n+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');yield this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=n+s.totalSize}if(!i&&this.input._initInput&&(yield this.copyMetadataFromInitInput(this.input._initInput)),t){j(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);Xe(e)&&(e=yield e),j(e);const t=dl(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(Xe(e)&&(e=yield e),e){const t=or(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);Xe(i)&&(i=yield i),i&&this.readContiguousBoxes(i)}}}}}))()}copyMetadataFromInitInput(e){return z(this,null,function*(){const t=yield e._getDemuxer();if(t.constructor!==wr)throw new Error("Init input must match the input's format.");yield t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const e of t.tracks){const t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};if(e.trackBacking)if(j(t.info),"video"===t.info.type&&-1!==t.info.width){const e=t;t.trackBacking=new Ir(e),this.tracks.push(t)}else if("audio"===t.info.type&&-1!==t.info.numberOfChannels){const e=t;t.trackBacking=new xr(e),this.tracks.push(t)}}})}getSampleTableForTrack(e){var t,i;if(e.sampleTable)return e.sampleTable;const r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=r,null===e.sampleTableByteOffset)return r;j(this.moovSlice);const n=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(n),this.currentTrack=null;if("audio"===(null==(t=e.info)?void 0:t.type)&&e.info.codec&&Ri.includes(e.info.codec)&&0===r.sampleCompositionTimeOffsets.length){j("audio"===(null==(i=e.info)?void 0:i.type));const t=Vi(e.info.codec),n=[],s=[];for(let i=0;ie.startIndex),u=r.sampleTimingEntries[c],d=pe(r.sampleTimingEntries,l,e=>e.startIndex),h=r.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(l-h.startIndex)*h.delta-f,p=X(n);p&&p.delta===m?p.count++:n.push({startIndex:a.startChunkIndex+i,startDecodeTimestamp:f,count:1,delta:m});const g=a.samplesPerChunk*t.sampleSize*e.info.numberOfChannels;s.push(g)}a.startSampleIndex=a.startChunkIndex,a.samplesPerChunk=1}r.sampleTimingEntries=n,r.sampleSizes=s}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(const e of r.sampleTimingEntries)for(let t=0;te.presentationTimestamp-t.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===s.moofOffset);if(r)Rr(e,r.timestamp);else{const t=pe(i,s.moofOffset-1,e=>e.moofOffset);if(-1!==t){const r=i[t];Rr(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}const r=pe(i,e.startTimestamp,e=>e.startTimestamp);if(-1!==r&&i[r].moofOffset===s.moofOffset||i.splice(r+1,0,{moofOffset:s.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){const i=yield Mr(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;Ae(t.languageCode)||(t.languageCode=xe)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=Tl(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:_({},le),avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=fe,this.readContiguousBoxes(e.slice(pe,me.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=sl(e);e.skip(3);const r=dl(e);for(let n=0;n0&&(1===a?(e.skip(4),l=8*dl(e),e.skip(8)):2===a&&(e.skip(4),c=bl(e),o=dl(e),e.skip(4),l=dl(e),u=dl(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=c,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+n.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=Wi;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(zi.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(lt._warn(`Unsupported sample size ${l} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec="pcm-s16":(lt._warn(`Unsupported sample size ${l} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(lt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(lt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(lt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(lt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=l+7>>3,i=Boolean(1&u),r=Boolean(2&u),n=4&u?-1:0;l>0&&l<=64&&(i?32===l&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):n&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==sl(e),t.encryptionInfo.defaultPerSampleIvSize=sl(e),t.encryptionInfo.defaultKid=he(nl(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=sl(e),r=new Uint8Array(16);r.set(nl(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(j(t.info),0===me.contentSize)break;t.info.codecDescription=nl(e,me.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(j(t.info),0===me.contentSize)break;t.info.codecDescription=nl(e,me.contentSize)}break;case"vpcC":{const i=this.currentTrack;if(!i)break;j("video"===(null==(t=i.info)?void 0:t.type)),e.skip(4);const r=sl(e),n=sl(e),s=sl(e),a=s>>4,o=s>>1&7,l=1&s,c=sl(e),u=sl(e),d=sl(e);i.info.vp9CodecInfo={profile:r,level:n,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:l,colourPrimaries:c,transferCharacteristics:u,matrixCoefficients:d}}break;case"av1C":{const t=this.currentTrack;if(!t)break;j("video"===(null==(i=t.info)?void 0:i.type)),e.skip(1);const o=sl(e),l=o>>5,c=31&o,u=sl(e),d=u>>7,h=u>>6&1,f=u>>4&1,m=u>>3&1,p=u>>2&1,g=3&u,k=2===l&&h?u>>5&1?12:10:h?10:8;e.skip(1);const y=nl(e,me.contentSize-4),b=ii(y);t.info.av1CodecInfo={profile:l,level:c,tier:d,bitDepth:k,monochrome:f,chromaSubsamplingX:m,chromaSubsamplingY:p,chromaSamplePosition:g,videoFullRangeFlag:null!=(r=null==b?void 0:b.videoFullRangeFlag)?r:0,colourPrimaries:null!=(n=null==b?void 0:b.colourPrimaries)?n:2,transferCharacteristics:null!=(s=null==b?void 0:b.transferCharacteristics)?s:2,matrixCoefficients:null!=(a=null==b?void 0:b.matrixCoefficients)?a:2}}break;case"colr":{const t=this.currentTrack;if(!t)break;j("video"===(null==(o=t.info)?void 0:o.type));const i=Tl(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=ol(e),n=ol(e),s=ol(e);let a;"nclx"===i&&(a=Boolean(128&sl(e))),t.info.colorSpace={primaries:ie[r],transfer:ne[n],matrix:ae[s],fullRange:a}}break;case"pasp":{const t=this.currentTrack;if(!t)break;j("video"===(null==(l=t.info)?void 0:l.type));const i=dl(e),r=dl(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==(null==(c=t.info)?void 0:c.type))break;e.skip(4);j(3===sl(e)),ur(e),e.skip(2);const i=sl(e),r=0!==(64&i),n=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=sl(e);e.skip(t)}n&&e.skip(2);j(4===sl(e));const s=ur(e),a=e.filePos,o=sl(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":lt._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-a){j(5===sl(e));const i=ur(e);if(t.info.codecDescription=nl(e,i),"aac"===t.info.codec){const e=pt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(u=t.info)?void 0:u.type)),t.info.pcmLittleEndian=!!(255&ol(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(d=t.info)?void 0:d.type)),e.skip(4);const i=sl(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=sl(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(h=t.info)?void 0:h.type)),e.skip(1);const i=sl(e),r=ol(e),n=dl(e),s=cl(e),a=sl(e);let o;o=0!==a?nl(e,2+i):new Uint8Array(0);const l=new Uint8Array(19+o.byteLength),c=new DataView(l.buffer);c.setUint32(0,1332770163,!1),c.setUint32(4,1214603620,!1),c.setUint8(8,1),c.setUint8(9,i),c.setUint16(10,r,!0),c.setUint32(12,n,!0),c.setInt16(16,s,!0),c.setUint8(18,a),l.set(o,19),t.info.codecDescription=l,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(f=t.info)?void 0:f.type)),e.skip(4);const i=127,r=128,n=e.filePos;for(;e.filePos>>12,n=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=n,e.skip(20)}else e.skip(s);if(n&r)break}const s=e.filePos;e.filePos=n;const a=nl(e,s-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(m=t.info)?void 0:m.type));const i=nl(e,3),r=new ht(i),n=r.readBits(2);r.skipBits(8);const s=r.readBits(3),a=r.readBits(1);n<3&&(t.info.sampleRate=yt[n]),t.info.numberOfChannels=ui[s]+a}break;case"dec3":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(p=t.info)?void 0:p.type));const i=(e=>{if(e.length<2)return null;const t=new ht(e),i=t.readBits(13),r=t.readBits(3),n=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),a=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let l=0;o>0?l=t.readBits(9):t.skipBits(1),n.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:a,numDepSub:o,chanLoc:l})}return 0===n.length?null:{dataRate:i,substreams:n}})(nl(e,me.contentSize));if(!i){lt._warn("Invalid dec3 box contents, ignoring.");break}const r=pi(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=gi(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;j("audio"===(null==(g=t.info)?void 0:g.type));const i=(e=>{if(e.length<20)return null;const t=J(e),i=t.getUint32(0);if(0===i)return null;const r=new ht(e);r.seekToByte(13);const n=r.readBits(2);r.skipBits(5);const s=r.readBits(1),a=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let l=null;return 0!==o?l=Ei(o):ae.id===i);if(!r)break;const n=dl(e),s=(12&n)>>2,a=3&n,o=[sl,ol,ll,dl],l=o[(48&n)>>4],c=o[s],u=o[a],d=dl(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let n=0;ne.id===c);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===c);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:null!=(y=null==d?void 0:d.defaultSampleDescriptionIndex)?y:null,defaultSampleDuration:null!=(b=null==d?void 0:d.defaultSampleDuration)?b:null,defaultSampleSize:null!=(T=null==d?void 0:d.defaultSampleSize)?T:null,defaultSampleFlags:null!=(v=null==d?void 0:d.defaultSampleFlags)?v:null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=pl(e):l&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=dl(e)),n&&(u.currentFragmentState.defaultSampleDuration=dl(e)),s&&(u.currentFragmentState.defaultSampleSize=dl(e)),a&&(u.currentFragmentState.defaultSampleFlags=dl(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;j(t.currentFragmentState);const i=sl(e);e.skip(3);const r=0===i?dl(e):pl(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;j(this.currentFragment),j(t.currentFragmentState);const i=sl(e),r=ll(e),n=Boolean(1&r),s=Boolean(4&r),a=Boolean(256&r),o=Boolean(512&r),l=Boolean(1024&r),c=Boolean(2048&r),u=dl(e);let d=null;n&&(d=fl(e));let h,f=null;s&&(f=dl(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(null!=d?d:0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(n=nl(e,r));const s=Dr(t);s.defaultSampleInfoSize=i,s.sampleSizes=n,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=sl(e);if(1&ll(e)){const i=Tl(e,4),r=dl(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=dl(e);if(0===r)break;r>1&<._warn("Multiple saio entries are not supported; using the first offset only.");let n=0===i?dl(e):Number(pl(e));this.currentFragment&&(n+=this.currentFragment.moofOffset);Dr(t).offset=n}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;j(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=ll(e),n=Boolean(2&r),s=dl(e),a=t.encryptionInfo.defaultPerSampleIvSize;j(null!==a);for(let o=0;o0?r.set(nl(e,a),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(n){const t=ol(e);s=[];for(let i=0;i0&&(null!=(re=this.metadataTags).trackNumber||(re.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(se=this.metadataTags).tracksTotal||(se.tracksTotal=i))}break;case"trkn":if(n instanceof Uint8Array&&n.length>=6){const e=J(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(oe=this.metadataTags).trackNumber||(oe.trackNumber=t)),i>0&&(null!=(ce=this.metadataTags).tracksTotal||(ce.tracksTotal=i))}break;case"disc":case"disk":if(n instanceof Uint8Array&&n.length>=6){const e=J(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(ue=this.metadataTags).discNumber||(ue.discNumber=t)),i>0&&(null!=(de=this.metadataTags).discsTotal||(de.discsTotal=i))}}}}}return e.filePos=ge,!0}}class Pr{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){var e;const t=this.internalTrack;if(t.durationInMediaTimescale<=0)return null;j(t.trackBacking);const i=yield t.trackBacking.getFirstPacket({metadataOnly:!0});return(null!=(e=null==i?void 0:i.timestamp)?e:0)+t.durationInMediaTimescale/t.timescale})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getFirstPacket(e){return z(this,null,function*(){const t=yield this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)})}mapTimestampIntoTimescale(e){return Ce(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}getPacket(e,t){return z(this,null,function*(){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Cr(r,i),s=yield this.fetchPacketForSampleIndex(n,t);return Ar(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=pe(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Te(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return j(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)})}fetchPacketForSampleIndex(e,t){return z(this,null,function*(){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=Er(i,e);if(!r)return null;let n;if(t.metadataOnly)n=rr;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(Xe(t)&&(t=yield t),!t)return null;if(n=nl(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=yield Mr(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),f=-1!==h?this.internalTrack.fragmentLookupTable[h]:null,m=pe(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),p=-1!==m?this.internalTrack.fragmentPositionCache[m]:null,g=Math.max(null!=(s=null==f?void 0:f.moofOffset)?s:0,null!=(a=null==p?void 0:p.moofOffset)?a:0)||null;let k;for(e?null===g||e.moofOffset>=g?(k=e.moofOffset+e.moofSize,c=e):k=g:k=null!=g?g:0;;){if(c){const e=c.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=l.reader.requestSliceRange(k,8,16);if(Xe(e)&&(e=yield e),!e)break;const i=k,s=or(e);if(!s)break;if("moof"===s.name){c=yield l.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(c);if(r)return this.fetchPacketInFragment(c,e,n);-1!==e&&(u=c,d=e)}k=i+s.totalSize}if(f&&(!u||u.moofOffsetz(this,null,function*(){var e,t,i,r,n,s,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=yield this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&ri(e.data)}}else{const e=yield this.getFirstPacket({}),t=e&&ii(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const t=yield this.getFirstPacket({}),i=t&&ei(t.data);i&&(this.internalTrack.info.vp9CodecInfo=R(_({},null!=(e=this.internalTrack.info.vp9CodecInfo)?e:i),{videoFullRangeFlag:i.videoFullRangeFlag,colourPrimaries:i.colourPrimaries,transferCharacteristics:i.transferCharacteristics,matrixCoefficients:i.matrixCoefficients}))}else{const e=yield this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&Wt(e.data)}else{const e=yield this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&Ft(e.data)}if(!oe(this.internalTrack.info.colorSpace)){const e=Ui(this.internalTrack.info);null!=(t=this.internalTrack.info.colorSpace).primaries||(t.primaries=e.primaries),null!=(i=this.internalTrack.info.colorSpace).transfer||(i.transfer=e.transfer),null!=(r=this.internalTrack.info.colorSpace).matrix||(r.matrix=e.matrix),null!=(n=this.internalTrack.info.colorSpace).fullRange||(n.fullRange=e.fullRange)}const o={codec:Li(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(s=this.internalTrack.info.codecDescription)?s:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class xr extends Pr{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>z(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&xi(e.data)}return{codec:qi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Cr=(e,t)=>{if(e.presentationTimestamps){const i=pe(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=pe(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Br=(e,t)=>{var i;if(!e.keySampleIndices)return Cr(e,t);if(e.presentationTimestamps){const i=pe(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==me(e.keySampleIndices,i,e=>e))return i}return-1}{const r=Cr(e,t),n=pe(e.keySampleIndices,r,e=>e);return null!=(i=e.keySampleIndices[n])?i:-1}},Er=(e,t)=>{const i=pe(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let n=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=pe(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),a=e.sampleCompositionTimeOffsets[s];a&&t-a.startIndexe.startSampleIndex),c=e.sampleToChunk[l];j(c);const u=c.startChunkIndex+Math.floor((t-c.startSampleIndex)/c.samplesPerChunk),d=e.chunkOffsets[u],h=c.startSampleIndex+(u-c.startChunkIndex)*c.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*c.samplesPerChunk;else for(let g=h;ge)}},_r=(e,t)=>{var i;if(!e.keySampleIndices)return t+1;const r=pe(e.keySampleIndices,t,e=>e);return null!=(i=e.keySampleIndices[r+1])?i:-1},Rr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},Fr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},Ar=e=>0===e.sampleSizes.length,Dr=e=>{var t,i,r;return e.currentFragmentState?null!=(i=(t=e.currentFragmentState).encryptionAuxInfo)?i:t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:null!=(r=e.encryptionAuxInfo)?r:e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}},Mr=(e,t,i)=>z(null,null,function*(){if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{j(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[e],o=new Uint8Array(16);s>0?o.set(nl(n,s),0):o.set(t.defaultConstantIv,0);let l=null;if(r>s){const e=ol(n);l=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Or=(e,t,i,r)=>z(null,null,function*(){var n;j(e.encryptionInfo);const s=e.encryptionInfo;j(null!==s.defaultKid);const a=s.defaultKid;let o;const l=e.demuxer.decryptionKeyCache.get(a);if(l)o=yield l;else{if(!(null==(n=e.demuxer.input._formatOptions.isobmff)?void 0:n.resolveKeyId))throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=z(null,null,function*(){let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(a));for(let e=0;e{j(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;iz(null,null,function*(){const n=new Uint8Array(16);n.set(i.iv,0);const s=yield crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),a=e=>z(null,null,function*(){const t=yield crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},s,e);return new Uint8Array(t)});if(!i.subsamples)return a(r);j(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Ur(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let l=0;for(const e of o)for(const t of e.perSubsample)l+=t.length;const c=new Uint8Array(l);let u=0;for(const e of o)for(const t of e.perSubsample)c.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;const d=yield a(c),h=new Uint8Array(r);let f=0;for(const e of o)for(const t of e.perSubsample)h.set(d.subarray(f,f+t.length),t.offset),f+=t.length;return h}),Lr=(e,t,i,r)=>{const n=new Sr;n.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,a=t.defaultSkipByteBlock;if(j(null!==s&&null!==a),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],n=0!==t||0!==i;let s=0;for(const a of e){s+=a.clearLen;const e=[];if(n){let r=a.protectedLen,n=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:n,length:s}),n+=s,r-=s;const a=Math.min(16*i,r);n+=a,r-=a}s+=a.protectedLen}else a.protectedLen>0&&e.push({offset:s,length:a.protectedLen}),s+=a.protectedLen;r.push({perSubsample:e})}return r};var qr,Wr;(Wr=qr||(qr={}))[Wr.EBML=440786851]="EBML",Wr[Wr.EBMLVersion=17030]="EBMLVersion",Wr[Wr.EBMLReadVersion=17143]="EBMLReadVersion",Wr[Wr.EBMLMaxIDLength=17138]="EBMLMaxIDLength",Wr[Wr.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",Wr[Wr.DocType=17026]="DocType",Wr[Wr.DocTypeVersion=17031]="DocTypeVersion",Wr[Wr.DocTypeReadVersion=17029]="DocTypeReadVersion",Wr[Wr.Void=236]="Void",Wr[Wr.Segment=408125543]="Segment",Wr[Wr.SeekHead=290298740]="SeekHead",Wr[Wr.Seek=19899]="Seek",Wr[Wr.SeekID=21419]="SeekID",Wr[Wr.SeekPosition=21420]="SeekPosition",Wr[Wr.Duration=17545]="Duration",Wr[Wr.Info=357149030]="Info",Wr[Wr.TimestampScale=2807729]="TimestampScale",Wr[Wr.MuxingApp=19840]="MuxingApp",Wr[Wr.WritingApp=22337]="WritingApp",Wr[Wr.Tracks=374648427]="Tracks",Wr[Wr.TrackEntry=174]="TrackEntry",Wr[Wr.TrackNumber=215]="TrackNumber",Wr[Wr.TrackUID=29637]="TrackUID",Wr[Wr.TrackType=131]="TrackType",Wr[Wr.FlagEnabled=185]="FlagEnabled",Wr[Wr.FlagDefault=136]="FlagDefault",Wr[Wr.FlagForced=21930]="FlagForced",Wr[Wr.FlagOriginal=21934]="FlagOriginal",Wr[Wr.FlagHearingImpaired=21931]="FlagHearingImpaired",Wr[Wr.FlagVisualImpaired=21932]="FlagVisualImpaired",Wr[Wr.FlagCommentary=21935]="FlagCommentary",Wr[Wr.FlagLacing=156]="FlagLacing",Wr[Wr.Name=21358]="Name",Wr[Wr.Language=2274716]="Language",Wr[Wr.LanguageBCP47=2274717]="LanguageBCP47",Wr[Wr.CodecID=134]="CodecID",Wr[Wr.CodecPrivate=25506]="CodecPrivate",Wr[Wr.CodecDelay=22186]="CodecDelay",Wr[Wr.SeekPreRoll=22203]="SeekPreRoll",Wr[Wr.DefaultDuration=2352003]="DefaultDuration",Wr[Wr.Video=224]="Video",Wr[Wr.PixelWidth=176]="PixelWidth",Wr[Wr.PixelHeight=186]="PixelHeight",Wr[Wr.DisplayWidth=21680]="DisplayWidth",Wr[Wr.DisplayHeight=21690]="DisplayHeight",Wr[Wr.DisplayUnit=21682]="DisplayUnit",Wr[Wr.AlphaMode=21440]="AlphaMode",Wr[Wr.Audio=225]="Audio",Wr[Wr.SamplingFrequency=181]="SamplingFrequency",Wr[Wr.Channels=159]="Channels",Wr[Wr.BitDepth=25188]="BitDepth",Wr[Wr.SimpleBlock=163]="SimpleBlock",Wr[Wr.BlockGroup=160]="BlockGroup",Wr[Wr.Block=161]="Block",Wr[Wr.BlockAdditions=30113]="BlockAdditions",Wr[Wr.BlockMore=166]="BlockMore",Wr[Wr.BlockAdditional=165]="BlockAdditional",Wr[Wr.BlockAddID=238]="BlockAddID",Wr[Wr.BlockDuration=155]="BlockDuration",Wr[Wr.ReferenceBlock=251]="ReferenceBlock",Wr[Wr.Cluster=524531317]="Cluster",Wr[Wr.Timestamp=231]="Timestamp",Wr[Wr.Cues=475249515]="Cues",Wr[Wr.CuePoint=187]="CuePoint",Wr[Wr.CueTime=179]="CueTime",Wr[Wr.CueTrackPositions=183]="CueTrackPositions",Wr[Wr.CueTrack=247]="CueTrack",Wr[Wr.CueClusterPosition=241]="CueClusterPosition",Wr[Wr.Colour=21936]="Colour",Wr[Wr.MatrixCoefficients=21937]="MatrixCoefficients",Wr[Wr.TransferCharacteristics=21946]="TransferCharacteristics",Wr[Wr.Primaries=21947]="Primaries",Wr[Wr.Range=21945]="Range",Wr[Wr.Projection=30320]="Projection",Wr[Wr.ProjectionType=30321]="ProjectionType",Wr[Wr.ProjectionPoseRoll=30325]="ProjectionPoseRoll",Wr[Wr.Attachments=423732329]="Attachments",Wr[Wr.AttachedFile=24999]="AttachedFile",Wr[Wr.FileDescription=18046]="FileDescription",Wr[Wr.FileName=18030]="FileName",Wr[Wr.FileMediaType=18016]="FileMediaType",Wr[Wr.FileData=18012]="FileData",Wr[Wr.FileUID=18094]="FileUID",Wr[Wr.Chapters=272869232]="Chapters",Wr[Wr.Tags=307544935]="Tags",Wr[Wr.Tag=29555]="Tag",Wr[Wr.Targets=25536]="Targets",Wr[Wr.TargetTypeValue=26826]="TargetTypeValue",Wr[Wr.TargetType=25546]="TargetType",Wr[Wr.TagTrackUID=25541]="TagTrackUID",Wr[Wr.TagEditionUID=25545]="TagEditionUID",Wr[Wr.TagChapterUID=25540]="TagChapterUID",Wr[Wr.TagAttachmentUID=25542]="TagAttachmentUID",Wr[Wr.SimpleTag=26568]="SimpleTag",Wr[Wr.TagName=17827]="TagName",Wr[Wr.TagLanguage=17530]="TagLanguage",Wr[Wr.TagString=17543]="TagString",Wr[Wr.TagBinary=17541]="TagBinary",Wr[Wr.ContentEncodings=28032]="ContentEncodings",Wr[Wr.ContentEncoding=25152]="ContentEncoding",Wr[Wr.ContentEncodingOrder=20529]="ContentEncodingOrder",Wr[Wr.ContentEncodingScope=20530]="ContentEncodingScope",Wr[Wr.ContentCompression=20532]="ContentCompression",Wr[Wr.ContentCompAlgo=16980]="ContentCompAlgo",Wr[Wr.ContentCompSettings=16981]="ContentCompSettings",Wr[Wr.ContentEncryption=20533]="ContentEncryption";const Hr=[qr.EBML,qr.Segment],Vr=[qr.SeekHead,qr.Info,qr.Cluster,qr.Tracks,qr.Cues,qr.Attachments,qr.Chapters,qr.Tags],jr=[...Hr,...Vr],Kr=16,Xr=e=>{if(e.remainingLength<1)return null;const t=sl(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=sl(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=Xr(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===sl(e))return;e.skip(-1);const t=$r(e);return null===t?null:72057594037927940!==t?t:void 0},Jr=e=>{j(e.remainingLength>=2);const t=Qr(e);if(null===t)return null;const i=Yr(e);return null===i?null:{id:t,size:i}},Zr=(e,t)=>{const i=nl(e,t);let r=0;for(;r{const i=nl(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?yl(e):bl(e)},rn=(e,t,i,r)=>z(null,null,function*(){const n=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}}),nn=(e,t,i,r)=>z(null,null,function*(){const n=B(2,16),s=new Set(i);let a=t;for(;ae.tracks.map(e=>e.trackBacking))})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)})),hasAudio:this.segments.some(e=>e.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)})),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return z(this,null,function*(){yield this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&(yield this.loadSegmentMetadata(t)),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e=_(_({},e),t.metadataTags);return e})}readMetadata(){var e;return null!=(e=this.readMetadataPromise)?e:this.readMetadataPromise=(()=>z(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,Kr);if(Xe(t)&&(t=yield t),!t)break;const i=Jr(t);if(!i)break;const r=i.id;let n=i.size;const s=t.filePos;if(r===qr.EBML){bn(n);let e=this.reader.requestSlice(s,n);if(Xe(e)&&(e=yield e),!e)break;this.readContiguousElements(e)}else if(r===qr.Segment){if(yield this.readSegment(s,n),void 0===n)break;if(null===this.reader.fileSize)break}else if(r===qr.Cluster){if(null===this.reader.fileSize)break;if(void 0===n){n=(yield rn(this.reader,s,jr,this.reader.fileSize)).pos-s}const e=X(this.segments);e&&(e.elementEndPos=s+n)}bn(n),e=s+n}}))()}readSegment(e,t){return z(this,null,function*(){var i;this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let r=e;for(;null===this.currentSegment.elementEndPos||re.id===s);if(-1!==l){const e=xn[l].flag;this.currentSegment[e]=!0,bn(a);let t=this.reader.requestSlice(o,a);Xe(t)&&(t=yield t),t&&this.readContiguousElements(t)}else if(s===qr.Tags||s===qr.Attachments){s===qr.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,bn(a);let e=this.reader.requestSlice(o,a);Xe(e)&&(e=yield e),e&&this.readContiguousElements(e)}else if(s===qr.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===a)break;r=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const t of this.currentSegment.seekEntries){const i=xn.find(e=>e.id===t.id);if(!i)continue;if(this.currentSegment[i.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,2,Kr);if(Xe(r)&&(r=yield r),!r)continue;const n=Jr(r);if(!n)continue;const{id:s,size:a}=n;if(s!==i.id)continue;bn(a),this.currentSegment[i.flag]=!0;let o=this.reader.requestSlice(r.filePos,a);Xe(o)&&(o=yield o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const e of this.currentSegment.tracks)null!==e.defaultDurationNs&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);const n=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const e of this.currentSegment.cuePoints){const t=n.get(e.trackId);t&&t.cuePoints.push(e)}for(const e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;ta&&(a=e.cuePoints.length,s=e);for(const e of this.currentSegment.tracks)0===e.cuePoints.length&&(e.cuePoints=s.cuePoints);this.currentSegment=null})}readCluster(e,t){return z(this,null,function*(){var i;if((null==(i=t.lastReadCluster)?void 0:i.elementStartPos)===e)return t.lastReadCluster;let r=this.reader.requestSliceRange(e,2,Kr);Xe(r)&&(r=yield r),j(r);const n=e,s=Jr(r);j(s);j(s.id===qr.Cluster);let a=s.size;const o=r.filePos;if(void 0===a){a=(yield rn(this.reader,o,jr,t.elementEndPos)).pos-o}let l=this.reader.requestSlice(o,a);Xe(l)&&(l=yield l);const c={segment:t,elementStartPos:n,elementEndPos:o+a,dataStartPos:o,timestamp:-1,trackData:new Map};if(this.currentCluster=c,l){const e=this.readContiguousElements(l,jr);c.elementEndPos=e}for(const[,e]of c.trackData){const t=e.track;j(e.blocks.length>0);let i=!1;for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const r=e.blocks[e.presentationTimestamps[0].blockIndex],s=e.blocks[X(e.presentationTimestamps).blockIndex];e.startTimestamp=r.timestamp,e.endTimestamp=s.timestamp+s.duration;const a=pe(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);-1!==a&&t.clusterPositionCache[a].elementStartPos===n||t.clusterPositionCache.splice(a+1,0,{elementStartPos:c.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=c,c})}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){var i;for(let r=0;r=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,S,w,P,I,x,C,B,E,F,A,D,M,N,O,z,L,U,q,W,H,V,X,$,G,Q,Y,J,ee,te,re,se;const oe=Jr(e);if(!oe)return!1;if(t&&t.includes(oe.id))return!1;const{id:ce,size:ue}=oe,de=e.filePos;switch(bn(ue),ce){case qr.DocType:this.isWebM="webm"===Zr(e,ue);break;case qr.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(de,ue)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case qr.SeekID:{const t=null==(i=this.currentSegment)?void 0:i.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Gr(e,ue)}break;case qr.SeekPosition:{const t=null==(r=this.currentSegment)?void 0:r.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Gr(e,ue)}break;case qr.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Gr(e,ue),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case qr.Duration:if(!this.currentSegment)break;this.currentSegment.duration=tn(e,ue);break;case qr.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:R(_({},dt),{primary:!1}),trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(de,ue)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>{var t;return"decompress"!==(null==(t=e.data)?void 0:t.type)||e.scope!==Sn.Block||e.data.algorithm!==Pn.HeaderStripping})&&(lt._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===sn)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===an)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===on)this.currentTrack.info.codec="vp8";else if(t===ln)this.currentTrack.info.codec="vp9";else if(t===cn)this.currentTrack.info.codec="av1";else if(t===un){const e=this.currentTrack.codecPrivate?Z.decode(this.currentTrack.codecPrivate):"";Oi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new _n(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===dn?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===hn?this.currentTrack.info.codec="mp3":t===fn?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=Wi):t===mn?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===pn?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===gn?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===kn?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===yn?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Rn(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case qr.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Gr(e,ue);break;case qr.TrackType:{if(!this.currentTrack)break;const t=Gr(e,ue);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:_({},le),alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case qr.FlagEnabled:if(!this.currentTrack)break;Gr(e,ue)||(this.currentTrack=null);break;case qr.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Gr(e,ue);break;case qr.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Gr(e,ue);break;case qr.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Gr(e,ue);break;case qr.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Gr(e,ue);break;case qr.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Gr(e,ue);break;case qr.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Gr(e,ue);break;case qr.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Zr(e,ue);break;case qr.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=nl(e,ue);break;case qr.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Gr(e,ue);break;case qr.Name:if(!this.currentTrack)break;this.currentTrack.name=en(e,ue);break;case qr.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Zr(e,ue),Ae(this.currentTrack.languageCode)||(this.currentTrack.languageCode=xe);break;case qr.LanguageBCP47:{if(!this.currentTrack)break;const t=Zr(e,ue).split("-")[0];this.currentTrack.languageCode=t||xe,this.currentTrack.hasLanguageBcp47=!0}break;case qr.Video:if("video"!==(null==(s=null==(n=this.currentTrack)?void 0:n.info)?void 0:s.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.PixelWidth:if("video"!==(null==(o=null==(a=this.currentTrack)?void 0:a.info)?void 0:o.type))break;this.currentTrack.info.width=Gr(e,ue);break;case qr.PixelHeight:if("video"!==(null==(c=null==(l=this.currentTrack)?void 0:l.info)?void 0:c.type))break;this.currentTrack.info.height=Gr(e,ue);break;case qr.DisplayWidth:if("video"!==(null==(d=null==(u=this.currentTrack)?void 0:u.info)?void 0:d.type))break;this.currentTrack.info.displayWidth=Gr(e,ue);break;case qr.DisplayHeight:if("video"!==(null==(f=null==(h=this.currentTrack)?void 0:h.info)?void 0:f.type))break;this.currentTrack.info.displayHeight=Gr(e,ue);break;case qr.DisplayUnit:if("video"!==(null==(p=null==(m=this.currentTrack)?void 0:m.info)?void 0:p.type))break;this.currentTrack.info.displayUnit=Gr(e,ue);break;case qr.AlphaMode:if("video"!==(null==(k=null==(g=this.currentTrack)?void 0:g.info)?void 0:k.type))break;this.currentTrack.info.alphaMode=1===Gr(e,ue);break;case qr.Colour:if("video"!==(null==(b=null==(y=this.currentTrack)?void 0:y.info)?void 0:b.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.MatrixCoefficients:{if("video"!==(null==(v=null==(T=this.currentTrack)?void 0:T.info)?void 0:v.type))break;const t=Gr(e,ue),i=ae[t];this.currentTrack.info.colorSpace.matrix=i}break;case qr.Range:{if("video"!==(null==(w=null==(S=this.currentTrack)?void 0:S.info)?void 0:w.type))break;const t=Gr(e,ue);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case qr.TransferCharacteristics:{if("video"!==(null==(I=null==(P=this.currentTrack)?void 0:P.info)?void 0:I.type))break;const t=Gr(e,ue),i=ne[t];this.currentTrack.info.colorSpace.transfer=i}break;case qr.Primaries:{if("video"!==(null==(C=null==(x=this.currentTrack)?void 0:x.info)?void 0:C.type))break;const t=Gr(e,ue),i=ie[t];this.currentTrack.info.colorSpace.primaries=i}break;case qr.Projection:if("video"!==(null==(E=null==(B=this.currentTrack)?void 0:B.info)?void 0:E.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.ProjectionPoseRoll:{if("video"!==(null==(A=null==(F=this.currentTrack)?void 0:F.info)?void 0:A.type))break;const t=-tn(e,ue);try{this.currentTrack.info.rotation=K(t)}catch(he){}}break;case qr.Audio:if("audio"!==(null==(M=null==(D=this.currentTrack)?void 0:D.info)?void 0:M.type))break;this.readContiguousElements(e.slice(de,ue));break;case qr.SamplingFrequency:if("audio"!==(null==(O=null==(N=this.currentTrack)?void 0:N.info)?void 0:O.type))break;this.currentTrack.info.sampleRate=tn(e,ue);break;case qr.Channels:if("audio"!==(null==(L=null==(z=this.currentTrack)?void 0:z.info)?void 0:L.type))break;this.currentTrack.info.numberOfChannels=Gr(e,ue);break;case qr.BitDepth:if("audio"!==(null==(q=null==(U=this.currentTrack)?void 0:U.info)?void 0:q.type))break;this.currentTrack.info.bitDepth=Gr(e,ue);break;case qr.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(de,ue)),this.currentCueTime=null;break;case qr.CueTime:this.currentCueTime=Gr(e,ue);break;case qr.CueTrackPositions:{if(null===this.currentCueTime)break;j(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(de,ue)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case qr.CueTrack:{const t=null==(W=this.currentSegment)?void 0:W.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Gr(e,ue)}break;case qr.CueClusterPosition:{const t=null==(H=this.currentSegment)?void 0:H.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;j(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Gr(e,ue)}break;case qr.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Gr(e,ue);break;case qr.SimpleBlock:{if(!this.currentCluster)break;const t=$r(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=cl(e),n=sl(e),s=n>>1&3;let a=!!(128&n);"audio"===(null==(V=i.track.info)?void 0:V.type)&&i.track.info.codec&&(a=!0);const o=nl(e,ue-(e.filePos-de)),l=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:a,data:o,lacing:s,decoded:!l,postProcessed:!1,mainAdditional:null})}break;case qr.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(de,ue)),this.currentBlock=null;break;case qr.Block:{if(!this.currentCluster)break;const t=$r(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=cl(e),n=sl(e)>>1&3,s=nl(e,ue-(e.filePos-de)),a=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:s,lacing:n,decoded:!a,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case qr.BlockAdditions:this.readContiguousElements(e.slice(de,ue));break;case qr.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(de,ue)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case qr.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=nl(e,ue);break;case qr.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Gr(e,ue);break;case qr.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Gr(e,ue);break;case qr.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case qr.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(de,ue));break;case qr.Targets:this.readContiguousElements(e.slice(de,ue));break;case qr.TargetTypeValue:50!==Gr(e,ue)&&(this.currentTagTargetIsMovie=!1);break;case qr.TagTrackUID:case qr.TagEditionUID:case qr.TagChapterUID:case qr.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case qr.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(de,ue));break;case qr.TagName:this.currentSimpleTagName=en(e,ue);break;case qr.TagString:{if(!this.currentSimpleTagName)break;const t=en(e,ue);this.processTagValue(this.currentSimpleTagName,t)}break;case qr.TagBinary:{if(!this.currentSimpleTagName)break;const t=nl(e,ue);this.processTagValue(this.currentSimpleTagName,t)}break;case qr.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(de,ue));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(null!=t.raw||(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new ut(this.currentAttachedFile.fileData,null!=(X=this.currentAttachedFile.fileMediaType)?X:void 0,null!=($=this.currentAttachedFile.fileName)?$:void 0,null!=(G=this.currentAttachedFile.fileDescription)?G:void 0)),(null==(Q=this.currentAttachedFile.fileMediaType)?void 0:Q.startsWith("image/"))&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}null!=t.images||(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:null!=(Y=this.currentAttachedFile.fileName)?Y:void 0,description:null!=(J=this.currentAttachedFile.fileDescription)?J:void 0})}this.currentAttachedFile=null}break;case qr.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=BigInt("0");for(let r=0;rt.order-e.order);break;case qr.ContentEncoding:this.currentDecodingInstruction={order:0,scope:Sn.Block,data:null},this.readContiguousElements(e.slice(de,ue)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case qr.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Gr(e,ue);break;case qr.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Gr(e,ue);break;case qr.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:Pn.Zlib,settings:null},this.readContiguousElements(e.slice(de,ue));break;case qr.ContentCompAlgo:if("decompress"!==(null==(te=null==(ee=this.currentDecodingInstruction)?void 0:ee.data)?void 0:te.type))break;this.currentDecodingInstruction.data.algorithm=Gr(e,ue);break;case qr.ContentCompSettings:if("decompress"!==(null==(se=null==(re=this.currentDecodingInstruction)?void 0:re.data)?void 0:se.type))break;this.currentDecodingInstruction.data.settings=nl(e,ue);break;case qr.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=de+ue,!0}decodeBlockData(e,t){j(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(j(r.data),"decompress"===r.data.type)if(r.data.algorithm===Pn.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i,r;if(!(null==(i=this.currentSegment)?void 0:i.metadataTags))return;const n=this.currentSegment.metadataTags;if(null!=n.raw||(n.raw={}),null!=(r=n.raw)[e]||(r[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":null!=n.title||(n.title=t);break;case"description":null!=n.description||(n.description=t);break;case"artist":null!=n.artist||(n.artist=t);break;case"album":null!=n.album||(n.album=t);break;case"album_artist":null!=n.albumArtist||(n.albumArtist=t);break;case"genre":null!=n.genre||(n.genre=t);break;case"comment":null!=n.comment||(n.comment=t);break;case"lyrics":null!=n.lyrics||(n.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||null!=n.date||(n.date=e)}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.trackNumber||(n.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.tracksTotal||(n.tracksTotal=r))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.discNumber||(n.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.discsTotal||(n.discsTotal=r))}}}getDurationFromMetadata(e){return z(this,null,function*(){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){j(r.trackBacking);const e=yield r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(null!=t?t:1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=null!=t?t:0,i})}}class En{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getFirstPacket(e){return z(this,null,function*(){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)})}intoTimescale(e){return Ce(e*this.internalTrack.segment.timestampFactor)}getPacket(e,t){return z(this,null,function*(){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=pe(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Te(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return j(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)})}fetchPacketInCluster(e,t,i){return z(this,null,function*(){var r,n;if(-1===t)return null;const s=e.trackData.get(this.internalTrack.id).blocks[t];if(j(s),s.decoded||(s.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,s.data),s.decoded=!0),!s.postProcessed){if("prores"===(null==(r=this.internalTrack.info)?void 0:r.codec)){if(!(s.data.length>=8&&105===s.data[4]&&99===s.data[5]&&112===s.data[6]&&102===s.data[7])){const e=new Uint8Array(s.data.length+8);J(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(s.data,8),s.data=e}}s.postProcessed=!0}const a=i.metadataOnly?rr:s.data,o=s.timestamp/this.internalTrack.segment.timestampFactor,l=s.duration/this.internalTrack.segment.timestampFactor,c={};s.mainAdditional&&"video"===(null==(n=this.internalTrack.info)?void 0:n.type)&&this.internalTrack.info.alphaMode&&(c.alpha=i.metadataOnly?rr:s.mainAdditional,c.alphaByteLength=s.mainAdditional.byteLength);const u=new nr(a,s.isKeyFrame?"key":"delta",o,l,e.dataStartPos+t,s.data.byteLength,c);return this.packetToClusterLocation.set(u,{cluster:e,blockIndex:t}),u})}performClusterLookup(e,t,i,r,n){return z(this,null,function*(){var s,a,o,l;const{demuxer:c,segment:u}=this.internalTrack;let d=null,h=null,f=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,n);-1!==i&&(h=e,f=i)}const m=pe(this.internalTrack.cuePoints,i,e=>e.time),p=-1!==m?this.internalTrack.cuePoints[m]:null,g=pe(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),k=-1!==g?this.internalTrack.clusterPositionCache[g]:null,y=Math.max(null!=(s=null==p?void 0:p.clusterPosition)?s:0,null!=(a=null==k?void 0:k.elementStartPos)?a:0)||null;let b;for(e?null===y||e.elementStartPos>=y?(b=e.elementEndPos,d=e):b=y:b=null!=y?y:u.clusterSeekStartPos;null===u.elementEndPos||b<=u.elementEndPos-2;){if(d){const e=d.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=c.reader.requestSliceRange(b,2,Kr);if(Xe(e)&&(e=yield e),!e)break;const i=b,s=Jr(e);if(!s||!Vr.includes(s.id)&&s.id!==qr.Void){const e=yield nn(c.reader,i,Vr,Math.min(null!=(o=u.elementEndPos)?o:1/0,i+Cn));if(e){b=e;continue}break}const a=s.id;let l=s.size;const m=e.filePos;if(a===qr.Cluster){d=yield c.readCluster(i,u),l=d.elementEndPos-m;const{blockIndex:e,correctBlockFound:r}=t(d);if(r)return this.fetchPacketInCluster(d,e,n);-1!==e&&(h=d,f=e)}if(void 0===l){j(a!==qr.Cluster);l=(yield rn(c.reader,m,jr,u.elementEndPos)).pos-m}const p=m+l;if(null===u.elementEndPos){let e=c.reader.requestSliceRange(p,2,Kr);if(Xe(e)&&(e=yield e),!e)break;if(Qr(e)===qr.Segment){u.elementEndPos=p;break}}b=p}if(p&&(!h||h.elementStartPosz(this,null,function*(){var e,t,i,r,n;let s=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(s=yield this.getFirstPacket({}));const a={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&s?Ft(s.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&s?Wt(s.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&s?ei(s.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&s?ii(s.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&s?ri(s.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!oe(this.internalTrack.info.colorSpace)){const n=Ui(a);null!=(e=this.internalTrack.info.colorSpace).primaries||(e.primaries=n.primaries),null!=(t=this.internalTrack.info.colorSpace).transfer||(t.transfer=n.transfer),null!=(i=this.internalTrack.info.colorSpace).matrix||(i.matrix=n.matrix),null!=(r=this.internalTrack.info.colorSpace).fullRange||(r.fullRange=n.fullRange)}const o={codec:Li(a),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(n=this.internalTrack.info.codecDescription)?n:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Rn extends En{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>z(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&xi(e.data)}return{codec:qi({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Fn=(e,t,i,r=null)=>z(null,null,function*(){const n=B(2,16);let s=t;for(;null===i||s=4;){const t=a.filePos,i=dl(a),n=null!==e.fileSize?e.fileSize-s:null,o=Yi(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&tr(o.header.channel)===tr(r.channel)))return{header:o.header,startPos:s};a.filePos=t+o.bytesAdvanced,s=a.filePos}}return null});class An extends ir{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new ue,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new Dn(this)]}))()})}advanceReader(){return z(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Rl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=yield Fn(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=Qi(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(Xe(r)&&(r=yield r),r){const n=dl(r);if(n===$i||n===Gi){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(Xe(t)&&(t=yield t),t){const e=nl(t,12),i=J(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Zi.FrameCount?i.getUint32(4,!1):null,fileSize:r&Zi.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const n=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:n,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame})}getMimeType(){return z(this,null,function*(){return"audio/mpeg"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=!0;let n=this.reader.requestSlice(i.filePos,r.size);if(Xe(n)&&(n=yield n),!n)break;Fl(n,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=xl){let e=this.reader.requestSlice(this.reader.fileSize-xl,xl);Xe(e)&&(e=yield e),j(e);"TAG"===Tl(e,3)&&El(e,this.metadataTags)}return this.metadataTags}finally{e()}})}}class Dn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return j(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){const e=this.demuxer;if(j(null!==e.firstFrameHeader),j(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,n=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(n<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const On=e=>{const t=J(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^t])>>>0}return t.setUint32(22,i,!0),r},zn=(e,t,i)=>{let r=0,n=null;if(e.length>0)if("vorbis"===t.codec){j(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,a=(e[0]&s)>>1;if(a>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const l=t.vorbisInfo.modeBlockflags[a];if(n=t.vorbisInfo.blocksizes[l],1===l){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+n>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ni[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:n}},Ln=27,Un=282,qn=e=>{const t=e.filePos;if(hl(e)!==Mn)return null;e.skip(1);const i=sl(e),r=kl(e),n=hl(e),s=hl(e),a=hl(e),o=sl(e),l=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:c+u,dataStartPos:t+c,dataSize:u,headerType:i,granulePosition:r,serialNumber:n,sequenceNumber:s,checksum:a,lacingValues:l}},Wn=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===Mn)return!0;e.skip(1)}}return!1};class Hn extends ir{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,Ln,Un);if(Xe(t)&&(t=yield t),!t)break;const i=qn(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=yield this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?yield this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&(yield this.readOpusMetadata(e,t)),null!==t.codecInfo.codec&&this.trackBackings.push(new Vn(t,this)))}}))()})}readVorbisMetadata(e,t){return z(this,null,function*(){let i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=yield this.findNextPacketStart(r),!i)return;const n=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!n)return;if(3!==r.data[0]||5!==n.data[0])return;const s=[],a=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};a(e.data.length),a(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+n.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(n.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=n;const l=J(e.data);t.numberOfChannels=l.getUint8(11),t.sampleRate=l.getUint32(12,!0);const c=l.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&c),1<<(c>>4)],modeBlockflags:si(n.data).modeBlockflags},ci(r.data.subarray(7),this.metadataTags)})}readOpusMetadata(e,t){return z(this,null,function*(){const i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const n=(e=>{const t=J(e),i=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),s=t.getInt16(16,!0),a=t.getUint8(18);let o=null;return a&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:n,outputGain:s,channelMappingFamily:a,channelMappingTable:o}})(e.data);t.numberOfChannels=n.outputChannelCount,t.sampleRate=Wi,t.codecInfo.opusInfo={preSkip:n.preSkip},ci(r.data.subarray(8),this.metadataTags)})}readPacket(e,t){return z(this,null,function*(){j(te+t.length,0);if(0===o)return null;const l=new Uint8Array(o);let c=0;for(let e=0;e{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(yield Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})))).filter(Boolean)})})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}class Vn{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new ue,this.internalSampleRate="opus"===e.codecInfo.codec?Wi:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return j(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}getDecoderConfig(){return z(this,null,function*(){var e;return j(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:null!=(e=this.bitstream.description)?e:void 0}})}getName(){return null}getLanguageCode(){return xe}getDisposition(){return R(_({},dt),{primary:!1})}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(j(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:n}=zn(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new nr(i.metadataOnly?rr:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:n}),s}getFirstPacket(e){return z(this,null,function*(){j(this.bitstream.lastMetadataPacket);const t=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(j(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=yield this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)})}getNextPacket(e,t){return z(this,null,function*(){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=yield this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const n=i.timestampInSamples+i.durationInSamples,s=yield this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:n,vorbisLastBlocksize:i.vorbisBlockSize},t)})}getPacket(e,t){return z(this,null,function*(){var i,r;if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const n=Ce(e*this.internalSampleRate);if(0===n)return this.getFirstPacket(t);if(n<0)return null;j(this.bitstream.lastMetadataPacket);const s=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!s)return null;let a=s.startPage,o=this.demuxer.reader.fileSize;const l=[a];e:for(;a.headerStartPos+a.totalSizen?o=c.headerStartPos:(a=c,l.push(c));continue e}i=c.headerStartPos+c.totalSize}}let c=s.startPage;for(const e of l){if(e.granulePosition===a.granulePosition)break;(!c||e.headerStartPos>c.headerStartPos)&&(c=e)}let u=c;const d=[u];for(;u.serialNumber!==this.bitstream.serialNumber||u.granulePosition!==a.granulePosition;){const e=u.headerStartPos+u.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Ln,Un);Xe(t)&&(t=yield t),j(t);const i=qn(t);j(i),u=i,u.serialNumber===this.bitstream.serialNumber&&d.push(u)}j(-1!==u.granulePosition);let h,f,m=null,p=u,g=0;if(u.headerStartPos===s.startPage.headerStartPos)h=this.granulePositionToTimestampInSamples(0),f=!0,m=0;else{h=0,f=!1;for(let t=u.lacingValues.length-1;t>=0;t--){if(u.lacingValues[t]<255){m=t+1;break}}if(null===m)throw new Error("Invalid page with granule position: no packets end on this page.");g=m-1;const e={data:rr,endPage:p,endSegmentIndex:g};if(yield this.demuxer.findNextPacketStart(e)){const e=Kn(d,u,m);j(e);const t=jn(d,e.page,e.segmentIndex);t&&(u=t.page,m=t.segmentIndex)}else for(;;){const e=Kn(d,u,m);if(!e)break;const t=jn(d,e.page,e.segmentIndex);if(!t)break;if(u=t.page,m=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,g=e.segmentIndex;break}}}let k=null,y=null;for(;null!==u;){j(null!==m);const e=yield this.demuxer.readPacket(u,m);if(!e)break;if(!(u.headerStartPos===s.startPage.headerStartPos&&mn||Math.max(a.timestampInSamples,0)===n))break}const a=yield this.demuxer.findNextPacketStart(e);if(!a)break;u=a.startPage,m=a.startSegmentIndex}return k})}getPacketSequential(e,t){return z(this,null,function*(){const i=yield this.sequentialScanMutex.acquire();try{const i=Ce(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=pe(this.sequentialScanCache,i,e=>e.timestampInSamples);let n;if(-1!==r){const e=this.sequentialScanCache[r];n=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else n=yield this.getFirstPacket(t);let s=0;for(;n&&n.timestampe)break;if(n=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(n);j(e),this.sequentialScanCache.length>0&&j(X(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return n}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const jn=(e,t,i)=>{let r=t,n=i;e:for(;;){for(n--;n>=0;n--){if(r.lacingValues[n]<255){n++;break e}}j(-1===n);if(!(1&r.headerType)){n=0;break}const t=be(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=be(e,e=>e.headerStartPosz(this,null,function*(){var e,t;let i=this.reader.requestSlice(0,12);Xe(i)&&(i=yield i),j(i);const r=Tl(i,4),n="RIFX"!==r,s="RF64"===r,a=ul(i,n);let o=s?this.reader.fileSize:Math.min(a+8,null!=(e=this.reader.fileSize)?e:1/0);if("WAVE"!==Tl(i,4))throw new Error("Invalid WAVE file - wrong format");let l=0,c=null,u=i.filePos;for(;null===o||u=18&&357!==n){const e=al(r,i),s=t-18;if(Math.min(s,e)>=22&&n===Xn.EXTENSIBLE){r.skip(6);const e=nl(r,16);n=e[0]|e[1]<<8}}if(n!==Xn.MULAW&&n!==Xn.ALAW||(l=8),n!==Xn.PCM&&n!==Xn.IEEE_FLOAT&&n!==Xn.ALAW&&n!==Xn.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${n}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(n===Xn.PCM&&![8,16,24,32].includes(l))throw new Error(`Unsupported WAVE PCM bit depth (${l}). Only 8, 16, 24, and 32 bits are supported.`);if(n===Xn.IEEE_FLOAT&&![32,64].includes(l))throw new Error(`Unsupported WAVE float bit depth (${l}). Only 32 and 64 bits are supported.`);this.audioInfo={format:n,numberOfChannels:s,sampleRate:a,sampleSizeInBytes:Math.ceil(l/8),blockSizeInBytes:o}})}parseListChunk(e,t,i){return z(this,null,function*(){var r,n,s,a,o,l,c,u,d,h,f;let m=this.reader.requestSlice(e,t);if(Xe(m)&&(m=yield m),!m)return;const p=Tl(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=Tl(m,4),t=ul(m,i),p=nl(m,t);let k=0;for(let i=0;i0&&(null!=(l=this.metadataTags).trackNumber||(l.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(c=this.metadataTags).tracksTotal||(c.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||null!=(u=this.metadataTags).date||(u.date=e)}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&(null!=(d=this.metadataTags).date||(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":null!=(h=this.metadataTags).genre||(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":null!=(f=this.metadataTags).comment||(f.comment=y)}g+=8+t+(1&t)}})}parseId3Chunk(e,t){return z(this,null,function*(){let i=this.reader.requestSlice(e,t);if(Xe(i)&&(i=yield i),!i)return;const r=Rl(i);if(r){const n=t-Cl;if(r.size=Math.min(r.size,n),r.size>0){const t=i.slice(e+Cl,r.size);Fl(t,r,this.metadataTags)}}})}getCodec(){if(j(this.audioInfo),this.audioInfo.format===Xn.MULAW)return"ulaw";if(this.audioInfo.format===Xn.ALAW)return"alaw";if(this.audioInfo.format===Xn.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===Xn.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}j(!1)}getMimeType(){return z(this,null,function*(){return"audio/wav"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}const Qn=2048;class Yn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.format}getDecoderConfig(){return z(this,null,function*(){const e=this.demuxer.getCodec();return e?(j(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null})}getNumberOfChannels(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return j(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return xe}getDisposition(){return _({},dt)}getPacketAtIndex(e,t){return z(this,null,function*(){j(e>=0),j(this.demuxer.audioInfo);const i=e*Qn*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(Qn*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(Xe(e)&&(e=yield e),!e)return null}let n;if(t.metadataOnly)n=rr;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);Xe(e)&&(e=yield e),j(e),n=nl(e,r)}const s=e*Qn/this.demuxer.audioInfo.sampleRate,a=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new nr(n,"key",s,a,e,r)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getPacket(e,t){return z(this,null,function*(){j(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Qn,(this.demuxer.dataSize-1)/(Qn*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=yield this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;j(null===this.demuxer.reader.fileSize);let n=yield this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;n;){const e=yield this.getNextPacket(n,t);if(!e)break;n=e}return n})}getNextPacket(e,t){j(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Qn);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Jn=e=>{const t=e.filePos,i=nl(e,9),r=new ht(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const n=r.readBits(1),s=r.readBits(2)+1,a=r.readBits(4);if(15===a)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const l=r.readBits(13);r.skipBits(11);const c=r.readBits(2)+1;if(1!==c)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===n?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:l,numberOfAacFrames:c,crcCheck:u,startPos:t}},Zn=1024;class es extends ir{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new ue,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();j(this.firstFrameHeader),this.trackBackings=[new ts(this)]}))()})}advanceReader(){return z(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Rl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Jn(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=ft[t.samplingFrequencyIndex];j(void 0!==i);const r=Zn/i,n={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(n),this.nextTimestampInSamples+=Zn,this.lastLoadedPos=t.startPos+t.frameLength})}getMimeType(){return z(this,null,function*(){return"audio/aac"})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return z(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,Cl);if(Xe(t)&&(t=yield t),!t)break;const i=Rl(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(Xe(r)&&(r=yield r),!r)break;Fl(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}})}}class ts{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Zn}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return xe}getCodec(){return"aac"}getInternalCodecId(){return j(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){j(this.demuxer.firstFrameHeader);const e=mt[this.demuxer.firstFrameHeader.channelConfiguration];return j(void 0!==e),e}getSampleRate(){j(this.demuxer.firstFrameHeader);const e=ft[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return j(void 0!==e),e}getDisposition(){return _({},dt)}getDecoderConfig(){return z(this,null,function*(){return j(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}})}getPacketAtIndex(e,t){return z(this,null,function*(){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=rr;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(Xe(e)&&(e=yield e),!e)return null;r=nl(e,i.dataSize)}return new nr(r,"key",i.timestamp,i.duration,e,i.dataSize)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getNextPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=me(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1z(this,null,function*(){var e;let t=0;for(;;){let e=this.reader.requestSlice(t,Cl);if(Xe(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const i=Rl(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);Xe(r)&&(r=yield r),j(r),Fl(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:s.end-e,isLastFrame:!0};if(255===sl(s)){const t=s.filePos;if(sl(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-a.num!==1){s.filePos=t;continue}}else if(r.num-a.num!==a.blockSize){s.filePos=t;continue}return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:i,isLastFrame:!1}}}})}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=nl(e,4),n=new ht(r);if(32764!==n.readBits(15))return null;if(null===this.blockingBit){j(t);const e=n.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){j(!t);if(1!==n.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");j(!t);if(0!==n.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*B(2,e):6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?B(2,e):null)(n.readBits(4));if(!s)return null;j(this.audioInfo);const a=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(n.readBits(4),this.audioInfo.sampleRate);if(!a)return null;n.readBits(4),n.readBits(3);if(0!==n.readBits(1))return null;const o=(e=>{let t=0;const i=new ht(nl(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],n=t-1,s=new ht(nl(e,n)),a=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?ol(e)+1:"uncommon-u8"===t?sl(e)+1:"number"===typeof t?t:(ve(t),void j(!1)))(e,s),c=((e,t)=>"uncommon-u16"===t?ol(e):"uncommon-u16-10"===t?10*ol(e):"uncommon-u8"===t?sl(e):"number"===typeof t?t:null)(e,a);if(null===c)return null;if(c!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=sl(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(nl(e,u));return d!==h?null:{num:o,blockSize:l,sampleRate:c}}advanceReader(){return z(this,null,function*(){yield this.readMetadata(),j(null!==this.lastLoadedPos),j(this.audioInfo);const e=this.lastLoadedPos,t=yield this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)})}}class rs{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return xe}getTimeResolution(){return j(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return j(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}getDisposition(){return _({},dt)}getDecoderConfig(){return z(this,null,function*(){return j(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}})}getPacket(e,t){return z(this,null,function*(){if(j(this.demuxer.audioInfo),e<0)return null;const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=pe(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){yield this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],n=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(n+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);yield this.demuxer.advanceReader()}}finally{i()}})}getNextPacket(e,t){return z(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}getPacketAtIndex(e,t){return z(this,null,function*(){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=rr;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(Xe(e)&&(e=yield e),!e)return null;r=nl(e,i.byteSize)}j(this.demuxer.audioInfo);const n=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new nr(r,"key",n,s,e,i.byteSize)})}getFirstPacket(e){return z(this,null,function*(){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)})}}const ns=9e4,ss=B(2,33),as=188,os="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",ls=new Set([133,134,162]),cs=new Set;class us extends ir{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}readMetadata(){return z(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){let e=this.reader.requestSlice(0,205);Xe(e)&&(e=yield e),j(e);const t=nl(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=as;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,n=!1,s=!1;for(;;){const e=yield this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=yield this.readSection(i,!0,!s);if(!t)break;const a=3,o=32;let l=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i);l=2===e.readBits(8)}}if(0!==t.pid||n)if(t.pid!==r&&!l||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=hs(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(yield this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new ks(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,yield r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=Ft(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];j(t);const i=Nt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const n=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;n>0&&s>0&&(n>s?(e.info.squarePixelWidth=Math.round(e.info.width*n/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/n))),e.info.colorSpace={primaries:ie[i.colourPrimaries],transfer:ne[i.transferCharacteristics],matrix:ae[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=Wt(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===St.SPS_NUT).nalUnits[0];j(t);const i=qt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:ie[i.colourPrimaries],transfer:ne[i.transferCharacteristics],matrix:ae[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Li({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(yield r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=il.tempFromBytes(r.suppliedPacket.data),i=Jn(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=mt[i.channelConfiguration],e.info.sampleRate=ft[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=dl(il.tempFromBytes(r.suppliedPacket.data)),i=Yi(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=tr(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=di(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=ui[t.acmod]+t.lfeon,e.info.sampleRate=yt[t.fscod]}else if("eac3"===e.info.codec){const t=mi(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=pi(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=gi(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=Ii(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:qi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const n=e.readBits(10),l=e.pos+8*n;let c=!1;for(;e.pos=4){const t=e.readBits(32);c||(c=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=l;8*(r+a)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),n=e.pos+8*r;let s=!1,a=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let l=null;const u=c&&ls.has(t)?130:t;switch(u){case 27:case 36:l={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",l={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:a?l={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?l={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(l={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:cs.has(t)||(lt._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),cs.add(t))}l&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:l,referencePesPackets:[]})}s=!0}else{const e=new ht(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+a)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");n=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!n)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const a of this.elementaryStreams)a.initialized&&("video"===a.info.type?this.trackBackingEntries.push(new ms(a)):this.trackBackingEntries.push(new ps(a)))}))()})}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),this.trackBackingEntries})}getMetadataTags(){return z(this,null,function*(){return{}})}getMimeType(){return z(this,null,function*(){yield this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(yield Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null}))))})}readSection(e,t,i=!1){return z(this,null,function*(){let r=e,n=e;const s=[];let a,o=0,l=null,c=!0,u=0;for(;;){const e=yield this.readPacket(n);if(n+=this.packetStride,!e)break;if(l){if(e.pid!==l.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;l=e}const a=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(a&&(h=1+e.body[0],e===l&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=n,!t&&o>=64){c=!1;break}if(-1!==me(this.sectionEndPositions,r,e=>e)){c=!1;break}}if(c){const e=pe(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!l)return null;if(1===s.length)a=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);a=new Uint8Array(e);let t=0;for(const i of s)a.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:l.pid,payload:a,randomAccessIndicator:u}})}readPacketHeader(e){return z(this,null,function*(){let t=this.reader.requestSlice(e,4);if(Xe(t)&&(t=yield t),!t)return null;if(71!==sl(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=ol(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:sl(t)>>4&3}})}readPacket(e){return z(this,null,function*(){let t=this.reader.requestSlice(e,as);if(Xe(t)&&(t=yield t),!t)return null;const i=nl(t,as);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}})}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ss-t?-ss:ss}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new ht(t.payload);if(1!==r.readBits(24))return null;const n=r.readBits(8);if(r.skipBits(16),188===n||190===n||191===n||240===n||241===n||255===n||242===n||248===n)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let a=null;if(2===s||3===s)a=0,r.skipBits(4),a+=r.readBits(3)*(1<<30),r.skipBits(1),a+=32768*r.readBits(15),r.skipBits(1),a+=r.readBits(15),a=e.normalizeTimestamp(a);else if(i)throw new Error(os);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:a,randomAccessIndicator:t.randomAccessIndicator}},hs=(e,t,i)=>{j(null!==t.endPos);const r=ds(e,t,i);if(!r)return null;const n=new ht(t.payload);n.skipBits(32);const s=n.readBits(16);n.skipBits(16);const a=n.readBits(8),o=n.pos+8*a;n.pos=o;const l=o/8;j(Number.isInteger(l));const c=t.payload.subarray(l,s>0?6+s:t.payload.byteLength);return R(_({},r),{data:c})};class fs{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,j(r instanceof fs),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return xe}getDisposition(){return R(_({},dt),{primary:!1})}getTimeResolution(){return ns}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return z(this,null,function*(){return null})}getLiveRefreshInterval(){return z(this,null,function*(){return null})}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new nr(i.metadataOnly?rr:e.data,r,e.pts/ns,Math.max(t/ns,0),e.sequenceNumber,e.data.byteLength)}getFirstPacket(e){return z(this,null,function*(){const t=this.elementaryStream.firstSection;j(t);const i=hs(this.elementaryStream.demuxer,t,!0);j(i);const r=new ks(this.elementaryStream,i),n=new ys(this,r),s=yield n.readNext();if(!s)return null;const a=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(a,n),this.packetSectionStarts.set(a,s.packet.sectionStartPos),a})}getNextPacket(e,t){return z(this,null,function*(){let i=this.packetBuffers.get(e);if(i){const r=yield i.readNext();if(!r)return null;this.packetBuffers.delete(e);const n=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(n,i),this.packetSectionStarts.set(n,r.packet.sectionStartPos),n}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const n=this.elementaryStream.demuxer,s=yield n.readSection(r,!0);j(s);const a=hs(n,s,!0);j(a);const o=new ks(this.elementaryStream,a);i=new ys(this,o);const l=e.sequenceNumber;for(;;){const e=yield i.readNext();if(!e)return null;if(e.packet.sequenceNumber>l){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}})}getNextKeyPacket(e,t){return z(this,null,function*(){let i=e;for(;;){if(i=yield this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}})}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}doPacketLookup(e,t,i){return z(this,null,function*(){var r,n,s,a,o,l;const c=Ce(e*ns),u=this.elementaryStream.demuxer,{reader:d,seekChunkSize:h}=u,f=this.elementaryStream.pid,m=(e,t,i)=>z(this,null,function*(){let r=e;for(;re.pts),T=-1!==b?y[b]:null;if(T&&c-T.pts<45e3)k=T.sectionStartPos;else{let e=0;if(null!==d.fileSize){const t=Math.ceil(d.fileSize/h);if(t>1){let i=0,r=t-1;for(e=i;i<=r;){const t=Math.floor((i+r)/2),n=_e(t*h,u.packetStride)+g.sectionStartPos,s=n+h,a=yield m(n,s,!1);a?a.pesPacketHeader.pts<=c?(e=t,i=t+1):r=t-1:r=t-1}}}k=_e(e*h,u.packetStride)+g.sectionStartPos}const v=yield m(k,null!=(r=d.fileSize)?r:1/0,!1);let S=null!=(n=null==v?void 0:v.pesPacketHeader)?n:null;S||(S=g);const w=this.getReorderSize(),P=(e,t)=>z(this,null,function*(){var r,n;const s=yield u.readSection(e,!0);j(s);const a=hs(u,s,!0);j(a);const o=new ks(this.elementaryStream,a),l=new ys(this,o);for(;;){if((null!=(n=null==(r=X(l.presentationOrderPackets))?void 0:r.pts)?n:-1/0)>=c)break;if(!(yield l.readNextPacket()))break}const d=Te(l.presentationOrderPackets,t);if(-1===d)return null;const h=l.presentationOrderPackets[d],f=0===d?0:h.pts-l.presentationOrderPackets[d-1].pts;for(;l.decodeOrderPackets[0]!==h;)l.decodeOrderPackets.shift();l.lastDuration=f;const m=yield l.readNext();j(m);const p=this.createEncodedPacket(m.packet,m.duration,i);return this.packetBuffers.set(p,l),this.packetSectionStarts.set(p,m.packet.sectionStartPos),p});if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=S.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){if(e.pts>c)break e;S=e,gs(this.elementaryStream,S);break}}}e+=u.packetStride}}e:for(let e=0;e=u.packetOffset;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){S=e;break}}}e-=u.packetStride}}return P(S.sectionStartPos,e=>e.pts<=c)}{let e=k,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let r=null;const n=e<=g.sectionStartPos;let k,y=null;if(n)k=g,y=p;else{const t=yield m(e,null!=(s=d.fileSize)?s:1/0,i);k=null!=(a=null==t?void 0:t.pesPacketHeader)?a:null,y=null!=(o=null==t?void 0:t.section)?o:null}let b=!1,T=0;e:for(;k&&!(null!==t&&k.sectionStartPos>=t);){if(k.pts<=c){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===k.randomAccessIndicator;else{j(y);const t=hs(u,y,!0);j(t);const i=new ks(this.elementaryStream,t);yield i.markNextPacket(),e=1===(null==(l=i.suppliedPacket)?void 0:l.randomAccessIndicator)}e&&(r=k)}if(k.pts>c&&(b=!0),b&&(T++,T>w))break;let e=k.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,i);if(t){const e=ds(u,t,!1);if(e&&null!==e.pts){k=e,y=t,gs(this.elementaryStream,k);break}}}e+=u.packetStride}}if(r){let e=r;if(0===T)e:for(let r=0;r=u.packetOffset;){const r=yield u.readPacketHeader(t);if(!r)break e;if(r.pid===f&&1===r.payloadUnitStartIndicator){const r=yield u.readSection(t,i);if(r){const t=ds(u,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=u.packetStride}}const t=yield P(e.sectionStartPos,e=>e.pts<=c&&1===e.randomAccessIndicator);return j(t),t}if(n)return null;t=e,e=Math.max(_e(e-g.sectionStartPos-h,u.packetStride)+g.sectionStartPos,g.sectionStartPos)}}})}}class ms extends fs{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}getColorSpace(){return z(this,null,function*(){return this.elementaryStream.info.colorSpace})}canBeTransparent(){return z(this,null,function*(){return!1})}getDecoderConfig(){return z(this,null,function*(){return j(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class ps extends fs{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}getDecoderConfig(){return z(this,null,function*(){return j(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const gs=(e,t)=>{const i=e.referencePesPackets,r=pe(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const n=i[r];if(t.pts<=n.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return j(e),e}bufferData(e){return z(this,null,function*(){const t=this.endPos+e;for(;this.endPos=c)break;u=t;const r=o+u;if(u+3>=c){this.seekTo(r);break}const d=l[u+1],h=l[u+2],f=l[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=r;null!=n||(n=p);const g=u+m,k=g+i,y=6;if(k+("avc"===e?y:1)>c){this.seekTo(r);break}const b=l[g];let T,v,S;if("avc"===e)T=Ct(b),v=T===Tt.NON_IDR_SLICE||T===Tt.SLICE_DPA||T===Tt.IDR,S=T===Tt.SEI||T===Tt.SPS||T===Tt.PPS||T===Tt.AUD;else{T=Ut(b);if(((1&b)<<5|l[g+1]>>3)>0){u+=m;continue}v=T<=St.RASL_R||T>=St.BLA_W_LP&&T<=21,S=T>=St.VPS_NUT&&T<=37||T===St.PREFIX_SEI_NUT||T>=41&&T<=44||T>=48&&T<=55}let w=!1;if(v){let t;if("avc"===e){const e=l.subarray(k,k+y),i=$(new ht(e));t=!s||i<=a,a=i}else t=l[k]>>7===1;t&&(s?w=!0:s=!0)}else S&&s&&(w=!0);if(w){const e=p-n;return this.seekTo(n),this.supplyPacket(e,0)}u+=m}if(rn){const e=this.endPos-n;return this.seekTo(n),this.supplyPacket(e,0)}}else{const n=r.info.codec,s=128;for(;;){let a=this.ensureBuffered(s);Xe(a)&&(a=yield a);const o=this.currentPos;for(;this.currentPos-o>6,a=63&i[4];if(3===n||a>37){this.seekTo(e+1);continue}const o=hi[3*a+n];j(void 0!==o),this.seekTo(e),t=this.ensureBuffered(o),Xe(t)&&(t=yield t);const l=Math.round(13824e4/r.info.sampleRate);return this.supplyPacket(t,l)}if("eac3"===n){if(11!==s)continue;this.skip(-1);const e=this.currentPos;let t=this.ensureBuffered(5);if(Xe(t)&&(t=yield t),t<5)return;const i=this.readBytes(5);if(11!==i[0]||119!==i[1]){this.seekTo(e+1);continue}const n=2*(((7&i[2])<<8|i[3])+1),a=3===i[4]>>6?3:i[4]>>4&3,o=fi[a];this.seekTo(e),t=this.ensureBuffered(n),Xe(t)&&(t=yield t);const l=256*o,c=Math.round(l*ns/r.info.sampleRate);return this.supplyPacket(t,c)}if("dts"===n){if(127!==s&&100!==s)continue;this.skip(-1);const n=this.currentPos;let a=this.ensureBuffered(18);if(Xe(a)&&(a=yield a),a<18)return;const o=this.readBytes(18),l=Ci(o);let c=l?null:Bi(o);if(!l&&!c){this.seekTo(n+1);continue}if(c&&!c.asset){this.seekTo(n);const t=Math.min(c.frameSize,4096);let i=this.ensureBuffered(t);Xe(i)&&(i=yield i),c=null!=(e=Bi(this.readBytes(i)))?e:c}let u=l?l.frameSize:c.frameSize;if(l){let e=4*Math.ceil(l.frameSize/4);for(;;){this.seekTo(n);const t=e+10;let i=this.ensureBuffered(t);if(Xe(i)&&(i=yield i),i=0)}readNext(){return z(this,null,function*(){if(0===this.decodeOrderPackets.length){if(!(yield this.readNextPacket()))return null}yield this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(j(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}})}readNextPacket(){return z(this,null,function*(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||(yield this.context.markNextPacket()),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)})}ensureCurrentPacketHasNext(){return z(this,null,function*(){const e=this.decodeOrderPackets[0];for(j(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(yield this.readNextPacket()))break}})}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const bs="application/vnd.apple.mpegurl",Ts="#EXT-X-STREAM-INF:",vs="#EXT-X-I-FRAME-STREAM-INF:",Ss="#EXT-X-MEDIA:",ws="#EXTINF:",Ps="#EXT-X-MAP:",Is="#EXT-X-KEY:",xs="#EXT-X-MEDIA-SEQUENCE:",Cs="#EXT-X-BYTERANGE:",Bs="#EXT-X-PROGRAM-DATE-TIME:",Es="#EXT-X-TARGETDURATION:",_s="#EXT-X-PLAYLIST-TYPE:",Rs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class Fs{constructor(e){this._attributes={};let t="",i="",r=!1,n=!1;for(let s=0;sz(this,null,function*(){const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=et(e,e=>"video"===e.getType())+1;e.push(new Ms(this,t,i))}else if("audio"===t.type){const i=et(e,e=>"audio"===e.getType())+1;e.push(new Ns(this,t,i))}}else{if(this.firstSegment=yield this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=yield t.getTracks();for(const r of i)if("video"===r.type){const t=et(e,e=>"video"===e.getType())+1;e.push(new Ms(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=et(e,e=>"audio"===e.getType())+1;e.push(new Ns(this,{id:e.length+1,type:"audio"},t))}}return e}))()})}getFirstTimestampForInput(e){return z(this,null,function*(){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=yield e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i})}getMediaOffset(e,t){return z(this,null,function*(){var i;const r=null!=(i=e.firstSegment)?i:e;let n;if(this.firstSegmentFirstTimestamps.has(r))n=this.firstSegmentFirstTimestamps.get(r);else{const e=this.getInputForSegment(r);n=yield this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(r,n)}if(r===e)return r.timestamp-n;const s=yield this.getFirstTimestampForInput(t),a=e.timestamp-r.timestamp,o=s-n-a;return Math.abs(o)<=Math.min(.25,a)?r.timestamp-n:e.timestamp-s})}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class Ds{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>z(this,null,function*(){var e,t;if(null!=(e=this.segmentedInput).firstSegment||(e.firstSegment=yield this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let i=this.segmentedInput.firstSegment,r=null;for(;i;){const e=this.segmentedInput.getInputForSegment(i);if(r=null!=(t=(yield e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number))?t:null,r)break;i=yield this.segmentedInput.getNextSegment(i,{})}if(!r)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=r,this.firstSegment=i}))()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}getHasOnlyKeyPackets(){return this.delegate(()=>{var e,t,i;return null!=(i=null==(t=(e=this.firstInputTrack._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:null})}getPairingMask(){return BigInt("1")}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}isRelativeToUnixEpoch(){return z(this,null,function*(){return yield this.hydrate(),j(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp})}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}createAdjustedPacket(e,t,i){return z(this,null,function*(){j(e.sequenceNumber>=0),j(this.segmentedInput.firstSegment);const r=yield this.segmentedInput.getMediaOffset(t,i.input),n=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:Ee(e.timestamp+r,yield i.getTimeResolution()),sequenceNumber:Math.floor(1e8*n)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s})}getFirstPacket(e){return z(this,null,function*(){var t;yield this.hydrate(),j(this.firstInputTrack),j(this.firstSegment);let i=this.firstInputTrack,r=this.firstSegment;for(;;){if(i){const t=yield i._backing.getFirstPacket(e);if(t)return this.createAdjustedPacket(t,r,i)}if(r=yield this.segmentedInput.getNextSegment(r,{skipLiveWait:e.skipLiveWait}),!r)break;const n=this.segmentedInput.getInputForSegment(r);i=null!=(t=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number))?t:null}return null})}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}_getNextInternal(e,t,i){return z(this,null,function*(){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const n=i?yield r.track._backing.getNextKeyPacket(r.sourcePacket,t):yield r.track._backing.getNextPacket(r.sourcePacket,t);if(n)return this.createAdjustedPacket(n,r.segment,r.track);let s=r.segment;for(;;){const e=yield this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),n=(yield i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){s=e;continue}const a=yield n._backing.getFirstPacket(t);return a?this.createAdjustedPacket(a,e,n):null}})}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}_getPacketInternal(e,t,i){return z(this,null,function*(){let r=yield this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(yield this.hydrate();r;){const n=this.segmentedInput.getInputForSegment(r),s=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const a=yield this.segmentedInput.getMediaOffset(r,n),o=e-a,l=i?yield s._backing.getKeyPacket(o,t):yield s._backing.getPacket(o,t);if(l)return this.createAdjustedPacket(l,r,s);r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null})}}class Ms extends Ds{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}getColorSpace(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())})}canBeTransparent(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())})}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}class Ns extends Ds{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}getDecoderConfig(){return z(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}Ye();const Os=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class zs extends st{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}getSizeOrNull(){return z(this,null,function*(){var e;if(this._disposed)throw new el;return null!=(e=this._sizePromise)?e:this._sizePromise=(()=>z(this,null,function*(){let e=this._getFileSize();return void 0!==e||(yield this._read(0,1,0,Os),e=this._getFileSize(),j(void 0!==e)),e}))()})}getSize(){return z(this,null,function*(){if(this._disposed)throw new el;const e=yield this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e})}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new ea(this,e,t)}_dispatchRead(e,t){var i;null==(i=this.onread)||i.call(this,e,t),this._emit("read",{start:e,end:t})}ref(){return new Ls(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Ls{constructor(e){var t;if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),null==(t=e._refFinalizationRegistry)||t.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){var e;if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const t=this.source;j(t._refCount>0),t._decrementRefCount(),null==(e=t._refFinalizationRegistry)||e.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Us extends zs{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof zs||e instanceof Ls))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof zs?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return Xe(t)?t.then(i):i(t)}}const qs=(e,t)=>e.path===t.path;class Ws extends Us{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof zs?e.ref():e;return this._root=t,this._rootRequest=null,t};Xe(e)?this._rootRequest=e.then(t):(t(e),j(this._root))}if(this._rootRequest)return this._rootRequest.then(n=>n.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const Hs="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class Vs extends zs{constructor(e,t={}){var i;if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!Je(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new Zs({maxCacheSize:null!=(i=t.maxCacheSize)?i:8*B(2,20),maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),null==Hs||Hs.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:Js.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}_runWorker(e){return z(this,null,function*(){j(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Ue()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),null==Hs||Hs.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch(r){}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return lt._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(B(2,e-2),16)},Xs=new Set;class $s extends Us{constructor(e,t={}){var i,r,n,s;if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!Je(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new $s(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=null!=(i=t.getRetryDelay)?i:Ks,this._requestInit=_({},t.requestInit);let a=null;if(null==(r=t.requestInit)?void 0:r.headers){const e=_({},Ne(t.requestInit.headers)),i=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==i&&(a=e[i],delete e[i],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){null!=a||(a=t);const i=new Request(e);i.headers.delete("Range"),this._url=i}}if(null!==a){const e=Qs(a);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new Zs({maxCacheSize:null!=(n=t.maxCacheSize)?n:64*B(2,20),maxWorkerCount:null!=(s=t.parallelism)?s:2,runWorker:this._runWorker.bind(this),prefetchProfile:Js.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){var e;if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const t=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===t?null!==this._length?this._length:null:Ie(t-this._offset,0,null!=(e=this._length)?e:1/0)}_read(e,t,i,r){var n;if(null!==this._length&&t>this._length)return null;const s=this._offset,a=this._sequentialBacking?this._sequentialBacking._read(s+e,s+t):this._orchestrator.read(s+e,s+t,Math.max(s+i,s),s+Math.min(r,null!=(n=this._length)?n:1/0)),o=e=>e?(e.offset-=this._offset,e):null;return Xe(a)?a.then(o):o(a)}_runWorker(e){return z(this,null,function*(){for(var t;;){const r=new AbortController,n=yield Oe(null!=(t=this._options.fetchFn)?t:fetch,this._url,Me(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw new Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);n.redirected&&(this.rootPath=n.url);e:if(null===this._orchestrator.fileSize&&(206===n.status||"basic"===n.type&&!n.headers.has("Content-Encoding"))){const t=n.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=n.headers.get("Content-Length");if(i){const t=206===n.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!n.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==n.status){if(this._sequentialBacking)return void n.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||Xs.has(e.origin)||(lt._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),Xs.add(e.origin))}return void this._transitionToSequentialMode(n.body)}const s=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return r.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let t;try{t=yield s.read()}catch(i){if(this._disposed)throw i;const e=this._getRetryDelay(1,i,this._url);if(null!==e){lt._error("Error while reading response stream. Attempting to resume.",i),yield nt(1e3*e);break}throw i}if(e.aborted)continue;const{done:n,value:a}=t;if(n){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+a.length),this._orchestrator.supplyWorkerData(e,a)}}})}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const n=new ReadableStream({pull:e=>z(this,null,function*(){for(var n;;){let a;try{a=yield t.read()}catch(s){if(this._disposed)throw s;const e=this._getRetryDelay(1,s,this._url);if(null===e)throw s;lt._error("Error while reading response stream. Attempting to resume.",s),yield nt(1e3*e);const a=yield Oe(null!=(n=this._options.fetchFn)?n:fetch,this._url,Me(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!a.ok)throw new Error(`Error fetching ${String(this._url)}: ${a.status} ${a.statusText}`);if(!a.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=a.body.getReader(),r=206===a.status?0:i;continue}if(a.done)return void e.close();let o=a.value;if(r>0){const e=Math.min(r,o.length);r-=e,o=o.subarray(e)}if(0!==o.length)return i+=o.length,void e.enqueue(o)}}),cancel:()=>t.cancel()}),s=new Ys(n,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const a=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)a.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)a.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of a){const e=s._read(o.start,o.start+o.bytes.length);Xe(e)?e.then(e=>{e?(j(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(j(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const Gs=/^bytes=(\d+)-(\d*)$/,Qs=e=>{const t=Gs.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=pe(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let n=e;const s=new Uint8Array(t-e);if(-1!==i)for(let c=i;c=t)break;const r=Math.max(e,i.start);r>n&&this._throwDueToCacheMiss();const a=Math.min(t,i.end);rn&&this._throwDueToCacheMiss();const{promise:a,resolve:o,reject:l}=ke();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:l}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),a}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}_pull(){return z(this,null,function*(){for(null!=this._reader||(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1})}_dispose(){var e;for(const t of this._pendingSlices)t.reject(new el);this._pendingSlices.length=0,this._cache.length=0,null==(e=this._reader)||e.cancel()}}const Js={fileSystem:(e,t)=>{const i=B(2,16);return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=B(2,16);e=Math.max(0,Math.floor((e-r)/r)*r);for(const n of i){const i=8*B(2,20),r=Math.max((n.startPos+n.targetPos)/2,n.targetPos-i);if(Ge(e,t,r,n.targetPos)){const e=n.targetPos-n.startPos,r=Math.ceil((e+1)/i)*i,s=B(2,Math.ceil(Math.log2(e+1))),a=Math.min(s,r);t=Math.max(t,n.startPos+a)}}return{start:e,end:t=Math.max(t,e+js)}}};class Zs{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){var n;j(!this.disposed);const s=this.options.prefetchProfile(e,t,this.workers),a=Math.max(s.start,i),o=Math.min(s.end,null!=(n=this.fileSize)?n:1/0,r);j(a<=e&&t<=o);let l=null;const c=pe(this.cache,e,e=>e.start),u=-1!==c?this.cache[c]:null;u&&u.start<=e&&t<=u.end&&(u.age=this.nextAge++,l={bytes:u.bytes,view:u.view,offset:u.start});const d=pe(this.cache,a,e=>e.start),h=l?null:new Uint8Array(t-e);let f=0,m=a;const p=[];if(-1!==d){for(let i=d;i=o)break;if(r.end<=a)continue;const n=Math.max(a,r.start),s=Math.min(o,r.end);if(j(n<=s),m=h.length&&(l={bytes:h,view:J(h),offset:e}),0===p.length)return j(l),l;const{promise:g,resolve:k,reject:y}=ke(),b=[];for(const v of p){const i=Math.max(e,v.start),r=Math.min(t,v.end);i===v.start&&r===v.end?b.push(v):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&v.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,v.end),i.strictTarget&&(i.strictTarget=e),T&&i.pendingSlices.push(T)):(t++,i={hole:{start:v.start,end:v.end},strictTarget:e,pendingSlices:T?[T]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return l?g.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(j(h),l=g.then(t=>t&&{bytes:t,view:J(t),offset:e})),l}checkHoleAgainstWorker(e,t,i){const r=B(2,17);if(Ge(t.start-r,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=s),t.end<=t.start&&(i.holes.splice(e,1),e--)}0===i.holes.length&&(i.resolve(i.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){var t,i;const r=this.workers.indexOf(e);j(-1!==r),e.running=!1,this.workers.splice(r,1),null==(i=(t=this.options).onIdleWorkerRemoved)||i.call(t,e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const n of e.pendingSlices)n.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=pe(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=J(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=J(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const n=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return Xe(n)?n.then(s):s(n)}_dispose(){var e;null==(e=this._ref)||e.free()}ref(){return null!=this._ref||(this._ref=this._baseSource.ref()),super.ref()}}var ta=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},ia=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const ra=/^0[xX][0-9a-fA-F]+$/,na=/^data:.*;base64,/i;class sa extends As{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){var e;return null!=(e=this.currentUpdateSegmentsPromise)?e:this.currentUpdateSegmentsPromise=(()=>z(this,null,function*(){try{const e=this.getRemainingWaitTimeMs();e>0&&(yield nt(e)),this.lastSegmentUpdateTime=performance.now(),yield this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}}))()}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}updateSegments(){return z(this,null,function*(){var e,t,i,r,n,s,a,o;let l=this.nextLines;if(this.nextLines=null,!l){const e={stack:[],error:void 0,hasError:!1};try{const t=ta(e,yield this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),i=new tl(t.source),r=yield i.requestEntireFile();j(r),l=vl(r,r.length,{ignore:Rs}),t.source instanceof Us&&(this.rootPath=t.source.rootPath)}catch(x){e.error=x,e.hasError=!0}finally{ia(e)}}const c=!1!==(null==(e=this.input._formatOptions.hls)?void 0:e.offsetTimestampsByDateTime);let u=!1,d=0,h=null,f=null,m=null,p=0,g=null,k=null,y=null,b=null,T=null,v=null,S=!1,w=null!=(t=X(this.segments))?t:null;const P=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},I=e=>{p=e,w&&(j(null!==w.sequenceNumber),w.sequenceNumber0&&null!==v&&(d=p*v),S=!0);const t=e.slice(8),i=t.indexOf(","),r=-1===i?t:t.slice(0,i),n=Number(r);if(!Number.isFinite(n)||n<0)throw new Error(`Invalid #EXTINF tag duration '${r}'.`);f=n}else if(e.startsWith(Ps)){const t=new Fs(e.slice(11)),i=t.get("uri");if(!i)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const r=t.get("byterange");let a=null;if(null!==r&&(a=P(r)),a&&null===a.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!w){const e={path:Ze(this.rootPath,i),offset:null!=(n=null==a?void 0:a.offset)?n:0,length:null!=(s=null==a?void 0:a.length)?s:null};if("AES-128"===(null==m?void 0:m.method)&&!m.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");k={timestamp:d,unixEpochTimestamp:h,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:m,initSegment:null,lastProgramDateTimeSeconds:T}}f=null,null===b?y=null:b=null}else if(e.startsWith(Is)){const t=new Fs(e.slice(11)),i=t.get("method");if("NONE"===i)m=null;else if("AES-128"===i){const e=t.get("uri");if(!e)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=t.get("iv");if(r){if(!ra.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(fr);for(let t=0;t=8&&112===i[4]&&115===i[5]&&115===i[6]&&104===i[7]){const e=J(i).getUint32(0);r=sr(i.subarray(8,Math.min(e,i.length)))}}m={method:i,psshBox:r}}}}else if(e.startsWith(xs)){const t=e.slice(22),i=Number(t);if(!Number.isInteger(i)||i<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${t}'.`);I(i)}else if(e.startsWith(Cs)){const t=P(e.slice(17));if(null===t.offset){if(null===y)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");t.offset=y}b=t,y=t.offset+t.length}else if(e.startsWith(Bs)){if(w)continue;const t=e.slice(25),i=Date.parse(t);if(!Number.isFinite(i))continue;const r=i/1e3;if(T===r)continue;if(null===T&&this.segments.length>0){const e=X(this.segments),t=r-(e.timestamp+e.duration);for(const i of this.segments)i.unixEpochTimestamp=i.timestamp+t,c&&(i.timestamp=i.unixEpochTimestamp)}T=r,h=r,c&&(d=r)}else if("#EXT-X-DISCONTINUITY"===e)g=null;else if(e.startsWith(Es)){const t=e.slice(22),i=Number(t);if(!Number.isFinite(i)||i<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${t}'.`);this.refreshInterval=i,v=i}else{if("#EXT-X-ENDLIST"===e){this.streamHasEnded=!0;break}if(e.startsWith(_s)){"vod"===e.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==e)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");u=!0}}if(!u)throw new Error("Invalid M3U8 file; no #EXTM3U header.")})}getFirstSegment(){return z(this,null,function*(){var e;return 0===this.segments.length&&(yield this.runUpdateSegments()),null!=(e=this.segments[0])?e:null})}getSegmentAt(e,t){return z(this,null,function*(){0===this.segments.length&&(yield this.runUpdateSegments());let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=pe(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===r);if(n)return n.age=this.nextInputCacheAge++,n.input;let s=null;(r.initSegment||r.firstSegment)&&(s=this.getInputForSegment(null!=(t=r.initSegment)?t:r.firstSegment));const a=R(_({},this.input._formatOptions),{isobmff:R(_({},this.input._formatOptions.isobmff),{resolveKeyId:(null==(i=this.input._formatOptions.isobmff)?void 0:i.resolveKeyId)&&(e=>{if(!r.encryption||"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method||!r.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let t=e.psshBoxes;const{psshBox:i}=r.encryption;return null!==i.keyIds&&!i.keyIds.includes(e.keyId)||t.some(e=>ar(e,i))||(t=[...t,i]),this.input._formatOptions.isobmff.resolveKeyId(R(_({},e),{psshBoxes:t}))})})}),o=new Jo({source:new Ws(r.location.path,e=>z(this,null,function*(){var t,i;j(e.isRoot);const n=R(_({},e),{isRoot:!1});let s;const a=r.location.offset>0||null!==r.location.length;if(r.encryption&&"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method)if("AES-128"===r.encryption.method){const e=r.encryption;j(e.iv);let t=yield this.input._getSourceCached(n);if(a){const e=t.source.slice(r.location.offset,null!=(i=r.location.length)?i:void 0).ref();t.free(),t=e}const o=((e,t,i)=>{let r=!1,n=0;const s=B(2,16),a=new Sr;return new ReadableStream({pull:o=>z(null,null,function*(){r||(a.init(yield t()),r=!0);const l=s+16;let c=e.requestSliceRange(n,0,l);if(Xe(c)&&(c=yield c),!c||0===c.length)throw new Error("Invalid ciphertext.");const u=c.length;if(u%16!==0)throw new Error("Invalid ciphertext.");const d=u===l?u-16:u,h=nl(c,d),f=new Uint8Array(d);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=f.subarray(0,d-e);o.enqueue(t),o.close(),i()}}),cancel:()=>{i()}})})(new tl(t.source),()=>z(this,null,function*(){const t={stack:[],error:void 0,hasError:!1};try{const i=ta(t,yield this.input._getSourceCached({path:e.keyUri,isRoot:!1},Yo),!1),r=new tl(i.source),n=yield r.requestSlice(0,fr);if(!n)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:nl(n,fr),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{ia(t)}}),()=>{t.free()});s=new Ys(o).ref()}else j(!1);else if(s=yield this.input._getSourceCached(n),a){const e=s.source.slice(r.location.offset,null!=(t=r.location.length)?t:void 0).ref();s.free(),s=e}return s})),formats:this.input._formats.filter(e=>!(e instanceof Ia)),initInput:null!=s?s:void 0,formatOptions:a});o._onFormatDetermined=e=>{var t,i;if(("SAMPLE-AES"===(null==(t=r.encryption)?void 0:t.method)||"SAMPLE-AES-CTR"===(null==(i=r.encryption)?void 0:i.method))&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:r,input:o,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=tt(this.inputCache,e=>e.age);j(-1!==e),this.inputCache.splice(e,1)}return o}getLiveRefreshInterval(){return z(this,null,function*(){return 0===this.getRemainingWaitTimeMs()&&(yield this.runUpdateSegments()),this.streamHasEnded?null:this.refreshInterval})}}class aa extends ir{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>z(this,null,function*(){j(this.input._rootSource instanceof Us);const e=yield this.input._reader.requestEntireFile();j(e);const t=vl(e,e.length,{ignore:Rs}),{rootPath:i}=this.input._rootSource,r=[],n=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],a=[...new Set(n.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=yield Promise.all(r.map((e,t)=>z(this,null,function*(){var r,o,l,c;const u=[],d=e.attributes.get("codecs");let h;if(d)h=d.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=yield t.getTrackBackings(),r=yield Promise.all(i.map(e=>z(this,null,function*(){return{track:e,codec:yield e.getCodec()}})));h=yield Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const f=e.attributes.get("video"),m=e.attributes.get("audio"),p=h.some(e=>_i.includes(ji(e))),g=h.some(e=>Fi.includes(ji(e)));if(null!==f&&!p){if(!s.includes(f))throw new Error(`Invalid M3U8 file; variant stream references video group "${f}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===f&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Ze(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});j(null!==a),h.push(a)}}if(null!==m&&!g){if(!a.includes(m))throw new Error(`Invalid M3U8 file; variant stream references audio group "${m}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===m&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=Ze(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});j(null!==a),h.push(a)}}h=[...new Set(h)];let k=null,y=null;const b=e.attributes.getAsNumber("bandwidth");j(null!==b);const T=e.attributes.getAsNumber("average-bandwidth"),v=e.attributes.get("name");for(const i of h){const d=ji(i);if(null!==d)if(_i.includes(d)){if(null!==k)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");k=i;const a=e.attributes.get("video");if(null===a){const i=e.attributes.get("resolution");let r=null,n=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(r=Number(e[1]),n=Number(e[2]))}u.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xe,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:k,pairingMask:BigInt("1")<0?r:null}})}else{if(!a.includes(r))throw new Error(`Invalid M3U8 file; variant stream references audio group "${r}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of n){const n=i.attributes.get("group-id"),s=i.attributes.get("type");if(n!==r||"audio"!==s.toLowerCase())continue;const a=null!=(l=i.attributes.get("channels"))?l:e.attributes.get("channels"),o=null!==a?Number(a.split("/")[0]):null;u.push({id:-1,demuxer:this,backingTrack:null,default:ua(i.attributes),autoselect:ua(i.attributes)||da(i.attributes),languageCode:ha(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:null!=(c=i.fullPath)?c:e.fullPath,fullCodecString:y,pairingMask:BigInt("1")<0?o:null}})}}}}return u}))),l=[],c=e=>{var t,i;const r=l.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);r?(r.pairingMask|=e.pairingMask,r.default||(r.default=e.default),r.autoselect||(r.autoselect=e.autoselect),r.lineNumber=Math.min(r.lineNumber,e.lineNumber),null!==e.peakBitrate&&(r.peakBitrate=Math.max(null!=(t=r.peakBitrate)?t:-1/0,e.peakBitrate)),null!==e.averageBitrate&&(r.averageBitrate=Math.max(null!=(i=r.averageBitrate)?i:-1/0,e.averageBitrate)),r.languageCode===xe&&(r.languageCode=e.languageCode)):(e.id=l.length+1,l.push(e))};for(const u of o)for(const e of u)c(e);l.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of l)"video"===u.info.type?this.trackBackings.push(new la(u)):this.trackBackings.push(new ca(u));this.internalTracks=l}))()}getTrackBackings(){return z(this,null,function*(){return yield this.readMetadata(),j(this.trackBackings),this.trackBackings})}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new sa(this,e,i,null),this.segmentedInputs.push(t),t}getMetadataTags(){return z(this,null,function*(){return{}})}getMimeType(){return z(this,null,function*(){return bs})}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class oa{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>z(this,null,function*(){const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(yield e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof la){for(const r of i)if((yield r.getCodec())===this.getCodec()){t=r;break}}else{j(this instanceof ca);for(const e of i)if((yield e.getCodec())===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t}))()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return R(_({},dt),{default:this.internalTrack.autoselect,primary:this.internalTrack.default})}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){j(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}getDurationFromMetadata(e){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)})}getLiveRefreshInterval(){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()})}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}getFirstPacket(e){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)})}getPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)})}getKeyPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)})}getNextPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)})}getNextKeyPacket(e,t){return z(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)})}}class la extends oa{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return ji(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}getColorSpace(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getColorSpace()})}canBeTransparent(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.canBeTransparent()})}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return z(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getDecoderConfig()})}}class ca extends oa{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return ji(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return z(this,null,function*(){return yield this.hydrate(),this.backingAudioTrack.getDecoderConfig()})}}const ua=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},da=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},ha=e=>{if(null===e)return xe;const t=e.split("-")[0];return t||xe};class fa{constructor(){this._isIsobmff=!1}}class ma extends fa{constructor(){super(...arguments),this._isIsobmff=!0}_getMajorBrand(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,12);if(Xe(t)&&(t=yield t),!t)return null;t.skip(4);const i=Tl(t,4);return"ftyp"!==i&&"styp"!==i?null:Tl(t,4)})}_createDemuxer(e){return new wr(e)}}class pa extends ma{_canReadInput(e){return z(this,null,function*(){const t=yield this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(Xe(t)&&(t=yield t),!t)return!1;let r=dl(t),n=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(Xe(t)&&(t=yield t),!t)return!1;r=pl(t),n=16}if(r8)return!1;if(Gr(i,r)!==qr.EBML)return!1;const n=Yr(i);if("number"!==typeof n)return!1;let s=e._reader.requestSlice(i.filePos,n);if(Xe(s)&&(s=yield s),!s)return!1;const a=i.filePos;for(;s.filePos<=a+n-2;){const e=Jr(s);if(!e)break;const{id:i,size:r}=e,n=s.filePos;if(void 0===r)return!1;switch(i){case qr.EBMLVersion:if(1!==Gr(s,r))return!1;break;case qr.EBMLReadVersion:if(1!==Gr(s,r))return!1;break;case qr.DocType:if(Zr(s,r)!==t)return!1;break;case qr.DocTypeVersion:if(Gr(s,r)>4)return!1}s.filePos=n+r}return!0})}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new Bn(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class ya extends ka{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class ba extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}const i=yield Fn(e._reader,t,t+4096);if(!i)return!1;const r=i.header,n=Qi(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+n,4);if(Xe(s)&&(s=yield s),!s)return!1;const a=dl(s);if(a===$i||a===Gi)return!0;t=i.startPos+i.header.totalSize;const o=yield Fn(e._reader,t,t+4);if(!o)return!1;const l=o.header;return r.channel===l.channel&&r.sampleRate===l.sampleRate})}_createDemuxer(e){return new An(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class Ta extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,12);if(Xe(t)&&(t=yield t),!t)return!1;const i=Tl(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===Tl(t,4)})}_createDemuxer(e){return new Gn(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class va extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,4);return Xe(t)&&(t=yield t),!!t&&"OggS"===Tl(t,4)})}_createDemuxer(e){return new Hn(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class Sa extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return Xe(i)&&(i=yield i),!!i&&"fLaC"===Tl(i,4)})}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new is(e)}}class wa extends fa{_canReadInput(e){return z(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Cl);if(Xe(i)&&(i=yield i),!i)break;const r=Rl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(Xe(i)&&(i=yield i),!i)return!1;const r=Jn(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),Xe(i)&&(i=yield i),!i)return!1;const n=Jn(i);return!!n&&(r.objectType===n.objectType&&r.samplingFrequencyIndex===n.samplingFrequencyIndex&&r.channelConfiguration===n.channelConfiguration)})}_createDemuxer(e){return new es(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class Pa extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,205);if(Xe(t)&&(t=yield t),!t)return!1;const i=nl(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])})}_createDemuxer(e){return new us(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class Ia extends fa{_canReadInput(e){return z(this,null,function*(){let t=e._reader.requestSlice(0,7);if(Xe(t)&&(t=yield t),!t)return!1;if(!("#EXTM3U"===Tl(t,7)))return!1;if(!(e._rootSource instanceof Us))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0})}_createDemuxer(e){return new aa(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return bs}}const xa=new pa,Ca=new ga,Ba=new ka,Ea=new ya,_a=new ba,Ra=new Ta,Fa=new va,Aa=new wa,Da=new Sa,Ma=new Pa,Na=new Ia,Oa=[Na,xa,Ca,Ba,Ea,Ra,Fa,Da,_a,Aa,Ma],za=[Na,xa,Ca,_a,Aa,Ma];var La=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});Ye();let Ua=-1/0,qa=-1/0,Wa=null;"undefined"!==typeof FinalizationRegistry&&(Wa=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Ua>=1e3&&(lt._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Ua=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-qa>=1e3&&(lt._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),qa=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class Ha{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const Va=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],ja=new Set(Va);class Ka{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(De*this.timestamp)}get microsecondDuration(){return Math.trunc(De*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,S,w,P,I,x,C,B,E,_,R,F;if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!ja.has(t.format))throw new TypeError("init.format must be one of: "+Va.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&&rt(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=null!=(i=t.rotation)?i:0,this.timestamp=t.timestamp,this.duration=null!=(r=t.duration)?r:0;const m=null!=(n=t.layout)?n:io(t.format,t.codedWidth,t.codedHeight);let p=null!=(s=t.colorSpace)?s:null;null===p&&(p="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:null!=(o=null==(a=t.visibleRect)?void 0:a.left)?o:0,top:null!=(c=null==(l=t.visibleRect)?void 0:l.top)?c:0,width:null!=(d=null==(u=t.visibleRect)?void 0:u.width)?d:t.codedWidth,height:null!=(f=null==(h=t.visibleRect)?void 0:h.height)?f:t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?Y(e):Y(e).slice(),this._layout=m,this.colorSpace=new Ya(p)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==(null==t?void 0:t.rotation)&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==(null==t?void 0:t.timestamp)&&!Number.isFinite(null==t?void 0:t.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==(null==t?void 0:t.duration)&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==(null==t?void 0:t.visibleRect)&&rt(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:null!=(p=null==(m=e.visibleRect)?void 0:m.x)?p:0,top:null!=(k=null==(g=e.visibleRect)?void 0:g.y)?k:0,width:null!=(b=null==(y=e.visibleRect)?void 0:y.width)?b:e.codedWidth,height:null!=(v=null==(T=e.visibleRect)?void 0:T.height)?v:e.codedHeight},this.rotation=null!=(S=null==t?void 0:t.rotation)?S:0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=null!=(w=null==t?void 0:t.timestamp)?w:e.timestamp/1e6,this.duration=null!=(I=null==t?void 0:t.duration)?I:(null!=(P=e.duration)?P:0)/1e6,this.colorSpace=new Ya(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&&rt(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new Ka(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*De),duration:Math.trunc((null!=(x=t.duration)?x:0)*De)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const n=null!=(C=t.visibleRect)?C:{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(n.width,n.height),a=s.getContext("2d",{alpha:We(),willReadFrequently:!0});if(!a)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");a.drawImage(e,-n.left,-n.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:n.width,height:n.height},this.squarePixelWidth=n.width,this.squarePixelHeight=n.height,this.rotation=null!=(B=t.rotation)?B:0,this.timestamp=t.timestamp,this.duration=null!=(E=t.duration)?E:0,this.colorSpace=new Ya({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof Ha))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!Va.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=null!=(_=t.rotation)?_:0,this.timestamp=t.timestamp,this.duration=null!=(R=t.duration)?R:0,this.colorSpace=e.getColorSpace()}this.encodeOptions=null!=(F=null==t?void 0:t.encodeOptions)?F:{},this.pixelAspectRatio=it({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),null==Wa||Wa.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return j(null!==this._data),this._data instanceof Ha?new Ka(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):Ja(this._data)?new Ka(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(j(this._layout),new Ka(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new Ka(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(null==Wa||Wa.unregister(this),this._data instanceof Ha?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Ja(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){var t;if(to(e),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(t=e.format)?t:this.format))throw new Error("Cannot get allocation size when format is null.");if(Ja(this._data))return this._data.allocationSize(e);return no(this,e).allocationSize}copyTo(e){return z(this,arguments,function*(e,t={}){var i,r;if(!ce(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(to(t),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(i=t.format)?i:this.format))throw new Error("Cannot copy video sample data when format is null.");if(j(null!==this._data),Ja(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof Ha)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=yield i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,yield this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},null!=(r=t.colorSpace)?r:"srgb"),!1);if(!(n instanceof Ka))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(n.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${n.format}' instead.`);return yield n.copyTo(e,t)}catch(u){i.error=u,i.hasError=!0}finally{La(i)}}}const n=no(this,t);j(this.format);const s=Y(e);if(s.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');o=e}else if(this._data instanceof Uint8Array)j(this._layout),j(this._layout.length===a.length),o=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");j(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);o=[{data:Y(t.data),stride:4*this.codedWidth}]}const l=[],c=a.length;for(let d=0;di.byteLength)throw new Error("Source buffer OOB read.");if(a+c>s.byteLength)throw new Error("Destination buffer OOB write.");const n=i.subarray(r,r+c);s.set(n,a),r+=t,a+=e.destinationStride}l.push(u)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),i=this.format.includes("X")&&t.format.includes("A");if(e||i)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const n=[];for(const s of e)i.set(s.data,r),n.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:n[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return Ja(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(j(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,n,s,a,o,l){let c=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(c=t,u=i,d=r,h=n,f=s,m=a,void 0!==o?(p=o,g=l):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=n)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(c))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:c,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(c,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const T=this.rotation%180===0?1:p/g;e.scale(1/T,T),e.drawImage(k,c,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){var i,r,n,s,a,o,l,c,u;if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&eo(t.crop,"options.");const d=e.canvas.width,h=e.canvas.height,f=null!=(i=t.rotation)?i:this.rotation,[m,p]=f%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let g,k,y,b,T=t.crop;T&&(T=Za(T,m,p));const{sx:v,sy:S,sWidth:w,sHeight:P}=this._rotateSourceRegion(null!=(n=null==(r=t.crop)?void 0:r.left)?n:0,null!=(a=null==(s=t.crop)?void 0:s.top)?a:0,null!=(l=null==(o=t.crop)?void 0:o.width)?l:m,null!=(u=null==(c=t.crop)?void 0:c.height)?u:p,f);if("fill"===t.fit)g=0,k=0,y=d,b=h;else{const[e,i]=t.crop?[t.crop.width,t.crop.height]:[m,p],r="contain"===t.fit?Math.min(d/e,h/i):Math.max(d/e,h/i);y=e*r,b=i*r,g=(d-y)/2,k=(h-b)/2}e.save();const I=f%180===0?1:y/b;e.translate(d/2,h/2),e.rotate(f*Math.PI/180),e.scale(1/I,I),e.translate(-d/2,-h/2),e.drawImage(this.toCanvasImageSource(),v,S,w,P,g,k,y,b),e.restore()}_rotateSourceRegion(e,t,i,r,n){return 90===n?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===n?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===n&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,n=e.height,[s,a]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,l=i.crop?i.crop.height:a;let c=0;2*r0?Qa(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=c;p>1;p--){const e=r*B(2,p),t=n*B(2,p);f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",c>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*n,0,0,r,n),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(j(null!==this._data),this._data instanceof Ha||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}transform(e){return z(this,null,function*(){var t,i,r,n,s;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&eo(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const a=K(this.rotation+(null!=(t=e.rotate)?t:0)),[o,l]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let c=e.crop;c&&(c=Za(c,o,l));const u=c?c.width:o,d=c?c.height:l,h=u/d;let f,m;void 0!==e.width&&void 0===e.height?(f=e.width,m=f/h):void 0===e.width&&void 0!==e.height?(m=e.height,f=m*h):void 0!==e.width&&void 0!==e.height?(f=e.width,m=e.height):(f=u,m=d),f=Be(f,null!=(i=e.roundDimensionsTo)?i:1),m=Be(m,null!=(r=e.roundDimensionsTo)?r:1);const p={width:f,height:m,fit:null!=(n=e.fit)?n:"fill",rotation:a,crop:null!=c?c:{left:0,top:0,width:o,height:l},alpha:null!=(s=e.alpha)?s:"keep"};for(const e of Xa){let t=e(this,p);if(Xe(t)&&(t=yield t),null!==t)return t}const{canvas:g,context:k,isNew:y}=Qa(p.width,p.height);return this._drawWithFitAndMipmapping(g,k,{fit:p.fit,rotation:p.rotation,crop:p.crop,targetIsFresh:y,fillBlack:"discard"===p.alpha}),new Ka(g,{timestamp:this.timestamp,duration:this.duration,rotation:0})})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const Xa=[],$a=[];let Ga=0;const Qa=(e,t)=>{for(const n of $a)if(n.canvas.width===e&&n.canvas.height===t)return n.age=Ga++,{canvas:n.canvas,context:n.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return $a.length>=3&&$a.splice(tt($a,e=>e.age),1),$a.push({canvas:i,context:r,age:Ga++}),{canvas:i,context:r,isNew:!0}};class Ya{constructor(e){var t,i,r,n;if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(te);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(re);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(se);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=null!=(t=null==e?void 0:e.primaries)?t:null,this.transfer=null!=(i=null==e?void 0:e.transfer)?i:null,this.matrix=null!=(r=null==e?void 0:e.matrix)?r:null,this.fullRange=null!=(n=null==e?void 0:e.fullRange)?n:null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const Ja=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,Za=(e,t,i)=>{const r=Math.min(e.left,t),n=Math.min(e.top,i),s=Math.min(e.width,t-r),a=Math.min(e.height,i-n);return j(s>=0),j(a>=0),{left:r,top:n,width:s,height:a}},eo=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},to=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},io=(e,t,i)=>{const r=ro(e),n=[];let s=0;for(const a of r){const e=Math.ceil(t/a.widthDivisor),r=Math.ceil(i/a.heightDivisor),o=e*a.sampleBytes,l=o*r;n.push({offset:s,stride:o}),s+=l}return n},ro=e=>{const t=(e,t,i,r,n)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return n&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:ve(e),j(!1)}},no=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,n=so(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let a;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");a=t.format}else a=e.format;return oo(n,a,s)},so=(e,t,i,r,n)=>{const s=_({},e);if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!ao(n,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},ao=(e,t)=>{if(null===e)return!0;const i=ro(e);for(let r=0;r{const r=ro(t),n=r.length;if(void 0!==i&&i.length!==n)throw new TypeError(`Layout must have ${n} planes.`);let s=0;const a=[],o=[];for(let l=0;l4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(null==e?void 0:e.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(ho(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*ho(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const s=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-n;if(s>this.numberOfFrames-n)throw new RangeError("frameCount out of range");const a=ho(r),o=fo(r);if(o&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!o&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(o?s:s*this.numberOfChannels)*a}copyTo(e,t){if(!ce(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!lo.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:n}=t;let{planeIndex:s}=t,a=this.format;const o=null!=i?i:this.format;if(!o)throw new Error("Destination format not determined");const l=this.numberOfFrames,c=this.numberOfChannels,u=null!=n?n:0;if(u>=l)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:l-u;if(d>l-u)throw new RangeError("frameCount out of range");const h=ho(o),f=fo(o);if(f&&s>=c)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*c)*h;if(e.byteLength2&&o!==a)return void ko(this._data,p,a,o,c,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(S){if("f32-planar"===o)throw S;a="f32-planar"}}const k=mo(a),y=ho(a),b=fo(a);let T;if(this._data instanceof co){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=l*y*(b?1:c);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)T=e(s),s=0;else{T=new Uint8Array(l*y*c);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(n,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new uo({data:n,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(null==Wa||Wa.unregister(this),this._data instanceof co?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):go(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof co?this._createAudioDataFromData():go(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(fo(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const n=Math.min(s,o),l=new Float32Array(i*n);for(let t=0;t0;){const n=Math.min(s,o),c=new Float32Array(i*n);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},fo=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},mo=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},po=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,Ie(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,Ie(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,Ie(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},go=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,ko=(e,t,i,r,n,s,a,o)=>{const l=mo(i),c=po(r),u=ho(i),d=ho(r),h=fo(i);if(fo(r))if(h){const r=new ArrayBuffer(o*u),n=J(r);e.copyTo(r,{planeIndex:s,frameOffset:a,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},vo=e=>{if(!Je(e))throw new TypeError("timestamp must be a number.")},So=(e,t,i)=>i.verifyKeyPackets?t.then(t=>z(null,null,function*(){if(!t||"delta"===t.type)return t;const i=yield e.determinePacketType(t);return i&&(t.type=i),t})):t;class wo{constructor(e){if(!(e instanceof zo))throw new TypeError("track must be an InputTrack.");this._track=e}getFirstPacket(){return z(this,arguments,function*(e={}){if(To(e),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getFirstPacket(e),e)})}getFirstKeyPacket(){return z(this,arguments,function*(e={}){To(e);const t=yield this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null})}getPacket(e){return z(this,arguments,function*(e,t={}){if(vo(e),To(t),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getPacket(e,t),t)})}getNextPacket(e){return z(this,arguments,function*(e,t={}){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(To(t),this._track.input._disposed)throw new el;return So(this._track,this._track._backing.getNextPacket(e,t),t)})}getKeyPacket(e){return z(this,arguments,function*(e,t={}){if(vo(e),To(t),this._track.input._disposed)throw new el;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=yield this._track._backing.getKeyPacket(e,t);if(!i)return i;j("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getKeyPacket(i.timestamp-1/(yield this._track.getTimeResolution()),t):i})}getNextKeyPacket(e){return z(this,arguments,function*(e,t={}){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(To(t),this._track.input._disposed)throw new el;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=yield this._track._backing.getNextKeyPacket(e,t);if(!i)return i;j("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getNextKeyPacket(i,t):i})}packets(e,t,i={}){if(void 0!==e&&!(e instanceof nr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!(null==i?void 0:i.metadataOnly))throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof nr))throw new TypeError("endPacket must be an EncodedPacket.");if(To(i),this._track.input._disposed)throw new el;const r=[];let{promise:n,resolve:s}=ke(),{promise:a,resolve:o}=ke(),l=!1,c=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(()=>z(this,null,function*(){let u=null!=e?e:yield this.getFirstPacket(i);for(;u&&!c&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=(null==t?void 0:t.sequenceNumber));)r.length>f()?(({promise:a,resolve:o}=ke()),yield a):(r.push(u),s(),({promise:n,resolve:s}=ke()),u=yield this.getNextPacket(u,i));l=!0,s()}))().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{next(){return z(this,null,function*(){for(;;){if(m.input._disposed)throw new el;if(c)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};yield n}})},return(){return z(this,null,function*(){return c=!0,o(),s(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}class Po{constructor(e,t){this.onSample=e,this.onError=t}}class Io{mediaSamplesInRange(e=-1/0,t=1/0,i){vo(e),vo(t);const r=[];let n=!1,s=null,{promise:a,resolve:o}=ke(),{promise:l,resolve:c}=ke(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g=R(_({},i),{verifyKeyPackets:!0,metadataOnly:!1});(()=>z(this,null,function*(){var i;f=yield this._createDecoder(i=>{c(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),n=!0):s.close()),i.timestamp>=e&&(r.push(i),n=!0),s=n?null:i,r.length>0&&(o(),({promise:a,resolve:o}=ke())))},e=>{p||(m=e,p=!0,o())});const k=this._createPacketSink(),y=null!=(i=yield k.getKeyPacket(e,g))?i:yield k.getFirstKeyPacket(g);let b=y;const T=k.packets(null!=y?y:void 0,void 0,g);for(yield T.next();b&&!d&&!this._track.input._disposed;){const e=xo(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:l,resolve:c}=ke()),yield l;continue}f.decode(b);const t=yield T.next();if(t.done)break;b=t.value}yield T.return(),h||this._track.input._disposed||(yield f.flush()),!n&&s&&r.push(s),u=!0,o()}))().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{null==f||f.close()});const k=this._track,y=()=>{null==s||s.close();for(const e of r)e.close()};return{next(){return z(this,null,function*(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new el;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return c(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};yield a}})},return(){return z(this,null,function*(){return h=!0,d=!0,c(),o(),y(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=function(e){return U(this,null,function*(){Symbol.iterator in e?yield*q(e[Symbol.iterator]()):yield*q(e[Symbol.asyncIterator]())})}(e),r=[],n=[];let{promise:s,resolve:a}=ke(),{promise:o,resolve:l}=ke(),c=!1,u=!1,d=null,h=null,f=!1;const m=e=>{n.push(e),a(),({promise:s,resolve:a}=ke())},p=R(_({},t),{verifyKeyPackets:!0,metadataOnly:!1});(()=>z(this,null,function*(){d=yield this._createDecoder(e=>{if(l(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,a())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=()=>z(this,null,function*(){j(s),j(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:l}=ke()),yield o;if(u)break;const r=yield e.getNextPacket(t,p);j(r),d.decode(r),t=r}g=-1}),y=()=>z(this,null,function*(){j(d),yield d.flush();for(let e=0;e{f||(h=e,f=!0,a())}).finally(()=>{null==d||d.close()});const g=this._track,k=()=>{for(const e of n)null==e||e.close()};return{next(){return z(this,null,function*(){for(;;){if(g.input._disposed)throw u=!0,k(),new el;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(n.length>0){const e=n.shift();return j(void 0!==e),l(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};yield s}})},return(){return z(this,null,function*(){return u=!0,l(),a(),k(),{value:void 0,done:!0}})},throw(e){return z(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}const xo=e=>0===e?40:8;class Co extends Po{constructor(e,t,i,r,n,s){var a,o,l,c,u,d,h,f;super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=n,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new ze,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const m=yo.find(e=>e.supports(i,r));if(m)this.customDecoder=new m,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Ka))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();j(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(Ve()){if("avc"===i&&this.decoderConfig.description){const e=Dt(Y(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=Nt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig=R(_({},this.decoderConfig),{hardwareAcceleration:"prefer-software"})),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=zt(t),this.decoderConfig=R(_({},this.decoderConfig),{description:At(e)})))}}oe(this.decoderConfig.colorSpace)||(this.decoderConfig=R(_({},this.decoderConfig),{colorSpace:{primaries:null!=(o=null==(a=this.decoderConfig.colorSpace)?void 0:a.primaries)?o:"bt709",matrix:null!=(c=null==(l=this.decoderConfig.colorSpace)?void 0:l.matrix)?c:"bt709",transfer:null!=(d=null==(u=this.decoderConfig.colorSpace)?void 0:u.transfer)?d:"bt709",fullRange:null!=(f=null==(h=this.decoderConfig.colorSpace)?void 0:h.fullRange)&&f}}))}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){var e,t;return this.customDecoder?this.customDecoderQueueSize:(j(this.decoder),Math.max(this.decoder.decodeQueueSize,null!=(t=null==(e=this.alphaDecoder)?void 0:e.decodeQueueSize)?t:0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(j(this.decoder),Ue()||ge(this.inputTimestamps,e.timestamp,e=>e),Ve()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const n of xt(e.data,this.decoderConfig)){const r=Ct(e.data[n.offset]);if(i||(i=r>=1&&r<=5),r===Tt.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&Y(t.description)[4];return Rt(e,i+1)}return _t(e)})(t,this.decoderConfig);e=new nr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=Jt(e.data,this.decoderConfig);t&&(e=new nr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Eo),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();j(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();j(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=ai(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(null!=t?t:e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Lt(e,this.decoderConfig)){const i=Ut(e[t.offset]);if(i===St.RASL_N||i===St.RASL_R)return!0}return!1}sampleHandler(e){if(Ue()){if(this.sampleQueue.length>0&&e.timestamp>=X(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}ge(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();j(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}mergeAlpha(e,t){return z(this,null,function*(){const i=ke();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){j(this.merger);const i=yield this.merger.merge(e,t);r.sample=new Ka(i)}else r.sample=new Ka(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(n){ye(this.finalSamples,r),this.onError(n)}finally{ye(this.mergeAlphaPromises,i.promise),i.resolve()}})}flush(){return z(this,null,function*(){var e;if(this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(j(this.decoder),yield Promise.all([this.decoder.flush(),null==(e=this.alphaDecoder)?void 0:e.flush()]),yield Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Ue()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1})}close(){var e;this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(j(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,null==(e=this.merger)||e.close());for(const t of this.sampleQueue)t.close();this.sampleQueue.length=0}}let Bo=null;class Eo{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!Bo){const e=new Blob([`(${_o.toString()})()`],{type:"application/javascript"});Bo=URL.createObjectURL(e)}const e=Ie(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=ke();this.pendingRequests.set(i,r);const n=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,n.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const _o=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:n,alpha:s}=e.data;i=i.then(()=>z(null,null,function*(){try{const e=yield r(n,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{n.close(),s.close()}}))});const r=(e,t)=>z(null,null,function*(){const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),l=i.includes("P12"),c=r.includes("P10"),u=r.includes("P12");if(c!==o||u!==l)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return yield n(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return yield s(e,t,i);if("NV12"===i)return yield a(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)}),n=(e,t,i)=>z(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=new Uint8Array(4*d);yield e.copyTo(h);const f=yield o(t,c,u,1);for(let e=0,t=3;ez(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=i.includes("P10"),h=i.includes("P12"),f=d||h?2:1;let m,p;i.startsWith("I420")?(m=Math.ceil(c/2),p=Math.ceil(u/2)):i.startsWith("I422")?(m=Math.ceil(c/2),p=u):(m=c,p=u);const g=c*u,k=g*f,y=m*p*f,b=new Uint8Array(k+2*y+g*f);yield e.copyTo(b);const T=yield o(t,c,u,f),v=k+2*y;b.set(T,v);const S={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:c,codedHeight:u,timestamp:e.timestamp,duration:null!=(l=e.duration)?l:void 0,transfer:[b.buffer]};return new VideoFrame(b,S)}),a=(e,i)=>z(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=Math.ceil(c/2)*Math.ceil(u/2),f=e.allocationSize();t&&t.byteLength===f||(t=new Uint8Array(f)),yield e.copyTo(t);const m=new Uint8Array(d+2*h+d);m.set(t.subarray(0,d),0);const p=d,g=d+h,k=d;for(let e=0;ez(null,null,function*(){const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),yield t.copyTo(e);const a=t.format;if("RGBA"===a||"BGRA"===a||"RGBX"===a||"BGRX"===a){const t="RGBA"===a||"RGBX"===a?0:2,n=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class Fo extends Io{constructor(e,t={}){if(!(e instanceof qo))throw new TypeError("videoTrack must be an InputVideoTrack.");Ro(t),super(),this._track=e,this._decoderOptions=t}_createDecoder(e,t){return z(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(je("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getRotation();let n=yield this._track.getDecoderConfig();const s=yield this._track.getTimeResolution();return j(i&&n),n=R(_({},n),{hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency}),new Co(e,t,i,n,r,s)})}_createPacketSink(){return new wo(this._track)}getSample(e){return z(this,arguments,function*(e,t={}){vo(e);try{for(var i,r,n,s=W(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ao{constructor(e,t={}){var i,r,n;if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof qo))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&eo(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Ro(t.decoderOptions),this._videoTrack=e,this._alpha=null!=(i=t.alpha)&&i,this._options=t,this._fit=null!=(r=t.fit)?r:"fill",this._videoSampleSink=new Fo(e,t.decoderOptions),this._canvasPool=Array.from({length:null!=(n=t.poolSize)?n:0},()=>null)}_ensureInit(){var e;return null!=(e=this._initPromise)?e:this._initPromise=(()=>z(this,null,function*(){var e;const t=this._options,i=this._videoTrack,r=null!=(e=t.rotation)?e:yield i.getRotation(),n=yield i.getSquarePixelWidth(),s=yield i.getSquarePixelHeight(),[a,o]=r%180===0?[n,s]:[s,n];let l=t.crop;l&&(l=Za(l,a,o));let[c,u]=l?[l.width,l.height]:[a,o];const d=c/u;void 0!==t.width&&void 0===t.height?(c=t.width,u=Math.round(c/d)):void 0===t.width&&void 0!==t.height?(u=t.height,c=Math.round(u*d)):void 0!==t.width&&void 0!==t.height&&(c=t.width,u=t.height),this._width=c,this._height=u,this._rotation=r,this._crop=l}))()}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],n=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),n=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||We()});j(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:n,fillBlack:!this._alpha&&We()});const a={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),a}getCanvas(e,t){return z(this,null,function*(){vo(e),yield this._ensureInit();const i=yield this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)})}canvases(e,t,i){return U(this,null,function*(){yield new L(this._ensureInit()),yield*q(Pe(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e)))})}canvasesAtTimestamps(e,t){return U(this,null,function*(){yield new L(this._ensureInit()),yield*q(Pe(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e)))})}}class Do extends Po{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new ze,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const n=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const n=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(n*s)/s),e(t)},s=bo.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof uo))throw new TypeError("The argument passed to onSample must be an AudioSample.");n(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{n(new uo(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(j(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(j(this.decoder),null!=this.expectedFirstTimestamp||(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return z(this,null,function*(){this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(j(this.decoder),yield this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0})}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(j(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class Mo extends Po{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,j(Ri.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:n,littleEndian:s}=Vi(this.codec);switch(this.inputSampleSize=n,n){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-B(2,7):"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const n=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let n=0;return n=4!==i?1<e.getUint16(t,s)-B(2,15):"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):j(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>Se(e,t,s)-B(2,23):"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>Se(e,t,i)<<8>>8)(e,t,s):j(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-B(2,31):"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):j(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):j(!1);break;default:ve(n),j(!1)}switch(n){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+B(2,7)));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:ve(n),j(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=J(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,n=new ArrayBuffer(r),s=new DataView(n);for(let c=0;c=a)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=a;const l=new uo({format:this.outputFormat,data:n,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(l)}flush(){return z(this,null,function*(){})}close(){}}class No extends Io{constructor(e){if(!(e instanceof Wo))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}_createDecoder(e,t){return z(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(je("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getDecoderConfig();return j(i&&r),Ri.includes(r.codec)?new Mo(e,t,r):new Do(e,t,i,r)})}_createPacketSink(){return new wo(this._track)}getSample(e){return z(this,arguments,function*(e,t={}){vo(e);try{for(var i,r,n,s=W(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Oo{constructor(e){if(!(e instanceof Wo))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new No(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}getBuffer(e,t){return z(this,null,function*(){vo(e);const i=yield this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)})}buffers(e,t,i){return Pe(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Pe(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class zo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof qo}isAudioTrack(){return this instanceof Wo}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}getInternalCodecId(){return z(this,null,function*(){return this._backing.getInternalCodecId()})}get internalCodecId(){return Lo(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}getLanguageCode(){return z(this,null,function*(){return this._backing.getLanguageCode()})}get languageCode(){return Lo(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}getName(){return z(this,null,function*(){return this._backing.getName()})}get name(){return Lo(this._backing.getName(),"name","getName")}getTimeResolution(){return z(this,null,function*(){return this._backing.getTimeResolution()})}get timeResolution(){return Lo(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}isRelativeToUnixEpoch(){return z(this,null,function*(){return this._backing.isRelativeToUnixEpoch()})}getUnixTimeForTimestamp(e){return z(this,null,function*(){return this._backing.getUnixTimeForTimestamp(e)})}hasUnixTimeMapping(){return z(this,null,function*(){return null!==(yield this._backing.getUnixTimeForTimestamp(yield this.getFirstTimestamp()))})}getDisposition(){return z(this,null,function*(){return this._backing.getDisposition()})}get disposition(){return Lo(this._backing.getDisposition(),"disposition","getDisposition")}getBitrate(){return z(this,null,function*(){return this._backing.getBitrate()})}getAverageBitrate(){return z(this,null,function*(){return this._backing.getAverageBitrate()})}getFirstTimestamp(){return z(this,null,function*(){var e;const t=yield this._backing.getFirstPacket({metadataOnly:!0});return null!=(e=null==t?void 0:t.timestamp)?e:0})}computeDuration(e){return z(this,null,function*(){var t,i;const r=yield this._backing.getPacket(1/0,_({metadataOnly:!0},e)),n=(null!=(t=null==r?void 0:r.timestamp)?t:0)+(null!=(i=null==r?void 0:r.duration)?i:0);return Ee(n,yield this.getTimeResolution())})}getDurationFromMetadata(){return z(this,arguments,function*(e={}){return this._backing.getDurationFromMetadata(e)})}computePacketStats(e=1/0,t){return z(this,null,function*(){const i=new wo(this);let r=1/0,n=-1/0,s=0,a=0;try{for(var o,l,c,u=W(i.packets(void 0,void 0,_({metadataOnly:!0},t)));o=!(l=yield u.next()).done;o=!1){const t=l.value;if(s>=e&&t.timestamp>=n)break;r=Math.min(r,t.timestamp),n=Math.max(n,t.timestamp+t.duration),s++,a+=t.byteLength}}catch(l){c=[l]}finally{try{o&&(l=u.return)&&(yield l.call(u))}finally{if(c)throw c[0]}}return{packetCount:s,averagePacketRate:s?Number((s/(n-r)).toPrecision(16)):0,averageBitrate:s?Number((8*a/(n-r)).toPrecision(16)):0}})}isLive(){return z(this,null,function*(){return null!==(yield this._backing.getLiveRefreshInterval())})}getLiveRefreshInterval(){return z(this,null,function*(){return this._backing.getLiveRefreshInterval()})}canBePairedWith(e){if(!(e instanceof zo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&(this._backing.getPairingMask()&e._backing.getPairingMask())!==BigInt("0")}getPairableTracks(e){return z(this,null,function*(){return this.input.getTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPairableVideoTracks(e){return z(this,null,function*(){return this.input.getVideoTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPairableAudioTracks(e){return z(this,null,function*(){return this.input.getAudioTracks(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableVideoTrack(e){return z(this,null,function*(){return this.input.getPrimaryVideoTrack(Ko({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableAudioTrack(e){return z(this,null,function*(){return this.input.getPrimaryAudioTrack(Ko({filter:e=>e.canBePairedWith(this)},e))})}hasPairableTrack(e){return z(this,null,function*(){e&&(e=Uo(e));const t=yield this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||(yield e(i))))return!0;return!1})}hasPairableVideoTrack(e){return e&&(e=Uo(e)),this.hasPairableTrack(t=>z(this,null,function*(){return t.isVideoTrack()&&(!e||(yield e(t)))}))}hasPairableAudioTrack(e){return e&&(e=Uo(e)),this.hasPairableTrack(t=>z(this,null,function*(){return t.isAudioTrack()&&(!e||(yield e(t)))}))}}const Lo=(e,t,i)=>{if(Xe(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},Uo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return Xe(r)?r.then(i):i(r)}:void 0};class qo extends zo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}getCodec(){return z(this,null,function*(){return this._backing.getCodec()})}get codec(){return Lo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return z(this,null,function*(){var e,t,i;return null!=(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:"prores"===(yield this._backing.getCodec())})}getCodedWidth(){return z(this,null,function*(){return this._backing.getCodedWidth()})}get codedWidth(){return Lo(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}getCodedHeight(){return z(this,null,function*(){return this._backing.getCodedHeight()})}get codedHeight(){return Lo(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}getRotation(){return z(this,null,function*(){return this._backing.getRotation()})}get rotation(){return Lo(this._backing.getRotation(),"rotation","getRotation")}getSquarePixelWidth(){return z(this,null,function*(){return this._backing.getSquarePixelWidth()})}get squarePixelWidth(){return Lo(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}getSquarePixelHeight(){return z(this,null,function*(){return this._backing.getSquarePixelHeight()})}get squarePixelHeight(){return Lo(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}getPixelAspectRatio(){return z(this,null,function*(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=it({num:(yield this.getSquarePixelWidth())*(yield this.getCodedHeight()),den:(yield this.getSquarePixelHeight())*(yield this.getCodedWidth())})})}get pixelAspectRatio(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=it({num:Lo(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Lo(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Lo(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Lo(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}getDisplayWidth(){return z(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()})}get displayWidth(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(void 0!==i){const e=Lo(i,"displayWidth","getDisplayWidth");if(null!==e)return e}const r=Lo(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Lo(r,"displayWidth","getDisplayWidth")}getDisplayHeight(){return z(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()})}get displayHeight(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(void 0!==i){const e=Lo(i,"displayHeight","getDisplayHeight");if(null!==e)return e}const r=Lo(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Lo(r,"displayHeight","getDisplayHeight")}getColorSpace(){return z(this,null,function*(){return this._backing.getColorSpace()})}hasHighDynamicRange(){return z(this,null,function*(){const e=yield this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix})}canBeTransparent(){return z(this,null,function*(){return this._backing.canBeTransparent()})}getDecoderConfig(){return z(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return z(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return z(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(j(null!==t),yo.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(yield VideoDecoder.isConfigSupported(e)).supported}catch(e){return lt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return z(this,null,function*(){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=yield this.getCodec();if(null===t)return null;const i=yield this.getDecoderConfig();return j(i),ai(t,i,e.data)})}computeFrameRateMetrics(){return z(this,arguments,function*(e={}){var t,i;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!Je(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const r=yield this.getTimeResolution(),n=null!=(t=e.targetPacketCount)?t:256,s=new wo(this),a=[];let o=-1/0,l=0;try{for(var c,u,d,h=W(s.packets(void 0,void 0,{metadataOnly:!0}));c=!(u=yield h.next()).done;c=!1){const e=u.value;if(a.length>=n&&e.timestamp>=o)break;a.push(e.timestamp),o=Math.max(o,e.timestamp),l++}}catch(u){d=[u]}finally{try{c&&(u=h.return)&&(yield u.call(h))}finally{if(d)throw d[0]}}const f=new Float64Array(a.length);for(let R=0;Re-t),I=w-1>>1,x=w>>1;let C=0,B=0,E=0;for(const R of P)if(E+=b.get(R),0===C&&E>I&&(C=R),E>x){B=R;break}const _=(k/C+k/B)/2;return{underlyingFrameRate:g,bestGuessFrameRate:null!==g?g:Qo(_),minFrameRate:k/v,maxFrameRate:k/T,averageFrameRate:k*w/S,medianFrameRate:_,frameRateIsConstant:null!==g&&1===T&&1===v,probedPacketCount:l}})}}class Wo extends zo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}getCodec(){return z(this,null,function*(){return this._backing.getCodec()})}get codec(){return Lo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return z(this,null,function*(){var e,t,i;return null==(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))||i})}getNumberOfChannels(){return z(this,null,function*(){return this._backing.getNumberOfChannels()})}get numberOfChannels(){return Lo(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}getSampleRate(){return z(this,null,function*(){return this._backing.getSampleRate()})}get sampleRate(){return Lo(this._backing.getSampleRate(),"sampleRate","getSampleRate")}getDecoderConfig(){return z(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return z(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return z(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(j(null!==t),bo.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(yield AudioDecoder.isConfigSupported(e)).supported}catch(e){return lt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return z(this,null,function*(){if(!(e instanceof nr))throw new TypeError("packet must be an EncodedPacket.");return null===(yield this.getCodec())?null:"key"})}}const Ho=e=>-(null!=e?e:-1/0),Vo=e=>-e,jo=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return Xe(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return Xe(r)?r.then(i):i(r)}:void 0}},Ko=(e,t)=>({filter:(null==e?void 0:e.filter)||(null==t?void 0:t.filter)?i=>{var r,n;const s=null==(n=null==(r=null==e?void 0:e.filter)?void 0:r.call(e,i))||n,a=e=>{var r,n;return!1!==e&&(null==(n=null==(r=null==t?void 0:t.filter)?void 0:r.call(t,i))||n)};return Xe(s)?s.then(a):a(s)}:void 0,sortBy:(null==e?void 0:e.sortBy)||(null==t?void 0:t.sortBy)?i=>{var r,n,s,a;const o=null!=(n=null==(r=null==e?void 0:e.sortBy)?void 0:r.call(e,i))?n:[],l=null!=(a=null==(s=null==t?void 0:t.sortBy)?void 0:s.call(t,i))?a:[],c=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return Xe(o)||Xe(l)?Promise.all([o,l]).then(([e,t])=>c(e,t)):c(o,l)}:void 0}),Xo=(e,t)=>z(null,null,function*(){let i=e;if(null==t?void 0:t.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>Xe(e))){const t=yield Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!(null==t?void 0:t.sortBy))return i;const r=i.map(e=>t.sortBy(e)),n=r.some(e=>Xe(e))?yield Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:n[t]})).sort((e,t)=>{var i,r;const n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],s=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(n.length,s.length);for(let o=0;oe.track)}),$o=(e,t)=>{const i=1e6,r=1+1e-9,n=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let v=1;v0))return null;s[v-1]=t}const a=s.slice();a.sort();let o=a[Math.floor(.05*a.length)];for(let v=0;v<6;v++){let e=0,t=0;for(const n of s){const i=Math.max(1,Math.round(n/o));Math.abs(n-i*o)>=r||(e+=n,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let l=0,c=0,u=0;for(const v of s){const e=Math.max(1,Math.round(v/o));Math.abs(v-e*o)>=r||(l++,c+=v,u+=e)}if(l/s.length<.98)return null;o=c/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const v of n){if(vp)continue;const e=Math.abs(v/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,n=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof fa)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof zs||e.source instanceof Ls))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof zs&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof Jo))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=null!=(t=e.initInput)?t:null,this._formatOptions=null!=(i=e.formatOptions)?i:{},e.source instanceof zs?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}_getSourceUncached(e){return z(this,null,function*(){j(this._rootSource instanceof Us);const t=yield this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t})}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&qs(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&qs(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const n=(()=>z(this,null,function*(){const i=yield this._getSourceUncached(e);if(et(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=tt(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);j(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),ye(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);j(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}}))();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:n}),n.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){var e;return null!=(e=this._demuxerPromise)?e:this._demuxerPromise=(()=>z(this,null,function*(){var e;this._reader=new tl(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const t of this._formats){if(yield t._canReadInput(this))return this._format=t,null==(e=this._onFormatDetermined)||e.call(this,t),t._createDemuxer(this)}throw new Zo}))()}get source(){return this._rootSource}getFormat(){return z(this,null,function*(){return yield this._getDemuxer(),j(this._format),this._format})}canRead(){return z(this,null,function*(){try{return yield this._getDemuxer(),!0}catch(e){if(e instanceof Zo)return!1;throw e}})}getFirstTimestamp(e){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=yield Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>{var t;return null!=(t=null==e?void 0:e.timestamp)?t:1/0}));return r===1/0?0:r})}computeDuration(e,t){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=yield Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)})}getDurationFromMetadata(e,t){return z(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e),r=(yield Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)})}getTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return Xo(t,e)})}getVideoTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this.getTracks()).filter(e=>e.isVideoTrack());return Xo(t,e)})}getAudioTracks(e){return z(this,null,function*(){e&&(e=jo(e));const t=(yield this.getTracks()).filter(e=>e.isAudioTrack());return Xo(t,e)})}getPrimaryVideoTrack(e){return z(this,null,function*(){var t;e&&(e=jo(e));const i=Ko(e,{sortBy:e=>z(null,null,function*(){return[Vo((yield e.getDisposition()).default),Vo(yield e.hasPairableAudioTrack()),Vo(!(yield e.hasOnlyKeyPackets())),Ho(yield e.getBitrate())]})});return null!=(t=(yield this.getVideoTracks(i))[0])?t:null})}getPrimaryAudioTrack(e){return z(this,null,function*(){var t;e&&(e=jo(e));const i=yield this.getPrimaryVideoTrack(),r=Ko(e,{sortBy:e=>z(this,null,function*(){return[Vo(!i||e.canBePairedWith(i)),Vo((yield e.getDisposition()).default),Ho(yield e.getBitrate())]})});return null!=(t=(yield this.getAudioTracks(r))[0])?t:null})}_getTrackBackings(){return z(this,null,function*(){var e;const t=yield this._getDemuxer();return null!=(e=this._trackBackingsCache)?e:this._trackBackingsCache=yield t.getTrackBackings()})}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new qo(this,e):new Wo(this,e);return this._backingToTrack.set(e,i),i}getMimeType(){return z(this,null,function*(){return(yield this._getDemuxer()).getMimeType()})}getMetadataTags(){return z(this,null,function*(){return(yield this._getDemuxer()).getMetadataTags()})}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class Zo extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class el extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class tl{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){var e;return null!=(e=this.source._getFileSize())?e:null}requestSlice(e,t){if(this.source._disposed)throw new el;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new il(t,J(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,Os);return Xe(r)?r.then(t=>t?new il(t.bytes,t.view,t.offset,e,i):null):r?new il(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new el;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,Ie(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),n=r=>r||(j(null!==this.fileSizeNonStrict),this.requestSlice(e,Ie(this.fileSizeNonStrict-e,t,i)));return Xe(r)?r.then(n):n(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(()=>z(this,null,function*(){const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(Xe(i)&&(i=yield i),!i||0===i.length)break;const r=nl(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const n of e)i.set(n,r),r+=n.length;return new il(i,J(i),0,0,t)}))()}}class il{constructor(e,t,i,r,n){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=n,this.bufferPos=r-i}static tempFromBytes(e){return new il(e,J(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new il(this.bytes,this.view,this.offset,e,e+t)}}const rl=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},nl=(e,t)=>{rl(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},sl=e=>(rl(e,1),e.view.getUint8(e.bufferPos++)),al=(e,t)=>{rl(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},ol=e=>{rl(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},ll=e=>{rl(e,3);const t=Se(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},cl=e=>{rl(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},ul=(e,t)=>{rl(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},dl=e=>{rl(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},hl=e=>{rl(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},fl=e=>{rl(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},ml=(e,t)=>{let i,r;return t?(i=ul(e,!0),r=ul(e,!0)):(r=ul(e,!1),i=ul(e,!1)),4294967296*r+i},pl=e=>4294967296*dl(e)+dl(e),gl=e=>4294967296*fl(e)+dl(e),kl=e=>{const t=hl(e),i=(e=>{rl(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},yl=e=>{rl(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},bl=e=>{rl(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},Tl=(e,t)=>{rl(e,t);let i="";for(let r=0;rZ.decode(nl(e,t)).split("\n").map(e=>e.trim()).filter(e=>{var t;return e.length>0&&!(null==(t=null==i?void 0:i.ignore)?void 0:t.call(i,e))});var Sl,wl,Pl,Il;(wl=Sl||(Sl={}))[wl.Unsynchronisation=128]="Unsynchronisation",wl[wl.ExtendedHeader=64]="ExtendedHeader",wl[wl.ExperimentalIndicator=32]="ExperimentalIndicator",wl[wl.Footer=16]="Footer",(Il=Pl||(Pl={}))[Il.ISO_8859_1=0]="ISO_8859_1",Il[Il.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",Il[Il.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",Il[Il.UTF_8=3]="UTF_8";const xl=128,Cl=10,Bl=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],El=(e,t)=>{var i;const r=e.filePos;null!=t.raw||(t.raw={}),null!=(i=t.raw).TAG||(i.TAG=nl(e,xl-3)),e.filePos=r;const n=_l(e,30);n&&(null!=t.title||(t.title=n));const s=_l(e,30);s&&(null!=t.artist||(t.artist=s));const a=_l(e,30);a&&(null!=t.album||(t.album=a));const o=_l(e,4),l=Number.parseInt(o,10);Number.isInteger(l)&&l>0&&(null!=t.date||(t.date=new Date(String(l))));const c=nl(e,30);let u;if(0===c[28]&&0!==c[29]){const i=c[29];i>0&&(null!=t.trackNumber||(t.trackNumber=i)),e.skip(-30),u=_l(e,28),e.skip(2)}else e.skip(-30),u=_l(e,30);u&&(null!=t.comment||(t.comment=u));const d=sl(e);d{const i=nl(e,t),r=$e(i.indexOf(0),i.length),n=i.subarray(0,r);let s="";for(let a=0;a{const t=e.filePos,i=Tl(e,3),r=sl(e),n=sl(e),s=sl(e),a=dl(e);if("ID3"!==i||255===r||255===n||0!==(2155905152&a))return e.filePos=t,null;let o=Ji(a);return s&Sl.Footer&&(o+=Cl),{majorVersion:r,revision:n,flags:s,size:o}},Fl=(e,t,i)=>{var r,n,s,a,o,l;if(![2,3,4].includes(t.majorVersion))return void lt._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&Sl.Footer?t.size-Cl:t.size,u=nl(e,c),d=new Al(t,u);if(t.flags&Sl.Unsynchronisation&&3===t.majorVersion&&d.ununsynchronizeAll(),t.flags&Sl.ExtendedHeader){const e=d.readU32();3===t.majorVersion?d.pos+=e:d.pos+=e-4}for(;d.pos<=d.bytes.length-d.frameHeaderSize();){const e=d.readId3V2Frame();if(!e)break;const c=d.pos,u=d.pos+e.size;let h=!1,f=!1,m=!1;if(3===t.majorVersion?(h=!!(64&e.flags),f=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),f=!!(8&e.flags),m=!!(2&e.flags)||!!(t.flags&Sl.Unsynchronisation)),h)lt._warn(`Skipping encrypted ID3v2 frame ${e.id}`),d.pos=u;else if(f)lt._warn(`Skipping compressed ID3v2 frame ${e.id}`),d.pos=u;else{if(m&&d.ununsynchronizeRegion(d.pos,u),null!=i.raw||(i.raw={}),"TXXX"===e.id){const e=null!=(n=(r=i.raw).TXXX)?n:r.TXXX={},t=d.readId3V2TextEncoding(),s=d.readId3V2Text(t,u),a=d.readId3V2Text(t,u);null!=e[s]||(e[s]=a)}else"T"===e.id[0]?null!=(s=i.raw)[a=e.id]||(s[a]=d.readId3V2EncodingAndText(u)):null!=(o=i.raw)[l=e.id]||(o[l]=d.readBytes(e.size));switch(d.pos=c,e.id){case"TIT2":case"TT2":null!=i.title||(i.title=d.readId3V2EncodingAndText(u));break;case"TIT3":case"TT3":null!=i.description||(i.description=d.readId3V2EncodingAndText(u));break;case"TPE1":case"TP1":null!=i.artist||(i.artist=d.readId3V2EncodingAndText(u));break;case"TALB":case"TAL":null!=i.album||(i.album=d.readId3V2EncodingAndText(u));break;case"TPE2":case"TP2":null!=i.albumArtist||(i.albumArtist=d.readId3V2EncodingAndText(u));break;case"TRCK":case"TRK":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.trackNumber||(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.tracksTotal||(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.discNumber||(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.discsTotal||(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=d.readId3V2EncodingAndText(u);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==Bl[e]){null!=i.genre||(i.genre=Bl[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==Bl[e]){null!=i.genre||(i.genre=Bl[e]);break}}null!=i.genre||(i.genre=e)}break;case"TDRC":case"TDAT":{const e=d.readId3V2EncodingAndText(u),t=new Date(e);Number.isNaN(t.getTime())||null!=i.date||(i.date=t)}break;case"TYER":case"TYE":{const e=d.readId3V2EncodingAndText(u),t=Number.parseInt(e,10);Number.isInteger(t)&&(null!=i.date||(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.lyrics||(i.lyrics=d.readId3V2Text(e,u))}break;case"COMM":case"COM":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.comment||(i.comment=d.readId3V2Text(e,u))}break;case"APIC":case"PIC":{const e=d.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=d.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=d.readId3V2Text(e,u);const n=d.readU8(),s=d.readId3V2Text(e,u).trimEnd(),a=u-d.pos;if(a>=0){const e=d.readBytes(a);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===n?"coverFront":4===n?"coverBack":"unknown",description:s})}}break;default:d.pos+=e.size}d.pos=u}}};class Al{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:Ji(t);s(e)&&(i=e)}return this.pos=n,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case Pl.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=$e(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=$e(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Z.decode(r.subarray(0,e))}case Pl.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=$e(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Pl.UTF_8:{const e=$e(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),Z.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class Dl{constructor(e){this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set}get currentTime(){return this.paused?this.playbackTimeAtStart:(this.audioContext.currentTime-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart}ensureAudioContext(e){if(this.audioContext)return;const t=window.AudioContext||window.webkitAudioContext;try{this.audioContext=new t({sampleRate:e})}catch(i){this.audioContext=new t}this.gainNode=this.audioContext.createGain(),this.gainNode.connect(this.audioContext.destination),this.updateGain()}updateGain(){if(!this.gainNode)return;const e=this.muted?0:this.volume;this.gainNode.gain.value=e*e}stopQueuedNodes(){this.queuedNodes.forEach(e=>e.stop()),this.queuedNodes.clear()}stopIterator(){return z(this,null,function*(){var e;yield null==(e=this.audioIterator)?void 0:e.return(),this.audioIterator=null})}handleNoAudioTrack(){this.audioSink=null,this.ensureAudioContext()}load(e,t){return z(this,null,function*(){++this.asyncId,yield this.stopIterator(),this.stopQueuedNodes(),this.paused=!0,this.playbackTimeAtStart=0,this.audioContextStartTime=0;const{input:i,audioTrack:r,duration:n}=e;return this.input=i,this.duration=n,r?null!==r.codec&&(yield r.canDecode())?(this.ensureAudioContext(r.sampleRate),this.audioSink=new Oo(r),void(null==t||t())):(this.audioSink=null,this.ensureAudioContext(),void(null==t||t())):(this.handleNoAudioTrack(),void(null==t||t()))})}runIterator(e){return z(this,null,function*(){if(!this.audioSink)return;yield this.stopIterator(),this.audioIterator=this.audioSink.buffers(this.currentTime);for(;;){if(e!==this.asyncId||this.paused)return;const i=[];let r=!1;try{for(let e=0;e<16;e++){const e=yield this.audioIterator.next();if(e.done){r=!0;break}i.push(e.value)}}catch(t){console.error("Audio iterator error:",t),r=!0}if(e!==this.asyncId||this.paused)return;i.length>0&&"suspended"===this.audioContext.state&&(yield this.audioContext.resume(),this.events.emit("canplay"),this.events.emit("playing"));for(const{buffer:e,timestamp:t}of i){const i=this.audioContext.createBufferSource();i.buffer=e,i.connect(this.gainNode),i.playbackRate.value=this.playbackRate;const r=this.audioContextStartTime+(t-this.playbackTimeAtStart)/this.playbackRate,n=(r+e.duration/this.playbackRate-this.audioContextStartTime)*this.playbackRate+this.playbackTimeAtStart;n>this.latestScheduledEndTime&&(this.latestScheduledEndTime=n),r>=this.audioContext.currentTime?i.start(r):i.start(this.audioContext.currentTime,(this.audioContext.currentTime-r)*this.playbackRate),this.queuedNodes.add(i),i.onended=()=>this.queuedNodes.delete(i)}if(r)break;yield new Promise(e=>setTimeout(e,0));const n=1;for(;this.latestScheduledEndTime-this.currentTime>n;){if(e!==this.asyncId||this.paused)return;yield new Promise(e=>setTimeout(e,50))}}})}play(){return z(this,null,function*(){if(!this.paused)return;this.audioContext||this.ensureAudioContext(),"suspended"===this.audioContext.state&&(yield this.audioContext.resume()),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1;const e=++this.asyncId;this.runIterator(e)})}pause(){this.paused||(this.playbackTimeAtStart=this.currentTime,this.paused=!0,this.stopIterator(),this.stopQueuedNodes())}seek(e){return z(this,null,function*(){this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=this.audioContext.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart;const t=++this.asyncId;this.paused||this.runIterator(t)})}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){if(e!==this.playbackRate&&(this.paused||(this.playbackTimeAtStart=this.currentTime,this.audioContextStartTime=this.audioContext.currentTime),this.playbackRate=e,!this.paused)){const e=++this.asyncId;this.runIterator(e)}}destroy(){var e;this.asyncId++,this.pause(),null==(e=this.audioContext)||e.close(),this.audioContext=null,this.input=null,this.audioSink=null}}function Ml(e){return z(this,null,function*(){var t,i;return null!=(i=null!=(t=yield e.getAverageBitrate())?t:yield e.getBitrate())?i:0})}const Nl=/\.m3u8(?:$|[?#])/i;function Ol(e){return"string"===typeof e&&Nl.test(e)}function zl(e){const t=function(e){return"string"===typeof e?new $s(e):e instanceof Blob?new Vs(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new Ys(e):null!=e?e:null}(e);return t?new Jo({source:t,formats:Ol(e)?za:Oa}):null}class Ll{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){var e;return null==(e=this.controller)?void 0:e.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}wait(e,t){return z(this,null,function*(){try{yield Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}})}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,null==e||e.dispose()}cancel(){var e;if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),null==(e=this.controller)||e.abort(),this.disposeInput()}}}function Ul(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}function ql(e){return z(this,arguments,function*({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),n=t||i,s=Boolean(n&&(yield n.isLive()));let a=Number.NaN;return r.length>0&&(a=yield e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==a||s||(a=yield e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:null!=a?a:Number.NaN})}function Wl(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class Hl{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null,this.audioStart=null}operation(){return R(_({},Wl()),{source:this.host.loadSeq,complete:Wl()})}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,null==e||e.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,null==e||e.complete.resolve(),null==e||e.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}startAudio(){return z(this,null,function*(){this.audioStart||(this.audioStart=this.host.audio.play());const e=this.audioStart;try{yield e}finally{this.audioStart===e&&(this.audioStart=null)}})}runPlay(e){return z(this,null,function*(){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(yield this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,yield this.startAudio(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Ul(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}})}seek(e,t){return this.position(t=>z(this,null,function*(){const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();yield Promise.all([i,r])}),["seeked"],!1,t)}replace(e,t){return this.position(i=>z(this,null,function*(){e.duration=yield ql(e),i()&&(this.host.media=e,yield Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(yield Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))}),["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=null!=r?r:this.seeking?this.wanted:!this.host.paused,this.cancelPlay();const n=this.seeking,s=this.operation();return this.seeking=s,null==n||n.complete.resolve(),null==n||n.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}runPosition(e,t,i,r){return z(this,null,function*(){const n=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!n())return;if(this.host.ended=!1,this.host.seeking=!0,Ul(this.host.events,n,["seeking","waiting"]),!n())return;if(r||this.stop(),!n())return;if(yield t(n),!n())return;if(this.host.seeking=!1,e.complete.resolve(),Ul(this.host.events,n,i),!n())return;this.seeking=null,s=this.wanted}catch(a){if(!n())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(a),a}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&(yield this.play())})}}const Vl=new WeakMap,jl=new WeakMap;function Kl(e){const t=jl.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>{var t;return null!=(t=e.value)?t:null});jl.set(e,i);const r=()=>{jl.get(e)===i&&jl.delete(e)};return i.then(r,r),i}function Xl(e,t,i,r,n){const s=i?Math.max(.06,r/Math.max(1,n)):0;return i&&e{if(this.image===n&&t()){this.cancel();try{i(n)}catch(e){r(e)}}},n.onerror=()=>{this.image===n&&this.cancel()},n.src=e}}class Gl{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}update(e){return z(this,null,function*(){var t;const i=this.host.videoIterator;if(!i||!this.ready()||!this.current(e)||this.host.isFetching)return;const r={};this.fetching=r,this.host.isFetching=!0;const n=()=>this.current(e)&&this.host.videoIterator===i;try{for(;n();){const e=yield Kl(i);if(!n()||!e)return;const r=null==(t=this.host.audioClock)?void 0:t.currentTime;if(void 0===r)return;const s=Xl(e.timestamp,r,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==s){if("draw"!==s)return void(this.host.nextFrame=e);this.draw(e)}}}catch(s){if(n())throw s}finally{this.fetching===r&&(this.fetching=null,this.host.isFetching=!1)}})}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Ul(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Ul(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!A(this,o),e=>N(this,d,g).call(this,e,!0),e=>N(this,d,m).call(this,e)))}preflight(e,t,i){return z(this,null,function*(){return function(e,t,i,r,n=()=>!0){return z(this,null,function*(){if((null==r?void 0:r.aborted)||!n())return!1;if(!t||"string"!==typeof e||Ol(e))return!0;try{const t=yield fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if((null==r?void 0:r.aborted)||!n())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!((null==r?void 0:r.aborted)||!n())&&(console.warn("Preflight check failed:",s),!0)}})}(e,this.preflightRange,this.events,t,i)})}drawPoster(){if(A(this,a)||!this.poster||this.posterDrawn)return;const e=A(this,t);A(this,l).draw(this.poster,()=>N(this,d,h).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,N(this,d,f).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>N(this,d,m).call(this,e))}stopIterator(){return z(this,null,function*(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,yield function(e){if(!e)return Promise.resolve();const t=Vl.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return Vl.set(e,i),i}(e)})}clear(){N(this,d,f).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){O(this,t)._++,O(this,i)._++,this.stop(),N(this,d,p).call(this),A(this,l).cancel(),M(this,o,!1),M(this,r,null),M(this,n,null),M(this,s,null),this.videoSink=null,this.input=null}load(e,n){return z(this,null,function*(){if(A(this,a))return;this.cancelPending();const s=A(this,t),l=A(this,i);M(this,o,!0);const c=Promise.resolve().then(()=>N(this,d,k).call(this,e,s,l,n));M(this,r,c);try{yield c}finally{A(this,r)===c&&M(this,r,null)}})}handleNoVideoTrack(){A(this,a)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}resetIterator(e){return z(this,null,function*(){if(A(this,a))return;const n=A(this,t),s=++O(this,i)._,c=A(this,r);this.stop(),A(this,l).cancel(),M(this,o,!0);try{c&&(yield c),yield N(this,d,y).call(this,e,n,s)}catch(u){if(N(this,d,h).call(this,n)&&A(this,i)===s)throw N(this,d,p).call(this),u}finally{N(this,d,h).call(this,n)&&A(this,i)===s&&M(this,o,!1)}})}updateNextFrame(e){return z(this,null,function*(){yield A(this,c).update(e)})}render(){A(this,c).render()}start(e){A(this,c).start(e)}stop(){A(this,c).stop()}seek(e){return z(this,null,function*(){yield this.resetIterator(e)})}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){A(this,a)||(M(this,a,!0),O(this,t)._++,A(this,c).destroy(),A(this,l).cancel(),N(this,d,p).call(this),this.posterDrawn=!1,M(this,n,null),M(this,s,null),this.videoSink=null,this.input=null,this.audioClock=null)}}t=new WeakMap,i=new WeakMap,r=new WeakMap,n=new WeakMap,s=new WeakMap,a=new WeakMap,o=new WeakMap,l=new WeakMap,c=new WeakMap,u=new WeakMap,d=new WeakSet,h=function(e){return!A(this,a)&&A(this,t)===e},f=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},m=function(e){A(this,a)||(N(this,d,p).call(this),A(this,u)?A(this,u).call(this,e):this.events.emit("error",e))},p=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},g=function(e,t){A(this,l).cancel(),t&&this.clear(),N(this,d,f).call(this).drawImage(e.canvas,0,0)},k=function(e,t,r,s){return z(this,null,function*(){if(N(this,d,h).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:i,videoTrack:a,duration:o}=e;if(this.input=i,this.duration=o,!a)return this.handleNoVideoTrack(),void(null==s||s());const l=null!==a.codec&&(yield a.canDecode());if(!N(this,d,h).call(this,t))return;if(!l)return this.handleNoVideoTrack(),void(null==s||s());const c=yield a.canBeTransparent();if(!N(this,d,h).call(this,t))return;M(this,n,()=>new Ao(a,{poolSize:2,fit:"contain",alpha:c})),this.videoSink=A(this,n).call(this),this.width=a.displayWidth,this.height=a.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,null==s||s(),N(this,d,h).call(this,t)&&(yield N(this,d,y).call(this,0,t,r))}catch(a){if(N(this,d,h).call(this,t))throw N(this,d,p).call(this),a}finally{N(this,d,h).call(this,t)&&A(this,i)===r&&M(this,o,!1)}})},y=function(e,t,r){return z(this,null,function*(){if(!N(this,d,h).call(this,t)||A(this,i)!==r)return;N(this,d,p).call(this),A(this,n)&&this.videoSink===A(this,s)&&(this.videoSink=A(this,n).call(this));const a=this.videoSink;if(!a||!N(this,d,h).call(this,t))return;M(this,s,a);const o=a.canvases(e);this.videoIterator=o;const l=()=>N(this,d,h).call(this,t)&&A(this,i)===r&&this.videoIterator===o,c=yield Kl(o);if(!l())return;const u=yield Kl(o);l()&&(this.nextFrame=u,c?N(this,d,g).call(this,c,!1):this.drawPoster())})};class Yl{constructor({canvas:e,ctx:t,events:i,option:r={}}){var n,s,a,o,l;D(this,b),this.events=i,this.option=r,this.audio=new Dl(i),this.video=new Ql({canvas:e,ctx:t,events:i,timeupdateInterval:null!=(n=r.timeupdateInterval)?n:250,avSyncTolerance:null!=(s=r.avSyncTolerance)?s:.12,dropLateFrames:null!=(a=r.dropLateFrames)&&a,poster:null!=(o=r.poster)?o:"",preflightRange:null!=(l=r.preflightRange)&&l,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,M(this,b,new Hl(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,A(this,b).ended())})}load(e){return z(this,null,function*(){var t,i;if(this.destroyed)return;const r=++this.loadSeq;if(A(this,b).invalidate(),this.video.cancelPending(),null==(t=this.loadSession)||t.cancel(),r!==this.loadSeq||this.destroyed)return;if(this.pause(),r!==this.loadSeq||this.destroyed)return;this.disposeInput();const n=new Ll;this.loadSession=n,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,n.defer(()=>this.events.emit("waiting")),n.defer(()=>this.events.emit("loadstart"));const s=Number.isFinite(this.option.loadTimeout)&&null!=(i=this.option.loadTimeout)?i:0;try{yield n.wait(this.performLoad(e,r,n),s)}catch(a){if(r!==this.loadSeq)return;const e=++this.loadSeq;if(A(this,b).invalidate(),this.video.cancelPending(),n.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}})}performLoad(e,t){return z(this,arguments,function*(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(yield this.video.preflight(e,i.signal,r))||!r())return;const n=zl(e);if(!n)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(n);const s=yield function(e,t){return z(this,null,function*(){const i=yield e.getPrimaryVideoTrack(),r=i?yield i.getPrimaryPairableAudioTrack():yield e.getPrimaryAudioTrack(),n=yield ql({input:e,videoTrack:i,audioTrack:r}),s=i||r,a=Ol(t);return{input:e,videoTrack:i,audioTrack:r,duration:n,isLive:!Number.isFinite(n)&&Boolean(s&&(yield s.isLive())),isHls:a,videoMode:a?"auto":"manual",audioMode:a?"auto":"manual"}})}(n,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=n,this.media=s;const a=function(e,t){let i=!1,r=!1,n=!1;function s(s){t()&&!n&&("video"===s?i=!0:r=!0,i&&r&&(n=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Ul(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,a.video),t=r()?this.audio.load(s,a.audio):Promise.resolve();if(yield Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Ul(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}})}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){var e;null==(e=this.loadSession)||e.disposeInput(),this.input=null,this.media=null}replaceTracks(e){return z(this,null,function*(){if(this.media&&!this.destroyed)return A(this,b).replace(_(_({},this.media),e),this.currentTime)})}selectHlsQuality(e){return z(this,null,function*(){return function(e,t){return z(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getVideoTracks();if(!a())return;const s="auto"===t?yield r.getPrimaryVideoTrack():null!=(i=e.find(e=>e.id===t))?i:n.videoTrack;if(!a()||!s)return;let l=n.audioTrack,c=n.audioMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableAudioTrack(),c="auto"),o={videoTrack:s,audioTrack:l,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}selectHlsAudio(e){return z(this,null,function*(){return function(e,t){return z(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getAudioTracks();if(!a())return;const s="auto"===t?n.videoTrack?yield n.videoTrack.getPrimaryPairableAudioTrack():yield r.getPrimaryAudioTrack():null!=(i=e.find(e=>e.id===t))?i:n.audioTrack;if(!a()||!s)return;let l=n.videoTrack,c=n.videoMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableVideoTrack(),c="auto"),o={videoTrack:l,audioTrack:s,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}getHlsState(){return z(this,null,function*(){const e=this.media;if(this.destroyed)return null;try{const t=yield function(e){return z(this,null,function*(){var t,i,r,n;if(!(null==e?void 0:e.isHls)||!e.input)return null;const[s,a]=yield Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[o,l]=yield Promise.all([Promise.all(s.map((e,t)=>z(null,null,function*(){return{id:e.id,track:e,index:t,name:yield e.getName(),height:yield e.getDisplayHeight(),bitrate:yield Ml(e)}}))),Promise.all(a.map((e,t)=>z(null,null,function*(){const i=yield e.getName(),r=yield e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:yield Ml(e)}})))]);return{levels:o,audios:l,currentLevel:e.videoTrack&&null!=(t=o.find(t=>{var i;return t.id===(null==(i=e.videoTrack)?void 0:i.id)}))?t:null,currentAudio:e.audioTrack&&null!=(i=l.find(t=>{var i;return t.id===(null==(i=e.audioTrack)?void 0:i.id)}))?i:null,videoMode:null!=(r=e.videoMode)?r:"auto",audioMode:null!=(n=e.audioMode)?n:"auto"}})}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}})}play(){return z(this,null,function*(){return A(this,b).play()})}pause(){A(this,b).pause()}seek(e){return z(this,null,function*(){return A(this,b).seek(e)})}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,A(this,b).invalidate();const e=[];for(const i of[()=>{var e;return null==(e=this.loadSession)?void 0:e.cancel()},()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){var e,t,i;return null!=(i=null!=(t=null==(e=this.media)?void 0:e.duration)?t:this.audio.duration)?i:this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}b=new WeakMap;const Jl=new WeakMap;function Zl(e){let t=Jl.get(e);return t||(t={closed:!1,frames:new Set},Jl.set(e,t)),t}class ec{constructor({art:e,canvas:t,ctx:i,option:r}){var n,s;this.art=e,this.canvas=t,this.option=r,this.events=new V,this.engine=new Yl({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=null!=(n=r.volume)?n:.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:(null==(s=e.option)?void 0:s.url)&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=Zl(e);if(i.closed)return 0;const r=requestAnimationFrame(n=>{i.frames.delete(r),i.closed||t(n,{presentationTime:e.engine.currentTime,expectedDisplayTime:n+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:n,receiveTime:n,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){Zl(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=Zl(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,n=r("canvas"),s=n.getContext("2d"),a=new ec({art:t,canvas:n,ctx:s,option:e});t.mediabunny=a;const o={};for(const e in n)"function"===typeof n[e]&&(o[e]=n[e].bind(n));const l=new Set([...Object.getOwnPropertyNames(a),...Object.getOwnPropertyNames(Object.getPrototypeOf(a))]);for(const e of l)"constructor"!==e&&(e in n||Object.defineProperty(n,e,{get(){const t=a[e];return"function"===typeof t?t.bind(a):t},set(t){a[e]=t},configurable:!0,enumerable:!0}));for(const e in o)n[e]=(...t)=>o[e](...t);function c(){var e;(null==(e=t.template)?void 0:e.$player)&&!t.option.autoSize&&Object.assign(n.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",c),t.on("video:loadedmetadata",c),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function n(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),n("mediabunny-quality")}function a(){r("mediabunny-audio"),n("mediabunny-audio")}function o(e={}){return e.control||e.setting}function l(r){return z(this,null,function*(){var n;const a=(null==(n=i.m3u8)?void 0:n.quality)||{};if(!o(a)||!(null==r?void 0:r.levels.length))return void s();const l=a.auto||"Auto",c=a.title||"Quality",d=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?d(r.currentLevel):l,f=H(r.levels.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentLevel)?void 0:t.id)===e.id}}),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),n=r.levels.find(e=>e.id===t.value);return((null==n?void 0:n.height)||0)-((null==i?void 0:i.height)||0)});f.push({html:l,value:"auto",default:!r.currentLevel});const m=i=>z(null,null,function*(){return yield t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function c(r){return z(this,null,function*(){var n;const s=(null==(n=i.m3u8)?void 0:n.audio)||{};if(!o(s)||!(null==r?void 0:r.audios.length)||r.audios.length<2)return void a();const l=s.auto||"Auto",c=s.title||"Audio",d=s.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?d(r.currentAudio):l,f=H(r.audios.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentAudio)?void 0:t.id)===e.id}}),"html");f.push({html:l,value:"auto",default:!r.currentAudio});const m=i=>z(null,null,function*(){return yield t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});s.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function u(){return z(this,null,function*(){const e=yield t.getM3u8State();if(!e)return s(),void a();yield Promise.all([l(e),c(e)])})}}({art:t,shim:a,option:e}),t.on("destroy",()=>{delete t.mediabunny,a.destroy()}),n}}}); +!function(e,t){"object"===typeof exports&&"undefined"!==typeof module?module.exports=t():"function"==typeof define&&define.amd?(e.artplayerProxyMediabunny=t(),define(function(){return e.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";var e,t,i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F,A=Object.defineProperty,M=Object.defineProperties,D=Object.getOwnPropertyDescriptors,N=Object.getOwnPropertySymbols,O=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable,L=(e,t)=>(t=Symbol[e])?t:Symbol.for("Symbol."+e),U=e=>{throw TypeError(e)},q=Math.pow,W=(e,t,i)=>t in e?A(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i,H=(e,t)=>{for(var i in t||(t={}))O.call(t,i)&&W(e,i,t[i]);if(N)for(var i of N(t))z.call(t,i)&&W(e,i,t[i]);return e},V=(e,t)=>M(e,D(t)),j=(e,t,i)=>t.has(e)||U("Cannot "+i),K=(e,t,i)=>(j(e,t,"read from private field"),i?i.call(e):t.get(e)),X=(e,t,i)=>t.has(e)?U("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),$=(e,t,i,r)=>(j(e,t,"write to private field"),r?r.call(e,i):t.set(e,i),i),G=(e,t,i)=>(j(e,t,"access private method"),i),Q=(e,t,i,r)=>({set _(r){$(e,t,r,i)},get _(){return K(e,t,r)}}),Y=(e,t,i)=>new Promise((r,n)=>{var s=e=>{try{o(i.next(e))}catch(t){n(t)}},a=e=>{try{o(i.throw(e))}catch(t){n(t)}},o=e=>e.done?r(e.value):Promise.resolve(e.value).then(s,a);o((i=i.apply(e,t)).next())}),J=function(e,t){this[0]=e,this[1]=t},Z=(e,t,i)=>{var r,n=(e,t,r,s)=>{try{var a=i[e](t),o=(t=a.value)instanceof J,l=a.done;Promise.resolve(o?t[0]:t).then(i=>o?n("return"===e?e:"next",t[1]?{done:i.done,value:i.value}:i,r,s):r({value:i,done:l})).catch(e=>n("throw",e,r,s))}catch(c){s(c)}},s=(e,t,i,s)=>a[e]=a=>(t=new Promise((t,i,s)=>(s=()=>n(e,a,t,i),r?r.then(s):s())),s=()=>r===i&&(r=0),r=i=t.then(s,s),t),a={};return i=i.apply(e,t),a[L("asyncIterator")]=()=>a,s("next"),s("throw"),s("return"),a},ee=e=>{var t,i=e[L("asyncIterator")],r=!1,n={};return null==i?(i=e[L("iterator")](),t=e=>n[e]=t=>i[e](t)):(i=i.call(e),t=e=>n[e]=t=>{if(r){if(r=!1,"throw"===e)throw t;return t}return r=!0,{done:!1,value:new J(new Promise(r=>{var n=i[e](t);n instanceof Object||U("Object expected"),r(n)}),1)}}),n[L("iterator")]=()=>n,t("next"),"throw"in i?t("throw"):n.throw=e=>{throw e},"return"in i&&t("return"),n},te=(e,t,i)=>(t=e[L("asyncIterator")])?t.call(e):(e=e[L("iterator")](),t={},(i=(i,r)=>(r=e[i])&&(t[i]=t=>new Promise((i,n,s)=>(t=r.call(e,t),s=t.done,Promise.resolve(t.value).then(e=>i({value:e,done:s}),n)))))("next"),i("return"),t);function ie(e,t){const i=new Map;return e.filter(e=>{const r=e[t];return void 0===r||!i.has(r)&&i.set(r,1)})}class re{constructor(){X(this,e,!1),this.listeners=new Map}addEventListener(t,i){var r;K(this,e)||(this.listeners.has(t)||this.listeners.set(t,[]),null==(r=this.listeners.get(t))||r.push(i))}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(t,i){var r;if(K(this,e))return;const n=Object.assign(new Event(t),{detail:i});null==(r=this.listeners.get(t))||r.forEach(t=>{K(this,e)||t(n)})}destroy(){$(this,e,!0),this.listeners.clear()}}function ne(e){if(!e)throw new Error("Assertion failed.")}e=new WeakMap;const se=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},ae=e=>e&&e[e.length-1],oe=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{const i=t+1,r=Math.floor(Math.log2(i));e.writeBits(r,0),e.writeBits(1,1),e.writeBits(r,i-q(2,r))},ce=e=>{const t=oe(e);return 0===(1&t)?-(t>>1):t+1>>1},ue=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),de=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),he=new TextDecoder,fe=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),me={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},pe=fe(me),ge={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},ke=fe(ge),ye={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},be=fe(ye),Te=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&void 0!==e.fullRange,ve={primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0},we=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class Se{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}acquire(){return Y(this,null,function*(){let e;const t=new Promise(t=>{let i=!1;e=()=>{i||(t(),this.pending--,i=!0)}}),i=this.currentPromise;return this.currentPromise=t,this.pending++,yield i,e})}}const Pe=/^[0-9a-fA-F]+$/,Ie=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),xe=e=>(e=(e=(e=(e=(e=e>>1&1431655765|(1431655765&e)<<1)>>2&858993459|(858993459&e)<<2)>>4&252645135|(252645135&e)<<4)>>8&16711935|(16711935&e)<<8)>>16&65535|(65535&e)<<16)>>>0,Ce=(e,t,i)=>{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+n>>1,o=i(e[a]);o===t?(s=a,n=a-1):o{let r=0,n=e.length-1,s=-1;for(;r<=n;){const a=r+(n-r+1)/2|0;i(e[a])<=t?(s=a,r=a+1):n=a-1}return s},Ee=(e,t,i)=>{const r=Be(e,i(t),i);e.splice(r+1,0,t)},_e=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},Re=(e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)},Fe=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},Ae=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},Me=e=>{throw new Error(`Unexpected value: ${e}`)},De=(e,t,i)=>{const r=e.getUint8(t),n=e.getUint8(t+1),s=e.getUint8(t+2);return i?r|n<<8|s<<16:r<<16|n<<8|s},Ne=(e,t,i,r)=>{i>>>=0,i&=16777215,e.setUint8(t,i>>>16&255),e.setUint8(t+1,i>>>8&255),e.setUint8(t+2,255&i)},Oe=(e,t)=>({next(){return Y(this,null,function*(){const i=yield e.next();return i.done?{value:void 0,done:!0}:{value:t(i.value),done:!1}})},return:()=>e.return(),throw:t=>e.throw(t),[Symbol.asyncIterator](){return this}}),ze=(e,t,i)=>Math.max(t,Math.min(i,e)),Le="und",Ue=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},qe=(e,t)=>Math.round(e/t)*t,We=(e,t)=>Math.round(e*t)/t,He=(e,t)=>Math.floor(e/t)*t,Ve=e=>{let t=0;for(;0!==e;)e&=e-1,t++;return t},je=/^[a-z]{3}$/,Ke=e=>je.test(e),Xe=1e6*(1+Number.EPSILON),$e=(e,t)=>{const i=H(H({},e),t);if(e.headers||t.headers){const r=e.headers?Ge(e.headers):{},n=t.headers?Ge(t.headers):{},s=H({},r);Object.entries(n).forEach(([e,t])=>{const i=Object.keys(s).find(t=>t.toLowerCase()===e.toLowerCase());i&&delete s[i],s[e]=t}),i.headers=s}return i},Ge=e=>{if(e instanceof Headers){const t={};return e.forEach((e,i)=>{t[i]=e}),t}if(Array.isArray(e)){const t={};return e.forEach(([e,i])=>{t[e]=i}),t}return e},Qe=(e,t,i,r,n)=>Y(null,null,function*(){let s=0;for(;;)try{return yield e(t,i)}catch(a){if(n())throw a;s++;const e=r(s,a,t);if(null===e)throw a;if(vt._error("Retrying failed fetch. Error:",a),!Number.isFinite(e)||e<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(e>0&&(yield kt(1e3*e)),n())throw a}});class Ye{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let Je=null;const Ze=()=>{var e;return null!==Je?Je:Je=!("undefined"===typeof navigator||!((null==(e=navigator.vendor)?void 0:e.match(/apple/i))||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent)))};let et=null;const tt=()=>{var e;return null!==et?et:et="undefined"!==typeof navigator&&(null==(e=navigator.userAgent)?void 0:e.includes("Firefox"))};let it=null;const rt=()=>{var e;return null!==it?it:it=!("undefined"===typeof navigator||!(null==(e=navigator.vendor)?void 0:e.includes("Google Inc"))&&!/Chrome/.test(navigator.userAgent))},nt=e=>"undefined"===typeof globalThis.isSecureContext||globalThis.isSecureContext?`${e} is not available in this environment.`:`${e} is not available in this environment; this may be because this page is running in an insecure context. Try serving your page over HTTPS or use localhost.`,st=Y(null,null,function*(){}).constructor,at=e=>e instanceof st||e instanceof Promise||"function"===typeof(null==e?void 0:e.then),ot=(e,t)=>-1!==e?e:t,lt=(e,t,i,r)=>e<=r&&i<=t,ct=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r{null!=Symbol.dispose||(Symbol.dispose=Symbol("Symbol.dispose"))},dt=e=>"number"===typeof e&&!Number.isNaN(e),ht=(e,t)=>{if(t.includes("://"))return t;if(e.includes("://")){const t=e.indexOf("?");-1!==t&&(e=e.slice(0,t))}let i;if(t.startsWith("/")){const r=e.indexOf("://");if(-1===r)i=t;else{const n=e.indexOf("/",r+3);i=-1===n?e+t:e.slice(0,n)+t}}else{const r=e.lastIndexOf("/");i=-1===r?t:e.slice(0,r+1)+t}let r="";const n=i.indexOf("://");if(-1!==n){const e=i.indexOf("/",n+3);-1!==e&&(r=i.slice(0,e),i=i.slice(e))}const s=i.split("/"),a=[];for(const o of s)".."===o?a.pop():"."!==o&&a.push(o);return r+a.join("/")},ft=(e,t)=>{let i=0;for(let r=0;r{let i=-1,r=1/0;for(let n=0;n{ne(Number.isInteger(e.num)),ne(Number.isInteger(e.den)),ne(0!==e.den);let t=Math.abs(e.num),i=Math.abs(e.den);for(;0!==i;){const e=t%i;t=i,i=e}const r=t||1;return{num:e.num/r,den:e.den/r}},gt=(e,t)=>{if("object"!==typeof e||!e)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},kt=e=>new Promise(t=>setTimeout(t,e));class yt{constructor(){this._listeners=new Map}on(e,t,i){var r;this._listeners.has(e)||this._listeners.set(e,new Set);const n={fn:t,once:null!=(r=null==i?void 0:i.once)&&r};return this._listeners.get(e).add(n),()=>{var t;null==(t=this._listeners.get(e))||t.delete(n)}}_emit(...e){const[t,i]=e,r=this._listeners.get(t);if(r)for(const s of r){try{s.fn(i)}catch(n){console.error(n)}s.once&&r.delete(s)}}}var bt,Tt;(Tt=bt||(bt={}))[Tt.Silent=0]="Silent",Tt[Tt.Errors=1]="Errors",Tt[Tt.Warnings=2]="Warnings",Tt[Tt.Info=3]="Info";class vt{constructor(){}static get level(){return vt._level}static set level(e){if(e!==bt.Silent&&e!==bt.Errors&&e!==bt.Warnings&&e!==bt.Info)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");vt._level=e}static get _emitter(){var e;return null!=(e=vt._emitterInstance)?e:vt._emitterInstance=new yt}static on(e,t,i){return vt._emitter.on(e,t,i)}static _error(...e){vt._emitter._emit("error",e),vt._level>=bt.Errors&&console.error(...e)}static _warn(...e){vt._emitter._emit("warn",e),vt._level>=bt.Warnings&&console.warn(...e)}static _info(...e){vt._emitter._emit("info",e),vt._level>=bt.Info&&console.info(...e)}}vt._level=bt.Info,vt._emitterInstance=null;class wt{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("string"!==typeof t)throw new TypeError("mimeType must be a string.")}}class St{constructor(e,t,i,r){if(this.data=e,this.mimeType=t,this.name=i,this.description=r,!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(void 0!==t&&"string"!==typeof t)throw new TypeError("mimeType, when provided, must be a string.");if(void 0!==i&&"string"!==typeof i)throw new TypeError("name, when provided, must be a string.");if(void 0!==r&&"string"!==typeof r)throw new TypeError("description, when provided, must be a string.")}}const Pt={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class It{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){var e;const t=Math.floor(this.pos/8),i=null!=(e=this.bytes[t])?e:0,r=7-(7&this.pos),n=(i&1<>r;return this.pos++,n}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i>i-r-1<0&&this.writeBits(r,t.readBits(r))}readAlignedByte(){var e;if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");const t=this.pos/8,i=null!=(e=this.bytes[t])?e:0;return this.pos+=8,i}skipBits(e){this.pos+=e}getBitsLeft(){return 8*this.bytes.length-this.pos}clone(){const e=new It(this.bytes);return e.pos=this.pos,e}}const xt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ct=[-1,1,2,3,4,5,6,8],Bt=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new It(e),i=Et(t),{frequencyIndex:r,sampleRate:n}=_t(t),s=t.readBits(4);let a=null;s>=1&&s<=7&&(a=Ct[s]);let o=i,l=!1,c=n;if(5===i||29===i)l=29===i,c=_t(t).sampleRate,o=Et(t),22===o&&t.skipBits(4);else for(;t.getBitsLeft()>15;){const e=t.pos;if(695===t.readBits(11)){5===Et(t)&&t.readBits(1)&&(c=_t(t).sampleRate,t.getBitsLeft()>11&&1352===t.readBits(11)&&(l=!!t.readBits(1)));break}t.pos=e+1}return null!==a&&a>1&&(l=!1),{objectType:i,coreObjectType:o,frequencyIndex:r,channelConfiguration:s,outputSampleRate:c,outputNumberOfChannels:l&&1===a?2:a}},Et=e=>{const t=e.readBits(5);return 31===t?32+e.readBits(6):t},_t=e=>{const t=e.readBits(4);return 15===t?{frequencyIndex:t,sampleRate:e.readBits(24)}:{frequencyIndex:t,sampleRate:t=e.length-2)break;t=r;let n=0;t+3i&&(yield{offset:i,length:t-i}),i=t+n,t=i):t++}-1!==i&&i{if(t.description){const i=3&ue(t.description)[4];return zt(e,i+1)}return Ot(e)},Ut=e=>31&e,qt=e=>{const t=[],i=e.length;for(let r=0;r{const t=e.reduce((e,t)=>e+Wt.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const n of e)i.set(Wt,r),r+=Wt.byteLength,i.set(n,r),r+=n.byteLength;return i},Vt=(e,t)=>{const i=e.reduce((e,i)=>e+t+i.byteLength,0),r=new Uint8Array(i);let n=0;for(const s of e){const e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(n,s.byteLength);break;case 2:e.setUint16(n,s.byteLength,!1);break;case 3:Ne(e,n,s.byteLength);break;case 4:e.setUint32(n,s.byteLength,!1)}n+=t,r.set(s,n),n+=s.byteLength}return r},jt=e=>{try{const t=[],i=[],r=[];for(const o of Ot(e)){const n=e.subarray(o.offset,o.offset+o.length),s=Ut(n[0]);s===At.SPS?t.push(n):s===At.PPS?i.push(n):s===At.SPS_EXT&&r.push(n)}if(0===t.length)return null;if(0===i.length)return null;const n=t[0],s=Gt(n);ne(null!==s);const a=100===s.profileIdc||110===s.profileIdc||122===s.profileIdc||144===s.profileIdc;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:i,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?r:null}}catch(t){return vt._error("Error building AVC Decoder Configuration Record:",t),null}},Kt=e=>{const t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|3&e.lengthSizeMinusOne),t.push(224|31&e.sequenceParameterSets.length);for(const i of e.sequenceParameterSets){const e=i.byteLength;t.push(e>>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r>8),t.push(255&e);for(let r=0;r{try{const t=de(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=t.getUint8(i++),a=t.getUint8(i++),o=3&t.getUint8(i++),l=31&t.getUint8(i++),c=[];for(let f=0;f{var t;try{const i=qt(e),r=new It(i);r.skipBits(1),r.skipBits(2);if(7!==r.readBits(5))return null;const n=r.readAlignedByte(),s=r.readAlignedByte(),a=r.readAlignedByte();oe(r);let o=1,l=0,c=0,u=0;if(100===n||110===n||122===n||244===n||44===n||83===n||86===n||118===n||128===n){o=oe(r),3===o&&(u=r.readBits(1)),l=oe(r),c=oe(r),r.skipBits(1);if(r.readBits(1))for(let e=0;e<(3!==o?8:12);e++){if(r.readBits(1)){const t=e<6?16:64;let i=8,n=8;for(let e=0;ee.level>=a))?t:ae(Ki),n=Math.min(Math.floor(r.maxDpbMbs/(e*i)),16);P=n,I=n}else P=0,I=0}return ne(null!==I),{emulationUnpreventedBytes:i,profileIdc:n,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:o,bitDepthLumaMinus8:l,bitDepthChromaMinus8:c,codedWidth:m,codedHeight:p,displayWidth:g,displayHeight:k,pixelAspectRatio:S,colourPrimaries:b,matrixCoefficients:v,transferCharacteristics:T,fullRangeFlag:w,numReorderFrames:P,maxDecFrameBuffering:I,vuiParametersFlagBitOffset:B,bitstreamRestrictionFlagBitOffset:x,bitstreamRestrictionFlag:C}}catch(i){return vt._error("Error parsing AVC SPS:",i),null}},Qt=e=>{const t=oe(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)oe(e),oe(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Yt=e=>{ne(1!==e.bitstreamRestrictionFlag);const t=new Uint8Array(e.emulationUnpreventedBytes.byteLength+64),i=new It(e.emulationUnpreventedBytes),r=new It(t);null===e.bitstreamRestrictionFlag?(r.copyBits(e.vuiParametersFlagBitOffset,i),r.writeBits(1,1),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0)):(ne(null!==e.bitstreamRestrictionFlagBitOffset),r.copyBits(e.bitstreamRestrictionFlagBitOffset,i)),r.writeBits(1,1),r.writeBits(1,1),le(r,2),le(r,1),le(r,16),le(r,16),le(r,e.numReorderFrames),le(r,e.maxDecFrameBuffering),r.writeBits(1,1),r.writeBits((8-r.pos%8)%8,0);const n=r.pos/8;return ne(Number.isInteger(n)),(e=>{const t=[];let i=0;for(const r of e)2===i&&r<=3&&(t.push(3),i=0),t.push(r),i=0===r?i+1:0;return new Uint8Array(t)})(t.subarray(0,n))},Jt=(e,t)=>{if(t.description){const i=3&ue(t.description)[21];return zt(e,i+1)}return Ot(e)},Zt=e=>e>>1&63,ei=e=>{try{const t=new It(qt(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:o,general_constraint_indicator_flags:l,general_level_idc:c}=ii(t,i);oe(t);const u=oe(t);let d=0;3===u&&(d=t.readBits(1));const h=oe(t),f=oe(t);let m=h,p=f;if(t.readBits(1)){const e=oe(t),i=oe(t),r=oe(t),n=oe(t);let s=1,a=1;const o=0===d?u:0;1===o?(s=2,a=2):2===o&&(s=2,a=1),m-=(e+i)*s,p-=(r+n)*a}const g=oe(t),k=oe(t);oe(t);const y=t.readBits(1);let b=0;for(let e=y?0:i;e<=i;e++)oe(t),b=oe(t),oe(t);oe(t),oe(t),oe(t),oe(t),oe(t),oe(t),t.readBits(1)&&t.readBits(1)&&ri(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),oe(t),oe(t),t.skipBits(1));const T=oe(t);if(ni(t,T),t.readBits(1)){const e=oe(t);for(let i=0;i{try{const t=[],i=[],r=[],n=[];for(const l of Ot(e)){const s=e.subarray(l.offset,l.offset+l.length),a=Zt(s[0]);a===Dt.VPS_NUT?t.push(s):a===Dt.SPS_NUT?i.push(s):a===Dt.PPS_NUT?r.push(s):a!==Dt.PREFIX_SEI_NUT&&a!==Dt.SUFFIX_SEI_NUT||n.push(s)}if(0===i.length||0===r.length)return null;const s=ei(i[0]);if(!s)return null;let a=0;if(r.length>0){const e=r[0],t=new It(qt(e));t.skipBits(16),oe(t),oe(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),oe(t),oe(t),ce(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&oe(t),ce(t),ce(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),n=t.readBits(1);a=i||n?i&&!n?2:!i&&n?3:0:0}const o=[...t.length?[{arrayCompleteness:1,nalUnitType:Dt.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Dt.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:Dt.PPS_NUT,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Zt(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return vt._error("Error building HEVC Decoder Configuration Record:",t),null}},ii=(e,t)=>{const i=e.readBits(2),r=e.readBits(1),n=e.readBits(5);let s=0;for(let u=0;u<32;u++)s=s<<1|e.readBits(1);const a=new Uint8Array(6);for(let u=0;u<6;u++)a[u]=e.readBits(8);const o=e.readBits(8),l=[],c=[];for(let u=0;u0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u{for(let t=0;t<4;t++)for(let i=0;i<(3===t?2:6);i++){if(e.readBits(1)){const i=Math.min(64,1<<4+(t<<1));t>1&&ce(e);for(let t=0;t{const i=[];for(let r=0;r{var n;let s=0,a=0,o=0;if(0!==t&&(a=e.readBits(1)),a){if(t===i){o=t-(oe(e)+1)}else o=t-1;e.readBits(1),oe(e);const a=null!=(n=r[o])?n:0;for(let t=0;t<=a;t++){e.readBits(1)||e.readBits(1)}s=r[o]}else{const t=oe(e),i=oe(e);for(let r=0;r{let i=2,r=2,n=2,s=0,a=0,o={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)o={num:e.readBits(16),den:e.readBits(16)};else{const e=$t[t];e&&(o=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),n=e.readBits(8))),e.readBits(1)&&(oe(e),oe(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(oe(e),oe(e),oe(e),oe(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&oe(e),e.readBits(1)&&oi(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=oe(e),oe(e),oe(e),oe(e),oe(e)),{pixelAspectRatio:o,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},oi=(e,t,i)=>{let r=!1,n=!1,s=!1;r=1===e.readBits(1),n=1===e.readBits(1),(r||n)&&(s=1===e.readBits(1),s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let a=0;a<=i;a++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?oe(e):i=1===e.readBits(1);let a=1;if(!i){a=oe(e)+1}r&&li(e,a,s),n&&li(e,a,s)}},li=(e,t,i)=>{for(let r=0;r{const i=new Set;let r=ci.audAllowed;for(const s of Jt(e,t)){if(r===ci.noMoreDataAllowed){i.add(s.offset);continue}const t=Zt(e[s.offset]);if(r===ci.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let n=!1;35===t?r>ci.audAllowed?n=!0:r=ci.beforeFirstVcl:t<=31?r>ci.afterFirstVcl?n=!0:r=ci.afterFirstVcl:36===t?r!==ci.afterFirstVcl?n=!0:r=ci.eoBitstreamAllowed:37===t?r=41&&t<=44||t>=48&&t<=55?r>ci.beforeFirstVcl?n=!0:r=ci.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r{if(t.description){const i=3&ue(t.description)[21];return Vt(e,i+1)}return Ht(e)})(n,t)},hi={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},fi=e=>{var t,i,r;const n=new It(e);if(2!==n.readBits(2))return null;const s=n.readBits(1),a=(n.readBits(1)<<1)+s;3===a&&n.skipBits(1);if(1===n.readBits(1))return null;if(0!==n.readBits(1))return null;n.skipBits(2);if(4817730!==n.readBits(24))return null;let o=8;if(a>=2){o=n.readBits(1)?12:10}const l=n.readBits(3);let c=0,u=0;if(7!==l){if(u=n.readBits(1),1===a||3===a){const e=n.readBits(1),t=n.readBits(1);c=e||t?e&&!t?2:1:3,n.skipBits(1)}else c=1}else c=3,u=1;const d=(n.readBits(16)+1)*(n.readBits(16)+1);let h=ae(Xi).level;for(const m of Xi)if(d<=m.maxPictureSize){h=m.level;break}const f=hi[l];return{profile:a,level:h,bitDepth:o,chromaSubsampling:c,videoFullRangeFlag:u,colourPrimaries:null!=(t=null==f?void 0:f.colourPrimaries)?t:2,transferCharacteristics:null!=(i=null==f?void 0:f.transferCharacteristics)?i:2,matrixCoefficients:null!=(r=null==f?void 0:f.matrixCoefficients)?r:2}},mi=function*(e){const t=new It(e),i=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e+=(127&r)*q(2,7*i),!(128&r))break;if(7===i&&128&r)return null}return e>q(2,32)-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);const r=t.readBits(4),n=t.readBits(1),s=t.readBits(1);let a;if(t.skipBits(1),n&&t.skipBits(8),s){const e=i();if(null===e)return;a=e}else a=Math.floor(t.getBitsLeft()/8);ne(t.pos%8===0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+a)},t.skipBits(8*a)}},pi=e=>{for(const{type:t,data:i}of mi(e)){if(1!==t)continue;const e=new It(i),r=e.readBits(3);e.readBits(1);const n=e.readBits(1);let s=0,a=0,o=0;if(n)s=e.readBits(5);else{let t=0;if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1)){let t=0;for(;t<32&&!e.readBits(1);)t++;t<32&&e.skipBits(t)}t=e.readBits(1),t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5))}const i=e.readBits(1),r=e.readBits(5);for(let n=0;n<=r;n++){e.skipBits(12);const r=e.readBits(5);if(0===n&&(s=r),r>7){const t=e.readBits(1);0===n&&(a=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}if(i){e.readBits(1)&&e.skipBits(4)}}}const l=e.readBits(4),c=e.readBits(4),u=l+1;e.skipBits(u);const d=c+1;e.skipBits(d);let h=0;if(h=n?0:e.readBits(1),h&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!n){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);const t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let i=0;if(i=e.readBits(1)?2:e.readBits(1),i>0){e.readBits(1)||e.skipBits(1)}t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);const f=e.readBits(1);let m=8;if(2===r&&f){m=e.readBits(1)?12:10}else r<=2&&(m=f?10:8);let p=0;1!==r&&(p=e.readBits(1));let g=2,k=2,y=2;e.readBits(1)&&(g=e.readBits(8),k=e.readBits(8),y=e.readBits(8));let b=0,T=1,v=1,w=0;return p?b=e.readBits(1):1===g&&13===k&&0===y?(b=1,T=0,v=0):(b=e.readBits(1),0===r?(T=1,v=1):1===r?(T=0,v=0):12===m?(T=e.readBits(1),v=T?e.readBits(1):0):(T=1,v=0),T&&v&&(w=e.readBits(2))),{profile:r,level:s,tier:a,bitDepth:m,monochrome:p,chromaSubsamplingX:T,chromaSubsamplingY:v,chromaSamplePosition:w,videoFullRangeFlag:b,colourPrimaries:g,transferCharacteristics:k,matrixCoefficients:y}}return null},gi=e=>{if(e.length<36)return null;const t=de(e);if(1768124518!==t.getUint32(4))return null;return t.getUint16(8)<28?null:{fullRange:!1,colourPrimaries:t.getUint8(22),transferCharacteristics:t.getUint8(23),matrixCoefficients:t.getUint8(24)}},ki=[480,960,1920,2880,480,960,1920,2880,480,960,1920,2880,480,960,480,960,120,240,480,960,120,240,480,960,120,240,480,960,120,240,480,960],yi=e=>{if(e.length<7)throw new Error("Setup header is too short.");if(5!==e[0])throw new Error("Wrong packet type in Setup header.");if("vorbis"!==String.fromCharCode(...e.slice(1,7)))throw new Error("Invalid packet signature in Setup header.");const t=e.length,i=new Uint8Array(t);for(let u=0;u97;)if(1===r.readBits(1)){n=r.pos;break}if(0===n)throw new Error("Invalid Setup header: framing bit not found.");let s=0,a=!1,o=0;for(;r.getBitsLeft()>=97;){const e=r.pos,t=r.readBits(8),i=r.readBits(16),n=r.readBits(16);if(t>63||0!==i||0!==n){r.pos=e;break}if(r.skipBits(1),s++,s>64)break;r.clone().readBits(6)+1===s&&(a=!0,o=s)}if(!a)throw new Error("Invalid Setup header: mode header not found.");if(o>63)throw new Error(`Unsupported mode count: ${o}.`);const l=o;r.pos=0,r.skipBits(n);const c=Array(l).fill(0);for(let u=l-1;u>=0;u--)r.skipBits(40),c[u]=r.readBits(1);return{modeBlockflags:c}},bi=(e,t,i)=>{switch(e){case"avc":for(const e of Lt(i,t)){const t=i[e.offset],r=Ut(t);if(r>=At.NON_IDR_SLICE&&r<=At.SLICE_DPC)return"delta";if(r===At.IDR)return"key";if(r===At.SEI&&!rt()){const t=i.subarray(e.offset,e.offset+e.length),r=qt(t);let n=1;do{let e=0;for(;;){const t=r[n++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=r[n++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new It(r);e.pos=8*n;const t=oe(e),i=e.readBits(1);if(0===t&&1===i)return"key"}n+=t}while(n{var i,r;const n=de(e);let s=0;const a=n.getUint32(s,!0);s+=4;const o=he.decode(e.subarray(s,s+a));s+=a,a>0&&(null!=t.raw||(t.raw={}),null!=(i=t.raw).vendor||(i.vendor=o));const l=n.getUint32(s,!0);s+=4;for(let c=0;c0&&(null!=t.trackNumber||(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.tracksTotal||(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.tracksTotal||(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=c.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=t.discNumber||(t.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=t.discsTotal||(t.discsTotal=r))}break;case"DISCTOTAL":{const e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(null!=t.discsTotal||(t.discsTotal=e))}break;case"DATE":{const e=new Date(c);Number.isNaN(e.getTime())||null!=t.date||(t.date=e)}break;case"GENRE":null!=t.genre||(t.genre=c);break;case"METADATA_BLOCK_PICTURE":{const e=ct(c),i=de(e),r=i.getUint32(0,!1),n=i.getUint32(4,!1),s=String.fromCharCode(...e.subarray(8,8+n)),a=i.getUint32(8+n,!1),o=he.decode(e.subarray(12+n,12+n+a)),l=i.getUint32(n+a+28),u=e.subarray(n+a+32,n+a+32+l);null!=t.images||(t.images=[]),t.images.push({data:u,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},Si=[2,1,2,3,3,4,4,5],Pi=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new It(e);t.skipBits(16),t.skipBits(16);const i=t.readBits(2);if(3===i)return null;const r=t.readBits(6),n=t.readBits(5);if(n>8)return null;const s=t.readBits(3),a=t.readBits(3);0!==(1&a)&&1!==a&&t.skipBits(2),0!==(4&a)&&t.skipBits(2),2===a&&t.skipBits(2);return{fscod:i,bsid:n,bsmod:s,acmod:a,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},Ii=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,576,384,418,576,448,486,672,448,488,672,512,556,768,512,558,768,640,696,960,640,698,960,768,834,1152,768,836,1152,896,974,1344,896,976,1344,1024,1114,1536,1024,1116,1536,1280,1392,1920,1280,1394,1920,1536,1670,2304,1536,1672,2304,1792,1950,2688,1792,1952,2688,2048,2228,3072,2048,2230,3072,2304,2506,3456,2304,2508,3456,2560,2786,3840,2560,2788,3840],xi=[1,2,3,6],Ci=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new It(e);t.skipBits(16);const i=t.readBits(2);if(t.skipBits(3),0!==i&&2!==i)return null;const r=t.readBits(11),n=t.readBits(2);let s,a=0;3===n?(a=t.readBits(2),s=3):s=t.readBits(2);const o=t.readBits(3),l=t.readBits(1),c=t.readBits(5);if(c<11||c>16)return null;const u=xi[s];let d;d=n<3?Rt[n]/1e3:Ft[a]/1e3;return{dataRate:Math.round((r+1)*d/(16*u)),substreams:[{fscod:n,fscod2:a,bsid:c,bsmod:0,acmod:o,lfeon:l,numDepSub:0,chanLoc:0}]}},Bi=e=>{const t=e.substreams[0];return ne(t),t.fscod<3?Rt[t.fscod]:null!==t.fscod2&&t.fscod2<3?Ft[t.fscod2]:null},Ei=e=>{const t=e.substreams[0];ne(t);let i=Si[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(i+=e[r])}return i},_i=[0,8e3,16e3,32e3,0,0,11025,22050,44100,0,0,12e3,24e3,48e3,96e3,192e3],Ri=[32e3,56e3,64e3,96e3,112e3,128e3,192e3,224e3,256e3,32e4,384e3,448e3,512e3,576e3,64e4,768e3,96e4,1024e3,1152e3,128e4,1344e3,1408e3,1411200,1472e3,1536e3,192e4,2048e3,3072e3,384e4,0,0,0],Fi=[16,16,20,20,0,24,24,0],Ai=[1,2,2,2,2,3,3,4,4,5,6,6,6,7,8,8],Mi=[1,2,2,2,2,3,18,19,6,7,518,323,83,519,582,535],Di=[32e3,44100,48e3,0],Ni=[8e3,16e3,32e3,64e3,128e3,22050,44100,88200,176400,352800,12e3,24e3,48e3,96e3,192e3,384e3],Oi=[512,1024,2048,4096],zi=e=>{const t=Ui(e),i=de(e);let r=t?4*Math.ceil(t.frameSize/4):0,n=null;for(;r+4<=e.length&&1683496997===i.getUint32(r);){const t=qi(e.subarray(r));if(!t)break;null!=n||(n=t),r+=t.frameSize}if(t)return{frameSize:n?r:t.frameSize,sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,sampleCount:t.sampleCount,channelLayout:t.channelLayout,pcmResolution:t.pcmResolution,bitRate:t.bitRate,core:t,hasExtensions:null!==n};if(!(null==n?void 0:n.asset))return null;const{asset:s}=n;return{frameSize:r,sampleRate:s.sampleRate,numberOfChannels:s.numberOfChannels,sampleCount:s.sampleCount,channelLayout:s.channelLayout,pcmResolution:s.pcmResolution,bitRate:0,core:null,hasExtensions:!0}},Li=e=>{const t=zi(e);return(null==t?void 0:t.core)?t.hasExtensions?"dtsh":"dtsc":null},Ui=e=>{if(e.length<18)return null;if(127!==e[0]||254!==e[1]||128!==e[2]||1!==e[3])return null;const t=new It(e);if(t.skipBits(32),t.skipBits(1),31!==t.readBits(5))return null;const i=t.readBits(1),r=t.readBits(7)+1;if(r%8!==0)return null;const n=t.readBits(14)+1;if(n<96)return null;const s=t.readBits(6);if(s>=Ai.length)return null;const a=_i[t.readBits(4)];if(0===a)return null;const o=Ri[t.readBits(5)];if(0!==t.readBits(1))return null;t.skipBits(4),t.skipBits(5);const l=t.readBits(2);if(3===l)return null;t.skipBits(1),i&&t.skipBits(16),t.skipBits(7);const c=Fi[t.readBits(3)];if(0===c)return null;const u=0!==l;return{frameSize:n,sampleRate:a,numberOfChannels:Ai[s]+(u?1:0),sampleCount:32*r,channelLayout:Mi[s]|(u?8:0),amode:s,lfePresent:u,bitRate:o,pcmResolution:c}},qi=e=>{if(e.length<10)return null;if(100!==e[0]||88!==e[1]||32!==e[2]||37!==e[3])return null;const t=new It(e);t.skipBits(32),t.skipBits(8);const i=t.readBits(2),r=t.readBits(1),n=8+4*r,s=16+4*r;t.skipBits(n);const a=t.readBits(s)+1,o={frameSize:a,asset:null};if(!t.readBits(1))return o;const l=Di[t.readBits(2)],c=512*(t.readBits(3)+1);t.readBits(1)&&t.skipBits(36);const u=t.readBits(3)+1,d=t.readBits(3)+1,h=[];for(let k=0;k2&&t.skipBits(1),p>6&&t.skipBits(1),t.readBits(1))){const e=t.readBits(2)+1<<2;g=t.readBits(e)}return 0===l||t.getBitsLeft()<0?o:{frameSize:a,asset:{sampleRate:m,numberOfChannels:p,sampleCount:Math.round(c*m/l),channelLayout:g,pcmResolution:f}}},Wi=e=>Ve(e)+Ve(44646&e),Hi=["avc","hevc","vp9","av1","vp8","prores"],Vi=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],ji=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts",...Vi],Ki=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}],Xi=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}],$i=".01.01.01.01.00",Gi=".0.110.01.01.01.0",Qi=["ap4x","ap4h","apch","apcn","apcs","apco"],Yi=["dtsc","dtsh","dtsl","dtse"],Ji=e=>{const{codec:t,codecDescription:i,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:o,proresFormat:l}=e;if("avc"===t){if(ne(null!==e.avcType),n){const t=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${e.avcType}.${Ie(t)}`}if(!i||i.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Ie(i.subarray(1,4))}`}if("hevc"===t){let e,t,r,n,a,o;if(s)e=s.generalProfileSpace,t=s.generalProfileIdc,r=xe(s.generalProfileCompatibilityFlags),n=s.generalTierFlag,a=s.generalLevelIdc,o=[...s.generalConstraintIndicatorFlags];else{if(!i||i.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const s=de(i),l=s.getUint8(1);e=l>>6&3,t=31&l,r=xe(s.getUint32(2)),n=l>>5&1,a=s.getUint8(12),o=[];for(let e=0;e<6;e++)o.push(s.getUint8(6+e))}let l="hev1.";for(l+=["","A","B","C"][e]+t,l+=".",l+=r.toString(16).toUpperCase(),l+=".",l+=0===n?"L":"H",l+=a;o.length>0&&0===o[o.length-1];)o.pop();return o.length>0&&(l+=".",l+=o.map(e=>e.toString(16).toUpperCase()).join(".")),l}if("vp8"===t)return"vp8";if("vp9"===t){if(!a){const t=e.width*e.height;let i=ae(Xi).level;for(const e of Xi)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${a.profile.toString().padStart(2,"0")}.${a.level.toString().padStart(2,"0")}.${a.bitDepth.toString().padStart(2,"0")}.${a.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${a.colourPrimaries.toString().padStart(2,"0")}.${a.transferCharacteristics.toString().padStart(2,"0")}.${a.matrixCoefficients.toString().padStart(2,"0")}.${a.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith($i)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!o){const t=e.width*e.height;let i=ae(Xi).level;for(const e of Xi)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=o.profile,i=o.level.toString().padStart(2,"0"),n=o.tier?"H":"M",s=o.bitDepth.toString().padStart(2,"0"),a=o.monochrome?"1":"0",l=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),c=(null==r?void 0:r.primaries)?me[r.primaries]:1,u=(null==r?void 0:r.transfer)?ge[r.transfer]:1,d=(null==r?void 0:r.matrix)?ye[r.matrix]:1,h=(null==r?void 0:r.fullRange)?1:0;let f=`av01.${t}.${i}${n}.${s}`;return f+=`.${a}.${l.toString().padStart(3,"0")}`,f+=`.${c.toString().padStart(2,"0")}`,f+=`.${u.toString().padStart(2,"0")}`,f+=`.${d.toString().padStart(2,"0")}`,f+=`.${h}`,f.endsWith(Gi)&&(f=f.slice(0,-17)),f}if("prores"===t)return null!=l?l:"apch";throw null!==t&&Me(t),new TypeError(`Unhandled codec '${t}'.`)},Zi=e=>{var t,i,r,n,s,a;switch(e.codec){case"avc":{let r=null==(t=e.avcCodecInfo)?void 0:t.sequenceParameterSets[0];if(!r&&e.codecDescription&&(r=null==(i=Xt(e.codecDescription))?void 0:i.sequenceParameterSets[0]),r){const e=Gt(r);if(e)return{primaries:pe[e.colourPrimaries],transfer:ke[e.transferCharacteristics],matrix:be[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"hevc":{let t=null==(n=null==(r=e.hevcCodecInfo)?void 0:r.arrays.find(e=>e.nalUnitType===Dt.SPS_NUT))?void 0:n.nalUnits[0];if(!t&&e.codecDescription&&(t=null==(a=null==(s=(e=>{try{const t=de(e);let i=0;const r=t.getUint8(i++),n=t.getUint8(i++),s=n>>6&3,a=n>>5&1,o=31&n,l=t.getUint32(i,!1);i+=4;const c=e.subarray(i,i+6);i+=6;const u=t.getUint8(i++),d=(15&t.getUint8(i++))<<8|t.getUint8(i++),h=3&t.getUint8(i++),f=3&t.getUint8(i++),m=7&t.getUint8(i++),p=7&t.getUint8(i++),g=t.getUint16(i,!1);i+=2;const k=t.getUint8(i++),y=k>>6&3,b=k>>3&7,T=k>>2&1,v=3&k,w=t.getUint8(i++),S=[];for(let P=0;P>7&1,s=63&r,a=t.getUint16(i,!1);i+=2;const o=[];for(let l=0;le.nalUnitType===Dt.SPS_NUT))?void 0:a.nalUnits[0]),t){const e=ei(t);if(e)return{primaries:pe[e.colourPrimaries],transfer:ke[e.transferCharacteristics],matrix:be[e.matrixCoefficients],fullRange:!!e.fullRangeFlag}}}break;case"vp8":break;case"vp9":if(e.vp9CodecInfo)return{primaries:pe[e.vp9CodecInfo.colourPrimaries],transfer:ke[e.vp9CodecInfo.transferCharacteristics],matrix:be[e.vp9CodecInfo.matrixCoefficients],fullRange:!!e.vp9CodecInfo.videoFullRangeFlag};break;case"av1":if(e.av1CodecInfo)return{primaries:pe[e.av1CodecInfo.colourPrimaries],transfer:ke[e.av1CodecInfo.transferCharacteristics],matrix:be[e.av1CodecInfo.matrixCoefficients],fullRange:!!e.av1CodecInfo.videoFullRangeFlag};break;case"prores":if(e.proresCodecInfo)return{primaries:pe[e.proresCodecInfo.colourPrimaries],transfer:ke[e.proresCodecInfo.transferCharacteristics],matrix:be[e.proresCodecInfo.matrixCoefficients],fullRange:e.proresCodecInfo.fullRange}}return{primaries:void 0,transfer:void 0,matrix:void 0,fullRange:void 0}},er=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r,dtsFormat:n}=e;if("aac"===t){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let e;if(null!==r.objectType)e=r.objectType;else{e=Bt(i).objectType}return`mp4a.40.${e}`}}if("mp3"===t)return"mp3";if("opus"===t)return"opus";if("vorbis"===t)return"vorbis";if("flac"===t)return"flac";if("ac3"===t)return"ac-3";if("eac3"===t)return"ec-3";if("dts"===t)return null!=n?n:"dtsc";if(t&&Vi.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},tr=48e3,ir=/^pcm-([usf])(\d+)(be)?$/,rr=e=>{if(ne(Vi.includes(e)),"ulaw"===e)return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if("alaw"===e)return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};const t=ir.exec(e);let i;ne(t),i="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:i,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?q(2,7):0}},nr=e=>e.startsWith("avc1")||e.startsWith("avc3")?"avc":e.startsWith("hev1")||e.startsWith("hvc1")?"hevc":"vp8"===e?"vp8":e.startsWith("vp09")?"vp9":e.startsWith("av01")?"av1":Qi.includes(e)?"prores":"mp3"===e||"mp4a.69"===e||"mp4a.6B"===e||"mp4a.6b"===e||"mp4a.40.34"===e?"mp3":e.startsWith("mp4a.40.")||"mp4a.67"===e?"aac":"opus"===e?"opus":"vorbis"===e?"vorbis":"flac"===e?"flac":"ac-3"===e||"ac3"===e?"ac3":"ec-3"===e||"eac3"===e?"eac3":Yi.includes(e)?"dts":"ulaw"===e?"ulaw":"alaw"===e?"alaw":ir.test(e)?e:"webvtt"===e?"webvtt":null,sr=[44100,48e3,32e3],ar=[-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,32,40,48,56,64,80,96,112,128,160,192,224,256,320,-1,-1,32,48,56,64,80,96,112,128,160,192,224,256,320,384,-1,-1,32,64,96,128,160,192,224,256,288,320,352,384,416,448,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,8,16,24,32,40,48,56,64,80,96,112,128,144,160,-1,-1,32,48,56,64,80,96,112,128,144,160,176,192,224,256,-1],or=1483304551,lr=1231971951,cr=(e,t)=>3===e?3===t?21:36:3===t?13:21,ur=(e,t)=>{const i=e>>>24,r=e>>>16&255,n=e>>>8&255,s=255&e;if(255!==i&&255!==r&&255!==n&&255!==s)return{header:null,bytesAdvanced:4};if(255!==i)return{header:null,bytesAdvanced:1};if(224!==(224&r))return{header:null,bytesAdvanced:1};let a=0,o=0;16&r?a=8&r?0:1:(a=1,o=1);const l=r>>3&3,c=r>>1&3,u=(n>>2&3)%3,d=s>>6&3,h=s>>4&3,f=s>>3&1,m=s>>2&1,p=3&s,g=ar[16*a*4+16*c+(n>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,y=sr[u]>>a+o,b=((e,t,i,r,n)=>0===t?0:1===t?Math.floor(144*i/(r<>1&1);if(null!==t&&t{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var hr,fr;(fr=hr||(hr={}))[fr.FrameCount=1]="FrameCount",fr[fr.FileSize=2]="FileSize",fr[fr.Toc=4]="Toc";const mr=e=>3===e?1:2;class pr{constructor(e){this.input=e}dispose(){}}const gr=new Uint8Array(0);class kr{constructor(e,t,i,r,n=-1,s,a){if(this.data=e,this.type=t,this.timestamp=i,this.duration=r,this.sequenceNumber=n,e===gr&&void 0===s)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(void 0===s&&(s=e.byteLength),!(e instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if("key"!==t&&"delta"!==t)throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(i))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(r)||r<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(n))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(void 0!==a&&("object"!==typeof a||!a))throw new TypeError("sideData, when provided, must be an object.");if(void 0!==(null==a?void 0:a.alpha)&&!(a.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(void 0!==(null==a?void 0:a.alphaByteLength)&&(!Number.isInteger(a.alphaByteLength)||a.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=null!=a?a:{},this.sideData.alpha&&void 0===this.sideData.alphaByteLength&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===gr}get microsecondTimestamp(){return Math.trunc(Xe*this.timestamp)}get microsecondDuration(){return Math.trunc(Xe*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if("undefined"===typeof EncodedVideoChunk)throw new Error("EncodedVideoChunk is not available in this environment.");return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if("undefined"===typeof EncodedAudioChunk)throw new Error("EncodedAudioChunk is not available in this environment.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(e,t){var i;if(!(e instanceof EncodedVideoChunk||e instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");const r=new Uint8Array(e.byteLength);return e.copyTo(r),new kr(r,e.type,e.timestamp/1e6,(null!=(i=e.duration)?i:0)/1e6,void 0,void 0,t)}clone(e){var t,i,r,n,s,a;if(void 0!==e&&("object"!==typeof e||null===e))throw new TypeError("options, when provided, must be an object.");if(void 0!==(null==e?void 0:e.data)&&!(e.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(void 0!==(null==e?void 0:e.type)&&"key"!==e.type&&"delta"!==e.type)throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(void 0!==(null==e?void 0:e.timestamp)&&!Number.isFinite(e.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(void 0!==(null==e?void 0:e.duration)&&!Number.isFinite(e.duration))throw new TypeError("options.duration, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sequenceNumber)&&!Number.isFinite(e.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(void 0!==(null==e?void 0:e.sideData)&&("object"!==typeof e.sideData||null===e.sideData))throw new TypeError("options.sideData, when provided, must be an object.");return new kr(null!=(t=null==e?void 0:e.data)?t:this.data,null!=(i=null==e?void 0:e.type)?i:this.type,null!=(r=null==e?void 0:e.timestamp)?r:this.timestamp,null!=(n=null==e?void 0:e.duration)?n:this.duration,null!=(s=null==e?void 0:e.sequenceNumber)?s:this.sequenceNumber,this.byteLength,null!=(a=null==e?void 0:e.sideData)?a:this.sideData)}}const yr=e=>{const t=de(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const n=Ie(e.subarray(i,i+16));i+=16;let s=null;if(r>0){const r=t.getUint32(i);if(i+=4,r>0){s=[];for(let t=0;te.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i{let t=Pl(e);const i=Al(e,4);let r=8;1===t&&(t=Bl(e),r=16);const n=t-r;return n<0?null:{name:i,totalSize:t,headerSize:r,contentSize:n}},vr=e=>xl(e)/65536,wr=e=>xl(e)/1073741824,Sr=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=yl(e);if(t|=127&i,0===(128&i))break}return t},Pr=e=>{let t=Tl(e);return e.skip(2),t=Math.min(t,e.remainingLength),he.decode(kl(e,t))},Ir=e=>{const t=Tr(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=Pl(e);e.skip(4);const r=kl(e,t.contentSize-8);switch(i){case 1:return he.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new wt(r,"image/jpeg");case 14:return new wt(r,"image/png");case 27:return new wt(r,"image/bmp");default:return r}},xr=16,Cr=new Uint32Array(256),Br=new Uint32Array(256),Er=new Uint32Array(256),_r=new Uint32Array(256),Rr=new Uint32Array(256),Fr=new Uint32Array(256),Ar=new Uint32Array(10);let Mr=!1;class Dr{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(xr/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(xr),this.out=new Uint8Array(xr),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){ne(16===e.byteLength),ne(16===t.byteLength),Mr||(()=>{const e=new Uint8Array(256),t=new Uint8Array(256),i=new Uint8Array(256);for(let s=0,a=1;s<256;s++)i[s]=a,t[a]=s,a=a^a<<1^(128&a?283:0);const r=(e,r)=>e&&r?i[(t[e]+t[r])%255]:0;e[0]=99;for(let s=1;s<256;s++){const r=i[255-t[s]];let n=r^r<<1^r<<2^r<<3^r<<4;n=n>>>8^255&n^99,e[s]=n}for(let s=0;s<256;s++){const t=e[s],i=e.indexOf(s);Cr[s]=t<<24|t<<16|t<<8|t,Fr[s]=i<<24|i<<16|i<<8|i;const n=r(i,14)<<24|r(i,9)<<16|r(i,13)<<8|r(i,11);Br[s]=n,Er[s]=n>>>8|n<<24,_r[s]=n>>>16|n<<16,Rr[s]=n>>>24|n<<8}let n=1;for(let s=0;s<10;s++)Ar[s]=n<<24,n=n<<1^(128&n?283:0);Mr=!0})();const i=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=i.getUint32(0,!1),this.roundkey[1]=i.getUint32(4,!1),this.roundkey[2]=i.getUint32(8,!1),this.roundkey[3]=i.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let n=4;n<44;n+=4){const e=this.roundkey[n-1];this.roundkey[n]=this.roundkey[n-4]^4278190080&Cr[e>>>16&255]^16711680&Cr[e>>>8&255]^65280&Cr[e>>>0&255]^255&Cr[e>>>24&255]^Ar[n/4-1],this.roundkey[n+1]=this.roundkey[n-3]^this.roundkey[n],this.roundkey[n+2]=this.roundkey[n-2]^this.roundkey[n+1],this.roundkey[n+3]=this.roundkey[n-1]^this.roundkey[n+2]}for(let n=0,s=40;n>>24&255]]^Er[255&Cr[t>>>16&255]]^_r[255&Cr[t>>>8&255]]^Rr[255&Cr[t>>>0&255]]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],i=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3];const n=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),a=this.inView.getUint32(8,!1),o=this.inView.getUint32(12,!1);let l,c,u,d;for(let g=1;g<10;g++){const n=4*g;l=Br[e>>>24]^Er[r>>>16&255]^_r[i>>>8&255]^Rr[255&t]^this.roundkey[n],c=Br[t>>>24]^Er[e>>>16&255]^_r[r>>>8&255]^Rr[255&i]^this.roundkey[n+1],u=Br[i>>>24]^Er[t>>>16&255]^_r[e>>>8&255]^Rr[255&r]^this.roundkey[n+2],d=Br[r>>>24]^Er[i>>>16&255]^_r[t>>>8&255]^Rr[255&e]^this.roundkey[n+3],e=l,t=c,i=u,r=d}const h=4278190080&Fr[e>>>24&255]^16711680&Fr[r>>>16&255]^65280&Fr[i>>>8&255]^255&Fr[t>>>0&255]^this.roundkey[40],f=4278190080&Fr[t>>>24&255]^16711680&Fr[e>>>16&255]^65280&Fr[r>>>8&255]^255&Fr[i>>>0&255]^this.roundkey[41],m=4278190080&Fr[i>>>24&255]^16711680&Fr[t>>>16&255]^65280&Fr[e>>>8&255]^255&Fr[r>>>0&255]^this.roundkey[42],p=4278190080&Fr[r>>>24&255]^16711680&Fr[i>>>16&255]^65280&Fr[t>>>8&255]^255&Fr[e>>>0&255]^this.roundkey[43];this.outView.setUint32(0,h^this.iv[0],!1),this.outView.setUint32(4,f^this.iv[1],!1),this.outView.setUint32(8,m^this.iv[2],!1),this.outView.setUint32(12,p^this.iv[3],!1),this.iv[0]=n,this.iv[1]=s,this.iv[2]=a,this.iv[3]=o}}class Nr extends pr{constructor(e){super(e),this.moovSlice=null,this.currentTrack=null,this.tracks=[],this.metadataPromise=null,this.movieTimescale=-1,this.movieDurationInTimescale=-1,this.isQuickTime=!1,this.metadataTags={},this.currentMetadataKeys=null,this.isFragmented=!1,this.fragmentTrackDefaults=[],this.psshBoxes=[],this.currentFragment=null,this.lastReadFragment=null,this.decryptionKeyCache=new Map,this.reader=e._reader}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.tracks.map(e=>e.trackBacking)})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isQuickTime?"quicktime":"mp4");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)}),hasAudio:this.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)}),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=0,t=!1,i=!1;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(at(r)&&(r=yield r),!r)break;const n=e,s=Tr(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=Al(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(at(e)&&(e=yield e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(const t of this.tracks){const e=t.editListPreviousSegmentDurations/this.movieTimescale;t.editListOffset-=Math.round(e*t.timescale)}t=this.isFragmented&&null!==this.reader.fileSize&&this.reader.fileSize>n+s.totalSize,i=!0;break}if("moof"===s.name){if(!this.input._initInput)throw new Error('"moof" box encountered with no "moov" box present; this file is likely a Segment as described in ISO/IEC 14496-12 Section 8.16. A separate init file that contains a "moov" box is required to read this file, please provide it using InputOptions.initInput.');yield this.copyMetadataFromInitInput(this.input._initInput),t=!1,i=!0;break}}e=n+s.totalSize}if(!i&&this.input._initInput&&(yield this.copyMetadataFromInitInput(this.input._initInput)),t){ne(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);at(e)&&(e=yield e),ne(e);const t=Pl(e),i=this.reader.fileSize-t;if(i>=0&&i<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(i,8,16);if(at(e)&&(e=yield e),e){const t=Tr(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);at(i)&&(i=yield i),i&&this.readContiguousBoxes(i)}}}}}))()}copyMetadataFromInitInput(e){return Y(this,null,function*(){const t=yield e._getDemuxer();if(t.constructor!==Nr)throw new Error("Init input must match the input's format.");yield t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(const e of t.tracks){const t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};if(e.trackBacking)if(ne(t.info),"video"===t.info.type&&-1!==t.info.width){const e=t;t.trackBacking=new zr(e),this.tracks.push(t)}else if("audio"===t.info.type&&-1!==t.info.numberOfChannels){const e=t;t.trackBacking=new Lr(e),this.tracks.push(t)}}})}getSampleTableForTrack(e){var t,i;if(e.sampleTable)return e.sampleTable;const r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=r,null===e.sampleTableByteOffset)return r;ne(this.moovSlice);const n=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(n),this.currentTrack=null;if("audio"===(null==(t=e.info)?void 0:t.type)&&e.info.codec&&Vi.includes(e.info.codec)&&0===r.sampleCompositionTimeOffsets.length){ne("audio"===(null==(i=e.info)?void 0:i.type));const t=rr(e.info.codec),n=[],s=[];for(let i=0;ie.startIndex),u=r.sampleTimingEntries[c],d=Be(r.sampleTimingEntries,l,e=>e.startIndex),h=r.sampleTimingEntries[d],f=u.startDecodeTimestamp+(o-u.startIndex)*u.delta,m=h.startDecodeTimestamp+(l-h.startIndex)*h.delta-f,p=ae(n);p&&p.delta===m?p.count++:n.push({startIndex:a.startChunkIndex+i,startDecodeTimestamp:f,count:1,delta:m});const g=a.samplesPerChunk*t.sampleSize*e.info.numberOfChannels;s.push(g)}a.startSampleIndex=a.startChunkIndex,a.samplesPerChunk=1}r.sampleTimingEntries=n,r.sampleSizes=s}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(const e of r.sampleTimingEntries)for(let t=0;te.presentationTimestamp-t.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let e=0;ee.moofOffset===s.moofOffset);if(r)Vr(e,r.timestamp);else{const t=Be(i,s.moofOffset-1,e=>e.moofOffset);if(-1!==t){const r=i[t];Vr(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}const r=Be(i,e.startTimestamp,e=>e.startTimestamp);if(-1!==r&&i[r].moofOffset===s.moofOffset||i.splice(r+1,0,{moofOffset:s.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){const i=yield $r(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;Ke(t.languageCode)||(t.languageCode=Le)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=Al(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:H({},ve),avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresCodecInfo:null,proresFormat:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=re,this.readContiguousBoxes(e.slice(le,oe.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=yl(e);e.skip(3);const r=Pl(e);for(let n=0;n0&&(1===a?(e.skip(4),l=8*Pl(e),e.skip(8)):2===a&&(e.skip(4),c=Fl(e),o=Pl(e),e.skip(4),l=Pl(e),u=Pl(e),e.skip(8))),t.info.numberOfChannels=o,t.info.sampleRate=c,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+n.totalSize-e.filePos));const d="enca"===s?t.frmaCodecString:s;if(t.frmaCodecString=null,"mp4a"===d);else if("opus"===d)t.info.codec="opus",t.info.sampleRate=tr;else if("flac"===d)t.info.codec="flac";else if("ulaw"===d)t.info.codec="ulaw";else if("alaw"===d)t.info.codec="alaw";else if("ac-3"===d)t.info.codec="ac3";else if("ec-3"===d)t.info.codec="eac3";else if(Yi.includes(d))t.info.codec="dts",t.info.dtsFormat=d;else if("twos"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(vt._warn(`Unsupported sample size ${l} for codec 'twos'.`),t.info.codec=null);else if("sowt"===d)8===l?t.info.codec="pcm-s8":16===l?t.info.codec="pcm-s16":(vt._warn(`Unsupported sample size ${l} for codec 'sowt'.`),t.info.codec=null);else if("raw "===d)t.info.codec="pcm-u8";else if("in24"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if("in32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if("fl32"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if("fl64"===d)t.info.codec=t.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if("ipcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?16===e?t.info.codec="pcm-s16":24===e?t.info.codec="pcm-s24":32===e?t.info.codec="pcm-s32":(vt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):16===e?t.info.codec="pcm-s16be":24===e?t.info.codec="pcm-s24be":32===e?t.info.codec="pcm-s32be":(vt._warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if("fpcm"===d){const e=t.info.pcmSampleSize;t.info.pcmLittleEndian?32===e?t.info.codec="pcm-f32":64===e?t.info.codec="pcm-f64":(vt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(vt._warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if("lpcm"===d&&null!==u){const e=l+7>>3,i=Boolean(1&u),r=Boolean(2&u),n=4&u?-1:0;l>0&&l<=64&&(i?32===l&&(t.info.codec=r?"pcm-f32be":"pcm-f32"):n&1<0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==yl(e),t.encryptionInfo.defaultPerSampleIvSize=yl(e),t.encryptionInfo.defaultKid=Ie(kl(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=yl(e),r=new Uint8Array(16);r.set(kl(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;if(ne(t.info),0===oe.contentSize)break;t.info.codecDescription=kl(e,oe.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;if(ne(t.info),0===oe.contentSize)break;t.info.codecDescription=kl(e,oe.contentSize)}break;case"vpcC":{const i=this.currentTrack;if(!i)break;ne("video"===(null==(t=i.info)?void 0:t.type)),e.skip(4);const r=yl(e),n=yl(e),s=yl(e),a=s>>4,o=s>>1&7,l=1&s,c=yl(e),u=yl(e),d=yl(e);i.info.vp9CodecInfo={profile:r,level:n,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:l,colourPrimaries:c,transferCharacteristics:u,matrixCoefficients:d}}break;case"av1C":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(i=t.info)?void 0:i.type)),e.skip(1);const o=yl(e),l=o>>5,c=31&o,u=yl(e),d=u>>7,h=u>>6&1,f=u>>4&1,m=u>>3&1,p=u>>2&1,g=3&u,k=2===l&&h?u>>5&1?12:10:h?10:8;e.skip(1);const y=kl(e,oe.contentSize-4),b=pi(y);t.info.av1CodecInfo={profile:l,level:c,tier:d,bitDepth:k,monochrome:f,chromaSubsamplingX:m,chromaSubsamplingY:p,chromaSamplePosition:g,videoFullRangeFlag:null!=(r=null==b?void 0:b.videoFullRangeFlag)?r:0,colourPrimaries:null!=(n=null==b?void 0:b.colourPrimaries)?n:2,transferCharacteristics:null!=(s=null==b?void 0:b.transferCharacteristics)?s:2,matrixCoefficients:null!=(a=null==b?void 0:b.matrixCoefficients)?a:2}}break;case"colr":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(o=t.info)?void 0:o.type));const i=Al(e,4);if("nclx"!==i&&"nclc"!==i)break;const r=Tl(e),n=Tl(e),s=Tl(e);let a;"nclx"===i&&(a=Boolean(128&yl(e))),t.info.colorSpace={primaries:pe[r],transfer:ke[n],matrix:be[s],fullRange:a}}break;case"pasp":{const t=this.currentTrack;if(!t)break;ne("video"===(null==(l=t.info)?void 0:l.type));const i=Pl(e),r=Pl(e);i>0&&r>0&&(i>r?t.info.squarePixelWidth=Math.round(t.info.width*i/r):t.info.squarePixelHeight=Math.round(t.info.height*r/i))}break;case"esds":{const t=this.currentTrack;if(!t||"audio"!==(null==(c=t.info)?void 0:c.type))break;e.skip(4);ne(3===yl(e)),Sr(e),e.skip(2);const i=yl(e),r=0!==(64&i),n=0!==(32&i);if(0!==(128&i)&&e.skip(2),r){const t=yl(e);e.skip(t)}n&&e.skip(2);ne(4===yl(e));const s=Sr(e),a=e.filePos,o=yl(e);if(64===o||103===o?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===o,objectType:null}):105===o||107===o?t.info.codec="mp3":221===o?t.info.codec="vorbis":169===o?t.info.codec="dts":vt._warn(`Unsupported audio codec (objectTypeIndication ${o}) - discarding track.`),e.skip(12),s>e.filePos-a){ne(5===yl(e));const i=Sr(e);if(t.info.codecDescription=kl(e,i),"aac"===t.info.codec){const e=Bt(t.info.codecDescription);null!==e.outputNumberOfChannels&&(t.info.numberOfChannels=e.outputNumberOfChannels),null!==e.outputSampleRate&&(t.info.sampleRate=e.outputSampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(u=t.info)?void 0:u.type)),t.info.pcmLittleEndian=!!(255&Tl(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(d=t.info)?void 0:d.type)),e.skip(4);const i=yl(e);t.info.pcmLittleEndian=Boolean(1&i),t.info.pcmSampleSize=yl(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(h=t.info)?void 0:h.type)),e.skip(1);const i=yl(e),r=Tl(e),n=Pl(e),s=wl(e),a=yl(e);let o;o=0!==a?kl(e,2+i):new Uint8Array(0);const l=new Uint8Array(19+o.byteLength),c=new DataView(l.buffer);c.setUint32(0,1332770163,!1),c.setUint32(4,1214603620,!1),c.setUint8(8,1),c.setUint8(9,i),c.setUint16(10,r,!0),c.setUint32(12,n,!0),c.setInt16(16,s,!0),c.setUint8(18,a),l.set(o,19),t.info.codecDescription=l,t.info.numberOfChannels=i}break;case"dfLa":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(f=t.info)?void 0:f.type)),e.skip(4);const i=127,r=128,n=e.filePos;for(;e.filePos>>12,n=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=n,e.skip(20)}else e.skip(s);if(n&r)break}const s=e.filePos;e.filePos=n;const a=kl(e,s-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case"dac3":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(m=t.info)?void 0:m.type));const i=kl(e,3),r=new It(i),n=r.readBits(2);r.skipBits(8);const s=r.readBits(3),a=r.readBits(1);n<3&&(t.info.sampleRate=Rt[n]),t.info.numberOfChannels=Si[s]+a}break;case"dec3":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(p=t.info)?void 0:p.type));const i=(e=>{if(e.length<2)return null;const t=new It(e),i=t.readBits(13),r=t.readBits(3),n=[];for(let s=0;s<=r&&!(Math.ceil(t.pos/8)+3>e.length);s++){const e=t.readBits(2),i=t.readBits(5);t.skipBits(1),t.skipBits(1);const r=t.readBits(3),s=t.readBits(3),a=t.readBits(1);t.skipBits(3);const o=t.readBits(4);let l=0;o>0?l=t.readBits(9):t.skipBits(1),n.push({fscod:e,fscod2:null,bsid:i,bsmod:r,acmod:s,lfeon:a,numDepSub:o,chanLoc:l})}return 0===n.length?null:{dataRate:i,substreams:n}})(kl(e,oe.contentSize));if(!i){vt._warn("Invalid dec3 box contents, ignoring.");break}const r=Bi(i);null!==r&&(t.info.sampleRate=r),t.info.numberOfChannels=Ei(i)}break;case"ddts":{const t=this.currentTrack;if(!t)break;ne("audio"===(null==(g=t.info)?void 0:g.type));const i=(e=>{if(e.length<20)return null;const t=de(e),i=t.getUint32(0);if(0===i)return null;const r=new It(e);r.seekToByte(13);const n=r.readBits(2);r.skipBits(5);const s=r.readBits(1),a=r.readBits(6);r.skipBits(14),r.skipBits(1),r.skipBits(3);const o=r.readBits(16);let l=null;return 0!==o?l=Wi(o):ae.id===i);if(!r)break;const n=Pl(e),s=(12&n)>>2,a=3&n,o=[yl,Tl,vl,Pl],l=o[(48&n)>>4],c=o[s],u=o[a],d=Pl(e);for(let h=0;he.timestamp-t.timestamp);for(let e=0;e({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let n=0;ne.id===c);if(!u)break;const d=this.fragmentTrackDefaults.find(e=>e.trackId===c);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:null!=(y=null==d?void 0:d.defaultSampleDescriptionIndex)?y:null,defaultSampleDuration:null!=(b=null==d?void 0:d.defaultSampleDuration)?b:null,defaultSampleSize:null!=(T=null==d?void 0:d.defaultSampleSize)?T:null,defaultSampleFlags:null!=(v=null==d?void 0:d.defaultSampleFlags)?v:null,startTimestamp:null,encryptionAuxInfo:null},i?u.currentFragmentState.baseDataOffset=Bl(e):l&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=Pl(e)),n&&(u.currentFragmentState.defaultSampleDuration=Pl(e)),s&&(u.currentFragmentState.defaultSampleSize=Pl(e)),a&&(u.currentFragmentState.defaultSampleFlags=Pl(e)),o&&(u.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;ne(t.currentFragmentState);const i=yl(e);e.skip(3);const r=0===i?Pl(e):Bl(e);t.currentFragmentState.startTimestamp=r}break;case"trun":{const t=this.currentTrack;if(!t)break;ne(this.currentFragment),ne(t.currentFragmentState);const i=yl(e),r=vl(e),n=Boolean(1&r),s=Boolean(4&r),a=Boolean(256&r),o=Boolean(512&r),l=Boolean(1024&r),c=Boolean(2048&r),u=Pl(e);let d=null;n&&(d=xl(e));let h,f=null;s&&(f=Pl(e)),this.currentFragment.trackData.has(t.id)?(h=this.currentFragment.trackData.get(t.id),null!==d&&(h.currentOffset=t.currentFragmentState.baseDataOffset+d)):(h={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(null!=d?d:0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,h));for(let m=0;m0&&(n=kl(e,r));const s=Xr(t);s.defaultSampleInfoSize=i,s.sampleSizes=n,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=yl(e);if(1&vl(e)){const i=Al(e,4),r=Pl(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=Pl(e);if(0===r)break;r>1&&vt._warn("Multiple saio entries are not supported; using the first offset only.");let n=0===i?Pl(e):Number(Bl(e));this.currentFragment&&(n+=this.currentFragment.moofOffset);Xr(t).offset=n}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;ne(this.currentFragment);const i=this.currentFragment.trackData.get(t.id);if(!i)break;e.skip(1);const r=vl(e),n=Boolean(2&r),s=Pl(e),a=t.encryptionInfo.defaultPerSampleIvSize;ne(null!==a);for(let o=0;o0?r.set(kl(e,a),0):r.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(n){const t=Tl(e);s=[];for(let i=0;i0&&(null!=(Y=this.metadataTags).trackNumber||(Y.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(J=this.metadataTags).tracksTotal||(J.tracksTotal=i))}break;case"trkn":if(n instanceof Uint8Array&&n.length>=6){const e=de(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(Z=this.metadataTags).trackNumber||(Z.trackNumber=t)),i>0&&(null!=(ee=this.metadataTags).tracksTotal||(ee.tracksTotal=i))}break;case"disc":case"disk":if(n instanceof Uint8Array&&n.length>=6){const e=de(n),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&(null!=(te=this.metadataTags).discNumber||(te.discNumber=t)),i>0&&(null!=(ie=this.metadataTags).discsTotal||(ie.discsTotal=i))}}}}}return e.filePos=ce,!0}}class Or{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.tracks)if(r.trackBacking.getType()===t&&i++,r===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){var e;const t=this.internalTrack;if(t.durationInMediaTimescale<=0)return null;ne(t.trackBacking);const i=yield t.trackBacking.getFirstPacket({metadataOnly:!0});return(null!=(e=null==i?void 0:i.timestamp)?e:0)+t.durationInMediaTimescale/t.timescale})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getFirstPacket(e){return Y(this,null,function*(){const t=yield this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)})}mapTimestampIntoTimescale(e){return Ue(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}getPacket(e,t){return Y(this,null,function*(){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Ur(r,i),s=yield this.fetchPacketForSampleIndex(n,t);return Kr(r)&&this.internalTrack.demuxer.isFragmented?this.performFragmentedLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Be(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};const r=Ae(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(-1!==t)return{sampleIndex:t,correctSampleFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.samples.findIndex(e=>e.isKeyFrame);return ne(-1!==e),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)})}fetchPacketForSampleIndex(e,t){return Y(this,null,function*(){if(-1===e)return null;const i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),r=Wr(i,e);if(!r)return null;let n;if(t.metadataOnly)n=gr;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.sampleOffset,r.sampleSize);if(at(t)&&(t=yield t),!t)return null;if(n=kl(t,r.sampleSize),this.internalTrack.encryptionInfo){let t=null;if(this.internalTrack.encryptionAuxInfo){const i=yield $r(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);ee.timestamp),f=-1!==h?this.internalTrack.fragmentLookupTable[h]:null,m=Be(this.internalTrack.fragmentPositionCache,i,e=>e.startTimestamp),p=-1!==m?this.internalTrack.fragmentPositionCache[m]:null,g=Math.max(null!=(s=null==f?void 0:f.moofOffset)?s:0,null!=(a=null==p?void 0:p.moofOffset)?a:0)||null;let k;for(e?null===g||e.moofOffset>=g?(k=e.moofOffset+e.moofSize,c=e):k=g:k=null!=g?g:0;;){if(c){const e=c.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=l.reader.requestSliceRange(k,8,16);if(at(e)&&(e=yield e),!e)break;const i=k,s=Tr(e);if(!s)break;if("moof"===s.name){c=yield l.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(c);if(r)return this.fetchPacketInFragment(c,e,n);-1!==e&&(u=c,d=e)}k=i+s.totalSize}if(f&&(!u||u.moofOffsetY(this,null,function*(){var e,t,i,r,n,s,a;if("avc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("hevc"!==this.internalTrack.info.codec||this.internalTrack.info.codecDescription)if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo&&(2!==(a=this.internalTrack.info.vp9CodecInfo).colourPrimaries||2!==a.transferCharacteristics||2!==a.matrixCoefficients))if("av1"!==this.internalTrack.info.codec||this.internalTrack.info.av1CodecInfo&&(e=>2!==e.colourPrimaries||2!==e.transferCharacteristics||2!==e.matrixCoefficients)(this.internalTrack.info.av1CodecInfo)){if("prores"===this.internalTrack.info.codec&&!this.internalTrack.info.proresCodecInfo){const e=yield this.getFirstPacket({});this.internalTrack.info.proresCodecInfo=e&&gi(e.data)}}else{const e=yield this.getFirstPacket({}),t=e&&pi(e.data);t&&(this.internalTrack.info.av1CodecInfo=t)}else{const t=yield this.getFirstPacket({}),i=t&&fi(t.data);i&&(this.internalTrack.info.vp9CodecInfo=V(H({},null!=(e=this.internalTrack.info.vp9CodecInfo)?e:i),{videoFullRangeFlag:i.videoFullRangeFlag,colourPrimaries:i.colourPrimaries,transferCharacteristics:i.transferCharacteristics,matrixCoefficients:i.matrixCoefficients}))}else{const e=yield this.getFirstPacket({});this.internalTrack.info.hevcCodecInfo=e&&ti(e.data)}else{const e=yield this.getFirstPacket({});this.internalTrack.info.avcCodecInfo=e&&jt(e.data)}if(!Te(this.internalTrack.info.colorSpace)){const e=Zi(this.internalTrack.info);null!=(t=this.internalTrack.info.colorSpace).primaries||(t.primaries=e.primaries),null!=(i=this.internalTrack.info.colorSpace).transfer||(i.transfer=e.transfer),null!=(r=this.internalTrack.info.colorSpace).matrix||(r.matrix=e.matrix),null!=(n=this.internalTrack.info.colorSpace).fullRange||(n.fullRange=e.fullRange)}const o={codec:Ji(this.internalTrack.info),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(s=this.internalTrack.info.codecDescription)?s:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Lr extends Or{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>Y(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&Li(e.data)}return{codec:er(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const Ur=(e,t)=>{if(e.presentationTimestamps){const i=Be(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=Be(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(-1===i)return-1;const r=e.sampleTimingEntries[i];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},qr=(e,t)=>{var i;if(!e.keySampleIndices)return Ur(e,t);if(e.presentationTimestamps){const i=Be(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(-1===i)return-1;for(let t=i;t>=0;t--){const i=e.presentationTimestamps[t].sampleIndex;if(-1!==Ce(e.keySampleIndices,i,e=>e))return i}return-1}{const r=Ur(e,t),n=Be(e.keySampleIndices,r,e=>e);return null!=(i=e.keySampleIndices[n])?i:-1}},Wr=(e,t)=>{const i=Be(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[i];if(!r||r.startIndex+r.count<=t)return null;let n=r.startDecodeTimestamp+(t-r.startIndex)*r.delta;const s=Be(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),a=e.sampleCompositionTimeOffsets[s];a&&t-a.startIndexe.startSampleIndex),c=e.sampleToChunk[l];ne(c);const u=c.startChunkIndex+Math.floor((t-c.startSampleIndex)/c.samplesPerChunk),d=e.chunkOffsets[u],h=c.startSampleIndex+(u-c.startChunkIndex)*c.samplesPerChunk;let f=0,m=d;if(1===e.sampleSizes.length)m+=o*(t-h),f+=o*c.samplesPerChunk;else for(let g=h;ge)}},Hr=(e,t)=>{var i;if(!e.keySampleIndices)return t+1;const r=Be(e.keySampleIndices,t,e=>e);return null!=(i=e.keySampleIndices[r+1])?i:-1},Vr=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(const i of e.samples)i.presentationTimestamp+=t;for(const i of e.presentationTimestamps)i.presentationTimestamp+=t},jr=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},Kr=e=>0===e.sampleSizes.length,Xr=e=>{var t,i,r;return e.currentFragmentState?null!=(i=(t=e.currentFragmentState).encryptionAuxInfo)?i:t.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:null!=(r=e.encryptionAuxInfo)?r:e.encryptionAuxInfo={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}},$r=(e,t,i)=>Y(null,null,function*(){if(i.resolved)return i.resolved;if(null===i.offset||0===i.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(i.defaultSampleInfoSize>0)r=i.defaultSampleInfoSize*i.sampleCount;else{ne(i.sampleSizes);for(let e=0;e0?i.defaultSampleInfoSize:i.sampleSizes[e],o=new Uint8Array(16);s>0?o.set(kl(n,s),0):o.set(t.defaultConstantIv,0);let l=null;if(r>s){const e=Tl(n);l=[];for(let t=0;te.defaultConstantIv?{iv:e.defaultConstantIv,subsamples:null}:null,Qr=(e,t,i,r)=>Y(null,null,function*(){var n;ne(e.encryptionInfo);const s=e.encryptionInfo;ne(null!==s.defaultKid);const a=s.defaultKid;let o;const l=e.demuxer.decryptionKeyCache.get(a);if(l)o=yield l;else{if(!(null==(n=e.demuxer.input._formatOptions.isobmff)?void 0:n.resolveKeyId))throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");const t=Y(null,null,function*(){let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(a));for(let e=0;e{ne(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;iY(null,null,function*(){const n=new Uint8Array(16);n.set(i.iv,0);const s=yield crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),a=e=>Y(null,null,function*(){const t=yield crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},s,e);return new Uint8Array(t)});if(!i.subsamples)return a(r);ne(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const o=Zr(i.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let l=0;for(const e of o)for(const t of e.perSubsample)l+=t.length;const c=new Uint8Array(l);let u=0;for(const e of o)for(const t of e.perSubsample)c.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;const d=yield a(c),h=new Uint8Array(r);let f=0;for(const e of o)for(const t of e.perSubsample)h.set(d.subarray(f,f+t.length),t.offset),f+=t.length;return h}),Jr=(e,t,i,r)=>{const n=new Dr;n.init({key:e,iv:i.iv});const s=t.defaultCryptByteBlock,a=t.defaultSkipByteBlock;if(ne(null!==s&&null!==a),!i.subsamples){const e=new Uint8Array(r),t=Math.floor(r.length/16);for(let i=0;i{const r=[],n=0!==t||0!==i;let s=0;for(const a of e){s+=a.clearLen;const e=[];if(n){let r=a.protectedLen,n=s;for(;r>0&&!(r<16*t);){const s=16*t;e.push({offset:n,length:s}),n+=s,r-=s;const a=Math.min(16*i,r);n+=a,r-=a}s+=a.protectedLen}else a.protectedLen>0&&e.push({offset:s,length:a.protectedLen}),s+=a.protectedLen;r.push({perSubsample:e})}return r};var en,tn;(tn=en||(en={}))[tn.EBML=440786851]="EBML",tn[tn.EBMLVersion=17030]="EBMLVersion",tn[tn.EBMLReadVersion=17143]="EBMLReadVersion",tn[tn.EBMLMaxIDLength=17138]="EBMLMaxIDLength",tn[tn.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",tn[tn.DocType=17026]="DocType",tn[tn.DocTypeVersion=17031]="DocTypeVersion",tn[tn.DocTypeReadVersion=17029]="DocTypeReadVersion",tn[tn.Void=236]="Void",tn[tn.Segment=408125543]="Segment",tn[tn.SeekHead=290298740]="SeekHead",tn[tn.Seek=19899]="Seek",tn[tn.SeekID=21419]="SeekID",tn[tn.SeekPosition=21420]="SeekPosition",tn[tn.Duration=17545]="Duration",tn[tn.Info=357149030]="Info",tn[tn.TimestampScale=2807729]="TimestampScale",tn[tn.MuxingApp=19840]="MuxingApp",tn[tn.WritingApp=22337]="WritingApp",tn[tn.Tracks=374648427]="Tracks",tn[tn.TrackEntry=174]="TrackEntry",tn[tn.TrackNumber=215]="TrackNumber",tn[tn.TrackUID=29637]="TrackUID",tn[tn.TrackType=131]="TrackType",tn[tn.FlagEnabled=185]="FlagEnabled",tn[tn.FlagDefault=136]="FlagDefault",tn[tn.FlagForced=21930]="FlagForced",tn[tn.FlagOriginal=21934]="FlagOriginal",tn[tn.FlagHearingImpaired=21931]="FlagHearingImpaired",tn[tn.FlagVisualImpaired=21932]="FlagVisualImpaired",tn[tn.FlagCommentary=21935]="FlagCommentary",tn[tn.FlagLacing=156]="FlagLacing",tn[tn.Name=21358]="Name",tn[tn.Language=2274716]="Language",tn[tn.LanguageBCP47=2274717]="LanguageBCP47",tn[tn.CodecID=134]="CodecID",tn[tn.CodecPrivate=25506]="CodecPrivate",tn[tn.CodecDelay=22186]="CodecDelay",tn[tn.SeekPreRoll=22203]="SeekPreRoll",tn[tn.DefaultDuration=2352003]="DefaultDuration",tn[tn.Video=224]="Video",tn[tn.PixelWidth=176]="PixelWidth",tn[tn.PixelHeight=186]="PixelHeight",tn[tn.DisplayWidth=21680]="DisplayWidth",tn[tn.DisplayHeight=21690]="DisplayHeight",tn[tn.DisplayUnit=21682]="DisplayUnit",tn[tn.AlphaMode=21440]="AlphaMode",tn[tn.Audio=225]="Audio",tn[tn.SamplingFrequency=181]="SamplingFrequency",tn[tn.Channels=159]="Channels",tn[tn.BitDepth=25188]="BitDepth",tn[tn.SimpleBlock=163]="SimpleBlock",tn[tn.BlockGroup=160]="BlockGroup",tn[tn.Block=161]="Block",tn[tn.BlockAdditions=30113]="BlockAdditions",tn[tn.BlockMore=166]="BlockMore",tn[tn.BlockAdditional=165]="BlockAdditional",tn[tn.BlockAddID=238]="BlockAddID",tn[tn.BlockDuration=155]="BlockDuration",tn[tn.ReferenceBlock=251]="ReferenceBlock",tn[tn.Cluster=524531317]="Cluster",tn[tn.Timestamp=231]="Timestamp",tn[tn.Cues=475249515]="Cues",tn[tn.CuePoint=187]="CuePoint",tn[tn.CueTime=179]="CueTime",tn[tn.CueTrackPositions=183]="CueTrackPositions",tn[tn.CueTrack=247]="CueTrack",tn[tn.CueClusterPosition=241]="CueClusterPosition",tn[tn.Colour=21936]="Colour",tn[tn.MatrixCoefficients=21937]="MatrixCoefficients",tn[tn.TransferCharacteristics=21946]="TransferCharacteristics",tn[tn.Primaries=21947]="Primaries",tn[tn.Range=21945]="Range",tn[tn.Projection=30320]="Projection",tn[tn.ProjectionType=30321]="ProjectionType",tn[tn.ProjectionPoseRoll=30325]="ProjectionPoseRoll",tn[tn.Attachments=423732329]="Attachments",tn[tn.AttachedFile=24999]="AttachedFile",tn[tn.FileDescription=18046]="FileDescription",tn[tn.FileName=18030]="FileName",tn[tn.FileMediaType=18016]="FileMediaType",tn[tn.FileData=18012]="FileData",tn[tn.FileUID=18094]="FileUID",tn[tn.Chapters=272869232]="Chapters",tn[tn.Tags=307544935]="Tags",tn[tn.Tag=29555]="Tag",tn[tn.Targets=25536]="Targets",tn[tn.TargetTypeValue=26826]="TargetTypeValue",tn[tn.TargetType=25546]="TargetType",tn[tn.TagTrackUID=25541]="TagTrackUID",tn[tn.TagEditionUID=25545]="TagEditionUID",tn[tn.TagChapterUID=25540]="TagChapterUID",tn[tn.TagAttachmentUID=25542]="TagAttachmentUID",tn[tn.SimpleTag=26568]="SimpleTag",tn[tn.TagName=17827]="TagName",tn[tn.TagLanguage=17530]="TagLanguage",tn[tn.TagString=17543]="TagString",tn[tn.TagBinary=17541]="TagBinary",tn[tn.ContentEncodings=28032]="ContentEncodings",tn[tn.ContentEncoding=25152]="ContentEncoding",tn[tn.ContentEncodingOrder=20529]="ContentEncodingOrder",tn[tn.ContentEncodingScope=20530]="ContentEncodingScope",tn[tn.ContentCompression=20532]="ContentCompression",tn[tn.ContentCompAlgo=16980]="ContentCompAlgo",tn[tn.ContentCompSettings=16981]="ContentCompSettings",tn[tn.ContentEncryption=20533]="ContentEncryption";const rn=[en.EBML,en.Segment],nn=[en.SeekHead,en.Info,en.Cluster,en.Tracks,en.Cues,en.Attachments,en.Chapters,en.Tags],sn=[...rn,...nn],an=16,on=e=>{if(e.remainingLength<1)return null;const t=yl(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength{if(e.remainingLength<1)return null;const t=yl(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r{const t=on(e);if(null===t)return null;if(e.remainingLength{if(e.remainingLength<1)return null;if(255===yl(e))return;e.skip(-1);const t=ln(e);return null===t?null:72057594037927940!==t?t:void 0},hn=e=>{ne(e.remainingLength>=2);const t=un(e);if(null===t)return null;const i=dn(e);return null===i?null:{id:t,size:i}},fn=(e,t)=>{const i=kl(e,t);let r=0;for(;r{const i=kl(e,t);let r=0;for(;r{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?Rl(e):Fl(e)},gn=(e,t,i,r)=>Y(null,null,function*(){const n=new Set(i);let s=t;for(;null===r||ss?r:s,found:!1}}),kn=(e,t,i,r)=>Y(null,null,function*(){const n=q(2,16),s=new Set(i);let a=t;for(;ae.tracks.map(e=>e.trackBacking))})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();const e=yield this.getTrackBackings(),t=yield Promise.all(e.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})));return(e=>{let t=(e.hasVideo?"video/":e.hasAudio?"audio/":"application/")+(e.isWebM?"webm":"x-matroska");e.codecStrings.length>0&&(t+=`; codecs="${[...new Set(e.codecStrings.filter(Boolean))].join(", ")}"`);return t})({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>{var t;return"video"===(null==(t=e.info)?void 0:t.type)})),hasAudio:this.segments.some(e=>e.tracks.some(e=>{var t;return"audio"===(null==(t=e.info)?void 0:t.type)})),codecStrings:t.filter(Boolean)})})}getMetadataTags(){return Y(this,null,function*(){yield this.readMetadata();for(const t of this.segments)t.metadataTagsCollected||(null!==this.reader.fileSize&&(yield this.loadSegmentMetadata(t)),t.metadataTagsCollected=!0);let e={};for(const t of this.segments)e=H(H({},e),t.metadataTags);return e})}readMetadata(){var e;return null!=(e=this.readMetadataPromise)?e:this.readMetadataPromise=(()=>Y(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,2,an);if(at(t)&&(t=yield t),!t)break;const i=hn(t);if(!i)break;const r=i.id;let n=i.size;const s=t.filePos;if(r===en.EBML){Fn(n);let e=this.reader.requestSlice(s,n);if(at(e)&&(e=yield e),!e)break;this.readContiguousElements(e)}else if(r===en.Segment){if(yield this.readSegment(s,n),void 0===n)break;if(null===this.reader.fileSize)break}else if(r===en.Cluster){if(null===this.reader.fileSize)break;if(void 0===n){n=(yield gn(this.reader,s,sn,this.reader.fileSize)).pos-s}const e=ae(this.segments);e&&(e.elementEndPos=s+n)}Fn(n),e=s+n}}))()}readSegment(e,t){return Y(this,null,function*(){var i;this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:void 0===t?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let r=e;for(;null===this.currentSegment.elementEndPos||re.id===s);if(-1!==l){const e=Ln[l].flag;this.currentSegment[e]=!0,Fn(a);let t=this.reader.requestSlice(o,a);at(t)&&(t=yield t),t&&this.readContiguousElements(t)}else if(s===en.Tags||s===en.Attachments){s===en.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,Fn(a);let e=this.reader.requestSlice(o,a);at(e)&&(e=yield e),e&&this.readContiguousElements(e)}else if(s===en.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(void 0===a)break;r=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),null!==this.reader.fileSize)for(const t of this.currentSegment.seekEntries){const i=Ln.find(e=>e.id===t.id);if(!i)continue;if(this.currentSegment[i.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,2,an);if(at(r)&&(r=yield r),!r)continue;const n=hn(r);if(!n)continue;const{id:s,size:a}=n;if(s!==i.id)continue;Fn(a),this.currentSegment[i.flag]=!0;let o=this.reader.requestSlice(r.filePos,a);at(o)&&(o=yield o),o&&this.readContiguousElements(o)}-1===this.currentSegment.timestampScale&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e3);for(const e of this.currentSegment.tracks)null!==e.defaultDurationNs&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);const n=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(const e of this.currentSegment.cuePoints){const t=n.get(e.trackId);t&&t.cuePoints.push(e)}for(const e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;ta&&(a=e.cuePoints.length,s=e);for(const e of this.currentSegment.tracks)0===e.cuePoints.length&&(e.cuePoints=s.cuePoints);this.currentSegment=null})}readCluster(e,t){return Y(this,null,function*(){var i;if((null==(i=t.lastReadCluster)?void 0:i.elementStartPos)===e)return t.lastReadCluster;let r=this.reader.requestSliceRange(e,2,an);at(r)&&(r=yield r),ne(r);const n=e,s=hn(r);ne(s);ne(s.id===en.Cluster);let a=s.size;const o=r.filePos;if(void 0===a){a=(yield gn(this.reader,o,sn,t.elementEndPos)).pos-o}let l=this.reader.requestSlice(o,a);at(l)&&(l=yield l);const c={segment:t,elementStartPos:n,elementEndPos:o+a,dataStartPos:o,timestamp:-1,trackData:new Map};if(this.currentCluster=c,l){const e=this.readContiguousElements(l,sn);c.elementEndPos=e}for(const[,e]of c.trackData){const t=e.track;ne(e.blocks.length>0);let i=!1;for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const r=e.blocks[e.presentationTimestamps[0].blockIndex],s=e.blocks[ae(e.presentationTimestamps).blockIndex];e.startTimestamp=r.timestamp,e.endTimestamp=s.timestamp+s.duration;const a=Be(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);-1!==a&&t.clusterPositionCache[a].elementStartPos===n||t.clusterPositionCache.splice(a+1,0,{elementStartPos:c.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=c,c})}getTrackDataInCluster(e,t){let i=e.trackData.get(t);if(!i){const r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;i={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,i)}return i}expandLacedBlocks(e,t){var i;for(let r=0;r=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F,A,M,D,N,O,z,L,U,q,W,j,K,X,$,G,Q,Y,J,Z,ee;const te=hn(e);if(!te)return!1;if(t&&t.includes(te.id))return!1;const{id:ie,size:re}=te,ae=e.filePos;switch(Fn(re),ie){case en.DocType:this.isWebM="webm"===fn(e,re);break;case en.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(ae,re)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case en.SeekID:{const t=null==(i=this.currentSegment)?void 0:i.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=cn(e,re)}break;case en.SeekPosition:{const t=null==(r=this.currentSegment)?void 0:r.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=cn(e,re)}break;case en.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=cn(e,re),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case en.Duration:if(!this.currentSegment)break;this.currentSegment.duration=pn(e,re);break;case en.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:V(H({},Pt),{primary:!1}),trackBacking:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:"eng",hasLanguageBcp47:!1,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(ae,re)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>{var t;return"decompress"!==(null==(t=e.data)?void 0:t.type)||e.scope!==Dn.Block||e.data.algorithm!==On.HeaderStripping})&&(vt._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&-1!==this.currentTrack.id&&this.currentTrack.codecId&&this.currentTrack.info){const e=this.currentTrack.codecId.indexOf("/"),t=-1===e?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);if("video"===this.currentTrack.info.type&&-1!==this.currentTrack.info.width&&-1!==this.currentTrack.info.height){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,null!==this.currentTrack.info.displayWidth&&null!==this.currentTrack.info.displayHeight){const e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}if(this.currentTrack.codecId===yn)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===bn)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(t===Tn)this.currentTrack.info.codec="vp8";else if(t===vn)this.currentTrack.info.codec="vp9";else if(t===wn)this.currentTrack.info.codec="av1";else if(t===Sn){const e=this.currentTrack.codecPrivate?he.decode(this.currentTrack.codecPrivate):"";Qi.includes(e)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=e)}const e=this.currentTrack;this.currentTrack.trackBacking=new Hn(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===Pn?(this.currentTrack.info.codec="aac",this.currentTrack.info.aacCodecInfo={isMpeg2:this.currentTrack.codecId.includes("MPEG2"),objectType:null},this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===In?this.currentTrack.info.codec="mp3":t===xn?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=tr):t===Cn?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Bn?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===En?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===_n?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Rn?(this.currentTrack.info.codec="dts","A_DTS/EXPRESS"===this.currentTrack.codecId?this.currentTrack.info.dtsFormat="dtse":"A_DTS/LOSSLESS"===this.currentTrack.codecId&&(this.currentTrack.info.dtsFormat="dtsl")):"A_PCM/INT/LIT"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32"):"A_PCM/INT/BIG"===this.currentTrack.codecId?8===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-u8":16===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s16be":24===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-s24be":32===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-s32be"):"A_PCM/FLOAT/IEEE"===this.currentTrack.codecId&&(32===this.currentTrack.info.bitDepth?this.currentTrack.info.codec="pcm-f32":64===this.currentTrack.info.bitDepth&&(this.currentTrack.info.codec="pcm-f64"));const e=this.currentTrack;this.currentTrack.trackBacking=new Vn(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case en.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=cn(e,re);break;case en.TrackType:{if(!this.currentTrack)break;const t=cn(e,re);1===t?this.currentTrack.info={type:"video",width:-1,height:-1,displayWidth:null,displayHeight:null,displayUnit:null,squarePixelWidth:-1,squarePixelHeight:-1,rotation:0,codec:null,codecDescription:null,colorSpace:H({},ve),alphaMode:!1,proresFormat:null}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null,dtsFormat:null})}break;case en.FlagEnabled:if(!this.currentTrack)break;cn(e,re)||(this.currentTrack=null);break;case en.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!cn(e,re);break;case en.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!cn(e,re);break;case en.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!cn(e,re);break;case en.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!cn(e,re);break;case en.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!cn(e,re);break;case en.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!cn(e,re);break;case en.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=fn(e,re);break;case en.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=kl(e,re);break;case en.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=cn(e,re);break;case en.Name:if(!this.currentTrack)break;this.currentTrack.name=mn(e,re);break;case en.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=fn(e,re),Ke(this.currentTrack.languageCode)||(this.currentTrack.languageCode=Le);break;case en.LanguageBCP47:{if(!this.currentTrack)break;const t=fn(e,re).split("-")[0];this.currentTrack.languageCode=t||Le,this.currentTrack.hasLanguageBcp47=!0}break;case en.Video:if("video"!==(null==(s=null==(n=this.currentTrack)?void 0:n.info)?void 0:s.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.PixelWidth:if("video"!==(null==(o=null==(a=this.currentTrack)?void 0:a.info)?void 0:o.type))break;this.currentTrack.info.width=cn(e,re);break;case en.PixelHeight:if("video"!==(null==(c=null==(l=this.currentTrack)?void 0:l.info)?void 0:c.type))break;this.currentTrack.info.height=cn(e,re);break;case en.DisplayWidth:if("video"!==(null==(d=null==(u=this.currentTrack)?void 0:u.info)?void 0:d.type))break;this.currentTrack.info.displayWidth=cn(e,re);break;case en.DisplayHeight:if("video"!==(null==(f=null==(h=this.currentTrack)?void 0:h.info)?void 0:f.type))break;this.currentTrack.info.displayHeight=cn(e,re);break;case en.DisplayUnit:if("video"!==(null==(p=null==(m=this.currentTrack)?void 0:m.info)?void 0:p.type))break;this.currentTrack.info.displayUnit=cn(e,re);break;case en.AlphaMode:if("video"!==(null==(k=null==(g=this.currentTrack)?void 0:g.info)?void 0:k.type))break;this.currentTrack.info.alphaMode=1===cn(e,re);break;case en.Colour:if("video"!==(null==(b=null==(y=this.currentTrack)?void 0:y.info)?void 0:b.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.MatrixCoefficients:{if("video"!==(null==(v=null==(T=this.currentTrack)?void 0:T.info)?void 0:v.type))break;const t=cn(e,re),i=be[t];this.currentTrack.info.colorSpace.matrix=i}break;case en.Range:{if("video"!==(null==(S=null==(w=this.currentTrack)?void 0:w.info)?void 0:S.type))break;const t=cn(e,re);this.currentTrack.info.colorSpace.fullRange=1===t||2===t?2===t:void 0}break;case en.TransferCharacteristics:{if("video"!==(null==(I=null==(P=this.currentTrack)?void 0:P.info)?void 0:I.type))break;const t=cn(e,re),i=ke[t];this.currentTrack.info.colorSpace.transfer=i}break;case en.Primaries:{if("video"!==(null==(C=null==(x=this.currentTrack)?void 0:x.info)?void 0:C.type))break;const t=cn(e,re),i=pe[t];this.currentTrack.info.colorSpace.primaries=i}break;case en.Projection:if("video"!==(null==(E=null==(B=this.currentTrack)?void 0:B.info)?void 0:E.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.ProjectionPoseRoll:{if("video"!==(null==(R=null==(_=this.currentTrack)?void 0:_.info)?void 0:R.type))break;const t=-pn(e,re);try{this.currentTrack.info.rotation=se(t)}catch(oe){}}break;case en.Audio:if("audio"!==(null==(A=null==(F=this.currentTrack)?void 0:F.info)?void 0:A.type))break;this.readContiguousElements(e.slice(ae,re));break;case en.SamplingFrequency:if("audio"!==(null==(D=null==(M=this.currentTrack)?void 0:M.info)?void 0:D.type))break;this.currentTrack.info.sampleRate=pn(e,re);break;case en.Channels:if("audio"!==(null==(O=null==(N=this.currentTrack)?void 0:N.info)?void 0:O.type))break;this.currentTrack.info.numberOfChannels=cn(e,re);break;case en.BitDepth:if("audio"!==(null==(L=null==(z=this.currentTrack)?void 0:z.info)?void 0:L.type))break;this.currentTrack.info.bitDepth=cn(e,re);break;case en.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(ae,re)),this.currentCueTime=null;break;case en.CueTime:this.currentCueTime=cn(e,re);break;case en.CueTrackPositions:{if(null===this.currentCueTime)break;ne(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(ae,re)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case en.CueTrack:{const t=null==(U=this.currentSegment)?void 0:U.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=cn(e,re)}break;case en.CueClusterPosition:{const t=null==(q=this.currentSegment)?void 0:q.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;ne(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+cn(e,re)}break;case en.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=cn(e,re);break;case en.SimpleBlock:{if(!this.currentCluster)break;const t=ln(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=wl(e),n=yl(e),s=n>>1&3;let a=!!(128&n);"audio"===(null==(W=i.track.info)?void 0:W.type)&&i.track.info.codec&&(a=!0);const o=kl(e,re-(e.filePos-ae)),l=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:a,data:o,lacing:s,decoded:!l,postProcessed:!1,mainAdditional:null})}break;case en.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(ae,re)),this.currentBlock=null;break;case en.Block:{if(!this.currentCluster)break;const t=ln(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=wl(e),n=yl(e)>>1&3,s=kl(e,re-(e.filePos-ae)),a=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:s,lacing:n,decoded:!a,postProcessed:!1,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case en.BlockAdditions:this.readContiguousElements(e.slice(ae,re));break;case en.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(ae,re)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case en.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=kl(e,re);break;case en.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=cn(e,re);break;case en.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=cn(e,re);break;case en.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case en.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(ae,re));break;case en.Targets:this.readContiguousElements(e.slice(ae,re));break;case en.TargetTypeValue:50!==cn(e,re)&&(this.currentTagTargetIsMovie=!1);break;case en.TagTrackUID:case en.TagEditionUID:case en.TagChapterUID:case en.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case en.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(ae,re));break;case en.TagName:this.currentSimpleTagName=mn(e,re);break;case en.TagString:{if(!this.currentSimpleTagName)break;const t=mn(e,re);this.processTagValue(this.currentSimpleTagName,t)}break;case en.TagBinary:{if(!this.currentSimpleTagName)break;const t=kl(e,re);this.processTagValue(this.currentSimpleTagName,t)}break;case en.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(ae,re));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(null!=t.raw||(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new St(this.currentAttachedFile.fileData,null!=(j=this.currentAttachedFile.fileMediaType)?j:void 0,null!=(K=this.currentAttachedFile.fileName)?K:void 0,null!=(X=this.currentAttachedFile.fileDescription)?X:void 0)),(null==($=this.currentAttachedFile.fileMediaType)?void 0:$.startsWith("image/"))&&this.currentAttachedFile.fileData){const e=this.currentAttachedFile.fileName;let i="unknown";if(e){const t=e.toLowerCase();t.startsWith("cover.")?i="coverFront":t.startsWith("back.")&&(i="coverBack")}null!=t.images||(t.images=[]),t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:i,name:null!=(G=this.currentAttachedFile.fileName)?G:void 0,description:null!=(Q=this.currentAttachedFile.fileDescription)?Q:void 0})}this.currentAttachedFile=null}break;case en.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=((e,t)=>{if(t<1)throw new Error("Bad unsigned int size "+t);let i=BigInt("0");for(let r=0;rt.order-e.order);break;case en.ContentEncoding:this.currentDecodingInstruction={order:0,scope:Dn.Block,data:null},this.readContiguousElements(e.slice(ae,re)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case en.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=cn(e,re);break;case en.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=cn(e,re);break;case en.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:On.Zlib,settings:null},this.readContiguousElements(e.slice(ae,re));break;case en.ContentCompAlgo:if("decompress"!==(null==(J=null==(Y=this.currentDecodingInstruction)?void 0:Y.data)?void 0:J.type))break;this.currentDecodingInstruction.data.algorithm=cn(e,re);break;case en.ContentCompSettings:if("decompress"!==(null==(ee=null==(Z=this.currentDecodingInstruction)?void 0:Z.data)?void 0:ee.type))break;this.currentDecodingInstruction.data.settings=kl(e,re);break;case en.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=ae+re,!0}decodeBlockData(e,t){ne(e.decodingInstructions.length>0);let i=t;for(const r of e.decodingInstructions)if(ne(r.data),"decompress"===r.data.type)if(r.data.algorithm===On.HeaderStripping)if(r.data.settings&&r.data.settings.length>0){const e=r.data.settings,t=new Uint8Array(e.length+i.length);t.set(e,0),t.set(i,e.length),i=t}return i}processTagValue(e,t){var i,r;if(!(null==(i=this.currentSegment)?void 0:i.metadataTags))return;const n=this.currentSegment.metadataTags;if(null!=n.raw||(n.raw={}),null!=(r=n.raw)[e]||(r[e]=t),"string"===typeof t)switch(e.toLowerCase()){case"title":null!=n.title||(n.title=t);break;case"description":null!=n.description||(n.description=t);break;case"artist":null!=n.artist||(n.artist=t);break;case"album":null!=n.album||(n.album=t);break;case"album_artist":null!=n.albumArtist||(n.albumArtist=t);break;case"genre":null!=n.genre||(n.genre=t);break;case"comment":null!=n.comment||(n.comment=t);break;case"lyrics":null!=n.lyrics||(n.lyrics=t);break;case"date":{const e=new Date(t);Number.isNaN(e.getTime())||null!=n.date||(n.date=e)}break;case"track_number":case"part_number":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.trackNumber||(n.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.tracksTotal||(n.tracksTotal=r))}break;case"disc_number":case"disc":{const e=t.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(null!=n.discNumber||(n.discNumber=i)),r&&Number.isInteger(r)&&r>0&&(null!=n.discsTotal||(n.discsTotal=r))}}}getDurationFromMetadata(e){return Y(this,null,function*(){if(e.duration<=0)return null;let t=null;for(const r of e.tracks){ne(r.trackBacking);const e=yield r.trackBacking.getFirstPacket({metadataOnly:!0});e&&(t=Math.min(null!=t?t:1/0,e.timestamp))}let i=e.duration/e.timestampFactor;return i+=null!=t?t:0,i})}}class Wn{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){const e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType();let i=0;for(const r of e.segments)for(const e of r.tracks)if(e.trackBacking.getType()===t&&i++,e===this.internalTrack)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return this.internalTrack.demuxer.getDurationFromMetadata(this.internalTrack.segment)})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getFirstPacket(e){return Y(this,null,function*(){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)})}intoTimescale(e){return Ue(e*this.internalTrack.segment.timestampFactor)}getPacket(e,t){return Y(this,null,function*(){const i=this.intoTimescale(e);return this.performClusterLookup(null,e=>{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Be(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1{const t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};const r=Ae(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>i.blockIndex);if(-1!==t)return{blockIndex:t,correctBlockFound:!0}}else{const t=e.trackData.get(this.internalTrack.id);if(t&&null!==t.firstKeyFrameTimestamp){const e=t.blocks.findIndex(e=>e.isKeyFrame);return ne(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)})}fetchPacketInCluster(e,t,i){return Y(this,null,function*(){var r,n;if(-1===t)return null;const s=e.trackData.get(this.internalTrack.id).blocks[t];if(ne(s),s.decoded||(s.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,s.data),s.decoded=!0),!s.postProcessed){if("prores"===(null==(r=this.internalTrack.info)?void 0:r.codec)){if(!(s.data.length>=8&&105===s.data[4]&&99===s.data[5]&&112===s.data[6]&&102===s.data[7])){const e=new Uint8Array(s.data.length+8);de(e).setUint32(0,e.length,!1),e[4]=105,e[5]=99,e[6]=112,e[7]=102,e.set(s.data,8),s.data=e}}s.postProcessed=!0}const a=i.metadataOnly?gr:s.data,o=s.timestamp/this.internalTrack.segment.timestampFactor,l=s.duration/this.internalTrack.segment.timestampFactor,c={};s.mainAdditional&&"video"===(null==(n=this.internalTrack.info)?void 0:n.type)&&this.internalTrack.info.alphaMode&&(c.alpha=i.metadataOnly?gr:s.mainAdditional,c.alphaByteLength=s.mainAdditional.byteLength);const u=new kr(a,s.isKeyFrame?"key":"delta",o,l,e.dataStartPos+t,s.data.byteLength,c);return this.packetToClusterLocation.set(u,{cluster:e,blockIndex:t}),u})}performClusterLookup(e,t,i,r,n){return Y(this,null,function*(){var s,a,o,l;const{demuxer:c,segment:u}=this.internalTrack;let d=null,h=null,f=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,n);-1!==i&&(h=e,f=i)}const m=Be(this.internalTrack.cuePoints,i,e=>e.time),p=-1!==m?this.internalTrack.cuePoints[m]:null,g=Be(this.internalTrack.clusterPositionCache,i,e=>e.startTimestamp),k=-1!==g?this.internalTrack.clusterPositionCache[g]:null,y=Math.max(null!=(s=null==p?void 0:p.clusterPosition)?s:0,null!=(a=null==k?void 0:k.elementStartPos)?a:0)||null;let b;for(e?null===y||e.elementStartPos>=y?(b=e.elementEndPos,d=e):b=y:b=null!=y?y:u.clusterSeekStartPos;null===u.elementEndPos||b<=u.elementEndPos-2;){if(d){const e=d.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=c.reader.requestSliceRange(b,2,an);if(at(e)&&(e=yield e),!e)break;const i=b,s=hn(e);if(!s||!nn.includes(s.id)&&s.id!==en.Void){const e=yield kn(c.reader,i,nn,Math.min(null!=(o=u.elementEndPos)?o:1/0,i+Un));if(e){b=e;continue}break}const a=s.id;let l=s.size;const m=e.filePos;if(a===en.Cluster){d=yield c.readCluster(i,u),l=d.elementEndPos-m;const{blockIndex:e,correctBlockFound:r}=t(d);if(r)return this.fetchPacketInCluster(d,e,n);-1!==e&&(h=d,f=e)}if(void 0===l){ne(a!==en.Cluster);l=(yield gn(c.reader,m,sn,u.elementEndPos)).pos-m}const p=m+l;if(null===u.elementEndPos){let e=c.reader.requestSliceRange(p,2,an);if(at(e)&&(e=yield e),!e)break;if(un(e)===en.Segment){u.elementEndPos=p;break}}b=p}if(p&&(!h||h.elementStartPosY(this,null,function*(){var e,t,i,r,n;let s=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"prores"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(s=yield this.getFirstPacket({}));const a={width:this.internalTrack.info.width,height:this.internalTrack.info.height,codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,colorSpace:this.internalTrack.info.colorSpace,avcType:1,avcCodecInfo:"avc"===this.internalTrack.info.codec&&s?jt(s.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&s?ti(s.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&s?fi(s.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&s?pi(s.data):null,proresCodecInfo:"prores"===this.internalTrack.info.codec&&s?gi(s.data):null,proresFormat:this.internalTrack.info.proresFormat};if(!Te(this.internalTrack.info.colorSpace)){const n=Zi(a);null!=(e=this.internalTrack.info.colorSpace).primaries||(e.primaries=n.primaries),null!=(t=this.internalTrack.info.colorSpace).transfer||(t.transfer=n.transfer),null!=(i=this.internalTrack.info.colorSpace).matrix||(i.matrix=n.matrix),null!=(r=this.internalTrack.info.colorSpace).fullRange||(r.fullRange=n.fullRange)}const o={codec:Ji(a),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:null!=(n=this.internalTrack.info.codecDescription)?n:void 0,colorSpace:this.internalTrack.info.colorSpace};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(o.displayAspectWidth=this.internalTrack.info.squarePixelWidth,o.displayAspectHeight=this.internalTrack.info.squarePixelHeight),o}))():null})}}class Vn extends Wn{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"audio"}getCodec(){return this.internalTrack.info.codec}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels}getSampleRate(){return this.internalTrack.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){var e;return this.internalTrack.info.codec?null!=(e=this.decoderConfigPromise)?e:this.decoderConfigPromise=(()=>Y(this,null,function*(){var e;if("dts"===this.internalTrack.info.codec&&!this.internalTrack.info.dtsFormat){const e=yield this.getFirstPacket({});this.internalTrack.info.dtsFormat=e&&Li(e.data)}return{codec:er({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo,dtsFormat:this.internalTrack.info.dtsFormat}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:null!=(e=this.internalTrack.info.codecDescription)?e:void 0}}))():null})}}const jn=(e,t,i,r=null)=>Y(null,null,function*(){const n=q(2,16);let s=t;for(;null===i||s=4;){const t=a.filePos,i=Pl(a),n=null!==e.fileSize?e.fileSize-s:null,o=ur(i,n);if(o.header&&(!r||o.header.sampleRate===r.sampleRate&&o.header.mpegVersionId===r.mpegVersionId&&o.header.layer===r.layer&&mr(o.header.channel)===mr(r.channel)))return{header:o.header,startPos:s};a.filePos=t+o.bytesAdvanced,s=a.filePos}}return null});class Kn extends pr{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.xingFrameHeader=null,this.xingFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new Se,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();if(!this.firstFrameHeader&&this.xingFrameHeader&&(this.firstFrameHeader=this.xingFrameHeader,this.firstFrameHeaderPos=this.xingFrameHeaderPos),!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.trackBackings=[new Xn(this)]}))()})}advanceReader(){return Y(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Vl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=yield jn(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=cr(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(at(r)&&(r=yield r),r){const n=Pl(r);if(n===or||n===lr){if(this.xingFrameHeader||(this.xingFrameHeader=t,this.xingFrameHeaderPos=e.startPos),!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(at(t)&&(t=yield t),t){const e=kl(t,12),i=de(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&hr.FrameCount?i.getUint32(4,!1):null,fileSize:r&hr.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos);const n=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,s={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:n,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(s),this.nextTimestampInSamples+=t.audioSamplesInFrame})}getMimeType(){return Y(this,null,function*(){return"audio/mpeg"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0,t=!1;for(;;){let i=this.reader.requestSlice(e,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=!0;let n=this.reader.requestSlice(i.filePos,r.size);if(at(n)&&(n=yield n),!n)break;jl(n,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=Ll){let e=this.reader.requestSlice(this.reader.fileSize-Ll,Ll);at(e)&&(e=yield e),ne(e);"TAG"===Al(e,3)&&Wl(e,this.metadataTags)}return this.metadataTags}finally{e()}})}}class Xn{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return ne(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){const e=this.demuxer;if(ne(null!==e.firstFrameHeader),ne(null!==e.firstFrameHeaderPos),e.xingData){if(null!==e.xingData.frameCount)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(null!==e.reader.fileSize){const s=(t=e.firstFrameHeader.lowSamplingFrequency,i=e.firstFrameHeader.layer,r=e.firstFrameHeader.bitrate,n=e.firstFrameHeader.sampleRate,0===i?0:1===i?144*r/(n<e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1>>0&4294967295}const Qn=e=>{const t=de(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^t])>>>0}return t.setUint32(22,i,!0),r},Yn=(e,t,i)=>{let r=0,n=null;if(e.length>0)if("vorbis"===t.codec){ne(t.vorbisInfo);const s=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,a=(e[0]&s)>>1;if(a>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let o=i;const l=t.vorbisInfo.modeBlockflags[a];if(n=t.vorbisInfo.blocksizes[l],1===l){const i=1+(1|s),r=e[0]&i?1:0;o=t.vorbisInfo.blocksizes[r]}r=null!==o?o+n>>2:0}else if("opus"===t.codec){r=(e=>{const t=e[0]>>3,i=3&e[0];let r;return r=0===i?1:1===i||2===i?2:63&e[1],{durationInSamples:ki[t]*r}})(e).durationInSamples}return{durationInSamples:r,vorbisBlockSize:n}},Jn=27,Zn=282,es=e=>{const t=e.filePos;if(Il(e)!==$n)return null;e.skip(1);const i=yl(e),r=_l(e),n=Il(e),s=Il(e),a=Il(e),o=yl(e),l=new Uint8Array(o);for(let d=0;de+t,0);return{headerStartPos:t,totalSize:c+u,dataStartPos:t+c,dataSize:u,headerType:i,granulePosition:r,serialNumber:n,sequenceNumber:s,checksum:a,lacingValues:l}},ts=(e,t)=>{for(;e.filePos>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===$n)return!0;e.skip(1)}}return!1};class is extends pr{constructor(e){super(e),this.metadataPromise=null,this.bitstreams=[],this.trackBackings=[],this.metadataTags={},this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=0;for(;;){let t=this.reader.requestSliceRange(e,Jn,Zn);if(at(t)&&(t=yield t),!t)break;const i=es(t);if(!i)break;if(!!!(2&i.headerType))break;this.bitstreams.push({serialNumber:i.serialNumber,bosPage:i,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=i.headerStartPos+i.totalSize}for(const t of this.bitstreams){const e=yield this.readPacket(t.bosPage,0);e&&(e.data.byteLength>=7&&1===e.data[0]&&118===e.data[1]&&111===e.data[2]&&114===e.data[3]&&98===e.data[4]&&105===e.data[5]&&115===e.data[6]?yield this.readVorbisMetadata(e,t):e.data.byteLength>=8&&79===e.data[0]&&112===e.data[1]&&117===e.data[2]&&115===e.data[3]&&72===e.data[4]&&101===e.data[5]&&97===e.data[6]&&100===e.data[7]&&(yield this.readOpusMetadata(e,t)),null!==t.codecInfo.codec&&this.trackBackings.push(new rs(t,this)))}}))()})}readVorbisMetadata(e,t){return Y(this,null,function*(){let i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;if(i=yield this.findNextPacketStart(r),!i)return;const n=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!n)return;if(3!==r.data[0]||5!==n.data[0])return;const s=[],a=e=>{for(;s.push(Math.min(255,e)),!(e<255);)e-=255};a(e.data.length),a(r.data.length);const o=new Uint8Array(1+s.length+e.data.length+r.data.length+n.data.length);o[0]=2,o.set(s,1),o.set(e.data,1+s.length),o.set(r.data,1+s.length+e.data.length),o.set(n.data,1+s.length+e.data.length+r.data.length),t.codecInfo.codec="vorbis",t.description=o,t.lastMetadataPacket=n;const l=de(e.data);t.numberOfChannels=l.getUint8(11),t.sampleRate=l.getUint32(12,!0);const c=l.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&c),1<<(c>>4)],modeBlockflags:yi(n.data).modeBlockflags},wi(r.data.subarray(7),this.metadataTags)})}readOpusMetadata(e,t){return Y(this,null,function*(){const i=yield this.findNextPacketStart(e);if(!i)return;const r=yield this.readPacket(i.startPage,i.startSegmentIndex);if(!r)return;t.codecInfo.codec="opus",t.description=e.data,t.lastMetadataPacket=r;const n=(e=>{const t=de(e),i=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),s=t.getInt16(16,!0),a=t.getUint8(18);let o=null;return a&&(o=e.subarray(19,21+i)),{outputChannelCount:i,preSkip:r,inputSampleRate:n,outputGain:s,channelMappingFamily:a,channelMappingTable:o}})(e.data);t.numberOfChannels=n.outputChannelCount,t.sampleRate=tr,t.codecInfo.opusInfo={preSkip:n.preSkip},wi(r.data.subarray(8),this.metadataTags)})}readPacket(e,t){return Y(this,null,function*(){ne(te+t.length,0);if(0===o)return null;const l=new Uint8Array(o);let c=0;for(let e=0;e{let t="audio/ogg";e.codecStrings&&(t+=`; codecs="${[...new Set(e.codecStrings)].join(", ")}"`);return t})({codecStrings:(yield Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null})))).filter(Boolean)})})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}class rs{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new Se,this.internalSampleRate="opus"===e.codecInfo.codec?tr:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return ne(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}getDecoderConfig(){return Y(this,null,function*(){var e;return ne(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:null!=(e=this.bitstream.description)?e:void 0}})}getName(){return null}getLanguageCode(){return Le}getDisposition(){return V(H({},Pt),{primary:!1})}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(ne(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:n}=Yn(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new kr(i.metadataOnly?gr:e.data,"key",Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:n}),s}getFirstPacket(e){return Y(this,null,function*(){ne(this.bitstream.lastMetadataPacket);const t=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let i=0;"opus"===this.bitstream.codecInfo.codec&&(ne(this.bitstream.codecInfo.opusInfo),i-=this.bitstream.codecInfo.opusInfo.preSkip);const r=yield this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:i,vorbisLastBlocksize:null},e)})}getNextPacket(e,t){return Y(this,null,function*(){const i=this.encodedPacketToMetadata.get(e);if(!i)throw new Error("Packet was not created from this track.");const r=yield this.demuxer.findNextPacketStart(i.packet);if(!r)return null;const n=i.timestampInSamples+i.durationInSamples,s=yield this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:n,vorbisLastBlocksize:i.vorbisBlockSize},t)})}getPacket(e,t){return Y(this,null,function*(){var i,r;if(null===this.demuxer.reader.fileSize)return this.getPacketSequential(e,t);const n=Ue(e*this.internalSampleRate);if(0===n)return this.getFirstPacket(t);if(n<0)return null;ne(this.bitstream.lastMetadataPacket);const s=yield this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!s)return null;let a=s.startPage,o=this.demuxer.reader.fileSize;const l=[a];e:for(;a.headerStartPos+a.totalSizen?o=c.headerStartPos:(a=c,l.push(c));continue e}i=c.headerStartPos+c.totalSize}}let c=s.startPage;for(const e of l){if(e.granulePosition===a.granulePosition)break;(!c||e.headerStartPos>c.headerStartPos)&&(c=e)}let u=c;const d=[u];for(;u.serialNumber!==this.bitstream.serialNumber||u.granulePosition!==a.granulePosition;){const e=u.headerStartPos+u.totalSize;let t=this.demuxer.reader.requestSliceRange(e,Jn,Zn);at(t)&&(t=yield t),ne(t);const i=es(t);ne(i),u=i,u.serialNumber===this.bitstream.serialNumber&&d.push(u)}ne(-1!==u.granulePosition);let h,f,m=null,p=u,g=0;if(u.headerStartPos===s.startPage.headerStartPos)h=this.granulePositionToTimestampInSamples(0),f=!0,m=0;else{h=0,f=!1;for(let t=u.lacingValues.length-1;t>=0;t--){if(u.lacingValues[t]<255){m=t+1;break}}if(null===m)throw new Error("Invalid page with granule position: no packets end on this page.");g=m-1;const e={data:gr,endPage:p,endSegmentIndex:g};if(yield this.demuxer.findNextPacketStart(e)){const e=ss(d,u,m);ne(e);const t=ns(d,e.page,e.segmentIndex);t&&(u=t.page,m=t.segmentIndex)}else for(;;){const e=ss(d,u,m);if(!e)break;const t=ns(d,e.page,e.segmentIndex);if(!t)break;if(u=t.page,m=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,g=e.segmentIndex;break}}}let k=null,y=null;for(;null!==u;){ne(null!==m);const e=yield this.demuxer.readPacket(u,m);if(!e)break;if(!(u.headerStartPos===s.startPage.headerStartPos&&mn||Math.max(a.timestampInSamples,0)===n))break}const a=yield this.demuxer.findNextPacketStart(e);if(!a)break;u=a.startPage,m=a.startSegmentIndex}return k})}getPacketSequential(e,t){return Y(this,null,function*(){const i=yield this.sequentialScanMutex.acquire();try{const i=Ue(e*this.internalSampleRate);e=i/this.internalSampleRate;const r=Be(this.sequentialScanCache,i,e=>e.timestampInSamples);let n;if(-1!==r){const e=this.sequentialScanCache[r];n=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else n=yield this.getFirstPacket(t);let s=0;for(;n&&n.timestampe)break;if(n=i,s++,100===s){s=0;const e=this.encodedPacketToMetadata.get(n);ne(e),this.sequentialScanCache.length>0&&ne(ae(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return n}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const ns=(e,t,i)=>{let r=t,n=i;e:for(;;){for(n--;n>=0;n--){if(r.lacingValues[n]<255){n++;break e}}ne(-1===n);if(!(1&r.headerType)){n=0;break}const t=Fe(e,e=>e.headerStartPos{if(i>0)return{page:t,segmentIndex:i-1};const r=Fe(e,e=>e.headerStartPosY(this,null,function*(){var e,t;let i=this.reader.requestSlice(0,12);at(i)&&(i=yield i),ne(i);const r=Al(i,4),n="RIFX"!==r,s="RF64"===r,a=Sl(i,n);let o=s?this.reader.fileSize:Math.min(a+8,null!=(e=this.reader.fileSize)?e:1/0);if("WAVE"!==Al(i,4))throw new Error("Invalid WAVE file - wrong format");let l=0,c=null,u=i.filePos;for(;null===o||u=18&&357!==n){const e=bl(r,i),s=t-18;if(Math.min(s,e)>=22&&n===as.EXTENSIBLE){r.skip(6);const e=kl(r,16);n=e[0]|e[1]<<8}}if(n!==as.MULAW&&n!==as.ALAW||(l=8),n!==as.PCM&&n!==as.IEEE_FLOAT&&n!==as.ALAW&&n!==as.MULAW)throw new Error(`Unsupported WAVE codec (format tag ${n}). Only integer/float PCM, A-law, and \u03bc-law are supported.`);if(n===as.PCM&&![8,16,24,32].includes(l))throw new Error(`Unsupported WAVE PCM bit depth (${l}). Only 8, 16, 24, and 32 bits are supported.`);if(n===as.IEEE_FLOAT&&![32,64].includes(l))throw new Error(`Unsupported WAVE float bit depth (${l}). Only 32 and 64 bits are supported.`);this.audioInfo={format:n,numberOfChannels:s,sampleRate:a,sampleSizeInBytes:Math.ceil(l/8),blockSizeInBytes:o}})}parseListChunk(e,t,i){return Y(this,null,function*(){var r,n,s,a,o,l,c,u,d,h,f;let m=this.reader.requestSlice(e,t);if(at(m)&&(m=yield m),!m)return;const p=Al(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=Al(m,4),t=Sl(m,i),p=kl(m,t);let k=0;for(let i=0;i0&&(null!=(l=this.metadataTags).trackNumber||(l.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&(null!=(c=this.metadataTags).tracksTotal||(c.tracksTotal=i))}break;case"ICRD":case"IDIT":{const e=new Date(y);Number.isNaN(e.getTime())||null!=(u=this.metadataTags).date||(u.date=e)}break;case"YEAR":{const e=Number.parseInt(y,10);Number.isInteger(e)&&e>0&&(null!=(d=this.metadataTags).date||(d.date=new Date(e,0,1)))}break;case"IGNR":case"GENR":null!=(h=this.metadataTags).genre||(h.genre=y);break;case"ICMT":case"CMNT":case"COMM":null!=(f=this.metadataTags).comment||(f.comment=y)}g+=8+t+(1&t)}})}parseId3Chunk(e,t){return Y(this,null,function*(){let i=this.reader.requestSlice(e,t);if(at(i)&&(i=yield i),!i)return;const r=Vl(i);if(r){const n=t-Ul;if(r.size=Math.min(r.size,n),r.size>0){const t=i.slice(e+Ul,r.size);jl(t,r,this.metadataTags)}}})}getCodec(){if(ne(this.audioInfo),this.audioInfo.format===as.MULAW)return"ulaw";if(this.audioInfo.format===as.ALAW)return"alaw";if(this.audioInfo.format===as.PCM){if(1===this.audioInfo.sampleSizeInBytes)return"pcm-u8";if(2===this.audioInfo.sampleSizeInBytes)return"pcm-s16";if(3===this.audioInfo.sampleSizeInBytes)return"pcm-s24";if(4===this.audioInfo.sampleSizeInBytes)return"pcm-s32"}if(this.audioInfo.format===as.IEEE_FLOAT){if(4===this.audioInfo.sampleSizeInBytes)return"pcm-f32";if(8===this.audioInfo.sampleSizeInBytes)return"pcm-f64"}ne(!1)}getMimeType(){return Y(this,null,function*(){return"audio/wav"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){return yield this.readMetadata(),this.metadataTags})}}const cs=2048;class us{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.format}getDecoderConfig(){return Y(this,null,function*(){const e=this.demuxer.getCodec();return e?(ne(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null})}getNumberOfChannels(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return ne(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return Le}getDisposition(){return H({},Pt)}getPacketAtIndex(e,t){return Y(this,null,function*(){ne(e>=0),ne(this.demuxer.audioInfo);const i=e*cs*this.demuxer.audioInfo.blockSizeInBytes;if(i>=this.demuxer.dataSize)return null;const r=Math.min(cs*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-i);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);if(at(e)&&(e=yield e),!e)return null}let n;if(t.metadataOnly)n=gr;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+i,r);at(e)&&(e=yield e),ne(e),n=kl(e,r)}const s=e*cs/this.demuxer.audioInfo.sampleRate,a=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new kr(n,"key",s,a,e,r)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getPacket(e,t){return Y(this,null,function*(){ne(this.demuxer.audioInfo);const i=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/cs,(this.demuxer.dataSize-1)/(cs*this.demuxer.audioInfo.blockSizeInBytes)));if(i<0)return null;const r=yield this.getPacketAtIndex(i,t);if(r)return r;if(0===i)return null;ne(null===this.demuxer.reader.fileSize);let n=yield this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;n;){const e=yield this.getNextPacket(n,t);if(!e)break;n=e}return n})}getNextPacket(e,t){ne(this.demuxer.audioInfo);const i=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/cs);return this.getPacketAtIndex(i+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const ds=e=>{const t=e.filePos,i=kl(e,9),r=new It(i);if(4095!==r.readBits(12))return null;r.skipBits(1);if(0!==r.readBits(2))return null;const n=r.readBits(1),s=r.readBits(2)+1,a=r.readBits(4);if(15===a)return null;r.skipBits(1);const o=r.readBits(3);if(0===o)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);const l=r.readBits(13);r.skipBits(11);const c=r.readBits(2)+1;if(1!==c)throw new Error("ADTS frames with more than one AAC frame are not supported.");let u=null;return 1===n?e.filePos-=2:u=r.readBits(16),{objectType:s,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:l,numberOfAacFrames:c,crcCheck:u,startPos:t}},hs=1024;class fs extends pr{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new Se,this.lastSampleLoaded=!1,this.lastLoadedPos=0,this.nextTimestampInSamples=0,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)yield this.advanceReader();ne(this.firstFrameHeader),this.trackBackings=[new ms(this)]}))()})}advanceReader(){return Y(this,null,function*(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=Vl(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const t=ds(e);if(!t)return void(this.lastSampleLoaded=!0);if(null!==this.reader.fileSize&&t.startPos+t.frameLength>this.reader.fileSize)return void(this.lastSampleLoaded=!0);this.firstFrameHeader||(this.firstFrameHeader=t);const i=xt[t.samplingFrequencyIndex];ne(void 0!==i);const r=hs/i,n={timestamp:this.nextTimestampInSamples/i,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(n),this.nextTimestampInSamples+=hs,this.lastLoadedPos=t.startPos+t.frameLength})}getMimeType(){return Y(this,null,function*(){return"audio/aac"})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackings})}getMetadataTags(){return Y(this,null,function*(){const e=yield this.readingMutex.acquire();try{if(yield this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let e=0;for(;;){let t=this.reader.requestSlice(e,Ul);if(at(t)&&(t=yield t),!t)break;const i=Vl(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(at(r)&&(r=yield r),!r)break;jl(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}})}}class ms{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/hs}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getName(){return null}getLanguageCode(){return Le}getCodec(){return"aac"}getInternalCodecId(){return ne(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){ne(this.demuxer.firstFrameHeader);const e=Ct[this.demuxer.firstFrameHeader.channelConfiguration];return ne(void 0!==e),e}getSampleRate(){ne(this.demuxer.firstFrameHeader);const e=xt[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return ne(void 0!==e),e}getDisposition(){return H({},Pt)}getDecoderConfig(){return Y(this,null,function*(){return ne(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}})}getPacketAtIndex(e,t){return Y(this,null,function*(){if(-1===e)return null;const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=gr;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(at(e)&&(e=yield e),!e)return null;r=kl(e,i.dataSize)}return new kr(r,"key",i.timestamp,i.duration,e,i.dataSize)})}getFirstPacket(e){return this.getPacketAtIndex(0,e)}getNextPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=Ce(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(-1===i)throw new Error("Packet was not created from this track.");const r=i+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{i()}})}getPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.timestamp);if(-1===i&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,t);if(i>=0&&i+1Y(this,null,function*(){var e;let t=0;for(;;){let e=this.reader.requestSlice(t,Ul);if(at(e)&&(e=yield e),!e)return void(this.lastSampleLoaded=!0);const i=Vl(e);if(!i)break;let r=this.reader.requestSlice(e.filePos,i.size);at(r)&&(r=yield r),ne(r),jl(r,i,this.metadataTags),t=e.filePos+i.size}for(t+=4;null===this.reader.fileSize||ts.end-6)return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:s.end-e,isLastFrame:!0};if(255===yl(s)){const t=s.filePos;if(yl(s)!==(1===this.blockingBit?249:248)){s.filePos=t;continue}s.skip(-2);const i=s.filePos-e,r=this.readFlacFrameHeader({slice:s,isFirstPacket:!1});if(!r){s.filePos=t;continue}if(0===this.blockingBit){if(r.num-a.num!==1){s.filePos=t;continue}}else if(r.num-a.num!==a.blockSize){s.filePos=t;continue}return{num:a.num,blockSize:a.blockSize,sampleRate:a.sampleRate,size:i,isLastFrame:!1}}}})}readFlacFrameHeader({slice:e,isFirstPacket:t}){const i=e.filePos,r=kl(e,4),n=new It(r);if(32764!==n.readBits(15))return null;if(null===this.blockingBit){ne(t);const e=n.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){ne(!t);if(1!==n.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");ne(!t);if(0!==n.readBits(1))return null}const s=(e=>0===e?null:1===e?192:e>=2&&e<=5?144*q(2,e):6===e?"uncommon-u8":7===e?"uncommon-u16":e>=8&&e<=15?q(2,e):null)(n.readBits(4));if(!s)return null;ne(this.audioInfo);const a=((e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}})(n.readBits(4),this.audioInfo.sampleRate);if(!a)return null;n.readBits(4),n.readBits(3);if(0!==n.readBits(1))return null;const o=(e=>{let t=0;const i=new It(kl(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],n=t-1,s=new It(kl(e,n)),a=8-t-1;for(let o=0;oe|t<"uncommon-u16"===t?Tl(e)+1:"uncommon-u8"===t?yl(e)+1:"number"===typeof t?t:(Me(t),void ne(!1)))(e,s),c=((e,t)=>"uncommon-u16"===t?Tl(e):"uncommon-u16-10"===t?10*Tl(e):"uncommon-u8"===t?yl(e):"number"===typeof t?t:null)(e,a);if(null===c)return null;if(c!==this.audioInfo.sampleRate)return null;const u=e.filePos-i,d=yl(e);e.skip(-u),e.skip(-1);const h=(e=>{let t=0;for(const i of e){t^=i;for(let e=0;e<8;e++)0!==(128&t)?t=t<<1^7:t<<=1,t&=255}return t})(kl(e,u));return d!==h?null:{num:o,blockSize:l,sampleRate:c}}advanceReader(){return Y(this,null,function*(){yield this.readMetadata(),ne(null!==this.lastLoadedPos),ne(this.audioInfo);const e=this.lastLoadedPos,t=yield this.readNextFlacFrame({startPos:e,isFirstPacket:0===this.loadedSamples.length});if(!t)return void(this.lastSampleLoaded=!0);const i=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(r),t.isLastFrame&&(this.lastSampleLoaded=!0)})}}class gs{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return Le}getTimeResolution(){return ne(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return ne(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}getDisposition(){return H({},Pt)}getDecoderConfig(){return Y(this,null,function*(){return ne(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}})}getPacket(e,t){return Y(this,null,function*(){if(ne(this.demuxer.audioInfo),e<0)return null;const i=yield this.demuxer.readingMutex.acquire();try{for(;;){const i=Be(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(-1===i){yield this.demuxer.advanceReader();continue}const r=this.demuxer.loadedSamples[i],n=r.blockOffset/this.demuxer.audioInfo.sampleRate;if(!(n+r.blockSize/this.demuxer.audioInfo.sampleRate<=e))return this.getPacketAtIndex(i,t);if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);yield this.demuxer.advanceReader()}}finally{i()}})}getNextPacket(e,t){return Y(this,null,function*(){const i=yield this.demuxer.readingMutex.acquire();try{const i=e.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&i>=this.demuxer.loadedSamples.length)return null;for(;i>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(i,t)}finally{i()}})}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}getPacketAtIndex(e,t){return Y(this,null,function*(){const i=this.demuxer.loadedSamples[e];if(!i)return null;let r;if(t.metadataOnly)r=gr;else{let e=this.demuxer.reader.requestSlice(i.byteOffset,i.byteSize);if(at(e)&&(e=yield e),!e)return null;r=kl(e,i.byteSize)}ne(this.demuxer.audioInfo);const n=i.blockOffset/this.demuxer.audioInfo.sampleRate,s=i.blockSize/this.demuxer.audioInfo.sampleRate;return new kr(r,"key",n,s,e,i.byteSize)})}getFirstPacket(e){return Y(this,null,function*(){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)yield this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)})}}const ks=9e4,ys=q(2,33),bs=188,Ts="PES packet is missing PTS where it was expected. PES packets without PTS are not currently supported. If you think this file should be supported, please report it.",vs=new Set([133,134,162]),ws=new Set;class Ss extends pr{constructor(e){super(e),this.metadataPromise=null,this.elementaryStreams=[],this.trackBackingEntries=[],this.packetOffset=0,this.packetStride=-1,this.sectionEndPositions=[],this.seekChunkSize=5242880,this.minReferencePointByteDistance=-1,this.timestampWrapInfo=null,this.reader=e._reader}readMetadata(){return Y(this,null,function*(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){let e=this.reader.requestSlice(0,205);at(e)&&(e=yield e),ne(e);const t=kl(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=bs;else if(71===t[0]&&71===t[204])this.packetOffset=0,this.packetStride=204;else{if(71!==t[4]||71!==t[196])throw new Error("Unreachable.");this.packetOffset=4,this.packetStride=192}this.minReferencePointByteDistance=256*this.packetStride;let i=this.packetOffset,r=null,n=!1,s=!1;for(;;){const e=yield this.readPacketHeader(i);if(!e)break;if(0===e.payloadUnitStartIndicator){i+=this.packetStride;continue}if(s&&!this.elementaryStreams.some(t=>t.pid===e.pid)){i+=this.packetStride;continue}const t=yield this.readSection(i,!0,!s);if(!t)break;const a=3,o=32;let l=!1;if(!s&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i);l=2===e.readBits(8)}}if(0!==t.pid||n)if(t.pid!==r&&!l||s){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const i=Is(this,t,!0);if(!i)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=1===t.randomAccessIndicator,this.input._initInput){const i=(yield this.input._initInput._getDemuxer()).elementaryStreams.find(i=>i.pid===t.pid&&i.info.codec===e.info.codec);if(i){e.info=i.info,e.initialized=!0;break e}}const r=new _s(e,i);if("video"===e.info.type){for(;;){if(r.suppliedPacket=null,yield r.markNextPacket(),"avc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=jt(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];ne(t);const i=Gt(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight;const n=i.pixelAspectRatio.num,s=i.pixelAspectRatio.den;n>0&&s>0&&(n>s?(e.info.squarePixelWidth=Math.round(e.info.width*n/s),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*s/n))),e.info.colorSpace={primaries:pe[i.colourPrimaries],transfer:ke[i.transferCharacteristics],matrix:be[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!r.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=ti(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===Dt.SPS_NUT).nalUnits[0];ne(t);const i=ei(t);e.info.width=i.displayWidth,e.info.height=i.displayHeight,i.pixelAspectRatio.num>i.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*i.pixelAspectRatio.num/i.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*i.pixelAspectRatio.den/i.pixelAspectRatio.num)),e.info.colorSpace={primaries:pe[i.colourPrimaries],transfer:ke[i.transferCharacteristics],matrix:be[i.matrixCoefficients],fullRange:!!i.fullRangeFlag},e.info.reorderSize=i.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:Ji({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},e.info.width===e.info.squarePixelWidth&&e.info.height===e.info.squarePixelHeight||(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(yield r.markNextPacket(),!r.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=pl.tempFromBytes(r.suppliedPacket.data),i=ds(t);if(!i)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");e.info.aacCodecInfo={isMpeg2:!1,objectType:i.objectType},e.info.numberOfChannels=Ct[i.channelConfiguration],e.info.sampleRate=xt[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=Pl(pl.tempFromBytes(r.suppliedPacket.data)),i=ur(t,r.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=mr(i.header.channel),e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=Pi(r.suppliedPacket.data);if(!t)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(3===t.fscod)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=Si[t.acmod]+t.lfeon,e.info.sampleRate=Rt[t.fscod]}else if("eac3"===e.info.codec){const t=Ci(r.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=Bi(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=Ei(t),e.info.sampleRate=i}else{if("dts"!==e.info.codec)throw new Error("Unhandled.");{const t=zi(r.suppliedPacket.data);if(!t)throw new Error("Invalid DTS audio stream; could not read frame header from first packet.");e.info.numberOfChannels=t.numberOfChannels,e.info.sampleRate=t.sampleRate,t.core&&(e.info.dtsFormat=t.hasExtensions?"dtsh":"dtsc")}}e.info.decoderConfig={codec:er({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo,dtsFormat:e.info.dtsFormat}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(12);const r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);const n=e.readBits(10),l=e.pos+8*n;let c=!1;for(;e.pos=4){const t=e.readBits(32);c||(c=1212435798===t||1212436562===t)}e.pos=r}for(e.pos=l;8*(r+a)-e.pos>o;){const t=e.readBits(8);e.skipBits(3);const i=e.readBits(13);e.skipBits(6);const r=e.readBits(10),n=e.pos+8*r;let s=!1,a=!1,o=!1;for(;e.pos=4){const t=e.readBits(32);o||(o=1146376960===(4294967040&t))}e.pos=r}let l=null;const u=c&&vs.has(t)?130:t;switch(u){case 27:case 36:l={type:"video",codec:27===t?"avc":"hevc",decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:case 130:case 138:{let e;e=3===u||4===u?"mp3":15===u?"aac":129===u?"ac3":135===u?"eac3":"dts",l={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:a?l={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:s?l={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1}:o&&(l={type:"audio",codec:"dts",decoderConfig:null,aacCodecInfo:null,dtsFormat:null,numberOfChannels:-1,sampleRate:-1});break;default:ws.has(t)||(vt._warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),ws.add(t))}l&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:l,referencePesPackets:[]})}s=!0}else{const e=new It(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const s=e.readBits(10);for(e.skipBits(40);8*(s+a)-e.pos>o;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==r)throw new Error("Only files with a single program are supported.");r=i}}if(null===r)throw new Error("Program Association Table must link to a Program Map Table.");n=!0}if(s&&this.elementaryStreams.every(e=>e.initialized))break;i+=this.packetStride}if(!s){if(!n)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const a of this.elementaryStreams)a.initialized&&("video"===a.info.type?this.trackBackingEntries.push(new Cs(a)):this.trackBackingEntries.push(new Bs(a)))}))()})}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),this.trackBackingEntries})}getMetadataTags(){return Y(this,null,function*(){return{}})}getMimeType(){return Y(this,null,function*(){yield this.readMetadata();return(e=>{let t="video/MP2T";const i=[...new Set(e.filter(Boolean))];return i.length>0&&(t+=`; codecs="${i.join(", ")}"`),t})(yield Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null}))))})}readSection(e,t,i=!1){return Y(this,null,function*(){let r=e,n=e;const s=[];let a,o=0,l=null,c=!0,u=0;for(;;){const e=yield this.readPacket(n);if(n+=this.packetStride,!e)break;if(l){if(e.pid!==l.pid){if(i)break;continue}if(1===e.payloadUnitStartIndicator)break}else{if(0===e.payloadUnitStartIndicator)break;l=e}const a=!!(2&e.adaptationFieldControl),d=!!(1&e.adaptationFieldControl);let h=0;if(a&&(h=1+e.body[0],e===l&&h>1&&(u=e.body[1]>>6&1)),d&&(0===h?(s.push(e.body),o+=e.body.byteLength):(s.push(e.body.subarray(h)),o+=e.body.byteLength-h)),r=n,!t&&o>=64){c=!1;break}if(-1!==Ce(this.sectionEndPositions,r,e=>e)){c=!1;break}}if(c){const e=Be(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!l)return null;if(1===s.length)a=s[0];else{const e=s.reduce((e,t)=>e+t.length,0);a=new Uint8Array(e);let t=0;for(const i of s)a.set(i,t),t+=i.length}return{startPos:e,endPos:t?r:null,pid:l.pid,payload:a,randomAccessIndicator:u}})}readPacketHeader(e){return Y(this,null,function*(){let t=this.reader.requestSlice(e,4);if(at(t)&&(t=yield t),!t)return null;if(71!==yl(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=Tl(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:yl(t)>>4&3}})}readPacket(e){return Y(this,null,function*(){let t=this.reader.requestSlice(e,bs);if(at(t)&&(t=yield t),!t)return null;const i=kl(t,bs);if(71!==i[0])throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const r=(i[1]<<8)+i[2];return{payloadUnitStartIndicator:r>>14&1,pid:8191&r,adaptationFieldControl:i[3]>>4&3,body:i.subarray(4)}})}normalizeTimestamp(e){if(!this.timestampWrapInfo){const t=54e5;this.timestampWrapInfo={reference:e-t,offset:e>=ys-t?-ys:ys}}const{reference:t,offset:i}=this.timestampWrapInfo;return i<0&&e>=t||i>0&&e{if(t.payload.byteLength<3)return null;const r=new It(t.payload);if(1!==r.readBits(24))return null;const n=r.readBits(8);if(r.skipBits(16),188===n||190===n||191===n||240===n||241===n||255===n||242===n||248===n)return null;r.skipBits(8);const s=r.readBits(2);r.skipBits(14);let a=null;if(2===s||3===s)a=0,r.skipBits(4),a+=r.readBits(3)*(1<<30),r.skipBits(1),a+=32768*r.readBits(15),r.skipBits(1),a+=r.readBits(15),a=e.normalizeTimestamp(a);else if(i)throw new Error(Ts);return{sectionStartPos:t.startPos,sectionEndPos:t.endPos,pts:a,randomAccessIndicator:t.randomAccessIndicator}},Is=(e,t,i)=>{ne(null!==t.endPos);const r=Ps(e,t,i);if(!r)return null;const n=new It(t.payload);n.skipBits(32);const s=n.readBits(16);n.skipBits(16);const a=n.readBits(8),o=n.pos+8*a;n.pos=o;const l=o/8;ne(Number.isInteger(l));const c=t.payload.subarray(l,s>0?6+s:t.payload.byteLength);return V(H({},r),{data:c})};class xs{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){const e=this.elementaryStream.demuxer,t=this.elementaryStream.info.type;let i=0;for(const r of e.trackBackingEntries)if(r.getType()===t&&i++,ne(r instanceof xs),r.elementaryStream===this.elementaryStream)break;return i}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return Le}getDisposition(){return V(H({},Pt),{primary:!1})}getTimeResolution(){return ks}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return BigInt("1")}getBitrate(){return null}getAverageBitrate(){return null}getDurationFromMetadata(){return Y(this,null,function*(){return null})}getLiveRefreshInterval(){return Y(this,null,function*(){return null})}createEncodedPacket(e,t,i){let r;return r=this.allPacketsAreKeyPackets()||1===e.randomAccessIndicator?"key":"delta",new kr(i.metadataOnly?gr:e.data,r,e.pts/ks,Math.max(t/ks,0),e.sequenceNumber,e.data.byteLength)}getFirstPacket(e){return Y(this,null,function*(){const t=this.elementaryStream.firstSection;ne(t);const i=Is(this.elementaryStream.demuxer,t,!0);ne(i);const r=new _s(this.elementaryStream,i),n=new Rs(this,r),s=yield n.readNext();if(!s)return null;const a=this.createEncodedPacket(s.packet,s.duration,e);return this.packetBuffers.set(a,n),this.packetSectionStarts.set(a,s.packet.sectionStartPos),a})}getNextPacket(e,t){return Y(this,null,function*(){let i=this.packetBuffers.get(e);if(i){const r=yield i.readNext();if(!r)return null;this.packetBuffers.delete(e);const n=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(n,i),this.packetSectionStarts.set(n,r.packet.sectionStartPos),n}const r=this.packetSectionStarts.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");const n=this.elementaryStream.demuxer,s=yield n.readSection(r,!0);ne(s);const a=Is(n,s,!0);ne(a);const o=new _s(this.elementaryStream,a);i=new Rs(this,o);const l=e.sequenceNumber;for(;;){const e=yield i.readNext();if(!e)return null;if(e.packet.sequenceNumber>l){const r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,i),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}})}getNextKeyPacket(e,t){return Y(this,null,function*(){let i=e;for(;;){if(i=yield this.getNextPacket(i,t),!i)return null;if("key"===i.type)return i}})}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}doPacketLookup(e,t,i){return Y(this,null,function*(){var r,n,s,a,o,l;const c=Ue(e*ks),u=this.elementaryStream.demuxer,{reader:d,seekChunkSize:h}=u,f=this.elementaryStream.pid,m=(e,t,i)=>Y(this,null,function*(){let r=e;for(;re.pts),T=-1!==b?y[b]:null;if(T&&c-T.pts<45e3)k=T.sectionStartPos;else{let e=0;if(null!==d.fileSize){const t=Math.ceil(d.fileSize/h);if(t>1){let i=0,r=t-1;for(e=i;i<=r;){const t=Math.floor((i+r)/2),n=He(t*h,u.packetStride)+g.sectionStartPos,s=n+h,a=yield m(n,s,!1);a?a.pesPacketHeader.pts<=c?(e=t,i=t+1):r=t-1:r=t-1}}}k=He(e*h,u.packetStride)+g.sectionStartPos}const v=yield m(k,null!=(r=d.fileSize)?r:1/0,!1);let w=null!=(n=null==v?void 0:v.pesPacketHeader)?n:null;w||(w=g);const S=this.getReorderSize(),P=(e,t)=>Y(this,null,function*(){var r,n;const s=yield u.readSection(e,!0);ne(s);const a=Is(u,s,!0);ne(a);const o=new _s(this.elementaryStream,a),l=new Rs(this,o);for(;;){if((null!=(n=null==(r=ae(l.presentationOrderPackets))?void 0:r.pts)?n:-1/0)>=c)break;if(!(yield l.readNextPacket()))break}const d=Ae(l.presentationOrderPackets,t);if(-1===d)return null;const h=l.presentationOrderPackets[d],f=0===d?0:h.pts-l.presentationOrderPackets[d-1].pts;for(;l.decodeOrderPackets[0]!==h;)l.decodeOrderPackets.shift();l.lastDuration=f;const m=yield l.readNext();ne(m);const p=this.createEncodedPacket(m.packet,m.duration,i);return this.packetBuffers.set(p,l),this.packetSectionStarts.set(p,m.packet.sectionStartPos),p});if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=w.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){if(e.pts>c)break e;w=e,Es(this.elementaryStream,w);break}}}e+=u.packetStride}}e:for(let e=0;e=u.packetOffset;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,!1);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){w=e;break}}}e-=u.packetStride}}return P(w.sectionStartPos,e=>e.pts<=c)}{let e=k,t=null;const i=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let r=null;const n=e<=g.sectionStartPos;let k,y=null;if(n)k=g,y=p;else{const t=yield m(e,null!=(s=d.fileSize)?s:1/0,i);k=null!=(a=null==t?void 0:t.pesPacketHeader)?a:null,y=null!=(o=null==t?void 0:t.section)?o:null}let b=!1,T=0;e:for(;k&&!(null!==t&&k.sectionStartPos>=t);){if(k.pts<=c){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===k.randomAccessIndicator;else{ne(y);const t=Is(u,y,!0);ne(t);const i=new _s(this.elementaryStream,t);yield i.markNextPacket(),e=1===(null==(l=i.suppliedPacket)?void 0:l.randomAccessIndicator)}e&&(r=k)}if(k.pts>c&&(b=!0),b&&(T++,T>S))break;let e=k.sectionStartPos+u.packetStride;for(;;){const t=yield u.readPacketHeader(e);if(!t)break e;if(t.pid===f&&1===t.payloadUnitStartIndicator){const t=yield u.readSection(e,i);if(t){const e=Ps(u,t,!1);if(e&&null!==e.pts){k=e,y=t,Es(this.elementaryStream,k);break}}}e+=u.packetStride}}if(r){let e=r;if(0===T)e:for(let r=0;r=u.packetOffset;){const r=yield u.readPacketHeader(t);if(!r)break e;if(r.pid===f&&1===r.payloadUnitStartIndicator){const r=yield u.readSection(t,i);if(r){const t=Ps(u,r,!1);if(t&&null!==t.pts){e=t;break}}}t-=u.packetStride}}const t=yield P(e.sectionStartPos,e=>e.pts<=c&&1===e.randomAccessIndicator);return ne(t),t}if(n)return null;t=e,e=Math.max(He(e-g.sectionStartPos-h,u.packetStride)+g.sectionStartPos,g.sectionStartPos)}}})}}class Cs extends xs{getType(){return"video"}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getSquarePixelWidth(){return this.elementaryStream.info.squarePixelWidth}getSquarePixelHeight(){return this.elementaryStream.info.squarePixelHeight}getRotation(){return 0}getColorSpace(){return Y(this,null,function*(){return this.elementaryStream.info.colorSpace})}canBeTransparent(){return Y(this,null,function*(){return!1})}getDecoderConfig(){return Y(this,null,function*(){return ne(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class Bs extends xs{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}getDecoderConfig(){return Y(this,null,function*(){return ne(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig})}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const Es=(e,t)=>{const i=e.referencePesPackets,r=Be(i,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){const n=i[r];if(t.pts<=n.pts)return!1;const s=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return ne(e),e}bufferData(e){return Y(this,null,function*(){const t=this.endPos+e;for(;this.endPos=c)break;u=t;const r=o+u;if(u+3>=c){this.seekTo(r);break}const d=l[u+1],h=l[u+2],f=l[u+3];let m=0;if(0===d&&0===h&&1===f?m=4:0===d&&1===h&&(m=3),0===m){u++;continue}const p=r;null!=n||(n=p);const g=u+m,k=g+i,y=6;if(k+("avc"===e?y:1)>c){this.seekTo(r);break}const b=l[g];let T,v,w;if("avc"===e)T=Ut(b),v=T===At.NON_IDR_SLICE||T===At.SLICE_DPA||T===At.IDR,w=T===At.SEI||T===At.SPS||T===At.PPS||T===At.AUD;else{T=Zt(b);if(((1&b)<<5|l[g+1]>>3)>0){u+=m;continue}v=T<=Dt.RASL_R||T>=Dt.BLA_W_LP&&T<=21,w=T>=Dt.VPS_NUT&&T<=37||T===Dt.PREFIX_SEI_NUT||T>=41&&T<=44||T>=48&&T<=55}let S=!1;if(v){let t;if("avc"===e){const e=l.subarray(k,k+y),i=oe(new It(e));t=!s||i<=a,a=i}else t=l[k]>>7===1;t&&(s?S=!0:s=!0)}else w&&s&&(S=!0);if(S){const e=p-n;return this.seekTo(n),this.supplyPacket(e,0)}u+=m}if(rn){const e=this.endPos-n;return this.seekTo(n),this.supplyPacket(e,0)}}else{const n=r.info.codec,s=128;for(;;){let a=this.ensureBuffered(s);at(a)&&(a=yield a);const o=this.currentPos;for(;this.currentPos-o>6,a=63&i[4];if(3===n||a>37){this.seekTo(e+1);continue}const o=Ii[3*a+n];ne(void 0!==o),this.seekTo(e),t=this.ensureBuffered(o),at(t)&&(t=yield t);const l=Math.round(13824e4/r.info.sampleRate);return this.supplyPacket(t,l)}if("eac3"===n){if(11!==s)continue;this.skip(-1);const e=this.currentPos;let t=this.ensureBuffered(5);if(at(t)&&(t=yield t),t<5)return;const i=this.readBytes(5);if(11!==i[0]||119!==i[1]){this.seekTo(e+1);continue}const n=2*(((7&i[2])<<8|i[3])+1),a=3===i[4]>>6?3:i[4]>>4&3,o=xi[a];this.seekTo(e),t=this.ensureBuffered(n),at(t)&&(t=yield t);const l=256*o,c=Math.round(l*ks/r.info.sampleRate);return this.supplyPacket(t,c)}if("dts"===n){if(127!==s&&100!==s)continue;this.skip(-1);const n=this.currentPos;let a=this.ensureBuffered(18);if(at(a)&&(a=yield a),a<18)return;const o=this.readBytes(18),l=Ui(o);let c=l?null:qi(o);if(!l&&!c){this.seekTo(n+1);continue}if(c&&!c.asset){this.seekTo(n);const t=Math.min(c.frameSize,4096);let i=this.ensureBuffered(t);at(i)&&(i=yield i),c=null!=(e=qi(this.readBytes(i)))?e:c}let u=l?l.frameSize:c.frameSize;if(l){let e=4*Math.ceil(l.frameSize/4);for(;;){this.seekTo(n);const t=e+10;let i=this.ensureBuffered(t);if(at(i)&&(i=yield i),i=0)}readNext(){return Y(this,null,function*(){if(0===this.decodeOrderPackets.length){if(!(yield this.readNextPacket()))return null}yield this.ensureCurrentPacketHasNext();const e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);let i;if(ne(-1!==t),t===this.presentationOrderPackets.length-1)i=this.lastDuration;else{i=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=i}for(this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){const e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:i}})}readNextPacket(){return Y(this,null,function*(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||(yield this.context.markNextPacket()),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)})}ensureCurrentPacketHasNext(){return Y(this,null,function*(){const e=this.decodeOrderPackets[0];for(ne(e);;){const t=this.presentationOrderPackets.indexOf(e);if(-1!==t&&t<=this.presentationOrderPackets.length-2)break;if(!(yield this.readNextPacket()))break}})}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;ie.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const Fs="application/vnd.apple.mpegurl",As="#EXT-X-STREAM-INF:",Ms="#EXT-X-I-FRAME-STREAM-INF:",Ds="#EXT-X-MEDIA:",Ns="#EXTINF:",Os="#EXT-X-MAP:",zs="#EXT-X-KEY:",Ls="#EXT-X-MEDIA-SEQUENCE:",Us="#EXT-X-BYTERANGE:",qs="#EXT-X-PROGRAM-DATE-TIME:",Ws="#EXT-X-TARGETDURATION:",Hs="#EXT-X-PLAYLIST-TYPE:",Vs=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class js{constructor(e){this._attributes={};let t="",i="",r=!1,n=!1;for(let s=0;sY(this,null,function*(){const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=ft(e,e=>"video"===e.getType())+1;e.push(new $s(this,t,i))}else if("audio"===t.type){const i=ft(e,e=>"audio"===e.getType())+1;e.push(new Gs(this,t,i))}}else{if(this.firstSegment=yield this.getFirstSegment({}),!this.firstSegment)return[];const t=this.getInputForSegment(this.firstSegment),i=yield t.getTracks();for(const r of i)if("video"===r.type){const t=ft(e,e=>"video"===e.getType())+1;e.push(new $s(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=ft(e,e=>"audio"===e.getType())+1;e.push(new Gs(this,{id:e.length+1,type:"audio"},t))}}return e}))()})}getFirstTimestampForInput(e){return Y(this,null,function*(){const t=this.firstTimestampCache.get(e);if(void 0!==t)return t;const i=yield e.getFirstTimestamp();return this.firstTimestampCache.set(e,i),i})}getMediaOffset(e,t){return Y(this,null,function*(){var i;const r=null!=(i=e.firstSegment)?i:e;let n;if(this.firstSegmentFirstTimestamps.has(r))n=this.firstSegmentFirstTimestamps.get(r);else{const e=this.getInputForSegment(r);n=yield this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(r,n)}if(r===e)return r.timestamp-n;const s=yield this.getFirstTimestampForInput(t),a=e.timestamp-r.timestamp,o=s-n-a;return Math.abs(o)<=Math.min(.25,a)?r.timestamp-n:e.timestamp-s})}dispose(){for(const e of this.inputCache)e.input.dispose();this.inputCache.length=0}}class Xs{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.firstSegment=null,this.segmentedInput=e,this.decl=t,this.number=i}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>Y(this,null,function*(){var e,t;if(null!=(e=this.segmentedInput).firstSegment||(e.firstSegment=yield this.segmentedInput.getFirstSegment({})),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let i=this.segmentedInput.firstSegment,r=null;for(;i;){const e=this.segmentedInput.getInputForSegment(i);if(r=null!=(t=(yield e.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number))?t:null,r)break;i=yield this.segmentedInput.getNextSegment(i,{})}if(!r)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=r,this.firstSegment=i}))()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}getHasOnlyKeyPackets(){return this.delegate(()=>{var e,t,i;return null!=(i=null==(t=(e=this.firstInputTrack._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:null})}getPairingMask(){return BigInt("1")}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}isRelativeToUnixEpoch(){return Y(this,null,function*(){return yield this.hydrate(),ne(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp})}getUnixTimeForTimestamp(e){return this.segmentedInput.getUnixTimeForTimestamp(e)}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}createAdjustedPacket(e,t,i){return Y(this,null,function*(){ne(e.sequenceNumber>=0),ne(this.segmentedInput.firstSegment);const r=yield this.segmentedInput.getMediaOffset(t,i.input),n=t.timestamp-this.segmentedInput.firstSegment.timestamp,s=e.clone({timestamp:We(e.timestamp+r,yield i.getTimeResolution()),sequenceNumber:Math.floor(1e8*n)+e.sequenceNumber});return this.packetInfos.set(s,{segment:t,track:i,sourcePacket:e}),s})}getFirstPacket(e){return Y(this,null,function*(){var t;yield this.hydrate(),ne(this.firstInputTrack),ne(this.firstSegment);let i=this.firstInputTrack,r=this.firstSegment;for(;;){if(i){const t=yield i._backing.getFirstPacket(e);if(t)return this.createAdjustedPacket(t,r,i)}if(r=yield this.segmentedInput.getNextSegment(r,{skipLiveWait:e.skipLiveWait}),!r)break;const n=this.segmentedInput.getInputForSegment(r);i=null!=(t=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number))?t:null}return null})}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}_getNextInternal(e,t,i){return Y(this,null,function*(){const r=this.packetInfos.get(e);if(!r)throw new Error("Packet was not created from this track.");const n=i?yield r.track._backing.getNextKeyPacket(r.sourcePacket,t):yield r.track._backing.getNextPacket(r.sourcePacket,t);if(n)return this.createAdjustedPacket(n,r.segment,r.track);let s=r.segment;for(;;){const e=yield this.segmentedInput.getNextSegment(s,{skipLiveWait:t.skipLiveWait});if(!e)return null;const i=this.segmentedInput.getInputForSegment(e),n=(yield i.getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){s=e;continue}const a=yield n._backing.getFirstPacket(t);return a?this.createAdjustedPacket(a,e,n):null}})}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}_getPacketInternal(e,t,i){return Y(this,null,function*(){let r=yield this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(yield this.hydrate();r;){const n=this.segmentedInput.getInputForSegment(r),s=(yield n.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!s){r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}const a=yield this.segmentedInput.getMediaOffset(r,n),o=e-a,l=i?yield s._backing.getKeyPacket(o,t):yield s._backing.getPacket(o,t);if(l)return this.createAdjustedPacket(l,r,s);r=yield this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait})}return null})}}class $s extends Xs{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}getColorSpace(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())})}canBeTransparent(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())})}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}class Gs extends Xs{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}getDecoderConfig(){return Y(this,null,function*(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())})}}ut();const Qs=1/0;"undefined"!==typeof FinalizationRegistry&&new FinalizationRegistry(e=>{e()});class Ys extends yt{constructor(){super(),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._refFinalizationRegistry=null,this._sizePromise=null,this.onread=null,"undefined"!==typeof FinalizationRegistry&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}getSizeOrNull(){return Y(this,null,function*(){var e;if(this._disposed)throw new fl;return null!=(e=this._sizePromise)?e:this._sizePromise=(()=>Y(this,null,function*(){let e=this._getFileSize();return void 0!==e||(yield this._read(0,1,0,Qs),e=this._getFileSize(),ne(void 0!==e)),e}))()})}getSize(){return Y(this,null,function*(){if(this._disposed)throw new fl;const e=yield this.getSizeOrNull();if(null===e)throw new Error("Cannot determine the size of an unsized source.");return e})}slice(e,t){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(void 0!==t&&(!Number.isInteger(t)||t<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new fa(this,e,t)}_dispatchRead(e,t){var i;null==(i=this.onread)||i.call(this,e,t),this._emit("read",{start:e,end:t})}ref(){return new Js(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,0===this._refCount&&(this._dispose(),this._disposed=!0)}}class Js{constructor(e){var t;if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._incrementRefCount(),null==(t=e._refFinalizationRegistry)||t.register(this,e,this),this._source=e}get source(){if(!this._source)throw new Error("Can't get source; ref has already been freed.");return this._source}get freed(){return this._freed}free(){var e;if(this._freed)throw new Error("Illegal operation: double free on SourceRef.");const t=this.source;ne(t._refCount>0),t._decrementRefCount(),null==(e=t._refFinalizationRegistry)||e.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class Zs extends Ys{constructor(e,t){if("string"!==typeof e)throw new TypeError("rootPath must be a string.");if("function"!==typeof t)throw new TypeError("requestHandler must be a function.");super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){const t=this.requestHandler(e),i=e=>{var t;if(!(e instanceof Ys||e instanceof Js))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof Ys?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return at(t)?t.then(i):i(t)}}const ea=(e,t)=>e.path===t.path;class ta extends Zs{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,i,r){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof Ys?e.ref():e;return this._root=t,this._rootRequest=null,t};at(e)?this._rootRequest=e.then(t):(t(e),ne(this._root))}if(this._rootRequest)return this._rootRequest.then(n=>n.source._read(e,t,i,r))}return this._root.source._read(e,t,i,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}const ia="undefined"!==typeof FinalizationRegistry?new FinalizationRegistry(e=>{e.cancel().catch(()=>{})}):null;class ra extends Ys{constructor(e,t={}){var i;if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!dt(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.useStreamReader&&"boolean"!==typeof t.useStreamReader)throw new TypeError("options.useStreamReader, when provided, must be a boolean.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new ha({maxCacheSize:null!=(i=t.maxCacheSize)?i:8*q(2,20),maxWorkerCount:4,runWorker:this._runWorker.bind(this),onIdleWorkerRemoved:e=>{const t=this._readers.get(e);t&&(this._readers.delete(e),null==ia||ia.unregister(e),t.cancel().catch(()=>{}))},prefetchProfile:da.fileSystem,handleUnhandledError:t.handleUnhandledError}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}_runWorker(e){return Y(this,null,function*(){ne(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!Ze()&&!1!==this._options.useStreamReader){t=this._blob.slice(e.currentPos).stream().getReader(),null==ia||ia.register(e,t,e)}else t=null;this._readers.set(e,t)}for(;e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))&&"undefined"!==typeof window){let e=null;try{"undefined"!==typeof window&&"undefined"!==typeof window.location&&(e=new URL(i instanceof Request?i.url:i,window.location.href).origin)}catch(r){}if(("undefined"===typeof navigator||"boolean"!==typeof navigator.onLine||navigator.onLine)&&null!==e&&e!==window.location.origin)return vt._warn("Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option."),null}return Math.min(q(2,e-2),16)},aa=new Set;class oa extends Zs{constructor(e,t={}){var i,r,n,s;if("string"!==typeof e&&!(e instanceof URL)&&!("undefined"!==typeof Request&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.requestInit&&(!t.requestInit||"object"!==typeof t.requestInit))throw new TypeError("options.requestInit, when provided, must be an object.");if(void 0!==t.getRetryDelay&&"function"!==typeof t.getRetryDelay)throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(void 0!==t.maxCacheSize&&(!dt(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(void 0!==t.parallelism&&(!Number.isInteger(t.parallelism)||t.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(void 0!==t.fetchFn&&"function"!==typeof t.fetchFn)throw new TypeError("options.fetchFn, when provided, must be a function.");if(void 0!==t.handleUnhandledError&&"function"!==typeof t.handleUnhandledError)throw new TypeError("options.handleUnhandledError, when provided, must be a function.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new oa(e.path,this._options)),this._offset=0,this._length=null,this._fileSizeDetermined=!1,this._sequentialBacking=null,this._url=e,this._options=t,this._getRetryDelay=null!=(i=t.getRetryDelay)?i:sa,this._requestInit=H({},t.requestInit);let a=null;if(null==(r=t.requestInit)?void 0:r.headers){const e=H({},Ge(t.requestInit.headers)),i=Object.keys(e).find(e=>"range"===e.toLowerCase());void 0!==i&&(a=e[i],delete e[i],this._requestInit.headers=e)}if(e instanceof Request){const t=e.headers.get("Range");if(null!==t){null!=a||(a=t);const i=new Request(e);i.headers.delete("Range"),this._url=i}}if(null!==a){const e=ca(a);e&&(this._offset=e.offset,this._length=e.length)}this._orchestrator=new ha({maxCacheSize:null!=(n=t.maxCacheSize)?n:64*q(2,20),maxWorkerCount:null!=(s=t.parallelism)?s:2,runWorker:this._runWorker.bind(this),prefetchProfile:da.network,handleUnhandledError:t.handleUnhandledError})}_getFileSize(){var e;if(!this._fileSizeDetermined)return null!==this._length?this._length:void 0;const t=this._sequentialBacking?this._sequentialBacking._endIndex:this._orchestrator.fileSize;return null===t?null!==this._length?this._length:null:ze(t-this._offset,0,null!=(e=this._length)?e:1/0)}_read(e,t,i,r){var n;if(null!==this._length&&t>this._length)return null;const s=this._offset,a=this._sequentialBacking?this._sequentialBacking._read(s+e,s+t):this._orchestrator.read(s+e,s+t,Math.max(s+i,s),s+Math.min(r,null!=(n=this._length)?n:1/0)),o=e=>e?(e.offset-=this._offset,e):null;return at(a)?a.then(o):o(a)}_runWorker(e){return Y(this,null,function*(){for(var t;;){const r=new AbortController,n=yield Qe(null!=(t=this._options.fetchFn)?t:fetch,this._url,$e(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw new Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);n.redirected&&(this.rootPath=n.url);e:if(null===this._orchestrator.fileSize&&(206===n.status||"basic"===n.type&&!n.headers.has("Content-Encoding"))){const t=n.headers.get("Content-Range");if(t){const e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break e}}const i=n.headers.get("Content-Length");if(i){const t=206===n.status?e.currentPos:0;this._orchestrator.supplyFileSize(t+Number(i))}}if(this._fileSizeDetermined=!0,!n.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");if(206!==n.status){if(this._sequentialBacking)return void n.body.cancel();if(!this._usedForHls){const e=new URL(this._url instanceof Request?this._url.url:this._url,"undefined"!==typeof window?window.location.href:void 0);"null"===e.origin||e.pathname.endsWith(".m3u8")||e.pathname.endsWith(".m3u")||aa.has(e.origin)||(vt._warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the resource will now be streamed sequentially, with old data being evicted from the cache. Reads into evicted regions will throw. To enable efficient media file streaming across a network, please make sure your server supports range requests. Alternatively, set maxCacheSize to Infinity in the UrlSource options to keep the entire resource in memory.`),aa.add(e.origin))}return void this._transitionToSequentialMode(n.body)}const s=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted)return r.abort(),void this._orchestrator.signalWorkerStoppedRunning(e);let t;try{t=yield s.read()}catch(i){if(this._disposed)throw i;const e=this._getRetryDelay(1,i,this._url);if(null!==e){vt._error("Error while reading response stream. Attempting to resume.",i),yield kt(1e3*e);break}throw i}if(e.aborted)continue;const{done:n,value:a}=t;if(n){if(e.currentPos>=e.targetPos)return void this._orchestrator.onWorkerFinished(e);if(e.strictTarget)break;return void this._orchestrator.onWorkerFinished(e)}this._dispatchRead(e.currentPos,e.currentPos+a.length),this._orchestrator.supplyWorkerData(e,a)}}})}_transitionToSequentialMode(e){let t=e.getReader(),i=0,r=0;const n=new ReadableStream({pull:e=>Y(this,null,function*(){for(var n;;){let a;try{a=yield t.read()}catch(s){if(this._disposed)throw s;const e=this._getRetryDelay(1,s,this._url);if(null===e)throw s;vt._error("Error while reading response stream. Attempting to resume.",s),yield kt(1e3*e);const a=yield Qe(null!=(n=this._options.fetchFn)?n:fetch,this._url,$e(this._requestInit,{headers:{Range:`bytes=${i}-`}}),this._getRetryDelay,()=>this._disposed);if(!a.ok)throw new Error(`Error fetching ${String(this._url)}: ${a.status} ${a.statusText}`);if(!a.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");t=a.body.getReader(),r=206===a.status?0:i;continue}if(a.done)return void e.close();let o=a.value;if(r>0){const e=Math.min(r,o.length);r-=e,o=o.subarray(e)}if(0!==o.length)return i+=o.length,void e.enqueue(o)}}),cancel:()=>t.cancel()}),s=new ua(n,{maxCacheSize:this._orchestrator.options.maxCacheSize,handleUnhandledError:this._options.handleUnhandledError});s._endIndex=this._orchestrator.fileSize,s._cacheMissErrorMessage="Attempted to read data from an already-evicted part of the cache. Because the HTTP server did not honor the range request, data can only be read sequentially, with old data being evicted from the cache. To fix this issue, either ensure your server responds to range requests with 206 Partial Content, or set maxCacheSize to Infinity in the UrlSource options. Note that the latter will store the entire file in the cache if needed, no matter how large.",s.on("read",({start:e,end:t})=>this._dispatchRead(e,t)),this._sequentialBacking=s;const a=new Set;for(const o of this._orchestrator.workers){for(const e of o.pendingSlices)a.add(e);o.aborted=!0,o.pendingSlices.length=0}for(const o of this._orchestrator.queuedReads)for(const e of o.pendingSlices)a.add(e);this._orchestrator.workers.length=0,this._orchestrator.queuedReads.length=0;for(const o of a){const e=s._read(o.start,o.start+o.bytes.length);at(e)?e.then(e=>{e?(ne(e.offset===o.start),o.resolve(e.bytes)):o.resolve(null)},e=>o.reject(e)):(ne(null===e),o.resolve(null))}}_dispose(){this._orchestrator.dispose(),this._sequentialBacking&&(this._sequentialBacking._disposed=!0,this._sequentialBacking._dispose())}}const la=/^bytes=(\d+)-(\d*)$/,ca=e=>{const t=la.exec(e.trim());if(!t)return null;const i=Number(t[1]),r=""===t[2]?null:Number(t[2]);return null!==r&&rthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=Be(this._cache,e,e=>e.start),r=-1!==i?this._cache[i]:null;if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let n=e;const s=new Uint8Array(t-e);if(-1!==i)for(let c=i;c=t)break;const r=Math.max(e,i.start);r>n&&this._throwDueToCacheMiss();const a=Math.min(t,i.end);rn&&this._throwDueToCacheMiss();const{promise:a,resolve:o,reject:l}=_e();return this._pendingSlices.push({start:e,end:t,bytes:s,resolve:o,reject:l}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else{if(!this._handleUnhandledError)throw e;this._handleUnhandledError(e)}})),a}_throwDueToCacheMiss(){throw new Error(this._cacheMissErrorMessage)}_pull(){return Y(this,null,function*(){for(null!=this._reader||(this._reader=this._stream.getReader());this._currentIndex0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1})}_dispose(){var e;for(const t of this._pendingSlices)t.reject(new fl);this._pendingSlices.length=0,this._cache.length=0,null==(e=this._reader)||e.cancel()}}const da={fileSystem:(e,t)=>{const i=q(2,16);return{start:e=Math.floor((e-i)/i)*i,end:t=Math.ceil((t+i)/i)*i}},network:(e,t,i)=>{const r=q(2,16);e=Math.max(0,Math.floor((e-r)/r)*r);for(const n of i){const i=8*q(2,20),r=Math.max((n.startPos+n.targetPos)/2,n.targetPos-i);if(lt(e,t,r,n.targetPos)){const e=n.targetPos-n.startPos,r=Math.ceil((e+1)/i)*i,s=q(2,Math.ceil(Math.log2(e+1))),a=Math.min(s,r);t=Math.max(t,n.startPos+a)}}return{start:e,end:t=Math.max(t,e+na)}}};class ha{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,i,r){var n;ne(!this.disposed);const s=this.options.prefetchProfile(e,t,this.workers),a=Math.max(s.start,i),o=Math.min(s.end,null!=(n=this.fileSize)?n:1/0,r);ne(a<=e&&t<=o);let l=null;const c=Be(this.cache,e,e=>e.start),u=-1!==c?this.cache[c]:null;u&&u.start<=e&&t<=u.end&&(u.age=this.nextAge++,l={bytes:u.bytes,view:u.view,offset:u.start});const d=Be(this.cache,a,e=>e.start),h=l?null:new Uint8Array(t-e);let f=0,m=a;const p=[];if(-1!==d){for(let i=d;i=o)break;if(r.end<=a)continue;const n=Math.max(a,r.start),s=Math.min(o,r.end);if(ne(n<=s),m=h.length&&(l={bytes:h,view:de(h),offset:e}),0===p.length)return ne(l),l;const{promise:g,resolve:k,reject:y}=_e(),b=[];for(const v of p){const i=Math.max(e,v.start),r=Math.min(t,v.end);i===v.start&&r===v.end?b.push(v):ie.hole.start),i=-1!==t?this.queuedReads[t]:null;for(i&&v.start<=i.hole.end?(i.hole.end=Math.max(i.hole.end,v.end),i.strictTarget&&(i.strictTarget=e),T&&i.pendingSlices.push(T)):(t++,i={hole:{start:v.start,end:v.end},strictTarget:e,pendingSlices:T?[T]:[],age:this.nextAge++},this.queuedReads.splice(t,0,i));t+1i.hole.end)break;i.hole.end=Math.max(i.hole.end,e.hole.end),i.pendingSlices.push(...e.pendingSlices),i.strictTarget&&(i.strictTarget=e.strictTarget),i.age=Math.min(i.age,e.age),this.queuedReads.splice(t+1,1)}}}return l?g.catch(e=>{if(!this.disposed){if(!this.options.handleUnhandledError)throw e;this.options.handleUnhandledError(e)}}):(ne(h),l=g.then(t=>t&&{bytes:t,view:de(t),offset:e})),l}checkHoleAgainstWorker(e,t,i){const r=q(2,17);if(lt(t.start-r,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else if(!e.aborted&&!this.disposed){if(!this.options.handleUnhandledError)throw t;this.options.handleUnhandledError(t)}}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let r=1;re.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let a=0;at.start&&(t.start=s),t.end<=t.start&&(i.holes.splice(e,1),e--)}0===i.holes.length&&(i.resolve(i.bytes),e.pendingSlices.splice(a,1),a--)}for(let a=0;ae){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t=e){for(const e of i.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(i.hole.end>e){i.hole.end=e,i.strictTarget=!0;for(let t=0;t=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.aborted||(e.pendingSlices.length=0)}onWorkerFinished(e){var t,i;const r=this.workers.indexOf(e);ne(-1!==r),e.running=!1,this.workers.splice(r,1),null==(i=(t=this.options).onIdleWorkerRemoved)||i.call(t,e),null===this.fileSize&&this.supplyFileSize(e.currentPos);for(const n of e.pendingSlices)n.resolve(null)}insertIntoCache(e){if(0===this.options.maxCacheSize)return;let t=Be(this.cache,e.start,e=>e.start)+1;if(t>0){const i=this.cache[t-1];if(i.end>=e.end)return;if(i.end>e.start){const r=new Uint8Array(e.end-i.start);r.set(i.bytes,0),r.set(e.bytes,e.start-i.start),this.currentCacheSize+=e.end-i.end,i.bytes=r,i.view=de(r),i.end=e.end,t--,e=i}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let i=t+1;i=t.end){this.cache.splice(i,1),this.currentCacheSize-=t.bytes.length,i--;continue}const r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=de(r),e.end=t.end,this.cache.splice(i,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let i=1;ithis._length)return null;const n=this._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r),s=e=>e?(e.offset-=this._offset,e):null;return at(n)?n.then(s):s(n)}_dispose(){var e;null==(e=this._ref)||e.free()}ref(){return null!=this._ref||(this._ref=this._baseSource.ref()),super.ref()}}var ma=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t},pa=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});const ga=/^0[xX][0-9a-fA-F]+$/,ka=/^data:.*;base64,/i;class ya extends Ks{constructor(e,t,i,r){super(e.input,t,i),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.rootPath=t,this.demuxer=e,this.nextLines=r}runUpdateSegments(){var e;return null!=(e=this.currentUpdateSegmentsPromise)?e:this.currentUpdateSegmentsPromise=(()=>Y(this,null,function*(){try{const e=this.getRemainingWaitTimeMs();e>0&&(yield kt(e)),this.lastSegmentUpdateTime=performance.now(),yield this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}}))()}getRemainingWaitTimeMs(){const e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}updateSegments(){return Y(this,null,function*(){var e,t,i,r,n,s,a,o;let l=this.nextLines;if(this.nextLines=null,!l){const e={stack:[],error:void 0,hasError:!1};try{const t=ma(e,yield this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}),!1),i=new ml(t.source),r=yield i.requestEntireFile();ne(r),l=Ml(r,r.length,{ignore:Vs}),t.source instanceof Zs&&(this.rootPath=t.source.rootPath)}catch(x){e.error=x,e.hasError=!0}finally{pa(e)}}const c=!1!==(null==(e=this.input._formatOptions.hls)?void 0:e.offsetTimestampsByDateTime);let u=!1,d=0,h=null,f=null,m=null,p=0,g=null,k=null,y=null,b=null,T=null,v=null,w=!1,S=null!=(t=ae(this.segments))?t:null;const P=e=>{const t=e.indexOf("@"),i=Number(-1===t?e:e.slice(0,t));if(!Number.isInteger(i)||i<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(-1!==t&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:i,offset:r}},I=e=>{p=e,S&&(ne(null!==S.sequenceNumber),S.sequenceNumber0&&null!==v&&(d=p*v),w=!0);const t=e.slice(8),i=t.indexOf(","),r=-1===i?t:t.slice(0,i),n=Number(r);if(!Number.isFinite(n)||n<0)throw new Error(`Invalid #EXTINF tag duration '${r}'.`);f=n}else if(e.startsWith(Os)){const t=new js(e.slice(11)),i=t.get("uri");if(!i)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");const r=t.get("byterange");let a=null;if(null!==r&&(a=P(r)),a&&null===a.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!S){const e={path:ht(this.rootPath,i),offset:null!=(n=null==a?void 0:a.offset)?n:0,length:null!=(s=null==a?void 0:a.length)?s:null};if("AES-128"===(null==m?void 0:m.method)&&!m.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");k={timestamp:d,unixEpochTimestamp:h,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:m,initSegment:null,lastProgramDateTimeSeconds:T}}f=null,null===b?y=null:b=null}else if(e.startsWith(zs)){const t=new js(e.slice(11)),i=t.get("method");if("NONE"===i)m=null;else if("AES-128"===i){const e=t.get("uri");if(!e)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let i=null;const r=t.get("iv");if(r){if(!ga.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(xr);for(let t=0;t=8&&112===i[4]&&115===i[5]&&115===i[6]&&104===i[7]){const e=de(i).getUint32(0);r=yr(i.subarray(8,Math.min(e,i.length)))}}m={method:i,psshBox:r}}}}else if(e.startsWith(Ls)){const t=e.slice(22),i=Number(t);if(!Number.isInteger(i)||i<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${t}'.`);I(i)}else if(e.startsWith(Us)){const t=P(e.slice(17));if(null===t.offset){if(null===y)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");t.offset=y}b=t,y=t.offset+t.length}else if(e.startsWith(qs)){if(S)continue;const t=e.slice(25),i=Date.parse(t);if(!Number.isFinite(i))continue;const r=i/1e3;if(T===r)continue;if(null===T&&this.segments.length>0){const e=ae(this.segments),t=r-(e.timestamp+e.duration);for(const i of this.segments)i.unixEpochTimestamp=i.timestamp+t,c&&(i.timestamp=i.unixEpochTimestamp)}T=r,h=r,c&&(d=r)}else if("#EXT-X-DISCONTINUITY"===e)g=null;else if(e.startsWith(Ws)){const t=e.slice(22),i=Number(t);if(!Number.isFinite(i)||i<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${t}'.`);this.refreshInterval=i,v=i}else{if("#EXT-X-ENDLIST"===e){this.streamHasEnded=!0;break}if(e.startsWith(Hs)){"vod"===e.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==e)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");u=!0}}if(!u)throw new Error("Invalid M3U8 file; no #EXTM3U header.")})}getFirstSegment(){return Y(this,null,function*(){var e;return 0===this.segments.length&&(yield this.runUpdateSegments()),null!=(e=this.segments[0])?e:null})}getSegmentAt(e,t){return Y(this,null,function*(){0===this.segments.length&&(yield this.runUpdateSegments());let i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){const r=Be(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r0;for(;;){if(re.segment===r);if(n)return n.age=this.nextInputCacheAge++,n.input;let s=null;(r.initSegment||r.firstSegment)&&(s=this.getInputForSegment(null!=(t=r.initSegment)?t:r.firstSegment));const a=V(H({},this.input._formatOptions),{isobmff:V(H({},this.input._formatOptions.isobmff),{resolveKeyId:(null==(i=this.input._formatOptions.isobmff)?void 0:i.resolveKeyId)&&(e=>{if(!r.encryption||"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method||!r.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let t=e.psshBoxes;const{psshBox:i}=r.encryption;return null!==i.keyIds&&!i.keyIds.includes(e.keyId)||t.some(e=>br(e,i))||(t=[...t,i]),this.input._formatOptions.isobmff.resolveKeyId(V(H({},e),{psshBoxes:t}))})})}),o=new dl({source:new ta(r.location.path,e=>Y(this,null,function*(){var t,i;ne(e.isRoot);const n=V(H({},e),{isRoot:!1});let s;const a=r.location.offset>0||null!==r.location.length;if(r.encryption&&"SAMPLE-AES"!==r.encryption.method&&"SAMPLE-AES-CTR"!==r.encryption.method)if("AES-128"===r.encryption.method){const e=r.encryption;ne(e.iv);let t=yield this.input._getSourceCached(n);if(a){const e=t.source.slice(r.location.offset,null!=(i=r.location.length)?i:void 0).ref();t.free(),t=e}const o=((e,t,i)=>{let r=!1,n=0;const s=q(2,16),a=new Dr;return new ReadableStream({pull:o=>Y(null,null,function*(){r||(a.init(yield t()),r=!0);const l=s+16;let c=e.requestSliceRange(n,0,l);if(at(c)&&(c=yield c),!c||0===c.length)throw new Error("Invalid ciphertext.");const u=c.length;if(u%16!==0)throw new Error("Invalid ciphertext.");const d=u===l?u-16:u,h=kl(c,d),f=new Uint8Array(d);for(let e=0;e16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");const t=f.subarray(0,d-e);o.enqueue(t),o.close(),i()}}),cancel:()=>{i()}})})(new ml(t.source),()=>Y(this,null,function*(){const t={stack:[],error:void 0,hasError:!1};try{const i=ma(t,yield this.input._getSourceCached({path:e.keyUri,isRoot:!1},ul),!1),r=new ml(i.source),n=yield r.requestSlice(0,xr);if(!n)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:kl(n,xr),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{pa(t)}}),()=>{t.free()});s=new ua(o).ref()}else ne(!1);else if(s=yield this.input._getSourceCached(n),a){const e=s.source.slice(r.location.offset,null!=(t=r.location.length)?t:void 0).ref();s.free(),s=e}return s})),formats:this.input._formats.filter(e=>!(e instanceof za)),initInput:null!=s?s:void 0,formatOptions:a});o._onFormatDetermined=e=>{var t,i;if(("SAMPLE-AES"===(null==(t=r.encryption)?void 0:t.method)||"SAMPLE-AES-CTR"===(null==(i=r.encryption)?void 0:i.method))&&!e._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:r,input:o,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=mt(this.inputCache,e=>e.age);ne(-1!==e),this.inputCache.splice(e,1)}return o}getLiveRefreshInterval(){return Y(this,null,function*(){return 0===this.getRemainingWaitTimeMs()&&(yield this.runUpdateSegments()),this.streamHasEnded?null:this.refreshInterval})}}class ba extends pr{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){var e;return null!=(e=this.metadataPromise)?e:this.metadataPromise=(()=>Y(this,null,function*(){ne(this.input._rootSource instanceof Zs);const e=yield this.input._reader.requestEntireFile();ne(e);const t=Ml(e,e.length,{ignore:Vs}),{rootPath:i}=this.input._rootSource,r=[],n=[];for(let u=1;u"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],a=[...new Set(n.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=yield Promise.all(r.map((e,t)=>Y(this,null,function*(){var r,o,l,c;const u=[],d=e.attributes.get("codecs");let h;if(d)h=d.split(",").map(e=>e.trim());else{const t=this.getSegmentedInputForPath(e.fullPath),i=yield t.getTrackBackings(),r=yield Promise.all(i.map(e=>Y(this,null,function*(){return{track:e,codec:yield e.getCodec()}})));h=yield Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const f=e.attributes.get("video"),m=e.attributes.get("audio"),p=h.some(e=>Hi.includes(nr(e))),g=h.some(e=>ji.includes(nr(e)));if(null!==f&&!p){if(!s.includes(f))throw new Error(`Invalid M3U8 file; variant stream references video group "${f}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===f&&"video"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=ht(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"video"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});ne(null!==a),h.push(a)}}if(null!==m&&!g){if(!a.includes(m))throw new Error(`Invalid M3U8 file; variant stream references audio group "${m}" which is not defined in any #EXT-X-MEDIA tags.`);const e=n.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===m&&"audio"===i.toLowerCase()});e:if(e){const t=e.attributes.get("uri");if(null===t)break e;const r=ht(i,t),n=this.getSegmentedInputForPath(r),s=(yield n.getTrackBackings()).find(e=>"audio"===e.getType());if(!s||null===(yield s.getCodec()))break e;const a=yield s.getDecoderConfig().then(e=>{var t;return null!=(t=null==e?void 0:e.codec)?t:null});ne(null!==a),h.push(a)}}h=[...new Set(h)];let k=null,y=null;const b=e.attributes.getAsNumber("bandwidth");ne(null!==b);const T=e.attributes.getAsNumber("average-bandwidth"),v=e.attributes.get("name");for(const i of h){const d=nr(i);if(null!==d)if(Hi.includes(d)){if(null!==k)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");k=i;const a=e.attributes.get("video");if(null===a){const i=e.attributes.get("resolution");let r=null,n=null;if(i){const e=i.match(/^(\d+)x(\d+)$/);e&&(r=Number(e[1]),n=Number(e[2]))}u.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:Le,lineNumber:e.lineNumber,fullPath:e.fullPath,fullCodecString:k,pairingMask:BigInt("1")<0?r:null}})}else{if(!a.includes(r))throw new Error(`Invalid M3U8 file; variant stream references audio group "${r}" which is not defined in any #EXT-X-MEDIA tags.`);for(const i of n){const n=i.attributes.get("group-id"),s=i.attributes.get("type");if(n!==r||"audio"!==s.toLowerCase())continue;const a=null!=(l=i.attributes.get("channels"))?l:e.attributes.get("channels"),o=null!==a?Number(a.split("/")[0]):null;u.push({id:-1,demuxer:this,backingTrack:null,default:Sa(i.attributes),autoselect:Sa(i.attributes)||Pa(i.attributes),languageCode:Ia(i.attributes.get("language")),lineNumber:i.lineNumber,fullPath:null!=(c=i.fullPath)?c:e.fullPath,fullCodecString:y,pairingMask:BigInt("1")<0?o:null}})}}}}return u}))),l=[],c=e=>{var t,i;const r=l.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);r?(r.pairingMask|=e.pairingMask,r.default||(r.default=e.default),r.autoselect||(r.autoselect=e.autoselect),r.lineNumber=Math.min(r.lineNumber,e.lineNumber),null!==e.peakBitrate&&(r.peakBitrate=Math.max(null!=(t=r.peakBitrate)?t:-1/0,e.peakBitrate)),null!==e.averageBitrate&&(r.averageBitrate=Math.max(null!=(i=r.averageBitrate)?i:-1/0,e.averageBitrate)),r.languageCode===Le&&(r.languageCode=e.languageCode)):(e.id=l.length+1,l.push(e))};for(const u of o)for(const e of u)c(e);l.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const u of l)"video"===u.info.type?this.trackBackings.push(new va(u)):this.trackBackings.push(new wa(u));this.internalTracks=l}))()}getTrackBackings(){return Y(this,null,function*(){return yield this.readMetadata(),ne(this.trackBackings),this.trackBackings})}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let i=null;if(this.internalTracks){i=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))}return t=new ya(this,e,i,null),this.segmentedInputs.push(t),t}getMetadataTags(){return Y(this,null,function*(){return{}})}getMimeType(){return Y(this,null,function*(){return Fs})}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class Ta{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){var e;return null!=(e=this.hydrationPromise)?e:this.hydrationPromise=(()=>Y(this,null,function*(){const e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath);let t=null;const i=(yield e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===i.length)t=i[0];else if(this instanceof va){for(const r of i)if((yield r.getCodec())===this.getCodec()){t=r;break}}else{ne(this instanceof wa);for(const e of i)if((yield e.getCodec())===this.getCodec()){t=e;break}}if(!t)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=t}))()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return V(H({},Pt),{default:this.internalTrack.autoselect,primary:this.internalTrack.default})}getId(){return this.internalTrack.id}getPairingMask(){return this.internalTrack.pairingMask}getInternalCodecId(){return null}getLanguageCode(){return this.internalTrack.languageCode}getName(){return this.internalTrack.name}getNumber(){ne(this.internalTrack.demuxer.internalTracks);const e=this.internalTrack.info.type;let t=0;for(const i of this.internalTrack.demuxer.internalTracks)if(i.info.type===e&&t++,i===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getUnixTimeForTimestamp(e){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(e))}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}getDurationFromMetadata(e){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)})}getLiveRefreshInterval(){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()})}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}getFirstPacket(e){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)})}getPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)})}getKeyPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)})}getNextPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)})}getNextKeyPacket(e,t){return Y(this,null,function*(){return yield this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)})}}class va extends Ta{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return nr(this.internalTrack.fullCodecString)}getCodedWidth(){return this.delegate(()=>this.backingVideoTrack.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.backingVideoTrack.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.backingVideoTrack.getSquarePixelHeight())}getMetadataDisplayWidth(){return this.backingVideoTrack?null:this.internalTrack.info.width}getMetadataDisplayHeight(){return this.backingVideoTrack?null:this.internalTrack.info.height}getRotation(){return this.delegate(()=>this.backingVideoTrack.getRotation())}getColorSpace(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getColorSpace()})}canBeTransparent(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.canBeTransparent()})}getMetadataCodecParameterString(){return this.backingVideoTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return Y(this,null,function*(){return yield this.hydrate(),this.backingVideoTrack.getDecoderConfig()})}}class wa extends Ta{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return nr(this.internalTrack.fullCodecString)}getNumberOfChannels(){return null!==this.internalTrack.info.numberOfChannels?this.internalTrack.info.numberOfChannels:this.delegate(()=>this.backingAudioTrack.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}getDecoderConfig(){return Y(this,null,function*(){return yield this.hydrate(),this.backingAudioTrack.getDecoderConfig()})}}const Sa=e=>{const t=e.get("default");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Pa=e=>{const t=e.get("autoselect");if(null===t)return!1;const i=t.toUpperCase();if("YES"===i)return!0;if("NO"===i)return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},Ia=e=>{if(null===e)return Le;const t=e.split("-")[0];return t||Le};class xa{constructor(){this._isIsobmff=!1}}class Ca extends xa{constructor(){super(...arguments),this._isIsobmff=!0}_getMajorBrand(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,12);if(at(t)&&(t=yield t),!t)return null;t.skip(4);const i=Al(t,4);return"ftyp"!==i&&"styp"!==i?null:Al(t,4)})}_createDemuxer(e){return new Nr(e)}}class Ba extends Ca{_canReadInput(e){return Y(this,null,function*(){const t=yield this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=0;for(let r=0;r<10;r++){let t=e._reader.requestSlice(i,8);if(at(t)&&(t=yield t),!t)return!1;let r=Pl(t),n=8;if(1===r){let t=e._reader.requestSlice(i+8,8);if(at(t)&&(t=yield t),!t)return!1;r=Bl(t),n=16}if(r8)return!1;if(cn(i,r)!==en.EBML)return!1;const n=dn(i);if("number"!==typeof n)return!1;let s=e._reader.requestSlice(i.filePos,n);if(at(s)&&(s=yield s),!s)return!1;const a=i.filePos;for(;s.filePos<=a+n-2;){const e=hn(s);if(!e)break;const{id:i,size:r}=e,n=s.filePos;if(void 0===r)return!1;switch(i){case en.EBMLVersion:if(1!==cn(s,r))return!1;break;case en.EBMLReadVersion:if(1!==cn(s,r))return!1;break;case en.DocType:if(fn(s,r)!==t)return!1;break;case en.DocTypeVersion:if(cn(s,r)>4)return!1}s.filePos=n+r}return!0})}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new qn(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class Ra extends _a{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class Fa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}const i=yield jn(e._reader,t,t+4096);if(!i)return!1;const r=i.header,n=cr(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+n,4);if(at(s)&&(s=yield s),!s)return!1;const a=Pl(s);if(a===or||a===lr)return!0;t=i.startPos+i.header.totalSize;const o=yield jn(e._reader,t,t+4);if(!o)return!1;const l=o.header;return r.channel===l.channel&&r.sampleRate===l.sampleRate})}_createDemuxer(e){return new Kn(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class Aa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,12);if(at(t)&&(t=yield t),!t)return!1;const i=Al(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===Al(t,4)})}_createDemuxer(e){return new ls(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class Ma extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,4);return at(t)&&(t=yield t),!!t&&"OggS"===Al(t,4)})}_createDemuxer(e){return new is(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class Da extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSlice(t,4);return at(i)&&(i=yield i),!!i&&"fLaC"===Al(i,4)})}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new ps(e)}}class Na extends xa{_canReadInput(e){return Y(this,null,function*(){let t=0;for(;;){let i=e._reader.requestSlice(t,Ul);if(at(i)&&(i=yield i),!i)break;const r=Vl(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(at(i)&&(i=yield i),!i)return!1;const r=ds(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),at(i)&&(i=yield i),!i)return!1;const n=ds(i);return!!n&&(r.objectType===n.objectType&&r.samplingFrequencyIndex===n.samplingFrequencyIndex&&r.channelConfiguration===n.channelConfiguration)})}_createDemuxer(e){return new fs(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class Oa extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,205);if(at(t)&&(t=yield t),!t)return!1;const i=kl(t,205);return 71===i[0]&&71===i[188]||(71===i[0]&&71===i[204]||71===i[4]&&71===i[196])})}_createDemuxer(e){return new Ss(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class za extends xa{_canReadInput(e){return Y(this,null,function*(){let t=e._reader.requestSlice(0,7);if(at(t)&&(t=yield t),!t)return!1;if(!("#EXTM3U"===Al(t,7)))return!1;if(!(e._rootSource instanceof Zs))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0})}_createDemuxer(e){return new ba(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return Fs}}const La=new Ba,Ua=new Ea,qa=new _a,Wa=new Ra,Ha=new Fa,Va=new Aa,ja=new Ma,Ka=new Na,Xa=new Da,$a=new Oa,Ga=new za,Qa=[Ga,La,Ua,qa,Wa,Va,ja,Xa,Ha,Ka,$a],Ya=[Ga,La,Ua,Ha,Ka,$a];var Ja=function(e){return function(t){function i(i){t.error=t.hasError?new e(i,t.error,"An error was suppressed during disposal."):i,t.hasError=!0}var r,n=0;return function e(){for(;r=t.stack.pop();)try{if(!r.async&&1===n)return n=0,t.stack.push(r),Promise.resolve().then(e);if(r.dispose){var s=r.dispose.call(r.value);if(r.async)return n|=2,Promise.resolve(s).then(e,function(t){return i(t),e()})}else n|=1}catch(a){i(a)}if(1===n)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}()}}("function"===typeof SuppressedError?SuppressedError:function(e,t,i){var r=new Error(i);return r.name="SuppressedError",r.error=e,r.suppressed=t,r});ut();let Za=-1/0,eo=-1/0,to=null;"undefined"!==typeof FinalizationRegistry&&(to=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-Za>=1e3&&(vt._error("A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them."),Za=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-eo>=1e3&&(vt._error("An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them."),eo=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));class io{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}}const ro=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],no=new Set(ro);class so{get codedWidth(){return this.visibleRect.width}get codedHeight(){return this.visibleRect.height}get displayWidth(){return this.rotation%180===0?this.squarePixelWidth:this.squarePixelHeight}get displayHeight(){return this.rotation%180===0?this.squarePixelHeight:this.squarePixelWidth}get microsecondTimestamp(){return Math.trunc(Xe*this.timestamp)}get microsecondDuration(){return Math.trunc(Xe*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}constructor(e,t){var i,r,n,s,a,o,l,c,u,d,h,f,m,p,g,k,y,b,T,v,w,S,P,I,x,C,B,E,_,R,F;if(this._closed=!1,e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e)){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0===t.format||!no.has(t.format))throw new TypeError("init.format must be one of: "+ro.join(", "));if(!Number.isInteger(t.codedWidth)||t.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(t.codedHeight)||t.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.layout){if(!Array.isArray(t.layout))throw new TypeError("init.layout, when provided, must be an array.");for(const e of t.layout){if(!e||"object"!==typeof e||Array.isArray(e))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(e.offset)||e.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(e.stride)||e.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==t.visibleRect&>(t.visibleRect,"init.visibleRect"),void 0!==t.displayWidth&&(!Number.isInteger(t.displayWidth)||t.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(void 0!==t.displayHeight&&(!Number.isInteger(t.displayHeight)||t.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(void 0!==t.displayWidth!==(void 0!==t.displayHeight))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this.format=t.format,this.rotation=null!=(i=t.rotation)?i:0,this.timestamp=t.timestamp,this.duration=null!=(r=t.duration)?r:0;const m=null!=(n=t.layout)?n:go(t.format,t.codedWidth,t.codedHeight);let p=null!=(s=t.colorSpace)?s:null;null===p&&(p="RGBA"===this.format||"RGBX"===this.format||"BGRA"===this.format||"BGRX"===this.format?{primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:{primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),this.visibleRect={left:null!=(o=null==(a=t.visibleRect)?void 0:a.left)?o:0,top:null!=(c=null==(l=t.visibleRect)?void 0:l.top)?c:0,width:null!=(d=null==(u=t.visibleRect)?void 0:u.width)?d:t.codedWidth,height:null!=(f=null==(h=t.visibleRect)?void 0:h.height)?f:t.codedHeight},void 0!==t.displayWidth?(this.squarePixelWidth=this.rotation%180===0?t.displayWidth:t.displayHeight,this.squarePixelHeight=this.rotation%180===0?t.displayHeight:t.displayWidth):(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=t._doNotCopy?ue(e):ue(e).slice(),this._layout=m,this.colorSpace=new uo(p)}else if("undefined"!==typeof VideoFrame&&e instanceof VideoFrame){if(void 0!==(null==t?void 0:t.rotation)&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(void 0!==(null==t?void 0:t.timestamp)&&!Number.isFinite(null==t?void 0:t.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(void 0!==(null==t?void 0:t.duration)&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");void 0!==(null==t?void 0:t.visibleRect)&>(t.visibleRect,"init.visibleRect"),this._data=e,this._layout=null,this.format=e.format,this.visibleRect={left:null!=(p=null==(m=e.visibleRect)?void 0:m.x)?p:0,top:null!=(k=null==(g=e.visibleRect)?void 0:g.y)?k:0,width:null!=(b=null==(y=e.visibleRect)?void 0:y.width)?b:e.codedWidth,height:null!=(v=null==(T=e.visibleRect)?void 0:T.height)?v:e.codedHeight},this.rotation=null!=(w=null==t?void 0:t.rotation)?w:0,this.squarePixelWidth=e.displayWidth,this.squarePixelHeight=e.displayHeight,this.timestamp=null!=(S=null==t?void 0:t.timestamp)?S:e.timestamp/1e6,this.duration=null!=(I=null==t?void 0:t.duration)?I:(null!=(P=e.duration)?P:0)/1e6,this.colorSpace=new uo(e.colorSpace)}else if("undefined"!==typeof HTMLImageElement&&e instanceof HTMLImageElement||"undefined"!==typeof SVGImageElement&&e instanceof SVGImageElement||"undefined"!==typeof ImageBitmap&&e instanceof ImageBitmap||"undefined"!==typeof HTMLVideoElement&&e instanceof HTMLVideoElement||"undefined"!==typeof HTMLCanvasElement&&e instanceof HTMLCanvasElement||"undefined"!==typeof OffscreenCanvas&&e instanceof OffscreenCanvas){if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(void 0!==t.visibleRect&>(t.visibleRect,"init.visibleRect"),"undefined"!==typeof VideoFrame)return new so(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*Xe),duration:Math.trunc((null!=(x=t.duration)?x:0)*Xe)||void 0,visibleRect:t.visibleRect&&{x:t.visibleRect.left,y:t.visibleRect.top,width:t.visibleRect.width,height:t.visibleRect.height}}),t);let i=0,r=0;if("naturalWidth"in e?(i=e.naturalWidth,r=e.naturalHeight):"videoWidth"in e?(i=e.videoWidth,r=e.videoHeight):"width"in e&&(i=Number(e.width),r=Number(e.height)),!i||!r)throw new TypeError("Could not determine dimensions.");const n=null!=(C=t.visibleRect)?C:{left:0,top:0,width:i,height:r},s=new OffscreenCanvas(n.width,n.height),a=s.getContext("2d",{alpha:tt(),willReadFrequently:!0});if(!a)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");a.drawImage(e,-n.left,-n.top),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:n.width,height:n.height},this.squarePixelWidth=n.width,this.squarePixelHeight=n.height,this.rotation=null!=(B=t.rotation)?B:0,this.timestamp=t.timestamp,this.duration=null!=(E=t.duration)?E:0,this.colorSpace=new uo({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else{if(!(e instanceof io))throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");if(!t||"object"!==typeof t)throw new TypeError("init must be an object.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(t.timestamp))throw new TypeError("init.timestamp must be a number.");if(void 0!==t.duration&&(!Number.isFinite(t.duration)||t.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(this._data=e,e._referenceCount++,this.format=e.getFormat(),null!==this.format&&!ro.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:e.getCodedWidth(),height:e.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=e.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=e.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=null!=(_=t.rotation)?_:0,this.timestamp=t.timestamp,this.duration=null!=(R=t.duration)?R:0,this.colorSpace=e.getColorSpace()}this.encodeOptions=null!=(F=null==t?void 0:t.encodeOptions)?F:{},this.pixelAspectRatio=pt({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),null==to||to.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return ne(null!==this._data),this._data instanceof io?new so(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):ho(this._data)?new so(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(ne(this._layout),new so(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new so(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(null==to||to.unregister(this),this._data instanceof io?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):ho(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){var t;if(po(e),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(t=e.format)?t:this.format))throw new Error("Cannot get allocation size when format is null.");if(ho(this._data))return this._data.allocationSize(e);return yo(this,e).allocationSize}copyTo(e){return Y(this,arguments,function*(e,t={}){var i,r;if(!we(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(po(t),this._closed)throw new Error("VideoSample is closed.");if(null==(null!=(i=t.format)?i:this.format))throw new Error("Cannot copy video sample data when format is null.");if(ne(null!==this._data),ho(this._data))return this._data.copyTo(e,t);if(t.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(t.format)){if(!(this._data instanceof io)){if("undefined"===typeof VideoFrame)throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");const i=this.toVideoFrame(),r=yield i.copyTo(e,t);return i.close(),r}{const i={stack:[],error:void 0,hasError:!1};try{const n=function(e,t,i){if(null!==t&&void 0!==t){if("object"!==typeof t&&"function"!==typeof t)throw new TypeError("Object expected.");var r,n;if(i){if(!Symbol.asyncDispose)throw new TypeError("Symbol.asyncDispose is not defined.");r=t[Symbol.asyncDispose]}if(void 0===r){if(!Symbol.dispose)throw new TypeError("Symbol.dispose is not defined.");r=t[Symbol.dispose],i&&(n=r)}if("function"!==typeof r)throw new TypeError("Object not disposable.");n&&(r=function(){try{n.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:i})}else i&&e.stack.push({async:!0});return t}(i,yield this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},null!=(r=t.colorSpace)?r:"srgb"),!1);if(!(n instanceof so))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(n.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${n.format}' instead.`);return yield n.copyTo(e,t)}catch(u){i.error=u,i.hasError=!0}finally{Ja(i)}}}const n=yo(this,t);ne(this.format);const s=ue(e);if(s.byteLength!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');o=e}else if(this._data instanceof Uint8Array)ne(this._layout),ne(this._layout.length===a.length),o=this._layout.map((e,t)=>{const i=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*i),stride:e.stride}});else{const e=this._data.getContext("2d");ne(e);const t=e.getImageData(0,0,this.codedWidth,this.codedHeight);o=[{data:ue(t.data),stride:4*this.codedWidth}]}const l=[],c=a.length;for(let d=0;di.byteLength)throw new Error("Source buffer OOB read.");if(a+c>s.byteLength)throw new Error("Destination buffer OOB write.");const n=i.subarray(r,r+c);s.set(n,a),r+=t,a+=e.destinationStride}l.push(u)}if(void 0!==t.format){const e=this.format.startsWith("RGB")!==t.format.startsWith("RGB"),i=this.format.includes("X")&&t.format.includes("A");if(e||i)for(let t=0;te+t.data.byteLength,0),i=new Uint8Array(t);let r=0;const n=[];for(const s of e)i.set(s.data,r),n.push(r),r+=s.data.byteLength;return new VideoFrame(i,{format:this.format,layout:e.map((e,t)=>({offset:n[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}return ho(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(ne(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,i,r,n,s,a,o,l){let c=0,u=0,d=this.displayWidth,h=this.displayHeight,f=0,m=0,p=this.displayWidth,g=this.displayHeight;if(void 0!==s?(c=t,u=i,d=r,h=n,f=s,m=a,void 0!==o?(p=o,g=l):(p=d,g=h)):(f=t,m=i,void 0!==r&&(p=r,g=n)),!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(c))throw new TypeError("sx must be a number.");if(!Number.isFinite(u))throw new TypeError("sy must be a number.");if(!Number.isFinite(d)||d<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(h)||h<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(f))throw new TypeError("dx must be a number.");if(!Number.isFinite(m))throw new TypeError("dy must be a number.");if(!Number.isFinite(p)||p<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:c,sy:u,sWidth:d,sHeight:h}=this._rotateSourceRegion(c,u,d,h,this.rotation));const k=this.toCanvasImageSource();e.save();const y=f+p/2,b=m+g/2;e.translate(y,b),e.rotate(this.rotation*Math.PI/180);const T=this.rotation%180===0?1:p/g;e.scale(1/T,T),e.drawImage(k,c,u,d,h,-p/2,-g/2,p,g),e.restore()}drawWithFit(e,t){var i,r,n,s,a,o,l,c,u;if(!("undefined"!==typeof CanvasRenderingContext2D&&e instanceof CanvasRenderingContext2D||"undefined"!==typeof OffscreenCanvasRenderingContext2D&&e instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(t.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");void 0!==t.crop&&mo(t.crop,"options.");const d=e.canvas.width,h=e.canvas.height,f=null!=(i=t.rotation)?i:this.rotation,[m,p]=f%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let g,k,y,b,T=t.crop;T&&(T=fo(T,m,p));const{sx:v,sy:w,sWidth:S,sHeight:P}=this._rotateSourceRegion(null!=(n=null==(r=t.crop)?void 0:r.left)?n:0,null!=(a=null==(s=t.crop)?void 0:s.top)?a:0,null!=(l=null==(o=t.crop)?void 0:o.width)?l:m,null!=(u=null==(c=t.crop)?void 0:c.height)?u:p,f);if("fill"===t.fit)g=0,k=0,y=d,b=h;else{const[e,i]=t.crop?[t.crop.width,t.crop.height]:[m,p],r="contain"===t.fit?Math.min(d/e,h/i):Math.max(d/e,h/i);y=e*r,b=i*r,g=(d-y)/2,k=(h-b)/2}e.save();const I=f%180===0?1:y/b;e.translate(d/2,h/2),e.rotate(f*Math.PI/180),e.scale(1/I,I),e.translate(-d/2,-h/2),e.drawImage(this.toCanvasImageSource(),v,w,S,P,g,k,y,b),e.restore()}_rotateSourceRegion(e,t,i,r,n){return 90===n?[e,t,i,r]=[t,this.squarePixelHeight-e-i,r,i]:180===n?[e,t]=[this.squarePixelWidth-e-i,this.squarePixelHeight-t-r]:270===n&&([e,t,i,r]=[this.squarePixelWidth-t-r,e,r,i]),{sx:e,sy:t,sWidth:i,sHeight:r}}_drawWithFitAndMipmapping(e,t,i){const r=e.width,n=e.height,[s,a]=i.rotation%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],o=i.crop?i.crop.width:s,l=i.crop?i.crop.height:a;let c=0;2*r0?co(u,d):{canvas:e,context:t,isNew:i.targetIsFresh};f.imageSmoothingQuality="high",i.fillBlack?(f.fillStyle="black",f.fillRect(0,0,u,d)):m||f.clearRect(0,0,u,d),this.drawWithFit(f,{fit:i.fit,rotation:i.rotation,crop:i.crop}),f.globalCompositeOperation="copy";for(let p=c;p>1;p--){const e=r*q(2,p),t=n*q(2,p);f.drawImage(h,0,0,e,t,0,0,e/2,t/2)}f.globalCompositeOperation="source-over",c>0&&(t.imageSmoothingQuality="high",t.globalCompositeOperation="copy",t.drawImage(h,0,0,2*r,2*n,0,0,r,n),t.globalCompositeOperation="source-over")}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(ne(null!==this._data),this._data instanceof io||this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}transform(e){return Y(this,null,function*(){var t,i,r,n,s;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.width&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(void 0!==e.height&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(void 0!==e.roundDimensionsTo&&(!Number.isInteger(e.roundDimensionsTo)||e.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(void 0!==e.fit&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==e.width&&void 0!==e.height&&void 0===e.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==e.rotate&&![0,90,180,270].includes(e.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(void 0!==e.crop&&mo(e.crop,"options."),void 0!==e.alpha&&!["keep","discard"].includes(e.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");const a=se(this.rotation+(null!=(t=e.rotate)?t:0)),[o,l]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];let c=e.crop;c&&(c=fo(c,o,l));const u=c?c.width:o,d=c?c.height:l,h=u/d;let f,m;void 0!==e.width&&void 0===e.height?(f=e.width,m=f/h):void 0===e.width&&void 0!==e.height?(m=e.height,f=m*h):void 0!==e.width&&void 0!==e.height?(f=e.width,m=e.height):(f=u,m=d),f=qe(f,null!=(i=e.roundDimensionsTo)?i:1),m=qe(m,null!=(r=e.roundDimensionsTo)?r:1);const p={width:f,height:m,fit:null!=(n=e.fit)?n:"fill",rotation:a,crop:null!=c?c:{left:0,top:0,width:o,height:l},alpha:null!=(s=e.alpha)?s:"keep"};for(const e of ao){let t=e(this,p);if(at(t)&&(t=yield t),null!==t)return t}const{canvas:g,context:k,isNew:y}=co(p.width,p.height);return this._drawWithFitAndMipmapping(g,k,{fit:p.fit,rotation:p.rotation,crop:p.crop,targetIsFresh:y,fillBlack:"discard"===p.alpha}),new so(g,{timestamp:this.timestamp,duration:this.duration,rotation:0})})}setRotation(e){if(![0,90,180,270].includes(e))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=e}setEncodeOptions(e){if(!e||"object"!==typeof e)throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=e}[Symbol.dispose](){this.close()}}const ao=[],oo=[];let lo=0;const co=(e,t)=>{for(const n of oo)if(n.canvas.width===e&&n.canvas.height===t)return n.age=lo++,{canvas:n.canvas,context:n.context,isNew:!1};let i;if("undefined"!==typeof OffscreenCanvas)i=new OffscreenCanvas(e,t);else{if("undefined"===typeof window||"undefined"===typeof document)throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");i=document.createElement("canvas"),i.width=e,i.height=t}const r=i.getContext("2d",{alpha:!0,willReadFrequently:!1});if(!r)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return oo.length>=3&&oo.splice(mt(oo,e=>e.age),1),oo.push({canvas:i,context:r,age:lo++}),{canvas:i,context:r,isNew:!0}};class uo{constructor(e){var t,i,r,n;if(void 0!==e){if(!e||"object"!==typeof e)throw new TypeError("init.colorSpace, when provided, must be an object.");const t=Object.keys(me);if(null!=e.primaries&&!t.includes(e.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(", ")}.`);const i=Object.keys(ge);if(null!=e.transfer&&!i.includes(e.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${i.join(", ")}.`);const r=Object.keys(ye);if(null!=e.matrix&&!r.includes(e.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(", ")}.`);if(null!=e.fullRange&&"boolean"!==typeof e.fullRange)throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=null!=(t=null==e?void 0:e.primaries)?t:null,this.transfer=null!=(i=null==e?void 0:e.transfer)?i:null,this.matrix=null!=(r=null==e?void 0:e.matrix)?r:null,this.fullRange=null!=(n=null==e?void 0:e.fullRange)?n:null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}}const ho=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,fo=(e,t,i)=>{const r=Math.min(e.left,t),n=Math.min(e.top,i),s=Math.min(e.width,t-r),a=Math.min(e.height,i-n);return ne(s>=0),ne(a>=0),{left:r,top:n,width:s,height:a}},mo=(e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(e.left)||e.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(e.top)||e.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(e.width)||e.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(e.height)||e.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},po=e=>{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.colorSpace&&!["display-p3","srgb"].includes(e.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(void 0!==e.format&&"string"!==typeof e.format)throw new TypeError("options.format, when provided, must be a string.");if(void 0!==e.layout){if(!Array.isArray(e.layout))throw new TypeError("options.layout, when provided, must be an array.");for(const t of e.layout){if(!t||"object"!==typeof t)throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(void 0!==e.rect){if(!e.rect||"object"!==typeof e.rect)throw new TypeError("options.rect, when provided, must be an object.");if(void 0!==e.rect.x&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(void 0!==e.rect.y&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(void 0!==e.rect.width&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(void 0!==e.rect.height&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},go=(e,t,i)=>{const r=ko(e),n=[];let s=0;for(const a of r){const e=Math.ceil(t/a.widthDivisor),r=Math.ceil(i/a.heightDivisor),o=e*a.sampleBytes,l=o*r;n.push({offset:s,stride:o}),s+=l}return n},ko=e=>{const t=(e,t,i,r,n)=>{const s=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:i,heightDivisor:r},{sampleBytes:t,widthDivisor:i,heightDivisor:r}];return n&&s.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),s};switch(e){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:Me(e),ne(!1)}},yo=(e,t)=>{const i={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,n=bo(i,r,e.codedWidth,e.codedHeight,e.format),s=t.layout;let a;if(t.format&&t.format!==e.format){if(!["RGBA","RGBX","BGRA","BGRX"].includes(t.format))throw new Error("NotSupportedError: Invalid destination format.");a=t.format}else a=e.format;return vo(n,a,s)},bo=(e,t,i,r,n)=>{const s=H({},e);if(void 0!==t){if(0===t.width||0===t.height)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>i)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");s.x=t.x||0,s.y=t.y||0,s.width=t.width||0,s.height=t.height||0}if(!To(n,s))throw new TypeError("visibleRect alignment is invalid for the format.");return s},To=(e,t)=>{if(null===e)return!0;const i=ko(e);for(let r=0;r{const r=ko(t),n=r.length;if(void 0!==i&&i.length!==n)throw new TypeError(`Layout must have ${n} planes.`);let s=0;const a=[],o=[];for(let l=0;l4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(h),s=Math.max(s,h);for(let e=0;e 0.");if(!Number.isInteger(e.numberOfChannels)||0===e.numberOfChannels)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(null==e?void 0:e.timestamp))throw new TypeError("init.timestamp must be a number.");const t=e.data.byteLength/(Io(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");let i;if(this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate,e.data instanceof ArrayBuffer)i=new Uint8Array(e.data);else{if(!ArrayBuffer.isView(e.data))throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");i=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength)}const r=this.numberOfFrames*this.numberOfChannels*Io(this.format);if(i.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");const s=void 0!==e.frameCount?e.frameCount:this.numberOfFrames-n;if(s>this.numberOfFrames-n)throw new RangeError("frameCount out of range");const a=Io(r),o=xo(r);if(o&&e.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!o&&0!==e.planeIndex)throw new RangeError("planeIndex out of range");return(o?s:s*this.numberOfChannels)*a}copyTo(e,t){if(!we(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==t.format&&!wo.has(t.format))throw new TypeError("Invalid format.");if(void 0!==t.frameOffset&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==t.frameCount&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const{format:i,frameCount:r,frameOffset:n}=t;let{planeIndex:s}=t,a=this.format;const o=null!=i?i:this.format;if(!o)throw new Error("Destination format not determined");const l=this.numberOfFrames,c=this.numberOfChannels,u=null!=n?n:0;if(u>=l)throw new RangeError("frameOffset out of range");const d=void 0!==r?r:l-u;if(d>l-u)throw new RangeError("frameCount out of range");const h=Io(o),f=xo(o);if(f&&s>=c)throw new RangeError("planeIndex out of range");if(!f&&0!==s)throw new RangeError("planeIndex out of range");const m=(f?d:d*c)*h;if(e.byteLength2&&o!==a)return void _o(this._data,p,a,o,c,s,u,d);try{return void this._data.copyTo(e,{planeIndex:s,frameOffset:u,frameCount:d,format:o})}catch(w){if("f32-planar"===o)throw w;a="f32-planar"}}const k=Co(a),y=Io(a),b=xo(a);let T;if(this._data instanceof So){const e=e=>{const t=this._data.getDataPlane(e);if(!(t instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");const i=l*y*(b?1:c);if(t.byteLength!==i)throw new TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${t.byteLength} bytes.`);return t};if(b)if(f)T=e(s),s=0;else{T=new Uint8Array(l*y*c);for(let t=0;tthis.numberOfFrames)throw new RangeError("startFrame out of range.");if(t>this.numberOfFrames)throw new RangeError("endFrame out of range.");if(t0)for(let r=0;r0&&this.copyTo(n,{planeIndex:0,format:this.format,frameOffset:e,frameCount:i});return new Po({data:n,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+e/this.sampleRate})}close(){this._closed||(null==to||to.unregister(this),this._data instanceof So?(this._data._referenceCount--,0===this._data._referenceCount&&this._data.close()):Eo(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof So?this._createAudioDataFromData():Eo(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(xo(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i0;){const n=Math.min(s,o),l=new Float32Array(i*n);for(let t=0;t0;){const n=Math.min(s,o),c=new Float32Array(i*n);for(let t=0;t{switch(e){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},xo=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Co=e=>{switch(e){case"u8":case"u8-planar":return(e,t)=>(e.getUint8(t)-128)/128;case"s16":case"s16-planar":return(e,t)=>e.getInt16(t,!0)/32768;case"s32":case"s32-planar":return(e,t)=>e.getInt32(t,!0)/2147483648;case"f32":case"f32-planar":return(e,t)=>e.getFloat32(t,!0)}},Bo=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,ze(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,ze(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,ze(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},Eo=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,_o=(e,t,i,r,n,s,a,o)=>{const l=Co(i),c=Bo(r),u=Io(i),d=Io(r),h=xo(i);if(xo(r))if(h){const r=new ArrayBuffer(o*u),n=de(r);e.copyTo(r,{planeIndex:s,frameOffset:a,frameCount:o,format:i});for(let e=0;e{if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.metadataOnly&&"boolean"!==typeof e.metadataOnly)throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(void 0!==e.verifyKeyPackets&&"boolean"!==typeof e.verifyKeyPackets)throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(e.verifyKeyPackets&&e.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(void 0!==e.skipLiveWait&&"boolean"!==typeof e.skipLiveWait)throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},Mo=e=>{if(!dt(e))throw new TypeError("timestamp must be a number.")},Do=(e,t,i)=>i.verifyKeyPackets?t.then(t=>Y(null,null,function*(){if(!t||"delta"===t.type)return t;const i=yield e.determinePacketType(t);return i&&(t.type=i),t})):t;class No{constructor(e){if(!(e instanceof Yo))throw new TypeError("track must be an InputTrack.");this._track=e}getFirstPacket(){return Y(this,arguments,function*(e={}){if(Ao(e),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getFirstPacket(e),e)})}getFirstKeyPacket(){return Y(this,arguments,function*(e={}){Ao(e);const t=yield this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null})}getPacket(e){return Y(this,arguments,function*(e,t={}){if(Mo(e),Ao(t),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getPacket(e,t),t)})}getNextPacket(e){return Y(this,arguments,function*(e,t={}){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(Ao(t),this._track.input._disposed)throw new fl;return Do(this._track,this._track._backing.getNextPacket(e,t),t)})}getKeyPacket(e){return Y(this,arguments,function*(e,t={}){if(Mo(e),Ao(t),this._track.input._disposed)throw new fl;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const i=yield this._track._backing.getKeyPacket(e,t);if(!i)return i;ne("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getKeyPacket(i.timestamp-1/(yield this._track.getTimeResolution()),t):i})}getNextKeyPacket(e){return Y(this,arguments,function*(e,t={}){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(Ao(t),this._track.input._disposed)throw new fl;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const i=yield this._track._backing.getNextKeyPacket(e,t);if(!i)return i;ne("key"===i.type);return"delta"===(yield this._track.determinePacketType(i))?this.getNextKeyPacket(i,t):i})}packets(e,t,i={}){if(void 0!==e&&!(e instanceof kr))throw new TypeError("startPacket must be an EncodedPacket.");if(void 0!==e&&e.isMetadataOnly&&!(null==i?void 0:i.metadataOnly))throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(void 0!==t&&!(t instanceof kr))throw new TypeError("endPacket must be an EncodedPacket.");if(Ao(i),this._track.input._disposed)throw new fl;const r=[];let{promise:n,resolve:s}=_e(),{promise:a,resolve:o}=_e(),l=!1,c=!1,u=null,d=!1;const h=[],f=()=>Math.max(2,h.length);(()=>Y(this,null,function*(){let u=null!=e?e:yield this.getFirstPacket(i);for(;u&&!c&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=(null==t?void 0:t.sequenceNumber));)r.length>f()?(({promise:a,resolve:o}=_e()),yield a):(r.push(u),s(),({promise:n,resolve:s}=_e()),u=yield this.getNextPacket(u,i));l=!0,s()}))().catch(e=>{d||(u=e,d=!0,s())});const m=this._track;return{next(){return Y(this,null,function*(){for(;;){if(m.input._disposed)throw new fl;if(c)return{value:void 0,done:!0};if(d)throw u;if(r.length>0){const e=r.shift(),t=performance.now();for(h.push(t);h.length>0&&t-h[0]>=1e3;)h.shift();return o(),{value:e,done:!1}}if(l)return{value:void 0,done:!0};yield n}})},return(){return Y(this,null,function*(){return c=!0,o(),s(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}class Oo{constructor(e,t){this.onSample=e,this.onError=t}}class zo{mediaSamplesInRange(e=-1/0,t=1/0,i){Mo(e),Mo(t);const r=[];let n=!1,s=null,{promise:a,resolve:o}=_e(),{promise:l,resolve:c}=_e(),u=!1,d=!1,h=!1,f=null,m=null,p=!1;const g=V(H({},i),{verifyKeyPackets:!0,metadataOnly:!1});(()=>Y(this,null,function*(){var i;f=yield this._createDecoder(i=>{c(),i.timestamp>=t&&(d=!0),d?i.close():(s&&(i.timestamp>e?(r.push(s),n=!0):s.close()),i.timestamp>=e&&(r.push(i),n=!0),s=n?null:i,r.length>0&&(o(),({promise:a,resolve:o}=_e())))},e=>{p||(m=e,p=!0,o())});const k=this._createPacketSink(),y=null!=(i=yield k.getKeyPacket(e,g))?i:yield k.getFirstKeyPacket(g);let b=y;const T=k.packets(null!=y?y:void 0,void 0,g);for(yield T.next();b&&!d&&!this._track.input._disposed;){const e=Lo(r.length);if(r.length+f.getDecodeQueueSize()>e){({promise:l,resolve:c}=_e()),yield l;continue}f.decode(b);const t=yield T.next();if(t.done)break;b=t.value}yield T.return(),h||this._track.input._disposed||(yield f.flush()),!n&&s&&r.push(s),u=!0,o()}))().catch(e=>{p||(m=e,p=!0,o())}).finally(()=>{null==f||f.close()});const k=this._track,y=()=>{null==s||s.close();for(const e of r)e.close()};return{next(){return Y(this,null,function*(){for(;;){if(k.input._disposed)throw h=!0,d=!0,y(),new fl;if(h)return{value:void 0,done:!0};if(p)throw h=!0,d=!0,y(),m;if(r.length>0){const e=r.shift();return c(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};yield a}})},return(){return Y(this,null,function*(){return h=!0,d=!0,c(),o(),y(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){(e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw new TypeError("Argument must be an iterable or async iterable.")})(e);const i=function(e){return Z(this,null,function*(){Symbol.iterator in e?yield*ee(e[Symbol.iterator]()):yield*ee(e[Symbol.asyncIterator]())})}(e),r=[],n=[];let{promise:s,resolve:a}=_e(),{promise:o,resolve:l}=_e(),c=!1,u=!1,d=null,h=null,f=!1;const m=e=>{n.push(e),a(),({promise:s,resolve:a}=_e())},p=V(H({},t),{verifyKeyPackets:!0,metadataOnly:!1});(()=>Y(this,null,function*(){d=yield this._createDecoder(e=>{if(l(),u)return void e.close();let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let i=0;i{f||(h=e,f=!0,a())});const e=this._createPacketSink();let t=null,s=null,g=-1;const k=()=>Y(this,null,function*(){ne(s),ne(d);let t=s;for(d.decode(t);t.sequenceNumberi&&!u;)({promise:o,resolve:l}=_e()),yield o;if(u)break;const r=yield e.getNextPacket(t,p);ne(r),d.decode(r),t=r}g=-1}),y=()=>Y(this,null,function*(){ne(d),yield d.flush();for(let e=0;e{f||(h=e,f=!0,a())}).finally(()=>{null==d||d.close()});const g=this._track,k=()=>{for(const e of n)null==e||e.close()};return{next(){return Y(this,null,function*(){for(;;){if(g.input._disposed)throw u=!0,k(),new fl;if(u)return{value:void 0,done:!0};if(f)throw u=!0,k(),h;if(n.length>0){const e=n.shift();return ne(void 0!==e),l(),{value:e,done:!1}}if(c)return{value:void 0,done:!0};yield s}})},return(){return Y(this,null,function*(){return u=!0,l(),a(),k(),{value:void 0,done:!0}})},throw(e){return Y(this,null,function*(){throw e})},[Symbol.asyncIterator](){return this}}}}const Lo=e=>0===e?40:8;class Uo extends Oo{constructor(e,t,i,r,n,s){var a,o,l,c,u,d,h,f;super(e,t),this.codec=i,this.decoderConfig=r,this.rotation=n,this.timeResolution=s,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Ye,this.customDecoderQueueSize=0,this.inputTimestamps=[],this.sampleQueue=[],this.currentPacketIndex=0,this.raslSkipped=!1,this.alphaDecoder=null,this.alphaHadKeyframe=!1,this.colorQueue=[],this.alphaQueue=[],this.merger=null,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1,this.finalSamples=[],this.mergeAlphaPromises=[];const m=Ro.find(e=>e.supports(i,r));if(m)this.customDecoder=new m,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof so))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();ne(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if(rt()){if("avc"===i&&this.decoderConfig.description){const e=Xt(ue(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=Gt(e.sequenceParameterSets[0]);t&&(0===t.frameMbsOnlyFlag&&(this.decoderConfig=V(H({},this.decoderConfig),{hardwareAcceleration:"prefer-software"})),0!==t.maxDecFrameBuffering&&1!==t.bitstreamRestrictionFlag&&(e.sequenceParameterSets[0]=Yt(t),this.decoderConfig=V(H({},this.decoderConfig),{description:Kt(e)})))}}Te(this.decoderConfig.colorSpace)||(this.decoderConfig=V(H({},this.decoderConfig),{colorSpace:{primaries:null!=(o=null==(a=this.decoderConfig.colorSpace)?void 0:a.primaries)?o:"bt709",matrix:null!=(c=null==(l=this.decoderConfig.colorSpace)?void 0:l.matrix)?c:"bt709",transfer:null!=(d=null==(u=this.decoderConfig.colorSpace)?void 0:u.transfer)?d:"bt709",fullRange:null!=(f=null==(h=this.decoderConfig.colorSpace)?void 0:h.fullRange)&&f}}))}const t=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){var e,t;return this.customDecoder?this.customDecoderQueueSize:(ne(this.decoder),Math.max(this.decoder.decodeQueueSize,null!=(t=null==(e=this.alphaDecoder)?void 0:e.decodeQueueSize)?t:0))}decode(e){if("hevc"===this.codec&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--);else{if(ne(this.decoder),Ze()||Ee(this.inputTimestamps,e.timestamp,e=>e),rt()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];let i=!1;for(const n of Lt(e.data,this.decoderConfig)){const r=Ut(e.data[n.offset]);if(i||(i=r>=1&&r<=5),r===At.AUD){if(i)break;t.length=0}r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}if(!this.decoderConfig.description)for(let e=0;e{if(t.description){const i=3&ue(t.description)[4];return Vt(e,i+1)}return Ht(e)})(t,this.decoderConfig);e=new kr(r,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=di(e.data,this.decoderConfig);t&&(e=new kr(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha)return void this.pushNullAlphaFrame();if(this.merger||(this.merger=new Wo),!this.alphaDecoder){const e=e=>{if(this.colorQueue.length>0){const t=this.colorQueue.shift();ne(void 0!==t),this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){const e=this.colorQueue.shift();ne(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(i){this.onError(i)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=bi(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe="key"===t),this.alphaHadKeyframe){if("hevc"===this.codec&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha))return void this.pushNullAlphaFrame();this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(null!=t?t:e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){0===this.alphaDecoderQueueSize?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(const t of Jt(e,this.decoderConfig)){const i=Zt(e[t.offset]);if(i===Dt.RASL_N||i===Dt.RASL_R)return!0}return!1}sampleHandler(e){if(Ze()){if(this.sampleQueue.length>0&&e.timestamp>=ae(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}Ee(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();ne(void 0!==t),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}mergeAlpha(e,t){return Y(this,null,function*(){const i=_e();this.mergeAlphaPromises.push(i.promise);const r={sample:null};this.finalSamples.push(r);try{if(t){ne(this.merger);const i=yield this.merger.merge(e,t);r.sample=new so(i)}else r.sample=new so(e);for(;this.finalSamples.length>0&&null!==this.finalSamples[0].sample;){const e=this.finalSamples.shift();this.sampleHandler(e.sample)}}catch(n){Re(this.finalSamples,r),this.onError(n)}finally{Re(this.mergeAlphaPromises,i.promise),i.resolve()}})}flush(){return Y(this,null,function*(){var e;if(this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(ne(this.decoder),yield Promise.all([this.decoder.flush(),null==(e=this.alphaDecoder)?void 0:e.flush()]),yield Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Ze()){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1})}close(){var e;this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(ne(this.decoder),"closed"!==this.decoder.state&&this.decoder.close(),this.alphaDecoder&&"closed"!==this.alphaDecoder.state&&this.alphaDecoder.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>null==e?void 0:e.close()),this.alphaQueue.length=0,null==(e=this.merger)||e.close());for(const t of this.sampleQueue)t.close();this.sampleQueue.length=0}}let qo=null;class Wo{constructor(){this.workers=[],this.nextWorkerIndex=0,this.pendingRequests=new Map,this.nextRequestId=0}merge(e,t){if(0===this.workers.length){if(!qo){const e=new Blob([`(${Ho.toString()})()`],{type:"application/javascript"});qo=URL.createObjectURL(e)}const e=ze(navigator.hardwareConcurrency,1,4);for(let t=0;t{const t=e.data,i=this.pendingRequests.get(t.id);i&&(this.pendingRequests.delete(t.id),"error"in t?i.reject(new Error(t.error)):i.resolve(t.frame))}),e.addEventListener("error",e=>{const t=new Error(e.message||"Color/alpha merge worker error.");for(const i of this.pendingRequests.values())i.reject(t);this.pendingRequests.clear()}),this.workers.push(e)}}const i=this.nextRequestId++,r=_e();this.pendingRequests.set(i,r);const n=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,n.postMessage({id:i,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){for(const t of this.workers)t.terminate();this.workers.length=0;const e=new Error("Color/alpha merger closed.");for(const t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}}const Ho=()=>{let e=null,t=null,i=Promise.resolve();self.addEventListener("message",e=>{const{id:t,color:n,alpha:s}=e.data;i=i.then(()=>Y(null,null,function*(){try{const e=yield r(n,s);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{n.close(),s.close()}}))});const r=(e,t)=>Y(null,null,function*(){const i=e.format,r=t.format;if(!i||!r)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");const o=i.includes("P10"),l=i.includes("P12"),c=r.includes("P10"),u=r.includes("P12");if(c!==o||u!==l)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${i}', alpha: '${r}').`);if("RGBX"===i||"RGBA"===i||"BGRX"===i||"BGRA"===i)return yield n(e,t,i);if("I420"===i||"I420P10"===i||"I420P12"===i||"I422"===i||"I422P10"===i||"I422P12"===i||"I444"===i||"I444P10"===i||"I444P12"===i)return yield s(e,t,i);if("NV12"===i)return yield a(e,t);throw new Error(`CPU color/alpha merging does not support format '${i}'.`)}),n=(e,t,i)=>Y(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=new Uint8Array(4*d);yield e.copyTo(h);const f=yield o(t,c,u,1);for(let e=0,t=3;eY(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=i.includes("P10"),h=i.includes("P12"),f=d||h?2:1;let m,p;i.startsWith("I420")?(m=Math.ceil(c/2),p=Math.ceil(u/2)):i.startsWith("I422")?(m=Math.ceil(c/2),p=u):(m=c,p=u);const g=c*u,k=g*f,y=m*p*f,b=new Uint8Array(k+2*y+g*f);yield e.copyTo(b);const T=yield o(t,c,u,f),v=k+2*y;b.set(T,v);const w={format:i.slice(0,4)+"A"+i.slice(4),codedWidth:c,codedHeight:u,timestamp:e.timestamp,duration:null!=(l=e.duration)?l:void 0,transfer:[b.buffer]};return new VideoFrame(b,w)}),a=(e,i)=>Y(null,null,function*(){var r,n,s,a,l;const c=null!=(n=null==(r=e.visibleRect)?void 0:r.width)?n:e.codedWidth,u=null!=(a=null==(s=e.visibleRect)?void 0:s.height)?a:e.codedHeight,d=c*u,h=Math.ceil(c/2)*Math.ceil(u/2),f=e.allocationSize();t&&t.byteLength===f||(t=new Uint8Array(f)),yield e.copyTo(t);const m=new Uint8Array(d+2*h+d);m.set(t.subarray(0,d),0);const p=d,g=d+h,k=d;for(let e=0;eY(null,null,function*(){const s=t.allocationSize();e&&e.byteLength===s||(e=new Uint8Array(s)),yield t.copyTo(e);const a=t.format;if("RGBA"===a||"BGRA"===a||"RGBX"===a||"BGRX"===a){const t="RGBA"===a||"RGBX"===a?0:2,n=i*r;for(let i=0;i{if(!e||"object"!==typeof e)throw new TypeError("decoderOptions must be an object.");if(void 0!==e.hardwareAcceleration&&!["no-preference","prefer-hardware","prefer-software"].includes(e.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(void 0!==e.optimizeForLatency&&"boolean"!==typeof e.optimizeForLatency)throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")};class jo extends zo{constructor(e,t={}){if(!(e instanceof el))throw new TypeError("videoTrack must be an InputVideoTrack.");Vo(t),super(),this._track=e,this._decoderOptions=t}_createDecoder(e,t){return Y(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof VideoDecoder)throw new Error(nt("VideoDecoder"));throw new Error("This video track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getRotation();let n=yield this._track.getDecoderConfig();const s=yield this._track.getTimeResolution();return ne(i&&n),n=V(H({},n),{hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency}),new Uo(e,t,i,n,r,s)})}_createPacketSink(){return new No(this._track)}getSample(e){return Y(this,arguments,function*(e,t={}){Mo(e);try{for(var i,r,n,s=te(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Ko{constructor(e,t={}){var i,r,n;if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof el))throw new TypeError("videoTrack must be an InputVideoTrack.");if(t&&"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.alpha&&"boolean"!==typeof t.alpha)throw new TypeError("options.alpha, when provided, must be a boolean.");if(void 0!==t.width&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(void 0!==t.height&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(void 0!==t.fit&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(void 0!==t.width&&void 0!==t.height&&void 0===t.fit)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(void 0!==t.rotation&&![0,90,180,270].includes(t.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(void 0!==t.crop&&mo(t.crop,"options."),void 0!==t.poolSize&&("number"!==typeof t.poolSize||!Number.isInteger(t.poolSize)||t.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");void 0!==t.decoderOptions&&Vo(t.decoderOptions),this._videoTrack=e,this._alpha=null!=(i=t.alpha)&&i,this._options=t,this._fit=null!=(r=t.fit)?r:"fill",this._videoSampleSink=new jo(e,t.decoderOptions),this._canvasPool=Array.from({length:null!=(n=t.poolSize)?n:0},()=>null)}_ensureInit(){var e;return null!=(e=this._initPromise)?e:this._initPromise=(()=>Y(this,null,function*(){var e;const t=this._options,i=this._videoTrack,r=null!=(e=t.rotation)?e:yield i.getRotation(),n=yield i.getSquarePixelWidth(),s=yield i.getSquarePixelHeight(),[a,o]=r%180===0?[n,s]:[s,n];let l=t.crop;l&&(l=fo(l,a,o));let[c,u]=l?[l.width,l.height]:[a,o];const d=c/u;void 0!==t.width&&void 0===t.height?(c=t.width,u=Math.round(c/d)):void 0===t.width&&void 0!==t.height?(u=t.height,c=Math.round(u*d)):void 0!==t.width&&void 0!==t.height&&(c=t.width,u=t.height),this._width=c,this._height=u,this._rotation=r,this._crop=l}))()}_videoSampleToWrappedCanvas(e){const t=this._width,i=this._height;let r=this._canvasPool[this._nextCanvasIndex],n=!1;r||("undefined"!==typeof document?(r=document.createElement("canvas"),r.width=t,r.height=i):r=new OffscreenCanvas(t,i),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),n=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const s=r.getContext("2d",{alpha:this._alpha||tt()});ne(s),e._drawWithFitAndMipmapping(r,s,{fit:this._fit,rotation:this._rotation,crop:this._crop,targetIsFresh:n,fillBlack:!this._alpha&&tt()});const a={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),a}getCanvas(e,t){return Y(this,null,function*(){Mo(e),yield this._ensureInit();const i=yield this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)})}canvases(e,t,i){return Z(this,null,function*(){yield new J(this._ensureInit()),yield*ee(Oe(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e)))})}canvasesAtTimestamps(e,t){return Z(this,null,function*(){yield new J(this._ensureInit()),yield*ee(Oe(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e)))})}}class Xo extends Oo{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Ye,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;const n=t=>{let i=t.timestamp;null!==this.expectedFirstTimestamp&&null===this.currentTimestamp&&(this.timestampOffset=this.expectedFirstTimestamp-i),i+=this.timestampOffset,(null===this.currentTimestamp||Math.abs(i-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=i);const n=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const s=r.sampleRate;t.setTimestamp(Math.round(n*s)/s),e(t)},s=Fo.find(e=>e.supports(i,r));if(s)this.customDecoder=new s,this.customDecoder.codec=i,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Po))throw new TypeError("The argument passed to onSample must be an AudioSample.");n(e)},this.customDecoder.onError=e=>{t(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(e=>t(e));else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{n(new Po(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(ne(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(e=>this.onError(e)).finally(()=>this.customDecoderQueueSize--)):(ne(this.decoder),null!=this.expectedFirstTimestamp||(this.expectedFirstTimestamp=e.timestamp),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return Y(this,null,function*(){this.customDecoder?yield this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(ne(this.decoder),yield this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0})}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(ne(this.decoder),"closed"!==this.decoder.state&&this.decoder.close())}}class $o extends Oo{constructor(e,t,i){super(e,t),this.decoderConfig=i,this.currentTimestamp=null,ne(Vi.includes(i.codec)),this.codec=i.codec;const{dataType:r,sampleSize:n,littleEndian:s}=rr(this.codec);switch(this.inputSampleSize=n,n){case 1:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint8(t)-q(2,7):"signed"===r?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===r?this.readInputValue=(e,t)=>(e=>{let t=0,i=0,r=~e;128&r&&(r&=-129,t=-1),i=5+((240&r)>>4);const n=(1<(e=>{let t=0,i=0,r=85^e;128&r&&(r&=-129,t=-1),i=4+((240&r)>>4);let n=0;return n=4!==i?1<e.getUint16(t,s)-q(2,15):"signed"===r?this.readInputValue=(e,t)=>e.getInt16(t,s):ne(!1);break;case 3:"unsigned"===r?this.readInputValue=(e,t)=>De(e,t,s)-q(2,23):"signed"===r?this.readInputValue=(e,t)=>((e,t,i)=>De(e,t,i)<<8>>8)(e,t,s):ne(!1);break;case 4:"unsigned"===r?this.readInputValue=(e,t)=>e.getUint32(t,s)-q(2,31):"signed"===r?this.readInputValue=(e,t)=>e.getInt32(t,s):"float"===r?this.readInputValue=(e,t)=>e.getFloat32(t,s):ne(!1);break;case 8:"float"===r?this.readInputValue=(e,t)=>e.getFloat64(t,s):ne(!1);break;default:Me(n),ne(!1)}switch(n){case 1:"ulaw"===r||"alaw"===r?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(e,t,i)=>e.setUint8(t,i+q(2,7)));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(e,t,i)=>e.setInt16(t,i,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i<<8,!0);break;case 4:this.outputSampleSize=4,"float"===r?(this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0)):(this.outputFormat="s32",this.writeOutputValue=(e,t,i)=>e.setInt32(t,i,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(e,t,i)=>e.setFloat32(t,i,!0);break;default:Me(n),ne(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=de(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,n=new ArrayBuffer(r),s=new DataView(n);for(let c=0;c=a)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=a;const l=new Po({format:this.outputFormat,data:n,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(l)}flush(){return Y(this,null,function*(){})}close(){}}class Go extends zo{constructor(e){if(!(e instanceof tl))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}_createDecoder(e,t){return Y(this,null,function*(){if(!(yield this._track.canDecode())){if("undefined"===typeof AudioDecoder)throw new Error(nt("AudioDecoder"));throw new Error("This audio track cannot be decoded in this environment. Make sure to check decodability before using a track.")}const i=yield this._track.getCodec(),r=yield this._track.getDecoderConfig();return ne(i&&r),Vi.includes(r.codec)?new $o(e,t,r):new Xo(e,t,i,r)})}_createPacketSink(){return new No(this._track)}getSample(e){return Y(this,arguments,function*(e,t={}){Mo(e);try{for(var i,r,n,s=te(this.mediaSamplesAtTimestamps([e],t));i=!(r=yield s.next()).done;i=!1){return r.value}}catch(r){n=[r]}finally{try{i&&(r=s.return)&&(yield r.call(s))}finally{if(n)throw n[0]}}throw new Error("Internal error: Iterator returned nothing.")})}samples(e,t,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Qo{constructor(e){if(!(e instanceof tl))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Go(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}getBuffer(e,t){return Y(this,null,function*(){Mo(e);const i=yield this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)})}buffers(e,t,i){return Oe(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return Oe(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class Yo{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof el}isAudioTrack(){return this instanceof tl}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}getInternalCodecId(){return Y(this,null,function*(){return this._backing.getInternalCodecId()})}get internalCodecId(){return Jo(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}getLanguageCode(){return Y(this,null,function*(){return this._backing.getLanguageCode()})}get languageCode(){return Jo(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}getName(){return Y(this,null,function*(){return this._backing.getName()})}get name(){return Jo(this._backing.getName(),"name","getName")}getTimeResolution(){return Y(this,null,function*(){return this._backing.getTimeResolution()})}get timeResolution(){return Jo(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}isRelativeToUnixEpoch(){return Y(this,null,function*(){return this._backing.isRelativeToUnixEpoch()})}getUnixTimeForTimestamp(e){return Y(this,null,function*(){return this._backing.getUnixTimeForTimestamp(e)})}hasUnixTimeMapping(){return Y(this,null,function*(){return null!==(yield this._backing.getUnixTimeForTimestamp(yield this.getFirstTimestamp()))})}getDisposition(){return Y(this,null,function*(){return this._backing.getDisposition()})}get disposition(){return Jo(this._backing.getDisposition(),"disposition","getDisposition")}getBitrate(){return Y(this,null,function*(){return this._backing.getBitrate()})}getAverageBitrate(){return Y(this,null,function*(){return this._backing.getAverageBitrate()})}getFirstTimestamp(){return Y(this,null,function*(){var e;const t=yield this._backing.getFirstPacket({metadataOnly:!0});return null!=(e=null==t?void 0:t.timestamp)?e:0})}computeDuration(e){return Y(this,null,function*(){var t,i;const r=yield this._backing.getPacket(1/0,H({metadataOnly:!0},e)),n=(null!=(t=null==r?void 0:r.timestamp)?t:0)+(null!=(i=null==r?void 0:r.duration)?i:0);return We(n,yield this.getTimeResolution())})}getDurationFromMetadata(){return Y(this,arguments,function*(e={}){return this._backing.getDurationFromMetadata(e)})}computePacketStats(e=1/0,t){return Y(this,null,function*(){const i=new No(this);let r=1/0,n=-1/0,s=0,a=0;try{for(var o,l,c,u=te(i.packets(void 0,void 0,H({metadataOnly:!0},t)));o=!(l=yield u.next()).done;o=!1){const t=l.value;if(s>=e&&t.timestamp>=n)break;r=Math.min(r,t.timestamp),n=Math.max(n,t.timestamp+t.duration),s++,a+=t.byteLength}}catch(l){c=[l]}finally{try{o&&(l=u.return)&&(yield l.call(u))}finally{if(c)throw c[0]}}return{packetCount:s,averagePacketRate:s?Number((s/(n-r)).toPrecision(16)):0,averageBitrate:s?Number((8*a/(n-r)).toPrecision(16)):0}})}isLive(){return Y(this,null,function*(){return null!==(yield this._backing.getLiveRefreshInterval())})}getLiveRefreshInterval(){return Y(this,null,function*(){return this._backing.getLiveRefreshInterval()})}canBePairedWith(e){if(!(e instanceof Yo))throw new TypeError("other must be an InputTrack.");return this.input===e.input&&this!==e&&(this._backing.getPairingMask()&e._backing.getPairingMask())!==BigInt("0")}getPairableTracks(e){return Y(this,null,function*(){return this.input.getTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPairableVideoTracks(e){return Y(this,null,function*(){return this.input.getVideoTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPairableAudioTracks(e){return Y(this,null,function*(){return this.input.getAudioTracks(sl({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableVideoTrack(e){return Y(this,null,function*(){return this.input.getPrimaryVideoTrack(sl({filter:e=>e.canBePairedWith(this)},e))})}getPrimaryPairableAudioTrack(e){return Y(this,null,function*(){return this.input.getPrimaryAudioTrack(sl({filter:e=>e.canBePairedWith(this)},e))})}hasPairableTrack(e){return Y(this,null,function*(){e&&(e=Zo(e));const t=yield this.input.getTracks();for(const i of t)if(this.canBePairedWith(i)&&(!e||(yield e(i))))return!0;return!1})}hasPairableVideoTrack(e){return e&&(e=Zo(e)),this.hasPairableTrack(t=>Y(this,null,function*(){return t.isVideoTrack()&&(!e||(yield e(t)))}))}hasPairableAudioTrack(e){return e&&(e=Zo(e)),this.hasPairableTrack(t=>Y(this,null,function*(){return t.isAudioTrack()&&(!e||(yield e(t)))}))}}const Jo=(e,t,i)=>{if(at(e))throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},Zo=e=>{if(void 0!==e&&"function"!==typeof e)throw new TypeError("predicate, when provided, must be a function.");return e?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("predicate must return or resolve to a boolean value.");return e},r=e(t);return at(r)?r.then(i):i(r)}:void 0};class el extends Yo{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return"video"}getCodec(){return Y(this,null,function*(){return this._backing.getCodec()})}get codec(){return Jo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return Y(this,null,function*(){var e,t,i;return null!=(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))?i:"prores"===(yield this._backing.getCodec())})}getCodedWidth(){return Y(this,null,function*(){return this._backing.getCodedWidth()})}get codedWidth(){return Jo(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}getCodedHeight(){return Y(this,null,function*(){return this._backing.getCodedHeight()})}get codedHeight(){return Jo(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}getRotation(){return Y(this,null,function*(){return this._backing.getRotation()})}get rotation(){return Jo(this._backing.getRotation(),"rotation","getRotation")}getSquarePixelWidth(){return Y(this,null,function*(){return this._backing.getSquarePixelWidth()})}get squarePixelWidth(){return Jo(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}getSquarePixelHeight(){return Y(this,null,function*(){return this._backing.getSquarePixelHeight()})}get squarePixelHeight(){return Jo(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}getPixelAspectRatio(){return Y(this,null,function*(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=pt({num:(yield this.getSquarePixelWidth())*(yield this.getCodedHeight()),den:(yield this.getSquarePixelHeight())*(yield this.getCodedWidth())})})}get pixelAspectRatio(){var e;return null!=(e=this._pixelAspectRatioCache)?e:this._pixelAspectRatioCache=pt({num:Jo(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Jo(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Jo(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Jo(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}getDisplayWidth(){return Y(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight()})}get displayWidth(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayWidth)?void 0:t.call(e);if(void 0!==i){const e=Jo(i,"displayWidth","getDisplayWidth");if(null!==e)return e}const r=Jo(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Jo(r,"displayWidth","getDisplayWidth")}getDisplayHeight(){return Y(this,null,function*(){var e,t;const i=yield null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(null!=i)return i;return(yield this.getRotation())%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth()})}get displayHeight(){var e,t;const i=null==(t=(e=this._backing).getMetadataDisplayHeight)?void 0:t.call(e);if(void 0!==i){const e=Jo(i,"displayHeight","getDisplayHeight");if(null!==e)return e}const r=Jo(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Jo(r,"displayHeight","getDisplayHeight")}getColorSpace(){return Y(this,null,function*(){return this._backing.getColorSpace()})}hasHighDynamicRange(){return Y(this,null,function*(){const e=yield this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pq"===e.transfer||"hlg"===e.transfer||"bt2020-ncl"===e.matrix})}canBeTransparent(){return Y(this,null,function*(){return this._backing.canBeTransparent()})}getDecoderConfig(){return Y(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return Y(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return Y(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(ne(null!==t),Ro.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(yield VideoDecoder.isConfigSupported(e)).supported}catch(e){return vt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return Y(this,null,function*(){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");const t=yield this.getCodec();if(null===t)return null;const i=yield this.getDecoderConfig();return ne(i),bi(t,i,e.data)})}computeFrameRateMetrics(){return Y(this,arguments,function*(e={}){var t,i;if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(void 0!==e.targetPacketCount&&(!dt(e.targetPacketCount)||e.targetPacketCount<0))throw new TypeError("options.targetPacketCount must be a non-negative number.");const r=yield this.getTimeResolution(),n=null!=(t=e.targetPacketCount)?t:256,s=new No(this),a=[];let o=-1/0,l=0;try{for(var c,u,d,h=te(s.packets(void 0,void 0,{metadataOnly:!0}));c=!(u=yield h.next()).done;c=!1){const e=u.value;if(a.length>=n&&e.timestamp>=o)break;a.push(e.timestamp),o=Math.max(o,e.timestamp),l++}}catch(u){d=[u]}finally{try{c&&(u=h.return)&&(yield u.call(h))}finally{if(d)throw d[0]}}const f=new Float64Array(a.length);for(let R=0;Re-t),I=S-1>>1,x=S>>1;let C=0,B=0,E=0;for(const R of P)if(E+=b.get(R),0===C&&E>I&&(C=R),E>x){B=R;break}const _=(k/C+k/B)/2;return{underlyingFrameRate:g,bestGuessFrameRate:null!==g?g:cl(_),minFrameRate:k/v,maxFrameRate:k/T,averageFrameRate:k*S/w,medianFrameRate:_,frameRateIsConstant:null!==g&&1===T&&1===v,probedPacketCount:l}})}}class tl extends Yo{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}getCodec(){return Y(this,null,function*(){return this._backing.getCodec()})}get codec(){return Jo(this._backing.getCodec(),"codec","getCodec")}hasOnlyKeyPackets(){return Y(this,null,function*(){var e,t,i;return null==(i=yield null==(t=(e=this._backing).getHasOnlyKeyPackets)?void 0:t.call(e))||i})}getNumberOfChannels(){return Y(this,null,function*(){return this._backing.getNumberOfChannels()})}get numberOfChannels(){return Jo(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}getSampleRate(){return Y(this,null,function*(){return this._backing.getSampleRate()})}get sampleRate(){return Jo(this._backing.getSampleRate(),"sampleRate","getSampleRate")}getDecoderConfig(){return Y(this,null,function*(){return this._backing.getDecoderConfig()})}getCodecParameterString(){return Y(this,null,function*(){var e,t,i;const r=yield null==(t=(e=this._backing).getMetadataCodecParameterString)?void 0:t.call(e);if(null!=r)return r;const n=yield this._backing.getDecoderConfig();return null!=(i=null==n?void 0:n.codec)?i:null})}canDecode(){return Y(this,null,function*(){try{const e=yield this._backing.getDecoderConfig();if(!e)return!1;const t=yield this._backing.getCodec();if(ne(null!==t),Fo.some(i=>i.supports(t,e)))return!0;if(e.codec.startsWith("pcm-"))return!0;if("undefined"===typeof AudioDecoder)return!1;return!0===(yield AudioDecoder.isConfigSupported(e)).supported}catch(e){return vt._error("Error during decodability check:",e),!1}})}determinePacketType(e){return Y(this,null,function*(){if(!(e instanceof kr))throw new TypeError("packet must be an EncodedPacket.");return null===(yield this.getCodec())?null:"key"})}}const il=e=>-(null!=e?e:-1/0),rl=e=>-e,nl=e=>{if("object"!==typeof e||!e)throw new TypeError("query must be an object.");if(void 0!==e.filter&&"function"!==typeof e.filter)throw new TypeError("query.filter, when provided, must be a function.");if(void 0!==e.sortBy&&"function"!==typeof e.sortBy)throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:e.filter?t=>{const i=e=>{if("boolean"!==typeof e)throw new TypeError("query.filter must return or resolve to a boolean.");return e},r=e.filter(t);return at(r)?r.then(i):i(r)}:void 0,sortBy:e.sortBy?t=>{const i=e=>{if("number"!==typeof e&&(!Array.isArray(e)||!e.every(e=>"number"===typeof e)))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return e},r=e.sortBy(t);return at(r)?r.then(i):i(r)}:void 0}},sl=(e,t)=>({filter:(null==e?void 0:e.filter)||(null==t?void 0:t.filter)?i=>{var r,n;const s=null==(n=null==(r=null==e?void 0:e.filter)?void 0:r.call(e,i))||n,a=e=>{var r,n;return!1!==e&&(null==(n=null==(r=null==t?void 0:t.filter)?void 0:r.call(t,i))||n)};return at(s)?s.then(a):a(s)}:void 0,sortBy:(null==e?void 0:e.sortBy)||(null==t?void 0:t.sortBy)?i=>{var r,n,s,a;const o=null!=(n=null==(r=null==e?void 0:e.sortBy)?void 0:r.call(e,i))?n:[],l=null!=(a=null==(s=null==t?void 0:t.sortBy)?void 0:s.call(t,i))?a:[],c=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return at(o)||at(l)?Promise.all([o,l]).then(([e,t])=>c(e,t)):c(o,l)}:void 0}),al=(e,t)=>Y(null,null,function*(){let i=e;if(null==t?void 0:t.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>at(e))){const t=yield Promise.all(r);i=e.filter((e,i)=>t[i])}else i=e.filter((e,t)=>r[t])}if(!(null==t?void 0:t.sortBy))return i;const r=i.map(e=>t.sortBy(e)),n=r.some(e=>at(e))?yield Promise.all(r):r;return i.map((e,t)=>({track:e,sortValue:n[t]})).sort((e,t)=>{var i,r;const n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],s=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],a=Math.max(n.length,s.length);for(let o=0;oe.track)}),ol=(e,t)=>{const i=1e6,r=1+1e-9,n=[12,15,20,24e3/1001,24,25,3e4/1001,30,48,50,6e4/1001,60,100,12e4/1001,120,144,240];if(e.length<2)return null;const s=new Float64Array(e.length-1);for(let v=1;v0))return null;s[v-1]=t}const a=s.slice();a.sort();let o=a[Math.floor(.05*a.length)];for(let v=0;v<6;v++){let e=0,t=0;for(const n of s){const i=Math.max(1,Math.round(n/o));Math.abs(n-i*o)>=r||(e+=n,t+=i)}if(0===t)return null;const i=e/t;if(Math.abs(i-o)<=1e-12*Math.max(1,o)){o=i;break}o=i}let l=0,c=0,u=0;for(const v of s){const e=Math.max(1,Math.round(v/o));Math.abs(v-e*o)>=r||(l++,c+=v,u+=e)}if(l/s.length<.98)return null;o=c/u;const d=1/Math.min(u,1e3),h=Math.max(Number.EPSILON,o-d),f=o+d,m=t/f,p=t/h,g=t/o;let k=null,y=1/0;for(const v of n){if(vp)continue;const e=Math.abs(v/g-1);e{for(let r=1;r<=i;r++){const i=Math.floor(e*r)+1;if(i/r{const t=[24/1.001,30/1.001,60/1.001,120/1.001],i=[12,15,20,24,25,30,48,50,60,100,120,144,240];for(const s of t)if(Math.abs(s/e-1)<=5e-4)return s;let r=e,n=1/0;for(const s of i){const t=Math.abs(s/e-1);t<=.025&&t!(e instanceof xa)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ys||e.source instanceof Js))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ys&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof dl))throw new TypeError("options.initInput, when provided, must be an Input.");void 0!==e.formatOptions&&((e,t)=>{if(!e||"object"!==typeof e)throw new TypeError(`${t}, when provided, must be an object.`);if(void 0!==e.isobmff){if(!e.isobmff||"object"!==typeof e.isobmff)throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(void 0!==e.isobmff.resolveKeyId&&"function"!==typeof e.isobmff.resolveKeyId)throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(void 0!==e.hls){if(!e.hls||"object"!==typeof e.hls)throw new TypeError(`${t}.hls, when provided, must be an object.`);if(void 0!==e.hls.offsetTimestampsByDateTime&&"boolean"!==typeof e.hls.offsetTimestampsByDateTime)throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=null!=(t=e.initInput)?t:null,this._formatOptions=null!=(i=e.formatOptions)?i:{},e.source instanceof Ys?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get _rootSource(){return this._rootRef.source}_getSourceUncached(e){return Y(this,null,function*(){ne(this._rootSource instanceof Zs);const t=yield this._rootSource._resolveRequest(e);return this._emit("source",{source:t.source,request:e,isRoot:e.isRoot}),t})}_getSourceCached(e,t=1){const i=this._sourceCache.find(i=>i.cacheGroup===t&&ea(i.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());const r=this._sourceCachePromises.find(i=>i.cacheGroup===t&&ea(i.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());const n=(()=>Y(this,null,function*(){const i=yield this._getSourceUncached(e);if(ft(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=mt(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);ne(-1!==e);const i=this._sourceCache[e];this._sourceCache.splice(e,1),i.sourceRef.free(),Re(this._sourceRefs,i.sourceRef)}this._sourceRefs.push(i);const r=this._sourceCachePromises.findIndex(t=>t.request===e);ne(-1!==r),this._sourceCachePromises.splice(r,1);return{request:e,sourceRef:i,age:this._nextSourceCacheAge++,cacheGroup:t}}))();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:n}),n.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){var e;return null!=(e=this._demuxerPromise)?e:this._demuxerPromise=(()=>Y(this,null,function*(){var e;this._reader=new ml(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(const t of this._formats){if(yield t._canReadInput(this))return this._format=t,null==(e=this._onFormatDetermined)||e.call(this,t),t._createDemuxer(this)}throw new hl}))()}get source(){return this._rootSource}getFormat(){return Y(this,null,function*(){return yield this._getDemuxer(),ne(this._format),this._format})}canRead(){return Y(this,null,function*(){try{return yield this._getDemuxer(),!0}catch(e){if(e instanceof hl)return!1;throw e}})}getFirstTimestamp(e){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const t=e.filter(e=>null!==e);if(0===t.length)return 0;const i=yield Promise.all(t.map(e=>e._backing.getFirstPacket({metadataOnly:!0}))),r=Math.min(...i.map(e=>{var t;return null!=(t=null==e?void 0:e.timestamp)?t:1/0}));return r===1/0?0:r})}computeDuration(e,t){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e);if(0===i.length)return 0;const r=yield Promise.all(i.map(e=>e.computeDuration(t)));return Math.max(...r)})}getDurationFromMetadata(e,t){return Y(this,null,function*(){null!=e||(e=yield this.getTracks());const i=e.filter(e=>null!==e),r=(yield Promise.all(i.map(e=>e.getDurationFromMetadata(t)))).filter(e=>null!==e);return 0===r.length?null:Math.max(...r)})}getTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return al(t,e)})}getVideoTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this.getTracks()).filter(e=>e.isVideoTrack());return al(t,e)})}getAudioTracks(e){return Y(this,null,function*(){e&&(e=nl(e));const t=(yield this.getTracks()).filter(e=>e.isAudioTrack());return al(t,e)})}getPrimaryVideoTrack(e){return Y(this,null,function*(){var t;e&&(e=nl(e));const i=sl(e,{sortBy:e=>Y(null,null,function*(){return[rl((yield e.getDisposition()).default),rl(yield e.hasPairableAudioTrack()),rl(!(yield e.hasOnlyKeyPackets())),il(yield e.getBitrate())]})});return null!=(t=(yield this.getVideoTracks(i))[0])?t:null})}getPrimaryAudioTrack(e){return Y(this,null,function*(){var t;e&&(e=nl(e));const i=yield this.getPrimaryVideoTrack(),r=sl(e,{sortBy:e=>Y(this,null,function*(){return[rl(!i||e.canBePairedWith(i)),rl((yield e.getDisposition()).default),il(yield e.getBitrate())]})});return null!=(t=(yield this.getAudioTracks(r))[0])?t:null})}_getTrackBackings(){return Y(this,null,function*(){var e;const t=yield this._getDemuxer();return null!=(e=this._trackBackingsCache)?e:this._trackBackingsCache=yield t.getTrackBackings()})}_wrapBackingAsTrack(e){const t=this._backingToTrack.get(e);if(t)return t;const i="video"===e.getType()?new el(this,e):new tl(this,e);return this._backingToTrack.set(e,i),i}getMimeType(){return Y(this,null,function*(){return(yield this._getDemuxer()).getMimeType()})}getMetadataTags(){return Y(this,null,function*(){return(yield this._getDemuxer()).getMetadataTags()})}dispose(){if(!this._disposed){this._disposed=!0;for(const e of this._sourceRefs)e.free();this._sourceRefs.length=0,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}}class hl extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class fl extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class ml{constructor(e){this.source=e}get fileSize(){const e=this.source._getFileSize();if(void 0===e)throw new Error("Reading file size too early; read required first.");return e}get fileSizeNonStrict(){var e;return null!=(e=this.source._getFileSize())?e:null}requestSlice(e,t){if(this.source._disposed)throw new fl;if(e<0)return null;if(null!==this.fileSizeNonStrict&&e+t>this.fileSizeNonStrict)return null;if(0===t){const t=new Uint8Array(0);return new pl(t,de(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,Qs);return at(r)?r.then(t=>t?new pl(t.bytes,t.view,t.offset,e,i):null):r?new pl(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,i){if(this.source._disposed)throw new fl;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,ze(this.fileSizeNonStrict-e,t,i));{const r=this.requestSlice(e,i),n=r=>r||(ne(null!==this.fileSizeNonStrict),this.requestSlice(e,ze(this.fileSizeNonStrict-e,t,i)));return at(r)?r.then(n):n(r)}}requestEntireFile(){if(null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);return(()=>Y(this,null,function*(){const e=[];let t=0;for(;;){if(1===e.length&&null!==this.fileSizeNonStrict)return this.requestSlice(0,this.fileSizeNonStrict);let i=this.requestSliceRange(t,0,1024);if(at(i)&&(i=yield i),!i||0===i.length)break;const r=kl(i,i.length);e.push(r),t+=i.length}const i=new Uint8Array(t);let r=0;for(const n of e)i.set(n,r),r+=n.length;return new pl(i,de(i),0,0,t)}))()}}class pl{constructor(e,t,i,r,n){this.bytes=e,this.view=t,this.offset=i,this.start=r,this.end=n,this.bufferPos=r-i}static tempFromBytes(e){return new pl(e,de(e),0,0,e.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(e,t=this.end-e){if(ethis.end)throw new RangeError("Slicing outside of original slice.");return new pl(this.bytes,this.view,this.offset,e,e+t)}}const gl=(e,t)=>{if(e.filePose.end)throw new RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},kl=(e,t)=>{gl(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},yl=e=>(gl(e,1),e.view.getUint8(e.bufferPos++)),bl=(e,t)=>{gl(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},Tl=e=>{gl(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},vl=e=>{gl(e,3);const t=De(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},wl=e=>{gl(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},Sl=(e,t)=>{gl(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},Pl=e=>{gl(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},Il=e=>{gl(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},xl=e=>{gl(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Cl=(e,t)=>{let i,r;return t?(i=Sl(e,!0),r=Sl(e,!0)):(r=Sl(e,!1),i=Sl(e,!1)),4294967296*r+i},Bl=e=>4294967296*Pl(e)+Pl(e),El=e=>4294967296*xl(e)+Pl(e),_l=e=>{const t=Il(e),i=(e=>{gl(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},Rl=e=>{gl(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},Fl=e=>{gl(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},Al=(e,t)=>{gl(e,t);let i="";for(let r=0;rhe.decode(kl(e,t)).split("\n").map(e=>e.trim()).filter(e=>{var t;return e.length>0&&!(null==(t=null==i?void 0:i.ignore)?void 0:t.call(i,e))});var Dl,Nl,Ol,zl;(Nl=Dl||(Dl={}))[Nl.Unsynchronisation=128]="Unsynchronisation",Nl[Nl.ExtendedHeader=64]="ExtendedHeader",Nl[Nl.ExperimentalIndicator=32]="ExperimentalIndicator",Nl[Nl.Footer=16]="Footer",(zl=Ol||(Ol={}))[zl.ISO_8859_1=0]="ISO_8859_1",zl[zl.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",zl[zl.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",zl[zl.UTF_8=3]="UTF_8";const Ll=128,Ul=10,ql=["Blues","Classic rock","Country","Dance","Disco","Funk","Grunge","Hip-hop","Jazz","Metal","New age","Oldies","Other","Pop","Rhythm and blues","Rap","Reggae","Rock","Techno","Industrial","Alternative","Ska","Death metal","Pranks","Soundtrack","Euro-techno","Ambient","Trip-hop","Vocal","Jazz & funk","Fusion","Trance","Classical","Instrumental","Acid","House","Game","Sound clip","Gospel","Noise","Alternative rock","Bass","Soul","Punk","Space","Meditative","Instrumental pop","Instrumental rock","Ethnic","Gothic","Darkwave","Techno-industrial","Electronic","Pop-folk","Eurodance","Dream","Southern rock","Comedy","Cult","Gangsta","Top 40","Christian rap","Pop/funk","Jungle music","Native US","Cabaret","New wave","Psychedelic","Rave","Showtunes","Trailer","Lo-fi","Tribal","Acid punk","Acid jazz","Polka","Retro","Musical","Rock 'n' roll","Hard rock","Folk","Folk rock","National folk","Swing","Fast fusion","Bebop","Latin","Revival","Celtic","Bluegrass","Avantgarde","Gothic rock","Progressive rock","Psychedelic rock","Symphonic rock","Slow rock","Big band","Chorus","Easy listening","Acoustic","Humour","Speech","Chanson","Opera","Chamber music","Sonata","Symphony","Booty bass","Primus","Porn groove","Satire","Slow jam","Club","Tango","Samba","Folklore","Ballad","Power ballad","Rhythmic Soul","Freestyle","Duet","Punk rock","Drum solo","A cappella","Euro-house","Dance hall","Goa music","Drum & bass","Club-house","Hardcore techno","Terror","Indie","Britpop","Negerpunk","Polsk punk","Beat","Christian gangsta rap","Heavy metal","Black metal","Crossover","Contemporary Christian","Christian rock","Merengue","Salsa","Thrash metal","Anime","Jpop","Synthpop","Christmas","Art rock","Baroque","Bhangra","Big beat","Breakbeat","Chillout","Downtempo","Dub","EBM","Eclectic","Electro","Electroclash","Emo","Experimental","Garage","Global","IDM","Illbient","Industro-Goth","Jam Band","Krautrock","Leftfield","Lounge","Math rock","New romantic","Nu-breakz","Post-punk","Post-rock","Psytrance","Shoegaze","Space rock","Trop rock","World music","Neoclassical","Audiobook","Audio theatre","Neue Deutsche Welle","Podcast","Indie rock","G-Funk","Dubstep","Garage rock","Psybient"],Wl=(e,t)=>{var i;const r=e.filePos;null!=t.raw||(t.raw={}),null!=(i=t.raw).TAG||(i.TAG=kl(e,Ll-3)),e.filePos=r;const n=Hl(e,30);n&&(null!=t.title||(t.title=n));const s=Hl(e,30);s&&(null!=t.artist||(t.artist=s));const a=Hl(e,30);a&&(null!=t.album||(t.album=a));const o=Hl(e,4),l=Number.parseInt(o,10);Number.isInteger(l)&&l>0&&(null!=t.date||(t.date=new Date(String(l))));const c=kl(e,30);let u;if(0===c[28]&&0!==c[29]){const i=c[29];i>0&&(null!=t.trackNumber||(t.trackNumber=i)),e.skip(-30),u=Hl(e,28),e.skip(2)}else e.skip(-30),u=Hl(e,30);u&&(null!=t.comment||(t.comment=u));const d=yl(e);d{const i=kl(e,t),r=ot(i.indexOf(0),i.length),n=i.subarray(0,r);let s="";for(let a=0;a{const t=e.filePos,i=Al(e,3),r=yl(e),n=yl(e),s=yl(e),a=Pl(e);if("ID3"!==i||255===r||255===n||0!==(2155905152&a))return e.filePos=t,null;let o=dr(a);return s&Dl.Footer&&(o+=Ul),{majorVersion:r,revision:n,flags:s,size:o}},jl=(e,t,i)=>{var r,n,s,a,o,l;if(![2,3,4].includes(t.majorVersion))return void vt._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=t.flags&Dl.Footer?t.size-Ul:t.size,u=kl(e,c),d=new Kl(t,u);if(t.flags&Dl.Unsynchronisation&&3===t.majorVersion&&d.ununsynchronizeAll(),t.flags&Dl.ExtendedHeader){const e=d.readU32();3===t.majorVersion?d.pos+=e:d.pos+=e-4}for(;d.pos<=d.bytes.length-d.frameHeaderSize();){const e=d.readId3V2Frame();if(!e)break;const c=d.pos,u=d.pos+e.size;let h=!1,f=!1,m=!1;if(3===t.majorVersion?(h=!!(64&e.flags),f=!!(128&e.flags)):4===t.majorVersion&&(h=!!(4&e.flags),f=!!(8&e.flags),m=!!(2&e.flags)||!!(t.flags&Dl.Unsynchronisation)),h)vt._warn(`Skipping encrypted ID3v2 frame ${e.id}`),d.pos=u;else if(f)vt._warn(`Skipping compressed ID3v2 frame ${e.id}`),d.pos=u;else{if(m&&d.ununsynchronizeRegion(d.pos,u),null!=i.raw||(i.raw={}),"TXXX"===e.id){const e=null!=(n=(r=i.raw).TXXX)?n:r.TXXX={},t=d.readId3V2TextEncoding(),s=d.readId3V2Text(t,u),a=d.readId3V2Text(t,u);null!=e[s]||(e[s]=a)}else"T"===e.id[0]?null!=(s=i.raw)[a=e.id]||(s[a]=d.readId3V2EncodingAndText(u)):null!=(o=i.raw)[l=e.id]||(o[l]=d.readBytes(e.size));switch(d.pos=c,e.id){case"TIT2":case"TT2":null!=i.title||(i.title=d.readId3V2EncodingAndText(u));break;case"TIT3":case"TT3":null!=i.description||(i.description=d.readId3V2EncodingAndText(u));break;case"TPE1":case"TP1":null!=i.artist||(i.artist=d.readId3V2EncodingAndText(u));break;case"TALB":case"TAL":null!=i.album||(i.album=d.readId3V2EncodingAndText(u));break;case"TPE2":case"TP2":null!=i.albumArtist||(i.albumArtist=d.readId3V2EncodingAndText(u));break;case"TRCK":case"TRK":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.trackNumber||(i.trackNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.tracksTotal||(i.tracksTotal=r))}break;case"TPOS":case"TPA":{const e=d.readId3V2EncodingAndText(u).split("/"),t=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(null!=i.discNumber||(i.discNumber=t)),r&&Number.isInteger(r)&&r>0&&(null!=i.discsTotal||(i.discsTotal=r))}break;case"TCON":case"TCO":{const e=d.readId3V2EncodingAndText(u);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==ql[e]){null!=i.genre||(i.genre=ql[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==ql[e]){null!=i.genre||(i.genre=ql[e]);break}}null!=i.genre||(i.genre=e)}break;case"TDRC":case"TDAT":{const e=d.readId3V2EncodingAndText(u),t=new Date(e);Number.isNaN(t.getTime())||null!=i.date||(i.date=t)}break;case"TYER":case"TYE":{const e=d.readId3V2EncodingAndText(u),t=Number.parseInt(e,10);Number.isInteger(t)&&(null!=i.date||(i.date=new Date(String(t))))}break;case"USLT":case"ULT":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.lyrics||(i.lyrics=d.readId3V2Text(e,u))}break;case"COMM":case"COM":{const e=d.readU8();d.pos+=3,d.readId3V2Text(e,u),null!=i.comment||(i.comment=d.readId3V2Text(e,u))}break;case"APIC":case"PIC":{const e=d.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=d.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=d.readId3V2Text(e,u);const n=d.readU8(),s=d.readId3V2Text(e,u).trimEnd(),a=u-d.pos;if(a>=0){const e=d.readBytes(a);i.images||(i.images=[]),i.images.push({data:e,mimeType:r,kind:3===n?"coverFront":4===n?"coverBack":"unknown",description:s})}}break;default:d.pos+=e.size}d.pos=u}}};class Kl{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return 2===this.header.majorVersion?6:10}ununsynchronizeAll(){const e=[];for(let t=0;t{const t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;const t=this.readAscii(4);if("\0\0\0\0"!==t&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!s(i)){const e=4===this.header.majorVersion?t:dr(t);s(e)&&(i=e)}return this.pos=n,{id:e,size:i,flags:r}}}readId3V2TextEncoding(){const e=this.readU8();if(e>3)throw new Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){const i=this.pos,r=this.readBytes(t-this.pos);switch(e){case Ol.ISO_8859_1:{let e="";for(let t=0;t0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=ot(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}{const e=ot(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),he.decode(r.subarray(0,e))}case Ol.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=ot(r.findIndex((e,t)=>0===e&&0===r[t+1]&&t%2===0),r.length);return this.pos=i+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Ol.UTF_8:{const e=ot(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),he.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class Xl{constructor(e){this.host=e,this.closed=!1,this.resumes=new WeakMap}ensure(e){if(this.closed)return null;if(this.host.audioContext)return this.host.audioContext;const t=window.AudioContext||window.webkitAudioContext;let i;try{i=new t({sampleRate:e})}catch(n){i=new t}if(this.closed)return i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null;let r=null;try{r=i.createGain(),r.connect(i.destination);const e=this.host.muted?0:this.host.volume;return r.gain.value=e*e,this.closed?(r.disconnect(),i.close().catch(e=>console.warn("MediaBunny obsolete context cleanup:",e)),null):(this.host.audioContext=i,this.host.gainNode=r,i)}catch(s){try{null==r||r.disconnect()}catch(a){console.warn("MediaBunny gain setup cleanup:",a)}throw i.close().catch(e=>console.warn("MediaBunny context setup cleanup:",e)),s}}updateGain(){if(!this.host.gainNode)return;const e=this.host.muted?0:this.host.volume;this.host.gainNode.gain.value=e*e}resume(e){const t=this.resumes.get(e);if(t)return t;const i=e.resume();this.resumes.set(e,i);const r=()=>{this.resumes.get(e)===i&&this.resumes.delete(e)};return i.then(r,r),i}destroy(){if(this.closed)return;this.closed=!0;const{audioContext:e,gainNode:t}=this.host;this.host.audioContext=null,this.host.gainNode=null;try{null==t||t.disconnect()}finally{e&&e.close().catch(e=>console.warn("MediaBunny context close error:",e))}}}class $l{constructor(e){this.host=e}release(e,t){this.host.queuedNodes.delete(e),e.onended=null;let i,r=!1;try{t&&e.stop()}catch(n){r=!0,i=n}try{e.disconnect()}catch(n){r||(r=!0,i=n)}if(r)throw i}stop(){const e=[];for(const i of[...this.host.queuedNodes])try{this.release(i,!0)}catch(t){e.push(t)}if(e.length)throw e[0]}schedule({buffer:e,timestamp:t}){const i=this.host.audioContext,r=this.host.gainNode;if(!i||!r)return;const n=function(e,t,i,r){const n=e.audioContextStartTime+(t-e.playbackTimeAtStart)/e.playbackRate,s=(n+i/e.playbackRate-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;return{startAt:Math.max(n,r),offset:n=e.duration)return;const s=i.createBufferSource();this.host.queuedNodes.add(s);try{s.buffer=e,s.connect(r),s.playbackRate.value=this.host.playbackRate,s.onended=()=>{if(this.host.queuedNodes.has(s))try{this.release(s,!1)}catch(e){console.warn("MediaBunny ended node cleanup:",e)}},null===n.offset?s.start(n.startAt):s.start(n.startAt,n.offset),this.host.latestScheduledEndTime=Math.max(this.host.latestScheduledEndTime,n.endMediaTime)}catch(a){try{this.release(s,!0)}catch(o){console.warn("MediaBunny audio node cleanup:",o)}throw a}}}const Gl=Symbol("cancelled");class Ql{constructor(){this.cancelled=!1,this.waits=new Set,this.timers=new Map}wait(e){return new Promise((t,i)=>{const r=()=>t(Gl);this.cancelled?r():this.waits.add(r),e.then(e=>{this.waits.delete(r),t(e)},e=>{this.waits.delete(r),i(e)})})}delay(e){return this.cancelled?Promise.resolve(!1):new Promise(t=>{const i=setTimeout(()=>{this.timers.delete(i),t(!this.cancelled)},e);this.timers.set(i,t)})}cancel(){if(!this.cancelled){this.cancelled=!0;for(const e of this.waits)e();this.waits.clear();for(const[e,t]of this.timers)clearTimeout(e),t(!1);this.timers.clear()}}}function Yl(e,t,i){for(const r of i){if(!t())return;e.emit(r)}}class Jl{constructor(e,t,i){this.host=e,this.contexts=t,this.nodes=i,this.task=null,this.closing=new WeakMap}stopIterator(){return Y(this,null,function*(){const e=this.host.audioIterator;if(this.host.audioIterator=null,!e)return;let t=this.closing.get(e);t||(t=Promise.resolve().then(()=>e.return()).then(()=>{}),this.closing.set(e,t)),yield t})}cancel(){var e;null==(e=this.task)||e.cancel(),this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e))}run(e){return Y(this,null,function*(){if(this.host.asyncId!==e)return;this.cancel();const t=this.host.audioSink,i=this.host.audioContext;if(!t||!i||this.host.paused||this.host.asyncId!==e)return;const r=new Ql;this.task=r;let n=null;const s=()=>!r.cancelled&&this.task===r&&this.host.asyncId===e&&!this.host.paused&&this.host.audioContext===i&&(!n||this.host.audioIterator===n);try{for(n=t.buffers(this.host.currentTime),this.host.audioIterator=n;s();){const e=[];let t=!1;for(let i=0;i<16;i++){const i=yield r.wait(n.next());if(i===Gl||!s())return;if(i.done){t=!0;break}e.push(i.value)}if(e.length&&"suspended"===i.state){if((yield r.wait(this.contexts.resume(i)))===Gl||!s())return;Yl(this.host.events,s,["canplay","playing"])}for(const i of e){if(!s())return;this.nodes.schedule(i)}if(t)return;if(!(yield r.delay(0))||!s())return;for(;this.host.latestScheduledEndTime-this.host.currentTime>1;)if(!(yield r.delay(50))||!s())return}}catch(a){if(s())throw a}finally{r.cancel(),this.task===r&&(this.task=null,this.stopIterator().catch(e=>console.warn("MediaBunny audio iterator cleanup:",e)))}})}}class Zl{constructor(e,d){X(this,u),X(this,t,!1),X(this,i,0),X(this,r),X(this,n),X(this,s),X(this,a,null),X(this,o,null),X(this,l,null),X(this,c),this.events=e,this.input=null,this.audioSink=null,this.audioIterator=null,this.audioContext=null,this.gainNode=null,this.audioContextStartTime=0,this.playbackTimeAtStart=0,this.latestScheduledEndTime=0,this.duration=Number.NaN,this.paused=!0,this.volume=.7,this.muted=!1,this.playbackRate=1,this.asyncId=0,this.queuedNodes=new Set,$(this,r,new Xl(this)),$(this,n,new $l(this)),$(this,s,new Jl(this,K(this,r),K(this,n))),$(this,c,d)}get currentTime(){return(e=this).paused||!e.audioContext?e.playbackTimeAtStart:(e.audioContext.currentTime-e.audioContextStartTime)*e.playbackRate+e.playbackTimeAtStart;var e}ensureAudioContext(e){K(this,r).ensure(e)}updateGain(){K(this,r).updateGain()}stopQueuedNodes(){K(this,n).stop()}stopIterator(){return Y(this,null,function*(){yield K(this,s).stopIterator()})}handleNoAudioTrack(){K(this,t)||(this.audioSink=null,this.ensureAudioContext())}cancelPending(){Q(this,i)._++;try{this.pause()}finally{$(this,l,null),this.input=null,this.audioSink=null}}load(e,r){return Y(this,null,function*(){if(K(this,t))return;this.cancelPending();const n=K(this,i);this.playbackTimeAtStart=0,this.audioContextStartTime=0,this.latestScheduledEndTime=0;const s=Promise.resolve().then(()=>G(this,u,d).call(this,e,n,r));$(this,l,s);try{yield s}finally{K(this,l)===s&&$(this,l,null)}})}runIterator(e){return Y(this,null,function*(){K(this,t)||(yield K(this,s).run(e))})}play(){return Y(this,null,function*(){if(K(this,t))return;if(K(this,o))return K(this,o);if(!this.paused)return;const e=new Ql;$(this,a,e);const r=K(this,i),n=G(this,u,f).call(this,e,r);$(this,o,n);try{yield n}finally{K(this,a)===e&&($(this,a,null),$(this,o,null))}})}pause(){var e;this.paused||(this.playbackTimeAtStart=this.currentTime),this.paused=!0,this.asyncId++,null==(e=K(this,a))||e.cancel(),$(this,a,null),$(this,o,null),K(this,s).cancel(),this.stopQueuedNodes()}seek(e){return Y(this,null,function*(){var i,r;if(K(this,t))return;const n=!this.paused;K(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=Math.max(0,e),this.audioContextStartTime=null!=(r=null==(i=this.audioContext)?void 0:i.currentTime)?r:0,this.latestScheduledEndTime=this.playbackTimeAtStart;const a=++this.asyncId;n&&G(this,u,h).call(this,a)})}setVolume(e,t){this.volume=e,this.muted=t,this.updateGain()}setPlaybackRate(e){var i,r;if(K(this,t)||e===this.playbackRate)return;const n=this.currentTime;K(this,s).cancel(),this.stopQueuedNodes(),this.playbackTimeAtStart=n,this.audioContextStartTime=null!=(r=null==(i=this.audioContext)?void 0:i.currentTime)?r:0,this.playbackRate=e,this.latestScheduledEndTime=n;const a=++this.asyncId;this.paused||G(this,u,h).call(this,a)}destroy(){if(K(this,t))return;$(this,t,!0),Q(this,i)._++;const e=[];for(const t of[()=>this.pause(),()=>K(this,r).destroy()])try{t()}catch(n){e.push(n)}if(this.input=null,this.audioSink=null,$(this,l,null),e.length)throw e[0]}}function ec(e){return Y(this,null,function*(){var t,i;return null!=(i=null!=(t=yield e.getAverageBitrate())?t:yield e.getBitrate())?i:0})}t=new WeakMap,i=new WeakMap,r=new WeakMap,n=new WeakMap,s=new WeakMap,a=new WeakMap,o=new WeakMap,l=new WeakMap,c=new WeakMap,u=new WeakSet,d=function(e,r,n){return Y(this,arguments,function*({input:e,audioTrack:r,duration:n},s,a){const o=()=>!K(this,t)&&K(this,i)===s;if(o()){this.input=e,this.duration=n;try{const e=r&&null!==r.codec&&(yield r.canDecode());if(!o())return;if(e){if(this.ensureAudioContext(r.sampleRate),!o())return;this.audioSink=new Qo(r)}else this.handleNoAudioTrack();o()&&(null==a||a())}catch(l){if(o())throw l}}})},h=function(e){this.runIterator(e).catch(i=>{if(!K(this,t)&&e===this.asyncId){try{this.pause()}catch(r){console.warn("MediaBunny audio failure cleanup:",r)}try{K(this,c)?K(this,c).call(this,i):this.events.emit("error",i)}catch(r){console.warn("MediaBunny audio error listener:",r)}}})},f=function(e,n){return Y(this,null,function*(){const s=()=>!K(this,t)&&!e.cancelled&&K(this,i)===n;try{const t=K(this,r).ensure();if(!t||!s())return;if("suspended"===t.state){if((yield e.wait(K(this,r).resume(t)))===Gl||!s())return}if(K(this,l)){if((yield e.wait(K(this,l)))===Gl||!s())return}this.audioContextStartTime=t.currentTime,this.latestScheduledEndTime=this.playbackTimeAtStart,this.paused=!1,G(this,u,h).call(this,++this.asyncId)}catch(a){if(s())throw a}})};const tc=/\.m3u8(?:$|[?#])/i;function ic(e){return"string"===typeof e&&tc.test(e)}function rc(e){const t=function(e){return"string"===typeof e?new oa(e):e instanceof Blob?new ra(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new ua(e):null!=e?e:null}(e);return t?new dl({source:t,formats:ic(e)?Ya:Qa}):null}class nc{constructor(){this.active=!0,this.input=null,this.timers=new Set,this.controller="undefined"===typeof AbortController?void 0:new AbortController,this.cancellation=new Promise(e=>{this.resolveCancellation=e})}get signal(){var e;return null==(e=this.controller)?void 0:e.signal}own(e){this.active?this.input=e:e.dispose()}defer(e){if(!this.active)return;const t=setTimeout(()=>{this.timers.delete(t),this.active&&e()},0);this.timers.add(t)}wait(e,t){return Y(this,null,function*(){try{yield Promise.race([e,this.cancellation,t>0?this.timeout(t):new Promise(()=>{})])}finally{void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0)}})}timeout(e){return new Promise((t,i)=>{this.deadline=setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){const e=this.input;this.input=null,null==e||e.dispose()}cancel(){var e;if(this.active){this.active=!1;for(const e of this.timers)clearTimeout(e);this.timers.clear(),void 0!==this.deadline&&(clearTimeout(this.deadline),this.deadline=void 0),this.resolveCancellation(),null==(e=this.controller)||e.abort(),this.disposeInput()}}}function sc(e){return Y(this,arguments,function*({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(e=>null!==e),n=t||i,s=Boolean(n&&(yield n.isLive()));let a=Number.NaN;return r.length>0&&(a=yield e.getDurationFromMetadata(r,{skipLiveWait:!0}),null!==a||s||(a=yield e.computeDuration(r,{skipLiveWait:!0}))),s?Number.POSITIVE_INFINITY:null!=a?a:Number.NaN})}function ac(){let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}}class oc{constructor(e){this.host=e,this.wanted=!1,this.playing=null,this.seeking=null}operation(){return V(H({},ac()),{source:this.host.loadSeq,complete:ac()})}current(e,t){return!this.host.destroyed&&e.source===this.host.loadSeq&&this[t]===e}cancelPlay(){const e=this.playing;this.playing=null,null==e||e.resolve()}invalidate(){this.cancelPlay(),this.wanted=!1;const e=this.seeking;this.seeking=null,null==e||e.complete.resolve(),null==e||e.resolve(),this.host.seeking=!1}ended(){this.wanted=!1,this.cancelPlay()}stop(){this.host.paused||(this.host.paused=!0,this.stopEngines(),this.host.events.emit("pause"))}stopEngines(){const e=[];for(const i of[()=>this.host.audio.pause(),()=>this.host.video.stop()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}pause(){this.wanted=!1,this.cancelPlay(),this.stop()}play(){if(this.host.destroyed)return Promise.resolve();if(this.wanted=!0,this.playing)return this.playing.promise;if(this.host.ended)return this.seek(0,!0);if(!this.host.paused&&!this.seeking)return Promise.resolve();const e=this.operation();return this.playing=e,this.runPlay(e).then(e.resolve,e.reject),e.promise}runPlay(e){return Y(this,null,function*(){const t=()=>this.current(e,"playing")&&this.wanted;try{for(;this.seeking;)if(yield this.seeking.complete.promise,!t())return;if(!t())return;if(this.host.paused=!1,yield this.host.audio.play(),!t())return void(this.wanted&&!this.host.destroyed||this.host.audio.pause());this.host.video.start(this.host.audio),Yl(this.host.events,t,["play","playing"])}catch(i){if(!t())return;this.wanted=!1,this.host.paused=!0;try{this.stopEngines()}catch(r){console.warn("MediaBunny play cleanup error:",r)}throw i}finally{this.playing===e&&(this.playing=null)}})}seek(e,t){return this.position(t=>Y(this,null,function*(){const i=this.host.audio.seek(e),r=t()?this.host.video.seek(e):Promise.resolve();yield Promise.all([i,r])}),["seeked"],!1,t)}replace(e,t){return this.position(i=>Y(this,null,function*(){e.duration=yield sc(e),i()&&(this.host.media=e,yield Promise.all([this.host.video.load(e),this.host.audio.load(e)]),i()&&(yield Promise.all([this.host.video.seek(t),this.host.audio.seek(t)]),i()&&(this.host.readyState=4,this.host.networkState=1)))}),["loadedmetadata","durationchange","progress","loadeddata","canplay","canplaythrough","seeked"],!0)}position(e,t,i,r){if(this.host.destroyed)return Promise.resolve();this.wanted=null!=r?r:this.seeking?this.wanted:!this.host.paused,this.cancelPlay();const n=this.seeking,s=this.operation();return this.seeking=s,null==n||n.complete.resolve(),null==n||n.resolve(),this.runPosition(s,e,t,i).then(s.resolve,s.reject),s.promise}runPosition(e,t,i,r){return Y(this,null,function*(){const n=()=>this.current(e,"seeking");let s=!1;try{if(r&&this.stop(),!n())return;if(this.host.ended=!1,this.host.seeking=!0,Yl(this.host.events,n,["seeking","waiting"]),!n())return;if(r||this.stop(),!n())return;if(yield t(n),!n())return;if(this.host.seeking=!1,e.complete.resolve(),Yl(this.host.events,n,i),!n())return;this.seeking=null,s=this.wanted}catch(a){if(!n())return;throw this.host.seeking=!1,this.wanted=!1,this.cancelPlay(),this.host.reportError(a),a}finally{e.complete.resolve(),this.seeking===e&&(this.seeking=null)}s&&(yield this.play())})}}const lc=new WeakMap,cc=new WeakMap;function uc(e){const t=cc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.next()).then(e=>{var t;return null!=(t=e.value)?t:null});cc.set(e,i);const r=()=>{cc.get(e)===i&&cc.delete(e)};return i.then(r,r),i}function dc(e,t,i,r,n){const s=i?Math.max(.06,r/Math.max(1,n)):0;return i&&e{if(this.image===n&&t()){this.cancel();try{i(n)}catch(e){r(e)}}},n.onerror=()=>{this.image===n&&this.cancel()},n.src=e}}class fc{constructor(e,t,i,r){this.host=e,this.ready=t,this.draw=i,this.failure=r,this.stopped=!1,this.closed=!1,this.scheduled=null,this.fetching=null}current(e){return!this.closed&&!this.stopped&&this.host.asyncId===e}update(e){return Y(this,null,function*(){var t;const i=this.host.videoIterator;if(!i||!this.ready()||!this.current(e)||this.host.isFetching)return;const r={};this.fetching=r,this.host.isFetching=!0;const n=()=>this.current(e)&&this.host.videoIterator===i;try{for(;n();){const e=yield uc(i);if(!n()||!e)return;const r=null==(t=this.host.audioClock)?void 0:t.currentTime;if(void 0===r)return;const s=dc(e.timestamp,r,this.host.dropLateFrames,this.host.avSyncTolerance,this.host.playbackRate);if("skip"!==s){if("draw"!==s)return void(this.host.nextFrame=e);this.draw(e)}}}catch(s){if(n())throw s}finally{this.fetching===r&&(this.fetching=null,this.host.isFetching=!1)}})}request(e){this.update(e).catch(t=>{this.current(e)&&(this.stop(),this.report(t))})}report(e){try{this.failure(e)}catch(t){console.warn("MediaBunny video error listener:",t)}}cancelFrame(){null!==this.scheduled&&(cancelAnimationFrame(this.scheduled),this.scheduled=null)}schedule(e){if(!this.current(e))return;this.cancelFrame();const t=requestAnimationFrame(()=>{if(this.scheduled===t&&this.current(e)){this.scheduled=null;try{this.render()}catch(i){this.stop(),this.report(i)}}});this.scheduled=t,this.host.rafId=t}render(){const e=this.host.asyncId,t=()=>this.current(e);if(!t()||!this.host.audioClock)return;const i=this.host.audioClock.currentTime,r=Date.now();if(r-this.host.lastTimeUpdate>=this.host.timeupdateInterval){if(this.host.events.emit("timeupdate"),!t())return;this.host.lastTimeUpdate=r}if(this.ready()){if(Number.isFinite(this.host.duration)&&i>=this.host.duration){this.stop(),this.host.stalled=!1;const e=this.host.asyncId;return void Yl(this.host.events,()=>!this.closed&&this.host.asyncId===e,["ended","pause","canplay"])}if(this.host.nextFrame&&this.host.nextFrame.timestamp<=i){if(this.draw(this.host.nextFrame),this.host.nextFrame=null,this.request(e),this.host.stalled){if(Yl(this.host.events,t,["canplay","playing"]),!t())return;this.host.stalled=!1}}else this.host.nextFrame||(this.request(e),Number.isFinite(this.host.duration)&&i!K(this,T),e=>G(this,P,E).call(this,e,!0),e=>G(this,P,C).call(this,e)))}preflight(e,t,i){return Y(this,null,function*(){return function(e,t,i,r,n=()=>!0){return Y(this,null,function*(){if((null==r?void 0:r.aborted)||!n())return!1;if(!t||"string"!==typeof e||ic(e))return!0;try{const t=yield fetch(e,r?{method:"HEAD",signal:r}:{method:"HEAD"});if((null==r?void 0:r.aborted)||!n())return!1;const s=t.headers.get("accept-ranges");return!(!s||"none"===s)||(i.emit("error",new Event("RangeNotSupported")),!1)}catch(s){return!((null==r?void 0:r.aborted)||!n())&&(console.warn("Preflight check failed:",s),!0)}})}(e,this.preflightRange,this.events,t,i)})}drawPoster(){if(K(this,b)||!this.poster||this.posterDrawn)return;const e=K(this,m);K(this,v).draw(this.poster,()=>G(this,P,I).call(this,e),e=>{this.clear(),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,G(this,P,x).call(this).drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e=>G(this,P,C).call(this,e))}stopIterator(){return Y(this,null,function*(){const e=this.videoIterator;this.videoIterator=null,this.nextFrame=null,yield function(e){if(!e)return Promise.resolve();const t=lc.get(e);if(t)return t;const i=Promise.resolve().then(()=>e.return()).then(()=>{});return lc.set(e,i),i}(e)})}clear(){G(this,P,x).call(this).clearRect(0,0,this.canvas.width,this.canvas.height)}cancelPending(){Q(this,m)._++,Q(this,p)._++,this.stop(),G(this,P,B).call(this),K(this,v).cancel(),$(this,T,!1),$(this,g,null),$(this,k,null),$(this,y,null),this.videoSink=null,this.input=null}load(e,t){return Y(this,null,function*(){if(K(this,b))return;this.cancelPending();const i=K(this,m),r=K(this,p);$(this,T,!0);const n=Promise.resolve().then(()=>G(this,P,_).call(this,e,i,r,t));$(this,g,n);try{yield n}finally{K(this,g)===n&&$(this,g,null)}})}handleNoVideoTrack(){K(this,b)||(this.videoSink=null,this.width=0,this.height=0,this.canvas.width=0,this.canvas.height=0,this.clear(),this.drawPoster())}resetIterator(e){return Y(this,null,function*(){if(K(this,b))return;const t=K(this,m),i=++Q(this,p)._,r=K(this,g);this.stop(),K(this,v).cancel(),$(this,T,!0);try{r&&(yield r),yield G(this,P,R).call(this,e,t,i)}catch(n){if(G(this,P,I).call(this,t)&&K(this,p)===i)throw G(this,P,B).call(this),n}finally{G(this,P,I).call(this,t)&&K(this,p)===i&&$(this,T,!1)}})}updateNextFrame(e){return Y(this,null,function*(){yield K(this,w).update(e)})}render(){K(this,w).render()}start(e){K(this,w).start(e)}stop(){K(this,w).stop()}seek(e){return Y(this,null,function*(){yield this.resetIterator(e)})}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){K(this,b)||($(this,b,!0),Q(this,m)._++,K(this,w).destroy(),K(this,v).cancel(),G(this,P,B).call(this),this.posterDrawn=!1,$(this,k,null),$(this,y,null),this.videoSink=null,this.input=null,this.audioClock=null)}}m=new WeakMap,p=new WeakMap,g=new WeakMap,k=new WeakMap,y=new WeakMap,b=new WeakMap,T=new WeakMap,v=new WeakMap,w=new WeakMap,S=new WeakMap,P=new WeakSet,I=function(e){return!K(this,b)&&K(this,m)===e},x=function(){if(!this.ctx)throw new Error("Canvas 2D context is unavailable.");return this.ctx},C=function(e){K(this,b)||(G(this,P,B).call(this),K(this,S)?K(this,S).call(this,e):this.events.emit("error",e))},B=function(){this.stopIterator().catch(e=>console.warn("MediaBunny iterator cleanup error:",e))},E=function(e,t){K(this,v).cancel(),t&&this.clear(),G(this,P,x).call(this).drawImage(e.canvas,0,0)},_=function(e,t,i,r){return Y(this,null,function*(){if(G(this,P,I).call(this,t))try{this.clear(),this.posterDrawn=!1;const{input:n,videoTrack:s,duration:a}=e;if(this.input=n,this.duration=a,!s)return this.handleNoVideoTrack(),void(null==r||r());const o=null!==s.codec&&(yield s.canDecode());if(!G(this,P,I).call(this,t))return;if(!o)return this.handleNoVideoTrack(),void(null==r||r());const l=yield s.canBeTransparent();if(!G(this,P,I).call(this,t))return;$(this,k,()=>new Ko(s,{poolSize:2,fit:"contain",alpha:l})),this.videoSink=K(this,k).call(this),this.width=s.displayWidth,this.height=s.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,null==r||r(),G(this,P,I).call(this,t)&&(yield G(this,P,R).call(this,0,t,i))}catch(n){if(G(this,P,I).call(this,t))throw G(this,P,B).call(this),n}finally{G(this,P,I).call(this,t)&&K(this,p)===i&&$(this,T,!1)}})},R=function(e,t,i){return Y(this,null,function*(){if(!G(this,P,I).call(this,t)||K(this,p)!==i)return;G(this,P,B).call(this),K(this,k)&&this.videoSink===K(this,y)&&(this.videoSink=K(this,k).call(this));const r=this.videoSink;if(!r||!G(this,P,I).call(this,t))return;$(this,y,r);const n=r.canvases(e);this.videoIterator=n;const s=()=>G(this,P,I).call(this,t)&&K(this,p)===i&&this.videoIterator===n,a=yield uc(n);if(!s())return;const o=yield uc(n);s()&&(this.nextFrame=o,a?G(this,P,E).call(this,a,!1):this.drawPoster())})};class pc{constructor({canvas:e,ctx:t,events:i,option:r={}}){var n,s,a,o,l;X(this,F),this.events=i,this.option=r,this.audio=new Zl(i,e=>{try{this.pause()}catch(t){console.warn("MediaBunny audio coordinator cleanup:",t)}this.reportError(e)}),this.video=new mc({canvas:e,ctx:t,events:i,timeupdateInterval:null!=(n=r.timeupdateInterval)?n:250,avSyncTolerance:null!=(s=r.avSyncTolerance)?s:.12,dropLateFrames:null!=(a=r.dropLateFrames)&&a,poster:null!=(o=r.poster)?o:"",preflightRange:null!=(l=r.preflightRange)&&l,onError:e=>{try{this.pause()}catch(t){console.warn("MediaBunny video failure cleanup:",t)}this.reportError(e)}}),this.paused=!0,this.ended=!1,this.readyState=0,this.networkState=0,this.error=null,this.seeking=!1,this.loadSeq=0,this.input=null,this.media=null,this.loadSession=null,this.destroyed=!1,$(this,F,new oc(this)),i.addEventListener("ended",()=>{this.destroyed||(this.ended=!0,this.paused=!0,K(this,F).ended(),this.audio.pause())})}load(e){return Y(this,null,function*(){var t,i;if(this.destroyed)return;const r=++this.loadSeq;if(K(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),null==(t=this.loadSession)||t.cancel(),r!==this.loadSeq||this.destroyed)return;if(this.pause(),r!==this.loadSeq||this.destroyed)return;this.disposeInput();const n=new nc;this.loadSession=n,this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,n.defer(()=>this.events.emit("waiting")),n.defer(()=>this.events.emit("loadstart"));const s=Number.isFinite(this.option.loadTimeout)&&null!=(i=this.option.loadTimeout)?i:0;try{yield n.wait(this.performLoad(e,r,n),s)}catch(a){if(r!==this.loadSeq)return;const e=++this.loadSeq;if(K(this,F).invalidate(),this.video.cancelPending(),this.audio.cancelPending(),n.cancel(),e!==this.loadSeq||this.destroyed)return;this.disposeInput(),this.reportError(a)}})}performLoad(e,t){return Y(this,arguments,function*(e,t,i=this.loadSession){const r=()=>!this.destroyed&&t===this.loadSeq;if(!i||!(yield this.video.preflight(e,i.signal,r))||!r())return;const n=rc(e);if(!n)return this.video.handleNoVideoTrack(),void(r()&&this.audio.handleNoAudioTrack());i.own(n);const s=yield function(e,t){return Y(this,null,function*(){const i=yield e.getPrimaryVideoTrack(),r=i?yield i.getPrimaryPairableAudioTrack():yield e.getPrimaryAudioTrack(),n=yield sc({input:e,videoTrack:i,audioTrack:r}),s=i||r,a=ic(t);return{input:e,videoTrack:i,audioTrack:r,duration:n,isLive:!Number.isFinite(n)&&Boolean(s&&(yield s.isLive())),isHls:a,videoMode:a?"auto":"manual",audioMode:a?"auto":"manual"}})}(n,e);if(!r())return;if(!s.videoTrack&&!s.audioTrack)throw this.video.handleNoVideoTrack(),this.video.duration=Number.NaN,this.audio.duration=Number.NaN,new Error("Input has no audio or video tracks.");this.input=n,this.media=s;const a=function(e,t){let i=!1,r=!1,n=!1;function s(s){t()&&!n&&("video"===s?i=!0:r=!0,i&&r&&(n=!0,e()))}return{video:()=>s("video"),audio:()=>s("audio")}}(()=>{this.readyState=1,Yl(this.events,r,["loadedmetadata","durationchange","progress"])},r);try{const e=this.video.load(s,a.video),t=r()?this.audio.load(s,a.audio):Promise.resolve();if(yield Promise.all([e,t]),!r())return;this.readyState=4,this.networkState=1,Yl(this.events,r,["loadeddata","canplay","canplaythrough","progress"])}catch(o){if(!r())return;throw console.error("MediaBunny load error:",o),o}})}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){var e;null==(e=this.loadSession)||e.disposeInput(),this.input=null,this.media=null}replaceTracks(e){return Y(this,null,function*(){if(this.media&&!this.destroyed)return K(this,F).replace(H(H({},this.media),e),this.currentTime)})}selectHlsQuality(e){return Y(this,null,function*(){return function(e,t){return Y(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getVideoTracks();if(!a())return;const s="auto"===t?yield r.getPrimaryVideoTrack():null!=(i=e.find(e=>e.id===t))?i:n.videoTrack;if(!a()||!s)return;let l=n.audioTrack,c=n.audioMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableAudioTrack(),c="auto"),o={videoTrack:s,audioTrack:l,videoMode:"auto"===t?"auto":"manual",audioMode:c}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}selectHlsAudio(e){return Y(this,null,function*(){return function(e,t){return Y(this,null,function*(){var i;const{input:r,media:n,loadSeq:s}=e;if(!(null==n?void 0:n.isHls)||!r||e.destroyed)return;const a=()=>!e.destroyed&&e.loadSeq===s&&e.input===r&&e.media===n;let o;try{const e=yield r.getAudioTracks();if(!a())return;const s="auto"===t?n.videoTrack?yield n.videoTrack.getPrimaryPairableAudioTrack():yield r.getPrimaryAudioTrack():null!=(i=e.find(e=>e.id===t))?i:n.audioTrack;if(!a()||!s)return;let l=n.videoTrack,c=n.videoMode;l&&s.canBePairedWith(l)||(l=yield s.getPrimaryPairableVideoTrack(),c="auto"),o={videoTrack:l,audioTrack:s,videoMode:c,audioMode:"auto"===t?"auto":"manual"}}catch(l){if(!a())return;throw l}a()&&(yield e.replaceTracks(o))})}(this,e)})}getHlsState(){return Y(this,null,function*(){const e=this.media;if(this.destroyed)return null;try{const t=yield function(e){return Y(this,null,function*(){var t,i,r,n;if(!(null==e?void 0:e.isHls)||!e.input)return null;const[s,a]=yield Promise.all([e.input.getVideoTracks(),e.videoTrack?e.videoTrack.getPairableAudioTracks():[]]),[o,l]=yield Promise.all([Promise.all(s.map((e,t)=>Y(null,null,function*(){return{id:e.id,track:e,index:t,name:yield e.getName(),height:yield e.getDisplayHeight(),bitrate:yield ec(e)}}))),Promise.all(a.map((e,t)=>Y(null,null,function*(){const i=yield e.getName(),r=yield e.getLanguageCode();return{id:e.id,track:e,index:t,name:i,lang:r,language:r,bitrate:yield ec(e)}})))]);return{levels:o,audios:l,currentLevel:e.videoTrack&&null!=(t=o.find(t=>{var i;return t.id===(null==(i=e.videoTrack)?void 0:i.id)}))?t:null,currentAudio:e.audioTrack&&null!=(i=l.find(t=>{var i;return t.id===(null==(i=e.audioTrack)?void 0:i.id)}))?i:null,videoMode:null!=(r=e.videoMode)?r:"auto",audioMode:null!=(n=e.audioMode)?n:"auto"}})}(e);return this.destroyed||this.media!==e?null:t}catch(t){if(this.destroyed||this.media!==e)return null;throw t}})}play(){return Y(this,null,function*(){return K(this,F).play()})}pause(){K(this,F).pause()}seek(e){return Y(this,null,function*(){return K(this,F).seek(e)})}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}reportError(e){if(this.destroyed)return;const t=e&&"object"===typeof e?Reflect.get(e,"message"):void 0;this.error={code:4,message:"string"===typeof t?t:String(e)},this.networkState=3,this.events.emit("error")}destroy(){if(this.destroyed)return;this.destroyed=!0,this.loadSeq++,K(this,F).invalidate();const e=[];for(const i of[()=>{var e;return null==(e=this.loadSession)?void 0:e.cancel()},()=>this.pause(),()=>this.disposeInput(),()=>this.audio.destroy(),()=>this.video.destroy()])try{i()}catch(t){e.push(t)}if(e.length)throw e[0]}get currentTime(){return this.audio.currentTime}get duration(){var e,t,i;return null!=(i=null!=(t=null==(e=this.media)?void 0:e.duration)?t:this.audio.duration)?i:this.video.duration}get videoWidth(){return this.video.width}get videoHeight(){return this.video.height}}F=new WeakMap;const gc=new WeakMap;function kc(e){let t=gc.get(e);return t||(t={closed:!1,frames:new Set},gc.set(e,t)),t}class yc{constructor({art:e,canvas:t,ctx:i,option:r}){var n,s;this.art=e,this.canvas=t,this.option=r,this.events=new re,this.engine=new pc({canvas:t,ctx:i,events:this.events,option:r}),this._src=null,this._volume=null!=(n=r.volume)?n:.7,this._muted=!!r.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),r.source?this.src=r.source:(null==(s=e.option)?void 0:s.url)&&(this.src=e.option.url)}setupEventForwarding(){const{events:e}=this.art.constructor.config;e.forEach(e=>{this.events.addEventListener(e,e=>{this.art.emit(`video:${e.type}`,e)})})}addEventListener(e,t){this.events.addEventListener(e,t)}removeEventListener(e,t){this.events.removeEventListener(e,t)}get src(){return this._src}set src(e){this._src=e,e&&this.engine.load(e)}get currentSrc(){return this._src}get currentTime(){return this.engine.currentTime}set currentTime(e){Promise.resolve(this.engine.seek(Number(e)||0)).catch(()=>{})}get duration(){return this.engine.duration}get buffered(){return this.createTimeRanges(0,this.engine.duration)}get played(){return this.createTimeRanges(0,this.engine.currentTime)}get seekable(){return this.createTimeRanges(0,this.engine.duration)}createTimeRanges(e,t){return function(e,t,i){return!e||Number.isNaN(e)||i<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>t,end:()=>i}}(this.engine.duration,e,t)}get paused(){return this.engine.paused}get playing(){return!this.engine.paused&&!this.engine.ended}get ended(){return this.engine.ended}get seeking(){return this.engine.seeking}get readyState(){return this.engine.readyState}get networkState(){return this.engine.networkState}get error(){return this.engine.error}get playbackRate(){return this._playbackRate}set playbackRate(e){const t=Number(e);Number.isNaN(t)||t<=0||(this._playbackRate=t,this.engine.setPlaybackRate(t),this.events.emit("ratechange"))}get volume(){return this._volume}set volume(e){var t;this._volume=(t=e,Math.max(0,Math.min(1,Number(t)||0))),this._muted=!1,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}get muted(){return this._muted}set muted(e){this._muted=!!e,this.engine.setVolume(this._volume,this._muted),this.events.emit("volumechange")}play(){return this.engine.play()}pause(){this.engine.pause()}load(){this._src&&this.engine.load(this._src)}getM3u8State(){return this.engine.getHlsState()}switchM3u8Quality(e){return this.engine.selectHlsQuality(e)}switchM3u8Audio(e){return this.engine.selectHlsAudio(e)}get videoWidth(){return this.engine.videoWidth}get videoHeight(){return this.engine.videoHeight}get poster(){return this.option.poster||""}set poster(e){this.option.poster=e}get autoplay(){return this.option.autoplay||!1}set autoplay(e){}get loop(){return this.option.loop||!1}set loop(e){}get controls(){return!1}set controls(e){}get playsInline(){return!0}set playsInline(e){}get crossOrigin(){return this.option.crossOrigin||""}set crossOrigin(e){}get preload(){return"auto"}set preload(e){}get defaultMuted(){return!1}set defaultMuted(e){}get defaultPlaybackRate(){return 1}set defaultPlaybackRate(e){}canPlayType(e){return"maybe"}getBoundingClientRect(){return this.canvas.getBoundingClientRect()}requestVideoFrameCallback(e){return function(e,t){const i=kc(e);if(i.closed)return 0;const r=requestAnimationFrame(n=>{i.frames.delete(r),i.closed||t(n,{presentationTime:e.engine.currentTime,expectedDisplayTime:n+16.6,width:e.engine.videoWidth,height:e.engine.videoHeight,mediaTime:e.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:n,receiveTime:n,rtpTimestamp:0})});return i.frames.add(r),r}(this,e)}cancelVideoFrameCallback(e){!function(e,t){kc(e).frames.delete(t),cancelAnimationFrame(t)}(this,e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:Reflect.apply(this.canvas.setAttribute,this.canvas,[e,t])}destroy(){if(function(e){const t=kc(e);if(t.closed)return!1;t.closed=!0;for(const i of t.frames)cancelAnimationFrame(i);return t.frames.clear(),!0}(this))try{this.engine.destroy()}finally{this.events.destroy()}}}return function(e={}){return t=>{const{constructor:i}=t,{createElement:r}=i.utils,n=r("canvas"),s=n.getContext("2d"),a=new yc({art:t,canvas:n,ctx:s,option:e});t.mediabunny=a;const o={};for(const e in n)"function"===typeof n[e]&&(o[e]=n[e].bind(n));const l=new Set([...Object.getOwnPropertyNames(a),...Object.getOwnPropertyNames(Object.getPrototypeOf(a))]);for(const e of l)"constructor"!==e&&(e in n||Object.defineProperty(n,e,{get(){const t=a[e];return"function"===typeof t?t.bind(a):t},set(t){a[e]=t},configurable:!0,enumerable:!0}));for(const e in o)n[e]=(...t)=>o[e](...t);function c(){var e;(null==(e=t.template)?void 0:e.$player)&&!t.option.autoSize&&Object.assign(n.style,{width:"100%",height:"100%",objectFit:"contain"})}return t.on("resize",c),t.on("video:loadedmetadata",c),function({art:e,shim:t,option:i}){if(i.m3u8)return e.on("video:loadedmetadata",u),e.on("restart",u),{update:u};function r(t){e.controls.cache.has(t)&&e.controls.remove(t)}function n(t){e.setting.find(t)&&e.setting.remove(t)}function s(){r("mediabunny-quality"),n("mediabunny-quality")}function a(){r("mediabunny-audio"),n("mediabunny-audio")}function o(e={}){return e.control||e.setting}function l(r){return Y(this,null,function*(){var n;const a=(null==(n=i.m3u8)?void 0:n.quality)||{};if(!o(a)||!(null==r?void 0:r.levels.length))return void s();const l=a.auto||"Auto",c=a.title||"Quality",d=a.getName||(e=>e.name||`${e.height}P`),h=r.currentLevel?d(r.currentLevel):l,f=ie(r.levels.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentLevel)?void 0:t.id)===e.id}}),"html").sort((e,t)=>{const i=r.levels.find(t=>t.id===e.value),n=r.levels.find(e=>e.id===t.value);return((null==n?void 0:n.height)||0)-((null==i?void 0:i.height)||0)});f.push({html:l,value:"auto",default:!r.currentLevel});const m=i=>Y(null,null,function*(){return yield t.switchM3u8Quality(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});a.control&&e.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),a.setting&&e.setting.update({name:"mediabunny-quality",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function c(r){return Y(this,null,function*(){var n;const s=(null==(n=i.m3u8)?void 0:n.audio)||{};if(!o(s)||!(null==r?void 0:r.audios.length)||r.audios.length<2)return void a();const l=s.auto||"Auto",c=s.title||"Audio",d=s.getName||(e=>e.name||e.lang||e.language),h=r.currentAudio?d(r.currentAudio):l,f=ie(r.audios.map(e=>{var t;return{html:d(e),value:e.id,default:(null==(t=r.currentAudio)?void 0:t.id)===e.id}}),"html");f.push({html:l,value:"auto",default:!r.currentAudio});const m=i=>Y(null,null,function*(){return yield t.switchM3u8Audio(i.value),e.notice.show=`${c}: ${i.html}`,yield u(),i.html});s.control&&e.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&e.setting.update({name:"mediabunny-audio",tooltip:h,html:c,icon:'',width:200,selector:f,onSelect:m})})}function u(){return Y(this,null,function*(){const e=yield t.getM3u8State();if(!e)return s(),void a();yield Promise.all([l(e),c(e)])})}}({art:t,shim:a,option:e}),t.on("destroy",()=>{delete t.mediabunny,a.destroy()}),n}}}); diff --git a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs index 322e9ce8b..be3f97e5e 100644 --- a/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs +++ b/packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs @@ -20,7 +20,7 @@ var __privateWrapper = (obj, member, setter, getter) => ({ return __privateGet(obj, member, getter); } }); -var _closed, _generation, _iteration, _loading, _createSink, _usedSink, _destroyed, _preparing, _poster, _renderer, _onError, _VideoEngine_instances, current_fn, context_fn, report_fn, release_fn, draw_fn, load_fn, reset_fn, _playback; +var _closed, _closed2, _generation, _contexts, _nodes, _pump, _playTask, _playing, _loading, _onError, _AudioEngine_instances, load_fn, startPump_fn, play_fn, _generation2, _iteration, _loading2, _createSink, _usedSink, _destroyed, _preparing, _poster, _renderer, _onError2, _VideoEngine_instances, current_fn, context_fn, report_fn, release_fn, draw_fn, load_fn2, reset_fn, _playback; const $audio = ''; const $quality = ''; function uniqBy(array, property) { @@ -5317,13 +5317,13 @@ class IsobmffDemuxer extends Demuxer { const entryCount = readU32Be(slice); for (let i = 0; i < entryCount; i++) { const segmentDuration = version === 1 ? readU64Be(slice) : readU32Be(slice); - const mediaTime = version === 1 ? readI64Be(slice) : readI32Be(slice); + const mediaTime2 = version === 1 ? readI64Be(slice) : readI32Be(slice); const mediaRate = readFixed_16_16(slice); if (relevantEntryFound) { Logging._warn("Unsupported edit list: multiple edits are not currently supported. Only using first edit."); break; } - if (mediaTime === -1) { + if (mediaTime2 === -1) { previousSegmentDurations += segmentDuration; continue; } @@ -5332,7 +5332,7 @@ class IsobmffDemuxer extends Demuxer { break; } track.editListPreviousSegmentDurations = previousSegmentDurations; - track.editListOffset = mediaTime; + track.editListOffset = mediaTime2; relevantEntryFound = true; } } @@ -24076,8 +24076,344 @@ class Id3V2Reader { return this.readId3V2Text(encoding, until); } } +function mediaTime(clock) { + if (clock.paused || !clock.audioContext) + return clock.playbackTimeAtStart; + return (clock.audioContext.currentTime - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart; +} +function bufferTiming(clock, timestamp, duration, now) { + const startAt = clock.audioContextStartTime + (timestamp - clock.playbackTimeAtStart) / clock.playbackRate; + const endAt = startAt + duration / clock.playbackRate; + const endMediaTime = (endAt - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart; + return { startAt: Math.max(startAt, now), offset: startAt < now ? (now - startAt) * clock.playbackRate : null, endMediaTime }; +} +class ContextOwner { + constructor(host) { + this.host = host; + this.closed = false; + this.resumes = /* @__PURE__ */ new WeakMap(); + } + ensure(sampleRate) { + if (this.closed) + return null; + if (this.host.audioContext) + return this.host.audioContext; + const Context = window.AudioContext || window.webkitAudioContext; + let context; + try { + context = new Context({ sampleRate }); + } catch { + context = new Context(); + } + if (this.closed) { + void context.close().catch((error) => console.warn("MediaBunny obsolete context cleanup:", error)); + return null; + } + let gain = null; + try { + gain = context.createGain(); + gain.connect(context.destination); + const volume = this.host.muted ? 0 : this.host.volume; + gain.gain.value = volume * volume; + if (this.closed) { + gain.disconnect(); + void context.close().catch((error) => console.warn("MediaBunny obsolete context cleanup:", error)); + return null; + } + this.host.audioContext = context; + this.host.gainNode = gain; + return context; + } catch (error) { + try { + gain?.disconnect(); + } catch (failure) { + console.warn("MediaBunny gain setup cleanup:", failure); + } + void context.close().catch((failure) => console.warn("MediaBunny context setup cleanup:", failure)); + throw error; + } + } + updateGain() { + if (!this.host.gainNode) + return; + const volume = this.host.muted ? 0 : this.host.volume; + this.host.gainNode.gain.value = volume * volume; + } + resume(context) { + const previous = this.resumes.get(context); + if (previous) + return previous; + const pending = context.resume(); + this.resumes.set(context, pending); + const clear = () => { + if (this.resumes.get(context) === pending) + this.resumes.delete(context); + }; + pending.then(clear, clear); + return pending; + } + destroy() { + if (this.closed) + return; + this.closed = true; + const { audioContext: context, gainNode: gain } = this.host; + this.host.audioContext = null; + this.host.gainNode = null; + try { + gain?.disconnect(); + } finally { + if (context) + void context.close().catch((error) => console.warn("MediaBunny context close error:", error)); + } + } +} +class NodeQueue { + constructor(host) { + this.host = host; + } + release(node, stop) { + this.host.queuedNodes.delete(node); + node.onended = null; + let failed = false; + let failure; + try { + if (stop) + node.stop(); + } catch (error) { + failed = true; + failure = error; + } + try { + node.disconnect(); + } catch (error) { + if (!failed) { + failed = true; + failure = error; + } + } + if (failed) + throw failure; + } + stop() { + const failures = []; + for (const node of [...this.host.queuedNodes]) { + try { + this.release(node, true); + } catch (error) { + failures.push(error); + } + } + if (failures.length) + throw failures[0]; + } + schedule({ buffer, timestamp }) { + const context = this.host.audioContext; + const gain = this.host.gainNode; + if (!context || !gain) + return; + const timing = bufferTiming(this.host, timestamp, buffer.duration, context.currentTime); + if (timing.offset !== null && timing.offset >= buffer.duration) + return; + const node = context.createBufferSource(); + this.host.queuedNodes.add(node); + try { + node.buffer = buffer; + node.connect(gain); + node.playbackRate.value = this.host.playbackRate; + node.onended = () => { + if (!this.host.queuedNodes.has(node)) + return; + try { + this.release(node, false); + } catch (error) { + console.warn("MediaBunny ended node cleanup:", error); + } + }; + if (timing.offset === null) + node.start(timing.startAt); + else + node.start(timing.startAt, timing.offset); + this.host.latestScheduledEndTime = Math.max(this.host.latestScheduledEndTime, timing.endMediaTime); + } catch (error) { + try { + this.release(node, true); + } catch (failure) { + console.warn("MediaBunny audio node cleanup:", failure); + } + throw error; + } + } +} +const CANCELLED = /* @__PURE__ */ Symbol("cancelled"); +class AudioTask { + constructor() { + this.cancelled = false; + this.waits = /* @__PURE__ */ new Set(); + this.timers = /* @__PURE__ */ new Map(); + } + wait(pending) { + return new Promise((resolve, reject) => { + const cancel = () => resolve(CANCELLED); + if (this.cancelled) + cancel(); + else + this.waits.add(cancel); + pending.then((value) => { + this.waits.delete(cancel); + resolve(value); + }, (error) => { + this.waits.delete(cancel); + reject(error); + }); + }); + } + delay(ms) { + if (this.cancelled) + return Promise.resolve(false); + return new Promise((resolve) => { + const timer = setTimeout(() => { + this.timers.delete(timer); + resolve(!this.cancelled); + }, ms); + this.timers.set(timer, resolve); + }); + } + cancel() { + if (this.cancelled) + return; + this.cancelled = true; + for (const cancel of this.waits) + cancel(); + this.waits.clear(); + for (const [timer, resolve] of this.timers) { + clearTimeout(timer); + resolve(false); + } + this.timers.clear(); + } +} +function publish(events, current, names) { + for (const name of names) { + if (!current()) + return; + events.emit(name); + } +} +function metadataBarrier(ready, current) { + let video = false; + let audio = false; + let published = false; + function complete(part) { + if (!current() || published) + return; + if (part === "video") + video = true; + else audio = true; + if (video && audio) { + published = true; + ready(); + } + } + return { video: () => complete("video"), audio: () => complete("audio") }; +} +class AudioPump { + constructor(host, contexts, nodes) { + this.host = host; + this.contexts = contexts; + this.nodes = nodes; + this.task = null; + this.closing = /* @__PURE__ */ new WeakMap(); + } + async stopIterator() { + const iterator = this.host.audioIterator; + this.host.audioIterator = null; + if (!iterator) + return; + let pending = this.closing.get(iterator); + if (!pending) { + pending = Promise.resolve().then(() => iterator.return()).then(() => { + }); + this.closing.set(iterator, pending); + } + await pending; + } + cancel() { + this.task?.cancel(); + this.task = null; + void this.stopIterator().catch((error) => console.warn("MediaBunny audio iterator cleanup:", error)); + } + async run(id) { + if (this.host.asyncId !== id) + return; + this.cancel(); + const sink = this.host.audioSink; + const context = this.host.audioContext; + if (!sink || !context || this.host.paused || this.host.asyncId !== id) + return; + const task = new AudioTask(); + this.task = task; + let iterator = null; + const current = () => !task.cancelled && this.task === task && this.host.asyncId === id && !this.host.paused && this.host.audioContext === context && (!iterator || this.host.audioIterator === iterator); + try { + iterator = sink.buffers(this.host.currentTime); + this.host.audioIterator = iterator; + while (current()) { + const batch = []; + let done = false; + for (let index = 0; index < 16; index++) { + const result = await task.wait(iterator.next()); + if (result === CANCELLED || !current()) + return; + if (result.done) { + done = true; + break; + } + batch.push(result.value); + } + if (batch.length && context.state === "suspended") { + const resumed = await task.wait(this.contexts.resume(context)); + if (resumed === CANCELLED || !current()) + return; + publish(this.host.events, current, ["canplay", "playing"]); + } + for (const buffer of batch) { + if (!current()) + return; + this.nodes.schedule(buffer); + } + if (done) + return; + if (!await task.delay(0) || !current()) + return; + while (this.host.latestScheduledEndTime - this.host.currentTime > 1) { + if (!await task.delay(50) || !current()) + return; + } + } + } catch (error) { + if (current()) + throw error; + } finally { + task.cancel(); + if (this.task === task) { + this.task = null; + void this.stopIterator().catch((error) => console.warn("MediaBunny audio iterator cleanup:", error)); + } + } + } +} class AudioEngine { - constructor(events) { + constructor(events, onError) { + __privateAdd(this, _AudioEngine_instances); + __privateAdd(this, _closed2, false); + __privateAdd(this, _generation, 0); + __privateAdd(this, _contexts); + __privateAdd(this, _nodes); + __privateAdd(this, _pump); + __privateAdd(this, _playTask, null); + __privateAdd(this, _playing, null); + __privateAdd(this, _loading, null); + __privateAdd(this, _onError); this.events = events; this.input = null; this.audioSink = null; @@ -24094,164 +24430,108 @@ class AudioEngine { this.playbackRate = 1; this.asyncId = 0; this.queuedNodes = /* @__PURE__ */ new Set(); + __privateSet(this, _contexts, new ContextOwner(this)); + __privateSet(this, _nodes, new NodeQueue(this)); + __privateSet(this, _pump, new AudioPump(this, __privateGet(this, _contexts), __privateGet(this, _nodes))); + __privateSet(this, _onError, onError); } get currentTime() { - if (this.paused) - return this.playbackTimeAtStart; - return (this.audioContext.currentTime - this.audioContextStartTime) * this.playbackRate + this.playbackTimeAtStart; + return mediaTime(this); } ensureAudioContext(sampleRate) { - if (this.audioContext) - return; - const AudioContext = window.AudioContext || window.webkitAudioContext; - try { - this.audioContext = new AudioContext({ sampleRate }); - } catch { - this.audioContext = new AudioContext(); - } - this.gainNode = this.audioContext.createGain(); - this.gainNode.connect(this.audioContext.destination); - this.updateGain(); + __privateGet(this, _contexts).ensure(sampleRate); } updateGain() { - if (!this.gainNode) - return; - const v = this.muted ? 0 : this.volume; - this.gainNode.gain.value = v * v; + __privateGet(this, _contexts).updateGain(); } stopQueuedNodes() { - this.queuedNodes.forEach((node) => node.stop()); - this.queuedNodes.clear(); + __privateGet(this, _nodes).stop(); } async stopIterator() { - await this.audioIterator?.return(); - this.audioIterator = null; + await __privateGet(this, _pump).stopIterator(); } handleNoAudioTrack() { + if (__privateGet(this, _closed2)) + return; this.audioSink = null; this.ensureAudioContext(); } + cancelPending() { + __privateWrapper(this, _generation)._++; + try { + this.pause(); + } finally { + __privateSet(this, _loading, null); + this.input = null; + this.audioSink = null; + } + } async load(media, onMetadata) { - ++this.asyncId; - await this.stopIterator(); - this.stopQueuedNodes(); - this.paused = true; + if (__privateGet(this, _closed2)) + return; + this.cancelPending(); + const generation = __privateGet(this, _generation); this.playbackTimeAtStart = 0; this.audioContextStartTime = 0; - const { input, audioTrack, duration } = media; - this.input = input; - this.duration = duration; - if (!audioTrack) { - this.handleNoAudioTrack(); - onMetadata?.(); - return; + this.latestScheduledEndTime = 0; + const pending = Promise.resolve().then(() => __privateMethod(this, _AudioEngine_instances, load_fn).call(this, media, generation, onMetadata)); + __privateSet(this, _loading, pending); + try { + await pending; + } finally { + if (__privateGet(this, _loading) === pending) + __privateSet(this, _loading, null); } - if (audioTrack.codec === null || !await audioTrack.canDecode()) { - this.audioSink = null; - this.ensureAudioContext(); - onMetadata?.(); - return; - } - this.ensureAudioContext(audioTrack.sampleRate); - this.audioSink = new AudioBufferSink(audioTrack); - onMetadata?.(); } async runIterator(localId) { - if (!this.audioSink) + if (__privateGet(this, _closed2)) return; - await this.stopIterator(); - this.audioIterator = this.audioSink.buffers(this.currentTime); - const BATCH_SIZE = 16; - while (true) { - if (localId !== this.asyncId || this.paused) - return; - const batch = []; - let batchDone = false; - try { - for (let i = 0; i < BATCH_SIZE; i++) { - const result = await this.audioIterator.next(); - if (result.done) { - batchDone = true; - break; - } - batch.push(result.value); - } - } catch (e) { - console.error("Audio iterator error:", e); - batchDone = true; - } - if (localId !== this.asyncId || this.paused) - return; - if (batch.length > 0 && this.audioContext.state === "suspended") { - await this.audioContext.resume(); - this.events.emit("canplay"); - this.events.emit("playing"); - } - for (const { buffer, timestamp } of batch) { - const node = this.audioContext.createBufferSource(); - node.buffer = buffer; - node.connect(this.gainNode); - node.playbackRate.value = this.playbackRate; - const startAt = this.audioContextStartTime + (timestamp - this.playbackTimeAtStart) / this.playbackRate; - const duration = buffer.duration; - const endAt = startAt + duration / this.playbackRate; - const endMediaTime = (endAt - this.audioContextStartTime) * this.playbackRate + this.playbackTimeAtStart; - if (endMediaTime > this.latestScheduledEndTime) { - this.latestScheduledEndTime = endMediaTime; - } - if (startAt >= this.audioContext.currentTime) { - node.start(startAt); - } else { - node.start( - this.audioContext.currentTime, - (this.audioContext.currentTime - startAt) * this.playbackRate - ); - } - this.queuedNodes.add(node); - node.onended = () => this.queuedNodes.delete(node); - } - if (batchDone) - break; - await new Promise((resolve) => setTimeout(resolve, 0)); - const BUFFER_AHEAD = 1; - while (this.latestScheduledEndTime - this.currentTime > BUFFER_AHEAD) { - if (localId !== this.asyncId || this.paused) - return; - await new Promise((resolve) => setTimeout(resolve, 50)); - } - } + await __privateGet(this, _pump).run(localId); } async play() { + if (__privateGet(this, _closed2)) + return; + if (__privateGet(this, _playing)) + return __privateGet(this, _playing); if (!this.paused) return; - if (!this.audioContext) { - this.ensureAudioContext(); + const task = new AudioTask(); + __privateSet(this, _playTask, task); + const generation = __privateGet(this, _generation); + const pending = __privateMethod(this, _AudioEngine_instances, play_fn).call(this, task, generation); + __privateSet(this, _playing, pending); + try { + await pending; + } finally { + if (__privateGet(this, _playTask) === task) { + __privateSet(this, _playTask, null); + __privateSet(this, _playing, null); + } } - if (this.audioContext.state === "suspended") { - await this.audioContext.resume(); - } - this.audioContextStartTime = this.audioContext.currentTime; - this.latestScheduledEndTime = this.playbackTimeAtStart; - this.paused = false; - const id = ++this.asyncId; - this.runIterator(id); } pause() { - if (this.paused) - return; - this.playbackTimeAtStart = this.currentTime; + if (!this.paused) + this.playbackTimeAtStart = this.currentTime; this.paused = true; - this.stopIterator(); + this.asyncId++; + __privateGet(this, _playTask)?.cancel(); + __privateSet(this, _playTask, null); + __privateSet(this, _playing, null); + __privateGet(this, _pump).cancel(); this.stopQueuedNodes(); } async seek(time) { + if (__privateGet(this, _closed2)) + return; + const playing = !this.paused; + __privateGet(this, _pump).cancel(); + this.stopQueuedNodes(); this.playbackTimeAtStart = Math.max(0, time); - this.audioContextStartTime = this.audioContext.currentTime; + this.audioContextStartTime = this.audioContext?.currentTime ?? 0; this.latestScheduledEndTime = this.playbackTimeAtStart; const id = ++this.asyncId; - if (!this.paused) { - this.runIterator(id); - } + if (playing) + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, id); } setVolume(volume, muted) { this.volume = volume; @@ -24259,27 +24539,118 @@ class AudioEngine { this.updateGain(); } setPlaybackRate(rate) { - if (rate === this.playbackRate) + if (__privateGet(this, _closed2) || rate === this.playbackRate) return; - if (!this.paused) { - this.playbackTimeAtStart = this.currentTime; - this.audioContextStartTime = this.audioContext.currentTime; - } + const time = this.currentTime; + __privateGet(this, _pump).cancel(); + this.stopQueuedNodes(); + this.playbackTimeAtStart = time; + this.audioContextStartTime = this.audioContext?.currentTime ?? 0; this.playbackRate = rate; - if (!this.paused) { - const id = ++this.asyncId; - this.runIterator(id); - } + this.latestScheduledEndTime = time; + const id = ++this.asyncId; + if (!this.paused) + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, id); } destroy() { - this.asyncId++; - this.pause(); - this.audioContext?.close(); - this.audioContext = null; + if (__privateGet(this, _closed2)) + return; + __privateSet(this, _closed2, true); + __privateWrapper(this, _generation)._++; + const failures = []; + for (const release of [() => this.pause(), () => __privateGet(this, _contexts).destroy()]) { + try { + release(); + } catch (error) { + failures.push(error); + } + } this.input = null; this.audioSink = null; + __privateSet(this, _loading, null); + if (failures.length) + throw failures[0]; } } +_closed2 = new WeakMap(); +_generation = new WeakMap(); +_contexts = new WeakMap(); +_nodes = new WeakMap(); +_pump = new WeakMap(); +_playTask = new WeakMap(); +_playing = new WeakMap(); +_loading = new WeakMap(); +_onError = new WeakMap(); +_AudioEngine_instances = new WeakSet(); +load_fn = async function({ input, audioTrack, duration }, generation, onMetadata) { + const current = () => !__privateGet(this, _closed2) && __privateGet(this, _generation) === generation; + if (!current()) + return; + this.input = input; + this.duration = duration; + try { + const decodable = audioTrack && audioTrack.codec !== null && await audioTrack.canDecode(); + if (!current()) + return; + if (!decodable) { + this.handleNoAudioTrack(); + } else { + this.ensureAudioContext(audioTrack.sampleRate); + if (!current()) + return; + this.audioSink = new AudioBufferSink(audioTrack); + } + if (current()) + onMetadata?.(); + } catch (error) { + if (current()) + throw error; + } +}; +startPump_fn = function(id) { + void this.runIterator(id).catch((error) => { + if (__privateGet(this, _closed2) || id !== this.asyncId) + return; + try { + this.pause(); + } catch (failure) { + console.warn("MediaBunny audio failure cleanup:", failure); + } + try { + if (__privateGet(this, _onError)) + __privateGet(this, _onError).call(this, error); + else + this.events.emit("error", error); + } catch (failure) { + console.warn("MediaBunny audio error listener:", failure); + } + }); +}; +play_fn = async function(task, generation) { + const current = () => !__privateGet(this, _closed2) && !task.cancelled && __privateGet(this, _generation) === generation; + try { + const context = __privateGet(this, _contexts).ensure(); + if (!context || !current()) + return; + if (context.state === "suspended") { + const resumed = await task.wait(__privateGet(this, _contexts).resume(context)); + if (resumed === CANCELLED || !current()) + return; + } + if (__privateGet(this, _loading)) { + const loaded = await task.wait(__privateGet(this, _loading)); + if (loaded === CANCELLED || !current()) + return; + } + this.audioContextStartTime = context.currentTime; + this.latestScheduledEndTime = this.playbackTimeAtStart; + this.paused = false; + __privateMethod(this, _AudioEngine_instances, startPump_fn).call(this, ++this.asyncId); + } catch (error) { + if (current()) + throw error; + } +}; async function selectQuality(host, value) { const { input, media, loadSeq } = host; if (!media?.isHls || !input || host.destroyed) @@ -24469,30 +24840,6 @@ class LoadSession { this.disposeInput(); } } -function publish(events, current, names) { - for (const name of names) { - if (!current()) - return; - events.emit(name); - } -} -function metadataBarrier(ready, current) { - let video = false; - let audio = false; - let published = false; - function complete(part) { - if (!current() || published) - return; - if (part === "video") - video = true; - else audio = true; - if (video && audio) { - published = true; - ready(); - } - } - return { video: () => complete("video"), audio: () => complete("audio") }; -} async function resolveDuration({ input, videoTrack, audioTrack }) { const tracks = [videoTrack, audioTrack].filter((track) => track !== null); const referenceTrack = videoTrack || audioTrack; @@ -24537,7 +24884,6 @@ class Playback { this.wanted = false; this.playing = null; this.seeking = null; - this.audioStart = null; } operation() { return { ...completion(), source: this.host.loadSeq, complete: completion() }; @@ -24602,17 +24948,6 @@ class Playback { this.runPlay(operation).then(operation.resolve, operation.reject); return operation.promise; } - async startAudio() { - if (!this.audioStart) - this.audioStart = this.host.audio.play(); - const pending = this.audioStart; - try { - await pending; - } finally { - if (this.audioStart === pending) - this.audioStart = null; - } - } async runPlay(operation) { const current = () => this.current(operation, "playing") && this.wanted; try { @@ -24624,7 +24959,7 @@ class Playback { if (!current()) return; this.host.paused = false; - await this.startAudio(); + await this.host.audio.play(); if (!current()) { if (!this.wanted || this.host.destroyed) this.host.audio.pause(); @@ -24974,16 +25309,16 @@ class Renderer { class VideoEngine { constructor({ canvas, ctx, events, timeupdateInterval = 250, avSyncTolerance = 0.12, dropLateFrames = false, poster = "", preflightRange: preflightRange2 = false, onError }) { __privateAdd(this, _VideoEngine_instances); - __privateAdd(this, _generation, 0); + __privateAdd(this, _generation2, 0); __privateAdd(this, _iteration, 0); - __privateAdd(this, _loading, null); + __privateAdd(this, _loading2, null); __privateAdd(this, _createSink, null); __privateAdd(this, _usedSink, null); __privateAdd(this, _destroyed, false); __privateAdd(this, _preparing, false); __privateAdd(this, _poster, new Poster()); __privateAdd(this, _renderer); - __privateAdd(this, _onError); + __privateAdd(this, _onError2); this.canvas = canvas; this.ctx = ctx; this.events = events; @@ -25007,7 +25342,7 @@ class VideoEngine { this.playbackRate = 1; this.posterDrawn = false; this.isFetching = false; - __privateSet(this, _onError, onError); + __privateSet(this, _onError2, onError); __privateSet(this, _renderer, new Renderer(this, () => !__privateGet(this, _preparing), (frame) => __privateMethod(this, _VideoEngine_instances, draw_fn).call(this, frame, true), (error) => __privateMethod(this, _VideoEngine_instances, report_fn).call(this, error))); } async preflight(source, signal, current) { @@ -25016,7 +25351,7 @@ class VideoEngine { drawPoster() { if (__privateGet(this, _destroyed) || !this.poster || this.posterDrawn) return; - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); __privateGet(this, _poster).draw(this.poster, () => __privateMethod(this, _VideoEngine_instances, current_fn).call(this, generation), (image) => { this.clear(); this.canvas.width = image.naturalWidth || this.canvas.width; @@ -25035,13 +25370,13 @@ class VideoEngine { __privateMethod(this, _VideoEngine_instances, context_fn).call(this).clearRect(0, 0, this.canvas.width, this.canvas.height); } cancelPending() { - __privateWrapper(this, _generation)._++; + __privateWrapper(this, _generation2)._++; __privateWrapper(this, _iteration)._++; this.stop(); __privateMethod(this, _VideoEngine_instances, release_fn).call(this); __privateGet(this, _poster).cancel(); __privateSet(this, _preparing, false); - __privateSet(this, _loading, null); + __privateSet(this, _loading2, null); __privateSet(this, _createSink, null); __privateSet(this, _usedSink, null); this.videoSink = null; @@ -25051,16 +25386,16 @@ class VideoEngine { if (__privateGet(this, _destroyed)) return; this.cancelPending(); - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); const iteration = __privateGet(this, _iteration); __privateSet(this, _preparing, true); - const pending = Promise.resolve().then(() => __privateMethod(this, _VideoEngine_instances, load_fn).call(this, media, generation, iteration, onMetadata)); - __privateSet(this, _loading, pending); + const pending = Promise.resolve().then(() => __privateMethod(this, _VideoEngine_instances, load_fn2).call(this, media, generation, iteration, onMetadata)); + __privateSet(this, _loading2, pending); try { await pending; } finally { - if (__privateGet(this, _loading) === pending) - __privateSet(this, _loading, null); + if (__privateGet(this, _loading2) === pending) + __privateSet(this, _loading2, null); } } handleNoVideoTrack() { @@ -25077,9 +25412,9 @@ class VideoEngine { async resetIterator(time) { if (__privateGet(this, _destroyed)) return; - const generation = __privateGet(this, _generation); + const generation = __privateGet(this, _generation2); const iteration = ++__privateWrapper(this, _iteration)._; - const loading = __privateGet(this, _loading); + const loading = __privateGet(this, _loading2); this.stop(); __privateGet(this, _poster).cancel(); __privateSet(this, _preparing, true); @@ -25119,7 +25454,7 @@ class VideoEngine { if (__privateGet(this, _destroyed)) return; __privateSet(this, _destroyed, true); - __privateWrapper(this, _generation)._++; + __privateWrapper(this, _generation2)._++; __privateGet(this, _renderer).destroy(); __privateGet(this, _poster).cancel(); __privateMethod(this, _VideoEngine_instances, release_fn).call(this); @@ -25131,19 +25466,19 @@ class VideoEngine { this.audioClock = null; } } -_generation = new WeakMap(); +_generation2 = new WeakMap(); _iteration = new WeakMap(); -_loading = new WeakMap(); +_loading2 = new WeakMap(); _createSink = new WeakMap(); _usedSink = new WeakMap(); _destroyed = new WeakMap(); _preparing = new WeakMap(); _poster = new WeakMap(); _renderer = new WeakMap(); -_onError = new WeakMap(); +_onError2 = new WeakMap(); _VideoEngine_instances = new WeakSet(); current_fn = function(generation) { - return !__privateGet(this, _destroyed) && __privateGet(this, _generation) === generation; + return !__privateGet(this, _destroyed) && __privateGet(this, _generation2) === generation; }; context_fn = function() { if (!this.ctx) @@ -25154,8 +25489,8 @@ report_fn = function(error) { if (__privateGet(this, _destroyed)) return; __privateMethod(this, _VideoEngine_instances, release_fn).call(this); - if (__privateGet(this, _onError)) - __privateGet(this, _onError).call(this, error); + if (__privateGet(this, _onError2)) + __privateGet(this, _onError2).call(this, error); else this.events.emit("error", error); }; @@ -25168,7 +25503,7 @@ draw_fn = function(frame, clear) { this.clear(); __privateMethod(this, _VideoEngine_instances, context_fn).call(this).drawImage(frame.canvas, 0, 0); }; -load_fn = async function(media, generation, iteration, onMetadata) { +load_fn2 = async function(media, generation, iteration, onMetadata) { if (!__privateMethod(this, _VideoEngine_instances, current_fn).call(this, generation)) return; try { @@ -25242,7 +25577,14 @@ class MediaBunnyEngine { __privateAdd(this, _playback); this.events = events; this.option = option; - this.audio = new AudioEngine(events); + this.audio = new AudioEngine(events, (error) => { + try { + this.pause(); + } catch (failure) { + console.warn("MediaBunny audio coordinator cleanup:", failure); + } + this.reportError(error); + }); this.video = new VideoEngine({ canvas, ctx, @@ -25279,6 +25621,7 @@ class MediaBunnyEngine { this.ended = true; this.paused = true; __privateGet(this, _playback).ended(); + this.audio.pause(); }); } async load(src) { @@ -25287,6 +25630,7 @@ class MediaBunnyEngine { const id = ++this.loadSeq; __privateGet(this, _playback).invalidate(); this.video.cancelPending(); + this.audio.cancelPending(); this.loadSession?.cancel(); if (id !== this.loadSeq || this.destroyed) return; @@ -25311,6 +25655,7 @@ class MediaBunnyEngine { const failed = ++this.loadSeq; __privateGet(this, _playback).invalidate(); this.video.cancelPending(); + this.audio.cancelPending(); session.cancel(); if (failed !== this.loadSeq || this.destroyed) return; diff --git a/packages/artplayer-proxy-mediabunny/src/AudioEngine.d.ts b/packages/artplayer-proxy-mediabunny/src/AudioEngine.d.ts deleted file mode 100644 index 5730564d7..000000000 --- a/packages/artplayer-proxy-mediabunny/src/AudioEngine.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -import type { AudioPort } from './engine-ports' -import type EventTarget from './EventTarget' - -// Exact coordinator-facing port; implementation migration and decoder ownership are MB-06. -declare const AudioEngine: new (events: EventTarget) => AudioPort -export default AudioEngine diff --git a/packages/artplayer-proxy-mediabunny/src/AudioEngine.js b/packages/artplayer-proxy-mediabunny/src/AudioEngine.js deleted file mode 100644 index 7eee44ead..000000000 --- a/packages/artplayer-proxy-mediabunny/src/AudioEngine.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Audio Engine for MediaBunny - * Handles audio playback using Web Audio API - */ -import { - AudioBufferSink, -} from 'mediabunny' - -export default class AudioEngine { - constructor(events) { - this.events = events - - // MediaBunny instances - this.input = null - this.audioSink = null - this.audioIterator = null - - // Web Audio API - this.audioContext = null - this.gainNode = null - - // Playback state - this.audioContextStartTime = 0 - this.playbackTimeAtStart = 0 - this.latestScheduledEndTime = 0 - this.duration = Number.NaN - this.paused = true - - // Audio settings - this.volume = 0.7 - this.muted = false - this.playbackRate = 1 - - // Async control - this.asyncId = 0 - this.queuedNodes = new Set() - } - - get currentTime() { - if (this.paused) - return this.playbackTimeAtStart - - return ( - (this.audioContext.currentTime - this.audioContextStartTime) * this.playbackRate - + this.playbackTimeAtStart - ) - } - - ensureAudioContext(sampleRate) { - if (this.audioContext) - return - - const AudioContext = window.AudioContext || window.webkitAudioContext - - try { - this.audioContext = new AudioContext({ sampleRate }) - } - catch { - this.audioContext = new AudioContext() - } - - this.gainNode = this.audioContext.createGain() - this.gainNode.connect(this.audioContext.destination) - this.updateGain() - } - - updateGain() { - if (!this.gainNode) - return - const v = this.muted ? 0 : this.volume - this.gainNode.gain.value = v * v - } - - stopQueuedNodes() { - this.queuedNodes.forEach(node => node.stop()) - this.queuedNodes.clear() - } - - async stopIterator() { - await this.audioIterator?.return() - this.audioIterator = null - } - - handleNoAudioTrack() { - this.audioSink = null - this.ensureAudioContext() - } - - async load(media, onMetadata) { - ++this.asyncId - - await this.stopIterator() - this.stopQueuedNodes() - - this.paused = true - this.playbackTimeAtStart = 0 - this.audioContextStartTime = 0 - - const { input, audioTrack, duration } = media - this.input = input - this.duration = duration - - if (!audioTrack) { - this.handleNoAudioTrack() - onMetadata?.() - return - } - - if (audioTrack.codec === null || !(await audioTrack.canDecode())) { - this.audioSink = null - this.ensureAudioContext() - onMetadata?.() - return - } - - this.ensureAudioContext(audioTrack.sampleRate) - this.audioSink = new AudioBufferSink(audioTrack) - - onMetadata?.() - } - - async runIterator(localId) { - if (!this.audioSink) - return - - await this.stopIterator() - this.audioIterator = this.audioSink.buffers(this.currentTime) - - // Batch size: read multiple audio buffers per iteration to reduce - // IPC round-trip overhead. 16 buffers ≈ 340ms of audio. - const BATCH_SIZE = 16 - - while (true) { - if (localId !== this.asyncId || this.paused) - return - - const batch = [] - let batchDone = false - try { - for (let i = 0; i < BATCH_SIZE; i++) { - const result = await this.audioIterator.next() - if (result.done) { - batchDone = true - break - } - batch.push(result.value) - } - } - catch (e) { - console.error('Audio iterator error:', e) - batchDone = true - } - - if (localId !== this.asyncId || this.paused) - return - - // Resume if was suspended - if (batch.length > 0 && this.audioContext.state === 'suspended') { - await this.audioContext.resume() - this.events.emit('canplay') - this.events.emit('playing') - } - - // Schedule all buffers in the batch - for (const { buffer, timestamp } of batch) { - const node = this.audioContext.createBufferSource() - node.buffer = buffer - node.connect(this.gainNode) - node.playbackRate.value = this.playbackRate - - const startAt - = this.audioContextStartTime - + (timestamp - this.playbackTimeAtStart) / this.playbackRate - - const duration = buffer.duration - const endAt = startAt + duration / this.playbackRate - - const endMediaTime = (endAt - this.audioContextStartTime) * this.playbackRate + this.playbackTimeAtStart - if (endMediaTime > this.latestScheduledEndTime) { - this.latestScheduledEndTime = endMediaTime - } - - if (startAt >= this.audioContext.currentTime) { - node.start(startAt) - } - else { - node.start( - this.audioContext.currentTime, - (this.audioContext.currentTime - startAt) * this.playbackRate, - ) - } - - this.queuedNodes.add(node) - node.onended = () => this.queuedNodes.delete(node) - } - - if (batchDone) - break - - // Yield main thread after each batch so video rAF callbacks can run. - // Without this, the audio pump's tight loop starves the render loop. - await new Promise(resolve => setTimeout(resolve, 0)) - - // Backpressure: if we've scheduled too far ahead, wait for playback - // to catch up before decoding more. This prevents the audio pump from - // consuming all WebCodecs resources and starving the video decoder. - const BUFFER_AHEAD = 1 // seconds - while (this.latestScheduledEndTime - this.currentTime > BUFFER_AHEAD) { - if (localId !== this.asyncId || this.paused) - return - await new Promise(resolve => setTimeout(resolve, 50)) - } - } - } - - async play() { - if (!this.paused) - return - - if (!this.audioContext) { - this.ensureAudioContext() - } - - if (this.audioContext.state === 'suspended') { - await this.audioContext.resume() - } - - this.audioContextStartTime = this.audioContext.currentTime - this.latestScheduledEndTime = this.playbackTimeAtStart - this.paused = false - - const id = ++this.asyncId - this.runIterator(id) - } - - pause() { - if (this.paused) - return - - this.playbackTimeAtStart = this.currentTime - this.paused = true - - this.stopIterator() - this.stopQueuedNodes() - } - - async seek(time) { - this.playbackTimeAtStart = Math.max(0, time) - this.audioContextStartTime = this.audioContext.currentTime - this.latestScheduledEndTime = this.playbackTimeAtStart - - const id = ++this.asyncId - if (!this.paused) { - this.runIterator(id) - } - } - - setVolume(volume, muted) { - this.volume = volume - this.muted = muted - this.updateGain() - } - - setPlaybackRate(rate) { - if (rate === this.playbackRate) - return - - if (!this.paused) { - this.playbackTimeAtStart = this.currentTime - this.audioContextStartTime = this.audioContext.currentTime - } - - this.playbackRate = rate - - if (!this.paused) { - const id = ++this.asyncId - this.runIterator(id) - } - } - - destroy() { - this.asyncId++ - this.pause() - this.audioContext?.close() - this.audioContext = null - this.input = null - this.audioSink = null - } -} diff --git a/packages/artplayer-proxy-mediabunny/src/AudioEngine.ts b/packages/artplayer-proxy-mediabunny/src/AudioEngine.ts new file mode 100644 index 000000000..6631e26e3 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/AudioEngine.ts @@ -0,0 +1,288 @@ +import type { AudioBufferSink as AudioSink, Input } from 'mediabunny' +import type { AudioIterator } from './audio-pump' +import type { AudioPort } from './engine-ports' +import type EventTarget from './EventTarget' +import type { PlaybackMedia } from './media' +import { AudioBufferSink } from 'mediabunny' +import { mediaTime } from './audio-clock' +import ContextOwner from './audio-context' +import NodeQueue from './audio-nodes' +import AudioPump from './audio-pump' +import AudioTask, { CANCELLED } from './audio-task' + +export default class AudioEngine implements AudioPort { + declare events: EventTarget + declare input: Input | null + declare audioSink: AudioSink | null + declare audioIterator: AudioIterator | null + declare audioContext: AudioContext | null + declare gainNode: GainNode | null + declare audioContextStartTime: number + declare playbackTimeAtStart: number + declare latestScheduledEndTime: number + declare duration: number + declare paused: boolean + declare volume: number + declare muted: boolean + declare playbackRate: number + declare asyncId: number + declare queuedNodes: Set + #closed = false + #generation = 0 + #contexts: ContextOwner + #nodes: NodeQueue + #pump: AudioPump + #playTask: AudioTask | null = null + #playing: Promise | null = null + #loading: Promise | null = null + #onError: ((error: unknown) => void) | undefined + + constructor(events: EventTarget, onError?: (error: unknown) => void) { + this.events = events + this.input = null + this.audioSink = null + this.audioIterator = null + this.audioContext = null + this.gainNode = null + this.audioContextStartTime = 0 + this.playbackTimeAtStart = 0 + this.latestScheduledEndTime = 0 + this.duration = Number.NaN + this.paused = true + this.volume = 0.7 + this.muted = false + this.playbackRate = 1 + this.asyncId = 0 + this.queuedNodes = new Set() + this.#contexts = new ContextOwner(this) + this.#nodes = new NodeQueue(this) + this.#pump = new AudioPump(this, this.#contexts, this.#nodes) + this.#onError = onError + } + + get currentTime(): number { + return mediaTime(this) + } + + ensureAudioContext(sampleRate?: number): void { + this.#contexts.ensure(sampleRate) + } + + updateGain(): void { + this.#contexts.updateGain() + } + + stopQueuedNodes(): void { + this.#nodes.stop() + } + + async stopIterator(): Promise { + await this.#pump.stopIterator() + } + + handleNoAudioTrack(): void { + if (this.#closed) + return + this.audioSink = null + this.ensureAudioContext() + } + + cancelPending(): void { + this.#generation++ + try { + this.pause() + } + finally { + this.#loading = null + this.input = null + this.audioSink = null + } + } + + async load(media: PlaybackMedia, onMetadata?: () => void): Promise { + if (this.#closed) + return + this.cancelPending() + const generation = this.#generation + this.playbackTimeAtStart = 0 + this.audioContextStartTime = 0 + this.latestScheduledEndTime = 0 + const pending = Promise.resolve().then(() => this.#load(media, generation, onMetadata)) + this.#loading = pending + try { + await pending + } + finally { + if (this.#loading === pending) + this.#loading = null + } + } + + async #load({ input, audioTrack, duration }: PlaybackMedia, generation: number, onMetadata?: () => void): Promise { + const current = () => !this.#closed && this.#generation === generation + if (!current()) + return + this.input = input + this.duration = duration + try { + const decodable = audioTrack && audioTrack.codec !== null && await audioTrack.canDecode() + if (!current()) + return + if (!decodable) { + this.handleNoAudioTrack() + } + else { + this.ensureAudioContext(audioTrack.sampleRate) + if (!current()) + return + this.audioSink = new AudioBufferSink(audioTrack) + } + if (current()) + onMetadata?.() + } + catch (error) { + if (current()) + throw error + } + } + + async runIterator(localId: number): Promise { + if (this.#closed) + return + await this.#pump.run(localId) + } + + #startPump(id: number): void { + void this.runIterator(id).catch((error) => { + if (this.#closed || id !== this.asyncId) + return + try { + this.pause() + } + catch (failure) { console.warn('MediaBunny audio failure cleanup:', failure) } + try { + if (this.#onError) + this.#onError(error) + else + this.events.emit('error', error) + } + catch (failure) { console.warn('MediaBunny audio error listener:', failure) } + }) + } + + async play(): Promise { + if (this.#closed) + return + if (this.#playing) + return this.#playing + if (!this.paused) + return + const task = new AudioTask() + this.#playTask = task + const generation = this.#generation + const pending = this.#play(task, generation) + this.#playing = pending + try { + await pending + } + finally { + if (this.#playTask === task) { + this.#playTask = null + this.#playing = null + } + } + } + + async #play(task: AudioTask, generation: number): Promise { + const current = () => !this.#closed && !task.cancelled && this.#generation === generation + try { + const context = this.#contexts.ensure() + if (!context || !current()) + return + if (context.state === 'suspended') { + const resumed = await task.wait(this.#contexts.resume(context)) + if (resumed === CANCELLED || !current()) + return + } + if (this.#loading) { + const loaded = await task.wait(this.#loading) + if (loaded === CANCELLED || !current()) + return + } + this.audioContextStartTime = context.currentTime + this.latestScheduledEndTime = this.playbackTimeAtStart + this.paused = false + this.#startPump(++this.asyncId) + } + catch (error) { + if (current()) + throw error + } + } + + pause(): void { + if (!this.paused) + this.playbackTimeAtStart = this.currentTime + this.paused = true + this.asyncId++ + this.#playTask?.cancel() + this.#playTask = null + this.#playing = null + this.#pump.cancel() + this.stopQueuedNodes() + } + + async seek(time: number): Promise { + if (this.#closed) + return + const playing = !this.paused + this.#pump.cancel() + this.stopQueuedNodes() + this.playbackTimeAtStart = Math.max(0, time) + this.audioContextStartTime = this.audioContext?.currentTime ?? 0 + this.latestScheduledEndTime = this.playbackTimeAtStart + const id = ++this.asyncId + if (playing) + this.#startPump(id) + } + + setVolume(volume: number, muted: boolean): void { + this.volume = volume + this.muted = muted + this.updateGain() + } + + setPlaybackRate(rate: number): void { + if (this.#closed || rate === this.playbackRate) + return + const time = this.currentTime + this.#pump.cancel() + this.stopQueuedNodes() + this.playbackTimeAtStart = time + this.audioContextStartTime = this.audioContext?.currentTime ?? 0 + this.playbackRate = rate + this.latestScheduledEndTime = time + const id = ++this.asyncId + if (!this.paused) + this.#startPump(id) + } + + destroy(): void { + if (this.#closed) + return + this.#closed = true + this.#generation++ + const failures: unknown[] = [] + for (const release of [() => this.pause(), () => this.#contexts.destroy()]) { + try { + release() + } + catch (error) { failures.push(error) } + } + this.input = null + this.audioSink = null + this.#loading = null + if (failures.length) + throw failures[0] + } +} diff --git a/packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts b/packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts index 1bcbefb0e..5ef13f4e3 100644 --- a/packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts +++ b/packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts @@ -35,7 +35,15 @@ export default class MediaBunnyEngine implements EnginePort { constructor({ canvas, ctx, events, option = {} }: EngineOptions) { this.events = events this.option = option - this.audio = new AudioEngine(events) + this.audio = new AudioEngine(events, (error) => { + try { + this.pause() + } + catch (failure) { + console.warn('MediaBunny audio coordinator cleanup:', failure) + } + this.reportError(error) + }) this.video = new VideoEngine({ canvas, ctx, @@ -73,6 +81,7 @@ export default class MediaBunnyEngine implements EnginePort { this.ended = true this.paused = true this.#playback.ended() + this.audio.pause() }) } @@ -82,6 +91,7 @@ export default class MediaBunnyEngine implements EnginePort { const id = ++this.loadSeq this.#playback.invalidate() this.video.cancelPending() + this.audio.cancelPending() this.loadSession?.cancel() if (id !== this.loadSeq || this.destroyed) return @@ -107,6 +117,7 @@ export default class MediaBunnyEngine implements EnginePort { const failed = ++this.loadSeq this.#playback.invalidate() this.video.cancelPending() + this.audio.cancelPending() session.cancel() if (failed !== this.loadSeq || this.destroyed) return diff --git a/packages/artplayer-proxy-mediabunny/src/audio-clock.ts b/packages/artplayer-proxy-mediabunny/src/audio-clock.ts new file mode 100644 index 000000000..3a3334295 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/audio-clock.ts @@ -0,0 +1,20 @@ +export interface AudioClock { + audioContext: AudioContext | null + paused: boolean + audioContextStartTime: number + playbackTimeAtStart: number + playbackRate: number +} + +export function mediaTime(clock: AudioClock): number { + if (clock.paused || !clock.audioContext) + return clock.playbackTimeAtStart + return (clock.audioContext.currentTime - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart +} + +export function bufferTiming(clock: AudioClock, timestamp: number, duration: number, now: number) { + const startAt = clock.audioContextStartTime + (timestamp - clock.playbackTimeAtStart) / clock.playbackRate + const endAt = startAt + duration / clock.playbackRate + const endMediaTime = (endAt - clock.audioContextStartTime) * clock.playbackRate + clock.playbackTimeAtStart + return { startAt: Math.max(startAt, now), offset: startAt < now ? (now - startAt) * clock.playbackRate : null, endMediaTime } +} diff --git a/packages/artplayer-proxy-mediabunny/src/audio-context.ts b/packages/artplayer-proxy-mediabunny/src/audio-context.ts new file mode 100644 index 000000000..129d4cfe5 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/audio-context.ts @@ -0,0 +1,92 @@ +interface ContextHost { + audioContext: AudioContext | null + gainNode: GainNode | null + volume: number + muted: boolean +} + +export default class ContextOwner { + private closed = false + private resumes = new WeakMap>() + + constructor(private host: ContextHost) {} + + ensure(sampleRate?: number): AudioContext | null { + if (this.closed) + return null + if (this.host.audioContext) + return this.host.audioContext + const Context = window.AudioContext || (window as Window & { webkitAudioContext?: typeof AudioContext }).webkitAudioContext + let context: AudioContext + try { + context = new Context({ sampleRate }) + } + catch { + context = new Context() + } + if (this.closed) { + void context.close().catch(error => console.warn('MediaBunny obsolete context cleanup:', error)) + return null + } + let gain: GainNode | null = null + try { + gain = context.createGain() + gain.connect(context.destination) + const volume = this.host.muted ? 0 : this.host.volume + gain.gain.value = volume * volume + if (this.closed) { + gain.disconnect() + void context.close().catch(error => console.warn('MediaBunny obsolete context cleanup:', error)) + return null + } + this.host.audioContext = context + this.host.gainNode = gain + return context + } + catch (error) { + try { + gain?.disconnect() + } + catch (failure) { console.warn('MediaBunny gain setup cleanup:', failure) } + void context.close().catch(failure => console.warn('MediaBunny context setup cleanup:', failure)) + throw error + } + } + + updateGain(): void { + if (!this.host.gainNode) + return + const volume = this.host.muted ? 0 : this.host.volume + this.host.gainNode.gain.value = volume * volume + } + + resume(context: AudioContext): Promise { + const previous = this.resumes.get(context) + if (previous) + return previous + const pending = context.resume() + this.resumes.set(context, pending) + const clear = () => { + if (this.resumes.get(context) === pending) + this.resumes.delete(context) + } + pending.then(clear, clear) + return pending + } + + destroy(): void { + if (this.closed) + return + this.closed = true + const { audioContext: context, gainNode: gain } = this.host + this.host.audioContext = null + this.host.gainNode = null + try { + gain?.disconnect() + } + finally { + if (context) + void context.close().catch(error => console.warn('MediaBunny context close error:', error)) + } + } +} diff --git a/packages/artplayer-proxy-mediabunny/src/audio-nodes.ts b/packages/artplayer-proxy-mediabunny/src/audio-nodes.ts new file mode 100644 index 000000000..21516e685 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/audio-nodes.ts @@ -0,0 +1,88 @@ +import type { WrappedAudioBuffer } from 'mediabunny' +import type { AudioClock } from './audio-clock' +import { bufferTiming } from './audio-clock' + +interface QueueHost extends AudioClock { + gainNode: GainNode | null + queuedNodes: Set + latestScheduledEndTime: number +} + +export default class NodeQueue { + constructor(private host: QueueHost) {} + + private release(node: AudioBufferSourceNode, stop: boolean): void { + this.host.queuedNodes.delete(node) + node.onended = null + let failed = false + let failure: unknown + try { + if (stop) + node.stop() + } + catch (error) { + failed = true + failure = error + } + try { + node.disconnect() + } + catch (error) { + if (!failed) { + failed = true + failure = error + } + } + if (failed) + throw failure + } + + stop(): void { + const failures: unknown[] = [] + for (const node of [...this.host.queuedNodes]) { + try { + this.release(node, true) + } + catch (error) { failures.push(error) } + } + if (failures.length) + throw failures[0] + } + + schedule({ buffer, timestamp }: WrappedAudioBuffer): void { + const context = this.host.audioContext + const gain = this.host.gainNode + if (!context || !gain) + return + const timing = bufferTiming(this.host, timestamp, buffer.duration, context.currentTime) + if (timing.offset !== null && timing.offset >= buffer.duration) + return + const node = context.createBufferSource() + this.host.queuedNodes.add(node) + try { + node.buffer = buffer + node.connect(gain) + node.playbackRate.value = this.host.playbackRate + node.onended = () => { + if (!this.host.queuedNodes.has(node)) + return + try { + this.release(node, false) + } + catch (error) { console.warn('MediaBunny ended node cleanup:', error) } + } + if (timing.offset === null) + node.start(timing.startAt) + else + node.start(timing.startAt, timing.offset) + this.host.latestScheduledEndTime = Math.max(this.host.latestScheduledEndTime, timing.endMediaTime) + } + catch (error) { + try { + this.release(node, true) + } + catch (failure) { console.warn('MediaBunny audio node cleanup:', failure) } + throw error + } + } +} diff --git a/packages/artplayer-proxy-mediabunny/src/audio-pump.ts b/packages/artplayer-proxy-mediabunny/src/audio-pump.ts new file mode 100644 index 000000000..001386c27 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/audio-pump.ts @@ -0,0 +1,106 @@ +import type { AudioBufferSink, WrappedAudioBuffer } from 'mediabunny' +import type ContextOwner from './audio-context' +import type NodeQueue from './audio-nodes' +import type EventTarget from './EventTarget' +import AudioTask, { CANCELLED } from './audio-task' +import { publish } from './readiness' + +export type AudioIterator = Pick, 'next' | 'return'> +export interface PumpHost { + audioSink: AudioBufferSink | null + audioIterator: AudioIterator | null + audioContext: AudioContext | null + paused: boolean + asyncId: number + readonly currentTime: number + latestScheduledEndTime: number + events: EventTarget +} + +export default class AudioPump { + private task: AudioTask | null = null + private closing = new WeakMap>() + + constructor(private host: PumpHost, private contexts: ContextOwner, private nodes: NodeQueue) {} + + async stopIterator(): Promise { + const iterator = this.host.audioIterator + this.host.audioIterator = null + if (!iterator) + return + let pending = this.closing.get(iterator) + if (!pending) { + pending = Promise.resolve().then(() => iterator.return()).then(() => {}) + this.closing.set(iterator, pending) + } + await pending + } + + cancel(): void { + this.task?.cancel() + this.task = null + void this.stopIterator().catch(error => console.warn('MediaBunny audio iterator cleanup:', error)) + } + + async run(id: number): Promise { + if (this.host.asyncId !== id) + return + this.cancel() + const sink = this.host.audioSink + const context = this.host.audioContext + if (!sink || !context || this.host.paused || this.host.asyncId !== id) + return + const task = new AudioTask() + this.task = task + let iterator: AudioIterator | null = null + const current = () => !task.cancelled && this.task === task && this.host.asyncId === id && !this.host.paused && this.host.audioContext === context && (!iterator || this.host.audioIterator === iterator) + try { + iterator = sink.buffers(this.host.currentTime) + this.host.audioIterator = iterator + while (current()) { + const batch: WrappedAudioBuffer[] = [] + let done = false + for (let index = 0; index < 16; index++) { + const result = await task.wait(iterator.next()) + if (result === CANCELLED || !current()) + return + if (result.done) { + done = true + break + } + batch.push(result.value) + } + if (batch.length && context.state === 'suspended') { + const resumed = await task.wait(this.contexts.resume(context)) + if (resumed === CANCELLED || !current()) + return + publish(this.host.events, current, ['canplay', 'playing']) + } + for (const buffer of batch) { + if (!current()) + return + this.nodes.schedule(buffer) + } + if (done) + return + if (!(await task.delay(0)) || !current()) + return + while (this.host.latestScheduledEndTime - this.host.currentTime > 1) { + if (!(await task.delay(50)) || !current()) + return + } + } + } + catch (error) { + if (current()) + throw error + } + finally { + task.cancel() + if (this.task === task) { + this.task = null + void this.stopIterator().catch(error => console.warn('MediaBunny audio iterator cleanup:', error)) + } + } + } +} diff --git a/packages/artplayer-proxy-mediabunny/src/audio-task.ts b/packages/artplayer-proxy-mediabunny/src/audio-task.ts new file mode 100644 index 000000000..ea442a923 --- /dev/null +++ b/packages/artplayer-proxy-mediabunny/src/audio-task.ts @@ -0,0 +1,50 @@ +export const CANCELLED = Symbol('cancelled') + +export default class AudioTask { + cancelled = false + private waits = new Set<() => void>() + private timers = new Map, (active: boolean) => void>() + + wait(pending: Promise): Promise { + return new Promise((resolve, reject) => { + const cancel = () => resolve(CANCELLED) + if (this.cancelled) + cancel() + else + this.waits.add(cancel) + pending.then((value) => { + this.waits.delete(cancel) + resolve(value) + }, (error) => { + this.waits.delete(cancel) + reject(error) + }) + }) + } + + delay(ms: number): Promise { + if (this.cancelled) + return Promise.resolve(false) + return new Promise((resolve) => { + const timer = setTimeout(() => { + this.timers.delete(timer) + resolve(!this.cancelled) + }, ms) + this.timers.set(timer, resolve) + }) + } + + cancel(): void { + if (this.cancelled) + return + this.cancelled = true + for (const cancel of this.waits) + cancel() + this.waits.clear() + for (const [timer, resolve] of this.timers) { + clearTimeout(timer) + resolve(false) + } + this.timers.clear() + } +} diff --git a/packages/artplayer-proxy-mediabunny/src/engine-ports.ts b/packages/artplayer-proxy-mediabunny/src/engine-ports.ts index bb298e454..a3688c823 100644 --- a/packages/artplayer-proxy-mediabunny/src/engine-ports.ts +++ b/packages/artplayer-proxy-mediabunny/src/engine-ports.ts @@ -4,6 +4,7 @@ import type EventTarget from './EventTarget' import type { PlaybackMedia } from './media' export interface AudioPort { + cancelPending: () => void readonly currentTime: number duration: number paused: boolean diff --git a/packages/artplayer-proxy-mediabunny/src/playback.ts b/packages/artplayer-proxy-mediabunny/src/playback.ts index 53f972ca2..d3a19030b 100644 --- a/packages/artplayer-proxy-mediabunny/src/playback.ts +++ b/packages/artplayer-proxy-mediabunny/src/playback.ts @@ -28,7 +28,6 @@ export default class Playback { private wanted = false private playing: Operation | null = null private seeking: Operation | null = null - private audioStart: Promise | null = null constructor(private host: PlaybackHost) {} @@ -103,19 +102,6 @@ export default class Playback { return operation.promise } - private async startAudio(): Promise { - if (!this.audioStart) - this.audioStart = this.host.audio.play() - const pending = this.audioStart - try { - await pending - } - finally { - if (this.audioStart === pending) - this.audioStart = null - } - } - private async runPlay(operation: Operation): Promise { const current = () => this.current(operation, 'playing') && this.wanted try { @@ -127,7 +113,7 @@ export default class Playback { if (!current()) return this.host.paused = false - await this.startAudio() + await this.host.audio.play() if (!current()) { if (!this.wanted || this.host.destroyed) this.host.audio.pause() diff --git a/refactor/baselines/mb-audio-source.json b/refactor/baselines/mb-audio-source.json new file mode 100644 index 000000000..66e89b56b --- /dev/null +++ b/refactor/baselines/mb-audio-source.json @@ -0,0 +1,10 @@ +{ + "task": "PKG-MB-06", + "sourceCommit": "9d037dcbf913fef2d2a9eb4f3924d6abf3ab5597", + "sourceSha256LF": { + "packages/artplayer-proxy-mediabunny/src/AudioEngine.js": "910d6831372e4895d55dec78010f281a199bc88f99735630a5a3b621f192ac35", + "packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts": "237d3d29fbf61a74df83dea11d862450dfd8f3b7fbd555dd5552b630ff0191e9", + "packages/artplayer-proxy-mediabunny/src/playback.ts": "0512f6a1b253d754b6644266327e368e0e18cce1cf9a3af62b6747ed55d691f7", + "packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js": "9c89a729197593ffcab11b64813b312f588f5515d2cb8acb0537d0a389a5209c" + } +} diff --git a/refactor/baselines/mb-audio-validation.json b/refactor/baselines/mb-audio-validation.json new file mode 100644 index 000000000..07d75b2f7 --- /dev/null +++ b/refactor/baselines/mb-audio-validation.json @@ -0,0 +1,13360 @@ +{ + "task": "PKG-MB-06", + "status": "done", + "parentCommit": "9d037dcbf913fef2d2a9eb4f3924d6abf3ab5597", + "sourceSha256LF": { + "packages/artplayer-proxy-mediabunny/src/audio-clock.ts": "6f11da4cfa46023bdab4f1bc3930f631f278ac562662fb0a7f908c110ea5d1a8", + "packages/artplayer-proxy-mediabunny/src/audio-context.ts": "7807a2b5343d6af5af67d23c1429a9715567c3f888fc4b5e9c9327bbb2f30332", + "packages/artplayer-proxy-mediabunny/src/audio-nodes.ts": "223e8241c7b2d8400ea25ac127ecc15dd16a687e984377b18b6891afa2fdef75", + "packages/artplayer-proxy-mediabunny/src/audio-pump.ts": "b85f086f4cae13d04d2e334e4e9fa18a6768f3e4187f6124761e3c439060cf06", + "packages/artplayer-proxy-mediabunny/src/audio-task.ts": "65d831e8455a5df3897315ee5b9ee8849a26347fee411e038860df388c1fa77b", + "packages/artplayer-proxy-mediabunny/src/AudioEngine.ts": "4d58cc30148bb4d9e384ea4716a805b00dd9633e03130ba6aeac8d431dd72c43", + "packages/artplayer-proxy-mediabunny/src/engine-ports.ts": "c56fad4a8f9578aa37686972d96d925012df8160c62337a53200b23a4fc3b164", + "packages/artplayer-proxy-mediabunny/src/engine-types.ts": "857a61f1fa3531bd737626658981eaab1b83eb369266fb45528676b9f57a293a", + "packages/artplayer-proxy-mediabunny/src/EventTarget.ts": "4cea57e59b0a1118744a55b0a87c1df28cb0d69c26c50f9275039fe7540c9720", + "packages/artplayer-proxy-mediabunny/src/hls-selection.ts": "a8632c0ea7d0c59434de005eee81bbf8d1dea8ae73c690673b603e5d6fa3cfd6", + "packages/artplayer-proxy-mediabunny/src/hls-state.ts": "ff9ffd742f9763349df1f50eac6b6bd488a80d05aaab8ca198f387f0d17d5e25", + "packages/artplayer-proxy-mediabunny/src/index.js": "4e1be8937908ff6e6ef8a4e863e22b4468312cf31d66ac299322e475757773bb", + "packages/artplayer-proxy-mediabunny/src/input.ts": "d25b1c4ee4aee358c86fd8c554b8b36bfc23fdbd3c27fa21d2cd7e812c98bf9c", + "packages/artplayer-proxy-mediabunny/src/load-session.ts": "560fbd5935fc787bde5f413fcaa41b8829506179c5328ce3cb51e734bbba8cec", + "packages/artplayer-proxy-mediabunny/src/m3u8.js": "4639f09e0c743dc2b24078f48ca1e58eaaedaa3f5e6b863583cbd4bc4a7d3142", + "packages/artplayer-proxy-mediabunny/src/media.ts": "e745cd8e750e05d0fcfa4bc588f7eb5a5576f3be20f5e67b65b704f57d539ae9", + "packages/artplayer-proxy-mediabunny/src/MediaBunnyEngine.ts": "3d51f6ecd247d1622809b5b679b906eb9b5ad4f9332a5d52dd38e5e2e29f38e9", + "packages/artplayer-proxy-mediabunny/src/playback.ts": "e2a65782c89627198752ff1fe691d4eea0bef215d883a59f0bdcd3e904a4fb47", + "packages/artplayer-proxy-mediabunny/src/preflight.ts": "d296234312f23b97a1e0a054f1d7dbbc988d5240c5fd5089c36df1677c7b7348", + "packages/artplayer-proxy-mediabunny/src/readiness.ts": "9aa24b5e994006b45bda9eafad602785c3e0e334cef54ff45a4939e386c4aceb", + "packages/artplayer-proxy-mediabunny/src/shim-frames.ts": "172b222f997a711c2cc7741f189f05127a4ac5099c1cbe2729e903b36b4ce24a", + "packages/artplayer-proxy-mediabunny/src/shim-values.ts": "a93ee17e87cc7db24f4b02d866af8af206d3007d01def446906fb769c20de17d", + "packages/artplayer-proxy-mediabunny/src/tracks.ts": "6da68530c1fc7105ab17ed742d87d93e84447e822e84386591f9c3e6d0bec733", + "packages/artplayer-proxy-mediabunny/src/video-frames.ts": "c48b93c77d976b03d9cb828478ef3f208e35fbd78a4c6d3d6566d90bdc0fe6f2", + "packages/artplayer-proxy-mediabunny/src/video-poster.ts": "db883faea9c6b6e74535ddfba1b55011b751faf94a342d70bef532a1c96f7a46", + "packages/artplayer-proxy-mediabunny/src/video-renderer.ts": "a1fe324f2b8e4efb0cc40a6021cb85bbcc0568f53352107d63a8b9bbebe5e9b5", + "packages/artplayer-proxy-mediabunny/src/VideoEngine.ts": "1c41d43e663b51319d25dccb08a16c7450703dcdffe15d686b4fa3f0a8c7a7e6", + "packages/artplayer-proxy-mediabunny/src/VideoShim.ts": "1fef3028a3937182c31503129655efdb88118ea0f6d3be96e9be99dcbcc5fdc7", + "packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.js": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.legacy.js": "bfa469b1145d25a5f88e937b50e104467c0a58c0085997a1c99415baf3c5bb1c", + "packages/artplayer-proxy-mediabunny/dist/artplayer-proxy-mediabunny.mjs": "9282f922778aca80e83ea918ab4b18952248b238abbc159424a5b2771fd5eb70", + "packages/artplayer-proxy-mediabunny/ARCHITECTURE.md": "4b6ff459f75bf405d86a5163b77c9e022008fb6243a10aeb75cd4a3ae0df7651", + "packages/artplayer-proxy-mediabunny/package.json": "96b09ce19ea7914485aa9780329a0cfc43b18e38232ea1dd92d2e6dc27310055", + "packages/artplayer-proxy-mediabunny/tsconfig.json": "f287a0e014faa10c0da2aabd0341b4d74359be4135f4d07480b4f7a3108c8128", + "packages/artplayer-proxy-mediabunny/types/artplayer-proxy-mediabunny.d.ts": "af2083224d0760752d83eb2ac86b1dea5586455b81d47e4ba70f9f6a874a75d8", + "package.json": "bb08f9c49efeb441b6ea16ad021c8610b06ef45a1ee6b3ec99f74b8359833fca", + "test/mediabunny-audio.test.js": "fc5a7131bf853a2f4666aba1300231a2381e1555e478e0865022142c3a5de0dc", + "test/mediabunny-coordination.test.js": "ac8df252f1beb07b53dc4cb40c2a3555eec74cf8d3bd2d24fe0514a639c1bc62", + "test/browser/mediabunny-audio.spec.js": "f378b758372ff659671012cad5e23cea1ccfcddf333fb6e6abc0e47dbf7327e8" + }, + "node": { + "total": 183, + "audio": 37, + "sameAssertionsOnPreviousMain": { + "passed": 8, + "failed": 29, + "cancelled": 0, + "log": "refactor/.cache/mb06-audio-frozen-final.log" + }, + "main": 159, + "legacy": 159, + "artifactScope": "Each 159-case command contains 155 candidate artifact assertions and four frozen normal-event controls." + }, + "browser": { + "total": 78, + "outcomes": { + "native-audio-ownership-observed": 16, + "unsupported-capability-control": 18, + "native-input-playback-and-seek": 10, + "trackless-rejected-before-decoder-setup": 3, + "native-pending-stream-cancellation": 9, + "native-synthetic-raf": 9, + "native-decoded-video-race": 10, + "native-mp4-playback-observed": 2, + "verified-unsupported-capability-control": 1 + }, + "records": [ + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "playback", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 1.1786666666666668, + "rate": 2, + "anchor": 0.4, + "elapsed": 0.38933333333333336, + "nodeRates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "hasSink": true, + "samples": [], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.04, + 0.018666666666666668 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.042666666666666665 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.064 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.08533333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.10666666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.128 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.14933333333333335 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.1706666666666667 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.192 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.21333333333333335 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2346666666666667 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.256 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2773333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.29866666666666664 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.32 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3413333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.36266666666666664 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.384 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4053333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.42666666666666664 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.448 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4693333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.49066666666666664 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.512 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5333333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5546666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.576 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5973333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6186666666666667 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.64 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6613333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6826666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.704 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7253333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7466666666666667 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.768 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7893333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8106666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.832 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8533333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8746666666666667 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.896 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9173333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9386666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.96 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9813333333333333 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0026666666666666 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.024 + ], + "rate": 1, + "at": 0.04 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0453333333333334 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0666666666666667 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.088 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1093333333333335 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1306666666666667 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1520000000000001 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1733333333333333 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1946666666666668 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2160000000000002 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2373333333333334 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2586666666666668 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.28 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3013333333333335 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3226666666666667 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.344 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3653333333333335 + ], + "rate": 1, + "at": 0.09066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3866666666666667 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4080000000000001 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4293333333333333 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4506666666666668 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4720000000000002 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4933333333333334 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5146666666666668 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.536 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5573333333333335 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5786666666666667 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6213333333333335 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6426666666666667 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6640000000000001 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6853333333333333 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7066666666666668 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5013333333333333, + 0.016000000000000014 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.504 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5146666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5253333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5359999999999999 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5466666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5573333333333332 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.568 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5786666666666667 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5893333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6106666666666667 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6213333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6319999999999999 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6426666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6533333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6639999999999999 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6746666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6853333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.696 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7066666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7173333333333334 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.728 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7386666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7493333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.76 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7706666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7813333333333332 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7919999999999999 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8026666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8133333333333332 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.824 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8346666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8453333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.856 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8666666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8773333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.888 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8986666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9093333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9199999999999999 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9306666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9413333333333332 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.952 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9626666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9733333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.984 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9946666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0053333333333332 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.016 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0266666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0373333333333332 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0479999999999998 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0586666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0693333333333332 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0799999999999998 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0906666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1013333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1119999999999999 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1226666666666665 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1333333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.144 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1546666666666665 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1653333333333333 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.176 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1866666666666665 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1973333333333331 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.208 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2186666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2293333333333332 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.24 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2506666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2613333333333332 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2719999999999998 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2826666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2933333333333332 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.304 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3146666666666667 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3253333333333333 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3359999999999999 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3466666666666667 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3573333333333333 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3679999999999999 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3786666666666667 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3893333333333333 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4106666666666667 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4213333333333333 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.432 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4426666666666665 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4533333333333334 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.464 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4746666666666666 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4853333333333334 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.496 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:waiting", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-pause", + "outcome": "native-audio-ownership-observed", + "result": { + "obsoleteScheduled": false, + "rates": [], + "queued": 0, + "paused": true + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-rate", + "outcome": "native-audio-ownership-observed", + "result": { + "obsoleteScheduled": false, + "rates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "queued": 60, + "paused": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.06133333333333333, + 0.010666666666666672 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.06666666666666667 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.07733333333333334 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.088 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.09866666666666665 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.10933333333333334 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.12 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.13066666666666668 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.14133333333333334 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.152 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.16266666666666668 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.17333333333333334 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.184 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.19466666666666665 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.20533333333333334 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.216 + ], + "rate": 2, + "at": 0.06133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.22666666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.23733333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.248 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.25866666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.26933333333333337 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.28 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2906666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.30133333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.312 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.32266666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3333333333333333 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.344 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3546666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.36533333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.376 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.38666666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3973333333333333 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.408 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4186666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.42933333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.44 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.45066666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4613333333333333 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.472 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4826666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.49333333333333335 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.504 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5146666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5253333333333333 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5359999999999999 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5466666666666666 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5573333333333332 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5680000000000001 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5786666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5893333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6000000000000001 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6106666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6213333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.632 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6426666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6533333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.664 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6746666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6853333333333333 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6960000000000001 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7066666666666667 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7173333333333334 + ], + "rate": 2, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7280000000000001 + ], + "rate": 2, + "at": 0.072 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:ratechange", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-pause", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": true + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-source", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:pause", + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-destroy", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "destroy", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "av-clock", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 2.1466666666666665, + "rate": 2, + "anchor": 1.3893333333333333, + "elapsed": 0.3786666666666667, + "nodeRates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "hasSink": true, + "samples": [ + { + "frame": 1, + "audio": 1, + "rate": 1, + "paused": true + }, + { + "frame": 1.0416666666666667, + "audio": 1.0506666666666666, + "rate": 1, + "paused": false + }, + { + "frame": 1.0833333333333333, + "audio": 1.1013333333333333, + "rate": 1, + "paused": false + }, + { + "frame": 1.125, + "audio": 1.1306666666666667, + "rate": 1, + "paused": false + }, + { + "frame": 1.1666666666666667, + "audio": 1.1706666666666667, + "rate": 1, + "paused": false + }, + { + "frame": 1.2083333333333333, + "audio": 1.2213333333333334, + "rate": 1, + "paused": false + }, + { + "frame": 1.25, + "audio": 1.2506666666666666, + "rate": 1, + "paused": false + }, + { + "frame": 1.2916666666666667, + "audio": 1.3013333333333335, + "rate": 1, + "paused": false + }, + { + "frame": 1.3333333333333333, + "audio": 1.3493333333333335, + "rate": 1, + "paused": false + }, + { + "frame": 1.375, + "audio": 1.3813333333333333, + "rate": 1, + "paused": false + }, + { + "frame": 1.4166666666666667, + "audio": 1.4266666666666667, + "rate": 2, + "paused": false + }, + { + "frame": 1.4583333333333333, + "audio": 1.4906666666666668, + "rate": 2, + "paused": false + }, + { + "frame": 1.5, + "audio": 1.5226666666666666, + "rate": 2, + "paused": false + }, + { + "frame": 1.5416666666666667, + "audio": 1.5493333333333335, + "rate": 2, + "paused": false + }, + { + "frame": 1.5833333333333333, + "audio": 1.5866666666666667, + "rate": 2, + "paused": false + }, + { + "frame": 1.625, + "audio": 1.6293333333333333, + "rate": 2, + "paused": false + }, + { + "frame": 1.6666666666666667, + "audio": 1.688, + "rate": 2, + "paused": false + }, + { + "frame": 1.7083333333333333, + "audio": 1.7306666666666668, + "rate": 2, + "paused": false + }, + { + "frame": 1.75, + "audio": 1.7893333333333334, + "rate": 2, + "paused": false + }, + { + "frame": 1.7916666666666667, + "audio": 1.8266666666666667, + "rate": 2, + "paused": false + }, + { + "frame": 1.8333333333333333, + "audio": 1.848, + "rate": 2, + "paused": false + }, + { + "frame": 1.875, + "audio": 1.8906666666666667, + "rate": 2, + "paused": false + }, + { + "frame": 1.9166666666666667, + "audio": 1.9280000000000002, + "rate": 2, + "paused": false + }, + { + "frame": 1.9583333333333333, + "audio": 1.9866666666666668, + "rate": 2, + "paused": false + }, + { + "frame": 2, + "audio": 2.0293333333333337, + "rate": 2, + "paused": false + }, + { + "frame": 2.0416666666666665, + "audio": 2.0506666666666664, + "rate": 2, + "paused": false + }, + { + "frame": 2.0833333333333335, + "audio": 2.088, + "rate": 2, + "paused": false + }, + { + "frame": 2.125, + "audio": 2.1306666666666665, + "rate": 2, + "paused": false + } + ], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.072, + 0.018666666666666734 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.07466666666666669 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.09599999999999989 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.11733333333333332 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.13866666666666674 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.15999999999999995 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.18133333333333337 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.20266666666666658 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.224 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.24533333333333343 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2666666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.28800000000000003 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.30933333333333324 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.33066666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.35199999999999987 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3733333333333333 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3946666666666667 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4159999999999999 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.43733333333333335 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.45866666666666656 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.48 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5013333333333334 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5226666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.544 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5653333333333332 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5866666666666667 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6079999999999999 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6293333333333333 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6506666666666667 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6719999999999999 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6933333333333334 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7146666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.736 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7573333333333334 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7786666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8213333333333332 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8426666666666667 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8639999999999999 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8853333333333333 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9066666666666667 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9279999999999999 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9493333333333334 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9706666666666666 + ], + "rate": 1, + "at": 0.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.992 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0133333333333332 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0346666666666666 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0559999999999998 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0773333333333335 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0986666666666667 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1199999999999999 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.141333333333333 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1626666666666667 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.184 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2053333333333331 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2266666666666668 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.248 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2693333333333332 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2906666666666669 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.312 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3333333333333333 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3546666666666665 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3760000000000001 + ], + "rate": 1, + "at": 0.08 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3973333333333333 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4186666666666665 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4400000000000002 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4613333333333334 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4826666666666666 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5039999999999998 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5253333333333334 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5466666666666666 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5679999999999998 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5893333333333335 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6106666666666667 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.632 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.653333333333333 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6746666666666667 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.696 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7173333333333332 + ], + "rate": 1, + "at": 0.4 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.52, + 0.01866666666666683 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5213333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.532 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5426666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5533333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.564 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5746666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5853333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.596 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6066666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6173333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.628 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6386666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6493333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.66 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6706666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6813333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.692 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7026666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7133333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.724 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7346666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7453333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.756 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7666666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7773333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7879999999999999 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7986666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8093333333333332 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8200000000000001 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8306666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8413333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8519999999999999 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8626666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8733333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8839999999999999 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8946666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9053333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9159999999999999 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9266666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9373333333333334 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.948 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9586666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9693333333333334 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.98 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9906666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0013333333333334 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.012 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0226666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0333333333333332 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.044 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0546666666666666 + ], + "rate": 2, + "at": 0.5226666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0653333333333332 + ], + "rate": 2, + "at": 0.5226666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.076 + ], + "rate": 2, + "at": 0.5253333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0866666666666667 + ], + "rate": 2, + "at": 0.5253333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0973333333333333 + ], + "rate": 2, + "at": 0.528 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1079999999999999 + ], + "rate": 2, + "at": 0.528 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1186666666666667 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1293333333333333 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.14 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1506666666666667 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1613333333333333 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.172 + ], + "rate": 2, + "at": 0.5306666666666666 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1826666666666665 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1933333333333334 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.204 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2146666666666666 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2253333333333334 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.236 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2466666666666666 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2573333333333334 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.268 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2786666666666666 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2893333333333332 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3106666666666666 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3213333333333332 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.332 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3426666666666667 + ], + "rate": 2, + "at": 0.6906666666666667 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:seeking", + "video:waiting", + "video:seeked", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "no-track", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 1.1306666666666667, + "rate": 2, + "anchor": 0.3893333333333333, + "elapsed": 0.3706666666666667, + "nodeRates": [], + "hasSink": false, + "samples": [], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "playback", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 1.208, + "rate": 2, + "anchor": 0.42933333333333334, + "elapsed": 0.3893333333333333, + "nodeRates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "hasSink": true, + "samples": [], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.13066666666666665, + 0.01866666666666665 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.13333333333333333 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.15466666666666667 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.176 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.19733333333333333 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.21866666666666668 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.24 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.26133333333333336 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2826666666666667 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.304 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.32533333333333336 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3466666666666667 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.368 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3893333333333333 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4106666666666667 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.432 + ], + "rate": 1, + "at": 0.13066666666666665 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4533333333333333 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4746666666666667 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.496 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5173333333333333 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5386666666666667 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.56 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5813333333333334 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6026666666666667 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.624 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6453333333333333 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6666666666666666 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.688 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7093333333333334 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7306666666666667 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.752 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7733333333333333 + ], + "rate": 1, + "at": 0.152 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7946666666666666 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.816 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8373333333333334 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8586666666666667 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.88 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9013333333333333 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9226666666666666 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.944 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9653333333333334 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9866666666666667 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.008 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0293333333333334 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0506666666666666 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.072 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0933333333333333 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1146666666666667 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1360000000000001 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1573333333333333 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1786666666666668 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2000000000000002 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2213333333333334 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2426666666666668 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.264 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2853333333333334 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3066666666666669 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.328 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3493333333333335 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3706666666666667 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3920000000000001 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4133333333333333 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4346666666666668 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4560000000000002 + ], + "rate": 1, + "at": 0.16 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4773333333333334 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4986666666666668 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.52 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5413333333333334 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5626666666666669 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.584 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6053333333333335 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6266666666666667 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6480000000000001 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6693333333333333 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6906666666666668 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7120000000000002 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7333333333333334 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7546666666666668 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.776 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7973333333333334 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.632, + 0.002666666666666817 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6413333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6519999999999999 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6626666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6733333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6839999999999999 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6946666666666665 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7053333333333334 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.716 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7266666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7373333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.748 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7586666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7693333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.78 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7906666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8013333333333332 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8119999999999999 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8226666666666667 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8333333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.844 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8546666666666667 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8653333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8759999999999999 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8866666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8973333333333333 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9079999999999999 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9186666666666666 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9293333333333332 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.94 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9506666666666667 + ], + "rate": 2, + "at": 0.632 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9613333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.972 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9826666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9933333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.004 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0146666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0253333333333332 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.036 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0466666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0573333333333332 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.068 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0786666666666667 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0893333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1106666666666665 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1213333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1320000000000001 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1426666666666665 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1533333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.164 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1746666666666665 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1853333333333333 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.196 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2066666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2173333333333334 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.228 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2386666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2493333333333334 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.26 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2706666666666666 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2813333333333334 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2919999999999998 + ], + "rate": 2, + "at": 0.64 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3026666666666666 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3133333333333332 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3239999999999998 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3346666666666667 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3453333333333333 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3559999999999999 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3666666666666667 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3773333333333333 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.388 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3986666666666667 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.409333333333333 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.42 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4306666666666668 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4413333333333331 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.452 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4626666666666668 + ], + "rate": 2, + "at": 0.84 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4733333333333332 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.484 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4946666666666668 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5053333333333332 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.516 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5266666666666668 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5373333333333332 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.548 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5586666666666664 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5693333333333332 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.58 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5906666666666665 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6013333333333333 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.612 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6226666666666665 + ], + "rate": 2, + "at": 1 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6333333333333333 + ], + "rate": 2, + "at": 1 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:waiting", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-pause", + "outcome": "native-audio-ownership-observed", + "result": { + "obsoleteScheduled": false, + "rates": [], + "queued": 0, + "paused": true + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-rate", + "outcome": "native-audio-ownership-observed", + "result": { + "obsoleteScheduled": false, + "rates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "queued": 50, + "paused": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5013333333333333, + 0.008000000000000007 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.508 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5186666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5293333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.54 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5506666666666666 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5613333333333334 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.572 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5826666666666667 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5933333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.604 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6146666666666667 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6253333333333333 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.636 + ], + "rate": 2, + "at": 0.5013333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6466666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6573333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6679999999999999 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6786666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6893333333333334 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7106666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7213333333333334 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.732 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7426666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7533333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.764 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7746666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7853333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.796 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8066666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8173333333333332 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8280000000000001 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8386666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8493333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.86 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8706666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8813333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.892 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9026666666666667 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9133333333333333 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9239999999999999 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9346666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9453333333333334 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.956 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9666666666666666 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9773333333333334 + ], + "rate": 2, + "at": 0.512 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.988 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9986666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0093333333333334 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.02 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0306666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0413333333333332 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.052 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0626666666666666 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0733333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.084 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0946666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1053333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1159999999999999 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1266666666666667 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1373333333333333 + ], + "rate": 2, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.148 + ], + "rate": 2, + "at": 0.52 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:ratechange", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-pause", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": true + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-source", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:pause", + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-destroy", + "outcome": "native-audio-ownership-observed", + "result": { + "paused": true, + "queued": 0, + "created": 0, + "iterator": false, + "audioSink": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "destroy", + "video:pause", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "av-clock", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 2.216, + "rate": 2, + "anchor": 1.432, + "elapsed": 0.392, + "nodeRates": [ + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2, + 2 + ], + "hasSink": true, + "samples": [ + { + "frame": 1, + "audio": 1, + "rate": 1, + "paused": true + }, + { + "frame": 1.0416666666666667, + "audio": 1.0506666666666666, + "rate": 1, + "paused": false + }, + { + "frame": 1.0833333333333333, + "audio": 1.1013333333333333, + "rate": 1, + "paused": false + }, + { + "frame": 1.125, + "audio": 1.1306666666666667, + "rate": 1, + "paused": false + }, + { + "frame": 1.1666666666666667, + "audio": 1.1706666666666667, + "rate": 1, + "paused": false + }, + { + "frame": 1.2083333333333333, + "audio": 1.2213333333333334, + "rate": 1, + "paused": false + }, + { + "frame": 1.25, + "audio": 1.2506666666666666, + "rate": 1, + "paused": false + }, + { + "frame": 1.2916666666666667, + "audio": 1.3013333333333335, + "rate": 1, + "paused": false + }, + { + "frame": 1.3333333333333333, + "audio": 1.3519999999999999, + "rate": 1, + "paused": false + }, + { + "frame": 1.375, + "audio": 1.3813333333333333, + "rate": 1, + "paused": false + }, + { + "frame": 1.4166666666666667, + "audio": 1.4213333333333333, + "rate": 1, + "paused": false + }, + { + "frame": 1.4583333333333333, + "audio": 1.4959999999999998, + "rate": 2, + "paused": false + }, + { + "frame": 1.5, + "audio": 1.5333333333333332, + "rate": 2, + "paused": false + }, + { + "frame": 1.5416666666666667, + "audio": 1.5546666666666664, + "rate": 2, + "paused": false + }, + { + "frame": 1.5833333333333333, + "audio": 1.5919999999999999, + "rate": 2, + "paused": false + }, + { + "frame": 1.625, + "audio": 1.6346666666666665, + "rate": 2, + "paused": false + }, + { + "frame": 1.6666666666666667, + "audio": 1.6933333333333331, + "rate": 2, + "paused": false + }, + { + "frame": 1.7083333333333333, + "audio": 1.7359999999999998, + "rate": 2, + "paused": false + }, + { + "frame": 1.75, + "audio": 1.7519999999999998, + "rate": 2, + "paused": false + }, + { + "frame": 1.7916666666666667, + "audio": 1.7946666666666664, + "rate": 2, + "paused": false + }, + { + "frame": 1.8333333333333333, + "audio": 1.8533333333333333, + "rate": 2, + "paused": false + }, + { + "frame": 1.875, + "audio": 1.896, + "rate": 2, + "paused": false + }, + { + "frame": 1.9166666666666667, + "audio": 1.9333333333333331, + "rate": 2, + "paused": false + }, + { + "frame": 1.9583333333333333, + "audio": 1.9919999999999998, + "rate": 2, + "paused": false + }, + { + "frame": 2, + "audio": 2.0346666666666664, + "rate": 2, + "paused": false + }, + { + "frame": 2.0416666666666665, + "audio": 2.056, + "rate": 2, + "paused": false + }, + { + "frame": 2.0833333333333335, + "audio": 2.093333333333333, + "rate": 2, + "paused": false + }, + { + "frame": 2.125, + "audio": 2.136, + "rate": 2, + "paused": false + }, + { + "frame": 2.1666666666666665, + "audio": 2.1946666666666665, + "rate": 2, + "paused": false + } + ], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [ + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.192, + 0.00799999999999998 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.20533333333333323 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.22666666666666666 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.24800000000000008 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.2693333333333333 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.29066666666666674 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.31199999999999994 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.33333333333333337 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3546666666666668 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.376 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.3973333333333334 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.41866666666666663 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.44000000000000006 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.46133333333333326 + ], + "rate": 1, + "at": 0.192 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.4826666666666667 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5040000000000001 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5253333333333333 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5466666666666667 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.568 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.5893333333333334 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6106666666666668 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.632 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6533333333333334 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6746666666666666 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.6960000000000001 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7173333333333333 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7386666666666667 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7600000000000001 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7813333333333333 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8026666666666668 + ], + "rate": 1, + "at": 0.2 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.824 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8453333333333334 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8666666666666668 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.888 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9093333333333334 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9306666666666666 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9520000000000001 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9733333333333333 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9946666666666667 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.016 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0373333333333332 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0586666666666666 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0799999999999998 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1013333333333333 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1226666666666665 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.144 + ], + "rate": 1, + "at": 0.21066666666666667 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.165333333333333 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1866666666666668 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.208 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2293333333333332 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2506666666666664 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.272 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2933333333333332 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3146666666666664 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.336 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3573333333333333 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3786666666666665 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4000000000000001 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4213333333333333 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4426666666666665 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4639999999999997 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4853333333333334 + ], + "rate": 1, + "at": 0.22133333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5066666666666666 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5279999999999998 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5493333333333335 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5706666666666667 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5919999999999999 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.613333333333333 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6346666666666667 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.656 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6773333333333331 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6986666666666668 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.72 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7413333333333332 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.7626666666666664 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.784 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.8053333333333332 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.8266666666666664 + ], + "rate": 1, + "at": 0.52 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7013333333333334, + 0.002666666666666595 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7106666666666668 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7213333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7320000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7426666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7533333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7640000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7746666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.7853333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.796 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8066666666666668 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8173333333333335 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8280000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8386666666666668 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8493333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8600000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8706666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8813333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.8920000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9026666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9133333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.924 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9346666666666668 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9453333333333334 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9560000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9666666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9773333333333335 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9880000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 0.9986666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0093333333333332 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.02 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0306666666666668 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0413333333333332 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.052 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 0, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0626666666666669 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.0733333333333333 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.084 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.094666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1053333333333333 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.116 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.126666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1373333333333333 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1480000000000001 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.158666666666667 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1693333333333333 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1800000000000002 + ], + "rate": 2, + "at": 0.7013333333333334 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.1906666666666665 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2013333333333334 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2120000000000002 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2226666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2333333333333334 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2440000000000002 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2546666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2653333333333334 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2760000000000002 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2866666666666666 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.2973333333333334 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3080000000000003 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3186666666666667 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3293333333333335 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3399999999999999 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3506666666666667 + ], + "rate": 2, + "at": 0.712 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3613333333333335 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3719999999999999 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3826666666666667 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.3933333333333335 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.404 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4146666666666667 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4253333333333336 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.436 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4466666666666668 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4573333333333336 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.468 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4786666666666668 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.4893333333333336 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5106666666666668 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5213333333333332 + ], + "rate": 2, + "at": 0.8613333333333333 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.532 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5426666666666669 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5533333333333332 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.564 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5746666666666669 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.5853333333333333 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.596 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.606666666666667 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6173333333333333 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6280000000000001 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.638666666666667 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6493333333333333 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6600000000000001 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.670666666666667 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6813333333333333 + ], + "rate": 2, + "at": 1.072 + } + ] + }, + { + "stops": 1, + "disconnects": 1, + "starts": [ + { + "args": [ + 1.6920000000000002 + ], + "rate": 2, + "at": 1.072 + } + ] + } + ], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:seeking", + "video:waiting", + "video:seeked", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "no-track", + "outcome": "native-audio-ownership-observed", + "result": { + "clock": 1.1386666666666665, + "rate": 2, + "anchor": 0.3813333333333333, + "elapsed": 0.3786666666666666, + "nodeRates": [], + "hasSink": false, + "samples": [], + "pause": false + }, + "state": { + "context": "closed", + "nodes": [], + "error": null, + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:volumechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "video:pause", + "video:volumechange", + "video:volumechange", + "video:volumechange", + "video:ratechange", + "video:play", + "video:playing", + "video:timeupdate", + "video:timeupdate", + "destroy", + "video:pause" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "playback", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-pause", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "buffer-rate", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-pause", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-source", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "resume-destroy", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "av-clock", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "no-track", + "outcome": "unsupported-capability-control", + "state": { + "nodes": [], + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "video:volumechange", + "destroy" + ] + }, + "scope": "Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "webm", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "blob", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "stream", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": true + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "audio", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "hls", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "trackless", + "outcome": "trackless-rejected-before-decoder-setup", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "webm", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "blob", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "stream", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": true + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "audio", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "hls", + "outcome": "native-input-playback-and-seek", + "cleanup": { + "audioContext": "closed", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "trackless", + "outcome": "trackless-rejected-before-decoder-setup", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "webm", + "outcome": "unsupported-capability-control", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "blob", + "outcome": "unsupported-capability-control", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "stream", + "outcome": "unsupported-capability-control", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": true + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "audio", + "outcome": "unsupported-capability-control", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "hls", + "outcome": "unsupported-capability-control", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "input": "trackless", + "outcome": "trackless-rejected-before-decoder-setup", + "cleanup": { + "audioContext": "not-created", + "pendingFrames": 0, + "streamCancelled": false + }, + "scope": "Identified proxy with native browser media and controlled ArtPlayer host using actual core utilities/config; frame timestamps sampled against the SDK audio clock, not acoustic/long-run AV-sync acceptance. Cleanup checks settled playback, not pending-operation races. Candidate trackless rejection is checked separately before decoder setup; this is not full release acceptance." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "destroy", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "source", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "timeout", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "destroy", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "source", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "timeout", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "destroy", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "source", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "ending": "timeout", + "outcome": "native-pending-stream-cancellation", + "scope": "Real browser ReadableStream and actual SDK Input disposal before first media bytes; real timeout; controlled ArtPlayer host; does not assert decoder, late frame or audio-node cleanup." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "callback", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "first", + "time": "number", + "mediaTime": 0, + "presentedFrames": 0 + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "destroy", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "independent", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "second" + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "callback", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "first", + "time": "number", + "mediaTime": 0, + "presentedFrames": 0 + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "destroy", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "independent", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "second" + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "callback", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "first", + "time": "number", + "mediaTime": 0, + "presentedFrames": 0 + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "destroy", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "independent", + "outcome": "native-synthetic-raf", + "result": { + "idType": "number", + "calls": [ + { + "owner": "second" + } + ], + "listeners": 0 + }, + "scope": "Real browser requestAnimationFrame and actual proxy instances; synthetic metadata is preserved, no decoding or video frame accuracy is claimed." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "pause-frame", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "paused": true, + "frames": 0 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:pause", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-source", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "heldReads": 1, + "currentIteratorKept": true, + "frames": 0, + "time": 0, + "error": null + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-newer", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "heldReads": 1, + "currentIteratorKept": true, + "frames": 0, + "time": 5, + "error": null + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeked", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "timeupdate-pause", + "outcome": "native-decoded-video-race", + "result": { + "paused": true, + "frames": 0 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:play", + "video:playing", + "video:timeupdate", + "video:pause", + "destroy" + ], + "draws": 1, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-pool", + "outcome": "native-decoded-video-race", + "result": { + "before": 1220654181, + "after": 1220654181, + "timestamp": 5.041666666666667, + "currentFrameUnchanged": true, + "time": 5 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeked", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "pause-frame", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "paused": true, + "frames": 0 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:play", + "video:playing", + "video:timeupdate", + "video:waiting", + "video:timeupdate", + "video:pause", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-source", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "heldReads": 1, + "currentIteratorKept": true, + "frames": 0, + "time": 0, + "error": null + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-newer", + "outcome": "native-decoded-video-race", + "result": { + "before": 2, + "after": 2, + "heldReads": 1, + "currentIteratorKept": true, + "frames": 0, + "time": 5, + "error": null + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeked", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "timeupdate-pause", + "outcome": "native-decoded-video-race", + "result": { + "paused": true, + "frames": 0 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:play", + "video:playing", + "video:timeupdate", + "video:pause", + "destroy" + ], + "draws": 1, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-pool", + "outcome": "native-decoded-video-race", + "result": { + "before": 1220654181, + "after": 1220654181, + "timestamp": 5.041666666666667, + "currentFrameUnchanged": true, + "time": 5 + }, + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:loadedmetadata", + "video:durationchange", + "video:progress", + "video:loadeddata", + "video:canplay", + "video:canplaythrough", + "video:progress", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeking", + "video:waiting", + "video:seeked", + "destroy" + ], + "draws": 2, + "error": null, + "audioContext": "closed", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "pause-frame", + "outcome": "unsupported-capability-control", + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "destroy" + ], + "draws": 0, + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "audioContext": "not-created", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-source", + "outcome": "unsupported-capability-control", + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "destroy" + ], + "draws": 0, + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "audioContext": "not-created", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-newer", + "outcome": "unsupported-capability-control", + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "destroy" + ], + "draws": 0, + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "audioContext": "not-created", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "timeupdate-pause", + "outcome": "unsupported-capability-control", + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "destroy" + ], + "draws": 0, + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "audioContext": "not-created", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "scenario": "seek-pool", + "outcome": "unsupported-capability-control", + "state": { + "events": [ + "video:waiting", + "video:loadstart", + "video:error", + "destroy" + ], + "draws": 0, + "error": { + "code": 4, + "message": "undefined is not a constructor (evaluating 'new t')" + }, + "audioContext": "not-created", + "frames": 0 + }, + "scope": "Actual SDK MP4 decoding and browser clock/RAF; frame delivery or two raw VideoSample deliveries before CanvasSink conversion control interleaving. Source/seek ownership, pause and timeupdate reentry verified; not long-run AV sync or a mock codec." + }, + { + "project": "chromium", + "browser": "153.0.8010.12", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "outcome": "native-mp4-playback-observed", + "scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance." + }, + { + "project": "firefox", + "browser": "155.0", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "outcome": "native-mp4-playback-observed", + "scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance." + }, + { + "project": "webkit", + "browser": "26.6", + "platform": "win32", + "implementation": "candidate-artifact", + "sha256": "c80fd9015dd5d9c338ea780948dcb82f97a32f8395de20e19daf5cc65f05eb57", + "outcome": "verified-unsupported-capability-control", + "scope": "Identified published or candidate proxy with actual core5.4.0; native MP4 pixels/clock or explicitly unsupported Windows WebKit APIs. No HLS or long-run AV-sync acceptance." + } + ], + "report": "refactor/.cache/mb06-audio-results/report.json", + "reportSha256": "ca75125180e4c27ba8937ff608bac7a372217907a228af73e0fbc2a5e475d7dd", + "results": "refactor/.cache/mb06-audio-results/results", + "sameNativeAssertionsOnPreviousMain": { + "total": 24, + "passed": 20, + "failed": 4, + "failedScope": "Native audio and HLS pause cleanup in Chromium/Firefox retains node connections/callbacks. Other old scenarios are passing regression controls; eight Windows WebKit cases are capability controls.", + "report": "refactor/.cache/mb06-audio-frozen-results/report.json", + "reportSha256": "d43d824f638ede5c7c0f78c581382f6d2cc245df6a8305b2b56e6831d7de4588", + "results": "refactor/.cache/mb06-audio-frozen-results/results" + }, + "shortAvObservations": [ + { + "browser": "chromium", + "samples": 27, + "maxAbsoluteFrameClockSkewMilliseconds": 39.33333333333344, + "scope": "Short decoded-frame timestamp versus Web Audio clock only; not acoustic or long-run drift." + }, + { + "browser": "firefox", + "samples": 28, + "maxAbsoluteFrameClockSkewMilliseconds": 37.666666666666515, + "scope": "Short decoded-frame timestamp versus Web Audio clock only; not acoustic or long-run drift." + } + ] + }, + "checks": [ + { + "command": "yarn test:mediabunny", + "result": "pass", + "tests": 183 + }, + { + "command": "main/legacy audio, video, coordinator, shim, load and input tests", + "result": "pass", + "eachRun": 159 + }, + { + "command": "same audio assertions on frozen main", + "result": "expected historical failures", + "passed": 8, + "failed": 29 + }, + { + "command": "package strict tsc and focused eslint", + "result": "pass", + "productionTypeScriptModules": 26, + "temporaryDeclarationBridges": 0 + }, + { + "command": "three format build, ESM factory and docs/dist parity", + "result": "pass" + }, + { + "command": "six browser specs on final built main", + "result": "pass", + "tests": 78 + }, + { + "command": "yarn ci:check", + "result": "pass", + "tests": { + "unit": 1189, + "engineering": 14, + "baseline": 141, + "mainTotal": 1344, + "repeatedContractExecutions": 44 + }, + "strictProductionTypeScriptFiles": 316, + "log": "refactor/.cache/mb06-audio-ci.log" + } + ], + "iterations": [ + "First 20 old audio assertions: 3 pass/17 fail; expanded final 37: 8 pass/29 fail.", + "Initial expanded old test had one timeout from an unreleased controlled read in its fixture. Finally releases that read; final baseline has zero cancellations.", + "First candidate 24 native audio cases passed. Full first 78-case report preserved in mb06-audio-pre-final-results.", + "Final audio-task uses removable cancellation callbacks per completed read, avoiding cumulative Promise.race reactions. Final artifacts rebuilt and corresponding checks rerun.", + "Windows cpy overwrite UNKNOWN on existing generated legacy copy; exact target backed up and removed, normal build regenerated all formats. Failure log and backup preserved." + ], + "limitations": [ + "Short decoded-frame/audio-clock observations at 1x/2x within 250ms are not acoustic output, long-run drift or device acceptance; MB-09 remains.", + "Nineteen Windows WebKit capability controls are not playback and make no general Safari claim.", + "Native resume completion and decoded-buffer delivery are deliberately delayed to exercise lifecycle interleavings.", + "Existing undecodable-track fallback and readiness need MB-CAP-01/MB-READY-01 review.", + "HLS UI topology and concurrent selection remain MB-07; index/factory migration remains MB-08.", + "SDK iterator return is invoked and observed without blocking new work on obsolete reads; underlying decoder completion belongs to the SDK.", + "Installed package/demo and MPL/source-notice gates remain MB-10. No npm release acceptance is implied." + ] +} diff --git a/refactor/changes/2026-09-12-PKG-MB-06-audio.md b/refactor/changes/2026-09-12-PKG-MB-06-audio.md new file mode 100644 index 000000000..40f1fbc42 --- /dev/null +++ b/refactor/changes/2026-09-12-PKG-MB-06-audio.md @@ -0,0 +1,72 @@ +# PKG-MB-06:音频解码、时钟与资源归属 + +任务通过完整CI后标记done,并立即以专用本地提交交付。来源是9d037dcbf913fef2d2a9eb4f3924d6abf3ab5597, +冻结旧AudioEngine、协调器、playback和main的LF哈希见[源码基线](../baselines/mb-audio-source.json)。 +候选文件、测试、产物和浏览器报告见[验证记录](../baselines/mb-audio-validation.json)。 + +## 实现与拆分 + +实际删除AudioEngine.js及临时AudioEngine.d.ts,迁移到AudioEngine.ts;拆出audio-clock、 +audio-context、audio-nodes、audio-pump、audio-task五个模块,分别管理时钟计算、 +Context/Gain、源节点、SDK迭代器/背压、取消等待/计时器。模块地图和维护命令同步到 +包内ARCHITECTURE.md。包内26个生产TS模块,没有遗留JS声明桥;index.js和m3u8.js +分别由MB-08/07接续,不能据此声称整个包已经完成TS化。 + +source、play和pump分别拥有取消状态。暂停会取消尚未完成的resume;新source在解析轨道 +之前就使旧音频操作失效。迟到的canDecode、resume、next不能重建context、写入sink、 +发出旧playing或排队旧节点。迭代器同步脱离引用、return只调用一次且观察拒绝。 +每批16buffer、0ms让出及1秒/50ms背压参数保留,任务释放包含ID零的计时器。 +复查新实现时消除了对单个长期未决Promise反复race的设计:每次读取完成就移除取消回调, +避免正常长播放累积已完成读取的等待监听。这是源码审查改进,不声称已做长时间堆内存验收。 + +节点在start前即登记归属,自然ended也断开连接并清除回调;暂停、seek、倍速与destroy +停止/断开旧队列。一个节点失败仍尝试其余节点及Context/Gain清理,保留首个失败。 +后台解码失败先停止播放并报告一次MediaError;清理失败不会替换解码原始错误。 +Context/Gain设置成功后才安装引用;失败释放部分资源,销毁清空引用并观察close拒绝。 +真正异步的AudioContext.close通过浏览器状态轮询验证,不以固定两帧声称关闭完成。 + +## 兼容边界与修复行为 + +公开factory、canvas转发、声明、默认选项、三种分发入口及MediaBunny 1.56.1依赖保持原有契约。 +时钟仍按锚点和倍速计算,volume仍用平方增益,mute为零;暂停冻结位置,seek/rate更新锚点。 +无音轨但有视频仍使用Web Audio时钟,完全无轨道容器继续MB-04的明确拒绝行为。 +已完全过期的buffer不再创建无效节点,部分迟到buffer保留原offset计算。视频结束会停止 +音频时钟和余留节点,倍速切换会停止旧速节点。仍使用原生source.playbackRate,未引入保调算法。 + +原先playback层缓存整个audio.play Promise;如今音频play可在取消时提前完成,该缓存不再 +能代表底层resume状态,因此去重下移到ContextOwner。协调器新意图各调用audio.play, +实际原生resume仍共享一次。受控协调器测试的audio.play调用数由1改为2,新增实际AudioEngine +测试验证play→pause→play的原生resume次数仍为1,只有当前意图启动视频。 +这项变化是内部归属修正,不能把stub调用数变化隐瞒为原样不变的测试。 + +## 验证与证据边界 + +- 37项新增音频断言:最终候选全部通过;同一断言对旧main为8通过/29失败,无取消或跳过。 + 首轮旧测试的一项等待夹具超时已归档;修正夹具在finally释放受控读后,最终旧基线没有超时。 +- 包专项183通过,main/legacy各159通过;每个产物命令含155候选断言及4个冻结正常事件对照。 +- 新增24项浏览器:Chromium/Firefox各8项实际Web Audio/SDK解码场景,Windows WebKit + 8项精确能力缺失对照。包括暂停恢复、1×/2×、增益/静音、无音轨时钟、迟到buffer与resume、 + seek后的HLS音画时钟取样。短时实际绘制帧与音频时钟偏差上限为250ms,报告保存原始样本; + 这不是听觉输出、长时间漂移、物理设备或所有Safari安装的验收。 +- 同24项对旧main:20通过/4失败;失败是Chromium/Firefox音频与HLS暂停后节点/回调 + 仍保留的状态断言,不是加载超时。其他旧浏览器场景通过属于回归对照,不能算作复现缺陷。 +- 最终构建main运行全部六个MediaBunny浏览器文件,共78项:包含既有视频竞态、输入、 + Stream取消及synthetic RAF。报告与整个results目录在下一次运行前归档。 +- 严格TS、lint、三格式构建、ESM默认factory和dist/docs逐字节一致性独立核验。 +- 本项不增加依赖;根test:unit与test:mediabunny加入音频测试,使完整CI持续执行。 + +最终完整CI1344项(1189单元+14工程+141基线)通过,另44重复契约;316生产TS。 +最终78浏览器报告中,Chromium 27个播放帧取样最大偏差39.34ms,Firefox 28个取样最大 +偏差37.67ms。所有源码/测试/产物及报告哈希已复核,dist与docs/compiled三个格式一致。 + +## 环境问题与后续 + +一次Windows copyfile UNKNOWN发生在构建复制既有legacy生成文件时。保留失败日志和旧生成文件, +核对唯一绝对路径后删除该生成目标,再由正常yarn build重建;未手改生成内容或停止用户进程。 +首轮78浏览器报告也保留,因为取消等待实现随后改进,最终产物重新构建并重跑对应验证。 + +MB-LIFE-01仍open:音视频各自的取消与短时组合已覆盖,HLS UI拓扑/并发选择、长播放/AV同步、 +codec能力矩阵和全核心/插件组合仍由MB-07/08/09及能力风险条目处理。MB-10承担真实安装包、 +demo与MPL/source通知;本项通过不是npm发布许可或发布验收。 + +回退通过revert本项专用提交,冻结旧实现保持可追溯。下一步MB-07整理m3u8.ts选择与拓扑清理。 diff --git a/refactor/mb-validation.md b/refactor/mb-validation.md index ef28d28fb..dcc5661f1 100644 --- a/refactor/mb-validation.md +++ b/refactor/mb-validation.md @@ -61,3 +61,13 @@ VideoEngine与迭代器/渲染/海报职责已实际迁移TS,删除视频声 执行yarn test:mediabunny及新增mediabunny-video.spec.js,按实际报告区分普通播放、 真实帧竞态、能力对照和synthetic RAF。[变更](changes/2026-09-12-PKG-MB-05-video.md)与 [验证](baselines/mb-video-validation.json)记录38个新断言、旧产物复现及真实解码场景。 + +## PKG-MB-06 音频归属与时钟 + +实际AudioEngine迁移并拆为六个TS模块,包内26生产TS,无JS声明桥;m3u8/index由07/08接续。 +[变更](changes/2026-09-12-PKG-MB-06-audio.md)记录文件地图、resume归属下移、兼容边界和回退, +[证据](baselines/mb-audio-validation.json)记录旧main 37断言8通过/29失败、候选专项183及 +main/legacy各159通过。最终78浏览器含16新增原生音频场景及8新增WebKit能力对照。 +同24音频浏览器断言对旧main20通过/4失败,失败为实际暂停后的节点清理;其余为回归对照。 +短时1×/2×帧/音频时钟偏差验证不替代长播放、听觉及设备验收;全部报告/results已归档。 +完整CI1344项及另44重复契约通过,316生产TS;完成后立即专用提交,MB-LIFE-01剩余范围仍open。 diff --git a/refactor/plan.md b/refactor/plan.md index 15eeb99e0..46cc18042 100644 --- a/refactor/plan.md +++ b/refactor/plan.md @@ -4,7 +4,7 @@ 基线:`40fcda6a37d0049d42e49c1e64e70d4fd9ba5f7f`。总任务 222 项,范围 22 个包及工作区/示例。 -状态:todo 113 / doing 7 / blocked 0 / done 102 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 +状态:todo 112 / doing 7 / blocked 0 / done 103 / deferred 0。风险 L/M/H 表示兼容风险,不表示工期。 前置依赖是启动条件;验收是完成条件。任务可以继续拆分,但不能复用或悄悄删除旧 ID。 @@ -334,7 +334,7 @@ | PKG-MB-03 | artplayer-proxy-mediabunny
整理 input 与加载取消 | PKG-MB-02, CORE-09 | input.js 源检测、输入资源、Range 与取消 | HLS 检测在 input 边界,旧来源类型和超时保持 | H | done | | PKG-MB-04 | artplayer-proxy-mediabunny
整理 VideoShim/EventTarget/Engine 协调 | PKG-MB-03, CORE-06, CORE-11 | shim 描述符、事件桥、加载状态和操作隔离 | 公开属性/同步异步返回与事件重入顺序保持 | H | done | | PKG-MB-05 | artplayer-proxy-mediabunny
整理视频解码、seek 和帧释放 | PKG-MB-04 | VideoEngine 调度、队列、晚帧处理和资源释放 | 暂停/seek/切源无旧帧覆盖,默认丢帧策略不变 | H | done | -| PKG-MB-06 | artplayer-proxy-mediabunny
整理音频解码、时钟与同步 | PKG-MB-04 | AudioEngine 时钟、缓冲和 AudioContext 归属 | AV sync、倍速、无音轨、静音/音量和暂停恢复通过 | H | todo | +| PKG-MB-06 | artplayer-proxy-mediabunny
整理音频解码、时钟与同步 | PKG-MB-04 | AudioEngine 时钟、缓冲和 AudioContext 归属 | AV sync、倍速、无音轨、静音/音量和暂停恢复通过 | H | done | | PKG-MB-07 | artplayer-proxy-mediabunny
整理 HLS 配对轨道与 selector | PKG-MB-05, PKG-MB-06, CORE-14 | m3u8 配对、质量/音频选择及拓扑清理 | 实际选择高亮、切到无轨道来源清理、无重复 readiness | H | todo | | PKG-MB-08 | artplayer-proxy-mediabunny
完成 TS 与媒体能力声明 | PKG-MB-07, ENG-04, ENG-06 | 8 个自有 JS 模块迁移与 Result/shim 类型 | 解码器/Stream/DOM 类型清楚,旧 Option 和 art.mediabunny 使用保持 | H | todo | | PKG-MB-09 | artplayer-proxy-mediabunny
完成新旧核心和真实媒体组合 | PKG-MB-08, CORE-22 | 跨浏览器能力、长播放、DPiP、HLS 音轨/质量报告 | 资源释放、事件顺序、AV sync 与支持范围满足基线 | H | todo | @@ -525,4 +525,5 @@ - PKG-MB-03: [记录](changes/2026-09-12-PKG-MB-03-input.md) [记录](baselines/mb-input-validation.json) - PKG-MB-04: [记录](baselines/mb-coordination-source.json) [记录](changes/2026-09-12-PKG-MB-04-shim-checkpoint.md) [记录](baselines/mb-shim-checkpoint.json) [记录](changes/2026-09-12-PKG-MB-04-coordination.md) [记录](baselines/mb-coordination-validation.json) - PKG-MB-05: [记录](baselines/mb-video-source.json) [记录](changes/2026-09-12-PKG-MB-05-video.md) [记录](baselines/mb-video-validation.json) +- PKG-MB-06: [记录](baselines/mb-audio-source.json) [记录](changes/2026-09-12-PKG-MB-06-audio.md) [记录](baselines/mb-audio-validation.json) - PKG-FACTORY-01: [记录](baselines/factory-assignment-gaps.json) [记录](baselines/factory-compatibility-proposals.json) [记录](factory-compatibility-decision.md) [记录](changes/2026-09-12-PKG-FACTORY-01-decision.md) diff --git a/refactor/progress.md b/refactor/progress.md index e85f4ec28..e70d421c0 100644 --- a/refactor/progress.md +++ b/refactor/progress.md @@ -1,5 +1,18 @@ # 进度与证据 +## PKG-MB-06完成:音频解码、时钟与资源归属 + +AudioEngine实际迁移TS,拆清clock、context、nodes、pump、task职责,删除最后音频声明桥。 +暂停/切源/销毁取消迟到resume和buffer,seek/rate释放旧速节点;时钟、增益与无音轨回退 +保持契约,播放协调器的原生resume去重下移到context owner。包内26生产TS,剩m3u8/index +由07/08接续。37音频断言旧main8通过/29失败,候选专项183、main/legacy各159通过。 +最终78浏览器通过:含16新增原生音频场景及8新增能力对照;旧main同24音频浏览器 +20通过/4节点清理失败。短时1×/2×音画取样最大偏差约39/38ms,长播/听觉/设备仍MB-09。 +完整CI1344项通过,另44重复契约;316生产TS。源码/产物/报告哈希及三格式复制一致。 +见[变更](changes/2026-09-12-PKG-MB-06-audio.md)与[证据](baselines/mb-audio-validation.json)。 +222项:103 done、7 doing、112 todo;立即专用本地提交,下一项MB-07 HLS UI/拓扑。 +MB-LIFE-01剩余长播放、全组合及HLS UI范围仍open;不构成npm发布验收。 + ## PKG-MB-05完成:视频迭代器、seek、晚帧与RAF VideoEngine实际迁移TS,拆出frame读取/释放、renderer与poster职责,删除视频声明桥。 diff --git a/refactor/risks.json b/refactor/risks.json index 7a9fefb3d..a16ca9792 100644 --- a/refactor/risks.json +++ b/refactor/risks.json @@ -3648,7 +3648,7 @@ "PKG-MB-07", "PKG-MB-09" ], - "compatibleResolution": "Reproduce pending operations and destroy/source-switch races before migrating each owner; preserve public event and promise behavior while preventing stale resource use. MB-02 now reproduces late load rejection and uncancelled waiting/loadstart timers after destroy in all three historical implementations using a controlled host. Other interleavings and full-core native behavior are not yet verified. Expanded MB-02 baseline reproduces play-after-pause/destroy, rejected-play false state, seek-after-destroy and retained successful-load timeout timers in all three actual historical implementations; Range and active-timeout normal controls remain separate. MB-03 candidate owns pending Input before track selection and cancels load/HEAD/timers on source replacement, timeout and destroy; source/main/legacy regressions pass. Pending play/seek, late decoder work and full readiness coordination remain MB-04/05/06, so this risk stays open. MB-04 shim checkpoint fixes synthetic RAF retention and terminal event-listener cleanup, including engine cleanup exceptions. Closing the event bridge does not prove pending engine operations stopped; coordination remains in progress. MB-04 now guards play/seek/replacement completion, preserves explicit pause, observes stale failures and isolates reentrant event sequences. Decoder-internal late frames/audio and HLS UI races remain MB-05/06/07; risk stays open. MB-05 migrates VideoEngine and owns iterators, late first/second seek frames, pending reads, per-instance RAF and poster callbacks; same native race assertions fail on old main and pass on candidate. Independent CanvasSink pools also prevent multiple obsolete seek samples from overwriting queued current-frame pixels. Audio nodes, long-run AV sync and HLS UI topology remain MB-06/07/09.", + "compatibleResolution": "Reproduce pending operations and destroy/source-switch races before migrating each owner; preserve public event and promise behavior while preventing stale resource use. MB-02 now reproduces late load rejection and uncancelled waiting/loadstart timers after destroy in all three historical implementations using a controlled host. Other interleavings and full-core native behavior are not yet verified. Expanded MB-02 baseline reproduces play-after-pause/destroy, rejected-play false state, seek-after-destroy and retained successful-load timeout timers in all three actual historical implementations; Range and active-timeout normal controls remain separate. MB-03 candidate owns pending Input before track selection and cancels load/HEAD/timers on source replacement, timeout and destroy; source/main/legacy regressions pass. Pending play/seek, late decoder work and full readiness coordination remain MB-04/05/06, so this risk stays open. MB-04 shim checkpoint fixes synthetic RAF retention and terminal event-listener cleanup, including engine cleanup exceptions. Closing the event bridge does not prove pending engine operations stopped; coordination remains in progress. MB-04 now guards play/seek/replacement completion, preserves explicit pause, observes stale failures and isolates reentrant event sequences. Decoder-internal late frames/audio and HLS UI races remain MB-05/06/07; risk stays open. MB-05 migrates VideoEngine and owns iterators, late first/second seek frames, pending reads, per-instance RAF and poster callbacks; same native race assertions fail on old main and pass on candidate. Independent CanvasSink pools also prevent multiple obsolete seek samples from overwriting queued current-frame pixels. Audio nodes, long-run AV sync and HLS UI topology remain MB-06/07/09. MB-06 migrates AudioEngine into six checked modules, owns context/gain/nodes/iterators and removable cancellation waits, preserves clock and gain formulas, and invalidates pending resume/decoding across pause/source/destroy. Same old main fails 29 of 37 audio assertions and four native pause-cleanup cases; candidate passes with short native 1x/2x AV-clock samples. Long-run AV sync, full combinations and HLS UI topology remain MB-07/09, so risk stays open.", "closureCriteria": "Historical failing interleavings and candidate cancellation/cleanup pass with real media and event evidence, including long playback and track topology.", "status": "open", "evidence": [ @@ -3664,7 +3664,9 @@ "refactor/changes/2026-09-12-PKG-MB-04-coordination.md", "refactor/baselines/mb-coordination-validation.json", "refactor/changes/2026-09-12-PKG-MB-05-video.md", - "refactor/baselines/mb-video-validation.json" + "refactor/baselines/mb-video-validation.json", + "refactor/changes/2026-09-12-PKG-MB-06-audio.md", + "refactor/baselines/mb-audio-validation.json" ] }, { diff --git a/refactor/tasks.json b/refactor/tasks.json index 824bef580..647c8f1d8 100644 --- a/refactor/tasks.json +++ b/refactor/tasks.json @@ -3502,11 +3502,15 @@ "dependsOn": [ "PKG-MB-04" ], - "status": "todo", + "status": "done", "risk": "H", "deliverable": "AudioEngine 时钟、缓冲和 AudioContext 归属", "acceptance": "AV sync、倍速、无音轨、静音/音量和暂停恢复通过", - "evidence": [] + "evidence": [ + "baselines/mb-audio-source.json", + "changes/2026-09-12-PKG-MB-06-audio.md", + "baselines/mb-audio-validation.json" + ] }, { "id": "PKG-MB-07", diff --git a/test/browser/mediabunny-audio.spec.js b/test/browser/mediabunny-audio.spec.js new file mode 100644 index 000000000..ef7e911cb --- /dev/null +++ b/test/browser/mediabunny-audio.spec.js @@ -0,0 +1,254 @@ +import assert from 'node:assert/strict' +import fs from 'node:fs' +import { hash } from '../../refactor/scripts/releases.mjs' +import { mbCandidate } from '../helpers/mediabunny.js' +import { expect, test } from './fixtures.js' + +const implementation = await mbCandidate() +const manifest = JSON.parse(fs.readFileSync(new URL('./media/hls/manifest.json', import.meta.url))) +const hls = new Map(Object.entries(manifest.files).map(([name, expected]) => { + const bytes = fs.readFileSync(new URL(`./media/hls/${name}`, import.meta.url)) + assert.equal(hash(bytes), expected.sha256) + return [name, bytes] +})) + +for (const scenario of ['playback', 'buffer-pause', 'buffer-rate', 'resume-pause', 'resume-source', 'resume-destroy', 'av-clock', 'no-track']) { + test(`MediaBunny ${implementation.name}: native audio ownership ${scenario}`, async ({ page, browserName }, testInfo) => { + await page.route('**/mb-audio-hls/**', async (route) => { + const name = new URL(route.request().url()).pathname.split('/').at(-1) + const body = hls.get(name) + await route.fulfill({ status: body ? 200 : 404, body: body || 'Missing fixture', contentType: name.endsWith('.m3u8') ? 'application/vnd.apple.mpegurl' : 'video/mp2t' }) + }) + await page.goto('/test/player.html?core=published') + await page.addScriptTag({ content: `(() => { const module = { exports: {} }; const exports = module.exports; + ${implementation.code}; window.mbFactory = module.exports.default || module.exports; })();` }) + const capabilities = await page.evaluate(() => ({ AudioContext: typeof AudioContext, webkitAudioContext: typeof window.webkitAudioContext, AudioDecoder: typeof AudioDecoder, VideoDecoder: typeof VideoDecoder })) + let outcome = 'unverified' + let result + await page.evaluate(async (scenario) => { + const listeners = new Map() + window.mbEvents = [] + window.mbNodes = [] + window.mbClockSamples = [] + window.mbFlush = () => new Promise(resolve => requestAnimationFrame(() => requestAnimationFrame(resolve))) + window.mbHost = { + constructor: window.Artplayer, + option: { url: '', autoSize: false }, + template: { $player: document.querySelector('.player') }, + on(name, fn) { + const list = listeners.get(name) || [] + list.push(fn) + listeners.set(name, list) + }, + emit(name, ...args) { + window.mbEvents.push(name) + for (const fn of listeners.get(name) || []) fn(...args) + }, + } + const canvas = window.mbFactory()(window.mbHost) + window.mbCanvas = canvas + document.querySelector('.player').append(canvas) + await canvas.engine.load(scenario === 'av-clock' ? '/mb-audio-hls/master.m3u8' : scenario === 'no-track' ? '/test/pattern.mp4' : '/test/audio-tone.m4a') + const audio = canvas.engine.audio + const context = audio.audioContext + window.mbContext = context + if (context) { + const create = context.createBufferSource.bind(context) + context.createBufferSource = () => { + const node = create() + const record = { node, stops: 0, disconnects: 0, starts: [] } + const stop = node.stop.bind(node) + const disconnect = node.disconnect.bind(node) + const start = node.start.bind(node) + node.stop = (...args) => { + record.stops++ + return stop(...args) + } + node.disconnect = (...args) => { + record.disconnects++ + return disconnect(...args) + } + node.start = (...args) => { + record.starts.push({ args, rate: node.playbackRate.value, at: context.currentTime }) + return start(...args) + } + window.mbNodes.push(record) + return node + } + } + canvas.muted = true + document.querySelector('#play').onclick = () => { + window.mbPlay = canvas.play() + } + }, scenario) + try { + if (capabilities.AudioContext === 'undefined' && capabilities.webkitAudioContext === 'undefined') { + expect(browserName).toBe('webkit') + expect(capabilities.AudioDecoder).toBe('undefined') + expect(await page.evaluate(() => window.mbCanvas.error?.code)).toBe(4) + expect(await page.evaluate(() => window.mbCanvas.readyState)).toBeLessThan(4) + outcome = 'unsupported-capability-control' + return + } + expect(await page.evaluate(() => window.mbCanvas.error)).toBeNull() + expect(await page.evaluate(() => window.mbCanvas.readyState)).toBe(4) + if (scenario.startsWith('resume-')) { + await page.evaluate(async () => { + const context = window.mbContext + await context.suspend() + const resume = context.resume.bind(context) + context.resume = () => { + const native = resume() + window.mbResumeCalled = true + return native.then(() => new Promise((resolve) => { + window.mbReleaseResume = resolve + })) + } + }) + await page.click('#play') + await expect.poll(() => page.evaluate(() => typeof window.mbReleaseResume)).toBe('function') + result = await page.evaluate(async (scenario) => { + if (scenario === 'resume-pause') + window.mbCanvas.pause() + else if (scenario === 'resume-source') + await window.mbCanvas.engine.load('/test/pattern.mp4') + else window.mbHost.emit('destroy') + window.mbReleaseResume() + await window.mbPlay + await window.mbFlush() + const audio = window.mbCanvas.engine.audio + return { paused: audio.paused, queued: audio.queuedNodes.size, created: window.mbNodes.length, iterator: Boolean(audio.audioIterator), audioSink: Boolean(audio.audioSink) } + }, scenario) + expect(result).toMatchObject({ paused: true, queued: 0, created: 0, iterator: false }) + if (scenario !== 'resume-pause') + expect(result.audioSink).toBe(false) + } + else if (scenario.startsWith('buffer-')) { + await page.evaluate(() => { + const sink = window.mbCanvas.engine.audio.audioSink + const buffers = sink.buffers.bind(sink) + let first = true + sink.buffers = (...args) => { + const iterator = buffers(...args) + const next = iterator.next.bind(iterator) + iterator.next = async (...args) => { + const value = await next(...args) + if (first && !value.done) { + first = false + window.mbHeldBuffer = value.value.buffer + return new Promise((resolve) => { + window.mbReleaseBuffer = () => resolve(value) + }) + } + return value + } + return iterator + } + }) + await page.click('#play') + await expect.poll(() => page.evaluate(() => typeof window.mbReleaseBuffer)).toBe('function') + await page.evaluate((scenario) => { + if (scenario === 'buffer-pause') + window.mbCanvas.pause() + else window.mbCanvas.playbackRate = 2 + window.mbReleaseBuffer() + }, scenario) + if (scenario === 'buffer-rate') + await expect.poll(() => page.evaluate(() => window.mbNodes.length)).toBeGreaterThan(0) + result = await page.evaluate(async () => { + await window.mbFlush() + const audio = window.mbCanvas.engine.audio + return { obsoleteScheduled: window.mbNodes.some(record => record.node.buffer === window.mbHeldBuffer), rates: window.mbNodes.flatMap(record => record.starts.map(start => start.rate)), queued: audio.queuedNodes.size, paused: audio.paused } + }) + expect(result.obsoleteScheduled).toBe(false) + if (scenario === 'buffer-pause') + expect(result).toMatchObject({ queued: 0, paused: true }) + else expect(result.rates.every(rate => rate === 2)).toBe(true) + } + else { + if (scenario === 'av-clock') { + await page.evaluate(async () => { + const video = window.mbCanvas.engine.video + const times = new WeakMap() + const prototype = Object.getPrototypeOf(video.videoSink) + const canvases = prototype.canvases + prototype.canvases = function (...args) { + const iterator = canvases.apply(this, args) + const next = iterator.next.bind(iterator) + iterator.next = async (...values) => { + const result = await next(...values) + if (!result.done) + times.set(result.value.canvas, result.value.timestamp) + return result + } + return iterator + } + const draw = video.ctx.drawImage.bind(video.ctx) + video.ctx.drawImage = (...args) => { + if (times.has(args[0])) + window.mbClockSamples.push({ frame: times.get(args[0]), audio: window.mbCanvas.engine.audio.currentTime, rate: window.mbCanvas.playbackRate, paused: window.mbCanvas.paused }) + return draw(...args) + } + await window.mbCanvas.engine.seek(1) + }) + } + await page.click('#play') + await expect.poll(() => page.evaluate(() => window.mbCanvas.currentTime)).toBeGreaterThan(scenario === 'av-clock' ? 1.3 : 0.3) + if (scenario !== 'no-track') + await expect.poll(() => page.evaluate(() => window.mbCanvas.engine.audio.queuedNodes.size)).toBeGreaterThan(0) + const pause = await page.evaluate(async () => { + window.mbCanvas.pause() + const time = window.mbCanvas.currentTime + await window.mbFlush() + return { time, after: window.mbCanvas.currentTime, queued: window.mbCanvas.engine.audio.queuedNodes.size, retained: window.mbNodes.filter(record => !record.disconnects || record.node.onended !== null).length } + }) + expect(pause.after).toBe(pause.time) + expect(pause).toMatchObject({ queued: 0, retained: 0 }) + await page.evaluate(() => { + window.mbCanvas.volume = 0.5 + window.mbCanvas.muted = false + }) + expect(await page.evaluate(() => window.mbCanvas.engine.audio.gainNode.gain.value)).toBeCloseTo(0.25, 6) + await page.evaluate(() => { + window.mbCanvas.muted = true + window.mbCanvas.playbackRate = 2 + }) + expect(await page.evaluate(() => window.mbCanvas.engine.audio.gainNode.gain.value)).toBe(0) + await page.click('#play') + await expect.poll(() => page.evaluate(() => window.mbCanvas.currentTime)).toBeGreaterThan(pause.time + 0.35) + result = await page.evaluate(() => { + const audio = window.mbCanvas.engine.audio + const clock = audio.currentTime + const elapsed = audio.audioContext.currentTime - audio.audioContextStartTime + const nodes = [...audio.queuedNodes] + return { clock, rate: audio.playbackRate, anchor: audio.playbackTimeAtStart, elapsed, nodeRates: nodes.map(node => node.playbackRate.value), hasSink: Boolean(audio.audioSink), samples: window.mbClockSamples, pause: window.mbCanvas.paused } + }) + expect(Math.abs(result.clock - (result.anchor + result.elapsed * 2))).toBeLessThan(0.03) + expect(result).toMatchObject({ rate: 2, pause: false, hasSink: scenario !== 'no-track' }) + if (scenario === 'no-track') { + expect(result.nodeRates).toEqual([]) + } + else { + expect(result.nodeRates.length).toBeGreaterThan(0) + expect(result.nodeRates.every(rate => rate === 2)).toBe(true) + } + if (scenario === 'av-clock') { + const playing = result.samples.filter(sample => !sample.paused) + expect(playing.filter(sample => sample.rate === 1).length).toBeGreaterThan(2) + expect(playing.filter(sample => sample.rate === 2).length).toBeGreaterThan(2) + expect(Math.max(...playing.map(sample => Math.abs(sample.frame - sample.audio)))).toBeLessThan(0.25) + } + } + outcome = 'native-audio-ownership-observed' + } + finally { + await page.evaluate(() => window.mbHost.emit('destroy')) + if (capabilities.AudioContext !== 'undefined' || capabilities.webkitAudioContext !== 'undefined') { + await expect.poll(() => page.evaluate(() => window.mbContext.state)).toBe('closed') + expect(await page.evaluate(() => window.mbCanvas.engine.audio.queuedNodes.size)).toBe(0) + } + const state = await page.evaluate(() => ({ context: window.mbContext?.state, nodes: window.mbNodes.map(record => ({ stops: record.stops, disconnects: record.disconnects, starts: record.starts })), error: window.mbCanvas.error, events: window.mbEvents })) + await testInfo.attach('mediabunny-audio', { contentType: 'application/json', body: JSON.stringify({ implementation: implementation.name, sha256: hash(implementation.code), scenario, capabilities, outcome, result, state, scope: 'Native AudioContext, BufferSourceNodes and SDK decode. Delayed resume/buffer delivery is controlled. AV samples compare decoded canvas timestamps to the audio clock over short 1x/2x playback; acoustic output, long-run drift and physical devices remain MB-09.' }) }) + } + }) +} diff --git a/test/mediabunny-audio.test.js b/test/mediabunny-audio.test.js new file mode 100644 index 000000000..a121cede7 --- /dev/null +++ b/test/mediabunny-audio.test.js @@ -0,0 +1,642 @@ +import assert from 'node:assert/strict' +// eslint-disable-next-line test/no-import-node-test -- Actual proxy engine with controlled Web Audio and SDK pump interleavings. +import test from 'node:test' +import { mbCandidate, mbEnvironment } from './helpers/mediabunny.js' + +const implementation = await mbCandidate() +const flush = () => new Promise(resolve => setImmediate(resolve)) +function deferred() { + let resolve, reject + const promise = new Promise((yes, no) => { + resolve = yes + reject = no + }) + return { promise, resolve, reject } +} +const item = value => ({ value, done: !value }) +const buffer = (timestamp = 0, duration = 0.1) => ({ timestamp, buffer: { duration } }) +function iterator(values = []) { + let reads = 0 + let returns = 0 + return { + async next() { + reads++ + return item(values.shift()) + }, + async return() { + returns++ + return item() + }, + get reads() { return reads }, + get returns() { return returns }, + } +} +function environment(options = {}) { + const env = mbEnvironment(implementation, options) + const contexts = [] + const nodes = [] + const warnings = [] + env.globals.console = { ...console, error() {}, warn: (...args) => warnings.push(args) } + env.eventNames.push('canplay', 'playing', 'ended') + env.globals.window.AudioContext = class { + constructor(options) { + this.options = options + this.currentTime = 10 + this.state = 'running' + this.closed = 0 + this.resumes = 0 + this.destination = {} + contexts.push(this) + } + + createGain() { + this.gain = { + gain: { value: 0 }, + connect() {}, + disconnect() { this.disconnected = true }, + } + return this.gain + } + + createBufferSource() { + const node = { + playbackRate: { value: 1 }, + starts: [], + stops: 0, + disconnects: 0, + onended: null, + connect() {}, + start(...args) { this.starts.push(args) }, + stop() { this.stops++ }, + disconnect() { this.disconnects++ }, + } + nodes.push(node) + return node + } + + async resume() { + this.resumes++ + this.state = 'running' + } + + async close() { + this.closed++ + this.state = 'closed' + } + } + const canvas = env.factory()(env.art) + return { ...env, canvas, audio: canvas.engine.audio, contexts, nodes, warnings } +} +function withContext() { + const env = environment() + env.audio.ensureAudioContext() + return { ...env, context: env.contexts[0] } +} + +test('MediaBunny stale audio pump cannot cancel the current pending read', async () => { + const env = withContext() + const read = deferred() + let returns = 0 + const frames = { next: () => read.promise, return: async () => { + returns++ + return item() + } } + env.audio.paused = false + env.audio.audioSink = { buffers: () => frames } + const pumping = env.audio.runIterator(env.audio.asyncId) + const obsolete = env.audio.runIterator(env.audio.asyncId - 1) + try { + await flush() + assert.equal(returns, 0) + assert.equal(env.audio.audioIterator, frames) + } + finally { + env.audio.pause() + read.resolve(item()) + await Promise.all([pumping, obsolete]) + env.art.emit('destroy') + } +}) + +test('MediaBunny failed audio iterator construction remains retryable', async () => { + const env = withContext() + const failure = new Error('sink failed') + env.audio.paused = false + env.audio.audioSink = { buffers() { + throw failure + } } + await assert.rejects(env.audio.runIterator(env.audio.asyncId), error => error === failure) + assert.equal(env.audio.audioIterator, null) + env.audio.audioSink = { buffers: () => iterator() } + await env.audio.runIterator(env.audio.asyncId) + env.art.emit('destroy') +}) + +test('MediaBunny source cancellation clears sink and input after node cleanup failure', async () => { + const env = withContext() + env.audio.paused = false + env.audio.input = {} + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const failure = new Error('stop failed') + env.nodes[0].stop = () => { + throw failure + } + assert.throws(() => env.audio.cancelPending(), error => error === failure) + assert.equal(env.audio.input, null) + assert.equal(env.audio.audioSink, null) + assert.equal(env.audio.queuedNodes.size, 0) + assert.equal(env.nodes[0].disconnects, 1) + env.art.emit('destroy') +}) + +test('MediaBunny gain setup failure releases context without installing partial references', async () => { + const env = environment() + const Context = env.globals.window.AudioContext + const failure = new Error('gain failed') + env.globals.window.AudioContext = class extends Context { + createGain() { + const gain = super.createGain() + Object.defineProperty(gain.gain, 'value', { + get() { return 0 }, + set() { throw failure }, + }) + return gain + } + } + assert.throws(() => env.audio.ensureAudioContext(), error => error === failure) + assert.equal(env.contexts[0].closed, 1) + assert.equal(env.contexts[0].gain.disconnected, true) + assert.equal(env.audio.audioContext, null) + assert.equal(env.audio.gainNode, null) + env.globals.window.AudioContext = Context + env.audio.ensureAudioContext() + assert.equal(env.audio.audioContext, env.contexts[1]) + env.art.emit('destroy') +}) + +test('MediaBunny context setup cannot resurrect audio after synchronous destroy', () => { + const env = environment() + const Context = env.globals.window.AudioContext + env.globals.window.AudioContext = class extends Context { + createGain() { + const gain = super.createGain() + gain.connect = () => env.audio.destroy() + return gain + } + } + env.audio.ensureAudioContext() + assert.equal(env.audio.audioContext, null) + assert.equal(env.audio.gainNode, null) + assert.equal(env.contexts[0].closed, 1) + assert.equal(env.contexts[0].gain.disconnected, true) + env.art.emit('destroy') +}) + +test('MediaBunny ended node disconnect failure is observed after removing retained references', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const failure = new Error('disconnect failed') + env.nodes[0].disconnect = () => { + throw failure + } + env.nodes[0].onended() + assert.equal(env.audio.queuedNodes.size, 0) + assert.equal(env.nodes[0].onended, null) + assert.equal(env.warnings[0][1], failure) + env.art.emit('destroy') +}) + +test('MediaBunny audio preserves clock, gain square law, mute and paused position', async () => { + const env = withContext() + env.audio.setVolume(0.5, false) + assert.equal(env.context.gain.gain.value, 0.25) + env.audio.setVolume(0.5, true) + assert.equal(env.context.gain.gain.value, 0) + await env.audio.seek(3) + await env.audio.play() + env.context.currentTime = 12 + assert.equal(env.audio.currentTime, 5) + env.audio.pause() + env.context.currentTime = 20 + assert.equal(env.audio.currentTime, 5) + env.art.emit('destroy') +}) + +test('MediaBunny audio preserves current media time during a playing rate change', async () => { + const env = withContext() + await env.audio.seek(3) + await env.audio.play() + env.context.currentTime = 12 + env.audio.setPlaybackRate(2) + assert.equal(env.audio.currentTime, 5) + env.context.currentTime = 13 + assert.equal(env.audio.currentTime, 7) + env.art.emit('destroy') +}) + +test('MediaBunny audio preserves future and partial late buffer scheduling math', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioContextStartTime = 10 + env.audio.playbackTimeAtStart = 2 + env.audio.playbackRate = 2 + env.audio.audioSink = { buffers: () => iterator([buffer(1.8, 0.4), buffer(2.4, 0.4)]) } + await env.audio.runIterator(env.audio.asyncId) + assert.deepEqual(env.nodes.map(node => node.starts[0]), [[10, 0.1999999999999993], [10.2]]) + assert.deepEqual(env.nodes.map(node => node.playbackRate.value), [2, 2]) + assert(Math.abs(env.audio.latestScheduledEndTime - 2.8) < 0.000001) + env.art.emit('destroy') +}) + +test('MediaBunny audio detaches iterator synchronously and releases it once', async () => { + const env = environment() + const release = deferred() + let returns = 0 + env.audio.audioIterator = { return: () => { + returns++ + return release.promise + } } + const first = env.audio.stopIterator() + const detached = env.audio.audioIterator + const second = env.audio.stopIterator() + release.resolve(item()) + await Promise.all([first, second]) + assert.equal(detached, null) + assert.equal(returns, 1) + env.art.emit('destroy') +}) + +test('MediaBunny old audio iterator disposal cannot erase a current iterator', async () => { + const env = environment() + const release = deferred() + env.audio.audioIterator = { return: () => release.promise } + const closing = env.audio.stopIterator() + const current = iterator() + env.audio.audioIterator = current + release.resolve(item()) + await closing + assert.equal(env.audio.audioIterator, current) + env.art.emit('destroy') +}) + +for (const ending of ['pause', 'destroy', 'source']) { + test(`MediaBunny pending audio resume cannot restart after ${ending}`, async () => { + const env = withContext() + env.context.state = 'suspended' + const resume = deferred() + env.context.resume = () => resume.promise + const playing = env.audio.play() + if (ending === 'pause') { + env.audio.pause() + } + else if (ending === 'destroy') { + env.art.emit('destroy') + } + else { + env.canvas.engine.performLoad = async () => {} + await env.canvas.engine.load('next.mp4') + } + resume.resolve() + await playing + assert.equal(env.audio.paused, true) + assert.equal(env.nodes.length, 0) + env.art.emit('destroy') + }) +} + +for (const ending of ['destroy', 'source']) { + test(`MediaBunny stale audio capability cannot recreate context or metadata after ${ending}`, async () => { + const env = environment() + const capability = deferred() + let metadata = 0 + const loading = env.audio.load({ input: {}, audioTrack: { codec: 'aac', canDecode: () => capability.promise }, duration: 8 }, () => metadata++) + await flush() + if (ending === 'destroy') { + env.art.emit('destroy') + } + else { + env.canvas.engine.performLoad = async () => {} + await env.canvas.engine.load('next.mp4') + } + capability.resolve(false) + await loading + assert.equal(metadata, 0) + assert.equal(env.contexts.length, 0) + env.art.emit('destroy') + }) +} + +test('MediaBunny audio nodes disconnect and clear ended listeners after pause', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11), buffer(12)]) } + await env.audio.runIterator(env.audio.asyncId) + assert.equal(env.nodes.length, 2) + env.audio.pause() + assert.deepEqual(env.nodes.map(node => [node.stops, node.disconnects, node.onended]), [[1, 1, null], [1, 1, null]]) + assert.equal(env.audio.queuedNodes.size, 0) + env.art.emit('destroy') +}) + +test('MediaBunny naturally ended audio node disconnects and releases its callback', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const node = env.nodes[0] + node.onended() + assert.equal(node.disconnects, 1) + assert.equal(node.onended, null) + assert.equal(env.audio.queuedNodes.size, 0) + env.art.emit('destroy') +}) + +test('MediaBunny audio cleanup attempts all nodes when one stop throws', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11), buffer(12)]) } + await env.audio.runIterator(env.audio.asyncId) + const failure = new Error('stop failed') + env.nodes[0].stop = () => { + throw failure + } + assert.throws(() => env.audio.stopQueuedNodes(), error => error === failure) + assert.equal(env.nodes[1].stops, 1) + assert.equal(env.nodes[0].disconnects, 1) + assert.equal(env.audio.queuedNodes.size, 0) + env.art.emit('destroy') +}) + +for (const ending of ['pause', 'destroy', 'rate']) { + test(`MediaBunny audio pump cannot schedule a batch after pending resume and ${ending}`, async () => { + const env = withContext() + env.context.state = 'suspended' + env.audio.paused = false + env.audio.audioContextStartTime = 10 + const resume = deferred() + env.context.resume = () => resume.promise + env.audio.audioSink = { buffers: () => iterator([buffer(1)]) } + const pumping = env.audio.runIterator(env.audio.asyncId) + await flush() + if (ending === 'pause') { + env.audio.pause() + } + else if (ending === 'destroy') { + env.art.emit('destroy') + } + else { + env.audio.audioSink = null + env.audio.setPlaybackRate(2) + } + env.emitted.length = 0 + resume.resolve() + await pumping + assert.equal(env.nodes.length, 0) + assert.equal(env.emitted.some(event => ['video:canplay', 'video:playing'].includes(event.name)), false) + env.art.emit('destroy') + }) +} + +test('MediaBunny rate change cancels already scheduled old-rate audio nodes', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const old = env.nodes[0] + env.audio.audioSink = null + env.audio.setPlaybackRate(2) + assert.equal(old.stops, 1) + assert.equal(old.disconnects, 1) + assert.equal(env.audio.queuedNodes.size, 0) + env.art.emit('destroy') +}) + +test('MediaBunny seeking before first context exists preserves paused position without throwing', async () => { + const env = environment() + await env.audio.seek(3) + assert.equal(env.audio.currentTime, 3) + assert.equal(env.audio.paused, true) + assert.equal(env.contexts.length, 0) + env.art.emit('destroy') +}) + +test('MediaBunny video ended stops the shared audio clock and scheduled nodes', async () => { + const env = withContext() + await env.audio.play() + env.canvas.engine.paused = false + env.context.currentTime = 12 + env.canvas.events.emit('ended') + const stoppedAt = env.audio.currentTime + env.context.currentTime = 14 + assert.equal(env.audio.paused, true) + assert.equal(env.audio.currentTime, stoppedAt) + env.art.emit('destroy') +}) + +test('MediaBunny audio destruction disconnects gain and observes context close', async () => { + const env = withContext() + const gain = env.context.gain + env.art.emit('destroy') + await flush() + assert.equal(gain.disconnected, true) + assert.equal(env.audio.gainNode, null) + assert.equal(env.context.closed, 1) + assert.equal(env.audio.audioContext, null) + env.art.emit('destroy') + assert.equal(env.context.closed, 1) +}) + +test('MediaBunny actual audio owner shares native resume across coordinator play-pause-play', async () => { + const env = withContext() + const pending = deferred() + let resumes = 0 + env.context.state = 'suspended' + env.context.resume = () => { + resumes++ + return pending.promise + } + let starts = 0 + env.canvas.engine.video.start = () => starts++ + const first = env.canvas.play() + env.canvas.pause() + const second = env.canvas.play() + pending.resolve() + await Promise.all([first, second]) + assert.equal(resumes, 1) + assert.equal(starts, 1) + assert.equal(env.audio.paused, false) + assert.equal(env.canvas.paused, false) + env.art.emit('destroy') +}) + +test('MediaBunny canceled audio play settles without waiting for native resume and observes its rejection', async () => { + const env = withContext() + const pending = deferred() + env.context.state = 'suspended' + env.context.resume = () => pending.promise + let settled = false + const playing = env.audio.play().then(() => settled = true) + env.audio.pause() + await flush() + assert.equal(settled, true) + pending.reject(new Error('obsolete resume rejection')) + await playing + await flush() + assert.equal(env.audio.paused, true) + env.art.emit('destroy') +}) + +test('MediaBunny active resume rejection preserves the error and allows another play', async () => { + const env = withContext() + const failure = new Error('resume denied') + env.context.state = 'suspended' + env.context.resume = async () => { + throw failure + } + await assert.rejects(env.audio.play(), error => error === failure) + assert.equal(env.audio.paused, true) + env.context.resume = async () => {} + await env.audio.play() + assert.equal(env.audio.paused, false) + env.art.emit('destroy') +}) + +test('MediaBunny audio preserves no-track metadata and fallback context construction', async () => { + const env = environment() + const Context = env.globals.window.AudioContext + const attempts = [] + env.globals.window.AudioContext = class extends Context { + constructor(option) { + attempts.push(option) + if (option) + throw new Error('sample rate not supported') + super() + } + } + env.audio.ensureAudioContext(96000) + assert.deepEqual(attempts.map(option => option?.sampleRate), [96000, undefined]) + let metadata = 0 + await env.audio.load({ input: {}, audioTrack: null, duration: 8 }, () => metadata++) + assert.equal(metadata, 1) + assert.equal(env.audio.duration, 8) + assert.equal(env.contexts.length, 1) + env.art.emit('destroy') +}) + +test('MediaBunny expired buffers do not create silent retained source nodes', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioContextStartTime = 0 + env.audio.audioSink = { buffers: () => iterator([buffer(1, 0.1)]) } + await env.audio.runIterator(env.audio.asyncId) + assert.equal(env.nodes.length, 0) + env.art.emit('destroy') +}) + +test('MediaBunny audio seek stops old scheduled nodes even when called directly while playing', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const old = env.nodes[0] + env.audio.audioSink = null + await env.audio.seek(3) + assert.equal(old.stops, 1) + assert.equal(old.disconnects, 1) + assert.equal(env.audio.currentTime, 3) + env.art.emit('destroy') +}) + +test('MediaBunny background audio decode error stops playback and reports one media error', async () => { + const env = withContext() + const failure = new Error('decoder failed') + env.audio.audioSink = { buffers: () => ({ next: async () => { + throw failure + }, return: async () => item() }) } + await env.canvas.play() + await flush() + assert.deepEqual({ ...env.canvas.error }, { code: 4, message: 'decoder failed' }) + assert.equal(env.canvas.paused, true) + assert.equal(env.audio.paused, true) + assert.equal(env.emitted.filter(event => event.name === 'video:error').length, 1) + env.art.emit('destroy') +}) + +test('MediaBunny decoder error is not replaced by iterator release failure', async () => { + const env = withContext() + env.audio.paused = false + const failure = new Error('decoder failed') + env.audio.audioSink = { buffers: () => ({ next: async () => { + throw failure + }, return: async () => { + throw new Error('cleanup failed') + } }) } + await assert.rejects(env.audio.runIterator(env.audio.asyncId), error => error === failure) + await flush() + assert.equal(env.warnings.length, 1) + env.art.emit('destroy') +}) + +test('MediaBunny destroy attempts context cleanup after a node stop error and preserves the first failure', async () => { + const env = withContext() + env.audio.paused = false + env.audio.audioSink = { buffers: () => iterator([buffer(11)]) } + await env.audio.runIterator(env.audio.asyncId) + const failure = new Error('node failed') + env.nodes[0].stop = () => { + throw failure + } + assert.throws(() => env.audio.destroy(), error => error === failure) + assert.equal(env.context.closed, 1) + assert.equal(env.context.gain.disconnected, true) + assert.equal(env.audio.audioContext, null) + assert.equal(env.audio.audioIterator, null) + assert.equal(env.audio.queuedNodes.size, 0) + env.art.emit('destroy') +}) + +test('MediaBunny destroyed audio context close rejection remains observed', async () => { + const env = withContext() + const failure = new Error('close failed') + env.context.close = async () => { + throw failure + } + env.art.emit('destroy') + await flush() + assert.equal(env.warnings.length, 1) + assert.equal(env.warnings[0][1], failure) + assert.equal(env.audio.audioContext, null) +}) + +test('MediaBunny paused audio pump clears owned batch and backpressure timers', async () => { + const timers = new Map() + let next = 0 + const env = environment({ setTimeout(callback, delay) { + const id = next++ + timers.set(id, { callback, delay }) + return id + }, clearTimeout(id) { timers.delete(id) } }) + env.audio.ensureAudioContext() + env.audio.paused = false + env.audio.audioContextStartTime = 10 + const frames = iterator(Array.from({ length: 32 }, (_, index) => buffer(index / 10))) + env.audio.audioSink = { buffers: () => frames } + const pumping = env.audio.runIterator(env.audio.asyncId) + await flush() + assert.equal(frames.reads, 16) + assert.deepEqual([...timers.values()].map(timer => timer.delay), [0]) + const [id, timer] = [...timers][0] + timers.delete(id) + timer.callback() + await flush() + assert.deepEqual([...timers.values()].map(timer => timer.delay), [50]) + env.audio.pause() + assert.equal(timers.size, 0) + await pumping + assert.equal(frames.returns, 1) + assert.equal(env.nodes.every(node => node.disconnects === 1), true) + env.art.emit('destroy') +}) diff --git a/test/mediabunny-coordination.test.js b/test/mediabunny-coordination.test.js index 90387f720..23de460be 100644 --- a/test/mediabunny-coordination.test.js +++ b/test/mediabunny-coordination.test.js @@ -94,7 +94,7 @@ test('MediaBunny coordinator restores paused state after a play rejection and al env.art.emit('destroy') }) -test('MediaBunny coordinator shares delayed audio resume across play-pause-play and starts video once', async () => { +test('MediaBunny coordinator delegates each new play intent to the audio owner and starts video once', async () => { const env = environment() const audio = deferred() let attempts = 0 @@ -107,7 +107,7 @@ test('MediaBunny coordinator shares delayed audio resume across play-pause-play const second = env.engine.play() audio.resolve() await Promise.all([first, second]) - assert.equal(attempts, 1) + assert.equal(attempts, 2) assert.equal(env.engine.paused, false) assert.equal(env.calls.filter(name => name === 'video:start').length, 1) assert.equal(env.calls.filter(name => name === 'play').length, 1)