Files
ArtPlayer/docs/compiled/artplayer-proxy-mediabunny.js
Harvey Zhao 26841c5b1c feat: enable fullscreenWeb option in Artplayer configuration
feat: add danmuku plugin and i18n setup documentation

- Introduced a new danmuku plugin with multiple run code options in the documentation.
- Added language settings documentation for i18n, including default languages, import instructions, and examples for adding and modifying languages.
- Implemented input handling for media sources in the artplayer-proxy-mediabunny package, supporting various formats including HLS.
- Created m3u8 control functionalities for managing audio and video quality settings in the player.

Update mediabunny.js
2026-05-04 13:22:32 +08:00

8 lines
362 KiB
JavaScript

/*!
* artplayer-proxy-mediabunny.js v1.2.0
* Github: https://github.com/zhw2590582/ArtPlayer
* (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?(t.artplayerProxyMediabunny=t(),define(function(){return t.artplayerProxyMediabunny})):(e="undefined"!==typeof globalThis?globalThis:e||self).artplayerProxyMediabunny=t()}(this,function(){"use strict";function e(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 t{constructor(){this.listeners=new Map}addEventListener(e,t){this.listeners.has(e)||this.listeners.set(e,[]),this.listeners.get(e).push(t)}removeEventListener(e,t){const i=this.listeners.get(e);if(!i)return;const r=i.indexOf(t);r>=0&&i.splice(r,1)}emit(e,t){const i=new Event(e);i.detail=t;const r=this.listeners.get(e);r&&r.forEach(e=>e(i))}}function i(e){if(!e)throw new Error("Assertion failed.")}const r=e=>{const t=(e%360+360)%360;if(0===t||90===t||180===t||270===t)return t;throw new Error(`Invalid rotation ${e}.`)},a=e=>e&&e[e.length-1],s=e=>{let t=0;for(;0===e.readBits(1)&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<t)-1+e.readBits(t)},n=e=>{const t=s(e);return 0===(1&t)?-(t>>1):t+1>>1},o=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),c=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),l=new TextDecoder,u=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),d={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},h=u(d),f={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},m=u(f),p={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},g=u(p),k=e=>e instanceof ArrayBuffer||"undefined"!==typeof SharedArrayBuffer&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e);class b{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 y=/^[0-9a-fA-F]+$/,w=e=>[...e].map(e=>e.toString(16).padStart(2,"0")).join(""),T=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,S=(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<t?r=n+1:a=n-1}return s},P=(e,t,i)=>{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},v=(e,t,i)=>{const r=P(e,i(t),i);e.splice(r+1,0,t)},I=()=>{let e,t;return{promise:new Promise((i,r)=>{e=i,t=r}),resolve:e,reject:t}},x=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return e[i]},C=(e,t)=>{for(let i=e.length-1;i>=0;i--)if(t(e[i]))return i;return-1},B=e=>{throw new Error(`Unexpected value: ${e}`)},E=(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},_=(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)},A=(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}}),F=(e,t,i)=>Math.max(t,Math.min(i,e)),R="und",D=e=>{const t=Math.round(e);return Math.abs(e/t-1)<10*Number.EPSILON?t:e},M=(e,t)=>Math.round(e*t)/t,N=(e,t)=>Math.floor(e/t)*t,O=/^[a-z]{3}$/,L=e=>O.test(e),z=1e6*(1+Number.EPSILON),U=(e,t)=>{const i={...e,...t};if(e.headers||t.headers){const r=e.headers?q(e.headers):{},a=t.headers?q(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},q=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},W=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(console.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 ce(1e3*e),a())throw n}};class V{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}}let H=null;const K=()=>null!==H?H:H=!("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 j=null;const X=()=>null!==j?j:j="undefined"!==typeof navigator&&navigator.userAgent?.includes("Firefox");let $=null;const Q=()=>null!==$?$:$=!("undefined"===typeof navigator||!navigator.vendor?.includes("Google Inc")&&!/Chrome/.test(navigator.userAgent));let G=null;const Y=()=>{if(null!==G)return G;if("undefined"===typeof navigator)return null;const e=/\bChrome\/(\d+)/.exec(navigator.userAgent);return e?G=Number(e[1]):null},J=(e,t)=>-1!==e?e:t,Z=(e,t,i,r)=>e<=r&&i<=t,ee=e=>{const t=atob(e),i=new Uint8Array(t.length);for(let r=0;r<t.length;r++)i[r]=t.charCodeAt(r);return i},te=()=>{Symbol.dispose??(Symbol.dispose=Symbol("Symbol.dispose"))},ie=e=>"number"===typeof e&&!Number.isNaN(e),re=(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("/")},ae=(e,t)=>{let i=0;for(let r=0;r<e.length;r++)t(e[r])&&i++;return i},se=(e,t)=>{let i=-1,r=1/0;for(let a=0;a<e.length;a++){const s=t(e[a]);s<r&&(r=s,i=a)}return i},ne=e=>{i(Number.isInteger(e.num)),i(Number.isInteger(e.den)),i(0!==e.den);let t=Math.abs(e.num),r=Math.abs(e.den);for(;0!==r;){const e=t%r;t=r,r=e}const a=t||1;return{num:e.num/a,den:e.den/a}},oe=(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.`)},ce=e=>new Promise(t=>setTimeout(t,e));class le{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)}}}class ue{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 de{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 he={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1};class fe{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)>>i;return this.pos++,r}readBits(e){if(1===e)return this.readBit();let t=0;for(let i=0;i<e;i++)t<<=1,t|=this.readBit();return t}writeBits(e,t){const i=this.pos+e;for(let r=this.pos;r<i;r++){const e=Math.floor(r/8);let a=this.bytes[e];const s=7-(7&r);a&=~(1<<s),a|=(t&1<<i-r-1)>>i-r-1<<s,this.bytes[e]=a}this.pos=i}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 fe(this.bytes);return e.pos=this.pos,e}}const me=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],pe=[-1,1,2,3,4,5,6,8],ge=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");const t=new fe(e);let i=t.readBits(5);31===i&&(i=32+t.readBits(6));const r=t.readBits(4);let a=null;15===r?a=t.readBits(24):r<me.length&&(a=me[r]);const s=t.readBits(4);let n=null;return s>=1&&s<=7&&(n=pe[s]),{objectType:i,frequencyIndex:r,sampleRate:a,channelConfiguration:s,numberOfChannels:n}},ke=["avc","hevc","vp9","av1","vp8"],be=["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"],ye=["aac","opus","mp3","vorbis","flac","ac3","eac3",...be],we=[{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}],Te=[{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}],Se=".01.01.01.01.00",Pe=".0.110.01.01.01.0",ve=e=>{const{codec:t,codecDescription:r,colorSpace:s,avcCodecInfo:n,hevcCodecInfo:o,vp9CodecInfo:l,av1CodecInfo:u}=e;if("avc"===t){if(i(null!==e.avcType),n){const t=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${e.avcType}.${w(t)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${w(r.subarray(1,4))}`}if("hevc"===t){let e,t,i,a,s,n;if(o)e=o.generalProfileSpace,t=o.generalProfileIdc,i=T(o.generalProfileCompatibilityFlags),a=o.generalTierFlag,s=o.generalLevelIdc,n=[...o.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");const o=c(r),l=o.getUint8(1);e=l>>6&3,t=31&l,i=T(o.getUint32(2)),a=l>>5&1,s=o.getUint8(12),n=[];for(let e=0;e<6;e++)n.push(o.getUint8(6+e))}let l="hev1.";for(l+=["","A","B","C"][e]+t,l+=".",l+=i.toString(16).toUpperCase(),l+=".",l+=0===a?"L":"H",l+=s;n.length>0&&0===n[n.length-1];)n.pop();return n.length>0&&(l+=".",l+=n.map(e=>e.toString(16).toUpperCase()).join(".")),l}if("vp8"===t)return"vp8";if("vp9"===t){if(!l){const t=e.width*e.height;let i=a(Te).level;for(const e of Te)if(t<=e.maxPictureSize){i=e.level;break}return`vp09.00.${i.toString().padStart(2,"0")}.08`}let t=`vp09.${l.profile.toString().padStart(2,"0")}.${l.level.toString().padStart(2,"0")}.${l.bitDepth.toString().padStart(2,"0")}.${l.chromaSubsampling.toString().padStart(2,"0")}`;return t+=`.${l.colourPrimaries.toString().padStart(2,"0")}.${l.transferCharacteristics.toString().padStart(2,"0")}.${l.matrixCoefficients.toString().padStart(2,"0")}.${l.videoFullRangeFlag.toString().padStart(2,"0")}`,t.endsWith(Se)&&(t=t.slice(0,-15)),t}if("av1"===t){if(!u){const t=e.width*e.height;let i=a(Te).level;for(const e of Te)if(t<=e.maxPictureSize){i=e.level;break}return`av01.0.${i.toString().padStart(2,"0")}M.08`}const t=u.profile,i=u.level.toString().padStart(2,"0"),r=u.tier?"H":"M",n=u.bitDepth.toString().padStart(2,"0"),o=u.monochrome?"1":"0",c=100*u.chromaSubsamplingX+10*u.chromaSubsamplingY+1*(u.chromaSubsamplingX&&u.chromaSubsamplingY?u.chromaSamplePosition:0),l=s?.primaries?d[s.primaries]:1,h=s?.transfer?f[s.transfer]:1,m=s?.matrix?p[s.matrix]:1,g=s?.fullRange?1:0;let k=`av01.${t}.${i}${r}.${n}`;return k+=`.${o}.${c.toString().padStart(3,"0")}`,k+=`.${l.toString().padStart(2,"0")}`,k+=`.${h.toString().padStart(2,"0")}`,k+=`.${m.toString().padStart(2,"0")}`,k+=`.${g}`,k.endsWith(Pe)&&(k=k.slice(0,-17)),k}throw new TypeError(`Unhandled codec '${t}'.`)},Ie=e=>{const{codec:t,codecDescription:i,aacCodecInfo:r}=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=ge(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(t&&be.includes(t))return t;throw new TypeError(`Unhandled codec '${t}'.`)},xe=48e3,Ce=/^pcm-([usf])(\d+)+(be)?$/,Be=e=>{if(i(be.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=Ce.exec(e);let r;i(t),r="u"===t[1]?"unsigned":"s"===t[1]?"signed":"float";return{dataType:r,sampleSize:Number(t[2])/8,littleEndian:"be"!==t[3],silentValue:"pcm-u8"===e?128:0}},Ee=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":"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":"ulaw"===e?"ulaw":"alaw"===e?"alaw":Ce.test(e)?e:"webvtt"===e?"webvtt":null,_e=[44100,48e3,32e3],Ae=[-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],Fe=1483304551,Re=1231971951,De=(e,t)=>3===e?3===t?21:36:3===t?13:21,Me=(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=Ae[16*n*4+16*l+(a>>4&15)];if(-1===g)return{header:null,bytesAdvanced:1};const k=1e3*g,b=_e[u]>>n+o,y=((e,t,i,r,a)=>0===t?0:1===t?Math.floor(144*i/(r<<e))+a:2===t?Math.floor(144*i/r)+a:4*(Math.floor(12*i/r)+a))(n,l,k,b,a>>1&1);if(null!==t&&t<y)return{header:null,bytesAdvanced:1};let w;return w=3===c?3===l?384:1152:3===l?384:2===l?1152:576,{header:{totalSize:y,mpegVersionId:c,lowSamplingFrequency:n,layer:l,bitrate:k,frequencyIndex:u,sampleRate:b,channel:d,modeExtension:h,copyright:f,original:m,emphasis:p,audioSamplesInFrame:w},bytesAdvanced:1}},Ne=e=>{let t=2130706432,i=0;for(;0!==t;)i>>=1,i|=e&t,t>>=8;return i};var Oe,Le;(Le=Oe||(Oe={}))[Le.FrameCount=1]="FrameCount",Le[Le.FileSize=2]="FileSize",Le[Le.Toc=4]="Toc";const ze=[48e3,44100,32e3],Ue=[24e3,22050,16e3];var qe,We,Ve,He;(We=qe||(qe={}))[We.NON_IDR_SLICE=1]="NON_IDR_SLICE",We[We.SLICE_DPA=2]="SLICE_DPA",We[We.SLICE_DPB=3]="SLICE_DPB",We[We.SLICE_DPC=4]="SLICE_DPC",We[We.IDR=5]="IDR",We[We.SEI=6]="SEI",We[We.SPS=7]="SPS",We[We.PPS=8]="PPS",We[We.AUD=9]="AUD",We[We.SPS_EXT=13]="SPS_EXT",(He=Ve||(Ve={}))[He.RASL_N=8]="RASL_N",He[He.RASL_R=9]="RASL_R",He[He.BLA_W_LP=16]="BLA_W_LP",He[He.RSV_IRAP_VCL23=23]="RSV_IRAP_VCL23",He[He.VPS_NUT=32]="VPS_NUT",He[He.SPS_NUT=33]="SPS_NUT",He[He.PPS_NUT=34]="PPS_NUT",He[He.AUD_NUT=35]="AUD_NUT",He[He.PREFIX_SEI_NUT=39]="PREFIX_SEI_NUT",He[He.SUFFIX_SEI_NUT=40]="SUFFIX_SEI_NUT";const Ke=function*(e){let t=0,i=-1;for(;t<e.length-2;){const r=e.indexOf(0,t);if(-1===r||r>=e.length-2)break;t=r;let a=0;t+3<e.length&&0===e[t+1]&&0===e[t+2]&&1===e[t+3]?a=4:0===e[t+1]&&1===e[t+2]&&(a=3),0!==a?(-1!==i&&t>i&&(yield{offset:i,length:t-i}),i=t+a,t=i):t++}-1!==i&&i<e.length&&(yield{offset:i,length:e.length-i})},je=function*(e,t){let r=0;const a=new DataView(e.buffer,e.byteOffset,e.byteLength);for(;r+t<=e.length;){let e;1===t?e=a.getUint8(r):2===t?e=a.getUint16(r,!1):3===t?e=E(a,r,!1):(i(4===t),e=a.getUint32(r,!1)),r+=t,yield{offset:r,length:e},r+=e}},Xe=(e,t)=>{if(t.description){const i=3&o(t.description)[4];return je(e,i+1)}return Ke(e)},$e=e=>31&e,Qe=e=>{const t=[],i=e.length;for(let r=0;r<i;r++)r+2<i&&0===e[r]&&0===e[r+1]&&3===e[r+2]?(t.push(0,0),r+=2):t.push(e[r]);return new Uint8Array(t)},Ge=new Uint8Array([0,0,0,1]),Ye=e=>{const t=e.reduce((e,t)=>e+Ge.byteLength+t.byteLength,0),i=new Uint8Array(t);let r=0;for(const a of e)i.set(Ge,r),r+=Ge.byteLength,i.set(a,r),r+=a.byteLength;return i},Je=(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:_(e,a,s.byteLength);break;case 4:e.setUint32(a,s.byteLength,!1)}a+=t,r.set(s,a),a+=s.byteLength}return r},Ze=e=>{try{const t=[],r=[],a=[];for(const i of Ke(e)){const s=e.subarray(i.offset,i.offset+i.length),n=$e(s[0]);n===qe.SPS?t.push(s):n===qe.PPS?r.push(s):n===qe.SPS_EXT&&a.push(s)}if(0===t.length)return null;if(0===r.length)return null;const s=t[0],n=tt(s);i(null!==n);const o=100===n.profileIdc||110===n.profileIdc||122===n.profileIdc||144===n.profileIdc;return{configurationVersion:1,avcProfileIndication:n.profileIdc,profileCompatibility:n.constraintFlags,avcLevelIndication:n.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:r,chromaFormat:o?n.chromaFormatIdc:null,bitDepthLumaMinus8:o?n.bitDepthLumaMinus8:null,bitDepthChromaMinus8:o?n.bitDepthChromaMinus8:null,sequenceParameterSetExt:o?a:null}}catch(t){return console.error("Error building AVC Decoder Configuration Record:",t),null}},et={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},tt=e=>{try{const t=new fe(Qe(e));t.skipBits(1),t.skipBits(2);if(7!==t.readBits(5))return null;const r=t.readAlignedByte(),o=t.readAlignedByte(),c=t.readAlignedByte();s(t);let l=1,u=0,d=0,h=0;if(100===r||110===r||122===r||244===r||44===r||83===r||86===r||118===r||128===r){l=s(t),3===l&&(h=t.readBits(1)),u=s(t),d=s(t),t.skipBits(1);if(t.readBits(1))for(let e=0;e<(3!==l?8:12);e++){if(t.readBits(1)){const i=e<6?16:64;let r=8,a=8;for(let e=0;e<i;e++){if(0!==a){a=(r+n(t)+256)%256}r=0===a?r:a}}}}s(t);const f=s(t);if(0===f)s(t);else if(1===f){t.skipBits(1),n(t),n(t);const e=s(t);for(let i=0;i<e;i++)n(t)}s(t),t.skipBits(1);const m=s(t),p=s(t),g=16*(m+1),k=16*(p+1);let b=g,y=k;const w=t.readBits(1);w||t.skipBits(1),t.skipBits(1);if(t.readBits(1)){const e=s(t),i=s(t),r=s(t),a=s(t);let n,o;if(0===(0===h?l:0))n=1,o=2-w;else{n=3===l?1:2,o=(1===l?2:1)*(2-w)}b-=n*(e+i),y-=o*(r+a)}let T=2,S=2,P=2,v=0,I={num:1,den:1},x=null,C=null;if(t.readBits(1)){if(t.readBits(1)){const e=t.readBits(8);if(255===e)I={num:t.readBits(16),den:t.readBits(16)};else{const t=et[e];t&&(I=t)}}t.readBits(1)&&t.skipBits(1);if(t.readBits(1)){t.skipBits(3),v=t.readBits(1);t.readBits(1)&&(T=t.readBits(8),S=t.readBits(8),P=t.readBits(8))}t.readBits(1)&&(s(t),s(t));t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));const e=t.readBits(1);e&&it(t);const i=t.readBits(1);i&&it(t),(e||i)&&t.skipBits(1),t.skipBits(1);t.readBits(1)&&(t.skipBits(1),s(t),s(t),s(t),s(t),x=s(t),C=s(t))}if(null===x){i(null===C);if(44!==r&&86!==r&&100!==r&&110!==r&&122!==r&&244!==r||!(16&o)){const e=m+1,t=(2-w)*(p+1),i=we.find(e=>e.level>=c)??a(we),r=Math.min(Math.floor(i.maxDpbMbs/(e*t)),16);x=r,C=r}else x=0,C=0}return i(null!==C),{profileIdc:r,constraintFlags:o,levelIdc:c,frameMbsOnlyFlag:w,chromaFormatIdc:l,bitDepthLumaMinus8:u,bitDepthChromaMinus8:d,codedWidth:g,codedHeight:k,displayWidth:b,displayHeight:y,pixelAspectRatio:I,colourPrimaries:T,matrixCoefficients:P,transferCharacteristics:S,fullRangeFlag:v,numReorderFrames:x,maxDecFrameBuffering:C}}catch(t){return console.error("Error parsing AVC SPS:",t),null}},it=e=>{const t=s(e);e.skipBits(4),e.skipBits(4);for(let i=0;i<=t;i++)s(e),s(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},rt=(e,t)=>{if(t.description){const i=3&o(t.description)[21];return je(e,i+1)}return Ke(e)},at=e=>e>>1&63,st=e=>{try{const t=new fe(Qe(e));t.skipBits(16),t.readBits(4);const i=t.readBits(3),r=t.readBits(1),{general_profile_space:a,general_tier_flag:n,general_profile_idc:o,general_profile_compatibility_flags:c,general_constraint_indicator_flags:l,general_level_idc:u}=ot(t,i);s(t);const d=s(t);let h=0;3===d&&(h=t.readBits(1));const f=s(t),m=s(t);let p=f,g=m;if(t.readBits(1)){const e=s(t),i=s(t),r=s(t),a=s(t);let n=1,o=1;const c=0===h?d:0;1===c?(n=2,o=2):2===c&&(n=2,o=1),p-=(e+i)*n,g-=(r+a)*o}const k=s(t),b=s(t);s(t);const y=t.readBits(1);let w=0;for(let e=y?0:i;e<=i;e++)s(t),w=s(t),s(t);s(t),s(t),s(t),s(t),s(t),s(t),t.readBits(1)&&t.readBits(1)&&ct(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),s(t),s(t),t.skipBits(1));const T=s(t);if(lt(t,T),t.readBits(1)){const e=s(t);for(let i=0;i<e;i++)s(t),t.skipBits(1)}t.skipBits(1),t.skipBits(1);let S=2,P=2,v=2,I=0,x=0,C={num:1,den:1};if(t.readBits(1)){const e=dt(t,i);C=e.pixelAspectRatio,S=e.colourPrimaries,P=e.transferCharacteristics,v=e.matrixCoefficients,I=e.fullRangeFlag,x=e.minSpatialSegmentationIdc}return{displayWidth:p,displayHeight:g,pixelAspectRatio:C,colourPrimaries:S,transferCharacteristics:P,matrixCoefficients:v,fullRangeFlag:I,maxDecFrameBuffering:w+1,spsMaxSubLayersMinus1:i,spsTemporalIdNestingFlag:r,generalProfileSpace:a,generalTierFlag:n,generalProfileIdc:o,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:l,generalLevelIdc:u,chromaFormatIdc:d,bitDepthLumaMinus8:k,bitDepthChromaMinus8:b,minSpatialSegmentationIdc:x}}catch(t){return console.error("Error parsing HEVC SPS:",t),null}},nt=e=>{try{const t=[],i=[],r=[],a=[];for(const s of Ke(e)){const n=e.subarray(s.offset,s.offset+s.length),o=at(n[0]);o===Ve.VPS_NUT?t.push(n):o===Ve.SPS_NUT?i.push(n):o===Ve.PPS_NUT?r.push(n):o!==Ve.PREFIX_SEI_NUT&&o!==Ve.SUFFIX_SEI_NUT||a.push(n)}if(0===i.length||0===r.length)return null;const o=st(i[0]);if(!o)return null;let c=0;if(r.length>0){const e=r[0],t=new fe(Qe(e));t.skipBits(16),s(t),s(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),s(t),s(t),n(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&s(t),n(t),n(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);const i=t.readBits(1),a=t.readBits(1);c=i||a?i&&!a?2:!i&&a?3:0:0}const l=[...t.length?[{arrayCompleteness:1,nalUnitType:Ve.VPS_NUT,nalUnits:t}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Ve.SPS_NUT,nalUnits:i}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:Ve.PPS_NUT,nalUnits:r}]:[],...a.length?[{arrayCompleteness:1,nalUnitType:at(a[0][0]),nalUnits:a}]:[]];return{configurationVersion:1,generalProfileSpace:o.generalProfileSpace,generalTierFlag:o.generalTierFlag,generalProfileIdc:o.generalProfileIdc,generalProfileCompatibilityFlags:o.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:o.generalConstraintIndicatorFlags,generalLevelIdc:o.generalLevelIdc,minSpatialSegmentationIdc:o.minSpatialSegmentationIdc,parallelismType:c,chromaFormatIdc:o.chromaFormatIdc,bitDepthLumaMinus8:o.bitDepthLumaMinus8,bitDepthChromaMinus8:o.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:o.spsMaxSubLayersMinus1+1,temporalIdNested:o.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:l}}catch(t){return console.error("Error building HEVC Decoder Configuration Record:",t),null}},ot=(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;u<t;u++)c.push(e.readBits(1)),l.push(e.readBits(1));if(t>0)for(let u=t;u<8;u++)e.skipBits(2);for(let u=0;u<t;u++)c[u]&&e.skipBits(88),l[u]&&e.skipBits(8);return{general_profile_space:i,general_tier_flag:r,general_profile_idc:a,general_profile_compatibility_flags:s,general_constraint_indicator_flags:n,general_level_idc:o}},ct=e=>{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&&n(e);for(let t=0;t<i;t++)n(e)}else s(e)}},lt=(e,t)=>{const i=[];for(let r=0;r<t;r++)i[r]=ut(e,r,t,i)},ut=(e,t,i,r)=>{let a=0,n=0,o=0;if(0!==t&&(n=e.readBits(1)),n){if(t===i){o=t-(s(e)+1)}else o=t-1;e.readBits(1),s(e);const n=r[o]??0;for(let t=0;t<=n;t++){e.readBits(1)||e.readBits(1)}a=r[o]}else{const t=s(e),i=s(e);for(let r=0;r<t;r++)s(e),e.readBits(1);for(let r=0;r<i;r++)s(e),e.readBits(1);a=t+i}return a},dt=(e,t)=>{let i=2,r=2,a=2,n=0,o=0,c={num:1,den:1};if(e.readBits(1)){const t=e.readBits(8);if(255===t)c={num:e.readBits(16),den:e.readBits(16)};else{const e=et[t];e&&(c=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),n=e.readBits(1),e.readBits(1)&&(i=e.readBits(8),r=e.readBits(8),a=e.readBits(8))),e.readBits(1)&&(s(e),s(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(s(e),s(e),s(e),s(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&s(e),e.readBits(1)&&ht(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),o=s(e),s(e),s(e),s(e),s(e)),{pixelAspectRatio:c,colourPrimaries:i,transferCharacteristics:r,matrixCoefficients:a,fullRangeFlag:n,minSpatialSegmentationIdc:o}},ht=(e,t,i)=>{let r=!1,a=!1,n=!1;r=1===e.readBits(1),a=1===e.readBits(1),(r||a)&&(n=1===e.readBits(1),n&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),n&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5));for(let o=0;o<=i;o++){let t=!0;1===e.readBits(1)||(t=1===e.readBits(1));let i=!1;t?s(e):i=1===e.readBits(1);let o=1;if(!i){o=s(e)+1}r&&ft(e,o,n),a&&ft(e,o,n)}},ft=(e,t,i)=>{for(let r=0;r<t;r++)s(e),s(e),i&&(s(e),s(e)),e.readBits(1)};var mt,pt;(pt=mt||(mt={}))[pt.audAllowed=0]="audAllowed",pt[pt.beforeFirstVcl=1]="beforeFirstVcl",pt[pt.afterFirstVcl=2]="afterFirstVcl",pt[pt.eoBitstreamAllowed=3]="eoBitstreamAllowed",pt[pt.noMoreDataAllowed=4]="noMoreDataAllowed";const gt=(e,t)=>{const i=new Set;let r=mt.audAllowed;for(const s of rt(e,t)){if(r===mt.noMoreDataAllowed){i.add(s.offset);continue}const t=at(e[s.offset]);if(r===mt.eoBitstreamAllowed&&37!==t){i.add(s.offset);continue}let a=!1;35===t?r>mt.audAllowed?a=!0:r=mt.beforeFirstVcl:t<=31?r>mt.afterFirstVcl?a=!0:r=mt.afterFirstVcl:36===t?r!==mt.afterFirstVcl?a=!0:r=mt.eoBitstreamAllowed:37===t?r<mt.afterFirstVcl?a=!0:r=mt.noMoreDataAllowed:32===t||33===t||34===t||39===t||t>=41&&t<=44||t>=48&&t<=55?r>mt.beforeFirstVcl?a=!0:r=mt.beforeFirstVcl:(38===t||40===t||t>=45&&t<=47||t>=56&&t<=63)&&r<mt.afterFirstVcl&&(a=!0),a&&i.add(s.offset)}if(0===i.size)return null;const a=[];for(const s of rt(e,t))i.has(s.offset)||a.push(e.subarray(s.offset,s.offset+s.length));return((e,t)=>{if(t.description){const i=3&o(t.description)[21];return Je(e,i+1)}return Ye(e)})(a,t)},kt=e=>{const t=new fe(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 s=8;if(r>=2){s=t.readBits(1)?12:10}const n=t.readBits(3);let o=0,c=0;if(7!==n){if(c=t.readBits(1),1===r||3===r){const e=t.readBits(1),i=t.readBits(1);o=e||i?e&&!i?2:1:3,t.skipBits(1)}else o=1}else o=3,c=1;const l=(t.readBits(16)+1)*(t.readBits(16)+1);let u=a(Te).level;for(const a of Te)if(l<=a.maxPictureSize){u=a.level;break}return{profile:r,level:u,bitDepth:s,chromaSubsampling:o,videoFullRangeFlag:c,colourPrimaries:2===n?1:1===n?6:2,transferCharacteristics:2===n?1:1===n?6:2,matrixCoefficients:7===n?0:2===n?1:1===n?6:2}},bt=function*(e){const t=new fe(e),r=()=>{let e=0;for(let i=0;i<8;i++){const r=t.readAlignedByte();if(e|=(127&r)<<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 a=t.readBits(4),s=t.readBits(1),n=t.readBits(1);let o;if(t.skipBits(1),s&&t.skipBits(8),n){const e=r();if(null===e)return;o=e}else o=Math.floor(t.getBitsLeft()/8);i(t.pos%8===0),yield{type:a,data:e.subarray(t.pos/8,t.pos/8+o)},t.skipBits(8*o)}},yt=e=>{for(const{type:t,data:i}of bt(e)){if(1!==t)continue;const e=new fe(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{if(e.readBits(1)){e.skipBits(32),e.skipBits(32);if(e.readBits(1))return null}const t=e.readBits(1);t&&(o=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5));const i=e.readBits(5);for(let r=0;r<=i;r++){e.skipBits(12);const i=e.readBits(5);if(0===r&&(s=i),i>7){const t=e.readBits(1);0===r&&(n=t)}if(t){if(e.readBits(1)){const t=o+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}}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=1,k=1,b=0;return p||(0===r?(g=1,k=1):1===r?(g=0,k=0):12===m&&(g=e.readBits(1),g&&(k=e.readBits(1))),g&&k&&(b=e.readBits(2))),{profile:r,level:s,tier:n,bitDepth:m,monochrome:p,chromaSubsamplingX:g,chromaSubsamplingY:k,chromaSamplePosition:b}}return null},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],Tt=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;u<t;u++)i[u]=e[t-1-u];const r=new fe(i);let a=0;for(;r.getBitsLeft()>97;)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}},St=(e,t,r)=>{switch(e){case"avc":for(const e of Xe(r,t)){const t=r[e.offset],i=$e(t);if(i>=qe.NON_IDR_SLICE&&i<=qe.SLICE_DPC)return"delta";if(i===qe.IDR)return"key";if(i===qe.SEI&&(!Q()||Y()>=144)){const t=r.subarray(e.offset,e.offset+e.length),i=Qe(t);let a=1;do{let e=0;for(;;){const t=i[a++];if(void 0===t)break;if(e+=t,t<255)break}let t=0;for(;;){const e=i[a++];if(void 0===e)break;if(t+=e,e<255)break}if(e===6){const e=new fe(i);e.pos=8*a;const t=s(e),r=e.readBits(1);if(0===t&&1===r)return"key"}a+=t}while(a<i.length-1)}}return"delta";case"hevc":for(const e of rt(r,t)){const t=at(r[e.offset]);if(t<Ve.BLA_W_LP)return"delta";if(t<=Ve.RSV_IRAP_VCL23)return"key"}return"delta";case"vp8":return 0===(1&r[0])?"key":"delta";case"vp9":{const e=new fe(r);if(2!==e.readBits(2))return null;const t=e.readBits(1);3===(e.readBits(1)<<1)+t&&e.skipBits(1);if(e.readBits(1))return null;return 0===e.readBits(1)?"key":"delta"}case"av1":{let e=!1;for(const{type:t,data:i}of bt(r))if(1===t){const t=new fe(i);t.skipBits(4),e=!!t.readBits(1)}else if(3===t||6===t||7===t){if(e)return"key";const t=new fe(i);if(t.readBits(1))return null;return 0===t.readBits(2)?"key":"delta"}return null}default:B(e),i(!1)}};var Pt,vt;(vt=Pt||(Pt={}))[vt.STREAMINFO=0]="STREAMINFO",vt[vt.VORBIS_COMMENT=4]="VORBIS_COMMENT",vt[vt.PICTURE=6]="PICTURE";const It=(e,t)=>{var i,r;const a=c(e);let s=0;const n=a.getUint32(s,!0);s+=4;const o=l.decode(e.subarray(s,s+n));s+=n,n>0&&(t.raw??(t.raw={}),(i=t.raw).vendor??(i.vendor=o));const u=a.getUint32(s,!0);s+=4;for(let d=0;d<u;d++){const i=a.getUint32(s,!0);s+=4;const n=l.decode(e.subarray(s,s+i));s+=i;const o=n.indexOf("=");if(-1===o)continue;const u=n.slice(0,o).toUpperCase(),d=n.slice(o+1);switch(t.raw??(t.raw={}),(r=t.raw)[u]??(r[u]=d),u){case"TITLE":t.title??(t.title=d);break;case"DESCRIPTION":t.description??(t.description=d);break;case"ARTIST":t.artist??(t.artist=d);break;case"ALBUM":t.album??(t.album=d);break;case"ALBUMARTIST":t.albumArtist??(t.albumArtist=d);break;case"COMMENT":t.comment??(t.comment=d);break;case"LYRICS":t.lyrics??(t.lyrics=d);break;case"TRACKNUMBER":{const e=d.split("/"),i=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(i)&&i>0&&(t.trackNumber??(t.trackNumber=i)),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??(t.tracksTotal=r))}break;case"TRACKTOTAL":{const e=Number.parseInt(d,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??(t.tracksTotal=e))}break;case"DISCNUMBER":{const e=d.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(d,10);Number.isInteger(e)&&e>0&&(t.discsTotal??(t.discsTotal=e))}break;case"DATE":{const e=new Date(d);Number.isNaN(e.getTime())||(t.date??(t.date=e))}break;case"GENRE":t.genre??(t.genre=d);break;case"METADATA_BLOCK_PICTURE":{const e=ee(d),i=c(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=l.decode(e.subarray(12+a,12+a+n)),u=i.getUint32(a+n+28),h=e.subarray(a+n+32,a+n+32+u);t.images??(t.images=[]),t.images.push({data:h,mimeType:s,kind:3===r?"coverFront":4===r?"coverBack":"unknown",name:void 0,description:o||void 0})}}}},xt=[2,1,2,3,3,4,4,5],Ct=e=>{if(e.length<7)return null;if(11!==e[0]||119!==e[1])return null;const t=new fe(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)}},Bt=[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],Et=[1,2,3,6],_t=e=>{if(e.length<6)return null;if(11!==e[0]||119!==e[1])return null;const t=new fe(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=Et[s];let d;d=a<3?ze[a]/1e3:Ue[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}]}},At=e=>{const t=e.substreams[0];return i(t),t.fscod<3?ze[t.fscod]:null!==t.fscod2&&t.fscod2<3?Ue[t.fscod2]:null},Ft=e=>{const t=e.substreams[0];i(t);let r=xt[t.acmod]+t.lfeon;if(t.numDepSub>0){const e=[2,2,1,1,2,2,2,1,1];for(let i=0;i<9;i++)t.chanLoc&1<<8-i&&(r+=e[i])}return r};class Rt{constructor(e){this.input=e}dispose(){}}const Dt=new Uint8Array(0);class Mt{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===Dt&&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===Dt}get microsecondTimestamp(){return Math.trunc(z*this.timestamp)}get microsecondDuration(){return Math.trunc(z*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("Your browser does not support EncodedVideoChunk.");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("Your browser does not support EncodedVideoChunk.");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("Your browser does not support EncodedAudioChunk.");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 Mt(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 Mt(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 Nt=e=>{const t=c(e);let i=0;const r=t.getUint8(i);i+=1,i+=3;const a=w(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;t<r;t++)s.push(w(e.subarray(i,i+16))),i+=16}}const n=t.getUint32(i);return i+=4,{systemId:a,keyIds:s,data:e.slice(i,i+n)}},Ot=(e,t)=>e.systemId===t.systemId&&((e,t)=>{if(e.length!==t.length)return!1;for(let i=0;i<e.length;i++)if(e[i]!==t[i])return!1;return!0})(e.data,t.data),Lt=e=>{let t=gn(e);const i=In(e,4);let r=8;1===t&&(t=wn(e),r=16);const a=t-r;return a<0?null:{name:i,totalSize:t,headerSize:r,contentSize:a}},zt=e=>bn(e)/65536,Ut=e=>bn(e)/1073741824,qt=e=>{let t=0;for(let i=0;i<4;i++){t<<=7;const i=un(e);if(t|=127&i,0===(128&i))break}return t},Wt=e=>{let t=hn(e);return e.skip(2),t=Math.min(t,e.remainingLength),l.decode(ln(e,t))},Vt=e=>{const t=Lt(e);if(!t||"data"!==t.name)return null;if(e.remainingLength<8)return null;const i=gn(e);e.skip(4);const r=ln(e,t.contentSize-8);switch(i){case 1:return l.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new ue(r,"image/jpeg");case 14:return new ue(r,"image/png");case 27:return new ue(r,"image/bmp");default:return r}},Ht=16,Kt=new Uint32Array(256),jt=new Uint32Array(256),Xt=new Uint32Array(256),$t=new Uint32Array(256),Qt=new Uint32Array(256),Gt=new Uint32Array(256),Yt=new Uint32Array(10);let Jt=!1;class Zt{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(Ht/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(Ht),this.out=new Uint8Array(Ht),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){i(16===e.byteLength),i(16===t.byteLength),Jt||(()=>{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);Kt[s]=t<<24|t<<16|t<<8|t,Gt[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);jt[s]=a,Xt[s]=a>>>8|a<<24,$t[s]=a>>>16|a<<16,Qt[s]=a>>>24|a<<8}let a=1;for(let s=0;s<10;s++)Yt[s]=a<<24,a=a<<1^(128&a?283:0);Jt=!0})();const r=new DataView(e.buffer,e.byteOffset,e.byteLength),a=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=r.getUint32(0,!1),this.roundkey[1]=r.getUint32(4,!1),this.roundkey[2]=r.getUint32(8,!1),this.roundkey[3]=r.getUint32(12,!1),this.iv[0]=a.getUint32(0,!1),this.iv[1]=a.getUint32(4,!1),this.iv[2]=a.getUint32(8,!1),this.iv[3]=a.getUint32(12,!1);for(let i=4;i<44;i+=4){const e=this.roundkey[i-1];this.roundkey[i]=this.roundkey[i-4]^4278190080&Kt[e>>>16&255]^16711680&Kt[e>>>8&255]^65280&Kt[e>>>0&255]^255&Kt[e>>>24&255]^Yt[i/4-1],this.roundkey[i+1]=this.roundkey[i-3]^this.roundkey[i],this.roundkey[i+2]=this.roundkey[i-2]^this.roundkey[i+1],this.roundkey[i+3]=this.roundkey[i-1]^this.roundkey[i+2]}for(let i=0,s=40;i<s;i+=4,s-=4)for(let e=0;e<4;e++){const t=this.roundkey[i+e];this.roundkey[i+e]=this.roundkey[s+e],this.roundkey[s+e]=t}for(let i=4;i<40;i+=4)for(let e=0;e<4;e++){const t=this.roundkey[i+e];this.roundkey[i+e]=jt[255&Kt[t>>>24&255]]^Xt[255&Kt[t>>>16&255]]^$t[255&Kt[t>>>8&255]]^Qt[255&Kt[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=jt[e>>>24]^Xt[r>>>16&255]^$t[i>>>8&255]^Qt[255&t]^this.roundkey[a],l=jt[t>>>24]^Xt[e>>>16&255]^$t[r>>>8&255]^Qt[255&i]^this.roundkey[a+1],u=jt[i>>>24]^Xt[t>>>16&255]^$t[e>>>8&255]^Qt[255&r]^this.roundkey[a+2],d=jt[r>>>24]^Xt[i>>>16&255]^$t[t>>>8&255]^Qt[255&e]^this.roundkey[a+3],e=c,t=l,i=u,r=d}const h=4278190080&Gt[e>>>24&255]^16711680&Gt[r>>>16&255]^65280&Gt[i>>>8&255]^255&Gt[t>>>0&255]^this.roundkey[40],f=4278190080&Gt[t>>>24&255]^16711680&Gt[e>>>16&255]^65280&Gt[r>>>8&255]^255&Gt[i>>>0&255]^this.roundkey[41],m=4278190080&Gt[i>>>24&255]^16711680&Gt[t>>>16&255]^65280&Gt[e>>>8&255]^255&Gt[r>>>0&255]^this.roundkey[42],p=4278190080&Gt[r>>>24&255]^16711680&Gt[i>>>16&255]^65280&Gt[t>>>8&255]^255&Gt[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 ei extends Rt{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;for(;;){let r=this.reader.requestSliceRange(e,8,16);if(r instanceof Promise&&(r=await r),!r)break;const a=e,s=Lt(r);if(!s)break;if("ftyp"===s.name||"styp"===s.name){const e=In(r,4);this.isQuickTime="qt "===e}else{if("moov"===s.name){let e=this.reader.requestSlice(r.filePos,s.contentSize);if(e instanceof Promise&&(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;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.');const e=await this.input._initInput._getDemuxer();if(e.constructor!==ei)throw new Error("Init input must match the input's format.");await e.readMetadata(),this.movieTimescale=e.movieTimescale,this.movieDurationInTimescale=e.movieDurationInTimescale,this.metadataTags=e.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=e.fragmentTrackDefaults,this.psshBoxes=e.psshBoxes;for(const t of e.tracks){const e={id:t.id,demuxer:this,trackBacking:null,disposition:t.disposition,timescale:t.timescale,durationInMediaTimescale:t.durationInMediaTimescale,durationInMovieTimescale:t.durationInMovieTimescale,rotation:t.rotation,internalCodecId:t.internalCodecId,name:t.name,languageCode:t.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:t.editListPreviousSegmentDurations,editListOffset:t.editListOffset,encryptionInfo:t.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:t.info};if(t.trackBacking)if(i(e.info),"video"===e.info.type&&-1!==e.info.width){const t=e;e.trackBacking=new ii(t),this.tracks.push(e)}else if("audio"===e.info.type&&-1!==e.info.numberOfChannels){const t=e;e.trackBacking=new ri(t),this.tracks.push(e)}}t=!1;break}}e=a+s.totalSize}if(t){i(null!==this.reader.fileSize);let e=this.reader.requestSlice(this.reader.fileSize-4,4);e instanceof Promise&&(e=await e),i(e);const t=gn(e),r=this.reader.fileSize-t;if(r>=0&&r<=this.reader.fileSize-16){let e=this.reader.requestSliceRange(r,8,16);if(e instanceof Promise&&(e=await e),e){const t=Lt(e);if(t&&"mfra"===t.name){let i=this.reader.requestSlice(e.filePos,t.contentSize);i instanceof Promise&&(i=await i),i&&this.readContiguousBoxes(i)}}}}})())}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;i(this.moovSlice);const r=this.moovSlice.slice(e.sampleTableByteOffset);this.currentTrack=e,this.traverseBox(r),this.currentTrack=null;if("audio"===e.info?.type&&e.info.codec&&be.includes(e.info.codec)&&0===t.sampleCompositionTimeOffsets.length){i("audio"===e.info?.type);const r=Be(e.info.codec),s=[],n=[];for(let i=0;i<t.sampleToChunk.length;i++){const o=t.sampleToChunk[i],c=t.sampleToChunk[i+1],l=(c?c.startChunkIndex:t.chunkOffsets.length)-o.startChunkIndex;for(let i=0;i<l;i++){const c=o.startSampleIndex+i*o.samplesPerChunk,l=c+o.samplesPerChunk,u=P(t.sampleTimingEntries,c,e=>e.startIndex),d=t.sampleTimingEntries[u],h=P(t.sampleTimingEntries,l,e=>e.startIndex),f=t.sampleTimingEntries[h],m=d.startDecodeTimestamp+(c-d.startIndex)*d.delta,p=f.startDecodeTimestamp+(l-f.startIndex)*f.delta-m,g=a(s);g&&g.delta===p?g.count++:s.push({startIndex:o.startChunkIndex+i,startDecodeTimestamp:m,count:1,delta:p});const k=o.samplesPerChunk*r.sampleSize*e.info.numberOfChannels;n.push(k)}o.startSampleIndex=o.startChunkIndex,o.samplesPerChunk=1}t.sampleTimingEntries=s,t.sampleSizes=n}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(const e of t.sampleTimingEntries)for(let i=0;i<e.count;i++)t.presentationTimestamps.push({presentationTimestamp:e.startDecodeTimestamp+i*e.delta,sampleIndex:e.startIndex+i});for(const e of t.sampleCompositionTimeOffsets)for(let i=0;i<e.count;i++){const r=e.startIndex+i,a=t.presentationTimestamps[r];a&&(a.presentationTimestamp+=e.offset)}t.presentationTimestamps.sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;e<t.presentationTimestamps.length;e++)t.presentationTimestampIndexMap[t.presentationTimestamps[e].sampleIndex]=e}return t}async readFragment(e){if(this.lastReadFragment?.moofOffset===e)return this.lastReadFragment;let t=this.reader.requestSliceRange(e,8,16);t instanceof Promise&&(t=await t),i(t);const r=Lt(t);i("moof"===r?.name);let a=this.reader.requestSlice(e,r.totalSize);a instanceof Promise&&(a=await a),i(a),this.traverseBox(a);const s=this.lastReadFragment;i(s&&s.moofOffset===e);for(const[,i]of s.trackData){const e=i.track,{fragmentPositionCache:t}=e;if(!i.startTimestampIsFinal){const r=e.fragmentLookupTable.find(e=>e.moofOffset===s.moofOffset);if(r)ci(i,r.timestamp);else{const e=P(t,s.moofOffset-1,e=>e.moofOffset);if(-1!==e){const r=t[e];ci(i,r.endTimestamp)}}i.startTimestampIsFinal=!0}const r=P(t,i.startTimestamp,e=>e.startTimestamp);if(-1!==r&&t[r].moofOffset===s.moofOffset||t.splice(r+1,0,{moofOffset:s.moofOffset,startTimestamp:i.startTimestamp,endTimestamp:i.endTimestamp}),i.encryptionAuxInfo&&e.encryptionInfo){const t=await hi(this.reader,e.encryptionInfo,i.encryptionAuxInfo);for(let e=0;e<Math.min(i.samples.length,t.length);e++){const r=t[e];i.samples[e].encryption=r}}}return s}readContiguousBoxes(e){const t=e.filePos;for(;e.filePos-t<=e.length-8;){if(!this.traverseBox(e))break}}*iterateContiguousBoxes(e){const t=e.filePos;for(;e.filePos-t<=e.length-8;){const t=e.filePos,i=Lt(e);if(!i)break;yield{boxInfo:i,slice:e},e.filePos=t+i.totalSize}}traverseBox(e){var t,s,n,o,u,d,f,p,k,b,y,T,S,P,v,I,x,C,B,E,_,A,F,D,M,N,O,z,U,q,W,V,H;const K=e.filePos,j=Lt(e);if(!j)return!1;const X=e.filePos,$=K+j.totalSize;switch(j.name){case"mdia":case"minf":case"dinf":case"mfra":case"edts":case"sinf":case"schi":case"wave":this.readContiguousBoxes(e.slice(X,j.contentSize));break;case"mvhd":{const t=un(e);e.skip(3),1===t?(e.skip(16),this.movieTimescale=gn(e),this.movieDurationInTimescale=wn(e)):(e.skip(8),this.movieTimescale=gn(e),this.movieDurationInTimescale=gn(e))}break;case"trak":{const t={id:-1,demuxer:this,trackBacking:null,disposition:{...he,primary:!1},info:null,timescale:-1,durationInMovieTimescale:-1,durationInMediaTimescale:-1,rotation:0,internalCodecId:null,name:null,languageCode:R,sampleTableByteOffset:-1,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:0,editListOffset:0,encryptionInfo:null,encryptionAuxInfo:null,frmaCodecString:null};if(this.currentTrack=t,this.readContiguousBoxes(e.slice(X,j.contentSize)),-1!==t.id&&-1!==t.timescale&&null!==t.info)if("video"===t.info.type&&-1!==t.info.width){const e=t;t.trackBacking=new ii(e),this.tracks.push(t)}else if("audio"===t.info.type&&-1!==t.info.numberOfChannels){const e=t;t.trackBacking=new ri(e),this.tracks.push(t)}this.currentTrack=null}break;case"tkhd":{const t=this.currentTrack;if(!t)break;const a=un(e),s=!!(1&fn(e));if(t.disposition.default=s,0===a)e.skip(8),t.id=gn(e),e.skip(4),t.durationInMovieTimescale=gn(e);else{if(1!==a)throw new Error(`Incorrect track header version ${a}.`);e.skip(16),t.id=gn(e),e.skip(4),t.durationInMovieTimescale=wn(e)}e.skip(16);const n=[zt(e),zt(e),Ut(e),zt(e),zt(e),Ut(e),zt(e),zt(e),Ut(e)],o=r((Q=li(n),G=90,Math.round(Q/G)*G));i(0===o||90===o||180===o||270===o),t.rotation=o}break;case"elst":{const t=this.currentTrack;if(!t)break;const i=un(e);e.skip(3);let r=!1,a=0;const s=gn(e);for(let n=0;n<s;n++){const s=1===i?wn(e):gn(e),n=1===i?Tn(e):bn(e),o=zt(e);if(0!==s){if(r){console.warn("Unsupported edit list: multiple edits are not currently supported. Only using first edit.");break}if(-1!==n){if(1!==o){console.warn("Unsupported edit list entry: media rate must be 1.");break}t.editListPreviousSegmentDurations=a,t.editListOffset=n,r=!0}else a+=s}}}break;case"mdhd":{const t=this.currentTrack;if(!t)break;const i=un(e);e.skip(3),0===i?(e.skip(8),t.timescale=gn(e),t.durationInMediaTimescale=gn(e)):1===i&&(e.skip(16),t.timescale=gn(e),t.durationInMediaTimescale=wn(e));let r=hn(e);if(r>0){t.languageCode="";for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(31&r))+t.languageCode,r>>=5;L(t.languageCode)||(t.languageCode=R)}}break;case"hdlr":{const t=this.currentTrack;if(!t)break;e.skip(8);const i=In(e,4);"vide"===i?t.info={type:"video",width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}:"soun"===i&&(t.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{const t=this.currentTrack;if(!t)break;t.sampleTableByteOffset=K,this.readContiguousBoxes(e.slice(X,j.contentSize))}break;case"stsd":{const t=this.currentTrack;if(!t)break;if(null===t.info||t.sampleTable)break;const i=un(e);e.skip(3);const r=gn(e);for(let a=0;a<r;a++){const r=e.filePos,a=Lt(e);if(!a)break;t.internalCodecId=a.name;const s=a.name.toLowerCase();if("video"===t.info.type){e.skip(24),t.info.width=hn(e),t.info.height=hn(e),t.info.squarePixelWidth=t.info.width,t.info.squarePixelHeight=t.info.height,e.skip(50),t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+a.totalSize-e.filePos));const i="encv"===s?t.frmaCodecString:s;t.frmaCodecString=null,"avc1"===i||"avc3"===i?(t.info.codec="avc",t.info.avcType="avc1"===i?1:3):"hvc1"===i||"hev1"===i?t.info.codec="hevc":"vp08"===i?t.info.codec="vp8":"vp09"===i?t.info.codec="vp9":"av01"===i?t.info.codec="av1":null===i?console.warn("Unknown encrypted video codec due to missing frma box."):console.warn(`Unsupported video codec (sample entry type '${a.name}').`)}else{e.skip(8);const n=hn(e);e.skip(6);let o=hn(e),c=hn(e);e.skip(4);let l=gn(e)/65536,u=null;0===i&&n>0&&(1===n?(e.skip(4),c=8*gn(e),e.skip(8)):2===n&&(e.skip(4),l=vn(e),o=gn(e),e.skip(4),c=gn(e),u=gn(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=xe;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("twos"===d)8===c?t.info.codec="pcm-s8":16===c?t.info.codec=t.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(console.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":(console.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":(console.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":(console.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":(console.warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):32===e?t.info.codec="pcm-f32be":64===e?t.info.codec="pcm-f64be":(console.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<<e-1?1===e?t.info.codec="pcm-s8":2===e?t.info.codec=r?"pcm-s16be":"pcm-s16":3===e?t.info.codec=r?"pcm-s24be":"pcm-s24":4===e&&(t.info.codec=r?"pcm-s32be":"pcm-s32"):1===e&&(t.info.codec="pcm-u8")),null===t.info.codec&&console.warn("Unsupported PCM format.")}else null===d?console.warn("Unknown encrypted audio codec due to missing frma box."):console.warn(`Unsupported audio codec (sample entry type '${a.name}').`)}e.filePos=r+a.totalSize}}break;case"frma":{const t=this.currentTrack;if(!t)break;const i=In(e,4).toLowerCase();t.frmaCodecString=i}break;case"schm":{const t=this.currentTrack;if(!t)break;e.skip(4);const i=In(e,4);"cenc"===i||"cens"===i||"cbcs"===i?t.encryptionInfo={scheme:i,defaultKid:null,defaultIsProtected:null,defaultPerSampleIvSize:null,defaultConstantIv:null,defaultCryptByteBlock:null,defaultSkipByteBlock:null}:console.warn(`Unsupported encryption scheme '${i}'.`)}break;case"tenc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=un(e);e.skip(3),e.skip(1);const r=un(e);if(i>0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=15&r):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=0!==un(e),t.encryptionInfo.defaultPerSampleIvSize=un(e),t.encryptionInfo.defaultKid=w(ln(e,16)),t.encryptionInfo.defaultIsProtected&&0===t.encryptionInfo.defaultPerSampleIvSize){const i=un(e),r=new Uint8Array(16);r.set(ln(e,i),0),t.encryptionInfo.defaultConstantIv=r}}break;case"avcC":{const t=this.currentTrack;if(!t)break;i(t.info),t.info.codecDescription=ln(e,j.contentSize)}break;case"hvcC":{const t=this.currentTrack;if(!t)break;i(t.info),t.info.codecDescription=ln(e,j.contentSize)}break;case"vpcC":{const t=this.currentTrack;if(!t)break;i("video"===t.info?.type),e.skip(4);const r=un(e),a=un(e),s=un(e),n=s>>4,o=s>>1&7,c=1&s,l=un(e),u=un(e),d=un(e);t.info.vp9CodecInfo={profile:r,level:a,bitDepth:n,chromaSubsampling:o,videoFullRangeFlag:c,colourPrimaries:l,transferCharacteristics:u,matrixCoefficients:d}}break;case"av1C":{const t=this.currentTrack;if(!t)break;i("video"===t.info?.type),e.skip(1);const r=un(e),a=r>>5,s=31&r,n=un(e),o=n>>7,c=n>>6&1,l=n>>4&1,u=n>>3&1,d=n>>2&1,h=3&n,f=2===a&&c?n>>5&1?12:10:c?10:8;t.info.av1CodecInfo={profile:a,level:s,tier:o,bitDepth:f,monochrome:l,chromaSubsamplingX:u,chromaSubsamplingY:d,chromaSamplePosition:h}}break;case"colr":{const t=this.currentTrack;if(!t)break;i("video"===t.info?.type);if("nclx"!==In(e,4))break;const r=hn(e),a=hn(e),s=hn(e),n=Boolean(128&un(e));t.info.colorSpace={primaries:h[r],transfer:m[a],matrix:g[s],fullRange:n}}break;case"pasp":{const t=this.currentTrack;if(!t)break;i("video"===t.info?.type);const r=gn(e),a=gn(e);r>0&&a>0&&(r>a?t.info.squarePixelWidth=Math.round(t.info.width*r/a):t.info.squarePixelHeight=Math.round(t.info.height*a/r))}break;case"esds":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type),e.skip(4);i(3===un(e)),qt(e),e.skip(2);const r=un(e),a=0!==(64&r),s=0!==(32&r);if(0!==(128&r)&&e.skip(2),a){const t=un(e);e.skip(t)}s&&e.skip(2);i(4===un(e));const n=qt(e),o=e.filePos,c=un(e);if(64===c||103===c?(t.info.codec="aac",t.info.aacCodecInfo={isMpeg2:103===c,objectType:null}):105===c||107===c?t.info.codec="mp3":221===c?t.info.codec="vorbis":console.warn(`Unsupported audio codec (objectTypeIndication ${c}) - discarding track.`),e.skip(12),n>e.filePos-o){i(5===un(e));const r=qt(e);if(t.info.codecDescription=ln(e,r),"aac"===t.info.codec){const e=ge(t.info.codecDescription);null!==e.numberOfChannels&&(t.info.numberOfChannels=e.numberOfChannels),null!==e.sampleRate&&(t.info.sampleRate=e.sampleRate)}}}break;case"enda":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type),t.info.pcmLittleEndian=!!(255&hn(e))}break;case"pcmC":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type),e.skip(4);const r=un(e);t.info.pcmLittleEndian=Boolean(1&r),t.info.pcmSampleSize=un(e)}break;case"dOps":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type),e.skip(1);const r=un(e),a=hn(e),s=gn(e),n=mn(e),o=un(e);let c;c=0!==o?ln(e,2+r):new Uint8Array(0);const l=new Uint8Array(19+c.byteLength),u=new DataView(l.buffer);u.setUint32(0,1332770163,!1),u.setUint32(4,1214603620,!1),u.setUint8(8,1),u.setUint8(9,r),u.setUint16(10,a,!0),u.setUint32(12,s,!0),u.setInt16(16,n,!0),u.setUint8(18,o),l.set(c,19),t.info.codecDescription=l,t.info.numberOfChannels=r}break;case"dfLa":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type),e.skip(4);const r=127,a=128,s=e.filePos;for(;e.filePos<$;){const i=un(e),s=fn(e);if((i&r)===Pt.STREAMINFO){e.skip(10);const i=gn(e),r=i>>>12,a=1+(i>>9&7);t.info.sampleRate=r,t.info.numberOfChannels=a,e.skip(20)}else e.skip(s);if(i&a)break}const n=e.filePos;e.filePos=s;const o=ln(e,n-s),c=new Uint8Array(4+o.byteLength);new DataView(c.buffer).setUint32(0,1716281667,!1),c.set(o,4),t.info.codecDescription=c}break;case"dac3":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type);const r=ln(e,3),a=new fe(r),s=a.readBits(2);a.skipBits(8);const n=a.readBits(3),o=a.readBits(1);s<3&&(t.info.sampleRate=ze[s]),t.info.numberOfChannels=xt[n]+o}break;case"dec3":{const t=this.currentTrack;if(!t)break;i("audio"===t.info?.type);const r=(e=>{if(e.length<2)return null;const t=new fe(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}})(ln(e,j.contentSize));if(!r){console.warn("Invalid dec3 box contents, ignoring.");break}const a=At(r);null!==a&&(t.info.sampleRate=a),t.info.numberOfChannels=Ft(r)}break;case"stts":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e);let r=0,a=0;for(let s=0;s<i;s++){const i=gn(e),s=gn(e);t.sampleTable.sampleTimingEntries.push({startIndex:r,startDecodeTimestamp:a,count:i,delta:s}),r+=i,a+=i*s}}break;case"ctts":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e);let r=0;for(let a=0;a<i;a++){const i=gn(e),a=bn(e);t.sampleTable.sampleCompositionTimeOffsets.push({startIndex:r,count:i,offset:a}),r+=i}}break;case"stsz":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e),r=gn(e);if(0===i)for(let a=0;a<r;a++){const i=gn(e);t.sampleTable.sampleSizes.push(i)}else t.sampleTable.sampleSizes.push(i)}break;case"stz2":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4),e.skip(3);const i=un(e),r=gn(e),a=ln(e,Math.ceil(r*i/8)),s=new fe(a);for(let e=0;e<r;e++){const e=s.readBits(i);t.sampleTable.sampleSizes.push(e)}}break;case"stss":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4),t.sampleTable.keySampleIndices=[];const i=gn(e);for(let r=0;r<i;r++){const i=gn(e)-1;t.sampleTable.keySampleIndices.push(i)}0!==t.sampleTable.keySampleIndices[0]&&t.sampleTable.keySampleIndices.unshift(0)}break;case"stsc":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e);for(let a=0;a<i;a++){const i=gn(e)-1,r=gn(e),a=gn(e);t.sampleTable.sampleToChunk.push({startSampleIndex:-1,startChunkIndex:i,samplesPerChunk:r,sampleDescriptionIndex:a})}let r=0;for(let e=0;e<t.sampleTable.sampleToChunk.length;e++)if(t.sampleTable.sampleToChunk[e].startSampleIndex=r,e<t.sampleTable.sampleToChunk.length-1){r+=(t.sampleTable.sampleToChunk[e+1].startChunkIndex-t.sampleTable.sampleToChunk[e].startChunkIndex)*t.sampleTable.sampleToChunk[e].samplesPerChunk}}break;case"stco":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e);for(let r=0;r<i;r++){const i=gn(e);t.sampleTable.chunkOffsets.push(i)}}break;case"co64":{const t=this.currentTrack;if(!t)break;if(!t.sampleTable)break;e.skip(4);const i=gn(e);for(let r=0;r<i;r++){const i=wn(e);t.sampleTable.chunkOffsets.push(i)}}break;case"mvex":this.isFragmented=!0,this.readContiguousBoxes(e.slice(X,j.contentSize));break;case"mehd":{const t=un(e);e.skip(3);const i=1===t?wn(e):gn(e);this.movieDurationInTimescale=i}break;case"trex":{e.skip(4);const t=gn(e),i=gn(e),r=gn(e),a=gn(e),s=gn(e);this.fragmentTrackDefaults.push({trackId:t,defaultSampleDescriptionIndex:i,defaultSampleDuration:r,defaultSampleSize:a,defaultSampleFlags:s})}break;case"tfra":{const t=un(e);e.skip(3);const i=gn(e),r=this.tracks.find(e=>e.id===i);if(!r)break;const a=gn(e),s=(12&a)>>2,n=3&a,o=[un,hn,fn,gn],c=o[(48&a)>>4],l=o[s],u=o[n],d=gn(e);for(let h=0;h<d;h++){const i=1===t?wn(e):gn(e),a=1===t?wn(e):gn(e);c(e),l(e),u(e),r.fragmentLookupTable.push({timestamp:i,moofOffset:a})}r.fragmentLookupTable.sort((e,t)=>e.timestamp-t.timestamp);for(let e=0;e<r.fragmentLookupTable.length-1;e++){const t=r.fragmentLookupTable[e],i=r.fragmentLookupTable[e+1];t.timestamp===i.timestamp&&(r.fragmentLookupTable.splice(e+1,1),e--)}}break;case"moof":this.currentFragment={moofOffset:K,moofSize:j.totalSize,implicitBaseDataOffset:K,trackData:new Map,psshBoxes:[]},this.readContiguousBoxes(e.slice(X,j.contentSize)),this.lastReadFragment=this.currentFragment,this.currentFragment=null;break;case"traf":if(i(this.currentFragment),this.readContiguousBoxes(e.slice(X,j.contentSize)),this.currentTrack){const e=this.currentFragment.trackData.get(this.currentTrack.id);if(e){this.currentFragment.implicitBaseDataOffset=e.currentOffset,e.presentationTimestamps=e.samples.map((e,t)=>({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let i=0;i<e.presentationTimestamps.length;i++){const t=e.presentationTimestamps[i],r=e.samples[t.sampleIndex];if(null===e.firstKeyFrameTimestamp&&r.isKeyFrame&&(e.firstKeyFrameTimestamp=r.presentationTimestamp),i<e.presentationTimestamps.length-1){const a=e.presentationTimestamps[i+1].presentationTimestamp-t.presentationTimestamp;r.duration=a}}const t=e.samples[e.presentationTimestamps[0].sampleIndex],r=e.samples[a(e.presentationTimestamps).sampleIndex];e.startTimestamp=t.presentationTimestamp,e.endTimestamp=r.presentationTimestamp+r.duration;const{currentFragmentState:s}=this.currentTrack;i(s),null!==s.startTimestamp&&(ci(e,s.startTimestamp),e.startTimestampIsFinal=!0),s.encryptionAuxInfo&&!e.samples[0].encryption&&(e.encryptionAuxInfo=s.encryptionAuxInfo)}this.currentTrack.currentFragmentState=null,this.currentTrack=null}break;case"pssh":{if(this.input._formatOptions.isobmff?._suppressPsshParsing)break;const t=Nt(ln(e,j.contentSize));this.currentFragment?this.currentFragment.psshBoxes.push(t):this.currentTrack||this.psshBoxes.push(t)}break;case"tfhd":{i(this.currentFragment),e.skip(1);const t=fn(e),r=Boolean(1&t),a=Boolean(2&t),s=Boolean(8&t),n=Boolean(16&t),o=Boolean(32&t),c=Boolean(65536&t),l=Boolean(131072&t),u=gn(e),d=this.tracks.find(e=>e.id===u);if(!d)break;const h=this.fragmentTrackDefaults.find(e=>e.trackId===u);this.currentTrack=d,d.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},r?d.currentFragmentState.baseDataOffset=wn(e):l&&(d.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),a&&(d.currentFragmentState.sampleDescriptionIndex=gn(e)),s&&(d.currentFragmentState.defaultSampleDuration=gn(e)),n&&(d.currentFragmentState.defaultSampleSize=gn(e)),o&&(d.currentFragmentState.defaultSampleFlags=gn(e)),c&&(d.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{const t=this.currentTrack;if(!t)break;i(t.currentFragmentState);const r=un(e);e.skip(3);const a=0===r?gn(e):wn(e);t.currentFragmentState.startTimestamp=a}break;case"trun":{const t=this.currentTrack;if(!t)break;i(this.currentFragment),i(t.currentFragmentState);const r=un(e),a=fn(e),s=Boolean(1&a),n=Boolean(4&a),o=Boolean(256&a),c=Boolean(512&a),l=Boolean(1024&a),u=Boolean(2048&a),d=gn(e);let h=null;s&&(h=bn(e));let f,m=null;if(n&&(m=gn(e)),this.currentFragment.trackData.has(t.id)?(f=this.currentFragment.trackData.get(t.id),null!==h&&(f.currentOffset=t.currentFragmentState.baseDataOffset+h)):(f={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,f)),0===d){this.currentFragment.implicitBaseDataOffset=f.currentOffset;break}for(let p=0;p<d;p++){let a,s,n;o?a=gn(e):(i(null!==t.currentFragmentState.defaultSampleDuration),a=t.currentFragmentState.defaultSampleDuration),c?s=gn(e):(i(null!==t.currentFragmentState.defaultSampleSize),s=t.currentFragmentState.defaultSampleSize),l?n=gn(e):(i(null!==t.currentFragmentState.defaultSampleFlags),n=t.currentFragmentState.defaultSampleFlags),0===p&&null!==m&&(n=m);let d=0;u&&(d=0===r?gn(e):bn(e));const h=!(65536&n);f.samples.push({presentationTimestamp:f.currentTimestamp+d,duration:a,byteOffset:f.currentOffset,byteSize:s,isKeyFrame:h,encryption:null}),f.currentOffset+=s,f.currentTimestamp+=a}}break;case"saiz":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;e.skip(1);if(1&fn(e)){const i=In(e,4),r=gn(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const i=un(e),r=gn(e);let a=null;0===i&&r>0&&(a=ln(e,r));const s=di(t);s.defaultSampleInfoSize=i,s.sampleSizes=a,s.sampleCount=r}break;case"saio":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;const i=un(e);if(1&fn(e)){const i=In(e,4),r=gn(e);if(i!==t.encryptionInfo.scheme||0!==r)break}const r=gn(e);if(0===r)break;r>1&&console.warn("Multiple saio entries are not supported; using the first offset only.");let a=0===i?gn(e):Number(wn(e));this.currentFragment&&(a+=this.currentFragment.moofOffset);di(t).offset=a}break;case"senc":{const t=this.currentTrack;if(!t||!t.encryptionInfo)break;i(this.currentFragment);const r=this.currentFragment.trackData.get(t.id);if(!r)break;e.skip(1);const a=fn(e),s=Boolean(2&a),n=gn(e),o=t.encryptionInfo.defaultPerSampleIvSize;i(null!==o);for(let i=0;i<Math.min(n,r.samples.length);i++){const a=new Uint8Array(16);o>0?a.set(ln(e,o),0):a.set(t.encryptionInfo.defaultConstantIv,0);let n=null;if(s){const t=hn(e);n=[];for(let i=0;i<t;i++){const t=hn(e),i=gn(e);n.push({clearLen:t,protectedLen:i})}}r.samples[i].encryption={iv:a,subsamples:n}}}break;case"udta":{const i=this.iterateContiguousBoxes(e.slice(X,j.contentSize));for(const{boxInfo:e,slice:r}of i){if("meta"!==e.name&&!this.currentTrack){const i=r.filePos;(t=this.metadataTags).raw??(t.raw={}),"\xa9"===e.name[0]?(s=this.metadataTags.raw)[n=e.name]??(s[n]=Wt(r)):(o=this.metadataTags.raw)[u=e.name]??(o[u]=ln(r,e.contentSize)),r.filePos=i}switch(e.name){case"meta":r.skip(-e.headerSize),this.traverseBox(r);break;case"\xa9nam":case"name":this.currentTrack?this.currentTrack.name=l.decode(ln(r,e.contentSize)):(d=this.metadataTags).title??(d.title=Wt(r));break;case"\xa9des":this.currentTrack||((f=this.metadataTags).description??(f.description=Wt(r)));break;case"\xa9ART":this.currentTrack||((p=this.metadataTags).artist??(p.artist=Wt(r)));break;case"\xa9alb":this.currentTrack||((k=this.metadataTags).album??(k.album=Wt(r)));break;case"albr":this.currentTrack||((b=this.metadataTags).albumArtist??(b.albumArtist=Wt(r)));break;case"\xa9gen":this.currentTrack||((y=this.metadataTags).genre??(y.genre=Wt(r)));break;case"\xa9day":if(!this.currentTrack){const e=new Date(Wt(r));Number.isNaN(e.getTime())||((T=this.metadataTags).date??(T.date=e))}break;case"\xa9cmt":this.currentTrack||((S=this.metadataTags).comment??(S.comment=Wt(r)));break;case"\xa9lyr":this.currentTrack||((P=this.metadataTags).lyrics??(P.lyrics=Wt(r)))}}}break;case"meta":{if(this.currentTrack)break;const t=0!==gn(e);this.currentMetadataKeys=new Map,t?this.readContiguousBoxes(e.slice(X,j.contentSize)):this.readContiguousBoxes(e.slice(X+4,j.contentSize-4)),this.currentMetadataKeys=null}break;case"keys":{if(!this.currentMetadataKeys)break;e.skip(4);const t=gn(e);for(let i=0;i<t;i++){const t=gn(e);e.skip(4);const r=l.decode(ln(e,t-8));this.currentMetadataKeys.set(i+1,r)}}break;case"ilst":{if(!this.currentMetadataKeys)break;const t=this.iterateContiguousBoxes(e.slice(X,j.contentSize));for(const{boxInfo:e,slice:i}of t){let t=e.name;const r=(t.charCodeAt(0)<<24)+(t.charCodeAt(1)<<16)+(t.charCodeAt(2)<<8)+t.charCodeAt(3);this.currentMetadataKeys.has(r)&&(t=this.currentMetadataKeys.get(r));const a=Vt(i);switch((v=this.metadataTags).raw??(v.raw={}),(I=this.metadataTags.raw)[t]??(I[t]=a),t){case"\xa9nam":case"titl":case"com.apple.quicktime.title":case"title":"string"===typeof a&&((x=this.metadataTags).title??(x.title=a));break;case"\xa9des":case"desc":case"dscp":case"com.apple.quicktime.description":case"description":"string"===typeof a&&((C=this.metadataTags).description??(C.description=a));break;case"\xa9ART":case"com.apple.quicktime.artist":case"artist":"string"===typeof a&&((B=this.metadataTags).artist??(B.artist=a));break;case"\xa9alb":case"albm":case"com.apple.quicktime.album":case"album":"string"===typeof a&&((E=this.metadataTags).album??(E.album=a));break;case"aART":case"album_artist":"string"===typeof a&&((_=this.metadataTags).albumArtist??(_.albumArtist=a));break;case"\xa9cmt":case"com.apple.quicktime.comment":case"comment":"string"===typeof a&&((A=this.metadataTags).comment??(A.comment=a));break;case"\xa9gen":case"gnre":case"com.apple.quicktime.genre":case"genre":"string"===typeof a&&((F=this.metadataTags).genre??(F.genre=a));break;case"\xa9lyr":case"lyrics":"string"===typeof a&&((D=this.metadataTags).lyrics??(D.lyrics=a));break;case"\xa9day":case"rldt":case"com.apple.quicktime.creationdate":case"date":if("string"===typeof a){const e=new Date(a);Number.isNaN(e.getTime())||((M=this.metadataTags).date??(M.date=e))}break;case"covr":case"com.apple.quicktime.artwork":a instanceof ue?((N=this.metadataTags).images??(N.images=[]),this.metadataTags.images.push({data:a.data,kind:"coverFront",mimeType:a.mimeType})):a instanceof Uint8Array&&((O=this.metadataTags).images??(O.images=[]),this.metadataTags.images.push({data:a,kind:"coverFront",mimeType:"image/*"}));break;case"track":if("string"===typeof a){const e=a.split("/"),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&((z=this.metadataTags).trackNumber??(z.trackNumber=t)),i&&Number.isInteger(i)&&i>0&&((U=this.metadataTags).tracksTotal??(U.tracksTotal=i))}break;case"trkn":if(a instanceof Uint8Array&&a.length>=6){const e=c(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((q=this.metadataTags).trackNumber??(q.trackNumber=t)),i>0&&((W=this.metadataTags).tracksTotal??(W.tracksTotal=i))}break;case"disc":case"disk":if(a instanceof Uint8Array&&a.length>=6){const e=c(a),t=e.getUint16(2,!1),i=e.getUint16(4,!1);t>0&&((V=this.metadataTags).discNumber??(V.discNumber=t)),i>0&&((H=this.metadataTags).discsTotal??(H.discsTotal=i))}}}}}var Q,G;return e.filePos=$,!0}}class ti{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}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;i(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 D(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=ai(r,i),s=await this.fetchPacketForSampleIndex(a,t);return ui(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=P(t.presentationTimestamps,i,e=>e.presentationTimestamp);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i<t.endTimestamp}},i,i,t):s}async getNextPacket(e,t){const i=this.packetToSampleIndex.get(e);if(void 0!==i)return this.fetchPacketForSampleIndex(i+1,t);const r=this.packetToFragmentLocation.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");return this.performFragmentedLookup(r.fragment,e=>{if(e===r.fragment){const t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1<t.samples.length)return{sampleIndex:r.sampleIndex+1,correctSampleFound:!0}}else{if(e.trackData.get(this.internalTrack.id))return{sampleIndex:0,correctSampleFound:!0}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){const i=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=si(r,i),s=await this.fetchPacketForSampleIndex(a,t);return ui(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=C(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=i);return{sampleIndex:-1!==r?t.presentationTimestamps[r].sampleIndex:-1,correctSampleFound:-1!==r&&i<t.endTimestamp}},i,i,t):s}async getNextKeyPacket(e,t){const r=this.packetToSampleIndex.get(e);if(void 0!==r){const e=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=oi(e,r);return this.fetchPacketForSampleIndex(i,t)}const a=this.packetToFragmentLocation.get(e);if(void 0===a)throw new Error("Packet was not created from this track.");return this.performFragmentedLookup(a.fragment,e=>{if(e===a.fragment){const t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>a.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 i(-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 r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=ni(r,e);if(!a)return null;let s;if(t.metadataOnly)s=Dt;else{let t=this.internalTrack.demuxer.reader.requestSlice(a.sampleOffset,a.sampleSize);if(t instanceof Promise&&(t=await t),!t)return null;if(s=ln(t,a.sampleSize),this.internalTrack.encryptionAuxInfo){i(this.internalTrack.encryptionInfo);const t=await hi(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);e<t.length&&(s=await fi(this.internalTrack,t[e],s,null))}}const n=(a.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=a.duration/this.internalTrack.timescale,c=new Mt(s,a.isKeyFrame?"key":"delta",n,o,e,a.sampleSize);return this.packetToSampleIndex.set(c,e),c}async fetchPacketInFragment(e,t,r){if(-1===t)return null;const a=e.trackData.get(this.internalTrack.id).samples[t];let s;if(i(a),r.metadataOnly)s=Dt;else{let t=this.internalTrack.demuxer.reader.requestSlice(a.byteOffset,a.byteSize);if(t instanceof Promise&&(t=await t),!t)return null;s=ln(t,a.byteSize),a.encryption&&(s=await fi(this.internalTrack,a.encryption,s,e))}const n=(a.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=a.duration/this.internalTrack.timescale,c=new Mt(s,a.isKeyFrame?"key":"delta",n,o,e.moofOffset+t,a.byteSize);return this.packetToFragmentLocation.set(c,{fragment:e,sampleIndex:t}),c}async performFragmentedLookup(e,t,r,a,s){const n=this.internalTrack.demuxer;let o=null,c=null,l=-1;if(e){const{sampleIndex:i,correctSampleFound:r}=t(e);if(r)return this.fetchPacketInFragment(e,i,s);-1!==i&&(c=e,l=i)}const u=P(this.internalTrack.fragmentLookupTable,r,e=>e.timestamp),d=-1!==u?this.internalTrack.fragmentLookupTable[u]:null,h=P(this.internalTrack.fragmentPositionCache,r,e=>e.startTimestamp),f=-1!==h?this.internalTrack.fragmentPositionCache[h]:null,m=Math.max(d?.moofOffset??0,f?.moofOffset??0)||null;let p;for(e?null===m||e.moofOffset>=m?(p=e.moofOffset+e.moofSize,o=e):p=m:p=m??0;;){if(o){const e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>a)break}let e=n.reader.requestSliceRange(p,8,16);if(e instanceof Promise&&(e=await e),!e)break;const i=p,r=Lt(e);if(!r)break;if("moof"===r.name){o=await n.readFragment(i);const{sampleIndex:e,correctSampleFound:r}=t(o);if(r)return this.fetchPacketInFragment(o,e,s);-1!==e&&(c=o,l=e)}p=i+r.totalSize}if(d&&(!c||c.moofOffset<d.moofOffset)){const e=this.internalTrack.fragmentLookupTable[u-1];i(!e||e.timestamp<d.timestamp);const r=e?.timestamp??-1/0;return this.performFragmentedLookup(null,t,r,a,s)}return c?this.fetchPacketInFragment(c,l,s):null}}class ii extends ti{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"video"}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return!1}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{if("vp9"!==this.internalTrack.info.codec||this.internalTrack.info.vp9CodecInfo){if("av1"===this.internalTrack.info.codec&&!this.internalTrack.info.av1CodecInfo){const e=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=e&&yt(e.data)}}else{const e=await this.getFirstPacket({});this.internalTrack.info.vp9CodecInfo=e&&kt(e.data)}const e={codec:ve(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??void 0};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(e.displayAspectWidth=this.internalTrack.info.squarePixelWidth,e.displayAspectHeight=this.internalTrack.info.squarePixelHeight),e})()):null}}class ri extends ti{constructor(e){super(e),this.decoderConfig=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.decoderConfig??(this.decoderConfig={codec:Ie(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}):null}}const ai=(e,t)=>{if(e.presentationTimestamps){const i=P(e.presentationTimestamps,t,e=>e.presentationTimestamp);return-1===i?-1:e.presentationTimestamps[i].sampleIndex}{const i=P(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)}},si=(e,t)=>{if(!e.keySampleIndices)return ai(e,t);if(e.presentationTimestamps){const i=P(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!==S(e.keySampleIndices,i,e=>e))return i}return-1}{const i=ai(e,t),r=P(e.keySampleIndices,i,e=>e);return e.keySampleIndices[r]??-1}},ni=(e,t)=>{const r=P(e.sampleTimingEntries,t,e=>e.startIndex),a=e.sampleTimingEntries[r];if(!a||a.startIndex+a.count<=t)return null;let s=a.startDecodeTimestamp+(t-a.startIndex)*a.delta;const n=P(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),o=e.sampleCompositionTimeOffsets[n];o&&t-o.startIndex<o.count&&(s+=o.offset);const c=e.sampleSizes[Math.min(t,e.sampleSizes.length-1)],l=P(e.sampleToChunk,t,e=>e.startSampleIndex),u=e.sampleToChunk[l];i(u);const d=u.startChunkIndex+Math.floor((t-u.startSampleIndex)/u.samplesPerChunk),h=e.chunkOffsets[d],f=u.startSampleIndex+(d-u.startChunkIndex)*u.samplesPerChunk;let m=0,p=h;if(1===e.sampleSizes.length)p+=c*(t-f),m+=c*u.samplesPerChunk;else for(let i=f;i<f+u.samplesPerChunk;i++){const r=e.sampleSizes[i];i<t&&(p+=r),m+=r}let g=a.delta;if(e.presentationTimestamps){const r=e.presentationTimestampIndexMap[t];if(i(void 0!==r),r<e.presentationTimestamps.length-1){g=e.presentationTimestamps[r+1].presentationTimestamp-s}}return{presentationTimestamp:s,duration:g,sampleOffset:p,sampleSize:c,chunkOffset:h,chunkSize:m,isKeyFrame:!e.keySampleIndices||-1!==S(e.keySampleIndices,t,e=>e)}},oi=(e,t)=>{if(!e.keySampleIndices)return t+1;const i=P(e.keySampleIndices,t,e=>e);return e.keySampleIndices[i+1]??-1},ci=(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},li=e=>{const[t,i]=e,r=Math.atan2(i,t);return Number.isFinite(r)?r*(180/Math.PI):0},ui=e=>0===e.sampleSizes.length,di=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})},hi=async(e,t,r)=>{if(r.resolved)return r.resolved;if(null===r.offset||0===r.sampleCount)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let a=0;if(r.defaultSampleInfoSize>0)a=r.defaultSampleInfoSize*r.sampleCount;else{i(r.sampleSizes);for(let e=0;e<r.sampleCount;e++)a+=r.sampleSizes[e]}let s=e.requestSlice(r.offset,a);if(s instanceof Promise&&(s=await s),!s)throw new Error("Failed to read auxiliary encryption info.");const n=t.defaultPerSampleIvSize;i(null!==n);const o=[];for(let i=0;i<r.sampleCount;i++){const e=r.defaultSampleInfoSize>0?r.defaultSampleInfoSize:r.sampleSizes[i],a=new Uint8Array(16);n>0?a.set(ln(s,n),0):a.set(t.defaultConstantIv,0);let c=null;if(e>n){const e=hn(s);c=[];for(let t=0;t<e;t++){const e=hn(s),t=gn(s);c.push({clearLen:e,protectedLen:t})}}o.push({iv:a,subsamples:c})}return r.resolved=o,o},fi=async(e,t,r,a)=>{i(e.encryptionInfo);const s=e.encryptionInfo;i(null!==s.defaultKid);const n=s.defaultKid;let o;const c=e.demuxer.decryptionKeyCache.get(n);if(c)o=await c;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(a){t=[...t,...a.psshBoxes].filter(e=>null===e.keyIds||e.keyIds.includes(n));for(let e=0;e<t.length-1;e++)for(let i=e+1;i<t.length;i++)Ot(t[e],t[i])&&(t.splice(i,1),i--)}const r=await e.demuxer.input._formatOptions.isobmff.resolveKeyId({keyId:n,psshBoxes:t});if(!("string"===typeof r&&32===r.length&&y.test(r)||r instanceof Uint8Array&&16===r.byteLength))throw new TypeError("resolveKeyId must return a 32-character hex string or a 16-byte Uint8Array containing the decryption key.");return r instanceof Uint8Array?r:(e=>{i(e.length%2===0);const t=new Uint8Array(e.length/2);for(let i=0;i<e.length;i+=2)t[i/2]=parseInt(e.slice(i,i+2),16);return t})(r)})();e.demuxer.decryptionKeyCache.set(n,t),o=await t}return"cenc"===s.scheme||"cens"===s.scheme?mi(o,s,t,r):pi(o,s,t,r)},mi=async(e,t,r,a)=>{const s=new Uint8Array(16);s.set(r.iv,0);const n=await crypto.subtle.importKey("raw",e,{name:"AES-CTR"},!1,["decrypt"]),o=async e=>{const t=await crypto.subtle.decrypt({name:"AES-CTR",counter:s,length:64},n,e);return new Uint8Array(t)};if(!r.subsamples)return o(a);i(null!==t.defaultCryptByteBlock&&null!==t.defaultSkipByteBlock);const c=gi(r.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock);let l=0;for(const i of c)for(const e of i.perSubsample)l+=e.length;const u=new Uint8Array(l);let d=0;for(const i of c)for(const e of i.perSubsample)u.set(a.subarray(e.offset,e.offset+e.length),d),d+=e.length;const h=await o(u),f=new Uint8Array(a);let m=0;for(const i of c)for(const e of i.perSubsample)f.set(h.subarray(m,m+e.length),e.offset),m+=e.length;return f},pi=(e,t,r,a)=>{const s=new Zt;s.init({key:e,iv:r.iv});const n=t.defaultCryptByteBlock,o=t.defaultSkipByteBlock;if(i(null!==n&&null!==o),!r.subsamples){const e=new Uint8Array(a),t=Math.floor(a.length/16);for(let i=0;i<t;i++){const t=16*i;s.in.set(a.subarray(t,t+16)),s.decrypt(),e.set(s.out,t)}return e}if(0===n&&0===o)throw new Error("cbcs with subsamples requires pattern encryption.");const c=new Uint8Array(a),l=gi(r.subsamples,n,o),u=new DataView(r.iv.buffer,r.iv.byteOffset,16);for(const i of l){s.iv[0]=u.getUint32(0,!1),s.iv[1]=u.getUint32(4,!1),s.iv[2]=u.getUint32(8,!1),s.iv[3]=u.getUint32(12,!1);for(const e of i.perSubsample){const t=e.length/16;for(let i=0;i<t;i++){const t=e.offset+16*i;s.in.set(a.subarray(t,t+16)),s.decrypt(),c.set(s.out,t)}}}return c},gi=(e,t,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 ki,bi;(bi=ki||(ki={}))[bi.EBML=440786851]="EBML",bi[bi.EBMLVersion=17030]="EBMLVersion",bi[bi.EBMLReadVersion=17143]="EBMLReadVersion",bi[bi.EBMLMaxIDLength=17138]="EBMLMaxIDLength",bi[bi.EBMLMaxSizeLength=17139]="EBMLMaxSizeLength",bi[bi.DocType=17026]="DocType",bi[bi.DocTypeVersion=17031]="DocTypeVersion",bi[bi.DocTypeReadVersion=17029]="DocTypeReadVersion",bi[bi.Void=236]="Void",bi[bi.Segment=408125543]="Segment",bi[bi.SeekHead=290298740]="SeekHead",bi[bi.Seek=19899]="Seek",bi[bi.SeekID=21419]="SeekID",bi[bi.SeekPosition=21420]="SeekPosition",bi[bi.Duration=17545]="Duration",bi[bi.Info=357149030]="Info",bi[bi.TimestampScale=2807729]="TimestampScale",bi[bi.MuxingApp=19840]="MuxingApp",bi[bi.WritingApp=22337]="WritingApp",bi[bi.Tracks=374648427]="Tracks",bi[bi.TrackEntry=174]="TrackEntry",bi[bi.TrackNumber=215]="TrackNumber",bi[bi.TrackUID=29637]="TrackUID",bi[bi.TrackType=131]="TrackType",bi[bi.FlagEnabled=185]="FlagEnabled",bi[bi.FlagDefault=136]="FlagDefault",bi[bi.FlagForced=21930]="FlagForced",bi[bi.FlagOriginal=21934]="FlagOriginal",bi[bi.FlagHearingImpaired=21931]="FlagHearingImpaired",bi[bi.FlagVisualImpaired=21932]="FlagVisualImpaired",bi[bi.FlagCommentary=21935]="FlagCommentary",bi[bi.FlagLacing=156]="FlagLacing",bi[bi.Name=21358]="Name",bi[bi.Language=2274716]="Language",bi[bi.LanguageBCP47=2274717]="LanguageBCP47",bi[bi.CodecID=134]="CodecID",bi[bi.CodecPrivate=25506]="CodecPrivate",bi[bi.CodecDelay=22186]="CodecDelay",bi[bi.SeekPreRoll=22203]="SeekPreRoll",bi[bi.DefaultDuration=2352003]="DefaultDuration",bi[bi.Video=224]="Video",bi[bi.PixelWidth=176]="PixelWidth",bi[bi.PixelHeight=186]="PixelHeight",bi[bi.DisplayWidth=21680]="DisplayWidth",bi[bi.DisplayHeight=21690]="DisplayHeight",bi[bi.DisplayUnit=21682]="DisplayUnit",bi[bi.AlphaMode=21440]="AlphaMode",bi[bi.Audio=225]="Audio",bi[bi.SamplingFrequency=181]="SamplingFrequency",bi[bi.Channels=159]="Channels",bi[bi.BitDepth=25188]="BitDepth",bi[bi.SimpleBlock=163]="SimpleBlock",bi[bi.BlockGroup=160]="BlockGroup",bi[bi.Block=161]="Block",bi[bi.BlockAdditions=30113]="BlockAdditions",bi[bi.BlockMore=166]="BlockMore",bi[bi.BlockAdditional=165]="BlockAdditional",bi[bi.BlockAddID=238]="BlockAddID",bi[bi.BlockDuration=155]="BlockDuration",bi[bi.ReferenceBlock=251]="ReferenceBlock",bi[bi.Cluster=524531317]="Cluster",bi[bi.Timestamp=231]="Timestamp",bi[bi.Cues=475249515]="Cues",bi[bi.CuePoint=187]="CuePoint",bi[bi.CueTime=179]="CueTime",bi[bi.CueTrackPositions=183]="CueTrackPositions",bi[bi.CueTrack=247]="CueTrack",bi[bi.CueClusterPosition=241]="CueClusterPosition",bi[bi.Colour=21936]="Colour",bi[bi.MatrixCoefficients=21937]="MatrixCoefficients",bi[bi.TransferCharacteristics=21946]="TransferCharacteristics",bi[bi.Primaries=21947]="Primaries",bi[bi.Range=21945]="Range",bi[bi.Projection=30320]="Projection",bi[bi.ProjectionType=30321]="ProjectionType",bi[bi.ProjectionPoseRoll=30325]="ProjectionPoseRoll",bi[bi.Attachments=423732329]="Attachments",bi[bi.AttachedFile=24999]="AttachedFile",bi[bi.FileDescription=18046]="FileDescription",bi[bi.FileName=18030]="FileName",bi[bi.FileMediaType=18016]="FileMediaType",bi[bi.FileData=18012]="FileData",bi[bi.FileUID=18094]="FileUID",bi[bi.Chapters=272869232]="Chapters",bi[bi.Tags=307544935]="Tags",bi[bi.Tag=29555]="Tag",bi[bi.Targets=25536]="Targets",bi[bi.TargetTypeValue=26826]="TargetTypeValue",bi[bi.TargetType=25546]="TargetType",bi[bi.TagTrackUID=25541]="TagTrackUID",bi[bi.TagEditionUID=25545]="TagEditionUID",bi[bi.TagChapterUID=25540]="TagChapterUID",bi[bi.TagAttachmentUID=25542]="TagAttachmentUID",bi[bi.SimpleTag=26568]="SimpleTag",bi[bi.TagName=17827]="TagName",bi[bi.TagLanguage=17530]="TagLanguage",bi[bi.TagString=17543]="TagString",bi[bi.TagBinary=17541]="TagBinary",bi[bi.ContentEncodings=28032]="ContentEncodings",bi[bi.ContentEncoding=25152]="ContentEncoding",bi[bi.ContentEncodingOrder=20529]="ContentEncodingOrder",bi[bi.ContentEncodingScope=20530]="ContentEncodingScope",bi[bi.ContentCompression=20532]="ContentCompression",bi[bi.ContentCompAlgo=16980]="ContentCompAlgo",bi[bi.ContentCompSettings=16981]="ContentCompSettings",bi[bi.ContentEncryption=20533]="ContentEncryption";const yi=[ki.EBML,ki.Segment],wi=[ki.SeekHead,ki.Info,ki.Cluster,ki.Tracks,ki.Cues,ki.Attachments,ki.Chapters,ki.Tags],Ti=[...yi,...wi],Si=16,Pi=e=>{if(e.remainingLength<1)return null;const t=un(e);if(e.skip(-1),0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;return e.remainingLength<i?null:i},vi=e=>{if(e.remainingLength<1)return null;const t=un(e);if(0===t)return null;let i=1,r=128;for(;0===(t&r);)i++,r>>=1;if(e.remainingLength<i-1)return null;let a=t&r-1;for(let s=1;s<i;s++)a*=256,a+=un(e);return a},Ii=(e,t)=>{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let i=0;for(let r=0;r<t;r++)i*=256,i+=un(e);return i},xi=e=>{const t=Pi(e);if(null===t)return null;if(e.remainingLength<t)return null;return Ii(e,t)},Ci=e=>{if(e.remainingLength<1)return null;if(255===un(e))return;e.skip(-1);const t=vi(e);return null===t?null:72057594037927940!==t?t:void 0},Bi=e=>{i(e.remainingLength>=2);const t=xi(e);if(null===t)return null;const r=Ci(e);return null===r?null:{id:t,size:r}},Ei=(e,t)=>{const i=ln(e,t);let r=0;for(;r<t&&0!==i[r];)r+=1;return String.fromCharCode(...i.subarray(0,r))},_i=(e,t)=>{const i=ln(e,t);let r=0;for(;r<t&&0!==i[r];)r+=1;return l.decode(i.subarray(0,r))},Ai=(e,t)=>{if(0===t)return 0;if(4!==t&&8!==t)throw new Error("Bad float size "+t);return 4===t?Pn(e):vn(e)},Fi=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;null===r||s<r;){let t=e.requestSliceRange(s,2,Si);if(t instanceof Promise&&(t=await t),!t)break;const i=Bi(t);if(!i)break;if(a.has(i.id))return{pos:s,found:!0};ji(i.size),s=t.filePos+i.size}return{pos:null!==r&&r>s?r:s,found:!1}},Ri=async(e,t,i,r)=>{const a=new Set(i);let s=t;for(;s<r;){let t=e.requestSliceRange(s,0,Math.min(65536,r-s));if(t instanceof Promise&&(t=await t),!t)break;if(t.length<8)break;for(let e=0;e<t.length-8;e++){t.filePos=s;const e=xi(t);if(null!==e&&a.has(e))return s;s++}}return null},Di="V_MPEG4/ISO/AVC",Mi="V_MPEGH/ISO/HEVC",Ni="V_VP8",Oi="V_VP9",Li="V_AV1",zi="A_AAC",Ui="A_MPEG/L3",qi="A_OPUS",Wi="A_VORBIS",Vi="A_FLAC",Hi="A_AC3",Ki="A_EAC3";function ji(e){if(void 0===e)throw new Error("Undefined element size is used in a place where it is not supported.")}var Xi,$i,Qi,Gi,Yi,Ji;($i=Xi||(Xi={}))[$i.None=0]="None",$i[$i.Xiph=1]="Xiph",$i[$i.FixedSize=2]="FixedSize",$i[$i.Ebml=3]="Ebml",(Gi=Qi||(Qi={}))[Gi.Block=1]="Block",Gi[Gi.Private=2]="Private",Gi[Gi.Next=4]="Next",(Ji=Yi||(Yi={}))[Ji.Zlib=0]="Zlib",Ji[Ji.Bzlib=1]="Bzlib",Ji[Ji.lzo1x=2]="lzo1x",Ji[Ji.HeaderStripping=3]="HeaderStripping";const Zi=[{id:ki.SeekHead,flag:"seekHeadSeen"},{id:ki.Info,flag:"infoSeen"},{id:ki.Tracks,flag:"tracksSeen"},{id:ki.Cues,flag:"cuesSeen"}],er=10485760;class tr extends Rt{constructor(e){super(e),this.readMetadataPromise=null,this.segments=[],this.currentSegment=null,this.currentTrack=null,this.currentCluster=null,this.currentBlock=null,this.currentBlockAdditional=null,this.currentCueTime=null,this.currentDecodingInstruction=null,this.currentTagTargetIsMovie=!0,this.currentSimpleTagName=null,this.currentAttachedFile=null,this.isWebM=!1,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.segments.flatMap(e=>e.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,Si);if(t instanceof Promise&&(t=await t),!t)break;const i=Bi(t);if(!i)break;const r=i.id;let s=i.size;const n=t.filePos;if(r===ki.EBML){ji(s);let e=this.reader.requestSlice(n,s);if(e instanceof Promise&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===ki.Segment){if(await this.readSegment(n,s),void 0===s)break;if(null===this.reader.fileSize)break}else if(r===ki.Cluster){if(null===this.reader.fileSize)break;if(void 0===s){s=(await Fi(this.reader,n,Ti,this.reader.fileSize)).pos-n}const e=a(this.segments);e&&(e.elementEndPos=n+s)}ji(s),e=n+s}})())}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||i<this.currentSegment.elementEndPos;){let e=this.reader.requestSliceRange(i,2,Si);if(e instanceof Promise&&(e=await e),!e)break;const t=i,r=Bi(e);if(!r||!wi.includes(r.id)&&r.id!==ki.Void){const e=await Ri(this.reader,t,wi,Math.min(this.currentSegment.elementEndPos??1/0,t+er));if(e){i=e;continue}break}const{id:a,size:s}=r,n=e.filePos,o=Zi.findIndex(e=>e.id===a);if(-1!==o){const e=Zi[o].flag;this.currentSegment[e]=!0,ji(s);let t=this.reader.requestSlice(n,s);t instanceof Promise&&(t=await t),t&&this.readContiguousElements(t)}else if(a===ki.Tags||a===ki.Attachments){a===ki.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,ji(s);let e=this.reader.requestSlice(n,s);e instanceof Promise&&(e=await e),e&&this.readContiguousElements(e)}else if(a===ki.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=Zi.find(e=>e.id===n.id);if(!t)continue;if(this.currentSegment[t.flag])continue;let i=this.reader.requestSliceRange(e+n.segmentPosition,2,Si);if(i instanceof Promise&&(i=await i),!i)continue;const r=Bi(i);if(!r)continue;const{id:a,size:s}=r;if(a!==t.id)continue;ji(s),this.currentSegment[t.flag]=!0;let o=this.reader.requestSlice(i.filePos,s);o instanceof Promise&&(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;e<n.cuePoints.length-1;e++){const t=n.cuePoints[e],i=n.cuePoints[e+1];t.time===i.time&&(n.cuePoints.splice(e+1,1),e--)}}let a=null,s=-1/0;for(const n of this.currentSegment.tracks)n.cuePoints.length>s&&(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 r=this.reader.requestSliceRange(e,2,Si);r instanceof Promise&&(r=await r),i(r);const s=e,n=Bi(r);i(n);i(n.id===ki.Cluster);let o=n.size;const c=r.filePos;if(void 0===o){o=(await Fi(this.reader,c,Ti,t.elementEndPos)).pos-c}let l=this.reader.requestSlice(c,o);l instanceof Promise&&(l=await l);const u={segment:t,elementStartPos:s,elementEndPos:c+o,dataStartPos:c,timestamp:-1,trackData:new Map};if(this.currentCluster=u,l){const e=this.readContiguousElements(l,Ti);u.elementEndPos=e}for(const[,d]of u.trackData){const e=d.track;i(d.blocks.length>0);let t=!1;for(let i=0;i<d.blocks.length;i++){const e=d.blocks[i];e.timestamp+=u.timestamp,t||(t=e.lacing!==Xi.None)}d.presentationTimestamps=d.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let i=0;i<d.presentationTimestamps.length;i++){const t=d.presentationTimestamps[i],r=d.blocks[t.blockIndex];if(null===d.firstKeyFrameTimestamp&&r.isKeyFrame&&(d.firstKeyFrameTimestamp=r.timestamp),i<d.presentationTimestamps.length-1){const e=d.presentationTimestamps[i+1];r.duration=e.timestamp-r.timestamp}else 0===r.duration&&null!=e.defaultDuration&&r.lacing===Xi.None&&(r.duration=e.defaultDuration)}t&&(this.expandLacedBlocks(d.blocks,e),d.presentationTimestamps=d.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));const r=d.blocks[d.presentationTimestamps[0].blockIndex],n=d.blocks[a(d.presentationTimestamps).blockIndex];d.startTimestamp=r.timestamp,d.endTimestamp=n.timestamp+n.duration;const o=P(e.clusterPositionCache,d.startTimestamp,e=>e.startTimestamp);-1!==o&&e.clusterPositionCache[o].elementStartPos===s||e.clusterPositionCache.splice(o+1,0,{elementStartPos:u.elementStartPos,startTimestamp:d.startTimestamp})}return t.lastReadCluster=u,u}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 r=0;r<e.length;r++){const a=e[r];if(a.lacing===Xi.None)continue;a.decoded||(a.data=this.decodeBlockData(t,a.data),a.decoded=!0);const s=on.tempFromBytes(a.data),n=[],o=un(s)+1;switch(a.lacing){case Xi.Xiph:{let e=0;for(let t=0;t<o-1;t++){let t=0;for(;s.bufferPos<s.length;){const i=un(s);if(t+=i,i<255){n.push(t),e+=t;break}}}n.push(s.length-(s.bufferPos+e))}break;case Xi.FixedSize:{const e=s.length-1,t=Math.floor(e/o);for(let i=0;i<o;i++)n.push(t)}break;case Xi.Ebml:{const e=vi(s);i(null!==e);let t=e;n.push(t);let r=t;for(let a=1;a<o-1;a++){const e=s.bufferPos,a=vi(s);i(null!==a);t+=a-((1<<7*(s.bufferPos-e)-1)-1),n.push(t),r+=t}n.push(s.length-(s.bufferPos+r))}break;default:i(!1)}i(n.length===o),e.splice(r,1);const c=a.duration||o*(t.defaultDuration??0);for(let t=0;t<o;t++){const i=n[t],l=ln(s,i),u=a.timestamp+c*t/o,d=c/o;e.splice(r+t,0,{timestamp:u,duration:d,isKeyFrame:a.isKeyFrame,data:l,lacing:Xi.None,decoded:!0,mainAdditional:a.mainAdditional})}r+=o,r--}}async loadSegmentMetadata(e){for(const t of e.seekEntries){if(t.id!==ki.Tags||e.tagsSeen){if(t.id!==ki.Attachments||e.attachmentsSeen)continue}else;let r=this.reader.requestSliceRange(e.dataStartPos+t.segmentPosition,2,Si);if(r instanceof Promise&&(r=await r),!r)continue;const a=Bi(r);if(!a||a.id!==t.id)continue;const{size:s}=a;ji(s),i(!this.currentSegment),this.currentSegment=e;let n=this.reader.requestSlice(r.filePos,s);n instanceof Promise&&(n=await n),n&&this.readContiguousElements(n),this.currentSegment=null,t.id===ki.Tags?e.tagsSeen=!0:t.id===ki.Attachments&&(e.attachmentsSeen=!0)}}readContiguousElements(e,t){for(;e.remainingLength>=2;){const i=e.filePos;if(!this.traverseElement(e,t))return i}return e.filePos}traverseElement(e,t){const a=Bi(e);if(!a)return!1;if(t&&t.includes(a.id))return!1;const{id:s,size:n}=a,o=e.filePos;switch(ji(n),s){case ki.DocType:this.isWebM="webm"===Ei(e,n);break;case ki.Seek:{if(!this.currentSegment)break;const t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(o,n)),-1!==t.id&&-1!==t.segmentPosition||this.currentSegment.seekEntries.pop()}break;case ki.SeekID:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=Ii(e,n)}break;case ki.SeekPosition:{const t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=Ii(e,n)}break;case ki.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=Ii(e,n),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case ki.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Ai(e,n);break;case ki.TrackEntry:if(!this.currentSegment)break;if(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...he,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(o,n)),!this.currentTrack)break;if(this.currentTrack.decodingInstructions.some(e=>"decompress"!==e.data?.type||e.scope!==Qi.Block||e.data.algorithm!==Yi.HeaderStripping)&&(console.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))}this.currentTrack.codecId===Di?(this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Mi?(this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Ni?this.currentTrack.info.codec="vp8":t===Oi?this.currentTrack.info.codec="vp9":t===Li&&(this.currentTrack.info.codec="av1");const e=this.currentTrack;this.currentTrack.trackBacking=new rr(e),this.currentSegment.tracks.push(this.currentTrack)}else if("audio"===this.currentTrack.info.type){t===zi?(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===Ui?this.currentTrack.info.codec="mp3":t===qi?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=xe):t===Wi?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Vi?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Hi?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===Ki?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):"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 ar(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case ki.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=Ii(e,n);break;case ki.TrackType:{if(!this.currentTrack)break;const t=Ii(e,n);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:null,alphaMode:!1}:2===t&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case ki.FlagEnabled:if(!this.currentTrack)break;Ii(e,n)||(this.currentTrack=null);break;case ki.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!Ii(e,n);break;case ki.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!Ii(e,n);break;case ki.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!Ii(e,n);break;case ki.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!Ii(e,n);break;case ki.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!Ii(e,n);break;case ki.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!Ii(e,n);break;case ki.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Ei(e,n);break;case ki.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=ln(e,n);break;case ki.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=Ii(e,n);break;case ki.Name:if(!this.currentTrack)break;this.currentTrack.name=_i(e,n);break;case ki.Language:if(!this.currentTrack)break;if(this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Ei(e,n),L(this.currentTrack.languageCode)||(this.currentTrack.languageCode=R);break;case ki.LanguageBCP47:{if(!this.currentTrack)break;const t=Ei(e,n).split("-")[0];this.currentTrack.languageCode=t||R,this.currentTrack.hasLanguageBcp47=!0}break;case ki.Video:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(o,n));break;case ki.PixelWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.width=Ii(e,n);break;case ki.PixelHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.height=Ii(e,n);break;case ki.DisplayWidth:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayWidth=Ii(e,n);break;case ki.DisplayHeight:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayHeight=Ii(e,n);break;case ki.DisplayUnit:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.displayUnit=Ii(e,n);break;case ki.AlphaMode:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.alphaMode=1===Ii(e,n);break;case ki.Colour:if("video"!==this.currentTrack?.info?.type)break;this.currentTrack.info.colorSpace={},this.readContiguousElements(e.slice(o,n));break;case ki.MatrixCoefficients:{if("video"!==this.currentTrack?.info?.type||!this.currentTrack.info.colorSpace)break;const t=Ii(e,n),i=g[t]??null;this.currentTrack.info.colorSpace.matrix=i}break;case ki.Range:if("video"!==this.currentTrack?.info?.type||!this.currentTrack.info.colorSpace)break;this.currentTrack.info.colorSpace.fullRange=2===Ii(e,n);break;case ki.TransferCharacteristics:{if("video"!==this.currentTrack?.info?.type||!this.currentTrack.info.colorSpace)break;const t=Ii(e,n),i=m[t]??null;this.currentTrack.info.colorSpace.transfer=i}break;case ki.Primaries:{if("video"!==this.currentTrack?.info?.type||!this.currentTrack.info.colorSpace)break;const t=Ii(e,n),i=h[t]??null;this.currentTrack.info.colorSpace.primaries=i}break;case ki.Projection:if("video"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(o,n));break;case ki.ProjectionPoseRoll:{if("video"!==this.currentTrack?.info?.type)break;const t=-Ai(e,n);try{this.currentTrack.info.rotation=r(t)}catch{}}break;case ki.Audio:if("audio"!==this.currentTrack?.info?.type)break;this.readContiguousElements(e.slice(o,n));break;case ki.SamplingFrequency:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.sampleRate=Ai(e,n);break;case ki.Channels:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.numberOfChannels=Ii(e,n);break;case ki.BitDepth:if("audio"!==this.currentTrack?.info?.type)break;this.currentTrack.info.bitDepth=Ii(e,n);break;case ki.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(o,n)),this.currentCueTime=null;break;case ki.CueTime:this.currentCueTime=Ii(e,n);break;case ki.CueTrackPositions:{if(null===this.currentCueTime)break;i(this.currentSegment);const t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(o,n)),-1!==t.trackId&&-1!==t.clusterPosition||this.currentSegment.cuePoints.pop()}break;case ki.CueTrack:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=Ii(e,n)}break;case ki.CueClusterPosition:{const t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;i(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+Ii(e,n)}break;case ki.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=Ii(e,n);break;case ki.SimpleBlock:{if(!this.currentCluster)break;const t=vi(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=mn(e),a=un(e),s=a>>1&3;let c=!!(128&a);"audio"===i.track.info?.type&&i.track.info.codec&&(c=!0);const l=ln(e,n-(e.filePos-o)),u=i.track.decodingInstructions.length>0;i.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:s,decoded:!u,mainAdditional:null})}break;case ki.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(o,n)),this.currentBlock=null;break;case ki.Block:{if(!this.currentCluster)break;const t=vi(e);if(null===t)break;const i=this.getTrackDataInCluster(this.currentCluster,t);if(!i)break;const r=mn(e),a=un(e)>>1&3,s=ln(e,n-(e.filePos-o)),c=i.track.decodingInstructions.length>0;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:s,lacing:a,decoded:!c,mainAdditional:null},i.blocks.push(this.currentBlock)}break;case ki.BlockAdditions:this.readContiguousElements(e.slice(o,n));break;case ki.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(o,n)),this.currentBlockAdditional.data&&1===this.currentBlockAdditional.addId&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case ki.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=ln(e,n);break;case ki.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=Ii(e,n);break;case ki.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=Ii(e,n);break;case ki.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case ki.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(o,n));break;case ki.Targets:this.readContiguousElements(e.slice(o,n));break;case ki.TargetTypeValue:50!==Ii(e,n)&&(this.currentTagTargetIsMovie=!1);break;case ki.TagTrackUID:case ki.TagEditionUID:case ki.TagChapterUID:case ki.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case ki.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(o,n));break;case ki.TagName:this.currentSimpleTagName=_i(e,n);break;case ki.TagString:{if(!this.currentSimpleTagName)break;const t=_i(e,n);this.processTagValue(this.currentSimpleTagName,t)}break;case ki.TagBinary:{if(!this.currentSimpleTagName)break;const t=ln(e,n);this.processTagValue(this.currentSimpleTagName,t)}break;case ki.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(o,n));const t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??(t.raw={}),t.raw[this.currentAttachedFile.fileUid.toString()]=new de(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 ki.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;r<t;r++)i<<=8n,i+=BigInt(un(e));return i})(e,n);break;case ki.FileName:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=_i(e,n);break;case ki.FileMediaType:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=Ei(e,n);break;case ki.FileData:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=ln(e,n);break;case ki.FileDescription:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=_i(e,n);break;case ki.ContentEncodings:if(!this.currentTrack)break;this.readContiguousElements(e.slice(o,n)),this.currentTrack.decodingInstructions.sort((e,t)=>t.order-e.order);break;case ki.ContentEncoding:this.currentDecodingInstruction={order:0,scope:Qi.Block,data:null},this.readContiguousElements(e.slice(o,n)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case ki.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=Ii(e,n);break;case ki.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=Ii(e,n);break;case ki.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:Yi.Zlib,settings:null},this.readContiguousElements(e.slice(o,n));break;case ki.ContentCompAlgo:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.algorithm=Ii(e,n);break;case ki.ContentCompSettings:if("decompress"!==this.currentDecodingInstruction?.data?.type)break;this.currentDecodingInstruction.data.settings=ln(e,n);break;case ki.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}return e.filePos=o+n,!0}decodeBlockData(e,t){i(e.decodingInstructions.length>0);let r=t;for(const a of e.decodingInstructions)if(i(a.data),"decompress"===a.data.type)if(a.data.algorithm===Yi.HeaderStripping)if(a.data.settings&&a.data.settings.length>0){const e=a.data.settings,t=new Uint8Array(e.length+r.length);t.set(e,0),t.set(r,e.length),r=t}return r}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))}}}}class ir{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}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.internalTrack.segment;if(e.duration<=0)return null;let t=e.duration/e.timestampFactor;const i=await this.getFirstPacket({metadataOnly:!0});return t+=i?.timestamp??0,t}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 D(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=P(t.presentationTimestamps,i,e=>e.timestamp);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i<t.endTimestamp}},i,i,t)}async getNextPacket(e,t){const i=this.packetToClusterLocation.get(e);if(void 0===i)throw new Error("Packet was not created from this track.");return this.performClusterLookup(i.cluster,e=>{if(e===i.cluster){const t=e.trackData.get(this.internalTrack.id);if(i.blockIndex+1<t.blocks.length)return{blockIndex:i.blockIndex+1,correctBlockFound:!0}}else{if(e.trackData.get(this.internalTrack.id))return{blockIndex:0,correctBlockFound:!0}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async getKeyPacket(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=C(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=i);return{blockIndex:-1!==r?t.presentationTimestamps[r].blockIndex:-1,correctBlockFound:-1!==r&&i<t.endTimestamp}},i,i,t)}async getNextKeyPacket(e,t){const r=this.packetToClusterLocation.get(e);if(void 0===r)throw new Error("Packet was not created from this track.");return this.performClusterLookup(r.cluster,e=>{if(e===r.cluster){const t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>r.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 i(-1!==e),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,r){if(-1===t)return null;const a=e.trackData.get(this.internalTrack.id).blocks[t];i(a),a.decoded||(a.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,a.data),a.decoded=!0);const s=r.metadataOnly?Dt:a.data,n=a.timestamp/this.internalTrack.segment.timestampFactor,o=a.duration/this.internalTrack.segment.timestampFactor,c={};a.mainAdditional&&"video"===this.internalTrack.info?.type&&this.internalTrack.info.alphaMode&&(c.alpha=r.metadataOnly?Dt:a.mainAdditional,c.alphaByteLength=a.mainAdditional.byteLength);const l=new Mt(s,a.isKeyFrame?"key":"delta",n,o,e.dataStartPos+t,a.data.byteLength,c);return this.packetToClusterLocation.set(l,{cluster:e,blockIndex:t}),l}async performClusterLookup(e,t,r,a,s){const{demuxer:n,segment:o}=this.internalTrack;let c=null,l=null,u=-1;if(e){const{blockIndex:i,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,i,s);-1!==i&&(l=e,u=i)}const d=P(this.internalTrack.cuePoints,r,e=>e.time),h=-1!==d?this.internalTrack.cuePoints[d]:null,f=P(this.internalTrack.clusterPositionCache,r,e=>e.startTimestamp),m=-1!==f?this.internalTrack.clusterPositionCache[f]:null,p=Math.max(h?.clusterPosition??0,m?.elementStartPos??0)||null;let g;for(e?null===p||e.elementStartPos>=p?(g=e.elementEndPos,c=e):g=p:g=p??o.clusterSeekStartPos;null===o.elementEndPos||g<=o.elementEndPos-2;){if(c){const e=c.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>a)break}let e=n.reader.requestSliceRange(g,2,Si);if(e instanceof Promise&&(e=await e),!e)break;const r=g,d=Bi(e);if(!d||!wi.includes(d.id)&&d.id!==ki.Void){const e=await Ri(n.reader,r,wi,Math.min(o.elementEndPos??1/0,r+er));if(e){g=e;continue}break}const h=d.id;let f=d.size;const m=e.filePos;if(h===ki.Cluster){c=await n.readCluster(r,o),f=c.elementEndPos-m;const{blockIndex:e,correctBlockFound:i}=t(c);if(i)return this.fetchPacketInCluster(c,e,s);-1!==e&&(l=c,u=e)}if(void 0===f){i(h!==ki.Cluster);f=(await Fi(n.reader,m,Ti,o.elementEndPos)).pos-m}const p=m+f;if(null===o.elementEndPos){let e=n.reader.requestSliceRange(p,2,Si);if(e instanceof Promise&&(e=await e),!e)break;if(xi(e)===ki.Segment){o.elementEndPos=p;break}}g=p}if(h&&(!l||l.elementStartPos<h.clusterPosition)){const e=this.internalTrack.cuePoints[d-1];i(!e||e.time<h.time);const r=e?.time??-1/0;return this.performClusterLookup(null,t,r,a,s)}return l?this.fetchPacketInCluster(l,u,s):null}}class rr extends ir{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return"video"}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.info.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return this.internalTrack.info.alphaMode}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??(this.decoderConfigPromise=(async()=>{let e=null;("vp9"===this.internalTrack.info.codec||"av1"===this.internalTrack.info.codec||"avc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription||"hevc"===this.internalTrack.info.codec&&!this.internalTrack.info.codecDescription)&&(e=await this.getFirstPacket({}));const t={codec:ve({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&&e?Ze(e.data):null,hevcCodecInfo:"hevc"===this.internalTrack.info.codec&&e?nt(e.data):null,vp9CodecInfo:"vp9"===this.internalTrack.info.codec&&e?kt(e.data):null,av1CodecInfo:"av1"===this.internalTrack.info.codec&&e?yt(e.data):null}),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace??void 0};return this.internalTrack.info.width===this.internalTrack.info.squarePixelWidth&&this.internalTrack.info.height===this.internalTrack.info.squarePixelHeight||(t.displayAspectWidth=this.internalTrack.info.squarePixelWidth,t.displayAspectHeight=this.internalTrack.info.squarePixelHeight),t})()):null}}class ar extends ir{constructor(e){super(e),this.decoderConfig=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.decoderConfig??(this.decoderConfig={codec:Ie({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}):null}}const sr=async(e,t,i)=>{let r=t;for(;null===i||r<i;){const t=null!==i?Math.min(65536,i-r):65536;let a=e.requestSliceRange(r,4,t);if(a instanceof Promise&&(a=await a),!a||a.length<4)break;for(;a.remainingLength>=4;){const t=a.filePos,i=gn(a),s=null!==e.fileSize?e.fileSize-r:null,n=Me(i,s);if(n.header)return{header:n.header,startPos:r};a.filePos=t+n.bytesAdvanced,r=a.filePos}}return null};class nr extends Rt{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.firstFrameHeaderPos=null,this.loadedSamples=[],this.metadataTags=null,this.xingData=null,this.trackBackings=[],this.readingMutex=new b,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)throw new Error("No valid MP3 frame found.");this.trackBackings=[new or(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Fn);if(e instanceof Promise&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Nn(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}const e=await sr(this.reader,this.lastLoadedPos,this.reader.fileSize);if(!e)return void(this.lastSampleLoaded=!0);const t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;const i=De(t.mpegVersionId,t.channel);let r=this.reader.requestSlice(e.startPos+i,4);if(r instanceof Promise&&(r=await r),r){const t=gn(r);if(t===Fe||t===Re){if(!this.xingData){let t=this.reader.requestSlice(e.startPos+i+4,12);if(t instanceof Promise&&(t=await t),t){const e=ln(t,12),i=c(e),r=i.getUint32(0,!1);this.xingData={frameCount:r&Oe.FrameCount?i.getUint32(4,!1):null,fileSize:r&Oe.FileSize?i.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos),t.sampleRate!==this.firstFrameHeader.sampleRate&&console.warn(`MP3 changed sample rate mid-file: ${this.firstFrameHeader.sampleRate} Hz to ${t.sampleRate} Hz. Might be a bug, so please report this file.`);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,Fn);if(i instanceof Promise&&(i=await i),!i)break;const r=Nn(i);if(!r)break;t=!0;let a=this.reader.requestSlice(i.filePos,r.size);if(a instanceof Promise&&(a=await a),!a)break;On(a,r,this.metadataTags),e=i.filePos+r.size}if(!t&&null!==this.reader.fileSize&&this.reader.fileSize>=An){let e=this.reader.requestSlice(this.reader.fileSize-An,An);e instanceof Promise&&(e=await e),i(e);"TAG"===In(e,3)&&Dn(e,this.metadataTags)}return this.metadataTags}finally{e()}}}class or{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return i(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){const e=this.demuxer;if(i(null!==e.firstFrameHeader),i(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 i=(t=e.firstFrameHeader.lowSamplingFrequency,r=e.firstFrameHeader.layer,a=e.firstFrameHeader.bitrate,s=e.firstFrameHeader.sampleRate,0===r?0:1===r?144*a/(s<<t):2===r?144*a/s:12*a/s*4),n=(e.reader.fileSize-e.firstFrameHeaderPos)/i;return Math.round(n)*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}var t,r,a,s;return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return R}getCodec(){return"mp3"}getInternalCodecId(){return null}getNumberOfChannels(){return i(this.demuxer.firstFrameHeader),3===this.demuxer.firstFrameHeader.channel?1:2}getSampleRate(){return i(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...he}}async getDecoderConfig(){return i(this.demuxer.firstFrameHeader),{codec:"mp3",numberOfChannels:3===this.demuxer.firstFrameHeader.channel?1:2,sampleRate:this.demuxer.firstFrameHeader.sampleRate}}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=Dt;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=ln(e,i.dataSize)}return new Mt(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=S(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=P(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<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(i,t);await this.demuxer.advanceReader()}}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const cr=1399285583,lr=new Uint32Array(256);for(let $n=0;$n<256;$n++){let e=$n<<24;for(let t=0;t<8;t++)e=2147483648&e?e<<1^79764919:e<<1;lr[$n]=e>>>0&4294967295}const ur=e=>{const t=c(e),i=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let a=0;a<e.length;a++){const t=e[a];r=(r<<8^lr[r>>>24^t])>>>0}return t.setUint32(22,i,!0),r},dr=(e,t,r)=>{let a=0,s=null;if(e.length>0)if("vorbis"===t.codec){i(t.vorbisInfo);const n=(1<<(e=>{let t=0;for(;e;)t++,e>>=1;return t})(t.vorbisInfo.modeBlockflags.length-1))-1<<1,o=(e[0]&n)>>1;if(o>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let c=r;const l=t.vorbisInfo.modeBlockflags[o];if(s=t.vorbisInfo.blocksizes[l],1===l){const i=1+(1|n),r=e[0]&i?1:0;c=t.vorbisInfo.blocksizes[r]}a=null!==c?c+s>>2:0}else if("opus"===t.codec){a=(e=>{const t=e[0]>>3;return{durationInSamples:wt[t]}})(e).durationInSamples}return{durationInSamples:a,vorbisBlockSize:s}},hr=27,fr=282,mr=e=>{const t=e.filePos;if(kn(e)!==cr)return null;e.skip(1);const i=un(e),r=Sn(e),a=kn(e),s=kn(e),n=kn(e),o=un(e),c=new Uint8Array(o);for(let d=0;d<o;d++)c[d]=un(e);const l=27+o,u=c.reduce((e,t)=>e+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}},pr=(e,t)=>{for(;e.filePos<t-3;){const t=kn(e),i=79;if((255&t)===i||(t>>>8&255)===i||(t>>>16&255)===i||(t>>>24&255)===i){if(e.skip(-4),t===cr)return!0;e.skip(1)}}return!1};class gr extends Rt{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,hr,fr);if(t instanceof Promise&&(t=await t),!t)break;const i=mr(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 kr(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 l=c(e.data);t.numberOfChannels=l.getUint8(11),t.sampleRate=l.getUint32(12,!0);const u=l.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(15&u),1<<(u>>4)],modeBlockflags:Tt(a.data).modeBlockflags},It(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=c(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=xe,t.codecInfo.opusInfo={preSkip:a.preSkip},It(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){i(t<e.lacingValues.length);let r=0;for(let i=0;i<t;i++)r+=e.lacingValues[i];let a=e,s=r,n=t;const o=[];e:for(;;){let t=this.reader.requestSlice(a.dataStartPos,a.dataSize);t instanceof Promise&&(t=await t),i(t);const c=ln(t,a.dataSize);for(;;){if(n===a.lacingValues.length){o.push(c.subarray(r,s));break}const e=a.lacingValues[n];if(s+=e,e<255){o.push(c.subarray(r,s));break e}n++}let l=a.headerStartPos+a.totalSize;for(;;){let t=this.reader.requestSliceRange(l,hr,fr);if(t instanceof Promise&&(t=await t),!t)return null;const i=mr(t);if(!i)return null;if(a=i,a.serialNumber===e.serialNumber)break;l=a.headerStartPos+a.totalSize}r=0,s=0,n=0}const c=o.reduce((e,t)=>e+t.length,0);if(0===c)return null;const l=new Uint8Array(c);let u=0;for(let i=0;i<o.length;i++){const e=o[i];l.set(e,u),u+=e.length}return{data:l,endPage:a,endSegmentIndex:n}}async findNextPacketStart(e){if(e.endSegmentIndex<e.endPage.lacingValues.length-1)return{startPage:e.endPage,startSegmentIndex:e.endSegmentIndex+1};if(!!(4&e.endPage.headerType))return null;let t=e.endPage.headerStartPos+e.endPage.totalSize;for(;;){let i=this.reader.requestSliceRange(t,hr,fr);if(i instanceof Promise&&(i=await i),!i)return null;const r=mr(i);if(!r)return null;if(r.serialNumber===e.endPage.serialNumber)return{startPage:r,startSegmentIndex:0};t=r.headerStartPos+r.totalSize}}async getMimeType(){await this.readMetadata();return(e=>{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 kr{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new b,this.internalSampleRate="opus"===e.codecInfo.codec?xe:e.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){const e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return i(-1!==e),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}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 i(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 R}getDisposition(){return{...he,primary:!1}}granulePositionToTimestampInSamples(e){return"opus"===this.bitstream.codecInfo.codec?(i(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,i){if(!e)return null;const{durationInSamples:r,vorbisBlockSize:a}=dr(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),s=new Mt(i.metadataOnly?Dt: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){i(this.bitstream.lastMetadataPacket);const t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let r=0;"opus"===this.bitstream.codecInfo.codec&&(i(this.bitstream.codecInfo.opusInfo),r-=this.bitstream.codecInfo.opusInfo.preSkip);const a=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(a,{timestampInSamples:r,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 r=D(e*this.internalSampleRate);if(0===r)return this.getFirstPacket(t);if(r<0)return null;i(this.bitstream.lastMetadataPacket);const a=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!a)return null;let s=a.startPage,n=this.demuxer.reader.fileSize;const o=[s];e:for(;s.headerStartPos+s.totalSize<n;){const e=s.headerStartPos,t=Math.floor((e+n)/2);let a=t;for(;;){const e=Math.min(a+65307,n-hr);let c=this.demuxer.reader.requestSlice(a,e-a);c instanceof Promise&&(c=await c),i(c);if(!pr(c,e)){n=t+hr;continue e}let l=this.demuxer.reader.requestSliceRange(c.filePos,hr,fr);l instanceof Promise&&(l=await l),i(l);const u=mr(l);i(u);let d=!1;if(u.serialNumber===this.bitstream.serialNumber)d=!0;else{let e=this.demuxer.reader.requestSlice(u.headerStartPos,u.totalSize);e instanceof Promise&&(e=await e),i(e);const t=ln(e,u.totalSize);d=ur(t)===u.checksum}if(!d){a=u.headerStartPos+4;continue}if(d&&u.serialNumber!==this.bitstream.serialNumber){a=u.headerStartPos+u.totalSize;continue}if(!(-1===u.granulePosition)){this.granulePositionToTimestampInSamples(u.granulePosition)>r?n=u.headerStartPos:(s=u,o.push(u));continue e}a=u.headerStartPos+u.totalSize}}let c=a.startPage;for(const i of o){if(i.granulePosition===s.granulePosition)break;(!c||i.headerStartPos>c.headerStartPos)&&(c=i)}let l=c;const u=[l];for(;l.serialNumber!==this.bitstream.serialNumber||l.granulePosition!==s.granulePosition;){const e=l.headerStartPos+l.totalSize;let t=this.demuxer.reader.requestSliceRange(e,hr,fr);t instanceof Promise&&(t=await t),i(t);const r=mr(t);i(r),l=r,l.serialNumber===this.bitstream.serialNumber&&u.push(l)}i(-1!==l.granulePosition);let d,h,f=null,m=l,p=0;if(l.headerStartPos===a.startPage.headerStartPos)d=this.granulePositionToTimestampInSamples(0),h=!0,f=0;else{d=0,h=!1;for(let t=l.lacingValues.length-1;t>=0;t--){if(l.lacingValues[t]<255){f=t+1;break}}if(null===f)throw new Error("Invalid page with granule position: no packets end on this page.");p=f-1;const e={data:Dt,endPage:m,endSegmentIndex:p};if(await this.demuxer.findNextPacketStart(e)){const e=yr(u,l,f);i(e);const t=br(u,e.page,e.segmentIndex);t&&(l=t.page,f=t.segmentIndex)}else for(;;){const e=yr(u,l,f);if(!e)break;const t=br(u,e.page,e.segmentIndex);if(!t)break;if(l=t.page,f=t.segmentIndex,e.page.headerStartPos!==m.headerStartPos){m=e.page,p=e.segmentIndex;break}}}let g=null,k=null;for(;null!==l;){i(null!==f);const e=await this.demuxer.readPacket(l,f);if(!e)break;if(!(l.headerStartPos===a.startPage.headerStartPos&&f<a.startSegmentIndex)){let a=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d,vorbisLastBlocksize:k?.vorbisBlockSize??null},t);i(a);let s=this.encodedPacketToMetadata.get(a);if(i(s),h||e.endPage.headerStartPos!==m.headerStartPos||e.endSegmentIndex!==p?d+=s.durationInSamples:(d=this.granulePositionToTimestampInSamples(l.granulePosition),h=!0,a=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d-s.durationInSamples,vorbisLastBlocksize:k?.vorbisBlockSize??null},t),i(a),s=this.encodedPacketToMetadata.get(a),i(s)),g=a,k=s,h&&(Math.max(d,0)>r||Math.max(s.timestampInSamples,0)===r))break}const s=await this.demuxer.findNextPacketStart(e);if(!s)break;l=s.startPage,f=s.startSegmentIndex}return g}async getPacketSequential(e,t){const r=await this.sequentialScanMutex.acquire();try{const r=D(e*this.internalSampleRate);e=r/this.internalSampleRate;const s=P(this.sequentialScanCache,r,e=>e.timestampInSamples);let n;if(-1!==s){const e=this.sequentialScanCache[s];n=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else n=await this.getFirstPacket(t);let o=0;for(;n&&n.timestamp<e;){const r=await this.getNextPacket(n,t);if(!r||r.timestamp>e)break;if(n=r,o++,100===o){o=0;const e=this.encodedPacketToMetadata.get(n);i(e),this.sequentialScanCache.length>0&&i(a(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return n}finally{r()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const br=(e,t,r)=>{let a=t,s=r;e:for(;;){for(s--;s>=0;s--){if(a.lacingValues[s]<255){s++;break e}}i(-1===s);if(!(1&a.headerType)){s=0;break}const t=x(e,e=>e.headerStartPos<a.headerStartPos);if(!t)return null;a=t,s=a.lacingValues.length}if(i(-1!==s),s===a.lacingValues.length){const t=e[e.indexOf(a)+1];i(t),a=t,s=0}return{page:a,segmentIndex:s}},yr=(e,t,i)=>{if(i>0)return{page:t,segmentIndex:i-1};const r=x(e,e=>e.headerStartPos<t.headerStartPos);return r?{page:r,segmentIndex:r.lacingValues.length-1}:null};var wr,Tr;(Tr=wr||(wr={}))[Tr.PCM=1]="PCM",Tr[Tr.IEEE_FLOAT=3]="IEEE_FLOAT",Tr[Tr.ALAW=6]="ALAW",Tr[Tr.MULAW=7]="MULAW",Tr[Tr.EXTENSIBLE=65534]="EXTENSIBLE";class Sr extends Rt{constructor(e){super(e),this.metadataPromise=null,this.dataStart=-1,this.dataSize=-1,this.audioInfo=null,this.trackBackings=[],this.lastKnownPacketIndex=0,this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),i(e);const t=In(e,4),r="RIFX"!==t,a="RF64"===t,s=pn(e,r);let n=a?this.reader.fileSize:Math.min(s+8,this.reader.fileSize??1/0);if("WAVE"!==In(e,4))throw new Error("Invalid WAVE file - wrong format");let o=0,c=null,l=e.filePos;for(;null===n||l<n;){let e=this.reader.requestSlice(l,8);if(e instanceof Promise&&(e=await e),!e)break;const t=In(e,4),i=pn(e,r),s=e.filePos;if(a&&0===o&&"ds64"!==t)throw new Error('Invalid RF64 file: First chunk must be "ds64".');if("fmt "===t)await this.parseFmtChunk(s,i,r);else if("data"===t){if(c??(c=i),this.dataStart=e.filePos,this.dataSize=Math.min(c,(n??1/0)-this.dataStart),null===this.reader.fileSize)break}else if("ds64"===t){let e=this.reader.requestSlice(s,i);if(e instanceof Promise&&(e=await e),!e)break;const t=yn(e,r);c=yn(e,r),n=Math.min(t+8,this.reader.fileSize??1/0)}else"LIST"===t?await this.parseListChunk(s,i,r):"ID3 "!==t&&"id3 "!==t||await this.parseId3Chunk(s,i);l=s+i+(1&i),o++}if(!this.audioInfo)throw new Error('Invalid WAVE file - missing "fmt " chunk');if(-1===this.dataStart)throw new Error('Invalid WAVE file - missing "data" chunk');const u=this.audioInfo.blockSizeInBytes;this.dataSize=Math.floor(this.dataSize/u)*u,this.trackBackings.push(new vr(this))})())}async parseFmtChunk(e,t,i){let r=this.reader.requestSlice(e,t);if(r instanceof Promise&&(r=await r),!r)return;let a=dn(r,i);const s=dn(r,i),n=pn(r,i);r.skip(4);const o=dn(r,i);let c;if(c=14===t?8:dn(r,i),t>=18&&357!==a){const e=dn(r,i),s=t-18;if(Math.min(s,e)>=22&&a===wr.EXTENSIBLE){r.skip(6);const e=ln(r,16);a=e[0]|e[1]<<8}}a!==wr.MULAW&&a!==wr.ALAW||(c=8),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(m instanceof Promise&&(m=await m),!m)return;const p=In(m,4);if("INFO"!==p&&"INF0"!==p)return;let g=m.filePos;for(;g<=e+t-8;){m.filePos=g;const e=In(m,4),t=pn(m,i),p=ln(m,t);let k=0;for(let i=0;i<p.length&&0!==p[i];i++)k++;const b=String.fromCharCode(...p.subarray(0,k));switch((r=this.metadataTags).raw??(r.raw={}),this.metadataTags.raw[e]=b,e){case"INAM":case"TITL":(a=this.metadataTags).title??(a.title=b);break;case"TIT3":(s=this.metadataTags).description??(s.description=b);break;case"IART":(n=this.metadataTags).artist??(n.artist=b);break;case"IPRD":(o=this.metadataTags).album??(o.album=b);break;case"IPRT":case"ITRK":case"TRCK":{const e=b.split("/"),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&((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(b);Number.isNaN(e.getTime())||((u=this.metadataTags).date??(u.date=e))}break;case"YEAR":{const e=Number.parseInt(b,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=b);break;case"ICMT":case"CMNT":case"COMM":(f=this.metadataTags).comment??(f.comment=b)}g+=8+t+(1&t)}}async parseId3Chunk(e,t){let i=this.reader.requestSlice(e,t);if(i instanceof Promise&&(i=await i),!i)return;const r=Nn(i);if(r){const a=t-Fn;if(r.size=Math.min(r.size,a),r.size>0){const t=i.slice(e+Fn,r.size);On(t,r,this.metadataTags)}}}getCodec(){if(i(this.audioInfo),this.audioInfo.format===wr.MULAW)return"ulaw";if(this.audioInfo.format===wr.ALAW)return"alaw";if(this.audioInfo.format===wr.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"}return this.audioInfo.format===wr.IEEE_FLOAT&&4===this.audioInfo.sampleSizeInBytes?"pcm-f32":null}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}}const Pr=2048;class vr{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){const e=this.demuxer.getCodec();return e?(i(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return i(-1!==this.demuxer.dataSize),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return R}getDisposition(){return{...he}}async getPacketAtIndex(e,t){i(e>=0),i(this.demuxer.audioInfo);const r=e*Pr*this.demuxer.audioInfo.blockSizeInBytes;if(r>=this.demuxer.dataSize)return null;const a=Math.min(Pr*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-r);if(null===this.demuxer.reader.fileSize){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,a);if(e instanceof Promise&&(e=await e),!e)return null}let s;if(t.metadataOnly)s=Dt;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,a);e instanceof Promise&&(e=await e),i(e),s=ln(e,a)}const n=e*Pr/this.demuxer.audioInfo.sampleRate,o=a/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new Mt(s,"key",n,o,e,a)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){i(this.demuxer.audioInfo);const r=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Pr,(this.demuxer.dataSize-1)/(Pr*this.demuxer.audioInfo.blockSizeInBytes)));if(r<0)return null;const a=await this.getPacketAtIndex(r,t);if(a)return a;if(0===r)return null;i(null===this.demuxer.reader.fileSize);let s=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;s;){const e=await this.getNextPacket(s,t);if(!e)break;s=e}return s}getNextPacket(e,t){i(this.demuxer.audioInfo);const r=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Pr);return this.getPacketAtIndex(r+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}const Ir=e=>{const t=e.filePos,i=ln(e,9),r=new fe(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}},xr=1024;class Cr extends Rt{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new b,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();i(this.firstFrameHeader),this.trackBackings=[new Br(this)]})())}async advanceReader(){if(0===this.lastLoadedPos)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Fn);if(e instanceof Promise&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Nn(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,7,9);if(e instanceof Promise&&(e=await e),!e)return void(this.lastSampleLoaded=!0);const t=Ir(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 r=me[t.samplingFrequencyIndex];i(void 0!==r);const a=xr/r,s={timestamp:this.nextTimestampInSamples/r,duration:a,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(s),this.nextTimestampInSamples+=xr,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,Fn);if(t instanceof Promise&&(t=await t),!t)break;const i=Nn(t);if(!i)break;let r=this.reader.requestSlice(t.filePos,i.size);if(r instanceof Promise&&(r=await r),!r)break;On(r,i,this.metadataTags),e=t.filePos+i.size}return this.metadataTags}finally{e()}}}class Br{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/xr}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return R}getCodec(){return"aac"}getInternalCodecId(){return i(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){i(this.demuxer.firstFrameHeader);const e=pe[this.demuxer.firstFrameHeader.channelConfiguration];return i(void 0!==e),e}getSampleRate(){i(this.demuxer.firstFrameHeader);const e=me[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return i(void 0!==e),e}getDisposition(){return{...he}}async getDecoderConfig(){return i(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=Dt;else{let e=this.demuxer.reader.requestSlice(i.dataStart,i.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=ln(e,i.dataSize)}return new Mt(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=S(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=P(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<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(i,t);await this.demuxer.advanceReader()}}finally{i()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}class Er extends Rt{constructor(e){super(e),this.loadedSamples=[],this.metadataPromise=null,this.trackBacking=null,this.metadataTags={},this.audioInfo=null,this.lastLoadedPos=null,this.blockingBit=null,this.readingMutex=new b,this.lastSampleLoaded=!1,this.reader=e._reader}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTrackBackings(){return await this.readMetadata(),i(this.trackBacking),[this.trackBacking]}async getMimeType(){return"audio/flac"}async readMetadata(){let e=4;return this.metadataPromise??(this.metadataPromise=(async()=>{for(var t;null===this.reader.fileSize||e<this.reader.fileSize;){let r=this.reader.requestSlice(e,4);if(r instanceof Promise&&(r=await r),e+=4,null===r)throw new Error(`Metadata block at position ${e} is too small! Corrupted file.`);i(r);const a=un(r),s=fn(r),n=0!==(128&a);switch(127&a){case Pt.STREAMINFO:{let t=this.reader.requestSlice(e,s);if(t instanceof Promise&&(t=await t),i(t),null===t)throw new Error(`StreamInfo block at position ${e} is too small! Corrupted file.`);const r=ln(t,34),a=new fe(r),n=a.readBits(16),o=a.readBits(16),c=a.readBits(24),l=a.readBits(24),u=a.readBits(20),d=a.readBits(3)+1;a.readBits(5);const h=a.readBits(36);a.skipBits(128);const f=new Uint8Array(42);f.set(new Uint8Array([102,76,97,67]),0),f.set(new Uint8Array([128,0,0,34]),4),f.set(r,8),this.audioInfo={numberOfChannels:d,sampleRate:u,totalSamples:h,minimumBlockSize:n,maximumBlockSize:o,minimumFrameSize:c,maximumFrameSize:l,description:f},this.trackBacking=new _r(this);break}case Pt.VORBIS_COMMENT:{let t=this.reader.requestSlice(e,s);t instanceof Promise&&(t=await t),i(t),It(ln(t,s),this.metadataTags);break}case Pt.PICTURE:{let r=this.reader.requestSlice(e,s);r instanceof Promise&&(r=await r),i(r);const a=gn(r),n=gn(r),o=l.decode(ln(r,n)),c=gn(r),u=l.decode(ln(r,c));r.skip(16);const d=gn(r),h=ln(r,d);(t=this.metadataTags).images??(t.images=[]),this.metadataTags.images.push({data:h,mimeType:o,kind:3===a?"coverFront":4===a?"coverBack":"unknown",description:u});break}}if(e+=s,n){this.lastLoadedPos=e;break}}if(!this.audioInfo)throw new Error("Missing STREAMINFO metadata block! Corrupted FLAC file.")})())}async readNextFlacFrame({startPos:e,isFirstPacket:t}){i(this.audioInfo);const r=this.audioInfo.maximumBlockSize*this.audioInfo.numberOfChannels*4+16+2,a=this.audioInfo.minimumFrameSize||10,s=(this.audioInfo.maximumFrameSize||r)+16,n=await this.reader.requestSliceRange(e,16,s);if(!n)return null;const o=this.readFlacFrameHeader({slice:n,isFirstPacket:t});if(!o)return null;for(n.filePos=e+a;;){if(n.filePos>n.end-6)return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:n.end-e,isLastFrame:!0};if(255===un(n)){const t=n.filePos;if(un(n)!==(1===this.blockingBit?249:248)){n.filePos=t;continue}n.skip(-2);const i=n.filePos-e,r=this.readFlacFrameHeader({slice:n,isFirstPacket:!1});if(!r){n.filePos=t;continue}if(0===this.blockingBit){if(r.num-o.num!==1){n.filePos=t;continue}}else if(r.num-o.num!==o.blockSize){n.filePos=t;continue}return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:i,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){const r=e.filePos,a=ln(e,4),s=new fe(a);if(32764!==s.readBits(15))return null;if(null===this.blockingBit){i(t);const e=s.readBits(1);this.blockingBit=e}else if(1===this.blockingBit){i(!t);if(1!==s.readBits(1))return null}else{if(0!==this.blockingBit)throw new Error("Invalid blocking bit");i(!t);if(0!==s.readBits(1))return null}const n=(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)(s.readBits(4));if(!n)return null;i(this.audioInfo);const o=((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}})(s.readBits(4),this.audioInfo.sampleRate);if(!o)return null;s.readBits(4),s.readBits(3);if(0!==s.readBits(1))return null;const c=(e=>{let t=0;const i=new fe(ln(e,1));for(;1===i.readBits(1);)t++;if(0===t)return i.readBits(7);const r=[],a=t-1,s=new fe(ln(e,a)),n=8-t-1;for(let o=0;o<n;o++)r.unshift(i.readBits(1));for(let o=0;o<a;o++)for(let e=0;e<8;e++){const t=s.readBits(1);e<2||r.unshift(t)}return r.reduce((e,t,i)=>e|t<<i,0)})(e),l=((e,t)=>"uncommon-u16"===t?hn(e)+1:"uncommon-u8"===t?un(e)+1:"number"===typeof t?t:(B(t),void i(!1)))(e,n),u=((e,t)=>"uncommon-u16"===t?hn(e):"uncommon-u16-10"===t?10*hn(e):"uncommon-u8"===t?un(e):"number"===typeof t?t:null)(e,o);if(null===u)return null;if(u!==this.audioInfo.sampleRate)return null;const d=e.filePos-r,h=un(e);e.skip(-d),e.skip(-1);const f=(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})(ln(e,d));return h!==f?null:{num:c,blockSize:l,sampleRate:u}}async advanceReader(){await this.readMetadata(),i(null!==this.lastLoadedPos),i(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 r=this.loadedSamples[this.loadedSamples.length-1],a={blockOffset:r?r.blockOffset+r.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};this.lastLoadedPos=this.lastLoadedPos+t.size,this.loadedSamples.push(a),t.isLastFrame&&(this.lastSampleLoaded=!0)}}class _r{constructor(e){this.demuxer=e}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return R}getTimeResolution(){return i(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return i(this.demuxer.audioInfo),0===this.demuxer.audioInfo.totalSamples?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...he}}async getDecoderConfig(){return i(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(i(this.demuxer.audioInfo),e<0)throw new Error("Timestamp cannot be negative");const r=await this.demuxer.readingMutex.acquire();try{for(;;){const i=P(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{r()}}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 r=this.demuxer.loadedSamples[e];if(!r)return null;let a;if(t.metadataOnly)a=Dt;else{let e=this.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(e instanceof Promise&&(e=await e),!e)return null;a=ln(e,r.byteSize)}i(this.demuxer.audioInfo);const s=r.blockOffset/this.demuxer.audioInfo.sampleRate,n=r.blockSize/this.demuxer.audioInfo.sampleRate;return new Mt(a,"key",s,n,e,r.byteSize)}async getFirstPacket(e){for(;0===this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}const Ar=9e4,Fr=188,Rr="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.",Dr=new Set;class Mr extends Rt{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.reader=e._reader}async readMetadata(){return this.metadataPromise??(this.metadataPromise=(async()=>{let e=this.reader.requestSlice(0,205);e instanceof Promise&&(e=await e),i(e);const t=ln(e,205);if(71===t[0]&&71===t[188])this.packetOffset=0,this.packetStride=Fr;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 r=this.packetOffset,a=null,s=!1,n=!1;for(;;){const e=await this.readPacketHeader(r);if(!e)break;if(0===e.payloadUnitStartIndicator){r+=this.packetStride;continue}const t=await this.readSection(r,!0,!n);if(!t)break;const o=3,c=32;let l=!1;if(!n&&0!==t.pid){if(!(0===t.payload[0]&&0===t.payload[1]&&1===t.payload[2])){const e=new fe(t.payload),i=e.readAlignedByte();e.skipBits(8*i);l=2===e.readBits(8)}}if(0!==t.pid||s)if(t.pid!==a&&!l||n){const e=this.elementaryStreams.find(e=>e.pid===t.pid);e:if(e&&!e.initialized){const r=Or(t,!0);if(!r)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 a=new Wr(e,r);if("video"===e.info.type){for(;;){if(a.suppliedPacket=null,await a.markNextPacket(),"avc"===e.info.codec){if(!a.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(e.info.avcCodecInfo=Ze(a.suppliedPacket.data),!e.info.avcCodecInfo)continue;const t=e.info.avcCodecInfo.sequenceParameterSets[0];i(t);const r=tt(t);e.info.width=r.displayWidth,e.info.height=r.displayHeight;const s=r.pixelAspectRatio.num,n=r.pixelAspectRatio.den;s>0&&n>0&&(s>n?(e.info.squarePixelWidth=Math.round(e.info.width*s/n),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*n/s))),e.info.colorSpace={primaries:h[r.colourPrimaries],transfer:m[r.transferCharacteristics],matrix:g[r.matrixCoefficients],fullRange:!!r.fullRangeFlag},e.info.reorderSize=r.maxDecFrameBuffering;break}if("hevc"===e.info.codec){if(!a.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(e.info.hevcCodecInfo=nt(a.suppliedPacket.data),!e.info.hevcCodecInfo)continue;const t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===Ve.SPS_NUT).nalUnits[0];i(t);const r=st(t);e.info.width=r.displayWidth,e.info.height=r.displayHeight,r.pixelAspectRatio.num>r.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*r.pixelAspectRatio.num/r.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*r.pixelAspectRatio.den/r.pixelAspectRatio.num)),e.info.colorSpace={primaries:h[r.colourPrimaries],transfer:m[r.transferCharacteristics],matrix:g[r.matrixCoefficients],fullRange:!!r.fullRangeFlag},e.info.reorderSize=r.maxDecFrameBuffering;break}throw new Error("Unhandled.")}e.info.decoderConfig={codec:ve({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}),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 a.markNextPacket(),!a.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if("aac"===e.info.codec){const t=on.tempFromBytes(a.suppliedPacket.data),i=Ir(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=pe[i.channelConfiguration],e.info.sampleRate=me[i.samplingFrequencyIndex]}else if("mp3"===e.info.codec){const t=gn(on.tempFromBytes(a.suppliedPacket.data)),i=Me(t,a.suppliedPacket.data.byteLength);if(!i.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");e.info.numberOfChannels=3===i.header.channel?1:2,e.info.sampleRate=i.header.sampleRate}else if("ac3"===e.info.codec){const t=Ct(a.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=xt[t.acmod]+t.lfeon,e.info.sampleRate=ze[t.fscod]}else{if("eac3"!==e.info.codec)throw new Error("Unhandled.");{const t=_t(a.suppliedPacket.data);if(!t)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");const i=At(t);if(null===i)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");e.info.numberOfChannels=Ft(t),e.info.sampleRate=i}}e.info.decoderConfig={codec:Ie({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}else{const e=new fe(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);for(e.skipBits(8*a);8*(r+o)-e.pos>c;){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;for(;e.pos<a;){const t=e.readBits(8),i=e.readBits(8);106===t?s=!0:122!==t&&204!==t||(n=!0),e.skipBits(8*i)}let o=null;switch(t){case 27:case 36:o={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:{let e;if(3===t||4===t)e="mp3";else if(15===t)e="aac";else if(129===t)e="ac3";else{if(135!==t)throw new Error("Unreachable.");e="eac3"}o={type:"audio",codec:e,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:n?o={type:"audio",codec:"eac3",decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}:s&&(o={type:"audio",codec:"ac3",decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1});break;default:Dr.has(t)||(console.warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),Dr.add(t))}o&&this.elementaryStreams.push({demuxer:this,pid:i,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:o,referencePesPackets:[]})}n=!0}else{const e=new fe(t.payload),i=e.readAlignedByte();e.skipBits(8*i),e.skipBits(14);const r=e.readBits(10);for(e.skipBits(40);8*(r+o)-e.pos>c;){const t=e.readBits(16);e.skipBits(3);const i=e.readBits(13);if(0!==t){if(null!==a)throw new Error("Only files with a single program are supported.");a=i}}if(null===a)throw new Error("Program Association Table must link to a Program Map Table.");s=!0}if(n&&this.elementaryStreams.every(e=>e.initialized))break;r+=this.packetStride}if(!n){if(!s)throw new Error("No Program Association Table found in the file.");throw new Error("No Program Map Table found in the file.")}for(const i of this.elementaryStreams)"video"===i.info.type?this.trackBackingEntries.push(new zr(i)):this.trackBackingEntries.push(new Ur(i))})())}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!==S(this.sectionEndPositions,r,e=>e)){l=!1;break}}if(l){const e=P(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(t instanceof Promise&&(t=await t),!t)return null;if(71!==un(t))throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");const i=hn(t);return{payloadUnitStartIndicator:i>>14&1,pid:8191&i,adaptationFieldControl:un(t)>>4&3}}async readPacket(e){let t=this.reader.requestSlice(e,Fr);if(t instanceof Promise&&(t=await t),!t)return null;const i=ln(t,Fr);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)}}}const Nr=(e,t)=>{if(e.payload.byteLength<3)return null;const i=new fe(e.payload);if(1!==i.readBits(24))return null;const r=i.readBits(8);if(i.skipBits(16),188===r||190===r||191===r||240===r||241===r||255===r||242===r||248===r)return null;i.skipBits(8);const a=i.readBits(2);i.skipBits(14);let s=null;if(2===a||3===a)s=0,i.skipBits(4),s+=i.readBits(3)*(1<<30),i.skipBits(1),s+=32768*i.readBits(15),i.skipBits(1),s+=i.readBits(15);else if(t)throw new Error(Rr);return{sectionStartPos:e.startPos,sectionEndPos:e.endPos,pts:s,randomAccessIndicator:e.randomAccessIndicator}},Or=(e,t)=>{i(null!==e.endPos);const r=Nr(e,t);if(!r)return null;const a=new fe(e.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;i(Number.isInteger(c));const l=e.payload.subarray(c,s>0?6+s:e.payload.byteLength);return{...r,data:l}};class Lr{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 r=0;for(const a of e.trackBackingEntries)if(a.getType()===t&&r++,i(a instanceof Lr),a.elementaryStream===this.elementaryStream)break;return r}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return R}getDisposition(){return{...he,primary:!1}}getTimeResolution(){return Ar}isRelativeToUnixEpoch(){return!1}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 Mt(i.metadataOnly?Dt:e.data,r,e.pts/Ar,Math.max(t/Ar,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){const t=this.elementaryStream.firstSection;i(t);const r=Or(t,!0);i(r);const a=new Wr(this.elementaryStream,r),s=new Vr(this,a),n=await s.readNext();if(!n)return null;const o=this.createEncodedPacket(n.packet,n.duration,e);return this.packetBuffers.set(o,s),this.packetSectionStarts.set(o,n.packet.sectionStartPos),o}async getNextPacket(e,t){let r=this.packetBuffers.get(e);if(r){const i=await r.readNext();if(!i)return null;this.packetBuffers.delete(e);const a=this.createEncodedPacket(i.packet,i.duration,t);return this.packetBuffers.set(a,r),this.packetSectionStarts.set(a,i.packet.sectionStartPos),a}const a=this.packetSectionStarts.get(e);if(void 0===a)throw new Error("Packet was not created from this track.");const s=this.elementaryStream.demuxer,n=await s.readSection(a,!0);i(n);const o=Or(n,!0);i(o);const c=new Wr(this.elementaryStream,o);r=new Vr(this,c);const l=e.sequenceNumber;for(;;){const e=await r.readNext();if(!e)return null;if(e.packet.sequenceNumber>l){const i=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(i,r),this.packetSectionStarts.set(i,e.packet.sectionStartPos),i}}}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,r){const s=D(e*Ar),n=this.elementaryStream.demuxer,{reader:o,seekChunkSize:c}=n,l=this.elementaryStream.pid,u=async(e,t,i)=>{let r=e;for(;r<t;){const e=await n.readPacketHeader(r);if(!e)return null;if(e.pid===l&&1===e.payloadUnitStartIndicator){const e=await n.readSection(r,i);if(!e)return null;const t=Nr(e,!1);if(t&&null!==t.pts)return{pesPacketHeader:t,section:e}}r+=n.packetStride}return null},d=this.elementaryStream.firstSection;i(d);const h=Nr(d,!0);if(i(h),s<h.pts)return null;let f;const m=this.elementaryStream.referencePesPackets,p=P(m,s,e=>e.pts),g=-1!==p?m[p]:null;if(g&&s-g.pts<45e3)f=g.sectionStartPos;else{let e=0;if(null!==o.fileSize){const t=Math.ceil(o.fileSize/c);if(t>1){let i=0,r=t-1;for(e=i;i<=r;){const t=Math.floor((i+r)/2),a=N(t*c,n.packetStride)+h.sectionStartPos,o=a+c,l=await u(a,o,!1);l?l.pesPacketHeader.pts<=s?(e=t,i=t+1):r=t-1:r=t-1}}}f=N(e*c,n.packetStride)+h.sectionStartPos}const k=await u(f,o.fileSize??1/0,!1);let b=k?.pesPacketHeader??null;b||(b=h);const y=this.getReorderSize(),w=async(e,t)=>{const o=await n.readSection(e,!0);i(o);const c=Or(o,!0);i(c);const l=new Wr(this.elementaryStream,c),u=new Vr(this,l);for(;;){if((a(u.presentationOrderPackets)?.pts??-1/0)>=s)break;if(!(await u.readNextPacket()))break}const d=C(u.presentationOrderPackets,t);if(-1===d)return null;const h=u.presentationOrderPackets[d],f=0===d?0:h.pts-u.presentationOrderPackets[d-1].pts;for(;u.decodeOrderPackets[0]!==h;)u.decodeOrderPackets.shift();u.lastDuration=f;const m=await u.readNext();i(m);const p=this.createEncodedPacket(m.packet,m.duration,r);return this.packetBuffers.set(p,u),this.packetSectionStarts.set(p,m.packet.sectionStartPos),p};if(!t||this.allPacketsAreKeyPackets()){e:for(;;){let e=b.sectionStartPos+n.packetStride;for(;;){const t=await n.readPacketHeader(e);if(!t)break e;if(t.pid===l&&1===t.payloadUnitStartIndicator){const t=await n.readSection(e,!1);if(t){const e=Nr(t,!1);if(e&&null!==e.pts){if(e.pts>s)break e;b=e,qr(this.elementaryStream,b);break}}}e+=n.packetStride}}e:for(let e=0;e<y+1;e++){let e=b.sectionStartPos-n.packetStride;for(;e>=n.packetOffset;){const t=await n.readPacketHeader(e);if(!t)break e;if(t.pid===l&&1===t.payloadUnitStartIndicator){const t=await n.readSection(e,!1);if(t){const e=Nr(t,!1);if(e&&null!==e.pts){b=e;break}}}e-=n.packetStride}}return w(b.sectionStartPos,e=>e.pts<=s)}{let e=f,t=null;const r=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let a=null;const f=e<=h.sectionStartPos;let m,p=null;if(f)m=h,p=d;else{const t=await u(e,o.fileSize??1/0,r);m=t?.pesPacketHeader??null,p=t?.section??null}let g=!1,k=0;e:for(;m&&!(null!==t&&m.sectionStartPos>=t);){if(m.pts<=s){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=1===m.randomAccessIndicator;else{i(p);const t=Or(p,!0);i(t);const r=new Wr(this.elementaryStream,t);await r.markNextPacket(),e=1===r.suppliedPacket?.randomAccessIndicator}e&&(a=m)}if(m.pts>s&&(g=!0),g&&(k++,k>y))break;let e=m.sectionStartPos+n.packetStride;for(;;){const t=await n.readPacketHeader(e);if(!t)break e;if(t.pid===l&&1===t.payloadUnitStartIndicator){const t=await n.readSection(e,r);if(t){const e=Nr(t,!1);if(e&&null!==e.pts){m=e,p=t,qr(this.elementaryStream,m);break}}}e+=n.packetStride}}if(a){let e=a;if(0===k)e:for(let i=0;i<y;i++){let t=e.sectionStartPos-n.packetStride;for(;t>=n.packetOffset;){const i=await n.readPacketHeader(t);if(!i)break e;if(i.pid===l&&1===i.payloadUnitStartIndicator){const i=await n.readSection(t,r);if(i){const t=Nr(i,!1);if(t&&null!==t.pts){e=t;break}}}t-=n.packetStride}}const t=await w(e.sectionStartPos,e=>e.pts<=s&&1===e.randomAccessIndicator);return i(t),t}if(f)return null;t=e,e=Math.max(N(e-h.sectionStartPos-c,n.packetStride)+h.sectionStartPos,h.sectionStartPos)}}}}class zr extends Lr{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 i(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}}class Ur extends Lr{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return i(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}}const qr=(e,t)=>{const i=e.referencePesPackets,r=P(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<s)return!1;if(r<i.length-1){const e=i[r+1];if(e.pts<t.pts)return!1;if(e.sectionStartPos-t.sectionStartPos<s)return!1}}return i.splice(r+1,0,t),!0};class Wr{constructor(e,t){this.currentPos=0,this.pesPackets=[],this.currentPesPacketIndex=0,this.currentPesPacketPos=0,this.endPos=0,this.lastSuppliedPesPacket=null,this.nextPts=null,this.suppliedPacket=null,this.elementaryStream=e,this.pid=e.pid,this.demuxer=e.demuxer,this.startingPesPacket=t}ensureBuffered(e){const t=this.endPos-this.currentPos;return t>=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){const e=this.pesPackets[this.currentPesPacketIndex];return i(e),e}async bufferData(e){const t=this.endPos+e;for(;this.endPos<t;){let e;if(0===this.pesPackets.length)e=this.startingPesPacket;else{let t=a(this.pesPackets).sectionEndPos;for(i(null!==t);;){const i=await this.demuxer.readPacketHeader(t);if(!i)return;if(i.pid===this.pid){const i=await this.demuxer.readSection(t,!0);if(!i)return;const r=Or(i,!1);if(r){e=r;break}}t+=this.demuxer.packetStride}}this.pesPackets.push(e),this.endPos+=e.data.byteLength}}readBytes(e){const t=this.getCurrentPesPacket(),i=this.currentPos-this.currentPesPacketPos,r=i+e;if(this.currentPos+=e,r<=t.data.byteLength)return t.data.subarray(i,r);const a=new Uint8Array(e);a.set(t.data.subarray(i));let s=t.data.byteLength-i;for(;;){this.advanceCurrentPacket();const t=this.getCurrentPesPacket(),i=e-s;if(i<=t.data.byteLength){a.set(t.data.subarray(0,i),s);break}a.set(t.data,s),s+=t.data.byteLength}return a}readU8(){let e=this.getCurrentPesPacket();const t=this.currentPos-this.currentPesPacketPos;return this.currentPos++,t<e.data.byteLength?e.data[t]:(this.advanceCurrentPacket(),e=this.getCurrentPesPacket(),e.data[0])}seekTo(e){if(e!==this.currentPos){if(e<this.currentPos)for(;e<this.currentPesPacketPos;){this.currentPesPacketIndex--;const e=this.getCurrentPesPacket();this.currentPesPacketPos-=e.data.byteLength}else for(;;){const t=this.getCurrentPesPacket();if(e<this.currentPesPacketPos+t.data.byteLength)break;this.currentPesPacketPos+=t.data.byteLength,this.currentPesPacketIndex++}this.currentPos=e}}skip(e){this.seekTo(this.currentPos+e)}advanceCurrentPacket(){this.currentPesPacketPos+=this.getCurrentPesPacket().data.byteLength,this.currentPesPacketIndex++}async markNextPacket(){i(!this.suppliedPacket);const e=this.elementaryStream;if("video"===e.info.type){const t=e.info.codec,i=1024;if("avc"!==t&&"hevc"!==t)throw new Error("Unhandled.");let r=null;for(;;){let e=this.ensureBuffered(i);if(e instanceof Promise&&(e=await e),0===e)break;const a=this.currentPos,s=this.readBytes(e),n=s.byteLength;let o=0;for(;o<n;){const e=s.indexOf(0,o);if(-1===e||e>=n)break;o=e;const i=a+o;if(o+4>=n){this.seekTo(i);break}const c=s[o+1],l=s[o+2],u=s[o+3];let d=0,h=null;if(0===c&&0===l&&1===u?(d=4,h=s[o+4]):0===c&&1===l&&(d=3,h=u),0===d){o++;continue}const f=i;if(null!==r){if(null!==h){const e="avc"===t?$e(h):at(h);if("avc"===t?e===qe.AUD:e===Ve.AUD_NUT){const e=f-r;return this.seekTo(r),this.supplyPacket(e,0)}}o+=d}else r=f,o+=d}if(e<i)break}if(null!==r){const e=this.endPos-r;return this.seekTo(r),this.supplyPacket(e,0)}}else{const t=e.info.codec,r=128;for(;;){let a=this.ensureBuffered(r);a instanceof Promise&&(a=await a);const s=this.currentPos;for(;this.currentPos-s<a;){const r=this.readU8();if("aac"===t){if(255!==r)continue;this.skip(-1);const t=this.currentPos;let i=this.ensureBuffered(9);if(i instanceof Promise&&(i=await i),i<9)return;const a=this.readBytes(9),s=Ir(on.tempFromBytes(a));if(s){this.seekTo(t);let i=this.ensureBuffered(s.frameLength);return i instanceof Promise&&(i=await i),this.supplyPacket(i,Math.round(9216e4/e.info.sampleRate))}this.seekTo(t+1)}else{if("mp3"!==t){if("ac3"===t){if(11!==r)continue;this.skip(-1);const t=this.currentPos;let a=this.ensureBuffered(5);if(a instanceof Promise&&(a=await a),a<5)return;const s=this.readBytes(5);if(11!==s[0]||119!==s[1]){this.seekTo(t+1);continue}const n=s[4]>>6,o=63&s[4];if(3===n||o>37){this.seekTo(t+1);continue}const c=Bt[3*o+n];i(void 0!==c),this.seekTo(t),a=this.ensureBuffered(c),a instanceof Promise&&(a=await a);const l=Math.round(13824e4/e.info.sampleRate);return this.supplyPacket(a,l)}if("eac3"===t){if(11!==r)continue;this.skip(-1);const t=this.currentPos;let i=this.ensureBuffered(5);if(i instanceof Promise&&(i=await i),i<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=Et[n];this.seekTo(t),i=this.ensureBuffered(s),i instanceof Promise&&(i=await i);const c=256*o,l=Math.round(c*Ar/e.info.sampleRate);return this.supplyPacket(i,l)}throw new Error("Unhandled.")}{if(255!==r)continue;this.skip(-1);const t=this.currentPos;let i=this.ensureBuffered(4);if(i instanceof Promise&&(i=await i),i<4)return;const a=this.readBytes(4),s=c(a).getUint32(0),n=Me(s,null);if(n.header){this.seekTo(t);let i=this.ensureBuffered(n.header.totalSize);i instanceof Promise&&(i=await i);const r=n.header.audioSamplesInFrame*Ar/e.info.sampleRate;return this.supplyPacket(i,Math.round(r))}this.seekTo(t+1)}}}if(a<r)break}}}supplyPacket(e,t){const r=this.getCurrentPesPacket();let a;if(this.lastSuppliedPesPacket===r)i(null!==this.nextPts),a=this.nextPts;else{if(null===r.pts)throw new Error(Rr);a=r.pts,qr(this.elementaryStream,r)}this.lastSuppliedPesPacket=r,this.nextPts=a+t;const s=r.sectionStartPos,n=s+(this.currentPos-this.currentPesPacketPos),o=this.readBytes(e);let c=r.randomAccessIndicator;if(0===c&&!this.elementaryStream.canBeTrustedWithKeyPackets)if("audio"===this.elementaryStream.info.type)c=1;else if(this.elementaryStream.info.decoderConfig){const e="key"===St(this.elementaryStream.info.codec,this.elementaryStream.info.decoderConfig,o);c=Number(e)}this.suppliedPacket={pts:a,data:o,sequenceNumber:n,sectionStartPos:s,randomAccessIndicator:c},this.pesPackets.splice(0,this.currentPesPacketIndex),this.currentPesPacketIndex=0}}class Vr{constructor(e,t){this.decodeOrderPackets=[],this.reorderBuffer=[],this.presentationOrderPackets=[],this.reachedEnd=!1,this.lastDuration=0,this.backing=e,this.context=t,this.reorderSize=e.getReorderSize(),i(this.reorderSize>=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 r;if(i(-1!==t),t===this.presentationOrderPackets.length-1)r=this.lastDuration;else{r=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=r}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:r}}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(i(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;i<this.reorderBuffer.length;i++)this.reorderBuffer[i].pts<this.reorderBuffer[e].pts&&(e=i);const t=this.reorderBuffer[e];this.presentationOrderPackets.push(t),this.reorderBuffer.splice(e,1)}}flushReorderBuffer(){this.reorderBuffer.sort((e,t)=>e.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}const Hr="application/vnd.apple.mpegurl",Kr="#EXT-X-STREAM-INF:",jr="#EXT-X-I-FRAME-STREAM-INF:",Xr="#EXT-X-MEDIA:",$r="#EXTINF:",Qr="#EXT-X-MAP:",Gr="#EXT-X-KEY:",Yr="#EXT-X-MEDIA-SEQUENCE:",Jr="#EXT-X-BYTERANGE:",Zr="#EXT-X-PROGRAM-DATE-TIME:",ea="#EXT-X-TARGETDURATION:",ta="#EXT-X-PLAYLIST-TYPE:",ia=e=>0===e.length||e.startsWith("#")&&!e.startsWith("#EXT");class ra{constructor(e){this._attributes={};let t="",i="",r=!1,a=!1;for(let s=0;s<e.length;s++){const n=e[s];'"'===n?a=!a:"="!==n||r||a?","!==n||a?r?i+=n:t+=n:(t&&(this._attributes[t.trim().toLowerCase()]=i),t="",i="",r=!1):r=!0}t&&(this._attributes[t.trim().toLowerCase()]=i)}get(e){return this._attributes[e.toLowerCase()]??null}getAsNumber(e){const t=this.get(e);if(null===t)return null;const i=Number(t);return Number.isFinite(i)?i:null}merge(e){Object.assign(this._attributes,e._attributes)}}class aa{constructor(e,t,i){this.nextInputCacheAge=0,this.inputCache=[],this.trackBackingsPromise=null,this.firstSegment=null,this.firstSegmentFirstTimestamps=new WeakMap,this.firstTimestampCache=new WeakMap,this.input=e,this.path=t,this.trackDeclarations=i}async getDurationFromMetadata(e){const t=await this.getSegmentAt(1/0,{skipLiveWait:e.skipLiveWait});return t?t.timestamp+t.duration:null}async getTrackBackings(){return this.trackBackingsPromise??(this.trackBackingsPromise=(async()=>{const e=[];if(this.trackDeclarations){for(const t of this.trackDeclarations)if("video"===t.type){const i=ae(e,e=>"video"===e.getType())+1;e.push(new na(this,t,i))}else if("audio"===t.type){const i=ae(e,e=>"audio"===e.getType())+1;e.push(new oa(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=ae(e,e=>"video"===e.getType())+1;e.push(new na(this,{id:e.length+1,type:"video"},t))}else if("audio"===r.type){const t=ae(e,e=>"audio"===e.getType())+1;e.push(new oa(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 sa{constructor(e,t,i){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=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.");const t=this.segmentedInput.getInputForSegment(this.segmentedInput.firstSegment),i=(await t.getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number);if(!i)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=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)}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(),i(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.relativeToUnixEpoch}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,r){i(e.sequenceNumber>=0),i(this.segmentedInput.firstSegment);const a=await this.segmentedInput.getMediaOffset(t,r.input),s=t.timestamp-this.segmentedInput.firstSegment.timestamp,n=e.clone({timestamp:M(e.timestamp+a,await r.getTimeResolution()),sequenceNumber:Math.floor(1e8*s)+e.sequenceNumber});return this.packetInfos.set(n,{segment:t,track:r,sourcePacket:e}),n}async getFirstPacket(e){await this.hydrate(),i(this.segmentedInput.firstSegment),i(this.firstInputTrack);const t=await this.firstInputTrack._backing.getFirstPacket(e);return t?this.createAdjustedPacket(t,this.segmentedInput.firstSegment,this.firstInputTrack):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 na extends sa{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 oa extends sa{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())}}te();const ca=1/0;class la extends le{constructor(){super(...arguments),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._sizePromise=null,this.onread=null}async getSizeOrNull(){if(this._disposed)throw new sn;return this._sizePromise??(this._sizePromise=(async()=>{let e=this._getFileSize();return void 0!==e||(await this._read(0,1,0,ca),e=this._getFileSize(),i(void 0!==e)),e})())}async getSize(){if(this._disposed)throw new sn;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 Ta(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit("read",{start:e,end:t})}ref(){return new ua(this)}}class ua{constructor(e){if(this._freed=!1,e._disposed)throw new Error("Cannot ref a disposed source.");e._refCount++,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;i(e._refCount>0),e._refCount--,0===e._refCount&&(e._dispose(),e._disposed=!0),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}}class da extends la{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 la||e instanceof ua))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");const i=e instanceof la?e.ref():e;return(t=i.source)._usedForHls||(t._usedForHls=this._usedForHls),i};return t instanceof Promise?t.then(i):i(t)}}const ha=(e,t)=>e.path===t.path;class fa extends da{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,r,a){if(!this._root){if(!this._rootRequest){const e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{const t=e instanceof la?e.ref():e;return this._root=t,this._rootRequest=null,t};e instanceof Promise?this._rootRequest=e.then(t):(t(e),i(this._root))}if(this._rootRequest)return this._rootRequest.then(i=>i.source._read(e,t,r,a))}return this._root.source._read(e,t,r,a)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}}class ma extends la{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&&(!ie(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");super(),this._readers=new WeakMap,this._blob=e,this._orchestrator=new wa({maxCacheSize:t.maxCacheSize??8388608,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:ya.fileSystem}),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){i(e.strictTarget);let t=this._readers.get(e);if(void 0===t){if("stream"in this._blob&&!K()){t=this._blob.slice(e.currentPos).stream().getReader()}else t=null;this._readers.set(e,t)}for(;e.currentPos<e.targetPos&&!e.aborted;)if(t){const{done:i,value:r}=await t.read();if(i)throw this._orchestrator.onWorkerFinished(e),new Error("Blob reader stopped unexpectedly before all requested data was read.");if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+r.length),this._orchestrator.supplyWorkerData(e,r)}else{const t=await this._blob.slice(e.currentPos,e.targetPos).arrayBuffer();if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+t.byteLength),this._orchestrator.supplyWorkerData(e,new Uint8Array(t))}this._orchestrator.signalWorkerStoppedRunning(e),e.aborted&&await(t?.cancel())}_dispose(){this._orchestrator.dispose()}}const pa=(e,t,i)=>{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))){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 console.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)},ga=new Set;class ka extends da{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&&(!ie(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.");super(e instanceof Request?e.url:e instanceof URL?e.href:e,e=>new ka(e.path,this._options)),this._fileSizeDetermined=!1,this._url=e,this._options=t,this._getRetryDelay=t.getRetryDelay??pa;this._orchestrator=new wa({maxCacheSize:t.maxCacheSize??67108864,maxWorkerCount:t.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:ya.network})}_getFileSize(){return this._fileSizeDetermined?this._orchestrator.fileSize:void 0}_read(e,t,i,r){return this._orchestrator.read(e,t,i,r)}async _runWorker(e){for(;;){const i=new AbortController,r=await W(this._options.fetchFn??fetch,this._url,U(this._options.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}`);e:if(null===this._orchestrator.fileSize){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");i&&this._orchestrator.supplyFileSize(e.currentPos+Number(i))}if(this._fileSizeDetermined=!0,206!==r.status){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")||ga.has(e.origin)||(console.log(this._usedForHls,this._url,e.pathname),console.warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the entire resource will now be downloaded. To enable efficient media file streaming across a network, please make sure your server supports range requests.`),ga.add(e.origin))}e.currentPos=0,this._orchestrator.options.maxCacheSize=1/0,null!==this._orchestrator.fileSize?e.targetPos=this._orchestrator.fileSize:(e.targetPos=1/0,e.strictTarget=!1),this._orchestrator.consolidateEverythingIntoOneWorker(e)}if(!r.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");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){console.error("Error while reading response stream. Attempting to resume.",t),await ce(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)}}}_dispose(){this._orchestrator.dispose()}}class ba extends la{constructor(e,t={}){if(!(e instanceof ReadableStream))throw new TypeError("stream must be a ReadableStream.");if(!t||"object"!==typeof t)throw new TypeError("options must be an object.");if(void 0!==t.maxCacheSize&&(!ie(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");super(),this._reader=null,this._cache=[],this._pendingSlices=[],this._currentIndex=0,this._targetIndex=0,this._maxRequestedIndex=0,this._endIndex=null,this._pulling=!1,this._stream=e,this._maxCacheSize=t.maxCacheSize??16777216}_getFileSize(){return this._endIndex}_read(e,t){if(null!==this._endIndex&&t>this._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);const i=P(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 c=i;c<this._cache.length;c++){const i=this._cache[c];if(i.start>=t)break;const r=Math.max(e,i.start);r>a&&this._throwDueToCacheMiss();const n=Math.min(t,i.end);r<n&&(s.set(i.bytes.subarray(r-i.start,n-i.start),r-e),a=n)}if(a===t)return{bytes:s,view:c(s),offset:e};this._currentIndex>a&&this._throwDueToCacheMiss();const{promise:n,resolve:o,reject:l}=I();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))throw e;this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0})),n}_throwDueToCacheMiss(){throw new Error("Read is before the cached region. With ReadableStreamSource, you must access the data more sequentially or increase the size of its cache.")}async _pull(){for(this._reader??(this._reader=this._stream.getReader());this._currentIndex<this._targetIndex&&!this._disposed;){const{done:e,value:t}=await this._reader.read();if(e){for(const e of this._pendingSlices)e.resolve(null);this._pendingSlices.length=0,this._endIndex=this._currentIndex;break}const i=this._currentIndex,r=this._currentIndex+t.byteLength;for(let a=0;a<this._pendingSlices.length;a++){const e=this._pendingSlices[a],s=Math.max(i,e.start),n=Math.min(r,e.end);s<n&&(e.bytes.set(t.subarray(s-i,n-i),s-e.start),n===e.end&&(e.resolve({bytes:e.bytes,view:c(e.bytes),offset:e.start}),this._pendingSlices.splice(a,1),a--))}for(this._cache.push({start:i,end:r,bytes:t,view:c(t),age:0});this._cache.length>0;){const e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}}const ya={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(Z(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 wa{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,r,a){i(!this.disposed);const s=this.options.prefetchProfile(e,t,this.workers),n=Math.max(s.start,r),o=Math.min(s.end,this.fileSize??1/0,a);i(n<=e&&t<=o);let l=null;const u=P(this.cache,e,e=>e.start),d=-1!==u?this.cache[u]:null;d&&d.start<=e&&t<=d.end&&(d.age=this.nextAge++,l={bytes:d.bytes,view:d.view,offset:d.start});const h=P(this.cache,n,e=>e.start),f=l?null:new Uint8Array(t-e);let m=0,p=n;const g=[];if(-1!==h){for(let r=h;r<this.cache.length;r++){const a=this.cache[r];if(a.start>=o)break;if(a.end<=n)continue;const s=Math.max(n,a.start),c=Math.min(o,a.end);if(i(s<=c),p<s&&g.push({start:p,end:s}),p=c,f){const i=Math.max(e,a.start),r=Math.min(t,a.end);if(i<r){const t=i-e;f.set(a.bytes.subarray(i-a.start,r-a.start),t),t===m&&(m=r-e)}}a.age=this.nextAge++}p<o&&g.push({start:p,end:o})}else g.push({start:n,end:o});if(f&&m>=f.length&&(l={bytes:f,view:c(f),offset:e}),0===g.length)return i(l),l;const{promise:k,resolve:b,reject:y}=I(),w=[];for(const i of g){const r=Math.max(e,i.start),a=Math.min(t,i.end);r===i.start&&a===i.end?w.push(i):r<a&&w.push({start:r,end:a})}const T=f&&{start:e,bytes:f,holes:w,resolve:b,reject:y};e:for(const i of g){for(const r of this.workers){if(this.checkHoleAgainstWorker(r,i,T?[T]:[])){this.checkQueuedReadsAgainstWorker(r);continue e}}const e=i.end<o||null!==this.fileSize,t=this.createWorker(i.start,i.end,e);if(t)T&&(t.pendingSlices=[T]),this.runWorker(t);else{let t=P(this.queuedReads,i.start,e=>e.hole.start),r=-1!==t?this.queuedReads[t]:null;for(r&&i.start<=r.hole.end?(r.hole.end=Math.max(r.hole.end,i.end),r.strictTarget&&(r.strictTarget=e),T&&r.pendingSlices.push(T)):(t++,r={hole:{start:i.start,end:i.end},strictTarget:e,pendingSlices:T?[T]:[],age:this.nextAge++},this.queuedReads.splice(t,0,r));t+1<this.queuedReads.length;){const e=this.queuedReads[t+1];if(e.hole.start>r.hole.end)break;r.hole.end=Math.max(r.hole.end,e.hole.end),r.pendingSlices.push(...e.pendingSlices),r.strictTarget&&(r.strictTarget=e.strictTarget),r.age=Math.min(r.age,e.age),this.queuedReads.splice(t+1,1)}}}return l||(i(f),l=k.then(t=>t&&{bytes:t,view:c(t),offset:e})),l}checkHoleAgainstWorker(e,t,i){if(Z(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t<i.length;t++){const r=i[t];e.pendingSlices.includes(r)||e.pendingSlices.push(r)}return e.running||this.runWorker(e),!0}return!1}checkQueuedReadsAgainstWorker(e){let t=!1;for(let i=0;i<this.queuedReads.length;i++){const r=this.queuedReads[i];if(this.checkHoleAgainstWorker(e,r.hole,r.pendingSlices))this.queuedReads.splice(i,1),i--,t=!0;else if(t)break}}createWorker(e,t,r){if(this.workers.length>=this.options.maxWorkerCount){let e=null,t=null;for(let i=0;i<this.workers.length;i++){const r=this.workers[i];r.running||0!==r.pendingSlices.length||e&&!(r.age<e.age)||(t=i,e=r)}if(!e)return null;i(null!==t),i(0===e.pendingSlices.length),this.workers.splice(t,1)}const a={startPos:e,currentPos:e,targetPos:t,strictTarget:r,running:!1,aborted:this.disposed,pendingSlices:[],age:this.nextAge++};return this.workers.push(a),a}runWorker(e){i(!e.running),i(e.currentPos<e.targetPos),e.running=!0,e.age=this.nextAge++,this.options.runWorker(e).catch(t=>{if(e.running=!1,!(e.pendingSlices.length>0))throw t;e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let i=1;i<this.queuedReads.length;i++){this.queuedReads[i].age<this.queuedReads[e].age&&(e=i)}const t=this.queuedReads[e];this.queuedReads.splice(e,1);const r=this.createWorker(t.hole.start,t.hole.end,t.strictTarget);i(r),r.pendingSlices=t.pendingSlices,this.runWorker(r)}})}consolidateEverythingIntoOneWorker(e){const t=new Set(e.pendingSlices);for(let i=0;i<this.workers.length;i++){const r=this.workers[i];if(r!==e){for(const e of r.pendingSlices)t.add(e);r.aborted=!0,r.pendingSlices.length=0,this.workers.splice(i,1),i--}}for(let i=0;i<this.queuedReads.length;i++){const e=this.queuedReads[i];for(const i of e.pendingSlices)t.add(i)}e.pendingSlices=[...t],this.queuedReads.length=0}supplyWorkerData(e,t){i(!e.aborted);const r=e.currentPos,a=r+t.length;this.insertIntoCache({start:r,end:a,bytes:t,view:c(t),age:this.nextAge++}),e.currentPos+=t.length,e.currentPos>e.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let i=0;i<e.pendingSlices.length;i++){const s=e.pendingSlices[i],n=Math.max(r,s.start),o=Math.min(a,s.start+s.bytes.length);n<o&&s.bytes.set(t.subarray(n-r,o-r),n-s.start);for(let e=0;e<s.holes.length;e++){const t=s.holes[e];r<=t.start&&a>t.start&&(t.start=a),t.end<=t.start&&(s.holes.splice(e,1),e--)}0===s.holes.length&&(s.resolve(s.bytes),e.pendingSlices.splice(i,1),i--)}for(let i=0;i<this.workers.length;i++){const t=this.workers[i];e===t||t.running||Z(r,a,t.currentPos,t.targetPos)&&(this.workers.splice(i,1),i--)}}supplyFileSize(e){i(null===this.fileSize),this.fileSize=e;for(const t of this.workers){t.targetPos=Math.min(t.targetPos,e),t.strictTarget=!0;for(let i=0;i<t.pendingSlices.length;i++){const r=t.pendingSlices[i];for(const a of r.holes)if(a.end>e){r.resolve(null),t.pendingSlices.splice(i,1),i--;break}}}for(let t=0;t<this.queuedReads.length;t++){const i=this.queuedReads[t];if(i.hole.start>=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<i.pendingSlices.length;t++){const r=i.pendingSlices[t];r.start>=e&&(r.resolve(null),i.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.pendingSlices.length=0}onWorkerFinished(e){const t=this.workers.indexOf(e);i(-1!==t),e.running=!1,this.workers.splice(t,1),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=P(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=c(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<this.cache.length;i++){const t=this.cache[i];if(e.end<=t.start)break;if(e.end>=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=c(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;i<this.cache.length;i++){const r=this.cache[i];r.age<t.age&&(e=i,t=r)}if(this.currentCacheSize-t.bytes.length<=this.options.maxCacheSize)break;this.cache.splice(e,1),this.currentCacheSize-=t.bytes.length}}dispose(){for(const e of this.workers)e.aborted=!0;this.workers.length=0,this.cache.length=0,this.disposed=!0}}class Ta extends la{constructor(e,t,i){if(super(),this._ref=null,e._disposed)throw new Error("Cannot create a slice of a disposed source.");this._baseSource=e,this._offset=t,this._length=i??null}_getFileSize(){const e=this._baseSource._getFileSize();return void 0===e?null!==this._length?this._length:void 0:null===e?null!==this._length?this._length:null:F(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._baseSource._read(this._offset+e,this._offset+t,this._offset+i,this._offset+r);return a instanceof Promise?a.then(e=>e?(e.offset-=this._offset,e):null):a?(a.offset-=this._offset,a):null}_dispose(){this._ref?.free()}ref(){return this._ref??(this._ref=this._baseSource.ref()),super.ref()}}var Sa=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},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,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 va=/^0[xX][0-9a-fA-F]+$/,Ia=/^data:.*;base64,/i;class xa extends aa{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.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??(this.currentUpdateSegmentsPromise=(async()=>{try{const e=this.getRemainingWaitTimeMs();e>0&&await ce(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 r=Sa(t,await this.demuxer.input._getSourceUncached({path:this.path,isRoot:!1}),!1),a=new nn(r.source),s=await a.requestEntireFile();i(s),e=xn(s,s.length,{ignore:ia})}catch(y){t.error=y,t.hasError=!0}finally{Pa(t)}}let t=!1,r=0,s=null,n=null,o=0,l=null,u=null,d=null,h=null,f=null,m=null,p=!1,g=a(this.segments)??null;const k=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}},b=e=>{o=e,g&&(i(null!==g.sequenceNumber),g.sequenceNumber<e&&(r=g.timestamp+g.duration,l=g.firstSegment,u=g.initSegment,f=g.lastProgramDateTimeSeconds,g=null))};for(let i=0;i<e.length;i++){const y=e[i];if(t){if(!y.startsWith("#")){if(!g){if(null===s)throw new Error("Invalid M3U8 file; a segment must be preceded by an #EXTINF tag.");let e=n;if(e&&"AES-128"===e.method&&!e.iv){const t=new Uint8Array(Ht),i=c(t);i.setUint32(8,Math.floor(o/2**32)),i.setUint32(12,o),e={...e,iv:t}}const t=re(this.path,y),i={timestamp:r,relativeToUnixEpoch:null!==f,firstSegment:l,sequenceNumber:o,location:{path:t,offset:h?.offset??0,length:h?.length??null},duration:s,encryption:e,initSegment:u,lastProgramDateTimeSeconds:f};l??(l=i),r+=s,this.segments.push(i)}s=null,null===h?d=null:h=null,b(o+1)}if(y.startsWith($r)){if(g){p=!0;continue}p||(null===f&&o>0&&null!==m&&(r=o*m),p=!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(Qr)){const e=new ra(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 a=null;if(null!==i&&(a=k(i)),a&&null===a.offset)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!g){const e={path:re(this.path,t),offset:a?.offset??0,length:a?.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.");u={timestamp:r,relativeToUnixEpoch:null!==f,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:n,initSegment:null,lastProgramDateTimeSeconds:f}}s=null,null===h?d=null:h=null}else if(y.startsWith(Gr)){const e=new ra(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(!va.test(r))throw new Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(32,"0"),i=new Uint8Array(Ht);for(let t=0;t<Ht;t++){const r=-32+t;i[t]=parseInt(e.slice(r,r+2),16)}}const a=e.get("keyformat")??"identity";if("identity"!==a)throw new Error("For AES-128 encryption, only the 'identity' KEYFORMAT is currently supported. If you think other formats should be supported, please raise an issue.");n={method:"AES-128",keyUri:re(this.path,t),iv:i,keyFormat:a}}else{if("SAMPLE-AES"!==t&&"SAMPLE-AES-CTR"!==t)throw new Error(`Unsupported encryption method '${t}'. If you think this method should be supported, please raise an issue.`);{const i=e.get("uri");if(!i)throw new Error(`Invalid #EXT-X-KEY: ${t} requires a URI attribute.`);if("identity"===(e.get("keyformat")??"identity"))throw new Error("For SAMPLE-AES and SAMPLE-AES-CTR encryption, the 'identity' KEYFORMAT is not supported. If you think this format should be supported, please raise an issue.");let r=null;if(Ia.test(i)){const e=i.indexOf(","),t=ee(i.slice(e+1));if(t.length>=8&&112===t[4]&&115===t[5]&&115===t[6]&&104===t[7]){const e=c(t).getUint32(0);r=Nt(t.subarray(8,Math.min(e,t.length)))}}n={method:t,psshBox:r}}}}else if(y.startsWith(Yr)){const e=y.slice(22),t=Number(e);if(!Number.isInteger(t)||t<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);b(t)}else if(y.startsWith(Jr)){const e=k(y.slice(17));if(null===e.offset){if(null===d)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");e.offset=d}h=e,d=e.offset+e.length}else if(y.startsWith(Zr)){if(g)continue;const e=y.slice(25),t=Date.parse(e);if(!Number.isFinite(t))continue;const i=t/1e3;if(f===i)continue;if(null===f&&this.segments.length>0){const e=a(this.segments),t=i-(e.timestamp+e.duration);for(const i of this.segments)i.timestamp+=t,i.relativeToUnixEpoch=!0;r+=t}f=i,r=i}else if("#EXT-X-DISCONTINUITY"===y)l=null;else if(y.startsWith(ea)){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,m=t}else{if("#EXT-X-ENDLIST"===y){this.streamHasEnded=!0;break}if(y.startsWith(ta)){"vod"===y.slice(21).toLowerCase()&&(this.streamHasEnded=!0)}}}else{if("#EXTM3U"!==y)throw new Error("Invalid M3U8 file; expected first line to be #EXTM3U.");t=!0}}if(!t)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=P(this.segments,e,e=>e.timestamp);if(-1===r)return null;if(r<this.segments.length-1||this.streamHasEnded||i)return this.segments[r];const a=this.segments[r];if(e<a.timestamp+a.duration)return a;await this.runUpdateSegments(),t.skipLiveWait&&(i=!0)}}async getNextSegment(e,t){const r=this.segments.indexOf(e);i(-1!==r);const a=r+1;let s=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){if(a<this.segments.length)return this.segments[a];if(this.streamHasEnded||s)return null;await this.runUpdateSegments(),t.skipLiveWait&&(s=!0)}}async getPreviousSegment(e){const t=this.segments.indexOf(e);return i(-1!==t),this.segments[t-1]??null}getInputForSegment(e){const t=e,r=this.inputCache.find(e=>e.segment===t);if(r)return r.age=this.nextInputCacheAge++,r.input;let a=null;(t.initSegment||t.firstSegment)&&(a=this.getInputForSegment(t.initSegment??t.firstSegment));const s={...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=>Ot(e,r))||(i=[...i,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:i})})}},n=new rn({source:new fa(t.location.path,async e=>{i(e.isRoot);const r={...e,isRoot:!1};let a;const s=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;i(e.iv);let n=await this.input._getSourceCached(r);if(s){const e=n.source.slice(t.location.offset,t.location.length??void 0).ref();n.free(),n=e}const o=((e,t,i)=>{let r=!1,a=0;const s=new Zt;return new ReadableStream({pull:async n=>{r||(s.init(await t()),r=!0);let o=e.requestSliceRange(a,0,65552);if(o instanceof Promise&&(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=ln(o,l),d=new Uint8Array(l);for(let e=0;e<l;e+=16)s.in.set(u.subarray(e,e+16)),s.decrypt(),d.set(s.out,e);if(l<c)n.enqueue(d),a+=l;else{const e=d[l-1];if(0===e||e>16)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 nn(n.source),async()=>{const t={stack:[],error:void 0,hasError:!1};try{const i=Sa(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},en),!1),r=new nn(i.source),a=await r.requestSlice(0,Ht);if(!a)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");return{key:ln(a,Ht),iv:e.iv}}catch(i){t.error=i,t.hasError=!0}finally{Pa(t)}},()=>{n.free()});a=new ba(o).ref()}else i(!1);else if(a=await this.input._getSourceCached(r),s){const e=a.source.slice(t.location.offset,t.location.length??void 0).ref();a.free(),a=e}return a}),formats:this.input._formats.filter(e=>!(e instanceof ja)),initInput:a??void 0,formatOptions:s});n._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:n,age:this.nextInputCacheAge++});if(this.inputCache.length>4){const e=se(this.inputCache,e=>e.age);i(-1!==e),this.inputCache.splice(e,1)}return n}async getLiveRefreshInterval(){return 0===this.getRemainingWaitTimeMs()&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}class Ca extends Rt{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()=>{i(this.input._rootSource instanceof da);const{rootPath:e}=this.input._rootSource,t=await this.input._reader.requestEntireFile();i(t);const r=xn(t,t.length,{ignore:ia}),a=[],s=[];for(let i=1;i<r.length;i++){const t=r[i];if(t.startsWith(Kr)){const s=i,n=r[++i];if(void 0===n)throw new Error("Incorrect M3U8 file; a line must follow the #EXT-X-STREAM-INF tag.");const o=re(e,n),c=new ra(t.slice(18));if(null===c.getAsNumber("bandwidth"))throw new Error("Invalid M3U8 file; #EXT-X-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.");a.push({fullPath:o,attributes:c,lineNumber:s,hasOnlyKeyPackets:!1})}else if(t.startsWith(jr)){const r=new ra(t.slice(26)),s=r.get("uri");if(null===s)throw new Error("Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a URI attribute.");if(null===r.getAsNumber("bandwidth"))throw new Error("Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.");const n=re(e,s);a.push({fullPath:n,attributes:r,lineNumber:i,hasOnlyKeyPackets:!0})}else if(t.startsWith(Xr)){const r=new ra(t.slice(13));if(null===r.get("type"))throw new Error("Invalid M3U8 file; #EXT-X-MEDIA tag requires a TYPE attribute.");if(null===r.get("group-id"))throw new Error("Invalid M3U8 file; #EXT-X-MEDIA tag requires a GROUP-ID attribute.");let a=null;const n=r.get("uri");null!==n&&(a=re(e,n)),s.push({fullPath:a,attributes:r,lineNumber:i})}else if("#EXT-X-I-FRAMES-ONLY"===t);else if(t.startsWith($r)){const t=new xa(this,e,null,r);return this.segmentedInputs=[t],this.hasMasterPlaylist=!1,void(this.trackBackings=await t.getTrackBackings())}}const n=[...new Set(s.filter(e=>"video"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],o=[...new Set(s.filter(e=>"audio"===e.attributes.get("type").toLowerCase()).map(e=>e.attributes.get("group-id")))],c=await Promise.all(a.map(async(t,r)=>{const a=[],c=t.attributes.get("codecs");let l;if(c)l=c.split(",").map(e=>e.trim());else{const e=this.getSegmentedInputForPath(t.fullPath),i=await e.getTrackBackings(),r=await Promise.all(i.map(async e=>({track:e,codec:await e.getCodec()})));l=await Promise.all(r.filter(e=>null!==e.codec).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}const u=t.attributes.get("video"),d=t.attributes.get("audio"),h=l.some(e=>ke.includes(Ee(e))),f=l.some(e=>ye.includes(Ee(e)));if(null!==u&&!h){if(!n.includes(u))throw new Error(`Invalid M3U8 file; variant stream references video group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);const t=s.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===u&&"video"===i.toLowerCase()});e:if(t){const r=t.attributes.get("uri");if(null===r)break e;const a=re(e,r),s=this.getSegmentedInputForPath(a),n=(await s.getTrackBackings()).find(e=>"video"===e.getType());if(!n||null===await n.getCodec())break e;const o=await n.getDecoderConfig().then(e=>e?.codec??null);i(null!==o),l.push(o)}}if(null!==d&&!f){if(!o.includes(d))throw new Error(`Invalid M3U8 file; variant stream references audio group "${d}" which is not defined in any #EXT-X-MEDIA tags.`);const t=s.find(e=>{const t=e.attributes.get("group-id"),i=e.attributes.get("type");return t===d&&"audio"===i.toLowerCase()});e:if(t){const r=t.attributes.get("uri");if(null===r)break e;const a=re(e,r),s=this.getSegmentedInputForPath(a),n=(await s.getTrackBackings()).find(e=>"audio"===e.getType());if(!n||null===await n.getCodec())break e;const o=await n.getDecoderConfig().then(e=>e?.codec??null);i(null!==o),l.push(o)}}l=[...new Set(l)];let m=null,p=null;const g=t.attributes.getAsNumber("bandwidth");i(null!==g);const k=t.attributes.getAsNumber("average-bandwidth"),b=t.attributes.get("name");for(const e of l){const i=Ee(e);if(null!==i)if(ke.includes(i)){if(null!==m)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");m=e;const i=t.attributes.get("video");if(null===i){const e=t.attributes.get("resolution");let i=null,s=null;if(e){const t=e.match(/^(\d+)x(\d+)$/);t&&(i=Number(t[1]),s=Number(t[2]))}a.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:R,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(r),peakBitrate:g,averageBitrate:k,name:b,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:"video",width:i,height:s}})}else{if(!n.includes(i))throw new Error(`Invalid M3U8 file; variant stream references video group "${i}" which is not defined in any #EXT-X-MEDIA tags.`);for(const e of s){const s=e.attributes.get("group-id"),n=e.attributes.get("type");if(s!==i||"video"!==n.toLowerCase())continue;const o=e.attributes.get("resolution")??t.attributes.get("resolution");let c=null,l=null;if(o){const e=o.match(/^(\d+)x(\d+)$/);e&&(c=Number(e[1]),l=Number(e[2]))}a.push({id:-1,demuxer:this,backingTrack:null,default:Aa(e.attributes),autoselect:Aa(e.attributes)||Fa(e.attributes),languageCode:Ra(e.attributes.get("language")),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(r),peakBitrate:null,averageBitrate:null,name:e.attributes.get("name"),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:"video",width:c,height:l}})}}}else if(ye.includes(i)){if(null!==p)throw new Error("Unsupported M3U8 file; multiple audio codecs found in the CODECS attribute of a variant stream.");p=e;const i=t.attributes.get("audio");if(null===i){const e=t.attributes.get("channels"),i=null!==e?Number(e.split("/")[0]):null;a.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:R,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(r),peakBitrate:g,averageBitrate:k,name:b,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:"audio",numberOfChannels:null!==i&&Number.isInteger(i)&&i>0?i:null}})}else{if(!o.includes(i))throw new Error(`Invalid M3U8 file; variant stream references audio group "${i}" which is not defined in any #EXT-X-MEDIA tags.`);for(const e of s){const s=e.attributes.get("group-id"),n=e.attributes.get("type");if(s!==i||"audio"!==n.toLowerCase())continue;const o=e.attributes.get("channels")??t.attributes.get("channels"),c=null!==o?Number(o.split("/")[0]):null;a.push({id:-1,demuxer:this,backingTrack:null,default:Aa(e.attributes),autoselect:Aa(e.attributes)||Fa(e.attributes),languageCode:Ra(e.attributes.get("language")),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(r),peakBitrate:null,averageBitrate:null,name:e.attributes.get("name"),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:"audio",numberOfChannels:null!==c&&Number.isInteger(c)&&c>0?c:null}})}}}}return a})),l=[],u=e=>{const t=l.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===R&&(t.languageCode=e.languageCode)):(e.id=l.length+1,l.push(e))};for(const i of c)for(const e of i)u(e);l.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(const i of l)"video"===i.info.type?this.trackBackings.push(new Ea(i)):this.trackBackings.push(new _a(i));this.internalTracks=l})())}async getTrackBackings(){return await this.readMetadata(),i(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 xa(this,e,i,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return Hr}dispose(){if(this.segmentedInputs){for(const e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}}class Ba{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 r=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(1===r.length)t=r[0];else if(this instanceof Ea){for(const i of r)if(await i.getCodec()===this.getCodec()){t=i;break}}else{i(this instanceof _a);for(const e of r)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{...he,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(){i(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())}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 Ea extends Ba{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return Ee(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 _a extends Ba{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return Ee(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 Aa=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}".`)},Fa=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}".`)},Ra=e=>{if(null===e)return R;const t=e.split("-")[0];return t||R};class Da{constructor(){this._isIsobmff=!1}}class Ma extends Da{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return null;t.skip(4);const i=In(t,4);return"ftyp"!==i&&"styp"!==i?null:In(t,4)}_createDemuxer(e){return new ei(e)}}class Na extends Ma{async _canReadInput(e){const t=await this._getMajorBrand(e);if(null!==t)return"qt "!==t;let i=e._reader.requestSlice(4,4);return i instanceof Promise&&(i=await i),!!i&&"moof"===In(i,4)}get name(){return"MP4"}get mimeType(){return"video/mp4"}}class Oa extends Ma{async _canReadInput(e){return"qt "===await this._getMajorBrand(e)}get name(){return"QuickTime File Format"}get mimeType(){return"video/quicktime"}}class La extends Da{async isSupportedEBMLOfDocType(e,t){let i=e._reader.requestSlice(0,Si);if(i instanceof Promise&&(i=await i),!i)return!1;const r=Pi(i);if(null===r)return!1;if(r<1||r>8)return!1;if(Ii(i,r)!==ki.EBML)return!1;const a=Ci(i);if("number"!==typeof a)return!1;let s=e._reader.requestSlice(i.filePos,a);if(s instanceof Promise&&(s=await s),!s)return!1;const n=i.filePos;for(;s.filePos<=n+a-2;){const e=Bi(s);if(!e)break;const{id:i,size:r}=e,a=s.filePos;if(void 0===r)return!1;switch(i){case ki.EBMLVersion:if(1!==Ii(s,r))return!1;break;case ki.EBMLReadVersion:if(1!==Ii(s,r))return!1;break;case ki.DocType:if(Ei(s,r)!==t)return!1;break;case ki.DocTypeVersion:if(Ii(s,r)>4)return!1}s.filePos=a+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"matroska")}_createDemuxer(e){return new tr(e)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}}class za extends La{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}}class Ua extends Da{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,Fn);if(i instanceof Promise&&(i=await i),!i)break;const r=Nn(i);if(!r)break;t=i.filePos+r.size}const i=await sr(e._reader,t,t+4096);if(!i)return!1;const r=i.header,a=De(r.mpegVersionId,r.channel);let s=e._reader.requestSlice(i.startPos+a,4);if(s instanceof Promise&&(s=await s),!s)return!1;const n=gn(s);if(n===Fe||n===Re)return!0;t=i.startPos+i.header.totalSize;const o=await sr(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 nr(e)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}}class qa extends Da{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return!1;const i=In(t,4);if("RIFF"!==i&&"RIFX"!==i&&"RF64"!==i)return!1;t.skip(4);return"WAVE"===In(t,4)}_createDemuxer(e){return new Sr(e)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}}class Wa extends Da{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),!!t&&"OggS"===In(t,4)}_createDemuxer(e){return new gr(e)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}}class Va extends Da{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),!!t&&"fLaC"===In(t,4)}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(e){return new Er(e)}}class Ha extends Da{async _canReadInput(e){let t=0;for(;;){let i=e._reader.requestSlice(t,Fn);if(i instanceof Promise&&(i=await i),!i)break;const r=Nn(i);if(!r)break;t=i.filePos+r.size}let i=e._reader.requestSliceRange(t,7,9);if(i instanceof Promise&&(i=await i),!i)return!1;const r=Ir(i);if(!r)return!1;if(t+=r.frameLength,i=e._reader.requestSliceRange(t,7,9),i instanceof Promise&&(i=await i),!i)return!1;const a=Ir(i);return!!a&&(r.objectType===a.objectType&&r.samplingFrequencyIndex===a.samplingFrequencyIndex&&r.channelConfiguration===a.channelConfiguration)}_createDemuxer(e){return new Cr(e)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}}class Ka extends Da{async _canReadInput(e){let t=e._reader.requestSlice(0,205);if(t instanceof Promise&&(t=await t),!t)return!1;const i=ln(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 Mr(e)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}}class ja extends Da{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(t instanceof Promise&&(t=await t),!t)return!1;if(!("#EXTM3U"===In(t,7)))return!1;if(!(e._rootSource instanceof da))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 Ca(e)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return Hr}}const Xa=new Na,$a=new Oa,Qa=new La,Ga=new za,Ya=new Ua,Ja=new qa,Za=new Wa,es=new Ha,ts=new Va,is=new Ka,rs=new ja,as=[rs,Xa,$a,Qa,Ga,Ja,Za,ts,Ya,es,is],ss=[rs,Xa,$a,Ya,es,is];te();let ns=-1/0,os=-1/0,cs=null;"undefined"!==typeof FinalizationRegistry&&(cs=new FinalizationRegistry(e=>{const t=performance.now();"video"===e.type?(t-ns>=1e3&&(console.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."),ns=t),"undefined"!==typeof VideoFrame&&e.data instanceof VideoFrame&&e.data.close()):(t-os>=1e3&&(console.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."),os=t),"undefined"!==typeof AudioData&&e.data instanceof AudioData&&e.data.close())}));const ls=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],us=new Set(ls);class ds{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(z*this.timestamp)}get microsecondDuration(){return Math.trunc(z*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||!us.has(t.format))throw new TypeError("init.format must be one of: "+ls.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&&oe(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._data=o(e).slice(),this._layout=t.layout??ks(t.format,t.codedWidth,t.codedHeight),this.format=t.format,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new hs(t.colorSpace),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.codedWidth,this.squarePixelHeight=this.codedHeight)}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&&oe(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 hs(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))throw new TypeError("Invalid data type: Must be a BufferSource or CanvasImageSource.");{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("undefined"!==typeof VideoFrame)return new ds(new VideoFrame(e,{timestamp:Math.trunc(t.timestamp*z),duration:Math.trunc((t.duration??0)*z)||void 0}),t);let r=0,a=0;if("naturalWidth"in e?(r=e.naturalWidth,a=e.naturalHeight):"videoWidth"in e?(r=e.videoWidth,a=e.videoHeight):"width"in e&&(r=Number(e.width),a=Number(e.height)),!r||!a)throw new TypeError("Could not determine dimensions.");const s=new OffscreenCanvas(r,a),n=s.getContext("2d",{alpha:X(),willReadFrequently:!0});i(n),n.drawImage(e,0,0),this._data=s,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:r,height:a},this.squarePixelWidth=r,this.squarePixelHeight=a,this.rotation=t.rotation??0,this.timestamp=t.timestamp,this.duration=t.duration??0,this.colorSpace=new hs({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}}this.pixelAspectRatio=ne({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),cs?.register(this,{type:"video",data:this._data},this)}clone(){if(this._closed)throw new Error("VideoSample is closed.");return i(null!==this._data),fs(this._data)?new ds(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):this._data instanceof Uint8Array?(i(this._layout),new ds(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})):new ds(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})}close(){this._closed||(cs?.unregister(this),fs(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(e={}){if(gs(e),this._closed)throw new Error("VideoSample is closed.");if(null===this.format)throw new Error("Cannot get allocation size when format is null. Sorry!");if(i(null!==this._data),!fs(this._data)&&(e.colorSpace||e.format&&e.format!==this.format||e.layout||e.rect)){const t=this.toVideoFrame(),i=t.allocationSize(e);return t.close(),i}return fs(this._data)?this._data.allocationSize(e):this._data instanceof Uint8Array?this._data.byteLength:this.codedWidth*this.codedHeight*4}async copyTo(e,t={}){if(!k(e))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(gs(t),this._closed)throw new Error("VideoSample is closed.");if(null===this.format)throw new Error("Cannot copy video sample data when format is null. Sorry!");if(i(null!==this._data),!fs(this._data)&&(t.colorSpace||t.format&&t.format!==this.format||t.layout||t.rect)){const i=this.toVideoFrame(),r=await i.copyTo(e,t);return i.close(),r}if(fs(this._data))return this._data.copyTo(e,t);if(this._data instanceof Uint8Array){i(this._layout);return o(e).set(this._data),this._layout}{const t=this._data.getContext("2d");i(t);const r=t.getImageData(0,0,this.codedWidth,this.codedHeight);return o(e).set(r.data),[{offset:0,stride:4*this.codedWidth}]}}toVideoFrame(){if(this._closed)throw new Error("VideoSample is closed.");return i(null!==this._data),fs(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace}):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 b=f+p/2,y=m+g/2;e.translate(b,y),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&&ps(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;t.crop&&ms(t.crop,s,n);const{sx:d,sy:h,sWidth:f,sHeight:m}=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 p=a%180===0?1:l/u;e.translate(i/2,r/2),e.rotate(a*Math.PI/180),e.scale(1/p,p),e.translate(-i/2,-r/2),e.drawImage(this.toCanvasImageSource(),d,h,f,m,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}}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(i(null!==this._data),this._data instanceof Uint8Array){const e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}return this._data}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}[Symbol.dispose](){this.close()}}class hs{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(d);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(f);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(p);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 fs=e=>"undefined"!==typeof VideoFrame&&e instanceof VideoFrame,ms=(e,t,r)=>{const a=Math.min(e.left,t),s=Math.min(e.top,r),n=Math.min(e.width,t-a),o=Math.min(e.height,r-s);return i(n>=0),i(o>=0),{left:a,top:s,width:n,height:o}},ps=(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.")},gs=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.")}},ks=(e,t,i)=>{const r=bs(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},bs=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:B(e),i(!1)}},ys=new Set(["f32","f32-planar","s16","s16-planar","s32","s32-planar","u8","u8-planar"]);class ws{get microsecondTimestamp(){return Math.trunc(z*this.timestamp)}get microsecondDuration(){return Math.trunc(z*this.duration)}constructor(e){if(this._closed=!1,Is(e)){if(null===e.format)throw new TypeError("AudioData with null format is not supported.");this._data=e,this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=e.numberOfFrames,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp/1e6,this.duration=e.numberOfFrames/e.sampleRate}else{if(!e||"object"!==typeof e)throw new TypeError("Invalid AudioDataInit: must be an object.");if(!ys.has(e.format))throw new TypeError("Invalid AudioDataInit: invalid format.");if(!Number.isFinite(e.sampleRate)||e.sampleRate<=0)throw new TypeError("Invalid AudioDataInit: sampleRate must be > 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/(Ts(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*Ts(this.format);if(i.byteLength<r)throw new TypeError("Invalid AudioDataInit: insufficient data size.");this._data=i}cs?.register(this,{type:"audio",data:this._data},this)}allocationSize(e){if(!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(!Number.isInteger(e.planeIndex)||e.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(void 0!==e.format&&!ys.has(e.format))throw new TypeError("Invalid format.");if(void 0!==e.frameOffset&&(!Number.isInteger(e.frameOffset)||e.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(void 0!==e.frameCount&&(!Number.isInteger(e.frameCount)||e.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");const t=e.format??this.format,i=e.frameOffset??0;if(i>=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=Ts(t),s=Ss(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(!k(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&&!ys.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{planeIndex:i,format:r,frameCount:a,frameOffset:s}=t,n=this.format,o=r??this.format;if(!o)throw new Error("Destination format not determined");const l=this.numberOfFrames,u=this.numberOfChannels,d=s??0;if(d>=l)throw new RangeError("frameOffset out of range");const h=void 0!==a?a:l-d;if(h>l-d)throw new RangeError("frameCount out of range");const f=Ts(o),m=Ss(o);if(m&&i>=u)throw new RangeError("planeIndex out of range");if(!m&&0!==i)throw new RangeError("planeIndex out of range");const p=(m?h:h*u)*f;if(e.byteLength<p)throw new RangeError("Destination buffer is too small");const g=c(e),b=vs(o);if(Is(this._data))K()&&u>2&&o!==n?xs(this._data,g,n,o,u,i,d,h):this._data.copyTo(e,{planeIndex:i,frameOffset:d,frameCount:h,format:o});else{const e=this._data,t=c(e),r=Ps(n),a=Ts(n),s=Ss(n);for(let n=0;n<h;n++)if(m){let e;e=s?(i*l+(n+d))*a:((n+d)*u+i)*a;b(g,n*f,r(t,e))}else for(let e=0;e<u;e++){let i;i=s?(e*l+(n+d))*a:((n+d)*u+e)*a;b(g,(n*u+e)*f,r(t,i))}}}clone(){if(this._closed)throw new Error("AudioSample is closed.");if(Is(this._data)){const e=new ws(this._data.clone());return e.setTimestamp(this.timestamp),e}return new ws({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp,data:this._data})}close(){this._closed||(cs?.unregister(this),Is(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");if(Is(this._data)){if(this._data.timestamp===this.microsecondTimestamp)return this._data.clone();if(Ss(this.format)){const e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let i=0;i<this.numberOfChannels;i++)this.copyTo(new Uint8Array(t,i*e,e),{planeIndex:i,format:this.format});return new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:t})}{const e=new ArrayBuffer(this.allocationSize({planeIndex:0,format:this.format}));return this.copyTo(e,{planeIndex:0,format:this.format}),new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:e})}}return 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()})}toAudioBuffer(){if(this._closed)throw new Error("AudioSample is closed.");const e=new AudioBuffer({numberOfChannels:this.numberOfChannels,length:this.numberOfFrames,sampleRate:this.sampleRate}),t=new Float32Array(this.allocationSize({planeIndex:0,format:"f32-planar"})/4);for(let i=0;i<this.numberOfChannels;i++)this.copyTo(t,{planeIndex:i,format:"f32-planar"}),e.copyToChannel(t,i);return e}setTimestamp(e){if(!Number.isFinite(e))throw new TypeError("newTimestamp must be a number.");this.timestamp=e}[Symbol.dispose](){this.close()}static*_fromAudioBuffer(e,t){if(!(e instanceof AudioBuffer))throw new TypeError("audioBuffer must be an AudioBuffer.");const i=e.numberOfChannels,r=e.sampleRate,a=e.length,s=Math.floor(24e4/i);let n=0,o=a;for(;o>0;){const a=Math.min(s,o),c=new Float32Array(i*a);for(let t=0;t<i;t++)e.copyFromChannel(c.subarray(t*a,(t+1)*a),t,n);yield new ws({format:"f32-planar",sampleRate:r,numberOfFrames:a,numberOfChannels:i,timestamp:t+n/r,data:c}),n+=a,o-=a}}static fromAudioBuffer(e,t){if(!(e instanceof AudioBuffer))throw new TypeError("audioBuffer must be an AudioBuffer.");const i=e.numberOfChannels,r=e.sampleRate,a=e.length,s=Math.floor(24e4/i);let n=0,o=a;const c=[];for(;o>0;){const a=Math.min(s,o),l=new Float32Array(i*a);for(let t=0;t<i;t++)e.copyFromChannel(l.subarray(t*a,(t+1)*a),t,n);const u=new ws({format:"f32-planar",sampleRate:r,numberOfFrames:a,numberOfChannels:i,timestamp:t+n/r,data:l});c.push(u),n+=a,o-=a}return c}}const Ts=e=>{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")}},Ss=e=>{switch(e){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Ps=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)}},vs=e=>{switch(e){case"u8":case"u8-planar":return(e,t,i)=>e.setUint8(t,F(127.5*(i+1),0,255));case"s16":case"s16-planar":return(e,t,i)=>e.setInt16(t,F(Math.round(32767*i),-32768,32767),!0);case"s32":case"s32-planar":return(e,t,i)=>e.setInt32(t,F(Math.round(2147483647*i),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(e,t,i)=>e.setFloat32(t,i,!0)}},Is=e=>"undefined"!==typeof AudioData&&e instanceof AudioData,xs=(e,t,i,r,a,s,n,o)=>{const l=Ps(i),u=vs(r),d=Ts(i),h=Ts(r),f=Ss(i);if(Ss(r))if(f){const r=new ArrayBuffer(o*d),a=c(r);e.copyTo(r,{planeIndex:s,frameOffset:n,frameCount:o,format:i});for(let e=0;e<o;e++){u(t,e*h,l(a,e*d))}}else{const r=new ArrayBuffer(o*a*d),f=c(r);e.copyTo(r,{planeIndex:0,frameOffset:n,frameCount:o,format:i});for(let e=0;e<o;e++){u(t,e*h,l(f,(e*a+s)*d))}}else if(f){const r=new ArrayBuffer(o*d),s=c(r);for(let c=0;c<a;c++){e.copyTo(r,{planeIndex:c,frameOffset:n,frameCount:o,format:i});for(let e=0;e<o;e++){u(t,(e*a+c)*h,l(s,e*d))}}}else{const r=new ArrayBuffer(o*a*d),s=c(r);e.copyTo(r,{planeIndex:0,frameOffset:n,frameCount:o,format:i});for(let e=0;e<o;e++)for(let i=0;i<a;i++){const r=e*a+i;u(t,r*h,l(s,r*d))}}},Cs=[],Bs=[],Es=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.")},_s=e=>{if(!ie(e))throw new TypeError("timestamp must be a number.")},As=(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 Fs{constructor(e){if(!(e instanceof Hs))throw new TypeError("track must be an InputTrack.");this._track=e}async getFirstPacket(e={}){if(Es(e),this._track.input._disposed)throw new sn;return As(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){Es(e);const t=await this.getFirstPacket(e);return t?"key"===t.type?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(_s(e),Es(t),this._track.input._disposed)throw new sn;return As(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof Mt))throw new TypeError("packet must be an EncodedPacket.");if(Es(t),this._track.input._disposed)throw new sn;return As(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(_s(e),Es(t),this._track.input._disposed)throw new sn;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);const r=await this._track._backing.getKeyPacket(e,t);if(!r)return r;i("key"===r.type);return"delta"===await this._track.determinePacketType(r)?this.getKeyPacket(r.timestamp-1/await this._track.getTimeResolution(),t):r}async getNextKeyPacket(e,t={}){if(!(e instanceof Mt))throw new TypeError("packet must be an EncodedPacket.");if(Es(t),this._track.input._disposed)throw new sn;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);const r=await this._track._backing.getNextKeyPacket(e,t);if(!r)return r;i("key"===r.type);return"delta"===await this._track.determinePacketType(r)?this.getNextKeyPacket(r,t):r}packets(e,t,i={}){if(void 0!==e&&!(e instanceof Mt))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 Mt))throw new TypeError("endPacket must be an EncodedPacket.");if(Es(i),this._track.input._disposed)throw new sn;const r=[];let{promise:a,resolve:s}=I(),{promise:n,resolve:o}=I(),c=!1,l=!1,u=null;const d=[],h=()=>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>h()?(({promise:n,resolve:o}=I()),await n):(r.push(u),s(),({promise:a,resolve:s}=I()),u=await this.getNextPacket(u,i));c=!0,s()})().catch(e=>{u||(u=e,s())});const f=this._track;return{async next(){for(;;){if(f.input._disposed)throw new sn;if(l)return{value:void 0,done:!0};if(u)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 Rs{constructor(e,t){this.onSample=e,this.onError=t}}class Ds{mediaSamplesInRange(e=0,t=1/0,i){_s(e),_s(t);const r=[];let a=!1,s=null,{promise:n,resolve:o}=I(),{promise:c,resolve:l}=I(),u=!1,d=!1,h=!1,f=null;const m={...i,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{const i=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}=I())))},e=>{f||(f=e,o())}),p=this._createPacketSink(),g=await p.getKeyPacket(e,m)??await p.getFirstKeyPacket(m);let k=g;const b=p.packets(g??void 0,void 0,m);for(await b.next();k&&!d&&!this._track.input._disposed;){const e=Ms(r.length);if(r.length+i.getDecodeQueueSize()>e){({promise:c,resolve:l}=I()),await c;continue}i.decode(k);const t=await b.next();if(t.done)break;k=t.value}await b.return(),h||this._track.input._disposed||await i.flush(),i.close(),!a&&s&&r.push(s),u=!0,o()})().catch(e=>{f||(f=e,o())});const p=this._track,g=()=>{s?.close();for(const e of r)e.close()};return{async next(){for(;;){if(p.input._disposed)throw g(),new sn;if(h)return{value:void 0,done:!0};if(f)throw g(),f;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(),g(),{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 r=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()}(e),a=[],s=[];let{promise:n,resolve:o}=I(),{promise:c,resolve:l}=I(),u=!1,d=!1,h=null;const f=e=>{s.push(e),o(),({promise:n,resolve:o}=I())},m={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{const e=await this._createDecoder(e=>{if(l(),d)return void e.close();let t=0;for(;a.length>0&&e.timestamp-a[0]>-1e-10;)t++,a.shift();if(t>0)for(let i=0;i<t;i++)f(i<t-1?e.clone():e);else e.close()},e=>{h||(h=e,o())}),t=this._createPacketSink();let n=null,p=null,g=-1;const k=async()=>{i(p);let r=p;for(e.decode(r);r.sequenceNumber<g;){const a=Ms(s.length);for(;s.length+e.getDecodeQueueSize()>a&&!d;)({promise:c,resolve:l}=I()),await c;if(d)break;const n=await t.getNextPacket(r,m);i(n),e.decode(n),r=n}g=-1},b=async()=>{await e.flush();for(let e=0;e<a.length;e++)f(null);a.length=0};for await(const i of r){if(_s(i),d||this._track.input._disposed)break;const e=await t.getPacket(i,m),r=e&&await t.getKeyPacket(i,m);r?(n&&(r.sequenceNumber!==p.sequenceNumber||e.timestamp<n.timestamp)&&(await k(),await b()),a.push(e.timestamp),g=Math.max(e.sequenceNumber,g),n=e,p=r):(-1!==g&&(await k(),await b()),f(null),n=null)}d||this._track.input._disposed||(-1!==g&&await k(),await b()),e.close(),u=!0,o()})().catch(e=>{h||(h=e,o())});const p=this._track,g=()=>{for(const e of s)e?.close()};return{async next(){for(;;){if(p.input._disposed)throw g(),new sn;if(d)return{value:void 0,done:!0};if(h)throw g(),h;if(s.length>0){const e=s.shift();return i(void 0!==e),l(),{value:e,done:!1}}if(u)return{value:void 0,done:!0};await n}},return:async()=>(d=!0,l(),o(),g(),{value:void 0,done:!0}),async throw(e){throw e},[Symbol.asyncIterator](){return this}}}}const Ms=e=>0===e?40:8;class Ns extends Rs{constructor(e,t,r,a,s,n){super(e,t),this.codec=r,this.decoderConfig=a,this.rotation=s,this.timeResolution=n,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new V,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.mergerCreationFailed=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue=[],this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1;const l=Cs.find(e=>e.supports(r,a));if(l)this.customDecoder=new l,this.customDecoder.codec=r,this.customDecoder.config=a,this.customDecoder.onSample=e=>{if(!(e instanceof ds))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{const e=e=>{if(this.alphaQueue.length>0){const t=this.alphaQueue.shift();i(void 0!==t),this.mergeAlpha(e,t)}else this.colorQueue.push(e)};if("avc"===r&&this.decoderConfig.description&&Q()){const e=(e=>{try{const t=c(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++),l=31&t.getUint8(i++),u=[];for(let c=0;c<l;c++){const r=t.getUint16(i,!1);i+=2,u.push(e.subarray(i,i+r)),i+=r}const d=t.getUint8(i++),h=[];for(let c=0;c<d;c++){const r=t.getUint16(i,!1);i+=2,h.push(e.subarray(i,i+r)),i+=r}const f={configurationVersion:r,avcProfileIndication:a,profileCompatibility:s,avcLevelIndication:n,lengthSizeMinusOne:o,sequenceParameterSets:u,pictureParameterSets:h,chromaFormat:null,bitDepthLumaMinus8:null,bitDepthChromaMinus8:null,sequenceParameterSetExt:null};if((100===a||110===a||122===a||144===a)&&i+4<=e.length){const r=3&t.getUint8(i++),a=7&t.getUint8(i++),s=7&t.getUint8(i++),n=t.getUint8(i++);f.chromaFormat=r,f.bitDepthLumaMinus8=a,f.bitDepthChromaMinus8=s;const o=[];for(let c=0;c<n;c++){const r=t.getUint16(i,!1);i+=2,o.push(e.subarray(i,i+r)),i+=r}f.sequenceParameterSetExt=o}return f}catch(t){return console.error("Error deserializing AVC Decoder Configuration Record:",t),null}})(o(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){const t=tt(e.sequenceParameterSets[0]);t&&0===t.frameMbsOnlyFlag&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"})}}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:(i(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)).then(()=>this.customDecoderQueueSize--);else{if(i(this.decoder),K()||v(this.inputTimestamps,e.timestamp,e=>e),Q()&&0===this.currentPacketIndex)if("avc"===this.codec){const t=[];for(const r of Xe(e.data,this.decoderConfig)){const i=$e(e.data[r.offset]);i>=20&&i<=31||t.push(e.data.subarray(r.offset,r.offset+r.length))}const i=((e,t)=>{if(t.description){const i=3&o(t.description)[4];return Je(e,i+1)}return Ye(e)})(t,this.decoderConfig);e=new Mt(i,e.type,e.timestamp,e.duration)}else if("hevc"===this.codec){const t=gt(e.data,this.decoderConfig);t&&(e=new Mt(t,e.type,e.timestamp,e.duration))}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha||this.mergerCreationFailed)return void this.pushNullAlphaFrame();if(!this.merger)try{this.merger=new Os}catch(r){return console.error("Due to an error, only color data will be decoded.",r),this.mergerCreationFailed=!0,void this.decodeAlphaData(e)}if(!this.alphaDecoder){const e=e=>{if(this.alphaDecoderQueueSize--,this.colorQueue.length>0){const t=this.colorQueue.shift();i(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();i(void 0!==e),this.mergeAlpha(e,null)}else this.alphaQueue.push(null)},t=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(r){this.onError(r)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}const t=St(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 rt(e,this.decoderConfig)){const i=at(e[t.offset]);if(i===Ve.RASL_N||i===Ve.RASL_R)return!0}return!1}sampleHandler(e){if(K()){if(this.sampleQueue.length>0&&e.timestamp>=a(this.sampleQueue).timestamp){for(const e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}v(this.sampleQueue,e,e=>e.timestamp)}else{const t=this.inputTimestamps.shift();i(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){if(!t){const t=new ds(e);return void this.sampleHandler(t)}i(this.merger),this.merger.update(e,t),e.close(),t.close();const r=new VideoFrame(this.merger.canvas,{timestamp:e.timestamp,duration:e.duration??void 0}),a=new ds(r);this.sampleHandler(a)}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(i(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),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),K()){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()):(i(this.decoder),this.decoder.close(),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}}class Os{constructor(){"undefined"!==typeof OffscreenCanvas?this.canvas=new OffscreenCanvas(300,150):this.canvas=document.createElement("canvas");const e=this.canvas.getContext("webgl2",{premultipliedAlpha:!1});if(!e)throw new Error("Couldn't acquire WebGL 2 context.");this.gl=e,this.program=this.createProgram(),this.vao=this.createVAO(),this.colorTexture=this.createTexture(),this.alphaTexture=this.createTexture(),this.gl.useProgram(this.program),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_colorTexture"),0),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_alphaTexture"),1)}createProgram(){const e=this.createShader(this.gl.VERTEX_SHADER,"#version 300 es\n\t\t\tin vec2 a_position;\n\t\t\tin vec2 a_texCoord;\n\t\t\tout vec2 v_texCoord;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tgl_Position = vec4(a_position, 0.0, 1.0);\n\t\t\t\tv_texCoord = a_texCoord;\n\t\t\t}\n\t\t"),t=this.createShader(this.gl.FRAGMENT_SHADER,"#version 300 es\n\t\t\tprecision highp float;\n\t\t\t\n\t\t\tuniform sampler2D u_colorTexture;\n\t\t\tuniform sampler2D u_alphaTexture;\n\t\t\tin vec2 v_texCoord;\n\t\t\tout vec4 fragColor;\n\t\t\t\n\t\t\tvoid main() {\n\t\t\t\tvec3 color = texture(u_colorTexture, v_texCoord).rgb;\n\t\t\t\tfloat alpha = texture(u_alphaTexture, v_texCoord).r;\n\t\t\t\tfragColor = vec4(color, alpha);\n\t\t\t}\n\t\t"),i=this.gl.createProgram();return this.gl.attachShader(i,e),this.gl.attachShader(i,t),this.gl.linkProgram(i),i}createShader(e,t){const i=this.gl.createShader(e);return this.gl.shaderSource(i,t),this.gl.compileShader(i),i}createVAO(){const e=this.gl.createVertexArray();this.gl.bindVertexArray(e);const t=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),i=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,i),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW);const r=this.gl.getAttribLocation(this.program,"a_position"),a=this.gl.getAttribLocation(this.program,"a_texCoord");return this.gl.enableVertexAttribArray(r),this.gl.vertexAttribPointer(r,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(a),this.gl.vertexAttribPointer(a,2,this.gl.FLOAT,!1,16,8),e}createTexture(){const e=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),e}update(e,t){e.displayWidth===this.canvas.width&&e.displayHeight===this.canvas.height||(this.canvas.width=e.displayWidth,this.canvas.height=e.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.colorTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,this.alphaTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}close(){this.gl.getExtension("WEBGL_lose_context")?.loseContext(),this.gl=null}}class Ls extends Ds{constructor(e){if(!(e instanceof Xs))throw new TypeError("videoTrack must be an InputVideoTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode()))throw new Error("This video track cannot be decoded by this browser. Make sure to check decodability before using a track.");const r=await this._track.getCodec(),a=await this._track.getRotation(),s=await this._track.getDecoderConfig(),n=await this._track.getTimeResolution();return i(r&&s),new Ns(e,t,r,s,a,n)}_createPacketSink(){return new Fs(this._track)}async getSample(e,t={}){_s(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e=0,t=1/0,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class zs{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof Xs))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&&ps(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.");this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??"fill",this._videoSampleSink=new Ls(e),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=ms(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,r=this._height;let a=this._canvasPool[this._nextCanvasIndex],s=!1;a||("undefined"!==typeof document?(a=document.createElement("canvas"),a.width=t,a.height=r):a=new OffscreenCanvas(t,r),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=a),s=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);const n=a.getContext("2d",{alpha:this._alpha||X()});i(n),n.resetTransform(),s||(!this._alpha&&X()?(n.fillStyle="black",n.fillRect(0,0,t,r)):n.clearRect(0,0,t,r)),e.drawWithFit(n,{fit:this._fit,rotation:this._rotation,crop:this._crop});const o={canvas:a,timestamp:e.timestamp,duration:e.duration};return e.close(),o}async getCanvas(e,t){_s(e),await this._ensureInit();const i=await this._videoSampleSink.getSample(e,t);return i&&this._videoSampleToWrappedCanvas(i)}async*canvases(e=0,t=1/0,i){await this._ensureInit(),yield*A(this._videoSampleSink.samples(e,t,i),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*A(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}}class Us extends Rs{constructor(e,t,i,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new V,this.customDecoderQueueSize=0,this.currentTimestamp=null;const a=t=>{(null===this.currentTimestamp||Math.abs(t.timestamp-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=t.timestamp);const i=this.currentTimestamp;if(this.currentTimestamp+=t.duration,0===t.numberOfFrames)return void t.close();const a=r.sampleRate;t.setTimestamp(Math.round(i*a)/a),e(t)},s=Bs.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 ws))throw new TypeError("The argument passed to onSample must be an AudioSample.");a(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{const e=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:e=>{try{a(new ws(e))}catch(t){this.onError(t)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(i(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--)):(i(this.decoder),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(i(this.decoder),this.decoder.flush())}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(i(this.decoder),this.decoder.close())}}class qs extends Rs{constructor(e,t,r){super(e,t),this.decoderConfig=r,this.currentTimestamp=null,i(be.includes(r.codec)),this.codec=r.codec;const{dataType:a,sampleSize:s,littleEndian:n}=Be(this.codec);switch(this.inputSampleSize=s,s){case 1:"unsigned"===a?this.readInputValue=(e,t)=>e.getUint8(t)-128:"signed"===a?this.readInputValue=(e,t)=>e.getInt8(t):"ulaw"===a?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<<i|(15&r)<<i-4|1<<i-5)-33;return 0===t?a:-a})(e.getUint8(t)):"alaw"===a?this.readInputValue=(e,t)=>(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<<i|(15&r)<<i-4|1<<i-5:r<<1|1,0===t?a:-a})(e.getUint8(t)):i(!1);break;case 2:"unsigned"===a?this.readInputValue=(e,t)=>e.getUint16(t,n)-32768:"signed"===a?this.readInputValue=(e,t)=>e.getInt16(t,n):i(!1);break;case 3:"unsigned"===a?this.readInputValue=(e,t)=>E(e,t,n)-2**23:"signed"===a?this.readInputValue=(e,t)=>((e,t,i)=>E(e,t,i)<<8>>8)(e,t,n):i(!1);break;case 4:"unsigned"===a?this.readInputValue=(e,t)=>e.getUint32(t,n)-2**31:"signed"===a?this.readInputValue=(e,t)=>e.getInt32(t,n):"float"===a?this.readInputValue=(e,t)=>e.getFloat32(t,n):i(!1);break;case 8:"float"===a?this.readInputValue=(e,t)=>e.getFloat64(t,n):i(!1);break;default:B(s),i(!1)}switch(s){case 1:"ulaw"===a||"alaw"===a?(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"===a?(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:B(s),i(!1)}}getDecodeQueueSize(){return 0}decode(e){const t=c(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 c=0;c<i*this.decoderConfig.numberOfChannels;c++){const e=c*this.inputSampleSize,i=c*this.outputSampleSize,r=this.readInputValue(t,e);this.writeOutputValue(s,i,r)}const n=i/this.decoderConfig.sampleRate;(null===this.currentTimestamp||Math.abs(e.timestamp-this.currentTimestamp)>=n)&&(this.currentTimestamp=e.timestamp);const o=this.currentTimestamp;this.currentTimestamp+=n;const l=new ws({format:this.outputFormat,data:a,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:o});this.onSample(l)}async flush(){}close(){}}class Ws extends Ds{constructor(e){if(!(e instanceof $s))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=e}async _createDecoder(e,t){if(!(await this._track.canDecode()))throw new Error("This audio track cannot be decoded by this browser. Make sure to check decodability before using a track.");const r=await this._track.getCodec(),a=await this._track.getDecoderConfig();return i(r&&a),be.includes(a.codec)?new qs(e,t,a):new Us(e,t,r,a)}_createPacketSink(){return new Fs(this._track)}async getSample(e,t={}){_s(e);for await(const i of this.mediaSamplesAtTimestamps([e],t))return i;throw new Error("Internal error: Iterator returned nothing.")}samples(e=0,t=1/0,i={}){return this.mediaSamplesInRange(e,t,i)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}}class Vs{constructor(e){if(!(e instanceof $s))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Ws(e)}_audioSampleToWrappedArrayBuffer(e){const t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){_s(e);const i=await this._audioSampleSink.getSample(e,t);return i&&this._audioSampleToWrappedArrayBuffer(i)}buffers(e=0,t=1/0,i){return A(this._audioSampleSink.samples(e,t,i),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return A(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}class Hs{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof Xs}isAudioTrack(){return this instanceof $s}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return Ks(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return Ks(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return Ks(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return Ks(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getDisposition(){return this._backing.getDisposition()}get disposition(){return Ks(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 M((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 Fs(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 Hs))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(Js({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(Js({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(Js({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(Js({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(Js({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&(e=js(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=js(e)),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&(e=js(e)),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}}const Ks=(e,t,i)=>{if(e instanceof Promise)throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${i}()' instead.`);return e},js=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 r instanceof Promise?r.then(i):i(r)}:void 0};class Xs extends Hs{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 Ks(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!1}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return Ks(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return Ks(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return Ks(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return Ks(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return Ks(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=ne({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()}))}get pixelAspectRatio(){return this._pixelAspectRatioCache??(this._pixelAspectRatioCache=ne({num:Ks(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*Ks(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:Ks(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*Ks(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=Ks(e,"displayWidth","getDisplayWidth");if(null!==t)return t}const t=Ks(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return Ks(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=Ks(e,"displayHeight","getDisplayHeight");if(null!==t)return t}const t=Ks(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return Ks(t,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){const e=await this._backing.getColorSpace();return"bt2020"===e.primaries||"smpte432"===e.primaries||"pg"===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(i(null!==t),Cs.some(i=>i.supports(t,e)))return!0;if("undefined"===typeof VideoDecoder)return!1;return!0===(await VideoDecoder.isConfigSupported(e)).supported}catch(e){return console.error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Mt))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 r=await this.getDecoderConfig();return i(r),St(t,r,e.data)}}class $s extends Hs{constructor(e,t){super(e,t),this._backing=t}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return Ks(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await(this._backing.getHasOnlyKeyPackets?.())??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return Ks(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return Ks(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(i(null!==t),Bs.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 console.error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Mt))throw new TypeError("packet must be an EncodedPacket.");return null===await this.getCodec()?null:"key"}}const Qs=e=>-(e??-1/0),Gs=e=>-e,Ys=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 r instanceof Promise?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 r instanceof Promise?r.then(i):i(r)}:void 0}},Js=(e,t)=>({filter:e?.filter||t?.filter?i=>{const r=e?.filter?.(i)??!0,a=e=>!1!==e&&(t?.filter?.(i)??!0);return r instanceof Promise?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 r instanceof Promise||a instanceof Promise?Promise.all([r,a]).then(([e,t])=>s(e,t)):s(r,a)}:void 0}),Zs=async(e,t)=>{let i=e;if(t?.filter){const r=e.map(e=>t.filter(e));if(r.some(e=>e instanceof Promise)){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=>e instanceof Promise)?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;s<a;s++){const e=i[s]??0,t=r[s]??0;if(e!==t)return e-t}return 0}).map(e=>e.track)};te();const en=2;let tn=null;"undefined"!==typeof FinalizationRegistry&&(tn=new FinalizationRegistry(e=>{for(const t of e)t.freed||t.free()}));class rn extends le{get disposed(){return this._disposed}constructor(e){if(super(),this._demuxerPromise=null,this._format=null,this._trackBackingsCache=null,this._backingToTrack=new Map,this._disposed=!1,this._nextSourceCacheAge=0,this._sourceRefs=[],this._sourceCache=[],this._sourceCachePromises=[],this._onFormatDetermined=null,!e||"object"!==typeof e)throw new TypeError("options must be an object.");if(!Array.isArray(e.formats)||e.formats.some(e=>!(e instanceof Da)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof la||e.source instanceof ua))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof la&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(void 0!==e.initInput&&!(e.initInput instanceof rn))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.`)}})(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof la?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef),tn?.register(this,this._sourceRefs,this)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){i(this._rootSource instanceof da);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 r=this._sourceCache.find(i=>i.cacheGroup===t&&ha(i.request,e));if(r)return r.age++,Promise.resolve(r.sourceRef.source.ref());const a=this._sourceCachePromises.find(i=>i.cacheGroup===t&&ha(i.request,e));if(a)return a.promise.then(e=>e.sourceRef.source.ref());const s=(async()=>{const r=await this._getSourceUncached(e);if(ae(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount)>=4){const e=se(this._sourceCache,e=>e.cacheGroup===t&&1===e.sourceRef.source._refCount?e.age:1/0);i(-1!==e);const r=this._sourceCache[e];this._sourceCache.splice(e,1),r.sourceRef.free(),((e,t)=>{const i=e.indexOf(t);-1!==i&&e.splice(i,1)})(this._sourceRefs,r.sourceRef)}this._sourceRefs.push(r);const a=this._sourceCachePromises.findIndex(t=>t.request===e);i(-1!==a),this._sourceCachePromises.splice(a,1);return{request:e,sourceRef:r,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:s}),s.then(e=>{const t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??(this._demuxerPromise=(async()=>{this._reader=new nn(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 an})())}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),i(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof an)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.getFirstTimestamp()));return Math.min(...i)}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=Ys(e));const t=(await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e));return Zs(t,e)}async getVideoTracks(e){e&&(e=Ys(e));const t=(await this.getTracks()).filter(e=>e.isVideoTrack());return Zs(t,e)}async getAudioTracks(e){e&&(e=Ys(e));const t=(await this.getTracks()).filter(e=>e.isAudioTrack());return Zs(t,e)}async getPrimaryVideoTrack(e){e&&(e=Ys(e));const t=Js(e,{sortBy:async e=>[Gs((await e.getDisposition()).default),Gs(await e.hasPairableAudioTrack()),Gs(!(await e.hasOnlyKeyPackets())),Qs(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&(e=Ys(e));const t=await this.getPrimaryVideoTrack(),i=Js(e,{sortBy:async e=>[Gs(!t||e.canBePairedWith(t)),Gs((await e.getDisposition()).default),Qs(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 Xs(this,e):new $s(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,tn?.unregister(this),this._demuxerPromise?.then(e=>e.dispose())}}[Symbol.dispose](){this.dispose()}}class an extends Error{constructor(e="Input has an unsupported or unrecognizable format."){super(e),this.name="UnsupportedInputFormatError"}}class sn extends Error{constructor(e="Input has been disposed."){super(e),this.name="InputDisposedError"}}class nn{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 sn;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 on(t,c(t),0,e,e)}const i=e+t,r=this.source._read(e,i,0,ca);return r instanceof Promise?r.then(t=>t?new on(t.bytes,t.view,t.offset,e,i):null):r?new on(r.bytes,r.view,r.offset,e,i):null}requestSliceRange(e,t,r){if(this.source._disposed)throw new sn;if(e<0)return null;if(null!==this.fileSizeNonStrict)return this.requestSlice(e,F(this.fileSizeNonStrict-e,t,r));{const a=this.requestSlice(e,r),s=a=>a||(i(null!==this.fileSizeNonStrict),this.requestSlice(e,F(this.fileSizeNonStrict-e,t,r)));return a instanceof Promise?a.then(s):s(a)}}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);const i=1024*e.length;let r=this.requestSliceRange(i,0,1024);if(r instanceof Promise&&(r=await r),!r)break;e.push(ln(r,r.length)),t+=r.length}const i=new Uint8Array(t);let r=0;for(const a of e)i.set(a,r),r+=a.length;return new on(i,c(i),0,0,t)})()}}class on{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 on(e,c(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(e<this.start||e+t>this.end)throw new RangeError("Slicing outside of original slice.");return new on(this.bytes,this.view,this.offset,e,e+t)}}const cn=(e,t)=>{if(e.filePos<e.start||e.filePos+t>e.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.`)},ln=(e,t)=>{cn(e,t);const i=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,i},un=e=>(cn(e,1),e.view.getUint8(e.bufferPos++)),dn=(e,t)=>{cn(e,2);const i=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,i},hn=e=>{cn(e,2);const t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},fn=e=>{cn(e,3);const t=E(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},mn=e=>{cn(e,2);const t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},pn=(e,t)=>{cn(e,4);const i=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,i},gn=e=>{cn(e,4);const t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},kn=e=>{cn(e,4);const t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},bn=e=>{cn(e,4);const t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},yn=(e,t)=>{let i,r;return t?(i=pn(e,!0),r=pn(e,!0)):(r=pn(e,!1),i=pn(e,!1)),4294967296*r+i},wn=e=>4294967296*gn(e)+gn(e),Tn=e=>4294967296*bn(e)+gn(e),Sn=e=>{const t=kn(e),i=(e=>{cn(e,4);const t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t})(e);return 4294967296*i+t},Pn=e=>{cn(e,4);const t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},vn=e=>{cn(e,8);const t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},In=(e,t)=>{cn(e,t);let i="";for(let r=0;r<t;r++)i+=String.fromCharCode(e.bytes[e.bufferPos++]);return i},xn=(e,t,i)=>l.decode(ln(e,t)).split("\n").map(e=>e.trim()).filter(e=>e.length>0&&!i?.ignore?.(e));var Cn,Bn,En,_n;(Bn=Cn||(Cn={}))[Bn.Unsynchronisation=128]="Unsynchronisation",Bn[Bn.ExtendedHeader=64]="ExtendedHeader",Bn[Bn.ExperimentalIndicator=32]="ExperimentalIndicator",Bn[Bn.Footer=16]="Footer",(_n=En||(En={}))[_n.ISO_8859_1=0]="ISO_8859_1",_n[_n.UTF_16_WITH_BOM=1]="UTF_16_WITH_BOM",_n[_n.UTF_16_BE_NO_BOM=2]="UTF_16_BE_NO_BOM",_n[_n.UTF_8=3]="UTF_8";const An=128,Fn=10,Rn=["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"],Dn=(e,t)=>{var i;const r=e.filePos;t.raw??(t.raw={}),(i=t.raw).TAG??(i.TAG=ln(e,An-3)),e.filePos=r;const a=Mn(e,30);a&&(t.title??(t.title=a));const s=Mn(e,30);s&&(t.artist??(t.artist=s));const n=Mn(e,30);n&&(t.album??(t.album=n));const o=Mn(e,4),c=Number.parseInt(o,10);Number.isInteger(c)&&c>0&&(t.date??(t.date=new Date(c,0,1)));const l=ln(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=Mn(e,28),e.skip(2)}else e.skip(-30),u=Mn(e,30);u&&(t.comment??(t.comment=u));const d=un(e);d<Rn.length&&(t.genre??(t.genre=Rn[d]))},Mn=(e,t)=>{const i=ln(e,t),r=J(i.indexOf(0),i.length),a=i.subarray(0,r);let s="";for(let n=0;n<a.length;n++)s+=String.fromCharCode(a[n]);return s.trimEnd()},Nn=e=>{const t=e.filePos,i=In(e,3),r=un(e),a=un(e),s=un(e),n=gn(e);if("ID3"!==i||255===r||255===a||0!==(2155905152&n))return e.filePos=t,null;return{majorVersion:r,revision:a,flags:s,size:Ne(n)}},On=(e,t,i)=>{var r,a,s,n,o;if(![2,3,4].includes(t.majorVersion))return void console.warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);const c=ln(e,t.size),l=new Ln(t,c);if(t.flags&Cn.Footer&&l.removeFooter(),t.flags&Cn.Unsynchronisation&&3===t.majorVersion&&l.ununsynchronizeAll(),t.flags&Cn.ExtendedHeader){const e=l.readU32();3===t.majorVersion?l.pos+=e:l.pos+=e-4}for(;l.pos<=l.bytes.length-l.frameHeaderSize();){const e=l.readId3V2Frame();if(!e)break;const c=l.pos,u=l.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&Cn.Unsynchronisation)),d)console.warn(`Skipping encrypted ID3v2 frame ${e.id}`),l.pos=u;else if(h)console.warn(`Skipping compressed ID3v2 frame ${e.id}`),l.pos=u;else{if(f&&l.ununsynchronizeRegion(l.pos,u),i.raw??(i.raw={}),"TXXX"===e.id){const e=(r=i.raw).TXXX??(r.TXXX={}),t=l.readId3V2TextEncoding(),a=l.readId3V2Text(t,u),s=l.readId3V2Text(t,u);e[a]??(e[a]=s)}else"T"===e.id[0]?(a=i.raw)[s=e.id]??(a[s]=l.readId3V2EncodingAndText(u)):(n=i.raw)[o=e.id]??(n[o]=l.readBytes(e.size));switch(l.pos=c,e.id){case"TIT2":case"TT2":i.title??(i.title=l.readId3V2EncodingAndText(u));break;case"TIT3":case"TT3":i.description??(i.description=l.readId3V2EncodingAndText(u));break;case"TPE1":case"TP1":i.artist??(i.artist=l.readId3V2EncodingAndText(u));break;case"TALB":case"TAL":i.album??(i.album=l.readId3V2EncodingAndText(u));break;case"TPE2":case"TP2":i.albumArtist??(i.albumArtist=l.readId3V2EncodingAndText(u));break;case"TRCK":case"TRK":{const e=l.readId3V2EncodingAndText(u).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=l.readId3V2EncodingAndText(u).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=l.readId3V2EncodingAndText(u);let t=/^\((\d+)\)/.exec(e);if(t){const e=Number.parseInt(t[1]);if(void 0!==Rn[e]){i.genre??(i.genre=Rn[e]);break}}if(t=/^\d+$/.exec(e),t){const e=Number.parseInt(t[0]);if(void 0!==Rn[e]){i.genre??(i.genre=Rn[e]);break}}i.genre??(i.genre=e)}break;case"TDRC":case"TDAT":{const e=l.readId3V2EncodingAndText(u),t=new Date(e);Number.isNaN(t.getTime())||(i.date??(i.date=t))}break;case"TYER":case"TYE":{const e=l.readId3V2EncodingAndText(u),t=Number.parseInt(e,10);Number.isInteger(t)&&(i.date??(i.date=new Date(t,0,1)))}break;case"USLT":case"ULT":{const e=l.readU8();l.pos+=3,l.readId3V2Text(e,u),i.lyrics??(i.lyrics=l.readId3V2Text(e,u))}break;case"COMM":case"COM":{const e=l.readU8();l.pos+=3,l.readId3V2Text(e,u),i.comment??(i.comment=l.readId3V2Text(e,u))}break;case"APIC":case"PIC":{const e=l.readId3V2TextEncoding();let r;if(2===t.majorVersion){const e=l.readAscii(3);r="PNG"===e?"image/png":"JPG"===e?"image/jpeg":"image/*"}else r=l.readId3V2Text(e,u);const a=l.readU8(),s=l.readId3V2Text(e,u).trimEnd(),n=u-l.pos;if(n>=0){const e=l.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:l.pos+=e.size}l.pos=u}}};class Ln{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<this.bytes.length;t++){const i=this.bytes[t];if(e.push(i),255===i&&t!==this.bytes.length-1){0===this.bytes[t]&&t++}}this.bytes=new Uint8Array(e),this.view=new DataView(this.bytes.buffer)}ununsynchronizeRegion(e,t){const i=[];for(let s=e;s<t;s++){const e=this.bytes[s];if(i.push(e),255===e&&s!==t-1){0===this.bytes[s+1]&&s++}}const r=this.bytes.subarray(0,e),a=this.bytes.subarray(t);this.bytes=new Uint8Array(r.length+i.length+a.length),this.bytes.set(r,0),this.bytes.set(i,r.length),this.bytes.set(a,r.length+i.length),this.view=new DataView(this.bytes.buffer)}removeFooter(){this.bytes=this.bytes.subarray(0,this.bytes.length-Fn),this.view=new DataView(this.bytes.buffer)}readBytes(e){const t=this.bytes.subarray(this.pos,this.pos+e);return this.pos+=e,t}readU8(){const e=this.view.getUint8(this.pos);return this.pos+=1,e}readU16(){const e=this.view.getUint16(this.pos,!1);return this.pos+=2,e}readU24(){const e=this.view.getUint16(this.pos,!1),t=this.view.getUint8(this.pos+1);return this.pos+=3,256*e+t}readU32(){const e=this.view.getUint32(this.pos,!1);return this.pos+=4,e}readAscii(e){let t="";for(let i=0;i<e;i++)t+=String.fromCharCode(this.view.getUint8(this.pos+i));return this.pos+=e,t}readId3V2Frame(){if(2===this.header.majorVersion){const e=this.readAscii(3);if("\0\0\0"===e)return null;return{id:e,size:this.readU24(),flags:0}}{const e=this.readAscii(4);if("\0\0\0\0"===e)return null;const t=this.readU32();let i=4===this.header.majorVersion?Ne(t):t;const r=this.readU16(),a=this.pos,s=e=>{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:Ne(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 En.ISO_8859_1:{let e="";for(let t=0;t<r.length;t++){const a=r[t];if(0===a){this.pos=i+t+1;break}e+=String.fromCharCode(a)}return e}case En.UTF_16_WITH_BOM:if(255===r[0]&&254===r[1]){const e=new TextDecoder("utf-16le"),t=J(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))}if(254===r[0]&&255===r[1]){const e=new TextDecoder("utf-16be"),t=J(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=J(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),l.decode(r.subarray(0,e))}case En.UTF_16_BE_NO_BOM:{const e=new TextDecoder("utf-16be"),t=J(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 En.UTF_8:{const e=J(r.findIndex(e=>0===e),r.length);return this.pos=i+Math.min(e+1,r.length),l.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return"";const t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}}class zn{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 Vs(r),void t?.()):(this.audioSink=null,this.ensureAudioContext(),void t?.()):(this.handleNoAudioTrack(),void t?.())}async runIterator(e){if(this.audioSink)for(await this.stopIterator(),this.audioIterator=this.audioSink.buffers(this.currentTime);;){if(e!==this.asyncId||this.paused)return;const i=this.audioIterator.next(),r=setInterval(()=>{e!==this.asyncId||this.paused?clearInterval(r):"running"===this.audioContext.state&&this.audioContext.currentTime>=this.latestScheduledEndTime-.2&&(this.audioContext.suspend(),this.events.emit("waiting"))},50);let a;try{a=await i}catch(t){console.error("Audio iterator error:",t);break}finally{clearInterval(r)}if(e!==this.asyncId||this.paused)return;if("suspended"===this.audioContext.state&&(await this.audioContext.resume(),this.events.emit("canplay"),this.events.emit("playing")),a.done)break;const{buffer:s,timestamp:n}=a.value,o=this.audioContext.createBufferSource();o.buffer=s,o.connect(this.gainNode),o.playbackRate.value=this.playbackRate;const c=this.audioContextStartTime+(n-this.playbackTimeAtStart)/this.playbackRate,l=c+s.duration/this.playbackRate;l>this.latestScheduledEndTime&&(this.latestScheduledEndTime=l),c>=this.audioContext.currentTime?o.start(c):o.start(this.audioContext.currentTime,(this.audioContext.currentTime-c)*this.playbackRate),this.queuedNodes.add(o),o.onended=()=>this.queuedNodes.delete(o)}}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.audioContextStartTime,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.audioContextStartTime;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}}const Un=/\.m3u8(?:$|[?#])/i;function qn(e){return"string"===typeof e&&Un.test(e)}function Wn(e){const t=function(e){return"string"===typeof e?new ka(e):e instanceof Blob?new ma(e):"undefined"!==typeof ReadableStream&&e instanceof ReadableStream?new ba(e):e??null}(e);return t?new rn({source:t,formats:qn(e)?ss:as}):null}async function Vn({input:e,videoTrack:t,audioTrack:i}){const r=[t,i].filter(Boolean),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}async function Hn(e){return await e.getAverageBitrate()??await e.getBitrate()??0}class Kn{constructor({canvas:e,ctx:t,events:i,timeupdateInterval:r=250,avSyncTolerance:a=.12,dropLateFrames:s=!1,poster:n="",preflightRange:o=!1}){this.canvas=e,this.ctx=t,this.events=i,this.timeupdateInterval=r,this.avSyncTolerance=a,this.dropLateFrames=s,this.poster=n,this.preflightRange=o,this.input=null,this.videoSink=null,this.videoIterator=null,this.nextFrame=null,this.rafId=0,this.asyncId=0,this.width=0,this.height=0,this.duration=Number.NaN,this.audioClock=null,this.lastTimeUpdate=0,this.stalled=!1,this.playbackRate=1,this.posterDrawn=!1,this.isFetching=!1}async preflight(e){if(!this.preflightRange||"string"!==typeof e||qn(e))return!0;try{const t=(await fetch(e,{method:"HEAD"})).headers.get("accept-ranges");return!(!t||"none"===t)||(this.events.emit("error",new Event("RangeNotSupported")),!1)}catch(t){return console.warn("Preflight check failed:",t),!0}}drawPoster(){if(!this.poster||this.posterDrawn)return;const e=new Image;e.onload=()=>{this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.canvas.width=e.naturalWidth||this.canvas.width,this.canvas.height=e.naturalHeight||this.canvas.height,this.ctx.drawImage(e,0,0,this.canvas.width,this.canvas.height),this.posterDrawn=!0},e.src=this.poster}async stopIterator(){await(this.videoIterator?.return()),this.videoIterator=null}clear(){this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height)}async load(e,t){++this.asyncId,await this.stopIterator(),this.clear(),this.posterDrawn=!1;const{input:i,videoTrack:r,duration:a}=e;if(this.input=i,this.duration=a,!r)return this.handleNoVideoTrack(),void t?.();if(null===r.codec||!(await r.canDecode()))return this.handleNoVideoTrack(),void t?.();const s=await r.canBeTransparent();this.videoSink=new zs(r,{poolSize:2,fit:"contain",alpha:s}),this.width=r.displayWidth,this.height=r.displayHeight,this.canvas.width=this.width,this.canvas.height=this.height,t?.(),await this.resetIterator(0)}handleNoVideoTrack(){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(await this.stopIterator(),!this.videoSink)return;this.videoIterator=this.videoSink.canvases(e);const t=(await this.videoIterator.next()).value??null,i=(await this.videoIterator.next()).value??null;this.nextFrame=i,t?this.ctx.drawImage(t.canvas,0,0):this.drawPoster()}async updateNextFrame(e){if(this.videoIterator&&!this.isFetching){this.isFetching=!0;try{for(;;){const t=(await this.videoIterator.next()).value??null;if(!t||e!==this.asyncId)return;const i=this.audioClock.currentTime,r=this.dropLateFrames?Math.max(.06,this.avSyncTolerance/Math.max(1,this.playbackRate)):0;if(!(this.dropLateFrames&&t.timestamp<i-r)){if(!(t.timestamp<=i+r))return void(this.nextFrame=t);if(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.drawImage(t.canvas,0,0),!this.dropLateFrames&&t.timestamp>i)return void(this.nextFrame=null)}}}finally{this.isFetching=!1}}}render(){if(!this.audioClock)return;const e=this.audioClock.currentTime,t=Date.now();if(t-this.lastTimeUpdate>=this.timeupdateInterval&&(this.events.emit("timeupdate"),this.lastTimeUpdate=t),Number.isFinite(this.duration)&&e>=this.duration)return this.stop(),this.stalled=!1,this.events.emit("ended"),this.events.emit("pause"),void this.events.emit("canplay");this.nextFrame&&this.nextFrame.timestamp<=e?(this.ctx.clearRect(0,0,this.canvas.width,this.canvas.height),this.ctx.drawImage(this.nextFrame.canvas,0,0),this.nextFrame=null,this.updateNextFrame(this.asyncId),this.stalled&&(this.events.emit("canplay"),this.events.emit("playing"),this.stalled=!1)):this.nextFrame||(this.updateNextFrame(this.asyncId),!this.nextFrame&&Number.isFinite(this.duration)&&e<this.duration&&!this.stalled&&(this.stalled=!0,this.events.emit("waiting"))),this.rafId=requestAnimationFrame(()=>this.render())}start(e){this.audioClock=e,this.asyncId++,this.stalled=!1,this.updateNextFrame(this.asyncId),this.rafId=requestAnimationFrame(()=>this.render())}stop(){cancelAnimationFrame(this.rafId)}async seek(e){this.asyncId++,await this.resetIterator(e)}setPlaybackRate(e){this.playbackRate=Math.max(.1,Number(e)||1)}destroy(){this.asyncId++,this.stop(),this.stopIterator(),this.posterDrawn=!1,this.videoSink=null,this.input=null}}class jn{constructor({canvas:e,ctx:t,events:i,option:r={}}){this.events=i,this.option=r,this.audio=new zn(i),this.video=new Kn({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}),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,i.addEventListener?.("ended",()=>{this.ended=!0,this.paused=!0})}async load(e){const t=++this.loadSeq;this.pause(),this.disposeInput(),this.ended=!1,this.error=null,this.networkState=2,this.readyState=0,setTimeout(()=>this.events.emit("waiting"),0),setTimeout(()=>this.events.emit("loadstart"),0);const i=Number.isFinite(this.option.loadTimeout)?this.option.loadTimeout:0;try{await Promise.race([this.performLoad(e,t),i>0?this.createTimeout(i):new Promise(()=>{})])}catch(r){if(t!==this.loadSeq)return;this.loadSeq++,this.error={code:4,message:r.message},this.networkState=3,this.events.emit("error")}}async performLoad(e,t){if(!(await this.video.preflight(e)))return;const i=Wn(e);if(!i)return this.video.handleNoVideoTrack(),void this.audio.handleNoAudioTrack();const r=await async function(e,t){const i=await e.getPrimaryVideoTrack(),r=i?await i.getPrimaryPairableAudioTrack():await e.getPrimaryAudioTrack(),a=await Vn({input:e,videoTrack:i,audioTrack:r});return{input:e,videoTrack:i,audioTrack:r,duration:a,isLive:!Number.isFinite(a)&&Boolean((i||r)&&await(i||r).isLive()),isHls:qn(t),videoMode:qn(t)?"auto":"manual",audioMode:qn(t)?"auto":"manual"}}(i,e);if(t!==this.loadSeq)return void i.dispose();this.disposeInput(),this.input=i,this.media=r;let a=!r.videoTrack,s=!r.audioTrack;const n=()=>{a&&s&&(this.readyState=1,this.events.emit("loadedmetadata"),this.events.emit("durationchange"),this.events.emit("progress"))};try{if(await Promise.all([this.video.load(r,()=>{t===this.loadSeq&&(a=!0,n())}),this.audio.load(r,()=>{t===this.loadSeq&&(s=!0,n())})]),t!==this.loadSeq)return;this.readyState=4,this.networkState=1,this.events.emit("loadeddata"),this.events.emit("canplay"),this.events.emit("canplaythrough"),this.events.emit("progress")}catch(o){if(t!==this.loadSeq)return;this.error={code:4,message:o.message},this.networkState=3,this.events.emit("error"),console.error("MediaBunny load error:",o)}}createTimeout(e){return new Promise((t,i)=>{setTimeout(()=>i(new Error("Load timeout")),e)})}disposeInput(){this.input?.dispose(),this.input=null,this.media=null}async replaceTracks({videoTrack:e,audioTrack:t,videoMode:i,audioMode:r}){if(!this.media)return;const a={...this.media,videoTrack:e,audioTrack:t,videoMode:i,audioMode:r},s=!this.paused,n=this.currentTime;this.pause(),this.ended=!1,this.seeking=!0,this.events.emit("seeking"),this.events.emit("waiting"),a.duration=await Vn(a),this.media=a,await Promise.all([this.video.load(a),this.audio.load(a)]),await Promise.all([this.video.seek(n),this.audio.seek(n)]),this.readyState=4,this.networkState=1,this.seeking=!1,this.events.emit("loadedmetadata"),this.events.emit("durationchange"),this.events.emit("progress"),this.events.emit("loadeddata"),this.events.emit("canplay"),this.events.emit("canplaythrough"),this.events.emit("seeked"),s&&await this.play()}async selectHlsQuality(e){if(!this.media?.isHls||!this.input)return;const t=await this.input.getVideoTracks(),i="auto"===e?await this.input.getPrimaryVideoTrack():t.find(t=>t.id===e)??this.media.videoTrack;if(!i)return;let r=this.media.audioTrack,a=this.media.audioMode;r&&i.canBePairedWith(r)||(r=await i.getPrimaryPairableAudioTrack(),a="auto"),await this.replaceTracks({videoTrack:i,audioTrack:r,videoMode:"auto"===e?"auto":"manual",audioMode:a})}async selectHlsAudio(e){if(!this.media?.isHls||!this.input)return;const t=await this.input.getAudioTracks(),i="auto"===e?this.media.videoTrack?await this.media.videoTrack.getPrimaryPairableAudioTrack():await this.input.getPrimaryAudioTrack():t.find(t=>t.id===e)??this.media.audioTrack;if(!i)return;let r=this.media.videoTrack,a=this.media.videoMode;r&&i.canBePairedWith(r)||(r=await i.getPrimaryPairableVideoTrack(),a="auto"),await this.replaceTracks({videoTrack:r,audioTrack:i,videoMode:a,audioMode:"auto"===e?"auto":"manual"})}getHlsState(){return 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 Hn(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 Hn(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"}}(this.media)}async play(){this.paused&&(this.ended&&(this.ended=!1,await this.seek(0)),this.paused=!1,await this.audio.play(),this.video.start(this.audio),this.events.emit("play"),this.events.emit("playing"))}pause(){this.paused||(this.paused=!0,this.audio.pause(),this.video.stop(),this.events.emit("pause"))}async seek(e){const t=!this.paused;this.ended=!1,this.seeking=!0,this.events.emit("seeking"),this.events.emit("waiting"),this.pause(),await Promise.all([this.audio.seek(e),this.video.seek(e)]),this.seeking=!1,this.events.emit("seeked"),t&&!this.ended&&await this.play()}setVolume(e,t){this.audio.setVolume(e,t)}setPlaybackRate(e){this.audio.setPlaybackRate(e),this.video.setPlaybackRate(e)}destroy(){this.pause(),this.disposeInput(),this.audio.destroy(),this.video.destroy()}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}}class Xn{constructor({art:e,canvas:i,ctx:r,option:a}){this.art=e,this.canvas=i,this.option=a,this.events=new t,this.engine=new jn({canvas:i,ctx:r,events:this.events,option:a}),this._src=null,this._volume=a.volume??.7,this._muted=!!a.muted,this._playbackRate=1,this.engine.setVolume(this._volume,this._muted),this.setupEventForwarding(),a.source?this.src=a.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){this.engine.seek(Number(e)||0)}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){const i=this.engine.duration;return!i||Number.isNaN(i)||t<=0?{length:0,start:()=>0,end:()=>0}:{length:1,start:()=>e,end:()=>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){this._volume=function(e,t,i){return Math.max(t,Math.min(i,Number(e)||0))}(e,0,1),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 requestAnimationFrame(t=>{e(t,{presentationTime:this.engine.currentTime,expectedDisplayTime:t+16.6,width:this.engine.videoWidth,height:this.engine.videoHeight,mediaTime:this.engine.currentTime,presentedFrames:0,processingDuration:0,captureTime:t,receiveTime:t,rtpTimestamp:0})})}cancelVideoFrameCallback(e){cancelAnimationFrame(e)}setAttribute(e,t){"src"===e?this.src=t:"autoplay"===e?this.autoplay=t:"loop"===e?this.loop=t:"muted"===e?this.muted=!0:this.canvas.setAttribute(e,t)}destroy(){this.engine.destroy()}}return function(t={}){return i=>{const{constructor:r}=i,{createElement:a}=r.utils,s=a("canvas"),n=s.getContext("2d"),o=new Xn({art:i,canvas:s,ctx:n,option:t});i.mediabunny=o;const c={};for(const e in s)"function"===typeof s[e]&&(c[e]=s[e].bind(s));const l=new Set([...Object.getOwnPropertyNames(o),...Object.getOwnPropertyNames(Object.getPrototypeOf(o))]);for(const e of l)"constructor"!==e&&(e in s||Object.defineProperty(s,e,{get(){const t=o[e];return"function"===typeof t?t.bind(o):t},set(t){o[e]=t},configurable:!0,enumerable:!0}));for(const e in c)s[e]=(...t)=>c[e](...t);function u(){const e=i.template?.$player;e&&!i.option.autoSize&&Object.assign(s.style,{width:"100%",height:"100%",objectFit:"contain"})}return i.on("resize",u),i.on("video:loadedmetadata",u),function({art:t,shim:i,option:r}){if(r.m3u8)return t.on("video:loadedmetadata",d),t.on("restart",d),{update:d};function a(e){t.controls.cache.has(e)&&t.controls.remove(e)}function s(e){t.setting.find(e)&&t.setting.remove(e)}function n(){a("mediabunny-quality"),s("mediabunny-quality")}function o(){a("mediabunny-audio"),s("mediabunny-audio")}function c(e={}){return e.control||e.setting}async function l(a){const s=r.m3u8?.quality||{};if(!c(s)||!a?.levels.length)return void n();const o=s.auto||"Auto",l=s.title||"Quality",u=s.getName||(e=>e.name||`${e.height}P`),h=a.currentLevel?u(a.currentLevel):o,f=e(a.levels.map(e=>({html:u(e),value:e.id,default:a.currentLevel?.id===e.id})),"html").sort((e,t)=>{const i=a.levels.find(t=>t.id===e.value),r=a.levels.find(e=>e.id===t.value);return(r?.height||0)-(i?.height||0)});f.push({html:o,value:"auto",default:!a.currentLevel});const m=async e=>(await i.switchM3u8Quality(e.value),t.notice.show=`${l}: ${e.html}`,await d(),e.html);s.control&&t.controls.update({name:"mediabunny-quality",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&t.setting.update({name:"mediabunny-quality",tooltip:h,html:l,icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="18"><path fill="#fff" d="M0 96C0 60.7 28.7 32 64 32l384 0c35.3 0 64 28.7 64 64l0 320c0 35.3-28.7 64-64 64L64 480c-35.3 0-64-28.7-64-64L0 96zM323.8 202.5c-4.5-6.6-11.9-10.5-19.8-10.5s-15.4 3.9-19.8 10.5l-87 127.6L170.7 297c-4.6-5.7-11.5-9-18.7-9s-14.2 3.3-18.7 9l-64 80c-5.8 7.2-6.9 17.1-2.9 25.4s12.4 13.6 21.6 13.6l96 0 32 0 208 0c8.9 0 17.1-4.9 21.2-12.8s3.6-17.4-1.4-24.7l-120-176zM112 192a48 48 0 1 0 0-96 48 48 0 1 0 0 96z"/></svg>',width:200,selector:f,onSelect:m})}async function u(a){const s=r.m3u8?.audio||{};if(!c(s)||!a?.audios.length||a.audios.length<2)return void o();const n=s.auto||"Auto",l=s.title||"Audio",u=s.getName||(e=>e.name||e.lang||e.language),h=a.currentAudio?u(a.currentAudio):n,f=e(a.audios.map(e=>({html:u(e),value:e.id,default:a.currentAudio?.id===e.id})),"html");f.push({html:n,value:"auto",default:!a.currentAudio});const m=async e=>(await i.switchM3u8Audio(e.value),t.notice.show=`${l}: ${e.html}`,await d(),e.html);s.control&&t.controls.update({name:"mediabunny-audio",position:"right",html:h,style:{padding:"0 10px"},selector:f,onSelect:m}),s.setting&&t.setting.update({name:"mediabunny-audio",tooltip:h,html:l,icon:'<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" height="18"><path fill="#fff" d="M256 80C149.9 80 62.4 159.4 49.6 262c9.4-3.8 19.6-6 30.4-6c26.5 0 48 21.5 48 48l0 128c0 26.5-21.5 48-48 48c-44.2 0-80-35.8-80-80l0-16 0-48 0-48C0 146.6 114.6 32 256 32s256 114.6 256 256l0 48 0 48 0 16c0 44.2-35.8 80-80 80c-26.5 0-48-21.5-48-48l0-128c0-26.5 21.5-48 48-48c10.8 0 21 2.1 30.4 6C449.6 159.4 362.1 80 256 80z"/></svg>',width:200,selector:f,onSelect:m})}async function d(){const e=await i.getM3u8State();if(!e)return n(),void o();await Promise.all([l(e),u(e)])}}({art:i,shim:o,option:t}),i.on("destroy",()=>{delete i.mediabunny,o.destroy()}),s}}});