/*! * Copyright (c) 2026-present, Vanilagy and contributors * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ "use strict";var Mediabunny=(()=>{var om=Object.create;var da=Object.defineProperty;var cm=Object.getOwnPropertyDescriptor;var um=Object.getOwnPropertyNames;var lm=Object.getPrototypeOf,dm=Object.prototype.hasOwnProperty;var hu=(n,t)=>(t=Symbol[n])?t:Symbol.for("Symbol."+n),gu=n=>{throw TypeError(n)};var mm=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),fm=(n,t)=>{for(var e in t)da(n,e,{get:t[e],enumerable:!0})},bu=(n,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of um(t))!dm.call(n,i)&&i!==e&&da(n,i,{get:()=>t[i],enumerable:!(r=cm(t,i))||r.enumerable});return n};var yu=(n,t,e)=>(e=n!=null?om(lm(n)):{},bu(t||!n||!n.__esModule?da(e,"default",{value:n,enumerable:!0}):e,n)),pm=n=>bu(da({},"__esModule",{value:!0}),n);var Fo=(n,t,e)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&gu("Object expected");var r,i;e&&(r=t[hu("asyncDispose")]),r===void 0&&(r=t[hu("dispose")],e&&(i=r)),typeof r!="function"&&gu("Object not disposable"),i&&(r=function(){try{i.call(this)}catch(a){return Promise.reject(a)}}),n.push([e,r,t])}else e&&n.push([e]);return t},Mo=(n,t,e)=>{var r=typeof SuppressedError=="function"?SuppressedError:function(s,o,c,u){return u=Error(c),u.name="SuppressedError",u.error=s,u.suppressed=o,u},i=s=>t=e?new r(s,t,"An error was suppressed during disposal"):(e=!0,s),a=s=>{for(;s=n.pop();)try{var o=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(o).then(a,c=>(i(c),a()))}catch(c){i(c)}if(e)throw t};return a()};var xc=mm(()=>{});var Rp={};fm(Rp,{ADTS:()=>Os,ALL_FORMATS:()=>Jl,ALL_TRACK_TYPES:()=>lu,AUDIO_CODECS:()=>se,AdtsInputFormat:()=>Ln,AdtsOutputFormat:()=>Po,AppendOnlyStreamTarget:()=>no,AttachedFile:()=>Kt,AudioBufferSink:()=>$s,AudioBufferSource:()=>bo,AudioSample:()=>Te,AudioSampleSink:()=>Er,AudioSampleSource:()=>mi,AudioSource:()=>Dt,BaseMediaSampleSink:()=>ji,BlobSource:()=>As,BufferSource:()=>Ss,BufferTarget:()=>Br,CanvasSink:()=>Xi,CanvasSource:()=>ho,CmafOutputFormat:()=>si,ConcurrentRunner:()=>ma,Conversion:()=>Ro,ConversionCanceledError:()=>ua,CustomAudioDecoder:()=>$n,CustomAudioEncoder:()=>Zn,CustomPathedSource:()=>Ni,CustomVideoDecoder:()=>Xn,CustomVideoEncoder:()=>Yn,EncodedAudioPacketSource:()=>Vr,EncodedPacket:()=>Q,EncodedPacketSink:()=>bt,EncodedVideoPacketSource:()=>Dr,EventEmitter:()=>je,FLAC:()=>Mc,FilePathSource:()=>Ps,FilePathTarget:()=>ao,FlacInputFormat:()=>Nn,FlacOutputFormat:()=>Co,HLS:()=>Vs,HLS_FORMATS:()=>ed,HlsInputFormat:()=>Zr,HlsOutputFormat:()=>Eo,Input:()=>xr,InputAudioTrack:()=>_t,InputDisposedError:()=>ke,InputFormat:()=>Be,InputTrack:()=>vr,InputVideoTrack:()=>vt,IsobmffInputFormat:()=>Wi,IsobmffOutputFormat:()=>pi,MATROSKA:()=>vc,MP3:()=>Bs,MP4:()=>Fs,MPEG_TS:()=>Ds,MatroskaInputFormat:()=>Hi,MediaSource:()=>li,MediaStreamAudioTrackSource:()=>yo,MediaStreamVideoTrackSource:()=>go,MkvOutputFormat:()=>an,MovOutputFormat:()=>oi,Mp3InputFormat:()=>Vn,Mp3OutputFormat:()=>So,Mp4InputFormat:()=>Bn,Mp4OutputFormat:()=>hi,MpegTsInputFormat:()=>Wn,MpegTsOutputFormat:()=>Io,NON_PCM_AUDIO_CODECS:()=>st,NullTarget:()=>Or,OGG:()=>Fc,OggInputFormat:()=>zn,OggOutputFormat:()=>xo,Output:()=>sr,OutputAudioTrack:()=>oa,OutputFormat:()=>Ee,OutputSubtitleTrack:()=>ca,OutputTrack:()=>gi,OutputTrackGroup:()=>Le,OutputVideoTrack:()=>sa,PCM_AUDIO_CODECS:()=>te,PathedSource:()=>Ge,PathedTarget:()=>Ne,QTFF:()=>Ms,QUALITY_HIGH:()=>Kn,QUALITY_LOW:()=>md,QUALITY_MEDIUM:()=>fd,QUALITY_VERY_HIGH:()=>pd,QUALITY_VERY_LOW:()=>dd,Quality:()=>xe,QuickTimeInputFormat:()=>On,RangedSource:()=>Fn,RangedTarget:()=>ia,ReadableStreamSource:()=>Li,RichImageData:()=>He,SUBTITLE_CODECS:()=>Fe,Source:()=>Ie,SourceRef:()=>Sr,StreamSource:()=>_n,StreamTarget:()=>rn,SubtitleSource:()=>fi,Target:()=>Pe,TextSubtitleSource:()=>ko,UnsupportedInputFormatError:()=>Yi,UrlSource:()=>xs,VIDEO_CODECS:()=>re,VIDEO_SAMPLE_PIXEL_FORMATS:()=>Ws,VideoSample:()=>me,VideoSampleColorSpace:()=>ti,VideoSampleSink:()=>Ir,VideoSampleSource:()=>di,VideoSource:()=>Ot,WAVE:()=>Rc,WEBM:()=>_c,WavOutputFormat:()=>Ao,WaveInputFormat:()=>Un,WebMInputFormat:()=>Dn,WebMOutputFormat:()=>ci,asc:()=>Cd,canDecode:()=>rd,canDecodeAudio:()=>Ls,canDecodeVideo:()=>Ns,canEncode:()=>hd,canEncodeAudio:()=>Qn,canEncodeSubtitles:()=>jn,canEncodeVideo:()=>Gn,desc:()=>ea,getDecodableAudioCodecs:()=>Oc,getDecodableCodecs:()=>id,getDecodableVideoCodecs:()=>Bc,getEncodableAudioCodecs:()=>Ki,getEncodableCodecs:()=>gd,getEncodableSubtitleCodecs:()=>Nc,getEncodableVideoCodecs:()=>zc,getFirstEncodableAudioCodec:()=>bd,getFirstEncodableSubtitleCodec:()=>yd,getFirstEncodableVideoCodec:()=>Xs,prefer:()=>Rr,registerDecoder:()=>kd,registerEncoder:()=>Td});function p(n){if(!n)throw new Error("Assertion failed.")}var Tt=n=>{let t=(n%360+360)%360;if(t===0||t===90||t===180||t===270)return t;throw new Error(`Invalid rotation ${n}.`)},X=n=>n&&n[n.length-1],Ut=n=>n>=0&&n<2**32,M=n=>{let t=0;for(;n.readBits(1)===0&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{let t=M(n);return(t&1)===0?-(t>>1):t+1>>1},wu=(n,t,e,r)=>{for(let i=t;i>e-i-1<n.constructor===Uint8Array?n:ArrayBuffer.isView(n)?new Uint8Array(n.buffer,n.byteOffset,n.byteLength):new Uint8Array(n),U=n=>n.constructor===DataView?n:ArrayBuffer.isView(n)?new DataView(n.buffer,n.byteOffset,n.byteLength):new DataView(n),he=new TextDecoder,$=new TextEncoder,tt=n=>{for(let t=0;t255)return!1;return!0},Uo=n=>Object.fromEntries(Object.entries(n).map(([t,e])=>[e,t])),rt={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Ur=Uo(rt),it={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},zr=Uo(it),nt={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Nr=Uo(nt),fa=n=>!!n&&!!n.primaries&&!!n.transfer&&!!n.matrix&&n.fullRange!==void 0,zt=n=>n instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&n instanceof SharedArrayBuffer||ArrayBuffer.isView(n),ve=class{constructor(){this.currentPromise=Promise.resolve();this.pending=0}async acquire(){let t,e=new Promise(i=>{let a=!1;t=()=>{a||(i(),this.pending--,a=!0)}}),r=this.currentPromise;return this.currentPromise=e,this.pending++,await r,t}},Su=/^[0-9a-fA-F]+$/,ur=n=>[...n].map(t=>t.toString(16).padStart(2,"0")).join(""),Au=n=>{p(n.length%2===0);let t=new Uint8Array(n.length/2);for(let e=0;e(n=n>>1&1431655765|(n&1431655765)<<1,n=n>>2&858993459|(n&858993459)<<2,n=n>>4&252645135|(n&252645135)<<4,n=n>>8&16711935|(n&16711935)<<8,n=n>>16&65535|(n&65535)<<16,n>>>0),Nt=(n,t,e)=>{let r=0,i=n.length-1,a=-1;for(;r<=i;){let s=r+i>>1,o=e(n[s]);o===t?(a=s,i=s-1):o{let r=0,i=n.length-1,a=-1;for(;r<=i;){let s=r+(i-r+1)/2|0;e(n[s])<=t?(a=s,r=s+1):i=s-1}return a},No=(n,t,e)=>{let r=q(n,e(t),e);n.splice(r+1,0,t)},J=()=>{let n,t;return{promise:new Promise((r,i)=>{n=r,t=i}),resolve:n,reject:t}},Lo=(n,t)=>{let e=n.indexOf(t);e!==-1&&n.splice(e,1)},Wo=(n,t)=>{for(let e=n.length-1;e>=0;e--)if(t(n[e]))return n[e]},lr=(n,t)=>{for(let e=n.length-1;e>=0;e--)if(t(n[e]))return e;return-1},xu=async function*(n){Symbol.iterator in n?yield*n[Symbol.iterator]():yield*n[Symbol.asyncIterator]()},Pu=n=>{if(!(Symbol.iterator in n)&&!(Symbol.asyncIterator in n))throw new TypeError("Argument must be an iterable or async iterable.")},ae=n=>{throw new Error(`Unexpected value: ${n}`)},Lr=(n,t,e)=>{let r=n.getUint8(t),i=n.getUint8(t+1),a=n.getUint8(t+2);return e?r|i<<8|a<<16:r<<16|i<<8|a},Cu=(n,t,e)=>Lr(n,t,e)<<8>>8,Wr=(n,t,e,r)=>{e=e>>>0,e=e&16777215,r?(n.setUint8(t,e&255),n.setUint8(t+1,e>>>8&255),n.setUint8(t+2,e>>>16&255)):(n.setUint8(t,e>>>16&255),n.setUint8(t+1,e>>>8&255),n.setUint8(t+2,e&255))},Iu=(n,t,e,r)=>{e=de(e,-8388608,8388607),e<0&&(e=e+16777216&16777215),Wr(n,t,e,r)},Eu=(n,t,e,r)=>{r?(n.setUint32(t+0,e,!0),n.setInt32(t+4,Math.floor(e/2**32),!0)):(n.setInt32(t+0,Math.floor(e/2**32),!0),n.setUint32(t+4,e,!0))},on=(n,t)=>({async next(){let e=await n.next();return e.done?{value:void 0,done:!0}:{value:t(e.value),done:!1}},return(){return n.return()},throw(e){return n.throw(e)},[Symbol.asyncIterator](){return this}}),de=(n,t,e)=>Math.max(t,Math.min(e,n)),ee="und",Lt=n=>{let t=Math.round(n);return Math.abs(n/t-1)<10*Number.EPSILON?t:n},vu=(n,t)=>Math.round(n/t)*t,St=(n,t)=>Math.round(n*t)/t,pa=(n,t)=>Math.floor(n/t)*t,dr=(n,t)=>Math.floor(n*t)/t,_u=n=>{let t=0;for(;n;)t++,n>>=1;return t},hm=/^[a-z]{3}$/,Wt=n=>hm.test(n),At=1e6*(1+Number.EPSILON),Ru=(n,t)=>{let e={...n,...t};if(n.headers||t.headers){let r=n.headers?ku(n.headers):{},i=t.headers?ku(t.headers):{},a={...r};Object.entries(i).forEach(([s,o])=>{let c=Object.keys(a).find(u=>u.toLowerCase()===s.toLowerCase());c&&delete a[c],a[s]=o}),e.headers=a}return e},ku=n=>{if(n instanceof Headers){let t={};return n.forEach((e,r)=>{t[r]=e}),t}if(Array.isArray(n)){let t={};return n.forEach(([e,r])=>{t[e]=r}),t}return n},Fu=async(n,t,e,r,i)=>{let a=0;for(;;)try{return await n(t,e)}catch(s){if(i())throw s;a++;let o=r(a,s,t);if(o===null)throw s;if(console.error("Retrying failed fetch. Error:",s),!Number.isFinite(o)||o<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(o>0&&await un(1e3*o),i())throw s}},Mu=(n,t)=>{let e=n<0?-1:1;n=Math.abs(n);let r=0,i=1,a=1,s=0,o=n;for(;;){let c=Math.floor(o),u=c*a+r,l=c*s+i;if(l>t)return{numerator:e*a,denominator:s};if(r=a,i=s,a=u,s=l,o=1/(o-c),!isFinite(o))break}return{numerator:e*a,denominator:s}},cr=class{constructor(){this.currentPromise=Promise.resolve()}call(t){return this.currentPromise=this.currentPromise.then(t)}},Bo=null,mr=()=>Bo!==null?Bo:Bo=!!(typeof navigator<"u"&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent))),Oo=null,xt=()=>Oo!==null?Oo:Oo=typeof navigator<"u"&&navigator.userAgent?.includes("Firefox"),Do=null,cn=()=>Do!==null?Do:Do=!!(typeof navigator<"u"&&(navigator.vendor?.includes("Google Inc")||/Chrome/.test(navigator.userAgent))),Vo=null,Bu=()=>{if(Vo!==null)return Vo;if(typeof navigator>"u")return null;let n=/\bChrome\/(\d+)/.exec(navigator.userAgent);return n?Vo=Number(n[1]):null},Hr=(n,t)=>n!==-1?n:t,ha=(n,t,e,r)=>n<=r&&e<=t,at=function*(n){for(let t in n){let e=n[t];e!==void 0&&(yield{key:t,value:e})}},Ou=n=>{switch(n.toLowerCase()){case"image/jpeg":case"image/jpg":return".jpg";case"image/png":return".png";case"image/gif":return".gif";case"image/webp":return".webp";case"image/bmp":return".bmp";case"image/svg+xml":return".svg";case"image/tiff":return".tiff";case"image/avif":return".avif";case"image/x-icon":case"image/vnd.microsoft.icon":return".ico";default:return null}},qr=n=>{let t=atob(n),e=new Uint8Array(t.length);for(let r=0;r{let t="";for(let e=0;e{if(n.length!==t.length)return!1;for(let e=0;e{Symbol.dispose??=Symbol("Symbol.dispose")},fr=n=>typeof n=="number"&&!Number.isNaN(n),ge=(n,t)=>{if(t.includes("://"))return t;if(n.includes("://")){let o=n.indexOf("?");o!==-1&&(n=n.slice(0,o))}let e;if(t.startsWith("/")){let o=n.indexOf("://");if(o===-1)e=t;else{let c=n.indexOf("/",o+3);c===-1?e=n+t:e=n.slice(0,c)+t}}else{let o=n.lastIndexOf("/");o===-1?e=t:e=n.slice(0,o+1)+t}let r="",i=e.indexOf("://");if(i!==-1){let o=e.indexOf("/",i+3);o!==-1&&(r=e.slice(0,o),e=e.slice(o))}let a=e.split("/"),s=[];for(let o of a)o===".."?s.pop():o!=="."&&s.push(o);return r+s.join("/")},Kr=(n,t)=>{let e=0;for(let r=0;r{let e=-1,r=1/0;for(let i=0;i{let e=-1,r=-1/0;for(let i=0;ir&&(r=a,e=i)}return e},Ht=n=>{p(Number.isInteger(n.num)),p(Number.isInteger(n.den)),p(n.den!==0);let t=Math.abs(n.num),e=Math.abs(n.den);for(;e!==0;){let i=t%e;t=e,e=i}let r=t||1;return{num:n.num/r,den:n.den/r}},Ho=(n,t)=>{if(typeof n!="object"||!n)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(n.left)||n.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(n.top)||n.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(n.width)||n.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(n.height)||n.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},sn,gm=1,Tu=new Map,qo=new Map,Uu=()=>typeof window>"u",bm=()=>{let n=new Map,t=new Map;self.onmessage=e=>{let r=e.data;switch(r.type){case"set-timeout":{let i=setTimeout(()=>{n.delete(r.timerId),self.postMessage({type:"fire",timerId:r.timerId})},r.delay);n.set(r.timerId,i)}break;case"set-interval":{let i=setInterval(()=>{self.postMessage({type:"fire",timerId:r.timerId})},r.delay);t.set(r.timerId,i)}break;case"clear-timeout":{let i=n.get(r.timerId);i!==void 0&&(clearTimeout(i),n.delete(r.timerId))}break;case"clear-interval":{let i=t.get(r.timerId);i!==void 0&&(clearInterval(i),t.delete(r.timerId))}break}}},zu=()=>{if(sn)return sn;let n=`(${bm.toString()})();`,t=URL.createObjectURL(new Blob([n],{type:"text/javascript"}));return sn=new Worker(t),URL.revokeObjectURL(t),sn.onmessage=e=>{let r=e.data,i=Tu.get(r.timerId);if(i){Tu.delete(r.timerId),i();return}let a=qo.get(r.timerId);a&&a()},sn};var Nu=(n,t)=>{if(Uu())return{id:setInterval(n,t)};let e=gm++;return qo.set(e,()=>{n()}),zu().postMessage({type:"set-interval",timerId:e,delay:t}),{id:e}},Lu=n=>{if(Uu()){clearInterval(n.id);return}p(typeof n.id=="number"),qo.delete(n.id),zu().postMessage({type:"clear-interval",timerId:n.id})},un=n=>new Promise(t=>setTimeout(t,n));var qt=n=>Array.isArray(n)?n:[n],je=class{constructor(){this._listeners=new Map}on(t,e,r){this._listeners.has(t)||this._listeners.set(t,new Set);let i={fn:e,once:r?.once??!1};return this._listeners.get(t).add(i),()=>{this._listeners.get(t)?.delete(i)}}_emit(...t){let[e,r]=t,i=this._listeners.get(e);if(i)for(let a of i){try{a.fn(r)}catch(s){console.error(s)}a.once&&i.delete(a)}}},Pt=n=>Math.ceil(n/2)*2,ma=class{constructor(t){this._queue=[];this._errored=!1;this.parallelism=t}get errored(){return this._errored}get inFlightCount(){return this._queue.length}async run(t){for(this._errored&&await Promise.race(this._queue);this._queue.length>=this.parallelism;)await Promise.race(this._queue);let e=t();this._queue.push(e),e.then(()=>Lo(this._queue,e)).catch(()=>this._errored=!0)}async flush(){await Promise.all(this._queue)}},ya=n=>n!==null&&typeof n=="object"&&Object.getPrototypeOf(n)===Object.prototype&&Object.values(n).every(t=>typeof t=="string");var He=class{constructor(t,e){this.data=t;this.mimeType=e;if(!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof e!="string")throw new TypeError("mimeType must be a string.")}},Kt=class{constructor(t,e,r,i){this.data=t;this.mimeType=e;this.name=r;this.description=i;if(!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(e!==void 0&&typeof e!="string")throw new TypeError("mimeType, when provided, must be a string.");if(r!==void 0&&typeof r!="string")throw new TypeError("name, when provided, must be a string.");if(i!==void 0&&typeof i!="string")throw new TypeError("description, when provided, must be a string.")}},ln=n=>{if(!n||typeof n!="object")throw new TypeError("tags must be an object.");if(n.title!==void 0&&typeof n.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(n.description!==void 0&&typeof n.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(n.artist!==void 0&&typeof n.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(n.album!==void 0&&typeof n.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(n.albumArtist!==void 0&&typeof n.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(n.trackNumber!==void 0&&(!Number.isInteger(n.trackNumber)||n.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(n.tracksTotal!==void 0&&(!Number.isInteger(n.tracksTotal)||n.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(n.discNumber!==void 0&&(!Number.isInteger(n.discNumber)||n.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(n.discsTotal!==void 0&&(!Number.isInteger(n.discsTotal)||n.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(n.genre!==void 0&&typeof n.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(n.date!==void 0&&(!(n.date instanceof Date)||Number.isNaN(n.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(n.lyrics!==void 0&&typeof n.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(n.images!==void 0){if(!Array.isArray(n.images))throw new TypeError("tags.images, when provided, must be an array.");for(let t of n.images){if(!t||typeof t!="object")throw new TypeError("Each image in tags.images must be an object.");if(!(t.data instanceof Uint8Array))throw new TypeError("Each image.data must be a Uint8Array.");if(typeof t.mimeType!="string")throw new TypeError("Each image.mimeType must be a string.");if(!["coverFront","coverBack","unknown"].includes(t.kind))throw new TypeError("Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.")}}if(n.comment!==void 0&&typeof n.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(n.raw!==void 0){if(!n.raw||typeof n.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(let t of Object.values(n.raw))if(t!==null&&typeof t!="string"&&!(t instanceof Uint8Array)&&!(t instanceof He)&&!(t instanceof Kt)&&!ya(t))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, Record, or null.")}},Gt=n=>n.title===void 0&&n.description===void 0&&n.artist===void 0&&n.album===void 0&&n.albumArtist===void 0&&n.trackNumber===void 0&&n.tracksTotal===void 0&&n.discNumber===void 0&&n.discsTotal===void 0&&n.genre===void 0&&n.date===void 0&&n.lyrics===void 0&&(!n.images||n.images.length===0)&&n.comment===void 0&&(n.raw===void 0||Object.keys(n.raw).length===0),Se={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1},Wu=n=>{if(!n||typeof n!="object")throw new TypeError("disposition must be an object.");if(n.default!==void 0&&typeof n.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(n.primary!==void 0&&typeof n.primary!="boolean")throw new TypeError("disposition.primary must be a boolean.");if(n.forced!==void 0&&typeof n.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(n.original!==void 0&&typeof n.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(n.commentary!==void 0&&typeof n.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(n.hearingImpaired!==void 0&&typeof n.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(n.visuallyImpaired!==void 0&&typeof n.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};var H=class n{constructor(t){this.bytes=t;this.pos=0}seekToByte(t){this.pos=8*t}readBit(){let t=Math.floor(this.pos/8),e=this.bytes[t]??0,r=7-(this.pos&7),i=(e&1<>r;return this.pos++,i}readBits(t){if(t===1)return this.readBit();let e=0;for(let r=0;r>r-i-1<{if(!n||n.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let t=new H(n),e=t.readBits(5);e===31&&(e=32+t.readBits(6));let r=t.readBits(4),i=null;r===15?i=t.readBits(24):r=1&&a<=7&&(s=Ct[a]),{objectType:e,frequencyIndex:r,sampleRate:i,channelConfiguration:a,numberOfChannels:s}},ki=n=>{let t=Xe.indexOf(n.sampleRate),e=null;t===-1&&(t=15,e=n.sampleRate);let r=Ct.indexOf(n.numberOfChannels);if(r===-1)throw new TypeError(`Unsupported number of channels: ${n.numberOfChannels}`);let i=13;n.objectType>=32&&(i+=6),t===15&&(i+=24);let a=Math.ceil(i/8),s=new Uint8Array(a),o=new H(s);return n.objectType<32?o.writeBits(5,n.objectType):(o.writeBits(5,31),o.writeBits(6,n.objectType-32)),o.writeBits(4,t),t===15&&o.writeBits(24,e),o.writeBits(4,r),s},ka=n=>{let t=new Uint8Array(7),e=new H(t),{objectType:r,frequencyIndex:i,channelConfiguration:a}=n,s=r-1;return e.writeBits(12,4095),e.writeBits(1,0),e.writeBits(2,0),e.writeBits(1,1),e.writeBits(2,s),e.writeBits(4,i),e.writeBits(1,0),e.writeBits(3,a),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.skipBits(13),e.writeBits(11,2047),e.writeBits(2,0),{header:t,bitstream:e}},Ta=(n,t)=>{n.pos=30,n.writeBits(13,t)};var re=["avc","hevc","vp9","av1","vp8"],te=["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"],st=["aac","opus","mp3","vorbis","flac","ac3","eac3"],se=[...st,...te],Fe=["webvtt"],dn=[{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}],Hu=[{maxPictureSize:36864,maxBitrate:128e3,tier:"L",level:30},{maxPictureSize:122880,maxBitrate:15e5,tier:"L",level:60},{maxPictureSize:245760,maxBitrate:3e6,tier:"L",level:63},{maxPictureSize:552960,maxBitrate:6e6,tier:"L",level:90},{maxPictureSize:983040,maxBitrate:1e7,tier:"L",level:93},{maxPictureSize:2228224,maxBitrate:12e6,tier:"L",level:120},{maxPictureSize:2228224,maxBitrate:3e7,tier:"H",level:120},{maxPictureSize:2228224,maxBitrate:2e7,tier:"L",level:123},{maxPictureSize:2228224,maxBitrate:5e7,tier:"H",level:123},{maxPictureSize:8912896,maxBitrate:25e6,tier:"L",level:150},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:150},{maxPictureSize:8912896,maxBitrate:4e7,tier:"L",level:153},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:153},{maxPictureSize:8912896,maxBitrate:6e7,tier:"L",level:156},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:156},{maxPictureSize:35651584,maxBitrate:6e7,tier:"L",level:180},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:180},{maxPictureSize:35651584,maxBitrate:12e7,tier:"L",level:183},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:183},{maxPictureSize:35651584,maxBitrate:24e7,tier:"L",level:186},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:186}],Qt=[{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}],qu=[{maxPictureSize:147456,maxBitrate:15e5,tier:"M",level:0},{maxPictureSize:278784,maxBitrate:3e6,tier:"M",level:1},{maxPictureSize:665856,maxBitrate:6e6,tier:"M",level:4},{maxPictureSize:1065024,maxBitrate:1e7,tier:"M",level:5},{maxPictureSize:2359296,maxBitrate:12e6,tier:"M",level:8},{maxPictureSize:2359296,maxBitrate:3e7,tier:"H",level:8},{maxPictureSize:2359296,maxBitrate:2e7,tier:"M",level:9},{maxPictureSize:2359296,maxBitrate:5e7,tier:"H",level:9},{maxPictureSize:8912896,maxBitrate:3e7,tier:"M",level:12},{maxPictureSize:8912896,maxBitrate:1e8,tier:"H",level:12},{maxPictureSize:8912896,maxBitrate:4e7,tier:"M",level:13},{maxPictureSize:8912896,maxBitrate:16e7,tier:"H",level:13},{maxPictureSize:8912896,maxBitrate:6e7,tier:"M",level:14},{maxPictureSize:8912896,maxBitrate:24e7,tier:"H",level:14},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:15},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:15},{maxPictureSize:35651584,maxBitrate:6e7,tier:"M",level:16},{maxPictureSize:35651584,maxBitrate:24e7,tier:"H",level:16},{maxPictureSize:35651584,maxBitrate:1e8,tier:"M",level:17},{maxPictureSize:35651584,maxBitrate:48e7,tier:"H",level:17},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:18},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:18},{maxPictureSize:35651584,maxBitrate:16e7,tier:"M",level:19},{maxPictureSize:35651584,maxBitrate:8e8,tier:"H",level:19}],Ku=".01.01.01.01.00",Gu=".0.110.01.01.01.0",wa=(n,t,e,r)=>{if(n==="avc"){let a=Math.ceil(t/16)*Math.ceil(e/16),s=dn.find(m=>a<=m.maxMacroblocks&&r<=m.maxBitrate)??X(dn),o=s?s.level:0,c="64".padStart(2,"0"),u="00",l=o.toString(16).padStart(2,"0");return`avc1.${c}${u}${l}`}else if(n==="hevc"){let i="",s="6",o=t*e,c=Hu.find(l=>o<=l.maxPictureSize&&r<=l.maxBitrate)??X(Hu);return`hev1.${i}1.${s}.${c.tier}${c.level}.B0`}else{if(n==="vp8")return"vp8";if(n==="vp9"){let i="00",a=t*e,s=Qt.find(c=>a<=c.maxPictureSize&&r<=c.maxBitrate)??X(Qt);return`vp09.${i}.${s.level.toString().padStart(2,"0")}.08`}else if(n==="av1"){let a=t*e,s=qu.find(u=>a<=u.maxPictureSize&&r<=u.maxBitrate)??X(qu);return`av01.0.${s.level.toString().padStart(2,"0")}${s.tier}.08`}}throw new TypeError(`Unhandled codec '${n}'.`)},Qu=n=>{let t=n.split("."),e=Number(t[1]),r=Number(t[2]),i=Number(t[3]),a=t[4]?Number(t[4]):1;return[1,1,e,2,1,r,3,1,i,4,1,a]},Sa=n=>{let t=n.split("."),i=(1<<7)+1,a=Number(t[1]),s=t[2],o=Number(s.slice(0,-1)),c=(a<<5)+o,u=s.slice(-1)==="H"?1:0,m=Number(t[3])===8?0:1,d=0,f=t[4]?Number(t[4]):0,h=t[5]?Number(t[5][0]):1,b=t[5]?Number(t[5][1]):1,g=t[5]?Number(t[5][2]):0,y=(u<<7)+(m<<6)+(d<<5)+(f<<4)+(h<<3)+(b<<2)+g;return[i,c,y,0]},Ti=n=>{let{codec:t,codecDescription:e,colorSpace:r,avcCodecInfo:i,hevcCodecInfo:a,vp9CodecInfo:s,av1CodecInfo:o}=n;if(t==="avc"){if(p(n.avcType!==null),i){let c=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${n.avcType}.${ur(c)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${n.avcType}.${ur(e.subarray(1,4))}`}else if(t==="hevc"){let c,u,l,m,d,f;if(a)c=a.generalProfileSpace,u=a.generalProfileIdc,l=zo(a.generalProfileCompatibilityFlags),m=a.generalTierFlag,d=a.generalLevelIdc,f=[...a.generalConstraintIndicatorFlags];else{if(!e||e.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=U(e),g=b.getUint8(1);c=g>>6&3,u=g&31,l=zo(b.getUint32(2)),m=g>>5&1,d=b.getUint8(12),f=[];for(let y=0;y<6;y++)f.push(b.getUint8(6+y))}let h="hev1.";for(h+=["","A","B","C"][c]+u,h+=".",h+=l.toString(16).toUpperCase(),h+=".",h+=m===0?"L":"H",h+=d;f.length>0&&f[f.length-1]===0;)f.pop();return f.length>0&&(h+=".",h+=f.map(b=>b.toString(16).toUpperCase()).join(".")),h}else{if(t==="vp8")return"vp8";if(t==="vp9"){if(!s){let y=n.width*n.height,k=X(Qt).level;for(let T of Qt)if(y<=T.maxPictureSize){k=T.level;break}return`vp09.00.${k.toString().padStart(2,"0")}.08`}let c=s.profile.toString().padStart(2,"0"),u=s.level.toString().padStart(2,"0"),l=s.bitDepth.toString().padStart(2,"0"),m=s.chromaSubsampling.toString().padStart(2,"0"),d=s.colourPrimaries.toString().padStart(2,"0"),f=s.transferCharacteristics.toString().padStart(2,"0"),h=s.matrixCoefficients.toString().padStart(2,"0"),b=s.videoFullRangeFlag.toString().padStart(2,"0"),g=`vp09.${c}.${u}.${l}.${m}`;return g+=`.${d}.${f}.${h}.${b}`,g.endsWith(Ku)&&(g=g.slice(0,-Ku.length)),g}else if(t==="av1"){if(!o){let T=n.width*n.height,w=X(Qt).level;for(let S of Qt)if(T<=S.maxPictureSize){w=S.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let c=o.profile,u=o.level.toString().padStart(2,"0"),l=o.tier?"H":"M",m=o.bitDepth.toString().padStart(2,"0"),d=o.monochrome?"1":"0",f=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),h=r?.primaries?rt[r.primaries]:1,b=r?.transfer?it[r.transfer]:1,g=r?.matrix?nt[r.matrix]:1,y=r?.fullRange?1:0,k=`av01.${c}.${u}${l}.${m}`;return k+=`.${d}.${f.toString().padStart(3,"0")}`,k+=`.${h.toString().padStart(2,"0")}`,k+=`.${b.toString().padStart(2,"0")}`,k+=`.${g.toString().padStart(2,"0")}`,k+=`.${y}`,k.endsWith(Gu)&&(k=k.slice(0,-Gu.length)),k}}throw new TypeError(`Unhandled codec '${t}'.`)},Aa=(n,t,e)=>{if(n==="aac")return t>=2&&e<=24e3?"mp4a.40.29":e<=24e3?"mp4a.40.5":"mp4a.40.2";if(n==="mp3")return"mp3";if(n==="opus")return"opus";if(n==="vorbis")return"vorbis";if(n==="flac")return"flac";if(n==="ac3")return"ac-3";if(n==="eac3")return"ec-3";if(te.includes(n))return n;throw new TypeError(`Unhandled codec '${n}'.`)},wi=n=>{let{codec:t,codecDescription:e,aacCodecInfo:r}=n;if(t==="aac"){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let i;return r.objectType!==null?i=r.objectType:i=It(e).objectType,`mp4a.40.${i}`}}else{if(t==="mp3")return"mp3";if(t==="opus")return"opus";if(t==="vorbis")return"vorbis";if(t==="flac")return"flac";if(t==="ac3")return"ac-3";if(t==="eac3")return"ec-3";if(t&&te.includes(t))return t}throw new TypeError(`Unhandled codec '${t}'.`)},ju=n=>{},Xu=n=>{switch(n.codec){case"flac":{let t=qr("ZkxhQ4AAACIQABAAAAYtACWtCsRC8AANRBhVFucAcYu5ASE2m1Dxv8tw");return n.sampleRate>=1<<20||n.numberOfChannels>8?!1:(t[18]=n.sampleRate>>>12,t[19]=n.sampleRate>>>4,t[20]=(n.sampleRate&15)<<4|n.numberOfChannels-1<<1,t)}case"vorbis":{let t=qr("Ah7/AgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMNAAAATGF2ZjU4Ljc2LjEwMAgAAAAMAAAAbGFuZ3VhZ2U9dW5kGQAAAGhhbmRsZXJfbmFtZT1Tb3VuZEhhbmRsZXIWAAAAdmVuZG9yX2lkPVswXVswXVswXVswXSAAAABlbmNvZGVyPUxhdmM1OC4xMzQuMTAwIGxpYnZvcmJpcxAAAABtYWpvcl9icmFuZD1pc29tEQAAAG1pbm9yX3ZlcnNpb249NTEyIgAAAGNvbXBhdGlibGVfYnJhbmRzPWlzb21pc28yYXZjMW1wNDEmAAAAREVTQ1JJUFRJT049TWFkZSB3aXRoIFJlbW90aW9uIDQuMC4yNzgBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBA=="),e=U(t);return e.setUint8(15,n.numberOfChannels),e.setUint32(16,n.sampleRate,!0),t}default:return}},ot=48e3,$u=/^pcm-([usf])(\d+)+(be)?$/,Ae=n=>{if(p(te.includes(n)),n==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(n==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};let t=$u.exec(n);p(t);let e;t[1]==="u"?e="unsigned":t[1]==="s"?e="signed":e="float";let r=Number(t[2])/8,i=t[3]!=="be",a=n==="pcm-u8"?2**7:0;return{dataType:e,sampleSize:r,littleEndian:i,silentValue:a}},$e=n=>n.startsWith("avc1")||n.startsWith("avc3")?"avc":n.startsWith("hev1")||n.startsWith("hvc1")?"hevc":n==="vp8"?"vp8":n.startsWith("vp09")?"vp9":n.startsWith("av01")?"av1":n==="mp3"||n==="mp4a.69"||n==="mp4a.6B"||n==="mp4a.6b"||n==="mp4a.40.34"?"mp3":n.startsWith("mp4a.40.")||n==="mp4a.67"?"aac":n==="opus"?"opus":n==="vorbis"?"vorbis":n==="flac"?"flac":n==="ac-3"||n==="ac3"?"ac3":n==="ec-3"||n==="eac3"?"eac3":n==="ulaw"?"ulaw":n==="alaw"?"alaw":$u.test(n)?n:n==="webvtt"?"webvtt":null,Yu=n=>n==="avc"?{avc:{format:"avc"}}:n==="hevc"?{hevc:{format:"hevc"}}:{},Zu=n=>n==="aac"?{aac:{format:"aac"}}:n==="opus"?{opus:{format:"opus"}}:{},ym=["avc1","avc3","hev1","hvc1","vp8","vp09","av01"],km=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Tm=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,wm=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,Sm=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,pr=n=>{if(!n)throw new TypeError("Video chunk metadata must be provided.");if(typeof n!="object")throw new TypeError("Video chunk metadata must be an object.");if(!n.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof n.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof n.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!ym.some(t=>n.decoderConfig.codec.startsWith(t)))throw new TypeError("Video chunk metadata decoder configuration codec string must be a valid video codec string as specified in the Mediabunny Codec Registry.");if(!Number.isInteger(n.decoderConfig.codedWidth)||n.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(n.decoderConfig.codedHeight)||n.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(n.decoderConfig.displayAspectWidth!==void 0&&(!Number.isInteger(n.decoderConfig.displayAspectWidth)||n.decoderConfig.displayAspectWidth<=0))throw new TypeError("Video chunk metadata decoder configuration displayAspectWidth, when defined, must be a positive integer.");if(n.decoderConfig.displayAspectHeight!==void 0&&(!Number.isInteger(n.decoderConfig.displayAspectHeight)||n.decoderConfig.displayAspectHeight<=0))throw new TypeError("Video chunk metadata decoder configuration displayAspectHeight, when defined, must be a positive integer.");if(n.decoderConfig.displayAspectWidth!==void 0!=(n.decoderConfig.displayAspectHeight!==void 0))throw new TypeError("Video chunk metadata decoder configuration must specify both displayAspectWidth and displayAspectHeight, or neither.");if(n.decoderConfig.description!==void 0&&!zt(n.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(n.decoderConfig.colorSpace!==void 0){let{colorSpace:t}=n.decoderConfig;if(typeof t!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");let e=Object.keys(rt);if(t.primaries!=null&&!e.includes(t.primaries))throw new TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${e.join(", ")}.`);let r=Object.keys(it);if(t.transfer!=null&&!r.includes(t.transfer))throw new TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${r.join(", ")}.`);let i=Object.keys(nt);if(t.matrix!=null&&!i.includes(t.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${i.join(", ")}.`);if(t.fullRange!=null&&typeof t.fullRange!="boolean")throw new TypeError("Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.")}if(n.decoderConfig.codec.startsWith("avc1")||n.decoderConfig.codec.startsWith("avc3")){if(!km.test(n.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for AVC must be a valid AVC codec string as specified in Section 3.4 of RFC 6381.")}else if(n.decoderConfig.codec.startsWith("hev1")||n.decoderConfig.codec.startsWith("hvc1")){if(!Tm.test(n.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for HEVC must be a valid HEVC codec string as specified in Section E.3 of ISO 14496-15.")}else if(n.decoderConfig.codec.startsWith("vp8")){if(n.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(n.decoderConfig.codec.startsWith("vp09")){if(!wm.test(n.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for VP9 must be a valid VP9 codec string as specified in Section "Codecs Parameter String" of https://www.webmproject.org/vp9/mp4/.')}else if(n.decoderConfig.codec.startsWith("av01")&&!Sm.test(n.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for AV1 must be a valid AV1 codec string as specified in Section "Codecs Parameter String" of https://aomediacodec.github.io/av1-isobmff/.')},Am=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm","ac-3","ec-3"],_e=n=>{if(!n)throw new TypeError("Audio chunk metadata must be provided.");if(typeof n!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!n.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof n.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof n.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!Am.some(t=>n.decoderConfig.codec.startsWith(t)))throw new TypeError("Audio chunk metadata decoder configuration codec string must be a valid audio codec string as specified in the Mediabunny Codec Registry.");if(!Number.isInteger(n.decoderConfig.sampleRate)||n.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(n.decoderConfig.numberOfChannels)||n.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(n.decoderConfig.description!==void 0&&!zt(n.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(n.decoderConfig.codec.startsWith("mp4a")&&n.decoderConfig.codec!=="mp4a.69"&&n.decoderConfig.codec!=="mp4a.6B"&&n.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(n.decoderConfig.codec))throw new TypeError("Audio chunk metadata decoder configuration codec string for AAC must be a valid AAC codec string as specified in https://www.w3.org/TR/webcodecs-aac-codec-registration/.")}else if(n.decoderConfig.codec.startsWith("mp3")||n.decoderConfig.codec.startsWith("mp4a")){if(n.decoderConfig.codec!=="mp3"&&n.decoderConfig.codec!=="mp4a.69"&&n.decoderConfig.codec!=="mp4a.6B"&&n.decoderConfig.codec!=="mp4a.6b")throw new TypeError('Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".')}else if(n.decoderConfig.codec.startsWith("opus")){if(n.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(n.decoderConfig.description&&n.decoderConfig.description.byteLength<18)throw new TypeError("Audio chunk metadata decoder configuration description, when specified, is expected to be an Identification Header as specified in Section 5.1 of RFC 7845.")}else if(n.decoderConfig.codec.startsWith("vorbis")){if(n.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!n.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for Vorbis must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-vorbis-codec-registration/.")}else if(n.decoderConfig.codec.startsWith("flac")){if(n.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!n.decoderConfig.description||n.decoderConfig.description.byteLength<42)throw new TypeError("Audio chunk metadata decoder configuration for FLAC must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-flac-codec-registration/.")}else if(n.decoderConfig.codec.startsWith("ac-3")||n.decoderConfig.codec.startsWith("ac3")){if(n.decoderConfig.codec!=="ac-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for AC-3 must be "ac-3".')}else if(n.decoderConfig.codec.startsWith("ec-3")||n.decoderConfig.codec.startsWith("eac3")){if(n.decoderConfig.codec!=="ec-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for EC-3 must be "ec-3".')}else if((n.decoderConfig.codec.startsWith("pcm")||n.decoderConfig.codec.startsWith("ulaw")||n.decoderConfig.codec.startsWith("alaw"))&&!te.includes(n.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${te.join(", ")}).`)},xa=n=>{if(!n)throw new TypeError("Subtitle metadata must be provided.");if(typeof n!="object")throw new TypeError("Subtitle metadata must be an object.");if(!n.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof n.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof n.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};var xm=[44100,48e3,32e3],Pa=[-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],hr=1483304551,Si=1231971951,Ca=(n,t,e,r,i)=>t===0?0:t===1?Math.floor(144*e/(r<t===0?0:t===1?144*e/(r<n===3?t===3?21:36:t===3?13:21,Gr=(n,t)=>{let e=n>>>24,r=n>>>16&255,i=n>>>8&255,a=n&255;if(e!==255&&r!==255&&i!==255&&a!==255)return{header:null,bytesAdvanced:4};if(e!==255)return{header:null,bytesAdvanced:1};if((r&224)!==224)return{header:null,bytesAdvanced:1};let s=0,o=0;r&16?s=r&8?0:1:(s=1,o=1);let c=r>>3&3,u=r>>1&3,l=i>>4&15,m=(i>>2&3)%3,d=i>>1&1,f=a>>6&3,h=a>>4&3,b=a>>3&1,g=a>>2&1,y=a&3,k=Pa[s*16*4+u*16+l];if(k===-1)return{header:null,bytesAdvanced:1};let T=k*1e3,w=xm[m]>>s+o,S=Ca(s,u,T,w,d);if(t!==null&&t{let t=127,e=0,r=n;for(;(t^2147483647)!==0;)e=r&~t,e<<=1,e|=r&t,t=(t+1<<8)-1,r=e;return e},Ia=n=>{let t=2130706432,e=0;for(;t!==0;)e>>=1,e|=n&t,t>>=8;return e};var Qr=[48e3,44100,32e3],Ko=[24e3,22050,16e3];var br=function*(n){let t=0,e=-1;for(;t=n.length-2)break;t=r;let i=0;if(t+3e&&(yield{offset:e,length:t-e}),e=t+i,t=e}e!==-1&&e{if(t.description){let i=(j(t.description)[4]&3)+1;return Ea(n,i)}else return br(n)},jt=n=>n&31,va=n=>{let t=[],e=n.length;for(let r=0;r{let t=n.reduce((i,a)=>i+Go.byteLength+a.byteLength,0),e=new Uint8Array(t),r=0;for(let i of n)e.set(Go,r),r+=Go.byteLength,e.set(i,r),r+=i.byteLength;return e},_a=(n,t)=>{let e=n.reduce((a,s)=>a+t+s.byteLength,0),r=new Uint8Array(e),i=0;for(let a of n){let s=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:s.setUint8(i,a.byteLength);break;case 2:s.setUint16(i,a.byteLength,!1);break;case 3:Wr(s,i,a.byteLength,!1);break;case 4:s.setUint32(i,a.byteLength,!1);break}i+=t,r.set(a,i),i+=a.byteLength}return r},il=(n,t)=>{if(t.description){let i=(j(t.description)[4]&3)+1;return _a(n,i)}else return fn(n)},Ai=n=>{try{let t=[],e=[],r=[];for(let o of br(n)){let c=n.subarray(o.offset,o.offset+o.length),u=jt(c[0]);u===7?t.push(c):u===8?e.push(c):u===13&&r.push(c)}if(t.length===0||e.length===0)return null;let i=t[0],a=pn(i);p(a!==null);let s=a.profileIdc===100||a.profileIdc===110||a.profileIdc===122||a.profileIdc===144;return{configurationVersion:1,avcProfileIndication:a.profileIdc,profileCompatibility:a.constraintFlags,avcLevelIndication:a.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:e,chromaFormat:s?a.chromaFormatIdc:null,bitDepthLumaMinus8:s?a.bitDepthLumaMinus8:null,bitDepthChromaMinus8:s?a.bitDepthChromaMinus8:null,sequenceParameterSetExt:s?r:null}}catch(t){return console.error("Error building AVC Decoder Configuration Record:",t),null}},nl=n=>{let t=[];t.push(n.configurationVersion),t.push(n.avcProfileIndication),t.push(n.profileCompatibility),t.push(n.avcLevelIndication),t.push(252|n.lengthSizeMinusOne&3),t.push(224|n.sequenceParameterSets.length&31);for(let e of n.sequenceParameterSets){let r=e.byteLength;t.push(r>>8),t.push(r&255);for(let i=0;i>8),t.push(r&255);for(let i=0;i>8),t.push(r&255);for(let i=0;i{try{let t=U(n),e=0,r=t.getUint8(e++),i=t.getUint8(e++),a=t.getUint8(e++),s=t.getUint8(e++),o=t.getUint8(e++)&3,c=t.getUint8(e++)&31,u=[];for(let f=0;f{try{let t=new H(va(n));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let r=t.readAlignedByte(),i=t.readAlignedByte(),a=t.readAlignedByte();M(t);let s=1,o=0,c=0,u=0;if((r===100||r===110||r===122||r===244||r===44||r===83||r===86||r===118||r===128)&&(s=M(t),s===3&&(u=t.readBits(1)),o=M(t),c=M(t),t.skipBits(1),t.readBits(1))){for(let v=0;v<(s!==3?8:12);v++)if(t.readBits(1)){let D=v<6?16:64,z=8,V=8;for(let L=0;LL.level>=a)??X(dn),V=Math.min(Math.floor(z.maxDpbMbs/(v*D)),16);A=V,C=V}}return p(C!==null),{profileIdc:r,constraintFlags:i,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:s,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:h,displayWidth:b,displayHeight:g,pixelAspectRatio:P,colourPrimaries:T,matrixCoefficients:S,transferCharacteristics:w,fullRangeFlag:x,numReorderFrames:A,maxDecFrameBuffering:C}}catch(t){return console.error("Error parsing AVC SPS:",t),null}},tl=n=>{let t=M(n);n.skipBits(4),n.skipBits(4);for(let e=0;e<=t;e++)M(n),M(n),n.skipBits(1);n.skipBits(5),n.skipBits(5),n.skipBits(5),n.skipBits(5)},Pm=(n,t)=>{if(t.description){let i=(j(t.description)[21]&3)+1;return _a(n,i)}else return fn(n)},mn=(n,t)=>{if(t.description){let i=(j(t.description)[21]&3)+1;return Ea(n,i)}else return br(n)},ct=n=>n>>1&63,jo=n=>{try{let t=new H(va(n));t.skipBits(16),t.readBits(4);let e=t.readBits(3),r=t.readBits(1),{general_profile_space:i,general_tier_flag:a,general_profile_idc:s,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:u}=Cm(t,e);M(t);let l=M(t),m=0;l===3&&(m=t.readBits(1));let d=M(t),f=M(t),h=d,b=f;if(t.readBits(1)){let v=M(t),E=M(t),D=M(t),z=M(t),V=1,L=1,Z=m===0?l:0;Z===1?(V=2,L=2):Z===2&&(V=2,L=1),h-=(v+E)*V,b-=(D+z)*L}let g=M(t),y=M(t);M(t);let T=t.readBits(1)?0:e,w=0;for(let v=T;v<=e;v++)M(t),w=M(t),M(t);M(t),M(t),M(t),M(t),M(t),M(t),t.readBits(1)&&t.readBits(1)&&Im(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),M(t),M(t),t.skipBits(1));let S=M(t);if(Em(t,S),t.readBits(1)){let v=M(t);for(let E=0;E{try{let t=[],e=[],r=[],i=[];for(let u of br(n)){let l=n.subarray(u.offset,u.offset+u.length),m=ct(l[0]);m===32?t.push(l):m===33?e.push(l):m===34?r.push(l):(m===39||m===40)&&i.push(l)}if(e.length===0||r.length===0)return null;let a=jo(e[0]);if(!a)return null;let s=0;if(r.length>0){let u=r[0],l=new H(va(u));l.skipBits(16),M(l),M(l),l.skipBits(1),l.skipBits(1),l.skipBits(3),l.skipBits(1),l.skipBits(1),M(l),M(l),wt(l),l.skipBits(1),l.skipBits(1),l.readBits(1)&&M(l),wt(l),wt(l),l.skipBits(1),l.skipBits(1),l.skipBits(1),l.skipBits(1);let m=l.readBits(1),d=l.readBits(1);!m&&!d?s=0:m&&!d?s=2:!m&&d?s=3:s=0}let o=[...t.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:t}]:[],...e.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:ct(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:a.generalProfileSpace,generalTierFlag:a.generalTierFlag,generalProfileIdc:a.generalProfileIdc,generalProfileCompatibilityFlags:a.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:a.generalConstraintIndicatorFlags,generalLevelIdc:a.generalLevelIdc,minSpatialSegmentationIdc:a.minSpatialSegmentationIdc,parallelismType:s,chromaFormatIdc:a.chromaFormatIdc,bitDepthLumaMinus8:a.bitDepthLumaMinus8,bitDepthChromaMinus8:a.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:a.spsMaxSubLayersMinus1+1,temporalIdNested:a.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return console.error("Error building HEVC Decoder Configuration Record:",t),null}},Cm=(n,t)=>{let e=n.readBits(2),r=n.readBits(1),i=n.readBits(5),a=0;for(let l=0;l<32;l++)a=a<<1|n.readBits(1);let s=new Uint8Array(6);for(let l=0;l<6;l++)s[l]=n.readBits(8);let o=n.readBits(8),c=[],u=[];for(let l=0;l0)for(let l=t;l<8;l++)n.skipBits(2);for(let l=0;l{for(let t=0;t<4;t++)for(let e=0;e<(t===3?2:6);e++)if(!n.readBits(1))M(n);else{let i=Math.min(64,1<<4+(t<<1));t>1&&wt(n);for(let a=0;a{let e=[];for(let r=0;r{let i=0,a=0,s=0;if(t!==0&&(a=n.readBits(1)),a){if(t===e){let c=M(n);s=t-(c+1)}else s=t-1;n.readBits(1),M(n);let o=r[s]??0;for(let c=0;c<=o;c++)n.readBits(1)||n.readBits(1);i=r[s]}else{let o=M(n),c=M(n);for(let u=0;u{let e=2,r=2,i=2,a=0,s=0,o={num:1,den:1};if(n.readBits(1)){let c=n.readBits(8);if(c===255)o={num:n.readBits(16),den:n.readBits(16)};else{let u=al[c];u&&(o=u)}}return n.readBits(1)&&n.readBits(1),n.readBits(1)&&(n.readBits(3),a=n.readBits(1),n.readBits(1)&&(e=n.readBits(8),r=n.readBits(8),i=n.readBits(8))),n.readBits(1)&&(M(n),M(n)),n.readBits(1),n.readBits(1),n.readBits(1),n.readBits(1)&&(M(n),M(n),M(n),M(n)),n.readBits(1)&&(n.readBits(32),n.readBits(32),n.readBits(1)&&M(n),n.readBits(1)&&Rm(n,!0,t)),n.readBits(1)&&(n.readBits(1),n.readBits(1),n.readBits(1),s=M(n),M(n),M(n),M(n),M(n)),{pixelAspectRatio:o,colourPrimaries:e,transferCharacteristics:r,matrixCoefficients:i,fullRangeFlag:a,minSpatialSegmentationIdc:s}},Rm=(n,t,e)=>{let r=!1,i=!1,a=!1;t&&(r=n.readBits(1)===1,i=n.readBits(1)===1,(r||i)&&(a=n.readBits(1)===1,a&&(n.readBits(8),n.readBits(5),n.readBits(1),n.readBits(5)),n.readBits(4),n.readBits(4),a&&n.readBits(4),n.readBits(5),n.readBits(5),n.readBits(5)));for(let s=0;s<=e;s++){let o=n.readBits(1)===1,c=!0;o||(c=n.readBits(1)===1);let u=!1;c?M(n):u=n.readBits(1)===1;let l=1;u||(l=M(n)+1),r&&rl(n,l,a),i&&rl(n,l,a)}},rl=(n,t,e)=>{for(let r=0;r{let t=[];t.push(n.configurationVersion),t.push((n.generalProfileSpace&3)<<6|(n.generalTierFlag&1)<<5|n.generalProfileIdc&31),t.push(n.generalProfileCompatibilityFlags>>>24&255),t.push(n.generalProfileCompatibilityFlags>>>16&255),t.push(n.generalProfileCompatibilityFlags>>>8&255),t.push(n.generalProfileCompatibilityFlags&255),t.push(...n.generalConstraintIndicatorFlags),t.push(n.generalLevelIdc&255),t.push(240|n.minSpatialSegmentationIdc>>8&15),t.push(n.minSpatialSegmentationIdc&255),t.push(252|n.parallelismType&3),t.push(252|n.chromaFormatIdc&3),t.push(248|n.bitDepthLumaMinus8&7),t.push(248|n.bitDepthChromaMinus8&7),t.push(n.avgFrameRate>>8&255),t.push(n.avgFrameRate&255),t.push((n.constantFrameRate&3)<<6|(n.numTemporalLayers&7)<<3|(n.temporalIdNested&1)<<2|n.lengthSizeMinusOne&3),t.push(n.arrays.length&255);for(let e of n.arrays){t.push((e.arrayCompleteness&1)<<7|0|e.nalUnitType&63),t.push(e.nalUnits.length>>8&255),t.push(e.nalUnits.length&255);for(let r of e.nalUnits){t.push(r.length>>8&255),t.push(r.length&255);for(let i=0;i{try{let t=U(n),e=0,r=t.getUint8(e++),i=t.getUint8(e++),a=i>>6&3,s=i>>5&1,o=i&31,c=t.getUint32(e,!1);e+=4;let u=n.subarray(e,e+6);e+=6;let l=t.getUint8(e++),m=(t.getUint8(e++)&15)<<8|t.getUint8(e++),d=t.getUint8(e++)&3,f=t.getUint8(e++)&3,h=t.getUint8(e++)&7,b=t.getUint8(e++)&7,g=t.getUint16(e,!1);e+=2;let y=t.getUint8(e++),k=y>>6&3,T=y>>3&7,w=y>>2&1,S=y&3,x=t.getUint8(e++),P=[];for(let A=0;A>7&1,F=C&63,v=t.getUint16(e,!1);e+=2;let E=[];for(let D=0;D{let e=new Set,r=0;for(let a of mn(n,t)){if(r===4){e.add(a.offset);continue}let s=ct(n[a.offset]);if(r===3&&s!==37){e.add(a.offset);continue}let o=!1;s===35?r>0?o=!0:r=1:s<=31?r>2?o=!0:r=2:s===36?r!==2?o=!0:r=3:s===37?r<2?o=!0:r=4:s===32||s===33||s===34||s===39||s>=41&&s<=44||s>=48&&s<=55?r>1?o=!0:r=1:(s===38||s===40||s>=45&&s<=47||s>=56&&s<=63)&&r<2&&(o=!0),o&&e.add(a.offset)}if(e.size===0)return null;let i=[];for(let a of mn(n,t))e.has(a.offset)||i.push(n.subarray(a.offset,a.offset+a.length));return Pm(i,t)},Fa=n=>{let t=new H(n);if(t.readBits(2)!==2)return null;let r=t.readBits(1),a=(t.readBits(1)<<1)+r;if(a===3&&t.skipBits(1),t.readBits(1)===1||t.readBits(1)!==0||(t.skipBits(2),t.readBits(24)!==4817730))return null;let u=8;a>=2&&(u=t.readBits(1)?12:10);let l=t.readBits(3),m=0,d=0;if(l!==7)if(d=t.readBits(1),a===1||a===3){let P=t.readBits(1),A=t.readBits(1);m=!P&&!A?3:P&&!A?2:1,t.skipBits(1)}else m=1;else m=3,d=1;let f=t.readBits(16),h=t.readBits(16),b=f+1,g=h+1,y=b*g,k=X(Qt).level;for(let x of Qt)if(y<=x.maxPictureSize){k=x.level;break}return{profile:a,level:k,bitDepth:u,chromaSubsampling:m,videoFullRangeFlag:d,colourPrimaries:l===2?1:l===1?6:2,transferCharacteristics:l===2?1:l===1?6:2,matrixCoefficients:l===7?0:l===2?1:l===1?6:2}},ul=function*(n){let t=new H(n),e=()=>{let r=0;for(let i=0;i<8;i++){let a=t.readAlignedByte();if(r|=(a&127)<=2**32-1?null:r};for(;t.getBitsLeft()>=8;){t.skipBits(1);let r=t.readBits(4),i=t.readBits(1),a=t.readBits(1);t.skipBits(1),i&&t.skipBits(8);let s;if(a){let o=e();if(o===null)return;s=o}else s=Math.floor(t.getBitsLeft()/8);p(t.pos%8===0),yield{type:r,data:n.subarray(t.pos/8,t.pos/8+s)},t.skipBits(s*8)}},Ma=n=>{for(let{type:t,data:e}of ul(n)){if(t!==1)continue;let r=new H(e),i=r.readBits(3),a=r.readBits(1),s=r.readBits(1),o=0,c=0,u=0;if(s)o=r.readBits(5);else{if(r.readBits(1)&&(r.skipBits(32),r.skipBits(32),r.readBits(1)))return null;let x=r.readBits(1);x&&(u=r.readBits(5),r.skipBits(32),r.skipBits(5),r.skipBits(5));let P=r.readBits(5);for(let A=0;A<=P;A++){r.skipBits(12);let C=r.readBits(5);if(A===0&&(o=C),C>7){let F=r.readBits(1);A===0&&(c=F)}if(x&&r.readBits(1)){let v=u+1;r.skipBits(v),r.skipBits(v),r.skipBits(1)}r.readBits(1)&&r.skipBits(4)}}let l=r.readBits(4),m=r.readBits(4),d=l+1;r.skipBits(d);let f=m+1;r.skipBits(f);let h=0;if(s?h=0:h=r.readBits(1),h&&(r.skipBits(4),r.skipBits(3)),r.skipBits(1),r.skipBits(1),r.skipBits(1),!s){r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);let S=r.readBits(1);S&&(r.skipBits(1),r.skipBits(1));let x=r.readBits(1),P=0;x?P=2:P=r.readBits(1),P>0&&(r.readBits(1)||r.skipBits(1)),S&&r.skipBits(3)}r.skipBits(1),r.skipBits(1),r.skipBits(1);let b=r.readBits(1),g=8;i===2&&b?g=r.readBits(1)?12:10:i<=2&&(g=b?10:8);let y=0;i!==1&&(y=r.readBits(1));let k=1,T=1,w=0;return y||(i===0?(k=1,T=1):i===1?(k=0,T=0):g===12&&(k=r.readBits(1),k&&(T=r.readBits(1))),k&&T&&(w=r.readBits(2))),{profile:i,level:o,tier:c,bitDepth:g,monochrome:y,chromaSubsamplingX:k,chromaSubsamplingY:T,chromaSamplePosition:w}}return null},yr=n=>{let t=U(n),e=t.getUint8(9),r=t.getUint16(10,!0),i=t.getUint32(12,!0),a=t.getInt16(16,!0),s=t.getUint8(18),o=null;return s&&(o=n.subarray(19,21+e)),{outputChannelCount:e,preSkip:r,inputSampleRate:i,outputGain:a,channelMappingFamily:s,channelMappingTable:o}},Fm=[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],ll=n=>{let t=n[0]>>3;return{durationInSamples:Fm[t]}},Ba=n=>{if(n.length<7)throw new Error("Setup header is too short.");if(n[0]!==5)throw new Error("Wrong packet type in Setup header.");if(String.fromCharCode(...n.slice(1,7))!=="vorbis")throw new Error("Invalid packet signature in Setup header.");let e=n.length,r=new Uint8Array(e);for(let m=0;m97;)if(i.readBits(1)===1){a=i.pos;break}if(a===0)throw new Error("Invalid Setup header: framing bit not found.");let s=0,o=!1,c=0;for(;i.getBitsLeft()>=97;){let m=i.pos,d=i.readBits(8),f=i.readBits(16),h=i.readBits(16);if(d>63||f!==0||h!==0){i.pos=m;break}if(i.skipBits(1),s++,s>64)break;i.clone().readBits(6)+1===s&&(o=!0,c=s)}if(!o)throw new Error("Invalid Setup header: mode header not found.");if(c>63)throw new Error(`Unsupported mode count: ${c}.`);let u=c;i.pos=0,i.skipBits(a);let l=Array(u).fill(0);for(let m=u-1;m>=0;m--)i.skipBits(40),l[m]=i.readBits(1);return{modeBlockflags:l}},Pi=(n,t,e)=>{switch(n){case"avc":{for(let r of Qo(e,t)){let i=e[r.offset],a=jt(i);if(a>=1&&a<=4)return"delta";if(a===5)return"key";if(a===6&&(!cn()||Bu()>=144)){let s=e.subarray(r.offset,r.offset+r.length),o=va(s),c=1;do{let u=0;for(;;){let d=o[c++];if(d===void 0||(u+=d,d<255))break}let l=0;for(;;){let d=o[c++];if(d===void 0||(l+=d,d<255))break}if(u===6){let d=new H(o);d.pos=8*c;let f=M(d),h=d.readBits(1);if(f===0&&h===1)return"key"}c+=l}while(c{let e=U(n),r=0,i=e.getUint32(r,!0);r+=4;let a=he.decode(n.subarray(r,r+i));r+=i,i>0&&(t.raw??={},t.raw.vendor??=a);let s=e.getUint32(r,!0);r+=4;for(let o=0;o0&&(t.trackNumber??=h),b&&Number.isInteger(b)&&b>0&&(t.tracksTotal??=b)}break;case"TRACKTOTAL":{let f=Number.parseInt(d,10);Number.isInteger(f)&&f>0&&(t.tracksTotal??=f)}break;case"DISCNUMBER":{let f=d.split("/"),h=Number.parseInt(f[0],10),b=f[1]&&Number.parseInt(f[1],10);Number.isInteger(h)&&h>0&&(t.discNumber??=h),b&&Number.isInteger(b)&&b>0&&(t.discsTotal??=b)}break;case"DISCTOTAL":{let f=Number.parseInt(d,10);Number.isInteger(f)&&f>0&&(t.discsTotal??=f)}break;case"DATE":{let f=new Date(d);Number.isNaN(f.getTime())||(t.date??=f)}break;case"GENRE":t.genre??=d;break;case"METADATA_BLOCK_PICTURE":{let f=qr(d),h=U(f),b=h.getUint32(0,!1),g=h.getUint32(4,!1),y=String.fromCharCode(...f.subarray(8,8+g)),k=h.getUint32(8+g,!1),T=he.decode(f.subarray(12+g,12+g+k)),w=h.getUint32(g+k+28),S=f.subarray(g+k+32,g+k+32+w);t.images??=[],t.images.push({data:S,mimeType:y,kind:b===3?"coverFront":b===4?"coverBack":"unknown",name:void 0,description:T||void 0})}break}}},gn=(n,t,e)=>{let r=[n],a=$.encode("Mediabunny"),s=new Uint8Array(4+a.length),o=new DataView(s.buffer);o.setUint32(0,a.length,!0),s.set(a,4),r.push(s);let c=new Set,u=(h,b)=>{let g=`${h}=${b}`,y=$.encode(g);s=new Uint8Array(4+y.length),o=new DataView(s.buffer),o.setUint32(0,y.length,!0),s.set(y,4),r.push(s),c.add(h)};for(let{key:h,value:b}of at(t))switch(h){case"title":u("TITLE",b);break;case"description":u("DESCRIPTION",b);break;case"artist":u("ARTIST",b);break;case"album":u("ALBUM",b);break;case"albumArtist":u("ALBUMARTIST",b);break;case"genre":u("GENRE",b);break;case"date":{let g=t.raw?.DATE??t.raw?.date;g&&typeof g=="string"?u("DATE",g):u("DATE",b.toISOString().slice(0,10))}break;case"comment":u("COMMENT",b);break;case"lyrics":u("LYRICS",b);break;case"trackNumber":u("TRACKNUMBER",b.toString());break;case"tracksTotal":u("TRACKTOTAL",b.toString());break;case"discNumber":u("DISCNUMBER",b.toString());break;case"discsTotal":u("DISCTOTAL",b.toString());break;case"images":{if(!e)break;for(let g of b){let y=g.kind==="coverFront"?3:g.kind==="coverBack"?4:0,k=new Uint8Array(g.mimeType.length);for(let P=0;Ph+b.length,0),d=new Uint8Array(m),f=0;for(let h of r)d.set(h,f),f+=h.length;return d},bn=[2,1,2,3,3,4,4,5],Oa=n=>{if(n.length<7||n[0]!==11||n[1]!==119)return null;let t=new H(n);t.skipBits(16),t.skipBits(16);let e=t.readBits(2);if(e===3)return null;let r=t.readBits(6),i=t.readBits(5);if(i>8)return null;let a=t.readBits(3),s=t.readBits(3);(s&1)!==0&&s!==1&&t.skipBits(2),(s&4)!==0&&t.skipBits(2),s===2&&t.skipBits(2);let o=t.readBits(1),c=Math.floor(r/2);return{fscod:e,bsid:i,bsmod:a,acmod:s,lfeon:o,bitRateCode:c}},dl=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2],ml=1536,yn=new Uint8Array([5,4,65,67,45,51]),kn=new Uint8Array([5,4,69,65,67,51]),Xo=[1,2,3,6],Da=n=>{if(n.length<6||n[0]!==11||n[1]!==119)return null;let t=new H(n);t.skipBits(16);let e=t.readBits(2);if(t.skipBits(3),e!==0&&e!==2)return null;let r=t.readBits(11),i=t.readBits(2),a=0,s;i===3?(a=t.readBits(2),s=3):s=t.readBits(2);let o=t.readBits(3),c=t.readBits(1),u=t.readBits(5);if(u<11||u>16)return null;let l=Xo[s],m;return i<3?m=Qr[i]/1e3:m=Ko[a]/1e3,{dataRate:Math.round((r+1)*m/(l*16)),substreams:[{fscod:i,fscod2:a,bsid:u,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},fl=n=>{if(n.length<2)return null;let t=new H(n),e=t.readBits(13),r=t.readBits(3),i=[];for(let a=0;a<=r&&!(Math.ceil(t.pos/8)+3>n.length);a++){let s=t.readBits(2),o=t.readBits(5);t.skipBits(1),t.skipBits(1);let c=t.readBits(3),u=t.readBits(3),l=t.readBits(1);t.skipBits(3);let m=t.readBits(4),d=0;m>0?d=t.readBits(9):t.skipBits(1),i.push({fscod:s,fscod2:null,bsid:o,bsmod:c,acmod:u,lfeon:l,numDepSub:m,chanLoc:d})}return i.length===0?null:{dataRate:e,substreams:i}},Va=n=>{let t=n.substreams[0];return p(t),t.fscod<3?Qr[t.fscod]:t.fscod2!==null&&t.fscod2<3?Ko[t.fscod2]:null},Ua=n=>{let t=n.substreams[0];p(t);let e=bn[t.acmod]+t.lfeon;if(t.numDepSub>0){let r=[2,2,1,1,2,2,2,1,1];for(let i=0;i<9;i++)t.chanLoc&1<<8-i&&(e+=r[i])}return e};var be=class{constructor(t){this.input=t}dispose(){}};var pe=new Uint8Array(0),Q=class n{constructor(t,e,r,i,a=-1,s,o){this.data=t;this.type=e;this.timestamp=r;this.duration=i;this.sequenceNumber=a;if(t===pe&&s===void 0)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(s===void 0&&(s=t.byteLength),!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(e!=="key"&&e!=="delta")throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(r))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(i)||i<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(o!==void 0&&(typeof o!="object"||!o))throw new TypeError("sideData, when provided, must be an object.");if(o?.alpha!==void 0&&!(o.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(o?.alphaByteLength!==void 0&&(!Number.isInteger(o.alphaByteLength)||o.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=o??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===pe}get microsecondTimestamp(){return Math.trunc(At*this.timestamp)}get microsecondDuration(){return Math.trunc(At*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")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(t=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(typeof EncodedVideoChunk>"u")throw new Error("Your browser does not support EncodedVideoChunk.");return new EncodedVideoChunk({data:this.sideData.alpha,type:t,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if(typeof EncodedAudioChunk>"u")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(t,e){if(!(t instanceof EncodedVideoChunk||t instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");let r=new Uint8Array(t.byteLength);return t.copyTo(r),new n(r,t.type,t.timestamp/1e6,(t.duration??0)/1e6,void 0,void 0,e)}clone(t){if(t!==void 0&&(typeof t!="object"||t===null))throw new TypeError("options, when provided, must be an object.");if(t?.data!==void 0&&!(t.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(t?.type!==void 0&&t.type!=="key"&&t.type!=="delta")throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(t?.timestamp!==void 0&&!Number.isFinite(t.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(t?.duration!==void 0&&!Number.isFinite(t.duration))throw new TypeError("options.duration, when provided, must be a number.");if(t?.sequenceNumber!==void 0&&!Number.isFinite(t.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(t?.sideData!==void 0&&(typeof t.sideData!="object"||t.sideData===null))throw new TypeError("options.sideData, when provided, must be an object.");return new n(t?.data??this.data,t?.type??this.type,t?.timestamp??this.timestamp,t?.duration??this.duration,t?.sequenceNumber??this.sequenceNumber,this.byteLength,t?.sideData??this.sideData)}};var za=n=>{let e=(n.hasVideo?"video/":n.hasAudio?"audio/":"application/")+(n.isQuickTime?"quicktime":"mp4");if(n.codecStrings.length>0){let r=[...new Set(n.codecStrings)];e+=`; codecs="${r.join(", ")}"`}return e},Na=n=>{let t=U(n),e=0,r=t.getUint8(e);e+=1,e+=3;let i=ur(n.subarray(e,e+16));e+=16;let a=null;if(r>0){let o=t.getUint32(e);if(e+=4,o>0){a=[];for(let c=0;cn.systemId===t.systemId&&ga(n.data,t.data);var ut=8,Xt=16,$t=n=>{let t=R(n),e=ie(n,4),r=8;t===1&&(t=De(n),r=16);let a=t-r;return a<0?null:{name:e,totalSize:t,headerSize:r,contentSize:a}},kr=n=>Yt(n)/65536,Wa=n=>Yt(n)/1073741824,Ha=n=>{let t=0;for(let e=0;e<4;e++){t<<=7;let r=O(n);if(t|=r&127,(r&128)===0)break}return t},lt=n=>{let t=ce(n);return n.skip(2),t=Math.min(t,n.remainingLength),he.decode(B(n,t))},pl=n=>{let t=$t(n);if(!t||t.name!=="data"||n.remainingLength<8)return null;let e=R(n);n.skip(4);let r=B(n,t.contentSize-8);switch(e){case 1:return he.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new He(r,"image/jpeg");case 14:return new He(r,"image/png");case 27:return new He(r,"image/bmp");default:return r}};var dt=16,Zt=new Uint32Array(256),Ci=new Uint32Array(256),Ii=new Uint32Array(256),Ei=new Uint32Array(256),vi=new Uint32Array(256),Ce=new Uint32Array(256),hl=new Uint32Array(10),gl=!1,Mm=()=>{let n=new Uint8Array(256),t=new Uint8Array(256),e=new Uint8Array(256);for(let a=0,s=1;a<256;a++)e[a]=s,t[s]=a,s=s^s<<1^(s&128?283:0);let r=(a,s)=>a&&s?e[(t[a]+t[s])%255]:0;n[0]=99;for(let a=1;a<256;a++){let s=e[255-t[a]],o=s^s<<1^s<<2^s<<3^s<<4;o=o>>>8^o&255^99,n[a]=o}for(let a=0;a<256;a++){let s=n[a],o=n.indexOf(a);Zt[a]=s<<24|s<<16|s<<8|s,Ce[a]=o<<24|o<<16|o<<8|o;let c=r(o,14),u=r(o,9),l=r(o,13),m=r(o,11),d=c<<24|u<<16|l<<8|m;Ci[a]=d,Ii[a]=d>>>8|d<<24,Ei[a]=d>>>16|d<<16,vi[a]=d>>>24|d<<8}let i=1;for(let a=0;a<10;a++)hl[a]=i<<24,i=i<<1^(i&128?283:0);gl=!0},Tn=class{constructor(){this.roundkey=new Uint32Array(44);this.iv=new Uint32Array(dt/Uint32Array.BYTES_PER_ELEMENT);this.in=new Uint8Array(dt);this.out=new Uint8Array(dt);this.inView=new DataView(this.in.buffer);this.outView=new DataView(this.out.buffer)}init({key:t,iv:e}){p(t.byteLength===16),p(e.byteLength===16),gl||Mm();let r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=new DataView(e.buffer,e.byteOffset,e.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]=i.getUint32(0,!1),this.iv[1]=i.getUint32(4,!1),this.iv[2]=i.getUint32(8,!1),this.iv[3]=i.getUint32(12,!1);for(let a=4;a<44;a+=4){let s=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^Zt[s>>>16&255]&4278190080^Zt[s>>>8&255]&16711680^Zt[s>>>0&255]&65280^Zt[s>>>24&255]&255^hl[a/4-1],this.roundkey[a+1]=this.roundkey[a-3]^this.roundkey[a],this.roundkey[a+2]=this.roundkey[a-2]^this.roundkey[a+1],this.roundkey[a+3]=this.roundkey[a-1]^this.roundkey[a+2]}for(let a=0,s=40;a>>24&255]&255]^Ii[Zt[o>>>16&255]&255]^Ei[Zt[o>>>8&255]&255]^vi[Zt[o>>>0&255]&255]}}decrypt(){let t=this.inView.getUint32(0,!1)^this.roundkey[0],e=this.inView.getUint32(4,!1)^this.roundkey[1],r=this.inView.getUint32(8,!1)^this.roundkey[2],i=this.inView.getUint32(12,!1)^this.roundkey[3],a=this.inView.getUint32(0,!1),s=this.inView.getUint32(4,!1),o=this.inView.getUint32(8,!1),c=this.inView.getUint32(12,!1),u,l,m,d;for(let y=1;y<10;y++){let k=y*4;u=Ci[t>>>24]^Ii[i>>>16&255]^Ei[r>>>8&255]^vi[e&255]^this.roundkey[k],l=Ci[e>>>24]^Ii[t>>>16&255]^Ei[i>>>8&255]^vi[r&255]^this.roundkey[k+1],m=Ci[r>>>24]^Ii[e>>>16&255]^Ei[t>>>8&255]^vi[i&255]^this.roundkey[k+2],d=Ci[i>>>24]^Ii[r>>>16&255]^Ei[e>>>8&255]^vi[t&255]^this.roundkey[k+3],t=u,e=l,r=m,i=d}let f=Ce[t>>>24&255]&4278190080^Ce[i>>>16&255]&16711680^Ce[r>>>8&255]&65280^Ce[e>>>0&255]&255^this.roundkey[40],h=Ce[e>>>24&255]&4278190080^Ce[t>>>16&255]&16711680^Ce[i>>>8&255]&65280^Ce[r>>>0&255]&255^this.roundkey[41],b=Ce[r>>>24&255]&4278190080^Ce[e>>>16&255]&16711680^Ce[t>>>8&255]&65280^Ce[i>>>0&255]&255^this.roundkey[42],g=Ce[i>>>24&255]&4278190080^Ce[r>>>16&255]&16711680^Ce[e>>>8&255]&65280^Ce[t>>>0&255]&255^this.roundkey[43];this.outView.setUint32(0,f^this.iv[0],!1),this.outView.setUint32(4,h^this.iv[1],!1),this.outView.setUint32(8,b^this.iv[2],!1),this.outView.setUint32(12,g^this.iv[3],!1),this.iv[0]=a,this.iv[1]=s,this.iv[2]=o,this.iv[3]=c}},bl=(n,t,e)=>{let r=!1,i=0,a=2**16,s=16,o=new Tn;return new ReadableStream({pull:async c=>{r||(o.init(await t()),r=!0);let u=a+s,l=n.requestSliceRange(i,0,u);if(l instanceof Promise&&(l=await l),!l||l.length===0)throw new Error("Invalid ciphertext.");let m=l.length;if(m%16!==0)throw new Error("Invalid ciphertext.");let d=m===u?m-s:m,f=B(l,d),h=new Uint8Array(d);for(let b=0;b16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");let g=h.subarray(0,d-b);c.enqueue(g),c.close(),e()}},cancel:()=>{e()}})};var qa=class n extends be{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();let e=await this.getTrackBackings(),r=await Promise.all(e.map(i=>i.getDecoderConfig().then(a=>a?.codec??null)));return za({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(i=>i.info?.type==="video"),hasAudio:this.tracks.some(i=>i.info?.type==="audio"),codecStrings:r.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??=(async()=>{let e=0,r=!1;for(;;){let i=this.reader.requestSliceRange(e,ut,Xt);if(i instanceof Promise&&(i=await i),!i)break;let a=e,s=$t(i);if(!s)break;if(s.name==="ftyp"||s.name==="styp"){let o=ie(i,4);this.isQuickTime=o==="qt "}else if(s.name==="moov"){let o=this.reader.requestSlice(i.filePos,s.contentSize);if(o instanceof Promise&&(o=await o),!o)break;this.moovSlice=o,this.readContiguousBoxes(this.moovSlice);for(let c of this.tracks){let u=c.editListPreviousSegmentDurations/this.movieTimescale;c.editListOffset-=Math.round(u*c.timescale)}r=this.isFragmented&&this.reader.fileSize!==null&&this.reader.fileSize>a+s.totalSize;break}else if(s.name==="moof"){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.');let o=await this.input._initInput._getDemuxer();if(o.constructor!==n)throw new Error("Init input must match the input's format.");await o.readMetadata(),this.movieTimescale=o.movieTimescale,this.movieDurationInTimescale=o.movieDurationInTimescale,this.metadataTags=o.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=o.fragmentTrackDefaults,this.psshBoxes=o.psshBoxes;for(let c of o.tracks){let u={id:c.id,demuxer:this,trackBacking:null,disposition:c.disposition,timescale:c.timescale,durationInMediaTimescale:c.durationInMediaTimescale,durationInMovieTimescale:c.durationInMovieTimescale,rotation:c.rotation,internalCodecId:c.internalCodecId,name:c.name,languageCode:c.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:c.editListPreviousSegmentDurations,editListOffset:c.editListOffset,encryptionInfo:c.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:c.info};if(c.trackBacking){if(p(u.info),u.info.type==="video"&&u.info.width!==-1){let l=u;u.trackBacking=new Ga(l),this.tracks.push(u)}else if(u.info.type==="audio"&&u.info.numberOfChannels!==-1){let l=u;u.trackBacking=new Qa(l),this.tracks.push(u)}}}r=!1;break}e=a+s.totalSize}if(r){p(this.reader.fileSize!==null);let i=this.reader.requestSlice(this.reader.fileSize-4,4);i instanceof Promise&&(i=await i),p(i);let a=R(i),s=this.reader.fileSize-a;if(s>=0&&s<=this.reader.fileSize-Xt){let o=this.reader.requestSliceRange(s,ut,Xt);if(o instanceof Promise&&(o=await o),o){let c=$t(o);if(c&&c.name==="mfra"){let u=this.reader.requestSlice(o.filePos,c.contentSize);u instanceof Promise&&(u=await u),u&&this.readContiguousBoxes(u)}}}}})()}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;let r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=r,e.sampleTableByteOffset===null)return r;p(this.moovSlice);let i=this.moovSlice.slice(e.sampleTableByteOffset);if(this.currentTrack=e,this.traverseBox(i),this.currentTrack=null,e.info?.type==="audio"&&e.info.codec&&te.includes(e.info.codec)&&r.sampleCompositionTimeOffsets.length===0){p(e.info?.type==="audio");let s=Ae(e.info.codec),o=[],c=[];for(let u=0;uC.startIndex),y=r.sampleTimingEntries[g],k=q(r.sampleTimingEntries,b,C=>C.startIndex),T=r.sampleTimingEntries[k],w=y.startDecodeTimestamp+(h-y.startIndex)*y.delta,x=T.startDecodeTimestamp+(b-T.startIndex)*T.delta-w,P=X(o);P&&P.delta===x?P.count++:o.push({startIndex:l.startChunkIndex+f,startDecodeTimestamp:w,count:1,delta:x});let A=l.samplesPerChunk*s.sampleSize*e.info.numberOfChannels;c.push(A)}l.startSampleIndex=l.startChunkIndex,l.samplesPerChunk=1}r.sampleTimingEntries=o,r.sampleSizes=c}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(let s of r.sampleTimingEntries)for(let o=0;os.presentationTimestamp-o.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let s=0;sd.moofOffset===s.moofOffset);if(m)$o(o,m.timestamp);else{let d=q(u,s.moofOffset-1,f=>f.moofOffset);if(d!==-1){let f=u[d];$o(o,f.endTimestamp)}}o.startTimestampIsFinal=!0}let l=q(u,o.startTimestamp,m=>m.startTimestamp);if((l===-1||u[l].moofOffset!==s.moofOffset)&&u.splice(l+1,0,{moofOffset:s.moofOffset,startTimestamp:o.startTimestamp,endTimestamp:o.endTimestamp}),o.encryptionAuxInfo&&c.encryptionInfo){let m=await Sl(this.reader,c.encryptionInfo,o.encryptionAuxInfo);for(let d=0;d0){o.languageCode="";for(let l=0;l<3;l++)o.languageCode=String.fromCharCode(96+(u&31))+o.languageCode,u>>=5;Wt(o.languageCode)||(o.languageCode=ee)}}break;case"hdlr":{let o=this.currentTrack;if(!o)break;e.skip(8);let c=ie(e,4);c==="vide"?o.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}:c==="soun"&&(o.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case"stbl":{let o=this.currentTrack;if(!o)break;o.sampleTableByteOffset=r,this.readContiguousBoxes(e.slice(a,i.contentSize))}break;case"stsd":{let o=this.currentTrack;if(!o||o.info===null||o.sampleTable)break;let c=O(e);e.skip(3);let u=R(e);for(let l=0;l0&&(h===1?(e.skip(4),g=8*R(e),e.skip(2*4)):h===2&&(e.skip(4),y=ja(e),b=R(e),e.skip(4),g=R(e),k=R(e),e.skip(2*4))),o.info.numberOfChannels=b,o.info.sampleRate=y,o.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,m+d.totalSize-e.filePos));let T=f==="enca"?o.frmaCodecString:f;if(o.frmaCodecString=null,T!=="mp4a")if(T==="opus")o.info.codec="opus",o.info.sampleRate=ot;else if(T==="flac")o.info.codec="flac";else if(T==="ulaw")o.info.codec="ulaw";else if(T==="alaw")o.info.codec="alaw";else if(T==="ac-3")o.info.codec="ac3";else if(T==="ec-3")o.info.codec="eac3";else if(T==="twos")g===8?o.info.codec="pcm-s8":g===16?o.info.codec=o.info.pcmLittleEndian?"pcm-s16":"pcm-s16be":(console.warn(`Unsupported sample size ${g} for codec 'twos'.`),o.info.codec=null);else if(T==="sowt")g===8?o.info.codec="pcm-s8":g===16?o.info.codec="pcm-s16":(console.warn(`Unsupported sample size ${g} for codec 'sowt'.`),o.info.codec=null);else if(T==="raw ")o.info.codec="pcm-u8";else if(T==="in24")o.info.codec=o.info.pcmLittleEndian?"pcm-s24":"pcm-s24be";else if(T==="in32")o.info.codec=o.info.pcmLittleEndian?"pcm-s32":"pcm-s32be";else if(T==="fl32")o.info.codec=o.info.pcmLittleEndian?"pcm-f32":"pcm-f32be";else if(T==="fl64")o.info.codec=o.info.pcmLittleEndian?"pcm-f64":"pcm-f64be";else if(T==="ipcm"){let w=o.info.pcmSampleSize;o.info.pcmLittleEndian?w===16?o.info.codec="pcm-s16":w===24?o.info.codec="pcm-s24":w===32?o.info.codec="pcm-s32":(console.warn(`Invalid ipcm sample size ${w}.`),o.info.codec=null):w===16?o.info.codec="pcm-s16be":w===24?o.info.codec="pcm-s24be":w===32?o.info.codec="pcm-s32be":(console.warn(`Invalid ipcm sample size ${w}.`),o.info.codec=null)}else if(T==="fpcm"){let w=o.info.pcmSampleSize;o.info.pcmLittleEndian?w===32?o.info.codec="pcm-f32":w===64?o.info.codec="pcm-f64":(console.warn(`Invalid fpcm sample size ${w}.`),o.info.codec=null):w===32?o.info.codec="pcm-f32be":w===64?o.info.codec="pcm-f64be":(console.warn(`Invalid fpcm sample size ${w}.`),o.info.codec=null)}else if(T==="lpcm"&&k!==null){let w=g+7>>3,S=!!(k&1),x=!!(k&2),P=k&4?-1:0;g>0&&g<=64&&(S?g===32&&(o.info.codec=x?"pcm-f32be":"pcm-f32"):P&1<0?(o.encryptionInfo.defaultCryptByteBlock=u>>4,o.encryptionInfo.defaultSkipByteBlock=u&15):(o.encryptionInfo.defaultCryptByteBlock=0,o.encryptionInfo.defaultSkipByteBlock=0),o.encryptionInfo.defaultIsProtected=O(e)!==0,o.encryptionInfo.defaultPerSampleIvSize=O(e),o.encryptionInfo.defaultKid=ur(B(e,16)),o.encryptionInfo.defaultIsProtected&&o.encryptionInfo.defaultPerSampleIvSize===0){let l=O(e),m=new Uint8Array(16);m.set(B(e,l),0),o.encryptionInfo.defaultConstantIv=m}}break;case"avcC":{let o=this.currentTrack;if(!o)break;p(o.info),o.info.codecDescription=B(e,i.contentSize)}break;case"hvcC":{let o=this.currentTrack;if(!o)break;p(o.info),o.info.codecDescription=B(e,i.contentSize)}break;case"vpcC":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="video"),e.skip(4);let c=O(e),u=O(e),l=O(e),m=l>>4,d=l>>1&7,f=l&1,h=O(e),b=O(e),g=O(e);o.info.vp9CodecInfo={profile:c,level:u,bitDepth:m,chromaSubsampling:d,videoFullRangeFlag:f,colourPrimaries:h,transferCharacteristics:b,matrixCoefficients:g}}break;case"av1C":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="video"),e.skip(1);let c=O(e),u=c>>5,l=c&31,m=O(e),d=m>>7,f=m>>6&1,h=m>>5&1,b=m>>4&1,g=m>>3&1,y=m>>2&1,k=m&3,T=u===2&&f?h?12:10:f?10:8;o.info.av1CodecInfo={profile:u,level:l,tier:d,bitDepth:T,monochrome:b,chromaSubsamplingX:g,chromaSubsamplingY:y,chromaSamplePosition:k}}break;case"colr":{let o=this.currentTrack;if(!o||(p(o.info?.type==="video"),ie(e,4)!=="nclx"))break;let u=ce(e),l=ce(e),m=ce(e),d=!!(O(e)&128);o.info.colorSpace={primaries:Ur[u],transfer:zr[l],matrix:Nr[m],fullRange:d}}break;case"pasp":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="video");let c=R(e),u=R(e);c>0&&u>0&&(c>u?o.info.squarePixelWidth=Math.round(o.info.width*c/u):o.info.squarePixelHeight=Math.round(o.info.height*u/c))}break;case"wave":this.readContiguousBoxes(e.slice(a,i.contentSize));break;case"esds":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let c=O(e);p(c===3),Ha(e),e.skip(2);let u=O(e),l=(u&128)!==0,m=(u&64)!==0,d=(u&32)!==0;if(l&&e.skip(2),m){let y=O(e);e.skip(y)}d&&e.skip(2);let f=O(e);p(f===4);let h=Ha(e),b=e.filePos,g=O(e);if(g===64||g===103?(o.info.codec="aac",o.info.aacCodecInfo={isMpeg2:g===103,objectType:null}):g===105||g===107?o.info.codec="mp3":g===221?o.info.codec="vorbis":console.warn(`Unsupported audio codec (objectTypeIndication ${g}) - discarding track.`),e.skip(12),h>e.filePos-b){let y=O(e);p(y===5);let k=Ha(e);if(o.info.codecDescription=B(e,k),o.info.codec==="aac"){let T=It(o.info.codecDescription);T.numberOfChannels!==null&&(o.info.numberOfChannels=T.numberOfChannels),T.sampleRate!==null&&(o.info.sampleRate=T.sampleRate)}}}break;case"enda":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),o.info.pcmLittleEndian=!!(ce(e)&255)}break;case"pcmC":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let c=O(e);o.info.pcmLittleEndian=!!(c&1),o.info.pcmSampleSize=O(e)}break;case"dOps":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(1);let c=O(e),u=ce(e),l=R(e),m=wn(e),d=O(e),f;d!==0?f=B(e,2+c):f=new Uint8Array(0);let h=new Uint8Array(19+f.byteLength),b=new DataView(h.buffer);b.setUint32(0,1332770163,!1),b.setUint32(4,1214603620,!1),b.setUint8(8,1),b.setUint8(9,c),b.setUint16(10,u,!0),b.setUint32(12,l,!0),b.setInt16(16,m,!0),b.setUint8(18,d),h.set(f,19),o.info.codecDescription=h,o.info.numberOfChannels=c}break;case"dfLa":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let c=127,u=128,l=e.filePos;for(;e.filePos>>12,w=(k>>9&7)+1;o.info.sampleRate=T,o.info.numberOfChannels=w,e.skip(20)}else e.skip(g);if(b&u)break}let m=e.filePos;e.filePos=l;let d=B(e,m-l),f=new Uint8Array(4+d.byteLength);new DataView(f.buffer).setUint32(0,1716281667,!1),f.set(d,4),o.info.codecDescription=f}break;case"dac3":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio");let c=B(e,3),u=new H(c),l=u.readBits(2);u.skipBits(8);let m=u.readBits(3),d=u.readBits(1);l<3&&(o.info.sampleRate=Qr[l]),o.info.numberOfChannels=bn[m]+d}break;case"dec3":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio");let c=B(e,i.contentSize),u=fl(c);if(!u){console.warn("Invalid dec3 box contents, ignoring.");break}let l=Va(u);l!==null&&(o.info.sampleRate=l),o.info.numberOfChannels=Ua(u)}break;case"stts":{let o=this.currentTrack;if(!o||!o.sampleTable)break;e.skip(4);let c=R(e),u=0,l=0;for(let m=0;mT.id===c);if(!u)break;let l=R(e),m=(l&48)>>4,d=(l&12)>>2,f=l&3,h=[O,ce,mt,R],b=h[m],g=h[d],y=h[f],k=R(e);for(let T=0;TT.timestamp-w.timestamp);for(let T=0;T({presentationTimestamp:m.presentationTimestamp,sampleIndex:d})).sort((m,d)=>m.presentationTimestamp-d.presentationTimestamp);for(let m=0;mk.id===b);if(!g)break;let y=this.fragmentTrackDefaults.find(k=>k.trackId===b);this.currentTrack=g,g.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:y?.defaultSampleDescriptionIndex??null,defaultSampleDuration:y?.defaultSampleDuration??null,defaultSampleSize:y?.defaultSampleSize??null,defaultSampleFlags:y?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},c?g.currentFragmentState.baseDataOffset=De(e):h&&(g.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),u&&(g.currentFragmentState.sampleDescriptionIndex=R(e)),l&&(g.currentFragmentState.defaultSampleDuration=R(e)),m&&(g.currentFragmentState.defaultSampleSize=R(e)),d&&(g.currentFragmentState.defaultSampleFlags=R(e)),f&&(g.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{let o=this.currentTrack;if(!o)break;p(o.currentFragmentState);let c=O(e);e.skip(3);let u=c===0?R(e):De(e);o.currentFragmentState.startTimestamp=u}break;case"trun":{let o=this.currentTrack;if(!o)break;p(this.currentFragment),p(o.currentFragmentState);let c=O(e),u=mt(e),l=!!(u&1),m=!!(u&4),d=!!(u&256),f=!!(u&512),h=!!(u&1024),b=!!(u&2048),g=R(e),y=null;l&&(y=Yt(e));let k=null;m&&(k=R(e));let T;if(this.currentFragment.trackData.has(o.id)?(T=this.currentFragment.trackData.get(o.id),y!==null&&(T.currentOffset=o.currentFragmentState.baseDataOffset+y)):(T={track:o,currentTimestamp:0,currentOffset:o.currentFragmentState.baseDataOffset+(y??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(o.id,T)),g===0){this.currentFragment.implicitBaseDataOffset=T.currentOffset;break}for(let w=0;w0&&(m=B(e,l));let d=kl(o);d.defaultSampleInfoSize=u,d.sampleSizes=m,d.sampleCount=l}break;case"saio":{let o=this.currentTrack;if(!o||!o.encryptionInfo)break;let c=O(e);if(mt(e)&1){let f=ie(e,4),h=R(e);if(f!==o.encryptionInfo.scheme||h!==0)break}let l=R(e);if(l===0)break;l>1&&console.warn("Multiple saio entries are not supported; using the first offset only.");let m=c===0?R(e):Number(De(e));this.currentFragment&&(m+=this.currentFragment.moofOffset);let d=kl(o);d.offset=m}break;case"senc":{let o=this.currentTrack;if(!o||!o.encryptionInfo)break;p(this.currentFragment);let c=this.currentFragment.trackData.get(o.id);if(!c)break;e.skip(1);let l=!!(mt(e)&2),m=R(e),d=o.encryptionInfo.defaultPerSampleIvSize;p(d!==null);for(let f=0;f0?h.set(B(e,d),0):h.set(o.encryptionInfo.defaultConstantIv,0);let b=null;if(l){let y=ce(e);b=[];for(let k=0;k0&&(this.metadataTags.trackNumber??=h),b&&Number.isInteger(b)&&b>0&&(this.metadataTags.tracksTotal??=b)}break;case"trkn":if(d instanceof Uint8Array&&d.length>=6){let f=U(d),h=f.getUint16(2,!1),b=f.getUint16(4,!1);h>0&&(this.metadataTags.trackNumber??=h),b>0&&(this.metadataTags.tracksTotal??=b)}break;case"disc":case"disk":if(d instanceof Uint8Array&&d.length>=6){let f=U(d),h=f.getUint16(2,!1),b=f.getUint16(4,!1);h>0&&(this.metadataTags.discNumber??=h),b>0&&(this.metadataTags.discsTotal??=b)}break}}}break}return e.filePos=s,!0}},Ka=class{constructor(t){this.internalTrack=t;this.packetToSampleIndex=new WeakMap;this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let t=this.internalTrack.demuxer,e=this.internalTrack.trackBacking.getType(),r=0;for(let i of t.tracks)if(i.trackBacking.getType()===e&&r++,i===this.internalTrack)break;return r}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(){let t=this.internalTrack;return t.durationInMediaTimescale<=0?null:(p(t.trackBacking),((await t.trackBacking.getFirstPacket({metadataOnly:!0}))?.timestamp??0)+t.durationInMediaTimescale/t.timescale)}async getLiveRefreshInterval(){return null}async getFirstPacket(t){let e=await this.fetchPacketForSampleIndex(0,t);return e||!this.internalTrack.demuxer.isFragmented?e:this.performFragmentedLookup(null,r=>r.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,t)}mapTimestampIntoTimescale(t){return Lt(t*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(t,e){let r=this.mapTimestampIntoTimescale(t),i=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=Yo(i,r),s=await this.fetchPacketForSampleIndex(a,e);return!yl(i)||!this.internalTrack.demuxer.isFragmented?s:this.performFragmentedLookup(null,o=>{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let u=q(c.presentationTimestamps,r,d=>d.presentationTimestamp),l=u!==-1?c.presentationTimestamps[u].sampleIndex:-1,m=u!==-1&&r{if(a===i.fragment){let s=a.trackData.get(this.internalTrack.id);if(i.sampleIndex+1{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let u=lr(c.presentationTimestamps,d=>c.samples[d.sampleIndex].isKeyFrame&&d.presentationTimestamp<=r),l=u!==-1?c.presentationTimestamps[u].sampleIndex:-1,m=u!==-1&&r{if(a===i.fragment){let o=a.trackData.get(this.internalTrack.id).samples.findIndex((c,u)=>c.isKeyFrame&&u>i.sampleIndex);if(o!==-1)return{sampleIndex:o,correctSampleFound:!0}}else{let s=a.trackData.get(this.internalTrack.id);if(s&&s.firstKeyFrameTimestamp!==null){let o=s.samples.findIndex(c=>c.isKeyFrame);return p(o!==-1),{sampleIndex:o,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,e)}async fetchPacketForSampleIndex(t,e){if(t===-1)return null;let r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=Om(r,t);if(!i)return null;let a;if(e.metadataOnly)a=pe;else{let u=this.internalTrack.demuxer.reader.requestSlice(i.sampleOffset,i.sampleSize);if(u instanceof Promise&&(u=await u),!u)return null;if(a=B(u,i.sampleSize),this.internalTrack.encryptionAuxInfo){p(this.internalTrack.encryptionInfo);let l=await Sl(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);tg.timestamp),m=l!==-1?this.internalTrack.fragmentLookupTable[l]:null,d=q(this.internalTrack.fragmentPositionCache,r,g=>g.startTimestamp),f=d!==-1?this.internalTrack.fragmentPositionCache[d]:null,h=Math.max(m?.moofOffset??0,f?.moofOffset??0)||null,b;for(t?h===null||t.moofOffset>=h?(b=t.moofOffset+t.moofSize,o=t):b=h:b=h??0;;){if(o){let T=o.trackData.get(this.internalTrack.id);if(T&&T.startTimestamp>i)break}let g=s.reader.requestSliceRange(b,ut,Xt);if(g instanceof Promise&&(g=await g),!g)break;let y=b,k=$t(g);if(!k)break;if(k.name==="moof"){o=await s.readFragment(y);let{sampleIndex:T,correctSampleFound:w}=e(o);if(w)return this.fetchPacketInFragment(o,T,a);T!==-1&&(c=o,u=T)}b=y+k.totalSize}if(m&&(!c||c.moofOffset{if(this.internalTrack.info.codec==="vp9"&&!this.internalTrack.info.vp9CodecInfo){let r=await this.getFirstPacket({});this.internalTrack.info.vp9CodecInfo=r&&Fa(r.data)}else if(this.internalTrack.info.codec==="av1"&&!this.internalTrack.info.av1CodecInfo){let r=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=r&&Ma(r.data)}let e={codec:Ti(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}},Qa=class extends Ka{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??={codec:wi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}:null}},Yo=(n,t)=>{if(n.presentationTimestamps){let e=q(n.presentationTimestamps,t,r=>r.presentationTimestamp);return e===-1?-1:n.presentationTimestamps[e].sampleIndex}else{let e=q(n.sampleTimingEntries,t,i=>i.startDecodeTimestamp);if(e===-1)return-1;let r=n.sampleTimingEntries[e];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Bm=(n,t)=>{if(!n.keySampleIndices)return Yo(n,t);if(n.presentationTimestamps){let e=q(n.presentationTimestamps,t,r=>r.presentationTimestamp);if(e===-1)return-1;for(let r=e;r>=0;r--){let i=n.presentationTimestamps[r].sampleIndex;if(Nt(n.keySampleIndices,i,s=>s)!==-1)return i}return-1}else{let e=Yo(n,t),r=q(n.keySampleIndices,e,i=>i);return n.keySampleIndices[r]??-1}},Om=(n,t)=>{let e=q(n.sampleTimingEntries,t,y=>y.startIndex),r=n.sampleTimingEntries[e];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta,s=q(n.sampleCompositionTimeOffsets,t,y=>y.startIndex),o=n.sampleCompositionTimeOffsets[s];o&&t-o.startIndexy.startSampleIndex),l=n.sampleToChunk[u];p(l);let m=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=n.chunkOffsets[m],f=l.startSampleIndex+(m-l.startChunkIndex)*l.samplesPerChunk,h=0,b=d;if(n.sampleSizes.length===1)b+=c*(t-f),h+=c*l.samplesPerChunk;else for(let y=f;yy)!==-1:!0}},Dm=(n,t)=>{if(!n.keySampleIndices)return t+1;let e=q(n.keySampleIndices,t,r=>r);return n.keySampleIndices[e+1]??-1},$o=(n,t)=>{n.startTimestamp+=t,n.endTimestamp+=t;for(let e of n.samples)e.presentationTimestamp+=t;for(let e of n.presentationTimestamps)e.presentationTimestamp+=t},Vm=n=>{let[t,e]=n,r=Math.atan2(e,t);return Number.isFinite(r)?r*(180/Math.PI):0},yl=n=>n.sampleSizes.length===0,kl=n=>n.currentFragmentState?n.currentFragmentState.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:n.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null},Sl=async(n,t,e)=>{if(e.resolved)return e.resolved;if(e.offset===null||e.sampleCount===0)throw new Error("Incomplete saiz/saio info; cannot resolve encryption data.");let r=0;if(e.defaultSampleInfoSize>0)r=e.defaultSampleInfoSize*e.sampleCount;else{p(e.sampleSizes);for(let o=0;o0?e.defaultSampleInfoSize:e.sampleSizes[o],u=new Uint8Array(16);a>0?u.set(B(i,a),0):u.set(t.defaultConstantIv,0);let l=null;if(c>a){let m=ce(i);l=[];for(let d=0;d{p(n.encryptionInfo);let i=n.encryptionInfo;p(i.defaultKid!==null);let a=i.defaultKid,s,o=n.demuxer.decryptionKeyCache.get(a);if(o)s=await o;else{if(!n.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw new Error("Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.");let c=(async()=>{let u=n.demuxer.psshBoxes;if(r){u=[...u,...r.psshBoxes].filter(m=>m.keyIds===null||m.keyIds.includes(a));for(let m=0;m{let i=new Uint8Array(16);i.set(e.iv,0);let a=await crypto.subtle.importKey("raw",n,{name:"AES-CTR"},!1,["decrypt"]),s=async h=>{let b=await crypto.subtle.decrypt({name:"AES-CTR",counter:i,length:64},a,h);return new Uint8Array(b)};if(!e.subsamples)return s(r);p(t.defaultCryptByteBlock!==null&&t.defaultSkipByteBlock!==null);let o=Al(e.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock),c=0;for(let h of o)for(let b of h.perSubsample)c+=b.length;let u=new Uint8Array(c),l=0;for(let h of o)for(let b of h.perSubsample)u.set(r.subarray(b.offset,b.offset+b.length),l),l+=b.length;let m=await s(u),d=new Uint8Array(r),f=0;for(let h of o)for(let b of h.perSubsample)d.set(m.subarray(f,f+b.length),b.offset),f+=b.length;return d},zm=(n,t,e,r)=>{let i=new Tn;i.init({key:n,iv:e.iv});let a=t.defaultCryptByteBlock,s=t.defaultSkipByteBlock;if(p(a!==null&&s!==null),!e.subsamples){let l=new Uint8Array(r),m=Math.floor(r.length/16);for(let d=0;d{let r=[],i=t!==0||e!==0,a=0;for(let s of n){a+=s.clearLen;let o=[];if(!i)s.protectedLen>0&&o.push({offset:a,length:s.protectedLen}),a+=s.protectedLen;else{let c=s.protectedLen,u=a;for(;c>0&&!(c<16*t);){let l=16*t;o.push({offset:u,length:l}),u+=l,c-=l;let m=Math.min(16*e,c);u+=m,c-=m}a+=s.protectedLen}r.push({perSubsample:o})}return r};var _i=class{constructor(t){this.value=t}},Ri=class{constructor(t){this.value=t}},Sn=class{constructor(t){this.value=t}},ft=class{constructor(t){this.value=t}};var Nm=[440786851,408125543],Fi=[290298740,357149030,524531317,374648427,475249515,423732329,272869232,307544935],An=[...Nm,...Fi],Pl=n=>n<256?1:n<65536?2:n<1<<24?3:n<2**32?4:n<2**40?5:6,Cl=n=>n<1n<<8n?1:n<1n<<16n?2:n<1n<<24n?3:n<1n<<32n?4:n<1n<<40n?5:n<1n<<48n?6:n<1n<<56n?7:8,Il=n=>n>=-64&&n<64?1:n>=-8192&&n<8192?2:n>=-(1<<20)&&n<1<<20?3:n>=-(1<<27)&&n<1<<27?4:n>=-(2**34)&&n<2**34?5:6,Lm=n=>{if(n<127)return 1;if(n<16383)return 2;if(n<(1<<21)-1)return 3;if(n<(1<<28)-1)return 4;if(n<2**35-1)return 5;if(n<2**42-1)return 6;throw new Error("EBML varint size not supported "+n)},Xa=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer);this.offsets=new WeakMap;this.dataOffsets=new WeakMap}writeByte(t){this.helperView.setUint8(0,t),this.writer.write(this.helper.subarray(0,1))}writeFloat32(t){this.helperView.setFloat32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeFloat64(t){this.helperView.setFloat64(0,t,!1),this.writer.write(this.helper)}writeUnsignedInt(t,e=Pl(t)){let r=0;switch(e){case 6:this.helperView.setUint8(r++,t/2**40|0);case 5:this.helperView.setUint8(r++,t/2**32|0);case 4:this.helperView.setUint8(r++,t>>24);case 3:this.helperView.setUint8(r++,t>>16);case 2:this.helperView.setUint8(r++,t>>8);case 1:this.helperView.setUint8(r++,t);break;default:throw new Error("Bad unsigned int size "+e)}this.writer.write(this.helper.subarray(0,r))}writeUnsignedBigInt(t,e=Cl(t)){let r=0;for(let i=e-1;i>=0;i--)this.helperView.setUint8(r++,Number(t>>BigInt(i*8)&0xffn));this.writer.write(this.helper.subarray(0,r))}writeSignedInt(t,e=Il(t)){t<0&&(t+=2**(e*8)),this.writeUnsignedInt(t,e)}writeVarInt(t,e=Lm(t)){let r=0;switch(e){case 1:this.helperView.setUint8(r++,128|t);break;case 2:this.helperView.setUint8(r++,64|t>>8),this.helperView.setUint8(r++,t);break;case 3:this.helperView.setUint8(r++,32|t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 4:this.helperView.setUint8(r++,16|t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 5:this.helperView.setUint8(r++,8|t/2**32&7),this.helperView.setUint8(r++,t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 6:this.helperView.setUint8(r++,4|t/2**40&3),this.helperView.setUint8(r++,t/2**32|0),this.helperView.setUint8(r++,t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;default:throw new Error("Bad EBML varint size "+e)}this.writer.write(this.helper.subarray(0,r))}writeAsciiString(t){this.writer.write(new Uint8Array(t.split("").map(e=>e.charCodeAt(0))))}writeEBML(t){if(t!==null)if(t instanceof Uint8Array)this.writer.write(t);else if(Array.isArray(t))for(let e of t)this.writeEBML(e);else if(this.offsets.set(t,this.writer.getPos()),this.writeUnsignedInt(t.id),Array.isArray(t.data)){let e=this.writer.getPos(),r=t.size===-1?1:t.size??4;t.size===-1?this.writeByte(255):this.writer.seek(this.writer.getPos()+r);let i=this.writer.getPos();if(this.dataOffsets.set(t,i),this.writeEBML(t.data),t.size!==-1){let a=this.writer.getPos()-i,s=this.writer.getPos();this.writer.seek(e),this.writeVarInt(a,r),this.writer.seek(s)}}else if(typeof t.data=="number"){let e=t.size??Pl(t.data);this.writeVarInt(e),this.writeUnsignedInt(t.data,e)}else if(typeof t.data=="bigint"){let e=t.size??Cl(t.data);this.writeVarInt(e),this.writeUnsignedBigInt(t.data,e)}else if(typeof t.data=="string")this.writeVarInt(t.data.length),this.writeAsciiString(t.data);else if(t.data instanceof Uint8Array)this.writeVarInt(t.data.byteLength,t.size),this.writer.write(t.data);else if(t.data instanceof _i)this.writeVarInt(4),this.writeFloat32(t.data.value);else if(t.data instanceof Ri)this.writeVarInt(8),this.writeFloat64(t.data.value);else if(t.data instanceof Sn){let e=t.size??Il(t.data.value);this.writeVarInt(e),this.writeSignedInt(t.data.value,e)}else if(t.data instanceof ft){let e=$.encode(t.data.value);this.writeVarInt(e.length),this.writer.write(e)}else ae(t.data)}},Zo=8,Ve=2,pt=2*Zo,Jo=n=>{if(n.remainingLength<1)return null;let t=O(n);if(n.skip(-1),t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;return n.remainingLength{if(n.remainingLength<1)return null;let t=O(n);if(t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;if(n.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let e=0;for(let r=0;r{if(t<1)throw new Error("Bad unsigned int size "+t);let e=0n;for(let r=0;r{let t=Jo(n);return t===null||n.remainingLength{if(n.remainingLength<1)return null;if(O(n)===255)return;n.skip(-1);let e=Mi(n);if(e===null)return null;if(e!==72057594037927940)return e},ht=n=>{p(n.remainingLength>=Ve);let t=$a(n);if(t===null)return null;let e=ec(n);return e===null?null:{id:t,size:e}},Tr=(n,t)=>{let e=B(n,t),r=0;for(;r{let e=B(n,t),r=0;for(;r{if(t===0)return 0;if(t!==4&&t!==8)throw new Error("Bad float size "+t);return t===4?vl(n):ja(n)},Za=async(n,t,e,r)=>{let i=new Set(e),a=t;for(;r===null||aa?r:a,found:!1}},tc=async(n,t,e,r)=>{let a=new Set(e),s=t;for(;s{let e=(n.hasVideo?"video/":n.hasAudio?"audio/":"application/")+(n.isWebM?"webm":"x-matroska");if(n.codecStrings.length>0){let r=[...new Set(n.codecStrings.filter(Boolean))];e+=`; codecs="${r.join(", ")}"`}return e};var rc=[{id:290298740,flag:"seekHeadSeen"},{id:357149030,flag:"infoSeen"},{id:374648427,flag:"tracksSeen"},{id:475249515,flag:"cuesSeen"}],Rl=10*2**20,es=class extends be{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(r=>r.trackBacking))}async getMimeType(){await this.readMetadata();let e=await this.getTrackBackings(),r=await Promise.all(e.map(i=>i.getDecoderConfig().then(a=>a?.codec??null)));return Ja({isWebM:this.isWebM,hasVideo:this.segments.some(i=>i.tracks.some(a=>a.info?.type==="video")),hasAudio:this.segments.some(i=>i.tracks.some(a=>a.info?.type==="audio")),codecStrings:r.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(let r of this.segments)r.metadataTagsCollected||(this.reader.fileSize!==null&&await this.loadSegmentMetadata(r),r.metadataTagsCollected=!0);let e={};for(let r of this.segments)e={...e,...r.metadataTags};return e}readMetadata(){return this.readMetadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSliceRange(e,Ve,pt);if(r instanceof Promise&&(r=await r),!r)break;let i=ht(r);if(!i)break;let a=i.id,s=i.size,o=r.filePos;if(a===440786851){Jt(s);let c=this.reader.requestSlice(o,s);if(c instanceof Promise&&(c=await c),!c)break;this.readContiguousElements(c)}else if(a===408125543){if(await this.readSegment(o,s),s===void 0||this.reader.fileSize===null)break}else if(a===524531317){if(this.reader.fileSize===null)break;s===void 0&&(s=(await Za(this.reader,o,An,this.reader.fileSize)).pos-o);let c=X(this.segments);c&&(c.elementEndPos=o+s)}Jt(s),e=o+s}})()}async readSegment(e,r){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:r===void 0?null:e+r,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let i=e;for(;this.currentSegment.elementEndPos===null||ib.id===m);if(h!==-1){let b=rc[h].flag;this.currentSegment[b]=!0,Jt(d);let g=this.reader.requestSlice(f,d);g instanceof Promise&&(g=await g),g&&this.readContiguousElements(g)}else if(m===307544935||m===423732329){m===307544935?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,Jt(d);let b=this.reader.requestSlice(f,d);b instanceof Promise&&(b=await b),b&&this.readContiguousElements(b)}else if(m===524531317){this.currentSegment.clusterSeekStartPos=u;break}if(d===void 0)break;i=f+d}if(this.currentSegment.seekEntries.sort((c,u)=>c.segmentPosition-u.segmentPosition),this.reader.fileSize!==null)for(let c of this.currentSegment.seekEntries){let u=rc.find(b=>b.id===c.id);if(!u||this.currentSegment[u.flag])continue;let l=this.reader.requestSliceRange(e+c.segmentPosition,Ve,pt);if(l instanceof Promise&&(l=await l),!l)continue;let m=ht(l);if(!m)continue;let{id:d,size:f}=m;if(d!==u.id)continue;Jt(f),this.currentSegment[u.flag]=!0;let h=this.reader.requestSlice(l.filePos,f);h instanceof Promise&&(h=await h),h&&this.readContiguousElements(h)}this.currentSegment.timestampScale===-1&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e9/1e6);for(let c of this.currentSegment.tracks)c.defaultDurationNs!==null&&(c.defaultDuration=this.currentSegment.timestampFactor*c.defaultDurationNs/1e9);let a=new Map(this.currentSegment.tracks.map(c=>[c.id,c]));for(let c of this.currentSegment.cuePoints){let u=a.get(c.trackId);u&&u.cuePoints.push(c)}for(let c of this.currentSegment.tracks){c.cuePoints.sort((u,l)=>u.time-l.time);for(let u=0;uo&&(o=c.cuePoints.length,s=c);for(let c of this.currentSegment.tracks)c.cuePoints.length===0&&(c.cuePoints=s.cuePoints);this.currentSegment=null}async readCluster(e,r){if(r.lastReadCluster?.elementStartPos===e)return r.lastReadCluster;let i=this.reader.requestSliceRange(e,Ve,pt);i instanceof Promise&&(i=await i),p(i);let a=e,s=ht(i);p(s);let o=s.id;p(o===524531317);let c=s.size,u=i.filePos;c===void 0&&(c=(await Za(this.reader,u,An,r.elementEndPos)).pos-u);let l=this.reader.requestSlice(u,c);l instanceof Promise&&(l=await l);let m={segment:r,elementStartPos:a,elementEndPos:u+c,dataStartPos:u,timestamp:-1,trackData:new Map};if(this.currentCluster=m,l){let d=this.readContiguousElements(l,An);m.elementEndPos=d}for(let[,d]of m.trackData){let f=d.track;p(d.blocks.length>0);let h=!1;for(let k=0;k({timestamp:k.timestamp,blockIndex:T})).sort((k,T)=>k.timestamp-T.timestamp);for(let k=0;k({timestamp:k.timestamp,blockIndex:T})).sort((k,T)=>k.timestamp-T.timestamp));let b=d.blocks[d.presentationTimestamps[0].blockIndex],g=d.blocks[X(d.presentationTimestamps).blockIndex];d.startTimestamp=b.timestamp,d.endTimestamp=g.timestamp+g.duration;let y=q(f.clusterPositionCache,d.startTimestamp,k=>k.startTimestamp);(y===-1||f.clusterPositionCache[y].elementStartPos!==a)&&f.clusterPositionCache.splice(y+1,0,{elementStartPos:m.elementStartPos,startTimestamp:d.startTimestamp})}return r.lastReadCluster=m,m}getTrackDataInCluster(e,r){let i=e.trackData.get(r);if(!i){let a=e.segment.tracks.find(s=>s.id===r);if(!a)return null;i={track:a,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(r,i)}return i}expandLacedBlocks(e,r){for(let i=0;i=Ve;){let i=e.filePos;if(!this.traverseElement(e,r))return i}return e.filePos}traverseElement(e,r){let i=ht(e);if(!i||r&&r.includes(i.id))return!1;let{id:a,size:s}=i,o=e.filePos;switch(Jt(s),a){case 17026:this.isWebM=Tr(e,s)==="webm";break;case 19899:{if(!this.currentSegment)break;let c={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(c),this.readContiguousElements(e.slice(o,s)),(c.id===-1||c.segmentPosition===-1)&&this.currentSegment.seekEntries.pop()}break;case 21419:{let c=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!c)break;c.id=K(e,s)}break;case 21420:{let c=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!c)break;c.segmentPosition=K(e,s)}break;case 2807729:{if(!this.currentSegment)break;this.currentSegment.timestampScale=K(e,s),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale}break;case 17545:{if(!this.currentSegment)break;this.currentSegment.duration=Ya(e,s)}break;case 174:{if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...Se,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,s)),!this.currentTrack))break;if(this.currentTrack.decodingInstructions.some(c=>c.data?.type!=="decompress"||c.scope!==1||c.data.algorithm!==3)&&(console.warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&this.currentTrack.id!==-1&&this.currentTrack.codecId&&this.currentTrack.info){let c=this.currentTrack.codecId.indexOf("/"),u=c===-1?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,c);if(this.currentTrack.info.type==="video"&&this.currentTrack.info.width!==-1&&this.currentTrack.info.height!==-1){if(this.currentTrack.info.squarePixelWidth=this.currentTrack.info.width,this.currentTrack.info.squarePixelHeight=this.currentTrack.info.height,this.currentTrack.info.displayWidth!==null&&this.currentTrack.info.displayHeight!==null){let m=this.currentTrack.info.displayWidth*this.currentTrack.info.height,d=this.currentTrack.info.displayHeight*this.currentTrack.info.width;m>0&&d>0&&(m>d?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*m/d):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*d/m))}this.currentTrack.codecId===Me.avc?(this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Me.hevc?(this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Me.vp8?this.currentTrack.info.codec="vp8":u===Me.vp9?this.currentTrack.info.codec="vp9":u===Me.av1&&(this.currentTrack.info.codec="av1");let l=this.currentTrack;this.currentTrack.trackBacking=new ic(l),this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type==="audio"){u===Me.aac?(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===Me.mp3?this.currentTrack.info.codec="mp3":u===Me.opus?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=ot):u===Me.vorbis?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Me.flac?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Me.ac3?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Me.eac3?(this.currentTrack.info.codec="eac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId==="A_PCM/INT/LIT"?this.currentTrack.info.bitDepth===8?this.currentTrack.info.codec="pcm-u8":this.currentTrack.info.bitDepth===16?this.currentTrack.info.codec="pcm-s16":this.currentTrack.info.bitDepth===24?this.currentTrack.info.codec="pcm-s24":this.currentTrack.info.bitDepth===32&&(this.currentTrack.info.codec="pcm-s32"):this.currentTrack.codecId==="A_PCM/INT/BIG"?this.currentTrack.info.bitDepth===8?this.currentTrack.info.codec="pcm-u8":this.currentTrack.info.bitDepth===16?this.currentTrack.info.codec="pcm-s16be":this.currentTrack.info.bitDepth===24?this.currentTrack.info.codec="pcm-s24be":this.currentTrack.info.bitDepth===32&&(this.currentTrack.info.codec="pcm-s32be"):this.currentTrack.codecId==="A_PCM/FLOAT/IEEE"&&(this.currentTrack.info.bitDepth===32?this.currentTrack.info.codec="pcm-f32":this.currentTrack.info.bitDepth===64&&(this.currentTrack.info.codec="pcm-f64"));let l=this.currentTrack;this.currentTrack.trackBacking=new nc(l),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null}break;case 215:{if(!this.currentTrack)break;this.currentTrack.id=K(e,s)}break;case 131:{if(!this.currentTrack)break;let c=K(e,s);c===1?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}:c===2&&(this.currentTrack.info={type:"audio",numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case 185:{if(!this.currentTrack)break;K(e,s)||(this.currentTrack=null)}break;case 136:{if(!this.currentTrack)break;this.currentTrack.disposition.default=!!K(e,s)}break;case 21930:{if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!K(e,s)}break;case 21934:{if(!this.currentTrack)break;this.currentTrack.disposition.original=!!K(e,s)}break;case 21931:{if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!K(e,s)}break;case 21932:{if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!K(e,s)}break;case 21935:{if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!K(e,s)}break;case 134:{if(!this.currentTrack)break;this.currentTrack.codecId=Tr(e,s)}break;case 25506:{if(!this.currentTrack)break;this.currentTrack.codecPrivate=B(e,s)}break;case 2352003:{if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=K(e,s)}break;case 21358:{if(!this.currentTrack)break;this.currentTrack.name=Bi(e,s)}break;case 2274716:{if(!this.currentTrack||this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Tr(e,s),Wt(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ee)}break;case 2274717:{if(!this.currentTrack)break;let u=Tr(e,s).split("-")[0];u?this.currentTrack.languageCode=u:this.currentTrack.languageCode=ee,this.currentTrack.hasLanguageBcp47=!0}break;case 224:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(o,s))}break;case 176:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.width=K(e,s)}break;case 186:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.height=K(e,s)}break;case 21680:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayWidth=K(e,s)}break;case 21690:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayHeight=K(e,s)}break;case 21682:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayUnit=K(e,s)}break;case 21440:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.alphaMode=K(e,s)===1}break;case 21936:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.colorSpace={},this.readContiguousElements(e.slice(o,s))}break;case 21937:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=K(e,s),u=Nr[c]??null;this.currentTrack.info.colorSpace.matrix=u}break;case 21945:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;this.currentTrack.info.colorSpace.fullRange=K(e,s)===2}break;case 21946:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=K(e,s),u=zr[c]??null;this.currentTrack.info.colorSpace.transfer=u}break;case 21947:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=K(e,s),u=Ur[c]??null;this.currentTrack.info.colorSpace.primaries=u}break;case 30320:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(o,s))}break;case 30325:{if(this.currentTrack?.info?.type!=="video")break;let u=-Ya(e,s);try{this.currentTrack.info.rotation=Tt(u)}catch{}}break;case 225:{if(this.currentTrack?.info?.type!=="audio")break;this.readContiguousElements(e.slice(o,s))}break;case 181:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.sampleRate=Ya(e,s)}break;case 159:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.numberOfChannels=K(e,s)}break;case 25188:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.bitDepth=K(e,s)}break;case 187:{if(!this.currentSegment)break;this.readContiguousElements(e.slice(o,s)),this.currentCueTime=null}break;case 179:this.currentCueTime=K(e,s);break;case 183:{if(this.currentCueTime===null)break;p(this.currentSegment);let c={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(c),this.readContiguousElements(e.slice(o,s)),(c.trackId===-1||c.clusterPosition===-1)&&this.currentSegment.cuePoints.pop()}break;case 247:{let c=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!c)break;c.trackId=K(e,s)}break;case 241:{let c=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!c)break;p(this.currentSegment),c.clusterPosition=this.currentSegment.dataStartPos+K(e,s)}break;case 231:{if(!this.currentCluster)break;this.currentCluster.timestamp=K(e,s)}break;case 163:{if(!this.currentCluster)break;let c=Mi(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let l=wn(e),m=O(e),d=m>>1&3,f=!!(m&128);u.track.info?.type==="audio"&&u.track.info.codec&&(f=!0);let h=B(e,s-(e.filePos-o)),b=u.track.decodingInstructions.length>0;u.blocks.push({timestamp:l,duration:0,isKeyFrame:f,data:h,lacing:d,decoded:!b,mainAdditional:null})}break;case 160:{if(!this.currentCluster)break;this.readContiguousElements(e.slice(o,s)),this.currentBlock=null}break;case 161:{if(!this.currentCluster)break;let c=Mi(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let l=wn(e),d=O(e)>>1&3,f=B(e,s-(e.filePos-o)),h=u.track.decodingInstructions.length>0;this.currentBlock={timestamp:l,duration:0,isKeyFrame:!0,data:f,lacing:d,decoded:!h,mainAdditional:null},u.blocks.push(this.currentBlock)}break;case 30113:this.readContiguousElements(e.slice(o,s));break;case 166:{if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(o,s)),this.currentBlockAdditional.data&&this.currentBlockAdditional.addId===1&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null}break;case 165:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=B(e,s)}break;case 238:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=K(e,s)}break;case 155:{if(!this.currentBlock)break;this.currentBlock.duration=K(e,s)}break;case 251:{if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1}break;case 29555:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(o,s));break;case 25536:this.readContiguousElements(e.slice(o,s));break;case 26826:K(e,s)!==50&&(this.currentTagTargetIsMovie=!1);break;case 25541:case 25545:case 25540:case 25542:this.currentTagTargetIsMovie=!1;break;case 26568:{if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(o,s))}break;case 17827:this.currentSimpleTagName=Bi(e,s);break;case 17543:{if(!this.currentSimpleTagName)break;let c=Bi(e,s);this.processTagValue(this.currentSimpleTagName,c)}break;case 17541:{if(!this.currentSimpleTagName)break;let c=B(e,s);this.processTagValue(this.currentSimpleTagName,c)}break;case 24999:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(o,s));let c=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(c.raw??={},c.raw[this.currentAttachedFile.fileUid.toString()]=new Kt(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){let u=this.currentAttachedFile.fileName,l="unknown";if(u){let m=u.toLowerCase();m.startsWith("cover.")?l="coverFront":m.startsWith("back.")&&(l="coverBack")}c.images??=[],c.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:l,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case 18094:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=El(e,s)}break;case 18030:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=Bi(e,s)}break;case 18016:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=Tr(e,s)}break;case 18012:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=B(e,s)}break;case 18046:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=Bi(e,s)}break;case 28032:{if(!this.currentTrack)break;this.readContiguousElements(e.slice(o,s)),this.currentTrack.decodingInstructions.sort((c,u)=>u.order-c.order)}break;case 25152:this.currentDecodingInstruction={order:0,scope:1,data:null},this.readContiguousElements(e.slice(o,s)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case 20529:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=K(e,s)}break;case 20530:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=K(e,s)}break;case 20532:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:0,settings:null},this.readContiguousElements(e.slice(o,s))}break;case 16980:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.algorithm=K(e,s)}break;case 16981:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.settings=B(e,s)}break;case 20533:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}break}return e.filePos=o+s,!0}decodeBlockData(e,r){p(e.decodingInstructions.length>0);let i=r;for(let a of e.decodingInstructions)switch(p(a.data),a.data.type){case"decompress":switch(a.data.algorithm){case 3:if(a.data.settings&&a.data.settings.length>0){let s=a.data.settings,o=new Uint8Array(s.length+i.length);o.set(s,0),o.set(i,s.length),i=o}break;default:}break;default:}return i}processTagValue(e,r){if(!this.currentSegment?.metadataTags)return;let i=this.currentSegment.metadataTags;if(i.raw??={},i.raw[e]??=r,typeof r=="string")switch(e.toLowerCase()){case"title":i.title??=r;break;case"description":i.description??=r;break;case"artist":i.artist??=r;break;case"album":i.album??=r;break;case"album_artist":i.albumArtist??=r;break;case"genre":i.genre??=r;break;case"comment":i.comment??=r;break;case"lyrics":i.lyrics??=r;break;case"date":{let a=new Date(r);Number.isNaN(a.getTime())||(i.date??=a)}break;case"track_number":case"part_number":{let a=r.split("/"),s=Number.parseInt(a[0],10),o=a[1]&&Number.parseInt(a[1],10);Number.isInteger(s)&&s>0&&(i.trackNumber??=s),o&&Number.isInteger(o)&&o>0&&(i.tracksTotal??=o)}break;case"disc_number":case"disc":{let a=r.split("/"),s=Number.parseInt(a[0],10),o=a[1]&&Number.parseInt(a[1],10);Number.isInteger(s)&&s>0&&(i.discNumber??=s),o&&Number.isInteger(o)&&o>0&&(i.discsTotal??=o)}break}}},ts=class{constructor(t){this.internalTrack=t;this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let t=this.internalTrack.demuxer,e=this.internalTrack.trackBacking.getType(),r=0;for(let i of t.segments)for(let a of i.tracks)if(a.trackBacking.getType()===e&&r++,a===this.internalTrack)break;return r}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(){let t=this.internalTrack.segment;if(t.duration<=0)return null;let e=t.duration/t.timestampFactor,r=await this.getFirstPacket({metadataOnly:!0});return e+=r?.timestamp??0,e}async getLiveRefreshInterval(){return null}async getFirstPacket(t){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,t)}intoTimescale(t){return Lt(t*this.internalTrack.segment.timestampFactor)}async getPacket(t,e){let r=this.intoTimescale(t);return this.performClusterLookup(null,i=>{let a=i.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=q(a.presentationTimestamps,r,u=>u.timestamp),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(i===r.cluster){let a=i.trackData.get(this.internalTrack.id);if(r.blockIndex+1{let a=i.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=lr(a.presentationTimestamps,u=>a.blocks[u.blockIndex].isKeyFrame&&u.timestamp<=r),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(i===r.cluster){let s=i.trackData.get(this.internalTrack.id).blocks.findIndex((o,c)=>o.isKeyFrame&&c>r.blockIndex);if(s!==-1)return{blockIndex:s,correctBlockFound:!0}}else{let a=i.trackData.get(this.internalTrack.id);if(a&&a.firstKeyFrameTimestamp!==null){let s=a.blocks.findIndex(o=>o.isKeyFrame);return p(s!==-1),{blockIndex:s,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,e)}async fetchPacketInCluster(t,e,r){if(e===-1)return null;let a=t.trackData.get(this.internalTrack.id).blocks[e];p(a),a.decoded||(a.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,a.data),a.decoded=!0);let s=r.metadataOnly?pe:a.data,o=a.timestamp/this.internalTrack.segment.timestampFactor,c=a.duration/this.internalTrack.segment.timestampFactor,u={};a.mainAdditional&&this.internalTrack.info?.type==="video"&&this.internalTrack.info.alphaMode&&(u.alpha=r.metadataOnly?pe:a.mainAdditional,u.alphaByteLength=a.mainAdditional.byteLength);let l=new Q(s,a.isKeyFrame?"key":"delta",o,c,t.dataStartPos+e,a.data.byteLength,u);return this.packetToClusterLocation.set(l,{cluster:t,blockIndex:e}),l}async performClusterLookup(t,e,r,i,a){let{demuxer:s,segment:o}=this.internalTrack,c=null,u=null,l=-1;if(t){let{blockIndex:y,correctBlockFound:k}=e(t);if(k)return this.fetchPacketInCluster(t,y,a);y!==-1&&(u=t,l=y)}let m=q(this.internalTrack.cuePoints,r,y=>y.time),d=m!==-1?this.internalTrack.cuePoints[m]:null,f=q(this.internalTrack.clusterPositionCache,r,y=>y.startTimestamp),h=f!==-1?this.internalTrack.clusterPositionCache[f]:null,b=Math.max(d?.clusterPosition??0,h?.elementStartPos??0)||null,g;for(t?b===null||t.elementStartPos>=b?(g=t.elementEndPos,c=t):g=b:g=b??o.clusterSeekStartPos;o.elementEndPos===null||g<=o.elementEndPos-Ve;){if(c){let A=c.trackData.get(this.internalTrack.id);if(A&&A.startTimestamp>i)break}let y=s.reader.requestSliceRange(g,Ve,pt);if(y instanceof Promise&&(y=await y),!y)break;let k=g,T=ht(y);if(!T||!Fi.includes(T.id)&&T.id!==236){let A=await tc(s.reader,k,Fi,Math.min(o.elementEndPos??1/0,k+Rl));if(A){g=A;continue}else break}let w=T.id,S=T.size,x=y.filePos;if(w===524531317){c=await s.readCluster(k,o),S=c.elementEndPos-x;let{blockIndex:A,correctBlockFound:C}=e(c);if(C)return this.fetchPacketInCluster(c,A,a);A!==-1&&(u=c,l=A)}S===void 0&&(p(w!==524531317),S=(await Za(s.reader,x,An,o.elementEndPos)).pos-x);let P=x+S;if(o.elementEndPos===null){let A=s.reader.requestSliceRange(P,Ve,pt);if(A instanceof Promise&&(A=await A),!A)break;if($a(A)===408125543){o.elementEndPos=P;break}}g=P}if(d&&(!u||u.elementStartPos{let e=null;(this.internalTrack.info.codec==="vp9"||this.internalTrack.info.codec==="av1"||this.internalTrack.info.codec==="avc"&&!this.internalTrack.info.codecDescription||this.internalTrack.info.codec==="hevc"&&!this.internalTrack.info.codecDescription)&&(e=await this.getFirstPacket({}));let i={codec:Ti({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:this.internalTrack.info.codec==="avc"&&e?Ai(e.data):null,hevcCodecInfo:this.internalTrack.info.codec==="hevc"&&e?xi(e.data):null,vp9CodecInfo:this.internalTrack.info.codec==="vp9"&&e?Fa(e.data):null,av1CodecInfo:this.internalTrack.info.codec==="av1"&&e?Ma(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)&&(i.displayAspectWidth=this.internalTrack.info.squarePixelWidth,i.displayAspectHeight=this.internalTrack.info.squarePixelHeight),i})():null}},nc=class extends ts{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??={codec:wi({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}};var xn=async(n,t,e)=>{let i=t;for(;e===null||i=4;){let o=s.filePos,c=R(s),u=n.fileSize!==null?n.fileSize-i:null,l=Gr(c,u);if(l.header)return{header:l.header,startPos:i};s.filePos=o+l.bytesAdvanced,i=s.filePos}}return null};var rs=class extends be{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 ve;this.lastSampleLoaded=!1;this.lastLoadedPos=0;this.nextTimestampInSamples=0;this.reader=e._reader}async readMetadata(){return 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 ac(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let c=this.reader.requestSlice(this.lastLoadedPos,qe);if(c instanceof Promise&&(c=await c),!c){this.lastSampleLoaded=!0;return}let u=gt(c);if(!u)break;this.lastLoadedPos=c.filePos+u.size}let e=await xn(this.reader,this.lastLoadedPos,this.reader.fileSize);if(!e){this.lastSampleLoaded=!0;return}let r=e.header;this.lastLoadedPos=e.startPos+r.totalSize-1;let i=gr(r.mpegVersionId,r.channel),a=this.reader.requestSlice(e.startPos+i,4);if(a instanceof Promise&&(a=await a),a){let c=R(a);if(c===hr||c===Si){if(!this.xingData){let l=this.reader.requestSlice(e.startPos+i+4,12);if(l instanceof Promise&&(l=await l),l){let m=B(l,12),d=U(m),f=d.getUint32(0,!1);this.xingData={frameCount:f&1?d.getUint32(4,!1):null,fileSize:f&2?d.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=r,this.firstFrameHeaderPos=e.startPos),r.sampleRate!==this.firstFrameHeader.sampleRate&&console.warn(`MP3 changed sample rate mid-file: ${this.firstFrameHeader.sampleRate} Hz to ${r.sampleRate} Hz. Might be a bug, so please report this file.`);let s=r.audioSamplesInFrame/this.firstFrameHeader.sampleRate,o={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:s,dataStart:e.startPos,dataSize:r.totalSize};this.loadedSamples.push(o),this.nextTimestampInSamples+=r.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){let e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let r=0,i=!1;for(;;){let a=this.reader.requestSlice(r,qe);if(a instanceof Promise&&(a=await a),!a)break;let s=gt(a);if(!s)break;i=!0;let o=this.reader.requestSlice(a.filePos,s.size);if(o instanceof Promise&&(o=await o),!o)break;Oi(o,s,this.metadataTags),r=a.filePos+s.size}if(!i&&this.reader.fileSize!==null&&this.reader.fileSize>=Pn){let a=this.reader.requestSlice(this.reader.fileSize-Pn,Pn);a instanceof Promise&&(a=await a),p(a),ie(a,3)==="TAG"&&Fl(a,this.metadataTags)}return this.metadataTags}finally{e()}}},ac=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return p(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(){let t=this.demuxer;if(p(t.firstFrameHeader!==null),p(t.firstFrameHeaderPos!==null),t.xingData){if(t.xingData.frameCount!==null)return t.xingData.frameCount*t.firstFrameHeader.audioSamplesInFrame/t.firstFrameHeader.sampleRate}else if(t.reader.fileSize!==null){let e=Ju(t.firstFrameHeader.lowSamplingFrequency,t.firstFrameHeader.layer,t.firstFrameHeader.bitrate,t.firstFrameHeader.sampleRate),r=(t.reader.fileSize-t.firstFrameHeaderPos)/e;return Math.round(r)*t.firstFrameHeader.audioSamplesInFrame/t.firstFrameHeader.sampleRate}return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ee}getCodec(){return"mp3"}getInternalCodecId(){return null}getNumberOfChannels(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.channel===3?1:2}getSampleRate(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...Se}}async getDecoderConfig(){return p(this.demuxer.firstFrameHeader),{codec:"mp3",numberOfChannels:this.demuxer.firstFrameHeader.channel===3?1:2,sampleRate:this.demuxer.firstFrameHeader.sampleRate}}async getPacketAtIndex(t,e){if(t===-1)return null;let r=this.demuxer.loadedSamples[t];if(!r)return null;let i;if(e.metadataOnly)i=pe;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;i=B(a,r.dataSize)}return new Q(i,"key",r.timestamp,r.duration,t,r.dataSize)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let i=Nt(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(i===-1)throw new Error("Packet was not created from this track.");let a=i+1;for(;a>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(a,e)}finally{r()}}async getPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{for(;;){let i=q(this.demuxer.loadedSamples,t,a=>a.timestamp);if(i===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,e);if(i>=0&&i+1>>0&4294967295}var is=n=>{let t=U(n),e=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let i=0;i>>24^a])>>>0}return t.setUint32(22,e,!0),r},ns=(n,t,e)=>{let r=0,i=null;if(n.length>0)if(t.codec==="vorbis"){p(t.vorbisInfo);let a=t.vorbisInfo.modeBlockflags.length,o=(1<<_u(a-1))-1<<1,c=(n[0]&o)>>1;if(c>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let u=e,l=t.vorbisInfo.modeBlockflags[c];if(i=t.vorbisInfo.blocksizes[l],l===1){let m=(o|1)+1,d=n[0]&m?1:0;u=t.vorbisInfo.blocksizes[d]}r=u!==null?u+i>>2:0}else t.codec==="opus"&&(r=ll(n).durationInSamples);return{durationInSamples:r,vorbisBlockSize:i}},as=n=>{let t="audio/ogg";if(n.codecStrings){let e=[...new Set(n.codecStrings)];t+=`; codecs="${e.join(", ")}"`}return t};var wr=27,Xr=282,ss=Xr+255*255,Di=n=>{let t=n.filePos;if(jr(n)!==Cn)return null;n.skip(1);let r=O(n),i=Ol(n),a=jr(n),s=jr(n),o=jr(n),c=O(n),u=new Uint8Array(c);for(let f=0;ff+h,0),d=l+m;return{headerStartPos:t,totalSize:d,dataStartPos:t+l,dataSize:m,headerType:r,granulePosition:i,serialNumber:a,sequenceNumber:s,checksum:o,lacingValues:u}},Bl=(n,t)=>{for(;n.filePos>>8&255,a=e>>>16&255,s=e>>>24&255,o=79;if(!(r!==o&&i!==o&&a!==o&&s!==o)){if(n.skip(-4),e===Cn)return!0;n.skip(1)}}return!1};var os=class extends be{constructor(e){super(e);this.metadataPromise=null;this.bitstreams=[];this.trackBackings=[];this.metadataTags={};this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSliceRange(e,wr,Xr);if(r instanceof Promise&&(r=await r),!r)break;let i=Di(r);if(!i||!!!(i.headerType&2))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(let r of this.bitstreams){let i=await this.readPacket(r.bosPage,0);i&&(i.data.byteLength>=7&&i.data[0]===1&&i.data[1]===118&&i.data[2]===111&&i.data[3]===114&&i.data[4]===98&&i.data[5]===105&&i.data[6]===115?await this.readVorbisMetadata(i,r):i.data.byteLength>=8&&i.data[0]===79&&i.data[1]===112&&i.data[2]===117&&i.data[3]===115&&i.data[4]===72&&i.data[5]===101&&i.data[6]===97&&i.data[7]===100&&await this.readOpusMetadata(i,r),r.codecInfo.codec!==null&&this.trackBackings.push(new sc(r,this)))}})()}async readVorbisMetadata(e,r){let i=await this.findNextPacketStart(e);if(!i)return;let a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a||(i=await this.findNextPacketStart(a),!i))return;let s=await this.readPacket(i.startPage,i.startSegmentIndex);if(!s||a.data[0]!==3||s.data[0]!==5)return;let o=[],c=d=>{for(;o.push(Math.min(255,d)),!(d<255);)d-=255};c(e.data.length),c(a.data.length);let u=new Uint8Array(1+o.length+e.data.length+a.data.length+s.data.length);u[0]=2,u.set(o,1),u.set(e.data,1+o.length),u.set(a.data,1+o.length+e.data.length),u.set(s.data,1+o.length+e.data.length+a.data.length),r.codecInfo.codec="vorbis",r.description=u,r.lastMetadataPacket=s;let l=U(e.data);r.numberOfChannels=l.getUint8(11),r.sampleRate=l.getUint32(12,!0);let m=l.getUint8(28);r.codecInfo.vorbisInfo={blocksizes:[1<<(m&15),1<<(m>>4)],modeBlockflags:Ba(s.data).modeBlockflags},hn(a.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,r){let i=await this.findNextPacketStart(e);if(!i)return;let a=await this.readPacket(i.startPage,i.startSegmentIndex);if(!a)return;r.codecInfo.codec="opus",r.description=e.data,r.lastMetadataPacket=a;let s=yr(e.data);r.numberOfChannels=s.outputChannelCount,r.sampleRate=ot,r.codecInfo.opusInfo={preSkip:s.preSkip},hn(a.data.subarray(8),this.metadataTags)}async readPacket(e,r){p(rd+f.length,0);if(u===0)return null;let l=new Uint8Array(u),m=0;for(let d=0;dr.getDecoderConfig().then(i=>i?.codec??null)));return as({codecStrings:e.filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},sc=class{constructor(t,e){this.bitstream=t;this.demuxer=e;this.encodedPacketToMetadata=new WeakMap;this.sequentialScanCache=[];this.sequentialScanMutex=new ve;this.internalSampleRate=t.codecInfo.codec==="opus"?ot:t.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){let t=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return p(t!==-1),t+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 p(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 ee}getDisposition(){return{...Se,primary:!1}}granulePositionToTimestampInSamples(t){return this.bitstream.codecInfo.codec==="opus"?(p(this.bitstream.codecInfo.opusInfo),t-this.bitstream.codecInfo.opusInfo.preSkip):t}createEncodedPacketFromOggPacket(t,e,r){if(!t)return null;let{durationInSamples:i,vorbisBlockSize:a}=ns(t.data,this.bitstream.codecInfo,e.vorbisLastBlocksize),s=new Q(r.metadataOnly?pe:t.data,"key",Math.max(0,e.timestampInSamples)/this.internalSampleRate,i/this.internalSampleRate,t.endPage.headerStartPos+t.endSegmentIndex,t.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:t,timestampInSamples:e.timestampInSamples,durationInSamples:i,vorbisLastBlockSize:e.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(t){p(this.bitstream.lastMetadataPacket);let e=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!e)return null;let r=0;this.bitstream.codecInfo.codec==="opus"&&(p(this.bitstream.codecInfo.opusInfo),r-=this.bitstream.codecInfo.opusInfo.preSkip);let i=await this.demuxer.readPacket(e.startPage,e.startSegmentIndex);return this.createEncodedPacketFromOggPacket(i,{timestampInSamples:r,vorbisLastBlocksize:null},t)}async getNextPacket(t,e){let r=this.encodedPacketToMetadata.get(t);if(!r)throw new Error("Packet was not created from this track.");let i=await this.demuxer.findNextPacketStart(r.packet);if(!i)return null;let a=r.timestampInSamples+r.durationInSamples,s=await this.demuxer.readPacket(i.startPage,i.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:r.vorbisBlockSize},e)}async getPacket(t,e){if(this.demuxer.reader.fileSize===null)return this.getPacketSequential(t,e);let r=Lt(t*this.internalSampleRate);if(r===0)return this.getFirstPacket(e);if(r<0)return null;p(this.bitstream.lastMetadataPacket);let i=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!i)return null;let a=i.startPage,s=this.demuxer.reader.fileSize,o=[a];e:for(;a.headerStartPos+a.totalSizer?s=C.headerStartPos:(a=C,o.push(C));continue e}}let c=i.startPage;for(let k of o){if(k.granulePosition===a.granulePosition)break;(!c||k.headerStartPos>c.headerStartPos)&&(c=k)}let u=c,l=[u];for(;!(u.serialNumber===this.bitstream.serialNumber&&u.granulePosition===a.granulePosition);){let k=u.headerStartPos+u.totalSize,T=this.demuxer.reader.requestSliceRange(k,wr,Xr);T instanceof Promise&&(T=await T),p(T);let w=Di(T);p(w),u=w,u.serialNumber===this.bitstream.serialNumber&&l.push(u)}p(u.granulePosition!==-1);let m=null,d,f,h=u,b=0;if(u.headerStartPos===i.startPage.headerStartPos)d=this.granulePositionToTimestampInSamples(0),f=!0,m=0;else{d=0,f=!1;for(let w=u.lacingValues.length-1;w>=0;w--)if(u.lacingValues[w]<255){m=w+1;break}if(m===null)throw new Error("Invalid page with granule position: no packets end on this page.");b=m-1;let k={data:pe,endPage:h,endSegmentIndex:b};if(await this.demuxer.findNextPacketStart(k)){let w=Vl(l,u,m);p(w);let S=Dl(l,w.page,w.segmentIndex);S&&(u=S.page,m=S.segmentIndex)}else for(;;){let w=Vl(l,u,m);if(!w)break;let S=Dl(l,w.page,w.segmentIndex);if(!S)break;if(u=S.page,m=S.segmentIndex,w.page.headerStartPos!==h.headerStartPos){h=w.page,b=w.segmentIndex;break}}}let g=null,y=null;for(;u!==null;){p(m!==null);let k=await this.demuxer.readPacket(u,m);if(!k)break;if(!(u.headerStartPos===i.startPage.headerStartPos&&mr||Math.max(x.timestampInSamples,0)===r))break}let w=await this.demuxer.findNextPacketStart(k);if(!w)break;u=w.startPage,m=w.startSegmentIndex}return g}async getPacketSequential(t,e){let r=await this.sequentialScanMutex.acquire();try{let i=Lt(t*this.internalSampleRate);t=i/this.internalSampleRate;let a=q(this.sequentialScanCache,i,c=>c.timestampInSamples),s;if(a!==-1){let c=this.sequentialScanCache[a];s=this.createEncodedPacketFromOggPacket(c.packet,{timestampInSamples:c.timestampInSamples,vorbisLastBlocksize:c.vorbisLastBlockSize},e)}else s=await this.getFirstPacket(e);let o=0;for(;s&&s.timestampt)break;if(s=c,o++,o===100){o=0;let u=this.encodedPacketToMetadata.get(s);p(u),this.sequentialScanCache.length>0&&p(X(this.sequentialScanCache).timestampInSamples<=u.timestampInSamples),this.sequentialScanCache.push(u)}}return s}finally{r()}}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}},Dl=(n,t,e)=>{let r=t,i=e;e:for(;;){for(i--,i;i>=0;i--)if(r.lacingValues[i]<255){i++;break e}if(p(i===-1),!(r.headerType&1)){i=0;break}let s=Wo(n,o=>o.headerStartPos{if(e>0)return{page:t,segmentIndex:e-1};let r=Wo(n,i=>i.headerStartPos{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),p(e);let r=ie(e,4),i=r!=="RIFX",a=r==="RF64",s=tr(e,i),o=a?this.reader.fileSize:Math.min(s+8,this.reader.fileSize??1/0);if(ie(e,4)!=="WAVE")throw new Error("Invalid WAVE file - wrong format");let u=0,l=null,m=e.filePos;for(;o===null||m=18&&s!==357){let m=Ui(a,i),d=r-18;if(Math.min(d,m)>=22&&s===65534){a.skip(6);let h=B(a,16);s=h[0]|h[1]<<8}}(s===7||s===6)&&(l=8),this.audioInfo={format:s,numberOfChannels:o,sampleRate:c,sampleSizeInBytes:Math.ceil(l/8),blockSizeInBytes:u}}async parseListChunk(e,r,i){let a=this.reader.requestSlice(e,r);if(a instanceof Promise&&(a=await a),!a)return;let s=ie(a,4);if(s!=="INFO"&&s!=="INF0")return;let o=a.filePos;for(;o<=e+r-8;){a.filePos=o;let c=ie(a,4),u=tr(a,i),l=B(a,u),m=0;for(let f=0;f0&&(this.metadataTags.trackNumber??=h),b&&Number.isInteger(b)&&b>0&&(this.metadataTags.tracksTotal??=b)}break;case"ICRD":case"IDIT":{let f=new Date(d);Number.isNaN(f.getTime())||(this.metadataTags.date??=f)}break;case"YEAR":{let f=Number.parseInt(d,10);Number.isInteger(f)&&f>0&&(this.metadataTags.date??=new Date(f,0,1))}break;case"IGNR":case"GENR":this.metadataTags.genre??=d;break;case"ICMT":case"CMNT":case"COMM":this.metadataTags.comment??=d;break}o+=8+u+(u&1)}}async parseId3Chunk(e,r){let i=this.reader.requestSlice(e,r);if(i instanceof Promise&&(i=await i),!i)return;let a=gt(i);if(a){let s=r-qe;if(a.size=Math.min(a.size,s),a.size>0){let o=i.slice(e+qe,a.size);Oi(o,a,this.metadataTags)}}}getCodec(){if(p(this.audioInfo),this.audioInfo.format===7)return"ulaw";if(this.audioInfo.format===6)return"alaw";if(this.audioInfo.format===1){if(this.audioInfo.sampleSizeInBytes===1)return"pcm-u8";if(this.audioInfo.sampleSizeInBytes===2)return"pcm-s16";if(this.audioInfo.sampleSizeInBytes===3)return"pcm-s24";if(this.audioInfo.sampleSizeInBytes===4)return"pcm-s32"}return this.audioInfo.format===3&&this.audioInfo.sampleSizeInBytes===4?"pcm-f32":null}async getMimeType(){return"audio/wav"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},Vi=2048,oc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){let t=this.demuxer.getCodec();return t?(p(this.demuxer.audioInfo),{codec:t,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return p(this.demuxer.dataSize!==-1),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return ee}getDisposition(){return{...Se}}async getPacketAtIndex(t,e){p(t>=0),p(this.demuxer.audioInfo);let r=t*Vi*this.demuxer.audioInfo.blockSizeInBytes;if(r>=this.demuxer.dataSize)return null;let i=Math.min(Vi*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-r);if(this.demuxer.reader.fileSize===null){let c=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,i);if(c instanceof Promise&&(c=await c),!c)return null}let a;if(e.metadataOnly)a=pe;else{let c=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,i);c instanceof Promise&&(c=await c),p(c),a=B(c,i)}let s=t*Vi/this.demuxer.audioInfo.sampleRate,o=i/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(t,this.demuxer.lastKnownPacketIndex),new Q(a,"key",s,o,t,i)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getPacket(t,e){p(this.demuxer.audioInfo);let r=Math.floor(Math.min(t*this.demuxer.audioInfo.sampleRate/Vi,(this.demuxer.dataSize-1)/(Vi*this.demuxer.audioInfo.blockSizeInBytes)));if(r<0)return null;let i=await this.getPacketAtIndex(r,e);if(i)return i;if(r===0)return null;p(this.demuxer.reader.fileSize===null);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,e);for(;a;){let s=await this.getNextPacket(a,e);if(!s)break;a=s}return a}getNextPacket(t,e){p(this.demuxer.audioInfo);let r=Math.round(t.timestamp*this.demuxer.audioInfo.sampleRate/Vi);return this.getPacketAtIndex(r+1,e)}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}};var rr=7,Ke=9,Ue=n=>{let t=n.filePos,e=B(n,9),r=new H(e);if(r.readBits(12)!==4095||(r.skipBits(1),r.readBits(2)!==0))return null;let s=r.readBits(1),o=r.readBits(2)+1,c=r.readBits(4);if(c===15)return null;r.skipBits(1);let u=r.readBits(3);if(u===0)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);let l=r.readBits(13);r.skipBits(11);let m=r.readBits(2)+1;if(m!==1)throw new Error("ADTS frames with more than one AAC frame are not supported.");let d=null;return s===1?n.filePos-=2:d=r.readBits(16),{objectType:o,samplingFrequencyIndex:c,channelConfiguration:u,frameLength:l,numberOfAacFrames:m,crcCheck:d,startPos:t}};var In=1024,us=class extends be{constructor(e){super(e);this.metadataPromise=null;this.firstFrameHeader=null;this.loadedSamples=[];this.metadataTags=null;this.trackBackings=[];this.readingMutex=new ve;this.lastSampleLoaded=!1;this.lastLoadedPos=0;this.nextTimestampInSamples=0;this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();p(this.firstFrameHeader),this.trackBackings=[new uc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let o=this.reader.requestSlice(this.lastLoadedPos,qe);if(o instanceof Promise&&(o=await o),!o){this.lastSampleLoaded=!0;return}let c=gt(o);if(!c)break;this.lastLoadedPos=o.filePos+c.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,rr,Ke);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let r=Ue(e);if(!r){this.lastSampleLoaded=!0;return}if(this.reader.fileSize!==null&&r.startPos+r.frameLength>this.reader.fileSize){this.lastSampleLoaded=!0;return}this.firstFrameHeader||(this.firstFrameHeader=r);let i=Xe[r.samplingFrequencyIndex];p(i!==void 0);let a=In/i,s={timestamp:this.nextTimestampInSamples/i,duration:a,dataStart:r.startPos,dataSize:r.frameLength};this.loadedSamples.push(s),this.nextTimestampInSamples+=In,this.lastLoadedPos=r.startPos+r.frameLength}async getMimeType(){return"audio/aac"}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){let e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let r=0;for(;;){let i=this.reader.requestSlice(r,qe);if(i instanceof Promise&&(i=await i),!i)break;let a=gt(i);if(!a)break;let s=this.reader.requestSlice(i.filePos,a.size);if(s instanceof Promise&&(s=await s),!s)break;Oi(s,a,this.metadataTags),r=i.filePos+a.size}return this.metadataTags}finally{e()}}},uc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/In}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 ee}getCodec(){return"aac"}getInternalCodecId(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){p(this.demuxer.firstFrameHeader);let t=Ct[this.demuxer.firstFrameHeader.channelConfiguration];return p(t!==void 0),t}getSampleRate(){p(this.demuxer.firstFrameHeader);let t=Xe[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return p(t!==void 0),t}getDisposition(){return{...Se}}async getDecoderConfig(){return p(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(t,e){if(t===-1)return null;let r=this.demuxer.loadedSamples[t];if(!r)return null;let i;if(e.metadataOnly)i=pe;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;i=B(a,r.dataSize)}return new Q(i,"key",r.timestamp,r.duration,t,r.dataSize)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let i=Nt(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(i===-1)throw new Error("Packet was not created from this track.");let a=i+1;for(;a>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(a,e)}finally{r()}}async getPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{for(;;){let i=q(this.demuxer.loadedSamples,t,a=>a.timestamp);if(i===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(i,e);if(i>=0&&i+1n===0?null:n===1?192:n>=2&&n<=5?144*2**n:n===6?"uncommon-u8":n===7?"uncommon-u16":n>=8&&n<=15?2**n:null,Ul=(n,t)=>{switch(n){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}},ds=n=>{let t=0,e=new H(B(n,1));for(;e.readBits(1)===1;)t++;if(t===0)return e.readBits(7);let r=[],i=t-1,a=new H(B(n,i)),s=8-t-1;for(let c=0;cc|u<{if(t==="uncommon-u16")return ce(n)+1;if(t==="uncommon-u8")return O(n)+1;if(typeof t=="number")return t;ae(t),p(!1)},zl=(n,t)=>t==="uncommon-u16"?ce(n):t==="uncommon-u16-10"?ce(n)*10:t==="uncommon-u8"?O(n):typeof t=="number"?t:null,Nl=n=>{let e=0;for(let r of n){e^=r;for(let i=0;i<8;i++)(e&128)!==0?e=e<<1^7:e<<=1,e&=255}return e};var fs=class extends be{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 ve;this.lastSampleLoaded=!1;this.reader=e._reader}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTrackBackings(){return await this.readMetadata(),p(this.trackBacking),[this.trackBacking]}async getMimeType(){return"audio/flac"}async readMetadata(){let e=4;return this.metadataPromise??=(async()=>{for(;this.reader.fileSize===null||em.end-i)return{num:d.num,blockSize:d.blockSize,sampleRate:d.sampleRate,size:m.end-e,isLastFrame:!0};if(O(m)===255){let h=m.filePos,b=O(m),g=this.blockingBit===1?249:248;if(b!==g){m.filePos=h;continue}m.skip(-2);let y=m.filePos-e,k=this.readFlacFrameHeader({slice:m,isFirstPacket:!1});if(!k){m.filePos=h;continue}if(this.blockingBit===0){if(k.num-d.num!==1){m.filePos=h;continue}}else if(k.num-d.num!==d.blockSize){m.filePos=h;continue}return{num:d.num,blockSize:d.blockSize,sampleRate:d.sampleRate,size:y,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:r}){let i=e.filePos,a=B(e,4),s=new H(a);if(s.readBits(15)!==32764)return null;if(this.blockingBit===null){p(r);let y=s.readBits(1);this.blockingBit=y}else if(this.blockingBit===1){if(p(!r),s.readBits(1)!==1)return null}else if(this.blockingBit===0){if(p(!r),s.readBits(1)!==0)return null}else throw new Error("Invalid blocking bit");let c=ls(s.readBits(4));if(!c)return null;p(this.audioInfo);let u=Ul(s.readBits(4),this.audioInfo.sampleRate);if(!u||(s.readBits(4),s.readBits(3),s.readBits(1)!==0))return null;let m=ds(e),d=ms(e,c),f=zl(e,u);if(f===null||f!==this.audioInfo.sampleRate)return null;let h=e.filePos-i,b=O(e);e.skip(-h),e.skip(-1);let g=Nl(B(e,h));return b!==g?null:{num:m,blockSize:d,sampleRate:f}}async advanceReader(){await this.readMetadata(),p(this.lastLoadedPos!==null),p(this.audioInfo);let e=this.lastLoadedPos,r=await this.readNextFlacFrame({startPos:e,isFirstPacket:this.loadedSamples.length===0});if(!r){this.lastSampleLoaded=!0;return}let i=this.loadedSamples[this.loadedSamples.length-1],s={blockOffset:i?i.blockOffset+i.blockSize:0,blockSize:r.blockSize,byteOffset:e,byteSize:r.size};if(this.lastLoadedPos=this.lastLoadedPos+r.size,this.loadedSamples.push(s),r.isLastFrame){this.lastSampleLoaded=!0;return}}},lc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ee}getTimeResolution(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.totalSamples===0?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...Se}}async getDecoderConfig(){return p(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(t,e){if(p(this.demuxer.audioInfo),t<0)throw new Error("Timestamp cannot be negative");let r=await this.demuxer.readingMutex.acquire();try{for(;;){let i=q(this.demuxer.loadedSamples,t,c=>c.blockOffset/this.demuxer.audioInfo.sampleRate);if(i===-1){await this.demuxer.advanceReader();continue}let a=this.demuxer.loadedSamples[i],s=a.blockOffset/this.demuxer.audioInfo.sampleRate,o=a.blockSize/this.demuxer.audioInfo.sampleRate;if(s+o<=t){if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,e);await this.demuxer.advanceReader();continue}return this.getPacketAtIndex(i,e)}}finally{r()}}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let i=t.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,e)}finally{r()}}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}async getPacketAtIndex(t,e){let r=this.demuxer.loadedSamples[t];if(!r)return null;let i;if(e.metadataOnly)i=pe;else{let o=this.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(o instanceof Promise&&(o=await o),!o)return null;i=B(o,r.byteSize)}p(this.demuxer.audioInfo);let a=r.blockOffset/this.demuxer.audioInfo.sampleRate,s=r.blockSize/this.demuxer.audioInfo.sampleRate;return new Q(i,"key",a,s,t,r.byteSize)}async getFirstPacket(t){for(;this.demuxer.loadedSamples.length===0&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,t)}};var ps=n=>{let t="video/MP2T",e=[...new Set(n.filter(Boolean))];return e.length>0&&(t+=`; codecs="${e.join(", ")}"`),t};var Hl="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.",Ll=new Set,hs=class extends be{constructor(e){super(e);this.metadataPromise=null;this.elementaryStreams=[];this.trackBackingEntries=[];this.packetOffset=0;this.packetStride=-1;this.sectionEndPositions=[];this.seekChunkSize=5*1024*1024;this.minReferencePointByteDistance=-1;this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=205,r=this.reader.requestSlice(0,e);r instanceof Promise&&(r=await r),p(r);let i=B(r,e);if(i[0]===71&&i[188]===71)this.packetOffset=0,this.packetStride=188;else if(i[0]===71&&i[204]===71)this.packetOffset=0,this.packetStride=204;else if(i[4]===71&&i[196]===71)this.packetOffset=4,this.packetStride=192;else throw new Error("Unreachable.");let a=256;this.minReferencePointByteDistance=a*this.packetStride;let s=this.packetOffset,o=null,c=!1,u=!1;for(;;){let l=await this.readPacketHeader(s);if(!l)break;if(l.payloadUnitStartIndicator===0){s+=this.packetStride;continue}let m=await this.readSection(s,!0,!u);if(!m)break;let d=3,f=32,h=!1;if(!u&&m.pid!==0&&!(m.payload[0]===0&&m.payload[1]===0&&m.payload[2]===1)){let y=new H(m.payload),k=y.readAlignedByte();y.skipBits(8*k),h=y.readBits(8)===2}if(m.pid===0&&!c){let g=new H(m.payload),y=g.readAlignedByte();g.skipBits(8*y),g.skipBits(14);let k=g.readBits(10);for(g.skipBits(40);8*(k+d)-g.pos>f;){let T=g.readBits(16);g.skipBits(3);let w=g.readBits(13);if(T!==0){if(o!==null)throw new Error("Only files with a single program are supported.");o=w}}if(o===null)throw new Error("Program Association Table must link to a Program Map Table.");c=!0}else if((m.pid===o||h)&&!u){let g=new H(m.payload),y=g.readAlignedByte();g.skipBits(8*y),g.skipBits(12);let k=g.readBits(12);g.skipBits(43);let T=g.readBits(13);g.skipBits(6);let w=g.readBits(10);for(g.skipBits(8*w);8*(k+d)-g.pos>f;){let S=g.readBits(8);g.skipBits(3);let x=g.readBits(13);g.skipBits(6);let P=g.readBits(10),A=g.pos+8*P,C=!1,I=!1;for(;g.posy.pid===m.pid);e:if(g&&!g.initialized){let y=zi(m,!0);if(!y)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${g.pid}`);if(g.firstSection=m,g.canBeTrustedWithKeyPackets=m.randomAccessIndicator===1,this.input._initInput){let w=(await this.input._initInput._getDemuxer()).elementaryStreams.find(S=>S.pid===m.pid&&S.info.codec===g.info.codec);if(w){g.info=w.info,g.initialized=!0;break e}}let k=new Yr(g,y);if(g.info.type==="video"){for(;;){let T=k;if(T.suppliedPacket=null,await k.markNextPacket(),g.info.codec==="avc"){if(!k.suppliedPacket)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.");if(g.info.avcCodecInfo=Ai(k.suppliedPacket.data),!g.info.avcCodecInfo)continue;let w=g.info.avcCodecInfo.sequenceParameterSets[0];p(w);let S=pn(w);g.info.width=S.displayWidth,g.info.height=S.displayHeight;let x=S.pixelAspectRatio.num,P=S.pixelAspectRatio.den;x>0&&P>0&&(x>P?(g.info.squarePixelWidth=Math.round(g.info.width*x/P),g.info.squarePixelHeight=g.info.height):(g.info.squarePixelWidth=g.info.width,g.info.squarePixelHeight=Math.round(g.info.height*P/x))),g.info.colorSpace={primaries:Ur[S.colourPrimaries],transfer:zr[S.transferCharacteristics],matrix:Nr[S.matrixCoefficients],fullRange:!!S.fullRangeFlag},g.info.reorderSize=S.maxDecFrameBuffering;break}else if(g.info.codec==="hevc"){if(!k.suppliedPacket)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");if(g.info.hevcCodecInfo=xi(k.suppliedPacket.data),!g.info.hevcCodecInfo)continue;let S=g.info.hevcCodecInfo.arrays.find(P=>P.nalUnitType===33).nalUnits[0];p(S);let x=jo(S);g.info.width=x.displayWidth,g.info.height=x.displayHeight,x.pixelAspectRatio.num>x.pixelAspectRatio.den?(g.info.squarePixelWidth=Math.round(g.info.width*x.pixelAspectRatio.num/x.pixelAspectRatio.den),g.info.squarePixelHeight=g.info.height):(g.info.squarePixelWidth=g.info.width,g.info.squarePixelHeight=Math.round(g.info.height*x.pixelAspectRatio.den/x.pixelAspectRatio.num)),g.info.colorSpace={primaries:Ur[x.colourPrimaries],transfer:zr[x.transferCharacteristics],matrix:Nr[x.matrixCoefficients],fullRange:!!x.fullRangeFlag},g.info.reorderSize=x.maxDecFrameBuffering;break}else throw new Error("Unhandled.")}g.info.decoderConfig={codec:Ti({width:g.info.width,height:g.info.height,codec:g.info.codec,codecDescription:null,colorSpace:g.info.colorSpace,avcType:1,avcCodecInfo:g.info.avcCodecInfo,hevcCodecInfo:g.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null}),codedWidth:g.info.width,codedHeight:g.info.height,colorSpace:g.info.colorSpace},(g.info.width!==g.info.squarePixelWidth||g.info.height!==g.info.squarePixelHeight)&&(g.info.decoderConfig.displayAspectWidth=g.info.squarePixelWidth,g.info.decoderConfig.displayAspectHeight=g.info.squarePixelHeight),g.initialized=!0}else{if(await k.markNextPacket(),!k.suppliedPacket)throw new Error(`Couldn't parse first media packet for Elementary Stream with PID ${g.pid}`);if(g.info.codec==="aac"){let T=ye.tempFromBytes(k.suppliedPacket.data),w=Ue(T);if(!w)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");g.info.aacCodecInfo={isMpeg2:!1,objectType:w.objectType},g.info.numberOfChannels=Ct[w.channelConfiguration],g.info.sampleRate=Xe[w.samplingFrequencyIndex]}else if(g.info.codec==="mp3"){let T=R(ye.tempFromBytes(k.suppliedPacket.data)),w=Gr(T,k.suppliedPacket.data.byteLength);if(!w.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");g.info.numberOfChannels=w.header.channel===3?1:2,g.info.sampleRate=w.header.sampleRate}else if(g.info.codec==="ac3"){let T=Oa(k.suppliedPacket.data);if(!T)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(T.fscod===3)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");g.info.numberOfChannels=bn[T.acmod]+T.lfeon,g.info.sampleRate=Qr[T.fscod]}else if(g.info.codec==="eac3"){let T=Da(k.suppliedPacket.data);if(!T)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");let w=Va(T);if(w===null)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");g.info.numberOfChannels=Ua(T),g.info.sampleRate=w}else throw new Error("Unhandled.");g.info.decoderConfig={codec:wi({codec:g.info.codec,codecDescription:null,aacCodecInfo:g.info.aacCodecInfo}),numberOfChannels:g.info.numberOfChannels,sampleRate:g.info.sampleRate},g.initialized=!0}}}if(u&&this.elementaryStreams.every(g=>g.initialized))break;s+=this.packetStride}if(!u)throw c?new Error("No Program Map Table found in the file."):new Error("No Program Association Table found in the file.");for(let l of this.elementaryStreams)l.info.type==="video"?this.trackBackingEntries.push(new dc(l)):this.trackBackingEntries.push(new mc(l))})()}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){await this.readMetadata();let e=await Promise.all(this.trackBackingEntries.map(r=>r.getDecoderConfig().then(i=>i?.codec??null)));return ps(e)}async readSection(e,r,i=!1){let a=e,s=e,o=[],c=0,u=null,l=!0,m=0;for(;;){let f=await this.readPacket(s);if(s+=this.packetStride,!f)break;if(u){if(f.pid!==u.pid){if(i)break;continue}if(f.payloadUnitStartIndicator===1)break}else{if(f.payloadUnitStartIndicator===0)break;u=f}let h=!!(f.adaptationFieldControl&2),b=!!(f.adaptationFieldControl&1),g=0;if(h&&(g=1+f.body[0],f===u&&g>1&&(m=f.body[1]>>6&1)),b&&(g===0?(o.push(f.body),c+=f.body.byteLength):(o.push(f.body.subarray(g)),c+=f.body.byteLength-g)),a=s,!r&&c>=64){l=!1;break}if(Nt(this.sectionEndPositions,a,k=>k)!==-1){l=!1;break}}if(l){let f=q(this.sectionEndPositions,a,h=>h);this.sectionEndPositions.splice(f+1,0,a)}if(!u)return null;let d;if(o.length===1)d=o[0];else{let f=o.reduce((b,g)=>b+g.length,0);d=new Uint8Array(f);let h=0;for(let b of o)d.set(b,h),h+=b.length}return{startPos:e,endPos:r?a:null,pid:u.pid,payload:d,randomAccessIndicator:m}}async readPacketHeader(e){let r=this.reader.requestSlice(e,4);if(r instanceof Promise&&(r=await r),!r)return null;if(O(r)!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let a=ce(r),s=a>>15,o=a>>14&1,c=a>>13&1,u=a&8191,l=O(r),m=l>>6,d=l>>4&3,f=l&15;return{payloadUnitStartIndicator:o,pid:u,adaptationFieldControl:d}}async readPacket(e){let r=this.reader.requestSlice(e,188);if(r instanceof Promise&&(r=await r),!r)return null;let i=B(r,188);if(i[0]!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let s=(i[1]<<8)+i[2],o=s>>15,c=s>>14&1,u=s>>13&1,l=s&8191,m=i[3],d=m>>6,f=m>>4&3,h=m&15;return{payloadUnitStartIndicator:c,pid:l,adaptationFieldControl:f,body:i.subarray(4)}}},$r=(n,t)=>{if(n.payload.byteLength<3)return null;let e=new H(n.payload);if(e.readBits(24)!==1)return null;let i=e.readBits(8);if(e.skipBits(16),i===188||i===190||i===191||i===240||i===241||i===255||i===242||i===248)return null;e.skipBits(8);let a=e.readBits(2);e.skipBits(14);let s=null;if(a===2||a===3)s=0,e.skipBits(4),s+=e.readBits(3)*(1<<30),e.skipBits(1),s+=e.readBits(15)*32768,e.skipBits(1),s+=e.readBits(15);else if(t)throw new Error(Hl);return{sectionStartPos:n.startPos,sectionEndPos:n.endPos,pts:s,randomAccessIndicator:n.randomAccessIndicator}},zi=(n,t)=>{p(n.endPos!==null);let e=$r(n,t);if(!e)return null;let r=new H(n.payload);r.skipBits(32);let i=r.readBits(16),a=6;r.skipBits(16);let s=r.readBits(8),o=r.pos+8*s;r.pos=o;let c=o/8;p(Number.isInteger(c));let u=n.payload.subarray(c,i>0?a+i:n.payload.byteLength);return{...e,data:u}},gs=class n{constructor(t){this.elementaryStream=t;this.packetBuffers=new WeakMap;this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){let t=this.elementaryStream.demuxer,e=this.elementaryStream.info.type,r=0;for(let i of t.trackBackingEntries)if(i.getType()===e&&r++,p(i instanceof n),i.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 ee}getDisposition(){return{...Se,primary:!1}}getTimeResolution(){return 9e4}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(t,e,r){let i;return this.allPacketsAreKeyPackets()?i="key":i=t.randomAccessIndicator===1?"key":"delta",new Q(r.metadataOnly?pe:t.data,i,t.pts/9e4,Math.max(e/9e4,0),t.sequenceNumber,t.data.byteLength)}async getFirstPacket(t){let e=this.elementaryStream.firstSection;p(e);let r=zi(e,!0);p(r);let i=new Yr(this.elementaryStream,r),a=new En(this,i),s=await a.readNext();if(!s)return null;let o=this.createEncodedPacket(s.packet,s.duration,t);return this.packetBuffers.set(o,a),this.packetSectionStarts.set(o,s.packet.sectionStartPos),o}async getNextPacket(t,e){let r=this.packetBuffers.get(t);if(r){let l=await r.readNext();if(!l)return null;this.packetBuffers.delete(t);let m=this.createEncodedPacket(l.packet,l.duration,e);return this.packetBuffers.set(m,r),this.packetSectionStarts.set(m,l.packet.sectionStartPos),m}let i=this.packetSectionStarts.get(t);if(i===void 0)throw new Error("Packet was not created from this track.");let s=await this.elementaryStream.demuxer.readSection(i,!0);p(s);let o=zi(s,!0);p(o);let c=new Yr(this.elementaryStream,o);r=new En(this,c);let u=t.sequenceNumber;for(;;){let l=await r.readNext();if(!l)return null;if(l.packet.sequenceNumber>u){let m=this.createEncodedPacket(l.packet,l.duration,e);return this.packetBuffers.set(m,r),this.packetSectionStarts.set(m,l.packet.sectionStartPos),m}}}async getNextKeyPacket(t,e){let r=t;for(;;){if(r=await this.getNextPacket(r,e),!r)return null;if(r.type==="key")return r}}getPacket(t,e){return this.doPacketLookup(t,!1,e)}getKeyPacket(t,e){return this.doPacketLookup(t,!0,e)}async doPacketLookup(t,e,r){let i=Lt(t*9e4),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:o}=a,c=this.elementaryStream.pid,u=async(w,S,x)=>{let P=w;for(;Pw.pts),b=h!==-1?f[h]:null;if(b&&i-b.pts<9e4/2)d=b.sectionStartPos;else{let w=0;if(s.fileSize!==null){let S=Math.ceil(s.fileSize/o);if(S>1){let x=0,P=S-1;for(w=x;x<=P;){let A=Math.floor((x+P)/2),C=pa(A*o,a.packetStride)+m.sectionStartPos,I=C+o,F=await u(C,I,!1);if(!F){P=A-1;continue}F.pesPacketHeader.pts<=i?(w=A,x=A+1):P=A-1}}}d=pa(w*o,a.packetStride)+m.sectionStartPos}let y=(await u(d,s.fileSize??1/0,!1))?.pesPacketHeader??null;y||(y=m);let k=this.getReorderSize(),T=async(w,S)=>{let x=await a.readSection(w,!0);p(x);let P=zi(x,!0);p(P);let A=new Yr(this.elementaryStream,P),C=new En(this,A);for(;!((X(C.presentationOrderPackets)?.pts??-1/0)>=i||!await C.readNextPacket()););let I=lr(C.presentationOrderPackets,S);if(I===-1)return null;let F=C.presentationOrderPackets[I],v=I===0?0:F.pts-C.presentationOrderPackets[I-1].pts;for(;C.decodeOrderPackets[0]!==F;)C.decodeOrderPackets.shift();C.lastDuration=v;let E=await C.readNext();p(E);let D=this.createEncodedPacket(E.packet,E.duration,r);return this.packetBuffers.set(D,C),this.packetSectionStarts.set(D,E.packet.sectionStartPos),D};if(!e||this.allPacketsAreKeyPackets()){e:for(;;){let w=y.sectionStartPos+a.packetStride;for(;;){let S=await a.readPacketHeader(w);if(!S)break e;if(S.pid===c&&S.payloadUnitStartIndicator===1){let x=await a.readSection(w,!1);if(x){let P=$r(x,!1);if(P&&P.pts!==null){if(P.pts>i)break e;y=P,fc(this.elementaryStream,y);break}}}w+=a.packetStride}}e:for(let w=0;w=a.packetOffset;){let x=await a.readPacketHeader(S);if(!x)break e;if(x.pid===c&&x.payloadUnitStartIndicator===1){let P=await a.readSection(S,!1);if(P){let A=$r(P,!1);if(A&&A.pts!==null){y=A;break}}}S-=a.packetStride}}return T(y.sectionStartPos,w=>w.pts<=i)}else{let w=d,S=null,x=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let P=null,A=w<=m.sectionStartPos,C,I=null;if(A)C=m,I=l;else{let E=await u(w,s.fileSize??1/0,x);C=E?.pesPacketHeader??null,I=E?.section??null}let F=!1,v=0;e:for(;C&&!(S!==null&&C.sectionStartPos>=S);){if(C.pts<=i){let D;if(this.elementaryStream.canBeTrustedWithKeyPackets)D=C.randomAccessIndicator===1;else{p(I);let z=zi(I,!0);p(z);let V=new Yr(this.elementaryStream,z);await V.markNextPacket(),D=V.suppliedPacket?.randomAccessIndicator===1}D&&(P=C)}if(C.pts>i&&(F=!0),F&&(v++,v>k))break;let E=C.sectionStartPos+a.packetStride;for(;;){let D=await a.readPacketHeader(E);if(!D)break e;if(D.pid===c&&D.payloadUnitStartIndicator===1){let z=await a.readSection(E,x);if(z){let V=$r(z,!1);if(V&&V.pts!==null){C=V,I=z,fc(this.elementaryStream,C);break}}}E+=a.packetStride}}if(P){let E=P;if(v===0)e:for(let z=0;z=a.packetOffset;){let L=await a.readPacketHeader(V);if(!L)break e;if(L.pid===c&&L.payloadUnitStartIndicator===1){let Z=await a.readSection(V,x);if(Z){let oe=$r(Z,!1);if(oe&&oe.pts!==null){E=oe;break}}}V-=a.packetStride}}let D=await T(E.sectionStartPos,z=>z.pts<=i&&z.randomAccessIndicator===1);return p(D),D}if(A)return null;S=w,w=Math.max(pa(w-m.sectionStartPos-o,a.packetStride)+m.sectionStartPos,m.sectionStartPos)}}}},dc=class extends gs{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 p(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}},mc=class extends gs{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return p(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}},fc=(n,t)=>{let e=n.referencePesPackets,r=q(e,t.sectionStartPos,i=>i.sectionStartPos);if(r>=0){let i=e[r];if(t.pts<=i.pts)return!1;let a=n.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-i.sectionStartPos=t?t:this.bufferData(t-e).then(()=>Math.min(this.endPos-this.currentPos,t))}getCurrentPesPacket(){let t=this.pesPackets[this.currentPesPacketIndex];return p(t),t}async bufferData(t){let e=this.endPos+t;for(;this.endPos=c)break;u=l;let m=s+u;if(u+4>=c){this.seekTo(m);break}let d=o[u+1],f=o[u+2],h=o[u+3],b=0,g=null;if(d===0&&f===0&&h===1?(b=4,g=o[u+4]):d===0&&f===1&&(b=3,g=h),b===0){u++;continue}let y=m;if(i===null){i=y,u+=b;continue}if(g!==null){let k=e==="avc"?jt(g):ct(g);if(e==="avc"?k===9:k===35){let w=y-i;return this.seekTo(i),this.supplyPacket(w,0)}}u+=b}if(a>6,m=u[4]&63;if(l===3||m>37){this.seekTo(o+1);continue}let d=dl[3*m+l];p(d!==void 0),this.seekTo(o),c=this.ensureBuffered(d),c instanceof Promise&&(c=await c);let f=Math.round(ml*9e4/t.info.sampleRate);return this.supplyPacket(c,f)}else if(e==="eac3"){if(s!==11)continue;this.skip(-1);let o=this.currentPos,c=this.ensureBuffered(5);if(c instanceof Promise&&(c=await c),c<5)return;let u=this.readBytes(5);if(u[0]!==11||u[1]!==119){this.seekTo(o+1);continue}let m=(((u[2]&7)<<8|u[3])+1)*2,f=u[4]>>6===3?3:u[4]>>4&3,h=Xo[f];this.seekTo(o),c=this.ensureBuffered(m),c instanceof Promise&&(c=await c);let b=h*256,g=Math.round(b*9e4/t.info.sampleRate);return this.supplyPacket(c,g)}else throw new Error("Unhandled.")}if(i=0)}async readNext(){if(this.decodeOrderPackets.length===0&&!await this.readNextPacket())return null;await this.ensureCurrentPacketHasNext();let t=this.decodeOrderPackets[0],e=this.presentationOrderPackets.indexOf(t);p(e!==-1);let r;for(e===this.presentationOrderPackets.length-1?r=this.lastDuration:(r=this.presentationOrderPackets[e+1].pts-t.pts,this.lastDuration=r),this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){let i=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(i))break;this.presentationOrderPackets.shift()}return{packet:t,duration:r}}async readNextPacket(){if(this.reachedEnd)return!1;let t;return this.context.suppliedPacket?t=this.context.suppliedPacket:(await this.context.markNextPacket(),t=this.context.suppliedPacket),this.context.suppliedPacket=null,t?(this.decodeOrderPackets.push(t),this.processPacketThroughReorderBuffer(t),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){let t=this.decodeOrderPackets[0];for(p(t);;){let e=this.presentationOrderPackets.indexOf(t);if(e!==-1&&e<=this.presentationOrderPackets.length-2||!await this.readNextPacket())break}}processPacketThroughReorderBuffer(t){if(this.reorderBuffer.push(t),this.reorderBuffer.length>this.reorderSize){let e=0;for(let i=1;it.pts-e.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}};var Et="application/vnd.apple.mpegurl",pc="#EXT-X-STREAM-INF:",hc="#EXT-X-I-FRAME-STREAM-INF:",gc="#EXT-X-MEDIA:",vn="#EXTINF:",bc="#EXT-X-MAP:",yc="#EXT-X-KEY:",kc="#EXT-X-MEDIA-SEQUENCE:",Tc="#EXT-X-BYTERANGE:",wc="#EXT-X-PROGRAM-DATE-TIME:",ql="#EXT-X-DISCONTINUITY",Sc="#EXT-X-TARGETDURATION:",Kl="#EXT-X-ENDLIST",Ac="#EXT-X-PLAYLIST-TYPE:",Gl="#EXT-X-I-FRAMES-ONLY",bs=n=>n.length===0||n.startsWith("#")&&!n.startsWith("#EXT"),ir=class{constructor(t){this._attributes={};let e="",r="",i=!1,a=!1;for(let s=0;s{let t=[];if(this.trackDeclarations){for(let e of this.trackDeclarations)if(e.type==="video"){let r=Kr(t,i=>i.getType()==="video")+1;t.push(new Ts(this,e,r))}else if(e.type==="audio"){let r=Kr(t,i=>i.getType()==="audio")+1;t.push(new ws(this,e,r))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];let r=await this.getInputForSegment(this.firstSegment).getTracks();for(let i of r)if(i.type==="video"){let a=Kr(t,s=>s.getType()==="video")+1;t.push(new Ts(this,{id:t.length+1,type:"video"},a))}else if(i.type==="audio"){let a=Kr(t,s=>s.getType()==="audio")+1;t.push(new ws(this,{id:t.length+1,type:"audio"},a))}}return t})()}async getFirstTimestampForInput(t){let e=this.firstTimestampCache.get(t);if(e!==void 0)return e;let r=await t.getFirstTimestamp();return this.firstTimestampCache.set(t,r),r}async getMediaOffset(t,e){let r=t.firstSegment??t,i;if(this.firstSegmentFirstTimestamps.has(r))i=this.firstSegmentFirstTimestamps.get(r);else{let u=this.getInputForSegment(r);i=await this.getFirstTimestampForInput(u),this.firstSegmentFirstTimestamps.set(r,i)}if(r===t)return r.timestamp-i;let a=await this.getFirstTimestampForInput(e),s=t.timestamp-r.timestamp,c=a-i-s;return Math.abs(c)<=Math.min(.25,s)?r.timestamp-i:t.timestamp-a}dispose(){for(let t of this.inputCache)t.input.dispose();this.inputCache.length=0}},ks=class{constructor(t,e,r){this.packetInfos=new WeakMap;this.hydrationPromise=null;this.firstInputTrack=null;this.segmentedInput=t,this.decl=e,this.number=r}hydrate(){return this.hydrationPromise??=(async()=>{if(this.segmentedInput.firstSegment??=await this.segmentedInput.getFirstSegment({}),!this.segmentedInput.firstSegment)throw new Error("Missing first segment, can't retrieve track.");let r=(await this.segmentedInput.getInputForSegment(this.segmentedInput.firstSegment).getTracks()).find(i=>i.type===this.decl.type&&i.number===this.number);if(!r)throw new Error("No matching track found in underlying media data.");this.firstInputTrack=r})()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(t){return this.firstInputTrack?t():this.hydrate().then(t)}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(),p(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.relativeToUnixEpoch}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(t){return this.segmentedInput.getDurationFromMetadata(t)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(t,e,r){p(t.sequenceNumber>=0),p(this.segmentedInput.firstSegment);let i=await this.segmentedInput.getMediaOffset(e,r.input),a=e.timestamp-this.segmentedInput.firstSegment.timestamp,s=t.clone({timestamp:St(t.timestamp+i,await r.getTimeResolution()),sequenceNumber:Math.floor(1e8*a)+t.sequenceNumber});return this.packetInfos.set(s,{segment:e,track:r,sourcePacket:t}),s}async getFirstPacket(t){await this.hydrate(),p(this.segmentedInput.firstSegment),p(this.firstInputTrack);let e=await this.firstInputTrack._backing.getFirstPacket(t);return e?this.createAdjustedPacket(e,this.segmentedInput.firstSegment,this.firstInputTrack):null}getNextPacket(t,e){return this._getNextInternal(t,e,!1)}getNextKeyPacket(t,e){return this._getNextInternal(t,e,!0)}async _getNextInternal(t,e,r){let i=this.packetInfos.get(t);if(!i)throw new Error("Packet was not created from this track.");let a=r?await i.track._backing.getNextKeyPacket(i.sourcePacket,e):await i.track._backing.getNextPacket(i.sourcePacket,e);if(a)return this.createAdjustedPacket(a,i.segment,i.track);let s=i.segment;for(;;){let o=await this.segmentedInput.getNextSegment(s,{skipLiveWait:e.skipLiveWait});if(!o)return null;let l=(await this.segmentedInput.getInputForSegment(o).getTracks()).find(d=>d.type===i.track.type&&d.number===i.track.number);if(!l){s=o;continue}let m=await l._backing.getFirstPacket(e);return m?this.createAdjustedPacket(m,o,l):null}}getPacket(t,e){return this._getPacketInternal(t,e,!1)}getKeyPacket(t,e){return this._getPacketInternal(t,e,!0)}async _getPacketInternal(t,e,r){let i=await this.segmentedInput.getSegmentAt(t,{skipLiveWait:e.skipLiveWait});if(!i)return null;for(await this.hydrate();i;){let a=this.segmentedInput.getInputForSegment(i),o=(await a.getTracks()).find(m=>m.type===this.firstInputTrack.type&&m.number===this.firstInputTrack.number);if(!o){i=await this.segmentedInput.getPreviousSegment(i,{skipLiveWait:e.skipLiveWait});continue}let c=await this.segmentedInput.getMediaOffset(i,a),u=t-c,l=r?await o._backing.getKeyPacket(u,e):await o._backing.getPacket(u,e);if(!l){i=await this.segmentedInput.getPreviousSegment(i,{skipLiveWait:e.skipLiveWait});continue}return this.createAdjustedPacket(l,i,o)}return null}},Ts=class extends ks{getType(){return"video"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getCodedWidth(){return this.delegate(()=>this.firstInputTrack._backing.getCodedWidth())}getCodedHeight(){return this.delegate(()=>this.firstInputTrack._backing.getCodedHeight())}getSquarePixelWidth(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelWidth())}getSquarePixelHeight(){return this.delegate(()=>this.firstInputTrack._backing.getSquarePixelHeight())}getRotation(){return this.delegate(()=>this.firstInputTrack._backing.getRotation())}async getColorSpace(){return this.delegate(()=>this.firstInputTrack._backing.getColorSpace())}async canBeTransparent(){return this.delegate(()=>this.firstInputTrack._backing.canBeTransparent())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}},ws=class extends ks{getType(){return"audio"}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getNumberOfChannels(){return this.delegate(()=>this.firstInputTrack._backing.getNumberOfChannels())}getSampleRate(){return this.delegate(()=>this.firstInputTrack._backing.getSampleRate())}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}};var Ql=yu(xc(),1);yi();var jl=typeof Ql<"u"?Ql:void 0,Pc=0,Cc=1/0,Ie=class extends je{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 ke;return this._sizePromise??=(async()=>{let e=this._getFileSize();return e!==void 0||(await this._read(0,1,Pc,Cc),e=this._getFileSize(),p(e!==void 0)),e})()}async getSize(){if(this._disposed)throw new ke;let e=await this.getSizeOrNull();if(e===null)throw new Error("Cannot determine the size of an unsized source.");return e}slice(e,r){if(!Number.isInteger(e)||e<0)throw new TypeError("offset must be a non-negative integer.");if(r!==void 0&&(!Number.isInteger(r)||r<0))throw new TypeError("length, when provided, must be a non-negative integer.");return new Fn(this,e,r)}_dispatchRead(e,r){this.onread?.(e,r),this._emit("read",{start:e,end:r})}ref(){return new Sr(this)}},Sr=class{constructor(t){this._freed=!1;if(t._disposed)throw new Error("Cannot ref a disposed source.");t._refCount++,this._source=t}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.");let t=this.source;p(t._refCount>0),t._refCount--,t._refCount===0&&(t._dispose(),t._disposed=!0),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}},Ge=class extends Ie{constructor(e,r){if(typeof e!="string")throw new TypeError("rootPath must be a string.");if(typeof r!="function")throw new TypeError("requestHandler must be a function.");super();this.rootPath=e;this.requestHandler=r}_resolveRequest(e){let r=this.requestHandler(e),i=a=>{if(!(a instanceof Ie||a instanceof Sr))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");let s=a instanceof Ie?a.ref():a;return s.source._usedForHls||=this._usedForHls,s};return r instanceof Promise?r.then(i):i(r)}},Ic=(n,t)=>n.path===t.path,Ni=class extends Ge{constructor(){super(...arguments);this._root=null;this._rootRequest=null}_read(e,r,i,a){if(!this._root){if(!this._rootRequest){let s=this._resolveRequest({path:this.rootPath,isRoot:!0}),o=c=>{let u=c instanceof Ie?c.ref():c;return this._root=u,this._rootRequest=null,u};s instanceof Promise?this._rootRequest=s.then(o):(o(s),p(this._root))}if(this._rootRequest)return this._rootRequest.then(s=>s.source._read(e,r,i,a))}return this._root.source._read(e,r,i,a)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}},Ss=class extends Ie{constructor(e){if(!(e instanceof ArrayBuffer)&&!(typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)&&!ArrayBuffer.isView(e))throw new TypeError("buffer must be an ArrayBuffer, SharedArrayBuffer, or ArrayBufferView.");super();this._onreadCalled=!1;this._bytes=j(e),this._view=U(e)}_getFileSize(){return this._bytes.byteLength}_read(){return this._onreadCalled||(this._dispatchRead(0,this._bytes.byteLength),this._onreadCalled=!0),{bytes:this._bytes,view:this._view,offset:0}}_dispose(){}},As=class extends Ie{constructor(e,r={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.maxCacheSize!==void 0&&(!fr(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(r.useStreamReader!==void 0&&typeof r.useStreamReader!="boolean")throw new TypeError("options.useStreamReader, when provided, must be a boolean.");super();this._readers=new WeakMap;this._blob=e,this._options=r,this._orchestrator=new Rn({maxCacheSize:r.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:Ec.fileSystem}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,r,i,a){return this._orchestrator.read(e,r,i,a)}async _runWorker(e){p(e.strictTarget);let r=this._readers.get(e);for(r===void 0&&("stream"in this._blob&&!mr()&&this._options.useStreamReader!==!1?r=this._blob.slice(e.currentPos).stream().getReader():r=null,this._readers.set(e,r));e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))){let i=null;try{typeof window<"u"&&typeof window.location<"u"&&(i=new URL(e instanceof Request?e.url:e,window.location.href).origin)}catch{}if((typeof navigator<"u"&&typeof navigator.onLine=="boolean"?navigator.onLine:!0)&&i!==null&&i!==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**(n-2),16)},Xl=new Set,xs=class n extends Ge{constructor(e,r={}){if(typeof e!="string"&&!(e instanceof URL)&&!(typeof Request<"u"&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.requestInit!==void 0&&(!r.requestInit||typeof r.requestInit!="object"))throw new TypeError("options.requestInit, when provided, must be an object.");if(r.getRetryDelay!==void 0&&typeof r.getRetryDelay!="function")throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(r.maxCacheSize!==void 0&&(!fr(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(r.parallelism!==void 0&&(!Number.isInteger(r.parallelism)||r.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(r.fetchFn!==void 0&&typeof r.fetchFn!="function")throw new TypeError("options.fetchFn, when provided, must be a function.");let i=e instanceof Request?e.url:e instanceof URL?e.href:e;super(i,s=>new n(s.path,this._options));this._fileSizeDetermined=!1;this._url=e,this._options=r,this._getRetryDelay=r.getRetryDelay??Qm;let a=2;this._orchestrator=new Rn({maxCacheSize:r.maxCacheSize??64*2**20,maxWorkerCount:r.parallelism??a,runWorker:this._runWorker.bind(this),prefetchProfile:Ec.network})}_getFileSize(){return this._fileSizeDetermined?this._orchestrator.fileSize:void 0}_read(e,r,i,a){return this._orchestrator.read(e,r,i,a)}async _runWorker(e){for(;;){let r=new AbortController,i=await Fu(this._options.fetchFn??fetch,this._url,Ru(this._options.requestInit??{},{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!i.ok)throw new Error(`Error fetching ${String(this._url)}: ${i.status} ${i.statusText}`);e:if(this._orchestrator.fileSize===null){let s=i.headers.get("Content-Range");if(s){let c=/\/(\d+)/.exec(s);if(c){this._orchestrator.supplyFileSize(Number(c[1]));break e}}let o=i.headers.get("Content-Length");o&&this._orchestrator.supplyFileSize(e.currentPos+Number(o))}if(this._fileSizeDetermined=!0,i.status!==206){if(!this._usedForHls){let s=new URL(this._url instanceof Request?this._url.url:this._url,typeof window<"u"?window.location.href:void 0);s.origin!=="null"&&!(s.pathname.endsWith(".m3u8")||s.pathname.endsWith(".m3u"))&&(Xl.has(s.origin)||(console.log(this._usedForHls,this._url,s.pathname),console.warn(`HTTP server (origin ${s.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.`),Xl.add(s.origin)))}e.currentPos=0,this._orchestrator.options.maxCacheSize=1/0,this._orchestrator.fileSize!==null?e.targetPos=this._orchestrator.fileSize:(e.targetPos=1/0,e.strictTarget=!1),this._orchestrator.consolidateEverythingIntoOneWorker(e)}if(!i.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");let a=i.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted){r.abort(),this._orchestrator.signalWorkerStoppedRunning(e);return}let s;try{s=await a.read()}catch(u){if(this._disposed)throw u;let l=this._getRetryDelay(1,u,this._url);if(l!==null){console.error("Error while reading response stream. Attempting to resume.",u),await un(1e3*l);break}else throw u}if(e.aborted)continue;let{done:o,value:c}=s;if(o){if(e.currentPos>=e.targetPos){this._orchestrator.onWorkerFinished(e);return}if(e.strictTarget)break;this._orchestrator.onWorkerFinished(e);return}this._dispatchRead(e.currentPos,e.currentPos+c.length),this._orchestrator.supplyWorkerData(e,c)}}}_dispose(){this._orchestrator.dispose()}},Ps=class n extends Ge{constructor(e,r={}){if(typeof e!="string")throw new TypeError("filePath must be a string.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.maxCacheSize!==void 0&&(!fr(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(!jl.fs)throw new Error("FilePathSource is only available in server-side environments (Node.js, Bun, Deno).");super(e,i=>new n(i.path,r));this._fileHandle=null;this._streamSource=new _n({getSize:async()=>(this._fileHandle=await jl.fs.open(e,"r"),(await this._fileHandle.stat()).size),read:async(i,a)=>{p(this._fileHandle);let s=new Uint8Array(a-i);return await this._fileHandle.read(s,0,a-i,i),s},maxCacheSize:r.maxCacheSize,prefetchProfile:"fileSystem"})}_read(e,r,i,a){return this._streamSource._read(e,r,i,a)}_getFileSize(){return this._streamSource._getFileSize()}_dispose(){this._streamSource._dispose(),this._fileHandle?.close(),this._fileHandle=null}},_n=class extends Ie{constructor(t){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(typeof t.getSize!="function")throw new TypeError("options.getSize must be a function.");if(typeof t.read!="function")throw new TypeError("options.read must be a function.");if(t.dispose!==void 0&&typeof t.dispose!="function")throw new TypeError("options.dispose, when provided, must be a function.");if(t.maxCacheSize!==void 0&&(!fr(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(t.prefetchProfile&&!["none","fileSystem","network"].includes(t.prefetchProfile))throw new TypeError("options.prefetchProfile, when provided, must be one of 'none', 'fileSystem' or 'network'.");super(),this._options=t,this._orchestrator=new Rn({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:2,prefetchProfile:Ec[t.prefetchProfile??"none"],runWorker:this._runWorker.bind(this)})}_getFileSize(){return this._orchestrator.fileSize??void 0}_read(t,e,r,i){if(this._orchestrator.fileSize!==null)return this._orchestrator.read(t,e,r,i);let a=this._options.getSize();if(a instanceof Promise)return a.then(s=>{if(!Number.isInteger(s)||s<0)throw new TypeError("options.getSize must return or resolve to a non-negative integer.");return this._orchestrator.fileSize=s,this._orchestrator.read(t,e,r,i)});if(!Number.isInteger(a)||a<0)throw new TypeError("options.getSize must return or resolve to a non-negative integer.");return this._orchestrator.fileSize=a,this._orchestrator.read(t,e,r,i)}async _runWorker(t){for(;t.currentPosthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,r);let i=q(this._cache,e,m=>m.start),a=i!==-1?this._cache[i]:null;if(a&&a.start<=e&&r<=a.end)return{bytes:a.bytes,view:a.view,offset:a.start};let s=e,o=new Uint8Array(r-e);if(i!==-1)for(let m=i;m=r)break;let f=Math.max(e,d.start);f>s&&this._throwDueToCacheMiss();let h=Math.min(r,d.end);fs&&this._throwDueToCacheMiss();let{promise:c,resolve:u,reject:l}=J();return this._pendingSlices.push({start:e,end:r,bytes:o,resolve:u,reject:l}),this._targetIndex=Math.max(this._targetIndex,r),this._pulling||(this._pulling=!0,this._pull().catch(m=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(d=>d.reject(m)),this._pendingSlices.length=0;else throw m})),c}_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._stream.getReader();this._currentIndex0;){let s=this._cache[0];if(this._maxRequestedIndex-s.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=r.byteLength}this._pulling=!1}_dispose(){this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}},Ec={none:(n,t)=>({start:n,end:t}),fileSystem:(n,t)=>(n=Math.floor((n-65536)/65536)*65536,t=Math.ceil((t+65536)/65536)*65536,{start:n,end:t}),network:(n,t,e)=>{n=Math.max(0,Math.floor((n-65536)/65536)*65536);for(let i of e){let s=Math.max((i.startPos+i.targetPos)/2,i.targetPos-8388608);if(ha(n,t,s,i.targetPos)){let o=i.targetPos-i.startPos,c=Math.ceil((o+1)/8388608)*8388608,u=2**Math.ceil(Math.log2(o+1)),l=Math.min(u,c);t=Math.max(t,i.startPos+l)}}return t=Math.max(t,n+Gm),{start:n,end:t}}},Rn=class{constructor(t){this.options=t;this.fileSize=null;this.nextAge=0;this.workers=[];this.cache=[];this.currentCacheSize=0;this.disposed=!1;this.queuedReads=[]}read(t,e,r,i){p(!this.disposed);let a=this.options.prefetchProfile(t,e,this.workers),s=Math.max(a.start,r),o=Math.min(a.end,this.fileSize??1/0,i);p(s<=t&&e<=o);let c=null,u=q(this.cache,t,S=>S.start),l=u!==-1?this.cache[u]:null;l&&l.start<=t&&e<=l.end&&(l.age=this.nextAge++,c={bytes:l.bytes,view:l.view,offset:l.start});let m=q(this.cache,s,S=>S.start),d=c?null:new Uint8Array(e-t),f=0,h=s,b=[];if(m!==-1){for(let S=m;S=o)break;if(x.end<=s)continue;let P=Math.max(s,x.start),A=Math.min(o,x.end);if(p(P<=A),h=d.length&&(c={bytes:d,view:U(d),offset:t}),b.length===0)return p(c),c;let{promise:g,resolve:y,reject:k}=J(),T=[];for(let S of b){let x=Math.max(t,S.start),P=Math.min(e,S.end);x===S.start&&P===S.end?T.push(S):xI.hole.start),C=A!==-1?this.queuedReads[A]:null;for(C&&S.start<=C.hole.end?(C.hole.end=Math.max(C.hole.end,S.end),C.strictTarget&&=x,w&&C.pendingSlices.push(w)):(A++,C={hole:{start:S.start,end:S.end},strictTarget:x,pendingSlices:w?[w]:[],age:this.nextAge++},this.queuedReads.splice(A,0,C));A+1C.hole.end)break;C.hole.end=Math.max(C.hole.end,I.hole.end),C.pendingSlices.push(...I.pendingSlices),C.strictTarget&&=I.strictTarget,C.age=Math.min(C.age,I.age),this.queuedReads.splice(A+1,1)}}}return c||(p(d),c=g.then(S=>S&&{bytes:S,view:U(S),offset:t})),c}checkHoleAgainstWorker(t,e,r){if(ha(e.start-131072,e.start,t.currentPos,t.targetPos)){t.targetPos=Math.max(t.targetPos,e.end);for(let a=0;a=this.options.maxWorkerCount){let a=null,s=null;for(let o=0;o{if(t.running=!1,t.pendingSlices.length>0)t.pendingSlices.forEach(r=>r.reject(e)),t.pendingSlices.length=0;else throw e}).finally(()=>{if(!t.running&&this.queuedReads.length>0){let e=0;for(let a=1;at.targetPos&&(t.targetPos=t.currentPos,this.checkQueuedReadsAgainstWorker(t));for(let a=0;al.start&&(l.start=i),l.end<=l.start&&(s.holes.splice(u,1),u--)}s.holes.length===0&&(s.resolve(s.bytes),t.pendingSlices.splice(a,1),a--)}for(let a=0;at){i.resolve(null),e.pendingSlices.splice(r,1),r--;break}}}for(let e=0;e=t){for(let i of r.pendingSlices)i.resolve(null);this.queuedReads.splice(e,1),e--}else if(r.hole.end>t){r.hole.end=t,r.strictTarget=!0;for(let i=0;i=t&&(a.resolve(null),r.pendingSlices.splice(i,1),i--)}}}}signalWorkerStoppedRunning(t){t.running=!1,t.pendingSlices.length=0}onWorkerFinished(t){let e=this.workers.indexOf(t);p(e!==-1),t.running=!1,this.workers.splice(e,1),this.fileSize===null&&this.supplyFileSize(t.currentPos);for(let r of t.pendingSlices)r.resolve(null)}insertIntoCache(t){if(this.options.maxCacheSize===0)return;let e=q(this.cache,t.start,r=>r.start)+1;if(e>0){let r=this.cache[e-1];if(r.end>=t.end)return;if(r.end>t.start){let i=new Uint8Array(t.end-r.start);i.set(r.bytes,0),i.set(t.bytes,t.start-r.start),this.currentCacheSize+=t.end-r.end,r.bytes=i,r.view=U(i),r.end=t.end,e--,t=r}else this.cache.splice(e,0,t),this.currentCacheSize+=t.bytes.length}else this.cache.splice(e,0,t),this.currentCacheSize+=t.bytes.length;for(let r=e+1;r=i.end){this.cache.splice(r,1),this.currentCacheSize-=i.bytes.length,r--;continue}let a=new Uint8Array(i.end-t.start);a.set(t.bytes,0),a.set(i.bytes,i.start-t.start),this.currentCacheSize-=t.end-i.start,t.bytes=a,t.view=U(a),t.end=i.end,this.cache.splice(r,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let r=0,i=this.cache[0];for(let a=1;athis._length)return null;let s=this._baseSource._read(this._offset+e,this._offset+r,this._offset+i,this._offset+a);return s instanceof Promise?s.then(o=>o?(o.offset-=this._offset,o):null):s?(s.offset-=this._offset,s):null}_dispose(){this._ref?.free()}ref(){return this._ref??=this._baseSource.ref(),super.ref()}};var jm=/^0[xX][0-9a-fA-F]+$/,Xm=/^data:.*;base64,/i,Mn=class extends ys{constructor(e,r,i,a){super(e.input,r,i);this.segments=[];this.nextLines=null;this.currentUpdateSegmentsPromise=null;this.streamHasEnded=!1;this.lastSegmentUpdateTime=-1/0;this.refreshInterval=5;this.demuxer=e,this.nextLines=a}runUpdateSegments(){return this.currentUpdateSegmentsPromise??=(async()=>{try{let e=this.getRemainingWaitTimeMs();e>0&&await un(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})()}getRemainingWaitTimeMs(){let e=performance.now()-this.lastSegmentUpdateTime,r=Math.max(0,1e3*this.refreshInterval-e);return r<=50?0:r}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){var k=[];try{let x=Fo(k,await this.demuxer.input._getSourceUncached({path:this.path,isRoot:!1}));let P=new Ar(x.source);let A=await P.requestEntireFile();p(A);e=Cs(A,A.length,{ignore:bs})}catch(T){var w=T,S=!0}finally{Mo(k,w,S)}}let r=!1,i=0,a=null,s=null,o=0,c=null,u=null,l=null,m=null,d=null,f=null,h=!1,b=X(this.segments)??null,g=x=>{let P=x.indexOf("@"),A=Number(P===-1?x:x.slice(0,P));if(!Number.isInteger(A)||A<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${x}'.`);let C=null;if(P!==-1&&(C=Number(x.slice(P+1)),!Number.isInteger(C)||C<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${x}'.`);return{length:A,offset:C}},y=x=>{o=x,b&&(p(b.sequenceNumber!==null),b.sequenceNumber0&&f!==null&&(i=o*f),h=!0);let A=P.slice(vn.length),C=A.indexOf(","),I=C===-1?A:A.slice(0,C),F=Number(I);if(!Number.isFinite(F)||F<0)throw new Error(`Invalid #EXTINF tag duration '${I}'.`);a=F}else if(P.startsWith(bc)){let A=new ir(P.slice(bc.length)),C=A.get("uri");if(!C)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");let I=A.get("byterange"),F=null;if(I!==null&&(F=g(I)),F&&F.offset===null)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!b){let E={path:ge(this.path,C),offset:F?.offset??0,length:F?.length??null};if(s?.method==="AES-128"&&!s.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");u={timestamp:i,relativeToUnixEpoch:d!==null,firstSegment:null,sequenceNumber:null,location:E,duration:0,encryption:s,initSegment:null,lastProgramDateTimeSeconds:d}}a=null,m===null?l=null:m=null}else if(P.startsWith(yc)){let A=new ir(P.slice(yc.length)),C=A.get("method");if(C==="NONE")s=null;else if(C==="AES-128"){let I=A.get("uri");if(!I)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let F=null,v=A.get("iv");if(v){if(!jm.test(v))throw new Error(`Unsupported IV format '${v}'.`);let D=v.slice(2);D=D.padStart(dt*2,"0"),F=new Uint8Array(dt);for(let z=0;z=8&&D[4]===112&&D[5]===115&&D[6]===115&&D[7]===104){let z=U(D).getUint32(0);v=Na(D.subarray(8,Math.min(z,D.length)))}}s={method:C,psshBox:v}}else throw new Error(`Unsupported encryption method '${C}'. If you think this method should be supported, please raise an issue.`)}else if(P.startsWith(kc)){let A=P.slice(kc.length),C=Number(A);if(!Number.isInteger(C)||C<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${A}'.`);y(C)}else if(P.startsWith(Tc)){let A=g(P.slice(Tc.length));if(A.offset===null){if(l===null)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");A.offset=l}m=A,l=A.offset+A.length}else if(P.startsWith(wc)){if(b)continue;let A=P.slice(wc.length),C=Date.parse(A);if(!Number.isFinite(C))continue;let I=C/1e3;if(d===I)continue;if(d===null&&this.segments.length>0){let F=X(this.segments),v=F.timestamp+F.duration,E=I-v;for(let D of this.segments)D.timestamp+=E,D.relativeToUnixEpoch=!0;i+=E}d=I,i=I}else if(P===ql)c=null;else if(P.startsWith(Sc)){let A=P.slice(Sc.length),C=Number(A);if(!Number.isFinite(C)||C<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${A}'.`);this.refreshInterval=C,f=C}else if(P===Kl){this.streamHasEnded=!0;break}else P.startsWith(Ac)&&P.slice(Ac.length).toLowerCase()==="vod"&&(this.streamHasEnded=!0)}if(!r)throw new Error("Invalid M3U8 file; no #EXTM3U header.")}async getFirstSegment(){return this.segments.length===0&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,r){this.segments.length===0&&await this.runUpdateSegments();let i=!!r.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){let a=q(this.segments,e,o=>o.timestamp);if(a===-1)return null;if(a0;for(;;){if(au.segment===r);if(i)return i.age=this.nextInputCacheAge++,i.input;let a=null;(r.initSegment||r.firstSegment)&&(a=this.getInputForSegment(r.initSegment??r.firstSegment));let s={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(u=>{if(!r.encryption||!(r.encryption.method==="SAMPLE-AES"||r.encryption.method==="SAMPLE-AES-CTR")||!r.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(u);let l=u.psshBoxes,{psshBox:m}=r.encryption;return(m.keyIds===null||m.keyIds.includes(u.keyId))&&!l.some(d=>La(d,m))&&(l=[...l,m]),this.input._formatOptions.isobmff.resolveKeyId({...u,psshBoxes:l})})}},o=new xr({source:new Ni(r.location.path,async u=>{p(u.isRoot);let l={...u,isRoot:!1},m,d=r.location.offset>0||r.location.length!==null;if(!r.encryption||r.encryption.method==="SAMPLE-AES"||r.encryption.method==="SAMPLE-AES-CTR"){if(m=await this.input._getSourceCached(l),d){let h=m.source.slice(r.location.offset,r.location.length??void 0).ref();m.free(),m=h}}else if(r.encryption.method==="AES-128"){let f=r.encryption;p(f.iv);let h=await this.input._getSourceCached(l);if(d){let k=h.source.slice(r.location.offset,r.location.length??void 0).ref();h.free(),h=k}let b=new Ar(h.source),g=bl(b,async()=>{var S=[];try{let y=Fo(S,await this.input._getSourceCached({path:f.keyUri,isRoot:!1},$l));let k=new Ar(y.source);let T=await k.requestSlice(0,dt);if(!T)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");let w=B(T,dt);return{key:w,iv:f.iv}}catch(x){var P=x,A=!0}finally{Mo(S,P,A)}},()=>{h.free()});m=new Li(g).ref()}else p(!1);return m}),formats:this.input._formats.filter(u=>!(u instanceof Zr)),initInput:a??void 0,formatOptions:s});if(o._onFormatDetermined=u=>{if((r.encryption?.method==="SAMPLE-AES"||r.encryption?.method==="SAMPLE-AES-CTR")&&!u._isIsobmff)throw new Error("The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.")},this.inputCache.push({segment:r,input:o,age:this.nextInputCacheAge++}),this.inputCache.length>4){let u=ba(this.inputCache,l=>l.age);p(u!==-1),this.inputCache.splice(u,1)}return o}async getLiveRefreshInterval(){return this.getRemainingWaitTimeMs()===0&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}};var Es=class extends be{constructor(e){super(e);this.metadataPromise=null;this.trackBackings=null;this.internalTracks=null;this.segmentedInputs=[];this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??=(async()=>{p(this.input._rootSource instanceof Ge);let{rootPath:e}=this.input._rootSource,r=await this.input._reader.requestEntireFile();p(r);let i=Cs(r,r.length,{ignore:bs}),a=[],s=[];for(let d=1;dd.attributes.get("type").toLowerCase()==="video").map(d=>d.attributes.get("group-id")))],c=[...new Set(s.filter(d=>d.attributes.get("type").toLowerCase()==="audio").map(d=>d.attributes.get("group-id")))],u=await Promise.all(a.map(async(d,f)=>{let h=[],b=d.attributes.get("codecs"),g;if(b)g=b.split(",").map(I=>I.trim());else{let F=await this.getSegmentedInputForPath(d.fullPath).getTrackBackings(),v=await Promise.all(F.map(async E=>({track:E,codec:await E.getCodec()})));g=await Promise.all(v.filter(E=>E.codec!==null).map(E=>E.track.getDecoderConfig().then(D=>D.codec)))}let y=d.attributes.get("video"),k=d.attributes.get("audio"),T=g.some(I=>re.includes($e(I))),w=g.some(I=>se.includes($e(I)));if(y!==null&&!T){if(!o.includes(y))throw new Error(`Invalid M3U8 file; variant stream references video group "${y}" which is not defined in any #EXT-X-MEDIA tags.`);let I=s.find(F=>{let v=F.attributes.get("group-id"),E=F.attributes.get("type");return v===y&&E.toLowerCase()==="video"});e:if(I){let F=I.attributes.get("uri");if(F===null)break e;let v=ge(e,F),z=(await this.getSegmentedInputForPath(v).getTrackBackings()).find(L=>L.getType()==="video");if(!z||await z.getCodec()===null)break e;let V=await z.getDecoderConfig().then(L=>L?.codec??null);p(V!==null),g.push(V)}}if(k!==null&&!w){if(!c.includes(k))throw new Error(`Invalid M3U8 file; variant stream references audio group "${k}" which is not defined in any #EXT-X-MEDIA tags.`);let I=s.find(F=>{let v=F.attributes.get("group-id"),E=F.attributes.get("type");return v===k&&E.toLowerCase()==="audio"});e:if(I){let F=I.attributes.get("uri");if(F===null)break e;let v=ge(e,F),z=(await this.getSegmentedInputForPath(v).getTrackBackings()).find(L=>L.getType()==="audio");if(!z||await z.getCodec()===null)break e;let V=await z.getDecoderConfig().then(L=>L?.codec??null);p(V!==null),g.push(V)}}g=[...new Set(g)];let S=null,x=null,P=d.attributes.getAsNumber("bandwidth");p(P!==null);let A=d.attributes.getAsNumber("average-bandwidth"),C=d.attributes.get("name");for(let I of g){let F=$e(I);if(F!==null){if(re.includes(F)){if(S!==null)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");S=I;let v=d.attributes.get("video");if(v===null){let E=d.attributes.get("resolution"),D=null,z=null;if(E){let V=E.match(/^(\d+)x(\d+)$/);V&&(D=Number(V[1]),z=Number(V[2]))}h.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:ee,lineNumber:d.lineNumber,fullPath:d.fullPath,fullCodecString:S,pairingMask:1n<0?D:null}})}else{if(!c.includes(v))throw new Error(`Invalid M3U8 file; variant stream references audio group "${v}" which is not defined in any #EXT-X-MEDIA tags.`);for(let E of s){let D=E.attributes.get("group-id"),z=E.attributes.get("type");if(D!==v||z.toLowerCase()!=="audio")continue;let V=E.attributes.get("channels")??d.attributes.get("channels"),L=V!==null?Number(V.split("/")[0]):null;h.push({id:-1,demuxer:this,backingTrack:null,default:Is(E.attributes),autoselect:Is(E.attributes)||Yl(E.attributes),languageCode:Zl(E.attributes.get("language")),lineNumber:E.lineNumber,fullPath:E.fullPath??d.fullPath,fullCodecString:x,pairingMask:1n<0?L:null}})}}}}}return h})),l=[],m=d=>{let f=l.find(h=>h.fullPath===d.fullPath&&h.info.type===d.info.type);f?(f.pairingMask|=d.pairingMask,f.default||=d.default,f.autoselect||=d.autoselect,f.lineNumber=Math.min(f.lineNumber,d.lineNumber),d.peakBitrate!==null&&(f.peakBitrate=Math.max(f.peakBitrate??-1/0,d.peakBitrate)),d.averageBitrate!==null&&(f.averageBitrate=Math.max(f.averageBitrate??-1/0,d.averageBitrate)),f.languageCode===ee&&(f.languageCode=d.languageCode)):(d.id=l.length+1,l.push(d))};for(let d of u)for(let f of d)m(f);l.sort((d,f)=>d.lineNumber-f.lineNumber),this.trackBackings=[];for(let d of l)d.info.type==="video"?this.trackBackings.push(new _s(d)):this.trackBackings.push(new Rs(d));this.internalTracks=l})()}async getTrackBackings(){return await this.readMetadata(),p(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let r=this.segmentedInputs.find(a=>a.path===e);if(r)return r;let i=null;return this.internalTracks&&(i=this.internalTracks.filter(s=>s.fullPath===e).map(s=>({id:s.id,type:s.info.type}))),r=new Mn(this,e,i,null),this.segmentedInputs.push(r),r}async getMetadataTags(){return{}}async getMimeType(){return Et}dispose(){if(this.segmentedInputs){for(let e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}},vs=class{constructor(t){this.internalTrack=t;this.hydrationPromise=null}hydrate(){return this.hydrationPromise??=(async()=>{let t=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath),e=null,i=(await t.getTrackBackings()).filter(a=>a.getType()===this.getType());if(i.length===1)e=i[0];else if(this instanceof _s){for(let a of i)if(await a.getCodec()===this.getCodec()){e=a;break}}else{p(this instanceof Rs);for(let a of i)if(await a.getCodec()===this.getCodec()){e=a;break}}if(!e)throw new Error("Could not find matching track in underlying media data.");this.internalTrack.backingTrack=e})()}delegate(t){return this.internalTrack.backingTrack?t():this.hydrate().then(t)}getCodec(){throw new Error("Not implemented on base class.")}getDisposition(){return{...Se,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(){p(this.internalTrack.demuxer.internalTracks);let t=this.internalTrack.info.type,e=0;for(let r of this.internalTrack.demuxer.internalTracks)if(r.info.type===t&&e++,r===this.internalTrack)break;return e}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(t){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(t)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(t){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(t)}async getPacket(t,e){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(t,e)}async getKeyPacket(t,e){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(t,e)}async getNextPacket(t,e){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(t,e)}async getNextKeyPacket(t,e){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(t,e)}},_s=class extends vs{constructor(t){super(t)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return"video"}getCodec(){return $e(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()}},Rs=class extends vs{constructor(t){super(t)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return"audio"}getCodec(){return $e(this.internalTrack.fullCodecString)}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels!==null?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()}},Is=n=>{let t=n.get("default");if(t===null)return!1;let e=t.toUpperCase();if(e==="YES")return!0;if(e==="NO")return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Yl=n=>{let t=n.get("autoselect");if(t===null)return!1;let e=t.toUpperCase();if(e==="YES")return!0;if(e==="NO")return!1;throw new Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},Zl=n=>{if(n===null)return ee;let t=n.split("-")[0];return t||ee};var Be=class{constructor(){this._isIsobmff=!1}},Wi=class extends Be{constructor(){super(...arguments);this._isIsobmff=!0}async _getMajorBrand(e){let r=e._reader.requestSlice(0,12);if(r instanceof Promise&&(r=await r),!r)return null;r.skip(4);let i=ie(r,4);return i!=="ftyp"&&i!=="styp"?null:ie(r,4)}_createDemuxer(e){return new qa(e)}},Bn=class extends Wi{async _canReadInput(t){let e=await this._getMajorBrand(t);if(e!==null)return e!=="qt ";let r=t._reader.requestSlice(4,4);return r instanceof Promise&&(r=await r),r?ie(r,4)==="moof":!1}get name(){return"MP4"}get mimeType(){return"video/mp4"}},On=class extends Wi{async _canReadInput(t){return await this._getMajorBrand(t)==="qt "}get name(){return"QuickTime File Format"}get mimeType(){return"video/quicktime"}},Hi=class extends Be{async isSupportedEBMLOfDocType(t,e){let r=t._reader.requestSlice(0,pt);if(r instanceof Promise&&(r=await r),!r)return!1;let i=Jo(r);if(i===null||i<1||i>8||K(r,i)!==440786851)return!1;let s=ec(r);if(typeof s!="number")return!1;let o=t._reader.requestSlice(r.filePos,s);if(o instanceof Promise&&(o=await o),!o)return!1;let c=r.filePos;for(;o.filePos<=c+s-Ve;){let u=ht(o);if(!u)break;let{id:l,size:m}=u,d=o.filePos;if(m===void 0)return!1;switch(l){case 17030:if(K(o,m)!==1)return!1;break;case 17143:if(K(o,m)!==1)return!1;break;case 17026:if(Tr(o,m)!==e)return!1;break;case 17031:if(K(o,m)>4)return!1;break}o.filePos=d+m}return!0}_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"matroska")}_createDemuxer(t){return new es(t)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}},Dn=class extends Hi{_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}},Vn=class extends Be{async _canReadInput(t){let e=0;for(;;){let m=t._reader.requestSlice(e,qe);if(m instanceof Promise&&(m=await m),!m)break;let d=gt(m);if(!d)break;e=m.filePos+d.size}let r=await xn(t._reader,e,e+4096);if(!r)return!1;let i=r.header,a=gr(i.mpegVersionId,i.channel),s=t._reader.requestSlice(r.startPos+a,4);if(s instanceof Promise&&(s=await s),!s)return!1;let o=R(s);if(o===hr||o===Si)return!0;e=r.startPos+r.header.totalSize;let u=await xn(t._reader,e,e+4);if(!u)return!1;let l=u.header;return!(i.channel!==l.channel||i.sampleRate!==l.sampleRate)}_createDemuxer(t){return new rs(t)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}},Un=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,12);if(e instanceof Promise&&(e=await e),!e)return!1;let r=ie(e,4);return r!=="RIFF"&&r!=="RIFX"&&r!=="RF64"?!1:(e.skip(4),ie(e,4)==="WAVE")}_createDemuxer(t){return new cs(t)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}},zn=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,4);return e instanceof Promise&&(e=await e),e?ie(e,4)==="OggS":!1}_createDemuxer(t){return new os(t)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}},Nn=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,4);return e instanceof Promise&&(e=await e),e?ie(e,4)==="fLaC":!1}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(t){return new fs(t)}},Ln=class extends Be{async _canReadInput(t){let e=0;for(;;){let s=t._reader.requestSlice(e,qe);if(s instanceof Promise&&(s=await s),!s)break;let o=gt(s);if(!o)break;e=s.filePos+o.size}let r=t._reader.requestSliceRange(e,rr,Ke);if(r instanceof Promise&&(r=await r),!r)return!1;let i=Ue(r);if(!i||(e+=i.frameLength,r=t._reader.requestSliceRange(e,rr,Ke),r instanceof Promise&&(r=await r),!r))return!1;let a=Ue(r);return a?i.objectType===a.objectType&&i.samplingFrequencyIndex===a.samplingFrequencyIndex&&i.channelConfiguration===a.channelConfiguration:!1}_createDemuxer(t){return new us(t)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}},Wn=class extends Be{async _canReadInput(t){let e=205,r=t._reader.requestSlice(0,e);if(r instanceof Promise&&(r=await r),!r)return!1;let i=B(r,e);return i[0]===71&&i[188]===71||i[0]===71&&i[204]===71?!0:i[4]===71&&i[196]===71}_createDemuxer(t){return new hs(t)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}},Zr=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,7);if(e instanceof Promise&&(e=await e),!e||!(ie(e,7)==="#EXTM3U"))return!1;if(!(t._rootSource instanceof Ge))throw new TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return t._rootSource._usedForHls=!0,!0}_createDemuxer(t){return new Es(t)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return Et}},Fs=new Bn,Ms=new On,vc=new Hi,_c=new Dn,Bs=new Vn,Rc=new Un,Fc=new zn,Os=new Ln,Mc=new Nn,Ds=new Wn,Vs=new Zr,Jl=[Vs,Fs,Ms,vc,_c,Rc,Fc,Mc,Bs,Os,Ds],ed=[Vs,Fs,Ms,Bs,Os,Ds],td=(n,t)=>{if(!n||typeof n!="object")throw new TypeError(`${t}, when provided, must be an object.`);if(n.isobmff!==void 0){if(!n.isobmff||typeof n.isobmff!="object")throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(n.isobmff.resolveKeyId!==void 0&&typeof n.isobmff.resolveKeyId!="function")throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}};var Us=new Map,zs=new Map,$m=(n,t)=>{if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.codec!==void 0&&typeof t.codec!="string")throw new TypeError("options.codec, when provided, must be a string.");if(t.codec!==void 0&&$e(t.codec)!==n)throw new TypeError(`options.codec, when provided, must match the specified codec (${n}).`);if(t.codedWidth!==void 0&&(!Number.isInteger(t.codedWidth)||t.codedWidth<=0))throw new TypeError("options.codedWidth, when provided, must be a positive integer.");if(t.codedHeight!==void 0&&(!Number.isInteger(t.codedHeight)||t.codedHeight<=0))throw new TypeError("options.codedHeight, when provided, must be a positive integer.");if(t.displayAspectWidth!==void 0&&(!Number.isInteger(t.displayAspectWidth)||t.displayAspectWidth<=0))throw new TypeError("options.displayAspectWidth, when provided, must be a positive integer.");if(t.displayAspectHeight!==void 0&&(!Number.isInteger(t.displayAspectHeight)||t.displayAspectHeight<=0))throw new TypeError("options.displayAspectHeight, when provided, must be a positive integer.");if(t.description!==void 0&&!zt(t.description))throw new TypeError("options.description, when provided, must be a buffer source.");if(t.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(t.hardwareAcceleration))throw new TypeError("options.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(t.optimizeForLatency!==void 0&&typeof t.optimizeForLatency!="boolean")throw new TypeError("options.optimizeForLatency, when provided, must be a boolean.")},Ym=(n,t)=>{if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.codec!==void 0&&typeof t.codec!="string")throw new TypeError("options.codec, when provided, must be a string.");if(t.codec!==void 0&&$e(t.codec)!==n)throw new TypeError(`options.codec, when provided, must match the specified codec (${n}).`);if(t.numberOfChannels!==void 0&&(!Number.isInteger(t.numberOfChannels)||t.numberOfChannels<=0))throw new TypeError("options.numberOfChannels, when provided, must be a positive integer.");if(t.sampleRate!==void 0&&(!Number.isInteger(t.sampleRate)||t.sampleRate<=0))throw new TypeError("options.sampleRate, when provided, must be a positive integer.");if(t.description!==void 0&&!zt(t.description))throw new TypeError("options.description, when provided, must be a buffer source.")},rd=n=>re.includes(n)?Ns(n):se.includes(n)?Ls(n):!1,Ns=async(n,t={})=>{if(!re.includes(n))return!1;$m(n,t);let e={...t,codedWidth:t.codedWidth??1280,codedHeight:t.codedHeight??720,codec:t.codec??wa(n,1280,720,1e6)};e.description??=ju(e);let r=JSON.stringify(e),i=Us.get(r);if(i)return i;let a=(async()=>Pr.some(o=>o.supports(n,e))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0)();return Us.set(r,a),a},Ls=async(n,t={})=>{if(!se.includes(n))return!1;Ym(n,t);let e={...t,numberOfChannels:t.numberOfChannels??2,sampleRate:t.sampleRate??48e3,codec:t.codec??Aa(n,2,48e3)};if(e.description===void 0){let s=Xu(e);if(s===!1)return!1;e.description=s}let r=JSON.stringify(e),i=zs.get(r);if(i)return i;let a=(async()=>Cr.some(o=>o.supports(n,e))||te.includes(n)?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(e)).supported===!0)();return zs.set(r,a),a},id=async()=>{let[n,t]=await Promise.all([Bc(),Oc()]);return[...n,...t]},Bc=async(n=re,t)=>{let e=await Promise.all(n.map(r=>Ns(r,t)));return n.filter((r,i)=>e[i])},Oc=async(n=se,t)=>{let e=await Promise.all(n.map(r=>Ls(r,t)));return n.filter((r,i)=>e[i])};yi();var nd=-1/0,ad=-1/0,qn=null;typeof FinalizationRegistry<"u"&&(qn=new FinalizationRegistry(n=>{let t=performance.now();n.type==="video"?(t-nd>=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."),nd=t),typeof VideoFrame<"u"&&n.data instanceof VideoFrame&&n.data.close()):(t-ad>=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."),ad=t),typeof AudioData<"u"&&n.data instanceof AudioData&&n.data.close())}));var Ws=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],Zm=new Set(Ws),me=class n{constructor(t,e){this._closed=!1;if(t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t)){if(!e||typeof e!="object")throw new TypeError("init must be an object.");if(e.format===void 0||!Zm.has(e.format))throw new TypeError("init.format must be one of: "+Ws.join(", "));if(!Number.isInteger(e.codedWidth)||e.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(e.codedHeight)||e.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(e.timestamp))throw new TypeError("init.timestamp must be a number.");if(e.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(e.layout!==void 0){if(!Array.isArray(e.layout))throw new TypeError("init.layout, when provided, must be an array.");for(let r of e.layout){if(!r||typeof r!="object"||Array.isArray(r))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(r.offset)||r.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(r.stride)||r.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(e.visibleRect!==void 0&&Ho(e.visibleRect,"init.visibleRect"),e.displayWidth!==void 0&&(!Number.isInteger(e.displayWidth)||e.displayWidth<=0))throw new TypeError("init.displayWidth, when provided, must be a positive integer.");if(e.displayHeight!==void 0&&(!Number.isInteger(e.displayHeight)||e.displayHeight<=0))throw new TypeError("init.displayHeight, when provided, must be a positive integer.");if(e.displayWidth!==void 0!=(e.displayHeight!==void 0))throw new TypeError("init.displayWidth and init.displayHeight must be either both provided or both omitted.");this._data=j(t).slice(),this._layout=e.layout??Jm(e.format,e.codedWidth,e.codedHeight),this.format=e.format,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=new ti(e.colorSpace),this.visibleRect={left:e.visibleRect?.left??0,top:e.visibleRect?.top??0,width:e.visibleRect?.width??e.codedWidth,height:e.visibleRect?.height??e.codedHeight},e.displayWidth!==void 0?(this.squarePixelWidth=this.rotation%180===0?e.displayWidth:e.displayHeight,this.squarePixelHeight=this.rotation%180===0?e.displayHeight:e.displayWidth):(this.squarePixelWidth=this.codedWidth,this.squarePixelHeight=this.codedHeight)}else if(typeof VideoFrame<"u"&&t instanceof VideoFrame){if(e?.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(e?.timestamp!==void 0&&!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(e?.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");e?.visibleRect!==void 0&&Ho(e.visibleRect,"init.visibleRect"),this._data=t,this._layout=null,this.format=t.format,this.visibleRect={left:t.visibleRect?.x??0,top:t.visibleRect?.y??0,width:t.visibleRect?.width??t.codedWidth,height:t.visibleRect?.height??t.codedHeight},this.rotation=e?.rotation??0,this.squarePixelWidth=t.displayWidth,this.squarePixelHeight=t.displayHeight,this.timestamp=e?.timestamp??t.timestamp/1e6,this.duration=e?.duration??(t.duration??0)/1e6,this.colorSpace=new ti(t.colorSpace)}else if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof SVGImageElement<"u"&&t instanceof SVGImageElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof HTMLVideoElement<"u"&&t instanceof HTMLVideoElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas){if(!e||typeof e!="object")throw new TypeError("init must be an object.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(e.timestamp))throw new TypeError("init.timestamp must be a number.");if(e.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(typeof VideoFrame<"u")return new n(new VideoFrame(t,{timestamp:Math.trunc(e.timestamp*At),duration:Math.trunc((e.duration??0)*At)||void 0}),e);let r=0,i=0;if("naturalWidth"in t?(r=t.naturalWidth,i=t.naturalHeight):"videoWidth"in t?(r=t.videoWidth,i=t.videoHeight):"width"in t&&(r=Number(t.width),i=Number(t.height)),!r||!i)throw new TypeError("Could not determine dimensions.");let a=new OffscreenCanvas(r,i),s=a.getContext("2d",{alpha:xt(),willReadFrequently:!0});p(s),s.drawImage(t,0,0),this._data=a,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:r,height:i},this.squarePixelWidth=r,this.squarePixelHeight=i,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=new ti({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else throw new TypeError("Invalid data type: Must be a BufferSource or CanvasImageSource.");this.pixelAspectRatio=Ht({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),qn?.register(this,{type:"video",data:this._data},this)}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(At*this.timestamp)}get microsecondDuration(){return Math.trunc(At*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}clone(){if(this._closed)throw new Error("VideoSample is closed.");return p(this._data!==null),Jr(this._data)?new n(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):this._data instanceof Uint8Array?(p(this._layout),new n(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 n(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||(qn?.unregister(this),Jr(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(t={}){if(sd(t),this._closed)throw new Error("VideoSample is closed.");if(this.format===null)throw new Error("Cannot get allocation size when format is null. Sorry!");if(p(this._data!==null),!Jr(this._data)&&(t.colorSpace||t.format&&t.format!==this.format||t.layout||t.rect)){let e=this.toVideoFrame(),r=e.allocationSize(t);return e.close(),r}return Jr(this._data)?this._data.allocationSize(t):this._data instanceof Uint8Array?this._data.byteLength:this.codedWidth*this.codedHeight*4}async copyTo(t,e={}){if(!zt(t))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(sd(e),this._closed)throw new Error("VideoSample is closed.");if(this.format===null)throw new Error("Cannot copy video sample data when format is null. Sorry!");if(p(this._data!==null),!Jr(this._data)&&(e.colorSpace||e.format&&e.format!==this.format||e.layout||e.rect)){let r=this.toVideoFrame(),i=await r.copyTo(t,e);return r.close(),i}if(Jr(this._data))return this._data.copyTo(t,e);if(this._data instanceof Uint8Array)return p(this._layout),j(t).set(this._data),this._layout;{let i=this._data.getContext("2d");p(i);let a=i.getImageData(0,0,this.codedWidth,this.codedHeight);return j(t).set(a.data),[{offset:0,stride:4*this.codedWidth}]}}toVideoFrame(){if(this._closed)throw new Error("VideoSample is closed.");return p(this._data!==null),Jr(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(t,e,r,i,a,s,o,c,u){let l=0,m=0,d=this.displayWidth,f=this.displayHeight,h=0,b=0,g=this.displayWidth,y=this.displayHeight;if(s!==void 0?(l=e,m=r,d=i,f=a,h=s,b=o,c!==void 0?(g=c,y=u):(g=d,y=f)):(h=e,b=r,i!==void 0&&(g=i,y=a)),!(typeof CanvasRenderingContext2D<"u"&&t instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<"u"&&t 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(m))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(f)||f<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(h))throw new TypeError("dx must be a number.");if(!Number.isFinite(b))throw new TypeError("dy must be a number.");if(!Number.isFinite(g)||g<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(y)||y<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:l,sy:m,sWidth:d,sHeight:f}=this._rotateSourceRegion(l,m,d,f,this.rotation));let k=this.toCanvasImageSource();t.save();let T=h+g/2,w=b+y/2;t.translate(T,w),t.rotate(this.rotation*Math.PI/180);let S=this.rotation%180===0?1:g/y;t.scale(1/S,S),t.drawImage(k,l,m,d,f,-g/2,-y/2,g,y),t.restore()}drawWithFit(t,e){if(!(typeof CanvasRenderingContext2D<"u"&&t instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<"u"&&t instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(e.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");e.crop!==void 0&&ii(e.crop,"options.");let r=t.canvas.width,i=t.canvas.height,a=e.rotation??this.rotation,[s,o]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth];e.crop&&ri(e.crop,s,o);let c,u,l,m,{sx:d,sy:f,sWidth:h,sHeight:b}=this._rotateSourceRegion(e.crop?.left??0,e.crop?.top??0,e.crop?.width??s,e.crop?.height??o,a);if(e.fit==="fill")c=0,u=0,l=r,m=i;else{let[y,k]=e.crop?[e.crop.width,e.crop.height]:[s,o],T=e.fit==="contain"?Math.min(r/y,i/k):Math.max(r/y,i/k);l=y*T,m=k*T,c=(r-l)/2,u=(i-m)/2}t.save();let g=a%180===0?1:l/m;t.translate(r/2,i/2),t.rotate(a*Math.PI/180),t.scale(1/g,g),t.translate(-r/2,-i/2),t.drawImage(this.toCanvasImageSource(),d,f,h,b,c,u,l,m),t.restore()}_rotateSourceRegion(t,e,r,i,a){return a===90?[t,e,r,i]=[e,this.squarePixelHeight-t-r,i,r]:a===180?[t,e]=[this.squarePixelWidth-t-r,this.squarePixelHeight-e-i]:a===270&&([t,e,r,i]=[this.squarePixelWidth-e-i,t,i,r]),{sx:t,sy:e,sWidth:r,sHeight:i}}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(p(this._data!==null),this._data instanceof Uint8Array){let t=this.toVideoFrame();return queueMicrotask(()=>t.close()),t}else return this._data}setRotation(t){if(![0,90,180,270].includes(t))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=t}setTimestamp(t){if(!Number.isFinite(t))throw new TypeError("newTimestamp must be a number.");this.timestamp=t}setDuration(t){if(!Number.isFinite(t)||t<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=t}[Symbol.dispose](){this.close()}},ti=class{constructor(t){if(t!==void 0){if(!t||typeof t!="object")throw new TypeError("init.colorSpace, when provided, must be an object.");let e=Object.keys(rt);if(t.primaries!=null&&!e.includes(t.primaries))throw new TypeError(`init.colorSpace.primaries, when provided, must be one of ${e.join(", ")}.`);let r=Object.keys(it);if(t.transfer!=null&&!r.includes(t.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${r.join(", ")}.`);let i=Object.keys(nt);if(t.matrix!=null&&!i.includes(t.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${i.join(", ")}.`);if(t.fullRange!=null&&typeof t.fullRange!="boolean")throw new TypeError("init.colorSpace.fullRange, when provided, must be a boolean.")}this.primaries=t?.primaries??null,this.transfer=t?.transfer??null,this.matrix=t?.matrix??null,this.fullRange=t?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}},Jr=n=>typeof VideoFrame<"u"&&n instanceof VideoFrame,ri=(n,t,e)=>{let r=Math.min(n.left,t),i=Math.min(n.top,e),a=Math.min(n.width,t-r),s=Math.min(n.height,e-i);return p(a>=0),p(s>=0),{left:r,top:i,width:a,height:s}},ii=(n,t)=>{if(!n||typeof n!="object")throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(n.left)||n.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(n.top)||n.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(n.width)||n.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(n.height)||n.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},sd=n=>{if(!n||typeof n!="object")throw new TypeError("options must be an object.");if(n.colorSpace!==void 0&&!["display-p3","srgb"].includes(n.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(n.format!==void 0&&typeof n.format!="string")throw new TypeError("options.format, when provided, must be a string.");if(n.layout!==void 0){if(!Array.isArray(n.layout))throw new TypeError("options.layout, when provided, must be an array.");for(let t of n.layout){if(!t||typeof t!="object")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(n.rect!==void 0){if(!n.rect||typeof n.rect!="object")throw new TypeError("options.rect, when provided, must be an object.");if(n.rect.x!==void 0&&(!Number.isInteger(n.rect.x)||n.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(n.rect.y!==void 0&&(!Number.isInteger(n.rect.y)||n.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(n.rect.width!==void 0&&(!Number.isInteger(n.rect.width)||n.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(n.rect.height!==void 0&&(!Number.isInteger(n.rect.height)||n.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Jm=(n,t,e)=>{let r=ef(n),i=[],a=0;for(let s of r){let o=Math.ceil(t/s.widthDivisor),c=Math.ceil(e/s.heightDivisor),u=o*s.sampleBytes,l=u*c;i.push({offset:a,stride:u}),a+=l}return i},ef=n=>{let t=(e,r,i,a,s)=>{let o=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:r,widthDivisor:i,heightDivisor:a},{sampleBytes:r,widthDivisor:i,heightDivisor:a}];return s&&o.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),o};switch(n){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:ae(n),p(!1)}},Dc=new Set(["f32","f32-planar","s16","s16-planar","s32","s32-planar","u8","u8-planar"]),Te=class n{constructor(t){this._closed=!1;if(Hn(t)){if(t.format===null)throw new TypeError("AudioData with null format is not supported.");this._data=t,this.format=t.format,this.sampleRate=t.sampleRate,this.numberOfFrames=t.numberOfFrames,this.numberOfChannels=t.numberOfChannels,this.timestamp=t.timestamp/1e6,this.duration=t.numberOfFrames/t.sampleRate}else{if(!t||typeof t!="object")throw new TypeError("Invalid AudioDataInit: must be an object.");if(!Dc.has(t.format))throw new TypeError("Invalid AudioDataInit: invalid format.");if(!Number.isFinite(t.sampleRate)||t.sampleRate<=0)throw new TypeError("Invalid AudioDataInit: sampleRate must be > 0.");if(!Number.isInteger(t.numberOfChannels)||t.numberOfChannels===0)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp must be a number.");let e=t.data.byteLength/(ei(t.format)*t.numberOfChannels);if(!Number.isInteger(e))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");this.format=t.format,this.sampleRate=t.sampleRate,this.numberOfFrames=e,this.numberOfChannels=t.numberOfChannels,this.timestamp=t.timestamp,this.duration=e/t.sampleRate;let r;if(t.data instanceof ArrayBuffer)r=new Uint8Array(t.data);else if(ArrayBuffer.isView(t.data))r=new Uint8Array(t.data.buffer,t.data.byteOffset,t.data.byteLength);else throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");let i=this.numberOfFrames*this.numberOfChannels*ei(this.format);if(r.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");let i=t.frameCount!==void 0?t.frameCount:this.numberOfFrames-r;if(i>this.numberOfFrames-r)throw new RangeError("frameCount out of range");let a=ei(e),s=qi(e);if(s&&t.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&t.planeIndex!==0)throw new RangeError("planeIndex out of range");return(s?i:i*this.numberOfChannels)*a}copyTo(t,e){if(!zt(t))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!e||typeof e!="object")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(e.format!==void 0&&!Dc.has(e.format))throw new TypeError("Invalid format.");if(e.frameOffset!==void 0&&(!Number.isInteger(e.frameOffset)||e.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(e.frameCount!==void 0&&(!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.");let{planeIndex:r,format:i,frameCount:a,frameOffset:s}=e,o=this.format,c=i??this.format;if(!c)throw new Error("Destination format not determined");let u=this.numberOfFrames,l=this.numberOfChannels,m=s??0;if(m>=u)throw new RangeError("frameOffset out of range");let d=a!==void 0?a:u-m;if(d>u-m)throw new RangeError("frameCount out of range");let f=ei(c),h=qi(c);if(h&&r>=l)throw new RangeError("planeIndex out of range");if(!h&&r!==0)throw new RangeError("planeIndex out of range");let g=(h?d:d*l)*f;if(t.byteLength2&&c!==o?tf(this._data,y,o,c,l,r,m,d):this._data.copyTo(t,{planeIndex:r,frameOffset:m,frameCount:d,format:c});else{let T=this._data,w=U(T),S=od(o),x=ei(o),P=qi(o);for(let A=0;A0;){let l=Math.min(o,u),m=new Float32Array(i*l);for(let d=0;d0;){let m=Math.min(o,u),d=new Float32Array(i*m);for(let h=0;h{switch(n){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":return 4;case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},qi=n=>{switch(n){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},od=n=>{switch(n){case"u8":case"u8-planar":return(t,e)=>(t.getUint8(e)-128)/128;case"s16":case"s16-planar":return(t,e)=>t.getInt16(e,!0)/32768;case"s32":case"s32-planar":return(t,e)=>t.getInt32(e,!0)/2147483648;case"f32":case"f32-planar":return(t,e)=>t.getFloat32(e,!0)}},cd=n=>{switch(n){case"u8":case"u8-planar":return(t,e,r)=>t.setUint8(e,de((r+1)*127.5,0,255));case"s16":case"s16-planar":return(t,e,r)=>t.setInt16(e,de(Math.round(r*32767),-32768,32767),!0);case"s32":case"s32-planar":return(t,e,r)=>t.setInt32(e,de(Math.round(r*2147483647),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(t,e,r)=>t.setFloat32(e,r,!0)}},Hn=n=>typeof AudioData<"u"&&n instanceof AudioData,Hs=n=>{switch(n){case"u8-planar":return"u8";case"s16-planar":return"s16";case"s32-planar":return"s32";case"f32-planar":return"f32";default:return n}},tf=(n,t,e,r,i,a,s,o)=>{let c=od(e),u=cd(r),l=ei(e),m=ei(r),d=qi(e);if(qi(r))if(d){let h=new ArrayBuffer(o*l),b=U(h);n.copyTo(h,{planeIndex:a,frameOffset:s,frameCount:o,format:e});for(let g=0;g{let e=n.allocationSize({format:t,planeIndex:0}),r=new ArrayBuffer(e);return n.copyTo(r,{format:t,planeIndex:0}),new Te({data:r,format:t,numberOfChannels:n.numberOfChannels,sampleRate:n.sampleRate,timestamp:n.timestamp,duration:n.duration})};var Ks=new Map,Gs=new Map,Qs=n=>{if(!n||typeof n!="object")throw new TypeError("Encoding config must be an object.");if(!re.includes(n.codec))throw new TypeError(`Invalid video codec '${n.codec}'. Must be one of: ${re.join(", ")}.`);if(!(n.bitrate instanceof xe)&&(!Number.isInteger(n.bitrate)||n.bitrate<=0))throw new TypeError("config.bitrate must be a positive integer or a quality.");if(n.keyFrameInterval!==void 0&&(!Number.isFinite(n.keyFrameInterval)||n.keyFrameInterval<0))throw new TypeError("config.keyFrameInterval, when provided, must be a non-negative number.");if(n.sizeChangeBehavior!==void 0&&!["deny","passThrough","fill","contain","cover"].includes(n.sizeChangeBehavior))throw new TypeError("config.sizeChangeBehavior, when provided, must be 'deny', 'passThrough', 'fill', 'contain' or 'cover'.");if(n.transform!==void 0){if(typeof n.transform!="object"||!n.transform)throw new TypeError("config.transform, when provided, must be an object.");if(n.transform.width!==void 0&&(!Number.isInteger(n.transform.width)||n.transform.width<=0))throw new TypeError("config.transform.width, when provided, must be a positive integer.");if(n.transform.height!==void 0&&(!Number.isInteger(n.transform.height)||n.transform.height<=0))throw new TypeError("config.transform.height, when provided, must be a positive integer.");if(n.transform.fit!==void 0&&!["fill","contain","cover"].includes(n.transform.fit))throw new TypeError('config.transform.fit, when provided, must be one of "fill", "contain", or "cover".');if(n.transform.width!==void 0&&n.transform.height!==void 0&&n.transform.fit===void 0&&!["fill","contain","cover"].includes(n.sizeChangeBehavior))throw new TypeError("When both config.transform.width and config.transform.height are provided, config.transform.fit must also be provided.");if(n.transform.fit!==void 0&&["fill","contain","cover"].includes(n.sizeChangeBehavior))throw new TypeError("config.transform.fit cannot be used when config.sizeChangeBehavior is 'fill', 'contain' or 'cover', as sizeChangeBehavior already determines the fitting algorithm.");if(n.transform.rotate!==void 0&&![0,90,180,270].includes(n.transform.rotate))throw new TypeError("config.transform.rotate, when provided, must be 0, 90, 180 or 270.");if(n.transform.crop!==void 0&&ii(n.transform.crop,"config.transform."),n.transform.process!==void 0&&typeof n.transform.process!="function")throw new TypeError("config.transform.process, when provided, must be a function.");if(n.transform.frameRate!==void 0&&(!Number.isFinite(n.transform.frameRate)||n.transform.frameRate<=0))throw new TypeError("config.transform.frameRate, when provided, must be a finite positive number.");if(n.transform.force!==void 0&&typeof n.transform.force!="boolean")throw new TypeError("config.transform.force, when provided, must be a boolean.")}if(n.onEncodedPacket!==void 0&&typeof n.onEncodedPacket!="function")throw new TypeError("config.onEncodedPacket, when provided, must be a function.");if(n.onEncoderConfig!==void 0&&typeof n.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");ud(n.codec,n)},ud=(n,t)=>{if(!t||typeof t!="object")throw new TypeError("Encoding options must be an object.");if(t.alpha!==void 0&&!["discard","keep"].includes(t.alpha))throw new TypeError("options.alpha, when provided, must be 'discard' or 'keep'.");if(t.bitrateMode!==void 0&&!["constant","variable"].includes(t.bitrateMode))throw new TypeError("bitrateMode, when provided, must be 'constant' or 'variable'.");if(t.latencyMode!==void 0&&!["quality","realtime"].includes(t.latencyMode))throw new TypeError("latencyMode, when provided, must be 'quality' or 'realtime'.");if(t.fullCodecString!==void 0&&typeof t.fullCodecString!="string")throw new TypeError("fullCodecString, when provided, must be a string.");if(t.fullCodecString!==void 0&&$e(t.fullCodecString)!==n)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${n}).`);if(t.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(t.hardwareAcceleration))throw new TypeError("hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(t.scalabilityMode!==void 0&&typeof t.scalabilityMode!="string")throw new TypeError("scalabilityMode, when provided, must be a string.");if(t.contentHint!==void 0&&typeof t.contentHint!="string")throw new TypeError("contentHint, when provided, must be a string.")},Vc=n=>{let t=n.bitrate instanceof xe?n.bitrate._toVideoBitrate(n.codec,n.width,n.height):n.bitrate;return{codec:n.fullCodecString??wa(n.codec,n.width,n.height,t),width:n.width,height:n.height,displayWidth:n.squarePixelWidth,displayHeight:n.squarePixelHeight,bitrate:t,bitrateMode:n.bitrateMode,alpha:n.alpha??"discard",framerate:n.framerate,latencyMode:n.latencyMode,hardwareAcceleration:n.hardwareAcceleration,scalabilityMode:n.scalabilityMode,contentHint:n.contentHint,...Yu(n.codec)}},js=n=>{if(!n||typeof n!="object")throw new TypeError("Encoding config must be an object.");if(!se.includes(n.codec))throw new TypeError(`Invalid audio codec '${n.codec}'. Must be one of: ${se.join(", ")}.`);if(n.bitrate===void 0&&!(te.includes(n.codec)||n.codec==="flac"))throw new TypeError("config.bitrate must be provided for compressed audio codecs.");if(n.bitrate!==void 0&&!(n.bitrate instanceof xe)&&(!Number.isInteger(n.bitrate)||n.bitrate<=0))throw new TypeError("config.bitrate, when provided, must be a positive integer or a quality.");if(n.transform!==void 0){if(typeof n.transform!="object"||!n.transform)throw new TypeError("config.transform, when provided, must be an object.");if(n.transform.numberOfChannels!==void 0&&(!Number.isInteger(n.transform.numberOfChannels)||n.transform.numberOfChannels<=0))throw new TypeError("config.transform.numberOfChannels, when provided, must be a positive integer.");if(n.transform.sampleRate!==void 0&&(!Number.isInteger(n.transform.sampleRate)||n.transform.sampleRate<=0))throw new TypeError("config.transform.sampleRate, when provided, must be a positive integer.");if(n.transform.sampleFormat!==void 0&&!["u8","s16","s32","f32"].includes(n.transform.sampleFormat))throw new TypeError("config.transform.sampleFormat, when provided, must be one of: u8, s16, s32, f32.");if(n.transform.process!==void 0&&typeof n.transform.process!="function")throw new TypeError("config.transform.process, when provided, must be a function.")}if(n.onEncodedPacket!==void 0&&typeof n.onEncodedPacket!="function")throw new TypeError("config.onEncodedPacket, when provided, must be a function.");if(n.onEncoderConfig!==void 0&&typeof n.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");ld(n.codec,n)},ld=(n,t)=>{if(!t||typeof t!="object")throw new TypeError("Encoding options must be an object.");if(t.bitrateMode!==void 0&&!["constant","variable"].includes(t.bitrateMode))throw new TypeError("bitrateMode, when provided, must be 'constant' or 'variable'.");if(t.fullCodecString!==void 0&&typeof t.fullCodecString!="string")throw new TypeError("fullCodecString, when provided, must be a string.");if(t.fullCodecString!==void 0&&$e(t.fullCodecString)!==n)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${n}).`)},Uc=n=>{let t=n.bitrate instanceof xe?n.bitrate._toAudioBitrate(n.codec):n.bitrate;return{codec:n.fullCodecString??Aa(n.codec,n.numberOfChannels,n.sampleRate),numberOfChannels:n.numberOfChannels,sampleRate:n.sampleRate,bitrate:t,bitrateMode:n.bitrateMode,...Zu(n.codec)}},xe=class{constructor(t){this._factor=t}_toVideoBitrate(t,e,r){let i=e*r,a={avc:1,hevc:.6,vp9:.6,av1:.4,vp8:1.2},s=1920*1080,o=3e6,c=Math.pow(i/s,.95),m=o*c*a[t]*this._factor;return Math.ceil(m/1e3)*1e3}_toAudioBitrate(t){if(te.includes(t)||t==="flac")return;let r={aac:128e3,opus:64e3,mp3:16e4,vorbis:64e3,ac3:384e3,eac3:192e3}[t];if(!r)throw new Error(`Unhandled codec: ${t}`);let i=r*this._factor;return t==="aac"?i=[96e3,128e3,16e4,192e3].reduce((s,o)=>Math.abs(o-i)Math.abs(o-i){if(re.includes(n))return Gn(n);if(se.includes(n))return Qn(n);if(Fe.includes(n))return jn(n);throw new TypeError(`Unknown codec '${n}'.`)},Gn=async(n,t={})=>{let{width:e=1280,height:r=720,bitrate:i=1e6,...a}=t;if(!re.includes(n))return!1;if(!Number.isInteger(e)||e<=0)throw new TypeError("width must be a positive integer.");if(!Number.isInteger(r)||r<=0)throw new TypeError("height must be a positive integer.");if(!(i instanceof xe)&&(!Number.isInteger(i)||i<=0))throw new TypeError("bitrate must be a positive integer or a quality.");ud(n,a);let s=Vc({codec:n,width:e,height:r,bitrate:i,framerate:void 0,...a,alpha:"discard"}),o=JSON.stringify(s),c=Ks.get(o);if(c)return c;let u=(async()=>Gi.some(d=>d.supports(n,s))?!0:typeof VideoEncoder>"u"||(e%2===1||r%2===1)&&(n==="avc"||n==="hevc")||!(await VideoEncoder.isConfigSupported(s)).supported?!1:xt()?new Promise(async d=>{try{let f=new VideoEncoder({output:()=>{},error:()=>d(!1)});f.configure(s);let h=new Uint8Array(e*r*4),b=new VideoFrame(h,{format:"RGBA",codedWidth:e,codedHeight:r,timestamp:0});f.encode(b),b.close(),await f.flush(),d(!0)}catch{d(!1)}}):!0)();return Ks.set(o,u),u},Qn=async(n,t={})=>{let{numberOfChannels:e=2,sampleRate:r=48e3,bitrate:i=128e3,...a}=t;if(!se.includes(n))return!1;if(!Number.isInteger(e)||e<=0)throw new TypeError("numberOfChannels must be a positive integer.");if(!Number.isInteger(r)||r<=0)throw new TypeError("sampleRate must be a positive integer.");if(!(i instanceof xe)&&(!Number.isInteger(i)||i<=0))throw new TypeError("bitrate must be a positive integer.");ld(n,a);let s=Uc({codec:n,numberOfChannels:e,sampleRate:r,bitrate:i,...a}),o=JSON.stringify(s),c=Gs.get(o);if(c)return c;let u=(async()=>Qi.some(m=>m.supports(n,s))||te.includes(n)?!0:typeof AudioEncoder>"u"?!1:(await AudioEncoder.isConfigSupported(s)).supported===!0)();return Gs.set(o,u),u},jn=async n=>!!Fe.includes(n),gd=async()=>{let[n,t,e]=await Promise.all([zc(),Ki(),Nc()]);return[...n,...t,...e]},zc=async(n=re,t)=>{let e=await Promise.all(n.map(r=>Gn(r,t)));return n.filter((r,i)=>e[i])},Ki=async(n=se,t)=>{let e=await Promise.all(n.map(r=>Qn(r,t)));return n.filter((r,i)=>e[i])},Nc=async(n=Fe)=>{let t=await Promise.all(n.map(jn));return n.filter((e,r)=>t[r])},Xs=async(n,t)=>{for(let e of n)if(await Gn(e,t))return e;return null},bd=async(n,t)=>{for(let e of n)if(await Qn(e,t))return e;return null},yd=async n=>{for(let t of n)if(await jn(t))return t;return null};var Xn=class{static supports(t,e){return!1}},$n=class{static supports(t,e){return!1}},Yn=class{static supports(t,e){return!1}},Zn=class{static supports(t,e){return!1}},Pr=[],Cr=[],Gi=[],Qi=[],kd=n=>{if(n.prototype instanceof Xn){let t=n;if(Pr.includes(t)){console.warn("Video decoder already registered.");return}Pr.push(t),Us.clear()}else if(n.prototype instanceof $n){let t=n;if(Cr.includes(t)){console.warn("Audio decoder already registered.");return}Cr.push(t),zs.clear()}else throw new TypeError("Decoder must be a CustomVideoDecoder or CustomAudioDecoder.")},Td=n=>{if(n.prototype instanceof Yn){let t=n;if(Gi.includes(t)){console.warn("Video encoder already registered.");return}Gi.push(t),Ks.clear()}else if(n.prototype instanceof Zn){let t=n;if(Qi.includes(t)){console.warn("Audio encoder already registered.");return}Qi.push(t),Gs.clear()}else throw new TypeError("Encoder must be a CustomVideoEncoder or CustomAudioEncoder.")};var wd=n=>{let r=n,i=4096,a=0,s=12,o=0;for(r<0&&(r=-r,a=128),r+=33,r>8191&&(r=8191);(r&i)!==i&&s>=5;)i>>=1,s--;return o=r>>s-4&15,~(a|s-5<<4|o)&255},Sd=n=>{let e=0,r=0,i=~n;i&128&&(i&=-129,e=-1),r=((i&240)>>4)+5;let a=(1<{let e=2048,r=0,i=11,a=0,s=n;for(s<0&&(s=-s,r=128),s>4095&&(s=4095);(s&e)!==e&&i>=5;)e>>=1,i--;return a=s>>(i===4?1:i-4)&15,(r|i-4<<4|a)^85},xd=n=>{let t=0,e=0,r=n^85;r&128&&(r&=-129,t=-1),e=((r&240)>>4)+4;let i=0;return e!==4?i=1<{if(!n||typeof n!="object")throw new TypeError("options must be an object.");if(n.metadataOnly!==void 0&&typeof n.metadataOnly!="boolean")throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(n.verifyKeyPackets!==void 0&&typeof n.verifyKeyPackets!="boolean")throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(n.verifyKeyPackets&&n.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(n.skipLiveWait!==void 0&&typeof n.skipLiveWait!="boolean")throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},nr=n=>{if(!fr(n))throw new TypeError("timestamp must be a number.")},Lc=(n,t,e)=>e.verifyKeyPackets?t.then(async r=>{if(!r||r.type==="delta")return r;let i=await n.determinePacketType(r);return i&&(r.type=i),r}):t,bt=class{constructor(t){if(!(t instanceof vr))throw new TypeError("track must be an InputTrack.");this._track=t}async getFirstPacket(t={}){if(ni(t),this._track.input._disposed)throw new ke;return Lc(this._track,this._track._backing.getFirstPacket(t),t)}async getFirstKeyPacket(t={}){ni(t);let e=await this.getFirstPacket(t);return e?e.type==="key"?e:this.getNextKeyPacket(e,t):null}async getPacket(t,e={}){if(nr(t),ni(e),this._track.input._disposed)throw new ke;return Lc(this._track,this._track._backing.getPacket(t,e),e)}async getNextPacket(t,e={}){if(!(t instanceof Q))throw new TypeError("packet must be an EncodedPacket.");if(ni(e),this._track.input._disposed)throw new ke;return Lc(this._track,this._track._backing.getNextPacket(t,e),e)}async getKeyPacket(t,e={}){if(nr(t),ni(e),this._track.input._disposed)throw new ke;if(!e.verifyKeyPackets)return this._track._backing.getKeyPacket(t,e);let r=await this._track._backing.getKeyPacket(t,e);return r&&(p(r.type==="key"),await this._track.determinePacketType(r)==="delta"?this.getKeyPacket(r.timestamp-1/await this._track.getTimeResolution(),e):r)}async getNextKeyPacket(t,e={}){if(!(t instanceof Q))throw new TypeError("packet must be an EncodedPacket.");if(ni(e),this._track.input._disposed)throw new ke;if(!e.verifyKeyPackets)return this._track._backing.getNextKeyPacket(t,e);let r=await this._track._backing.getNextKeyPacket(t,e);return r&&(p(r.type==="key"),await this._track.determinePacketType(r)==="delta"?this.getNextKeyPacket(r,e):r)}packets(t,e,r={}){if(t!==void 0&&!(t instanceof Q))throw new TypeError("startPacket must be an EncodedPacket.");if(t!==void 0&&t.isMetadataOnly&&!r?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(e!==void 0&&!(e instanceof Q))throw new TypeError("endPacket must be an EncodedPacket.");if(ni(r),this._track.input._disposed)throw new ke;let i=[],{promise:a,resolve:s}=J(),{promise:o,resolve:c}=J(),u=!1,l=!1,m=null,d=[],f=()=>Math.max(2,d.length);(async()=>{let b=t??await this.getFirstPacket(r);for(;b&&!l&&!this._track.input._disposed&&!(e&&b.sequenceNumber>=e?.sequenceNumber);){if(i.length>f()){({promise:o,resolve:c}=J()),await o;continue}i.push(b),s(),{promise:a,resolve:s}=J(),b=await this.getNextPacket(b,r)}u=!0,s()})().catch(b=>{m||(m=b,s())});let h=this._track;return{async next(){for(;;){if(h.input._disposed)throw new ke;if(l)return{value:void 0,done:!0};if(m)throw m;if(i.length>0){let b=i.shift(),g=performance.now();for(d.push(g);d.length>0&&g-d[0]>=1e3;)d.shift();return c(),{value:b,done:!1}}else{if(u)return{value:void 0,done:!0};await a}}},async return(){return l=!0,c(),s(),{value:void 0,done:!0}},async throw(b){throw b},[Symbol.asyncIterator](){return this}}}},Jn=class{constructor(t,e){this.onSample=t;this.onError=e}},ji=class{mediaSamplesInRange(t=0,e=1/0,r){nr(t),nr(e);let i=[],a=!1,s=null,{promise:o,resolve:c}=J(),{promise:u,resolve:l}=J(),m=!1,d=!1,f=!1,h=null,b={...r,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let k=await this._createDecoder(A=>{if(l(),A.timestamp>=e&&(d=!0),d){A.close();return}s&&(A.timestamp>t?(i.push(s),a=!0):s.close()),A.timestamp>=t&&(i.push(A),a=!0),s=a?null:A,i.length>0&&(c(),{promise:o,resolve:c}=J())},A=>{h||(h=A,c())}),T=this._createPacketSink(),w=await T.getKeyPacket(t,b)??await T.getFirstKeyPacket(b),S=w,P=T.packets(w??void 0,void 0,b);for(await P.next();S&&!d&&!this._track.input._disposed;){let A=Pd(i.length);if(i.length+k.getDecodeQueueSize()>A){({promise:u,resolve:l}=J()),await u;continue}k.decode(S);let C=await P.next();if(C.done)break;S=C.value}await P.return(),!f&&!this._track.input._disposed&&await k.flush(),k.close(),!a&&s&&i.push(s),m=!0,c()})().catch(k=>{h||(h=k,c())});let g=this._track,y=()=>{s?.close();for(let k of i)k.close()};return{async next(){for(;;){if(g.input._disposed)throw y(),new ke;if(f)return{value:void 0,done:!0};if(h)throw y(),h;if(i.length>0){let k=i.shift();return l(),{value:k,done:!1}}else if(!m)await o;else return{value:void 0,done:!0}}},async return(){return f=!0,d=!0,l(),c(),y(),{value:void 0,done:!0}},async throw(k){throw k},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(t,e){Pu(t);let r=xu(t),i=[],a=[],{promise:s,resolve:o}=J(),{promise:c,resolve:u}=J(),l=!1,m=!1,d=null,f=y=>{a.push(y),o(),{promise:s,resolve:o}=J()},h={...e,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let y=await this._createDecoder(A=>{if(u(),m){A.close();return}let C=0;for(;i.length>0&&A.timestamp-i[0]>-1e-10;)C++,i.shift();if(C>0)for(let I=0;I{d||(d=A,o())}),k=this._createPacketSink(),T=null,w=null,S=-1,x=async()=>{p(w);let A=w;for(y.decode(A);A.sequenceNumberC&&!m;)({promise:c,resolve:u}=J()),await c;if(m)break;let I=await k.getNextPacket(A,h);p(I),y.decode(I),A=I}S=-1},P=async()=>{await y.flush();for(let A=0;A{d||(d=y,o())});let b=this._track,g=()=>{for(let y of a)y?.close()};return{async next(){for(;;){if(b.input._disposed)throw g(),new ke;if(m)return{value:void 0,done:!0};if(d)throw g(),d;if(a.length>0){let y=a.shift();return p(y!==void 0),u(),{value:y,done:!1}}else if(!l)await s;else return{value:void 0,done:!0}}},async return(){return m=!0,u(),o(),g(),{value:void 0,done:!0}},async throw(y){throw y},[Symbol.asyncIterator](){return this}}}},Pd=n=>n===0?40:8,Wc=class extends Jn{constructor(e,r,i,a,s,o){super(e,r);this.codec=i;this.decoderConfig=a;this.rotation=s;this.timeResolution=o;this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new cr;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;let c=Pr.find(u=>u.supports(i,a));if(c)this.customDecoder=new c,this.customDecoder.codec=i,this.customDecoder.config=a,this.customDecoder.onSample=u=>{if(!(u instanceof me))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(u)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let u=m=>{if(this.alphaQueue.length>0){let d=this.alphaQueue.shift();p(d!==void 0),this.mergeAlpha(m,d)}else this.colorQueue.push(m)};if(i==="avc"&&this.decoderConfig.description&&cn()){let m=Ra(j(this.decoderConfig.description));if(m&&m.sequenceParameterSets.length>0){let d=pn(m.sequenceParameterSets[0]);d&&d.frameMbsOnlyFlag===0&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"})}}let l=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:m=>{try{u(m)}catch(d){this.onError(d)}},error:m=>{m.stack=l,this.onError(m)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(p(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if(this.codec==="hevc"&&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(p(this.decoder),mr()||No(this.inputTimestamps,e.timestamp,r=>r),cn()&&this.currentPacketIndex===0){if(this.codec==="avc"){let r=[];for(let a of Qo(e.data,this.decoderConfig)){let s=jt(e.data[a.offset]);s>=20&&s<=31||r.push(e.data.subarray(a.offset,a.offset+a.length))}let i=il(r,this.decoderConfig);e=new Q(i,e.type,e.timestamp,e.duration)}else if(this.codec==="hevc"){let r=cl(e.data,this.decoderConfig);r&&(e=new Q(r,e.type,e.timestamp,e.duration))}}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha||this.mergerCreationFailed){this.pushNullAlphaFrame();return}if(!this.merger)try{this.merger=new Hc}catch(i){console.error("Due to an error, only color data will be decoded.",i),this.mergerCreationFailed=!0,this.decodeAlphaData(e);return}if(!this.alphaDecoder){let i=s=>{if(this.alphaDecoderQueueSize--,this.colorQueue.length>0){let o=this.colorQueue.shift();p(o!==void 0),this.mergeAlpha(o,s)}else this.alphaQueue.push(s);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){let o=this.colorQueue.shift();p(o!==void 0),this.mergeAlpha(o,null)}else this.alphaQueue.push(null)},a=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:s=>{try{i(s)}catch(o){this.onError(o)}},error:s=>{s.stack=a,this.onError(s)}}),this.alphaDecoder.configure(this.decoderConfig)}let r=Pi(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe=r==="key"),this.alphaHadKeyframe){if(this.codec==="hevc"&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha)){this.pushNullAlphaFrame();return}this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(r??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){this.alphaDecoderQueueSize===0?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(let r of mn(e,this.decoderConfig)){let i=ct(e[r.offset]);if(i===8||i===9)return!0}return!1}sampleHandler(e){if(mr()){if(this.sampleQueue.length>0&&e.timestamp>=X(this.sampleQueue).timestamp){for(let r of this.sampleQueue)this.finalizeAndEmitSample(r);this.sampleQueue.length=0}No(this.sampleQueue,e,r=>r.timestamp)}else{let r=this.inputTimestamps.shift();p(r!==void 0),e.setTimestamp(r),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,r){if(!r){let s=new me(e);this.sampleHandler(s);return}p(this.merger),this.merger.update(e,r),e.close(),r.close();let i=new VideoFrame(this.merger.canvas,{timestamp:e.timestamp,duration:e.duration??void 0}),a=new me(i);this.sampleHandler(a)}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(p(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),mr()){for(let 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()):(p(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(let e of this.sampleQueue)e.close();this.sampleQueue.length=0}},Hc=class{constructor(){typeof OffscreenCanvas<"u"?this.canvas=new OffscreenCanvas(300,150):this.canvas=document.createElement("canvas");let t=this.canvas.getContext("webgl2",{premultipliedAlpha:!1});if(!t)throw new Error("Couldn't acquire WebGL 2 context.");this.gl=t,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(){let t=this.createShader(this.gl.VERTEX_SHADER,`#version 300 es in vec2 a_position; in vec2 a_texCoord; out vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; } `),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_colorTexture; uniform sampler2D u_alphaTexture; in vec2 v_texCoord; out vec4 fragColor; void main() { vec3 color = texture(u_colorTexture, v_texCoord).rgb; float alpha = texture(u_alphaTexture, v_texCoord).r; fragColor = vec4(color, alpha); } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createShader(t,e){let r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),r}createVAO(){let t=this.gl.createVertexArray();this.gl.bindVertexArray(t);let e=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),r=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,r),this.gl.bufferData(this.gl.ARRAY_BUFFER,e,this.gl.STATIC_DRAW);let i=this.gl.getAttribLocation(this.program,"a_position"),a=this.gl.getAttribLocation(this.program,"a_texCoord");return this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(a),this.gl.vertexAttribPointer(a,2,this.gl.FLOAT,!1,16,8),t}createTexture(){let t=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,t),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),t}update(t,e){(t.displayWidth!==this.canvas.width||t.displayHeight!==this.canvas.height)&&(this.canvas.width=t.displayWidth,this.canvas.height=t.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,t),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,e),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}},Ir=class extends ji{constructor(t){if(!(t instanceof vt))throw new TypeError("videoTrack must be an InputVideoTrack.");super(),this._track=t}async _createDecoder(t,e){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.");let r=await this._track.getCodec(),i=await this._track.getRotation(),a=await this._track.getDecoderConfig(),s=await this._track.getTimeResolution();return p(r&&a),new Wc(t,e,r,a,i,s)}_createPacketSink(){return new bt(this._track)}async getSample(t,e={}){nr(t);for await(let r of this.mediaSamplesAtTimestamps([t],e))return r;throw new Error("Internal error: Iterator returned nothing.")}samples(t=0,e=1/0,r={}){return this.mediaSamplesInRange(t,e,r)}samplesAtTimestamps(t,e={}){return this.mediaSamplesAtTimestamps(t,e)}},Xi=class{constructor(t,e={}){this._rotation=0;this._initPromise=null;this._nextCanvasIndex=0;if(!(t instanceof vt))throw new TypeError("videoTrack must be an InputVideoTrack.");if(e&&typeof e!="object")throw new TypeError("options must be an object.");if(e.alpha!==void 0&&typeof e.alpha!="boolean")throw new TypeError("options.alpha, when provided, must be a boolean.");if(e.width!==void 0&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(e.height!==void 0&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(e.fit!==void 0&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(e.width!==void 0&&e.height!==void 0&&e.fit===void 0)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(e.crop!==void 0&&ii(e.crop,"options."),e.poolSize!==void 0&&(typeof e.poolSize!="number"||!Number.isInteger(e.poolSize)||e.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");this._videoTrack=t,this._alpha=e.alpha??!1,this._options=e,this._fit=e.fit??"fill",this._videoSampleSink=new Ir(t),this._canvasPool=Array.from({length:e.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??=(async()=>{let t=this._options,e=this._videoTrack,r=t.rotation??await e.getRotation(),i=await e.getSquarePixelWidth(),a=await e.getSquarePixelHeight(),[s,o]=r%180===0?[i,a]:[a,i],c=t.crop;c&&(c=ri(c,s,o));let[u,l]=c?[c.width,c.height]:[s,o],m=u/l;t.width!==void 0&&t.height===void 0?(u=t.width,l=Math.round(u/m)):t.width===void 0&&t.height!==void 0?(l=t.height,u=Math.round(l*m)):t.width!==void 0&&t.height!==void 0&&(u=t.width,l=t.height),this._width=u,this._height=l,this._rotation=r,this._crop=c})()}_videoSampleToWrappedCanvas(t){let e=this._width,r=this._height,i=this._canvasPool[this._nextCanvasIndex],a=!1;i||(typeof document<"u"?(i=document.createElement("canvas"),i.width=e,i.height=r):i=new OffscreenCanvas(e,r),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=i),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);let s=i.getContext("2d",{alpha:this._alpha||xt()});p(s),s.resetTransform(),a||(!this._alpha&&xt()?(s.fillStyle="black",s.fillRect(0,0,e,r)):s.clearRect(0,0,e,r)),t.drawWithFit(s,{fit:this._fit,rotation:this._rotation,crop:this._crop});let o={canvas:i,timestamp:t.timestamp,duration:t.duration};return t.close(),o}async getCanvas(t,e){nr(t),await this._ensureInit();let r=await this._videoSampleSink.getSample(t,e);return r&&this._videoSampleToWrappedCanvas(r)}async*canvases(t=0,e=1/0,r){await this._ensureInit(),yield*on(this._videoSampleSink.samples(t,e,r),i=>this._videoSampleToWrappedCanvas(i))}async*canvasesAtTimestamps(t,e){await this._ensureInit(),yield*on(this._videoSampleSink.samplesAtTimestamps(t,e),r=>r&&this._videoSampleToWrappedCanvas(r))}},qc=class extends Jn{constructor(e,r,i,a){super(e,r);this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new cr;this.customDecoderQueueSize=0;this.currentTimestamp=null;let s=c=>{(this.currentTimestamp===null||Math.abs(c.timestamp-this.currentTimestamp)>=c.duration)&&(this.currentTimestamp=c.timestamp);let u=this.currentTimestamp;if(this.currentTimestamp+=c.duration,c.numberOfFrames===0){c.close();return}let l=a.sampleRate;c.setTimestamp(Math.round(u*l)/l),e(c)},o=Cr.find(c=>c.supports(i,a));if(o)this.customDecoder=new o,this.customDecoder.codec=i,this.customDecoder.config=a,this.customDecoder.onSample=c=>{if(!(c instanceof Te))throw new TypeError("The argument passed to onSample must be an AudioSample.");s(c)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let c=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:u=>{try{s(new Te(u))}catch(l){this.onError(l)}},error:u=>{u.stack=c,this.onError(u)}}),this.decoder.configure(a)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(p(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--)):(p(this.decoder),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(p(this.decoder),this.decoder.flush())}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(p(this.decoder),this.decoder.close())}},Kc=class extends Jn{constructor(e,r,i){super(e,r);this.decoderConfig=i;this.currentTimestamp=null;p(te.includes(i.codec)),this.codec=i.codec;let{dataType:a,sampleSize:s,littleEndian:o}=Ae(this.codec);switch(this.inputSampleSize=s,s){case 1:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint8(u)-2**7:a==="signed"?this.readInputValue=(c,u)=>c.getInt8(u):a==="ulaw"?this.readInputValue=(c,u)=>Sd(c.getUint8(u)):a==="alaw"?this.readInputValue=(c,u)=>xd(c.getUint8(u)):p(!1);break;case 2:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint16(u,o)-2**15:a==="signed"?this.readInputValue=(c,u)=>c.getInt16(u,o):p(!1);break;case 3:a==="unsigned"?this.readInputValue=(c,u)=>Lr(c,u,o)-2**23:a==="signed"?this.readInputValue=(c,u)=>Cu(c,u,o):p(!1);break;case 4:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint32(u,o)-2**31:a==="signed"?this.readInputValue=(c,u)=>c.getInt32(u,o):a==="float"?this.readInputValue=(c,u)=>c.getFloat32(u,o):p(!1);break;case 8:a==="float"?this.readInputValue=(c,u)=>c.getFloat64(u,o):p(!1);break;default:ae(s),p(!1)}switch(s){case 1:a==="ulaw"||a==="alaw"?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(c,u,l)=>c.setInt16(u,l,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(c,u,l)=>c.setUint8(u,l+2**7));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(c,u,l)=>c.setInt16(u,l,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(c,u,l)=>c.setInt32(u,l<<8,!0);break;case 4:this.outputSampleSize=4,a==="float"?(this.outputFormat="f32",this.writeOutputValue=(c,u,l)=>c.setFloat32(u,l,!0)):(this.outputFormat="s32",this.writeOutputValue=(c,u,l)=>c.setInt32(u,l,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(c,u,l)=>c.setFloat32(u,l,!0);break;default:ae(s),p(!1)}}getDecodeQueueSize(){return 0}decode(e){let r=U(e.data),i=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,a=i*this.decoderConfig.numberOfChannels*this.outputSampleSize,s=new ArrayBuffer(a),o=new DataView(s);for(let m=0;m=c)&&(this.currentTimestamp=e.timestamp);let u=this.currentTimestamp;this.currentTimestamp+=c;let l=new Te({format:this.outputFormat,data:s,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:i,timestamp:u});this.onSample(l)}async flush(){}close(){}},Er=class extends ji{constructor(t){if(!(t instanceof _t))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=t}async _createDecoder(t,e){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.");let r=await this._track.getCodec(),i=await this._track.getDecoderConfig();return p(r&&i),te.includes(i.codec)?new Kc(t,e,i):new qc(t,e,r,i)}_createPacketSink(){return new bt(this._track)}async getSample(t,e={}){nr(t);for await(let r of this.mediaSamplesAtTimestamps([t],e))return r;throw new Error("Internal error: Iterator returned nothing.")}samples(t=0,e=1/0,r={}){return this.mediaSamplesInRange(t,e,r)}samplesAtTimestamps(t,e={}){return this.mediaSamplesAtTimestamps(t,e)}},$s=class{constructor(t){if(!(t instanceof _t))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new Er(t)}_audioSampleToWrappedArrayBuffer(t){let e={buffer:t.toAudioBuffer(),timestamp:t.timestamp,duration:t.duration};return t.close(),e}async getBuffer(t,e){nr(t);let r=await this._audioSampleSink.getSample(t,e);return r&&this._audioSampleToWrappedArrayBuffer(r)}buffers(t=0,e=1/0,r){return on(this._audioSampleSink.samples(t,e,r),i=>this._audioSampleToWrappedArrayBuffer(i))}buffersAtTimestamps(t,e){return on(this._audioSampleSink.samplesAtTimestamps(t,e),r=>r&&this._audioSampleToWrappedArrayBuffer(r))}};var vr=class n{constructor(t,e){this.input=t,this._backing=e}isVideoTrack(){return this instanceof vt}isAudioTrack(){return this instanceof _t}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return le(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return le(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return le(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return le(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getDisposition(){return this._backing.getDisposition()}get disposition(){return le(this._backing.getDisposition(),"disposition","getDisposition")}async getBitrate(){return this._backing.getBitrate()}async getAverageBitrate(){return this._backing.getAverageBitrate()}async getFirstTimestamp(){return(await this._backing.getFirstPacket({metadataOnly:!0}))?.timestamp??0}async computeDuration(t){let e=await this._backing.getPacket(1/0,{metadataOnly:!0,...t}),r=(e?.timestamp??0)+(e?.duration??0);return St(r,await this.getTimeResolution())}async getDurationFromMetadata(t={}){return this._backing.getDurationFromMetadata(t)}async computePacketStats(t=1/0,e){let r=new bt(this),i=1/0,a=-1/0,s=0,o=0;for await(let c of r.packets(void 0,void 0,{metadataOnly:!0,...e})){if(s>=t&&c.timestamp>=a)break;i=Math.min(i,c.timestamp),a=Math.max(a,c.timestamp+c.duration),s++,o+=c.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-i)).toPrecision(16)):0,averageBitrate:s?Number((8*o/(a-i)).toPrecision(16)):0}}async isLive(){return await this._backing.getLiveRefreshInterval()!==null}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(t){if(!(t instanceof n))throw new TypeError("other must be an InputTrack.");return this.input!==t.input||this===t?!1:(this._backing.getPairingMask()&t._backing.getPairingMask())!==0n}async getPairableTracks(t){return this.input.getTracks(_r({filter:e=>e.canBePairedWith(this)},t))}async getPairableVideoTracks(t){return this.input.getVideoTracks(_r({filter:e=>e.canBePairedWith(this)},t))}async getPairableAudioTracks(t){return this.input.getAudioTracks(_r({filter:e=>e.canBePairedWith(this)},t))}async getPrimaryPairableVideoTrack(t){return this.input.getPrimaryVideoTrack(_r({filter:e=>e.canBePairedWith(this)},t))}async getPrimaryPairableAudioTrack(t){return this.input.getPrimaryAudioTrack(_r({filter:e=>e.canBePairedWith(this)},t))}async hasPairableTrack(t){t&&=Gc(t);let e=await this.input.getTracks();for(let r of e)if(this.canBePairedWith(r)&&(!t||await t(r)))return!0;return!1}hasPairableVideoTrack(t){return t&&=Gc(t),this.hasPairableTrack(async e=>e.isVideoTrack()&&(!t||await t(e)))}hasPairableAudioTrack(t){return t&&=Gc(t),this.hasPairableTrack(async e=>e.isAudioTrack()&&(!t||await t(e)))}},le=(n,t,e)=>{if(n instanceof Promise)throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${e}()' instead.`);return n},Gc=n=>{if(n!==void 0&&typeof n!="function")throw new TypeError("predicate, when provided, must be a function.");return n?t=>{let e=i=>{if(typeof i!="boolean")throw new TypeError("predicate must return or resolve to a boolean value.");return i},r=n(t);return r instanceof Promise?r.then(e):e(r)}:void 0},vt=class extends vr{constructor(e,r){super(e,r);this._pixelAspectRatioCache=null;this._backing=r}get type(){return"video"}async getCodec(){return this._backing.getCodec()}get codec(){return le(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!1}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return le(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return le(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return le(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return le(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return le(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??=Ht({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()})}get pixelAspectRatio(){return this._pixelAspectRatioCache??=Ht({num:le(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*le(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:le(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*le(this._backing.getCodedWidth(),"pixelAspectRatio","getPixelAspectRatio")})}async getDisplayWidth(){let e=await this._backing.getMetadataDisplayWidth?.();return e??(await this.getRotation()%180===0?this.getSquarePixelWidth():this.getSquarePixelHeight())}get displayWidth(){let e=this._backing.getMetadataDisplayWidth?.();if(e!==void 0){let a=le(e,"displayWidth","getDisplayWidth");if(a!==null)return a}let i=le(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return le(i,"displayWidth","getDisplayWidth")}async getDisplayHeight(){let e=await this._backing.getMetadataDisplayHeight?.();return e??(await this.getRotation()%180===0?this.getSquarePixelHeight():this.getSquarePixelWidth())}get displayHeight(){let e=this._backing.getMetadataDisplayHeight?.();if(e!==void 0){let a=le(e,"displayHeight","getDisplayHeight");if(a!==null)return a}let i=le(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return le(i,"displayHeight","getDisplayHeight")}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){let e=await this._backing.getColorSpace();return e.primaries==="bt2020"||e.primaries==="smpte432"||e.transfer==="pg"||e.transfer==="hlg"||e.matrix==="bt2020-ncl"}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){let e=await this._backing.getMetadataCodecParameterString?.();return e??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let r=await this._backing.getCodec();return p(r!==null),Pr.some(a=>a.supports(r,e))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0}catch(e){return console.error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof Q))throw new TypeError("packet must be an EncodedPacket.");if(e.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");let r=await this.getCodec();if(r===null)return null;let i=await this.getDecoderConfig();return p(i),Pi(r,i,e.data)}},_t=class extends vr{constructor(t,e){super(t,e),this._backing=e}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return le(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return le(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return le(this._backing.getSampleRate(),"sampleRate","getSampleRate")}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){let t=await this._backing.getMetadataCodecParameterString?.();return t??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let t=await this._backing.getDecoderConfig();if(!t)return!1;let e=await this._backing.getCodec();return p(e!==null),Cr.some(r=>r.supports(e,t))||t.codec.startsWith("pcm-")?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(t)).supported===!0}catch(t){return console.error("Error during decodability check:",t),!1}}async determinePacketType(t){if(!(t instanceof Q))throw new TypeError("packet must be an EncodedPacket.");return await this.getCodec()===null?null:"key"}},Cd=n=>n??1/0,ea=n=>-(n??-1/0),Rr=n=>-n,$i=n=>{if(typeof n!="object"||!n)throw new TypeError("query must be an object.");if(n.filter!==void 0&&typeof n.filter!="function")throw new TypeError("query.filter, when provided, must be a function.");if(n.sortBy!==void 0&&typeof n.sortBy!="function")throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:n.filter?t=>{let e=i=>{if(typeof i!="boolean")throw new TypeError("query.filter must return or resolve to a boolean.");return i},r=n.filter(t);return r instanceof Promise?r.then(e):e(r)}:void 0,sortBy:n.sortBy?t=>{let e=i=>{if(typeof i!="number"&&(!Array.isArray(i)||!i.every(a=>typeof a=="number")))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return i},r=n.sortBy(t);return r instanceof Promise?r.then(e):e(r)}:void 0}},_r=(n,t)=>({filter:n?.filter||t?.filter?e=>{let r=n?.filter?.(e)??!0,i=a=>a===!1?!1:t?.filter?.(e)??!0;return r instanceof Promise?r.then(i):i(r)}:void 0,sortBy:n?.sortBy||t?.sortBy?e=>{let r=n?.sortBy?.(e)??[],i=t?.sortBy?.(e)??[],a=(s,o)=>[...Array.isArray(s)?s:[s],...Array.isArray(o)?o:[o]];return r instanceof Promise||i instanceof Promise?Promise.all([r,i]).then(([s,o])=>a(s,o)):a(r,i)}:void 0}),Ys=async(n,t)=>{let e=n;if(t?.filter){let s=n.map(c=>t.filter(c));if(s.some(c=>c instanceof Promise)){let c=await Promise.all(s);e=n.filter((u,l)=>c[l])}else e=n.filter((c,u)=>s[u])}if(!t?.sortBy)return e;let r=e.map(s=>t.sortBy(s)),a=r.some(s=>s instanceof Promise)?await Promise.all(r):r;return e.map((s,o)=>({track:s,sortValue:a[o]})).sort((s,o)=>{let c=Array.isArray(s.sortValue)?s.sortValue:[s.sortValue],u=Array.isArray(o.sortValue)?o.sortValue:[o.sortValue],l=Math.max(c.length,u.length);for(let m=0;ms.track)};yi();var rf=1,$l=2,Qc=null;typeof FinalizationRegistry<"u"&&(Qc=new FinalizationRegistry(n=>{for(let t of n)t.freed||t.free()}));var xr=class n extends je{constructor(e){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;if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(!Array.isArray(e.formats)||e.formats.some(r=>!(r instanceof Be)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ie||e.source instanceof Sr))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ie&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(e.initInput!==void 0&&!(e.initInput instanceof n))throw new TypeError("options.initInput, when provided, must be an Input.");e.formatOptions!==void 0&&td(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ie?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef),Qc?.register(this,this._sourceRefs,this)}get disposed(){return this._disposed}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){p(this._rootSource instanceof Ge);let r=await this._rootSource._resolveRequest(e);return this._emit("source",{source:r.source,request:e,isRoot:e.isRoot}),r}_getSourceCached(e,r=rf){let i=this._sourceCache.find(o=>o.cacheGroup===r&&Ic(o.request,e));if(i)return i.age++,Promise.resolve(i.sourceRef.source.ref());let a=this._sourceCachePromises.find(o=>o.cacheGroup===r&&Ic(o.request,e));if(a)return a.promise.then(o=>o.sourceRef.source.ref());let s=(async()=>{let o=await this._getSourceUncached(e);if(Kr(this._sourceCache,d=>d.cacheGroup===r&&d.sourceRef.source._refCount===1)>=4){let d=ba(this._sourceCache,h=>h.cacheGroup===r&&h.sourceRef.source._refCount===1?h.age:1/0);p(d!==-1);let f=this._sourceCache[d];this._sourceCache.splice(d,1),f.sourceRef.free(),Lo(this._sourceRefs,f.sourceRef)}this._sourceRefs.push(o);let l=this._sourceCachePromises.findIndex(d=>d.request===e);return p(l!==-1),this._sourceCachePromises.splice(l,1),{request:e,sourceRef:o,age:this._nextSourceCacheAge++,cacheGroup:r}})();return this._sourceCachePromises.push({request:e,cacheGroup:r,promise:s}),s.then(o=>{let c=o.sourceRef.source.ref();return this._sourceCache.push(o),c})}_getDemuxer(){return this._demuxerPromise??=(async()=>{this._reader=new Ar(this._rootSource),this._emit("source",{source:this._rootSource,request:null,isRoot:!0});for(let e of this._formats)if(await e._canReadInput(this))return this._format=e,this._onFormatDetermined?.(e),e._createDemuxer(this);throw new Yi})()}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),p(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof Yi)return!1;throw e}}async getFirstTimestamp(e){e??=await this.getTracks();let r=e.filter(a=>a!==null);if(r.length===0)return 0;let i=await Promise.all(r.map(a=>a.getFirstTimestamp()));return Math.min(...i)}async computeDuration(e,r){e??=await this.getTracks();let i=e.filter(s=>s!==null);if(i.length===0)return 0;let a=await Promise.all(i.map(s=>s.computeDuration(r)));return Math.max(...a)}async getDurationFromMetadata(e,r){e??=await this.getTracks();let i=e.filter(o=>o!==null),s=(await Promise.all(i.map(o=>o.getDurationFromMetadata(r)))).filter(o=>o!==null);return s.length===0?null:Math.max(...s)}async getTracks(e){e&&=$i(e);let i=(await this._getTrackBackings()).map(a=>this._wrapBackingAsTrack(a));return Ys(i,e)}async getVideoTracks(e){e&&=$i(e);let i=(await this.getTracks()).filter(a=>a.isVideoTrack());return Ys(i,e)}async getAudioTracks(e){e&&=$i(e);let i=(await this.getTracks()).filter(a=>a.isAudioTrack());return Ys(i,e)}async getPrimaryVideoTrack(e){e&&=$i(e);let r=_r(e,{sortBy:async a=>[Rr((await a.getDisposition()).default),Rr(await a.hasPairableAudioTrack()),Rr(!await a.hasOnlyKeyPackets()),ea(await a.getBitrate())]});return(await this.getVideoTracks(r))[0]??null}async getPrimaryAudioTrack(e){e&&=$i(e);let r=await this.getPrimaryVideoTrack(),i=_r(e,{sortBy:async s=>[Rr(!r||s.canBePairedWith(r)),Rr((await s.getDisposition()).default),ea(await s.getBitrate())]});return(await this.getAudioTracks(i))[0]??null}async _getTrackBackings(){let e=await this._getDemuxer();return this._trackBackingsCache??=await e.getTrackBackings()}_wrapBackingAsTrack(e){let r=this._backingToTrack.get(e);if(r)return r;let a=e.getType()==="video"?new vt(this,e):new _t(this,e);return this._backingToTrack.set(e,a),a}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){if(!this._disposed){this._disposed=!0;for(let e of this._sourceRefs)e.free();this._sourceRefs.length=0,Qc?.unregister(this),this._demuxerPromise?.then(e=>e.dispose())}}[Symbol.dispose](){this.dispose()}},Yi=class extends Error{constructor(t="Input has an unsupported or unrecognizable format."){super(t),this.name="UnsupportedInputFormatError"}},ke=class extends Error{constructor(t="Input has been disposed."){super(t),this.name="InputDisposedError"}};var Ar=class{constructor(t){this.source=t}get fileSize(){let t=this.source._getFileSize();if(t===void 0)throw new Error("Reading file size too early; read required first.");return t}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(t,e){if(this.source._disposed)throw new ke;if(t<0||this.fileSizeNonStrict!==null&&t+e>this.fileSizeNonStrict)return null;if(e===0){let a=new Uint8Array(0);return new ye(a,U(a),0,t,t)}let r=t+e,i=this.source._read(t,r,Pc,Cc);return i instanceof Promise?i.then(a=>a?new ye(a.bytes,a.view,a.offset,t,r):null):i?new ye(i.bytes,i.view,i.offset,t,r):null}requestSliceRange(t,e,r){if(this.source._disposed)throw new ke;if(t<0)return null;if(this.fileSizeNonStrict!==null)return this.requestSlice(t,de(this.fileSizeNonStrict-t,e,r));{let i=this.requestSlice(t,r),a=s=>s||(p(this.fileSizeNonStrict!==null),this.requestSlice(t,de(this.fileSizeNonStrict-t,e,r)));return i instanceof Promise?i.then(a):a(i)}}requestEntireFile(){if(this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let t=1024;return(async()=>{let e=[],r=0;for(;;){if(e.length===1&&this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let s=e.length*t,o=this.requestSliceRange(s,0,t);if(o instanceof Promise&&(o=await o),!o)break;e.push(B(o,o.length)),r+=o.length}let i=new Uint8Array(r),a=0;for(let s of e)i.set(s,a),a+=s.length;return new ye(i,U(i),0,0,r)})()}},ye=class n{constructor(t,e,r,i,a){this.bytes=t;this.view=e;this.offset=r;this.start=i;this.end=a;this.bufferPos=i-r}static tempFromBytes(t){return new n(t,U(t),0,0,t.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(t){this.bufferPos=t-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(t){this.bufferPos+=t}slice(t,e=this.end-t){if(tthis.end)throw new RangeError("Slicing outside of original slice.");return new n(this.bytes,this.view,this.offset,t,t+e)}},ze=(n,t)=>{if(n.filePosn.end)throw new RangeError(`Tried reading [${n.filePos}, ${n.filePos+t}), but slice is [${n.start}, ${n.end}). This is likely an internal error, please report it alongside the file that caused it.`)},B=(n,t)=>{ze(n,t);let e=n.bytes.subarray(n.bufferPos,n.bufferPos+t);return n.bufferPos+=t,e},O=n=>(ze(n,1),n.view.getUint8(n.bufferPos++)),Ui=(n,t)=>{ze(n,2);let e=n.view.getUint16(n.bufferPos,t);return n.bufferPos+=2,e},ce=n=>{ze(n,2);let t=n.view.getUint16(n.bufferPos,!1);return n.bufferPos+=2,t},mt=n=>{ze(n,3);let t=Lr(n.view,n.bufferPos,!1);return n.bufferPos+=3,t},wn=n=>{ze(n,2);let t=n.view.getInt16(n.bufferPos,!1);return n.bufferPos+=2,t},tr=(n,t)=>{ze(n,4);let e=n.view.getUint32(n.bufferPos,t);return n.bufferPos+=4,e},R=n=>{ze(n,4);let t=n.view.getUint32(n.bufferPos,!1);return n.bufferPos+=4,t},jr=n=>{ze(n,4);let t=n.view.getUint32(n.bufferPos,!0);return n.bufferPos+=4,t},Yt=n=>{ze(n,4);let t=n.view.getInt32(n.bufferPos,!1);return n.bufferPos+=4,t},nf=n=>{ze(n,4);let t=n.view.getInt32(n.bufferPos,!0);return n.bufferPos+=4,t},cc=(n,t)=>{let e,r;return t?(e=tr(n,!0),r=tr(n,!0)):(r=tr(n,!1),e=tr(n,!1)),r*4294967296+e},De=n=>{let t=R(n),e=R(n);return t*4294967296+e},xl=n=>{let t=Yt(n),e=R(n);return t*4294967296+e},Ol=n=>{let t=jr(n);return nf(n)*4294967296+t},vl=n=>{ze(n,4);let t=n.view.getFloat32(n.bufferPos,!1);return n.bufferPos+=4,t},ja=n=>{ze(n,8);let t=n.view.getFloat64(n.bufferPos,!1);return n.bufferPos+=8,t},ie=(n,t)=>{ze(n,t);let e="";for(let r=0;rhe.decode(B(n,t)).split(` `).map(a=>a.trim()).filter(a=>a.length>0&&!e?.ignore?.(a));var Pn=128,qe=10,Ji=["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"],Fl=(n,t)=>{let e=n.filePos;t.raw??={},t.raw.TAG??=B(n,Pn-3),n.filePos=e;let r=Zi(n,30);r&&(t.title??=r);let i=Zi(n,30);i&&(t.artist??=i);let a=Zi(n,30);a&&(t.album??=a);let s=Zi(n,4),o=Number.parseInt(s,10);Number.isInteger(o)&&o>0&&(t.date??=new Date(o,0,1));let c=B(n,30),u;if(c[28]===0&&c[29]!==0){let m=c[29];m>0&&(t.trackNumber??=m),n.skip(-30),u=Zi(n,28),n.skip(2)}else n.skip(-30),u=Zi(n,30);u&&(t.comment??=u);let l=O(n);l{let e=B(n,t),r=Hr(e.indexOf(0),e.length),i=e.subarray(0,r),a="";for(let s=0;s{let t=n.filePos,e=ie(n,3),r=O(n),i=O(n),a=O(n),s=R(n);if(e!=="ID3"||r===255||i===255||(s&2155905152)!==0)return n.filePos=t,null;let o=Ia(s);return{majorVersion:r,revision:i,flags:a,size:o}},Oi=(n,t,e)=>{if(![2,3,4].includes(t.majorVersion)){console.warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);return}let r=B(n,t.size),i=new jc(t,r);if(t.flags&16&&i.removeFooter(),t.flags&128&&t.majorVersion===3&&i.ununsynchronizeAll(),t.flags&64){let a=i.readU32();t.majorVersion===3?i.pos+=a:i.pos+=a-4}for(;i.pos<=i.bytes.length-i.frameHeaderSize();){let a=i.readId3V2Frame();if(!a)break;let s=i.pos,o=i.pos+a.size,c=!1,u=!1,l=!1;if(t.majorVersion===3?(c=!!(a.flags&64),u=!!(a.flags&128)):t.majorVersion===4&&(c=!!(a.flags&4),u=!!(a.flags&8),l=!!(a.flags&2)||!!(t.flags&128)),c){console.warn(`Skipping encrypted ID3v2 frame ${a.id}`),i.pos=o;continue}if(u){console.warn(`Skipping compressed ID3v2 frame ${a.id}`),i.pos=o;continue}if(l&&i.ununsynchronizeRegion(i.pos,o),e.raw??={},a.id==="TXXX"){let m=e.raw.TXXX??={},d=i.readId3V2TextEncoding(),f=i.readId3V2Text(d,o),h=i.readId3V2Text(d,o);m[f]??=h}else a.id[0]==="T"?e.raw[a.id]??=i.readId3V2EncodingAndText(o):e.raw[a.id]??=i.readBytes(a.size);switch(i.pos=s,a.id){case"TIT2":case"TT2":e.title??=i.readId3V2EncodingAndText(o);break;case"TIT3":case"TT3":e.description??=i.readId3V2EncodingAndText(o);break;case"TPE1":case"TP1":e.artist??=i.readId3V2EncodingAndText(o);break;case"TALB":case"TAL":e.album??=i.readId3V2EncodingAndText(o);break;case"TPE2":case"TP2":e.albumArtist??=i.readId3V2EncodingAndText(o);break;case"TRCK":case"TRK":{let d=i.readId3V2EncodingAndText(o).split("/"),f=Number.parseInt(d[0],10),h=d[1]&&Number.parseInt(d[1],10);Number.isInteger(f)&&f>0&&(e.trackNumber??=f),h&&Number.isInteger(h)&&h>0&&(e.tracksTotal??=h)}break;case"TPOS":case"TPA":{let d=i.readId3V2EncodingAndText(o).split("/"),f=Number.parseInt(d[0],10),h=d[1]&&Number.parseInt(d[1],10);Number.isInteger(f)&&f>0&&(e.discNumber??=f),h&&Number.isInteger(h)&&h>0&&(e.discsTotal??=h)}break;case"TCON":case"TCO":{let m=i.readId3V2EncodingAndText(o),d=/^\((\d+)\)/.exec(m);if(d){let f=Number.parseInt(d[1]);if(Ji[f]!==void 0){e.genre??=Ji[f];break}}if(d=/^\d+$/.exec(m),d){let f=Number.parseInt(d[0]);if(Ji[f]!==void 0){e.genre??=Ji[f];break}}e.genre??=m}break;case"TDRC":case"TDAT":{let m=i.readId3V2EncodingAndText(o),d=new Date(m);Number.isNaN(d.getTime())||(e.date??=d)}break;case"TYER":case"TYE":{let m=i.readId3V2EncodingAndText(o),d=Number.parseInt(m,10);Number.isInteger(d)&&(e.date??=new Date(d,0,1))}break;case"USLT":case"ULT":{let m=i.readU8();i.pos+=3,i.readId3V2Text(m,o),e.lyrics??=i.readId3V2Text(m,o)}break;case"COMM":case"COM":{let m=i.readU8();i.pos+=3,i.readId3V2Text(m,o),e.comment??=i.readId3V2Text(m,o)}break;case"APIC":case"PIC":{let m=i.readId3V2TextEncoding(),d;if(t.majorVersion===2){let g=i.readAscii(3);d=g==="PNG"?"image/png":g==="JPG"?"image/jpeg":"image/*"}else d=i.readId3V2Text(m,o);let f=i.readU8(),h=i.readId3V2Text(m,o).trimEnd(),b=o-i.pos;if(b>=0){let g=i.readBytes(b);e.images||(e.images=[]),e.images.push({data:g,mimeType:d,kind:f===3?"coverFront":f===4?"coverBack":"unknown",description:h})}}break;default:i.pos+=a.size;break}i.pos=o}},jc=class{constructor(t,e){this.header=t;this.bytes=e;this.pos=0;this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}frameHeaderSize(){return this.header.majorVersion===2?6:10}ununsynchronizeAll(){let t=[];for(let e=0;e{let c=this.pos+o;if(c>this.bytes.length)return!1;if(c<=this.bytes.length-this.frameHeaderSize()){this.pos+=o;let u=this.readAscii(4);if(u!=="\0\0\0\0"&&!/[0-9A-Z]{4}/.test(u))return!1}return!0};if(!s(r)){let o=this.header.majorVersion===4?e:Ia(e);s(o)&&(r=o)}return this.pos=a,{id:t,size:r,flags:i}}}readId3V2TextEncoding(){let t=this.readU8();if(t>3)throw new Error(`Unsupported text encoding: ${t}`);return t}readId3V2Text(t,e){let r=this.pos,i=this.readBytes(e-this.pos);switch(t){case 0:{let a="";for(let s=0;so===0&&i[c+1]===0&&c%2===0),i.length);return this.pos=r+Math.min(s+2,i.length),a.decode(i.subarray(2,s))}else if(i[0]===254&&i[1]===255){let a=new TextDecoder("utf-16be"),s=Hr(i.findIndex((o,c)=>o===0&&i[c+1]===0&&c%2===0),i.length);return this.pos=r+Math.min(s+2,i.length),a.decode(i.subarray(2,s))}else{let a=Hr(i.findIndex(s=>s===0),i.length);return this.pos=r+Math.min(a+1,i.length),he.decode(i.subarray(0,a))}case 2:{let a=new TextDecoder("utf-16be"),s=Hr(i.findIndex((o,c)=>o===0&&i[c+1]===0&&c%2===0),i.length);return this.pos=r+Math.min(s+2,i.length),a.decode(i.subarray(0,s))}case 3:{let a=Hr(i.findIndex(s=>s===0),i.length);return this.pos=r+Math.min(a+1,i.length),he.decode(i.subarray(0,a))}}}readId3V2EncodingAndText(t){if(this.pos>=t)return"";let e=this.readId3V2TextEncoding();return this.readId3V2Text(e,t)}},Fr=class{constructor(t){this.helper=new Uint8Array(8);this.helperView=U(this.helper);this.writer=t}writeId3V2Tag(t){let e=this.writer.getPos();this.writeAscii("ID3"),this.writeU8(4),this.writeU8(0),this.writeU8(0),this.writeSynchsafeU32(0);let r=this.writer.getPos(),i=new Set;for(let{key:o,value:c}of at(t))switch(o){case"title":this.writeId3V2TextFrame("TIT2",c),i.add("TIT2");break;case"description":this.writeId3V2TextFrame("TIT3",c),i.add("TIT3");break;case"artist":this.writeId3V2TextFrame("TPE1",c),i.add("TPE1");break;case"album":this.writeId3V2TextFrame("TALB",c),i.add("TALB");break;case"albumArtist":this.writeId3V2TextFrame("TPE2",c),i.add("TPE2");break;case"trackNumber":{let u=t.tracksTotal!==void 0?`${c}/${t.tracksTotal}`:c.toString();this.writeId3V2TextFrame("TRCK",u),i.add("TRCK")}break;case"discNumber":{let u=t.discsTotal!==void 0?`${c}/${t.discsTotal}`:c.toString();this.writeId3V2TextFrame("TPOS",u),i.add("TPOS")}break;case"genre":this.writeId3V2TextFrame("TCON",c),i.add("TCON");break;case"date":this.writeId3V2TextFrame("TDRC",c.toISOString().slice(0,10)),i.add("TDRC");break;case"lyrics":this.writeId3V2LyricsFrame(c),i.add("USLT");break;case"comment":this.writeId3V2CommentFrame(c),i.add("COMM");break;case"images":{let u={coverFront:3,coverBack:4,unknown:0};for(let l of c){let m=u[l.kind]??0,d=l.description??"";this.writeId3V2ApicFrame(l.mimeType,m,d,l.data)}}break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:ae(o)}if(t.raw)for(let o in t.raw){let c=t.raw[o];if(c==null||o.length!==4||i.has(o))continue;let u;if(typeof c=="string")if(tt(c)){u=new Uint8Array(c.length+2),u[0]=0;for(let m=0;m=2**32)throw new Error("This muxer only supports writing up to 2 ** 32 samples");d.writeBits(4,0),d.writeBits(32,u),this.writer.write(d.bytes),this.writer.write(new Uint8Array(16))}writePictureBlock(e){let r=32+e.mimeType.length+(e.description?.length??0)+e.data.length,i=new Uint8Array(r),a=0,s=U(i);s.setUint32(a,e.kind==="coverFront"?3:e.kind==="coverBack"?4:0),a+=4,s.setUint32(a,e.mimeType.length),a+=4,i.set($.encode(e.mimeType),8),a+=e.mimeType.length,s.setUint32(a,e.description?.length??0),a+=4,i.set($.encode(e.description??""),a),a+=e.description?.length??0,a+=16,s.setUint32(a,e.data.length),a+=4,i.set(e.data,a),a+=e.data.length,p(a===r);let o=new H(new Uint8Array(4));o.writeBits(1,0),o.writeBits(7,6),o.writeBits(24,r),this.writer.write(o.bytes),this.writer.write(i)}writeVorbisCommentAndPictureBlock(){if(this.format._options.appendOnly||this.writer.seek(af+Id.byteLength),Gt(this.output._metadataTags)){this.metadataWritten=!0;return}let e=this.output._metadataTags.images??[];for(let a of e)this.writePictureBlock(a);let r=gn(new Uint8Array(0),this.output._metadataTags,!1),i=new H(new Uint8Array(4));i.writeBits(1,1),i.writeBits(7,4),i.writeBits(24,r.length),this.writer.write(i.bytes),this.writer.write(r),this.metadataWritten=!0}async getMimeType(){return"audio/flac"}async addEncodedVideoPacket(){throw new Error("FLAC does not support video.")}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{if(this.validateTimestamp(e,r.timestamp,r.type==="key"),this.sampleRate===null){_e(i),p(i),p(i.decoderConfig),p(i.decoderConfig.description),this.sampleRate=i.decoderConfig.sampleRate,this.channels=i.decoderConfig.numberOfChannels;let d=new H(j(i.decoderConfig.description));d.skipBits(167);let f=d.readBits(5)+1;this.bitsPerSample=f,this.format._options.appendOnly&&this.writeHeader({minimumBlockSize:16,maximumBlockSize:65535,minimumFrameSize:0,maximumFrameSize:0,sampleRate:this.sampleRate,channels:this.channels,bitsPerSample:this.bitsPerSample,totalSamples:0})}this.metadataWritten||this.writeVorbisCommentAndPictureBlock();let s=ye.tempFromBytes(r.data);s.skip(2);let o=B(s,2),c=new H(o),u=ls(c.readBits(4));if(u===null)throw new Error("Invalid FLAC frame: Invalid block size.");ds(s);let l=ms(s,u);this.format._options.appendOnly||(this.blockSizes.push(l),this.frameSizes.push(r.data.length));let m=this.writer.getPos();this.writer.write(r.data),this.format._options.onFrame&&this.format._options.onFrame(r.data,m),await this.writer.flush()}finally{a()}}addSubtitleCue(){throw new Error("FLAC does not support subtitles.")}async finalize(){let e=await this.mutex.acquire();if(!this.format._options.appendOnly){let r=1/0,i=0,a=1/0,s=0,o=0;for(let c=0;c\s+((?:\d{2}:)?\d{2}:\d{2}.\d{3})/g,of=/^WEBVTT(.|\n)*?\n{2}/,en=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,eo=class{constructor(t){this.preambleText=null;this.preambleEmitted=!1;this.options=t}parse(t){t=t.replaceAll(`\r `,` `).replaceAll("\r",` `),ta.lastIndex=0;let e;if(!this.preambleText){if(!of.test(t))throw new Error("WebVTT preamble incorrect.");e=ta.exec(t);let r=t.slice(0,e?.index??t.length).trimEnd();if(!r)throw new Error("No WebVTT preamble provided.");this.preambleText=r,e&&(t=t.slice(e.index),ta.lastIndex=0)}for(;e=ta.exec(t);){let r=t.slice(0,e.index),i=e[1],a=e.index+e[0].length,s=t.indexOf(` `,a)+1,o=t.slice(a,s).trim(),c=t.indexOf(` `,a);c===-1&&(c=t.length);let u=to(e[2]),m=to(e[3])-u,d=t.slice(s,c).trim();t=t.slice(c).trimStart(),ta.lastIndex=0;let f={timestamp:u/1e3,duration:m/1e3,text:d,identifier:i,settings:o,notes:r},h={};this.preambleEmitted||(h.config={description:this.preambleText},this.preambleEmitted=!0),this.options.output(f,h)}}},cf=/(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})/,to=n=>{let t=cf.exec(n);if(!t)throw new Error("Expected match.");return 60*60*1e3*Number(t[1]||"0")+60*1e3*Number(t[2])+1e3*Number(t[3])+Number(t[4])},ro=n=>{let t=Math.floor(n/36e5),e=Math.floor(n%(60*60*1e3)/(60*1e3)),r=Math.floor(n%(60*1e3)/1e3),i=n%1e3;return t.toString().padStart(2,"0")+":"+e.toString().padStart(2,"0")+":"+r.toString().padStart(2,"0")+"."+i.toString().padStart(3,"0")};var ai=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer);this.offsets=new WeakMap}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(t){this.helperView.setUint32(0,Math.floor(t/2**32),!1),this.helperView.setUint32(4,t,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(t){for(let e=0;e[(n%256+256)%256],W=n=>(Je.setUint16(0,n,!1),[G[0],G[1]]),Zc=n=>(Je.setInt16(0,n,!1),[G[0],G[1]]),_d=n=>(Je.setUint32(0,n,!1),[G[1],G[2],G[3]]),_=n=>(Je.setUint32(0,n,!1),[G[0],G[1],G[2],G[3]]),ar=n=>(Je.setInt32(0,n,!1),[G[0],G[1],G[2],G[3]]),Mt=n=>(Je.setUint32(0,Math.floor(n/2**32),!1),Je.setUint32(4,n,!1),[G[0],G[1],G[2],G[3],G[4],G[5],G[6],G[7]]),uf=n=>(Je.setInt32(0,Math.floor(n/2**32),!1),Je.setUint32(4,n,!1),[G[0],G[1],G[2],G[3],G[4],G[5],G[6],G[7]]),Rd=n=>(Je.setInt16(0,2**8*n,!1),[G[0],G[1]]),kt=n=>(Je.setInt32(0,2**16*n,!1),[G[0],G[1],G[2],G[3]]),Xc=n=>(Je.setInt32(0,2**30*n,!1),[G[0],G[1],G[2],G[3]]),$c=(n,t)=>{let e=[],r=n;do{let i=r&127;r>>=7,e.length>0&&(i|=128),e.push(i),t!==void 0&&t--}while(r>0||t);return e.reverse()},ne=(n,t=!1)=>{let e=Array(n.length).fill(null).map((r,i)=>n.charCodeAt(i));return t&&e.push(0),e},Fd=n=>{let t=n*(Math.PI/180),e=Math.round(Math.cos(t)),r=Math.round(Math.sin(t));return[e,r,0,-r,e,0,0,0,1]},Md=Fd(0),Bd=n=>[kt(n[0]),kt(n[1]),Xc(n[2]),kt(n[3]),kt(n[4]),Xc(n[5]),kt(n[6]),kt(n[7]),Xc(n[8])],N=(n,t,e)=>({type:n,contents:t&&new Uint8Array(t.flat(10)),children:e}),Y=(n,t,e,r,i)=>N(n,[fe(t),_d(e),r??[]],i),Od=n=>n.isQuickTime?N("ftyp",[ne("qt "),_(512),ne("qt ")]):n.fragmented?n.cmaf?N("ftyp",[ne("iso5"),_(512),ne("iso5"),ne("iso6"),ne("mp41"),ne("cmfc"),ne("dash")]):N("ftyp",[ne("iso5"),_(512),ne("iso5"),ne("iso6"),ne("mp41")]):N("ftyp",[ne("isom"),_(512),ne("isom"),n.holdsAvc?ne("avc1"):[],ne("mp41")]),Jc=()=>N("styp",[ne("iso5"),_(0),ne("iso5"),ne("iso6"),ne("mp41"),ne("cmfc"),ne("dash")]),eu=(n,t)=>{let e=n.maxWrittenEndTimestamp-n.minWrittenTimestamp;return Number.isFinite(e)||(e=0),Y("sidx",1,0,[_(1),_(Ze),Mt(ue(n.minWrittenTimestamp,Ze)),Mt(0),W(0),W(1),_(t&2147483647),_(ue(e,Ze)),_(0)])},ra=n=>({type:"mdat",largeSize:n}),Dd=n=>({type:"free",size:n}),tn=n=>N("moov",void 0,[lf(n.creationTime,n.trackDatas),...n.trackDatas.map(t=>df(t,n.creationTime)),n.isFragmented?$f(n.trackDatas):null,ap(n)]),lf=(n,t)=>{let e=Math.max(0,...t.map(s=>ue(io(s),Ze)+ue(s.startTimestampOffset??0,Ze))),r=Math.max(0,...t.map(s=>s.track.id))+1,i=!Ut(n)||!Ut(e),a=i?Mt:_;return Y("mvhd",+i,0,[a(n),a(n),_(Ze),a(e),kt(1),Rd(1),Array(10).fill(0),Bd(Md),Array(24).fill(0),_(r)])},io=n=>{if(n.samples.length===0)return 0;let t=1/0,e=-1/0;for(let r=0;re&&(e=i.timestamp+i.duration)}return t===1/0?0:e-t},df=(n,t)=>{let e=Kd(n),r=n.startTimestampOffset!==null&&n.startTimestampOffset>0;return N("trak",void 0,[mf(n,t),r?ff(n,n.startTimestampOffset):null,pf(n,t),e.name!==void 0?N("udta",void 0,[N("name",[...$.encode(e.name)])]):null])},mf=(n,t)=>{let e=ue(io(n),Ze)+ue(n.startTimestampOffset??0,Ze),r=!Ut(t)||!Ut(e),i=r?Mt:_,a;if(n.type==="video"){let o=n.track.metadata.rotation;a=Fd(o??0)}else a=Md;let s=2;return n.track.metadata.disposition?.default!==!1&&(s|=1),Y("tkhd",+r,s,[i(t),i(t),_(n.track.id),_(0),i(e),Array(8).fill(0),W(0),W(n.track.id),Rd(n.type==="audio"?1:0),W(0),Bd(a),kt(n.type==="video"?n.info.width:0),kt(n.type==="video"?n.info.height:0)])},ff=(n,t)=>{let e=ue(t,Ze),r=ue(io(n),Ze),i=!Ut(e)||!Ut(r),a=i?Mt:_,s=i?uf:ar;return N("edts",void 0,[Y("elst",i?1:0,0,[_(2),a(e),s(-1),kt(1),a(r),s(0),kt(1)])])},pf=(n,t)=>N("mdia",void 0,[hf(n,t),tu(!0,gf[n.type],bf[n.type]),yf(n)]),hf=(n,t)=>{let e=ue(io(n),n.timescale),r=!Ut(t)||!Ut(e),i=r?Mt:_;return Y("mdhd",+r,0,[i(t),i(t),_(n.timescale),i(e),W(qd(n.track.metadata.languageCode??ee)),W(0)])},gf={video:"vide",audio:"soun",subtitle:"text"},bf={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},tu=(n,t,e,r="\0\0\0\0")=>Y("hdlr",0,0,[n?ne("mhlr"):_(0),ne(t),ne(r),_(0),_(0),ne(e,!0)]),yf=n=>N("minf",void 0,[Sf[n.type](),Af(),Cf(n)]),kf=()=>Y("vmhd",0,1,[W(0),W(0),W(0),W(0)]),Tf=()=>Y("smhd",0,0,[W(0),W(0)]),wf=()=>Y("nmhd",0,0),Sf={video:kf,audio:Tf,subtitle:wf},Af=()=>N("dinf",void 0,[xf()]),xf=()=>Y("dref",0,0,[_(1)],[Pf()]),Pf=()=>Y("url ",0,1),Cf=n=>{let t=n.compositionTimeOffsetTable.length>1||n.compositionTimeOffsetTable.some(e=>e.sampleCompositionTimeOffset!==0);return N("stbl",void 0,[If(n),Hf(n),t?jf(n):null,t?Xf(n):null,Kf(n),Gf(n),Qf(n),qf(n)])},If=n=>{let t;if(n.type==="video")t=Ef(up(n.track.source._codec,n.info.decoderConfig.codec),n);else if(n.type==="audio"){let e=Hd(n.track.source._codec,n.muxer.isQuickTime);p(e),t=Bf(e,n)}else n.type==="subtitle"&&(t=Lf(mp[n.track.source._codec],n));return p(t),Y("stsd",0,0,[_(1)],[t])},Ef=(n,t)=>N(n,[Array(6).fill(0),W(1),W(0),W(0),Array(12).fill(0),W(t.info.width),W(t.info.height),_(4718592),_(4718592),_(0),W(1),Array(32).fill(0),W(24),Zc(65535)],[lp[t.track.source._codec](t),vf(t),fa(t.info.decoderConfig.colorSpace)?_f(t):null]),vf=n=>n.info.pixelAspectRatio.num===n.info.pixelAspectRatio.den?null:N("pasp",[_(n.info.pixelAspectRatio.num),_(n.info.pixelAspectRatio.den)]),_f=n=>N("colr",[ne("nclx"),W(rt[n.info.decoderConfig.colorSpace.primaries]),W(it[n.info.decoderConfig.colorSpace.transfer]),W(nt[n.info.decoderConfig.colorSpace.matrix]),fe((n.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Rf=n=>n.info.decoderConfig&&N("avcC",[...j(n.info.decoderConfig.description)]),Ff=n=>n.info.decoderConfig&&N("hvcC",[...j(n.info.decoderConfig.description)]),Ed=n=>{if(!n.info.decoderConfig)return null;let t=n.info.decoderConfig,e=t.codec.split("."),r=Number(e[1]),i=Number(e[2]),a=Number(e[3]),s=e[4]?Number(e[4]):1,o=e[8]?Number(e[8]):Number(t.colorSpace?.fullRange??0),c=(a<<4)+(s<<1)+o,u=e[5]?Number(e[5]):t.colorSpace?.primaries?rt[t.colorSpace.primaries]:2,l=e[6]?Number(e[6]):t.colorSpace?.transfer?it[t.colorSpace.transfer]:2,m=e[7]?Number(e[7]):t.colorSpace?.matrix?nt[t.colorSpace.matrix]:2;return Y("vpcC",1,0,[fe(r),fe(i),fe(c),fe(u),fe(l),fe(m),W(0)])},Mf=n=>N("av1C",Sa(n.info.decoderConfig.codec)),Bf=(n,t)=>{let e=0,r,i=16,a=te.includes(t.track.source._codec);if(a){let s=t.track.source._codec,{sampleSize:o}=Ae(s);i=8*o,i>16&&(e=1)}if(t.muxer.isQuickTime&&(e=1),e===0)r=[Array(6).fill(0),W(1),W(e),W(0),_(0),W(t.info.numberOfChannels),W(i),W(0),W(0),W(t.info.sampleRate<2**16?t.info.sampleRate:0),W(0)];else{let s=a?0:-2;r=[Array(6).fill(0),W(1),W(e),W(0),_(0),W(t.info.numberOfChannels),W(Math.min(i,16)),Zc(s),W(0),W(t.info.sampleRate<2**16?t.info.sampleRate:0),W(0),a?[_(1),_(i/8),_(t.info.numberOfChannels*i/8)]:[_(0),_(0),_(0)],_(2)]}return N(n,r,[dp(t.track.source._codec,t.muxer.isQuickTime)?.(t)??null])},Yc=n=>{let t;switch(n.track.source._codec){case"aac":t=64;break;case"mp3":t=107;break;case"vorbis":t=221;break;default:throw new Error(`Unhandled audio codec: ${n.track.source._codec}`)}let e=[...fe(t),...fe(21),..._d(0),..._(0),..._(0)];if(n.info.decoderConfig.description){let r=j(n.info.decoderConfig.description);e=[...e,...fe(5),...$c(r.byteLength),...r]}return e=[...W(1),...fe(0),...fe(4),...$c(e.length),...e,...fe(6),...fe(1),...fe(2)],e=[...fe(3),...$c(e.length),...e],Y("esds",0,0,e)},Mr=n=>N("wave",void 0,[Of(n),Df(n),N("\0\0\0\0")]),Of=n=>N("frma",[ne(Hd(n.track.source._codec,n.muxer.isQuickTime))]),Df=n=>{let{littleEndian:t}=Ae(n.track.source._codec);return N("enda",[W(+t)])},Vf=n=>{let t=n.info.numberOfChannels,e=3840,r=n.info.sampleRate,i=0,a=0,s=new Uint8Array(0),o=n.info.decoderConfig?.description;if(o){p(o.byteLength>=18);let c=j(o),u=yr(c);t=u.outputChannelCount,e=u.preSkip,r=u.inputSampleRate,i=u.outputGain,a=u.channelMappingFamily,u.channelMappingTable&&(s=u.channelMappingTable)}return N("dOps",[fe(0),fe(t),W(e),_(r),Zc(i),fe(a),...s])},Uf=n=>{let t=n.info.decoderConfig?.description;p(t);let e=j(t);return Y("dfLa",0,0,[...e.subarray(4)])},Rt=n=>{let{littleEndian:t,sampleSize:e}=Ae(n.track.source._codec),r=+t;return Y("pcmC",0,0,[fe(r),fe(8*e)])},zf=n=>{let t=Oa(n.info.firstPacket.data);if(!t)throw new Error("Couldn't extract AC-3 frame info from the audio packet. Ensure the packets contain valid AC-3 sync frames (as specified in ETSI TS 102 366).");let e=new Uint8Array(3),r=new H(e);return r.writeBits(2,t.fscod),r.writeBits(5,t.bsid),r.writeBits(3,t.bsmod),r.writeBits(3,t.acmod),r.writeBits(1,t.lfeon),r.writeBits(5,t.bitRateCode),r.writeBits(5,0),N("dac3",[...e])},Nf=n=>{let t=Da(n.info.firstPacket.data);if(!t)throw new Error("Couldn't extract E-AC-3 frame info from the audio packet. Ensure the packets contain valid E-AC-3 sync frames (as specified in ETSI TS 102 366).");let e=16;for(let s of t.substreams)e+=23,s.numDepSub>0?e+=9:e+=1;let r=Math.ceil(e/8),i=new Uint8Array(r),a=new H(i);a.writeBits(13,t.dataRate),a.writeBits(3,t.substreams.length-1);for(let s of t.substreams)a.writeBits(2,s.fscod),a.writeBits(5,s.bsid),a.writeBits(1,0),a.writeBits(1,0),a.writeBits(3,s.bsmod),a.writeBits(3,s.acmod),a.writeBits(1,s.lfeon),a.writeBits(3,0),a.writeBits(4,s.numDepSub),s.numDepSub>0?a.writeBits(9,s.chanLoc):a.writeBits(1,0);return N("dec3",[...i])},Lf=(n,t)=>N(n,[Array(6).fill(0),W(1)],[fp[t.track.source._codec](t)]),Wf=n=>N("vttC",[...$.encode(n.info.config.description)]);var Hf=n=>Y("stts",0,0,[_(n.timeToSampleTable.length),n.timeToSampleTable.map(t=>[_(t.sampleCount),_(t.sampleDelta)])]),qf=n=>{if(n.samples.every(e=>e.type==="key"))return null;let t=[...n.samples.entries()].filter(([,e])=>e.type==="key");return Y("stss",0,0,[_(t.length),t.map(([e])=>_(e+1))])},Kf=n=>Y("stsc",0,0,[_(n.compactlyCodedChunkTable.length),n.compactlyCodedChunkTable.map(t=>[_(t.firstChunk),_(t.samplesPerChunk),_(1)])]),Gf=n=>{if(n.type==="audio"&&n.info.requiresPcmTransformation){let{sampleSize:t}=Ae(n.track.source._codec);return Y("stsz",0,0,[_(t*n.info.numberOfChannels),_(n.samples.reduce((e,r)=>e+ue(r.duration,n.timescale),0))])}return Y("stsz",0,0,[_(0),_(n.samples.length),n.samples.map(t=>_(t.size))])},Qf=n=>n.finalizedChunks.length>0&&X(n.finalizedChunks).offset>=2**32?Y("co64",0,0,[_(n.finalizedChunks.length),n.finalizedChunks.map(t=>Mt(t.offset))]):Y("stco",0,0,[_(n.finalizedChunks.length),n.finalizedChunks.map(t=>_(t.offset))]),jf=n=>Y("ctts",1,0,[_(n.compositionTimeOffsetTable.length),n.compositionTimeOffsetTable.map(t=>[_(t.sampleCount),ar(t.sampleCompositionTimeOffset)])]),Xf=n=>{let t=1/0,e=-1/0,r=1/0,i=-1/0;p(n.compositionTimeOffsetTable.length>0),p(n.samples.length>0);for(let s=0;s=2**31?null:Y("cslg",0,0,[ar(a),ar(t),ar(e),ar(r),ar(i)])},$f=n=>N("mvex",void 0,n.map(Yf)),Yf=n=>Y("trex",0,0,[_(n.track.id),_(1),_(0),_(0),_(0)]),ru=(n,t)=>N("moof",void 0,[Zf(n),...t.map(Jf)]),Zf=n=>Y("mfhd",0,0,[_(n)]),Vd=n=>{let t=0,e=0,r=0,i=0,a=n.type==="delta";return e|=+a,a?t|=1:t|=2,t<<24|e<<16|r<<8|i},Jf=n=>N("traf",void 0,[ep(n),tp(n),rp(n)]),ep=n=>{p(n.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;let e=n.currentChunk.samples[1]??n.currentChunk.samples[0],r={duration:e.timescaleUnitsToNextSample,size:e.size,flags:Vd(e)};return Y("tfhd",0,t,[_(n.track.id),_(r.duration),_(r.size),_(r.flags)])},tp=n=>(p(n.currentChunk),Y("tfdt",1,0,[Mt(ue(n.currentChunk.startTimestamp,n.timescale))])),rp=n=>{p(n.currentChunk);let t=n.currentChunk.samples.map(b=>b.timescaleUnitsToNextSample),e=n.currentChunk.samples.map(b=>b.size),r=n.currentChunk.samples.map(Vd),i=n.currentChunk.samples.map(b=>ue(b.timestamp-b.decodeTimestamp,n.timescale)),a=new Set(t),s=new Set(e),o=new Set(r),c=new Set(i),u=o.size===2&&r[0]!==r[1],l=a.size>1,m=s.size>1,d=!u&&o.size>1,f=c.size>1||[...c].some(b=>b!==0),h=0;return h|=1,h|=4*+u,h|=256*+l,h|=512*+m,h|=1024*+d,h|=2048*+f,Y("trun",1,h,[_(n.currentChunk.samples.length),_(n.currentChunk.offset-n.currentChunk.moofOffset||0),u?_(r[0]):[],n.currentChunk.samples.map((b,g)=>[l?_(t[g]):[],m?_(e[g]):[],d?_(r[g]):[],f?ar(i[g]):[]])])},Ud=n=>N("mfra",void 0,[...n.map(ip),np()]),ip=(n,t)=>Y("tfra",1,0,[_(n.track.id),_(63),_(n.finalizedChunks.length),n.finalizedChunks.map(r=>[Mt(ue(r.samples[0].timestamp,n.timescale)),Mt(r.moofOffset),_(t+1),_(1),_(1)])]),np=()=>Y("mfro",0,0,[_(0)]),zd=()=>N("vtte"),Nd=(n,t,e,r,i)=>N("vttc",void 0,[i!==null?N("vsid",[ar(i)]):null,e!==null?N("iden",[...$.encode(e)]):null,t!==null?N("ctim",[...$.encode(ro(t))]):null,r!==null?N("sttg",[...$.encode(r)]):null,N("payl",[...$.encode(n)])]),Ld=n=>N("vtta",[...$.encode(n)]),ap=n=>{let t=[],e=n.format._options.metadataFormat??"auto",r=n.output._metadataTags;if(e==="mdir"||e==="auto"&&!n.isQuickTime){let i=op(r);i&&t.push(i)}else if(e==="mdta"){let i=cp(r);i&&t.push(i)}else(e==="udta"||e==="auto"&&n.isQuickTime)&&sp(t,n.output._metadataTags);return t.length===0?null:N("udta",void 0,t)},sp=(n,t)=>{for(let{key:e,value:r}of at(t))switch(e){case"title":n.push(Ft("\xA9nam",r));break;case"description":n.push(Ft("\xA9des",r));break;case"artist":n.push(Ft("\xA9ART",r));break;case"album":n.push(Ft("\xA9alb",r));break;case"albumArtist":n.push(Ft("albr",r));break;case"genre":n.push(Ft("\xA9gen",r));break;case"date":n.push(Ft("\xA9day",r.toISOString().slice(0,10)));break;case"comment":n.push(Ft("\xA9cmt",r));break;case"lyrics":n.push(Ft("\xA9lyr",r));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:ae(e)}if(t.raw)for(let e in t.raw){let r=t.raw[e];r==null||e.length!==4||n.some(i=>i.type===e)||(typeof r=="string"?n.push(Ft(e,r)):r instanceof Uint8Array&&n.push(N(e,Array.from(r))))}},Ft=(n,t)=>{let e=$.encode(t);return N(n,[W(e.length),W(qd("und")),Array.from(e)])},vd={"image/jpeg":13,"image/png":14,"image/bmp":27},Wd=(n,t)=>{let e=[];for(let{key:r,value:i}of at(n))switch(r){case"title":e.push({key:t?"title":"\xA9nam",value:yt(i)});break;case"description":e.push({key:t?"description":"\xA9des",value:yt(i)});break;case"artist":e.push({key:t?"artist":"\xA9ART",value:yt(i)});break;case"album":e.push({key:t?"album":"\xA9alb",value:yt(i)});break;case"albumArtist":e.push({key:t?"album_artist":"aART",value:yt(i)});break;case"comment":e.push({key:t?"comment":"\xA9cmt",value:yt(i)});break;case"genre":e.push({key:t?"genre":"\xA9gen",value:yt(i)});break;case"lyrics":e.push({key:t?"lyrics":"\xA9lyr",value:yt(i)});break;case"date":e.push({key:t?"date":"\xA9day",value:yt(i.toISOString().slice(0,10))});break;case"images":for(let a of i)a.kind==="coverFront"&&e.push({key:"covr",value:N("data",[_(vd[a.mimeType]??0),_(0),Array.from(a.data)])});break;case"trackNumber":if(t){let a=n.tracksTotal!==void 0?`${i}/${n.tracksTotal}`:i.toString();e.push({key:"track",value:yt(a)})}else e.push({key:"trkn",value:N("data",[_(0),_(0),W(0),W(i),W(n.tracksTotal??0),W(0)])});break;case"discNumber":t||e.push({key:"disc",value:N("data",[_(0),_(0),W(0),W(i),W(n.discsTotal??0),W(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:ae(r)}if(n.raw)for(let r in n.raw){let i=n.raw[r];i==null||!t&&r.length!==4||e.some(a=>a.key===r)||(typeof i=="string"?e.push({key:r,value:yt(i)}):i instanceof Uint8Array?e.push({key:r,value:N("data",[_(0),_(0),Array.from(i)])}):i instanceof He&&e.push({key:r,value:N("data",[_(vd[i.mimeType]??0),_(0),Array.from(i.data)])}))}return e},op=n=>{let t=Wd(n,!1);return t.length===0?null:Y("meta",0,0,void 0,[tu(!1,"mdir","","appl"),N("ilst",void 0,t.map(e=>N(e.key,void 0,[e.value])))])},cp=n=>{let t=Wd(n,!0);return t.length===0?null:N("meta",void 0,[tu(!1,"mdta",""),Y("keys",0,0,[_(t.length)],t.map(e=>N("mdta",[...$.encode(e.key)]))),N("ilst",void 0,t.map((e,r)=>{let i=String.fromCharCode(..._(r+1));return N(i,void 0,[e.value])}))])},yt=n=>N("data",[_(1),_(0),...$.encode(n)]),up=(n,t)=>{switch(n){case"avc":return t.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01"}},lp={avc:Rf,hevc:Ff,vp8:Ed,vp9:Ed,av1:Mf},Hd=(n,t)=>{switch(n){case"aac":return"mp4a";case"mp3":return"mp4a";case"opus":return"Opus";case"vorbis":return"mp4a";case"flac":return"fLaC";case"ulaw":return"ulaw";case"alaw":return"alaw";case"pcm-u8":return"raw ";case"pcm-s8":return"sowt";case"ac3":return"ac-3";case"eac3":return"ec-3"}if(t)switch(n){case"pcm-s16":return"sowt";case"pcm-s16be":return"twos";case"pcm-s24":return"in24";case"pcm-s24be":return"in24";case"pcm-s32":return"in32";case"pcm-s32be":return"in32";case"pcm-f32":return"fl32";case"pcm-f32be":return"fl32";case"pcm-f64":return"fl64";case"pcm-f64be":return"fl64"}else switch(n){case"pcm-s16":return"ipcm";case"pcm-s16be":return"ipcm";case"pcm-s24":return"ipcm";case"pcm-s24be":return"ipcm";case"pcm-s32":return"ipcm";case"pcm-s32be":return"ipcm";case"pcm-f32":return"fpcm";case"pcm-f32be":return"fpcm";case"pcm-f64":return"fpcm";case"pcm-f64be":return"fpcm"}},dp=(n,t)=>{switch(n){case"aac":return Yc;case"mp3":return Yc;case"opus":return Vf;case"vorbis":return Yc;case"flac":return Uf;case"ac3":return zf;case"eac3":return Nf}if(t)switch(n){case"pcm-s24":return Mr;case"pcm-s24be":return Mr;case"pcm-s32":return Mr;case"pcm-s32be":return Mr;case"pcm-f32":return Mr;case"pcm-f32be":return Mr;case"pcm-f64":return Mr;case"pcm-f64be":return Mr}else switch(n){case"pcm-s16":return Rt;case"pcm-s16be":return Rt;case"pcm-s24":return Rt;case"pcm-s24be":return Rt;case"pcm-s32":return Rt;case"pcm-s32be":return Rt;case"pcm-f32":return Rt;case"pcm-f32be":return Rt;case"pcm-f64":return Rt;case"pcm-f64be":return Rt}return null},mp={webvtt:"wvtt"},fp={webvtt:Wf},qd=n=>{p(n.length===3);let t=0;for(let e=0;e<3;e++)t<<=5,t+=n.charCodeAt(e)-96;return t};var Bt=class{constructor(t,e){this.finalized=!1;this.started=!1;this.pos=0;this.trackedWrites=null;this.trackedStart=-1;this.trackedEnd=-1;if(t._writerAcquired)throw new Error("Can't have multiple Writers for the same Target.");this.target=t,t._setMonotonicity(e),t._writerAcquired=!0}start(){p(!this.started),this.target._start(),this.started=!0}write(t){p(this.started&&!this.finalized),this.maybeTrackWrites(t),this.target._write(t,this.pos),this.pos+=t.byteLength}seek(t){this.pos=t}getPos(){return this.pos}async flush(){return p(this.started&&!this.finalized),this.target._flush()}async finalize(){p(this.started&&!this.finalized),await this.target._finalize(),this.finalized=!0}maybeTrackWrites(t){if(!this.trackedWrites)return;let e=this.getPos();if(enu)throw new Error(`ArrayBuffer exceeded maximum size of ${nu} bytes. Please consider using another target.`);if(this._supportsResize)this._buffer.resize(r);else{let i=new ArrayBuffer(r),a=new Uint8Array(i);a.set(this._bytes,0),this._buffer=i,this._bytes=a}}}_start(){}_write(e,r){this._ensureSize(r+e.byteLength),this._bytes.set(e,r),this._maxPos=Math.max(this._maxPos,r+e.byteLength),this._dispatchWrite(r,r+e.byteLength)}async _flush(){}async _finalize(){this.buffer=this._buffer.slice(0,this._maxPos),this._options.onFinalize&&await this._options.onFinalize(this.buffer),this._emit("finalized")}async _close(){}_getSlice(e,r){return this._bytes.slice(e,r)}},pp=2**24,hp=2,rn=class extends Pe{constructor(e,r={}){super();this._sections=[];this._lastWriteEnd=0;this._lastFlushEnd=0;this._streamWriter=null;this._writeError=null;this._chunks=[];if(!(e instanceof WritableStream))throw new TypeError("StreamTarget requires a WritableStream instance.");if(r!=null&&typeof r!="object")throw new TypeError("StreamTarget options, when provided, must be an object.");if(r.chunked!==void 0&&typeof r.chunked!="boolean")throw new TypeError("options.chunked, when provided, must be a boolean.");if(r.chunkSize!==void 0&&(!Number.isInteger(r.chunkSize)||r.chunkSize<1024))throw new TypeError("options.chunkSize, when provided, must be an integer and not smaller than 1024.");this._writable=e,this._options=r,this._chunked=r.chunked??!1,this._chunkSize=r.chunkSize??pp}_start(){this._streamWriter=this._writable.getWriter()}_write(e,r){if(r>this._lastWriteEnd){let i=r-this._lastWriteEnd;this._write(new Uint8Array(i),this._lastWriteEnd)}this._sections.push({data:e.slice(),start:r}),this._lastWriteEnd=Math.max(this._lastWriteEnd,r+e.byteLength),this._dispatchWrite(r,r+e.byteLength)}async _flush(){if(this._writeError!==null)throw this._writeError;if(p(this._streamWriter),this._sections.length===0)return;let e=[],r=[...this._sections].sort((i,a)=>i.start-a.start);e.push({start:r[0].start,size:r[0].data.byteLength});for(let i=1;i{this._writeError??=a}),this._lastFlushEnd=i.start+i.data.byteLength}}this._sections.length=0}_writeDataIntoChunks(e,r){let i=this._chunks.findIndex(u=>u.start<=r&&rhp){for(let u=0;u=e.written[s+1].start;)e.written[s].end=Math.max(e.written[s].end,e.written[s+1].end),e.written.splice(s+1,1)}_createChunk(e){let i={start:Math.floor(e/this._chunkSize)*this._chunkSize,data:new Uint8Array(this._chunkSize),written:[],shouldFlush:!1};return this._chunks.push(i),this._chunks.sort((a,s)=>a.start-s.start),this._chunks.indexOf(i)}_tryToFlushChunks(e=!1){p(this._streamWriter);for(let r=0;r{this._writeError??=o}),this._lastFlushEnd=i.start+a.end}this._chunks.splice(r--,1)}}}async _finalize(){if(this._chunked&&this._tryToFlushChunks(!0),this._writeError!==null)throw this._writeError;p(this._streamWriter),await this._streamWriter.ready,await this._streamWriter.close(),this._emit("finalized")}async _close(){return this._streamWriter?.close()}},no=class extends Pe{constructor(e){super();this._writer=null;this._nextWritePos=0;this._writable=e,this._streamTarget=new rn(new WritableStream({start:()=>{this._writer=this._writable.getWriter()},write:r=>{if(this._monotonicity!==!0)throw new Error("AppendOnlyStreamTarget requires that data be written monotonically (always appended to the end). You must use a format that guarantees this behavior.");return p(r.position===this._nextWritePos),this._nextWritePos+=r.data.byteLength,p(this._writer),this._writer.write(r.data)},close:()=>this._writer?.close()}))}_start(){this._streamTarget._start()}_write(e,r){this._streamTarget._write(e,r)}_flush(){return this._streamTarget._flush()}_finalize(){return this._streamTarget._finalize()}_close(){return this._streamTarget._close()}_setMonotonicity(e){super._setMonotonicity(e),this._streamTarget._setMonotonicity(e)}},ao=class extends Pe{constructor(e,r={}){if(typeof e!="string")throw new TypeError("filePath must be a string.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(!Qd.fs)throw new Error("FilePathTarget is only available in server-side environments (Node.js, Bun, Deno).");super();this._fileHandle=null;let i=new WritableStream({start:async()=>{this._fileHandle=await Qd.fs.open(e,"w")},write:async a=>{p(this._fileHandle),await this._fileHandle.write(a.data,0,a.data.byteLength,a.position)},close:async()=>{this._fileHandle&&(await this._fileHandle.close(),this._fileHandle=null)}});this._streamTarget=new rn(i,{chunked:!0,...r})}_start(){this._streamTarget._start()}_write(e,r){this._streamTarget._write(e,r),this._dispatchWrite(r,r+e.byteLength)}async _flush(){return this._streamTarget._flush()}async _finalize(){await this._streamTarget._finalize(),this._emit("finalized")}async _close(){return this._streamTarget._close()}_setMonotonicity(e){super._setMonotonicity(e),this._streamTarget._setMonotonicity(e)}},Or=class extends Pe{_start(){}_write(t,e){this._dispatchWrite(e,e+t.byteLength)}async _flush(){}async _finalize(){this._emit("finalized")}async _close(){}},ia=class extends Pe{constructor(t,e){super(),this._baseTarget=t,this._offset=e}_start(){}_write(t,e){this._baseTarget._write(t,this._offset+e),this._dispatchWrite(e,e+t.byteLength)}_flush(){return this._baseTarget._flush()}async _finalize(){this._emit("finalized")}async _close(){}_setMonotonicity(t){super._setMonotonicity(t),this._baseTarget._setMonotonicity(t)}},Ne=class{constructor(t,e){this.rootPath=t;this.getTarget=e;if(typeof t!="string")throw new TypeError("rootPath must be a string.");if(typeof e!="function")throw new TypeError("getTarget must be a function.")}};var Ze=57600,gp=2082844800,Kd=n=>{let t={},e=n.track;return e.metadata.name!==void 0&&(t.name=e.metadata.name),t},ue=(n,t,e=!0)=>{let r=n*t;return e?Math.round(r):r},so=class extends we{constructor(e,r){super(e);this.writer=null;this.boxWriter=null;this.initWriter=null;this.initBoxWriter=null;this.auxTarget=new Br;this.auxWriter=new Bt(this.auxTarget,!1);this.auxBoxWriter=new ai(this.auxWriter);this.mdat=null;this.ftypSize=null;this.trackDatas=[];this.allTracksKnown=J();this.creationTime=Math.floor(Date.now()/1e3)+gp;this.finalizedChunks=[];this.nextFragmentNumber=1;this.maxWrittenTimestamp=-1/0;this.minWrittenTimestamp=1/0;this.maxWrittenEndTimestamp=-1/0;this.segmentHeaderSize=null;this.format=r,this.isQuickTime=r instanceof oi,this.isCmaf=r instanceof si,this.minimumFragmentDuration=r._options.minimumFragmentDuration??(r instanceof si?1/0:1)}async start(){let e=await this.mutex.acquire();if(this.isCmaf?(this.fastStart="fragmented",this.isFragmented=!0):(this.writer=await this.output._getRootWriter(i=>this.format._options.fastStart!==void 0?this.format._options.fastStart==="fragmented":i instanceof Br),this.boxWriter=new ai(this.writer),this.fastStart=this.format._options.fastStart??(this.writer.target instanceof Br?"in-memory":!1),this.isFragmented=this.fastStart==="fragmented"),this.isCmaf){if(!this.output._hasInitTarget())throw new Error("CMAF outputs require the initTarget field in OutputOptions to be set; the init segment will be written to it.");let i=await this.output._getInitTarget(),a=new Bt(i,!0);a.start(),this.initWriter=a,this.initBoxWriter=new ai(a)}let r=this.output._tracks.some(i=>i.isVideoTrack()&&i.source._codec==="avc");{let i=this.initBoxWriter??this.boxWriter;if(p(i),this.format._options.onFtyp&&i.writer.startTrackingWrites(),i.writeBox(Od({isQuickTime:this.isQuickTime,holdsAvc:r,fragmented:this.isFragmented,cmaf:this.isCmaf})),this.format._options.onFtyp){let{data:a,start:s}=i.writer.stopTrackingWrites();this.format._options.onFtyp(a,s)}this.ftypSize=i.writer.getPos(),this.isCmaf&&await this.initWriter.flush()}if(this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(let i of this.output._tracks)if(i.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(p(this.writer),p(this.boxWriter),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ra(!0),this.boxWriter.writeBox(this.mdat));await this.writer?.flush(),e()}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(r=>r.type==="video"||r.type==="audio"?r.info.decoderConfig.codec:{webvtt:"wvtt"}[r.track.source._codec]);return za({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,i){let a=this.trackDatas.find(f=>f.track===e);if(a)return a;pr(i),p(i),p(i.decoderConfig);let s={...i.decoderConfig};p(s.codedWidth!==void 0),p(s.codedHeight!==void 0);let o=!1;if(e.source._codec==="avc"&&!s.description){let f=Ai(r.data);if(!f)throw new Error("Couldn't extract an AVCDecoderConfigurationRecord from the AVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.264) when not providing a description, or provide a description (must be an AVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in AVCC format.");s.description=nl(f),o=!0}else if(e.source._codec==="hevc"&&!s.description){let f=xi(r.data);if(!f)throw new Error("Couldn't extract an HEVCDecoderConfigurationRecord from the HEVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.265) when not providing a description, or provide a description (must be an HEVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in HEVC format.");s.description=sl(f),o=!0}let c=Mu(1/(e.metadata.frameRate??Ze),1e6).denominator,u=s.displayAspectWidth,l=s.displayAspectHeight,m=u===void 0||l===void 0?{num:1,den:1}:Ht({num:u*s.codedHeight,den:l*s.codedWidth}),d={muxer:this,track:e,type:"video",info:{width:s.codedWidth,height:s.codedHeight,pixelAspectRatio:m,decoderConfig:s,requiresAnnexBTransformation:o},timescale:c,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(d),this.trackDatas.sort((f,h)=>f.track.id-h.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}getAudioTrackData(e,r,i){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;_e(i),p(i),p(i.decoderConfig);let s={...i.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=Ue(ye.tempFromBytes(r.data));if(!u)throw new Error("Couldn't parse ADTS header from the AAC packet. Make sure the packets are in ADTS format (as specified in ISO 13818-7) when not providing a description, or provide a description (must be an AudioSpecificConfig as specified in ISO 14496-3) and ensure the packets are raw AAC data.");let l=Xe[u.samplingFrequencyIndex],m=Ct[u.channelConfiguration];if(l===void 0||m===void 0)throw new Error("Invalid ADTS frame header.");s.description=ki({objectType:u.objectType,sampleRate:l,numberOfChannels:m}),o=!0}let c={muxer:this,track:e,type:"audio",info:{numberOfChannels:i.decoderConfig.numberOfChannels,sampleRate:i.decoderConfig.sampleRate,decoderConfig:s,requiresPcmTransformation:!this.isFragmented&&te.includes(e.source._codec),expectedNextPcmPacketTimestamp:null,requiresAdtsStripping:o,firstPacket:r},timescale:s.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(c),this.trackDatas.sort((u,l)=>u.track.id-l.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),c}getSubtitleTrackData(e,r){let i=this.trackDatas.find(s=>s.track===e);if(i)return i;xa(r),p(r),p(r.config);let a={muxer:this,track:e,type:"subtitle",info:{config:r.config},timescale:1e3,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1,lastCueEndTimestamp:0,cueQueue:[],nextSourceId:0,cueToSourceId:new WeakMap};return this.trackDatas.push(a),this.trackDatas.sort((s,o)=>s.track.id-o.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}async addEncodedVideoPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,i),o=r.data;if(s.info.requiresAnnexBTransformation){let u=[...br(o)].map(l=>o.subarray(l.offset,l.offset+l.length));if(u.length===0)throw new Error("Failed to transform packet data. Make sure all packets are provided in Annex B format, as specified in ITU-T-REC-H.264 and ITU-T-REC-H.265.");o=_a(u,4)}this.validateTimestamp(s.track,r.timestamp,r.type==="key");let c=this.createSampleForTrack(s,o,r.timestamp,r.duration,r.type);await this.registerSample(s,c)}finally{a()}}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,i),o=r.data;if(s.info.requiresAdtsStripping){let m=Ue(ye.tempFromBytes(o));if(!m)throw new Error("Expected ADTS frame, didn't get one.");let d=m.crcCheck===null?rr:Ke;o=o.subarray(d)}this.validateTimestamp(s.track,r.timestamp,r.type==="key");let c=r.timestamp,u=r.duration;if(s.info.requiresPcmTransformation){let d=Ae(s.info.decoderConfig.codec).sampleSize*s.info.numberOfChannels;if(u=o.byteLength/d/s.info.sampleRate,s.info.expectedNextPcmPacketTimestamp!==null){let f=c-s.info.expectedNextPcmPacketTimestamp;if(f<.01)c=s.info.expectedNextPcmPacketTimestamp;else{let h=await this.padWithSilence(s,s.info.expectedNextPcmPacketTimestamp,f);c=s.info.expectedNextPcmPacketTimestamp+h}}s.info.expectedNextPcmPacketTimestamp=c+u}let l=this.createSampleForTrack(s,o,c,u,r.type);await this.registerSample(s,l)}finally{a()}}async padWithSilence(e,r,i){let a=ue(i,e.timescale);if(i=a/e.timescale,a>0){let{sampleSize:s,silentValue:o}=Ae(e.info.decoderConfig.codec),c=a*e.info.numberOfChannels,u=new Uint8Array(s*c).fill(o),l=this.createSampleForTrack(e,new Uint8Array(u.buffer),r,i,"key");await this.registerSample(e,l)}return i}async addSubtitleCue(e,r,i){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,i);this.validateTimestamp(s.track,r.timestamp,!0),e.source._codec==="webvtt"&&(s.cueQueue.push(r),await this.processWebVTTCues(s,r.timestamp))}finally{a()}}async processWebVTTCues(e,r){for(;e.cueQueue.length>0;){let i=new Set([]);for(let l of e.cueQueue)p(l.timestamp<=r),p(e.lastCueEndTimestamp<=l.timestamp+l.duration),i.add(Math.max(l.timestamp,e.lastCueEndTimestamp)),i.add(l.timestamp+l.duration);let a=[...i].sort((l,m)=>l-m),s=a[0],o=a[1]??s;if(r=o)break;en.lastIndex=0;let d=en.test(m.text),f=m.timestamp+m.duration,h=e.cueToSourceId.get(m);if(h===void 0&&oa.timestamp).sort((a,s)=>a-s);this.isFragmented||(e.startTimestampOffset??=i[0]);for(let a=0;a=0),e.lastTimescaleUnits+=l,e.lastSample.timescaleUnitsToNextSample=l,!this.isFragmented){let m=X(e.timeToSampleTable);if(p(m),m.sampleCount===1){m.sampleDelta=l;let f=e.timeToSampleTable[e.timeToSampleTable.length-2];f&&f.sampleDelta===l&&(f.sampleCount++,e.timeToSampleTable.pop(),m=f)}else m.sampleDelta!==l&&(m.sampleCount--,e.timeToSampleTable.push(m={sampleCount:1,sampleDelta:l}));m.sampleDelta===c?m.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:c});let d=X(e.compositionTimeOffsetTable);p(d),d.sampleCompositionTimeOffset===o?d.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:o})}}else e.lastTimescaleUnits=ue(s.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:c}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:o}));e.lastSample=s}if(e.timestampProcessingQueue.length=0,p(e.lastSample),p(e.lastTimescaleUnits!==null),r!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){p(r.type==="key");let a=ue(r.timestamp,e.timescale,!1),s=Math.round(a-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=s}}async registerSample(e,r){r.type==="key"&&this.processTimestamps(e,r),e.timestampProcessingQueue.push(r),this.isFragmented?(e.sampleQueue.push(r),await this.interleaveSamples()):this.fastStart==="reserve"?await this.registerSampleFastStartReserve(e,r):await this.addSampleToTrack(e,r)}async addSampleToTrack(e,r){if(!this.isFragmented&&(e.samples.push(r),this.fastStart==="reserve")){let a=e.track.metadata.maximumPacketCount;if(p(a!==void 0),e.samples.length>a)throw new Error(`Track #${e.track.id} has already reached the maximum packet count (${a}). Either add less packets or increase the maximum packet count.`)}let i=!1;if(!e.currentChunk)i=!0;else{e.currentChunk.startTimestamp=Math.min(e.currentChunk.startTimestamp,r.timestamp);let a=r.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){let s=this.trackDatas.every(o=>{if(e===o)return r.type==="key";let c=o.sampleQueue[0];return c?c.type==="key":o.closed});a>=this.minimumFragmentDuration&&s&&r.timestamp>this.maxWrittenTimestamp&&(i=!0,await this.finalizeFragment())}else i=a>=.5}i&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:r.timestamp,samples:[],offset:null,moofOffset:null}),p(e.currentChunk),e.currentChunk.samples.push(r),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,r.timestamp),this.maxWrittenEndTimestamp=Math.max(this.maxWrittenEndTimestamp,r.timestamp+r.duration),this.minWrittenTimestamp=Math.min(this.minWrittenTimestamp,r.timestamp))}async finalizeCurrentChunk(e){if(p(!this.isFragmented),p(this.writer),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let r=e.currentChunk.samples.length;if(e.type==="audio"&&e.info.requiresPcmTransformation&&(r=e.currentChunk.samples.reduce((i,a)=>i+ue(a.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||X(e.compactlyCodedChunkTable).samplesPerChunk!==r)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:r}),this.fastStart==="in-memory"){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(let i of e.currentChunk.samples)p(i.data),this.writer.write(i.data),i.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(p(this.isFragmented),!(!e&&!this.allTracksAreKnown()))e:for(;;){let r=null,i=1/0;for(let s of this.trackDatas){if(!e&&s.sampleQueue.length===0&&!s.closed)break e;s.sampleQueue.length>0&&s.sampleQueue[0].timestamph.currentChunk),a=ru(r,i),s=this.writer.getPos(),o=s+this.boxWriter.measureBox(a),c=o+ut,u=1/0;for(let h of i){h.currentChunk.offset=c,h.currentChunk.moofOffset=s;for(let b of h.currentChunk.samples)c+=b.size;u=Math.min(u,h.currentChunk.startTimestamp)}let l=c-o,m=l>=2**32;if(m)for(let h of i)h.currentChunk.offset+=Xt-ut;this.format._options.onMoof&&this.writer.startTrackingWrites();let d=ru(r,i);if(this.boxWriter.writeBox(d),this.format._options.onMoof){let{data:h,start:b}=this.writer.stopTrackingWrites();this.format._options.onMoof(h,b,u)}p(this.writer.getPos()===o),this.format._options.onMdat&&this.writer.startTrackingWrites();let f=ra(m);f.size=l,this.boxWriter.writeBox(f),this.writer.seek(o+(m?Xt:ut));for(let h of i)for(let b of h.currentChunk.samples)this.writer.write(b.data),b.data=null;if(this.format._options.onMdat){let{data:h,start:b}=this.writer.stopTrackingWrites();this.format._options.onMdat(h,b)}for(let h of i)h.finalizedChunks.push(h.currentChunk),this.finalizedChunks.push(h.currentChunk),h.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,r){if(p(this.writer),p(this.boxWriter),this.allTracksAreKnown()){if(!this.mdat){let i=tn(this),s=this.boxWriter.measureBox(i)+this.computeSampleTableSizeUpperBound()+4096;p(this.ftypSize!==null),this.writer.seek(this.ftypSize+s),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=ra(!0),this.boxWriter.writeBox(this.mdat);for(let o of this.trackDatas){for(let c of o.sampleQueue)await this.addSampleToTrack(o,c);o.sampleQueue.length=0}}await this.addSampleToTrack(e,r)}else e.sampleQueue.push(r)}computeSampleTableSizeUpperBound(){p(this.fastStart==="reserve");let e=0;for(let r of this.trackDatas){let i=r.track.metadata.maximumPacketCount;p(i!==void 0),e+=8*Math.ceil(2/3*i),e+=4*i,e+=8*Math.ceil(2/3*i),e+=12*Math.ceil(2/3*i),e+=4*i,e+=8*i}return e}async onTrackClose(e){let r=await this.mutex.acquire(),i=this.trackDatas.find(a=>a.track===e);i&&(i.closed=!0,i.type==="subtitle"&&e.source._codec==="webvtt"&&await this.processWebVTTCues(i,1/0),this.processTimestamps(i)),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),r()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let r of this.trackDatas)r.closed=!0,r.type==="subtitle"&&r.track.source._codec==="webvtt"&&await this.processWebVTTCues(r,1/0),this.processTimestamps(r);if(this.isFragmented)await this.interleaveSamples(!0),await this.finalizeFragment(!1);else for(let r of this.trackDatas){await this.finalizeCurrentChunk(r),p(r.startTimestampOffset!==null);for(let i=0;i=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();let i=tn(this);if(this.boxWriter.writeBox(i),this.format._options.onMoov){let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onMoov(a,s)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=r,this.boxWriter.writeBox(this.mdat);for(let a of this.finalizedChunks)for(let s of a.samples)p(s.data),this.writer.write(s.data),s.data=null;if(this.format._options.onMdat){let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onMdat(a,s)}}else if(this.isFragmented)if(this.isCmaf){let r=this.segmentHeaderSize!==null?this.writer.getPos()-this.segmentHeaderSize:0;this.writer.seek(0),this.boxWriter.writeBox(Jc()),this.boxWriter.writeBox(eu(this,r))}else{let r=this.writer.getPos(),i=Ud(this.trackDatas);this.boxWriter.writeBox(i);let a=this.writer.getPos()-r;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(a)}else{p(this.mdat);let r=this.boxWriter.offsets.get(this.mdat);p(r!==void 0);let i=this.writer.getPos()-r;if(this.mdat.size=i,this.mdat.largeSize=i>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){let{data:s,start:o}=this.writer.stopTrackingWrites();this.format._options.onMdat(s,o)}let a=tn(this);if(this.fastStart==="reserve"){p(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(a);let s=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(Dd(s))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(a);if(this.format._options.onMoov){let{data:s,start:o}=this.writer.stopTrackingWrites();this.format._options.onMoov(s,o)}}e()}};var bp=-(2**15),yp=2**15-1,jd="Mediabunny",Xd=6,$d=5,kp={video:1,audio:2,subtitle:17},oo=class extends we{constructor(e,r){super(e);this.trackDatas=[];this.allTracksKnown=J();this.segment=null;this.segmentInfo=null;this.seekHead=null;this.tracksElement=null;this.tagsElement=null;this.attachmentsElement=null;this.segmentDuration=null;this.cues=null;this.currentCluster=null;this.currentClusterStartMsTimestamp=null;this.currentClusterMaxMsTimestamp=null;this.trackDatasInCurrentCluster=new Map;this.startTimestamp=1/0;this.endTimestamp=-1/0;this.format=r}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!!this.format._options.appendOnly),this.ebmlWriter=new Xa(this.writer),this.writeEBMLHeader(),this.createSegmentInfo(),this.createCues(),await this.writer.flush(),e()}writeEBMLHeader(){this.format._options.onEbmlHeader&&this.writer.startTrackingWrites();let e={id:440786851,data:[{id:17030,data:1},{id:17143,data:1},{id:17138,data:4},{id:17139,data:8},{id:17026,data:this.format instanceof ci?"webm":"matroska"},{id:17031,data:2},{id:17029,data:2}]};if(this.ebmlWriter.writeEBML(e),this.format._options.onEbmlHeader){let{data:r,start:i}=this.writer.stopTrackingWrites();this.format._options.onEbmlHeader(r,i)}}maybeCreateSeekHead(e){if(this.format._options.appendOnly)return;let r=new Uint8Array([28,83,187,107]),i=new Uint8Array([21,73,169,102]),a=new Uint8Array([22,84,174,107]),s=new Uint8Array([25,65,164,105]),o=new Uint8Array([18,84,195,103]),c={id:290298740,data:[{id:19899,data:[{id:21419,data:r},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.cues)-this.segmentDataOffset:0}]},{id:19899,data:[{id:21419,data:i},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.segmentInfo)-this.segmentDataOffset:0}]},{id:19899,data:[{id:21419,data:a},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.tracksElement)-this.segmentDataOffset:0}]},this.attachmentsElement?{id:19899,data:[{id:21419,data:s},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.attachmentsElement)-this.segmentDataOffset:0}]}:null,this.tagsElement?{id:19899,data:[{id:21419,data:o},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.tagsElement)-this.segmentDataOffset:0}]}:null]};this.seekHead=c}createSegmentInfo(){let e={id:17545,data:new Ri(0)};this.segmentDuration=e;let r={id:357149030,data:[{id:2807729,data:1e6},{id:19840,data:jd},{id:22337,data:jd},this.format._options.appendOnly?null:e]};this.segmentInfo=r}createTracks(){let e={id:374648427,data:[]};this.tracksElement=e;for(let r of this.trackDatas){let i=Me[r.track.source._codec];p(i);let a=0;if(r.type==="audio"&&r.track.source._codec==="opus"){a=1e6*80;let s=r.info.decoderConfig.description;if(s){let o=j(s),c=yr(o);a=Math.round(1e9*(c.preSkip/ot))}}e.data.push({id:174,data:[{id:215,data:r.track.id},{id:29637,data:r.track.id},{id:131,data:kp[r.type]},r.track.metadata.disposition?.default===!1?{id:136,data:0}:null,r.track.metadata.disposition?.forced?{id:21930,data:1}:null,r.track.metadata.disposition?.hearingImpaired?{id:21931,data:1}:null,r.track.metadata.disposition?.visuallyImpaired?{id:21932,data:1}:null,r.track.metadata.disposition?.original?{id:21934,data:1}:null,r.track.metadata.disposition?.commentary?{id:21935,data:1}:null,{id:156,data:0},{id:2274716,data:r.track.metadata.languageCode??ee},{id:134,data:i},{id:22186,data:0},{id:22203,data:a},r.track.metadata.name!==void 0?{id:21358,data:new ft(r.track.metadata.name)}:null,r.type==="video"?this.videoSpecificTrackInfo(r):null,r.type==="audio"?this.audioSpecificTrackInfo(r):null,r.type==="subtitle"?this.subtitleSpecificTrackInfo(r):null]})}}videoSpecificTrackInfo(e){let{frameRate:r,rotation:i}=e.track.metadata,a=[e.info.decoderConfig.description?{id:25506,data:j(e.info.decoderConfig.description)}:null,r?{id:2352003,data:1e9/r}:null],s=i?Tt(-i):0,o=!!e.info.aspectRatio&&e.info.aspectRatio.num*e.info.height!==e.info.aspectRatio.den*e.info.width,c=e.info.decoderConfig.colorSpace,u={id:224,data:[{id:176,data:e.info.width},{id:186,data:e.info.height},o?{id:21680,data:e.info.aspectRatio.num}:null,o?{id:21690,data:e.info.aspectRatio.den}:null,o?{id:21682,data:3}:null,e.info.alphaMode?{id:21440,data:1}:null,fa(c)?{id:21936,data:[{id:21937,data:nt[c.matrix]},{id:21946,data:it[c.transfer]},{id:21947,data:rt[c.primaries]},{id:21945,data:c.fullRange?2:1}]}:null,s?{id:30320,data:[{id:30321,data:0},{id:30325,data:new _i((s+180)%360-180)}]}:null]};return a.push(u),a}audioSpecificTrackInfo(e){let r=te.includes(e.track.source._codec)?Ae(e.track.source._codec):null;return[e.info.decoderConfig.description?{id:25506,data:j(e.info.decoderConfig.description)}:null,{id:225,data:[{id:181,data:new _i(e.info.sampleRate)},{id:159,data:e.info.numberOfChannels},r?{id:25188,data:8*r.sampleSize}:null]}]}subtitleSpecificTrackInfo(e){return[{id:25506,data:$.encode(e.info.config.description)}]}maybeCreateTags(){let e=[],r=(s,o)=>{e.push({id:26568,data:[{id:17827,data:new ft(s)},typeof o=="string"?{id:17543,data:new ft(o)}:{id:17541,data:o}]})},i=this.output._metadataTags,a=new Set;for(let{key:s,value:o}of at(i))switch(s){case"title":r("TITLE",o),a.add("TITLE");break;case"description":r("DESCRIPTION",o),a.add("DESCRIPTION");break;case"artist":r("ARTIST",o),a.add("ARTIST");break;case"album":r("ALBUM",o),a.add("ALBUM");break;case"albumArtist":r("ALBUM_ARTIST",o),a.add("ALBUM_ARTIST");break;case"genre":r("GENRE",o),a.add("GENRE");break;case"comment":r("COMMENT",o),a.add("COMMENT");break;case"lyrics":r("LYRICS",o),a.add("LYRICS");break;case"date":r("DATE",o.toISOString().slice(0,10)),a.add("DATE");break;case"trackNumber":{let c=i.tracksTotal!==void 0?`${o}/${i.tracksTotal}`:o.toString();r("PART_NUMBER",c),a.add("PART_NUMBER")}break;case"discNumber":{let c=i.discsTotal!==void 0?`${o}/${i.discsTotal}`:o.toString();r("DISC",c),a.add("DISC")}break;case"tracksTotal":case"discsTotal":break;case"images":case"raw":break;default:ae(s)}if(i.raw)for(let s in i.raw){let o=i.raw[s];o==null||a.has(s)||(typeof o=="string"||o instanceof Uint8Array)&&r(s,o)}e.length!==0&&(this.tagsElement={id:307544935,data:[{id:29555,data:[{id:25536,data:[{id:26826,data:50},{id:25546,data:"MOVIE"}]},...e]}]})}maybeCreateAttachments(){let e=this.output._metadataTags,r=[],i=new Set,a=e.images??[];for(let s of a){let o=s.name;o===void 0&&(o=(s.kind==="coverFront"?"cover":s.kind==="coverBack"?"back":"image")+(Ou(s.mimeType)??""));let c;for(;;){c=0n;for(let u=0;u<8;u++)c<<=8n,c|=BigInt(Math.floor(Math.random()*256));if(c!==0n&&!i.has(c))break}i.add(c),r.push({id:24999,data:[s.description!==void 0?{id:18046,data:new ft(s.description)}:null,{id:18030,data:new ft(o)},{id:18016,data:s.mimeType},{id:18012,data:s.data},{id:18094,data:c}]})}for(let[s,o]of Object.entries(e.raw??{}))!(o instanceof Kt)||!/^\d+$/.test(s)||a.find(u=>u.mimeType===o.mimeType&&ga(u.data,o.data))||r.push({id:24999,data:[o.description!==void 0?{id:18046,data:new ft(o.description)}:null,{id:18030,data:new ft(o.name??"")},{id:18016,data:o.mimeType??""},{id:18012,data:o.data},{id:18094,data:BigInt(s)}]});r.length!==0&&(this.attachmentsElement={id:423732329,data:r})}createSegment(){this.createTracks(),this.maybeCreateTags(),this.maybeCreateAttachments(),this.maybeCreateSeekHead(!1);let e={id:408125543,size:this.format._options.appendOnly?-1:Xd,data:[this.seekHead,this.segmentInfo,this.tracksElement,this.attachmentsElement,this.tagsElement]};if(this.segment=e,this.format._options.onSegmentHeader&&this.writer.startTrackingWrites(),this.ebmlWriter.writeEBML(e),this.format._options.onSegmentHeader){let{data:r,start:i}=this.writer.stopTrackingWrites();this.format._options.onSegmentHeader(r,i)}}createCues(){this.cues={id:475249515,data:[]}}get segmentDataOffset(){return p(this.segment),this.ebmlWriter.dataOffsets.get(this.segment)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(r=>r.type==="video"||r.type==="audio"?r.info.decoderConfig.codec:{webvtt:"wvtt"}[r.track.source._codec]);return Ja({isWebM:this.format instanceof ci,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,i){let a=this.trackDatas.find(l=>l.track===e);if(a)return a;pr(i),p(i),p(i.decoderConfig),p(i.decoderConfig.codedWidth!==void 0),p(i.decoderConfig.codedHeight!==void 0);let s=i.decoderConfig.displayAspectWidth,o=i.decoderConfig.displayAspectHeight,c=s===void 0||o===void 0?null:Ht({num:s,den:o}),u={track:e,type:"video",info:{width:i.decoderConfig.codedWidth,height:i.decoderConfig.codedHeight,aspectRatio:c,decoderConfig:i.decoderConfig,alphaMode:!!r.sideData.alpha},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return e.source._codec==="vp9"?u.info.decoderConfig={...u.info.decoderConfig,description:new Uint8Array(Qu(u.info.decoderConfig.codec))}:e.source._codec==="av1"&&(u.info.decoderConfig={...u.info.decoderConfig,description:new Uint8Array(Sa(u.info.decoderConfig.codec))}),this.trackDatas.push(u),this.trackDatas.sort((l,m)=>l.track.id-m.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,r,i){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;_e(i),p(i),p(i.decoderConfig);let s={...i.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=Ue(ye.tempFromBytes(r.data));if(!u)throw new Error("Couldn't parse ADTS header from the AAC packet. Make sure the packets are in ADTS format (as specified in ISO 13818-7) when not providing a description, or provide a description (must be an AudioSpecificConfig as specified in ISO 14496-3) and ensure the packets are raw AAC data.");let l=Xe[u.samplingFrequencyIndex],m=Ct[u.channelConfiguration];if(l===void 0||m===void 0)throw new Error("Invalid ADTS frame header.");s.description=ki({objectType:u.objectType,sampleRate:l,numberOfChannels:m}),o=!0}let c={track:e,type:"audio",info:{numberOfChannels:i.decoderConfig.numberOfChannels,sampleRate:i.decoderConfig.sampleRate,decoderConfig:s,requiresAdtsStripping:o},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(c),this.trackDatas.sort((u,l)=>u.track.id-l.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),c}getSubtitleTrackData(e,r){let i=this.trackDatas.find(s=>s.track===e);if(i)return i;xa(r),p(r),p(r.config);let a={track:e,type:"subtitle",info:{config:r.config},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(a),this.trackDatas.sort((s,o)=>s.track.id-o.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}async addEncodedVideoPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,i),o=r.type==="key";this.validateTimestamp(s.track,r.timestamp,o);let c=r.timestamp,u=r.duration;e.metadata.frameRate!==void 0&&(c=St(c,e.metadata.frameRate),u=St(u,e.metadata.frameRate));let l=s.info.alphaMode?r.sideData.alpha??null:null,m=this.createInternalChunk(r.data,c,u,r.type,l);e.source._codec==="vp9"&&this.fixVP9ColorSpace(s,m),s.chunkQueue.push(m),await this.interleaveChunks()}finally{a()}}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,i),o=r.data;if(s.info.requiresAdtsStripping){let l=Ue(ye.tempFromBytes(o));if(!l)throw new Error("Expected ADTS frame, didn't get one.");let m=l.crcCheck===null?rr:Ke;o=o.subarray(m)}let c=r.type==="key";this.validateTimestamp(s.track,r.timestamp,c);let u=this.createInternalChunk(o,r.timestamp,r.duration,r.type);s.chunkQueue.push(u),await this.interleaveChunks()}finally{a()}}async addSubtitleCue(e,r,i){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,i);this.validateTimestamp(s.track,r.timestamp,!0);let o=r.text,c=Math.round(r.timestamp*1e3);en.lastIndex=0,o=o.replace(en,d=>{let h=to(d.slice(1,-1))-c;return`<${ro(h)}>`});let u=$.encode(o),l=`${r.settings??""} ${r.identifier??""} ${r.notes??""}`,m=this.createInternalChunk(u,r.timestamp,r.duration,"key",l.trim()?$.encode(l):null);s.chunkQueue.push(m),await this.interleaveChunks()}finally{a()}}async interleaveChunks(e=!1){if(!(!e&&!this.allTracksAreKnown())){e:for(;;){let r=null,i=1/0;for(let s of this.trackDatas){if(!e&&s.chunkQueue.length===0&&!s.closed)break e;s.chunkQueue.length>0&&s.chunkQueue[0].timestamp=2&&i.skipBits(1);let m={rgb:7,bt709:2,bt470bg:1,smpte170m:3}[e.info.decoderConfig.colorSpace.matrix];wu(r.data,i.pos,i.pos+3,m)}createInternalChunk(e,r,i,a,s=null){return{data:e,type:a,timestamp:r,duration:i,additions:s}}writeBlock(e,r){this.segment||this.createSegment();let i=Math.round(1e3*r.timestamp),a=this.trackDatas.every(m=>{if(e===m)return r.type==="key";let d=m.chunkQueue[0];return d?d.type==="key":m.closed}),s=!1;if(!this.currentCluster)s=!0;else{p(this.currentClusterStartMsTimestamp!==null),p(this.currentClusterMaxMsTimestamp!==null);let m=i-this.currentClusterStartMsTimestamp;s=a&&i>this.currentClusterMaxMsTimestamp&&m>=1e3*(this.format._options.minimumClusterDuration??1)||m>yp}s&&this.createNewCluster(i);let o=i-this.currentClusterStartMsTimestamp;if(o0?{id:155,data:l}:null]};this.ebmlWriter.writeEBML(m)}else{u.setUint8(3,+(r.type==="key")<<7);let m={id:163,data:[c,r.data]};this.ebmlWriter.writeEBML(m)}this.startTimestamp=Math.min(this.startTimestamp,i),this.endTimestamp=Math.max(this.endTimestamp,i+l),e.lastWrittenMsTimestamp=i,this.trackDatasInCurrentCluster.has(e)||this.trackDatasInCurrentCluster.set(e,{firstMsTimestamp:i}),this.currentClusterMaxMsTimestamp=Math.max(this.currentClusterMaxMsTimestamp,i)}createNewCluster(e){this.currentCluster&&this.finalizeCurrentCluster(),this.format._options.onCluster&&this.writer.startTrackingWrites(),this.currentCluster={id:524531317,size:this.format._options.appendOnly?-1:$d,data:[{id:231,data:e}]},this.ebmlWriter.writeEBML(this.currentCluster),this.currentClusterStartMsTimestamp=e,this.currentClusterMaxMsTimestamp=e,this.trackDatasInCurrentCluster.clear()}finalizeCurrentCluster(){if(p(this.currentCluster),!this.format._options.appendOnly){let a=this.writer.getPos()-this.ebmlWriter.dataOffsets.get(this.currentCluster),s=this.writer.getPos();this.writer.seek(this.ebmlWriter.offsets.get(this.currentCluster)+4),this.ebmlWriter.writeVarInt(a,$d),this.writer.seek(s)}if(this.format._options.onCluster){p(this.currentClusterStartMsTimestamp!==null);let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onCluster(a,s,this.currentClusterStartMsTimestamp/1e3)}let e=this.ebmlWriter.offsets.get(this.currentCluster)-this.segmentDataOffset,r=new Map;for(let[a,{firstMsTimestamp:s}]of this.trackDatasInCurrentCluster)r.has(s)||r.set(s,[]),r.get(s).push(a);let i=[...r.entries()].sort((a,s)=>a[0]-s[0]);for(let[a,s]of i)p(this.cues),this.cues.data.push({id:187,data:[{id:179,data:a},...s.map(o=>({id:183,data:[{id:247,data:o.track.id},{id:241,data:e}]}))]})}async onTrackClose(e){let r=await this.mutex.acquire(),i=this.trackDatas.find(a=>a.track===e);i&&(i.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleaveChunks(),r()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let r of this.trackDatas)r.closed=!0;if(this.segment||this.createSegment(),await this.interleaveChunks(!0),this.currentCluster&&this.finalizeCurrentCluster(),p(this.cues),this.ebmlWriter.writeEBML(this.cues),!this.format._options.appendOnly){let r=this.writer.getPos()-this.segmentDataOffset;this.writer.seek(this.ebmlWriter.offsets.get(this.segment)+4),this.ebmlWriter.writeVarInt(r,Xd);let i=this.startTimestamp===1/0?0:this.endTimestamp-this.startTimestamp;this.segmentDuration.data=new Ri(i),this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration)),this.ebmlWriter.writeEBML(this.segmentDuration),p(this.seekHead),this.writer.seek(this.ebmlWriter.offsets.get(this.seekHead)),this.maybeCreateSeekHead(!0),this.ebmlWriter.writeEBML(this.seekHead)}e()}};var co=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer)}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeXingFrame(t){let e=this.writer.getPos(),r=255,i=224|t.mpegVersionId<<3|t.layer<<1,a;t.mpegVersionId&2?a=t.mpegVersionId&1?0:1:a=1;let s=0,o=155,c=-1,u=a*16*4+t.layer*16;for(let g=0;g<16;g++){let y=Pa[u+g];if(Ca(a,t.layer,1e3*y,t.sampleRate,s)>=o){c=g;break}}if(c===-1)throw new Error("No suitable bitrate found.");let l=c<<4|t.frequencyIndex<<2|s<<1,m=t.channel<<6|t.modeExtension<<4|t.copyright<<3|t.original<<2|t.emphasis;this.helper[0]=r,this.helper[1]=i,this.helper[2]=l,this.helper[3]=m,this.writer.write(this.helper.subarray(0,4));let d=gr(t.mpegVersionId,t.channel);this.writer.seek(e+d),this.writeU32(hr);let f=0;t.frameCount!==null&&(f|=1),t.fileSize!==null&&(f|=2),t.toc!==null&&(f|=4),this.writeU32(f),this.writeU32(t.frameCount??0),this.writeU32(t.fileSize??0),this.writer.write(t.toc??new Uint8Array(100));let h=Pa[u+c],b=Ca(a,t.layer,1e3*h,t.sampleRate,s);this.writer.seek(e+b)}};var uo=class extends we{constructor(e,r){super(e);this.xingFrameData=null;this.frameCount=0;this.framePositions=[];this.xingFramePos=null;this.format=r}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(this.format._options.xingHeader===!1),this.mp3Writer=new co(this.writer),Gt(this.output._metadataTags)||new Fr(this.writer).writeId3V2Tag(this.output._metadataTags),e()}async getMimeType(){return"audio/mpeg"}async addEncodedVideoPacket(){throw new Error("MP3 does not support video.")}async addEncodedAudioPacket(e,r){let i=await this.mutex.acquire();try{let a=this.format._options.xingHeader!==!1;if(!this.xingFrameData&&a){let s=U(r.data);if(s.byteLength<4)throw new Error("Invalid MP3 header in sample.");let o=s.getUint32(0,!1),c=Gr(o,null).header;if(!c)throw new Error("Invalid MP3 header in sample.");let u=gr(c.mpegVersionId,c.channel);if(s.byteLength>=u+4){let l=s.getUint32(u,!1);if(l===hr||l===Si)return}this.xingFrameData={mpegVersionId:c.mpegVersionId,layer:c.layer,frequencyIndex:c.frequencyIndex,sampleRate:c.sampleRate,channel:c.channel,modeExtension:c.modeExtension,copyright:c.copyright,original:c.original,emphasis:c.emphasis,frameCount:null,fileSize:null,toc:null},this.xingFramePos=this.writer.getPos(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.frameCount++}this.validateTimestamp(e,r.timestamp,r.type==="key"),a&&this.framePositions.push(this.writer.getPos()),this.writer.write(r.data),this.frameCount++,await this.writer.flush()}finally{i()}}async addSubtitleCue(){throw new Error("MP3 does not support subtitles.")}async finalize(){if(!this.xingFrameData||this.xingFramePos===null)return;let e=await this.mutex.acquire(),i=this.writer.getPos()-this.xingFramePos;this.writer.seek(this.xingFramePos);let a=new Uint8Array(100);for(let s=0;s<100;s++){let o=Math.floor(this.framePositions.length*(s/100)),c=this.framePositions[o]-this.xingFramePos;a[s]=256*(c/i)}if(this.xingFrameData.frameCount=this.frameCount,this.xingFrameData.fileSize=i,this.xingFrameData.toc=a,this.format._options.onXingFrame&&this.writer.startTrackingWrites(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.format._options.onXingFrame){let{data:s,start:o}=this.writer.stopTrackingWrites();this.format._options.onXingFrame(s,o)}e()}};var Tp=8192,lo=class extends we{constructor(e,r){super(e);this.trackDatas=[];this.bosPagesWritten=!1;this.allTracksKnown=J();this.pageBytes=new Uint8Array(ss);this.pageView=new DataView(this.pageBytes.buffer);this.format=r}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,as({codecStrings:this.trackDatas.map(e=>e.codecInfo.codec)})}addEncodedVideoPacket(){throw new Error("Video tracks are not supported.")}getTrackData(e,r){let i=this.trackDatas.find(o=>o.track===e);if(i)return i;let a;do a=Math.floor(2**32*Math.random());while(this.trackDatas.some(o=>o.serialNumber===a));p(e.source._codec==="vorbis"||e.source._codec==="opus"),_e(r),p(r),p(r.decoderConfig);let s={track:e,serialNumber:a,internalSampleRate:e.source._codec==="opus"?ot:r.decoderConfig.sampleRate,codecInfo:{codec:e.source._codec,vorbisInfo:null,opusInfo:null},vorbisLastBlocksize:null,packetQueue:[],currentTimestampInSamples:0,pagesWritten:0,currentGranulePosition:0,currentLacingValues:[],currentPageData:[],currentPageSize:27,currentPageStartsWithFreshPacket:!0,currentPageStartTimestampInSamples:0,closed:!1};return this.queueHeaderPackets(s,r),this.trackDatas.push(s),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),s}queueHeaderPackets(e,r){if(p(r.decoderConfig),e.track.source._codec==="vorbis"){p(r.decoderConfig.description);let i=j(r.decoderConfig.description);if(i[0]!==2)throw new TypeError("First byte of Vorbis decoder description must be 2.");let a=1,s=()=>{let g=0;for(;;){let y=i[a++];if(y===void 0)throw new TypeError("Vorbis decoder description is too short.");if(g+=y,y<255)return g}},o=s(),c=s();if(i.length-a<=0)throw new TypeError("Vorbis decoder description is too short.");let l=i.subarray(a,a+=o);a+=c;let m=i.subarray(a),d=new Uint8Array(7);d[0]=3,d[1]=118,d[2]=111,d[3]=114,d[4]=98,d[5]=105,d[6]=115;let f=gn(d,this.output._metadataTags,!0);e.packetQueue.push({data:l,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:f,timestampInSamples:0,durationInSamples:0,forcePageFlush:!1},{data:m,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0});let b=U(l).getUint8(28);e.codecInfo.vorbisInfo={blocksizes:[1<<(b&15),1<<(b>>4)],modeBlockflags:Ba(m).modeBlockflags}}else if(e.track.source._codec==="opus"){if(!r.decoderConfig.description)throw new TypeError("For Ogg, Opus decoder description is required.");let i=j(r.decoderConfig.description),a=new Uint8Array(8),s=U(a);s.setUint32(0,1332770163,!1),s.setUint32(4,1415669619,!1);let o=gn(a,this.output._metadataTags,!0);e.packetQueue.push({data:i,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:o,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0}),e.codecInfo.opusInfo={preSkip:yr(i).preSkip}}}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getTrackData(e,i);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=s.currentTimestampInSamples,{durationInSamples:c,vorbisBlockSize:u}=ns(r.data,s.codecInfo,s.vorbisLastBlocksize);s.currentTimestampInSamples+=c,s.vorbisLastBlocksize=u,s.packetQueue.push({data:r.data,timestampInSamples:o,durationInSamples:c,forcePageFlush:!1}),await this.interleavePages()}finally{a()}}addSubtitleCue(){throw new Error("Subtitle tracks are not supported.")}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async interleavePages(e=!1){if(!this.bosPagesWritten){if(!this.allTracksAreKnown()&&!e)return;for(let r of this.trackDatas)for(;r.packetQueue.length>0;){let i=r.packetQueue.shift();if(this.writePacket(r,i,!1),i.forcePageFlush)break}this.bosPagesWritten=!0}e:for(;;){let r=null,i=1/0;for(let o of this.trackDatas){if(!e&&o.packetQueue.length<=1&&!o.closed)break e;o.packetQueue.length>0&&o.packetQueue[0].timestampInSamples0&&a-e.currentPageStartTimestampInSamples>l&&this.writePage(e,!1)}let s=r.data.length,o=0,c=0;for(;;){e.currentLacingValues.length===0&&o>0&&(e.currentPageStartsWithFreshPacket=!1);let l=Math.min(255,s);e.currentLacingValues.push(l),e.currentPageSize++,c+=l;let m=s<255;if(e.currentLacingValues.length===255){let d=r.data.subarray(o,c);if(o=c,e.currentPageData.push(d),e.currentPageSize+=d.length,this.writePage(e,i&&m),m)return}if(m)break;s-=255}let u=r.data.subarray(o);e.currentPageData.push(u),e.currentPageSize+=u.length,e.currentGranulePosition=a,(e.currentPageSize>=Tp||r.forcePageFlush)&&this.writePage(e,i)}writePage(e,r){this.pageView.setUint32(0,Cn,!0),this.pageView.setUint8(4,0);let i=0;e.currentPageStartsWithFreshPacket||(i|=1),e.pagesWritten===0&&(i|=2),r&&(i|=4),this.pageView.setUint8(5,i);let a=e.currentLacingValues.every(u=>u===255)?-1:e.currentGranulePosition;Eu(this.pageView,6,a,!0),this.pageView.setUint32(14,e.serialNumber,!0),this.pageView.setUint32(18,e.pagesWritten,!0),this.pageView.setUint32(22,0,!0),this.pageView.setUint8(26,e.currentLacingValues.length),this.pageBytes.set(e.currentLacingValues,27);let s=27+e.currentLacingValues.length;for(let u of e.currentPageData)this.pageBytes.set(u,s),s+=u.length;let o=this.pageBytes.subarray(0,s),c=is(o);if(this.pageView.setUint32(22,c,!0),e.pagesWritten++,e.currentLacingValues.length=0,e.currentPageData.length=0,e.currentPageSize=27,e.currentPageStartsWithFreshPacket=!0,e.currentPageStartTimestampInSamples=e.currentGranulePosition,this.format._options.onPage&&this.writer.startTrackingWrites(),this.writer.write(o),this.format._options.onPage){let{data:u,start:l}=this.writer.stopTrackingWrites();this.format._options.onPage(u,l,e.track.source)}}async onTrackClose(e){let r=await this.mutex.acquire(),i=this.trackDatas.find(a=>a.track===e);i&&(i.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePages(),r()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let r of this.trackDatas)r.closed=!0;await this.interleavePages(!0);for(let r of this.trackDatas)r.currentLacingValues.length>0&&this.writePage(r,!0);e()}};var wp=0,tm=4096,Yd=256,Sp=224,Zd=192,Jd=new Uint8Array([9,240]),em=new Uint8Array([70,1]),mo=class extends we{constructor(e,r){super(e);this.trackDatas=[];this.tablesWritten=!1;this.continuityCounters=new Map;this.packetBuffer=new Uint8Array(188);this.packetView=U(this.packetBuffer);this.allTracksKnown=J();this.videoTrackIndex=0;this.audioTrackIndex=0;this.adaptationFieldBuffer=new Uint8Array(184);this.payloadBuffer=new Uint8Array(184);this.format=r}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,ps(this.trackDatas.map(e=>e.codecString))}getVideoTrackData(e,r){let i=this.trackDatas.find(l=>l.track===e);if(i)return i;pr(r),p(r?.decoderConfig);let a=e.source._codec;p(a==="avc"||a==="hevc");let s=a==="avc"?27:36,o=Yd+this.trackDatas.length,c=Sp+this.videoTrackIndex++,u={track:e,pid:o,streamType:s,streamId:c,codecString:r.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(u),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,r){let i=this.trackDatas.find(l=>l.track===e);if(i)return i;_e(r),p(r?.decoderConfig);let a=e.source._codec;p(a==="aac"||a==="mp3"||a==="ac3"||a==="eac3");let s,o;switch(a){case"aac":s=15,o=Zd+this.audioTrackIndex++;break;case"mp3":s=3,o=Zd+this.audioTrackIndex++;break;case"ac3":s=129,o=189;break;case"eac3":s=135,o=189;break}let c=Yd+this.trackDatas.length,u={track:e,pid:c,streamType:s,streamId:o,codecString:r.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(u),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}async addEncodedVideoPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,i);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=this.prepareVideoPacket(s,r,i);r.type==="key"&&await this.flushTimestampQueue(s),s.timestampProcessingQueue.push({data:o,presentationTimestamp:r.timestamp,decodeTimestamp:null,isKeyframe:r.type==="key"})}finally{a()}}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,i);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=this.prepareAudioPacket(s,r,i);r.type==="key"&&await this.flushTimestampQueue(s),s.timestampProcessingQueue.push({data:o,presentationTimestamp:r.timestamp,decodeTimestamp:null,isKeyframe:r.type==="key"})}finally{a()}}async addSubtitleCue(){throw new Error("MPEG-TS does not support subtitles.")}prepareVideoPacket(e,r,i){let a=e.track.source._codec;if(e.inputIsAnnexB===null){let s=i?.decoderConfig?.description;if(e.inputIsAnnexB=!s,!e.inputIsAnnexB){let o=j(s);a==="avc"?e.avcDecoderConfig=Ra(o):e.hevcDecoderConfig=ol(o)}}return e.inputIsAnnexB?this.prepareAnnexBVideoPacket(r.data,a):this.prepareLengthPrefixedVideoPacket(e,r,a)}prepareAnnexBVideoPacket(e,r){let i=[];for(let s of br(e)){let o=e.subarray(s.offset,s.offset+s.length);(r==="avc"?jt(o[0])===9:ct(o[0])===35)||i.push(o)}let a=r==="avc"?Jd:em;return i.unshift(a),fn(i)}prepareLengthPrefixedVideoPacket(e,r,i){let a=r.data,s=i==="avc"?e.avcDecoderConfig.lengthSizeMinusOne+1:e.hevcDecoderConfig.lengthSizeMinusOne+1,o=[];for(let u of Ea(a,s)){let l=a.subarray(u.offset,u.offset+u.length);(i==="avc"?jt(l[0])===9:ct(l[0])===35)||o.push(l)}if(r.type==="key")if(i==="avc"){let u=e.avcDecoderConfig;for(let l of u.pictureParameterSets)o.unshift(l);for(let l of u.sequenceParameterSets)o.unshift(l)}else{let u=e.hevcDecoderConfig;for(let l of u.arrays)if(l.nalUnitType===34)for(let m of l.nalUnits)o.unshift(m);for(let l of u.arrays)if(l.nalUnitType===33)for(let m of l.nalUnits)o.unshift(m);for(let l of u.arrays)if(l.nalUnitType===32)for(let m of l.nalUnits)o.unshift(m)}let c=i==="avc"?Jd:em;return o.unshift(c),fn(o)}prepareAudioPacket(e,r,i){let a=e.track.source._codec;if(a==="mp3"||a==="ac3"||a==="eac3")return r.data;if(e.inputIsAdts===null){let u=i?.decoderConfig?.description;if(e.inputIsAdts=!u,!e.inputIsAdts){let l=It(j(u)),m=ka(l);e.adtsHeader=m.header,e.adtsHeaderBitstream=m.bitstream}}if(e.inputIsAdts)return r.data;p(e.adtsHeader),p(e.adtsHeaderBitstream);let s=e.adtsHeader,o=r.data.byteLength+s.byteLength;Ta(e.adtsHeaderBitstream,o);let c=new Uint8Array(o);return c.set(s,0),c.set(r.data,s.byteLength),c}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async flushTimestampQueue(e,r=!0){if(e.timestampProcessingQueue.length===0)return;let i=e.timestampProcessingQueue.map(a=>a.presentationTimestamp).sort((a,s)=>a-s);for(let a=0;a0&&s.packetQueue[0].presentationTimestamp>>30&7),c.writeBits(1,1),c.writeBits(15,l>>>15&32767),c.writeBits(1,1),c.writeBits(15,l&32767),c.writeBits(1,1),i){p(r.decodeTimestamp!==null);let h=Math.round(r.decodeTimestamp*9e4);c.writeBits(4,1),c.writeBits(3,h>>>30&7),c.writeBits(1,1),c.writeBits(15,h>>>15&32767),c.writeBits(1,1),c.writeBits(15,h&32767),c.writeBits(1,1)}let m=s.length+r.data.length,d=0,f=!0;for(;d0){let I=this.adaptationFieldBuffer;T===1?I[0]=0:(I[0]=T-1,I[1]=Number(y)<<7|Number(g)<<6,I.fill(255,2,T)),w=I.subarray(0,T)}let S=Math.min(184-T,b),x=this.payloadBuffer.subarray(0,S),P=0;if(d0,c=i?o?3:2:o?1:0;this.packetBuffer[0]=71,this.packetView.setUint16(1,(r?16384:0)|e&8191,!1),this.packetBuffer[3]=c<<4|s&15,o&&this.continuityCounters.set(e,s+1&15);let u=4;i&&(this.packetBuffer.set(i,u),u+=i.length),this.packetBuffer.set(a,u),u+=a.length,u<188&&this.packetBuffer.fill(255,u);let l=this.writer.getPos();this.writer.write(this.packetBuffer),this.format._options.onPacket&&this.format._options.onPacket(this.packetBuffer.slice(),l)}async onTrackClose(e){let r=await this.mutex.acquire(),i=this.trackDatas.find(a=>a.track===e);i&&(i.closed=!0,await this.flushTimestampQueue(i,!1)),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePackets(),r()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let r of this.trackDatas)r.closed=!0,await this.flushTimestampQueue(r,!1);await this.interleavePackets(!0),e()}},Ap=79764919,rm=new Uint32Array(256);for(let n=0;n<256;n++){let t=n<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Ap:t<<1;rm[n]=t>>>0&4294967295}var im=n=>{let t=4294967295;for(let e=0;e>>24^r])>>>0}return t},ui=new Uint8Array(16);{let n=U(ui);ui[0]=0,n.setUint16(1,45069,!1),n.setUint16(3,1,!1),ui[5]=193,ui[6]=0,ui[7]=0,n.setUint16(8,1,!1),n.setUint16(10,57344|tm&8191,!1),n.setUint32(12,im(ui.subarray(0,12)),!1)}var xp=n=>{let t=0;for(let c of n)t+=5,c.streamType===129?t+=yn.length:c.streamType===135&&(t+=kn.length);let e=9+t+4,r=new Uint8Array(3+e-4),i=U(r);r[0]=2,i.setUint16(1,45056|e&4095,!1),i.setUint16(3,1,!1),r[5]=193,r[6]=0,r[7]=0,i.setUint16(8,65535,!1),i.setUint16(10,61440,!1);let a=12;for(let c of n)r[a++]=c.streamType,i.setUint16(a,57344|c.pid&8191,!1),a+=2,c.streamType===129?(i.setUint16(a,61440|yn.length,!1),a+=2,r.set(yn,a),a+=yn.length):c.streamType===135?(i.setUint16(a,61440|kn.length,!1),a+=2,r.set(kn,a),a+=kn.length):(i.setUint16(a,61440,!1),a+=2);let s=im(r),o=new Uint8Array(r.length+4);return o.set(r,0),U(o).setUint32(r.length,s,!1),o};var fo=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer)}writeU16(t){this.helperView.setUint16(0,t,!0),this.writer.write(this.helper.subarray(0,2))}writeU32(t){this.helperView.setUint32(0,t,!0),this.writer.write(this.helper.subarray(0,4))}writeU64(t){this.helperView.setUint32(0,t,!0),this.helperView.setUint32(4,Math.floor(t/2**32),!0),this.writer.write(this.helper)}writeAscii(t){this.writer.write(new TextEncoder().encode(t))}};var po=class extends we{constructor(e,r){super(e);this.headerWritten=!1;this.dataSize=0;this.sampleRate=null;this.sampleCount=0;this.riffSizePos=null;this.dataSizePos=null;this.ds64RiffSizePos=null;this.ds64DataSizePos=null;this.ds64SampleCountPos=null;this.format=r,this.isRf64=!!r._options.large}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!1),this.riffWriter=new fo(this.writer),e()}async getMimeType(){return"audio/wav"}async addEncodedVideoPacket(){throw new Error("WAVE does not support video.")}async addEncodedAudioPacket(e,r,i){let a=await this.mutex.acquire();try{if(this.headerWritten||(_e(i),p(i),p(i.decoderConfig),this.writeHeader(e,i.decoderConfig),this.sampleRate=i.decoderConfig.sampleRate,this.headerWritten=!0),this.validateTimestamp(e,r.timestamp,r.type==="key"),!this.isRf64&&this.writer.getPos()+r.data.byteLength>=2**32)throw new Error("Adding more audio data would exceed the maximum RIFF size of 4 GiB. To write larger files, use RF64 by setting `large: true` in the WavOutputFormatOptions.");this.writer.write(r.data),this.dataSize+=r.data.byteLength,this.sampleCount+=Math.round(r.duration*this.sampleRate),await this.writer.flush()}finally{a()}}async addSubtitleCue(){throw new Error("WAVE does not support subtitles.")}writeHeader(e,r){this.format._options.onHeader&&this.writer.startTrackingWrites();let i,a=e.source._codec,s=Ae(a);s.dataType==="ulaw"?i=7:s.dataType==="alaw"?i=6:s.dataType==="float"?i=3:i=1;let o=r.numberOfChannels,c=r.sampleRate,u=s.sampleSize*o;if(this.riffWriter.writeAscii(this.isRf64?"RF64":"RIFF"),this.isRf64?this.riffWriter.writeU32(4294967295):(this.riffSizePos=this.writer.getPos(),this.riffWriter.writeU32(0)),this.riffWriter.writeAscii("WAVE"),this.isRf64&&(this.riffWriter.writeAscii("ds64"),this.riffWriter.writeU32(28),this.ds64RiffSizePos=this.writer.getPos(),this.riffWriter.writeU64(0),this.ds64DataSizePos=this.writer.getPos(),this.riffWriter.writeU64(0),this.ds64SampleCountPos=this.writer.getPos(),this.riffWriter.writeU64(0),this.riffWriter.writeU32(0)),this.riffWriter.writeAscii("fmt "),this.riffWriter.writeU32(16),this.riffWriter.writeU16(i),this.riffWriter.writeU16(o),this.riffWriter.writeU32(c),this.riffWriter.writeU32(c*u),this.riffWriter.writeU16(u),this.riffWriter.writeU16(8*s.sampleSize),!Gt(this.output._metadataTags)){let l=this.format._options.metadataFormat??"info";l==="info"?this.writeInfoChunk(this.output._metadataTags):l==="id3"?this.writeId3Chunk(this.output._metadataTags):ae(l)}if(this.riffWriter.writeAscii("data"),this.isRf64?this.riffWriter.writeU32(4294967295):(this.dataSizePos=this.writer.getPos(),this.riffWriter.writeU32(0)),this.format._options.onHeader){let{data:l,start:m}=this.writer.stopTrackingWrites();this.format._options.onHeader(l,m)}}writeInfoChunk(e){let r=this.writer.getPos();this.riffWriter.writeAscii("LIST"),this.riffWriter.writeU32(0),this.riffWriter.writeAscii("INFO");let i=new Set,a=(c,u)=>{if(!tt(u)){console.warn(`Didn't write tag '${c}' because '${u}' is not ISO 8859-1-compatible.`);return}let l=u.length+1,m=new Uint8Array(l);for(let d=0;dr[i*t]:t===1&&e===4?this.channelMixer=(r,i,a)=>r[i*t]*+(a<2):t===1&&e===6?this.channelMixer=(r,i,a)=>r[i*t]*+(a===2):t===2&&e===1?this.channelMixer=(r,i)=>{let a=i*t;return .5*(r[a]+r[a+1])}:t===2&&e===4?this.channelMixer=(r,i,a)=>r[i*t+a]*+(a<2):t===2&&e===6?this.channelMixer=(r,i,a)=>r[i*t+a]*+(a<2):t===4&&e===1?this.channelMixer=(r,i)=>{let a=i*t;return .25*(r[a]+r[a+1]+r[a+2]+r[a+3])}:t===4&&e===2?this.channelMixer=(r,i,a)=>{let s=i*t;return .5*(r[s+a]+r[s+a+2])}:t===4&&e===6?this.channelMixer=(r,i,a)=>{let s=i*t;return a<2?r[s+a]:a===2||a===3?0:r[s+a-2]}:t===6&&e===1?this.channelMixer=(r,i)=>{let a=i*t;return Math.SQRT1_2*(r[a]+r[a+1])+r[a+2]+.5*(r[a+4]+r[a+5])}:t===6&&e===2?this.channelMixer=(r,i,a)=>{let s=i*t;return r[s+a]+Math.SQRT1_2*(r[s+2]+r[s+a+4])}:t===6&&e===4?this.channelMixer=(r,i,a)=>{let s=i*t;return a<2?r[s+a]+Math.SQRT1_2*r[s+2]:r[s+a+2]}:this.channelMixer=(r,i,a)=>a=this.bufferStartFrame+this.bufferSizeInFrames;)await this.finalizeCurrentBuffer(),this.bufferStartFrame+=this.bufferSizeInFrames;let l=u-this.bufferStartFrame;p(l=0&&h=0&&b{await this._flushAndClose(!1),this._closed=!0,!(t.output.state==="finalizing"||t.output.state==="finalized")&&t.output._muxer.onTrackClose(t)})()}async _flushOrWaitForOngoingClose(t){return this._closingPromise??=(async()=>{await this._flushAndClose(t),this._closed=!0})()}},Ot=class extends li{constructor(e){super();this._connectedTrack=null;if(!re.includes(e))throw new TypeError(`Invalid video codec '${e}'. Must be one of: ${re.join(", ")}.`);this._codec=e}},ou=(n,t)=>{if(n.metadata.hasOnlyKeyPackets&&t.type!=="key")throw new Error("Cannot add non-key packets to a hasOnlyKeyPackets video track.")},Dr=class extends Ot{constructor(t){super(t)}add(t,e){if(!(t instanceof Q))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(e!==void 0&&(!e||typeof e!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),ou(this._connectedTrack,t),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,t,e)}},na=class{constructor(t,e){this.source=t;this.encodingConfig=e;this.ensureEncoderPromise=null;this.encoderInitialized=!1;this.encoder=null;this.muxer=null;this.lastMultipleOfKeyFrameInterval=-1;this.resizeCanvas=null;this.codedWidth=null;this.codedHeight=null;this.outputWidth=null;this.outputHeight=null;this.frameRateLastSample=null;this.frameRateLastTimestamp=null;this.frameRateLastEndTimestamp=null;this.preciseTimings=[];this.customEncoder=null;this.customEncoderCallSerializer=new cr;this.customEncoderQueueSize=0;this.alphaEncoder=null;this.splitter=null;this.splitterCreationFailed=!1;this.alphaFrameQueue=[];this.error=null;this.lastMuxerPromise=Promise.resolve();let r=e.sizeChangeBehavior??"deny";if(["fill","contain","cover"].includes(r)&&e.transform?.fit!==void 0)throw new TypeError(`Cannot set 'fit' when 'sizeChangeBehavior' is '${r}'. The size change behavior determines the fit in this case.`)}async add(t,e,r){let i=t;try{this.checkForEncoderError(),this.source._ensureValidAdd();let a=this.encodingConfig,s=a.sizeChangeBehavior??"deny",o=!1;if(this.codedWidth!==null&&this.codedHeight!==null){if((t.codedWidth!==this.codedWidth||t.codedHeight!==this.codedHeight)&&(o=!0,s==="deny"))throw new Error(`Video sample size must remain constant. Expected ${this.codedWidth}x${this.codedHeight}, got ${t.codedWidth}x${t.codedHeight}. To allow the sample size to change over time, set \`sizeChangeBehavior\` to a value other than 'deny' in the encoding options.`)}else this.codedWidth=t.codedWidth,this.codedHeight=t.codedHeight;if(a.transform?.width!==void 0||a.transform?.height!==void 0||a.transform?.rotate!==void 0||a.transform?.crop!==void 0||a.transform?.force===!0||o&&s!=="passThrough"){let m=Tt(t.rotation+(a.transform?.rotate??0)),[d,f]=m%180===0?[t.codedWidth,t.codedHeight]:[t.codedHeight,t.codedWidth],h=a.transform?.crop;h&&(h=ri(h,d,f));let b=h?h.width:d,g=h?h.height:f,y=b/g,k,T,w=a.transform?.fit??"fill";o&&s!=="passThrough"?(p(this.outputWidth),p(this.outputHeight),p(s!=="deny"),k=this.outputWidth,T=this.outputHeight,w=s):a.transform?.width!==void 0&&a.transform?.height===void 0?(k=a.transform.width,T=Pt(Math.round(k/y))):a.transform?.width===void 0&&a.transform?.height!==void 0?(T=a.transform.height,k=Pt(Math.round(T*y))):a.transform?.width!==void 0&&a.transform?.height!==void 0?(k=a.transform?.width,T=a.transform?.height):(k=b,T=g),(this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=k,this.outputHeight=T);let S=!1;this.resizeCanvas?(this.resizeCanvas.width!==k||this.resizeCanvas.height!==T)&&(this.resizeCanvas.width=k,this.resizeCanvas.height=T):(typeof document<"u"?(this.resizeCanvas=document.createElement("canvas"),this.resizeCanvas.width=k,this.resizeCanvas.height=T):this.resizeCanvas=new OffscreenCanvas(k,T),S=!0);let x=this.resizeCanvas.getContext("2d",{alpha:this.encodingConfig.alpha==="keep"||xt()});p(x),typeof x.resetTransform=="function"&&x.resetTransform(),S||(xt()?(x.fillStyle="black",x.fillRect(0,0,k,T)):x.clearRect(0,0,k,T)),t.drawWithFit(x,{fit:w,rotation:m,crop:h}),e&&t.close(),t=new me(this.resizeCanvas,{timestamp:t.timestamp,duration:t.duration,rotation:0}),e=!0}else(this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=t.codedWidth,this.outputHeight=t.codedHeight);let l=a.transform?.frameRate;if(l!==void 0){let m=t.timestamp+t.duration,d=dr(t.timestamp,l);if(this.frameRateLastSample!==null)if(d<=this.frameRateLastTimestamp){this.frameRateLastSample.close(),this.frameRateLastSample=t.clone(),this.frameRateLastEndTimestamp=m;return}else await this.padFrameRate(d,r);t===i&&(t=t.clone(),e=!0),t.setTimestamp(d),t.setDuration(1/l),this.frameRateLastSample?.close(),this.frameRateLastSample=t.clone(),this.frameRateLastTimestamp=d,this.frameRateLastEndTimestamp=m}await this.processAndEncode(t,r)}finally{e&&t.close()}}async processAndEncode(t,e){let r=this.encodingConfig,i;if(r.transform?.process){let a=r.transform.process(t);if(a instanceof Promise&&(a=await a),a===null)return;Array.isArray(a)||(a=[a]),i=a.map(s=>s instanceof me?s:typeof VideoFrame<"u"&&s instanceof VideoFrame?new me(s):new me(s,{timestamp:t.timestamp,duration:t.duration}))}else i=[t];try{for(let a of i){this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(a),this.encoderInitialized||await this.ensureEncoderPromise),p(this.encoderInitialized);let s=this.encodingConfig.keyFrameInterval??2,o=Math.floor(a.timestamp/s),c={...e,keyFrame:e?.keyFrame||s===0||o!==this.lastMultipleOfKeyFrameInterval};if(this.lastMultipleOfKeyFrameInterval=o,this.customEncoder){this.customEncoderQueueSize++;let u=a.clone(),l=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(u,c)).then(()=>this.customEncoderQueueSize--).catch(m=>this.error??=m).finally(()=>{u.close()});this.customEncoderQueueSize>=4&&await l}else{p(this.encoder);let u=a.toVideoFrame(),l=q(this.preciseTimings,u.timestamp,d=>d.microsecondTimestamp),m=l!==-1?this.preciseTimings[l]:null;if(m&&m.microsecondTimestamp===u.timestamp?(m.timestamp!==a.timestamp&&(m.timestampIsValid=!1),m.duration!==a.duration&&(m.durationIsValid=!1)):(this.preciseTimings.splice(l+1,0,{microsecondTimestamp:u.timestamp,timestamp:a.timestamp,duration:a.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift()),!this.alphaEncoder)this.encoder.encode(u,c),u.close();else if(!!u.format&&!u.format.includes("A")||this.splitterCreationFailed)this.alphaFrameQueue.push(null),this.encoder.encode(u,c),u.close();else{let f=u.displayWidth,h=u.displayHeight;if(!this.splitter)try{this.splitter=new cu(f,h)}catch(b){console.error("Due to an error, only color data will be encoded.",b),this.splitterCreationFailed=!0,this.alphaFrameQueue.push(null),this.encoder.encode(u,c),u.close()}if(this.splitter){let b=this.splitter.extractColor(u),g=this.splitter.extractAlpha(u);this.alphaFrameQueue.push(g),this.encoder.encode(b,c),b.close(),u.close()}}this.encoder.encodeQueueSize>=4&&await new Promise(d=>this.encoder.addEventListener("dequeue",d,{once:!0}))}await this.lastMuxerPromise}}finally{for(let a of i)a!==t&&a.close()}}async padFrameRate(t,e){let r=this.encodingConfig.transform.frameRate;p(this.frameRateLastSample);let i=Math.round((t-this.frameRateLastTimestamp)*r);for(let a=1;a{let e=Vc({...this.encodingConfig,width:t.codedWidth,height:t.codedHeight,squarePixelWidth:t.squarePixelWidth,squarePixelHeight:t.squarePixelHeight,framerate:this.source._connectedTrack?.metadata.frameRate});this.encodingConfig.onEncoderConfig?.(e);let r=Gi.find(i=>i.supports(this.encodingConfig.codec,e));if(r)this.customEncoder=new r,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=e,this.customEncoder.onPacket=(i,a)=>{if(!(i instanceof Q))throw new TypeError("The first argument passed to onPacket must be an EncodedPacket.");if(a!==void 0&&(!a||typeof a!="object"))throw new TypeError("The second argument passed to onPacket must be an object or undefined.");ou(this.source._connectedTrack,i),this.encodingConfig.onEncodedPacket?.(i,a),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,i,a).catch(s=>{this.error??=s})},await this.customEncoder.init();else{if(typeof VideoEncoder>"u")throw new Error("VideoEncoder is not supported by this browser.");if(e.alpha="discard",this.encodingConfig.alpha==="keep"&&(e.latencyMode="quality"),(e.width%2===1||e.height%2===1)&&(this.encodingConfig.codec==="avc"||this.encodingConfig.codec==="hevc"))throw new Error(`The dimensions ${e.width}x${e.height} are not supported for codec '${this.encodingConfig.codec}'; both width and height must be even numbers. Make sure to round your dimensions to the nearest even number.`);if(!(await VideoEncoder.isConfigSupported(e)).supported)throw new Error(`This specific encoder configuration (${e.codec}, ${e.bitrate} bps, ${e.width}x${e.height}, hardware acceleration: ${e.hardwareAcceleration??"no-preference"}) is not supported by this browser. Consider using another codec or changing your video parameters.`);let s=[],o=[],c=0,u=0,l=(d,f,h)=>{let b={};if(f){let T=new Uint8Array(f.byteLength);f.copyTo(T),b.alpha=T}let g=Q.fromEncodedChunk(d,b),y=q(this.preciseTimings,d.timestamp,T=>T.microsecondTimestamp),k=y!==-1?this.preciseTimings[y]:null;k&&k.microsecondTimestamp===d.timestamp&&(g=g.clone({timestamp:k.timestampIsValid?k.timestamp:void 0,duration:k.durationIsValid?k.duration:void 0})),ou(this.source._connectedTrack,g),this.encodingConfig.onEncodedPacket?.(g,h),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,g,h).catch(T=>{this.error??=T})},m=new Error("Encoding error").stack;if(this.encoder=new VideoEncoder({output:(d,f)=>{if(!this.alphaEncoder){l(d,null,f);return}let h=this.alphaFrameQueue.shift();p(h!==void 0),h?(this.alphaEncoder.encode(h,{keyFrame:d.type==="key"}),u++,h.close(),s.push({chunk:d,meta:f})):u===0?l(d,null,f):(o.push(c+u),s.push({chunk:d,meta:f}))},error:d=>{d.stack=m,this.error??=d}}),this.encoder.configure(e),this.encodingConfig.alpha==="keep"){let d=new Error("Encoding error").stack;this.alphaEncoder=new VideoEncoder({output:(f,h)=>{u--;let b=s.shift();for(p(b!==void 0),l(b.chunk,f,b.meta),c++;o.length>0&&o[0]===c;){o.shift();let g=s.shift();p(g!==void 0),l(g.chunk,null,g.meta)}},error:f=>{f.stack=d,this.error??=f}}),this.alphaEncoder.configure(e)}}p(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}async flushAndClose(t){if(t||this.checkForEncoderError(),!t&&this.frameRateLastSample){let e=this.encodingConfig.transform.frameRate,r=dr(this.frameRateLastEndTimestamp,e);await this.padFrameRate(r)}this.frameRateLastSample?.close(),this.frameRateLastSample=null,this.customEncoder?(t||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(t||(await this.encoder.flush(),await this.alphaEncoder?.flush()),this.encoder.state!=="closed"&&this.encoder.close(),this.alphaEncoder&&this.alphaEncoder.state!=="closed"&&this.alphaEncoder.close(),this.alphaFrameQueue.forEach(e=>e?.close()),this.splitter?.close()),t||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},cu=class{constructor(t,e){this.lastFrame=null;typeof OffscreenCanvas<"u"?this.canvas=new OffscreenCanvas(t,e):(this.canvas=document.createElement("canvas"),this.canvas.width=t,this.canvas.height=e);let r=this.canvas.getContext("webgl2",{alpha:!0});if(!r)throw new Error("Couldn't acquire WebGL 2 context.");this.gl=r,this.colorProgram=this.createColorProgram(),this.alphaProgram=this.createAlphaProgram(),this.vao=this.createVAO(),this.sourceTexture=this.createTexture(),this.alphaResolutionLocation=this.gl.getUniformLocation(this.alphaProgram,"u_resolution"),this.gl.useProgram(this.colorProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.colorProgram,"u_sourceTexture"),0),this.gl.useProgram(this.alphaProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.alphaProgram,"u_sourceTexture"),0)}createVertexShader(){return this.createShader(this.gl.VERTEX_SHADER,`#version 300 es in vec2 a_position; in vec2 a_texCoord; out vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; } `)}createColorProgram(){let t=this.createVertexShader(),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_sourceTexture; in vec2 v_texCoord; out vec4 fragColor; void main() { vec4 source = texture(u_sourceTexture, v_texCoord); fragColor = vec4(source.rgb, 1.0); } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createAlphaProgram(){let t=this.createVertexShader(),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_sourceTexture; uniform vec2 u_resolution; // The width and height of the canvas in vec2 v_texCoord; out vec4 fragColor; // This function determines the value for a single byte in the YUV stream float getByteValue(float byteOffset) { float width = u_resolution.x; float height = u_resolution.y; float yPlaneSize = width * height; if (byteOffset < yPlaneSize) { // This byte is in the luma plane. Find the corresponding pixel coordinates to sample from float y = floor(byteOffset / width); float x = mod(byteOffset, width); // Add 0.5 to sample the center of the texel vec2 sampleCoord = (vec2(x, y) + 0.5) / u_resolution; // The luma value is the alpha from the source texture return texture(u_sourceTexture, sampleCoord).a; } else { // Write a fixed value for chroma and beyond return 128.0 / 255.0; } } void main() { // Each fragment writes 4 bytes (R, G, B, A) float pixelIndex = floor(gl_FragCoord.y) * u_resolution.x + floor(gl_FragCoord.x); float baseByteOffset = pixelIndex * 4.0; vec4 result; for (int i = 0; i < 4; i++) { float currentByteOffset = baseByteOffset + float(i); result[i] = getByteValue(currentByteOffset); } fragColor = result; } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createShader(t,e){let r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)||console.error("Shader compile error:",this.gl.getShaderInfoLog(r)),r}createVAO(){let t=this.gl.createVertexArray();this.gl.bindVertexArray(t);let e=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),r=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,r),this.gl.bufferData(this.gl.ARRAY_BUFFER,e,this.gl.STATIC_DRAW);let i=this.gl.getAttribLocation(this.colorProgram,"a_position"),a=this.gl.getAttribLocation(this.colorProgram,"a_texCoord");return this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(a),this.gl.vertexAttribPointer(a,2,this.gl.FLOAT,!1,16,8),t}createTexture(){let t=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,t),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),t}updateTexture(t){this.lastFrame!==t&&((t.displayWidth!==this.canvas.width||t.displayHeight!==this.canvas.height)&&(this.canvas.width=t.displayWidth,this.canvas.height=t.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.sourceTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.lastFrame=t)}extractColor(t){return this.updateTexture(t),this.gl.useProgram(this.colorProgram),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),new VideoFrame(this.canvas,{timestamp:t.timestamp,duration:t.duration??void 0,alpha:"discard"})}extractAlpha(t){this.updateTexture(t),this.gl.useProgram(this.alphaProgram),this.gl.uniform2f(this.alphaResolutionLocation,this.canvas.width,this.canvas.height),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);let{width:e,height:r}=this.canvas,i=Math.ceil(e/2)*Math.ceil(r/2),a=e*r+i*2,s=Math.ceil(a/(e*4)),o=new Uint8Array(4*e*s);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,o),o=o.subarray(0,a),p(o[e*r]===128),p(o[o.length-1]===128);let c={format:"I420",codedWidth:e,codedHeight:r,timestamp:t.timestamp,duration:t.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,c)}close(){this.gl.getExtension("WEBGL_lose_context")?.loseContext(),this.gl=null}},di=class extends Ot{constructor(t){Qs(t),super(t.codec),this._encoder=new na(this,t)}add(t,e){if(!(t instanceof me))throw new TypeError("videoSample must be a VideoSample.");return this._encoder.add(t,!1,e)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},ho=class extends Ot{constructor(t,e){if(!(typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas))throw new TypeError("canvas must be an HTMLCanvasElement or OffscreenCanvas.");Qs(e),super(e.codec),this._encoder=new na(this,e),this._canvas=t}add(t,e=0,r){if(!Number.isFinite(t)||t<0)throw new TypeError("timestamp must be a non-negative number.");if(!Number.isFinite(e)||e<0)throw new TypeError("duration must be a non-negative number.");let i=new me(this._canvas,{timestamp:t,duration:e});return this._encoder.add(i,!0,r)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},go=class extends Ot{constructor(e,r,i={}){if(!(e instanceof MediaStreamTrack)||e.kind!=="video")throw new TypeError("track must be a video MediaStreamTrack.");if(Qs(r),typeof i!="object"||!i)throw new TypeError("options must be an object.");if(i.frameRate!=null&&(typeof i.frameRate!="number"||i.frameRate<=0))throw new TypeError("options.frameRate, when provided, must be either a positive number or null.");if(i.timestampBase!==void 0&&i.timestampBase!=="synced-zero"&&i.timestampBase!=="zero"&&i.timestampBase!=="unix")throw new TypeError("options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.");r={...r,latencyMode:"realtime"};super(r.codec);this._abortController=null;this._workerTrackId=null;this._workerListener=null;this._promiseWithResolvers=J();this._errorPromiseAccessed=!1;this._paused=!1;this._lastVideoFrame=null;this._timerHandle=null;this._videoElement=null;this._options=i,this._encoder=new na(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly.");let e=this._options.frameRate!==void 0?this._options.frameRate:this._track.getSettings().frameRate??null;this._abortController=new AbortController;let r=null,i=null,a=0,s=!1,o=null,c=0,u=()=>{if(p(e!==null),!this._lastVideoFrame)return;p(i!==null),p(r!==null);let d=performance.now();for(;d-i>1e3/e;){i+=1e3/e;let f=r+a/e,h=new VideoFrame(this._videoElement??this._lastVideoFrame,{timestamp:1e6*f,duration:1e6/e});m(h,d)}};e!==null&&(this._timerHandle=Nu(u,4));let l=d=>{if(e===null)m(d);else{let f=performance.now();this._lastVideoFrame?(u(),this._lastVideoFrame?.close(),this._lastVideoFrame=d):(m(d.clone(),f),i=f,this._lastVideoFrame=d)}},m=(d,f=performance.now())=>{if(s){d.close();return}a++;let h=d.timestamp/1e6;if(this._paused){if(r!==null){if(o!==null&&this._options.timestampBase!=="unix"){let y=h-o;c-=y}o=h}d.close();return}if(r===null){r=h;let g,y=this._options.timestampBase??"synced-zero";if(y==="unix")g=Date.now()/1e3;else if(y==="zero")g=0;else{let k=this._connectedTrack.output;k._firstMediaStreamTimestamp===null?(k._firstMediaStreamTimestamp=f/1e3,g=0):g=f/1e3-k._firstMediaStreamTimestamp}c=g-r}if(o=h,this._encoder.getQueueSize()>=8){d.close();return}let b=new me(d,{timestamp:h+c});this._encoder.add(b,!0).catch(g=>{s=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(g),this._workerTrackId!==null&&su({type:"stopTrack",trackId:this._workerTrackId})})};if(typeof MediaStreamTrackProcessor<"u"){let d=new MediaStreamTrackProcessor({track:this._track}),f=new WritableStream({write:l});d.readable.pipeTo(f,{signal:this._abortController.signal}).catch(h=>{h instanceof DOMException&&h.name==="AbortError"||this._promiseWithResolvers.reject(h)})}else if(await Ep())this._workerTrackId=Cp++,su({type:"videoTrack",trackId:this._workerTrackId,track:this._track}),this._workerListener=f=>{let h=f.data;h.type==="videoFrame"&&h.trackId===this._workerTrackId?l(h.videoFrame):h.type==="error"&&h.trackId===this._workerTrackId&&this._promiseWithResolvers.reject(h.error)},et.addEventListener("message",this._workerListener);else if(e!==null){let f=document.createElement("video");f.style.position="fixed",f.style.left="-10000px",f.style.top="-10000px",f.style.width="1px",f.style.height="1px",f.style.opacity="0",f.style.pointerEvents="none",f.muted=!0,f.srcObject=new MediaStream([this._track]),document.body.appendChild(f),this._videoElement=f,f.addEventListener("loadeddata",()=>{if(s||!this._videoElement)return;let h=new VideoFrame(f,{timestamp:1e3*performance.now()});l(h),h.close()},{once:!0}),f.play().catch(h=>{s=!0,this._promiseWithResolvers.reject(h)})}else throw new Error("When no explicit frame rate is set, MediaStreamTrackProcessor is required; but it's not supported by this browser.")}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&(this._abortController.abort(),this._abortController=null),this._timerHandle&&Lu(this._timerHandle),this._lastVideoFrame?.close(),this._videoElement&&(this._videoElement.srcObject=null,this._videoElement.remove(),this._videoElement=null),this._workerTrackId!==null&&(p(this._workerListener),su({type:"stopTrack",trackId:this._workerTrackId}),await new Promise(r=>{let i=a=>{let s=a.data;s.type==="trackStopped"&&s.trackId===this._workerTrackId&&(p(this._workerListener),et.removeEventListener("message",this._workerListener),et.removeEventListener("message",i),r())};et.addEventListener("message",i)})),await this._encoder.flushAndClose(e)}},Dt=class extends li{constructor(e){super();this._connectedTrack=null;if(!se.includes(e))throw new TypeError(`Invalid audio codec '${e}'. Must be one of: ${se.join(", ")}.`);this._codec=e}},Vr=class extends Dt{constructor(t){super(t)}add(t,e){if(!(t instanceof Q))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(e!==void 0&&(!e||typeof e!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,t,e)}},aa=class{constructor(t,e){this.source=t;this.encodingConfig=e;this.ensureEncoderPromise=null;this.encoderInitialized=!1;this.encoder=null;this.muxer=null;this.lastNumberOfChannels=null;this.lastSampleRate=null;this.isPcmEncoder=!1;this.outputSampleSize=null;this.writeOutputValue=null;this.customEncoder=null;this.customEncoderCallSerializer=new cr;this.customEncoderQueueSize=0;this.lastEndSampleIndex=null;this.resampler=null;this.error=null;this.lastMuxerPromise=Promise.resolve()}async add(t,e){try{if(this.checkForEncoderError(),this.source._ensureValidAdd(),this.lastNumberOfChannels!==null&&this.lastSampleRate!==null){if(t.numberOfChannels!==this.lastNumberOfChannels||t.sampleRate!==this.lastSampleRate)throw new Error(`Audio parameters must remain constant. Expected ${this.lastNumberOfChannels} channels at ${this.lastSampleRate} Hz, got ${t.numberOfChannels} channels at ${t.sampleRate} Hz.`)}else this.lastNumberOfChannels=t.numberOfChannels,this.lastSampleRate=t.sampleRate;let r=this.encodingConfig;r.transform?.numberOfChannels!==void 0||r.transform?.sampleRate!==void 0?(this.resampler||(this.resampler=new nn({targetNumberOfChannels:r.transform.numberOfChannels??t.numberOfChannels,targetSampleRate:r.transform.sampleRate??t.sampleRate,startTime:t.timestamp,endTime:1/0,onSample:async a=>{await this.processAndEncode(a,!0)}})),await this.resampler.add(t)):await this.processAndEncode(t,e)}finally{e&&t.close()}}async processAndEncode(t,e){let r=this.encodingConfig;if(r.transform?.sampleFormat!==void 0&&Hs(t.format)!==r.transform.sampleFormat){let i=qs(t,r.transform.sampleFormat);e&&t.close(),t=i,e=!0}if(r.transform?.process){let i=r.transform.process(t);if(i instanceof Promise&&(i=await i),i===null)return;Array.isArray(i)||(i=[i]);for(let a of i){if(!(a instanceof Te))throw new TypeError("The audio process function must return an AudioSample, null, or an array of AudioSamples.");await this.encodeSample(a,!0)}e&&t.close()}else await this.encodeSample(t,e)}async encodeSample(t,e){try{this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(t),this.encoderInitialized||await this.ensureEncoderPromise),p(this.encoderInitialized);{let r=Math.round(t.timestamp*t.sampleRate),i=Math.round((t.timestamp+t.duration)*t.sampleRate);if(this.lastEndSampleIndex===null)this.lastEndSampleIndex=i;else{let a=r-this.lastEndSampleIndex;if(a>=64){let s=new Te({data:new Float32Array(a*t.numberOfChannels),format:"f32-planar",sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,numberOfFrames:a,timestamp:this.lastEndSampleIndex/t.sampleRate});await this.encodeSample(s,!0)}this.lastEndSampleIndex+=t.numberOfFrames}}if(this.customEncoder){this.customEncoderQueueSize++;let r=t.clone(),i=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(r)).then(()=>this.customEncoderQueueSize--).catch(a=>this.error??=a).finally(()=>{r.close()});this.customEncoderQueueSize>=4&&await i,await this.lastMuxerPromise}else if(this.isPcmEncoder)await this.doPcmEncoding(t,e);else{p(this.encoder);let r=t.toAudioData();this.encoder.encode(r),r.close(),e&&t.close(),this.encoder.encodeQueueSize>=4&&await new Promise(i=>this.encoder.addEventListener("dequeue",i,{once:!0})),await this.lastMuxerPromise}}finally{e&&t.close()}}async doPcmEncoding(t,e){p(this.outputSampleSize),p(this.writeOutputValue);let{numberOfChannels:r,numberOfFrames:i,sampleRate:a,timestamp:s}=t,o=2048,c=[];for(let d=0;d{let{numberOfChannels:e,sampleRate:r}=t,i=Uc({numberOfChannels:e,sampleRate:r,...this.encodingConfig});this.encodingConfig.onEncoderConfig?.(i);let a=Qi.find(s=>s.supports(this.encodingConfig.codec,i));if(a)this.customEncoder=new a,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=i,this.customEncoder.onPacket=(s,o)=>{if(!(s instanceof Q))throw new TypeError("The first argument passed to onPacket must be an EncodedPacket.");if(o!==void 0&&(!o||typeof o!="object"))throw new TypeError("The second argument passed to onPacket must be an object or undefined.");this.encodingConfig.onEncodedPacket?.(s,o),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,s,o).catch(c=>{this.error??=c})},await this.customEncoder.init();else if(te.includes(this.encodingConfig.codec))this.initPcmEncoder();else{if(typeof AudioEncoder>"u")throw new Error("AudioEncoder is not supported by this browser.");if(!(await AudioEncoder.isConfigSupported(i)).supported)throw new Error(`This specific encoder configuration (${i.codec}, ${i.bitrate} bps, ${i.numberOfChannels} channels, ${i.sampleRate} Hz) is not supported by this browser. Consider using another codec or changing your audio parameters.`);let o=new Error("Encoding error").stack;this.encoder=new AudioEncoder({output:(c,u)=>{if(this.encodingConfig.codec==="aac"&&u?.decoderConfig){let m=!1;if(!u.decoderConfig.description||u.decoderConfig.description.byteLength<2?m=!0:m=It(j(u.decoderConfig.description)).objectType===0,m){let d=Number(X(i.codec.split(".")));u.decoderConfig.description=ki({objectType:d,numberOfChannels:u.decoderConfig.numberOfChannels,sampleRate:u.decoderConfig.sampleRate})}}let l=Q.fromEncodedChunk(c);l=l.clone({timestamp:St(l.timestamp,i.sampleRate),duration:c.duration!=null?St(l.duration,i.sampleRate):void 0}),this.encodingConfig.onEncodedPacket?.(l,u),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,l,u).catch(m=>{this.error??=m})},error:c=>{c.stack=o,this.error??=c}}),this.encoder.configure(i)}p(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}initPcmEncoder(){this.isPcmEncoder=!0;let t=this.encodingConfig.codec,{dataType:e,sampleSize:r,littleEndian:i}=Ae(t);switch(this.outputSampleSize=r,r){case 1:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint8(s,de((o+1)*127.5,0,255)):e==="signed"?this.writeOutputValue=(a,s,o)=>{a.setInt8(s,de(Math.round(o*128),-128,127))}:e==="ulaw"?this.writeOutputValue=(a,s,o)=>{let c=de(Math.floor(o*32767),-32768,32767);a.setUint8(s,wd(c))}:e==="alaw"?this.writeOutputValue=(a,s,o)=>{let c=de(Math.floor(o*32767),-32768,32767);a.setUint8(s,Ad(c))}:p(!1);break;case 2:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint16(s,de((o+1)*32767.5,0,65535),i):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt16(s,de(Math.round(o*32767),-32768,32767),i):p(!1);break;case 3:e==="unsigned"?this.writeOutputValue=(a,s,o)=>Wr(a,s,de((o+1)*83886075e-1,0,16777215),i):e==="signed"?this.writeOutputValue=(a,s,o)=>Iu(a,s,de(Math.round(o*8388607),-8388608,8388607),i):p(!1);break;case 4:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint32(s,de((o+1)*21474836475e-1,0,4294967295),i):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt32(s,de(Math.round(o*2147483647),-2147483648,2147483647),i):e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat32(s,o,i):p(!1);break;case 8:e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat64(s,o,i):p(!1);break;default:ae(r),p(!1)}}async flushAndClose(t){t||this.checkForEncoderError(),!t&&this.resampler&&await this.resampler.finalize(),this.resampler=null,this.customEncoder?(t||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(t||await this.encoder.flush(),this.encoder.state!=="closed"&&this.encoder.close()),t||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.isPcmEncoder?0:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},mi=class extends Dt{constructor(t){js(t),super(t.codec),this._encoder=new aa(this,t)}add(t){if(!(t instanceof Te))throw new TypeError("audioSample must be an AudioSample.");return this._encoder.add(t,!1)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},bo=class extends Dt{constructor(e){js(e);super(e.codec);this._accumulatedTime=0;this._encoder=new aa(this,e)}async add(e){if(!(e instanceof AudioBuffer))throw new TypeError("audioBuffer must be an AudioBuffer.");let r=Te._fromAudioBuffer(e,this._accumulatedTime);this._accumulatedTime+=e.duration;for(let i of r)await this._encoder.add(i,!0)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},yo=class extends Dt{constructor(e,r,i={}){if(!(e instanceof MediaStreamTrack)||e.kind!=="audio")throw new TypeError("track must be an audio MediaStreamTrack.");if(js(r),typeof i!="object"||!i)throw new TypeError("options must be an object.");if(i.timestampBase!==void 0&&i.timestampBase!=="synced-zero"&&i.timestampBase!=="zero"&&i.timestampBase!=="unix")throw new TypeError("options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.");super(r.codec);this._abortController=null;this._audioContext=null;this._scriptProcessorNode=null;this._promiseWithResolvers=J();this._errorPromiseAccessed=!1;this._paused=!1;this._options=i,this._encoder=new aa(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamAudioTrackSource, so that any internal errors get bubbled up properly."),this._abortController=new AbortController;let e=null,r=!1,i=null,a=0,s=o=>{if(r){o.close();return}let c=o.timestamp;if(this._paused){if(e!==null){if(i!==null&&this._options.timestampBase!=="unix"){let l=c-i;a-=l}i=c}o.close();return}if(e===null){e=o.timestamp;let u,l=this._options.timestampBase??"synced-zero";if(l==="unix")u=Date.now()/1e3;else if(l==="zero")u=0;else{let m=this._connectedTrack.output;m._firstMediaStreamTimestamp===null?(m._firstMediaStreamTimestamp=performance.now()/1e3,u=0):u=performance.now()/1e3-m._firstMediaStreamTimestamp}a=u-e}if(i=c,this._encoder.getQueueSize()>=8){o.close();return}o.setTimestamp(c+a),this._encoder.add(o,!0).catch(u=>{r=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(u),this._audioContext?.suspend()})};if(typeof MediaStreamTrackProcessor<"u"){let o=new MediaStreamTrackProcessor({track:this._track}),c=new WritableStream({write:u=>s(new Te(u))});o.readable.pipeTo(c,{signal:this._abortController.signal}).catch(u=>{u instanceof DOMException&&u.name==="AbortError"||this._promiseWithResolvers.reject(u)})}else{let o=window.AudioContext||window.webkitAudioContext;this._audioContext=new o({sampleRate:this._track.getSettings().sampleRate});let c=this._audioContext.createMediaStreamSource(new MediaStream([this._track]));this._scriptProcessorNode=this._audioContext.createScriptProcessor(4096),this._audioContext.state==="suspended"&&await this._audioContext.resume(),c.connect(this._scriptProcessorNode),this._scriptProcessorNode.connect(this._audioContext.destination);let u=0;this._scriptProcessorNode.onaudioprocess=l=>{let m=Te._fromAudioBuffer(l.inputBuffer,u);u+=l.inputBuffer.duration;for(let d of m)s(d)}}}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&(this._abortController.abort(),this._abortController=null),this._audioContext&&(p(this._scriptProcessorNode),this._scriptProcessorNode.disconnect(),await this._audioContext.suspend()),await this._encoder.flushAndClose(e)}},Pp=()=>{let n=(r,i)=>{i?self.postMessage(r,{transfer:i}):self.postMessage(r)};n({type:"support",supported:typeof MediaStreamTrackProcessor<"u"});let t=new Map,e=new Map;self.addEventListener("message",r=>{let i=r.data;switch(i.type){case"videoTrack":{e.set(i.trackId,i.track);let a=new MediaStreamTrackProcessor({track:i.track}),s=new WritableStream({write:c=>{if(!e.has(i.trackId)){c.close();return}n({type:"videoFrame",trackId:i.trackId,videoFrame:c},[c])}}),o=new AbortController;t.set(i.trackId,o),a.readable.pipeTo(s,{signal:o.signal}).catch(c=>{c instanceof DOMException&&c.name==="AbortError"||n({type:"error",trackId:i.trackId,error:c})})}break;case"stopTrack":{let a=t.get(i.trackId);a&&(a.abort(),t.delete(i.trackId)),e.get(i.trackId)?.stop(),e.delete(i.trackId),n({type:"trackStopped",trackId:i.trackId})}break;default:ae(i)}})},Cp=0,et=null,Ip=()=>{let n=new Blob([`(${Pp.toString()})()`],{type:"application/javascript"}),t=URL.createObjectURL(n);et=new Worker(t)},au=null,Ep=async()=>au!==null?au:(et||Ip(),new Promise(n=>{p(et);let t=e=>{let r=e.data;r.type==="support"&&(au=r.supported,et.removeEventListener("message",t),n(r.supported))};et.addEventListener("message",t)})),su=(n,t)=>{p(et),t?et.postMessage(n,t):et.postMessage(n)},fi=class extends li{constructor(e){super();this._connectedTrack=null;if(!Fe.includes(e))throw new TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${Fe.join(", ")}.`);this._codec=e}},ko=class extends fi{constructor(e){super(e);this._error=null;this._lastMuxerPromise=Promise.resolve();this._parser=new eo({codec:e,output:(r,i)=>{this._lastMuxerPromise=this._connectedTrack.output._muxer.addSubtitleCue(this._connectedTrack,r,i).catch(a=>{this._error??=a})}})}add(e){if(typeof e!="string")throw new TypeError("text must be a string.");return this._checkForError(),this._ensureValidAdd(),this._parser.parse(e),this._lastMuxerPromise}_checkForError(){if(this._error)throw this._error}async _flushAndClose(e){e||this._checkForError()}};var wo=class extends we{constructor(e,r){if(!(e._target instanceof Ne))throw new TypeError("HLS outputs require `OutputOptions.target` to be a PathedTarget.");super(e);this.trackDatas=[];this.isRelativeToUnixEpoch=!1;this.numWrittenMasterPlaylists=0;this.playlists=[];this.playlistDeclarations=[];this.format=r,this.targetSegmentDuration=r._options.targetDuration??2,this.singleFilePerPlaylist=r._options.singleFilePerPlaylist??!1,this.isLive=r._options.live??!1,this.maxLiveSegmentCount=r._options.maxLiveSegmentCount??1/0,this.globalTargetDuration=this.targetSegmentDuration,this.getPlaylistPath=r._options.getPlaylistPath??(({n:i})=>`playlist-${i}.m3u8`),this.getSegmentPath=r._options.getSegmentPath??(i=>i.isSingleFile?`segments-${i.playlist.n}${i.format.fileExtension}`:`segment-${i.playlist.n}-${i.n}${i.format.fileExtension}`),this.getInitPath=r._options.getInitPath??(i=>`init-${i.n}${i.segmentFormat.fileExtension}`)}async start(){let e=await this.mutex.acquire(),r=this.output._tracks.some(y=>y.metadata.isRelativeToUnixEpoch),i=this.output._tracks.some(y=>!y.metadata.isRelativeToUnixEpoch);if(r&&i)throw new Error("All tracks must agree on `relativeToUnixEpoch`: some tracks are relative to the Unix epoch and some are not.");this.isRelativeToUnixEpoch=r;let a=new Map,s=[],o=!1,c=!1,u=!1;for(let y of this.output._tracks){y.type==="video"&&(o=!0);let k=new Map;for(let T of this.output._tracks){if(y===T||!y.canBePairedWith(T))continue;if(y.type===T.type){c||(console.warn(`Illegal pairing of two ${y.type} tracks detected, which is not possible in HLS; treating them as unpaired.`),c=!0);continue}if(y.isVideoTrack()&&y.metadata.hasOnlyKeyPackets||T.isVideoTrack()&&T.metadata.hasOnlyKeyPackets){u||(console.warn("A key-packets-only video track is pairable with another track, which is not possible in HLS; treating them as unpaired."),u=!0);continue}let w=k.get(T.source._codec);w||k.set(T.source._codec,w=[]),w.push(T)}for(let[,T]of k){let w=T.map(P=>P.id).join("-");s.find(P=>P.key===w)||s.push({name:T[0].type+"-"+(s.length+1),key:w,tracks:T,needsEmit:!1,firstNoUri:!1});let x=a.get(y);x||a.set(y,x=[]),x.push(w)}}let l=o?"video":"audio",m=[],d=[],f=[];for(let y of this.output._tracks){let k=a.get(y);if(k){if(p(k.length>0),y.type!==l)continue;for(let T of k){let w=s.find(S=>S.key===T);if(p(w),k.length===1&&w.tracks.length===1){let S=a.get(w.tracks[0]);if(p(S!==void 0),S.length===1){let x=s.find(P=>P.key===S[0]);if(x.tracks.length===1){p(x.tracks[0]===y),m.push({tracks:[y,w.tracks[0]],linkedGroup:null});continue}}}m.push({tracks:[y],linkedGroup:w}),w.needsEmit=!0}}else y.type==="video"?d.push(y):y.type==="audio"&&f.push(y)}let h=({metadata:y})=>{let k="";return k+=`${y.languageCode??ee}-`,k+=`${y.name??""}-`,k+=`${y.disposition?.default??!0}-`,k+=`${y.disposition?.primary??!1}-`,k+=`${y.disposition?.forced??!1}-`,k};if(d.length>0)if(new Set(d.map(h)).size>1){let k={key:d.map(T=>T.id).join("-"),name:"video-"+(s.length+1),tracks:d,needsEmit:!0,firstNoUri:!0};s.push(k),m.push({tracks:[d[0]],linkedGroup:k})}else for(let k of d)m.push({tracks:[k],linkedGroup:null});if(f.length>0)if(new Set(f.map(h)).size>1){let k={key:f.map(T=>T.id).join("-"),name:"audio-"+(s.length+1),tracks:f,needsEmit:!0,firstNoUri:!0};s.push(k),m.push({tracks:[f[0]],linkedGroup:k})}else for(let k of f)m.push({tracks:[k],linkedGroup:null});let b=y=>{let k=[],T=0,w=0,S=!1,x=null,P=-1/0;for(let A of y)A.isVideoTrack()?(T++,S||=(A.metadata.rotation??0)!==0):A.isAudioTrack()&&w++,k.push(A.source._codec);for(let A of qt(this.format._options.segmentFormat)){let C=A.getSupportedCodecs(),I=A.getSupportedTrackCounts();if(k.some(v=>!C.includes(v))||TI.video.max||wI.audio.max)continue;let F=0;S&&A.supportsVideoRotationMetadata&&F++,F>P&&(x=A,P=F)}return p(x),x},g=async y=>{if(y.some(x=>this.playlists.some(P=>P.tracks.includes(x))))throw new Error("Internal error: track is already registered in a playlist.");let k=b(y),T=this.playlists.length+1,w=await this.getPlaylistPath({n:T,tracks:y,segmentFormat:k});vp(w);let S={id:this.playlists.length+1,path:w,tracks:y,segmentFormat:k,currentSegmentStartTimestamp:null,currentSegmentStartTimestampIsFixed:!1,nextSegmentId:1,initSegment:null,writtenSegments:[],peakBitrate:null,averageBitrate:null,mediaSequence:0,done:!1,singleFile:null,mutex:new ve};return this.playlists.push(S),S};for(let y of s)if(y.needsEmit)for(let k=0;kS.tracks[0].id===T.id);w??=await g([T]),this.playlistDeclarations.push({playlist:w,groupId:y.name,noUri:y.firstNoUri&&k===0,references:[]})}for(let y of m){let k=this.playlists.find(T=>T.tracks[0].id===y.tracks[0].id);k??=await g(y.tracks),this.playlistDeclarations.push({playlist:k,groupId:null,noUri:!1,references:y.linkedGroup?this.playlistDeclarations.filter(T=>T.groupId===y.linkedGroup.name):[]})}e()}async getMimeType(){return Et}allTracksAreKnown(e){for(let r of e.tracks)if(!r.source._closed&&!this.trackDatas.some(i=>i.track===r))return!1;return!0}async onTrackClose(e){let r=this.trackDatas.find(s=>s.track===e);r&&(r.closed=!0);let i=this.playlists.find(s=>s.tracks.includes(e));p(i);let a=await i.mutex.acquire();try{await this.advancePlaylist(i)}finally{a()}}getVideoTrackData(e,r){let i=this.trackDatas.find(s=>s.track===e);if(i)return i;pr(r),p(r),p(r?.decoderConfig);let a=this.playlists.filter(s=>s.tracks.includes(e));return p(a.length===1),i={track:e,packets:[],playlist:a[0],closed:!1,info:{type:"video",decoderConfig:r.decoderConfig}},this.trackDatas.push(i),i}getAudioTrackData(e,r){let i=this.trackDatas.find(s=>s.track===e);if(i)return i;_e(r),p(r),p(r?.decoderConfig);let a=this.playlists.filter(s=>s.tracks.includes(e));return p(a.length===1),i={track:e,packets:[],playlist:a[0],closed:!1,info:{type:"audio",decoderConfig:r.decoderConfig}},this.trackDatas.push(i),i}async addEncodedVideoPacket(e,r,i){let a=this.getVideoTrackData(e,i),s=a.playlist,o=await s.mutex.acquire();try{this.validateTimestamp(e,r.timestamp,r.type==="key"),a.packets.push(r),s.currentSegmentStartTimestamp===null?s.currentSegmentStartTimestamp=r.timestamp:s.currentSegmentStartTimestampIsFixed||(s.currentSegmentStartTimestamp=Math.min(s.currentSegmentStartTimestamp,r.timestamp)),await this.advancePlaylist(s)}finally{o()}}async addEncodedAudioPacket(e,r,i){let a=this.getAudioTrackData(e,i),s=a.playlist,o=await s.mutex.acquire();try{this.validateTimestamp(e,r.timestamp,r.type==="key"),a.packets.push(r),s.currentSegmentStartTimestamp===null?s.currentSegmentStartTimestamp=r.timestamp:s.currentSegmentStartTimestampIsFixed||(s.currentSegmentStartTimestamp=Math.min(s.currentSegmentStartTimestamp,r.timestamp)),await this.advancePlaylist(s)}finally{o()}}async addSubtitleCue(e,r,i){throw new Error("Unreachable.")}async advancePlaylist(e){if(p(!e.done),!this.allTracksAreKnown(e))return;if(e.currentSegmentStartTimestamp===null){await this.onPlaylistDone(e);return}let r=this.trackDatas.filter(s=>e.tracks.includes(s.track)),i=r.find(s=>s.info.type==="video"),a=r.find(s=>s.info.type==="audio");for(;;){let s=e.currentSegmentStartTimestamp+this.targetSegmentDuration,o=0,c=0;if(i&&(!i.closed||i.packets.length>0)){let w=i.packets.every(P=>P.timestamps)break;P>0&&A.type==="key"&&(S=A,x=P)}if(x!==null){if(o=x,a){let P=a.packets.findIndex(A=>A.timestamp>=S.timestamp);if(P!==-1)c=P;else if(a.closed)c=a.packets.length;else return}}else{if(!i.closed)return;o=i.packets.length;let P=Vu(i.packets,C=>C.timestamp),A=i.packets[P];if(p(A),a)if(A.timestampI.timestamp>=s);if(C!==-1)c=C;else if(a.closed)c=a.packets.length;else return}else{let C=a.packets.findIndex(I=>I.timestamp>A.timestamp);if(C!==-1)c=C;else if(a.closed)c=a.packets.length;else return}}}else if(a&&(!a.closed||a.packets.length>0))if(a.packets.every(S=>S.timestampx.timestamp<=s);c=Math.max(S,1)}if(o===0&&c===0){r.every(S=>S.closed)&&await this.onPlaylistDone(e);return}let u=null,l,m;p(this.output._target instanceof Ne);let d=this.output._target;if(this.singleFilePerPlaylist)if(e.singleFile===null){let w={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!0,playlist:To(e)};l=await this.getSegmentPath(w),nm(l),m=ge(ge(d.rootPath,e.path),l);let S=await this.output._getTarget({path:m,isRoot:!1,mimeType:e.segmentFormat.mimeType});S._start(),e.singleFile={target:S,path:l,nextOffset:0,info:w}}else l=e.singleFile.path,m=ge(ge(d.rootPath,e.path),l);else u={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!1,playlist:To(e)},l=await this.getSegmentPath(u),nm(l),m=ge(ge(d.rootPath,e.path),l),e.nextSegmentId++;let f=0,h=null,b=new sr({format:e.segmentFormat,target:new Ne(m,async w=>{let S={...w,isRoot:!1};if(w.isRoot)if(e.singleFile){let x=e.singleFile.target.slice(e.singleFile.nextOffset);return x.on("write",({end:P})=>f=Math.max(f,P)),x}else{let x=await this.output._getTarget(S);return h=x,x.on("write",({end:P})=>f=Math.max(f,P)),x}return this.output._getTarget(S)}),initTarget:async()=>{if(e.initSegment)return new Or;if(e.singleFile){e.initSegment={path:e.singleFile.path,duration:0,timestamp:0,byteSize:0,byteOffset:0,info:null};let w=e.singleFile.target.slice(e.singleFile.nextOffset);return w.on("write",({end:S})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,S)}),w.on("finalized",()=>{e.singleFile.nextOffset=e.initSegment.byteSize}),w}else{let w=To(e),S=await this.getInitPath(w);_p(S),e.initSegment={path:S,duration:0,timestamp:0,byteSize:0,byteOffset:null,info:null};let x=ge(ge(d.rootPath,e.path),S),P=await this.output._getTarget({path:x,isRoot:!1,mimeType:e.segmentFormat.mimeType});return P.on("write",({end:A})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,A)}),P.on("finalized",()=>{this.format._options.onInit?.(P,w)}),P}}}),g=-1/0;try{let w=null,S=null;if(i&&(w=new Dr(i.track.source._codec),b.addVideoTrack(w,i.track.metadata)),a&&(S=new Vr(a.track.source._codec),b.addAudioTrack(S,a.track.metadata)),await b.start(),i){p(w);let x={decoderConfig:i.info.decoderConfig};for(let P=0;P0&&(p(i),i.packets.splice(0,o)),c>0&&(p(a),a.packets.splice(0,c));let y=1/0;i&&i.packets.length>0&&(y=i.packets[0].timestamp),a&&a.packets.length>0&&(y=Math.min(y,a.packets[0].timestamp));let k=y<1/0?y:g;p(Number.isFinite(k));let T=k-e.currentSegmentStartTimestamp;if(p(T>=0),e.writtenSegments.push({path:l,duration:T,timestamp:e.currentSegmentStartTimestamp,byteSize:f,byteOffset:e.singleFile?e.singleFile.nextOffset:null,info:u??null}),this.globalTargetDuration=Math.max(this.globalTargetDuration,T),e.currentSegmentStartTimestamp=k,e.currentSegmentStartTimestampIsFixed=!0,e.singleFile&&(e.singleFile.nextOffset+=f),this.isLive){for(;e.writtenSegments.length>this.maxLiveSegmentCount;){let w=e.writtenSegments.shift();e.mediaSequence++,this.singleFilePerPlaylist||(p(w.info),this.format._options.onSegmentPopped?.(w.path,w.info))}await this.writePlaylist(e),await this.tryWriteMasterPlaylist()}}}async onPlaylistDone(e){p(!e.done),e.done=!0,e.singleFile&&(await e.singleFile.target._flush(),await e.singleFile.target._finalize(),this.format._options.onSegment?.(e.singleFile.target,e.singleFile.info)),await this.writePlaylist(e),this.isLive&&e.writtenSegments.length===0&&await this.tryWriteMasterPlaylist()}updatePlaylistBitrates(e){let r=e.writtenSegments,i=0,a=0,s=0;for(let o=0;o=.5*this.globalTargetDuration&&u<=1.5*this.globalTargetDuration&&(i=Math.max(i,8*c/u)),!(u>1.5*this.globalTargetDuration));l++);}if(i===0)for(let o of r){let c=o.duration||1;i=Math.max(i,8*o.byteSize/c)}for(let o of r)a+=8*o.byteSize;e.peakBitrate=i,e.averageBitrate=a/(s||1)}async writePlaylist(e){p(this.output._target instanceof Ne);let r=this.output._target;this.updatePlaylistBitrates(e);let i=!1;for(let d of e.writtenSegments)i||=d.byteOffset!==null;let a=e.tracks[0].isVideoTrack()&&e.tracks[0].metadata.hasOnlyKeyPackets,s=3;(a||i)&&(s=4),e.initSegment&&(s=5),e.initSegment&&!a&&(s=6);let o=this.isLive?this.targetSegmentDuration:this.globalTargetDuration,c=ge(r.rootPath,e.path),u=`#EXTM3U #EXT-X-VERSION:${s} `+(this.isLive?"":`#EXT-X-PLAYLIST-TYPE:VOD `)+`#EXT-X-TARGETDURATION:${Math.ceil(o)} `+(Number.isFinite(this.maxLiveSegmentCount)?`#EXT-X-MEDIA-SEQUENCE:${e.mediaSequence} `:"")+`#EXT-X-INDEPENDENT-SEGMENTS `+(a?`#EXT-X-I-FRAMES-ONLY `:"")+(e.initSegment?`#EXT-X-MAP:URI="${e.initSegment.path}"`+(e.initSegment.byteOffset!==null?`,BYTERANGE="${e.initSegment.byteSize}@${e.initSegment.byteOffset}"`:"")+` `:"")+` `+e.writtenSegments.map(d=>`#EXTINF:${+d.duration.toFixed(12)}, `+(this.isRelativeToUnixEpoch?`#EXT-X-PROGRAM-DATE-TIME:${new Date(1e3*d.timestamp).toISOString()} `:"")+(d.byteOffset!==null?`#EXT-X-BYTERANGE:${d.byteSize}@${d.byteOffset} `:"")+`${d.path} `).join("")+(e.done?(e.writtenSegments.length>0?` `:"")+`#EXT-X-ENDLIST `:"");this.format._options.onPlaylist?.(u,To(e));let l=await this.output._getTarget({path:c,isRoot:!1,mimeType:Et}),m=new Bt(l,!0);m.start(),m.write($.encode(u)),await m.flush(),await m.finalize()}async writeMasterPlaylist(){p(this.output._target instanceof Ne);let e=this.output._target,r=`#EXTM3U `,i=!1,a=null,s=0,o=!1;for(let u of this.playlistDeclarations)if(u.groupId===null){let l=u.playlist.tracks[0].isVideoTrack()&&u.playlist.tracks[0].metadata.hasOnlyKeyPackets,m=[];for(let y of u.playlist.tracks){let T=this.trackDatas.find(w=>w.track===y)?.info.decoderConfig.codec??y.source._codec;m.push(T)}let d=0,f=0;if(u.references.length>0){let k=u.references[0].playlist.tracks[0],w=this.trackDatas.find(S=>S.track===k)?.info.decoderConfig.codec??k.source._codec;m.push(w);for(let S of u.references)p(S.playlist.peakBitrate!==null),d=Math.max(d,S.playlist.peakBitrate),f=Math.max(f,S.playlist.averageBitrate??0)}p(u.playlist.peakBitrate!==null);let h=u.playlist.peakBitrate+d,b=(u.playlist.averageBitrate??0)+f;i||(r+=` `,i=!0),l?r+="#EXT-X-I-FRAME-STREAM-INF:":r+="#EXT-X-STREAM-INF:",r+=`BANDWIDTH=${Math.ceil(h)}`,b>0&&(r+=`,AVERAGE-BANDWIDTH=${Math.ceil(b)}`),r+=`,CODECS="${m.join(",")}"`;let g=u.playlist.tracks.find(y=>y.isVideoTrack());if(g?.isVideoTrack()){let k=this.trackDatas.find(T=>T.track===g)?.info.decoderConfig;if(k){let T=k.displayAspectWidth??k.codedWidth,w=k.displayAspectHeight??k.codedHeight;T!==void 0&&w!==void 0&&(g.metadata.rotation!==void 0&&g.metadata.rotation%180===90&&([T,w]=[w,T]),r+=`,RESOLUTION=${T}x${w}`)}!l&&g.metadata.frameRate!==void 0&&(r+=`,FRAME-RATE=${+g.metadata.frameRate.toFixed(3)}`)}if(!l){let y=new Map;for(let k of u.references){p(k.groupId!==null);let T=k.playlist.tracks[0].type;y.set(T,k.groupId)}for(let[k,T]of y)r+=`,${k.toUpperCase()}="${T}"`}l?(r+=`,URI="${u.playlist.path}"`,r+=` `):(r+=` `,r+=`${u.playlist.path} `)}else{p(u.playlist.tracks.length===1);let l=u.playlist.tracks[0],m=l.type,d=l.metadata.name??null,f=l.metadata.languageCode,h=l.metadata.disposition;(a===null||u.groupId!==a)&&(s=0,r+=` `,o=!1),a=u.groupId,s++,r+=`#EXT-X-MEDIA:TYPE=${m.toUpperCase()},GROUP-ID="${u.groupId}"`,d!==null&&/[\n\r"]/.test(d)&&(console.warn("Dropping track name since it includes a line feed, carriage return, or double quote character, which are not allowed in HLS playlist attributes."),d=null),d??=`${f??u.groupId}-${s}`,r+=`,NAME="${d}"`,f!==void 0&&(r+=`,LANGUAGE="${f}"`);let b=h?.primary??!1,g=h?.default??!0,y=h?.forced??!1;if(b&&!o&&(r+=",DEFAULT=YES",o=!0),(b||g)&&(r+=",AUTOSELECT=YES"),y&&(r+=",FORCED=YES"),m==="audio"){let T=this.trackDatas.find(w=>w.track===l)?.info.decoderConfig;T&&(r+=`,CHANNELS="${T.numberOfChannels}"`)}u.noUri||(r+=`,URI="${u.playlist.path}"`),r+=` `}this.format._options.onMaster?.(r);let c=await this.mutex.acquire();try{let u;if(this.numWrittenMasterPlaylists===0)u=await this.output._getRootWriter(!0);else{let l=await this.output._getTarget({path:e.rootPath,isRoot:!0,mimeType:Et});u=new Bt(l,!0),u.start()}u.write($.encode(r)),await u.flush(),await u.finalize(),this.numWrittenMasterPlaylists++}finally{c()}}async tryWriteMasterPlaylist(){p(this.isLive);for(let e of this.playlists)if(e.writtenSegments.length===0&&!e.done)return;await this.writeMasterPlaylist()}async finalize(){(await Promise.all(this.playlists.map(r=>r.mutex.acquire()))).forEach(r=>r());for(let r of this.trackDatas)r.closed=!0;await Promise.all(this.playlists.map(r=>r.done?Promise.resolve():this.advancePlaylist(r))),this.isLive||await this.writeMasterPlaylist()}},vp=n=>{if(typeof n!="string")throw new TypeError("options.getPlaylistPath must return or resolve to a string");if(/[\n\r"]/.test(n))throw new TypeError("Playlist paths cannot contain line feed, carriage return, or double quote characters.")},nm=n=>{if(typeof n!="string")throw new TypeError("options.getSegmentPath must return or resolve to a string");if(/[\n\r"]/.test(n))throw new TypeError("Segment paths cannot contain line feed or carriage return characters.")},_p=n=>{if(typeof n!="string")throw new TypeError("options.getInitPath must return or resolve to a string");if(/[\n\r"]/.test(n))throw new TypeError("Init paths cannot contain line feed, carriage return, or double quote characters.")},To=n=>({n:n.id,tracks:n.tracks,segmentFormat:n.segmentFormat});var Ee=class{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(t=>re.includes(t))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(t=>se.includes(t))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(t=>Fe.includes(t))}_codecUnsupportedHint(t){return""}},pi=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.fastStart!==void 0&&![!1,"in-memory","reserve","fragmented"].includes(t.fastStart))throw new TypeError("options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.");if(t.minimumFragmentDuration!==void 0&&(!Number.isFinite(t.minimumFragmentDuration)||t.minimumFragmentDuration<0))throw new TypeError("options.minimumFragmentDuration, when provided, must be a non-negative number.");if(t.onFtyp!==void 0&&typeof t.onFtyp!="function")throw new TypeError("options.onFtyp, when provided, must be a function.");if(t.onMoov!==void 0&&typeof t.onMoov!="function")throw new TypeError("options.onMoov, when provided, must be a function.");if(t.onMdat!==void 0&&typeof t.onMdat!="function")throw new TypeError("options.onMdat, when provided, must be a function.");if(t.onMoof!==void 0&&typeof t.onMoof!="function")throw new TypeError("options.onMoof, when provided, must be a function.");if(t.metadataFormat!==void 0&&!["mdir","mdta","udta","auto"].includes(t.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.");super(),this._options=t}getSupportedTrackCounts(){return{video:{min:0,max:4294967295},audio:{min:0,max:4294967295},subtitle:{min:0,max:4294967295},total:{min:1,max:4294967295}}}get supportsVideoRotationMetadata(){return!0}get supportsTimestampedMediaData(){return!0}_createMuxer(t){return new so(t,this)}},hi=class extends pi{constructor(t){super(t)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...re,...st,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...Fe]}_codecUnsupportedHint(t){return new oi().getSupportedCodecs().includes(t)?" Switching to MOV will grant support for this codec.":""}},si=class extends pi{constructor(t){super(t)}get _name(){return"CMAF"}get fileExtension(){return".m4s"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...re,...st,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...Fe]}},oi=class extends pi{constructor(t){super(t)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...re,...se]}_codecUnsupportedHint(t){return new hi().getSupportedCodecs().includes(t)?" Switching to MP4 will grant support for this codec.":""}},an=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.appendOnly!==void 0&&typeof t.appendOnly!="boolean")throw new TypeError("options.appendOnly, when provided, must be a boolean.");if(t.minimumClusterDuration!==void 0&&(!Number.isFinite(t.minimumClusterDuration)||t.minimumClusterDuration<0))throw new TypeError("options.minimumClusterDuration, when provided, must be a non-negative number.");if(t.onEbmlHeader!==void 0&&typeof t.onEbmlHeader!="function")throw new TypeError("options.onEbmlHeader, when provided, must be a function.");if(t.onSegmentHeader!==void 0&&typeof t.onSegmentHeader!="function")throw new TypeError("options.onHeader, when provided, must be a function.");if(t.onCluster!==void 0&&typeof t.onCluster!="function")throw new TypeError("options.onCluster, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new oo(t,this)}get _name(){return"Matroska"}getSupportedTrackCounts(){return{video:{min:0,max:127},audio:{min:0,max:127},subtitle:{min:0,max:127},total:{min:1,max:127}}}get fileExtension(){return".mkv"}get mimeType(){return"video/x-matroska"}getSupportedCodecs(){return[...re,...st,...te.filter(t=>!["pcm-s8","pcm-f32be","pcm-f64be","ulaw","alaw"].includes(t)),...Fe]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},ci=class extends an{constructor(t){super(t)}getSupportedCodecs(){return[...re.filter(t=>["vp8","vp9","av1"].includes(t)),...se.filter(t=>["opus","vorbis"].includes(t)),...Fe]}get _name(){return"WebM"}get fileExtension(){return".webm"}get mimeType(){return"video/webm"}_codecUnsupportedHint(t){return new an().getSupportedCodecs().includes(t)?" Switching to MKV will grant support for this codec.":""}},So=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.xingHeader!==void 0&&typeof t.xingHeader!="boolean")throw new TypeError("options.xingHeader, when provided, must be a boolean.");if(t.onXingFrame!==void 0&&typeof t.onXingFrame!="function")throw new TypeError("options.onXingFrame, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new uo(t,this)}get _name(){return"MP3"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".mp3"}get mimeType(){return"audio/mpeg"}getSupportedCodecs(){return["mp3"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Ao=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.large!==void 0&&typeof t.large!="boolean")throw new TypeError("options.large, when provided, must be a boolean.");if(t.metadataFormat!==void 0&&!["info","id3"].includes(t.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'info' or 'id3'.");if(t.onHeader!==void 0&&typeof t.onHeader!="function")throw new TypeError("options.onHeader, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new po(t,this)}get _name(){return"WAVE"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".wav"}get mimeType(){return"audio/wav"}getSupportedCodecs(){return[...te.filter(t=>["pcm-s16","pcm-s24","pcm-s32","pcm-f32","pcm-u8","ulaw","alaw"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},xo=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.maximumPageDuration!==void 0&&(!Number.isFinite(t.maximumPageDuration)||t.maximumPageDuration<=0))throw new TypeError("options.maximumPageDuration, when provided, must be a positive number.");if(t.onPage!==void 0&&typeof t.onPage!="function")throw new TypeError("options.onPage, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new lo(t,this)}get _name(){return"Ogg"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:0,max:4294967296},subtitle:{min:0,max:0},total:{min:1,max:4294967296}}}get fileExtension(){return".ogg"}get mimeType(){return"application/ogg"}getSupportedCodecs(){return[...se.filter(t=>["vorbis","opus"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Po=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.onFrame!==void 0&&typeof t.onFrame!="function")throw new TypeError("options.onFrame, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new Zs(t,this)}get _name(){return"ADTS"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".aac"}get mimeType(){return"audio/aac"}getSupportedCodecs(){return["aac"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Co=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.appendOnly!==void 0&&typeof t.appendOnly!="boolean")throw new TypeError("options.appendOnly, when provided, must be a boolean.");super(),this._options=t}_createMuxer(t){return new Js(t,this)}get _name(){return"FLAC"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".flac"}get mimeType(){return"audio/flac"}getSupportedCodecs(){return["flac"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Io=class extends Ee{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.onPacket!==void 0&&typeof t.onPacket!="function")throw new TypeError("options.onPacket, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new mo(t,this)}get _name(){return"MPEG-TS"}getSupportedTrackCounts(){return{video:{min:0,max:16},audio:{min:0,max:32},subtitle:{min:0,max:0},total:{min:1,max:48}}}get fileExtension(){return".ts"}get mimeType(){return"video/MP2T"}getSupportedCodecs(){return[...re.filter(t=>["avc","hevc"].includes(t)),...se.filter(t=>["aac","mp3","ac3","eac3"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},Eo=class extends Ee{constructor(t){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.segmentFormat instanceof Ee)&&(!Array.isArray(t.segmentFormat)||t.segmentFormat.length===0||!t.segmentFormat.every(e=>e instanceof Ee)))throw new TypeError("options.segmentFormat must be an OutputFormat or a non-empty array of OutputFormat instances.");if(t.targetDuration!==void 0&&(typeof t.targetDuration!="number"||t.targetDuration<=0))throw new TypeError("options.targetDuration, when provided, must be a positive number.");if(t.singleFilePerPlaylist!==void 0&&typeof t.singleFilePerPlaylist!="boolean")throw new TypeError("options.singleFilePerPlaylist, when provided, must be a boolean.");if(t.live!==void 0&&typeof t.live!="boolean")throw new TypeError("options.live, when provided, must be a boolean.");if(t.maxLiveSegmentCount!==void 0&&(typeof t.maxLiveSegmentCount!="number"||t.maxLiveSegmentCount<1||Number.isFinite(t.maxLiveSegmentCount)&&!Number.isInteger(t.maxLiveSegmentCount)))throw new TypeError("options.maxLiveSegmentCount, when provided, must be a positive integer or Infinity.");if(t.getPlaylistPath!==void 0&&typeof t.getPlaylistPath!="function")throw new TypeError("options.getPlaylistPath, when provided, must be a function.");if(t.getSegmentPath!==void 0&&typeof t.getSegmentPath!="function")throw new TypeError("options.getSegmentPath, when provided, must be a function.");if(t.getInitPath!==void 0&&typeof t.getInitPath!="function")throw new TypeError("options.getInitPath, when provided, must be a function.");if(t.onMaster!==void 0&&typeof t.onMaster!="function")throw new TypeError("options.onMaster, when provided, must be a function.");if(t.onPlaylist!==void 0&&typeof t.onPlaylist!="function")throw new TypeError("options.onPlaylist, when provided, must be a function.");if(t.onSegment!==void 0&&typeof t.onSegment!="function")throw new TypeError("options.onSegment, when provided, must be a function.");if(t.onInit!==void 0&&typeof t.onInit!="function")throw new TypeError("options.onInit, when provided, must be a function.");if(t.onSegmentPopped!==void 0&&typeof t.onSegmentPopped!="function")throw new TypeError("options.onSegmentPopped, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new wo(t,this)}get _name(){return"HTTP Live Streaming (HLS)"}get fileExtension(){return".m3u8"}get mimeType(){return Et}getSupportedCodecs(){return[...new Set(qt(this._options.segmentFormat).flatMap(e=>e.getSupportedCodecs()))]}getSupportedTrackCounts(){let t=!1,e=!1,r=!1;for(let i of qt(this._options.segmentFormat)){let a=i.getSupportedTrackCounts();t||=a.video.max>0,e||=a.audio.max>0,r||=a.subtitle.max>0}return{video:{min:0,max:t?1/0:0},audio:{min:0,max:e?1/0:0},subtitle:{min:0,max:0},total:{min:1,max:1/0}}}get supportsVideoRotationMetadata(){return qt(this._options.segmentFormat).some(t=>t.supportsVideoRotationMetadata)}get supportsTimestampedMediaData(){return!0}_codecUnsupportedHint(t){return" Using different segment formats may grant support for this codec."}};var lu=["video","audio","subtitle"],gi=class n{constructor(t,e,r,i,a){this.id=t,this.output=e,this.type=r,this.source=i,this.metadata=a}isVideoTrack(){return this.type==="video"}isAudioTrack(){return this.type==="audio"}isSubtitleTrack(){return this.type==="subtitle"}canBePairedWith(t){if(!(t instanceof n))throw new TypeError("other must be an OutputTrack.");if(this===t)return!1;let e=qt(this.metadata.group),r=qt(t.metadata.group);for(let i of e)if(this.type!==t.type&&r.some(o=>i===o)||r.some(o=>i._pairedGroups.has(o)))return!0;return!1}},sa=class extends gi{constructor(t,e,r,i){super(t,e,"video",r,i)}},oa=class extends gi{constructor(t,e,r,i){super(t,e,"audio",r,i)}},ca=class extends gi{constructor(t,e,r,i){super(t,e,"subtitle",r,i)}},Le=class n{constructor(){this._pairedGroups=new Set}pairWith(t){if(!(t instanceof n))throw new TypeError("other must be an OutputTrackGroup.");if(this===t)throw new TypeError("Cannot pair a group with itself.");this._pairedGroups.add(t),t._pairedGroups.add(this)}},uu=n=>{if(!n||typeof n!="object")throw new TypeError("metadata must be an object.");if(n.languageCode!==void 0&&!Wt(n.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(n.name!==void 0&&typeof n.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(n.disposition!==void 0&&Wu(n.disposition),n.maximumPacketCount!==void 0&&(!Number.isInteger(n.maximumPacketCount)||n.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.");if(n.group!==void 0&&!(n.group instanceof Le)&&(!Array.isArray(n.group)||n.group.some(t=>!(t instanceof Le))))throw new TypeError("metadata.group, when provided, must be an OutputTrackGroup instance or an array of OutputTrackGroup instances.")},sr=class extends je{constructor(e){super();this.state="pending";this.defaultTrackGroup=new Le;this._onFinalize=null;this._unfinalizedTargets=new Set;this._rootWriterPromise=null;this._tracks=[];this._startPromise=null;this._cancelPromise=null;this._finalizePromise=null;this._mutex=new ve;this._metadataTags={};this._rootTarget=null;this._rootTargetPromise=null;this._firstMediaStreamTimestamp=null;if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(!(e.format instanceof Ee))throw new TypeError("options.format must be an OutputFormat.");if(!(e.target instanceof Pe||e.target instanceof Ne))throw new TypeError("options.target must be a Target or a PathedTarget.");if(e.target instanceof Pe&&this._rememberTarget(e.target),e.initTarget!==void 0&&!(e.initTarget instanceof Pe)&&typeof e.initTarget!="function")throw new Error("options.initTarget, when provided, must be a Target or a function that returns or resolves to a Target.");if(e.onFinalize!==void 0&&typeof e.onFinalize!="function")throw new TypeError("options.onFinalize, when provided, must be a function.");this.format=e.format,this._target=e.target,this._onFinalize=e.onFinalize??null,this._initTarget=e.initTarget??null,this._initTarget instanceof Pe&&this._rememberTarget(this._initTarget),this._muxer=e.format._createMuxer(this)}get target(){let e="Output.target cannot be used when using PathedTarget with an async callback. Use the 'target' event instead.";if(this._rootTargetPromise)throw new TypeError(e);let r=this._getRootTarget();if(r instanceof Promise)throw new TypeError(e);return r}_getTargetValidated(e){p(this._target instanceof Ne);let r=this._target.getTarget(e),i=a=>{if(!(a instanceof Pe))throw new TypeError("getTarget must return a Target.");return a};return r instanceof Promise?r.then(i):i(r)}async _getTarget(e){p(this._target instanceof Ne);let r=await this._getTargetValidated(e);return this._emit("target",{target:r,request:e,isRoot:e.isRoot}),this.state==="canceled"?await r._close():this._rememberTarget(r),r}_rememberTarget(e){this._unfinalizedTargets.add(e),e.on("finalized",()=>this._unfinalizedTargets.delete(e),{once:!0})}async _getInitTarget(){if(p(this._initTarget!==null),this._initTarget instanceof Pe)return this._initTarget;let e=await this._initTarget();return this.state==="canceled"?await e._close():this._rememberTarget(e),e}_hasInitTarget(){return this._initTarget!==null}_getRootTarget(){if(this._rootTarget)return this._rootTarget;if(this._rootTargetPromise)return this._rootTargetPromise;if(this._target instanceof Pe)return this._emit("target",{target:this._target,request:null,isRoot:!0}),this._rootTarget=this._target,this._target;let e={path:this._target.rootPath,isRoot:!0,mimeType:this.format.mimeType},r=this._getTargetValidated(e),i=a=>(this.state==="canceled"?a._close():this._rememberTarget(a),this._emit("target",{target:a,request:e,isRoot:!0}),this._rootTarget=a,a);return r instanceof Promise?this._rootTargetPromise=r.then(i):i(r)}_getRootWriter(e){return this._rootWriterPromise??=(async()=>{let r=await this._getRootTarget(),i=new Bt(r,typeof e=="boolean"?e:e(r));return i.start(),i})()}addVideoTrack(e,r={}){if(!(e instanceof Ot))throw new TypeError("source must be a VideoSource.");if(uu(r),r.rotation!==void 0&&![0,90,180,270].includes(r.rotation))throw new TypeError(`Invalid video rotation: ${r.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&r.rotation)throw new Error(`${this.format._name} does not support video rotation metadata.`);if(r.frameRate!==void 0&&(!Number.isFinite(r.frameRate)||r.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${r.frameRate}. Must be a positive number.`);let i={...r};return i.group??=this.defaultTrackGroup,this._addTrack(new sa(this._tracks.length+1,this,e,i))}addAudioTrack(e,r={}){if(!(e instanceof Dt))throw new TypeError("source must be an AudioSource.");uu(r);let i={...r};return i.group??=this.defaultTrackGroup,this._addTrack(new oa(this._tracks.length+1,this,e,i))}addSubtitleTrack(e,r={}){if(!(e instanceof fi))throw new TypeError("source must be a SubtitleSource.");uu(r);let i={...r};return i.group??=this.defaultTrackGroup,this._addTrack(new ca(this._tracks.length+1,this,e,i))}setMetadataTags(e){if(ln(e),this.state!=="pending")throw new Error("Cannot set metadata tags after output has been started or canceled.");this._metadataTags=e}_addTrack(e){if(this.state!=="pending")throw new Error("Cannot add track after output has been started or canceled.");if(e.source._connectedTrack)throw new Error("Source is already used for a track.");let r=this.format.getSupportedTrackCounts(),i=this._tracks.reduce((o,c)=>o+(c.type===e.type?1:0),0),a=r[e.type].max;if(i===a)throw new Error(a===0?`${this.format._name} does not support ${e.type} tracks.`:`${this.format._name} does not support more than ${a} ${e.type} track${a===1?"":"s"}.`);let s=r.total.max;if(this._tracks.length===s)throw new Error(`${this.format._name} does not support more than ${s} tracks${s===1?"":"s"} in total.`);if(e.isVideoTrack()){let o=this.format.getSupportedVideoCodecs();if(o.length===0)throw new Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!o.includes(e.source._codec))throw new Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${o.map(c=>`'${c}'`).join(", ")}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isAudioTrack()){let o=this.format.getSupportedAudioCodecs();if(o.length===0)throw new Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!o.includes(e.source._codec))throw new Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${o.map(c=>`'${c}'`).join(", ")}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isSubtitleTrack()){let o=this.format.getSupportedSubtitleCodecs();if(o.length===0)throw new Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!o.includes(e.source._codec))throw new Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${o.map(c=>`'${c}'`).join(", ")}.`+this.format._codecUnsupportedHint(e.source._codec))}return this._tracks.push(e),e.source._connectedTrack=e,e}async start(){let e=this.format.getSupportedTrackCounts();for(let i of lu){let a=this._tracks.reduce((o,c)=>o+(c.type===i?1:0),0),s=e[i].min;if(a{this.state="started";let i=await this._mutex.acquire();try{await this._muxer.start();let a=this._tracks.map(s=>s.source._start());await Promise.all(a)}finally{i()}})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn("Output has already been canceled."),this._cancelPromise;if(this.state==="finalizing"||this.state==="finalized"){this.state==="finalized"&&console.warn("Output has already been finalized.");return}return this._cancelPromise=(async()=>{this.state="canceled";let e=await this._mutex.acquire();try{let r=this._tracks.map(i=>i.source._flushOrWaitForOngoingClose(!0));await Promise.all(r),await Promise.all([...this._unfinalizedTargets].map(i=>i._close())),this._unfinalizedTargets.clear()}finally{e()}})()}async finalize(){if(this.state==="pending")throw new Error("Cannot finalize before starting.");if(this.state==="canceled")throw new Error("Cannot finalize after canceling.");return this._finalizePromise?(console.warn("Output has already been finalized."),this._finalizePromise):this._finalizePromise=(async()=>{this.state="finalizing";let e=await this._mutex.acquire();try{let r=this._tracks.map(i=>i.source._flushOrWaitForOngoingClose(!1));if(await Promise.all(r),await this._muxer.finalize(),this._rootWriterPromise){let i=await this._rootWriterPromise;i.finalized||(await i.flush(),await i.finalize())}this._onFinalize&&await this._onFinalize(),this.state="finalized"}finally{e()}})()}};var vo=n=>{if(!n||typeof n!="object")throw new TypeError("options.video, when provided, must be an object.");if(n?.discard!==void 0&&typeof n.discard!="boolean")throw new TypeError("options.video.discard, when provided, must be a boolean.");if(n?.forceTranscode!==void 0&&typeof n.forceTranscode!="boolean")throw new TypeError("options.video.forceTranscode, when provided, must be a boolean.");if(n?.codec!==void 0&&!re.includes(n.codec))throw new TypeError(`options.video.codec, when provided, must be one of: ${re.join(", ")}.`);if(n?.bitrate!==void 0&&!(n.bitrate instanceof xe)&&(!Number.isInteger(n.bitrate)||n.bitrate<=0))throw new TypeError("options.video.bitrate, when provided, must be a positive integer or a quality.");if(n?.width!==void 0&&(!Number.isInteger(n.width)||n.width<=0))throw new TypeError("options.video.width, when provided, must be a positive integer.");if(n?.height!==void 0&&(!Number.isInteger(n.height)||n.height<=0))throw new TypeError("options.video.height, when provided, must be a positive integer.");if(n?.fit!==void 0&&!["fill","contain","cover"].includes(n.fit))throw new TypeError("options.video.fit, when provided, must be one of 'fill', 'contain', or 'cover'.");if(n?.width!==void 0&&n.height!==void 0&&n.fit===void 0)throw new TypeError("When both options.video.width and options.video.height are provided, options.video.fit must also be provided.");if(n?.rotate!==void 0&&![0,90,180,270].includes(n.rotate))throw new TypeError("options.video.rotate, when provided, must be 0, 90, 180 or 270.");if(n?.allowRotationMetadata!==void 0&&typeof n.allowRotationMetadata!="boolean")throw new TypeError("options.video.allowRotationMetadata, when provided, must be a boolean.");if(n?.crop!==void 0&&ii(n.crop,"options.video."),n?.frameRate!==void 0&&(!Number.isFinite(n.frameRate)||n.frameRate<=0))throw new TypeError("options.video.frameRate, when provided, must be a finite positive number.");if(n?.alpha!==void 0&&!["discard","keep"].includes(n.alpha))throw new TypeError("options.video.alpha, when provided, must be either 'discard' or 'keep'.");if(n?.keyFrameInterval!==void 0&&(!Number.isFinite(n.keyFrameInterval)||n.keyFrameInterval<0))throw new TypeError("options.video.keyFrameInterval, when provided, must be a non-negative number.");if(n?.process!==void 0&&typeof n.process!="function")throw new TypeError("options.video.process, when provided, must be a function.");if(n?.processedWidth!==void 0&&(!Number.isInteger(n.processedWidth)||n.processedWidth<=0))throw new TypeError("options.video.processedWidth, when provided, must be a positive integer.");if(n?.processedHeight!==void 0&&(!Number.isInteger(n.processedHeight)||n.processedHeight<=0))throw new TypeError("options.video.processedHeight, when provided, must be a positive integer.");if(n?.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(n.hardwareAcceleration))throw new TypeError("options.video.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(n?.group!==void 0&&!(n.group instanceof Le||Array.isArray(n.group)&&n.group.every(t=>t instanceof Le)))throw new TypeError("options.video.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.")},_o=n=>{if(!n||typeof n!="object")throw new TypeError("options.audio, when provided, must be an object.");if(n?.discard!==void 0&&typeof n.discard!="boolean")throw new TypeError("options.audio.discard, when provided, must be a boolean.");if(n?.forceTranscode!==void 0&&typeof n.forceTranscode!="boolean")throw new TypeError("options.audio.forceTranscode, when provided, must be a boolean.");if(n?.codec!==void 0&&!se.includes(n.codec))throw new TypeError(`options.audio.codec, when provided, must be one of: ${se.join(", ")}.`);if(n?.bitrate!==void 0&&!(n.bitrate instanceof xe)&&(!Number.isInteger(n.bitrate)||n.bitrate<=0))throw new TypeError("options.audio.bitrate, when provided, must be a positive integer or a quality.");if(n?.numberOfChannels!==void 0&&(!Number.isInteger(n.numberOfChannels)||n.numberOfChannels<=0))throw new TypeError("options.audio.numberOfChannels, when provided, must be a positive integer.");if(n?.sampleRate!==void 0&&(!Number.isInteger(n.sampleRate)||n.sampleRate<=0))throw new TypeError("options.audio.sampleRate, when provided, must be a positive integer.");if(n?.sampleFormat!==void 0&&!["u8","s16","s32","f32"].includes(n.sampleFormat))throw new TypeError("options.audio.sampleFormat, when provided, must be one of: u8, s16, s32, f32.");if(n?.process!==void 0&&typeof n.process!="function")throw new TypeError("options.audio.process, when provided, must be a function.");if(n?.processedNumberOfChannels!==void 0&&(!Number.isInteger(n.processedNumberOfChannels)||n.processedNumberOfChannels<=0))throw new TypeError("options.audio.processedNumberOfChannels, when provided, must be a positive integer.");if(n?.processedSampleRate!==void 0&&(!Number.isInteger(n.processedSampleRate)||n.processedSampleRate<=0))throw new TypeError("options.audio.processedSampleRate, when provided, must be a positive integer.");if(n?.group!==void 0&&!(n.group instanceof Le||Array.isArray(n.group)&&n.group.every(t=>t instanceof Le)))throw new TypeError("options.audio.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.")},du=2,mu=48e3,Ro=class n{constructor(t){this._addedCounts={video:0,audio:0,subtitle:0};this._totalTrackCount=0;this._nextOutputTrackId=0;this._outputTrackIds=[];this._outputOwnTrackGroups=[];this._trackPromises=[];this._executed=!1;this._synchronizer=new fu;this._totalDuration=null;this._maxTimestamps=new Map;this._canceled=!1;this.onProgress=void 0;this._computeProgress=!1;this._lastProgress=0;this.isValid=!1;this.utilizedTracks=[];this.discardedTracks=[];if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.input instanceof xr))throw new TypeError("options.input must be an Input.");if(!(t.output instanceof sr))throw new TypeError("options.output must be an Output.");if(t.tracks!==void 0&&t.tracks!=="all"&&t.tracks!=="primary")throw new TypeError("options.tracks, when provided, must be either 'all' or 'primary'.");if(t.output._tracks.length>0||Object.keys(t.output._metadataTags).length>0||t.output.state!=="pending")throw new TypeError("options.output must be fresh: no tracks or metadata tags added and not started.");if(t.video!==void 0&&typeof t.video!="function")if(Array.isArray(t.video))for(let i of t.video)vo(i);else vo(t.video);if(t.audio!==void 0&&typeof t.audio!="function")if(Array.isArray(t.audio))for(let i of t.audio)_o(i);else _o(t.audio);if(t.trim!==void 0&&(!t.trim||typeof t.trim!="object"))throw new TypeError("options.trim, when provided, must be an object.");if(t.trim?.start!==void 0&&!Number.isFinite(t.trim.start))throw new TypeError("options.trim.start, when provided, must be a finite number.");if(t.trim?.end!==void 0&&!Number.isFinite(t.trim.end))throw new TypeError("options.trim.end, when provided, must be a finite number.");if(t.trim?.start!==void 0&&t.trim.end!==void 0&&t.trim.start>=t.trim.end)throw new TypeError("options.trim.start must be less than options.trim.end.");if(t.tags!==void 0&&(typeof t.tags!="object"||!t.tags)&&typeof t.tags!="function")throw new TypeError("options.tags, when provided, must be an object or a function.");if(typeof t.tags=="object"&&ln(t.tags),t.showWarnings!==void 0&&typeof t.showWarnings!="boolean")throw new TypeError("options.showWarnings, when provided, must be a boolean.");this._options=t,this.input=t.input,this.output=t.output;let{promise:e,resolve:r}=J();this._started=e,this._start=r}static async init(t){let e=new n(t);return await e._init(),e}async _init(){let t=await this.input.getFormat(),e,r=this._options.tracks;if(r===void 0&&(r=t.name.includes("(HLS)")?"primary":"all"),r==="all")e=await this.input.getTracks();else if(r==="primary"){let f=await this.input.getPrimaryVideoTrack(),h=await this.input.getPrimaryAudioTrack();e=[f,h].filter(b=>b!==null)}else ae(r),p(!1);let i=this.output.format.getSupportedTrackCounts(),a=1,s=1,o=[],c=[];for(let f of e){let h;if(f.isVideoTrack())if(this._options.video)if(typeof this._options.video=="function"){let y=await this._options.video(f,a)??{};if(Array.isArray(y))for(let k of y)vo(k);else vo(y);h=Array.isArray(y)?y:[y],a++}else h=Array.isArray(this._options.video)?this._options.video:[this._options.video];else h=[{}];else if(f.isAudioTrack())if(this._options.audio)if(typeof this._options.audio=="function"){let y=await this._options.audio(f,s)??{};if(Array.isArray(y))for(let k of y)_o(k);else _o(y);h=Array.isArray(y)?y:[y],s++}else h=Array.isArray(this._options.audio)?this._options.audio:[this._options.audio];else h=[{}];else p(!1);let b=h.filter(y=>y.discard);for(let y of b)this.discardedTracks.push({track:f,reason:"discarded_by_user",trackOptions:y});if(h.length===b.length){h.length===0&&this.discardedTracks.push({track:f,reason:"discarded_by_user",trackOptions:{}});continue}let g=h.filter(y=>!y.discard);o.push(f),c.push(g)}this._options.trim?.start!==void 0?this._startTimestamp=this._options.trim.start:this._startTimestamp=Math.max(await this.input.getFirstTimestamp(o),0),this._endTimestamp=Math.max(this._options.trim?.end??1/0,this._startTimestamp);for(let f=0;f=i.total.min&&this._addedCounts.video>=i.video.min&&this._addedCounts.audio>=i.audio.min&&this._addedCounts.subtitle>=i.subtitle.min,this._options.showWarnings??!0){let f=[],h=this.discardedTracks.filter(b=>b.reason!=="discarded_by_user");h.length>0&&f.push("Some tracks had to be discarded from the conversion:",h),this.isValid||(f.length>0&&f.push(` `),f.push(this._getInvalidityExplanation().join(""))),f.length>0&&console.warn(...f)}}_getInvalidityExplanation(){let t=[];if(this.discardedTracks.length===0)t.push("Due to missing tracks, this conversion cannot be executed.");else{let e=this.discardedTracks.every(r=>r.reason==="discarded_by_user"||r.reason==="no_encodable_target_codec")&&this.discardedTracks.some(r=>r.reason==="no_encodable_target_codec");if(t.push("Due to discarded tracks, this conversion cannot be executed."),e){let r=this.discardedTracks.flatMap(a=>a.reason==="discarded_by_user"?[]:a.track.type==="video"?this.output.format.getSupportedVideoCodecs():a.track.type==="audio"?this.output.format.getSupportedAudioCodecs():this.output.format.getSupportedSubtitleCodecs()),i=[...new Set(r)];i.length===1?t.push(` Tracks were discarded because your environment is not able to encode '${i[0]}'.`):t.push(` Tracks were discarded because your environment is not able to encode any of the following codecs: ${i.map(a=>`'${a}'`).join(", ")}.`),i.includes("mp3")&&t.push(` The @mediabunny/mp3-encoder extension package provides support for encoding MP3.`),i.includes("aac")&&t.push(` The @mediabunny/aac-encoder extension package provides support for encoding AAC.`),(i.includes("ac3")||i.includes("eac3"))&&t.push(` The @mediabunny/ac3 extension package provides support for encoding and decoding AC-3/E-AC-3.`),i.includes("flac")&&t.push(` The @mediabunny/flac-encoder extension package provides support for encoding FLAC.`)}else t.push(` Check the discardedTracks field for more info.`)}return t}async execute(){if(!this.isValid)throw new Error(`Cannot execute this conversion because its output configuration is invalid. Make sure to always check the isValid field before executing a conversion. `+this._getInvalidityExplanation().join(""));if(this._executed)throw new Error("Conversion cannot be executed twice.");if(this._executed=!0,this.onProgress){let e=[...new Set(this.utilizedTracks)].map(async i=>await i.isLive()?1/0:await i.getDurationFromMetadata()??await i.computeDuration()),r=Math.max(0,...await Promise.all(e));this._computeProgress=!0,this._totalDuration=Math.min(r-this._startTimestamp,this._endTimestamp-this._startTimestamp);for(let i of this._outputTrackIds)this._maxTimestamps.set(i,0);this.onProgress?.(0,0)}await this.output.start(),this._start();try{await Promise.all(this._trackPromises)}catch(t){throw this._canceled||this.cancel(),t}if(this._canceled)throw new ua;if(await this.output.finalize(),this._computeProgress){let t=Math.min(...this._maxTimestamps.values());this.onProgress?.(1,t)}}async cancel(){if(!(this.output.state==="finalizing"||this.output.state==="finalized")){if(this._canceled){console.warn("Conversion already canceled.");return}this._canceled=!0,await this.output.cancel()}}async _processVideoTrack(t,e,r){let i=await t.getCodec();if(!i){this.discardedTracks.push({track:t,reason:"unknown_source_codec",trackOptions:e});return}let a,s=Tt(await t.getRotation()+(e.rotate??0)),o=s,c=this.output.format.supportsVideoRotationMetadata&&(e.allowRotationMetadata??!0),u=await t.getSquarePixelWidth(),l=await t.getSquarePixelHeight(),[m,d]=s%180===0?[u,l]:[l,u],f=e.crop;f&&(f=ri(f,m,d));let[h,b]=f?[f.width,f.height]:[m,d],g=h,y=b,k=g/y;e.width!==void 0&&e.height===void 0?(g=Pt(e.width),y=Pt(Math.round(g/k))):e.width===void 0&&e.height!==void 0?(y=Pt(e.height),g=Pt(Math.round(y*k))):e.width!==void 0&&e.height!==void 0&&(g=Pt(e.width),y=Pt(e.height));let T=await t.getFirstTimestamp(),w=this.output.format.getSupportedVideoCodecs(),S=!!e.forceTranscode||Tz===e.codec));let I=e.bitrate??Kn,F=await Xs(w,{width:e.process&&e.processedWidth?e.processedWidth:g,height:e.process&&e.processedHeight?e.processedHeight:y,bitrate:I});if(!F){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec",trackOptions:e});return}let v={codec:F,bitrate:I,keyFrameInterval:e.keyFrameInterval,sizeChangeBehavior:e.fit??"passThrough",alpha:x,hardwareAcceleration:e.hardwareAcceleration},E=new di(v);a=E;let D=g!==h||y!==b||s!==0&&(!c||e.process!==void 0)||!!f||u!==await t.getCodedWidth()||l!==await t.getCodedHeight();if(!D){let z=new sr({format:new hi,target:new Or}),V=new di(v);z.addVideoTrack(V),await z.start();let Z=await new Ir(t).getSample(T);if(Z)try{await V.add(Z),Z.close(),await z.finalize()}catch(oe){console.info("Error when probing encoder support. Falling back to rerender path.",oe),D=!0,z.cancel()}else await z.cancel()}D?(o=0,this._trackPromises.push((async()=>{await this._started;let V=new Xi(t,{width:g,height:y,fit:e.fit??"fill",rotation:s,crop:e.crop,poolSize:1,alpha:x==="keep"}).canvases(this._startTimestamp,this._endTimestamp),L=e.frameRate,Z=null,oe=null,Vt=null,Oe=async We=>{p(Z),p(L!==void 0);let Qe=Math.round((We-oe)*L);for(let bi=1;bi{await this._started;let z=new Ir(t),V=e.frameRate,L=null,Z=null,oe=null,Vt=async Oe=>{p(L),p(V!==void 0);let We=Math.round((Oe-Z)*V);for(let Qe=1;Qe{await this._started;let I=new bt(t),v={decoderConfig:await t.getDecoderConfig()??void 0};for await(let E of I.packets(void 0,void 0,{verifyKeyPackets:!0})){if(this._canceled)return;if(E.timestamp>=this._endTimestamp)break;let D=E.clone({timestamp:E.timestamp-this._startTimestamp,sideData:x==="discard"?{}:E.sideData});p(D.timestamp>=0),this._reportProgress(r,D.timestamp+D.duration),await C.add(D,v),this._synchronizer.shouldWait(r,D.timestamp)&&await this._synchronizer.wait(D.timestamp)}C.close(),this._synchronizer.closeTrack(r)})())}let P=null;e.group||(P=new Le);let A=await t.getLanguageCode();this.output.addVideoTrack(a,{frameRate:e.frameRate,languageCode:Wt(A)?A:void 0,name:await t.getName()??void 0,disposition:await t.getDisposition(),rotation:o,group:P??e.group}),this._addedCounts.video++,this._totalTrackCount++,this.utilizedTracks.push(t),this._outputTrackIds.push(r),this._outputOwnTrackGroups.push(P)}async _registerVideoSample(t,e,r,i){if(this._canceled)return;this._reportProgress(e,i.timestamp+i.duration);let a;if(!t.process)a=[i];else{let s=t.process(i);s instanceof Promise&&(s=await s),Array.isArray(s)||(s=s===null?[]:[s]),a=s.map(o=>o instanceof me?o:typeof VideoFrame<"u"&&o instanceof VideoFrame?new me(o):new me(o,{timestamp:i.timestamp,duration:i.duration}))}try{for(let s of a){if(this._canceled)break;await r.add(s),this._synchronizer.shouldWait(e,s.timestamp)&&await this._synchronizer.wait(s.timestamp)}}finally{for(let s of a)s!==i&&s.close()}}async _processAudioTrack(t,e,r){let i=await t.getCodec();if(!i){this.discardedTracks.push({track:t,reason:"unknown_source_codec",trackOptions:e});return}let a,s=await t.getNumberOfChannels(),o=await t.getSampleRate(),c=await t.getFirstTimestamp(),u=e.numberOfChannels??s,l=e.sampleRate??o,m=u!==s||l!==o||cthis._startTimestamp&&!this.output.format.supportsTimestampedMediaData,d=this.output.format.getSupportedAudioCodecs();if(!e.forceTranscode&&!e.bitrate&&!m&&d.includes(i)&&(!e.codec||e.codec===i)&&!e.process&&e.sampleFormat===void 0){let b=new Vr(i);a=b,this._trackPromises.push((async()=>{await this._started;let g=new bt(t),k={decoderConfig:await t.getDecoderConfig()??void 0};for await(let T of g.packets()){if(this._canceled)return;if(T.timestamp>=this._endTimestamp)break;let w=T.clone({timestamp:T.timestamp-this._startTimestamp});p(w.timestamp>=0),this._reportProgress(r,w.timestamp+w.duration),await b.add(w,k),this._synchronizer.shouldWait(r,w.timestamp)&&await this._synchronizer.wait(w.timestamp)}b.close(),this._synchronizer.closeTrack(r)})())}else{if(!await t.canDecode()){this.discardedTracks.push({track:t,reason:"undecodable_source_codec",trackOptions:e});return}let g=null;e.codec&&(d=d.filter(T=>T===e.codec));let y=e.bitrate??Kn,k=await Ki(d,{numberOfChannels:e.process&&e.processedNumberOfChannels?e.processedNumberOfChannels:u,sampleRate:e.process&&e.processedSampleRate?e.processedSampleRate:l,bitrate:y});if(!k.some(T=>st.includes(T))&&d.some(T=>st.includes(T))&&(u!==du||l!==mu)){let w=(await Ki(d,{numberOfChannels:du,sampleRate:mu,bitrate:y})).find(S=>st.includes(S));w&&(m=!0,g=w,u=du,l=mu)}else g=k[0]??null;if(g===null){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec",trackOptions:e});return}if(m)a=this._resampleAudio(t,e,r,g,u,l,y);else{let T=new mi({codec:g,bitrate:y});a=T,this._trackPromises.push((async()=>{await this._started;let w=new Er(t);for await(let S of w.samples(void 0,this._endTimestamp)){if(this._canceled){S.close();return}S.setTimestamp(S.timestamp-this._startTimestamp),await this._registerAudioSample(e,r,T,S),S.close()}T.close(),this._synchronizer.closeTrack(r)})())}}let f=null;e.group||(f=new Le);let h=await t.getLanguageCode();this.output.addAudioTrack(a,{languageCode:Wt(h)?h:void 0,name:await t.getName()??void 0,disposition:await t.getDisposition(),group:f??e.group}),this._addedCounts.audio++,this._totalTrackCount++,this.utilizedTracks.push(t),this._outputTrackIds.push(r),this._outputOwnTrackGroups.push(f)}async _registerAudioSample(t,e,r,i){if(this._canceled)return;let a=i;t.sampleFormat!==void 0&&Hs(a.format)!==t.sampleFormat&&(a=qs(a,t.sampleFormat)),this._reportProgress(e,a.timestamp+a.duration);let s;if(!t.process)s=[a];else{let o=t.process(a);if(o instanceof Promise&&(o=await o),Array.isArray(o)||(o=o===null?[]:[o]),!o.every(c=>c instanceof Te))throw new TypeError("The audio process function must return an AudioSample, null, or an array of AudioSamples.");s=o}try{for(let o of s){if(this._canceled)break;await r.add(o),this._synchronizer.shouldWait(e,o.timestamp)&&await this._synchronizer.wait(o.timestamp)}}finally{a!==i&&a.close();for(let o of s)o!==i&&o.close()}}_resampleAudio(t,e,r,i,a,s,o){let c=new mi({codec:i,bitrate:o});return this._trackPromises.push((async()=>{await this._started;let u=new nn({targetNumberOfChannels:a,targetSampleRate:s,startTime:this._startTimestamp,endTime:this._endTimestamp,onSample:async d=>{p(d.timestamp>=this._startTimestamp),d.setTimestamp(d.timestamp-this._startTimestamp),await this._registerAudioSample(e,r,c,d),d.close()}}),m=new Er(t).samples(this._startTimestamp,this._endTimestamp);for await(let d of m){if(this._canceled){d.close();return}await u.add(d),d.close()}await u.finalize(),c.close(),this._synchronizer.closeTrack(r)})()),c}_reportProgress(t,e){if(!this._computeProgress)return;p(this._totalDuration!==null),this._maxTimestamps.set(t,Math.max(e,this._maxTimestamps.get(t)));let r=Math.min(...this._maxTimestamps.values()),i=de(r/this._totalDuration,0,1);i!==this._lastProgress&&(this._lastProgress=i,this.onProgress?.(i,r))}},ua=class extends Error{constructor(t="Conversion has been canceled."){super(t),this.name="ConversionCanceledError"}},am=5,fu=class{constructor(){this.maxTimestamps=new Map;this.resolvers=[]}computeMinAndMaybeResolve(){let t=1/0;for(let[,e]of this.maxTimestamps)t=Math.min(t,e);for(let e=0;e=am}wait(t){let{promise:e,resolve:r}=J();return this.resolvers.push({timestamp:t,resolve:r}),e}closeTrack(t){this.maxTimestamps.delete(t),this.computeMinAndMaybeResolve()}};var sm=Symbol.for("mediabunny loaded");globalThis[sm]&&console.error(`[WARNING] Mediabunny was loaded twice. This will likely cause Mediabunny not to work correctly. Check if multiple dependencies are importing different versions of Mediabunny, or if something is being bundled incorrectly.`);globalThis[sm]=!0;return pm(Rp);})(); if (typeof module === "object" && typeof module.exports === "object") Object.assign(module.exports, Mediabunny)