/*! * 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 km=Object.create;var ha=Object.defineProperty;var Tm=Object.getOwnPropertyDescriptor;var wm=Object.getOwnPropertyNames;var Sm=Object.getPrototypeOf,Am=Object.prototype.hasOwnProperty;var Tu=(i,t)=>(t=Symbol[i])?t:Symbol.for("Symbol."+i),wu=i=>{throw TypeError(i)};var xm=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports),Pm=(i,t)=>{for(var e in t)ha(i,e,{get:t[e],enumerable:!0})},Su=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of wm(t))!Am.call(i,n)&&n!==e&&ha(i,n,{get:()=>t[n],enumerable:!(r=Tm(t,n))||r.enumerable});return i};var Au=(i,t,e)=>(e=i!=null?km(Sm(i)):{},Su(t||!i||!i.__esModule?ha(e,"default",{value:i,enumerable:!0}):e,i)),Cm=i=>Su(ha({},"__esModule",{value:!0}),i);var on=(i,t,e)=>{if(t!=null){typeof t!="object"&&typeof t!="function"&&wu("Object expected");var r,n;e&&(r=t[Tu("asyncDispose")]),r===void 0&&(r=t[Tu("dispose")],e&&(n=r)),typeof r!="function"&&wu("Object not disposable"),n&&(r=function(){try{n.call(this)}catch(a){return Promise.reject(a)}}),i.push([e,r,t])}else e&&i.push([e]);return t},cn=(i,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},n=s=>t=e?new r(s,t,"An error was suppressed during disposal"):(e=!0,s),a=s=>{for(;s=i.pop();)try{var o=s[1]&&s[1].call(s[2]);if(s[0])return Promise.resolve(o).then(a,c=>(n(c),a()))}catch(c){n(c)}if(e)throw t};return a()};var Ec=xm(()=>{});var $p={};Pm($p,{ADTS:()=>zs,ALL_FORMATS:()=>nd,ALL_TRACK_TYPES:()=>gu,AUDIO_CODECS:()=>oe,AdtsInputFormat:()=>Hn,AdtsOutputFormat:()=>_o,AppendOnlyStreamTarget:()=>co,AttachedFile:()=>Ht,AudioBufferSink:()=>eo,AudioBufferSource:()=>So,AudioSample:()=>ke,AudioSampleResource:()=>ir,AudioSampleSink:()=>si,AudioSampleSource:()=>an,AudioSource:()=>Ot,BaseMediaSampleSink:()=>$i,BlobSource:()=>Is,BufferSource:()=>Cs,BufferTarget:()=>Or,CanvasSink:()=>Js,CanvasSource:()=>To,CmafOutputFormat:()=>ci,ConcurrentRunner:()=>ba,Conversion:()=>Do,ConversionCanceledError:()=>pa,CustomAudioDecoder:()=>ta,CustomAudioEncoder:()=>ia,CustomPathedSource:()=>Li,CustomSource:()=>Wi,CustomVideoDecoder:()=>ea,CustomVideoEncoder:()=>ra,EncodedAudioPacketSource:()=>Ur,EncodedPacket:()=>j,EncodedPacketSink:()=>yt,EncodedVideoPacketSource:()=>Vr,EventEmitter:()=>Ue,FLAC:()=>Uc,FilePathSource:()=>vs,FilePathTarget:()=>uo,FlacInputFormat:()=>Wn,FlacOutputFormat:()=>Ro,HLS:()=>Ls,HLS_FORMATS:()=>ad,HlsInputFormat:()=>ri,HlsOutputFormat:()=>Mo,Input:()=>Pr,InputAudioTrack:()=>vt,InputDisposedError:()=>ye,InputFormat:()=>De,InputTrack:()=>_r,InputVideoTrack:()=>Et,IsobmffInputFormat:()=>qi,IsobmffOutputFormat:()=>hi,LogLevel:()=>jo,Logging:()=>V,MATROSKA:()=>Bc,MP3:()=>Us,MP4:()=>Ds,MPEG_TS:()=>Ns,MatroskaInputFormat:()=>Ki,MediaSource:()=>mi,MediaStreamAudioTrackSource:()=>Ao,MediaStreamVideoTrackSource:()=>wo,MkvOutputFormat:()=>sn,MovOutputFormat:()=>ui,Mp3InputFormat:()=>zn,Mp3OutputFormat:()=>Io,Mp4InputFormat:()=>Dn,Mp4OutputFormat:()=>gi,MpegTsInputFormat:()=>qn,MpegTsOutputFormat:()=>Fo,NON_PCM_AUDIO_CODECS:()=>ot,NullTarget:()=>Dr,OGG:()=>Vc,OggInputFormat:()=>Ln,OggOutputFormat:()=>vo,Output:()=>sr,OutputAudioTrack:()=>ma,OutputFormat:()=>ve,OutputSubtitleTrack:()=>fa,OutputTrack:()=>bi,OutputTrackGroup:()=>Ge,OutputVideoTrack:()=>da,PCM_AUDIO_CODECS:()=>re,PathedSource:()=>Oe,PathedTarget:()=>Ke,QTFF:()=>Vs,QUALITY_HIGH:()=>$n,QUALITY_LOW:()=>Sd,QUALITY_MEDIUM:()=>Ad,QUALITY_VERY_HIGH:()=>xd,QUALITY_VERY_LOW:()=>wd,Quality:()=>Ae,QuickTimeInputFormat:()=>Vn,RangedSource:()=>Bn,RangedTarget:()=>ca,ReadableStreamSource:()=>Hi,RichImageData:()=>Qe,SUBTITLE_CODECS:()=>Be,Source:()=>Ee,SourceRef:()=>Ar,StreamSource:()=>ed,StreamTarget:()=>nn,SubtitleSource:()=>pi,Target:()=>xe,TextSubtitleSource:()=>xo,UnsupportedInputFormatError:()=>Zi,UrlSource:()=>Es,VIDEO_CODECS:()=>ne,VIDEO_SAMPLE_PIXEL_FORMATS:()=>Xn,VideoSample:()=>Ve,VideoSampleColorSpace:()=>ni,VideoSampleResource:()=>bt,VideoSampleSink:()=>vr,VideoSampleSource:()=>fi,VideoSource:()=>Bt,WAVE:()=>Dc,WEBM:()=>Oc,WavOutputFormat:()=>Eo,WaveInputFormat:()=>Nn,WebMInputFormat:()=>Un,WebMOutputFormat:()=>li,asc:()=>Vd,canDecode:()=>od,canDecodeAudio:()=>Ks,canDecodeVideo:()=>qs,canEncode:()=>Pd,canEncodeAudio:()=>Zn,canEncodeSubtitles:()=>Jn,canEncodeVideo:()=>Yn,desc:()=>aa,getDecodableAudioCodecs:()=>Nc,getDecodableCodecs:()=>cd,getDecodableVideoCodecs:()=>zc,getEncodableAudioCodecs:()=>Qi,getEncodableCodecs:()=>Cd,getEncodableSubtitleCodecs:()=>Kc,getEncodableVideoCodecs:()=>qc,getFirstEncodableAudioCodec:()=>Id,getFirstEncodableSubtitleCodec:()=>Ed,getFirstEncodableVideoCodec:()=>Zs,prefer:()=>Fr,registerDecoder:()=>vd,registerEncoder:()=>_d,registerVideoSampleTransformer:()=>pd});function h(i){if(!i)throw new Error("Assertion failed.")}var tt=i=>{let t=(i%360+360)%360;if(t===0||t===90||t===180||t===270)return t;throw new Error(`Invalid rotation ${i}.`)},Y=i=>i&&i[i.length-1],Dt=i=>i>=0&&i<2**32,M=i=>{let t=0;for(;i.readBits(1)===0&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{let t=M(i);return(t&1)===0?-(t>>1):t+1>>1},Pu=(i,t,e,r)=>{for(let n=t;n>e-n-1<i.constructor===Uint8Array?i:ArrayBuffer.isView(i)?new Uint8Array(i.buffer,i.byteOffset,i.byteLength):new Uint8Array(i),N=i=>i.constructor===DataView?i:ArrayBuffer.isView(i)?new DataView(i.buffer,i.byteOffset,i.byteLength):new DataView(i),me=new TextDecoder,$=new TextEncoder,rt=i=>{for(let t=0;t255)return!1;return!0},Lo=i=>Object.fromEntries(Object.entries(i).map(([t,e])=>[e,t])),it={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},zr=Lo(it),nt={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},Nr=Lo(nt),at={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Lr=Lo(at),ya=i=>!!i&&!!i.primaries&&!!i.transfer&&!!i.matrix&&i.fullRange!==void 0,Vt=i=>i instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&i instanceof SharedArrayBuffer||ArrayBuffer.isView(i),_e=class{constructor(){this.currentPromise=Promise.resolve();this.pending=0}async acquire(){let t,e=new Promise(n=>{let a=!1;t=()=>{a||(n(),this.pending--,a=!0)}}),r=this.currentPromise;return this.currentPromise=e,this.pending++,await r,t}},Cu=/^[0-9a-fA-F]+$/,cr=i=>[...i].map(t=>t.toString(16).padStart(2,"0")).join(""),Iu=i=>{h(i.length%2===0);let t=new Uint8Array(i.length/2);for(let e=0;e(i=i>>1&1431655765|(i&1431655765)<<1,i=i>>2&858993459|(i&858993459)<<2,i=i>>4&252645135|(i&252645135)<<4,i=i>>8&16711935|(i&16711935)<<8,i=i>>16&65535|(i&65535)<<16,i>>>0),Ut=(i,t,e)=>{let r=0,n=i.length-1,a=-1;for(;r<=n;){let s=r+n>>1,o=e(i[s]);o===t?(a=s,n=s-1):o{let r=0,n=i.length-1,a=-1;for(;r<=n;){let s=r+(n-r+1)/2|0;e(i[s])<=t?(a=s,r=s+1):n=s-1}return a},Ho=(i,t,e)=>{let r=K(i,e(t),e);i.splice(r+1,0,t)},J=()=>{let i,t;return{promise:new Promise((r,n)=>{i=r,t=n}),resolve:i,reject:t}},ki=(i,t)=>{let e=i.indexOf(t);e!==-1&&i.splice(e,1)},qo=(i,t)=>{for(let e=i.length-1;e>=0;e--)if(t(i[e]))return i[e]},ur=(i,t)=>{for(let e=i.length-1;e>=0;e--)if(t(i[e]))return e;return-1},Eu=async function*(i){Symbol.iterator in i?yield*i[Symbol.iterator]():yield*i[Symbol.asyncIterator]()},vu=i=>{if(!(Symbol.iterator in i)&&!(Symbol.asyncIterator in i))throw new TypeError("Argument must be an iterable or async iterable.")},ee=i=>{throw new Error(`Unexpected value: ${i}`)},Wr=(i,t,e)=>{let r=i.getUint8(t),n=i.getUint8(t+1),a=i.getUint8(t+2);return e?r|n<<8|a<<16:r<<16|n<<8|a},_u=(i,t,e)=>Wr(i,t,e)<<8>>8,Hr=(i,t,e,r)=>{e=e>>>0,e=e&16777215,r?(i.setUint8(t,e&255),i.setUint8(t+1,e>>>8&255),i.setUint8(t+2,e>>>16&255)):(i.setUint8(t,e>>>16&255),i.setUint8(t+1,e>>>8&255),i.setUint8(t+2,e&255))},Ru=(i,t,e,r)=>{e=ce(e,-8388608,8388607),e<0&&(e=e+16777216&16777215),Hr(i,t,e,r)},Fu=(i,t,e,r)=>{r?(i.setUint32(t+0,e,!0),i.setInt32(t+4,Math.floor(e/2**32),!0)):(i.setInt32(t+0,Math.floor(e/2**32),!0),i.setUint32(t+4,e,!0))},ln=(i,t)=>({async next(){let e=await i.next();return e.done?{value:void 0,done:!0}:{value:t(e.value),done:!1}},return(){return i.return()},throw(e){return i.throw(e)},[Symbol.asyncIterator](){return this}}),ce=(i,t,e)=>Math.max(t,Math.min(e,i)),te="und",zt=i=>{let t=Math.round(i);return Math.abs(i/t-1)<10*Number.EPSILON?t:i},dn=(i,t)=>Math.round(i/t)*t,St=(i,t)=>Math.round(i*t)/t,ka=(i,t)=>Math.floor(i/t)*t,Ko=(i,t)=>Math.floor(i*t)/t,Mu=i=>{let t=0;for(;i;)t++,i>>=1;return t},Im=/^[a-z]{3}$/,Nt=i=>Im.test(i),At=1e6*(1+Number.EPSILON),Bu=(i,t)=>{let e={...i,...t};if(i.headers||t.headers){let r=i.headers?ga(i.headers):{},n=t.headers?ga(t.headers):{},a={...r};Object.entries(n).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},ga=i=>{if(i instanceof Headers){let t={};return i.forEach((e,r)=>{t[r]=e}),t}if(Array.isArray(i)){let t={};return i.forEach(([e,r])=>{t[e]=r}),t}return i},Ou=async(i,t,e,r,n)=>{let a=0;for(;;)try{return await i(t,e)}catch(s){if(n())throw s;a++;let o=r(a,s,t);if(o===null)throw s;if(V._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 jr(1e3*o),n())throw s}},Du=(i,t)=>{let e=i<0?-1:1;i=Math.abs(i);let r=0,n=1,a=1,s=0,o=i;for(;;){let c=Math.floor(o),u=c*a+r,l=c*s+n;if(l>t)return{num:e*a,den:s};if(r=a,n=s,a=u,s=l,o=1/(o-c),!isFinite(o))break}return{num:e*a,den:s}},or=class{constructor(){this.currentPromise=Promise.resolve()}call(t){return this.currentPromise=this.currentPromise.then(t)}},Vo=null,lr=()=>Vo!==null?Vo:Vo=!!(typeof navigator<"u"&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent))),Uo=null,qr=()=>Uo!==null?Uo:Uo=typeof navigator<"u"&&navigator.userAgent?.includes("Firefox"),zo=null,mn=()=>zo!==null?zo:zo=!!(typeof navigator<"u"&&(navigator.vendor?.includes("Google Inc")||/Chrome/.test(navigator.userAgent))),No=null,Vu=()=>{if(No!==null)return No;if(typeof navigator>"u")return null;let i=/\bChrome\/(\d+)/.exec(navigator.userAgent);return i?No=Number(i[1]):null},Kr=(i,t)=>i!==-1?i:t,Ta=(i,t,e,r)=>i<=r&&e<=t,st=function*(i){for(let t in i){let e=i[t];e!==void 0&&(yield{key:t,value:e})}},Uu=i=>{switch(i.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}},Gr=i=>{let t=atob(i),e=new Uint8Array(t.length);for(let r=0;r{let t="";for(let e=0;e{if(i.length!==t.length)return!1;for(let e=0;e{Symbol.dispose??=Symbol("Symbol.dispose")},dr=i=>typeof i=="number"&&!Number.isNaN(i),he=(i,t)=>{if(t.includes("://"))return t;if(i.includes("://")){let o=i.indexOf("?");o!==-1&&(i=i.slice(0,o))}let e;if(t.startsWith("/")){let o=i.indexOf("://");if(o===-1)e=t;else{let c=i.indexOf("/",o+3);c===-1?e=i+t:e=i.slice(0,c)+t}}else{let o=i.lastIndexOf("/");o===-1?e=t:e=i.slice(0,o+1)+t}let r="",n=e.indexOf("://");if(n!==-1){let o=e.indexOf("/",n+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("/")},Qr=(i,t)=>{let e=0;for(let r=0;r{let e=-1,r=1/0;for(let n=0;n{let e=-1,r=-1/0;for(let n=0;nr&&(r=a,e=n)}return e},Lt=i=>{h(Number.isInteger(i.num)),h(Number.isInteger(i.den)),h(i.den!==0);let t=Math.abs(i.num),e=Math.abs(i.den);for(;e!==0;){let n=t%e;t=e,e=n}let r=t||1;return{num:i.num/r,den:i.den/r}},Go=(i,t)=>{if(typeof i!="object"||!i)throw new TypeError(`${t} must be an object.`);if(!Number.isInteger(i.left)||i.left<0)throw new TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(i.top)||i.top<0)throw new TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(i.width)||i.width<0)throw new TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(i.height)||i.height<0)throw new TypeError(`${t}.height must be a non-negative integer.`)},un,Em=1,xu=new Map,Qo=new Map,Lu=()=>typeof window>"u",vm=()=>{let i=new Map,t=new Map;self.onmessage=e=>{let r=e.data;switch(r.type){case"set-timeout":{let n=setTimeout(()=>{i.delete(r.timerId),self.postMessage({type:"fire",timerId:r.timerId})},r.delay);i.set(r.timerId,n)}break;case"set-interval":{let n=setInterval(()=>{self.postMessage({type:"fire",timerId:r.timerId})},r.delay);t.set(r.timerId,n)}break;case"clear-timeout":{let n=i.get(r.timerId);n!==void 0&&(clearTimeout(n),i.delete(r.timerId))}break;case"clear-interval":{let n=t.get(r.timerId);n!==void 0&&(clearInterval(n),t.delete(r.timerId))}break}}},Wu=()=>{if(un)return un;let i=`(${vm.toString()})();`,t=URL.createObjectURL(new Blob([i],{type:"text/javascript"}));return un=new Worker(t),URL.revokeObjectURL(t),un.onmessage=e=>{let r=e.data,n=xu.get(r.timerId);if(n){xu.delete(r.timerId),n();return}let a=Qo.get(r.timerId);a&&a()},un};var Hu=(i,t)=>{if(Lu())return{id:setInterval(i,t)};let e=Em++;return Qo.set(e,()=>{i()}),Wu().postMessage({type:"set-interval",timerId:e,delay:t}),{id:e}},qu=i=>{if(Lu()){clearInterval(i.id);return}h(typeof i.id=="number"),Qo.delete(i.id),Wu().postMessage({type:"clear-interval",timerId:i.id})},jr=i=>new Promise(t=>setTimeout(t,i));var Wt=i=>Array.isArray(i)?i:[i],Ue=class{constructor(){this._listeners=new Map}on(t,e,r){this._listeners.has(t)||this._listeners.set(t,new Set);let n={fn:e,once:r?.once??!1};return this._listeners.get(t).add(n),()=>{this._listeners.get(t)?.delete(n)}}_emit(...t){let[e,r]=t,n=this._listeners.get(e);if(n)for(let a of n){try{a.fn(r)}catch(s){console.error(s)}a.once&&n.delete(a)}}},Xr=i=>Math.ceil(i/2)*2,ba=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(()=>ki(this._queue,e)).catch(()=>this._errored=!0)}async flush(){await Promise.all(this._queue)}},Sa=i=>i!==null&&typeof i=="object"&&Object.getPrototypeOf(i)===Object.prototype&&Object.values(i).every(t=>typeof t=="string");var jo=(n=>(n[n.Silent=0]="Silent",n[n.Errors=1]="Errors",n[n.Warnings=2]="Warnings",n[n.Info=3]="Info",n))(jo||{}),ze=class ze{constructor(){}static get level(){return ze._level}static set level(t){if(t!==0&&t!==1&&t!==2&&t!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");ze._level=t}static get _emitter(){return ze._emitterInstance??=new Ue}static on(t,e,r){return ze._emitter.on(t,e,r)}static _error(...t){ze._emitter._emit("error",t),ze._level>=1&&console.error(...t)}static _warn(...t){ze._emitter._emit("warn",t),ze._level>=2&&console.warn(...t)}static _info(...t){ze._emitter._emit("info",t),ze._level>=3&&console.info(...t)}};ze._level=3,ze._emitterInstance=null;var V=ze;var Qe=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.")}},Ht=class{constructor(t,e,r,n){this.data=t;this.mimeType=e;this.name=r;this.description=n;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(n!==void 0&&typeof n!="string")throw new TypeError("description, when provided, must be a string.")}},fn=i=>{if(!i||typeof i!="object")throw new TypeError("tags must be an object.");if(i.title!==void 0&&typeof i.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(i.description!==void 0&&typeof i.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(i.artist!==void 0&&typeof i.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(i.album!==void 0&&typeof i.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(i.albumArtist!==void 0&&typeof i.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(i.trackNumber!==void 0&&(!Number.isInteger(i.trackNumber)||i.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(i.tracksTotal!==void 0&&(!Number.isInteger(i.tracksTotal)||i.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(i.discNumber!==void 0&&(!Number.isInteger(i.discNumber)||i.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(i.discsTotal!==void 0&&(!Number.isInteger(i.discsTotal)||i.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(i.genre!==void 0&&typeof i.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(i.date!==void 0&&(!(i.date instanceof Date)||Number.isNaN(i.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(i.lyrics!==void 0&&typeof i.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(i.images!==void 0){if(!Array.isArray(i.images))throw new TypeError("tags.images, when provided, must be an array.");for(let t of i.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(i.comment!==void 0&&typeof i.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(i.raw!==void 0){if(!i.raw||typeof i.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(let t of Object.values(i.raw))if(t!==null&&typeof t!="string"&&!(t instanceof Uint8Array)&&!(t instanceof Qe)&&!(t instanceof Ht)&&!Sa(t))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, Record, or null.")}},qt=i=>i.title===void 0&&i.description===void 0&&i.artist===void 0&&i.album===void 0&&i.albumArtist===void 0&&i.trackNumber===void 0&&i.tracksTotal===void 0&&i.discNumber===void 0&&i.discsTotal===void 0&&i.genre===void 0&&i.date===void 0&&i.lyrics===void 0&&(!i.images||i.images.length===0)&&i.comment===void 0&&(i.raw===void 0||Object.keys(i.raw).length===0),we={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1},Ku=i=>{if(!i||typeof i!="object")throw new TypeError("disposition must be an object.");if(i.default!==void 0&&typeof i.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(i.primary!==void 0&&typeof i.primary!="boolean")throw new TypeError("disposition.primary must be a boolean.");if(i.forced!==void 0&&typeof i.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(i.original!==void 0&&typeof i.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(i.commentary!==void 0&&typeof i.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(i.hearingImpaired!==void 0&&typeof i.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(i.visuallyImpaired!==void 0&&typeof i.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};var q=class i{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),n=(e&1<>r;return this.pos++,n}readBits(t){if(t===1)return this.readBit();let e=0;for(let r=0;r>r-n-1<{if(!i||i.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let t=new q(i),e=t.readBits(5);e===31&&(e=32+t.readBits(6));let r=t.readBits(4),n=null;r===15?n=t.readBits(24):r=1&&a<=7&&(s=xt[a]),{objectType:e,frequencyIndex:r,sampleRate:n,channelConfiguration:a,numberOfChannels:s}},Si=i=>{let t=Xe.indexOf(i.sampleRate),e=null;t===-1&&(t=15,e=i.sampleRate);let r=xt.indexOf(i.numberOfChannels);if(r===-1)throw new TypeError(`Unsupported number of channels: ${i.numberOfChannels}`);let n=13;i.objectType>=32&&(n+=6),t===15&&(n+=24);let a=Math.ceil(n/8),s=new Uint8Array(a),o=new q(s);return i.objectType<32?o.writeBits(5,i.objectType):(o.writeBits(5,31),o.writeBits(6,i.objectType-32)),o.writeBits(4,t),t===15&&o.writeBits(24,e),o.writeBits(4,r),s},Aa=i=>{let t=new Uint8Array(7),e=new q(t),{objectType:r,frequencyIndex:n,channelConfiguration:a}=i,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,n),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}},xa=(i,t)=>{i.pos=30,i.writeBits(13,t)};var ne=["avc","hevc","vp9","av1","vp8","prores"],re=["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"],ot=["aac","opus","mp3","vorbis","flac","ac3","eac3"],oe=[...ot,...re],Be=["webvtt"],pn=[{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}],Gu=[{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}],Kt=[{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}],ju=".01.01.01.01.00",Xu=".0.110.01.01.01.0",Gt=["ap4x","ap4h","apch","apcn","apcs","apco"],_m=[{fourCc:"apco",bitrate:45e6,alpha:!1},{fourCc:"apcs",bitrate:102e6,alpha:!1},{fourCc:"apcn",bitrate:147e6,alpha:!1},{fourCc:"apch",bitrate:22e7,alpha:!1},{fourCc:"ap4h",bitrate:33e7,alpha:!0},{fourCc:"ap4x",bitrate:5e8,alpha:!0}],Pa=(i,t,e,r,n)=>{if(i==="avc"){let s=Math.ceil(t/16)*Math.ceil(e/16),o=pn.find(d=>s<=d.maxMacroblocks&&r<=d.maxBitrate)??Y(pn),c=o?o.level:0,u="64".padStart(2,"0"),l="00",m=c.toString(16).padStart(2,"0");return`avc1.${u}${l}${m}`}else if(i==="hevc"){let a="",o="6",c=t*e,u=Gu.find(m=>c<=m.maxPictureSize&&r<=m.maxBitrate)??Y(Gu);return`hev1.${a}1.${o}.${u.tier}${u.level}.B0`}else{if(i==="vp8")return"vp8";if(i==="vp9"){let a="00",s=t*e,o=Kt.find(u=>s<=u.maxPictureSize&&r<=u.maxBitrate)??Y(Kt);return`vp09.${a}.${o.level.toString().padStart(2,"0")}.08`}else if(i==="av1"){let s=t*e,o=Qu.find(l=>s<=l.maxPictureSize&&r<=l.maxBitrate)??Y(Qu);return`av01.0.${o.level.toString().padStart(2,"0")}${o.tier}.08`}else if(i==="prores"){let s=Math.pow(t*e/2073600,.95),o=_m.filter(l=>l.alpha===n),c=o[0].fourCc,u=1/0;for(let{fourCc:l,bitrate:m}of o){let d=Math.abs(m*s-r);d{let t=i.split("."),e=Number(t[1]),r=Number(t[2]),n=Number(t[3]),a=t[4]?Number(t[4]):1;return[1,1,e,2,1,r,3,1,n,4,1,a]},Ca=i=>{let t=i.split("."),n=(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,p=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)+(p<<3)+(b<<2)+g;return[n,c,y,0]},Ai=i=>{let{codec:t,codecDescription:e,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:a,vp9CodecInfo:s,av1CodecInfo:o,proresFormat:c}=i;if(t==="avc"){if(h(i.avcType!==null),n){let u=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${i.avcType}.${cr(u)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${i.avcType}.${cr(e.subarray(1,4))}`}else if(t==="hevc"){let u,l,m,d,f,p;if(a)u=a.generalProfileSpace,l=a.generalProfileIdc,m=Wo(a.generalProfileCompatibilityFlags),d=a.generalTierFlag,f=a.generalLevelIdc,p=[...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 g=N(e),y=g.getUint8(1);u=y>>6&3,l=y&31,m=Wo(g.getUint32(2)),d=y>>5&1,f=g.getUint8(12),p=[];for(let k=0;k<6;k++)p.push(g.getUint8(6+k))}let b="hev1.";for(b+=["","A","B","C"][u]+l,b+=".",b+=m.toString(16).toUpperCase(),b+=".",b+=d===0?"L":"H",b+=f;p.length>0&&p[p.length-1]===0;)p.pop();return p.length>0&&(b+=".",b+=p.map(g=>g.toString(16).toUpperCase()).join(".")),b}else{if(t==="vp8")return"vp8";if(t==="vp9"){if(!s){let k=i.width*i.height,T=Y(Kt).level;for(let w of Kt)if(k<=w.maxPictureSize){T=w.level;break}return`vp09.00.${T.toString().padStart(2,"0")}.08`}let u=s.profile.toString().padStart(2,"0"),l=s.level.toString().padStart(2,"0"),m=s.bitDepth.toString().padStart(2,"0"),d=s.chromaSubsampling.toString().padStart(2,"0"),f=s.colourPrimaries.toString().padStart(2,"0"),p=s.transferCharacteristics.toString().padStart(2,"0"),b=s.matrixCoefficients.toString().padStart(2,"0"),g=s.videoFullRangeFlag.toString().padStart(2,"0"),y=`vp09.${u}.${l}.${m}.${d}`;return y+=`.${f}.${p}.${b}.${g}`,y.endsWith(ju)&&(y=y.slice(0,-ju.length)),y}else if(t==="av1"){if(!o){let w=i.width*i.height,S=Y(Kt).level;for(let P of Kt)if(w<=P.maxPictureSize){S=P.level;break}return`av01.0.${S.toString().padStart(2,"0")}M.08`}let u=o.profile,l=o.level.toString().padStart(2,"0"),m=o.tier?"H":"M",d=o.bitDepth.toString().padStart(2,"0"),f=o.monochrome?"1":"0",p=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),b=r?.primaries?it[r.primaries]:1,g=r?.transfer?nt[r.transfer]:1,y=r?.matrix?at[r.matrix]:1,k=r?.fullRange?1:0,T=`av01.${u}.${l}${m}.${d}`;return T+=`.${f}.${p.toString().padStart(3,"0")}`,T+=`.${b.toString().padStart(2,"0")}`,T+=`.${g.toString().padStart(2,"0")}`,T+=`.${y.toString().padStart(2,"0")}`,T+=`.${k}`,T.endsWith(Xu)&&(T=T.slice(0,-Xu.length)),T}else{if(t==="prores")return c??"apch";t!==null&&ee(t)}}throw new TypeError(`Unhandled codec '${t}'.`)},Ia=(i,t,e)=>{if(i==="aac")return t>=2&&e<=24e3?"mp4a.40.29":e<=24e3?"mp4a.40.5":"mp4a.40.2";if(i==="mp3")return"mp3";if(i==="opus")return"opus";if(i==="vorbis")return"vorbis";if(i==="flac")return"flac";if(i==="ac3")return"ac-3";if(i==="eac3")return"ec-3";if(re.includes(i))return i;throw new TypeError(`Unhandled codec '${i}'.`)},xi=i=>{let{codec:t,codecDescription:e,aacCodecInfo:r}=i;if(t==="aac"){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let n;return r.objectType!==null?n=r.objectType:n=Pt(e).objectType,`mp4a.40.${n}`}}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&&re.includes(t))return t}throw new TypeError(`Unhandled codec '${t}'.`)},Yu=i=>{},Zu=i=>{switch(i.codec){case"flac":{let t=Gr("ZkxhQ4AAACIQABAAAAYtACWtCsRC8AANRBhVFucAcYu5ASE2m1Dxv8tw");return i.sampleRate>=1<<20||i.numberOfChannels>8?!1:(t[18]=i.sampleRate>>>12,t[19]=i.sampleRate>>>4,t[20]=(i.sampleRate&15)<<4|i.numberOfChannels-1<<1,t)}case"vorbis":{let t=Gr("Ah7/AgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMNAAAATGF2ZjU4Ljc2LjEwMAgAAAAMAAAAbGFuZ3VhZ2U9dW5kGQAAAGhhbmRsZXJfbmFtZT1Tb3VuZEhhbmRsZXIWAAAAdmVuZG9yX2lkPVswXVswXVswXVswXSAAAABlbmNvZGVyPUxhdmM1OC4xMzQuMTAwIGxpYnZvcmJpcxAAAABtYWpvcl9icmFuZD1pc29tEQAAAG1pbm9yX3ZlcnNpb249NTEyIgAAAGNvbXBhdGlibGVfYnJhbmRzPWlzb21pc28yYXZjMW1wNDEmAAAAREVTQ1JJUFRJT049TWFkZSB3aXRoIFJlbW90aW9uIDQuMC4yNzgBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBA=="),e=N(t);return e.setUint8(15,i.numberOfChannels),e.setUint32(16,i.sampleRate,!0),t}default:return}},ct=48e3,Ju=/^pcm-([usf])(\d+)(be)?$/,Se=i=>{if(h(re.includes(i)),i==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(i==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};let t=Ju.exec(i);h(t);let e;t[1]==="u"?e="unsigned":t[1]==="s"?e="signed":e="float";let r=Number(t[2])/8,n=t[3]!=="be",a=i==="pcm-u8"?2**7:0;return{dataType:e,sampleSize:r,littleEndian:n,silentValue:a}},$e=i=>i.startsWith("avc1")||i.startsWith("avc3")?"avc":i.startsWith("hev1")||i.startsWith("hvc1")?"hevc":i==="vp8"?"vp8":i.startsWith("vp09")?"vp9":i.startsWith("av01")?"av1":Gt.includes(i)?"prores":i==="mp3"||i==="mp4a.69"||i==="mp4a.6B"||i==="mp4a.6b"||i==="mp4a.40.34"?"mp3":i.startsWith("mp4a.40.")||i==="mp4a.67"?"aac":i==="opus"?"opus":i==="vorbis"?"vorbis":i==="flac"?"flac":i==="ac-3"||i==="ac3"?"ac3":i==="ec-3"||i==="eac3"?"eac3":i==="ulaw"?"ulaw":i==="alaw"?"alaw":Ju.test(i)?i:i==="webvtt"?"webvtt":null,el=i=>i==="avc"?{avc:{format:"avc"}}:i==="hevc"?{hevc:{format:"hevc"}}:{},tl=i=>i==="aac"?{aac:{format:"aac"}}:i==="opus"?{opus:{format:"opus"}}:{},Rm=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Gt],Fm=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Mm=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,Bm=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,Om=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,mr=i=>{if(!i)throw new TypeError("Video chunk metadata must be provided.");if(typeof i!="object")throw new TypeError("Video chunk metadata must be an object.");if(!i.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof i.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof i.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!Rm.some(t=>i.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(i.decoderConfig.codedWidth)||i.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(i.decoderConfig.codedHeight)||i.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(i.decoderConfig.displayAspectWidth!==void 0&&(!Number.isInteger(i.decoderConfig.displayAspectWidth)||i.decoderConfig.displayAspectWidth<=0))throw new TypeError("Video chunk metadata decoder configuration displayAspectWidth, when defined, must be a positive integer.");if(i.decoderConfig.displayAspectHeight!==void 0&&(!Number.isInteger(i.decoderConfig.displayAspectHeight)||i.decoderConfig.displayAspectHeight<=0))throw new TypeError("Video chunk metadata decoder configuration displayAspectHeight, when defined, must be a positive integer.");if(i.decoderConfig.displayAspectWidth!==void 0!=(i.decoderConfig.displayAspectHeight!==void 0))throw new TypeError("Video chunk metadata decoder configuration must specify both displayAspectWidth and displayAspectHeight, or neither.");if(i.decoderConfig.description!==void 0&&!Vt(i.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(i.decoderConfig.colorSpace!==void 0){let{colorSpace:t}=i.decoderConfig;if(typeof t!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");let e=Object.keys(it);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(nt);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 n=Object.keys(at);if(t.matrix!=null&&!n.includes(t.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${n.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(i.decoderConfig.codec.startsWith("avc1")||i.decoderConfig.codec.startsWith("avc3")){if(!Fm.test(i.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(i.decoderConfig.codec.startsWith("hev1")||i.decoderConfig.codec.startsWith("hvc1")){if(!Mm.test(i.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(i.decoderConfig.codec.startsWith("vp8")){if(i.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(i.decoderConfig.codec.startsWith("vp09")){if(!Bm.test(i.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(i.decoderConfig.codec.startsWith("av01")){if(!Om.test(i.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/.')}else if(Gt.some(t=>i.decoderConfig.codec.startsWith(t))&&!Gt.some(t=>i.decoderConfig.codec===t))throw new TypeError(`Video chunk metadata decoder configuration codec string for ProRes must be one of the valid ProRes four-character codes: ${Gt.join(", ")}.`)},Dm=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm","ac-3","ec-3"],Re=i=>{if(!i)throw new TypeError("Audio chunk metadata must be provided.");if(typeof i!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!i.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof i.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof i.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!Dm.some(t=>i.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(i.decoderConfig.sampleRate)||i.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(i.decoderConfig.numberOfChannels)||i.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(i.decoderConfig.description!==void 0&&!Vt(i.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(i.decoderConfig.codec.startsWith("mp4a")&&i.decoderConfig.codec!=="mp4a.69"&&i.decoderConfig.codec!=="mp4a.6B"&&i.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(i.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(i.decoderConfig.codec.startsWith("mp3")||i.decoderConfig.codec.startsWith("mp4a")){if(i.decoderConfig.codec!=="mp3"&&i.decoderConfig.codec!=="mp4a.69"&&i.decoderConfig.codec!=="mp4a.6B"&&i.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(i.decoderConfig.codec.startsWith("opus")){if(i.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(i.decoderConfig.description&&i.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(i.decoderConfig.codec.startsWith("vorbis")){if(i.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!i.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(i.decoderConfig.codec.startsWith("flac")){if(i.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!i.decoderConfig.description||i.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(i.decoderConfig.codec.startsWith("ac-3")||i.decoderConfig.codec.startsWith("ac3")){if(i.decoderConfig.codec!=="ac-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for AC-3 must be "ac-3".')}else if(i.decoderConfig.codec.startsWith("ec-3")||i.decoderConfig.codec.startsWith("eac3")){if(i.decoderConfig.codec!=="ec-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for EC-3 must be "ec-3".')}else if((i.decoderConfig.codec.startsWith("pcm")||i.decoderConfig.codec.startsWith("ulaw")||i.decoderConfig.codec.startsWith("alaw"))&&!re.includes(i.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${re.join(", ")}).`)},Ea=i=>{if(!i)throw new TypeError("Subtitle metadata must be provided.");if(typeof i!="object")throw new TypeError("Subtitle metadata must be an object.");if(!i.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof i.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof i.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};var Vm=[44100,48e3,32e3],va=[-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],fr=1483304551,Pi=1231971951,_a=(i,t,e,r,n)=>t===0?0:t===1?Math.floor(144*e/(r<t===0?0:t===1?144*e/(r<i===3?t===3?21:36:t===3?13:21,$r=(i,t)=>{let e=i>>>24,r=i>>>16&255,n=i>>>8&255,a=i&255;if(e!==255&&r!==255&&n!==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=n>>4&15,m=(n>>2&3)%3,d=n>>1&1,f=a>>6&3,p=a>>4&3,b=a>>3&1,g=a>>2&1,y=a&3,k=va[s*16*4+u*16+l];if(k===-1)return{header:null,bytesAdvanced:1};let T=k*1e3,w=Vm[m]>>s+o,S=_a(s,u,T,w,d);if(t!==null&&t{let t=127,e=0,r=i;for(;(t^2147483647)!==0;)e=r&~t,e<<=1,e|=r&t,t=(t+1<<8)-1,r=e;return e},Ra=i=>{let t=2130706432,e=0;for(;t!==0;)e>>=1,e|=i&t,t>>=8;return e};var hr=i=>i===3?1:2;var Yr=[48e3,44100,32e3],Xo=[24e3,22050,16e3];var gr=function*(i){let t=0,e=-1;for(;t=i.length-2)break;t=r;let n=0;if(t+3e&&(yield{offset:e,length:t-e}),e=t+n,t=e}e!==-1&&e{if(t.description){let n=(X(t.description)[4]&3)+1;return Fa(i,n)}else return gr(i)},Qt=i=>i&31,Ma=i=>{let t=[],e=i.length;for(let r=0;r{let t=i.reduce((n,a)=>n+$o.byteLength+a.byteLength,0),e=new Uint8Array(t),r=0;for(let n of i)e.set($o,r),r+=$o.byteLength,e.set(n,r),r+=n.byteLength;return e},Ba=(i,t)=>{let e=i.reduce((a,s)=>a+t+s.byteLength,0),r=new Uint8Array(e),n=0;for(let a of i){let s=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:s.setUint8(n,a.byteLength);break;case 2:s.setUint16(n,a.byteLength,!1);break;case 3:Hr(s,n,a.byteLength,!1);break;case 4:s.setUint32(n,a.byteLength,!1);break}n+=t,r.set(a,n),n+=a.byteLength}return r},sl=(i,t)=>{if(t.description){let n=(X(t.description)[4]&3)+1;return Ba(i,n)}else return gn(i)},Ci=i=>{try{let t=[],e=[],r=[];for(let o of gr(i)){let c=i.subarray(o.offset,o.offset+o.length),u=Qt(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 n=t[0],a=bn(n);h(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 V._error("Error building AVC Decoder Configuration Record:",t),null}},ol=i=>{let t=[];t.push(i.configurationVersion),t.push(i.avcProfileIndication),t.push(i.profileCompatibility),t.push(i.avcLevelIndication),t.push(252|i.lengthSizeMinusOne&3),t.push(224|i.sequenceParameterSets.length&31);for(let e of i.sequenceParameterSets){let r=e.byteLength;t.push(r>>8),t.push(r&255);for(let n=0;n>8),t.push(r&255);for(let n=0;n>8),t.push(r&255);for(let n=0;n{try{let t=N(i),e=0,r=t.getUint8(e++),n=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 q(Ma(i));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let r=t.readAlignedByte(),n=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 _=0;_<(s!==3?8:12);_++)if(t.readBits(1)){let D=_<6?16:64,O=8,z=8;for(let H=0;HH.level>=a)??Y(pn),z=Math.min(Math.floor(O.maxDpbMbs/(_*D)),16);x=z,A=z}}return h(A!==null),{profileIdc:r,constraintFlags:n,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:s,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:p,displayWidth:b,displayHeight:g,pixelAspectRatio:C,colourPrimaries:T,matrixCoefficients:S,transferCharacteristics:w,fullRangeFlag:P,numReorderFrames:x,maxDecFrameBuffering:A}}catch(t){return V._error("Error parsing AVC SPS:",t),null}},nl=i=>{let t=M(i);i.skipBits(4),i.skipBits(4);for(let e=0;e<=t;e++)M(i),M(i),i.skipBits(1);i.skipBits(5),i.skipBits(5),i.skipBits(5),i.skipBits(5)},Um=(i,t)=>{if(t.description){let n=(X(t.description)[21]&3)+1;return Ba(i,n)}else return gn(i)},hn=(i,t)=>{if(t.description){let n=(X(t.description)[21]&3)+1;return Fa(i,n)}else return gr(i)},ut=i=>i>>1&63,Zo=i=>{try{let t=new q(Ma(i));t.skipBits(16),t.readBits(4);let e=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:a,general_profile_idc:s,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:u}=zm(t,e);M(t);let l=M(t),m=0;l===3&&(m=t.readBits(1));let d=M(t),f=M(t),p=d,b=f;if(t.readBits(1)){let _=M(t),v=M(t),D=M(t),O=M(t),z=1,H=1,ie=m===0?l:0;ie===1?(z=2,H=2):ie===2&&(z=2,H=1),p-=(_+v)*z,b-=(D+O)*H}let g=M(t),y=M(t);M(t);let T=t.readBits(1)?0:e,w=0;for(let _=T;_<=e;_++)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)&&Nm(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(Lm(t,S),t.readBits(1)){let _=M(t);for(let v=0;v<_;v++)M(t),t.skipBits(1)}t.skipBits(1),t.skipBits(1);let P=2,C=2,x=2,A=0,I=0,E={num:1,den:1};if(t.readBits(1)){let _=Hm(t,e);E=_.pixelAspectRatio,P=_.colourPrimaries,C=_.transferCharacteristics,x=_.matrixCoefficients,A=_.fullRangeFlag,I=_.minSpatialSegmentationIdc}return{displayWidth:p,displayHeight:b,pixelAspectRatio:E,colourPrimaries:P,transferCharacteristics:C,matrixCoefficients:x,fullRangeFlag:A,maxDecFrameBuffering:w+1,spsMaxSubLayersMinus1:e,spsTemporalIdNestingFlag:r,generalProfileSpace:n,generalTierFlag:a,generalProfileIdc:s,generalProfileCompatibilityFlags:o,generalConstraintIndicatorFlags:c,generalLevelIdc:u,chromaFormatIdc:l,bitDepthLumaMinus8:g,bitDepthChromaMinus8:y,minSpatialSegmentationIdc:I}}catch(t){return V._error("Error parsing HEVC SPS:",t),null}},Ii=i=>{try{let t=[],e=[],r=[],n=[];for(let u of gr(i)){let l=i.subarray(u.offset,u.offset+u.length),m=ut(l[0]);m===32?t.push(l):m===33?e.push(l):m===34?r.push(l):(m===39||m===40)&&n.push(l)}if(e.length===0||r.length===0)return null;let a=Zo(e[0]);if(!a)return null;let s=0;if(r.length>0){let u=r[0],l=new q(Ma(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}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:ut(n[0][0]),nalUnits:n}]:[]];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 V._error("Error building HEVC Decoder Configuration Record:",t),null}},zm=(i,t)=>{let e=i.readBits(2),r=i.readBits(1),n=i.readBits(5),a=0;for(let l=0;l<32;l++)a=a<<1|i.readBits(1);let s=new Uint8Array(6);for(let l=0;l<6;l++)s[l]=i.readBits(8);let o=i.readBits(8),c=[],u=[];for(let l=0;l0)for(let l=t;l<8;l++)i.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(!i.readBits(1))M(i);else{let n=Math.min(64,1<<4+(t<<1));t>1&&wt(i);for(let a=0;a{let e=[];for(let r=0;r{let n=0,a=0,s=0;if(t!==0&&(a=i.readBits(1)),a){if(t===e){let c=M(i);s=t-(c+1)}else s=t-1;i.readBits(1),M(i);let o=r[s]??0;for(let c=0;c<=o;c++)i.readBits(1)||i.readBits(1);n=r[s]}else{let o=M(i),c=M(i);for(let u=0;u{let e=2,r=2,n=2,a=0,s=0,o={num:1,den:1};if(i.readBits(1)){let c=i.readBits(8);if(c===255)o={num:i.readBits(16),den:i.readBits(16)};else{let u=cl[c];u&&(o=u)}}return i.readBits(1)&&i.readBits(1),i.readBits(1)&&(i.readBits(3),a=i.readBits(1),i.readBits(1)&&(e=i.readBits(8),r=i.readBits(8),n=i.readBits(8))),i.readBits(1)&&(M(i),M(i)),i.readBits(1),i.readBits(1),i.readBits(1),i.readBits(1)&&(M(i),M(i),M(i),M(i)),i.readBits(1)&&(i.readBits(32),i.readBits(32),i.readBits(1)&&M(i),i.readBits(1)&&qm(i,!0,t)),i.readBits(1)&&(i.readBits(1),i.readBits(1),i.readBits(1),s=M(i),M(i),M(i),M(i),M(i)),{pixelAspectRatio:o,colourPrimaries:e,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:a,minSpatialSegmentationIdc:s}},qm=(i,t,e)=>{let r=!1,n=!1,a=!1;t&&(r=i.readBits(1)===1,n=i.readBits(1)===1,(r||n)&&(a=i.readBits(1)===1,a&&(i.readBits(8),i.readBits(5),i.readBits(1),i.readBits(5)),i.readBits(4),i.readBits(4),a&&i.readBits(4),i.readBits(5),i.readBits(5),i.readBits(5)));for(let s=0;s<=e;s++){let o=i.readBits(1)===1,c=!0;o||(c=i.readBits(1)===1);let u=!1;c?M(i):u=i.readBits(1)===1;let l=1;u||(l=M(i)+1),r&&al(i,l,a),n&&al(i,l,a)}},al=(i,t,e)=>{for(let r=0;r{let t=[];t.push(i.configurationVersion),t.push((i.generalProfileSpace&3)<<6|(i.generalTierFlag&1)<<5|i.generalProfileIdc&31),t.push(i.generalProfileCompatibilityFlags>>>24&255),t.push(i.generalProfileCompatibilityFlags>>>16&255),t.push(i.generalProfileCompatibilityFlags>>>8&255),t.push(i.generalProfileCompatibilityFlags&255),t.push(...i.generalConstraintIndicatorFlags),t.push(i.generalLevelIdc&255),t.push(240|i.minSpatialSegmentationIdc>>8&15),t.push(i.minSpatialSegmentationIdc&255),t.push(252|i.parallelismType&3),t.push(252|i.chromaFormatIdc&3),t.push(248|i.bitDepthLumaMinus8&7),t.push(248|i.bitDepthChromaMinus8&7),t.push(i.avgFrameRate>>8&255),t.push(i.avgFrameRate&255),t.push((i.constantFrameRate&3)<<6|(i.numTemporalLayers&7)<<3|(i.temporalIdNested&1)<<2|i.lengthSizeMinusOne&3),t.push(i.arrays.length&255);for(let e of i.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 n=0;n{try{let t=N(i),e=0,r=t.getUint8(e++),n=t.getUint8(e++),a=n>>6&3,s=n>>5&1,o=n&31,c=t.getUint32(e,!1);e+=4;let u=i.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,p=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,P=t.getUint8(e++),C=[];for(let x=0;x>7&1,E=A&63,_=t.getUint16(e,!1);e+=2;let v=[];for(let D=0;D<_;D++){let O=t.getUint16(e,!1);e+=2,v.push(i.subarray(e,e+O)),e+=O}C.push({arrayCompleteness:I,nalUnitType:E,nalUnits:v})}return{configurationVersion:r,generalProfileSpace:a,generalTierFlag:s,generalProfileIdc:o,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:u,generalLevelIdc:l,minSpatialSegmentationIdc:m,parallelismType:d,chromaFormatIdc:f,bitDepthLumaMinus8:p,bitDepthChromaMinus8:b,avgFrameRate:g,constantFrameRate:k,numTemporalLayers:T,temporalIdNested:w,lengthSizeMinusOne:S,arrays:C}}catch(t){return V._error("Error deserializing HEVC Decoder Configuration Record:",t),null}};var dl=(i,t)=>{let e=new Set,r=0;for(let a of hn(i,t)){if(r===4){e.add(a.offset);continue}let s=ut(i[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 n=[];for(let a of hn(i,t))e.has(a.offset)||n.push(i.subarray(a.offset,a.offset+a.length));return Um(n,t)},Da=i=>{let t=new q(i);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 C=t.readBits(1),x=t.readBits(1);m=!C&&!x?3:C&&!x?2:1,t.skipBits(1)}else m=1;else m=3,d=1;let f=t.readBits(16),p=t.readBits(16),b=f+1,g=p+1,y=b*g,k=Y(Kt).level;for(let P of Kt)if(y<=P.maxPictureSize){k=P.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}},ml=function*(i){let t=new q(i),e=()=>{let r=0;for(let n=0;n<8;n++){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),n=t.readBits(1),a=t.readBits(1);t.skipBits(1),n&&t.skipBits(8);let s;if(a){let o=e();if(o===null)return;s=o}else s=Math.floor(t.getBitsLeft()/8);h(t.pos%8===0),yield{type:r,data:i.subarray(t.pos/8,t.pos/8+s)},t.skipBits(s*8)}},Va=i=>{for(let{type:t,data:e}of ml(i)){if(t!==1)continue;let r=new q(e),n=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 P=r.readBits(1);P&&(u=r.readBits(5),r.skipBits(32),r.skipBits(5),r.skipBits(5));let C=r.readBits(5);for(let x=0;x<=C;x++){r.skipBits(12);let A=r.readBits(5);if(x===0&&(o=A),A>7){let E=r.readBits(1);x===0&&(c=E)}if(P&&r.readBits(1)){let _=u+1;r.skipBits(_),r.skipBits(_),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 p=0;if(s?p=0:p=r.readBits(1),p&&(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 P=r.readBits(1),C=0;P?C=2:C=r.readBits(1),C>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;n===2&&b?g=r.readBits(1)?12:10:n<=2&&(g=b?10:8);let y=0;n!==1&&(y=r.readBits(1));let k=1,T=1,w=0;return y||(n===0?(k=1,T=1):n===1?(k=0,T=0):g===12&&(k=r.readBits(1),k&&(T=r.readBits(1))),k&&T&&(w=r.readBits(2))),{profile:n,level:o,tier:c,bitDepth:g,monochrome:y,chromaSubsamplingX:k,chromaSubsamplingY:T,chromaSamplePosition:w}}return null},br=i=>{let t=N(i),e=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),a=t.getInt16(16,!0),s=t.getUint8(18),o=null;return s&&(o=i.subarray(19,21+e)),{outputChannelCount:e,preSkip:r,inputSampleRate:n,outputGain:a,channelMappingFamily:s,channelMappingTable:o}},Km=[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],fl=i=>{let t=i[0]>>3;return{durationInSamples:Km[t]}},Ua=i=>{if(i.length<7)throw new Error("Setup header is too short.");if(i[0]!==5)throw new Error("Wrong packet type in Setup header.");if(String.fromCharCode(...i.slice(1,7))!=="vorbis")throw new Error("Invalid packet signature in Setup header.");let e=i.length,r=new Uint8Array(e);for(let m=0;m97;)if(n.readBits(1)===1){a=n.pos;break}if(a===0)throw new Error("Invalid Setup header: framing bit not found.");let s=0,o=!1,c=0;for(;n.getBitsLeft()>=97;){let m=n.pos,d=n.readBits(8),f=n.readBits(16),p=n.readBits(16);if(d>63||f!==0||p!==0){n.pos=m;break}if(n.skipBits(1),s++,s>64)break;n.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;n.pos=0,n.skipBits(a);let l=Array(u).fill(0);for(let m=u-1;m>=0;m--)n.skipBits(40),l[m]=n.readBits(1);return{modeBlockflags:l}},yr=(i,t,e)=>{switch(i){case"avc":{for(let r of Yo(e,t)){let n=e[r.offset],a=Qt(n);if(a>=1&&a<=4)return"delta";if(a===5)return"key";if(a===6&&(!mn()||Vu()>=144)){let s=e.subarray(r.offset,r.offset+r.length),o=Ma(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 q(o);d.pos=8*c;let f=M(d),p=d.readBits(1);if(f===0&&p===1)return"key"}c+=l}while(c{let e=N(i),r=0,n=e.getUint32(r,!0);r+=4;let a=me.decode(i.subarray(r,r+n));r+=n,n>0&&(t.raw??={},t.raw.vendor??=a);let s=e.getUint32(r,!0);r+=4;for(let o=0;o0&&(t.trackNumber??=p),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("/"),p=Number.parseInt(f[0],10),b=f[1]&&Number.parseInt(f[1],10);Number.isInteger(p)&&p>0&&(t.discNumber??=p),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=Gr(d),p=N(f),b=p.getUint32(0,!1),g=p.getUint32(4,!1),y=String.fromCharCode(...f.subarray(8,8+g)),k=p.getUint32(8+g,!1),T=me.decode(f.subarray(12+g,12+g+k)),w=p.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}}},kn=(i,t,e)=>{let r=[i],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=(p,b)=>{let g=`${p}=${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(p)};for(let{key:p,value:b}of st(t))switch(p){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 C=0;Cp+b.length,0),d=new Uint8Array(m),f=0;for(let p of r)d.set(p,f),f+=p.length;return d},Tn=[2,1,2,3,3,4,4,5],za=i=>{if(i.length<7||i[0]!==11||i[1]!==119)return null;let t=new q(i);t.skipBits(16),t.skipBits(16);let e=t.readBits(2);if(e===3)return null;let r=t.readBits(6),n=t.readBits(5);if(n>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:n,bsmod:a,acmod:s,lfeon:o,bitRateCode:c}},pl=[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],hl=1536,wn=new Uint8Array([5,4,65,67,45,51]),Sn=new Uint8Array([5,4,69,65,67,51]),Jo=[1,2,3,6],Na=i=>{if(i.length<6||i[0]!==11||i[1]!==119)return null;let t=new q(i);t.skipBits(16);let e=t.readBits(2);if(t.skipBits(3),e!==0&&e!==2)return null;let r=t.readBits(11),n=t.readBits(2),a=0,s;n===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=Jo[s],m;return n<3?m=Yr[n]/1e3:m=Xo[a]/1e3,{dataRate:Math.round((r+1)*m/(l*16)),substreams:[{fscod:n,fscod2:a,bsid:u,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},gl=i=>{if(i.length<2)return null;let t=new q(i),e=t.readBits(13),r=t.readBits(3),n=[];for(let a=0;a<=r&&!(Math.ceil(t.pos/8)+3>i.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),n.push({fscod:s,fscod2:null,bsid:o,bsmod:c,acmod:u,lfeon:l,numDepSub:m,chanLoc:d})}return n.length===0?null:{dataRate:e,substreams:n}},La=i=>{let t=i.substreams[0];return h(t),t.fscod<3?Yr[t.fscod]:t.fscod2!==null&&t.fscod2<3?Xo[t.fscod2]:null},Wa=i=>{let t=i.substreams[0];h(t);let e=Tn[t.acmod]+t.lfeon;if(t.numDepSub>0){let r=[2,2,1,1,2,2,2,1,1];for(let n=0;n<9;n++)t.chanLoc&1<<8-n&&(e+=r[n])}return e};var ge=class{constructor(t){this.input=t}dispose(){}};var pe=new Uint8Array(0),j=class i{constructor(t,e,r,n,a=-1,s,o){this.data=t;this.type=e;this.timestamp=r;this.duration=n;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(n)||n<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 i(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 i(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 Ha=i=>{let e=(i.hasVideo?"video/":i.hasAudio?"audio/":"application/")+(i.isQuickTime?"quicktime":"mp4");if(i.codecStrings.length>0){let r=[...new Set(i.codecStrings)];e+=`; codecs="${r.join(", ")}"`}return e},qa=i=>{let t=N(i),e=0,r=t.getUint8(e);e+=1,e+=3;let n=cr(i.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;ci.systemId===t.systemId&&wa(i.data,t.data);var lt=8,jt=16,Xt=i=>{let t=F(i),e=ae(i,4),r=8;t===1&&(t=Ne(i),r=16);let a=t-r;return a<0?null:{name:e,totalSize:t,headerSize:r,contentSize:a}},kr=i=>$t(i)/65536,Ga=i=>$t(i)/1073741824,Qa=i=>{let t=0;for(let e=0;e<4;e++){t<<=7;let r=U(i);if(t|=r&127,(r&128)===0)break}return t},dt=i=>{let t=ue(i);return i.skip(2),t=Math.min(t,i.remainingLength),me.decode(B(i,t))},bl=i=>{let t=Xt(i);if(!t||t.name!=="data"||i.remainingLength<8)return null;let e=F(i);i.skip(4);let r=B(i,t.contentSize-8);switch(e){case 1:return me.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new Qe(r,"image/jpeg");case 14:return new Qe(r,"image/png");case 27:return new Qe(r,"image/bmp");default:return r}};var mt=16,Yt=new Uint32Array(256),Ei=new Uint32Array(256),vi=new Uint32Array(256),_i=new Uint32Array(256),Ri=new Uint32Array(256),Ce=new Uint32Array(256),yl=new Uint32Array(10),kl=!1,Gm=()=>{let i=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;i[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,i[a]=o}for(let a=0;a<256;a++){let s=i[a],o=i.indexOf(a);Yt[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;Ei[a]=d,vi[a]=d>>>8|d<<24,_i[a]=d>>>16|d<<16,Ri[a]=d>>>24|d<<8}let n=1;for(let a=0;a<10;a++)yl[a]=n<<24,n=n<<1^(n&128?283:0);kl=!0},An=class{constructor(){this.roundkey=new Uint32Array(44);this.iv=new Uint32Array(mt/Uint32Array.BYTES_PER_ELEMENT);this.in=new Uint8Array(mt);this.out=new Uint8Array(mt);this.inView=new DataView(this.in.buffer);this.outView=new DataView(this.out.buffer)}init({key:t,iv:e}){h(t.byteLength===16),h(e.byteLength===16),kl||Gm();let r=new DataView(t.buffer,t.byteOffset,t.byteLength),n=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]=n.getUint32(0,!1),this.iv[1]=n.getUint32(4,!1),this.iv[2]=n.getUint32(8,!1),this.iv[3]=n.getUint32(12,!1);for(let a=4;a<44;a+=4){let s=this.roundkey[a-1];this.roundkey[a]=this.roundkey[a-4]^Yt[s>>>16&255]&4278190080^Yt[s>>>8&255]&16711680^Yt[s>>>0&255]&65280^Yt[s>>>24&255]&255^yl[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]^vi[Yt[o>>>16&255]&255]^_i[Yt[o>>>8&255]&255]^Ri[Yt[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],n=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=Ei[t>>>24]^vi[n>>>16&255]^_i[r>>>8&255]^Ri[e&255]^this.roundkey[k],l=Ei[e>>>24]^vi[t>>>16&255]^_i[n>>>8&255]^Ri[r&255]^this.roundkey[k+1],m=Ei[r>>>24]^vi[e>>>16&255]^_i[t>>>8&255]^Ri[n&255]^this.roundkey[k+2],d=Ei[n>>>24]^vi[r>>>16&255]^_i[e>>>8&255]^Ri[t&255]^this.roundkey[k+3],t=u,e=l,r=m,n=d}let f=Ce[t>>>24&255]&4278190080^Ce[n>>>16&255]&16711680^Ce[r>>>8&255]&65280^Ce[e>>>0&255]&255^this.roundkey[40],p=Ce[e>>>24&255]&4278190080^Ce[t>>>16&255]&16711680^Ce[n>>>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[n>>>0&255]&255^this.roundkey[42],g=Ce[n>>>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,p^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}},Tl=(i,t,e)=>{let r=!1,n=0,a=2**16,s=16,o=new An;return new ReadableStream({pull:async c=>{r||(o.init(await t()),r=!0);let u=a+s,l=i.requestSliceRange(n,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),p=new Uint8Array(d);for(let b=0;b16)throw new Error("Invalid PKCS#7 padding. Incorrect key or corrupted data.");let g=p.subarray(0,d-b);c.enqueue(g),c.close(),e()}},cancel:()=>{e()}})};var ja=class i extends ge{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(n=>n.getDecoderConfig().then(a=>a?.codec??null)));return Ha({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(n=>n.info?.type==="video"),hasAudio:this.tracks.some(n=>n.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 n=this.reader.requestSliceRange(e,lt,jt);if(n instanceof Promise&&(n=await n),!n)break;let a=e,s=Xt(n);if(!s)break;if(s.name==="ftyp"||s.name==="styp"){let o=ae(n,4);this.isQuickTime=o==="qt "}else if(s.name==="moov"){let o=this.reader.requestSlice(n.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!==i)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(h(u.info),u.info.type==="video"&&u.info.width!==-1){let l=u;u.trackBacking=new $a(l),this.tracks.push(u)}else if(u.info.type==="audio"&&u.info.numberOfChannels!==-1){let l=u;u.trackBacking=new Ya(l),this.tracks.push(u)}}}r=!1;break}e=a+s.totalSize}if(r){h(this.reader.fileSize!==null);let n=this.reader.requestSlice(this.reader.fileSize-4,4);n instanceof Promise&&(n=await n),h(n);let a=F(n),s=this.reader.fileSize-a;if(s>=0&&s<=this.reader.fileSize-jt){let o=this.reader.requestSliceRange(s,lt,jt);if(o instanceof Promise&&(o=await o),o){let c=Xt(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;h(this.moovSlice);let n=this.moovSlice.slice(e.sampleTableByteOffset);if(this.currentTrack=e,this.traverseBox(n),this.currentTrack=null,e.info?.type==="audio"&&e.info.codec&&re.includes(e.info.codec)&&r.sampleCompositionTimeOffsets.length===0){h(e.info?.type==="audio");let s=Se(e.info.codec),o=[],c=[];for(let u=0;uA.startIndex),y=r.sampleTimingEntries[g],k=K(r.sampleTimingEntries,b,A=>A.startIndex),T=r.sampleTimingEntries[k],w=y.startDecodeTimestamp+(p-y.startIndex)*y.delta,P=T.startDecodeTimestamp+(b-T.startIndex)*T.delta-w,C=Y(o);C&&C.delta===P?C.count++:o.push({startIndex:l.startChunkIndex+f,startDecodeTimestamp:w,count:1,delta:P});let x=l.samplesPerChunk*s.sampleSize*e.info.numberOfChannels;c.push(x)}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)ec(o,m.timestamp);else{let d=K(u,s.moofOffset-1,f=>f.moofOffset);if(d!==-1){let f=u[d];ec(o,f.endTimestamp)}}o.startTimestampIsFinal=!0}let l=K(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 Pl(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;Nt(o.languageCode)||(o.languageCode=te)}}break;case"hdlr":{let o=this.currentTrack;if(!o)break;e.skip(8);let c=ae(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,proresFormat: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,n.contentSize))}break;case"stsd":{let o=this.currentTrack;if(!o||o.info===null||o.sampleTable)break;let c=U(e);e.skip(3);let u=F(e);for(let l=0;l0&&(p===1?(e.skip(4),g=8*F(e),e.skip(2*4)):p===2&&(e.skip(4),y=Za(e),b=F(e),e.skip(4),g=F(e),k=F(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=ct;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":(V._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":(V._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":(V._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":(V._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":(V._warn(`Invalid fpcm sample size ${w}.`),o.info.codec=null):w===32?o.info.codec="pcm-f32be":w===64?o.info.codec="pcm-f64be":(V._warn(`Invalid fpcm sample size ${w}.`),o.info.codec=null)}else if(T==="lpcm"&&k!==null){let w=g+7>>3,S=!!(k&1),P=!!(k&2),C=k&4?-1:0;g>0&&g<=64&&(S?g===32&&(o.info.codec=P?"pcm-f32be":"pcm-f32"):C&1<0?(o.encryptionInfo.defaultCryptByteBlock=u>>4,o.encryptionInfo.defaultSkipByteBlock=u&15):(o.encryptionInfo.defaultCryptByteBlock=0,o.encryptionInfo.defaultSkipByteBlock=0),o.encryptionInfo.defaultIsProtected=U(e)!==0,o.encryptionInfo.defaultPerSampleIvSize=U(e),o.encryptionInfo.defaultKid=cr(B(e,16)),o.encryptionInfo.defaultIsProtected&&o.encryptionInfo.defaultPerSampleIvSize===0){let l=U(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;h(o.info),o.info.codecDescription=B(e,n.contentSize)}break;case"hvcC":{let o=this.currentTrack;if(!o)break;h(o.info),o.info.codecDescription=B(e,n.contentSize)}break;case"vpcC":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="video"),e.skip(4);let c=U(e),u=U(e),l=U(e),m=l>>4,d=l>>1&7,f=l&1,p=U(e),b=U(e),g=U(e);o.info.vp9CodecInfo={profile:c,level:u,bitDepth:m,chromaSubsampling:d,videoFullRangeFlag:f,colourPrimaries:p,transferCharacteristics:b,matrixCoefficients:g}}break;case"av1C":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="video"),e.skip(1);let c=U(e),u=c>>5,l=c&31,m=U(e),d=m>>7,f=m>>6&1,p=m>>5&1,b=m>>4&1,g=m>>3&1,y=m>>2&1,k=m&3,T=u===2&&f?p?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)break;h(o.info?.type==="video");let c=ae(e,4);if(c!=="nclx"&&c!=="nclc")break;let u=ue(e),l=ue(e),m=ue(e),d;c==="nclx"&&(d=!!(U(e)&128)),o.info.colorSpace={primaries:zr[u],transfer:Nr[l],matrix:Lr[m],fullRange:d}}break;case"pasp":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="video");let c=F(e),u=F(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,n.contentSize));break;case"esds":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="audio"),e.skip(4);let c=U(e);h(c===3),Qa(e),e.skip(2);let u=U(e),l=(u&128)!==0,m=(u&64)!==0,d=(u&32)!==0;if(l&&e.skip(2),m){let y=U(e);e.skip(y)}d&&e.skip(2);let f=U(e);h(f===4);let p=Qa(e),b=e.filePos,g=U(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":V._warn(`Unsupported audio codec (objectTypeIndication ${g}) - discarding track.`),e.skip(12),p>e.filePos-b){let y=U(e);h(y===5);let k=Qa(e);if(o.info.codecDescription=B(e,k),o.info.codec==="aac"){let T=Pt(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;h(o.info?.type==="audio"),o.info.pcmLittleEndian=!!(ue(e)&255)}break;case"pcmC":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="audio"),e.skip(4);let c=U(e);o.info.pcmLittleEndian=!!(c&1),o.info.pcmSampleSize=U(e)}break;case"dOps":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="audio"),e.skip(1);let c=U(e),u=ue(e),l=F(e),m=xn(e),d=U(e),f;d!==0?f=B(e,2+c):f=new Uint8Array(0);let p=new Uint8Array(19+f.byteLength),b=new DataView(p.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),p.set(f,19),o.info.codecDescription=p,o.info.numberOfChannels=c}break;case"dfLa":{let o=this.currentTrack;if(!o)break;h(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;h(o.info?.type==="audio");let c=B(e,3),u=new q(c),l=u.readBits(2);u.skipBits(8);let m=u.readBits(3),d=u.readBits(1);l<3&&(o.info.sampleRate=Yr[l]),o.info.numberOfChannels=Tn[m]+d}break;case"dec3":{let o=this.currentTrack;if(!o)break;h(o.info?.type==="audio");let c=B(e,n.contentSize),u=gl(c);if(!u){V._warn("Invalid dec3 box contents, ignoring.");break}let l=La(u);l!==null&&(o.info.sampleRate=l),o.info.numberOfChannels=Wa(u)}break;case"stts":{let o=this.currentTrack;if(!o||!o.sampleTable)break;e.skip(4);let c=F(e),u=0,l=0;for(let m=0;mT.id===c);if(!u)break;let l=F(e),m=(l&48)>>4,d=(l&12)>>2,f=l&3,p=[U,ue,ft,F],b=p[m],g=p[d],y=p[f],k=F(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=Ne(e):p&&(g.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),u&&(g.currentFragmentState.sampleDescriptionIndex=F(e)),l&&(g.currentFragmentState.defaultSampleDuration=F(e)),m&&(g.currentFragmentState.defaultSampleSize=F(e)),d&&(g.currentFragmentState.defaultSampleFlags=F(e)),f&&(g.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{let o=this.currentTrack;if(!o)break;h(o.currentFragmentState);let c=U(e);e.skip(3);let u=c===0?F(e):Ne(e);o.currentFragmentState.startTimestamp=u}break;case"trun":{let o=this.currentTrack;if(!o)break;h(this.currentFragment),h(o.currentFragmentState);let c=U(e),u=ft(e),l=!!(u&1),m=!!(u&4),d=!!(u&256),f=!!(u&512),p=!!(u&1024),b=!!(u&2048),g=F(e),y=null;l&&(y=$t(e));let k=null;m&&(k=F(e));let T;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));for(let w=0;w0&&(m=B(e,l));let d=Sl(o);d.defaultSampleInfoSize=u,d.sampleSizes=m,d.sampleCount=l}break;case"saio":{let o=this.currentTrack;if(!o||!o.encryptionInfo)break;let c=U(e);if(ft(e)&1){let f=ae(e,4),p=F(e);if(f!==o.encryptionInfo.scheme||p!==0)break}let l=F(e);if(l===0)break;l>1&&V._warn("Multiple saio entries are not supported; using the first offset only.");let m=c===0?F(e):Number(Ne(e));this.currentFragment&&(m+=this.currentFragment.moofOffset);let d=Sl(o);d.offset=m}break;case"senc":{let o=this.currentTrack;if(!o||!o.encryptionInfo)break;h(this.currentFragment);let c=this.currentFragment.trackData.get(o.id);if(!c)break;e.skip(1);let l=!!(ft(e)&2),m=F(e),d=o.encryptionInfo.defaultPerSampleIvSize;h(d!==null);for(let f=0;f0?p.set(B(e,d),0):p.set(o.encryptionInfo.defaultConstantIv,0);let b=null;if(l){let y=ue(e);b=[];for(let k=0;k0&&(this.metadataTags.trackNumber??=p),b&&Number.isInteger(b)&&b>0&&(this.metadataTags.tracksTotal??=b)}break;case"trkn":if(d instanceof Uint8Array&&d.length>=6){let f=N(d),p=f.getUint16(2,!1),b=f.getUint16(4,!1);p>0&&(this.metadataTags.trackNumber??=p),b>0&&(this.metadataTags.tracksTotal??=b)}break;case"disc":case"disk":if(d instanceof Uint8Array&&d.length>=6){let f=N(d),p=f.getUint16(2,!1),b=f.getUint16(4,!1);p>0&&(this.metadataTags.discNumber??=p),b>0&&(this.metadataTags.discsTotal??=b)}break}}}break}return e.filePos=s,!0}},Xa=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 n of t.tracks)if(n.trackBacking.getType()===e&&r++,n===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}getUnixTimeForTimestamp(){return null}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:(h(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 zt(t*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(t,e){let r=this.mapTimestampIntoTimescale(t),n=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=tc(n,r),s=await this.fetchPacketForSampleIndex(a,e);return!wl(n)||!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=K(c.presentationTimestamps,r,d=>d.presentationTimestamp),l=u!==-1?c.presentationTimestamps[u].sampleIndex:-1,m=u!==-1&&r{if(a===n.fragment){let s=a.trackData.get(this.internalTrack.id);if(n.sampleIndex+1{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let u=ur(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===n.fragment){let o=a.trackData.get(this.internalTrack.id).samples.findIndex((c,u)=>c.isKeyFrame&&u>n.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 h(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),n=jm(r,t);if(!n)return null;let a;if(e.metadataOnly)a=pe;else{let u=this.internalTrack.demuxer.reader.requestSlice(n.sampleOffset,n.sampleSize);if(u instanceof Promise&&(u=await u),!u)return null;if(a=B(u,n.sampleSize),this.internalTrack.encryptionAuxInfo){h(this.internalTrack.encryptionInfo);let l=await Pl(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);tg.timestamp),m=l!==-1?this.internalTrack.fragmentLookupTable[l]:null,d=K(this.internalTrack.fragmentPositionCache,r,g=>g.startTimestamp),f=d!==-1?this.internalTrack.fragmentPositionCache[d]:null,p=Math.max(m?.moofOffset??0,f?.moofOffset??0)||null,b;for(t?p===null||t.moofOffset>=p?(b=t.moofOffset+t.moofSize,o=t):b=p:b=p??0;;){if(o){let T=o.trackData.get(this.internalTrack.id);if(T&&T.startTimestamp>n)break}let g=s.reader.requestSliceRange(b,lt,jt);if(g instanceof Promise&&(g=await g),!g)break;let y=b,k=Xt(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&&Da(r.data)}else if(this.internalTrack.info.codec==="av1"&&!this.internalTrack.info.av1CodecInfo){let r=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=r&&Va(r.data)}let e={codec:Ai(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}},Ya=class extends Xa{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:xi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}:null}},tc=(i,t)=>{if(i.presentationTimestamps){let e=K(i.presentationTimestamps,t,r=>r.presentationTimestamp);return e===-1?-1:i.presentationTimestamps[e].sampleIndex}else{let e=K(i.sampleTimingEntries,t,n=>n.startDecodeTimestamp);if(e===-1)return-1;let r=i.sampleTimingEntries[e];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},Qm=(i,t)=>{if(!i.keySampleIndices)return tc(i,t);if(i.presentationTimestamps){let e=K(i.presentationTimestamps,t,r=>r.presentationTimestamp);if(e===-1)return-1;for(let r=e;r>=0;r--){let n=i.presentationTimestamps[r].sampleIndex;if(Ut(i.keySampleIndices,n,s=>s)!==-1)return n}return-1}else{let e=tc(i,t),r=K(i.keySampleIndices,e,n=>n);return i.keySampleIndices[r]??-1}},jm=(i,t)=>{let e=K(i.sampleTimingEntries,t,y=>y.startIndex),r=i.sampleTimingEntries[e];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta,s=K(i.sampleCompositionTimeOffsets,t,y=>y.startIndex),o=i.sampleCompositionTimeOffsets[s];o&&t-o.startIndexy.startSampleIndex),l=i.sampleToChunk[u];h(l);let m=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=i.chunkOffsets[m],f=l.startSampleIndex+(m-l.startChunkIndex)*l.samplesPerChunk,p=0,b=d;if(i.sampleSizes.length===1)b+=c*(t-f),p+=c*l.samplesPerChunk;else for(let y=f;yy)!==-1:!0}},Xm=(i,t)=>{if(!i.keySampleIndices)return t+1;let e=K(i.keySampleIndices,t,r=>r);return i.keySampleIndices[e+1]??-1},ec=(i,t)=>{i.startTimestamp+=t,i.endTimestamp+=t;for(let e of i.samples)e.presentationTimestamp+=t;for(let e of i.presentationTimestamps)e.presentationTimestamp+=t},$m=i=>{let[t,e]=i,r=Math.atan2(e,t);return Number.isFinite(r)?r*(180/Math.PI):0},wl=i=>i.sampleSizes.length===0,Sl=i=>i.currentFragmentState?i.currentFragmentState.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:i.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null},Pl=async(i,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{h(e.sampleSizes);for(let o=0;o0?e.defaultSampleInfoSize:e.sampleSizes[o],u=new Uint8Array(16);a>0?u.set(B(n,a),0):u.set(t.defaultConstantIv,0);let l=null;if(c>a){let m=ue(n);l=[];for(let d=0;d{h(i.encryptionInfo);let n=i.encryptionInfo;h(n.defaultKid!==null);let a=n.defaultKid,s,o=i.demuxer.decryptionKeyCache.get(a);if(o)s=await o;else{if(!i.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=i.demuxer.psshBoxes;if(r){u=[...u,...r.psshBoxes].filter(m=>m.keyIds===null||m.keyIds.includes(a));for(let m=0;m{let n=new Uint8Array(16);n.set(e.iv,0);let a=await crypto.subtle.importKey("raw",i,{name:"AES-CTR"},!1,["decrypt"]),s=async p=>{let b=await crypto.subtle.decrypt({name:"AES-CTR",counter:n,length:64},a,p);return new Uint8Array(b)};if(!e.subsamples)return s(r);h(t.defaultCryptByteBlock!==null&&t.defaultSkipByteBlock!==null);let o=Cl(e.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock),c=0;for(let p of o)for(let b of p.perSubsample)c+=b.length;let u=new Uint8Array(c),l=0;for(let p of o)for(let b of p.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 p of o)for(let b of p.perSubsample)d.set(m.subarray(f,f+b.length),b.offset),f+=b.length;return d},Zm=(i,t,e,r)=>{let n=new An;n.init({key:i,iv:e.iv});let a=t.defaultCryptByteBlock,s=t.defaultSkipByteBlock;if(h(a!==null&&s!==null),!e.subsamples){let l=new Uint8Array(r),m=Math.floor(r.length/16);for(let d=0;d{let r=[],n=t!==0||e!==0,a=0;for(let s of i){a+=s.clearLen;let o=[];if(!n)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 Fi=class{constructor(t){this.value=t}},Mi=class{constructor(t){this.value=t}},Pn=class{constructor(t){this.value=t}},pt=class{constructor(t){this.value=t}};var Jm=[440786851,408125543],Bi=[290298740,357149030,524531317,374648427,475249515,423732329,272869232,307544935],Cn=[...Jm,...Bi],El=i=>i<256?1:i<65536?2:i<1<<24?3:i<2**32?4:i<2**40?5:6,vl=i=>i<1n<<8n?1:i<1n<<16n?2:i<1n<<24n?3:i<1n<<32n?4:i<1n<<40n?5:i<1n<<48n?6:i<1n<<56n?7:8,_l=i=>i>=-64&&i<64?1:i>=-8192&&i<8192?2:i>=-(1<<20)&&i<1<<20?3:i>=-(1<<27)&&i<1<<27?4:i>=-(2**34)&&i<2**34?5:6,ef=i=>{if(i<127)return 1;if(i<16383)return 2;if(i<(1<<21)-1)return 3;if(i<(1<<28)-1)return 4;if(i<2**35-1)return 5;if(i<2**42-1)return 6;throw new Error("EBML varint size not supported "+i)},Ja=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=El(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=vl(t)){let r=0;for(let n=e-1;n>=0;n--)this.helperView.setUint8(r++,Number(t>>BigInt(n*8)&0xffn));this.writer.write(this.helper.subarray(0,r))}writeSignedInt(t,e=_l(t)){t<0&&(t+=2**(e*8)),this.writeUnsignedInt(t,e)}writeVarInt(t,e=ef(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 n=this.writer.getPos();if(this.dataOffsets.set(t,n),this.writeEBML(t.data),t.size!==-1){let a=this.writer.getPos()-n,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??El(t.data);this.writeVarInt(e),this.writeUnsignedInt(t.data,e)}else if(typeof t.data=="bigint"){let e=t.size??vl(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 Fi)this.writeVarInt(4),this.writeFloat32(t.data.value);else if(t.data instanceof Mi)this.writeVarInt(8),this.writeFloat64(t.data.value);else if(t.data instanceof Pn){let e=t.size??_l(t.data.value);this.writeVarInt(e),this.writeSignedInt(t.data.value,e)}else if(t.data instanceof pt){let e=$.encode(t.data.value);this.writeVarInt(e.length),this.writer.write(e)}else ee(t.data)}},rc=8,Le=2,ht=2*rc,ic=i=>{if(i.remainingLength<1)return null;let t=U(i);if(i.skip(-1),t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;return i.remainingLength{if(i.remainingLength<1)return null;let t=U(i);if(t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;if(i.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=ic(i);return t===null||i.remainingLength{if(i.remainingLength<1)return null;if(U(i)===255)return;i.skip(-1);let e=Oi(i);if(e===null)return null;if(e!==72057594037927940)return e},gt=i=>{h(i.remainingLength>=Le);let t=es(i);if(t===null)return null;let e=nc(i);return e===null?null:{id:t,size:e}},Tr=(i,t)=>{let e=B(i,t),r=0;for(;r{let e=B(i,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?Fl(i):Za(i)},rs=async(i,t,e,r)=>{let n=new Set(e),a=t;for(;r===null||aa?r:a,found:!1}},ac=async(i,t,e,r)=>{let a=new Set(e),s=t;for(;s{let e=(i.hasVideo?"video/":i.hasAudio?"audio/":"application/")+(i.isWebM?"webm":"x-matroska");if(i.codecStrings.length>0){let r=[...new Set(i.codecStrings.filter(Boolean))];e+=`; codecs="${r.join(", ")}"`}return e};var sc=[{id:290298740,flag:"seekHeadSeen"},{id:357149030,flag:"infoSeen"},{id:374648427,flag:"tracksSeen"},{id:475249515,flag:"cuesSeen"}],Bl=10*2**20,ns=class extends ge{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(n=>n.getDecoderConfig().then(a=>a?.codec??null)));return is({isWebM:this.isWebM,hasVideo:this.segments.some(n=>n.tracks.some(a=>a.info?.type==="video")),hasAudio:this.segments.some(n=>n.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,Le,ht);if(r instanceof Promise&&(r=await r),!r)break;let n=gt(r);if(!n)break;let a=n.id,s=n.size,o=r.filePos;if(a===440786851){Zt(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 rs(this.reader,o,Cn,this.reader.fileSize)).pos-o);let c=Y(this.segments);c&&(c.elementEndPos=o+s)}Zt(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 n=e;for(;this.currentSegment.elementEndPos===null||nb.id===m);if(p!==-1){let b=sc[p].flag;this.currentSegment[b]=!0,Zt(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,Zt(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;n=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=sc.find(b=>b.id===c.id);if(!u||this.currentSegment[u.flag])continue;let l=this.reader.requestSliceRange(e+c.segmentPosition,Le,ht);if(l instanceof Promise&&(l=await l),!l)continue;let m=gt(l);if(!m)continue;let{id:d,size:f}=m;if(d!==u.id)continue;Zt(f),this.currentSegment[u.flag]=!0;let p=this.reader.requestSlice(l.filePos,f);p instanceof Promise&&(p=await p),p&&this.readContiguousElements(p)}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 n=this.reader.requestSliceRange(e,Le,ht);n instanceof Promise&&(n=await n),h(n);let a=e,s=gt(n);h(s);let o=s.id;h(o===524531317);let c=s.size,u=n.filePos;c===void 0&&(c=(await rs(this.reader,u,Cn,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,Cn);m.elementEndPos=d}for(let[,d]of m.trackData){let f=d.track;h(d.blocks.length>0);let p=!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[Y(d.presentationTimestamps).blockIndex];d.startTimestamp=b.timestamp,d.endTimestamp=g.timestamp+g.duration;let y=K(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 n=e.trackData.get(r);if(!n){let a=e.segment.tracks.find(s=>s.id===r);if(!a)return null;n={track:a,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(r,n)}return n}expandLacedBlocks(e,r){for(let n=0;n=Le;){let n=e.filePos;if(!this.traverseElement(e,r))return n}return e.filePos}traverseElement(e,r){let n=gt(e);if(!n||r&&r.includes(n.id))return!1;let{id:a,size:s}=n,o=e.filePos;switch(Zt(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=G(e,s)}break;case 21420:{let c=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!c)break;c.segmentPosition=G(e,s)}break;case 2807729:{if(!this.currentSegment)break;this.currentSegment.timestampScale=G(e,s),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale}break;case 17545:{if(!this.currentSegment)break;this.currentSegment.duration=ts(e,s)}break;case 174:{if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...we,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)&&(V._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))}if(this.currentTrack.codecId===Fe.avc)this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(this.currentTrack.codecId===Fe.hevc)this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate;else if(u===Fe.vp8)this.currentTrack.info.codec="vp8";else if(u===Fe.vp9)this.currentTrack.info.codec="vp9";else if(u===Fe.av1)this.currentTrack.info.codec="av1";else if(u===Fe.prores){let m=this.currentTrack.codecPrivate?me.decode(this.currentTrack.codecPrivate):"";Gt.includes(m)&&(this.currentTrack.info.codec="prores",this.currentTrack.info.proresFormat=m)}let l=this.currentTrack;this.currentTrack.trackBacking=new oc(l),this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type==="audio"){u===Fe.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===Fe.mp3?this.currentTrack.info.codec="mp3":u===Fe.opus?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=ct):u===Fe.vorbis?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Fe.flac?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Fe.ac3?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Fe.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 cc(l),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null}break;case 215:{if(!this.currentTrack)break;this.currentTrack.id=G(e,s)}break;case 131:{if(!this.currentTrack)break;let c=G(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,proresFormat:null}: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;G(e,s)||(this.currentTrack=null)}break;case 136:{if(!this.currentTrack)break;this.currentTrack.disposition.default=!!G(e,s)}break;case 21930:{if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!G(e,s)}break;case 21934:{if(!this.currentTrack)break;this.currentTrack.disposition.original=!!G(e,s)}break;case 21931:{if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!G(e,s)}break;case 21932:{if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!G(e,s)}break;case 21935:{if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!G(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=G(e,s)}break;case 21358:{if(!this.currentTrack)break;this.currentTrack.name=Di(e,s)}break;case 2274716:{if(!this.currentTrack||this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Tr(e,s),Nt(this.currentTrack.languageCode)||(this.currentTrack.languageCode=te)}break;case 2274717:{if(!this.currentTrack)break;let u=Tr(e,s).split("-")[0];u?this.currentTrack.languageCode=u:this.currentTrack.languageCode=te,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=G(e,s)}break;case 186:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.height=G(e,s)}break;case 21680:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayWidth=G(e,s)}break;case 21690:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayHeight=G(e,s)}break;case 21682:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.displayUnit=G(e,s)}break;case 21440:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.alphaMode=G(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=G(e,s),u=Lr[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=G(e,s)===2}break;case 21946:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=G(e,s),u=Nr[c]??null;this.currentTrack.info.colorSpace.transfer=u}break;case 21947:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=G(e,s),u=zr[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=-ts(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=ts(e,s)}break;case 159:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.numberOfChannels=G(e,s)}break;case 25188:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.bitDepth=G(e,s)}break;case 187:{if(!this.currentSegment)break;this.readContiguousElements(e.slice(o,s)),this.currentCueTime=null}break;case 179:this.currentCueTime=G(e,s);break;case 183:{if(this.currentCueTime===null)break;h(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=G(e,s)}break;case 241:{let c=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!c)break;h(this.currentSegment),c.clusterPosition=this.currentSegment.dataStartPos+G(e,s)}break;case 231:{if(!this.currentCluster)break;this.currentCluster.timestamp=G(e,s)}break;case 163:{if(!this.currentCluster)break;let c=Oi(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let l=xn(e),m=U(e),d=m>>1&3,f=!!(m&128);u.track.info?.type==="audio"&&u.track.info.codec&&(f=!0);let p=B(e,s-(e.filePos-o)),b=u.track.decodingInstructions.length>0;u.blocks.push({timestamp:l,duration:0,isKeyFrame:f,data:p,lacing:d,decoded:!b,postProcessed:!1,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=Oi(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let l=xn(e),d=U(e)>>1&3,f=B(e,s-(e.filePos-o)),p=u.track.decodingInstructions.length>0;this.currentBlock={timestamp:l,duration:0,isKeyFrame:!0,data:f,lacing:d,decoded:!p,postProcessed:!1,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=G(e,s)}break;case 155:{if(!this.currentBlock)break;this.currentBlock.duration=G(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:G(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=Di(e,s);break;case 17543:{if(!this.currentSimpleTagName)break;let c=Di(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 Ht(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=Rl(e,s)}break;case 18030:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=Di(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=Di(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=G(e,s)}break;case 20530:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=G(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=G(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){h(e.decodingInstructions.length>0);let n=r;for(let a of e.decodingInstructions)switch(h(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+n.length);o.set(s,0),o.set(n,s.length),n=o}break;default:}break;default:}return n}processTagValue(e,r){if(!this.currentSegment?.metadataTags)return;let n=this.currentSegment.metadataTags;if(n.raw??={},n.raw[e]??=r,typeof r=="string")switch(e.toLowerCase()){case"title":n.title??=r;break;case"description":n.description??=r;break;case"artist":n.artist??=r;break;case"album":n.album??=r;break;case"album_artist":n.albumArtist??=r;break;case"genre":n.genre??=r;break;case"comment":n.comment??=r;break;case"lyrics":n.lyrics??=r;break;case"date":{let a=new Date(r);Number.isNaN(a.getTime())||(n.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&&(n.trackNumber??=s),o&&Number.isInteger(o)&&o>0&&(n.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&&(n.discNumber??=s),o&&Number.isInteger(o)&&o>0&&(n.discsTotal??=o)}break}}},as=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 n of t.segments)for(let a of n.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}getUnixTimeForTimestamp(){return null}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 zt(t*this.internalTrack.segment.timestampFactor)}async getPacket(t,e){let r=this.intoTimescale(t);return this.performClusterLookup(null,n=>{let a=n.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=K(a.presentationTimestamps,r,u=>u.timestamp),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(n===r.cluster){let a=n.trackData.get(this.internalTrack.id);if(r.blockIndex+1{let a=n.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=ur(a.presentationTimestamps,u=>a.blocks[u.blockIndex].isKeyFrame&&u.timestamp<=r),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(n===r.cluster){let s=n.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=n.trackData.get(this.internalTrack.id);if(a&&a.firstKeyFrameTimestamp!==null){let s=a.blocks.findIndex(o=>o.isKeyFrame);return h(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];if(h(a),a.decoded||(a.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,a.data),a.decoded=!0),!a.postProcessed){if(this.internalTrack.info?.codec==="prores"&&!(a.data.length>=8&&a.data[4]===105&&a.data[5]===99&&a.data[6]===112&&a.data[7]===102)){let d=new Uint8Array(a.data.length+8);N(d).setUint32(0,d.length,!1),d[4]=105,d[5]=99,d[6]=112,d[7]=102,d.set(a.data,8),a.data=d}a.postProcessed=!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 j(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,n,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=K(this.internalTrack.cuePoints,r,y=>y.time),d=m!==-1?this.internalTrack.cuePoints[m]:null,f=K(this.internalTrack.clusterPositionCache,r,y=>y.startTimestamp),p=f!==-1?this.internalTrack.clusterPositionCache[f]:null,b=Math.max(d?.clusterPosition??0,p?.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-Le;){if(c){let x=c.trackData.get(this.internalTrack.id);if(x&&x.startTimestamp>n)break}let y=s.reader.requestSliceRange(g,Le,ht);if(y instanceof Promise&&(y=await y),!y)break;let k=g,T=gt(y);if(!T||!Bi.includes(T.id)&&T.id!==236){let x=await ac(s.reader,k,Bi,Math.min(o.elementEndPos??1/0,k+Bl));if(x){g=x;continue}else break}let w=T.id,S=T.size,P=y.filePos;if(w===524531317){c=await s.readCluster(k,o),S=c.elementEndPos-P;let{blockIndex:x,correctBlockFound:A}=e(c);if(A)return this.fetchPacketInCluster(c,x,a);x!==-1&&(u=c,l=x)}S===void 0&&(h(w!==524531317),S=(await rs(s.reader,P,Cn,o.elementEndPos)).pos-P);let C=P+S;if(o.elementEndPos===null){let x=s.reader.requestSliceRange(C,Le,ht);if(x instanceof Promise&&(x=await x),!x)break;if(es(x)===408125543){o.elementEndPos=C;break}}g=C}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 n={codec:Ai({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?Ci(e.data):null,hevcCodecInfo:this.internalTrack.info.codec==="hevc"&&e?Ii(e.data):null,vp9CodecInfo:this.internalTrack.info.codec==="vp9"&&e?Da(e.data):null,av1CodecInfo:this.internalTrack.info.codec==="av1"&&e?Va(e.data):null,proresFormat:this.internalTrack.info.proresFormat}),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)&&(n.displayAspectWidth=this.internalTrack.info.squarePixelWidth,n.displayAspectHeight=this.internalTrack.info.squarePixelHeight),n})():null}},cc=class extends as{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:xi({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 In=async(i,t,e,r=null)=>{let a=t;for(;e===null||a=4;){let c=o.filePos,u=F(o),l=i.fileSize!==null?i.fileSize-a:null,m=$r(u,l);if(m.header&&(!r||m.header.sampleRate===r.sampleRate&&m.header.mpegVersionId===r.mpegVersionId&&m.header.layer===r.layer&&hr(m.header.channel)===hr(r.channel)))return{header:m.header,startPos:a};o.filePos=c+m.bytesAdvanced,a=o.filePos}}return null};var ss=class extends ge{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 _e;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 uc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let c=this.reader.requestSlice(this.lastLoadedPos,Ie);if(c instanceof Promise&&(c=await c),!c){this.lastSampleLoaded=!0;return}let u=We(c);if(!u)break;this.lastLoadedPos=c.filePos+u.size}let e=await In(this.reader,this.lastLoadedPos,this.reader.fileSize,this.firstFrameHeader);if(!e){this.lastSampleLoaded=!0;return}let r=e.header;this.lastLoadedPos=e.startPos+r.totalSize-1;let n=pr(r.mpegVersionId,r.channel),a=this.reader.requestSlice(e.startPos+n,4);if(a instanceof Promise&&(a=await a),a){let c=F(a);if(c===fr||c===Pi){if(!this.xingData){let l=this.reader.requestSlice(e.startPos+n+4,12);if(l instanceof Promise&&(l=await l),l){let m=B(l,12),d=N(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);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,n=!1;for(;;){let a=this.reader.requestSlice(r,Ie);if(a instanceof Promise&&(a=await a),!a)break;let s=We(a);if(!s)break;n=!0;let o=this.reader.requestSlice(a.filePos,s.size);if(o instanceof Promise&&(o=await o),!o)break;wr(o,s,this.metadataTags),r=a.filePos+s.size}if(!n&&this.reader.fileSize!==null&&this.reader.fileSize>=En){let a=this.reader.requestSlice(this.reader.fileSize-En,En);a instanceof Promise&&(a=await a),h(a),ae(a,3)==="TAG"&&Ol(a,this.metadataTags)}return this.metadataTags}finally{e()}}},uc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return h(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let t=this.demuxer;if(h(t.firstFrameHeader!==null),h(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=rl(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 te}getCodec(){return"mp3"}getInternalCodecId(){return null}getNumberOfChannels(){return h(this.demuxer.firstFrameHeader),hr(this.demuxer.firstFrameHeader.channel)}getSampleRate(){return h(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...we}}async getDecoderConfig(){return h(this.demuxer.firstFrameHeader),{codec:"mp3",numberOfChannels:hr(this.demuxer.firstFrameHeader.channel),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 n;if(e.metadataOnly)n=pe;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;n=B(a,r.dataSize)}return new j(n,"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 n=Ut(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(n===-1)throw new Error("Packet was not created from this track.");let a=n+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 n=K(this.demuxer.loadedSamples,t,a=>a.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(n,e);if(n>=0&&n+1>>0&4294967295}var os=i=>{let t=N(i),e=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^a])>>>0}return t.setUint32(22,e,!0),r},cs=(i,t,e)=>{let r=0,n=null;if(i.length>0)if(t.codec==="vorbis"){h(t.vorbisInfo);let a=t.vorbisInfo.modeBlockflags.length,o=(1<>1;if(c>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let u=e,l=t.vorbisInfo.modeBlockflags[c];if(n=t.vorbisInfo.blocksizes[l],l===1){let m=(o|1)+1,d=i[0]&m?1:0;u=t.vorbisInfo.blocksizes[d]}r=u!==null?u+n>>2:0}else t.codec==="opus"&&(r=fl(i).durationInSamples);return{durationInSamples:r,vorbisBlockSize:n}},us=i=>{let t="audio/ogg";if(i.codecStrings){let e=[...new Set(i.codecStrings)];t+=`; codecs="${e.join(", ")}"`}return t};var Sr=27,Jr=282,ls=Jr+255*255,Vi=i=>{let t=i.filePos;if(Zr(i)!==vn)return null;i.skip(1);let r=U(i),n=Ul(i),a=Zr(i),s=Zr(i),o=Zr(i),c=U(i),u=new Uint8Array(c);for(let f=0;ff+p,0),d=l+m;return{headerStartPos:t,totalSize:d,dataStartPos:t+l,dataSize:m,headerType:r,granulePosition:n,serialNumber:a,sequenceNumber:s,checksum:o,lacingValues:u}},Vl=(i,t)=>{for(;i.filePos>>8&255,a=e>>>16&255,s=e>>>24&255,o=79;if(!(r!==o&&n!==o&&a!==o&&s!==o)){if(i.skip(-4),e===vn)return!0;i.skip(1)}}return!1};var ds=class extends ge{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,Sr,Jr);if(r instanceof Promise&&(r=await r),!r)break;let n=Vi(r);if(!n||!!!(n.headerType&2))break;this.bitstreams.push({serialNumber:n.serialNumber,bosPage:n,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=n.headerStartPos+n.totalSize}for(let r of this.bitstreams){let n=await this.readPacket(r.bosPage,0);n&&(n.data.byteLength>=7&&n.data[0]===1&&n.data[1]===118&&n.data[2]===111&&n.data[3]===114&&n.data[4]===98&&n.data[5]===105&&n.data[6]===115?await this.readVorbisMetadata(n,r):n.data.byteLength>=8&&n.data[0]===79&&n.data[1]===112&&n.data[2]===117&&n.data[3]===115&&n.data[4]===72&&n.data[5]===101&&n.data[6]===97&&n.data[7]===100&&await this.readOpusMetadata(n,r),r.codecInfo.codec!==null&&this.trackBackings.push(new lc(r,this)))}})()}async readVorbisMetadata(e,r){let n=await this.findNextPacketStart(e);if(!n)return;let a=await this.readPacket(n.startPage,n.startSegmentIndex);if(!a||(n=await this.findNextPacketStart(a),!n))return;let s=await this.readPacket(n.startPage,n.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=N(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:Ua(s.data).modeBlockflags},yn(a.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,r){let n=await this.findNextPacketStart(e);if(!n)return;let a=await this.readPacket(n.startPage,n.startSegmentIndex);if(!a)return;r.codecInfo.codec="opus",r.description=e.data,r.lastMetadataPacket=a;let s=br(e.data);r.numberOfChannels=s.outputChannelCount,r.sampleRate=ct,r.codecInfo.opusInfo={preSkip:s.preSkip},yn(a.data.subarray(8),this.metadataTags)}async readPacket(e,r){h(rd+f.length,0);if(u===0)return null;let l=new Uint8Array(u),m=0;for(let d=0;dr.getDecoderConfig().then(n=>n?.codec??null)));return us({codecStrings:e.filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},lc=class{constructor(t,e){this.bitstream=t;this.demuxer=e;this.encodedPacketToMetadata=new WeakMap;this.sequentialScanCache=[];this.sequentialScanMutex=new _e;this.internalSampleRate=t.codecInfo.codec==="opus"?ct:t.sampleRate}getType(){return"audio"}getId(){return this.bitstream.serialNumber}getNumber(){let t=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return h(t!==-1),t+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return h(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 te}getDisposition(){return{...we,primary:!1}}granulePositionToTimestampInSamples(t){return this.bitstream.codecInfo.codec==="opus"?(h(this.bitstream.codecInfo.opusInfo),t-this.bitstream.codecInfo.opusInfo.preSkip):t}createEncodedPacketFromOggPacket(t,e,r){if(!t)return null;let{durationInSamples:n,vorbisBlockSize:a}=cs(t.data,this.bitstream.codecInfo,e.vorbisLastBlocksize),s=new j(r.metadataOnly?pe:t.data,"key",Math.max(0,e.timestampInSamples)/this.internalSampleRate,n/this.internalSampleRate,t.endPage.headerStartPos+t.endSegmentIndex,t.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:t,timestampInSamples:e.timestampInSamples,durationInSamples:n,vorbisLastBlockSize:e.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(t){h(this.bitstream.lastMetadataPacket);let e=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!e)return null;let r=0;this.bitstream.codecInfo.codec==="opus"&&(h(this.bitstream.codecInfo.opusInfo),r-=this.bitstream.codecInfo.opusInfo.preSkip);let n=await this.demuxer.readPacket(e.startPage,e.startSegmentIndex);return this.createEncodedPacketFromOggPacket(n,{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 n=await this.demuxer.findNextPacketStart(r.packet);if(!n)return null;let a=r.timestampInSamples+r.durationInSamples,s=await this.demuxer.readPacket(n.startPage,n.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=zt(t*this.internalSampleRate);if(r===0)return this.getFirstPacket(e);if(r<0)return null;h(this.bitstream.lastMetadataPacket);let n=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!n)return null;let a=n.startPage,s=this.demuxer.reader.fileSize,o=[a];e:for(;a.headerStartPos+a.totalSizer?s=A.headerStartPos:(a=A,o.push(A));continue e}}let c=n.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,Sr,Jr);T instanceof Promise&&(T=await T),h(T);let w=Vi(T);h(w),u=w,u.serialNumber===this.bitstream.serialNumber&&l.push(u)}h(u.granulePosition!==-1);let m=null,d,f,p=u,b=0;if(u.headerStartPos===n.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:p,endSegmentIndex:b};if(await this.demuxer.findNextPacketStart(k)){let w=Nl(l,u,m);h(w);let S=zl(l,w.page,w.segmentIndex);S&&(u=S.page,m=S.segmentIndex)}else for(;;){let w=Nl(l,u,m);if(!w)break;let S=zl(l,w.page,w.segmentIndex);if(!S)break;if(u=S.page,m=S.segmentIndex,w.page.headerStartPos!==p.headerStartPos){p=w.page,b=w.segmentIndex;break}}}let g=null,y=null;for(;u!==null;){h(m!==null);let k=await this.demuxer.readPacket(u,m);if(!k)break;if(!(u.headerStartPos===n.startPage.headerStartPos&&mr||Math.max(P.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 n=zt(t*this.internalSampleRate);t=n/this.internalSampleRate;let a=K(this.sequentialScanCache,n,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);h(u),this.sequentialScanCache.length>0&&h(Y(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)}},zl=(i,t,e)=>{let r=t,n=e;e:for(;;){for(n--,n;n>=0;n--)if(r.lacingValues[n]<255){n++;break e}if(h(n===-1),!(r.headerType&1)){n=0;break}let s=qo(i,o=>o.headerStartPos{if(e>0)return{page:t,segmentIndex:e-1};let r=qo(i,n=>n.headerStartPos{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),h(e);let r=ae(e,4),n=r!=="RIFX",a=r==="RF64",s=er(e,n),o=a?this.reader.fileSize:Math.min(s+8,this.reader.fileSize??1/0);if(ae(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=zi(a,n),d=r-18;if(Math.min(d,m)>=22&&s===65534){a.skip(6);let p=B(a,16);s=p[0]|p[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,n){let a=this.reader.requestSlice(e,r);if(a instanceof Promise&&(a=await a),!a)return;let s=ae(a,4);if(s!=="INFO"&&s!=="INF0")return;let o=a.filePos;for(;o<=e+r-8;){a.filePos=o;let c=ae(a,4),u=er(a,n),l=B(a,u),m=0;for(let f=0;f0&&(this.metadataTags.trackNumber??=p),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 n=this.reader.requestSlice(e,r);if(n instanceof Promise&&(n=await n),!n)return;let a=We(n);if(a){let s=r-Ie;if(a.size=Math.min(a.size,s),a.size>0){let o=n.slice(e+Ie,a.size);wr(o,a,this.metadataTags)}}}getCodec(){if(h(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}},Ui=2048,dc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){let t=this.demuxer.getCodec();return t?(h(this.demuxer.audioInfo),{codec:t,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return h(this.demuxer.dataSize!==-1),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return te}getDisposition(){return{...we}}async getPacketAtIndex(t,e){h(t>=0),h(this.demuxer.audioInfo);let r=t*Ui*this.demuxer.audioInfo.blockSizeInBytes;if(r>=this.demuxer.dataSize)return null;let n=Math.min(Ui*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-r);if(this.demuxer.reader.fileSize===null){let c=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,n);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,n);c instanceof Promise&&(c=await c),h(c),a=B(c,n)}let s=t*Ui/this.demuxer.audioInfo.sampleRate,o=n/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(t,this.demuxer.lastKnownPacketIndex),new j(a,"key",s,o,t,n)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getPacket(t,e){h(this.demuxer.audioInfo);let r=Math.floor(Math.min(t*this.demuxer.audioInfo.sampleRate/Ui,(this.demuxer.dataSize-1)/(Ui*this.demuxer.audioInfo.blockSizeInBytes)));if(r<0)return null;let n=await this.getPacketAtIndex(r,e);if(n)return n;if(r===0)return null;h(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){h(this.demuxer.audioInfo);let r=Math.round(t.timestamp*this.demuxer.audioInfo.sampleRate/Ui);return this.getPacketAtIndex(r+1,e)}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}};var tr=7,je=9,He=i=>{let t=i.filePos,e=B(i,9),r=new q(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?i.filePos-=2:d=r.readBits(16),{objectType:o,samplingFrequencyIndex:c,channelConfiguration:u,frameLength:l,numberOfAacFrames:m,crcCheck:d,startPos:t}};var _n=1024,fs=class extends ge{constructor(e){super(e);this.metadataPromise=null;this.firstFrameHeader=null;this.loadedSamples=[];this.metadataTags=null;this.trackBackings=[];this.readingMutex=new _e;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();h(this.firstFrameHeader),this.trackBackings=[new fc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let o=this.reader.requestSlice(this.lastLoadedPos,Ie);if(o instanceof Promise&&(o=await o),!o){this.lastSampleLoaded=!0;return}let c=We(o);if(!c)break;this.lastLoadedPos=o.filePos+c.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,tr,je);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let r=He(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 n=Xe[r.samplingFrequencyIndex];h(n!==void 0);let a=_n/n,s={timestamp:this.nextTimestampInSamples/n,duration:a,dataStart:r.startPos,dataSize:r.frameLength};this.loadedSamples.push(s),this.nextTimestampInSamples+=_n,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 n=this.reader.requestSlice(r,Ie);if(n instanceof Promise&&(n=await n),!n)break;let a=We(n);if(!a)break;let s=this.reader.requestSlice(n.filePos,a.size);if(s instanceof Promise&&(s=await s),!s)break;wr(s,a,this.metadataTags),r=n.filePos+a.size}return this.metadataTags}finally{e()}}},fc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/_n}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return te}getCodec(){return"aac"}getInternalCodecId(){return h(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){h(this.demuxer.firstFrameHeader);let t=xt[this.demuxer.firstFrameHeader.channelConfiguration];return h(t!==void 0),t}getSampleRate(){h(this.demuxer.firstFrameHeader);let t=Xe[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return h(t!==void 0),t}getDisposition(){return{...we}}async getDecoderConfig(){return h(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 n;if(e.metadataOnly)n=pe;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;n=B(a,r.dataSize)}return new j(n,"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 n=Ut(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(n===-1)throw new Error("Packet was not created from this track.");let a=n+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 n=K(this.demuxer.loadedSamples,t,a=>a.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(n,e);if(n>=0&&n+1i===0?null:i===1?192:i>=2&&i<=5?144*2**i:i===6?"uncommon-u8":i===7?"uncommon-u16":i>=8&&i<=15?2**i:null,Ll=(i,t)=>{switch(i){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}},hs=i=>{let t=0,e=new q(B(i,1));for(;e.readBits(1)===1;)t++;if(t===0)return e.readBits(7);let r=[],n=t-1,a=new q(B(i,n)),s=8-t-1;for(let c=0;cc|u<{if(t==="uncommon-u16")return ue(i)+1;if(t==="uncommon-u8")return U(i)+1;if(typeof t=="number")return t;ee(t),h(!1)},Wl=(i,t)=>t==="uncommon-u16"?ue(i):t==="uncommon-u16-10"?ue(i)*10:t==="uncommon-u8"?U(i):typeof t=="number"?t:null,Hl=i=>{let e=0;for(let r of i){e^=r;for(let n=0;n<8;n++)(e&128)!==0?e=e<<1^7:e<<=1,e&=255}return e};var bs=class extends ge{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 _e;this.lastSampleLoaded=!1;this.reader=e._reader}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTrackBackings(){return await this.readMetadata(),h(this.trackBacking),[this.trackBacking]}async getMimeType(){return"audio/flac"}async readMetadata(){return this.metadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSlice(e,Ie);if(r instanceof Promise&&(r=await r),!r){this.lastSampleLoaded=!0;return}let n=We(r);if(!n)break;let a=this.reader.requestSlice(r.filePos,n.size);a instanceof Promise&&(a=await a),h(a),wr(a,n,this.metadataTags),e=r.filePos+n.size}for(e+=4;this.reader.fileSize===null||em.end-n)return{num:d.num,blockSize:d.blockSize,sampleRate:d.sampleRate,size:m.end-e,isLastFrame:!0};if(U(m)===255){let p=m.filePos,b=U(m),g=this.blockingBit===1?249:248;if(b!==g){m.filePos=p;continue}m.skip(-2);let y=m.filePos-e,k=this.readFlacFrameHeader({slice:m,isFirstPacket:!1});if(!k){m.filePos=p;continue}if(this.blockingBit===0){if(k.num-d.num!==1){m.filePos=p;continue}}else if(k.num-d.num!==d.blockSize){m.filePos=p;continue}return{num:d.num,blockSize:d.blockSize,sampleRate:d.sampleRate,size:y,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:r}){let n=e.filePos,a=B(e,4),s=new q(a);if(s.readBits(15)!==32764)return null;if(this.blockingBit===null){h(r);let y=s.readBits(1);this.blockingBit=y}else if(this.blockingBit===1){if(h(!r),s.readBits(1)!==1)return null}else if(this.blockingBit===0){if(h(!r),s.readBits(1)!==0)return null}else throw new Error("Invalid blocking bit");let c=ps(s.readBits(4));if(!c)return null;h(this.audioInfo);let u=Ll(s.readBits(4),this.audioInfo.sampleRate);if(!u||(s.readBits(4),s.readBits(3),s.readBits(1)!==0))return null;let m=hs(e),d=gs(e,c),f=Wl(e,u);if(f===null||f!==this.audioInfo.sampleRate)return null;let p=e.filePos-n,b=U(e);e.skip(-p),e.skip(-1);let g=Hl(B(e,p));return b!==g?null:{num:m,blockSize:d,sampleRate:f}}async advanceReader(){await this.readMetadata(),h(this.lastLoadedPos!==null),h(this.audioInfo);let e=this.lastLoadedPos,r=await this.readNextFlacFrame({startPos:e,isFirstPacket:this.loadedSamples.length===0});if(!r){this.lastSampleLoaded=!0;return}let n=this.loadedSamples[this.loadedSamples.length-1],s={blockOffset:n?n.blockOffset+n.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}}},pc=class{constructor(t){this.demuxer=t}getType(){return"audio"}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return te}getTimeResolution(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return h(this.demuxer.audioInfo),this.demuxer.audioInfo.totalSamples===0?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...we}}async getDecoderConfig(){return h(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(h(this.demuxer.audioInfo),t<0)return null;let r=await this.demuxer.readingMutex.acquire();try{for(;;){let n=K(this.demuxer.loadedSamples,t,c=>c.blockOffset/this.demuxer.audioInfo.sampleRate);if(n===-1){await this.demuxer.advanceReader();continue}let a=this.demuxer.loadedSamples[n],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(n,e)}}finally{r()}}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let n=t.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&n>=this.demuxer.loadedSamples.length)return null;for(;n>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(n,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 n;if(e.metadataOnly)n=pe;else{let o=this.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(o instanceof Promise&&(o=await o),!o)return null;n=B(o,r.byteSize)}h(this.demuxer.audioInfo);let a=r.blockOffset/this.demuxer.audioInfo.sampleRate,s=r.blockSize/this.demuxer.audioInfo.sampleRate;return new j(n,"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 ys=i=>{let t="video/MP2T",e=[...new Set(i.filter(Boolean))];return e.length>0&&(t+=`; codecs="${e.join(", ")}"`),t};var Ql="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.",ql=new Set,ks=class extends ge{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),h(r);let n=B(r,e);if(n[0]===71&&n[188]===71)this.packetOffset=0,this.packetStride=188;else if(n[0]===71&&n[204]===71)this.packetOffset=0,this.packetStride=204;else if(n[4]===71&&n[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}if(u&&!this.elementaryStreams.some(g=>g.pid===l.pid)){s+=this.packetStride;continue}let m=await this.readSection(s,!0,!u);if(!m)break;let d=3,f=32,p=!1;if(!u&&m.pid!==0&&!(m.payload[0]===0&&m.payload[1]===0&&m.payload[2]===1)){let y=new q(m.payload),k=y.readAlignedByte();y.skipBits(8*k),p=y.readBits(8)===2}if(m.pid===0&&!c){let g=new q(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||p)&&!u){let g=new q(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 P=g.readBits(13);g.skipBits(6);let C=g.readBits(10),x=g.pos+8*C,A=!1,I=!1;for(;g.posy.pid===m.pid);e:if(g&&!g.initialized){let y=Ni(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 ti(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=Ci(k.suppliedPacket.data),!g.info.avcCodecInfo)continue;let w=g.info.avcCodecInfo.sequenceParameterSets[0];h(w);let S=bn(w);g.info.width=S.displayWidth,g.info.height=S.displayHeight;let P=S.pixelAspectRatio.num,C=S.pixelAspectRatio.den;P>0&&C>0&&(P>C?(g.info.squarePixelWidth=Math.round(g.info.width*P/C),g.info.squarePixelHeight=g.info.height):(g.info.squarePixelWidth=g.info.width,g.info.squarePixelHeight=Math.round(g.info.height*C/P))),g.info.colorSpace={primaries:zr[S.colourPrimaries],transfer:Nr[S.transferCharacteristics],matrix:Lr[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=Ii(k.suppliedPacket.data),!g.info.hevcCodecInfo)continue;let S=g.info.hevcCodecInfo.arrays.find(C=>C.nalUnitType===33).nalUnits[0];h(S);let P=Zo(S);g.info.width=P.displayWidth,g.info.height=P.displayHeight,P.pixelAspectRatio.num>P.pixelAspectRatio.den?(g.info.squarePixelWidth=Math.round(g.info.width*P.pixelAspectRatio.num/P.pixelAspectRatio.den),g.info.squarePixelHeight=g.info.height):(g.info.squarePixelWidth=g.info.width,g.info.squarePixelHeight=Math.round(g.info.height*P.pixelAspectRatio.den/P.pixelAspectRatio.num)),g.info.colorSpace={primaries:zr[P.colourPrimaries],transfer:Nr[P.transferCharacteristics],matrix:Lr[P.matrixCoefficients],fullRange:!!P.fullRangeFlag},g.info.reorderSize=P.maxDecFrameBuffering;break}else throw new Error("Unhandled.")}g.info.decoderConfig={codec:Ai({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,proresFormat: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=be.tempFromBytes(k.suppliedPacket.data),w=He(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=xt[w.channelConfiguration],g.info.sampleRate=Xe[w.samplingFrequencyIndex]}else if(g.info.codec==="mp3"){let T=F(be.tempFromBytes(k.suppliedPacket.data)),w=$r(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=hr(w.header.channel),g.info.sampleRate=w.header.sampleRate}else if(g.info.codec==="ac3"){let T=za(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=Tn[T.acmod]+T.lfeon,g.info.sampleRate=Yr[T.fscod]}else if(g.info.codec==="eac3"){let T=Na(k.suppliedPacket.data);if(!T)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");let w=La(T);if(w===null)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");g.info.numberOfChannels=Wa(T),g.info.sampleRate=w}else throw new Error("Unhandled.");g.info.decoderConfig={codec:xi({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 hc(l)):this.trackBackingEntries.push(new gc(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(n=>n?.codec??null)));return ys(e)}async readSection(e,r,n=!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(n)break;continue}if(f.payloadUnitStartIndicator===1)break}else{if(f.payloadUnitStartIndicator===0)break;u=f}let p=!!(f.adaptationFieldControl&2),b=!!(f.adaptationFieldControl&1),g=0;if(p&&(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(Ut(this.sectionEndPositions,a,k=>k)!==-1){l=!1;break}}if(l){let f=K(this.sectionEndPositions,a,p=>p);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 p=0;for(let b of o)d.set(b,p),p+=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(U(r)!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let a=ue(r),s=a>>15,o=a>>14&1,c=a>>13&1,u=a&8191,l=U(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 n=B(r,188);if(n[0]!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let s=(n[1]<<8)+n[2],o=s>>15,c=s>>14&1,u=s>>13&1,l=s&8191,m=n[3],d=m>>6,f=m>>4&3,p=m&15;return{payloadUnitStartIndicator:c,pid:l,adaptationFieldControl:f,body:n.subarray(4)}}},ei=(i,t)=>{if(i.payload.byteLength<3)return null;let e=new q(i.payload);if(e.readBits(24)!==1)return null;let n=e.readBits(8);if(e.skipBits(16),n===188||n===190||n===191||n===240||n===241||n===255||n===242||n===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(Ql);return{sectionStartPos:i.startPos,sectionEndPos:i.endPos,pts:s,randomAccessIndicator:i.randomAccessIndicator}},Ni=(i,t)=>{h(i.endPos!==null);let e=ei(i,t);if(!e)return null;let r=new q(i.payload);r.skipBits(32);let n=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;h(Number.isInteger(c));let u=i.payload.subarray(c,n>0?a+n:i.payload.byteLength);return{...e,data:u}},Ts=class i{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 n of t.trackBackingEntries)if(n.getType()===e&&r++,h(n instanceof i),n.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 te}getDisposition(){return{...we,primary:!1}}getTimeResolution(){return 9e4}isRelativeToUnixEpoch(){return!1}getUnixTimeForTimestamp(){return null}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(t,e,r){let n;return this.allPacketsAreKeyPackets()?n="key":n=t.randomAccessIndicator===1?"key":"delta",new j(r.metadataOnly?pe:t.data,n,t.pts/9e4,Math.max(e/9e4,0),t.sequenceNumber,t.data.byteLength)}async getFirstPacket(t){let e=this.elementaryStream.firstSection;h(e);let r=Ni(e,!0);h(r);let n=new ti(this.elementaryStream,r),a=new Rn(this,n),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 n=this.packetSectionStarts.get(t);if(n===void 0)throw new Error("Packet was not created from this track.");let s=await this.elementaryStream.demuxer.readSection(n,!0);h(s);let o=Ni(s,!0);h(o);let c=new ti(this.elementaryStream,o);r=new Rn(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 n=zt(t*9e4),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:o}=a,c=this.elementaryStream.pid,u=async(w,S,P)=>{let C=w;for(;Cw.pts),b=p!==-1?f[p]:null;if(b&&n-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 P=0,C=S-1;for(w=P;P<=C;){let x=Math.floor((P+C)/2),A=ka(x*o,a.packetStride)+m.sectionStartPos,I=A+o,E=await u(A,I,!1);if(!E){C=x-1;continue}E.pesPacketHeader.pts<=n?(w=x,P=x+1):C=x-1}}}d=ka(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 P=await a.readSection(w,!0);h(P);let C=Ni(P,!0);h(C);let x=new ti(this.elementaryStream,C),A=new Rn(this,x);for(;!((Y(A.presentationOrderPackets)?.pts??-1/0)>=n||!await A.readNextPacket()););let I=ur(A.presentationOrderPackets,S);if(I===-1)return null;let E=A.presentationOrderPackets[I],_=I===0?0:E.pts-A.presentationOrderPackets[I-1].pts;for(;A.decodeOrderPackets[0]!==E;)A.decodeOrderPackets.shift();A.lastDuration=_;let v=await A.readNext();h(v);let D=this.createEncodedPacket(v.packet,v.duration,r);return this.packetBuffers.set(D,A),this.packetSectionStarts.set(D,v.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 P=await a.readSection(w,!1);if(P){let C=ei(P,!1);if(C&&C.pts!==null){if(C.pts>n)break e;y=C,bc(this.elementaryStream,y);break}}}w+=a.packetStride}}e:for(let w=0;w=a.packetOffset;){let P=await a.readPacketHeader(S);if(!P)break e;if(P.pid===c&&P.payloadUnitStartIndicator===1){let C=await a.readSection(S,!1);if(C){let x=ei(C,!1);if(x&&x.pts!==null){y=x;break}}}S-=a.packetStride}}return T(y.sectionStartPos,w=>w.pts<=n)}else{let w=d,S=null,P=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let C=null,x=w<=m.sectionStartPos,A,I=null;if(x)A=m,I=l;else{let v=await u(w,s.fileSize??1/0,P);A=v?.pesPacketHeader??null,I=v?.section??null}let E=!1,_=0;e:for(;A&&!(S!==null&&A.sectionStartPos>=S);){if(A.pts<=n){let D;if(this.elementaryStream.canBeTrustedWithKeyPackets)D=A.randomAccessIndicator===1;else{h(I);let O=Ni(I,!0);h(O);let z=new ti(this.elementaryStream,O);await z.markNextPacket(),D=z.suppliedPacket?.randomAccessIndicator===1}D&&(C=A)}if(A.pts>n&&(E=!0),E&&(_++,_>k))break;let v=A.sectionStartPos+a.packetStride;for(;;){let D=await a.readPacketHeader(v);if(!D)break e;if(D.pid===c&&D.payloadUnitStartIndicator===1){let O=await a.readSection(v,P);if(O){let z=ei(O,!1);if(z&&z.pts!==null){A=z,I=O,bc(this.elementaryStream,A);break}}}v+=a.packetStride}}if(C){let v=C;if(_===0)e:for(let O=0;O=a.packetOffset;){let H=await a.readPacketHeader(z);if(!H)break e;if(H.pid===c&&H.payloadUnitStartIndicator===1){let ie=await a.readSection(z,P);if(ie){let Pe=ei(ie,!1);if(Pe&&Pe.pts!==null){v=Pe;break}}}z-=a.packetStride}}let D=await T(v.sectionStartPos,O=>O.pts<=n&&O.randomAccessIndicator===1);return h(D),D}if(x)return null;S=w,w=Math.max(ka(w-m.sectionStartPos-o,a.packetStride)+m.sectionStartPos,m.sectionStartPos)}}}},hc=class extends Ts{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 h(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}},gc=class extends Ts{getType(){return"audio"}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return h(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}},bc=(i,t)=>{let e=i.referencePesPackets,r=K(e,t.sectionStartPos,n=>n.sectionStartPos);if(r>=0){let n=e[r];if(t.pts<=n.pts)return!1;let a=i.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos=t?t:this.bufferData(t-e).then(()=>Math.min(this.endPos-this.currentPos,t))}getCurrentPesPacket(){let t=this.pesPackets[this.currentPesPacketIndex];return h(t),t}async bufferData(t){let e=this.endPos+t;for(;this.endPos=m)break;d=f;let p=u+d;if(d+3>=m){this.seekTo(p);break}let b=l[d+1],g=l[d+2],y=l[d+3],k=0;if(b===0&&g===0&&y===1?k=4:b===0&&g===1&&(k=3),k===0){d++;continue}let T=p;a??=T;let w=d+k,S=w+n,P=6;if(S+(e==="avc"?P:1)>m){this.seekTo(p);break}let x=l[w],A,I,E;if(e==="avc")A=Qt(x),I=A===1||A===2||A===5,E=A===6||A===7||A===8||A===9;else{if(A=ut(x),((x&1)<<5|l[w+1]>>3)>0){d+=k;continue}I=A<=9||A>=16&&A<=21,E=A>=32&&A<=37||A===39||A>=41&&A<=44||A>=48&&A<=55}let _=!1;if(I){let v;if(e==="avc"){let D=l.subarray(S,S+P),O=M(new q(D));v=!s||O<=o,o=O}else v=l[S]>>7===1;v&&(s?_=!0:s=!0)}else E&&s&&(_=!0);if(_){let v=T-a;return this.seekTo(a),this.supplyPacket(v,0)}d+=k}if(ca){let c=this.endPos-a;return this.seekTo(a),this.supplyPacket(c,0)}}else{let e=t.info.codec,r=128;for(;;){let n=this.ensureBuffered(r);n instanceof Promise&&(n=await n);let a=this.currentPos;for(;this.currentPos-a>6,m=u[4]&63;if(l===3||m>37){this.seekTo(o+1);continue}let d=pl[3*m+l];h(d!==void 0),this.seekTo(o),c=this.ensureBuffered(d),c instanceof Promise&&(c=await c);let f=Math.round(hl*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,p=Jo[f];this.seekTo(o),c=this.ensureBuffered(m),c instanceof Promise&&(c=await c);let b=p*256,g=Math.round(b*9e4/t.info.sampleRate);return this.supplyPacket(c,g)}else throw new Error("Unhandled.")}if(n=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);h(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 n=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(n))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(h(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 n=1;nt.pts-e.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}};var Ct="application/vnd.apple.mpegurl",yc="#EXT-X-STREAM-INF:",kc="#EXT-X-I-FRAME-STREAM-INF:",Tc="#EXT-X-MEDIA:",Fn="#EXTINF:",wc="#EXT-X-MAP:",Sc="#EXT-X-KEY:",Ac="#EXT-X-MEDIA-SEQUENCE:",xc="#EXT-X-BYTERANGE:",Pc="#EXT-X-PROGRAM-DATE-TIME:",jl="#EXT-X-DISCONTINUITY",Cc="#EXT-X-TARGETDURATION:",Xl="#EXT-X-ENDLIST",Ic="#EXT-X-PLAYLIST-TYPE:",$l="#EXT-X-I-FRAMES-ONLY",ws=i=>i.length===0||i.startsWith("#")&&!i.startsWith("#EXT"),rr=class{constructor(t){this._attributes={};let e="",r="",n=!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=Qr(t,n=>n.getType()==="video")+1;t.push(new xs(this,e,r))}else if(e.type==="audio"){let r=Qr(t,n=>n.getType()==="audio")+1;t.push(new Ps(this,e,r))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];let r=await this.getInputForSegment(this.firstSegment).getTracks();for(let n of r)if(n.type==="video"){let a=Qr(t,s=>s.getType()==="video")+1;t.push(new xs(this,{id:t.length+1,type:"video"},a))}else if(n.type==="audio"){let a=Qr(t,s=>s.getType()==="audio")+1;t.push(new Ps(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,n;if(this.firstSegmentFirstTimestamps.has(r))n=this.firstSegmentFirstTimestamps.get(r);else{let u=this.getInputForSegment(r);n=await this.getFirstTimestampForInput(u),this.firstSegmentFirstTimestamps.set(r,n)}if(r===t)return r.timestamp-n;let a=await this.getFirstTimestampForInput(e),s=t.timestamp-r.timestamp,c=a-n-s;return Math.abs(c)<=Math.min(.25,s)?r.timestamp-n:t.timestamp-a}dispose(){for(let t of this.inputCache)t.input.dispose();this.inputCache.length=0}},As=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(n=>n.type===this.decl.type&&n.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(),h(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.unixEpochTimestamp===this.segmentedInput.firstSegment.timestamp}getUnixTimeForTimestamp(t){return this.segmentedInput.getUnixTimeForTimestamp(t)}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){h(t.sequenceNumber>=0),h(this.segmentedInput.firstSegment);let n=await this.segmentedInput.getMediaOffset(e,r.input),a=e.timestamp-this.segmentedInput.firstSegment.timestamp,s=t.clone({timestamp:St(t.timestamp+n,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(),h(this.segmentedInput.firstSegment),h(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 n=this.packetInfos.get(t);if(!n)throw new Error("Packet was not created from this track.");let a=r?await n.track._backing.getNextKeyPacket(n.sourcePacket,e):await n.track._backing.getNextPacket(n.sourcePacket,e);if(a)return this.createAdjustedPacket(a,n.segment,n.track);let s=n.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===n.track.type&&d.number===n.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 n=await this.segmentedInput.getSegmentAt(t,{skipLiveWait:e.skipLiveWait});if(!n)return null;for(await this.hydrate();n;){let a=this.segmentedInput.getInputForSegment(n),o=(await a.getTracks()).find(m=>m.type===this.firstInputTrack.type&&m.number===this.firstInputTrack.number);if(!o){n=await this.segmentedInput.getPreviousSegment(n,{skipLiveWait:e.skipLiveWait});continue}let c=await this.segmentedInput.getMediaOffset(n,a),u=t-c,l=r?await o._backing.getKeyPacket(u,e):await o._backing.getPacket(u,e);if(!l){n=await this.segmentedInput.getPreviousSegment(n,{skipLiveWait:e.skipLiveWait});continue}return this.createAdjustedPacket(l,n,o)}return null}},xs=class extends As{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())}},Ps=class extends As{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 Yl=Au(Ec(),1);Ti();var Zl=typeof Yl<"u"?Yl:void 0,_c=0,Rc=1/0,vc=null;typeof FinalizationRegistry<"u"&&(vc=new FinalizationRegistry(i=>{i()}));var Ee=class extends Ue{constructor(){super();this._disposed=!1;this._refCount=0;this._usedForHls=!1;this._refFinalizationRegistry=null;this._sizePromise=null;this.onread=null;typeof FinalizationRegistry<"u"&&(this._refFinalizationRegistry=new FinalizationRegistry(e=>{e._decrementRefCount()}))}async getSizeOrNull(){if(this._disposed)throw new ye;return this._sizePromise??=(async()=>{let e=this._getFileSize();return e!==void 0||(await this._read(0,1,_c,Rc),e=this._getFileSize(),h(e!==void 0)),e})()}async getSize(){if(this._disposed)throw new ye;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 Bn(this,e,r)}_dispatchRead(e,r){this.onread?.(e,r),this._emit("read",{start:e,end:r})}ref(){return new Ar(this)}_incrementRefCount(){this._refCount++}_decrementRefCount(){this._refCount--,this._refCount===0&&(this._dispose(),this._disposed=!0)}},Ar=class{constructor(t){this._freed=!1;if(t._disposed)throw new Error("Cannot ref a disposed source.");t._incrementRefCount(),t._refFinalizationRegistry?.register(this,t,this),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;h(t._refCount>0),t._decrementRefCount(),t._refFinalizationRegistry?.unregister(this),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}},Oe=class extends Ee{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),n=a=>{if(!(a instanceof Ee||a instanceof Ar))throw new TypeError("requestHandler must return or resolve to a Source or SourceRef.");let s=a instanceof Ee?a.ref():a;return s.source._usedForHls||=this._usedForHls,s};return r instanceof Promise?r.then(n):n(r)}},Fc=(i,t)=>i.path===t.path,Li=class extends Oe{constructor(){super(...arguments);this._root=null;this._rootRequest=null}_read(e,r,n,a){if(!this._root){if(!this._rootRequest){let s=this._resolveRequest({path:this.rootPath,isRoot:!0}),o=c=>{let u=c instanceof Ee?c.ref():c;return this._root=u,this._rootRequest=null,u};s instanceof Promise?this._rootRequest=s.then(o):(o(s),h(this._root))}if(this._rootRequest)return this._rootRequest.then(s=>s.source._read(e,r,n,a))}return this._root.source._read(e,r,n,a)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}},Cs=class extends Ee{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=X(e),this._view=N(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(){}},Is=class extends Ee{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&&(!dr(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 Mn({maxCacheSize:r.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:Mc.fileSystem}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,r,n,a){return this._orchestrator.read(e,r,n,a)}async _runWorker(e){h(e.strictTarget);let r=this._readers.get(e);for(r===void 0&&("stream"in this._blob&&!lr()&&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"))&&typeof window<"u"){let n=null;try{typeof window<"u"&&typeof window.location<"u"&&(n=new URL(e instanceof Request?e.url:e,window.location.href).origin)}catch{}if((typeof navigator<"u"&&typeof navigator.onLine=="boolean"?navigator.onLine:!0)&&n!==null&&n!==window.location.origin)return V._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**(i-2),16)},Jl=new Set,Es=class i extends Oe{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&&(!dr(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 n=e instanceof Request?e.url:e instanceof URL?e.href:e;super(n,o=>new i(o.path,this._options));this._offset=0;this._length=null;this._fileSizeDetermined=!1;this._url=e,this._options=r,this._getRetryDelay=r.getRetryDelay??sf,this._requestInit={...r.requestInit};let a=null;if(r.requestInit?.headers){let o={...ga(r.requestInit.headers)},c=Object.keys(o).find(u=>u.toLowerCase()==="range");c!==void 0&&(a=o[c],delete o[c],this._requestInit.headers=o)}if(e instanceof Request){let o=e.headers.get("Range");if(o!==null){a??=o;let c=new Request(e);c.headers.delete("Range"),this._url=c}}if(a!==null){let o=cf(a);o&&(this._offset=o.offset,this._length=o.length)}let s=2;this._orchestrator=new Mn({maxCacheSize:r.maxCacheSize??64*2**20,maxWorkerCount:r.parallelism??s,runWorker:this._runWorker.bind(this),prefetchProfile:Mc.network})}_getFileSize(){if(!this._fileSizeDetermined)return this._length!==null?this._length:void 0;let e=this._orchestrator.fileSize;return e===null?this._length!==null?this._length:null:ce(e-this._offset,0,this._length??1/0)}_read(e,r,n,a){if(this._length!==null&&r>this._length)return null;let s=this._offset,o=this._orchestrator.read(s+e,s+r,Math.max(s+n,s),s+Math.min(a,this._length??1/0)),c=u=>u?(u.offset-=this._offset,u):null;return o instanceof Promise?o.then(c):c(o)}async _runWorker(e){for(;;){let r=new AbortController,n=await Ou(this._options.fetchFn??fetch,this._url,Bu(this._requestInit,{headers:{Range:`bytes=${e.currentPos}-`},signal:r.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw new Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);n.redirected&&(this.rootPath=n.url);e:if(this._orchestrator.fileSize===null){let s=n.headers.get("Content-Range");if(s){let c=/\/(\d+)/.exec(s);if(c){this._orchestrator.supplyFileSize(Number(c[1]));break e}}let o=n.headers.get("Content-Length");o&&this._orchestrator.supplyFileSize(e.currentPos+Number(o))}if(this._fileSizeDetermined=!0,n.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"))&&(Jl.has(s.origin)||(V._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.`),Jl.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(!n.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");let a=n.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){V._error("Error while reading response stream. Attempting to resume.",u),await jr(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()}},of=/^bytes=(\d+)-(\d*)$/,cf=i=>{let t=of.exec(i.trim());if(!t)return null;let e=Number(t[1]),r=t[2]===""?null:Number(t[2]);return r!==null&&rnew i(n.path,r));this._fileHandle=null;this._customSource=new Wi({getSize:async()=>{let n=await Zl.fs.open(e,"r");return this._fileHandle=n,vc?.register(this,()=>{n.close()},this),(await n.stat()).size},read:async(n,a)=>{h(this._fileHandle);let s=new Uint8Array(a-n);return await this._fileHandle.read(s,0,a-n,n),s},maxCacheSize:r.maxCacheSize,prefetchProfile:"fileSystem"})}_read(e,r,n,a){return this._customSource._read(e,r,n,a)}_getFileSize(){return this._customSource._getFileSize()}_dispose(){this._customSource._dispose(),this._fileHandle&&(this._fileHandle.close(),this._fileHandle=null,vc?.unregister(this))}},Wi=class extends Ee{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&&(!dr(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 Mn({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:2,prefetchProfile:Mc[t.prefetchProfile??"none"],runWorker:this._runWorker.bind(this)})}_getFileSize(){return this._orchestrator.fileSize??void 0}_read(t,e,r,n){if(this._orchestrator.fileSize!==null)return this._orchestrator.read(t,e,r,n);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,n)});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,n)}async _runWorker(t){for(;t.currentPosthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,r);let n=K(this._cache,e,m=>m.start),a=n!==-1?this._cache[n]: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(n!==-1)for(let m=n;m=r)break;let f=Math.max(e,d.start);f>s&&this._throwDueToCacheMiss();let p=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()}},Mc={none:(i,t)=>({start:i,end:t}),fileSystem:(i,t)=>(i=Math.floor((i-65536)/65536)*65536,t=Math.ceil((t+65536)/65536)*65536,{start:i,end:t}),network:(i,t,e)=>{i=Math.max(0,Math.floor((i-65536)/65536)*65536);for(let n of e){let s=Math.max((n.startPos+n.targetPos)/2,n.targetPos-8388608);if(Ta(i,t,s,n.targetPos)){let o=n.targetPos-n.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,n.startPos+l)}}return t=Math.max(t,i+af),{start:i,end:t}}},Mn=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,n){h(!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,n);h(s<=t&&e<=o);let c=null,u=K(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=K(this.cache,s,S=>S.start),d=c?null:new Uint8Array(e-t),f=0,p=s,b=[];if(m!==-1){for(let S=m;S=o)break;if(P.end<=s)continue;let C=Math.max(s,P.start),x=Math.min(o,P.end);if(h(C<=x),p=d.length&&(c={bytes:d,view:N(d),offset:t}),b.length===0)return h(c),c;let{promise:g,resolve:y,reject:k}=J(),T=[];for(let S of b){let P=Math.max(t,S.start),C=Math.min(e,S.end);P===S.start&&C===S.end?T.push(S):PI.hole.start),A=x!==-1?this.queuedReads[x]:null;for(A&&S.start<=A.hole.end?(A.hole.end=Math.max(A.hole.end,S.end),A.strictTarget&&=P,w&&A.pendingSlices.push(w)):(x++,A={hole:{start:S.start,end:S.end},strictTarget:P,pendingSlices:w?[w]:[],age:this.nextAge++},this.queuedReads.splice(x,0,A));x+1A.hole.end)break;A.hole.end=Math.max(A.hole.end,I.hole.end),A.pendingSlices.push(...I.pendingSlices),A.strictTarget&&=I.strictTarget,A.age=Math.min(A.age,I.age),this.queuedReads.splice(x+1,1)}}}return c?g.catch(S=>{if(!this.disposed)throw S}):(h(d),c=g.then(S=>S&&{bytes:S,view:N(S),offset:t})),c}checkHoleAgainstWorker(t,e,r){if(Ta(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 if(!t.aborted&&!this.disposed)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=n),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){n.resolve(null),e.pendingSlices.splice(r,1),r--;break}}}for(let e=0;e=t){for(let n of r.pendingSlices)n.resolve(null);this.queuedReads.splice(e,1),e--}else if(r.hole.end>t){r.hole.end=t,r.strictTarget=!0;for(let n=0;n=t&&(a.resolve(null),r.pendingSlices.splice(n,1),n--)}}}}signalWorkerStoppedRunning(t){t.running=!1,t.pendingSlices.length=0}onWorkerFinished(t){let e=this.workers.indexOf(t);h(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=K(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 n=new Uint8Array(t.end-r.start);n.set(r.bytes,0),n.set(t.bytes,t.start-r.start),this.currentCacheSize+=t.end-r.end,r.bytes=n,r.view=N(n),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=n.end){this.cache.splice(r,1),this.currentCacheSize-=n.bytes.length,r--;continue}let a=new Uint8Array(n.end-t.start);a.set(t.bytes,0),a.set(n.bytes,n.start-t.start),this.currentCacheSize-=t.end-n.start,t.bytes=a,t.view=N(a),t.end=n.end,this.cache.splice(r,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let r=0,n=this.cache[0];for(let a=1;athis._length)return null;let s=this._baseSource._read(this._offset+e,this._offset+r,this._offset+n,this._offset+a),o=c=>c?(c.offset-=this._offset,c):null;return s instanceof Promise?s.then(o):o(s)}_dispose(){this._ref?.free()}ref(){return this._ref??=this._baseSource.ref(),super.ref()}};var uf=/^0[xX][0-9a-fA-F]+$/,lf=/^data:.*;base64,/i,On=class extends Ss{constructor(e,r,n,a){super(e.input,r,n);this.segments=[];this.nextLines=null;this.currentUpdateSegmentsPromise=null;this.streamHasEnded=!1;this.lastSegmentUpdateTime=-1/0;this.refreshInterval=5;this.rootPath=r,this.demuxer=e,this.nextLines=a}runUpdateSegments(){return this.currentUpdateSegmentsPromise??=(async()=>{try{let e=this.getRemainingWaitTimeMs();e>0&&await jr(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 w=[];try{let x=on(w,await this.demuxer.input._getSourceUncached({path:this.rootPath,isRoot:!1}));let A=new xr(x.source);let I=await A.requestEntireFile();h(I);e=_s(I,I.length,{ignore:ws});x.source instanceof Oe&&(this.rootPath=x.source.rootPath)}catch(S){var P=S,C=!0}finally{cn(w,P,C)}}let r=this.input._formatOptions.hls?.offsetTimestampsByDateTime!==!1,n=!1,a=0,s=null,o=null,c=null,u=0,l=null,m=null,d=null,f=null,p=null,b=null,g=!1,y=Y(this.segments)??null,k=x=>{let A=x.indexOf("@"),I=Number(A===-1?x:x.slice(0,A));if(!Number.isInteger(I)||I<0)throw new Error(`Invalid #EXT-X-BYTERANGE length '${x}'.`);let E=null;if(A!==-1&&(E=Number(x.slice(A+1)),!Number.isInteger(E)||E<0))throw new Error(`Invalid #EXT-X-BYTERANGE offset '${x}'.`);return{length:I,offset:E}},T=x=>{u=x,y&&(h(y.sequenceNumber!==null),y.sequenceNumber0&&b!==null&&(a=u*b),g=!0);let I=A.slice(Fn.length),E=I.indexOf(","),_=E===-1?I:I.slice(0,E),v=Number(_);if(!Number.isFinite(v)||v<0)throw new Error(`Invalid #EXTINF tag duration '${_}'.`);o=v}else if(A.startsWith(wc)){let I=new rr(A.slice(wc.length)),E=I.get("uri");if(!E)throw new Error("Invalid #EXT-X-MAP tag; missing URI attribute.");let _=I.get("byterange"),v=null;if(_!==null&&(v=k(_)),v&&v.offset===null)throw new Error("Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.");if(!y){let O={path:he(this.rootPath,E),offset:v?.offset??0,length:v?.length??null};if(c?.method==="AES-128"&&!c.iv)throw new Error("IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.");m={timestamp:a,unixEpochTimestamp:s,firstSegment:null,sequenceNumber:null,location:O,duration:0,encryption:c,initSegment:null,lastProgramDateTimeSeconds:p}}o=null,f===null?d=null:f=null}else if(A.startsWith(Sc)){let I=new rr(A.slice(Sc.length)),E=I.get("method");if(E==="NONE")c=null;else if(E==="AES-128"){let _=I.get("uri");if(!_)throw new Error("Invalid #EXT-X-KEY: AES-128 requires a URI attribute.");let v=null,D=I.get("iv");if(D){if(!uf.test(D))throw new Error(`Unsupported IV format '${D}'.`);let z=D.slice(2);z=z.padStart(mt*2,"0"),v=new Uint8Array(mt);for(let H=0;H=8&&z[4]===112&&z[5]===115&&z[6]===115&&z[7]===104){let H=N(z).getUint32(0);D=qa(z.subarray(8,Math.min(H,z.length)))}}c={method:E,psshBox:D}}else throw new Error(`Unsupported encryption method '${E}'. If you think this method should be supported, please raise an issue.`)}else if(A.startsWith(Ac)){let I=A.slice(Ac.length),E=Number(I);if(!Number.isInteger(E)||E<0)throw new Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${I}'.`);T(E)}else if(A.startsWith(xc)){let I=k(A.slice(xc.length));if(I.offset===null){if(d===null)throw new Error("Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.");I.offset=d}f=I,d=I.offset+I.length}else if(A.startsWith(Pc)){if(y)continue;let I=A.slice(Pc.length),E=Date.parse(I);if(!Number.isFinite(E))continue;let _=E/1e3;if(p===_)continue;if(p===null&&this.segments.length>0){let v=Y(this.segments),D=v.timestamp+v.duration,O=_-D;for(let z of this.segments)z.unixEpochTimestamp=z.timestamp+O,r&&(z.timestamp=z.unixEpochTimestamp)}p=_,s=_,r&&(a=_)}else if(A===jl)l=null;else if(A.startsWith(Cc)){let I=A.slice(Cc.length),E=Number(I);if(!Number.isFinite(E)||E<0)throw new Error(`Invalid EXT-X-TARGETDURATION value '${I}'.`);this.refreshInterval=E,b=E}else if(A===Xl){this.streamHasEnded=!0;break}else A.startsWith(Ic)&&A.slice(Ic.length).toLowerCase()==="vod"&&(this.streamHasEnded=!0)}if(!n)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 n=!!r.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){let a=K(this.segments,e,o=>o.timestamp);if(a===-1)return null;if(a0;for(;;){if(au.segment===r);if(n)return n.age=this.nextInputCacheAge++,n.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=>Ka(d,m))&&(l=[...l,m]),this.input._formatOptions.isobmff.resolveKeyId({...u,psshBoxes:l})})}},o=new Pr({source:new Li(r.location.path,async u=>{h(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 p=m.source.slice(r.location.offset,r.location.length??void 0).ref();m.free(),m=p}}else if(r.encryption.method==="AES-128"){let f=r.encryption;h(f.iv);let p=await this.input._getSourceCached(l);if(d){let k=p.source.slice(r.location.offset,r.location.length??void 0).ref();p.free(),p=k}let b=new xr(p.source),g=Tl(b,async()=>{var S=[];try{let y=on(S,await this.input._getSourceCached({path:f.keyUri,isRoot:!1},td));let k=new xr(y.source);let T=await k.requestSlice(0,mt);if(!T)throw new Error("Invalid AES-128 key; expected at least 16 bytes of data.");let w=B(T,mt);return{key:w,iv:f.iv}}catch(P){var C=P,x=!0}finally{cn(S,C,x)}},()=>{p.free()});m=new Hi(g).ref()}else h(!1);return m}),formats:this.input._formats.filter(u=>!(u instanceof ri)),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=wi(this.inputCache,l=>l.age);h(u!==-1),this.inputCache.splice(u,1)}return o}async getLiveRefreshInterval(){return this.getRemainingWaitTimeMs()===0&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}};var Fs=class extends ge{constructor(e){super(e);this.metadataPromise=null;this.trackBackings=null;this.internalTracks=null;this.segmentedInputs=[];this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??=(async()=>{h(this.input._rootSource instanceof Oe);let e=await this.input._reader.requestEntireFile();h(e);let r=_s(e,e.length,{ignore:ws}),{rootPath:n}=this.input._rootSource,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 p=[],b=d.attributes.get("codecs"),g;if(b)g=b.split(",").map(I=>I.trim());else{let E=await this.getSegmentedInputForPath(d.fullPath).getTrackBackings(),_=await Promise.all(E.map(async v=>({track:v,codec:await v.getCodec()})));g=await Promise.all(_.filter(v=>v.codec!==null).map(v=>v.track.getDecoderConfig().then(D=>D.codec)))}let y=d.attributes.get("video"),k=d.attributes.get("audio"),T=g.some(I=>ne.includes($e(I))),w=g.some(I=>oe.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(E=>{let _=E.attributes.get("group-id"),v=E.attributes.get("type");return _===y&&v.toLowerCase()==="video"});e:if(I){let E=I.attributes.get("uri");if(E===null)break e;let _=he(n,E),O=(await this.getSegmentedInputForPath(_).getTrackBackings()).find(H=>H.getType()==="video");if(!O||await O.getCodec()===null)break e;let z=await O.getDecoderConfig().then(H=>H?.codec??null);h(z!==null),g.push(z)}}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(E=>{let _=E.attributes.get("group-id"),v=E.attributes.get("type");return _===k&&v.toLowerCase()==="audio"});e:if(I){let E=I.attributes.get("uri");if(E===null)break e;let _=he(n,E),O=(await this.getSegmentedInputForPath(_).getTrackBackings()).find(H=>H.getType()==="audio");if(!O||await O.getCodec()===null)break e;let z=await O.getDecoderConfig().then(H=>H?.codec??null);h(z!==null),g.push(z)}}g=[...new Set(g)];let S=null,P=null,C=d.attributes.getAsNumber("bandwidth");h(C!==null);let x=d.attributes.getAsNumber("average-bandwidth"),A=d.attributes.get("name");for(let I of g){let E=$e(I);if(E!==null){if(ne.includes(E)){if(S!==null)throw new Error("Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.");S=I;let _=d.attributes.get("video");if(_===null){let v=d.attributes.get("resolution"),D=null,O=null;if(v){let z=v.match(/^(\d+)x(\d+)$/);z&&(D=Number(z[1]),O=Number(z[2]))}p.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:te,lineNumber:d.lineNumber,fullPath:d.fullPath,fullCodecString:S,pairingMask:1n<0?D:null}})}else{if(!c.includes(_))throw new Error(`Invalid M3U8 file; variant stream references audio group "${_}" which is not defined in any #EXT-X-MEDIA tags.`);for(let v of s){let D=v.attributes.get("group-id"),O=v.attributes.get("type");if(D!==_||O.toLowerCase()!=="audio")continue;let z=v.attributes.get("channels")??d.attributes.get("channels"),H=z!==null?Number(z.split("/")[0]):null;p.push({id:-1,demuxer:this,backingTrack:null,default:Rs(v.attributes),autoselect:Rs(v.attributes)||rd(v.attributes),languageCode:id(v.attributes.get("language")),lineNumber:v.lineNumber,fullPath:v.fullPath??d.fullPath,fullCodecString:P,pairingMask:1n<0?H:null}})}}}}}return p})),l=[],m=d=>{let f=l.find(p=>p.fullPath===d.fullPath&&p.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===te&&(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 Bs(d)):this.trackBackings.push(new Os(d));this.internalTracks=l})()}async getTrackBackings(){return await this.readMetadata(),h(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let r=this.segmentedInputs.find(a=>a.path===e);if(r)return r;let n=null;return this.internalTracks&&(n=this.internalTracks.filter(s=>s.fullPath===e).map(s=>({id:s.id,type:s.info.type}))),r=new On(this,e,n,null),this.segmentedInputs.push(r),r}async getMetadataTags(){return{}}async getMimeType(){return Ct}dispose(){if(this.segmentedInputs){for(let e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}},Ms=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,n=(await t.getTrackBackings()).filter(a=>a.getType()===this.getType());if(n.length===1)e=n[0];else if(this instanceof Bs){for(let a of n)if(await a.getCodec()===this.getCodec()){e=a;break}}else{h(this instanceof Os);for(let a of n)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{...we,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(){h(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())}getUnixTimeForTimestamp(t){return this.delegate(()=>this.internalTrack.backingTrack.getUnixTimeForTimestamp(t))}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)}},Bs=class extends Ms{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()}},Os=class extends Ms{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()}},Rs=i=>{let t=i.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}".`)},rd=i=>{let t=i.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}".`)},id=i=>{if(i===null)return te;let t=i.split("-")[0];return t||te};var De=class{constructor(){this._isIsobmff=!1}},qi=class extends De{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 n=ae(r,4);return n!=="ftyp"&&n!=="styp"?null:ae(r,4)}_createDemuxer(e){return new ja(e)}},Dn=class extends qi{async _canReadInput(t){let e=await this._getMajorBrand(t);if(e!==null)return e!=="qt ";let r=t._reader.requestSlice(4,4);if(r instanceof Promise&&(r=await r),!r)return!1;let n=ae(r,4);return n==="moof"||n==="sidx"}get name(){return"MP4"}get mimeType(){return"video/mp4"}},Vn=class extends qi{async _canReadInput(t){return await this._getMajorBrand(t)==="qt "}get name(){return"QuickTime File Format"}get mimeType(){return"video/quicktime"}},Ki=class extends De{async isSupportedEBMLOfDocType(t,e){let r=t._reader.requestSlice(0,ht);if(r instanceof Promise&&(r=await r),!r)return!1;let n=ic(r);if(n===null||n<1||n>8||G(r,n)!==440786851)return!1;let s=nc(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-Le;){let u=gt(o);if(!u)break;let{id:l,size:m}=u,d=o.filePos;if(m===void 0)return!1;switch(l){case 17030:if(G(o,m)!==1)return!1;break;case 17143:if(G(o,m)!==1)return!1;break;case 17026:if(Tr(o,m)!==e)return!1;break;case 17031:if(G(o,m)>4)return!1;break}o.filePos=d+m}return!0}_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"matroska")}_createDemuxer(t){return new ns(t)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}},Un=class extends Ki{_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}},zn=class extends De{async _canReadInput(t){let e=0;for(;;){let m=t._reader.requestSlice(e,Ie);if(m instanceof Promise&&(m=await m),!m)break;let d=We(m);if(!d)break;e=m.filePos+d.size}let r=await In(t._reader,e,e+4096);if(!r)return!1;let n=r.header,a=pr(n.mpegVersionId,n.channel),s=t._reader.requestSlice(r.startPos+a,4);if(s instanceof Promise&&(s=await s),!s)return!1;let o=F(s);if(o===fr||o===Pi)return!0;e=r.startPos+r.header.totalSize;let u=await In(t._reader,e,e+4);if(!u)return!1;let l=u.header;return!(n.channel!==l.channel||n.sampleRate!==l.sampleRate)}_createDemuxer(t){return new ss(t)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}},Nn=class extends De{async _canReadInput(t){let e=t._reader.requestSlice(0,12);if(e instanceof Promise&&(e=await e),!e)return!1;let r=ae(e,4);return r!=="RIFF"&&r!=="RIFX"&&r!=="RF64"?!1:(e.skip(4),ae(e,4)==="WAVE")}_createDemuxer(t){return new ms(t)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}},Ln=class extends De{async _canReadInput(t){let e=t._reader.requestSlice(0,4);return e instanceof Promise&&(e=await e),e?ae(e,4)==="OggS":!1}_createDemuxer(t){return new ds(t)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}},Wn=class extends De{async _canReadInput(t){let e=0;for(;;){let n=t._reader.requestSlice(e,Ie);if(n instanceof Promise&&(n=await n),!n)break;let a=We(n);if(!a)break;e=n.filePos+a.size}let r=t._reader.requestSlice(e,4);return r instanceof Promise&&(r=await r),r?ae(r,4)==="fLaC":!1}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(t){return new bs(t)}},Hn=class extends De{async _canReadInput(t){let e=0;for(;;){let s=t._reader.requestSlice(e,Ie);if(s instanceof Promise&&(s=await s),!s)break;let o=We(s);if(!o)break;e=s.filePos+o.size}let r=t._reader.requestSliceRange(e,tr,je);if(r instanceof Promise&&(r=await r),!r)return!1;let n=He(r);if(!n||(e+=n.frameLength,r=t._reader.requestSliceRange(e,tr,je),r instanceof Promise&&(r=await r),!r))return!1;let a=He(r);return a?n.objectType===a.objectType&&n.samplingFrequencyIndex===a.samplingFrequencyIndex&&n.channelConfiguration===a.channelConfiguration:!1}_createDemuxer(t){return new fs(t)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}},qn=class extends De{async _canReadInput(t){let e=205,r=t._reader.requestSlice(0,e);if(r instanceof Promise&&(r=await r),!r)return!1;let n=B(r,e);return n[0]===71&&n[188]===71||n[0]===71&&n[204]===71?!0:n[4]===71&&n[196]===71}_createDemuxer(t){return new ks(t)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}},ri=class extends De{async _canReadInput(t){let e=t._reader.requestSlice(0,7);if(e instanceof Promise&&(e=await e),!e||!(ae(e,7)==="#EXTM3U"))return!1;if(!(t._rootSource instanceof Oe))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 Fs(t)}get name(){return"HTTP Live Streaming (HLS)"}get mimeType(){return Ct}},Ds=new Dn,Vs=new Vn,Bc=new Ki,Oc=new Un,Us=new zn,Dc=new Nn,Vc=new Ln,zs=new Hn,Uc=new Wn,Ns=new qn,Ls=new ri,nd=[Ls,Ds,Vs,Bc,Oc,Dc,Vc,Uc,Us,zs,Ns],ad=[Ls,Ds,Vs,Us,zs,Ns],sd=(i,t)=>{if(!i||typeof i!="object")throw new TypeError(`${t}, when provided, must be an object.`);if(i.isobmff!==void 0){if(!i.isobmff||typeof i.isobmff!="object")throw new TypeError(`${t}.isobmff, when provided, must be an object.`);if(i.isobmff.resolveKeyId!==void 0&&typeof i.isobmff.resolveKeyId!="function")throw new TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}if(i.hls!==void 0){if(!i.hls||typeof i.hls!="object")throw new TypeError(`${t}.hls, when provided, must be an object.`);if(i.hls.offsetTimestampsByDateTime!==void 0&&typeof i.hls.offsetTimestampsByDateTime!="boolean")throw new TypeError(`${t}.hls.offsetTimestampsByDateTime, when provided, must be a boolean.`)}};var Ws=new Map,Hs=new Map,df=(i,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)!==i)throw new TypeError(`options.codec, when provided, must match the specified codec (${i}).`);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&&!Vt(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.")},mf=(i,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)!==i)throw new TypeError(`options.codec, when provided, must match the specified codec (${i}).`);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&&!Vt(t.description))throw new TypeError("options.description, when provided, must be a buffer source.")},od=i=>ne.includes(i)?qs(i):oe.includes(i)?Ks(i):!1,qs=async(i,t={})=>{if(!ne.includes(i))return!1;df(i,t);let e={...t,codedWidth:t.codedWidth??1280,codedHeight:t.codedHeight??720,codec:t.codec??Pa(i,1280,720,1e6,!1)};e.description??=Yu(e);let r=JSON.stringify(e),n=Ws.get(r);if(n)return n;let a=(async()=>Cr.some(o=>o.supports(i,e))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0)();return Ws.set(r,a),a},Ks=async(i,t={})=>{if(!oe.includes(i))return!1;mf(i,t);let e={...t,numberOfChannels:t.numberOfChannels??2,sampleRate:t.sampleRate??48e3,codec:t.codec??Ia(i,2,48e3)};if(e.description===void 0){let s=Zu(e);if(s===!1)return!1;e.description=s}let r=JSON.stringify(e),n=Hs.get(r);if(n)return n;let a=(async()=>Ir.some(o=>o.supports(i,e))||re.includes(i)?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(e)).supported===!0)();return Hs.set(r,a),a},cd=async()=>{let[i,t]=await Promise.all([zc(),Nc()]);return[...i,...t]},zc=async(i=ne,t)=>{let e=await Promise.all(i.map(r=>qs(r,t)));return i.filter((r,n)=>e[n])},Nc=async(i=oe,t)=>{let e=await Promise.all(i.map(r=>Ks(r,t)));return i.filter((r,n)=>e[n])};Ti();var ud=-1/0,ld=-1/0,jn=null;typeof FinalizationRegistry<"u"&&(jn=new FinalizationRegistry(i=>{let t=performance.now();i.type==="video"?(t-ud>=1e3&&(V._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."),ud=t),typeof VideoFrame<"u"&&i.data instanceof VideoFrame&&i.data.close()):(t-ld>=1e3&&(V._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."),ld=t),typeof AudioData<"u"&&i.data instanceof AudioData&&i.data.close())}));var bt=class{constructor(){this._referenceCount=0;this._lastAllocationBuffer=null}},Xn=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],ff=new Set(Xn),Ve=class i{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||!ff.has(e.format))throw new TypeError("init.format must be one of: "+Xn.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 a of e.layout){if(!a||typeof a!="object"||Array.isArray(a))throw new TypeError("Each entry in init.layout must be an object.");if(!Number.isInteger(a.offset)||a.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(a.stride)||a.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(e.visibleRect!==void 0&&Go(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.format=e.format,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0;let r=e.layout??hf(e.format,e.codedWidth,e.codedHeight),n=e.colorSpace??null;n===null&&(this.format==="RGBA"||this.format==="RGBX"||this.format==="BGRA"||this.format==="BGRX"?n={primaries:"bt709",transfer:"iec61966-2-1",matrix:"rgb",fullRange:!0}:n={primaries:"bt709",transfer:"bt709",matrix:"bt709",fullRange:!1}),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.visibleRect.width,this.squarePixelHeight=this.visibleRect.height),this._data=e._doNotCopy?X(t):X(t).slice(),this._layout=r,this.colorSpace=new ni(n)}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&&Go(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 ni(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 i(new VideoFrame(t,{timestamp:Math.trunc(e.timestamp*At),duration:Math.trunc((e.duration??0)*At)||void 0}),e);let r=0,n=0;if("naturalWidth"in t?(r=t.naturalWidth,n=t.naturalHeight):"videoWidth"in t?(r=t.videoWidth,n=t.videoHeight):"width"in t&&(r=Number(t.width),n=Number(t.height)),!r||!n)throw new TypeError("Could not determine dimensions.");let a=new OffscreenCanvas(r,n),s=a.getContext("2d",{alpha:qr(),willReadFrequently:!0});if(!s)throw new Error("OffscreenCanvas must have support for the '2d' context in order to create a VideoSample from this data.");s.drawImage(t,0,0),this._data=a,this._layout=null,this.format="RGBX",this.visibleRect={left:0,top:0,width:r,height:n},this.squarePixelWidth=r,this.squarePixelHeight=n,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=new ni({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else if(t instanceof bt){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(this._data=t,t._referenceCount++,this.format=t.getFormat(),this.format!==null&&!Xn.includes(this.format))throw new TypeError("getFormat() must return a VideoSamplePixelFormat or null.");if(this.visibleRect={left:0,top:0,width:t.getCodedWidth(),height:t.getCodedHeight()},!Number.isInteger(this.visibleRect.width)||this.visibleRect.width<=0)throw new TypeError("getCodedWidth() must return a positive integer.");if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw new TypeError("getCodedHeight() must return a positive integer.");if(this.squarePixelWidth=t.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw new TypeError("getSquarePixelWidth() must return a positive integer.");if(this.squarePixelHeight=t.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw new TypeError("getSquarePixelHeight() must return a positive integer.");this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=t.getColorSpace()}else throw new TypeError("Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.");this.encodeOptions=e?.encodeOptions??{},this.pixelAspectRatio=Lt({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),jn?.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 h(this._data!==null),this._data instanceof bt?new i(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):Gn(this._data)?new i(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation,encodeOptions:this.encodeOptions}):this._data instanceof Uint8Array?(h(this._layout),new i(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions,_doNotCopy:!0})):new i(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight,encodeOptions:this.encodeOptions})}close(){this._closed||(jn?.unregister(this),this._data instanceof bt?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):Gn(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(t={}){if(md(t),this._closed)throw new Error("VideoSample is closed.");if((t.format??this.format)==null)throw new Error("Cannot get allocation size when format is null.");return Gn(this._data)?this._data.allocationSize(t):fd(this,t).allocationSize}async copyTo(t,e={}){if(!Vt(t))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(md(e),this._closed)throw new Error("VideoSample is closed.");if((e.format??this.format)==null)throw new Error("Cannot copy video sample data when format is null.");if(h(this._data!==null),Gn(this._data))return this._data.copyTo(t,e);if(e.format&&!["RGBA","RGBX","BGRA","BGRX"].includes(this.format)&&["RGBA","RGBX","BGRA","BGRX"].includes(e.format))if(this._data instanceof bt){var u=[];try{let f=on(u,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},e.colorSpace??"srgb"));if(!(f instanceof i))throw new TypeError("toRgbSample() must return a VideoSample.");if(!["RGBA","RGBX","BGRA","BGRX"].includes(f.format))throw new Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${f.format}' instead.`);return await f.copyTo(t,e)}catch(l){var m=l,d=!0}finally{cn(u,m,d)}}else{if(typeof VideoFrame>"u")throw new Error("For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.");let f=this.toVideoFrame(),p=await f.copyTo(t,e);return f.close(),p}let r=fd(this,e);h(this.format);let n=X(t);if(n.byteLength!(p.data instanceof Uint8Array)||!Number.isInteger(p.stride)||p.stride<0))throw new TypeError('getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.');s=f}else if(this._data instanceof Uint8Array)h(this._layout),h(this._layout.length===a.length),s=this._layout.map((f,p)=>{let b=Math.ceil(this.codedHeight/a[p].heightDivisor);return{data:this._data.subarray(f.offset,f.offset+f.stride*b),stride:f.stride}});else{let p=this._data.getContext("2d");h(p);let b=p.getImageData(0,0,this.codedWidth,this.codedHeight);s=[{data:X(b.data),stride:4*this.codedWidth}]}let o=[],c=a.length;for(let f=0;fg.byteLength)throw new Error("Source buffer OOB read.");if(k+T>n.byteLength)throw new Error("Destination buffer OOB write.");let P=g.subarray(y,y+T);n.set(P,k),y+=b,k+=p.destinationStride}o.push(w)}if(e.format!==void 0){let f=this.format.startsWith("RGB")!==e.format.startsWith("RGB"),p=this.format.includes("X")&&e.format.includes("A");if(f||p)for(let b=0;bs+o.data.byteLength,0),r=new Uint8Array(e),n=0,a=[];for(let s of t)r.set(s.data,n),a.push(n),n+=s.data.byteLength;return new VideoFrame(r,{format:this.format,layout:t.map((s,o)=>({offset:a[o],stride:s.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}else return Gn(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?(h(this._layout),new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,layout:this._layout,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,visibleRect:this.visibleRect,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(t,e,r,n,a,s,o,c,u){let l=0,m=0,d=this.displayWidth,f=this.displayHeight,p=0,b=0,g=this.displayWidth,y=this.displayHeight;if(s!==void 0?(l=e,m=r,d=n,f=a,p=s,b=o,c!==void 0?(g=c,y=u):(g=d,y=f)):(p=e,b=r,n!==void 0&&(g=n,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(p))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=p+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&&Er(e.crop,"options.");let r=t.canvas.width,n=t.canvas.height,a=e.rotation??this.rotation,[s,o]=a%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],c=e.crop;c&&(c=Gi(c,s,o));let u,l,m,d,{sx:f,sy:p,sWidth:b,sHeight:g}=this._rotateSourceRegion(e.crop?.left??0,e.crop?.top??0,e.crop?.width??s,e.crop?.height??o,a);if(e.fit==="fill")u=0,l=0,m=r,d=n;else{let[k,T]=e.crop?[e.crop.width,e.crop.height]:[s,o],w=e.fit==="contain"?Math.min(r/k,n/T):Math.max(r/k,n/T);m=k*w,d=T*w,u=(r-m)/2,l=(n-d)/2}t.save();let y=a%180===0?1:m/d;t.translate(r/2,n/2),t.rotate(a*Math.PI/180),t.scale(1/y,y),t.translate(-r/2,-n/2),t.drawImage(this.toCanvasImageSource(),f,p,b,g,u,l,m,d),t.restore()}_rotateSourceRegion(t,e,r,n,a){return a===90?[t,e,r,n]=[e,this.squarePixelHeight-t-r,n,r]:a===180?[t,e]=[this.squarePixelWidth-t-r,this.squarePixelHeight-e-n]:a===270&&([t,e,r,n]=[this.squarePixelWidth-e-n,t,n,r]),{sx:t,sy:e,sWidth:r,sHeight:n}}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(h(this._data!==null),this._data instanceof bt||this._data instanceof Uint8Array){let t=this.toVideoFrame();return queueMicrotask(()=>t.close()),t}else return this._data}async transform(t){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.width!==void 0&&(!Number.isInteger(t.width)||t.width<=0))throw new TypeError("options.width, when provided, must be a positive integer.");if(t.height!==void 0&&(!Number.isInteger(t.height)||t.height<=0))throw new TypeError("options.height, when provided, must be a positive integer.");if(t.roundDimensionsTo!==void 0&&(!Number.isInteger(t.roundDimensionsTo)||t.roundDimensionsTo<=0))throw new TypeError("options.roundDimensionsTo, when provided, must be a positive integer.");if(t.fit!==void 0&&!["fill","contain","cover"].includes(t.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(t.width!==void 0&&t.height!==void 0&&t.fit===void 0)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(t.rotate!==void 0&&![0,90,180,270].includes(t.rotate))throw new TypeError("options.rotate, when provided, must be 0, 90, 180 or 270.");if(t.crop!==void 0&&Er(t.crop,"options."),t.alpha!==void 0&&!["keep","discard"].includes(t.alpha))throw new TypeError("options.alpha, when provided, must be 'keep' or 'discard'.");let e=tt(this.rotation+(t.rotate??0)),[r,n]=e%180===0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],a=t.crop;a&&(a=Gi(a,r,n));let s=a?a.width:r,o=a?a.height:n,c=s/o,u,l;t.width!==void 0&&t.height===void 0?(u=t.width,l=u/c):t.width===void 0&&t.height!==void 0?(l=t.height,u=l*c):t.width!==void 0&&t.height!==void 0?(u=t.width,l=t.height):(u=s,l=o),u=dn(u,t.roundDimensionsTo??1),l=dn(l,t.roundDimensionsTo??1);let m={width:u,height:l,fit:t.fit??"fill",rotation:e,crop:a??{left:0,top:0,width:r,height:n},alpha:t.alpha??"keep"};for(let b of Lc){let g=b(this,m);if(g instanceof Promise&&(g=await g),g!==null)return g}let d=null,f=!1;for(let b of Kn)if(b.canvas.width===m.width&&b.canvas.height===m.height){d=b.canvas,b.age=dd++;break}if(d===null){if(typeof OffscreenCanvas<"u")d=new OffscreenCanvas(m.width,m.height);else{if(typeof window>"u"||typeof document>"u")throw new Error("Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().");d=document.createElement("canvas"),d.width=m.width,d.height=m.height}f=!0,Kn.length>=pf&&Kn.splice(wi(Kn,b=>b.age),1),Kn.push({canvas:d,age:dd++})}let p=d.getContext("2d",{alpha:!0});if(!p)throw new Error("The '2d' canvas context is required to transform VideoSamples. Register a custom transformer using registerVideoSampleTransformer to work around this limitation.");return m.alpha==="discard"?(p.fillStyle="black",p.fillRect(0,0,m.width,m.height)):f||p.clearRect(0,0,m.width,m.height),this.drawWithFit(p,{fit:m.fit,rotation:m.rotation,crop:m.crop}),new i(d,{timestamp:this.timestamp,duration:this.duration,rotation:0})}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}setEncodeOptions(t){if(!t||typeof t!="object")throw new TypeError("newEncodeOptions must be an object.");this.encodeOptions=t}[Symbol.dispose](){this.close()}},Lc=[],pd=i=>{Lc.includes(i)||Lc.push(i)},pf=3,Kn=[],dd=0,ni=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(it);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(nt);if(t.transfer!=null&&!r.includes(t.transfer))throw new TypeError(`init.colorSpace.transfer, when provided, must be one of ${r.join(", ")}.`);let n=Object.keys(at);if(t.matrix!=null&&!n.includes(t.matrix))throw new TypeError(`init.colorSpace.matrix, when provided, must be one of ${n.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}}},Gn=i=>typeof VideoFrame<"u"&&i instanceof VideoFrame,Gi=(i,t,e)=>{let r=Math.min(i.left,t),n=Math.min(i.top,e),a=Math.min(i.width,t-r),s=Math.min(i.height,e-n);return h(a>=0),h(s>=0),{left:r,top:n,width:a,height:s}},Er=(i,t)=>{if(!i||typeof i!="object")throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(i.left)||i.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(i.top)||i.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(i.width)||i.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(i.height)||i.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},md=i=>{if(!i||typeof i!="object")throw new TypeError("options must be an object.");if(i.colorSpace!==void 0&&!["display-p3","srgb"].includes(i.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(i.format!==void 0&&typeof i.format!="string")throw new TypeError("options.format, when provided, must be a string.");if(i.layout!==void 0){if(!Array.isArray(i.layout))throw new TypeError("options.layout, when provided, must be an array.");for(let t of i.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(i.rect!==void 0){if(!i.rect||typeof i.rect!="object")throw new TypeError("options.rect, when provided, must be an object.");if(i.rect.x!==void 0&&(!Number.isInteger(i.rect.x)||i.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(i.rect.y!==void 0&&(!Number.isInteger(i.rect.y)||i.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(i.rect.width!==void 0&&(!Number.isInteger(i.rect.width)||i.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(i.rect.height!==void 0&&(!Number.isInteger(i.rect.height)||i.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},hf=(i,t,e)=>{let r=Qs(i),n=[],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;n.push({offset:a,stride:u}),a+=l}return n},Qs=i=>{let t=(e,r,n,a,s)=>{let o=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:r,widthDivisor:n,heightDivisor:a},{sampleBytes:r,widthDivisor:n,heightDivisor:a}];return s&&o.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),o};switch(i){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:ee(i),h(!1)}},fd=(i,t)=>{let e={left:0,top:0,width:i.codedWidth,height:i.codedHeight},r=t.rect,n=gf(e,r,i.codedWidth,i.codedHeight,i.format),a=t.layout,s;if(!t.format||t.format===i.format)s=i.format;else if(["RGBA","RGBX","BGRA","BGRX"].includes(t.format))s=t.format;else throw new Error("NotSupportedError: Invalid destination format.");return yf(n,s,a)},gf=(i,t,e,r,n)=>{let a={...i};if(t!==void 0){if(t.width===0||t.height===0)throw new TypeError("visibleRect dimensions cannot be zero.");if((t.x||0)+(t.width||0)>e)throw new TypeError("visibleRect exceeds codedWidth.");if((t.y||0)+(t.height||0)>r)throw new TypeError("visibleRect exceeds codedHeight.");a.x=t.x||0,a.y=t.y||0,a.width=t.width||0,a.height=t.height||0}if(!bf(n,a))throw new TypeError("visibleRect alignment is invalid for the format.");return a},bf=(i,t)=>{if(i===null)return!0;let e=Qs(i);for(let r=0;r{let r=Qs(t),n=r.length;if(e!==void 0&&e.length!==n)throw new TypeError(`Layout must have ${n} planes.`);let a=0,s=[],o=[];for(let c=0;c4294967295)throw new TypeError("Allocation size exceeds limit.");o.push(b),a=Math.max(a,b);for(let g=0;g 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/(It(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 n=this.numberOfFrames*this.numberOfChannels*It(this.format);if(r.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");let n=t.frameCount!==void 0?t.frameCount:this.numberOfFrames-r;if(n>this.numberOfFrames-r)throw new RangeError("frameCount out of range");let a=It(e),s=ii(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?n:n*this.numberOfChannels)*a}copyTo(t,e){if(!Vt(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&&!Gs.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{format:r,frameCount:n,frameOffset:a}=e,{planeIndex:s}=e,o=this.format,c=r??this.format;if(!c)throw new Error("Destination format not determined");let u=this.numberOfFrames,l=this.numberOfChannels,m=a??0;if(m>=u)throw new RangeError("frameOffset out of range");let d=n!==void 0?n:u-m;if(d>u-m)throw new RangeError("frameCount out of range");let f=It(c),p=ii(c);if(p&&s>=l)throw new RangeError("planeIndex out of range");if(!p&&s!==0)throw new RangeError("planeIndex out of range");let g=(p?d:d*l)*f;if(t.byteLength2&&c!==o?kf(this._data,y,o,c,l,s,m,d):this._data.copyTo(t,{planeIndex:s,frameOffset:m,frameCount:d,format:c});else{let T=hd(o),w=It(o),S=ii(o),P;if(this._data instanceof ir){let x=A=>{let I=this._data.getDataPlane(A);if(!(I instanceof Uint8Array))throw new TypeError("getDataPlane() must return a Uint8Array.");let E=u*w*(S?1:l);if(I.byteLength!==E)throw new TypeError(`Data plane ${A} has invalid size. Expected exactly ${E} bytes, got ${I.byteLength} bytes.`);return I};if(S)if(p)P=x(s),s=0;else{P=new Uint8Array(u*w*l);for(let A=0;Athis.numberOfFrames)throw new RangeError("startSample out of range.");if(e>this.numberOfFrames)throw new RangeError("endSample out of range.");if(e0)for(let o=0;o0&&this.copyTo(a,{planeIndex:0,format:this.format,frameOffset:t,frameCount:r});return new i({data:a,format:this.format,sampleRate:this.sampleRate,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp+t/this.sampleRate})}close(){this._closed||(jn?.unregister(this),this._data instanceof ir?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):Qn(this._data)?this._data.close():this._data=new Uint8Array(0),this._closed=!0)}toAudioData(){if(this._closed)throw new Error("AudioSample is closed.");return this._data instanceof ir?this._createAudioDataFromData():Qn(this._data)?this._data.timestamp===this.microsecondTimestamp?this._data.clone():this._createAudioDataFromData():new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:this._data.buffer instanceof ArrayBuffer?this._data.buffer:this._data.slice()})}_createAudioDataFromData(){if(ii(this.format)){let t=this.allocationSize({planeIndex:0,format:this.format}),e=new ArrayBuffer(t*this.numberOfChannels);for(let r=0;r0;){let l=Math.min(o,u),m=new Float32Array(n*l);for(let d=0;d0;){let m=Math.min(o,u),d=new Float32Array(n*m);for(let p=0;p{switch(i){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")}},ii=i=>{switch(i){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},hd=i=>{switch(i){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)}},gd=i=>{switch(i){case"u8":case"u8-planar":return(t,e,r)=>t.setUint8(e,ce((r+1)*127.5,0,255));case"s16":case"s16-planar":return(t,e,r)=>t.setInt16(e,ce(Math.round(r*32767),-32768,32767),!0);case"s32":case"s32-planar":return(t,e,r)=>t.setInt32(e,ce(Math.round(r*2147483647),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(t,e,r)=>t.setFloat32(e,r,!0)}},Qn=i=>typeof AudioData<"u"&&i instanceof AudioData,bd=i=>{switch(i){case"u8-planar":return"u8";case"s16-planar":return"s16";case"s32-planar":return"s32";case"f32-planar":return"f32";default:return i}},kf=(i,t,e,r,n,a,s,o)=>{let c=hd(e),u=gd(r),l=It(e),m=It(r),d=ii(e);if(ii(r))if(d){let p=new ArrayBuffer(o*l),b=N(p);i.copyTo(p,{planeIndex:a,frameOffset:s,frameCount:o,format:e});for(let g=0;g{let e=i.allocationSize({format:t,planeIndex:0}),r=new ArrayBuffer(e);return i.copyTo(r,{format:t,planeIndex:0}),new ke({data:r,format:t,numberOfChannels:i.numberOfChannels,sampleRate:i.sampleRate,timestamp:i.timestamp,duration:i.duration})};var js=new Map,Xs=new Map,$s=i=>{if(!i||typeof i!="object")throw new TypeError("Encoding config must be an object.");if(!ne.includes(i.codec))throw new TypeError(`Invalid video codec '${i.codec}'. Must be one of: ${ne.join(", ")}.`);if(!(i.bitrate instanceof Ae)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("config.bitrate must be a positive integer or a quality.");if(i.keyFrameInterval!==void 0&&(!Number.isFinite(i.keyFrameInterval)||i.keyFrameInterval<0))throw new TypeError("config.keyFrameInterval, when provided, must be a non-negative number.");if(i.sizeChangeBehavior!==void 0&&!["deny","passThrough","fill","contain","cover"].includes(i.sizeChangeBehavior))throw new TypeError("config.sizeChangeBehavior, when provided, must be 'deny', 'passThrough', 'fill', 'contain' or 'cover'.");if(i.transform!==void 0){if(typeof i.transform!="object"||!i.transform)throw new TypeError("config.transform, when provided, must be an object.");if(i.transform.width!==void 0&&(!Number.isInteger(i.transform.width)||i.transform.width<=0))throw new TypeError("config.transform.width, when provided, must be a positive integer.");if(i.transform.height!==void 0&&(!Number.isInteger(i.transform.height)||i.transform.height<=0))throw new TypeError("config.transform.height, when provided, must be a positive integer.");if(i.transform.fit!==void 0&&!["fill","contain","cover"].includes(i.transform.fit))throw new TypeError('config.transform.fit, when provided, must be one of "fill", "contain", or "cover".');if(i.transform.width!==void 0&&i.transform.height!==void 0&&i.transform.fit===void 0&&!["fill","contain","cover"].includes(i.sizeChangeBehavior))throw new TypeError("When both config.transform.width and config.transform.height are provided, config.transform.fit must also be provided.");if(i.transform.fit!==void 0&&["fill","contain","cover"].includes(i.sizeChangeBehavior)&&i.transform.fit!==i.sizeChangeBehavior)throw new TypeError("config.transform.fit, when provided, cannot differ from config.sizeChangeBehavior when config.sizeChangeBehavior is 'fill', 'contain' or 'cover', as sizeChangeBehavior already determines the fitting algorithm.");if(i.transform.rotate!==void 0&&![0,90,180,270].includes(i.transform.rotate))throw new TypeError("config.transform.rotate, when provided, must be 0, 90, 180 or 270.");if(i.transform.crop!==void 0&&Er(i.transform.crop,"config.transform."),i.transform.process!==void 0&&typeof i.transform.process!="function")throw new TypeError("config.transform.process, when provided, must be a function.");if(i.transform.frameRate!==void 0&&(!Number.isFinite(i.transform.frameRate)||i.transform.frameRate<=0))throw new TypeError("config.transform.frameRate, when provided, must be a finite positive number.");if(i.transform.force!==void 0&&typeof i.transform.force!="boolean")throw new TypeError("config.transform.force, when provided, must be a boolean.")}if(i.onEncodedPacket!==void 0&&typeof i.onEncodedPacket!="function")throw new TypeError("config.onEncodedPacket, when provided, must be a function.");if(i.onEncoderConfig!==void 0&&typeof i.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");if(i.onEncodedSample!==void 0&&typeof i.onEncodedSample!="function")throw new TypeError("config.onEncodedSample, when provided, must be a function.");kd(i.codec,i)},kd=(i,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)!==i)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${i}).`);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.")},Wc=i=>{let t=i.bitrate instanceof Ae?i.bitrate._toVideoBitrate(i.codec,i.width,i.height):i.bitrate;return{codec:i.fullCodecString??Pa(i.codec,i.width,i.height,t,i.alpha==="keep"),width:i.width,height:i.height,displayWidth:i.squarePixelWidth,displayHeight:i.squarePixelHeight,bitrate:t,bitrateMode:i.bitrateMode,alpha:i.alpha??"discard",framerate:i.framerate,latencyMode:i.latencyMode,hardwareAcceleration:i.hardwareAcceleration,scalabilityMode:i.scalabilityMode,contentHint:i.contentHint,...el(i.codec)}},Ys=i=>{if(!i||typeof i!="object")throw new TypeError("Encoding config must be an object.");if(!oe.includes(i.codec))throw new TypeError(`Invalid audio codec '${i.codec}'. Must be one of: ${oe.join(", ")}.`);if(i.bitrate===void 0&&!(re.includes(i.codec)||i.codec==="flac"))throw new TypeError("config.bitrate must be provided for compressed audio codecs.");if(i.bitrate!==void 0&&!(i.bitrate instanceof Ae)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("config.bitrate, when provided, must be a positive integer or a quality.");if(i.transform!==void 0){if(typeof i.transform!="object"||!i.transform)throw new TypeError("config.transform, when provided, must be an object.");if(i.transform.numberOfChannels!==void 0&&(!Number.isInteger(i.transform.numberOfChannels)||i.transform.numberOfChannels<=0))throw new TypeError("config.transform.numberOfChannels, when provided, must be a positive integer.");if(i.transform.sampleRate!==void 0&&(!Number.isInteger(i.transform.sampleRate)||i.transform.sampleRate<=0))throw new TypeError("config.transform.sampleRate, when provided, must be a positive integer.");if(i.transform.sampleFormat!==void 0&&!["u8","s16","s32","f32"].includes(i.transform.sampleFormat))throw new TypeError("config.transform.sampleFormat, when provided, must be one of: u8, s16, s32, f32.");if(i.transform.process!==void 0&&typeof i.transform.process!="function")throw new TypeError("config.transform.process, when provided, must be a function.")}if(i.onEncodedPacket!==void 0&&typeof i.onEncodedPacket!="function")throw new TypeError("config.onEncodedPacket, when provided, must be a function.");if(i.onEncoderConfig!==void 0&&typeof i.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");if(i.onEncodedSample!==void 0&&typeof i.onEncodedSample!="function")throw new TypeError("config.onEncodedSample, when provided, must be a function.");Td(i.codec,i)},Td=(i,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)!==i)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${i}).`)},Hc=i=>{let t=i.bitrate instanceof Ae?i.bitrate._toAudioBitrate(i.codec):i.bitrate;return{codec:i.fullCodecString??Ia(i.codec,i.numberOfChannels,i.sampleRate),numberOfChannels:i.numberOfChannels,sampleRate:i.sampleRate,bitrate:t,bitrateMode:i.bitrateMode,...tl(i.codec)}},Ae=class{constructor(t){this._factor=t}_toVideoBitrate(t,e,r){let n=e*r,a=1920*1080,s=3e6,o=Math.pow(n/a,.95),c=s*o,u={avc:1,hevc:.6,vp9:.6,av1:.4,vp8:1.2,prores:22e7/s},m=c*u[t]*this._factor;return Math.ceil(m/1e3)*1e3}_toAudioBitrate(t){if(re.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 n=r*this._factor;return t==="aac"?n=[96e3,128e3,16e4,192e3].reduce((s,o)=>Math.abs(o-n)Math.abs(o-n){if(ne.includes(i))return Yn(i);if(oe.includes(i))return Zn(i);if(Be.includes(i))return Jn(i);throw new TypeError(`Unknown codec '${i}'.`)},Yn=async(i,t={})=>{let{width:e=1280,height:r=720,bitrate:n=1e6,...a}=t;if(!ne.includes(i))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(!(n instanceof Ae)&&(!Number.isInteger(n)||n<=0))throw new TypeError("bitrate must be a positive integer or a quality.");kd(i,a);let s=Wc({codec:i,width:e,height:r,bitrate:n,framerate:void 0,...a,alpha:"discard"}),o=JSON.stringify(s),c=js.get(o);if(c)return c;let u=(async()=>ji.some(d=>d.supports(i,s))?!0:typeof VideoEncoder>"u"||(e%2===1||r%2===1)&&(i==="avc"||i==="hevc")||!(await VideoEncoder.isConfigSupported(s)).supported?!1:qr()?new Promise(async d=>{try{let f=new VideoEncoder({output:()=>{},error:()=>d(!1)});f.configure(s);let p=new Uint8Array(e*r*4),b=new VideoFrame(p,{format:"RGBA",codedWidth:e,codedHeight:r,timestamp:0});f.encode(b),b.close(),await f.flush(),d(!0)}catch{d(!1)}}):!0)();return js.set(o,u),u},Zn=async(i,t={})=>{let{numberOfChannels:e=2,sampleRate:r=48e3,bitrate:n=128e3,...a}=t;if(!oe.includes(i))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(!(n instanceof Ae)&&(!Number.isInteger(n)||n<=0))throw new TypeError("bitrate must be a positive integer.");Td(i,a);let s=Hc({codec:i,numberOfChannels:e,sampleRate:r,bitrate:n,...a}),o=JSON.stringify(s),c=Xs.get(o);if(c)return c;let u=(async()=>Xi.some(m=>m.supports(i,s))||re.includes(i)?!0:typeof AudioEncoder>"u"?!1:(await AudioEncoder.isConfigSupported(s)).supported===!0)();return Xs.set(o,u),u},Jn=async i=>!!Be.includes(i),Cd=async()=>{let[i,t,e]=await Promise.all([qc(),Qi(),Kc()]);return[...i,...t,...e]},qc=async(i=ne,t)=>{let e=await Promise.all(i.map(r=>Yn(r,t)));return i.filter((r,n)=>e[n])},Qi=async(i=oe,t)=>{let e=await Promise.all(i.map(r=>Zn(r,t)));return i.filter((r,n)=>e[n])},Kc=async(i=Be)=>{let t=await Promise.all(i.map(Jn));return i.filter((e,r)=>t[r])},Zs=async(i,t)=>{for(let e of i)if(await Yn(e,t))return e;return null},Id=async(i,t)=>{for(let e of i)if(await Zn(e,t))return e;return null},Ed=async i=>{for(let t of i)if(await Jn(t))return t;return null};var ea=class{static supports(t,e){return!1}},ta=class{static supports(t,e){return!1}},ra=class{static supports(t,e){return!1}},ia=class{static supports(t,e){return!1}},Cr=[],Ir=[],ji=[],Xi=[],vd=i=>{if(i.prototype instanceof ea){let t=i;if(Cr.includes(t)){V._warn("Video decoder already registered.");return}Cr.push(t),Ws.clear()}else if(i.prototype instanceof ta){let t=i;if(Ir.includes(t)){V._warn("Audio decoder already registered.");return}Ir.push(t),Hs.clear()}else throw new TypeError("Decoder must be a CustomVideoDecoder or CustomAudioDecoder.")},_d=i=>{if(i.prototype instanceof ra){let t=i;if(ji.includes(t)){V._warn("Video encoder already registered.");return}ji.push(t),js.clear()}else if(i.prototype instanceof ia){let t=i;if(Xi.includes(t)){V._warn("Audio encoder already registered.");return}Xi.push(t),Xs.clear()}else throw new TypeError("Encoder must be a CustomVideoEncoder or CustomAudioEncoder.")};var Rd=i=>{let r=i,n=4096,a=0,s=12,o=0;for(r<0&&(r=-r,a=128),r+=33,r>8191&&(r=8191);(r&n)!==n&&s>=5;)n>>=1,s--;return o=r>>s-4&15,~(a|s-5<<4|o)&255},Fd=i=>{let e=0,r=0,n=~i;n&128&&(n&=-129,e=-1),r=((n&240)>>4)+5;let a=(1<{let e=2048,r=0,n=11,a=0,s=i;for(s<0&&(s=-s,r=128),s>4095&&(s=4095);(s&e)!==e&&n>=5;)e>>=1,n--;return a=s>>(n===4?1:n-4)&15,(r|n-4<<4|a)^85},Bd=i=>{let t=0,e=0,r=i^85;r&128&&(r&=-129,t=-1),e=((r&240)>>4)+4;let n=0;return e!==4?n=1<{if(!i||typeof i!="object")throw new TypeError("options must be an object.");if(i.metadataOnly!==void 0&&typeof i.metadataOnly!="boolean")throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(i.verifyKeyPackets!==void 0&&typeof i.verifyKeyPackets!="boolean")throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(i.verifyKeyPackets&&i.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.");if(i.skipLiveWait!==void 0&&typeof i.skipLiveWait!="boolean")throw new TypeError("options.skipLiveWait, when defined, must be a boolean.")},nr=i=>{if(!dr(i))throw new TypeError("timestamp must be a number.")},Gc=(i,t,e)=>e.verifyKeyPackets?t.then(async r=>{if(!r||r.type==="delta")return r;let n=await i.determinePacketType(r);return n&&(r.type=n),r}):t,yt=class{constructor(t){if(!(t instanceof _r))throw new TypeError("track must be an InputTrack.");this._track=t}async getFirstPacket(t={}){if(ai(t),this._track.input._disposed)throw new ye;return Gc(this._track,this._track._backing.getFirstPacket(t),t)}async getFirstKeyPacket(t={}){ai(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),ai(e),this._track.input._disposed)throw new ye;return Gc(this._track,this._track._backing.getPacket(t,e),e)}async getNextPacket(t,e={}){if(!(t instanceof j))throw new TypeError("packet must be an EncodedPacket.");if(ai(e),this._track.input._disposed)throw new ye;return Gc(this._track,this._track._backing.getNextPacket(t,e),e)}async getKeyPacket(t,e={}){if(nr(t),ai(e),this._track.input._disposed)throw new ye;if(!e.verifyKeyPackets)return this._track._backing.getKeyPacket(t,e);let r=await this._track._backing.getKeyPacket(t,e);return r&&(h(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 j))throw new TypeError("packet must be an EncodedPacket.");if(ai(e),this._track.input._disposed)throw new ye;if(!e.verifyKeyPackets)return this._track._backing.getNextKeyPacket(t,e);let r=await this._track._backing.getNextKeyPacket(t,e);return r&&(h(r.type==="key"),await this._track.determinePacketType(r)==="delta"?this.getNextKeyPacket(r,e):r)}packets(t,e,r={}){if(t!==void 0&&!(t instanceof j))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 j))throw new TypeError("endPacket must be an EncodedPacket.");if(ai(r),this._track.input._disposed)throw new ye;let n=[],{promise:a,resolve:s}=J(),{promise:o,resolve:c}=J(),u=!1,l=!1,m=null,d=!1,f=[],p=()=>Math.max(2,f.length);(async()=>{let g=t??await this.getFirstPacket(r);for(;g&&!l&&!this._track.input._disposed&&!(e&&g.sequenceNumber>=e?.sequenceNumber);){if(n.length>p()){({promise:o,resolve:c}=J()),await o;continue}n.push(g),s(),{promise:a,resolve:s}=J(),g=await this.getNextPacket(g,r)}u=!0,s()})().catch(g=>{d||(m=g,d=!0,s())});let b=this._track;return{async next(){for(;;){if(b.input._disposed)throw new ye;if(l)return{value:void 0,done:!0};if(d)throw m;if(n.length>0){let g=n.shift(),y=performance.now();for(f.push(y);f.length>0&&y-f[0]>=1e3;)f.shift();return c(),{value:g,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(g){throw g},[Symbol.asyncIterator](){return this}}}},na=class{constructor(t,e){this.onSample=t;this.onError=e}},$i=class{mediaSamplesInRange(t=-1/0,e=1/0,r){nr(t),nr(e);let n=[],a=!1,s=null,{promise:o,resolve:c}=J(),{promise:u,resolve:l}=J(),m=!1,d=!1,f=!1,p=null,b=!1,g={...r,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let T=await this._createDecoder(A=>{if(l(),A.timestamp>=e&&(d=!0),d){A.close();return}s&&(A.timestamp>t?(n.push(s),a=!0):s.close()),A.timestamp>=t&&(n.push(A),a=!0),s=a?null:A,n.length>0&&(c(),{promise:o,resolve:c}=J())},A=>{b||(p=A,b=!0,c())}),w=this._createPacketSink(),S=await w.getKeyPacket(t,g)??await w.getFirstKeyPacket(g),P=S,x=w.packets(S??void 0,void 0,g);for(await x.next();P&&!d&&!this._track.input._disposed;){let A=Od(n.length);if(n.length+T.getDecodeQueueSize()>A){({promise:u,resolve:l}=J()),await u;continue}T.decode(P);let I=await x.next();if(I.done)break;P=I.value}await x.return(),!f&&!this._track.input._disposed&&await T.flush(),T.close(),!a&&s&&n.push(s),m=!0,c()})().catch(T=>{b||(p=T,b=!0,c())});let y=this._track,k=()=>{s?.close();for(let T of n)T.close()};return{async next(){for(;;){if(y.input._disposed)throw k(),new ye;if(f)return{value:void 0,done:!0};if(b)throw k(),p;if(n.length>0){let T=n.shift();return l(),{value:T,done:!1}}else if(!m)await o;else return{value:void 0,done:!0}}},async return(){return f=!0,d=!0,l(),c(),k(),{value:void 0,done:!0}},async throw(T){throw T},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(t,e){vu(t);let r=Eu(t),n=[],a=[],{promise:s,resolve:o}=J(),{promise:c,resolve:u}=J(),l=!1,m=!1,d=null,f=!1,p=k=>{a.push(k),o(),{promise:s,resolve:o}=J()},b={...e,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let k=await this._createDecoder(A=>{if(u(),m){A.close();return}let I=0;for(;n.length>0&&A.timestamp-n[0]>-1e-10;)I++,n.shift();if(I>0)for(let E=0;E{f||(d=A,f=!0,o())}),T=this._createPacketSink(),w=null,S=null,P=-1,C=async()=>{h(S);let A=S;for(k.decode(A);A.sequenceNumberI&&!m;)({promise:c,resolve:u}=J()),await c;if(m)break;let E=await T.getNextPacket(A,b);h(E),k.decode(E),A=E}P=-1},x=async()=>{await k.flush();for(let A=0;A{f||(d=k,f=!0,o())});let g=this._track,y=()=>{for(let k of a)k?.close()};return{async next(){for(;;){if(g.input._disposed)throw y(),new ye;if(m)return{value:void 0,done:!0};if(f)throw y(),d;if(a.length>0){let k=a.shift();return h(k!==void 0),u(),{value:k,done:!1}}else if(!l)await s;else return{value:void 0,done:!0}}},async return(){return m=!0,u(),o(),y(),{value:void 0,done:!0}},async throw(k){throw k},[Symbol.asyncIterator](){return this}}}},Od=i=>i===0?40:8,jc=class extends na{constructor(e,r,n,a,s,o){super(e,r);this.codec=n;this.decoderConfig=a;this.rotation=s;this.timeResolution=o;this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new or;this.customDecoderQueueSize=0;this.inputTimestamps=[];this.sampleQueue=[];this.currentPacketIndex=0;this.raslSkipped=!1;this.alphaDecoder=null;this.alphaHadKeyframe=!1;this.colorQueue=[];this.alphaQueue=[];this.merger=null;this.decodedAlphaChunkCount=0;this.alphaDecoderQueueSize=0;this.nullAlphaFrameQueue=[];this.currentAlphaPacketIndex=0;this.alphaRaslSkipped=!1;this.finalSamples=[];this.mergeAlphaPromises=[];let c=Cr.find(u=>u.supports(n,a));if(c)this.customDecoder=new c,this.customDecoder.codec=n,this.customDecoder.config=a,this.customDecoder.onSample=u=>{if(!(u instanceof Ve))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(u)},this.customDecoder.onError=u=>{r(u)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(u=>r(u));else{let u=m=>{if(this.alphaQueue.length>0){let d=this.alphaQueue.shift();h(d!==void 0),this.mergeAlpha(m,d)}else this.colorQueue.push(m)};if(n==="avc"&&this.decoderConfig.description&&mn()){let m=Oa(X(this.decoderConfig.description));if(m&&m.sequenceParameterSets.length>0){let d=bn(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:(h(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)).catch(r=>this.onError(r)).finally(()=>this.customDecoderQueueSize--);else{if(h(this.decoder),lr()||Ho(this.inputTimestamps,e.timestamp,r=>r),mn()&&this.currentPacketIndex===0){if(this.codec==="avc"){let r=[],n=!1;for(let s of Yo(e.data,this.decoderConfig)){let o=Qt(e.data[s.offset]);if(n||=o>=1&&o<=5,o===9){if(n)break;r.length=0}o>=20&&o<=31||r.push(e.data.subarray(s.offset,s.offset+s.length))}let a=sl(r,this.decoderConfig);e=new j(a,e.type,e.timestamp,e.duration)}else if(this.codec==="hevc"){let r=dl(e.data,this.decoderConfig);r&&(e=new j(r,e.type,e.timestamp,e.duration))}}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha){this.pushNullAlphaFrame();return}if(this.merger||(this.merger=new Xc),!this.alphaDecoder){let n=s=>{if(this.colorQueue.length>0){let o=this.colorQueue.shift();h(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();h(o!==void 0),this.mergeAlpha(o,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--},a=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:s=>{try{n(s)}catch(o){this.onError(o)}},error:s=>{s.stack=a,this.onError(s)}}),this.alphaDecoder.configure(this.decoderConfig)}let r=yr(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 hn(e,this.decoderConfig)){let n=ut(e[r.offset]);if(n===8||n===9)return!0}return!1}sampleHandler(e){if(lr()){if(this.sampleQueue.length>0&&e.timestamp>=Y(this.sampleQueue).timestamp){for(let r of this.sampleQueue)this.finalizeAndEmitSample(r);this.sampleQueue.length=0}Ho(this.sampleQueue,e,r=>r.timestamp)}else{let r=this.inputTimestamps.shift();h(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)}async mergeAlpha(e,r){let n=J();this.mergeAlphaPromises.push(n.promise);let a={sample:null};this.finalSamples.push(a);try{if(!r)a.sample=new Ve(e);else{h(this.merger);let s=await this.merger.merge(e,r);a.sample=new Ve(s)}for(;this.finalSamples.length>0&&this.finalSamples[0].sample!==null;){let s=this.finalSamples.shift();this.sampleHandler(s.sample)}}catch(s){ki(this.finalSamples,a),this.onError(s)}finally{ki(this.mergeAlphaPromises,n.promise),n.resolve()}}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(h(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await Promise.all(this.mergeAlphaPromises),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),lr()){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()):(h(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}},Qc=null,Xc=class{constructor(){this.workers=[];this.nextWorkerIndex=0;this.pendingRequests=new Map;this.nextRequestId=0}merge(t,e){if(this.workers.length===0){if(!Qc){let o=new Blob([`(${Tf.toString()})()`],{type:"application/javascript"});Qc=URL.createObjectURL(o)}let s=ce(navigator.hardwareConcurrency,1,4);for(let o=0;o{let l=u.data,m=this.pendingRequests.get(l.id);m&&(this.pendingRequests.delete(l.id),"error"in l?m.reject(new Error(l.error)):m.resolve(l.frame))}),c.addEventListener("error",u=>{let l=new Error(u.message||"Color/alpha merge worker error.");for(let m of this.pendingRequests.values())m.reject(l);this.pendingRequests.clear()}),this.workers.push(c)}}let r=this.nextRequestId++,n=J();this.pendingRequests.set(r,n);let a=this.workers[this.nextWorkerIndex];return this.nextWorkerIndex=(this.nextWorkerIndex+1)%this.workers.length,a.postMessage({id:r,color:t,alpha:e},{transfer:[t,e]}),n.promise}close(){for(let e of this.workers)e.terminate();this.workers.length=0;let t=new Error("Color/alpha merger closed.");for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()}},Tf=()=>{let i=null,t=null,e=Promise.resolve();self.addEventListener("message",c=>{let{id:u,color:l,alpha:m}=c.data;e=e.then(async()=>{try{let d=await r(l,m);self.postMessage({id:u,frame:d},{transfer:[d]})}catch(d){self.postMessage({id:u,error:d.message})}finally{l.close(),m.close()}})});let r=async(c,u)=>{let l=c.format,m=u.format;if(!l||!m)throw new Error("CPU color/alpha merging requires a known VideoFrame format.");let d=l.includes("P10"),f=l.includes("P12"),p=m.includes("P10"),b=m.includes("P12");if(p!==d||b!==f)throw new Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${l}', alpha: '${m}').`);if(l==="RGBX"||l==="RGBA"||l==="BGRX"||l==="BGRA")return await n(c,u,l);if(l==="I420"||l==="I420P10"||l==="I420P12"||l==="I422"||l==="I422P10"||l==="I422P12"||l==="I444"||l==="I444P10"||l==="I444P12")return await a(c,u,l);if(l==="NV12")return await s(c,u);throw new Error(`CPU color/alpha merging does not support format '${l}'.`)},n=async(c,u,l)=>{let m=c.visibleRect?.width??c.codedWidth,d=c.visibleRect?.height??c.codedHeight,f=m*d,p=new Uint8Array(f*4);await c.copyTo(p);let b=await o(u,m,d,1);for(let k=0,T=3;k{let m=c.visibleRect?.width??c.codedWidth,d=c.visibleRect?.height??c.codedHeight,f=l.includes("P10"),p=l.includes("P12"),b=f||p?2:1,g,y;l.startsWith("I420")?(g=Math.ceil(m/2),y=Math.ceil(d/2)):l.startsWith("I422")?(g=Math.ceil(m/2),y=d):(g=m,y=d);let k=m*d,T=g*y,w=k*b,S=T*b,P=k*b,C=w+2*S+P,x=new Uint8Array(C);await c.copyTo(x);let A=await o(u,m,d,b),I=w+2*S;x.set(A,I);let _={format:l.slice(0,4)+"A"+l.slice(4),codedWidth:m,codedHeight:d,timestamp:c.timestamp,duration:c.duration??void 0,transfer:[x.buffer]};return new VideoFrame(x,_)},s=async(c,u)=>{let l=c.visibleRect?.width??c.codedWidth,m=c.visibleRect?.height??c.codedHeight,d=l*m,f=Math.ceil(l/2),p=Math.ceil(m/2),b=f*p,g=c.allocationSize();(!t||t.byteLength!==g)&&(t=new Uint8Array(g)),await c.copyTo(t);let y=new Uint8Array(d+2*b+d);y.set(t.subarray(0,d),0);let k=d,T=d+b,w=d;for(let C=0;C{let d=c.allocationSize();(!i||i.byteLength!==d)&&(i=new Uint8Array(d)),await c.copyTo(i);let f=c.format;if(f==="RGBA"||f==="BGRA"||f==="RGBX"||f==="BGRX"){let p=f==="RGBA"||f==="RGBX"?0:2,b=u*l;for(let g=0;g{if(!i||typeof i!="object")throw new TypeError("decoderOptions must be an object.");if(i.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(i.hardwareAcceleration))throw new TypeError("decoderOptions.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(i.optimizeForLatency!==void 0&&typeof i.optimizeForLatency!="boolean")throw new TypeError("decoderOptions.optimizeForLatency, when provided, must be a boolean.")},vr=class extends $i{constructor(t,e={}){if(!(t instanceof Et))throw new TypeError("videoTrack must be an InputVideoTrack.");Dd(e),super(),this._track=t,this._decoderOptions=e}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(),n=await this._track.getRotation(),a=await this._track.getDecoderConfig(),s=await this._track.getTimeResolution();return h(r&&a),a={...a,hardwareAcceleration:this._decoderOptions.hardwareAcceleration,optimizeForLatency:this._decoderOptions.optimizeForLatency},new jc(t,e,r,a,n,s)}_createPacketSink(){return new yt(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,e,r={}){return this.mediaSamplesInRange(t,e,r)}samplesAtTimestamps(t,e={}){return this.mediaSamplesAtTimestamps(t,e)}},Js=class{constructor(t,e={}){this._rotation=0;this._initPromise=null;this._nextCanvasIndex=0;if(!(t instanceof Et))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&&Er(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.");e.decoderOptions!==void 0&&Dd(e.decoderOptions),this._videoTrack=t,this._alpha=e.alpha??!1,this._options=e,this._fit=e.fit??"fill",this._videoSampleSink=new vr(t,e.decoderOptions),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(),n=await e.getSquarePixelWidth(),a=await e.getSquarePixelHeight(),[s,o]=r%180===0?[n,a]:[a,n],c=t.crop;c&&(c=Gi(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,n=this._canvasPool[this._nextCanvasIndex],a=!1;n||(typeof document<"u"?(n=document.createElement("canvas"),n.width=e,n.height=r):n=new OffscreenCanvas(e,r),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=n),a=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);let s=n.getContext("2d",{alpha:this._alpha||qr()});h(s),s.resetTransform(),a||(!this._alpha&&qr()?(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:n,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,e,r){await this._ensureInit(),yield*ln(this._videoSampleSink.samples(t,e,r),n=>this._videoSampleToWrappedCanvas(n))}async*canvasesAtTimestamps(t,e){await this._ensureInit(),yield*ln(this._videoSampleSink.samplesAtTimestamps(t,e),r=>r&&this._videoSampleToWrappedCanvas(r))}},$c=class extends na{constructor(e,r,n,a){super(e,r);this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new or;this.customDecoderQueueSize=0;this.currentTimestamp=null;this.expectedFirstTimestamp=null;this.timestampOffset=0;let s=c=>{let u=c.timestamp;this.expectedFirstTimestamp&&this.currentTimestamp===null&&(this.timestampOffset=this.expectedFirstTimestamp-u),u+=this.timestampOffset,(this.currentTimestamp===null||Math.abs(u-this.currentTimestamp)>=c.duration)&&(this.currentTimestamp=u);let l=this.currentTimestamp;if(this.currentTimestamp+=c.duration,c.numberOfFrames===0){c.close();return}let m=a.sampleRate;c.setTimestamp(Math.round(l*m)/m),e(c)},o=Ir.find(c=>c.supports(n,a));if(o)this.customDecoder=new o,this.customDecoder.codec=n,this.customDecoder.config=a,this.customDecoder.onSample=c=>{if(!(c instanceof ke))throw new TypeError("The argument passed to onSample must be an AudioSample.");s(c)},this.customDecoder.onError=c=>{r(c)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init()).catch(c=>r(c));else{let c=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:u=>{try{s(new ke(u))}catch(l){this.onError(l)}},error:u=>{u.stack=c,this.onError(u)}}),this.decoder.configure(a)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(h(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).catch(r=>this.onError(r)).finally(()=>this.customDecoderQueueSize--)):(h(this.decoder),this.expectedFirstTimestamp??=e.timestamp,this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(h(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(h(this.decoder),this.decoder.close())}},Yc=class extends na{constructor(e,r,n){super(e,r);this.decoderConfig=n;this.currentTimestamp=null;h(re.includes(n.codec)),this.codec=n.codec;let{dataType:a,sampleSize:s,littleEndian:o}=Se(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)=>Fd(c.getUint8(u)):a==="alaw"?this.readInputValue=(c,u)=>Bd(c.getUint8(u)):h(!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):h(!1);break;case 3:a==="unsigned"?this.readInputValue=(c,u)=>Wr(c,u,o)-2**23:a==="signed"?this.readInputValue=(c,u)=>_u(c,u,o):h(!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):h(!1);break;case 8:a==="float"?this.readInputValue=(c,u)=>c.getFloat64(u,o):h(!1);break;default:ee(s),h(!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:ee(s),h(!1)}}getDecodeQueueSize(){return 0}decode(e){let r=N(e.data),n=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,a=n*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 ke({format:this.outputFormat,data:s,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:n,timestamp:u});this.onSample(l)}async flush(){}close(){}},si=class extends $i{constructor(t){if(!(t instanceof vt))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(),n=await this._track.getDecoderConfig();return h(r&&n),re.includes(n.codec)?new Yc(t,e,n):new $c(t,e,r,n)}_createPacketSink(){return new yt(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,e,r={}){return this.mediaSamplesInRange(t,e,r)}samplesAtTimestamps(t,e={}){return this.mediaSamplesAtTimestamps(t,e)}},eo=class{constructor(t){if(!(t instanceof vt))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new si(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,e,r){return ln(this._audioSampleSink.samples(t,e,r),n=>this._audioSampleToWrappedArrayBuffer(n))}buffersAtTimestamps(t,e){return ln(this._audioSampleSink.samplesAtTimestamps(t,e),r=>r&&this._audioSampleToWrappedArrayBuffer(r))}};var _r=class i{constructor(t,e){this.input=t,this._backing=e}isVideoTrack(){return this instanceof Et}isAudioTrack(){return this instanceof vt}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return de(this._backing.getInternalCodecId(),"internalCodecId","getInternalCodecId")}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return de(this._backing.getLanguageCode(),"languageCode","getLanguageCode")}async getName(){return this._backing.getName()}get name(){return de(this._backing.getName(),"name","getName")}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return de(this._backing.getTimeResolution(),"timeResolution","getTimeResolution")}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getUnixTimeForTimestamp(t){return this._backing.getUnixTimeForTimestamp(t)}async hasUnixTimeMapping(){return await this._backing.getUnixTimeForTimestamp(await this.getFirstTimestamp())!==null}async getDisposition(){return this._backing.getDisposition()}get disposition(){return de(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 yt(this),n=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;n=Math.min(n,c.timestamp),a=Math.max(a,c.timestamp+c.duration),s++,o+=c.byteLength}return{packetCount:s,averagePacketRate:s?Number((s/(a-n)).toPrecision(16)):0,averageBitrate:s?Number((8*o/(a-n)).toPrecision(16)):0}}async isLive(){return await this._backing.getLiveRefreshInterval()!==null}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(t){if(!(t instanceof i))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(Rr({filter:e=>e.canBePairedWith(this)},t))}async getPairableVideoTracks(t){return this.input.getVideoTracks(Rr({filter:e=>e.canBePairedWith(this)},t))}async getPairableAudioTracks(t){return this.input.getAudioTracks(Rr({filter:e=>e.canBePairedWith(this)},t))}async getPrimaryPairableVideoTrack(t){return this.input.getPrimaryVideoTrack(Rr({filter:e=>e.canBePairedWith(this)},t))}async getPrimaryPairableAudioTrack(t){return this.input.getPrimaryAudioTrack(Rr({filter:e=>e.canBePairedWith(this)},t))}async hasPairableTrack(t){t&&=Zc(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&&=Zc(t),this.hasPairableTrack(async e=>e.isVideoTrack()&&(!t||await t(e)))}hasPairableAudioTrack(t){return t&&=Zc(t),this.hasPairableTrack(async e=>e.isAudioTrack()&&(!t||await t(e)))}},de=(i,t,e)=>{if(i instanceof Promise)throw new Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${e}()' instead.`);return i},Zc=i=>{if(i!==void 0&&typeof i!="function")throw new TypeError("predicate, when provided, must be a function.");return i?t=>{let e=n=>{if(typeof n!="boolean")throw new TypeError("predicate must return or resolve to a boolean value.");return n},r=i(t);return r instanceof Promise?r.then(e):e(r)}:void 0},Et=class extends _r{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 de(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??await this._backing.getCodec()==="prores"}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return de(this._backing.getCodedWidth(),"codedWidth","getCodedWidth")}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return de(this._backing.getCodedHeight(),"codedHeight","getCodedHeight")}async getRotation(){return this._backing.getRotation()}get rotation(){return de(this._backing.getRotation(),"rotation","getRotation")}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return de(this._backing.getSquarePixelWidth(),"squarePixelWidth","getSquarePixelWidth")}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return de(this._backing.getSquarePixelHeight(),"squarePixelHeight","getSquarePixelHeight")}async getPixelAspectRatio(){return this._pixelAspectRatioCache??=Lt({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()})}get pixelAspectRatio(){return this._pixelAspectRatioCache??=Lt({num:de(this._backing.getSquarePixelWidth(),"pixelAspectRatio","getPixelAspectRatio")*de(this._backing.getCodedHeight(),"pixelAspectRatio","getPixelAspectRatio"),den:de(this._backing.getSquarePixelHeight(),"pixelAspectRatio","getPixelAspectRatio")*de(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=de(e,"displayWidth","getDisplayWidth");if(a!==null)return a}let n=de(this._backing.getRotation(),"displayWidth","getDisplayWidth")%180===0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight();return de(n,"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=de(e,"displayHeight","getDisplayHeight");if(a!==null)return a}let n=de(this._backing.getRotation(),"displayHeight","getDisplayHeight")%180===0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth();return de(n,"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==="pq"||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 h(r!==null),Cr.some(a=>a.supports(r,e))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0}catch(e){return V._error("Error during decodability check:",e),!1}}async determinePacketType(e){if(!(e instanceof j))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 n=await this.getDecoderConfig();return h(n),yr(r,n,e.data)}},vt=class extends _r{constructor(t,e){super(t,e),this._backing=e}get type(){return"audio"}async getCodec(){return this._backing.getCodec()}get codec(){return de(this._backing.getCodec(),"codec","getCodec")}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return de(this._backing.getNumberOfChannels(),"numberOfChannels","getNumberOfChannels")}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return de(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 h(e!==null),Ir.some(r=>r.supports(e,t))||t.codec.startsWith("pcm-")?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(t)).supported===!0}catch(t){return V._error("Error during decodability check:",t),!1}}async determinePacketType(t){if(!(t instanceof j))throw new TypeError("packet must be an EncodedPacket.");return await this.getCodec()===null?null:"key"}},Vd=i=>i??1/0,aa=i=>-(i??-1/0),Fr=i=>-i,Yi=i=>{if(typeof i!="object"||!i)throw new TypeError("query must be an object.");if(i.filter!==void 0&&typeof i.filter!="function")throw new TypeError("query.filter, when provided, must be a function.");if(i.sortBy!==void 0&&typeof i.sortBy!="function")throw new TypeError("query.sortBy, when provided, must be a function.");return{filter:i.filter?t=>{let e=n=>{if(typeof n!="boolean")throw new TypeError("query.filter must return or resolve to a boolean.");return n},r=i.filter(t);return r instanceof Promise?r.then(e):e(r)}:void 0,sortBy:i.sortBy?t=>{let e=n=>{if(typeof n!="number"&&(!Array.isArray(n)||!n.every(a=>typeof a=="number")))throw new TypeError("query.sortBy must return or resolve to a number or an array of numbers.");return n},r=i.sortBy(t);return r instanceof Promise?r.then(e):e(r)}:void 0}},Rr=(i,t)=>({filter:i?.filter||t?.filter?e=>{let r=i?.filter?.(e)??!0,n=a=>a===!1?!1:t?.filter?.(e)??!0;return r instanceof Promise?r.then(n):n(r)}:void 0,sortBy:i?.sortBy||t?.sortBy?e=>{let r=i?.sortBy?.(e)??[],n=t?.sortBy?.(e)??[],a=(s,o)=>[...Array.isArray(s)?s:[s],...Array.isArray(o)?o:[o]];return r instanceof Promise||n instanceof Promise?Promise.all([r,n]).then(([s,o])=>a(s,o)):a(r,n)}:void 0}),to=async(i,t)=>{let e=i;if(t?.filter){let s=i.map(c=>t.filter(c));if(s.some(c=>c instanceof Promise)){let c=await Promise.all(s);e=i.filter((u,l)=>c[l])}else e=i.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)};Ti();var wf=1,td=2,Pr=class i extends Ue{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 De)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(e.source instanceof Ee||e.source instanceof Ar))throw new TypeError("options.source must be a Source or SourceRef.");if(e.source instanceof Ee&&e.source._disposed)throw new TypeError("options.source must not be a disposed Source.");if(e.initInput!==void 0&&!(e.initInput instanceof i))throw new TypeError("options.initInput, when provided, must be an Input.");e.formatOptions!==void 0&&sd(e.formatOptions,"formatOptions"),this._formats=e.formats,this._initInput=e.initInput??null,this._formatOptions=e.formatOptions??{},e.source instanceof Ee?this._rootRef=e.source.ref():this._rootRef=e.source,this._sourceRefs.push(this._rootRef)}get disposed(){return this._disposed}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){h(this._rootSource instanceof Oe);let r=await this._rootSource._resolveRequest(e);return this._emit("source",{source:r.source,request:e,isRoot:e.isRoot}),r}_getSourceCached(e,r=wf){let n=this._sourceCache.find(o=>o.cacheGroup===r&&Fc(o.request,e));if(n)return n.age++,Promise.resolve(n.sourceRef.source.ref());let a=this._sourceCachePromises.find(o=>o.cacheGroup===r&&Fc(o.request,e));if(a)return a.promise.then(o=>o.sourceRef.source.ref());let s=(async()=>{let o=await this._getSourceUncached(e);if(Qr(this._sourceCache,d=>d.cacheGroup===r&&d.sourceRef.source._refCount===1)>=4){let d=wi(this._sourceCache,p=>p.cacheGroup===r&&p.sourceRef.source._refCount===1?p.age:1/0);h(d!==-1);let f=this._sourceCache[d];this._sourceCache.splice(d,1),f.sourceRef.free(),ki(this._sourceRefs,f.sourceRef)}this._sourceRefs.push(o);let l=this._sourceCachePromises.findIndex(d=>d.request===e);return h(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 xr(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 Zi})()}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),h(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof Zi)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 n=await Promise.all(r.map(a=>a.getFirstTimestamp()));return Math.min(...n)}async computeDuration(e,r){e??=await this.getTracks();let n=e.filter(s=>s!==null);if(n.length===0)return 0;let a=await Promise.all(n.map(s=>s.computeDuration(r)));return Math.max(...a)}async getDurationFromMetadata(e,r){e??=await this.getTracks();let n=e.filter(o=>o!==null),s=(await Promise.all(n.map(o=>o.getDurationFromMetadata(r)))).filter(o=>o!==null);return s.length===0?null:Math.max(...s)}async getTracks(e){e&&=Yi(e);let n=(await this._getTrackBackings()).map(a=>this._wrapBackingAsTrack(a));return to(n,e)}async getVideoTracks(e){e&&=Yi(e);let n=(await this.getTracks()).filter(a=>a.isVideoTrack());return to(n,e)}async getAudioTracks(e){e&&=Yi(e);let n=(await this.getTracks()).filter(a=>a.isAudioTrack());return to(n,e)}async getPrimaryVideoTrack(e){e&&=Yi(e);let r=Rr(e,{sortBy:async a=>[Fr((await a.getDisposition()).default),Fr(await a.hasPairableAudioTrack()),Fr(!await a.hasOnlyKeyPackets()),aa(await a.getBitrate())]});return(await this.getVideoTracks(r))[0]??null}async getPrimaryAudioTrack(e){e&&=Yi(e);let r=await this.getPrimaryVideoTrack(),n=Rr(e,{sortBy:async s=>[Fr(!r||s.canBePairedWith(r)),Fr((await s.getDisposition()).default),aa(await s.getBitrate())]});return(await this.getAudioTracks(n))[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 Et(this,e):new vt(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,this._demuxerPromise&&this._demuxerPromise.then(e=>e.dispose()).catch(()=>{})}}[Symbol.dispose](){this.dispose()}},Zi=class extends Error{constructor(t="Input has an unsupported or unrecognizable format."){super(t),this.name="UnsupportedInputFormatError"}},ye=class extends Error{constructor(t="Input has been disposed."){super(t),this.name="InputDisposedError"}};var xr=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 ye;if(t<0||this.fileSizeNonStrict!==null&&t+e>this.fileSizeNonStrict)return null;if(e===0){let a=new Uint8Array(0);return new be(a,N(a),0,t,t)}let r=t+e,n=this.source._read(t,r,_c,Rc);return n instanceof Promise?n.then(a=>a?new be(a.bytes,a.view,a.offset,t,r):null):n?new be(n.bytes,n.view,n.offset,t,r):null}requestSliceRange(t,e,r){if(this.source._disposed)throw new ye;if(t<0)return null;if(this.fileSizeNonStrict!==null)return this.requestSlice(t,ce(this.fileSizeNonStrict-t,e,r));{let n=this.requestSlice(t,r),a=s=>s||(h(this.fileSizeNonStrict!==null),this.requestSlice(t,ce(this.fileSizeNonStrict-t,e,r)));return n instanceof Promise?n.then(a):a(n)}}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=this.requestSliceRange(r,0,t);if(s instanceof Promise&&(s=await s),!s||s.length===0)break;let o=B(s,s.length);e.push(o),r+=s.length}let n=new Uint8Array(r),a=0;for(let s of e)n.set(s,a),a+=s.length;return new be(n,N(n),0,0,r)})()}},be=class i{constructor(t,e,r,n,a){this.bytes=t;this.view=e;this.offset=r;this.start=n;this.end=a;this.bufferPos=n-r}static tempFromBytes(t){return new i(t,N(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 i(this.bytes,this.view,this.offset,t,t+e)}},qe=(i,t)=>{if(i.filePosi.end)throw new RangeError(`Tried reading [${i.filePos}, ${i.filePos+t}), but slice is [${i.start}, ${i.end}). This is likely an internal error, please report it alongside the file that caused it.`)},B=(i,t)=>{qe(i,t);let e=i.bytes.subarray(i.bufferPos,i.bufferPos+t);return i.bufferPos+=t,e},U=i=>(qe(i,1),i.view.getUint8(i.bufferPos++)),zi=(i,t)=>{qe(i,2);let e=i.view.getUint16(i.bufferPos,t);return i.bufferPos+=2,e},ue=i=>{qe(i,2);let t=i.view.getUint16(i.bufferPos,!1);return i.bufferPos+=2,t},ft=i=>{qe(i,3);let t=Wr(i.view,i.bufferPos,!1);return i.bufferPos+=3,t},xn=i=>{qe(i,2);let t=i.view.getInt16(i.bufferPos,!1);return i.bufferPos+=2,t},er=(i,t)=>{qe(i,4);let e=i.view.getUint32(i.bufferPos,t);return i.bufferPos+=4,e},F=i=>{qe(i,4);let t=i.view.getUint32(i.bufferPos,!1);return i.bufferPos+=4,t},Zr=i=>{qe(i,4);let t=i.view.getUint32(i.bufferPos,!0);return i.bufferPos+=4,t},$t=i=>{qe(i,4);let t=i.view.getInt32(i.bufferPos,!1);return i.bufferPos+=4,t},Sf=i=>{qe(i,4);let t=i.view.getInt32(i.bufferPos,!0);return i.bufferPos+=4,t},mc=(i,t)=>{let e,r;return t?(e=er(i,!0),r=er(i,!0)):(r=er(i,!1),e=er(i,!1)),r*4294967296+e},Ne=i=>{let t=F(i),e=F(i);return t*4294967296+e},Il=i=>{let t=$t(i),e=F(i);return t*4294967296+e},Ul=i=>{let t=Zr(i);return Sf(i)*4294967296+t},Fl=i=>{qe(i,4);let t=i.view.getFloat32(i.bufferPos,!1);return i.bufferPos+=4,t},Za=i=>{qe(i,8);let t=i.view.getFloat64(i.bufferPos,!1);return i.bufferPos+=8,t},ae=(i,t)=>{qe(i,t);let e="";for(let r=0;rme.decode(B(i,t)).split(` `).map(a=>a.trim()).filter(a=>a.length>0&&!e?.ignore?.(a));var En=128,Ie=10,en=["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"],Ol=(i,t)=>{let e=i.filePos;t.raw??={},t.raw.TAG??=B(i,En-3),i.filePos=e;let r=Ji(i,30);r&&(t.title??=r);let n=Ji(i,30);n&&(t.artist??=n);let a=Ji(i,30);a&&(t.album??=a);let s=Ji(i,4),o=Number.parseInt(s,10);Number.isInteger(o)&&o>0&&(t.date??=new Date(String(o)));let c=B(i,30),u;if(c[28]===0&&c[29]!==0){let m=c[29];m>0&&(t.trackNumber??=m),i.skip(-30),u=Ji(i,28),i.skip(2)}else i.skip(-30),u=Ji(i,30);u&&(t.comment??=u);let l=U(i);l{let e=B(i,t),r=Kr(e.indexOf(0),e.length),n=e.subarray(0,r),a="";for(let s=0;s{let t=i.filePos,e=ae(i,3),r=U(i),n=U(i),a=U(i),s=F(i);if(e!=="ID3"||r===255||n===255||(s&2155905152)!==0)return i.filePos=t,null;let o=Ra(s);return a&16&&(o+=Ie),{majorVersion:r,revision:n,flags:a,size:o}},wr=(i,t,e)=>{if(![2,3,4].includes(t.majorVersion)){V._warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);return}let r=t.flags&16?t.size-Ie:t.size,n=B(i,r),a=new Jc(t,n);if(t.flags&128&&t.majorVersion===3&&a.ununsynchronizeAll(),t.flags&64){let s=a.readU32();t.majorVersion===3?a.pos+=s:a.pos+=s-4}for(;a.pos<=a.bytes.length-a.frameHeaderSize();){let s=a.readId3V2Frame();if(!s)break;let o=a.pos,c=a.pos+s.size,u=!1,l=!1,m=!1;if(t.majorVersion===3?(u=!!(s.flags&64),l=!!(s.flags&128)):t.majorVersion===4&&(u=!!(s.flags&4),l=!!(s.flags&8),m=!!(s.flags&2)||!!(t.flags&128)),u){V._warn(`Skipping encrypted ID3v2 frame ${s.id}`),a.pos=c;continue}if(l){V._warn(`Skipping compressed ID3v2 frame ${s.id}`),a.pos=c;continue}if(m&&a.ununsynchronizeRegion(a.pos,c),e.raw??={},s.id==="TXXX"){let d=e.raw.TXXX??={},f=a.readId3V2TextEncoding(),p=a.readId3V2Text(f,c),b=a.readId3V2Text(f,c);d[p]??=b}else s.id[0]==="T"?e.raw[s.id]??=a.readId3V2EncodingAndText(c):e.raw[s.id]??=a.readBytes(s.size);switch(a.pos=o,s.id){case"TIT2":case"TT2":e.title??=a.readId3V2EncodingAndText(c);break;case"TIT3":case"TT3":e.description??=a.readId3V2EncodingAndText(c);break;case"TPE1":case"TP1":e.artist??=a.readId3V2EncodingAndText(c);break;case"TALB":case"TAL":e.album??=a.readId3V2EncodingAndText(c);break;case"TPE2":case"TP2":e.albumArtist??=a.readId3V2EncodingAndText(c);break;case"TRCK":case"TRK":{let f=a.readId3V2EncodingAndText(c).split("/"),p=Number.parseInt(f[0],10),b=f[1]&&Number.parseInt(f[1],10);Number.isInteger(p)&&p>0&&(e.trackNumber??=p),b&&Number.isInteger(b)&&b>0&&(e.tracksTotal??=b)}break;case"TPOS":case"TPA":{let f=a.readId3V2EncodingAndText(c).split("/"),p=Number.parseInt(f[0],10),b=f[1]&&Number.parseInt(f[1],10);Number.isInteger(p)&&p>0&&(e.discNumber??=p),b&&Number.isInteger(b)&&b>0&&(e.discsTotal??=b)}break;case"TCON":case"TCO":{let d=a.readId3V2EncodingAndText(c),f=/^\((\d+)\)/.exec(d);if(f){let p=Number.parseInt(f[1]);if(en[p]!==void 0){e.genre??=en[p];break}}if(f=/^\d+$/.exec(d),f){let p=Number.parseInt(f[0]);if(en[p]!==void 0){e.genre??=en[p];break}}e.genre??=d}break;case"TDRC":case"TDAT":{let d=a.readId3V2EncodingAndText(c),f=new Date(d);Number.isNaN(f.getTime())||(e.date??=f)}break;case"TYER":case"TYE":{let d=a.readId3V2EncodingAndText(c),f=Number.parseInt(d,10);Number.isInteger(f)&&(e.date??=new Date(String(f)))}break;case"USLT":case"ULT":{let d=a.readU8();a.pos+=3,a.readId3V2Text(d,c),e.lyrics??=a.readId3V2Text(d,c)}break;case"COMM":case"COM":{let d=a.readU8();a.pos+=3,a.readId3V2Text(d,c),e.comment??=a.readId3V2Text(d,c)}break;case"APIC":case"PIC":{let d=a.readId3V2TextEncoding(),f;if(t.majorVersion===2){let y=a.readAscii(3);f=y==="PNG"?"image/png":y==="JPG"?"image/jpeg":"image/*"}else f=a.readId3V2Text(d,c);let p=a.readU8(),b=a.readId3V2Text(d,c).trimEnd(),g=c-a.pos;if(g>=0){let y=a.readBytes(g);e.images||(e.images=[]),e.images.push({data:y,mimeType:f,kind:p===3?"coverFront":p===4?"coverBack":"unknown",description:b})}}break;default:a.pos+=s.size;break}a.pos=c}},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:Ra(e);s(o)&&(r=o)}return this.pos=a,{id:t,size:r,flags:n}}}readId3V2TextEncoding(){let t=this.readU8();if(t>3)throw new Error(`Unsupported text encoding: ${t}`);return t}readId3V2Text(t,e){let r=this.pos,n=this.readBytes(e-this.pos);switch(t){case 0:{let a="";for(let s=0;so===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(2,s))}else if(n[0]===254&&n[1]===255){let a=new TextDecoder("utf-16be"),s=Kr(n.findIndex((o,c)=>o===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(2,s))}else{let a=Kr(n.findIndex(s=>s===0),n.length);return this.pos=r+Math.min(a+1,n.length),me.decode(n.subarray(0,a))}case 2:{let a=new TextDecoder("utf-16be"),s=Kr(n.findIndex((o,c)=>o===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(0,s))}case 3:{let a=Kr(n.findIndex(s=>s===0),n.length);return this.pos=r+Math.min(a+1,n.length),me.decode(n.subarray(0,a))}}}readId3V2EncodingAndText(t){if(this.pos>=t)return"";let e=this.readId3V2TextEncoding();return this.readId3V2Text(e,t)}},Mr=class{constructor(t){this.helper=new Uint8Array(8);this.helperView=N(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(),n=new Set;for(let{key:o,value:c}of st(t))switch(o){case"title":this.writeId3V2TextFrame("TIT2",c),n.add("TIT2");break;case"description":this.writeId3V2TextFrame("TIT3",c),n.add("TIT3");break;case"artist":this.writeId3V2TextFrame("TPE1",c),n.add("TPE1");break;case"album":this.writeId3V2TextFrame("TALB",c),n.add("TALB");break;case"albumArtist":this.writeId3V2TextFrame("TPE2",c),n.add("TPE2");break;case"trackNumber":{let u=t.tracksTotal!==void 0?`${c}/${t.tracksTotal}`:c.toString();this.writeId3V2TextFrame("TRCK",u),n.add("TRCK")}break;case"discNumber":{let u=t.discsTotal!==void 0?`${c}/${t.discsTotal}`:c.toString();this.writeId3V2TextFrame("TPOS",u),n.add("TPOS")}break;case"genre":this.writeId3V2TextFrame("TCON",c),n.add("TCON");break;case"date":this.writeId3V2TextFrame("TDRC",c.toISOString().slice(0,10)),n.add("TDRC");break;case"lyrics":this.writeId3V2LyricsFrame(c),n.add("USLT");break;case"comment":this.writeId3V2CommentFrame(c),n.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:ee(o)}if(t.raw)for(let o in t.raw){let c=t.raw[o];if(c==null||o.length!==4||n.has(o))continue;let u;if(typeof c=="string")if(rt(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,n=new Uint8Array(r),a=0,s=N(n);s.setUint32(a,e.kind==="coverFront"?3:e.kind==="coverBack"?4:0),a+=4,s.setUint32(a,e.mimeType.length),a+=4,n.set($.encode(e.mimeType),8),a+=e.mimeType.length,s.setUint32(a,e.description?.length??0),a+=4,n.set($.encode(e.description??""),a),a+=e.description?.length??0,a+=16,s.setUint32(a,e.data.length),a+=4,n.set(e.data,a),a+=e.data.length,h(a===r);let o=new q(new Uint8Array(4));o.writeBits(1,0),o.writeBits(7,6),o.writeBits(24,r),this.writer.write(o.bytes),this.writer.write(n)}writeVorbisCommentAndPictureBlock(){if(this.format._options.appendOnly||this.writer.seek(Af+Ud.byteLength),qt(this.output._metadataTags)){this.metadataWritten=!0;return}let e=this.output._metadataTags.images??[];for(let a of e)this.writePictureBlock(a);let r=kn(new Uint8Array(0),this.output._metadataTags,!1),n=new q(new Uint8Array(4));n.writeBits(1,1),n.writeBits(7,4),n.writeBits(24,r.length),this.writer.write(n.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,n){let a=await this.mutex.acquire();try{if(this.validateTimestamp(e,r.timestamp,r.type==="key"),this.sampleRate===null){Re(n),h(n),h(n.decoderConfig),h(n.decoderConfig.description),this.sampleRate=n.decoderConfig.sampleRate,this.channels=n.decoderConfig.numberOfChannels;let d=new q(X(n.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=be.tempFromBytes(r.data);s.skip(2);let o=B(s,2),c=new q(o),u=ps(c.readBits(4));if(u===null)throw new Error("Invalid FLAC frame: Invalid block size.");hs(s);let l=gs(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,n=0,a=1/0,s=0,o=0;for(let c=0;c\s+((?:\d{2}:)?\d{2}:\d{2}.\d{3})/g,Pf=/^WEBVTT(.|\n)*?\n{2}/,tn=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,no=class{constructor(t){this.preambleText=null;this.preambleEmitted=!1;this.options=t}parse(t){t=t.replaceAll(`\r `,` `).replaceAll("\r",` `),sa.lastIndex=0;let e;if(!this.preambleText){if(!Pf.test(t))throw new Error("WebVTT preamble incorrect.");e=sa.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),sa.lastIndex=0)}for(;e=sa.exec(t);){let r=t.slice(0,e.index),n=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=ao(e[2]),m=ao(e[3])-u,d=t.slice(s,c).trim();t=t.slice(c).trimStart(),sa.lastIndex=0;let f={timestamp:u/1e3,duration:m/1e3,text:d,identifier:n,settings:o,notes:r},p={};this.preambleEmitted||(p.config={description:this.preambleText},this.preambleEmitted=!0),this.options.output(f,p)}}},Cf=/(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})/,ao=i=>{let t=Cf.exec(i);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])},so=i=>{let t=Math.floor(i/36e5),e=Math.floor(i%(60*60*1e3)/(60*1e3)),r=Math.floor(i%(60*1e3)/1e3),n=i%1e3;return t.toString().padStart(2,"0")+":"+e.toString().padStart(2,"0")+":"+r.toString().padStart(2,"0")+"."+n.toString().padStart(3,"0")};var oi=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[(i%256+256)%256],W=i=>(Je.setUint16(0,i,!1),[Q[0],Q[1]]),iu=i=>(Je.setInt16(0,i,!1),[Q[0],Q[1]]),Ld=i=>(Je.setUint32(0,i,!1),[Q[1],Q[2],Q[3]]),R=i=>(Je.setUint32(0,i,!1),[Q[0],Q[1],Q[2],Q[3]]),ar=i=>(Je.setInt32(0,i,!1),[Q[0],Q[1],Q[2],Q[3]]),Ft=i=>(Je.setUint32(0,Math.floor(i/2**32),!1),Je.setUint32(4,i,!1),[Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7]]),If=i=>(Je.setInt32(0,Math.floor(i/2**32),!1),Je.setUint32(4,i,!1),[Q[0],Q[1],Q[2],Q[3],Q[4],Q[5],Q[6],Q[7]]),Wd=i=>(Je.setInt16(0,2**8*i,!1),[Q[0],Q[1]]),Tt=i=>(Je.setInt32(0,2**16*i,!1),[Q[0],Q[1],Q[2],Q[3]]),eu=i=>(Je.setInt32(0,2**30*i,!1),[Q[0],Q[1],Q[2],Q[3]]),tu=(i,t)=>{let e=[],r=i;do{let n=r&127;r>>=7,e.length>0&&(n|=128),e.push(n),t!==void 0&&t--}while(r>0||t);return e.reverse()},se=(i,t=!1)=>{let e=Array(i.length).fill(null).map((r,n)=>i.charCodeAt(n));return t&&e.push(0),e},Hd=i=>{let t=i*(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]},qd=Hd(0),Kd=i=>[Tt(i[0]),Tt(i[1]),eu(i[2]),Tt(i[3]),Tt(i[4]),eu(i[5]),Tt(i[6]),Tt(i[7]),eu(i[8])],L=(i,t,e)=>({type:i,contents:t&&new Uint8Array(t.flat(10)),children:e}),Z=(i,t,e,r,n)=>L(i,[fe(t),Ld(e),r??[]],n),Gd=i=>i.isQuickTime?L("ftyp",[se("qt "),R(512),se("qt ")]):i.fragmented?i.cmaf?L("ftyp",[se("iso5"),R(512),se("iso5"),se("iso6"),se("mp41"),se("cmfc"),se("dash")]):L("ftyp",[se("iso5"),R(512),se("iso5"),se("iso6"),se("mp41")]):L("ftyp",[se("isom"),R(512),se("isom"),i.holdsAvc?se("avc1"):[],se("mp41")]),nu=()=>L("styp",[se("iso5"),R(0),se("iso5"),se("iso6"),se("mp41"),se("cmfc"),se("dash")]),au=(i,t)=>{let e=i.maxWrittenEndTimestamp-i.minWrittenTimestamp;return Number.isFinite(e)||(e=0),Z("sidx",1,0,[R(1),R(Ze),Ft(le(i.minWrittenTimestamp,Ze)),Ft(0),W(0),W(1),R(t&2147483647),R(le(e,Ze)),R(0)])},oa=i=>({type:"mdat",largeSize:i}),Qd=i=>({type:"free",size:i}),rn=i=>L("moov",void 0,[Ef(i.creationTime,i.trackDatas),...i.trackDatas.map(t=>vf(t,i.creationTime)),i.isFragmented?pp(i.trackDatas):null,Ap(i)]),Ef=(i,t)=>{let e=Math.max(0,...t.map(s=>le(oo(s),Ze)+le(s.startTimestampOffset??0,Ze))),r=Math.max(0,...t.map(s=>s.track.id))+1,n=!Dt(i)||!Dt(e),a=n?Ft:R;return Z("mvhd",+n,0,[a(i),a(i),R(Ze),a(e),Tt(1),Wd(1),Array(10).fill(0),Kd(qd),Array(24).fill(0),R(r)])},oo=i=>{if(i.samples.length===0)return 0;let t=1/0,e=-1/0;for(let r=0;re&&(e=n.timestamp+n.duration)}return t===1/0?0:e-t},vf=(i,t)=>{let e=rm(i),r=i.startTimestampOffset!==null&&i.startTimestampOffset>0;return L("trak",void 0,[_f(i,t),r?Rf(i,i.startTimestampOffset):null,Ff(i,t),e.name!==void 0?L("udta",void 0,[L("name",[...$.encode(e.name)])]):null])},_f=(i,t)=>{let e=le(oo(i),Ze)+le(i.startTimestampOffset??0,Ze),r=!Dt(t)||!Dt(e),n=r?Ft:R,a;if(i.type==="video"){let o=i.track.metadata.rotation;a=Hd(o??0)}else a=qd;let s=2;return i.track.metadata.disposition?.default!==!1&&(s|=1),Z("tkhd",+r,s,[n(t),n(t),R(i.track.id),R(0),n(e),Array(8).fill(0),W(0),W(i.track.id),Wd(i.type==="audio"?1:0),W(0),Kd(a),Tt(i.type==="video"?i.info.width:0),Tt(i.type==="video"?i.info.height:0)])},Rf=(i,t)=>{let e=le(t,Ze),r=le(oo(i),Ze),n=!Dt(e)||!Dt(r),a=n?Ft:R,s=n?If:ar;return L("edts",void 0,[Z("elst",n?1:0,0,[R(2),a(e),s(-1),Tt(1),a(r),s(0),Tt(1)])])},Ff=(i,t)=>L("mdia",void 0,[Mf(i,t),su(!0,Bf[i.type],Of[i.type]),Df(i)]),Mf=(i,t)=>{let e=le(oo(i),i.timescale),r=!Dt(t)||!Dt(e),n=r?Ft:R;return Z("mdhd",+r,0,[n(t),n(t),R(i.timescale),n(e),W(tm(i.track.metadata.languageCode??te)),W(0)])},Bf={video:"vide",audio:"soun",subtitle:"text"},Of={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},su=(i,t,e,r="\0\0\0\0")=>Z("hdlr",0,0,[i?se("mhlr"):R(0),se(t),se(r),R(0),R(0),se(e,!0)]),Df=i=>L("minf",void 0,[Nf[i.type](),Lf(),qf(i)]),Vf=()=>Z("vmhd",0,1,[W(0),W(0),W(0),W(0)]),Uf=()=>Z("smhd",0,0,[W(0),W(0)]),zf=()=>Z("nmhd",0,0),Nf={video:Vf,audio:Uf,subtitle:zf},Lf=()=>L("dinf",void 0,[Wf()]),Wf=()=>Z("dref",0,0,[R(1)],[Hf()]),Hf=()=>Z("url ",0,1),qf=i=>{let t=i.compositionTimeOffsetTable.length>1||i.compositionTimeOffsetTable.some(e=>e.sampleCompositionTimeOffset!==0);return L("stbl",void 0,[Kf(i),op(i),t?mp(i):null,t?fp(i):null,up(i),lp(i),dp(i),cp(i)])},Kf=i=>{let t;if(i.type==="video")t=Gf(Ip(i.track.source._codec,i.info.decoderConfig.codec),i);else if(i.type==="audio"){let e=em(i.track.source._codec,i.muxer.isQuickTime);h(e),t=Zf(e,i)}else i.type==="subtitle"&&(t=ap(_p[i.track.source._codec],i));return h(t),Z("stsd",0,0,[R(1)],[t])},Gf=(i,t)=>L(i,[Array(6).fill(0),W(1),W(0),W(0),Array(12).fill(0),W(t.info.width),W(t.info.height),R(4718592),R(4718592),R(0),W(1),Array(32).fill(0),W(24),iu(65535)],[Ep[t.track.source._codec]?.(t)??null,Qf(t),ya(t.info.decoderConfig.colorSpace)?jf(t):null]),Qf=i=>i.info.pixelAspectRatio.num===i.info.pixelAspectRatio.den?null:L("pasp",[R(i.info.pixelAspectRatio.num),R(i.info.pixelAspectRatio.den)]),jf=i=>L("colr",[se(i.muxer.isQuickTime?"nclc":"nclx"),W(it[i.info.decoderConfig.colorSpace.primaries]),W(nt[i.info.decoderConfig.colorSpace.transfer]),W(at[i.info.decoderConfig.colorSpace.matrix]),i.muxer.isQuickTime?[]:fe((i.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Xf=i=>i.info.decoderConfig&&L("avcC",[...X(i.info.decoderConfig.description)]),$f=i=>i.info.decoderConfig&&L("hvcC",[...X(i.info.decoderConfig.description)]),zd=i=>{if(!i.info.decoderConfig)return null;let t=i.info.decoderConfig,e=t.codec.split("."),r=Number(e[1]),n=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?it[t.colorSpace.primaries]:2,l=e[6]?Number(e[6]):t.colorSpace?.transfer?nt[t.colorSpace.transfer]:2,m=e[7]?Number(e[7]):t.colorSpace?.matrix?at[t.colorSpace.matrix]:2;return Z("vpcC",1,0,[fe(r),fe(n),fe(c),fe(u),fe(l),fe(m),W(0)])},Yf=i=>L("av1C",Ca(i.info.decoderConfig.codec)),Zf=(i,t)=>{let e=0,r,n=16,a=re.includes(t.track.source._codec);if(a){let s=t.track.source._codec,{sampleSize:o}=Se(s);n=8*o,n>16&&(e=1)}if(t.muxer.isQuickTime&&(e=1),e===0)r=[Array(6).fill(0),W(1),W(e),W(0),R(0),W(t.info.numberOfChannels),W(n),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),R(0),W(t.info.numberOfChannels),W(Math.min(n,16)),iu(s),W(0),W(t.info.sampleRate<2**16?t.info.sampleRate:0),W(0),a?[R(1),R(n/8),R(t.info.numberOfChannels*n/8)]:[R(0),R(0),R(0)],R(2)]}return L(i,r,[vp(t.track.source._codec,t.muxer.isQuickTime)?.(t)??null])},ru=i=>{let t;switch(i.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: ${i.track.source._codec}`)}let e=[...fe(t),...fe(21),...Ld(0),...R(0),...R(0)];if(i.info.decoderConfig.description){let r=X(i.info.decoderConfig.description);e=[...e,...fe(5),...tu(r.byteLength),...r]}return e=[...W(1),...fe(0),...fe(4),...tu(e.length),...e,...fe(6),...fe(1),...fe(2)],e=[...fe(3),...tu(e.length),...e],Z("esds",0,0,e)},Br=i=>L("wave",void 0,[Jf(i),ep(i),L("\0\0\0\0")]),Jf=i=>L("frma",[se(em(i.track.source._codec,i.muxer.isQuickTime))]),ep=i=>{let{littleEndian:t}=Se(i.track.source._codec);return L("enda",[W(+t)])},tp=i=>{let t=i.info.numberOfChannels,e=3840,r=i.info.sampleRate,n=0,a=0,s=new Uint8Array(0),o=i.info.decoderConfig?.description;if(o){h(o.byteLength>=18);let c=X(o),u=br(c);t=u.outputChannelCount,e=u.preSkip,r=u.inputSampleRate,n=u.outputGain,a=u.channelMappingFamily,u.channelMappingTable&&(s=u.channelMappingTable)}return L("dOps",[fe(0),fe(t),W(e),R(r),iu(n),fe(a),...s])},rp=i=>{let t=i.info.decoderConfig?.description;h(t);let e=X(t);return Z("dfLa",0,0,[...e.subarray(4)])},_t=i=>{let{littleEndian:t,sampleSize:e}=Se(i.track.source._codec),r=+t;return Z("pcmC",0,0,[fe(r),fe(8*e)])},ip=i=>{let t=za(i.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 q(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),L("dac3",[...e])},np=i=>{let t=Na(i.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),n=new Uint8Array(r),a=new q(n);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 L("dec3",[...n])},ap=(i,t)=>L(i,[Array(6).fill(0),W(1)],[Rp[t.track.source._codec](t)]),sp=i=>L("vttC",[...$.encode(i.info.config.description)]);var op=i=>Z("stts",0,0,[R(i.timeToSampleTable.length),i.timeToSampleTable.map(t=>[R(t.sampleCount),R(t.sampleDelta)])]),cp=i=>{if(i.samples.every(e=>e.type==="key"))return null;let t=[...i.samples.entries()].filter(([,e])=>e.type==="key");return Z("stss",0,0,[R(t.length),t.map(([e])=>R(e+1))])},up=i=>Z("stsc",0,0,[R(i.compactlyCodedChunkTable.length),i.compactlyCodedChunkTable.map(t=>[R(t.firstChunk),R(t.samplesPerChunk),R(1)])]),lp=i=>{if(i.type==="audio"&&i.info.requiresPcmTransformation){let{sampleSize:t}=Se(i.track.source._codec);return Z("stsz",0,0,[R(t*i.info.numberOfChannels),R(i.samples.reduce((e,r)=>e+le(r.duration,i.timescale),0))])}return Z("stsz",0,0,[R(0),R(i.samples.length),i.samples.map(t=>R(t.size))])},dp=i=>i.finalizedChunks.length>0&&Y(i.finalizedChunks).offset>=2**32?Z("co64",0,0,[R(i.finalizedChunks.length),i.finalizedChunks.map(t=>Ft(t.offset))]):Z("stco",0,0,[R(i.finalizedChunks.length),i.finalizedChunks.map(t=>R(t.offset))]),mp=i=>Z("ctts",1,0,[R(i.compositionTimeOffsetTable.length),i.compositionTimeOffsetTable.map(t=>[R(t.sampleCount),ar(t.sampleCompositionTimeOffset)])]),fp=i=>{let t=1/0,e=-1/0,r=1/0,n=-1/0;h(i.compositionTimeOffsetTable.length>0),h(i.samples.length>0);for(let s=0;s=2**31?null:Z("cslg",0,0,[ar(a),ar(t),ar(e),ar(r),ar(n)])},pp=i=>L("mvex",void 0,i.map(hp)),hp=i=>Z("trex",0,0,[R(i.track.id),R(1),R(0),R(0),R(0)]),ou=(i,t)=>L("moof",void 0,[gp(i),...t.map(bp)]),gp=i=>Z("mfhd",0,0,[R(i)]),jd=i=>{let t=0,e=0,r=0,n=0,a=i.type==="delta";return e|=+a,a?t|=1:t|=2,t<<24|e<<16|r<<8|n},bp=i=>L("traf",void 0,[yp(i),kp(i),Tp(i)]),yp=i=>{h(i.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;let e=i.currentChunk.samples[1]??i.currentChunk.samples[0],r={duration:e.timescaleUnitsToNextSample,size:e.size,flags:jd(e)};return Z("tfhd",0,t,[R(i.track.id),R(r.duration),R(r.size),R(r.flags)])},kp=i=>(h(i.currentChunk),Z("tfdt",1,0,[Ft(le(i.currentChunk.startTimestamp,i.timescale))])),Tp=i=>{h(i.currentChunk);let t=i.currentChunk.samples.map(b=>b.timescaleUnitsToNextSample),e=i.currentChunk.samples.map(b=>b.size),r=i.currentChunk.samples.map(jd),n=i.currentChunk.samples.map(b=>le(b.timestamp-b.decodeTimestamp,i.timescale)),a=new Set(t),s=new Set(e),o=new Set(r),c=new Set(n),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),p=0;return p|=1,p|=4*+u,p|=256*+l,p|=512*+m,p|=1024*+d,p|=2048*+f,Z("trun",1,p,[R(i.currentChunk.samples.length),R(i.currentChunk.offset-i.currentChunk.moofOffset||0),u?R(r[0]):[],i.currentChunk.samples.map((b,g)=>[l?R(t[g]):[],m?R(e[g]):[],d?R(r[g]):[],f?ar(n[g]):[]])])},Xd=i=>L("mfra",void 0,[...i.map(wp),Sp()]),wp=(i,t)=>Z("tfra",1,0,[R(i.track.id),R(63),R(i.finalizedChunks.length),i.finalizedChunks.map(r=>[Ft(le(r.samples[0].timestamp,i.timescale)),Ft(r.moofOffset),R(t+1),R(1),R(1)])]),Sp=()=>Z("mfro",0,0,[R(0)]),$d=()=>L("vtte"),Yd=(i,t,e,r,n)=>L("vttc",void 0,[n!==null?L("vsid",[ar(n)]):null,e!==null?L("iden",[...$.encode(e)]):null,t!==null?L("ctim",[...$.encode(so(t))]):null,r!==null?L("sttg",[...$.encode(r)]):null,L("payl",[...$.encode(i)])]),Zd=i=>L("vtta",[...$.encode(i)]),Ap=i=>{let t=[],e=i.format._options.metadataFormat??"auto",r=i.output._metadataTags;if(e==="mdir"||e==="auto"&&!i.isQuickTime){let n=Pp(r);n&&t.push(n)}else if(e==="mdta"){let n=Cp(r);n&&t.push(n)}else(e==="udta"||e==="auto"&&i.isQuickTime)&&xp(t,i.output._metadataTags);return t.length===0?null:L("udta",void 0,t)},xp=(i,t)=>{for(let{key:e,value:r}of st(t))switch(e){case"title":i.push(Rt("\xA9nam",r));break;case"description":i.push(Rt("\xA9des",r));break;case"artist":i.push(Rt("\xA9ART",r));break;case"album":i.push(Rt("\xA9alb",r));break;case"albumArtist":i.push(Rt("albr",r));break;case"genre":i.push(Rt("\xA9gen",r));break;case"date":i.push(Rt("\xA9day",r.toISOString().slice(0,10)));break;case"comment":i.push(Rt("\xA9cmt",r));break;case"lyrics":i.push(Rt("\xA9lyr",r));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:ee(e)}if(t.raw)for(let e in t.raw){let r=t.raw[e];r==null||e.length!==4||i.some(n=>n.type===e)||(typeof r=="string"?i.push(Rt(e,r)):r instanceof Uint8Array&&i.push(L(e,Array.from(r))))}},Rt=(i,t)=>{let e=$.encode(t);return L(i,[W(e.length),W(tm("und")),Array.from(e)])},Nd={"image/jpeg":13,"image/png":14,"image/bmp":27},Jd=(i,t)=>{let e=[];for(let{key:r,value:n}of st(i))switch(r){case"title":e.push({key:t?"title":"\xA9nam",value:kt(n)});break;case"description":e.push({key:t?"description":"\xA9des",value:kt(n)});break;case"artist":e.push({key:t?"artist":"\xA9ART",value:kt(n)});break;case"album":e.push({key:t?"album":"\xA9alb",value:kt(n)});break;case"albumArtist":e.push({key:t?"album_artist":"aART",value:kt(n)});break;case"comment":e.push({key:t?"comment":"\xA9cmt",value:kt(n)});break;case"genre":e.push({key:t?"genre":"\xA9gen",value:kt(n)});break;case"lyrics":e.push({key:t?"lyrics":"\xA9lyr",value:kt(n)});break;case"date":e.push({key:t?"date":"\xA9day",value:kt(n.toISOString().slice(0,10))});break;case"images":for(let a of n)a.kind==="coverFront"&&e.push({key:"covr",value:L("data",[R(Nd[a.mimeType]??0),R(0),Array.from(a.data)])});break;case"trackNumber":if(t){let a=i.tracksTotal!==void 0?`${n}/${i.tracksTotal}`:n.toString();e.push({key:"track",value:kt(a)})}else e.push({key:"trkn",value:L("data",[R(0),R(0),W(0),W(n),W(i.tracksTotal??0),W(0)])});break;case"discNumber":t||e.push({key:"disc",value:L("data",[R(0),R(0),W(0),W(n),W(i.discsTotal??0),W(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:ee(r)}if(i.raw)for(let r in i.raw){let n=i.raw[r];n==null||!t&&r.length!==4||e.some(a=>a.key===r)||(typeof n=="string"?e.push({key:r,value:kt(n)}):n instanceof Uint8Array?e.push({key:r,value:L("data",[R(0),R(0),Array.from(n)])}):n instanceof Qe&&e.push({key:r,value:L("data",[R(Nd[n.mimeType]??0),R(0),Array.from(n.data)])}))}return e},Pp=i=>{let t=Jd(i,!1);return t.length===0?null:Z("meta",0,0,void 0,[su(!1,"mdir","","appl"),L("ilst",void 0,t.map(e=>L(e.key,void 0,[e.value])))])},Cp=i=>{let t=Jd(i,!0);return t.length===0?null:L("meta",void 0,[su(!1,"mdta",""),Z("keys",0,0,[R(t.length)],t.map(e=>L("mdta",[...$.encode(e.key)]))),L("ilst",void 0,t.map((e,r)=>{let n=String.fromCharCode(...R(r+1));return L(n,void 0,[e.value])}))])},kt=i=>L("data",[R(1),R(0),...$.encode(i)]),Ip=(i,t)=>{switch(i){case"avc":return t.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01";case"prores":return t}},Ep={avc:Xf,hevc:$f,vp8:zd,vp9:zd,av1:Yf,prores:null},em=(i,t)=>{switch(i){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(i){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(i){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"}},vp=(i,t)=>{switch(i){case"aac":return ru;case"mp3":return ru;case"opus":return tp;case"vorbis":return ru;case"flac":return rp;case"ac3":return ip;case"eac3":return np}if(t)switch(i){case"pcm-s24":return Br;case"pcm-s24be":return Br;case"pcm-s32":return Br;case"pcm-s32be":return Br;case"pcm-f32":return Br;case"pcm-f32be":return Br;case"pcm-f64":return Br;case"pcm-f64be":return Br}else switch(i){case"pcm-s16":return _t;case"pcm-s16be":return _t;case"pcm-s24":return _t;case"pcm-s24be":return _t;case"pcm-s32":return _t;case"pcm-s32be":return _t;case"pcm-f32":return _t;case"pcm-f32be":return _t;case"pcm-f64":return _t;case"pcm-f64be":return _t}return null},_p={webvtt:"wvtt"},Rp={webvtt:sp},tm=i=>{h(i.length===3);let t=0;for(let e=0;e<3;e++)t<<=5,t+=i.charCodeAt(e)-96;return t};var Mt=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(){h(!this.started),this.target._start(),this.started=!0}write(t){h(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 h(this.started&&!this.finalized),this.target._flush()}async finalize(){h(this.started&&!this.finalized),await this.target._finalize(),this.finalized=!0}maybeTrackWrites(t){if(!this.trackedWrites)return;let e=this.getPos();if(euu)throw new Error(`ArrayBuffer exceeded maximum size of ${uu} bytes. Please consider using another target.`);if(this._supportsResize)this._buffer.resize(r);else{let n=new ArrayBuffer(r),a=new Uint8Array(n);a.set(this._bytes,0),this._buffer=n,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)}},Fp=2**24,Mp=2,nn=class extends xe{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??Fp}_start(){this._streamWriter=this._writable.getWriter()}_write(e,r){if(r>this._lastWriteEnd){let n=r-this._lastWriteEnd;this._write(new Uint8Array(n),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(h(this._streamWriter),this._sections.length===0)return;let e=[],r=[...this._sections].sort((n,a)=>n.start-a.start);e.push({start:r[0].start,size:r[0].data.byteLength});for(let n=1;n{this._writeError??=a}),this._lastFlushEnd=n.start+n.data.byteLength}}this._sections.length=0}_writeDataIntoChunks(e,r){let n=this._chunks.findIndex(u=>u.start<=r&&rMp){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 n={start:Math.floor(e/this._chunkSize)*this._chunkSize,data:new Uint8Array(this._chunkSize),written:[],shouldFlush:!1};return this._chunks.push(n),this._chunks.sort((a,s)=>a.start-s.start),this._chunks.indexOf(n)}_tryToFlushChunks(e=!1){h(this._streamWriter);for(let r=0;r{this._writeError??=o}),this._lastFlushEnd=n.start+a.end}this._chunks.splice(r--,1)}}}async _finalize(){if(this._chunked&&this._tryToFlushChunks(!0),this._writeError!==null)throw this._writeError;h(this._streamWriter),await this._streamWriter.ready,await this._streamWriter.close(),this._emit("finalized")}async _close(){return this._streamWriter?.close()}},co=class extends xe{constructor(e){super();this._writer=null;this._nextWritePos=0;this._writable=e,this._streamTarget=new nn(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 h(r.position===this._nextWritePos),this._nextWritePos+=r.data.byteLength,h(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)}},uo=class extends xe{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(!nm.fs)throw new Error("FilePathTarget is only available in server-side environments (Node.js, Bun, Deno).");super();this._fileHandle=null;let n=new WritableStream({start:async()=>{this._fileHandle=await nm.fs.open(e,"w")},write:async a=>{h(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 nn(n,{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)}},Dr=class extends xe{_start(){}_write(t,e){this._dispatchWrite(e,e+t.byteLength)}async _flush(){}async _finalize(){this._emit("finalized")}async _close(){}},ca=class extends xe{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)}},Ke=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,Bp=2082844800,rm=i=>{let t={},e=i.track;return e.metadata.name!==void 0&&(t.name=e.metadata.name),t},le=(i,t,e=!0)=>{let r=i*t;return e?Math.round(r):r},lo=class extends Te{constructor(e,r){super(e);this.writer=null;this.boxWriter=null;this.initWriter=null;this.initBoxWriter=null;this.auxTarget=new Or;this.auxWriter=new Mt(this.auxTarget,!1);this.auxBoxWriter=new oi(this.auxWriter);this.mdat=null;this.ftypSize=null;this.trackDatas=[];this.allTracksKnown=J();this.creationTime=Math.floor(Date.now()/1e3)+Bp;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 ui,this.isCmaf=r instanceof ci,this.minimumFragmentDuration=r._options.minimumFragmentDuration??(r instanceof ci?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(n=>this.format._options.fastStart!==void 0?this.format._options.fastStart==="fragmented":n instanceof Or),this.boxWriter=new oi(this.writer),this.fastStart=this.format._options.fastStart??(this.writer.target instanceof Or?"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 n=await this.output._getInitTarget(),a=new Mt(n,!0);a.start(),this.initWriter=a,this.initBoxWriter=new oi(a)}let r=this.output._tracks.some(n=>n.isVideoTrack()&&n.source._codec==="avc");{let n=this.initBoxWriter??this.boxWriter;if(h(n),this.format._options.onFtyp&&n.writer.startTrackingWrites(),n.writeBox(Gd({isQuickTime:this.isQuickTime,holdsAvc:r,fragmented:this.isFragmented,cmaf:this.isCmaf})),this.format._options.onFtyp){let{data:a,start:s}=n.writer.stopTrackingWrites();this.format._options.onFtyp(a,s)}this.ftypSize=n.writer.getPos(),this.isCmaf&&await this.initWriter.flush()}if(this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(let n of this.output._tracks)if(n.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(h(this.writer),h(this.boxWriter),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=oa(!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 Ha({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,n){let a=this.trackDatas.find(f=>f.track===e);if(a)return a;mr(n),h(n),h(n.decoderConfig);let s={...n.decoderConfig};h(s.codedWidth!==void 0),h(s.codedHeight!==void 0);let o=!1;if(e.source._codec==="avc"&&!s.description){let f=Ci(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=ol(f),o=!0}else if(e.source._codec==="hevc"&&!s.description){let f=Ii(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=ul(f),o=!0}let c=Du(1/(e.metadata.frameRate??Ze),1e6).den,u=s.displayAspectWidth,l=s.displayAspectHeight,m=u===void 0||l===void 0?{num:1,den:1}:Lt({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,p)=>f.track.id-p.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),d}getAudioTrackData(e,r,n){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;Re(n),h(n),h(n.decoderConfig);let s={...n.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=He(be.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=xt[u.channelConfiguration];if(l===void 0||m===void 0)throw new Error("Invalid ADTS frame header.");s.description=Si({objectType:u.objectType,sampleRate:l,numberOfChannels:m}),o=!0}let c={muxer:this,track:e,type:"audio",info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:s,requiresPcmTransformation:!this.isFragmented&&re.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 n=this.trackDatas.find(s=>s.track===e);if(n)return n;Ea(r),h(r),h(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,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,n),o=r.data;if(s.info.requiresAnnexBTransformation){let u=[...gr(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=Ba(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,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,n),o=r.data;if(s.info.requiresAdtsStripping){let m=He(be.tempFromBytes(o));if(!m)throw new Error("Expected ADTS frame, didn't get one.");let d=m.crcCheck===null?tr:je;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=Se(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 p=await this.padWithSilence(s,s.info.expectedNextPcmPacketTimestamp,f);c=s.info.expectedNextPcmPacketTimestamp+p}}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,n){let a=le(n,e.timescale);if(n=a/e.timescale,a>0){let{sampleSize:s,silentValue:o}=Se(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,n,"key");await this.registerSample(e,l)}return n}async addSubtitleCue(e,r,n){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,n);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 n=new Set([]);for(let l of e.cueQueue)h(l.timestamp<=r),h(e.lastCueEndTimestamp<=l.timestamp+l.duration),n.add(Math.max(l.timestamp,e.lastCueEndTimestamp)),n.add(l.timestamp+l.duration);let a=[...n].sort((l,m)=>l-m),s=a[0],o=a[1]??s;if(r=o)break;tn.lastIndex=0;let d=tn.test(m.text),f=m.timestamp+m.duration,p=e.cueToSourceId.get(m);if(p===void 0&&oa.timestamp).sort((a,s)=>a-s);this.isFragmented||(e.startTimestampOffset??=n[0]);for(let a=0;a=0),e.lastTimescaleUnits+=l,e.lastSample.timescaleUnitsToNextSample=l,!this.isFragmented){let m=Y(e.timeToSampleTable);if(h(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=Y(e.compositionTimeOffsetTable);h(d),d.sampleCompositionTimeOffset===o?d.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:o})}}else e.lastTimescaleUnits=le(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,h(e.lastSample),h(e.lastTimescaleUnits!==null),r!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){h(r.type==="key");let a=le(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(h(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 n=!1;if(!e.currentChunk)n=!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&&(n=!0,await this.finalizeFragment())}else n=a>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:r.timestamp,samples:[],offset:null,moofOffset:null}),h(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(h(!this.isFragmented),h(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((n,a)=>n+le(a.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||Y(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 n of e.currentChunk.samples)h(n.data),this.writer.write(n.data),n.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(h(this.isFragmented),!(!e&&!this.allTracksAreKnown()))e:for(;;){let r=null,n=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].timestampp.currentChunk),a=ou(r,n),s=this.writer.getPos(),o=s+this.boxWriter.measureBox(a),c=o+lt,u=1/0;for(let p of n){p.currentChunk.offset=c,p.currentChunk.moofOffset=s;for(let b of p.currentChunk.samples)c+=b.size;u=Math.min(u,p.currentChunk.startTimestamp)}let l=c-o,m=l>=2**32;if(m)for(let p of n)p.currentChunk.offset+=jt-lt;this.format._options.onMoof&&this.writer.startTrackingWrites();let d=ou(r,n);if(this.boxWriter.writeBox(d),this.format._options.onMoof){let{data:p,start:b}=this.writer.stopTrackingWrites();this.format._options.onMoof(p,b,u)}h(this.writer.getPos()===o),this.format._options.onMdat&&this.writer.startTrackingWrites();let f=oa(m);f.size=l,this.boxWriter.writeBox(f),this.writer.seek(o+(m?jt:lt));for(let p of n)for(let b of p.currentChunk.samples)this.writer.write(b.data),b.data=null;if(this.format._options.onMdat){let{data:p,start:b}=this.writer.stopTrackingWrites();this.format._options.onMdat(p,b)}for(let p of n)p.finalizedChunks.push(p.currentChunk),this.finalizedChunks.push(p.currentChunk),p.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,r){if(h(this.writer),h(this.boxWriter),this.allTracksAreKnown()){if(!this.mdat){this.ensureOneEnabledTrack();let n=rn(this),s=this.boxWriter.measureBox(n)+this.computeSampleTableSizeUpperBound()+4096;h(this.ftypSize!==null),this.writer.seek(this.ftypSize+s),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=oa(!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(){h(this.fastStart==="reserve");let e=0;for(let r of this.trackDatas){let n=r.track.metadata.maximumPacketCount;h(n!==void 0),e+=8*Math.ceil(2/3*n),e+=4*n,e+=8*Math.ceil(2/3*n),e+=12*Math.ceil(2/3*n),e+=4*n,e+=8*n}return e}async onTrackClose(e){let r=await this.mutex.acquire(),n=this.trackDatas.find(a=>a.track===e);n&&(n.closed=!0,n.type==="subtitle"&&e.source._codec==="webvtt"&&await this.processWebVTTCues(n,1/0),this.processTimestamps(n)),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),r()}ensureOneEnabledTrack(){for(let e of["video","audio","subtitle"]){let r=this.trackDatas.filter(a=>a.type===e);if(r.length===0)continue;if(!r.some(a=>a.track.metadata.disposition?.default!==!1)){let a=r[0];a.track.metadata.disposition={...a.track.metadata.disposition,default:!0}}}}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve(),this.ensureOneEnabledTrack();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),h(r.startTimestampOffset!==null);for(let n=0;n=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();let n=rn(this);if(this.boxWriter.writeBox(n),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)h(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(nu()),this.boxWriter.writeBox(au(this,r))}else{let r=this.writer.getPos(),n=Xd(this.trackDatas);this.boxWriter.writeBox(n);let a=this.writer.getPos()-r;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(a)}else{h(this.mdat);let r=this.boxWriter.offsets.get(this.mdat);h(r!==void 0);let n=this.writer.getPos()-r;if(this.mdat.size=n,this.mdat.largeSize=n>=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=rn(this);if(this.fastStart==="reserve"){h(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(Qd(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 Op=-(2**15),Dp=2**15-1,am="Mediabunny",sm=6,om=5,Vp={video:1,audio:2,subtitle:17},mo=class extends Te{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 Ja(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 li?"webm":"matroska"},{id:17031,data:2},{id:17029,data:2}]};if(this.ebmlWriter.writeEBML(e),this.format._options.onEbmlHeader){let{data:r,start:n}=this.writer.stopTrackingWrites();this.format._options.onEbmlHeader(r,n)}}maybeCreateSeekHead(e){if(this.format._options.appendOnly)return;let r=new Uint8Array([28,83,187,107]),n=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:n},{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 Mi(0)};this.segmentDuration=e;let r={id:357149030,data:[{id:2807729,data:1e6},{id:19840,data:am},{id:22337,data:am},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 n=Fe[r.track.source._codec];h(n);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=X(s),c=br(o);a=Math.round(1e9*(c.preSkip/ct))}}e.data.push({id:174,data:[{id:215,data:r.track.id},{id:29637,data:r.track.id},{id:131,data:Vp[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??te},{id:134,data:n},r.codecPrivate?{id:25506,data:X(r.codecPrivate)}:null,{id:22186,data:0},{id:22203,data:a},r.track.metadata.name!==void 0?{id:21358,data:new pt(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:n}=e.track.metadata,a=[r?{id:2352003,data:1e9/r}:null],s=n?tt(-n):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,ya(c)?{id:21936,data:[{id:21937,data:at[c.matrix]},{id:21946,data:nt[c.transfer]},{id:21947,data:it[c.primaries]},{id:21945,data:c.fullRange?2:1}]}:null,s?{id:30320,data:[{id:30321,data:0},{id:30325,data:new Fi((s+180)%360-180)}]}:null]};return a.push(u),a}audioSpecificTrackInfo(e){let r=re.includes(e.track.source._codec)?Se(e.track.source._codec):null;return[{id:225,data:[{id:181,data:new Fi(e.info.sampleRate)},{id:159,data:e.info.numberOfChannels},r?{id:25188,data:8*r.sampleSize}:null]}]}subtitleSpecificTrackInfo(e){return[]}maybeCreateTags(){let e=[],r=(s,o)=>{e.push({id:26568,data:[{id:17827,data:new pt(s)},typeof o=="string"?{id:17543,data:new pt(o)}:{id:17541,data:o}]})},n=this.output._metadataTags,a=new Set;for(let{key:s,value:o}of st(n))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=n.tracksTotal!==void 0?`${o}/${n.tracksTotal}`:o.toString();r("PART_NUMBER",c),a.add("PART_NUMBER")}break;case"discNumber":{let c=n.discsTotal!==void 0?`${o}/${n.discsTotal}`:o.toString();r("DISC",c),a.add("DISC")}break;case"tracksTotal":case"discsTotal":break;case"images":case"raw":break;default:ee(s)}if(n.raw)for(let s in n.raw){let o=n.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=[],n=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")+(Uu(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&&!n.has(c))break}n.add(c),r.push({id:24999,data:[s.description!==void 0?{id:18046,data:new pt(s.description)}:null,{id:18030,data:new pt(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 Ht)||!/^\d+$/.test(s)||a.find(u=>u.mimeType===o.mimeType&&wa(u.data,o.data))||r.push({id:24999,data:[o.description!==void 0?{id:18046,data:new pt(o.description)}:null,{id:18030,data:new pt(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:sm,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:n}=this.writer.stopTrackingWrites();this.format._options.onSegmentHeader(r,n)}}createCues(){this.cues={id:475249515,data:[]}}get segmentDataOffset(){return h(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 is({isWebM:this.format instanceof li,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,n){let a=this.trackDatas.find(l=>l.track===e);if(a)return a;mr(n),h(n),h(n.decoderConfig),h(n.decoderConfig.codedWidth!==void 0),h(n.decoderConfig.codedHeight!==void 0);let s=n.decoderConfig.displayAspectWidth,o=n.decoderConfig.displayAspectHeight,c=s===void 0||o===void 0?null:Lt({num:s,den:o}),u={track:e,type:"video",info:{width:n.decoderConfig.codedWidth,height:n.decoderConfig.codedHeight,aspectRatio:c,decoderConfig:n.decoderConfig,alphaMode:!!r.sideData.alpha},chunkQueue:[],lastWrittenMsTimestamp:null,codecPrivate:n.decoderConfig.description??null,closed:!1};return e.source._codec==="vp9"?u.codecPrivate=new Uint8Array($u(u.info.decoderConfig.codec)):e.source._codec==="av1"?u.codecPrivate=new Uint8Array(Ca(u.info.decoderConfig.codec)):e.source._codec==="prores"&&(u.codecPrivate=$.encode(n.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,n){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;Re(n),h(n),h(n.decoderConfig);let s={...n.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=He(be.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=xt[u.channelConfiguration];if(l===void 0||m===void 0)throw new Error("Invalid ADTS frame header.");s.description=Si({objectType:u.objectType,sampleRate:l,numberOfChannels:m}),o=!0}let c={track:e,type:"audio",info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:s,requiresAdtsStripping:o},chunkQueue:[],lastWrittenMsTimestamp:null,codecPrivate:s.description??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 n=this.trackDatas.find(s=>s.track===e);if(n)return n;Ea(r),h(r),h(r.config);let a={track:e,type:"subtitle",info:{config:r.config},chunkQueue:[],lastWrittenMsTimestamp:null,codecPrivate:$.encode(r.config.description),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,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,n),o=r.data;if(e.source._codec==="prores"){if(o.byteLength<8)throw new Error("ProRes packet too small, expected at least 8 bytes.");o=o.subarray(8)}let c=r.type==="key";this.validateTimestamp(s.track,r.timestamp,c);let u=r.timestamp,l=r.duration;e.metadata.frameRate!==void 0&&(u=St(u,e.metadata.frameRate),l=St(l,e.metadata.frameRate));let m=s.info.alphaMode?r.sideData.alpha??null:null,d=this.createInternalChunk(o,u,l,r.type,m);e.source._codec==="vp9"&&this.fixVP9ColorSpace(s,d),s.chunkQueue.push(d),await this.interleaveChunks()}finally{a()}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,n),o=r.data;if(s.info.requiresAdtsStripping){let l=He(be.tempFromBytes(o));if(!l)throw new Error("Expected ADTS frame, didn't get one.");let m=l.crcCheck===null?tr:je;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,n){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,n);this.validateTimestamp(s.track,r.timestamp,!0);let o=r.text,c=Math.round(r.timestamp*1e3);tn.lastIndex=0,o=o.replace(tn,d=>{let p=ao(d.slice(1,-1))-c;return`<${so(p)}>`});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,n=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&&n.skipBits(1);let m={rgb:7,bt709:2,bt470bg:1,smpte170m:3}[e.info.decoderConfig.colorSpace.matrix];Pu(r.data,n.pos,n.pos+3,m)}createInternalChunk(e,r,n,a,s=null){return{data:e,type:a,timestamp:r,duration:n,additions:s}}writeBlock(e,r){this.segment||this.createSegment();let n=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{h(this.currentClusterStartMsTimestamp!==null),h(this.currentClusterMaxMsTimestamp!==null);let m=n-this.currentClusterStartMsTimestamp;s=a&&n>this.currentClusterMaxMsTimestamp&&m>=1e3*(this.format._options.minimumClusterDuration??1)||m>Dp}s&&this.createNewCluster(n);let o=n-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,n),this.endTimestamp=Math.max(this.endTimestamp,n+l),e.lastWrittenMsTimestamp=n,this.trackDatasInCurrentCluster.has(e)||this.trackDatasInCurrentCluster.set(e,{firstMsTimestamp:n}),this.currentClusterMaxMsTimestamp=Math.max(this.currentClusterMaxMsTimestamp,n)}createNewCluster(e){this.currentCluster&&this.finalizeCurrentCluster(),this.format._options.onCluster&&this.writer.startTrackingWrites(),this.currentCluster={id:524531317,size:this.format._options.appendOnly?-1:om,data:[{id:231,data:e}]},this.ebmlWriter.writeEBML(this.currentCluster),this.currentClusterStartMsTimestamp=e,this.currentClusterMaxMsTimestamp=e,this.trackDatasInCurrentCluster.clear()}finalizeCurrentCluster(){if(h(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,om),this.writer.seek(s)}if(this.format._options.onCluster){h(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 n=[...r.entries()].sort((a,s)=>a[0]-s[0]);for(let[a,s]of n)h(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(),n=this.trackDatas.find(a=>a.track===e);n&&(n.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(),h(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,sm);let n=this.startTimestamp===1/0?0:this.endTimestamp-this.startTimestamp;this.segmentDuration.data=new Mi(n),this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration)),this.ebmlWriter.writeEBML(this.segmentDuration),h(this.seekHead),this.writer.seek(this.ebmlWriter.offsets.get(this.seekHead)),this.maybeCreateSeekHead(!0),this.ebmlWriter.writeEBML(this.seekHead)}e()}};var fo=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,n=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=va[u+g];if(_a(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]=n,this.helper[2]=l,this.helper[3]=m,this.writer.write(this.helper.subarray(0,4));let d=pr(t.mpegVersionId,t.channel);this.writer.seek(e+d),this.writeU32(fr);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 p=va[u+c],b=_a(a,t.layer,1e3*p,t.sampleRate,s);this.writer.seek(e+b)}};var po=class extends Te{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 fo(this.writer),qt(this.output._metadataTags)||new Mr(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 n=await this.mutex.acquire();try{let a=this.format._options.xingHeader!==!1;if(!this.xingFrameData&&a){let s=N(r.data);if(s.byteLength<4)throw new Error("Invalid MP3 header in sample.");let o=s.getUint32(0,!1),c=$r(o,null).header;if(!c)throw new Error("Invalid MP3 header in sample.");let u=pr(c.mpegVersionId,c.channel);if(s.byteLength>=u+4){let l=s.getUint32(u,!1);if(l===fr||l===Pi)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{n()}}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(),n=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/n)}if(this.xingFrameData.frameCount=this.frameCount,this.xingFrameData.fileSize=n,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 Up=8192,ho=class extends Te{constructor(e,r){super(e);this.trackDatas=[];this.bosPagesWritten=!1;this.allTracksKnown=J();this.pageBytes=new Uint8Array(ls);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,us({codecStrings:this.trackDatas.map(e=>e.codecInfo.codec)})}addEncodedVideoPacket(){throw new Error("Video tracks are not supported.")}getTrackData(e,r){let n=this.trackDatas.find(o=>o.track===e);if(n)return n;let a;do a=Math.floor(2**32*Math.random());while(this.trackDatas.some(o=>o.serialNumber===a));h(e.source._codec==="vorbis"||e.source._codec==="opus"),Re(r),h(r),h(r.decoderConfig);let s={track:e,serialNumber:a,internalSampleRate:e.source._codec==="opus"?ct: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(h(r.decoderConfig),e.track.source._codec==="vorbis"){h(r.decoderConfig.description);let n=X(r.decoderConfig.description);if(n[0]!==2)throw new TypeError("First byte of Vorbis decoder description must be 2.");let a=1,s=()=>{let g=0;for(;;){let y=n[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(n.length-a<=0)throw new TypeError("Vorbis decoder description is too short.");let l=n.subarray(a,a+=o);a+=c;let m=n.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=kn(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=N(l).getUint8(28);e.codecInfo.vorbisInfo={blocksizes:[1<<(b&15),1<<(b>>4)],modeBlockflags:Ua(m).modeBlockflags}}else if(e.track.source._codec==="opus"){if(!r.decoderConfig.description)throw new TypeError("For Ogg, Opus decoder description is required.");let n=X(r.decoderConfig.description),a=new Uint8Array(8),s=N(a);s.setUint32(0,1332770163,!1),s.setUint32(4,1415669619,!1);let o=kn(a,this.output._metadataTags,!0);e.packetQueue.push({data:n,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:o,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0}),e.codecInfo.opusInfo={preSkip:br(n).preSkip}}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getTrackData(e,n);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=s.currentTimestampInSamples,{durationInSamples:c,vorbisBlockSize:u}=cs(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 n=r.packetQueue.shift();if(this.writePacket(r,n,!1),n.forcePageFlush)break}this.bosPagesWritten=!0}e:for(;;){let r=null,n=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,n&&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>=Up||r.forcePageFlush)&&this.writePage(e,n)}writePage(e,r){this.pageView.setUint32(0,vn,!0),this.pageView.setUint8(4,0);let n=0;e.currentPageStartsWithFreshPacket||(n|=1),e.pagesWritten===0&&(n|=2),r&&(n|=4),this.pageView.setUint8(5,n);let a=e.currentLacingValues.every(u=>u===255)?-1:e.currentGranulePosition;Fu(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=os(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(),n=this.trackDatas.find(a=>a.track===e);n&&(n.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 zp=0,mm=4096,cm=256,Np=224,um=192,lm=new Uint8Array([9,240]),dm=new Uint8Array([70,1]),go=class extends Te{constructor(e,r){super(e);this.trackDatas=[];this.tablesWritten=!1;this.continuityCounters=new Map;this.packetBuffer=new Uint8Array(188);this.packetView=N(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,ys(this.trackDatas.map(e=>e.codecString))}getVideoTrackData(e,r){let n=this.trackDatas.find(l=>l.track===e);if(n)return n;mr(r),h(r?.decoderConfig);let a=e.source._codec;h(a==="avc"||a==="hevc");let s=a==="avc"?27:36,o=cm+this.trackDatas.length,c=Np+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 n=this.trackDatas.find(l=>l.track===e);if(n)return n;Re(r),h(r?.decoderConfig);let a=e.source._codec;h(a==="aac"||a==="mp3"||a==="ac3"||a==="eac3");let s,o;switch(a){case"aac":s=15,o=um+this.audioTrackIndex++;break;case"mp3":s=3,o=um+this.audioTrackIndex++;break;case"ac3":s=129,o=189;break;case"eac3":s=135,o=189;break}let c=cm+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,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,n);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=this.prepareVideoPacket(s,r,n);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,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,n);this.validateTimestamp(s.track,r.timestamp,r.type==="key");let o=this.prepareAudioPacket(s,r,n);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,n){let a=e.track.source._codec;if(e.inputIsAnnexB===null){let s=n?.decoderConfig?.description;if(e.inputIsAnnexB=!s,!e.inputIsAnnexB){let o=X(s);a==="avc"?e.avcDecoderConfig=Oa(o):e.hevcDecoderConfig=ll(o)}}return e.inputIsAnnexB?this.prepareAnnexBVideoPacket(r.data,a):this.prepareLengthPrefixedVideoPacket(e,r,a)}prepareAnnexBVideoPacket(e,r){let n=[];for(let s of gr(e)){let o=e.subarray(s.offset,s.offset+s.length);(r==="avc"?Qt(o[0])===9:ut(o[0])===35)||n.push(o)}let a=r==="avc"?lm:dm;return n.unshift(a),gn(n)}prepareLengthPrefixedVideoPacket(e,r,n){let a=r.data,s=n==="avc"?e.avcDecoderConfig.lengthSizeMinusOne+1:e.hevcDecoderConfig.lengthSizeMinusOne+1,o=[];for(let u of Fa(a,s)){let l=a.subarray(u.offset,u.offset+u.length);(n==="avc"?Qt(l[0])===9:ut(l[0])===35)||o.push(l)}if(r.type==="key")if(n==="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=n==="avc"?lm:dm;return o.unshift(c),gn(o)}prepareAudioPacket(e,r,n){let a=e.track.source._codec;if(a==="mp3"||a==="ac3"||a==="eac3")return r.data;if(e.inputIsAdts===null){let u=n?.decoderConfig?.description;if(e.inputIsAdts=!u,!e.inputIsAdts){let l=Pt(X(u)),m=Aa(l);e.adtsHeader=m.header,e.adtsHeaderBitstream=m.bitstream}}if(e.inputIsAdts)return r.data;h(e.adtsHeader),h(e.adtsHeaderBitstream);let s=e.adtsHeader,o=r.data.byteLength+s.byteLength;xa(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 n=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),n){h(r.decodeTimestamp!==null);let p=Math.round(r.decodeTimestamp*9e4);c.writeBits(4,1),c.writeBits(3,p>>>30&7),c.writeBits(1,1),c.writeBits(15,p>>>15&32767),c.writeBits(1,1),c.writeBits(15,p&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),P=this.payloadBuffer.subarray(0,S),C=0;if(d0,c=n?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;n&&(this.packetBuffer.set(n,u),u+=n.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(),n=this.trackDatas.find(a=>a.track===e);n&&(n.closed=!0,await this.flushTimestampQueue(n,!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()}},Lp=79764919,fm=new Uint32Array(256);for(let i=0;i<256;i++){let t=i<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Lp:t<<1;fm[i]=t>>>0&4294967295}var pm=i=>{let t=4294967295;for(let e=0;e>>24^r])>>>0}return t},di=new Uint8Array(16);{let i=N(di);di[0]=0,i.setUint16(1,45069,!1),i.setUint16(3,1,!1),di[5]=193,di[6]=0,di[7]=0,i.setUint16(8,1,!1),i.setUint16(10,57344|mm&8191,!1),i.setUint32(12,pm(di.subarray(0,12)),!1)}var Wp=i=>{let t=0;for(let c of i)t+=5,c.streamType===129?t+=wn.length:c.streamType===135&&(t+=Sn.length);let e=9+t+4,r=new Uint8Array(3+e-4),n=N(r);r[0]=2,n.setUint16(1,45056|e&4095,!1),n.setUint16(3,1,!1),r[5]=193,r[6]=0,r[7]=0,n.setUint16(8,65535,!1),n.setUint16(10,61440,!1);let a=12;for(let c of i)r[a++]=c.streamType,n.setUint16(a,57344|c.pid&8191,!1),a+=2,c.streamType===129?(n.setUint16(a,61440|wn.length,!1),a+=2,r.set(wn,a),a+=wn.length):c.streamType===135?(n.setUint16(a,61440|Sn.length,!1),a+=2,r.set(Sn,a),a+=Sn.length):(n.setUint16(a,61440,!1),a+=2);let s=pm(r),o=new Uint8Array(r.length+4);return o.set(r,0),N(o).setUint32(r.length,s,!1),o};var bo=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 yo=class extends Te{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 bo(this.writer),e()}async getMimeType(){return"audio/wav"}async addEncodedVideoPacket(){throw new Error("WAVE does not support video.")}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{if(this.headerWritten||(Re(n),h(n),h(n.decoderConfig),this.writeHeader(e,n.decoderConfig),this.sampleRate=n.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 n,a=e.source._codec,s=Se(a);s.dataType==="ulaw"?n=7:s.dataType==="alaw"?n=6:s.dataType==="float"?n=3:n=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(n),this.riffWriter.writeU16(o),this.riffWriter.writeU32(c),this.riffWriter.writeU32(c*u),this.riffWriter.writeU16(u),this.riffWriter.writeU16(8*s.sampleSize),!qt(this.output._metadataTags)){let l=this.format._options.metadataFormat??"info";l==="info"?this.writeInfoChunk(this.output._metadataTags):l==="id3"?this.writeId3Chunk(this.output._metadataTags):ee(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 n=new Set,a=(c,u)=>{if(!rt(u)){V._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[n*t]:t===1&&e===4?this.channelMixer=(r,n,a)=>r[n*t]*+(a<2):t===1&&e===6?this.channelMixer=(r,n,a)=>r[n*t]*+(a===2):t===2&&e===1?this.channelMixer=(r,n)=>{let a=n*t;return .5*(r[a]+r[a+1])}:t===2&&e===4?this.channelMixer=(r,n,a)=>r[n*t+a]*+(a<2):t===2&&e===6?this.channelMixer=(r,n,a)=>r[n*t+a]*+(a<2):t===4&&e===1?this.channelMixer=(r,n)=>{let a=n*t;return .25*(r[a]+r[a+1]+r[a+2]+r[a+3])}:t===4&&e===2?this.channelMixer=(r,n,a)=>{let s=n*t;return .5*(r[s+a]+r[s+a+2])}:t===4&&e===6?this.channelMixer=(r,n,a)=>{let s=n*t;return a<2?r[s+a]:a===2||a===3?0:r[s+a-2]}:t===6&&e===1?this.channelMixer=(r,n)=>{let a=n*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,n,a)=>{let s=n*t;return r[s+a]+Math.SQRT1_2*(r[s+2]+r[s+a+4])}:t===6&&e===4?this.channelMixer=(r,n,a)=>{let s=n*t;return a<2?r[s+a]+Math.SQRT1_2*r[s+2]:r[s+a+2]}:this.channelMixer=(r,n,a)=>a=this.bufferStartFrame+this.bufferSizeInFrames;)await this.finalizeCurrentBuffer(),this.bufferStartFrame+=this.bufferSizeInFrames;let l=u-this.bufferStartFrame;h(l=0&&p=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})()}},Bt=class extends mi{constructor(e){super();this._connectedTrack=null;if(!ne.includes(e))throw new TypeError(`Invalid video codec '${e}'. Must be one of: ${ne.join(", ")}.`);this._codec=e}},fu=(i,t)=>{if(i.metadata.hasOnlyKeyPackets&&t.type!=="key")throw new Error("Cannot add non-key packets to a hasOnlyKeyPackets video track.")},Vr=class extends Bt{constructor(t){super(t)}add(t,e){if(!(t instanceof j))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(),fu(this._connectedTrack,t),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,t,e)}},ua=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.emittedEncoderPackets=0;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 or;this.customEncoderQueueSize=0;this.alphaEncoder=null;this.splitter=null;this.splitterCreationFailed=!1;this.alphaFrameQueue=[];this.error=null;this.errorSet=!1;this.lastMuxerPromise=Promise.resolve();this.closed=!1}setError(t){this.errorSet||(this.error=t,this.errorSet=!0)}async add(t,e,r){let n=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=a.transform?.width,d=a.transform?.height,f=a.transform?.fit??"fill";o&&s!=="passThrough"&&(h(this.outputWidth),h(this.outputHeight),h(s!=="deny"),m=this.outputWidth,d=this.outputHeight,f=s);let p=await t.transform({width:m,height:d,roundDimensionsTo:2,crop:a.transform?.crop,rotate:a.transform?.rotate,fit:f,alpha:a.alpha});(this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=p.displayWidth,this.outputHeight=p.displayHeight),e&&t.close(),t=p,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=Ko(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===n&&(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,n;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]),n=a.map(s=>s instanceof Ve?s:typeof VideoFrame<"u"&&s instanceof VideoFrame?new Ve(s):new Ve(s,{timestamp:t.timestamp,duration:t.duration}))}else n=[t];try{for(let a of n){if(this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(a),this.encoderInitialized||await this.ensureEncoderPromise),h(this.encoderInitialized),this.closed)break;let s=this.encodingConfig.keyFrameInterval??2,o=Math.floor(a.timestamp/s),c={...a.encodeOptions,...e},u={...c,keyFrame:c.keyFrame!==void 0?c.keyFrame:s===0||o!==this.lastMultipleOfKeyFrameInterval};if(this.lastMultipleOfKeyFrameInterval=o,this.encodingConfig.onEncodedSample?.(a),this.customEncoder){this.customEncoderQueueSize++;let l=a.clone(),m=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(l,u)).catch(d=>this.setError(d)).finally(()=>{this.customEncoderQueueSize--,l.close()});this.customEncoderQueueSize>=4&&await m}else{h(this.encoder);let l=a.toVideoFrame(),m=K(this.preciseTimings,l.timestamp,f=>f.microsecondTimestamp),d=m!==-1?this.preciseTimings[m]:null;if(d&&d.microsecondTimestamp===l.timestamp?(d.timestamp!==a.timestamp&&(d.timestampIsValid=!1),d.duration!==a.duration&&(d.durationIsValid=!1)):(this.preciseTimings.splice(m+1,0,{microsecondTimestamp:l.timestamp,timestamp:a.timestamp,duration:a.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift()),!this.alphaEncoder)this.encoder.encode(l,u),l.close();else if(!!l.format&&!l.format.includes("A")||this.splitterCreationFailed)this.alphaFrameQueue.push(null),this.encoder.encode(l,u),l.close();else{this.splitter||(this.splitter=new pu);let{colorFrame:p,alphaFrame:b}=await this.splitter.split(l);this.alphaFrameQueue.push(b),this.encoder.encode(p,u),p.close()}this.encoder.encodeQueueSize>=4&&await new Promise(f=>this.encoder.addEventListener("dequeue",f,{once:!0}))}await this.lastMuxerPromise}}finally{for(let a of n)a!==t&&a.close()}}async padFrameRate(t,e){let r=this.encodingConfig.transform.frameRate;h(this.frameRateLastSample);let n=Math.round((t-this.frameRateLastTimestamp)*r);for(let a=1;a{let e=Wc({...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=ji.find(n=>n.supports(this.encodingConfig.codec,e));if(r)this.customEncoder=new r,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=e,this.customEncoder.onPacket=(n,a)=>{if(!(n instanceof j))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.");fu(this.source._connectedTrack,n),this.encodingConfig.onEncodedPacket?.(n,a),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,n,a).catch(s=>{this.setError(s)})},this.customEncoder.onError=n=>{this.setError(n)},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,p)=>{let b={};if(f){let w=new Uint8Array(f.byteLength);f.copyTo(w),b.alpha=w}let g=j.fromEncodedChunk(d,b),y=K(this.preciseTimings,d.timestamp,w=>w.microsecondTimestamp),k=y!==-1?this.preciseTimings[y]:null,T=null;this.emittedEncoderPackets===0&&g.type==="delta"&&p?.decoderConfig&&(T=yr(this.encodingConfig.codec,p.decoderConfig,g.data)),(k&&k.microsecondTimestamp===d.timestamp||T!==null)&&(g=g.clone({timestamp:k?.timestampIsValid?k.timestamp:void 0,duration:k?.durationIsValid?k.duration:void 0,type:T??void 0})),fu(this.source._connectedTrack,g),this.encodingConfig.onEncodedPacket?.(g,p),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,g,p).catch(w=>{this.setError(w)}),this.emittedEncoderPackets++},m=new Error("Encoding error").stack;if(this.encoder=new VideoEncoder({output:(d,f)=>{if(!this.alphaEncoder){l(d,null,f);return}let p=this.alphaFrameQueue.shift();h(p!==void 0),p?(this.alphaEncoder.encode(p,{keyFrame:d.type==="key"}),u++,p.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.setError(d)}}),this.encoder.configure(e),this.encodingConfig.alpha==="keep"){let d=new Error("Encoding error").stack;this.alphaEncoder=new VideoEncoder({output:(f,p)=>{u--;let b=s.shift();for(h(b!==void 0),l(b.chunk,f,b.meta),c++;o.length>0&&o[0]===c;){o.shift();let g=s.shift();h(g!==void 0),l(g.chunk,null,g.meta)}},error:f=>{f.stack=d,this.setError(f)}}),this.alphaEncoder.configure(e)}}h(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=Ko(this.frameRateLastEndTimestamp,e);await this.padFrameRate(r)}this.closed=!0,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(),await jr(25)),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.errorSet)throw this.error}},lu=null,pu=class{constructor(){this.worker=null;this.pendingRequests=new Map;this.nextRequestId=0}split(t){if(!this.worker){if(!lu){let n=new Blob([`(${Hp.toString()})()`],{type:"application/javascript"});lu=URL.createObjectURL(n)}this.worker=new Worker(lu),this.worker.addEventListener("message",n=>{let a=n.data,s=this.pendingRequests.get(a.id);s&&(this.pendingRequests.delete(a.id),"error"in a?s.reject(new Error(a.error)):s.resolve({colorFrame:a.colorFrame,alphaFrame:a.alphaFrame}))}),this.worker.addEventListener("error",n=>{let a=new Error(n.message||"Color/alpha splitter worker error.");for(let s of this.pendingRequests.values())s.reject(a);this.pendingRequests.clear()})}let e=this.nextRequestId++,r=J();return this.pendingRequests.set(e,r),this.worker.postMessage({id:e,sourceFrame:t},{transfer:[t]}),r.promise}close(){this.worker?.terminate(),this.worker=null;let t=new Error("Color/alpha splitter closed.");for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()}},Hp=()=>{let i=null,t=Promise.resolve();self.addEventListener("message",a=>{let{id:s,sourceFrame:o}=a.data;t=t.then(async()=>{try{let{colorFrame:c,alphaFrame:u}=await e(o);self.postMessage({id:s,colorFrame:c,alphaFrame:u},{transfer:[c,u]})}catch(c){self.postMessage({id:s,error:c.message})}finally{o.close()}})});let e=async a=>{let s=a.format;if(!s)throw new Error("CPU color/alpha splitting requires a known VideoFrame format.");let o=a.allocationSize();if((!i||i.byteLength!==o)&&(i=new Uint8Array(o)),await a.copyTo(i),s==="RGBA"||s==="BGRA")return r(i,s,a);if(s==="I420A"||s==="I420AP10"||s==="I420AP12"||s==="I422A"||s==="I422AP10"||s==="I422AP12"||s==="I444A"||s==="I444AP10"||s==="I444AP12")return n(i,s,a);throw new Error(`CPU color/alpha splitting does not support format '${s}'.`)},r=(a,s,o)=>{let c=o.visibleRect?.width??o.codedWidth,u=o.visibleRect?.height??o.codedHeight,l=c*u,m=Math.ceil(c/2),d=Math.ceil(u/2),f=l+m*d*2,p=new Uint8Array(f);for(let k=0,T=3;k{let c=o.visibleRect?.width??o.codedWidth,u=o.visibleRect?.height??o.codedHeight,l=s.includes("P10"),m=s.includes("P12"),d=l||m?2:1,f,p;s.startsWith("I420")?(f=Math.ceil(c/2),p=Math.ceil(u/2)):s.startsWith("I422")?(f=Math.ceil(c/2),p=u):(f=c,p=u);let b=c*u,g=f*p,y=b*d,k=g*d,T=b*d,w=y+k*2,S=s.replace("A",""),P=Math.ceil(c/2),C=Math.ceil(u/2),x=P*C,A=x*d,I=T+2*A,E=new Uint8Array(I),_=w;E.set(a.subarray(_,_+T),0);let v=T,D=l?512:m?2048:128;d===1?E.fill(D,v):new Uint16Array(E.buffer,v,2*x).fill(D);let O=l?"I420P10":m?"I420P12":"I420",z=new VideoFrame(a.subarray(0,w),{format:S,codedWidth:c,codedHeight:u,timestamp:o.timestamp,duration:o.duration??void 0}),H={format:O,codedWidth:c,codedHeight:u,timestamp:o.timestamp,duration:o.duration??void 0,transfer:[E.buffer]},ie=new VideoFrame(E,H);return{colorFrame:z,alphaFrame:ie}}},fi=class extends Bt{constructor(t){$s(t),super(t.codec),this._encoder=new ua(this,t)}add(t,e){if(!(t instanceof Ve))throw new TypeError("videoSample must be a VideoSample.");return this._encoder.add(t,!1,e)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},To=class extends Bt{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.");$s(e),super(e.codec),this._encoder=new ua(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 n=new Ve(this._canvas,{timestamp:t,duration:e});return this._encoder.add(n,!0,r)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},wo=class extends Bt{constructor(e,r,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!=="video")throw new TypeError("track must be a video MediaStreamTrack.");if($s(r),typeof n!="object"||!n)throw new TypeError("options must be an object.");if(n.frameRate!=null&&(typeof n.frameRate!="number"||n.frameRate<=0))throw new TypeError("options.frameRate, when provided, must be either a positive number or null.");if(n.timestampBase!==void 0&&n.timestampBase!=="synced-zero"&&n.timestampBase!=="zero"&&n.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=n,this._encoder=new ua(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||V._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,n=null,a=0,s=!1,o=null,c=0,u=()=>{if(h(e!==null),!this._lastVideoFrame)return;h(n!==null),h(r!==null);let d=performance.now();for(;d-n>1e3/e;){n+=1e3/e;let f=r+a/e,p=new VideoFrame(this._videoElement??this._lastVideoFrame,{timestamp:1e6*f,duration:1e6/e});m(p,d)}};e!==null&&(this._timerHandle=Hu(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),n=f,this._lastVideoFrame=d)}},m=(d,f=performance.now())=>{if(s){d.close();return}a++;let p=d.timestamp/1e6;if(this._paused){if(r!==null){if(o!==null&&this._options.timestampBase!=="unix"){let y=p-o;c-=y}o=p}d.close();return}if(r===null){r=p;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=p,this._encoder.getQueueSize()>=8){d.close();return}let b=new Ve(d,{timestamp:p+c});this._encoder.add(b,!0).catch(g=>{s=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(g),this._workerTrackId!==null&&mu({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(p=>{p instanceof DOMException&&p.name==="AbortError"||this._promiseWithResolvers.reject(p)})}else if(await Qp())this._workerTrackId=Kp++,mu({type:"videoTrack",trackId:this._workerTrackId,track:this._track}),this._workerListener=f=>{let p=f.data;p.type==="videoFrame"&&p.trackId===this._workerTrackId?l(p.videoFrame):p.type==="error"&&p.trackId===this._workerTrackId&&this._promiseWithResolvers.reject(p.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 p=new VideoFrame(f,{timestamp:1e3*performance.now()});l(p),p.close()},{once:!0}),f.play().catch(p=>{s=!0,this._promiseWithResolvers.reject(p)})}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&&qu(this._timerHandle),this._lastVideoFrame?.close(),this._videoElement&&(this._videoElement.srcObject=null,this._videoElement.remove(),this._videoElement=null),this._workerTrackId!==null&&(h(this._workerListener),mu({type:"stopTrack",trackId:this._workerTrackId}),await new Promise(r=>{let n=a=>{let s=a.data;s.type==="trackStopped"&&s.trackId===this._workerTrackId&&(h(this._workerListener),et.removeEventListener("message",this._workerListener),et.removeEventListener("message",n),r())};et.addEventListener("message",n)})),await this._encoder.flushAndClose(e)}},Ot=class extends mi{constructor(e){super();this._connectedTrack=null;if(!oe.includes(e))throw new TypeError(`Invalid audio codec '${e}'. Must be one of: ${oe.join(", ")}.`);this._codec=e}},Ur=class extends Ot{constructor(t){super(t)}add(t,e){if(!(t instanceof j))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)}},la=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 or;this.customEncoderQueueSize=0;this.lastEndSampleIndex=null;this.resampler=null;this.error=null;this.errorSet=!1;this.lastMuxerPromise=Promise.resolve();this.closed=!1}setError(t){this.errorSet||(this.error=t,this.errorSet=!0)}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 ko({targetNumberOfChannels:r.transform.numberOfChannels??t.numberOfChannels,targetSampleRate:r.transform.sampleRate??t.sampleRate,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&&bd(t.format)!==r.transform.sampleFormat){let n=yd(t,r.transform.sampleFormat);e&&t.close(),t=n,e=!0}if(r.transform?.process){let n=r.transform.process(t);if(n instanceof Promise&&(n=await n),n===null)return;Array.isArray(n)||(n=[n]);for(let a of n){if(!(a instanceof ke))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{if(this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(t),this.encoderInitialized||await this.ensureEncoderPromise),h(this.encoderInitialized),this.closed)return;{let r=Math.round(t.timestamp*t.sampleRate),n=Math.round((t.timestamp+t.duration)*t.sampleRate);if(this.lastEndSampleIndex===null)this.lastEndSampleIndex=n;else{let a=r-this.lastEndSampleIndex;if(a>=64){let s=new ke({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.encodingConfig.onEncodedSample?.(t),this.customEncoder){this.customEncoderQueueSize++;let r=t.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(r)).catch(a=>this.setError(a)).finally(()=>{this.customEncoderQueueSize--,r.close()});this.customEncoderQueueSize>=4&&await n,await this.lastMuxerPromise}else if(this.isPcmEncoder)await this.doPcmEncoding(t,e);else{h(this.encoder);let r=t.toAudioData();this.encoder.encode(r),r.close(),e&&t.close(),this.encoder.encodeQueueSize>=4&&await new Promise(n=>this.encoder.addEventListener("dequeue",n,{once:!0})),await this.lastMuxerPromise}}finally{e&&t.close()}}async doPcmEncoding(t,e){h(this.outputSampleSize),h(this.writeOutputValue);let{numberOfChannels:r,numberOfFrames:n,sampleRate:a,timestamp:s}=t,o=2048,c=[];for(let d=0;d{let{numberOfChannels:e,sampleRate:r}=t,n=Hc({numberOfChannels:e,sampleRate:r,...this.encodingConfig});this.encodingConfig.onEncoderConfig?.(n);let a=Xi.find(s=>s.supports(this.encodingConfig.codec,n));if(a)this.customEncoder=new a,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=n,this.customEncoder.onPacket=(s,o)=>{if(!(s instanceof j))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.setError(c)})},this.customEncoder.onError=s=>{this.setError(s)},await this.customEncoder.init();else if(re.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(n)).supported)throw new Error(`This specific encoder configuration (${n.codec}, ${n.bitrate} bps, ${n.numberOfChannels} channels, ${n.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=Pt(X(u.decoderConfig.description)).objectType===0,m){let d=Number(Y(n.codec.split(".")));u.decoderConfig.description=Si({objectType:d,numberOfChannels:u.decoderConfig.numberOfChannels,sampleRate:u.decoderConfig.sampleRate})}}let l=j.fromEncodedChunk(c);l=l.clone({timestamp:St(l.timestamp,n.sampleRate),duration:c.duration!=null?St(l.duration,n.sampleRate):void 0}),this.encodingConfig.onEncodedPacket?.(l,u),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,l,u).catch(m=>{this.setError(m)})},error:c=>{c.stack=o,this.setError(c)}}),this.encoder.configure(n)}h(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:n}=Se(t);switch(this.outputSampleSize=r,r){case 1:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint8(s,ce((o+1)*127.5,0,255)):e==="signed"?this.writeOutputValue=(a,s,o)=>{a.setInt8(s,ce(Math.round(o*128),-128,127))}:e==="ulaw"?this.writeOutputValue=(a,s,o)=>{let c=ce(Math.floor(o*32767),-32768,32767);a.setUint8(s,Rd(c))}:e==="alaw"?this.writeOutputValue=(a,s,o)=>{let c=ce(Math.floor(o*32767),-32768,32767);a.setUint8(s,Md(c))}:h(!1);break;case 2:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint16(s,ce((o+1)*32767.5,0,65535),n):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt16(s,ce(Math.round(o*32767),-32768,32767),n):h(!1);break;case 3:e==="unsigned"?this.writeOutputValue=(a,s,o)=>Hr(a,s,ce((o+1)*83886075e-1,0,16777215),n):e==="signed"?this.writeOutputValue=(a,s,o)=>Ru(a,s,ce(Math.round(o*8388607),-8388608,8388607),n):h(!1);break;case 4:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint32(s,ce((o+1)*21474836475e-1,0,4294967295),n):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt32(s,ce(Math.round(o*2147483647),-2147483648,2147483647),n):e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat32(s,o,n):h(!1);break;case 8:e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat64(s,o,n):h(!1);break;default:ee(r),h(!1)}}async flushAndClose(t){t||this.checkForEncoderError(),!t&&this.resampler&&await this.resampler.finalize(),this.resampler=null,this.closed=!0,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.errorSet)throw this.error}},an=class extends Ot{constructor(t){Ys(t),super(t.codec),this._encoder=new la(this,t)}add(t){if(!(t instanceof ke))throw new TypeError("audioSample must be an AudioSample.");return this._encoder.add(t,!1)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},So=class extends Ot{constructor(e){Ys(e);super(e.codec);this._accumulatedTime=0;this._encoder=new la(this,e)}async add(e){if(!(e instanceof AudioBuffer))throw new TypeError("audioBuffer must be an AudioBuffer.");let r=ke._fromAudioBuffer(e,this._accumulatedTime);this._accumulatedTime+=e.duration;for(let n of r)await this._encoder.add(n,!0)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},Ao=class extends Ot{constructor(e,r,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!=="audio")throw new TypeError("track must be an audio MediaStreamTrack.");if(Ys(r),typeof n!="object"||!n)throw new TypeError("options must be an object.");if(n.timestampBase!==void 0&&n.timestampBase!=="synced-zero"&&n.timestampBase!=="zero"&&n.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=n,this._encoder=new la(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||V._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,n=null,a=0,s=o=>{if(r){o.close();return}let c=o.timestamp;if(this._paused){if(e!==null){if(n!==null&&this._options.timestampBase!=="unix"){let l=c-n;a-=l}n=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(n=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 ke(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=ke._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&&(h(this._scriptProcessorNode),this._scriptProcessorNode.disconnect(),await this._audioContext.suspend()),await this._encoder.flushAndClose(e)}},qp=()=>{let i=(r,n)=>{n?self.postMessage(r,{transfer:n}):self.postMessage(r)};i({type:"support",supported:typeof MediaStreamTrackProcessor<"u"});let t=new Map,e=new Map;self.addEventListener("message",r=>{let n=r.data;switch(n.type){case"videoTrack":{e.set(n.trackId,n.track);let a=new MediaStreamTrackProcessor({track:n.track}),s=new WritableStream({write:c=>{if(!e.has(n.trackId)){c.close();return}i({type:"videoFrame",trackId:n.trackId,videoFrame:c},[c])}}),o=new AbortController;t.set(n.trackId,o),a.readable.pipeTo(s,{signal:o.signal}).catch(c=>{c instanceof DOMException&&c.name==="AbortError"||i({type:"error",trackId:n.trackId,error:c})})}break;case"stopTrack":{let a=t.get(n.trackId);a&&(a.abort(),t.delete(n.trackId)),e.get(n.trackId)?.stop(),e.delete(n.trackId),i({type:"trackStopped",trackId:n.trackId})}break;default:ee(n)}})},Kp=0,et=null,Gp=()=>{let i=new Blob([`(${qp.toString()})()`],{type:"application/javascript"}),t=URL.createObjectURL(i);et=new Worker(t)},du=null,Qp=async()=>du!==null?du:(et||Gp(),new Promise(i=>{h(et);let t=e=>{let r=e.data;r.type==="support"&&(du=r.supported,et.removeEventListener("message",t),i(r.supported))};et.addEventListener("message",t)})),mu=(i,t)=>{h(et),t?et.postMessage(i,t):et.postMessage(i)},pi=class extends mi{constructor(e){super();this._connectedTrack=null;if(!Be.includes(e))throw new TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${Be.join(", ")}.`);this._codec=e}},xo=class extends pi{constructor(e){super(e);this._error=null;this._errorSet=!1;this._lastMuxerPromise=Promise.resolve();this._parser=new no({codec:e,output:(r,n)=>{this._lastMuxerPromise=this._connectedTrack.output._muxer.addSubtitleCue(this._connectedTrack,r,n).catch(a=>{this._setError(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}_setError(e){this._errorSet||(this._error=e,this._errorSet=!0)}_checkForError(){if(this._errorSet)throw this._error}async _flushAndClose(e){e||this._checkForError()}};var Co=class extends Te{constructor(e,r){if(!(e._target instanceof Ke))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})=>`playlist-${n}.m3u8`),this.getSegmentPath=r._options.getSegmentPath??(n=>n.isSingleFile?`segments-${n.playlist.n}${n.format.fileExtension}`:`segment-${n.playlist.n}-${n.n}${n.format.fileExtension}`),this.getInitPath=r._options.getInitPath??(n=>`init-${n.n}${n.segmentFormat.fileExtension}`)}async start(){let e=await this.mutex.acquire(),r=this.output._tracks.some(y=>y.metadata.isRelativeToUnixEpoch),n=this.output._tracks.some(y=>!y.metadata.isRelativeToUnixEpoch);if(r&&n)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||(V._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||(V._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(C=>C.id).join("-");s.find(C=>C.key===w)||s.push({name:T[0].type+"-"+(s.length+1),key:w,tracks:T,needsEmit:!1,firstNoUri:!1});let P=a.get(y);P||a.set(y,P=[]),P.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(h(k.length>0),y.type!==l)continue;for(let T of k){let w=s.find(S=>S.key===T);if(h(w),k.length===1&&w.tracks.length===1){let S=a.get(w.tracks[0]);if(h(S!==void 0),S.length===1){let P=s.find(C=>C.key===S[0]);if(P.tracks.length===1){h(P.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 p=({metadata:y})=>{let k="";return k+=`${y.languageCode??te}-`,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(p)).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(p)).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,P=null,C=-1/0;for(let x of y)x.isVideoTrack()?(T++,S||=(x.metadata.rotation??0)!==0):x.isAudioTrack()&&w++,k.push(x.source._codec);for(let x of Wt(this.format._options.segmentFormat)){let A=x.getSupportedCodecs(),I=x.getSupportedTrackCounts();if(k.some(_=>!A.includes(_))||TI.video.max||wI.audio.max)continue;let E=0;S&&x.supportsVideoRotationMetadata&&E++,E>C&&(P=x,C=E)}return h(P),P},g=async y=>{if(y.some(P=>this.playlists.some(C=>C.tracks.includes(P))))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});jp(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 _e};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 Ct}allTracksAreKnown(e){for(let r of e.tracks)if(!r.source._closed&&!this.trackDatas.some(n=>n.track===r))return!1;return!0}async onTrackClose(e){let r=this.trackDatas.find(s=>s.track===e);r&&(r.closed=!0);let n=this.playlists.find(s=>s.tracks.includes(e));h(n);let a=await n.mutex.acquire();try{await this.advancePlaylist(n)}finally{a()}}getVideoTrackData(e,r){let n=this.trackDatas.find(s=>s.track===e);if(n)return n;mr(r),h(r),h(r?.decoderConfig);let a=this.playlists.filter(s=>s.tracks.includes(e));return h(a.length===1),n={track:e,packets:[],playlist:a[0],closed:!1,info:{type:"video",decoderConfig:r.decoderConfig}},this.trackDatas.push(n),n}getAudioTrackData(e,r){let n=this.trackDatas.find(s=>s.track===e);if(n)return n;Re(r),h(r),h(r?.decoderConfig);let a=this.playlists.filter(s=>s.tracks.includes(e));return h(a.length===1),n={track:e,packets:[],playlist:a[0],closed:!1,info:{type:"audio",decoderConfig:r.decoderConfig}},this.trackDatas.push(n),n}async addEncodedVideoPacket(e,r,n){let a=this.getVideoTrackData(e,n),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,n){let a=this.getAudioTrackData(e,n),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,n){throw new Error("Unreachable.")}async advancePlaylist(e){if(h(!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)),n=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(n&&(!n.closed||n.packets.length>0)){let w=n.packets.every(C=>C.timestamps)break;C>0&&x.type==="key"&&(S=x,P=C)}if(P!==null){if(o=P,a){let C=a.packets.findIndex(x=>x.timestamp>=S.timestamp);if(C!==-1)c=C;else if(a.closed)c=a.packets.length;else return}}else{if(!n.closed)return;o=n.packets.length;let C=Nu(n.packets,A=>A.timestamp),x=n.packets[C];if(h(x),a)if(x.timestampI.timestamp>=s);if(A!==-1)c=A;else if(a.closed)c=a.packets.length;else return}else{let A=a.packets.findIndex(I=>I.timestamp>x.timestamp);if(A!==-1)c=A;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.timestampP.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;h(this.output._target instanceof Ke);let d=this.output._target;if(this.singleFilePerPlaylist)if(e.singleFile===null){let w={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!0,playlist:Po(e)};l=await this.getSegmentPath(w),hm(l),m=he(he(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=he(he(d.rootPath,e.path),l);else u={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!1,playlist:Po(e)},l=await this.getSegmentPath(u),hm(l),m=he(he(d.rootPath,e.path),l),e.nextSegmentId++;let f=0,p=null,b=new sr({format:e.segmentFormat,target:new Ke(m,async w=>{let S={...w,isRoot:!1};if(w.isRoot)if(e.singleFile){let P=e.singleFile.target.slice(e.singleFile.nextOffset);return P.on("write",({end:C})=>f=Math.max(f,C)),P}else{let P=await this.output._getTarget(S);return p=P,P.on("write",({end:C})=>f=Math.max(f,C)),P}return this.output._getTarget(S)}),initTarget:async()=>{if(e.initSegment)return new Dr;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=Po(e),S=await this.getInitPath(w);Xp(S),e.initSegment={path:S,duration:0,timestamp:0,byteSize:0,byteOffset:null,info:null};let P=he(he(d.rootPath,e.path),S),C=await this.output._getTarget({path:P,isRoot:!1,mimeType:e.segmentFormat.mimeType});return C.on("write",({end:x})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,x)}),C.on("finalized",()=>{this.format._options.onInit?.(C,w)}),C}}}),g=-1/0;try{let w=null,S=null;if(n&&(w=new Vr(n.track.source._codec),b.addVideoTrack(w,n.track.metadata)),a&&(S=new Ur(a.track.source._codec),b.addAudioTrack(S,a.track.metadata)),await b.start(),n){h(w);let P={decoderConfig:n.info.decoderConfig};for(let C=0;C0&&(h(n),n.packets.splice(0,o)),c>0&&(h(a),a.packets.splice(0,c));let y=1/0;n&&n.packets.length>0&&(y=n.packets[0].timestamp),a&&a.packets.length>0&&(y=Math.min(y,a.packets[0].timestamp));let k=y<1/0?y:g;h(Number.isFinite(k));let T=k-e.currentSegmentStartTimestamp;if(h(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||(h(w.info),this.format._options.onSegmentPopped?.(w.path,w.info))}await this.writePlaylist(e),await this.tryWriteMasterPlaylist()}}}async onPlaylistDone(e){h(!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,n=0,a=0,s=0;for(let o=0;o=.5*this.globalTargetDuration&&u<=1.5*this.globalTargetDuration&&(n=Math.max(n,8*c/u)),!(u>1.5*this.globalTargetDuration));l++);}if(n===0)for(let o of r){let c=o.duration||1;n=Math.max(n,8*o.byteSize/c)}for(let o of r)a+=8*o.byteSize;e.peakBitrate=n,e.averageBitrate=a/(s||1)}async writePlaylist(e){h(this.output._target instanceof Ke);let r=this.output._target;this.updatePlaylistBitrates(e);let n=!1;for(let d of e.writtenSegments)n||=d.byteOffset!==null;let a=e.tracks[0].isVideoTrack()&&e.tracks[0].metadata.hasOnlyKeyPackets,s=3;(a||n)&&(s=4),e.initSegment&&(s=5),e.initSegment&&!a&&(s=6);let o=this.isLive?this.targetSegmentDuration:this.globalTargetDuration,c=he(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,Po(e));let l=await this.output._getTarget({path:c,isRoot:!1,mimeType:Ct}),m=new Mt(l,!0);m.start(),m.write($.encode(u)),await m.flush(),await m.finalize()}async writeMasterPlaylist(){h(this.output._target instanceof Ke);let e=this.output._target,r=`#EXTM3U `,n=!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)h(S.playlist.peakBitrate!==null),d=Math.max(d,S.playlist.peakBitrate),f=Math.max(f,S.playlist.averageBitrate??0)}h(u.playlist.peakBitrate!==null);let p=u.playlist.peakBitrate+d,b=(u.playlist.averageBitrate??0)+f;n||(r+=` `,n=!0),l?r+="#EXT-X-I-FRAME-STREAM-INF:":r+="#EXT-X-STREAM-INF:",r+=`BANDWIDTH=${Math.ceil(p)}`,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){h(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{h(u.playlist.tracks.length===1);let l=u.playlist.tracks[0],m=l.type,d=l.metadata.name??null,f=l.metadata.languageCode,p=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)&&(V._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=p?.primary??!1,g=p?.default??!0,y=p?.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:Ct});u=new Mt(l,!0),u.start()}u.write($.encode(r)),await u.flush(),await u.finalize(),this.numWrittenMasterPlaylists++}finally{c()}}async tryWriteMasterPlaylist(){h(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()}},jp=i=>{if(typeof i!="string")throw new TypeError("options.getPlaylistPath must return or resolve to a string");if(/[\n\r"]/.test(i))throw new TypeError("Playlist paths cannot contain line feed, carriage return, or double quote characters.")},hm=i=>{if(typeof i!="string")throw new TypeError("options.getSegmentPath must return or resolve to a string");if(/[\n\r"]/.test(i))throw new TypeError("Segment paths cannot contain line feed or carriage return characters.")},Xp=i=>{if(typeof i!="string")throw new TypeError("options.getInitPath must return or resolve to a string");if(/[\n\r"]/.test(i))throw new TypeError("Init paths cannot contain line feed, carriage return, or double quote characters.")},Po=i=>({n:i.id,tracks:i.tracks,segmentFormat:i.segmentFormat});var ve=class{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(t=>ne.includes(t))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(t=>oe.includes(t))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(t=>Be.includes(t))}_codecUnsupportedHint(t){return""}},hi=class extends ve{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 lo(t,this)}},gi=class extends hi{constructor(t){super(t)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...ne,...ot,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...Be]}_codecUnsupportedHint(t){return new ui().getSupportedCodecs().includes(t)?" Switching to MOV will grant support for this codec.":""}},ci=class extends hi{constructor(t){super(t)}get _name(){return"CMAF"}get fileExtension(){return".m4s"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...ne,...ot,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",...Be]}},ui=class extends hi{constructor(t){super(t)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...ne,...oe]}_codecUnsupportedHint(t){return new gi().getSupportedCodecs().includes(t)?" Switching to MP4 will grant support for this codec.":""}},sn=class extends ve{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 mo(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[...ne,...ot,...re.filter(t=>!["pcm-s8","pcm-f32be","pcm-f64be","ulaw","alaw"].includes(t)),...Be]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},li=class extends sn{constructor(t){super(t)}getSupportedCodecs(){return[...ne.filter(t=>["vp8","vp9","av1"].includes(t)),...oe.filter(t=>["opus","vorbis"].includes(t)),...Be]}get _name(){return"WebM"}get fileExtension(){return".webm"}get mimeType(){return"video/webm"}_codecUnsupportedHint(t){return new sn().getSupportedCodecs().includes(t)?" Switching to MKV will grant support for this codec.":""}},Io=class extends ve{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 po(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}},Eo=class extends ve{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 yo(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[...re.filter(t=>["pcm-s16","pcm-s24","pcm-s32","pcm-f32","pcm-u8","ulaw","alaw"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},vo=class extends ve{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 ho(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[...oe.filter(t=>["vorbis","opus"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},_o=class extends ve{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 ro(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}},Ro=class extends ve{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 io(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}},Fo=class extends ve{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 go(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[...ne.filter(t=>["avc","hevc"].includes(t)),...oe.filter(t=>["aac","mp3","ac3","eac3"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},Mo=class extends ve{constructor(t){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.segmentFormat instanceof ve)&&(!Array.isArray(t.segmentFormat)||t.segmentFormat.length===0||!t.segmentFormat.every(e=>e instanceof ve)))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 Co(t,this)}get _name(){return"HTTP Live Streaming (HLS)"}get fileExtension(){return".m3u8"}get mimeType(){return Ct}getSupportedCodecs(){return[...new Set(Wt(this._options.segmentFormat).flatMap(e=>e.getSupportedCodecs()))]}getSupportedTrackCounts(){let t=!1,e=!1,r=!1;for(let n of Wt(this._options.segmentFormat)){let a=n.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 Wt(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 gu=["video","audio","subtitle"],bi=class i{constructor(t,e,r,n,a){this.id=t,this.output=e,this.type=r,this.source=n,this.metadata=a}isVideoTrack(){return this.type==="video"}isAudioTrack(){return this.type==="audio"}isSubtitleTrack(){return this.type==="subtitle"}canBePairedWith(t){if(!(t instanceof i))throw new TypeError("other must be an OutputTrack.");if(this===t)return!1;let e=Wt(this.metadata.group),r=Wt(t.metadata.group);for(let n of e)if(this.type!==t.type&&r.some(o=>n===o)||r.some(o=>n._pairedGroups.has(o)))return!0;return!1}},da=class extends bi{constructor(t,e,r,n){super(t,e,"video",r,n)}},ma=class extends bi{constructor(t,e,r,n){super(t,e,"audio",r,n)}},fa=class extends bi{constructor(t,e,r,n){super(t,e,"subtitle",r,n)}},Ge=class i{constructor(){this._pairedGroups=new Set}pairWith(t){if(!(t instanceof i))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)}},hu=i=>{if(!i||typeof i!="object")throw new TypeError("metadata must be an object.");if(i.languageCode!==void 0&&!Nt(i.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(i.name!==void 0&&typeof i.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(i.disposition!==void 0&&Ku(i.disposition),i.maximumPacketCount!==void 0&&(!Number.isInteger(i.maximumPacketCount)||i.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.");if(i.group!==void 0&&!(i.group instanceof Ge)&&(!Array.isArray(i.group)||i.group.some(t=>!(t instanceof Ge))))throw new TypeError("metadata.group, when provided, must be an OutputTrackGroup instance or an array of OutputTrackGroup instances.")},sr=class extends Ue{constructor(e){super();this.state="pending";this.defaultTrackGroup=new Ge;this._onFinalize=null;this._unfinalizedTargets=new Set;this._rootWriterPromise=null;this._tracks=[];this._startPromise=null;this._cancelPromise=null;this._finalizePromise=null;this._mutex=new _e;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 ve))throw new TypeError("options.format must be an OutputFormat.");if(!(e.target instanceof xe||e.target instanceof Ke))throw new TypeError("options.target must be a Target or a PathedTarget.");if(e.target instanceof xe&&this._rememberTarget(e.target),e.initTarget!==void 0&&!(e.initTarget instanceof xe)&&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 xe&&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){h(this._target instanceof Ke);let r=this._target.getTarget(e),n=a=>{if(!(a instanceof xe))throw new TypeError("getTarget must return a Target.");return a};return r instanceof Promise?r.then(n):n(r)}async _getTarget(e){h(this._target instanceof Ke);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(h(this._initTarget!==null),this._initTarget instanceof xe)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 xe)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),n=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(n):n(r)}_getRootWriter(e){return this._rootWriterPromise??=(async()=>{let r=await this._getRootTarget(),n=new Mt(r,typeof e=="boolean"?e:e(r));return n.start(),n})()}addVideoTrack(e,r={}){if(!(e instanceof Bt))throw new TypeError("source must be a VideoSource.");if(hu(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 n={...r};return n.group??=this.defaultTrackGroup,this._addTrack(new da(this._tracks.length+1,this,e,n))}addAudioTrack(e,r={}){if(!(e instanceof Ot))throw new TypeError("source must be an AudioSource.");hu(r);let n={...r};return n.group??=this.defaultTrackGroup,this._addTrack(new ma(this._tracks.length+1,this,e,n))}addSubtitleTrack(e,r={}){if(!(e instanceof pi))throw new TypeError("source must be a SubtitleSource.");hu(r);let n={...r};return n.group??=this.defaultTrackGroup,this._addTrack(new fa(this._tracks.length+1,this,e,n))}setMetadataTags(e){if(fn(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(),n=this._tracks.reduce((o,c)=>o+(c.type===e.type?1:0),0),a=r[e.type].max;if(n===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 n of gu){let a=this._tracks.reduce((o,c)=>o+(c.type===n?1:0),0),s=e[n].min;if(a{this.state="started";let n=await this._mutex.acquire();try{await this._muxer.start();let a=this._tracks.map(s=>s.source._start());await Promise.all(a)}finally{n()}})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return V._warn("Output has already been canceled."),this._cancelPromise;if(this.state==="finalizing"||this.state==="finalized"){this.state==="finalized"&&V._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(n=>n.source._flushOrWaitForOngoingClose(!0));await Promise.all(r),await Promise.all([...this._unfinalizedTargets].map(n=>n._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?(V._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(n=>n.source._flushOrWaitForOngoingClose(!1));if(await Promise.all(r),await this._muxer.finalize(),this._rootWriterPromise){let n=await this._rootWriterPromise;n.finalized||(await n.flush(),await n.finalize())}this._onFinalize&&await this._onFinalize(),this.state="finalized"}finally{e()}})()}};var Bo=i=>{if(!i||typeof i!="object")throw new TypeError("options.video, when provided, must be an object.");if(i?.discard!==void 0&&typeof i.discard!="boolean")throw new TypeError("options.video.discard, when provided, must be a boolean.");if(i?.forceTranscode!==void 0&&typeof i.forceTranscode!="boolean")throw new TypeError("options.video.forceTranscode, when provided, must be a boolean.");if(i?.codec!==void 0&&!ne.includes(i.codec))throw new TypeError(`options.video.codec, when provided, must be one of: ${ne.join(", ")}.`);if(i?.bitrate!==void 0&&!(i.bitrate instanceof Ae)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("options.video.bitrate, when provided, must be a positive integer or a quality.");if(i?.width!==void 0&&(!Number.isInteger(i.width)||i.width<=0))throw new TypeError("options.video.width, when provided, must be a positive integer.");if(i?.height!==void 0&&(!Number.isInteger(i.height)||i.height<=0))throw new TypeError("options.video.height, when provided, must be a positive integer.");if(i?.fit!==void 0&&!["fill","contain","cover"].includes(i.fit))throw new TypeError("options.video.fit, when provided, must be one of 'fill', 'contain', or 'cover'.");if(i?.width!==void 0&&i.height!==void 0&&i.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(i?.rotate!==void 0&&![0,90,180,270].includes(i.rotate))throw new TypeError("options.video.rotate, when provided, must be 0, 90, 180 or 270.");if(i?.allowRotationMetadata!==void 0&&typeof i.allowRotationMetadata!="boolean")throw new TypeError("options.video.allowRotationMetadata, when provided, must be a boolean.");if(i?.crop!==void 0&&Er(i.crop,"options.video."),i?.frameRate!==void 0&&(!Number.isFinite(i.frameRate)||i.frameRate<=0))throw new TypeError("options.video.frameRate, when provided, must be a finite positive number.");if(i?.alpha!==void 0&&!["discard","keep"].includes(i.alpha))throw new TypeError("options.video.alpha, when provided, must be either 'discard' or 'keep'.");if(i?.keyFrameInterval!==void 0&&(!Number.isFinite(i.keyFrameInterval)||i.keyFrameInterval<0))throw new TypeError("options.video.keyFrameInterval, when provided, must be a non-negative number.");if(i?.process!==void 0&&typeof i.process!="function")throw new TypeError("options.video.process, when provided, must be a function.");if(i?.processedWidth!==void 0&&(!Number.isInteger(i.processedWidth)||i.processedWidth<=0))throw new TypeError("options.video.processedWidth, when provided, must be a positive integer.");if(i?.processedHeight!==void 0&&(!Number.isInteger(i.processedHeight)||i.processedHeight<=0))throw new TypeError("options.video.processedHeight, when provided, must be a positive integer.");if(i?.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(i.hardwareAcceleration))throw new TypeError("options.video.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(i?.group!==void 0&&!(i.group instanceof Ge||Array.isArray(i.group)&&i.group.every(t=>t instanceof Ge)))throw new TypeError("options.video.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.")},Oo=i=>{if(!i||typeof i!="object")throw new TypeError("options.audio, when provided, must be an object.");if(i?.discard!==void 0&&typeof i.discard!="boolean")throw new TypeError("options.audio.discard, when provided, must be a boolean.");if(i?.forceTranscode!==void 0&&typeof i.forceTranscode!="boolean")throw new TypeError("options.audio.forceTranscode, when provided, must be a boolean.");if(i?.codec!==void 0&&!oe.includes(i.codec))throw new TypeError(`options.audio.codec, when provided, must be one of: ${oe.join(", ")}.`);if(i?.bitrate!==void 0&&!(i.bitrate instanceof Ae)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("options.audio.bitrate, when provided, must be a positive integer or a quality.");if(i?.numberOfChannels!==void 0&&(!Number.isInteger(i.numberOfChannels)||i.numberOfChannels<=0))throw new TypeError("options.audio.numberOfChannels, when provided, must be a positive integer.");if(i?.sampleRate!==void 0&&(!Number.isInteger(i.sampleRate)||i.sampleRate<=0))throw new TypeError("options.audio.sampleRate, when provided, must be a positive integer.");if(i?.sampleFormat!==void 0&&!["u8","s16","s32","f32"].includes(i.sampleFormat))throw new TypeError("options.audio.sampleFormat, when provided, must be one of: u8, s16, s32, f32.");if(i?.process!==void 0&&typeof i.process!="function")throw new TypeError("options.audio.process, when provided, must be a function.");if(i?.processedNumberOfChannels!==void 0&&(!Number.isInteger(i.processedNumberOfChannels)||i.processedNumberOfChannels<=0))throw new TypeError("options.audio.processedNumberOfChannels, when provided, must be a positive integer.");if(i?.processedSampleRate!==void 0&&(!Number.isInteger(i.processedSampleRate)||i.processedSampleRate<=0))throw new TypeError("options.audio.processedSampleRate, when provided, must be a positive integer.");if(i?.group!==void 0&&!(i.group instanceof Ge||Array.isArray(i.group)&&i.group.every(t=>t instanceof Ge)))throw new TypeError("options.audio.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.")},bu=2,yu=48e3,Do=class i{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 ku;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 Pr))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 n of t.video)Bo(n);else Bo(t.video);if(t.audio!==void 0&&typeof t.audio!="function")if(Array.isArray(t.audio))for(let n of t.audio)Oo(n);else Oo(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"&&fn(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 i(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(),p=await this.input.getPrimaryAudioTrack();e=[f,p].filter(b=>b!==null)}else ee(r),h(!1);let n=this.output.format.getSupportedTrackCounts(),a=1,s=1,o=[],c=[];for(let f of e){let p;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)Bo(k);else Bo(y);p=Array.isArray(y)?y:[y],a++}else p=Array.isArray(this._options.video)?this._options.video:[this._options.video];else p=[{}];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)Oo(k);else Oo(y);p=Array.isArray(y)?y:[y],s++}else p=Array.isArray(this._options.audio)?this._options.audio:[this._options.audio];else p=[{}];else h(!1);let b=p.filter(y=>y.discard);for(let y of b)this.discardedTracks.push({track:f,reason:"discarded_by_user",trackOptions:y});if(p.length===b.length){p.length===0&&this.discardedTracks.push({track:f,reason:"discarded_by_user",trackOptions:{}});continue}let g=p.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=n.total.min&&this._addedCounts.video>=n.video.min&&this._addedCounts.audio>=n.audio.min&&this._addedCounts.subtitle>=n.subtitle.min,this._options.showWarnings??!0){let f=[],p=this.discardedTracks.filter(b=>b.reason!=="discarded_by_user");p.length>0&&f.push("Some tracks had to be discarded from the conversion:",p),this.isValid||(f.length>0&&f.push(` `),f.push(this._getInvalidityExplanation().join(""))),f.length>0&&V._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()),n=[...new Set(r)];n.length===1?t.push(` Tracks were discarded because your environment is not able to encode '${n[0]}'.`):t.push(` Tracks were discarded because your environment is not able to encode any of the following codecs: ${n.map(a=>`'${a}'`).join(", ")}.`),n.includes("mp3")&&t.push(` The @mediabunny/mp3-encoder extension package provides support for encoding MP3.`),n.includes("aac")&&t.push(` The @mediabunny/aac-encoder extension package provides support for encoding AAC.`),(n.includes("ac3")||n.includes("eac3"))&&t.push(` The @mediabunny/ac3 extension package provides support for encoding and decoding AC-3/E-AC-3.`),n.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.");this._executed=!0;for(let t of this._outputTrackIds)this._synchronizer.declareTrack(t);if(this.onProgress){let e=[...new Set(this.utilizedTracks)].map(async n=>await n.isLive()?1/0:await n.getDurationFromMetadata()??await n.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 n of this._outputTrackIds)this._maxTimestamps.set(n,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 pa;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){V._warn("Conversion already canceled.");return}this._canceled=!0,await this.output.cancel()}}async _processVideoTrack(t,e,r){let n=await t.getCodec();if(!n){this.discardedTracks.push({track:t,reason:"unknown_source_codec",trackOptions:e});return}let a,s=await t.getRotation(),o=tt(s+(e.rotate??0)),c=o,u=this.output.format.supportsVideoRotationMetadata&&(e.allowRotationMetadata??!0),l=await t.getSquarePixelWidth(),m=await t.getSquarePixelHeight(),[d,f]=o%180===0?[l,m]:[m,l],p=e.crop;p&&(p=Gi(p,d,f));let[b,g]=p?[p.width,p.height]:[d,f],y=b,k=g,T=y/k;e.width!==void 0&&e.height===void 0?(y=Xr(e.width),k=Xr(Math.round(y/T))):e.width===void 0&&e.height!==void 0?(k=Xr(e.height),y=Xr(Math.round(k*T))):e.width!==void 0&&e.height!==void 0&&(y=Xr(e.width),k=Xr(e.height));let w=await t.getFirstTimestamp(),S=this.output.format.getSupportedVideoCodecs(),P=!!e.forceTranscode||wH===e.codec));let E=e.bitrate??$n,_=await Zs(S,{width:e.process&&e.processedWidth?e.processedWidth:y,height:e.process&&e.processedHeight?e.processedHeight:k,bitrate:E});if(!_){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec",trackOptions:e});return}let v={codec:_,bitrate:E,keyFrameInterval:e.keyFrameInterval,sizeChangeBehavior:e.fit??"passThrough",alpha:C,hardwareAcceleration:e.hardwareAcceleration,transform:{}};h(v.transform);let D=y!==b||k!==g||o!==0&&(!u||e.process!==void 0)||!!p||l!==await t.getCodedWidth()||m!==await t.getCodedHeight();if(!D){let H=new sr({format:new gi,target:new Dr}),ie=new fi(v);H.addVideoTrack(ie),await H.start();let yi=await new vr(t).getSample(w);if(yi)try{await ie.add(yi),yi.close(),await H.finalize()}catch(ym){V._warn("An error occurred when probing encoder support. Falling back to rerender path.",ym),H.cancel(),D=!0,v.transform.force=!0}else await H.cancel()}e.frameRate&&(v.transform.frameRate=e.frameRate),e.process&&(v.transform.process=e.process),D&&(c=0,v.transform.width=y,v.transform.height=k,v.transform.fit=e.fit??"fill",v.transform.rotate=tt(o-s),v.transform.crop=p,v.transform.alpha=C);let O=null;v.onEncodedSample=H=>{O=H.timestamp};let z=new fi(v);a=z,this._trackPromises.push((async()=>{await this._started;let H=new vr(t);for await(let ie of H.samples(this._startTimestamp,this._endTimestamp)){if(this._canceled){ie.close();return}let Pe=Math.max(ie.timestamp-this._startTimestamp,0);ie.setTimestamp(Pe),this._reportProgress(r,ie.timestamp+ie.duration),await z.add(ie),O!==null&&this._synchronizer.shouldWait(r,O)&&await this._synchronizer.wait(O),ie.close()}z.close(),this._synchronizer.closeTrack(r)})())}else{let I=new Vr(n);a=I,this._trackPromises.push((async()=>{await this._started;let E=new yt(t),v={decoderConfig:await t.getDecoderConfig()??void 0};for await(let D of E.packets(void 0,void 0,{verifyKeyPackets:!0})){if(this._canceled)return;if(D.timestamp>=this._endTimestamp)break;let O=D.clone({timestamp:D.timestamp-this._startTimestamp,sideData:C==="discard"?{}:D.sideData});h(O.timestamp>=0),this._reportProgress(r,O.timestamp+O.duration),await I.add(O,v),this._synchronizer.shouldWait(r,O.timestamp)&&await this._synchronizer.wait(O.timestamp)}I.close(),this._synchronizer.closeTrack(r)})())}let x=null;e.group||(x=new Ge);let A=await t.getLanguageCode();this.output.addVideoTrack(a,{frameRate:e.frameRate,languageCode:Nt(A)?A:void 0,name:await t.getName()??void 0,disposition:await t.getDisposition(),rotation:c,group:x??e.group}),this._addedCounts.video++,this._totalTrackCount++,this.utilizedTracks.push(t),this._outputTrackIds.push(r),this._outputOwnTrackGroups.push(x)}async _processAudioTrack(t,e,r){let n=await t.getCodec();if(!n){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=cthis._startTimestamp&&!this.output.format.supportsTimestampedMediaData,f=this.output.format.getSupportedAudioCodecs();if(!e.forceTranscode&&!e.bitrate&&u===s&&l===o&&!m&&!d&&f.includes(n)&&(!e.codec||e.codec===n)&&!e.process&&e.sampleFormat===void 0){let g=new Ur(n);a=g,this._trackPromises.push((async()=>{await this._started;let y=new yt(t),T={decoderConfig:await t.getDecoderConfig()??void 0};for await(let w of y.packets()){if(this._canceled)return;if(w.timestamp>=this._endTimestamp)break;let S=w.clone({timestamp:w.timestamp-this._startTimestamp});h(S.timestamp>=0),this._reportProgress(r,S.timestamp+S.duration),await g.add(S,T),this._synchronizer.shouldWait(r,S.timestamp)&&await this._synchronizer.wait(S.timestamp)}g.close(),this._synchronizer.closeTrack(r)})())}else{if(!await t.canDecode()){this.discardedTracks.push({track:t,reason:"undecodable_source_codec",trackOptions:e});return}let y=null;e.codec&&(f=f.filter(C=>C===e.codec));let k=e.bitrate??$n,T=await Qi(f,{numberOfChannels:e.process&&e.processedNumberOfChannels?e.processedNumberOfChannels:u,sampleRate:e.process&&e.processedSampleRate?e.processedSampleRate:l,bitrate:k});if(!T.some(C=>ot.includes(C))&&f.some(C=>ot.includes(C))&&(u!==bu||l!==yu)){let x=(await Qi(f,{numberOfChannels:bu,sampleRate:yu,bitrate:k})).find(A=>ot.includes(A));x&&(y=x,u=bu,l=yu)}else y=T[0]??null;if(y===null){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec",trackOptions:e});return}let w={codec:y,bitrate:k,transform:{sampleFormat:e.sampleFormat,process:e.process}};h(w.transform),u!==s&&(w.transform.numberOfChannels=u),l!==o&&(w.transform.sampleRate=l);let S=null;w.onEncodedSample=C=>{S=C.timestamp};let P=new an(w);a=P,this._trackPromises.push((async()=>{await this._started;let C=new si(t);for await(let x of C.samples(this._startTimestamp,this._endTimestamp)){if(this._canceled){x.close();return}if(d){let E=c-this._startTimestamp,_=Math.round(E*o),v=It(x.format),D=new Uint8Array(v*_*s);(x.format==="u8"||x.format==="u8-planar")&&D.fill(2**7);let O=new ke({data:D,format:x.format,numberOfChannels:s,sampleRate:o,timestamp:0});await this._registerAudioSample(O,P,r,()=>S),d=!1}let A=0,I=x.numberOfFrames;if(x.timestampthis._endTimestamp&&(I=Math.round((this._endTimestamp-x.timestamp)*x.sampleRate)),A>0||IS)}P.close(),this._synchronizer.closeTrack(r)})())}let p=null;e.group||(p=new Ge);let b=await t.getLanguageCode();this.output.addAudioTrack(a,{languageCode:Nt(b)?b:void 0,name:await t.getName()??void 0,disposition:await t.getDisposition(),group:p??e.group}),this._addedCounts.audio++,this._totalTrackCount++,this.utilizedTracks.push(t),this._outputTrackIds.push(r),this._outputOwnTrackGroups.push(p)}async _registerAudioSample(t,e,r,n){this._reportProgress(r,t.timestamp+t.duration),await e.add(t),t.close();let a=n();a!==null&&this._synchronizer.shouldWait(r,a)&&await this._synchronizer.wait(a)}_reportProgress(t,e){if(!this._computeProgress)return;h(this._totalDuration!==null),this._maxTimestamps.set(t,Math.max(e,this._maxTimestamps.get(t)));let r=Math.min(...this._maxTimestamps.values()),n=ce(r/this._totalDuration,0,1);n!==this._lastProgress&&(this._lastProgress=n,this.onProgress?.(n,r))}},pa=class extends Error{constructor(t="Conversion has been canceled."){super(t),this.name="ConversionCanceledError"}},gm=1,ku=class{constructor(){this.maxTimestamps=new Map;this.resolvers=[]}declareTrack(t){this.maxTimestamps.set(t,0)}shouldWait(t,e){let r=this.maxTimestamps.get(t);h(r!==void 0),this.maxTimestamps.set(t,Math.max(e,r));let n=this.computeMinAndMaybeResolve();return e-n>gm}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()}computeMinAndMaybeResolve(){let t=1/0;for(let[,e]of this.maxTimestamps)t=Math.min(t,e);for(let e=0;e