@vidtreo/recorder-wc 1.6.3 → 1.6.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/vidtreo-recorder.js +29 -29
- package/package.json +2 -2
package/dist/vidtreo-recorder.js
CHANGED
|
@@ -6,7 +6,7 @@ var VidtreoRecorder=(function(e){Object.defineProperty(e,Symbol.toStringTag,{val
|
|
|
6
6
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
7
7
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
8
8
|
*/
|
|
9
|
-
function D(e){if(!e)throw Error(`Assertion failed.`)}var Bn,O,Vn,k,Hn,Un,A,j,Wn,M,Gn,Kn,qn,Jn,Yn,Xn,Zn,Qn,$n,er,tr,nr,rr,ir,ar,or,N,sr,P,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar,jr,Mr,Nr,Pr,Fr,Ir,Lr,Rr,zr,Br,Vr,Hr,Ur,Wr,Gr,Kr,qr,Jr,Yr,Xr,Zr,Qr,$r,ei,ti,ni,ri,ii,ai,oi,si,ci,li,ui,di,fi,pi,mi,hi,gi,_i,vi,yi,F=n((()=>{Bn=e=>{let t=(e%360+360)%360;if(t===0||t===90||t===180||t===270)return t;throw Error(`Invalid rotation ${e}.`)},O=e=>e&&e[e.length-1],Vn=e=>e>=0&&e<2**32,k=e=>{let t=0;for(;e.readBits(1)===0&&t<32;)t++;if(t>=32)throw Error(`Invalid exponential-Golomb code.`);return(1<<t)-1+e.readBits(t)},Hn=e=>{let t=k(e);return t&1?t+1>>1:-(t>>1)},Un=(e,t,n,r)=>{for(let i=t;i<n;i++){let t=Math.floor(i/8),a=e[t],o=7-(i&7);a&=~(1<<o),a|=(r&1<<n-i-1)>>n-i-1<<o,e[t]=a}},A=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),j=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Wn=new TextDecoder,M=new TextEncoder,Gn=e=>{for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0},Kn=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),qn={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Jn=Kn(qn),Yn={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},Xn=Kn(Yn),Zn={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Qn=Kn(Zn),$n=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&e.fullRange!==void 0,er=e=>e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e),tr=class{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e,t=new Promise(t=>{let n=!1;e=()=>{n||=(t(),this.pending--,!0)}}),n=this.currentPromise;return this.currentPromise=t,this.pending++,await n,e}},nr=/^[0-9a-fA-F]+$/,rr=e=>[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``),ir=e=>{D(e.length%2==0);let t=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)t[n/2]=parseInt(e.slice(n,n+2),16);return t},ar=e=>(e=e>>1&1431655765|(e&1431655765)<<1,e=e>>2&858993459|(e&858993459)<<2,e=e>>4&252645135|(e&252645135)<<4,e=e>>8&16711935|(e&16711935)<<8,e=e>>16&65535|(e&65535)<<16,e>>>0),or=(e,t,n)=>{let r=0,i=e.length-1,a=-1;for(;r<=i;){let o=r+i>>1,s=n(e[o]);s===t?(a=o,i=o-1):s<t?r=o+1:i=o-1}return a},N=(e,t,n)=>{let r=0,i=e.length-1,a=-1;for(;r<=i;){let o=r+(i-r+1)/2|0;n(e[o])<=t?(a=o,r=o+1):i=o-1}return a},sr=(e,t,n)=>{let r=N(e,n(t),n);e.splice(r+1,0,t)},P=()=>{let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}},cr=(e,t)=>{let n=e.indexOf(t);n!==-1&&e.splice(n,1)},lr=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]},ur=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(t(e[n]))return n;return-1},dr=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()},fr=e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw TypeError(`Argument must be an iterable or async iterable.`)},pr=e=>{throw Error(`Unexpected value: ${e}`)},mr=(e,t,n)=>{let r=e.getUint8(t),i=e.getUint8(t+1),a=e.getUint8(t+2);return n?r|i<<8|a<<16:r<<16|i<<8|a},hr=(e,t,n)=>mr(e,t,n)<<8>>8,gr=(e,t,n,r)=>{n>>>=0,n&=16777215,r?(e.setUint8(t,n&255),e.setUint8(t+1,n>>>8&255),e.setUint8(t+2,n>>>16&255)):(e.setUint8(t,n>>>16&255),e.setUint8(t+1,n>>>8&255),e.setUint8(t+2,n&255))},_r=(e,t,n,r)=>{n=br(n,-8388608,8388607),n<0&&(n=n+16777216&16777215),gr(e,t,n,r)},vr=(e,t,n,r)=>{r?(e.setUint32(t+0,n,!0),e.setInt32(t+4,Math.floor(n/2**32),!0)):(e.setInt32(t+0,Math.floor(n/2**32),!0),e.setUint32(t+4,n,!0))},yr=(e,t)=>({async next(){let n=await e.next();return n.done?{value:void 0,done:!0}:{value:t(n.value),done:!1}},return(){return e.return()},throw(t){return e.throw(t)},[Symbol.asyncIterator](){return this}}),br=(e,t,n)=>Math.max(t,Math.min(n,e)),xr=`und`,Sr=e=>{let t=Math.round(e);return Math.abs(e/t-1)<10*2**-52?t:e},Cr=(e,t)=>Math.round(e/t)*t,wr=(e,t)=>Math.round(e*t)/t,Tr=(e,t)=>Math.floor(e/t)*t,Er=(e,t)=>Math.floor(e*t)/t,Dr=e=>{let t=0;for(;e;)t++,e>>=1;return t},Or=/^[a-z]{3}$/,kr=e=>Or.test(e),Ar=1e6*(1+2**-52),jr=(e,t)=>{let n={...e,...t};if(e.headers||t.headers){let r=e.headers?Mr(e.headers):{},i=t.headers?Mr(t.headers):{},a={...r};Object.entries(i).forEach(([e,t])=>{let n=Object.keys(a).find(t=>t.toLowerCase()===e.toLowerCase());n&&delete a[n],a[e]=t}),n.headers=a}return n},Mr=e=>{if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}if(Array.isArray(e)){let t={};return e.forEach(([e,n])=>{t[e]=n}),t}return e},Nr=async(e,t,n,r,i)=>{let a=0;for(;;)try{return await e(t,n)}catch(e){if(i())throw e;a++;let n=r(a,e,t);if(n===null)throw e;if(console.error(`Retrying failed fetch. Error:`,e),!Number.isFinite(n)||n<0)throw TypeError(`Retry delay must be a non-negative finite number.`);if(n>0&&await mi(1e3*n),i())throw e}},Pr=(e,t)=>{let n=e<0?-1:1;e=Math.abs(e);let r=0,i=1,a=1,o=0,s=e;for(;;){let e=Math.floor(s),c=e*a+r,l=e*o+i;if(l>t)return{num:n*a,den:o};if(r=a,i=o,a=c,o=l,s=1/(s-e),!isFinite(s))break}return{num:n*a,den:o}},Fr=class{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}},Ir=null,Lr=()=>Ir===null?Ir=!!(typeof navigator<`u`&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent))):Ir,Rr=null,zr=()=>Rr===null?Rr=typeof navigator<`u`&&navigator.userAgent?.includes(`Firefox`):Rr,Br=null,Vr=()=>Br===null?Br=!!(typeof navigator<`u`&&(navigator.vendor?.includes(`Google Inc`)||/Chrome/.test(navigator.userAgent))):Br,Hr=null,Ur=()=>{if(Hr!==null)return Hr;if(typeof navigator>`u`)return null;let e=/\bChrome\/(\d+)/.exec(navigator.userAgent);return e?Hr=Number(e[1]):null},Wr=(e,t)=>e===-1?t:e,Gr=(e,t,n,r)=>e<=r&&n<=t,Kr=function*(e){for(let t in e){let n=e[t];n!==void 0&&(yield{key:t,value:n})}},qr=e=>{switch(e.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}},Jr=e=>{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n},Yr=e=>{let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)},Xr=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0},Zr=()=>{Symbol.dispose??=Symbol(`Symbol.dispose`)},Qr=e=>typeof e==`number`&&!Number.isNaN(e),$r=(e,t)=>{if(t.includes(`://`))return t;if(e.includes(`://`)){let t=e.indexOf(`?`);t!==-1&&(e=e.slice(0,t))}let n;if(t.startsWith(`/`)){let r=e.indexOf(`://`);if(r===-1)n=t;else{let i=e.indexOf(`/`,r+3);n=i===-1?e+t:e.slice(0,i)+t}}else{let r=e.lastIndexOf(`/`);n=r===-1?t:e.slice(0,r+1)+t}let r=``,i=n.indexOf(`://`);if(i!==-1){let e=n.indexOf(`/`,i+3);e!==-1&&(r=n.slice(0,e),n=n.slice(e))}let a=n.split(`/`),o=[];for(let e of a)e===`..`?o.pop():e!==`.`&&o.push(e);return r+o.join(`/`)},ei=(e,t)=>{let n=0;for(let r=0;r<e.length;r++)t(e[r])&&n++;return n},ti=(e,t)=>{let n=-1,r=1/0;for(let i=0;i<e.length;i++){let a=t(e[i]);a<r&&(r=a,n=i)}return n},ni=(e,t)=>{let n=-1,r=-1/0;for(let i=0;i<e.length;i++){let a=t(e[i]);a>r&&(r=a,n=i)}return n},ri=e=>{D(Number.isInteger(e.num)),D(Number.isInteger(e.den)),D(e.den!==0);let t=Math.abs(e.num),n=Math.abs(e.den);for(;n!==0;){let e=t%n;t=n,n=e}let r=t||1;return{num:e.num/r,den:e.den/r}},ii=(e,t)=>{if(typeof e!=`object`||!e)throw TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw TypeError(`${t}.height must be a non-negative integer.`)},oi=1,si=new Map,ci=new Map,li=()=>typeof window>`u`,ui=()=>{let e=new Map,t=new Map;self.onmessage=n=>{let r=n.data;switch(r.type){case`set-timeout`:{let t=setTimeout(()=>{e.delete(r.timerId),self.postMessage({type:`fire`,timerId:r.timerId})},r.delay);e.set(r.timerId,t)}break;case`set-interval`:{let e=setInterval(()=>{self.postMessage({type:`fire`,timerId:r.timerId})},r.delay);t.set(r.timerId,e)}break;case`clear-timeout`:{let t=e.get(r.timerId);t!==void 0&&(clearTimeout(t),e.delete(r.timerId))}break;case`clear-interval`:{let e=t.get(r.timerId);e!==void 0&&(clearInterval(e),t.delete(r.timerId))}break}}},di=()=>{if(ai)return ai;let e=`(${ui.toString()})();`,t=URL.createObjectURL(new Blob([e],{type:`text/javascript`}));return ai=new Worker(t),URL.revokeObjectURL(t),ai.onmessage=e=>{let t=e.data,n=si.get(t.timerId);if(n){si.delete(t.timerId),n();return}let r=ci.get(t.timerId);r&&r()},ai},fi=(e,t)=>{if(li())return{id:setInterval(e,t)};let n=oi++;return ci.set(n,()=>{e()}),di().postMessage({type:`set-interval`,timerId:n,delay:t}),{id:n}},pi=e=>{if(li()){clearInterval(e.id);return}D(typeof e.id==`number`),ci.delete(e.id),di().postMessage({type:`clear-interval`,timerId:e.id})},mi=e=>new Promise(t=>setTimeout(t,e)),hi=e=>Array.isArray(e)?e:[e],gi=class{constructor(){this._listeners=new Map}on(e,t,n){this._listeners.has(e)||this._listeners.set(e,new Set);let r={fn:t,once:n?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){let[t,n]=e,r=this._listeners.get(t);if(r)for(let e of r){try{e.fn(n)}catch(e){console.error(e)}e.once&&r.delete(e)}}},_i=e=>Math.ceil(e/2)*2,vi=class{constructor(e){this._queue=[],this._errored=!1,this.parallelism=e}get errored(){return this._errored}get inFlightCount(){return this._queue.length}async run(e){for(this._errored&&await Promise.race(this._queue);this._queue.length>=this.parallelism;)await Promise.race(this._queue);let t=e();this._queue.push(t),t.then(()=>cr(this._queue,t)).catch(()=>this._errored=!0)}async flush(){await Promise.all(this._queue)}},yi=e=>typeof e==`object`&&!!e&&Object.getPrototypeOf(e)===Object.prototype&&Object.values(e).every(e=>typeof e==`string`)})),bi,xi,Si,Ci,wi,Ti,Ei=n((()=>{F(),bi=class{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(typeof t!=`string`)throw TypeError(`mimeType must be a string.`)}},xi=class{constructor(e,t,n,r){if(this.data=e,this.mimeType=t,this.name=n,this.description=r,!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(t!==void 0&&typeof t!=`string`)throw TypeError(`mimeType, when provided, must be a string.`);if(n!==void 0&&typeof n!=`string`)throw TypeError(`name, when provided, must be a string.`);if(r!==void 0&&typeof r!=`string`)throw TypeError(`description, when provided, must be a string.`)}},Si=e=>{if(!e||typeof e!=`object`)throw TypeError(`tags must be an object.`);if(e.title!==void 0&&typeof e.title!=`string`)throw TypeError(`tags.title, when provided, must be a string.`);if(e.description!==void 0&&typeof e.description!=`string`)throw TypeError(`tags.description, when provided, must be a string.`);if(e.artist!==void 0&&typeof e.artist!=`string`)throw TypeError(`tags.artist, when provided, must be a string.`);if(e.album!==void 0&&typeof e.album!=`string`)throw TypeError(`tags.album, when provided, must be a string.`);if(e.albumArtist!==void 0&&typeof e.albumArtist!=`string`)throw TypeError(`tags.albumArtist, when provided, must be a string.`);if(e.trackNumber!==void 0&&(!Number.isInteger(e.trackNumber)||e.trackNumber<=0))throw TypeError(`tags.trackNumber, when provided, must be a positive integer.`);if(e.tracksTotal!==void 0&&(!Number.isInteger(e.tracksTotal)||e.tracksTotal<=0))throw TypeError(`tags.tracksTotal, when provided, must be a positive integer.`);if(e.discNumber!==void 0&&(!Number.isInteger(e.discNumber)||e.discNumber<=0))throw TypeError(`tags.discNumber, when provided, must be a positive integer.`);if(e.discsTotal!==void 0&&(!Number.isInteger(e.discsTotal)||e.discsTotal<=0))throw TypeError(`tags.discsTotal, when provided, must be a positive integer.`);if(e.genre!==void 0&&typeof e.genre!=`string`)throw TypeError(`tags.genre, when provided, must be a string.`);if(e.date!==void 0&&(!(e.date instanceof Date)||Number.isNaN(e.date.getTime())))throw TypeError(`tags.date, when provided, must be a valid Date.`);if(e.lyrics!==void 0&&typeof e.lyrics!=`string`)throw TypeError(`tags.lyrics, when provided, must be a string.`);if(e.images!==void 0){if(!Array.isArray(e.images))throw TypeError(`tags.images, when provided, must be an array.`);for(let t of e.images){if(!t||typeof t!=`object`)throw TypeError(`Each image in tags.images must be an object.`);if(!(t.data instanceof Uint8Array))throw TypeError(`Each image.data must be a Uint8Array.`);if(typeof t.mimeType!=`string`)throw TypeError(`Each image.mimeType must be a string.`);if(![`coverFront`,`coverBack`,`unknown`].includes(t.kind))throw TypeError(`Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.`)}}if(e.comment!==void 0&&typeof e.comment!=`string`)throw TypeError(`tags.comment, when provided, must be a string.`);if(e.raw!==void 0){if(!e.raw||typeof e.raw!=`object`)throw TypeError(`tags.raw, when provided, must be an object.`);for(let t of Object.values(e.raw))if(t!==null&&typeof t!=`string`&&!(t instanceof Uint8Array)&&!(t instanceof bi)&&!(t instanceof xi)&&!yi(t))throw TypeError(`Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, Record<string, string>, or null.`)}},Ci=e=>e.title===void 0&&e.description===void 0&&e.artist===void 0&&e.album===void 0&&e.albumArtist===void 0&&e.trackNumber===void 0&&e.tracksTotal===void 0&&e.discNumber===void 0&&e.discsTotal===void 0&&e.genre===void 0&&e.date===void 0&&e.lyrics===void 0&&(!e.images||e.images.length===0)&&e.comment===void 0&&(e.raw===void 0||Object.keys(e.raw).length===0),wi={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1},Ti=e=>{if(!e||typeof e!=`object`)throw TypeError(`disposition must be an object.`);if(e.default!==void 0&&typeof e.default!=`boolean`)throw TypeError(`disposition.default must be a boolean.`);if(e.primary!==void 0&&typeof e.primary!=`boolean`)throw TypeError(`disposition.primary must be a boolean.`);if(e.forced!==void 0&&typeof e.forced!=`boolean`)throw TypeError(`disposition.forced must be a boolean.`);if(e.original!==void 0&&typeof e.original!=`boolean`)throw TypeError(`disposition.original must be a boolean.`);if(e.commentary!==void 0&&typeof e.commentary!=`boolean`)throw TypeError(`disposition.commentary must be a boolean.`);if(e.hearingImpaired!==void 0&&typeof e.hearingImpaired!=`boolean`)throw TypeError(`disposition.hearingImpaired must be a boolean.`);if(e.visuallyImpaired!==void 0&&typeof e.visuallyImpaired!=`boolean`)throw TypeError(`disposition.visuallyImpaired must be a boolean.`)}})),I,Di=n((()=>{I=class e{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),t=this.bytes[e]??0,n=7-(this.pos&7),r=(t&1<<n)>>n;return this.pos++,r}readBits(e){if(e===1)return this.readBit();let t=0;for(let n=0;n<e;n++)t<<=1,t|=this.readBit();return t}writeBits(e,t){let n=this.pos+e;for(let e=this.pos;e<n;e++){let r=Math.floor(e/8),i=this.bytes[r],a=7-(e&7);i&=~(1<<a),i|=(t&1<<n-e-1)>>n-e-1<<a,this.bytes[r]=i}this.pos=n}readAlignedByte(){if(this.pos%8!=0)throw Error(`Bitstream is not byte-aligned.`);let e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let t=new e(this.bytes);return t.pos=this.pos,t}}})),Oi,ki,Ai,ji,Mi,Ni,Pi=n((()=>{Di(),Oi=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ki=[-1,1,2,3,4,5,6,8],Ai=e=>{if(!e||e.byteLength<2)throw TypeError(`AAC description must be at least 2 bytes long.`);let t=new I(e),n=t.readBits(5);n===31&&(n=32+t.readBits(6));let r=t.readBits(4),i=null;r===15?i=t.readBits(24):r<Oi.length&&(i=Oi[r]);let a=t.readBits(4),o=null;return a>=1&&a<=7&&(o=ki[a]),{objectType:n,frequencyIndex:r,sampleRate:i,channelConfiguration:a,numberOfChannels:o}},ji=e=>{let t=Oi.indexOf(e.sampleRate),n=null;t===-1&&(t=15,n=e.sampleRate);let r=ki.indexOf(e.numberOfChannels);if(r===-1)throw TypeError(`Unsupported number of channels: ${e.numberOfChannels}`);let i=13;e.objectType>=32&&(i+=6),t===15&&(i+=24);let a=Math.ceil(i/8),o=new Uint8Array(a),s=new I(o);return e.objectType<32?s.writeBits(5,e.objectType):(s.writeBits(5,31),s.writeBits(6,e.objectType-32)),s.writeBits(4,t),t===15&&s.writeBits(24,n),s.writeBits(4,r),o},Mi=e=>{let t=new Uint8Array(7),n=new I(t),{objectType:r,frequencyIndex:i,channelConfiguration:a}=e,o=r-1;return n.writeBits(12,4095),n.writeBits(1,0),n.writeBits(2,0),n.writeBits(1,1),n.writeBits(2,o),n.writeBits(4,i),n.writeBits(1,0),n.writeBits(3,a),n.writeBits(1,0),n.writeBits(1,0),n.writeBits(1,0),n.writeBits(1,0),n.skipBits(13),n.writeBits(11,2047),n.writeBits(2,0),{header:t,bitstream:n}},Ni=(e,t)=>{e.pos=30,e.writeBits(13,t)}})),Fi,Ii,Li,Ri,zi,Bi,Vi,Hi,Ui,Wi,Gi,Ki,qi,Ji,Yi,Xi,Zi,Qi,$i,ea,ta,na,ra,ia,aa,oa,sa,ca,la,ua,da,fa,pa,ma,ha=n((()=>{Pi(),F(),Fi=[`avc`,`hevc`,`vp9`,`av1`,`vp8`],Ii=[`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`],Li=[`aac`,`opus`,`mp3`,`vorbis`,`flac`,`ac3`,`eac3`],Ri=[...Li,...Ii],zi=[`webvtt`],Bi=[{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}],Vi=[{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}],Hi=[{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}],Ui=[{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}],Wi=`.01.01.01.01.00`,Gi=`.0.110.01.01.01.0`,Ki=(e,t,n,r)=>{if(e===`avc`){let e=Math.ceil(t/16)*Math.ceil(n/16),i=Bi.find(t=>e<=t.maxMacroblocks&&r<=t.maxBitrate)??O(Bi),a=i?i.level:0;return`avc1.${`64`.padStart(2,`0`)}00${a.toString(16).padStart(2,`0`)}`}else if(e===`hevc`){let e=t*n,i=Vi.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Vi);return`hev1.1.6.${i.tier}${i.level}.B0`}else if(e===`vp8`)return`vp8`;else if(e===`vp9`){let e=t*n;return`vp09.00.${(Hi.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Hi)).level.toString().padStart(2,`0`)}.08`}else if(e===`av1`){let e=t*n,i=Ui.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Ui);return`av01.0.${i.level.toString().padStart(2,`0`)}${i.tier}.08`}throw TypeError(`Unhandled codec '${e}'.`)},qi=e=>{let t=e.split(`.`);return[1,1,Number(t[1]),2,1,Number(t[2]),3,1,Number(t[3]),4,1,t[4]?Number(t[4]):1]},Ji=e=>{let t=e.split(`.`),n=Number(t[1]),r=t[2],i=Number(r.slice(0,-1)),a=(n<<5)+i,o=r.slice(-1)===`H`?1:0,s=Number(t[3])===8?0:1,c=t[4]?Number(t[4]):0,l=t[5]?Number(t[5][0]):1,u=t[5]?Number(t[5][1]):1,d=t[5]?Number(t[5][2]):0;return[129,a,(o<<7)+(s<<6)+0+(c<<4)+(l<<3)+(u<<2)+d,0]},Yi=e=>{let{codec:t,codecDescription:n,colorSpace:r,avcCodecInfo:i,hevcCodecInfo:a,vp9CodecInfo:o,av1CodecInfo:s}=e;if(t===`avc`){if(D(e.avcType!==null),i){let t=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${e.avcType}.${rr(t)}`}if(!n||n.byteLength<4)throw TypeError(`AVC decoder description is not provided or is not at least 4 bytes long.`);return`avc${e.avcType}.${rr(n.subarray(1,4))}`}else if(t===`hevc`){let e,t,r,i,o,s;if(a)e=a.generalProfileSpace,t=a.generalProfileIdc,r=ar(a.generalProfileCompatibilityFlags),i=a.generalTierFlag,o=a.generalLevelIdc,s=[...a.generalConstraintIndicatorFlags];else{if(!n||n.byteLength<23)throw TypeError(`HEVC decoder description is not provided or is not at least 23 bytes long.`);let a=j(n),c=a.getUint8(1);e=c>>6&3,t=c&31,r=ar(a.getUint32(2)),i=c>>5&1,o=a.getUint8(12),s=[];for(let e=0;e<6;e++)s.push(a.getUint8(6+e))}let c=`hev1.`;for(c+=[``,`A`,`B`,`C`][e]+t,c+=`.`,c+=r.toString(16).toUpperCase(),c+=`.`,c+=i===0?`L`:`H`,c+=o;s.length>0&&s[s.length-1]===0;)s.pop();return s.length>0&&(c+=`.`,c+=s.map(e=>e.toString(16).toUpperCase()).join(`.`)),c}else if(t===`vp8`)return`vp8`;else if(t===`vp9`){if(!o){let t=e.width*e.height,n=O(Hi).level;for(let e of Hi)if(t<=e.maxPictureSize){n=e.level;break}return`vp09.00.${n.toString().padStart(2,`0`)}.08`}let t=o.profile.toString().padStart(2,`0`),n=o.level.toString().padStart(2,`0`),r=o.bitDepth.toString().padStart(2,`0`),i=o.chromaSubsampling.toString().padStart(2,`0`),a=o.colourPrimaries.toString().padStart(2,`0`),s=o.transferCharacteristics.toString().padStart(2,`0`),c=o.matrixCoefficients.toString().padStart(2,`0`),l=o.videoFullRangeFlag.toString().padStart(2,`0`),u=`vp09.${t}.${n}.${r}.${i}`;return u+=`.${a}.${s}.${c}.${l}`,u.endsWith(Wi)&&(u=u.slice(0,-15)),u}else if(t===`av1`){if(!s){let t=e.width*e.height,n=O(Hi).level;for(let e of Hi)if(t<=e.maxPictureSize){n=e.level;break}return`av01.0.${n.toString().padStart(2,`0`)}M.08`}let t=s.profile,n=s.level.toString().padStart(2,`0`),i=s.tier?`H`:`M`,a=s.bitDepth.toString().padStart(2,`0`),o=s.monochrome?`1`:`0`,c=100*s.chromaSubsamplingX+10*s.chromaSubsamplingY+1*(s.chromaSubsamplingX&&s.chromaSubsamplingY?s.chromaSamplePosition:0),l=r?.primaries?qn[r.primaries]:1,u=r?.transfer?Yn[r.transfer]:1,d=r?.matrix?Zn[r.matrix]:1,f=r?.fullRange?1:0,p=`av01.${t}.${n}${i}.${a}`;return p+=`.${o}.${c.toString().padStart(3,`0`)}`,p+=`.${l.toString().padStart(2,`0`)}`,p+=`.${u.toString().padStart(2,`0`)}`,p+=`.${d.toString().padStart(2,`0`)}`,p+=`.${f}`,p.endsWith(Gi)&&(p=p.slice(0,-17)),p}throw TypeError(`Unhandled codec '${t}'.`)},Xi=(e,t,n)=>{if(e===`aac`)return t>=2&&n<=24e3?`mp4a.40.29`:n<=24e3?`mp4a.40.5`:`mp4a.40.2`;if(e===`mp3`)return`mp3`;if(e===`opus`)return`opus`;if(e===`vorbis`)return`vorbis`;if(e===`flac`)return`flac`;if(e===`ac3`)return`ac-3`;if(e===`eac3`)return`ec-3`;if(Ii.includes(e))return e;throw TypeError(`Unhandled codec '${e}'.`)},Zi=e=>{let{codec:t,codecDescription:n,aacCodecInfo:r}=e;if(t===`aac`){if(!r)throw TypeError(`AAC codec info must be provided.`);if(r.isMpeg2)return`mp4a.67`;{let e;return e=r.objectType===null?Ai(n).objectType:r.objectType,`mp4a.40.${e}`}}else if(t===`mp3`)return`mp3`;else if(t===`opus`)return`opus`;else if(t===`vorbis`)return`vorbis`;else if(t===`flac`)return`flac`;else if(t===`ac3`)return`ac-3`;else if(t===`eac3`)return`ec-3`;else if(t&&Ii.includes(t))return t;throw TypeError(`Unhandled codec '${t}'.`)},Qi=e=>{},$i=e=>{switch(e.codec){case`flac`:{let t=Jr(`ZkxhQ4AAACIQABAAAAYtACWtCsRC8AANRBhVFucAcYu5ASE2m1Dxv8tw`);return e.sampleRate>=1<<20||e.numberOfChannels>8?!1:(t[18]=e.sampleRate>>>12,t[19]=e.sampleRate>>>4,t[20]=(e.sampleRate&15)<<4|e.numberOfChannels-1<<1,t)}case`vorbis`:{let t=Jr(`Ah7/AgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMNAAAATGF2ZjU4Ljc2LjEwMAgAAAAMAAAAbGFuZ3VhZ2U9dW5kGQAAAGhhbmRsZXJfbmFtZT1Tb3VuZEhhbmRsZXIWAAAAdmVuZG9yX2lkPVswXVswXVswXVswXSAAAABlbmNvZGVyPUxhdmM1OC4xMzQuMTAwIGxpYnZvcmJpcxAAAABtYWpvcl9icmFuZD1pc29tEQAAAG1pbm9yX3ZlcnNpb249NTEyIgAAAGNvbXBhdGlibGVfYnJhbmRzPWlzb21pc28yYXZjMW1wNDEmAAAAREVTQ1JJUFRJT049TWFkZSB3aXRoIFJlbW90aW9uIDQuMC4yNzgBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBA==`),n=j(t);return n.setUint8(15,e.numberOfChannels),n.setUint32(16,e.sampleRate,!0),t}default:return}},ea=48e3,ta=/^pcm-([usf])(\d+)(be)?$/,na=e=>{if(D(Ii.includes(e)),e===`ulaw`)return{dataType:`ulaw`,sampleSize:1,littleEndian:!0,silentValue:255};if(e===`alaw`)return{dataType:`alaw`,sampleSize:1,littleEndian:!0,silentValue:213};let t=ta.exec(e);D(t);let n;n=t[1]===`u`?`unsigned`:t[1]===`s`?`signed`:`float`;let r=Number(t[2])/8,i=t[3]!==`be`;return{dataType:n,sampleSize:r,littleEndian:i,silentValue:e===`pcm-u8`?2**7:0}},ra=e=>e.startsWith(`avc1`)||e.startsWith(`avc3`)?`avc`:e.startsWith(`hev1`)||e.startsWith(`hvc1`)?`hevc`:e===`vp8`?`vp8`:e.startsWith(`vp09`)?`vp9`:e.startsWith(`av01`)?`av1`:e===`mp3`||e===`mp4a.69`||e===`mp4a.6B`||e===`mp4a.6b`||e===`mp4a.40.34`?`mp3`:e.startsWith(`mp4a.40.`)||e===`mp4a.67`?`aac`:e===`opus`?`opus`:e===`vorbis`?`vorbis`:e===`flac`?`flac`:e===`ac-3`||e===`ac3`?`ac3`:e===`ec-3`||e===`eac3`?`eac3`:e===`ulaw`?`ulaw`:e===`alaw`?`alaw`:ta.test(e)?e:e===`webvtt`?`webvtt`:null,ia=e=>e===`avc`?{avc:{format:`avc`}}:e===`hevc`?{hevc:{format:`hevc`}}:{},aa=e=>e===`aac`?{aac:{format:`aac`}}:e===`opus`?{opus:{format:`opus`}}:{},oa=[`avc1`,`avc3`,`hev1`,`hvc1`,`vp8`,`vp09`,`av01`],sa=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,ca=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,la=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,ua=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,da=e=>{if(!e)throw TypeError(`Video chunk metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Video chunk metadata must be an object.`);if(!e.decoderConfig)throw TypeError(`Video chunk metadata must include a decoder configuration.`);if(typeof e.decoderConfig!=`object`)throw TypeError(`Video chunk metadata decoder configuration must be an object.`);if(typeof e.decoderConfig.codec!=`string`)throw TypeError(`Video chunk metadata decoder configuration must specify a codec string.`);if(!oa.some(t=>e.decoderConfig.codec.startsWith(t)))throw 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(e.decoderConfig.codedWidth)||e.decoderConfig.codedWidth<=0)throw TypeError(`Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).`);if(!Number.isInteger(e.decoderConfig.codedHeight)||e.decoderConfig.codedHeight<=0)throw TypeError(`Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).`);if(e.decoderConfig.displayAspectWidth!==void 0&&(!Number.isInteger(e.decoderConfig.displayAspectWidth)||e.decoderConfig.displayAspectWidth<=0))throw TypeError(`Video chunk metadata decoder configuration displayAspectWidth, when defined, must be a positive integer.`);if(e.decoderConfig.displayAspectHeight!==void 0&&(!Number.isInteger(e.decoderConfig.displayAspectHeight)||e.decoderConfig.displayAspectHeight<=0))throw TypeError(`Video chunk metadata decoder configuration displayAspectHeight, when defined, must be a positive integer.`);if(e.decoderConfig.displayAspectWidth!==void 0!=(e.decoderConfig.displayAspectHeight!==void 0))throw TypeError(`Video chunk metadata decoder configuration must specify both displayAspectWidth and displayAspectHeight, or neither.`);if(e.decoderConfig.description!==void 0&&!er(e.decoderConfig.description))throw TypeError(`Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.`);if(e.decoderConfig.colorSpace!==void 0){let{colorSpace:t}=e.decoderConfig;if(typeof t!=`object`)throw TypeError(`Video chunk metadata decoder configuration colorSpace, when provided, must be an object.`);let n=Object.keys(qn);if(t.primaries!=null&&!n.includes(t.primaries))throw TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${n.join(`, `)}.`);let r=Object.keys(Yn);if(t.transfer!=null&&!r.includes(t.transfer))throw TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${r.join(`, `)}.`);let i=Object.keys(Zn);if(t.matrix!=null&&!i.includes(t.matrix))throw TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${i.join(`, `)}.`);if(t.fullRange!=null&&typeof t.fullRange!=`boolean`)throw TypeError(`Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.`)}if(e.decoderConfig.codec.startsWith(`avc1`)||e.decoderConfig.codec.startsWith(`avc3`)){if(!sa.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`hev1`)||e.decoderConfig.codec.startsWith(`hvc1`)){if(!ca.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`vp8`)){if(e.decoderConfig.codec!==`vp8`)throw TypeError(`Video chunk metadata decoder configuration codec string for VP8 must be "vp8".`)}else if(e.decoderConfig.codec.startsWith(`vp09`)){if(!la.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`av01`)&&!ua.test(e.decoderConfig.codec))throw 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/.`)},fa=[`mp4a`,`mp3`,`opus`,`vorbis`,`flac`,`ulaw`,`alaw`,`pcm`,`ac-3`,`ec-3`],pa=e=>{if(!e)throw TypeError(`Audio chunk metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Audio chunk metadata must be an object.`);if(!e.decoderConfig)throw TypeError(`Audio chunk metadata must include a decoder configuration.`);if(typeof e.decoderConfig!=`object`)throw TypeError(`Audio chunk metadata decoder configuration must be an object.`);if(typeof e.decoderConfig.codec!=`string`)throw TypeError(`Audio chunk metadata decoder configuration must specify a codec string.`);if(!fa.some(t=>e.decoderConfig.codec.startsWith(t)))throw 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(e.decoderConfig.sampleRate)||e.decoderConfig.sampleRate<=0)throw TypeError(`Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).`);if(!Number.isInteger(e.decoderConfig.numberOfChannels)||e.decoderConfig.numberOfChannels<=0)throw TypeError(`Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).`);if(e.decoderConfig.description!==void 0&&!er(e.decoderConfig.description))throw TypeError(`Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.`);if(e.decoderConfig.codec.startsWith(`mp4a`)&&e.decoderConfig.codec!==`mp4a.69`&&e.decoderConfig.codec!==`mp4a.6B`&&e.decoderConfig.codec!==`mp4a.6b`){if(![`mp4a.40.2`,`mp4a.40.02`,`mp4a.40.5`,`mp4a.40.05`,`mp4a.40.29`,`mp4a.67`].includes(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`mp3`)||e.decoderConfig.codec.startsWith(`mp4a`)){if(e.decoderConfig.codec!==`mp3`&&e.decoderConfig.codec!==`mp4a.69`&&e.decoderConfig.codec!==`mp4a.6B`&&e.decoderConfig.codec!==`mp4a.6b`)throw TypeError(`Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".`)}else if(e.decoderConfig.codec.startsWith(`opus`)){if(e.decoderConfig.codec!==`opus`)throw TypeError(`Audio chunk metadata decoder configuration codec string for Opus must be "opus".`);if(e.decoderConfig.description&&e.decoderConfig.description.byteLength<18)throw 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(e.decoderConfig.codec.startsWith(`vorbis`)){if(e.decoderConfig.codec!==`vorbis`)throw TypeError(`Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".`);if(!e.decoderConfig.description)throw 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(e.decoderConfig.codec.startsWith(`flac`)){if(e.decoderConfig.codec!==`flac`)throw TypeError(`Audio chunk metadata decoder configuration codec string for FLAC must be "flac".`);if(!e.decoderConfig.description||e.decoderConfig.description.byteLength<42)throw 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(e.decoderConfig.codec.startsWith(`ac-3`)||e.decoderConfig.codec.startsWith(`ac3`)){if(e.decoderConfig.codec!==`ac-3`)throw TypeError(`Audio chunk metadata decoder configuration codec string for AC-3 must be "ac-3".`)}else if(e.decoderConfig.codec.startsWith(`ec-3`)||e.decoderConfig.codec.startsWith(`eac3`)){if(e.decoderConfig.codec!==`ec-3`)throw TypeError(`Audio chunk metadata decoder configuration codec string for EC-3 must be "ec-3".`)}else if((e.decoderConfig.codec.startsWith(`pcm`)||e.decoderConfig.codec.startsWith(`ulaw`)||e.decoderConfig.codec.startsWith(`alaw`))&&!Ii.includes(e.decoderConfig.codec))throw TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${Ii.join(`, `)}).`)},ma=e=>{if(!e)throw TypeError(`Subtitle metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Subtitle metadata must be an object.`);if(!e.config)throw TypeError(`Subtitle metadata must include a config object.`);if(typeof e.config!=`object`)throw TypeError(`Subtitle metadata config must be an object.`);if(typeof e.config.description!=`string`)throw TypeError(`Subtitle metadata config description must be a string.`)}})),ga,_a,va,ya,ba,xa,Sa,Ca,wa,Ta,Ea,Da,Oa=n((()=>{ga=4,_a=[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],ya=1483304551,ba=1231971951,xa=(e,t,n,r,i)=>t===0?0:t===1?Math.floor(144*n/(r<<e))+i:t===2?Math.floor(144*n/r)+i:(Math.floor(12*n/r)+i)*4,Sa=(e,t,n,r)=>t===0?0:t===1?144*n/(r<<e):t===2?144*n/r:12*n/r*4,Ca=(e,t)=>e===3?t===3?21:36:t===3?13:21,wa=(e,t)=>{let n=e>>>24,r=e>>>16&255,i=e>>>8&255,a=e&255;if(n!==255&&r!==255&&i!==255&&a!==255)return{header:null,bytesAdvanced:4};if(n!==255||(r&224)!=224)return{header:null,bytesAdvanced:1};let o=0,s=0;r&16?o=r&8?0:1:(o=1,s=1);let c=r>>3&3,l=r>>1&3,u=i>>4&15,d=(i>>2&3)%3,f=i>>1&1,p=a>>6&3,m=a>>4&3,h=a>>3&1,g=a>>2&1,_=a&3,v=va[o*16*4+l*16+u];if(v===-1)return{header:null,bytesAdvanced:1};let y=v*1e3,b=_a[d]>>o+s,x=xa(o,l,y,b,f);if(t!==null&&t<x)return{header:null,bytesAdvanced:1};let S;return S=c===3?l===3?384:1152:l===3?384:l===2?1152:576,{header:{totalSize:x,mpegVersionId:c,lowSamplingFrequency:o,layer:l,bitrate:y,frequencyIndex:d,sampleRate:b,channel:p,modeExtension:m,copyright:h,original:g,emphasis:_,audioSamplesInFrame:S},bytesAdvanced:1}},Ta=e=>{let t=127,n=0,r=e;for(;t^2147483647;)n=r&~t,n<<=1,n|=r&t,t=(t+1<<8)-1,r=n;return n},Ea=e=>{let t=2130706432,n=0;for(;t!==0;)n>>=1,n|=e&t,t>>=8;return n},(function(e){e[e.FrameCount=1]=`FrameCount`,e[e.FileSize=2]=`FileSize`,e[e.Toc=4]=`Toc`})(Da||={})})),ka,Aa,ja=n((()=>{ka=[48e3,44100,32e3],Aa=[24e3,22050,16e3]})),Ma,Na,Pa,Fa,Ia,La,Ra,za,Ba,Va,Ha,Ua,Wa,Ga,Ka,qa,Ja,Ya,Xa,Za,Qa,$a,eo,to,no,ro,io,ao,oo,so,co,lo,uo,fo,po,mo,ho,go,_o,vo,yo,bo,xo,So,Co,wo,To,Eo,Do,Oo,ko,Ao,jo,Mo,No,Po=n((()=>{ha(),F(),ja(),Di(),(function(e){e[e.NON_IDR_SLICE=1]=`NON_IDR_SLICE`,e[e.SLICE_DPA=2]=`SLICE_DPA`,e[e.SLICE_DPB=3]=`SLICE_DPB`,e[e.SLICE_DPC=4]=`SLICE_DPC`,e[e.IDR=5]=`IDR`,e[e.SEI=6]=`SEI`,e[e.SPS=7]=`SPS`,e[e.PPS=8]=`PPS`,e[e.AUD=9]=`AUD`,e[e.SPS_EXT=13]=`SPS_EXT`})(Ma||={}),(function(e){e[e.RASL_N=8]=`RASL_N`,e[e.RASL_R=9]=`RASL_R`,e[e.BLA_W_LP=16]=`BLA_W_LP`,e[e.RSV_IRAP_VCL23=23]=`RSV_IRAP_VCL23`,e[e.VPS_NUT=32]=`VPS_NUT`,e[e.SPS_NUT=33]=`SPS_NUT`,e[e.PPS_NUT=34]=`PPS_NUT`,e[e.AUD_NUT=35]=`AUD_NUT`,e[e.PREFIX_SEI_NUT=39]=`PREFIX_SEI_NUT`,e[e.SUFFIX_SEI_NUT=40]=`SUFFIX_SEI_NUT`})(Na||={}),Pa=function*(e){let t=0,n=-1;for(;t<e.length-2;){let r=e.indexOf(0,t);if(r===-1||r>=e.length-2)break;t=r;let i=0;if(t+3<e.length&&e[t+1]===0&&e[t+2]===0&&e[t+3]===1?i=4:e[t+1]===0&&e[t+2]===1&&(i=3),i===0){t++;continue}n!==-1&&t>n&&(yield{offset:n,length:t-n}),n=t+i,t=n}n!==-1&&n<e.length&&(yield{offset:n,length:e.length-n})},Fa=function*(e,t){let n=0,r=new DataView(e.buffer,e.byteOffset,e.byteLength);for(;n+t<=e.length;){let e;t===1?e=r.getUint8(n):t===2?e=r.getUint16(n,!1):t===3?e=mr(r,n,!1):(D(t===4),e=r.getUint32(n,!1)),n+=t,yield{offset:n,length:e},n+=e}},Ia=(e,t)=>t.description?Fa(e,(A(t.description)[4]&3)+1):Pa(e),La=e=>e&31,Ra=e=>{let t=[],n=e.length;for(let r=0;r<n;r++)r+2<n&&e[r]===0&&e[r+1]===0&&e[r+2]===3?(t.push(0,0),r+=2):t.push(e[r]);return new Uint8Array(t)},za=new Uint8Array([0,0,0,1]),Ba=e=>{let t=e.reduce((e,t)=>e+za.byteLength+t.byteLength,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(za,r),r+=za.byteLength,n.set(t,r),r+=t.byteLength;return n},Va=(e,t)=>{let n=e.reduce((e,n)=>e+t+n.byteLength,0),r=new Uint8Array(n),i=0;for(let n of e){let e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(i,n.byteLength);break;case 2:e.setUint16(i,n.byteLength,!1);break;case 3:gr(e,i,n.byteLength,!1);break;case 4:e.setUint32(i,n.byteLength,!1);break}i+=t,r.set(n,i),i+=n.byteLength}return r},Ha=(e,t)=>t.description?Va(e,(A(t.description)[4]&3)+1):Ba(e),Ua=e=>{try{let t=[],n=[],r=[];for(let i of Pa(e)){let a=e.subarray(i.offset,i.offset+i.length),o=La(a[0]);o===Ma.SPS?t.push(a):o===Ma.PPS?n.push(a):o===Ma.SPS_EXT&&r.push(a)}if(t.length===0||n.length===0)return null;let i=t[0],a=qa(i);D(a!==null);let o=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:n,chromaFormat:o?a.chromaFormatIdc:null,bitDepthLumaMinus8:o?a.bitDepthLumaMinus8:null,bitDepthChromaMinus8:o?a.bitDepthChromaMinus8:null,sequenceParameterSetExt:o?r:null}}catch(e){return console.error(`Error building AVC Decoder Configuration Record:`,e),null}},Wa=e=>{let t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|e.lengthSizeMinusOne&3),t.push(224|e.sequenceParameterSets.length&31);for(let n of e.sequenceParameterSets){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}t.push(e.pictureParameterSets.length);for(let n of e.pictureParameterSets){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}if(e.avcProfileIndication===100||e.avcProfileIndication===110||e.avcProfileIndication===122||e.avcProfileIndication===144){D(e.chromaFormat!==null),D(e.bitDepthLumaMinus8!==null),D(e.bitDepthChromaMinus8!==null),D(e.sequenceParameterSetExt!==null),t.push(252|e.chromaFormat&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.sequenceParameterSetExt.length);for(let n of e.sequenceParameterSetExt){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}}return new Uint8Array(t)},Ga=e=>{try{let t=j(e),n=0,r=t.getUint8(n++),i=t.getUint8(n++),a=t.getUint8(n++),o=t.getUint8(n++),s=t.getUint8(n++)&3,c=t.getUint8(n++)&31,l=[];for(let r=0;r<c;r++){let r=t.getUint16(n,!1);n+=2,l.push(e.subarray(n,n+r)),n+=r}let u=t.getUint8(n++),d=[];for(let r=0;r<u;r++){let r=t.getUint16(n,!1);n+=2,d.push(e.subarray(n,n+r)),n+=r}let f={configurationVersion:r,avcProfileIndication:i,profileCompatibility:a,avcLevelIndication:o,lengthSizeMinusOne:s,sequenceParameterSets:l,pictureParameterSets:d,chromaFormat:null,bitDepthLumaMinus8:null,bitDepthChromaMinus8:null,sequenceParameterSetExt:null};if((i===100||i===110||i===122||i===144)&&n+4<=e.length){let r=t.getUint8(n++)&3,i=t.getUint8(n++)&7,a=t.getUint8(n++)&7,o=t.getUint8(n++);f.chromaFormat=r,f.bitDepthLumaMinus8=i,f.bitDepthChromaMinus8=a;let s=[];for(let r=0;r<o;r++){let r=t.getUint16(n,!1);n+=2,s.push(e.subarray(n,n+r)),n+=r}f.sequenceParameterSetExt=s}return f}catch(e){return console.error(`Error deserializing AVC Decoder Configuration Record:`,e),null}},Ka={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},qa=e=>{try{let t=new I(Ra(e));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let n=t.readAlignedByte(),r=t.readAlignedByte(),i=t.readAlignedByte();k(t);let a=1,o=0,s=0,c=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(a=k(t),a===3&&(c=t.readBits(1)),o=k(t),s=k(t),t.skipBits(1),t.readBits(1))){for(let e=0;e<(a===3?12:8);e++)if(t.readBits(1)){let n=e<6?16:64,r=8,i=8;for(let e=0;e<n;e++){if(i!==0){let e=Hn(t);i=(r+e+256)%256}r=i===0?r:i}}}k(t);let l=k(t);if(l===0)k(t);else if(l===1){t.skipBits(1),Hn(t),Hn(t);let e=k(t);for(let n=0;n<e;n++)Hn(t)}k(t),t.skipBits(1);let u=k(t),d=k(t),f=16*(u+1),p=16*(d+1),m=f,h=p,g=t.readBits(1);if(g||t.skipBits(1),t.skipBits(1),t.readBits(1)){let e=k(t),n=k(t),r=k(t),i=k(t),o,s;if((c===0?a:0)===0)o=1,s=2-g;else{let e=a===3?1:2,t=a===1?2:1;o=e,s=t*(2-g)}m-=o*(e+n),h-=s*(r+i)}let _=2,v=2,y=2,b=0,x={num:1,den:1},S=null,C=null;if(t.readBits(1)){if(t.readBits(1)){let e=t.readBits(8);if(e===255)x={num:t.readBits(16),den:t.readBits(16)};else{let t=Ka[e];t&&(x=t)}}t.readBits(1)&&t.skipBits(1),t.readBits(1)&&(t.skipBits(3),b=t.readBits(1),t.readBits(1)&&(_=t.readBits(8),v=t.readBits(8),y=t.readBits(8))),t.readBits(1)&&(k(t),k(t)),t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));let e=t.readBits(1);e&&Ja(t);let n=t.readBits(1);n&&Ja(t),(e||n)&&t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(1),k(t),k(t),k(t),k(t),S=k(t),C=k(t))}if(S===null){D(C===null);let e=r&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&e)S=0,C=0;else{let e=u+1,t=d+1,n=(2-g)*t,r=Bi.find(e=>e.level>=i)??O(Bi),a=Math.min(Math.floor(r.maxDpbMbs/(e*n)),16);S=a,C=a}}return D(C!==null),{profileIdc:n,constraintFlags:r,levelIdc:i,frameMbsOnlyFlag:g,chromaFormatIdc:a,bitDepthLumaMinus8:o,bitDepthChromaMinus8:s,codedWidth:f,codedHeight:p,displayWidth:m,displayHeight:h,pixelAspectRatio:x,colourPrimaries:_,matrixCoefficients:y,transferCharacteristics:v,fullRangeFlag:b,numReorderFrames:S,maxDecFrameBuffering:C}}catch(e){return console.error(`Error parsing AVC SPS:`,e),null}},Ja=e=>{let t=k(e);e.skipBits(4),e.skipBits(4);for(let n=0;n<=t;n++)k(e),k(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Ya=(e,t)=>t.description?Va(e,(A(t.description)[21]&3)+1):Ba(e),Xa=(e,t)=>t.description?Fa(e,(A(t.description)[21]&3)+1):Pa(e),Za=e=>e>>1&63,Qa=e=>{try{let t=new I(Ra(e));t.skipBits(16),t.readBits(4);let n=t.readBits(3),r=t.readBits(1),{general_profile_space:i,general_tier_flag:a,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:c,general_level_idc:l}=eo(t,n);k(t);let u=k(t),d=0;u===3&&(d=t.readBits(1));let f=k(t),p=k(t),m=f,h=p;if(t.readBits(1)){let e=k(t),n=k(t),r=k(t),i=k(t),a=1,o=1,s=d===0?u:0;s===1?(a=2,o=2):s===2&&(a=2,o=1),m-=(e+n)*a,h-=(r+i)*o}let g=k(t),_=k(t);k(t);let v=t.readBits(1)?0:n,y=0;for(let e=v;e<=n;e++)k(t),y=k(t),k(t);if(k(t),k(t),k(t),k(t),k(t),k(t),t.readBits(1)&&t.readBits(1)&&to(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),k(t),k(t),t.skipBits(1)),no(t,k(t)),t.readBits(1)){let e=k(t);for(let n=0;n<e;n++)k(t),t.skipBits(1)}t.skipBits(1),t.skipBits(1);let b=2,x=2,S=2,C=0,ee=0,w={num:1,den:1};if(t.readBits(1)){let e=io(t,n);w=e.pixelAspectRatio,b=e.colourPrimaries,x=e.transferCharacteristics,S=e.matrixCoefficients,C=e.fullRangeFlag,ee=e.minSpatialSegmentationIdc}return{displayWidth:m,displayHeight:h,pixelAspectRatio:w,colourPrimaries:b,transferCharacteristics:x,matrixCoefficients:S,fullRangeFlag:C,maxDecFrameBuffering:y+1,spsMaxSubLayersMinus1:n,spsTemporalIdNestingFlag:r,generalProfileSpace:i,generalTierFlag:a,generalProfileIdc:o,generalProfileCompatibilityFlags:s,generalConstraintIndicatorFlags:c,generalLevelIdc:l,chromaFormatIdc:u,bitDepthLumaMinus8:g,bitDepthChromaMinus8:_,minSpatialSegmentationIdc:ee}}catch(e){return console.error(`Error parsing HEVC SPS:`,e),null}},$a=e=>{try{let t=[],n=[],r=[],i=[];for(let a of Pa(e)){let o=e.subarray(a.offset,a.offset+a.length),s=Za(o[0]);s===Na.VPS_NUT?t.push(o):s===Na.SPS_NUT?n.push(o):s===Na.PPS_NUT?r.push(o):(s===Na.PREFIX_SEI_NUT||s===Na.SUFFIX_SEI_NUT)&&i.push(o)}if(n.length===0||r.length===0)return null;let a=Qa(n[0]);if(!a)return null;let o=0;if(r.length>0){let e=r[0],t=new I(Ra(e));t.skipBits(16),k(t),k(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),k(t),k(t),Hn(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&k(t),Hn(t),Hn(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);let n=t.readBits(1),i=t.readBits(1);o=!n&&!i?0:n&&!i?2:!n&&i?3:0}let s=[...t.length?[{arrayCompleteness:1,nalUnitType:Na.VPS_NUT,nalUnits:t}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Na.SPS_NUT,nalUnits:n}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:Na.PPS_NUT,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Za(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:a.generalProfileSpace,generalTierFlag:a.generalTierFlag,generalProfileIdc:a.generalProfileIdc,generalProfileCompatibilityFlags:a.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:a.generalConstraintIndicatorFlags,generalLevelIdc:a.generalLevelIdc,minSpatialSegmentationIdc:a.minSpatialSegmentationIdc,parallelismType:o,chromaFormatIdc:a.chromaFormatIdc,bitDepthLumaMinus8:a.bitDepthLumaMinus8,bitDepthChromaMinus8:a.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:a.spsMaxSubLayersMinus1+1,temporalIdNested:a.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:s}}catch(e){return console.error(`Error building HEVC Decoder Configuration Record:`,e),null}},eo=(e,t)=>{let n=e.readBits(2),r=e.readBits(1),i=e.readBits(5),a=0;for(let t=0;t<32;t++)a=a<<1|e.readBits(1);let o=new Uint8Array(6);for(let t=0;t<6;t++)o[t]=e.readBits(8);let s=e.readBits(8),c=[],l=[];for(let n=0;n<t;n++)c.push(e.readBits(1)),l.push(e.readBits(1));if(t>0)for(let n=t;n<8;n++)e.skipBits(2);for(let n=0;n<t;n++)c[n]&&e.skipBits(88),l[n]&&e.skipBits(8);return{general_profile_space:n,general_tier_flag:r,general_profile_idc:i,general_profile_compatibility_flags:a,general_constraint_indicator_flags:o,general_level_idc:s}},to=e=>{for(let t=0;t<4;t++)for(let n=0;n<(t===3?2:6);n++)if(!e.readBits(1))k(e);else{let n=Math.min(64,1<<4+(t<<1));t>1&&Hn(e);for(let t=0;t<n;t++)Hn(e)}},no=(e,t)=>{let n=[];for(let r=0;r<t;r++)n[r]=ro(e,r,t,n)},ro=(e,t,n,r)=>{let i=0,a=0,o=0;if(t!==0&&(a=e.readBits(1)),a){o=t===n?t-(k(e)+1):t-1,e.readBits(1),k(e);let a=r[o]??0;for(let t=0;t<=a;t++)e.readBits(1)||e.readBits(1);i=r[o]}else{let t=k(e),n=k(e);for(let n=0;n<t;n++)k(e),e.readBits(1);for(let t=0;t<n;t++)k(e),e.readBits(1);i=t+n}return i},io=(e,t)=>{let n=2,r=2,i=2,a=0,o=0,s={num:1,den:1};if(e.readBits(1)){let t=e.readBits(8);if(t===255)s={num:e.readBits(16),den:e.readBits(16)};else{let e=Ka[t];e&&(s=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),a=e.readBits(1),e.readBits(1)&&(n=e.readBits(8),r=e.readBits(8),i=e.readBits(8))),e.readBits(1)&&(k(e),k(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(k(e),k(e),k(e),k(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&k(e),e.readBits(1)&&ao(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),o=k(e),k(e),k(e),k(e),k(e)),{pixelAspectRatio:s,colourPrimaries:n,transferCharacteristics:r,matrixCoefficients:i,fullRangeFlag:a,minSpatialSegmentationIdc:o}},ao=(e,t,n)=>{let r=!1,i=!1,a=!1;t&&(r=e.readBits(1)===1,i=e.readBits(1)===1,(r||i)&&(a=e.readBits(1)===1,a&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),a&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5)));for(let t=0;t<=n;t++){let t=e.readBits(1)===1,n=!0;t||(n=e.readBits(1)===1);let o=!1;n?k(e):o=e.readBits(1)===1;let s=1;o||(s=k(e)+1),r&&oo(e,s,a),i&&oo(e,s,a)}},oo=(e,t,n)=>{for(let r=0;r<t;r++)k(e),k(e),n&&(k(e),k(e)),e.readBits(1)},so=e=>{let t=[];t.push(e.configurationVersion),t.push((e.generalProfileSpace&3)<<6|(e.generalTierFlag&1)<<5|e.generalProfileIdc&31),t.push(e.generalProfileCompatibilityFlags>>>24&255),t.push(e.generalProfileCompatibilityFlags>>>16&255),t.push(e.generalProfileCompatibilityFlags>>>8&255),t.push(e.generalProfileCompatibilityFlags&255),t.push(...e.generalConstraintIndicatorFlags),t.push(e.generalLevelIdc&255),t.push(240|e.minSpatialSegmentationIdc>>8&15),t.push(e.minSpatialSegmentationIdc&255),t.push(252|e.parallelismType&3),t.push(252|e.chromaFormatIdc&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.avgFrameRate>>8&255),t.push(e.avgFrameRate&255),t.push((e.constantFrameRate&3)<<6|(e.numTemporalLayers&7)<<3|(e.temporalIdNested&1)<<2|e.lengthSizeMinusOne&3),t.push(e.arrays.length&255);for(let n of e.arrays){t.push((n.arrayCompleteness&1)<<7|0|n.nalUnitType&63),t.push(n.nalUnits.length>>8&255),t.push(n.nalUnits.length&255);for(let e of n.nalUnits){t.push(e.length>>8&255),t.push(e.length&255);for(let n=0;n<e.length;n++)t.push(e[n])}}return new Uint8Array(t)},co=e=>{try{let t=j(e),n=0,r=t.getUint8(n++),i=t.getUint8(n++),a=i>>6&3,o=i>>5&1,s=i&31,c=t.getUint32(n,!1);n+=4;let l=e.subarray(n,n+6);n+=6;let u=t.getUint8(n++),d=(t.getUint8(n++)&15)<<8|t.getUint8(n++),f=t.getUint8(n++)&3,p=t.getUint8(n++)&3,m=t.getUint8(n++)&7,h=t.getUint8(n++)&7,g=t.getUint16(n,!1);n+=2;let _=t.getUint8(n++),v=_>>6&3,y=_>>3&7,b=_>>2&1,x=_&3,S=t.getUint8(n++),C=[];for(let r=0;r<S;r++){let r=t.getUint8(n++),i=r>>7&1,a=r&63,o=t.getUint16(n,!1);n+=2;let s=[];for(let r=0;r<o;r++){let r=t.getUint16(n,!1);n+=2,s.push(e.subarray(n,n+r)),n+=r}C.push({arrayCompleteness:i,nalUnitType:a,nalUnits:s})}return{configurationVersion:r,generalProfileSpace:a,generalTierFlag:o,generalProfileIdc:s,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:l,generalLevelIdc:u,minSpatialSegmentationIdc:d,parallelismType:f,chromaFormatIdc:p,bitDepthLumaMinus8:m,bitDepthChromaMinus8:h,avgFrameRate:g,constantFrameRate:v,numTemporalLayers:y,temporalIdNested:b,lengthSizeMinusOne:x,arrays:C}}catch(e){return console.error(`Error deserializing HEVC Decoder Configuration Record:`,e),null}},(function(e){e[e.audAllowed=0]=`audAllowed`,e[e.beforeFirstVcl=1]=`beforeFirstVcl`,e[e.afterFirstVcl=2]=`afterFirstVcl`,e[e.eoBitstreamAllowed=3]=`eoBitstreamAllowed`,e[e.noMoreDataAllowed=4]=`noMoreDataAllowed`})(lo||={}),uo=(e,t)=>{let n=new Set,r=lo.audAllowed;for(let i of Xa(e,t)){if(r===lo.noMoreDataAllowed){n.add(i.offset);continue}let t=Za(e[i.offset]);if(r===lo.eoBitstreamAllowed&&t!==37){n.add(i.offset);continue}let a=!1;t===35?r>lo.audAllowed?a=!0:r=lo.beforeFirstVcl:t<=31?r>lo.afterFirstVcl?a=!0:r=lo.afterFirstVcl:t===36?r===lo.afterFirstVcl?r=lo.eoBitstreamAllowed:a=!0:t===37?r<lo.afterFirstVcl?a=!0:r=lo.noMoreDataAllowed:t===32||t===33||t===34||t===39||t>=41&&t<=44||t>=48&&t<=55?r>lo.beforeFirstVcl?a=!0:r=lo.beforeFirstVcl:(t===38||t===40||t>=45&&t<=47||t>=56&&t<=63)&&r<lo.afterFirstVcl&&(a=!0),a&&n.add(i.offset)}if(n.size===0)return null;let i=[];for(let r of Xa(e,t))n.has(r.offset)||i.push(e.subarray(r.offset,r.offset+r.length));return Ya(i,t)},fo=e=>{let t=new I(e);if(t.readBits(2)!==2)return null;let n=t.readBits(1),r=(t.readBits(1)<<1)+n;if(r===3&&t.skipBits(1),t.readBits(1)===1||t.readBits(1)!==0||(t.skipBits(2),t.readBits(24)!==4817730))return null;let i=8;r>=2&&(i=t.readBits(1)?12:10);let a=t.readBits(3),o=0,s=0;if(a!==7)if(s=t.readBits(1),r===1||r===3){let e=t.readBits(1),n=t.readBits(1);o=!e&&!n?3:e&&!n?2:1,t.skipBits(1)}else o=1;else o=3,s=1;let c=t.readBits(16),l=t.readBits(16),u=(c+1)*(l+1),d=O(Hi).level;for(let e of Hi)if(u<=e.maxPictureSize){d=e.level;break}return{profile:r,level:d,bitDepth:i,chromaSubsampling:o,videoFullRangeFlag:s,colourPrimaries:a===2?1:a===1?6:2,transferCharacteristics:a===2?1:a===1?6:2,matrixCoefficients:a===7?0:a===2?1:a===1?6:2}},po=function*(e){let t=new I(e),n=()=>{let e=0;for(let n=0;n<8;n++){let r=t.readAlignedByte();if(e|=(r&127)<<n*7,!(r&128))break;if(n===7&&r&128)return null}return e>=2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);let r=t.readBits(4),i=t.readBits(1),a=t.readBits(1);t.skipBits(1),i&&t.skipBits(8);let o;if(a){let e=n();if(e===null)return;o=e}else o=Math.floor(t.getBitsLeft()/8);D(t.pos%8==0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+o)},t.skipBits(o*8)}},mo=e=>{for(let{type:t,data:n}of po(e)){if(t!==1)continue;let e=new I(n),r=e.readBits(3);e.readBits(1);let i=e.readBits(1),a=0,o=0,s=0;if(i)a=e.readBits(5);else{if(e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.readBits(1)))return null;let t=e.readBits(1);t&&(s=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5));let n=e.readBits(5);for(let r=0;r<=n;r++){e.skipBits(12);let n=e.readBits(5);if(r===0&&(a=n),n>7){let t=e.readBits(1);r===0&&(o=t)}if(t&&e.readBits(1)){let t=s+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}e.readBits(1)&&e.skipBits(4)}}let c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);let d=l+1;e.skipBits(d);let f=0;if(f=i?0:e.readBits(1),f&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!i){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);let t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let n=e.readBits(1),r=0;r=n?2:e.readBits(1),r>0&&(e.readBits(1)||e.skipBits(1)),t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);let p=e.readBits(1),m=8;r===2&&p?m=e.readBits(1)?12:10:r<=2&&(m=p?10:8);let h=0;r!==1&&(h=e.readBits(1));let g=1,_=1,v=0;return h||(r===0?(g=1,_=1):r===1?(g=0,_=0):m===12&&(g=e.readBits(1),g&&(_=e.readBits(1))),g&&_&&(v=e.readBits(2))),{profile:r,level:a,tier:o,bitDepth:m,monochrome:h,chromaSubsamplingX:g,chromaSubsamplingY:_,chromaSamplePosition:v}}return null},ho=e=>{let t=j(e),n=t.getUint8(9),r=t.getUint16(10,!0),i=t.getUint32(12,!0),a=t.getInt16(16,!0),o=t.getUint8(18),s=null;return o&&(s=e.subarray(19,21+n)),{outputChannelCount:n,preSkip:r,inputSampleRate:i,outputGain:a,channelMappingFamily:o,channelMappingTable:s}},go=[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],_o=e=>({durationInSamples:go[e[0]>>3]}),vo=e=>{if(e.length<7)throw Error(`Setup header is too short.`);if(e[0]!==5)throw Error(`Wrong packet type in Setup header.`);if(String.fromCharCode(...e.slice(1,7))!==`vorbis`)throw Error(`Invalid packet signature in Setup header.`);let t=e.length,n=new Uint8Array(t);for(let r=0;r<t;r++)n[r]=e[t-1-r];let r=new I(n),i=0;for(;r.getBitsLeft()>97;)if(r.readBits(1)===1){i=r.pos;break}if(i===0)throw Error(`Invalid Setup header: framing bit not found.`);let a=0,o=!1,s=0;for(;r.getBitsLeft()>=97;){let e=r.pos,t=r.readBits(8),n=r.readBits(16),i=r.readBits(16);if(t>63||n!==0||i!==0){r.pos=e;break}if(r.skipBits(1),a++,a>64)break;r.clone().readBits(6)+1===a&&(o=!0,s=a)}if(!o)throw Error(`Invalid Setup header: mode header not found.`);if(s>63)throw Error(`Unsupported mode count: ${s}.`);let c=s;r.pos=0,r.skipBits(i);let l=Array(c).fill(0);for(let e=c-1;e>=0;e--)r.skipBits(40),l[e]=r.readBits(1);return{modeBlockflags:l}},yo=(e,t,n)=>{switch(e){case`avc`:for(let e of Ia(n,t)){let t=n[e.offset],r=La(t);if(r>=Ma.NON_IDR_SLICE&&r<=Ma.SLICE_DPC)return`delta`;if(r===Ma.IDR)return`key`;if(r===Ma.SEI&&(!Vr()||Ur()>=144)){let t=Ra(n.subarray(e.offset,e.offset+e.length)),r=1;do{let e=0;for(;;){let n=t[r++];if(n===void 0||(e+=n,n<255))break}let n=0;for(;;){let e=t[r++];if(e===void 0||(n+=e,e<255))break}if(e===6){let e=new I(t);e.pos=8*r;let n=k(e),i=e.readBits(1);if(n===0&&i===1)return`key`}r+=n}while(r<t.length-1)}}return`delta`;case`hevc`:for(let e of Xa(n,t)){let t=Za(n[e.offset]);if(t<Na.BLA_W_LP)return`delta`;if(t<=Na.RSV_IRAP_VCL23)return`key`}return`delta`;case`vp8`:return n[0]&1?`delta`:`key`;case`vp9`:{let e=new I(n);if(e.readBits(2)!==2)return null;let t=e.readBits(1);return(e.readBits(1)<<1)+t===3&&e.skipBits(1),e.readBits(1)?null:e.readBits(1)===0?`key`:`delta`}case`av1`:{let e=!1;for(let{type:t,data:r}of po(n))if(t===1){let t=new I(r);t.skipBits(4),e=!!t.readBits(1)}else if(t===3||t===6||t===7){if(e)return`key`;let t=new I(r);return t.readBits(1)?null:t.readBits(2)===0?`key`:`delta`}return null}default:pr(e),D(!1)}},(function(e){e[e.STREAMINFO=0]=`STREAMINFO`,e[e.VORBIS_COMMENT=4]=`VORBIS_COMMENT`,e[e.PICTURE=6]=`PICTURE`})(bo||={}),xo=(e,t)=>{let n=j(e),r=0,i=n.getUint32(r,!0);r+=4;let a=Wn.decode(e.subarray(r,r+i));r+=i,i>0&&(t.raw??={},t.raw.vendor??=a);let o=n.getUint32(r,!0);r+=4;for(let i=0;i<o;i++){let i=n.getUint32(r,!0);r+=4;let a=Wn.decode(e.subarray(r,r+i));r+=i;let o=a.indexOf(`=`);if(o===-1)continue;let s=a.slice(0,o).toUpperCase(),c=a.slice(o+1);switch(t.raw??={},t.raw[s]??=c,s){case`TITLE`:t.title??=c;break;case`DESCRIPTION`:t.description??=c;break;case`ARTIST`:t.artist??=c;break;case`ALBUM`:t.album??=c;break;case`ALBUMARTIST`:t.albumArtist??=c;break;case`COMMENT`:t.comment??=c;break;case`LYRICS`:t.lyrics??=c;break;case`TRACKNUMBER`:{let e=c.split(`/`),n=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(n)&&n>0&&(t.trackNumber??=n),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??=r)}break;case`TRACKTOTAL`:{let e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??=e)}break;case`DISCNUMBER`:{let e=c.split(`/`),n=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(n)&&n>0&&(t.discNumber??=n),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??=r)}break;case`DISCTOTAL`:{let e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(t.discsTotal??=e)}break;case`DATE`:{let e=new Date(c);Number.isNaN(e.getTime())||(t.date??=e)}break;case`GENRE`:t.genre??=c;break;case`METADATA_BLOCK_PICTURE`:{let e=Jr(c),n=j(e),r=n.getUint32(0,!1),i=n.getUint32(4,!1),a=String.fromCharCode(...e.subarray(8,8+i)),o=n.getUint32(8+i,!1),s=Wn.decode(e.subarray(12+i,12+i+o)),l=n.getUint32(i+o+28),u=e.subarray(i+o+32,i+o+32+l);t.images??=[],t.images.push({data:u,mimeType:a,kind:r===3?`coverFront`:r===4?`coverBack`:`unknown`,name:void 0,description:s||void 0})}break}}},So=(e,t,n)=>{let r=[e],i=M.encode(`Mediabunny`),a=new Uint8Array(4+i.length),o=new DataView(a.buffer);o.setUint32(0,i.length,!0),a.set(i,4),r.push(a);let s=new Set,c=(e,t)=>{let n=`${e}=${t}`,i=M.encode(n);a=new Uint8Array(4+i.length),o=new DataView(a.buffer),o.setUint32(0,i.length,!0),a.set(i,4),r.push(a),s.add(e)};for(let{key:e,value:r}of Kr(t))switch(e){case`title`:c(`TITLE`,r);break;case`description`:c(`DESCRIPTION`,r);break;case`artist`:c(`ARTIST`,r);break;case`album`:c(`ALBUM`,r);break;case`albumArtist`:c(`ALBUMARTIST`,r);break;case`genre`:c(`GENRE`,r);break;case`date`:{let e=t.raw?.DATE??t.raw?.date;e&&typeof e==`string`?c(`DATE`,e):c(`DATE`,r.toISOString().slice(0,10))}break;case`comment`:c(`COMMENT`,r);break;case`lyrics`:c(`LYRICS`,r);break;case`trackNumber`:c(`TRACKNUMBER`,r.toString());break;case`tracksTotal`:c(`TRACKTOTAL`,r.toString());break;case`discNumber`:c(`DISCNUMBER`,r.toString());break;case`discsTotal`:c(`DISCTOTAL`,r.toString());break;case`images`:if(!n)break;for(let e of r){let t=e.kind===`coverFront`?3:e.kind===`coverBack`?4:0,n=new Uint8Array(e.mimeType.length);for(let t=0;t<e.mimeType.length;t++)n[t]=e.mimeType.charCodeAt(t);let r=M.encode(e.description??``),i=new Uint8Array(8+n.length+4+r.length+16+4+e.data.length),a=j(i);a.setUint32(0,t,!1),a.setUint32(4,n.length,!1),i.set(n,8),a.setUint32(8+n.length,r.length,!1),i.set(r,12+n.length),a.setUint32(28+n.length+r.length,e.data.length,!1),i.set(e.data,32+n.length+r.length),c(`METADATA_BLOCK_PICTURE`,Yr(i))}break;case`raw`:break;default:pr(e)}if(t.raw)for(let e in t.raw){let n=t.raw[e]??t.raw[e.toLowerCase()];e===`vendor`||n==null||s.has(e)||typeof n==`string`&&c(e,n)}let l=new Uint8Array(4);j(l).setUint32(0,s.size,!0),r.splice(2,0,l);let u=r.reduce((e,t)=>e+t.length,0),d=new Uint8Array(u),f=0;for(let e of r)d.set(e,f),f+=e.length;return d},Co=[2,1,2,3,3,4,4,5],wo=e=>{if(e.length<7||e[0]!==11||e[1]!==119)return null;let t=new I(e);t.skipBits(16),t.skipBits(16);let n=t.readBits(2);if(n===3)return null;let r=t.readBits(6),i=t.readBits(5);if(i>8)return null;let a=t.readBits(3),o=t.readBits(3);return o&1&&o!==1&&t.skipBits(2),o&4&&t.skipBits(2),o===2&&t.skipBits(2),{fscod:n,bsid:i,bsmod:a,acmod:o,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},To=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,288*2,384,418,288*2,448,486,336*2,448,488,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],Eo=1536,Do=new Uint8Array([5,4,65,67,45,51]),Oo=new Uint8Array([5,4,69,65,67,51]),ko=[1,2,3,6],Ao=e=>{if(e.length<6||e[0]!==11||e[1]!==119)return null;let t=new I(e);t.skipBits(16);let n=t.readBits(2);if(t.skipBits(3),n!==0&&n!==2)return null;let r=t.readBits(11),i=t.readBits(2),a=0,o;i===3?(a=t.readBits(2),o=3):o=t.readBits(2);let s=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;let u=ko[o],d;return d=i<3?ka[i]/1e3:Aa[a]/1e3,{dataRate:Math.round((r+1)*d/(u*16)),substreams:[{fscod:i,fscod2:a,bsid:l,bsmod:0,acmod:s,lfeon:c,numDepSub:0,chanLoc:0}]}},jo=e=>{if(e.length<2)return null;let t=new I(e),n=t.readBits(13),r=t.readBits(3),i=[];for(let n=0;n<=r&&!(Math.ceil(t.pos/8)+3>e.length);n++){let e=t.readBits(2),n=t.readBits(5);t.skipBits(1),t.skipBits(1);let r=t.readBits(3),a=t.readBits(3),o=t.readBits(1);t.skipBits(3);let s=t.readBits(4),c=0;s>0?c=t.readBits(9):t.skipBits(1),i.push({fscod:e,fscod2:null,bsid:n,bsmod:r,acmod:a,lfeon:o,numDepSub:s,chanLoc:c})}return i.length===0?null:{dataRate:n,substreams:i}},Mo=e=>{let t=e.substreams[0];return D(t),t.fscod<3?ka[t.fscod]:t.fscod2!==null&&t.fscod2<3?Aa[t.fscod2]:null},No=e=>{let t=e.substreams[0];D(t);let n=Co[t.acmod]+t.lfeon;if(t.numDepSub>0){let e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(n+=e[r])}return n}})),Fo,Io=n((()=>{Fo=class{constructor(e){this.input=e}dispose(){}}})),Lo,L,Ro=n((()=>{F(),Lo=new Uint8Array,L=class e{constructor(e,t,n,r,i=-1,a,o){if(this.data=e,this.type=t,this.timestamp=n,this.duration=r,this.sequenceNumber=i,e===Lo&&a===void 0)throw Error(`Internal error: byteLength must be explicitly provided when constructing metadata-only packets.`);if(a===void 0&&(a=e.byteLength),!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(t!==`key`&&t!==`delta`)throw TypeError(`type must be either "key" or "delta".`);if(!Number.isFinite(n))throw TypeError(`timestamp must be a number.`);if(!Number.isFinite(r)||r<0)throw TypeError(`duration must be a non-negative number.`);if(!Number.isFinite(i))throw TypeError(`sequenceNumber must be a number.`);if(!Number.isInteger(a)||a<0)throw TypeError(`byteLength must be a non-negative integer.`);if(o!==void 0&&(typeof o!=`object`||!o))throw TypeError(`sideData, when provided, must be an object.`);if(o?.alpha!==void 0&&!(o.alpha instanceof Uint8Array))throw TypeError(`sideData.alpha, when provided, must be a Uint8Array.`);if(o?.alphaByteLength!==void 0&&(!Number.isInteger(o.alphaByteLength)||o.alphaByteLength<0))throw TypeError(`sideData.alphaByteLength, when provided, must be a non-negative integer.`);this.byteLength=a,this.sideData=o??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===Lo}get microsecondTimestamp(){return Math.trunc(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to a video chunk.`);if(typeof EncodedVideoChunk>`u`)throw Error(`Your browser does not support EncodedVideoChunk.`);return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw TypeError(`This packet does not contain alpha side data.`);if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to a video chunk.`);if(typeof EncodedVideoChunk>`u`)throw Error(`Your browser does not support EncodedVideoChunk.`);return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to an audio chunk.`);if(typeof EncodedAudioChunk>`u`)throw 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,n){if(!(t instanceof EncodedVideoChunk||t instanceof EncodedAudioChunk))throw TypeError(`chunk must be an EncodedVideoChunk or EncodedAudioChunk.`);let r=new Uint8Array(t.byteLength);return t.copyTo(r),new e(r,t.type,t.timestamp/1e6,(t.duration??0)/1e6,void 0,void 0,n)}clone(t){if(t!==void 0&&(typeof t!=`object`||!t))throw TypeError(`options, when provided, must be an object.`);if(t?.data!==void 0&&!(t.data instanceof Uint8Array))throw TypeError(`options.data, when provided, must be a Uint8Array.`);if(t?.type!==void 0&&t.type!==`key`&&t.type!==`delta`)throw TypeError(`options.type, when provided, must be either "key" or "delta".`);if(t?.timestamp!==void 0&&!Number.isFinite(t.timestamp))throw TypeError(`options.timestamp, when provided, must be a number.`);if(t?.duration!==void 0&&!Number.isFinite(t.duration))throw TypeError(`options.duration, when provided, must be a number.`);if(t?.sequenceNumber!==void 0&&!Number.isFinite(t.sequenceNumber))throw TypeError(`options.sequenceNumber, when provided, must be a number.`);if(t?.sideData!==void 0&&(typeof t.sideData!=`object`||t.sideData===null))throw TypeError(`options.sideData, when provided, must be an object.`);return new e(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)}}})),zo,Bo,Vo,Ho=n((()=>{F(),zo=e=>{let t=(e.hasVideo?`video/`:e.hasAudio?`audio/`:`application/`)+(e.isQuickTime?`quicktime`:`mp4`);if(e.codecStrings.length>0){let n=[...new Set(e.codecStrings)];t+=`; codecs="${n.join(`, `)}"`}return t},Bo=e=>{let t=j(e),n=0,r=t.getUint8(n);n+=1,n+=3;let i=rr(e.subarray(n,n+16));n+=16;let a=null;if(r>0){let r=t.getUint32(n);if(n+=4,r>0){a=[];for(let t=0;t<r;t++)a.push(rr(e.subarray(n,n+16))),n+=16}}let o=t.getUint32(n);return n+=4,{systemId:i,keyIds:a,data:e.slice(n,n+o)}},Vo=(e,t)=>e.systemId===t.systemId&&Xr(e.data,t.data)})),Uo,Wo,Go,Ko,qo,Jo,Yo,Xo,Zo=n((()=>{Ei(),F(),G(),Uo=8,Wo=16,Go=e=>{let t=U(e),n=W(e,4),r=8;t===1&&(t=Fp(e),r=16);let i=t-r;return i<0?null:{name:n,totalSize:t,headerSize:r,contentSize:i}},Ko=e=>Mp(e)/65536,qo=e=>Mp(e)/1073741824,Jo=e=>{let t=0;for(let n=0;n<4;n++){t<<=7;let n=H(e);if(t|=n&127,!(n&128))break}return t},Yo=e=>{let t=Dp(e);return e.skip(2),t=Math.min(t,e.remainingLength),Wn.decode(V(e,t))},Xo=e=>{let t=Go(e);if(!t||t.name!==`data`||e.remainingLength<8)return null;let n=U(e);e.skip(4);let r=V(e,t.contentSize-8);switch(n){case 1:return Wn.decode(r);case 2:return new TextDecoder(`utf-16be`).decode(r);case 13:return new bi(r,`image/jpeg`);case 14:return new bi(r,`image/png`);case 27:return new bi(r,`image/bmp`);default:return r}}})),Qo,$o,es,ts,ns,rs,is,as,os,ss,cs,ls,us=n((()=>{F(),G(),Qo=16,$o=new Uint32Array(256),es=new Uint32Array(256),ts=new Uint32Array(256),ns=new Uint32Array(256),rs=new Uint32Array(256),is=new Uint32Array(256),as=new Uint32Array(10),os=!1,ss=()=>{let e=new Uint8Array(256),t=new Uint8Array(256),n=new Uint8Array(256);for(let e=0,r=1;e<256;e++)n[e]=r,t[r]=e,r=r^r<<1^(r&128?283:0);let r=(e,r)=>e&&r?n[(t[e]+t[r])%255]:0;e[0]=99;for(let r=1;r<256;r++){let i=n[255-t[r]],a=i^i<<1^i<<2^i<<3^i<<4;a=a>>>8^a&255^99,e[r]=a}for(let t=0;t<256;t++){let n=e[t],i=e.indexOf(t);$o[t]=n<<24|n<<16|n<<8|n,is[t]=i<<24|i<<16|i<<8|i;let a=r(i,14),o=r(i,9),s=r(i,13),c=r(i,11),l=a<<24|o<<16|s<<8|c;es[t]=l,ts[t]=l>>>8|l<<24,ns[t]=l>>>16|l<<16,rs[t]=l>>>24|l<<8}let i=1;for(let e=0;e<10;e++)as[e]=i<<24,i=i<<1^(i&128?283:0);os=!0},cs=class{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(Qo/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(Qo),this.out=new Uint8Array(Qo),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){D(e.byteLength===16),D(t.byteLength===16),os||ss();let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=n.getUint32(0,!1),this.roundkey[1]=n.getUint32(4,!1),this.roundkey[2]=n.getUint32(8,!1),this.roundkey[3]=n.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let e=4;e<44;e+=4){let t=this.roundkey[e-1];this.roundkey[e]=this.roundkey[e-4]^$o[t>>>16&255]&4278190080^$o[t>>>8&255]&16711680^$o[t>>>0&255]&65280^$o[t>>>24&255]&255^as[e/4-1],this.roundkey[e+1]=this.roundkey[e-3]^this.roundkey[e],this.roundkey[e+2]=this.roundkey[e-2]^this.roundkey[e+1],this.roundkey[e+3]=this.roundkey[e-1]^this.roundkey[e+2]}for(let e=0,t=40;e<t;e+=4,t-=4)for(let n=0;n<4;n++){let r=this.roundkey[e+n];this.roundkey[e+n]=this.roundkey[t+n],this.roundkey[t+n]=r}for(let e=4;e<40;e+=4)for(let t=0;t<4;t++){let n=this.roundkey[e+t];this.roundkey[e+t]=es[$o[n>>>24&255]&255]^ts[$o[n>>>16&255]&255]^ns[$o[n>>>8&255]&255]^rs[$o[n>>>0&255]&255]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],n=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3],i=this.inView.getUint32(0,!1),a=this.inView.getUint32(4,!1),o=this.inView.getUint32(8,!1),s=this.inView.getUint32(12,!1),c,l,u,d;for(let i=1;i<10;i++){let a=i*4;c=es[e>>>24]^ts[r>>>16&255]^ns[n>>>8&255]^rs[t&255]^this.roundkey[a],l=es[t>>>24]^ts[e>>>16&255]^ns[r>>>8&255]^rs[n&255]^this.roundkey[a+1],u=es[n>>>24]^ts[t>>>16&255]^ns[e>>>8&255]^rs[r&255]^this.roundkey[a+2],d=es[r>>>24]^ts[n>>>16&255]^ns[t>>>8&255]^rs[e&255]^this.roundkey[a+3],e=c,t=l,n=u,r=d}let f=is[e>>>24&255]&4278190080^is[r>>>16&255]&16711680^is[n>>>8&255]&65280^is[t>>>0&255]&255^this.roundkey[40],p=is[t>>>24&255]&4278190080^is[e>>>16&255]&16711680^is[r>>>8&255]&65280^is[n>>>0&255]&255^this.roundkey[41],m=is[n>>>24&255]&4278190080^is[t>>>16&255]&16711680^is[e>>>8&255]&65280^is[r>>>0&255]&255^this.roundkey[42],h=is[r>>>24&255]&4278190080^is[n>>>16&255]&16711680^is[t>>>8&255]&65280^is[e>>>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,m^this.iv[2],!1),this.outView.setUint32(12,h^this.iv[3],!1),this.iv[0]=i,this.iv[1]=a,this.iv[2]=o,this.iv[3]=s}},ls=(e,t,n)=>{let r=!1,i=0,a=2**16,o=new cs;return new ReadableStream({pull:async s=>{r||=(o.init(await t()),!0);let c=a+16,l=e.requestSliceRange(i,0,c);if(l instanceof Promise&&(l=await l),!l||l.length===0)throw Error(`Invalid ciphertext.`);let u=l.length;if(u%16!=0)throw Error(`Invalid ciphertext.`);let d=u===c?u-16:u,f=V(l,d),p=new Uint8Array(d);for(let e=0;e<d;e+=16)o.in.set(f.subarray(e,e+16)),o.decrypt(),p.set(o.out,e);if(d<u)s.enqueue(p),i+=d;else{let e=p[d-1];if(e===0||e>16)throw Error(`Invalid PKCS#7 padding. Incorrect key or corrupted data.`);let t=p.subarray(0,d-e);s.enqueue(t),s.close(),n()}},cancel:()=>{n()}})}})),ds,fs,ps,ms,hs,gs,_s,vs,ys,bs,xs,Ss,Cs,ws,Ts,Es,Ds,Os=n((()=>{Pi(),ha(),Po(),Io(),F(),Ro(),Ho(),Zo(),G(),Ei(),ja(),Di(),us(),ds=class e extends Fo{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(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return zo({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>e.info?.type===`video`),hasAudio:this.tracks.some(e=>e.info?.type===`audio`),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??=(async()=>{let t=0,n=!1;for(;;){let r=this.reader.requestSliceRange(t,Uo,Wo);if(r instanceof Promise&&(r=await r),!r)break;let i=t,a=Go(r);if(!a)break;if(a.name===`ftyp`||a.name===`styp`)this.isQuickTime=W(r,4)===`qt `;else if(a.name===`moov`){let e=this.reader.requestSlice(r.filePos,a.contentSize);if(e instanceof Promise&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(let e of this.tracks){let t=e.editListPreviousSegmentDurations/this.movieTimescale;e.editListOffset-=Math.round(t*e.timescale)}n=this.isFragmented&&this.reader.fileSize!==null&&this.reader.fileSize>i+a.totalSize;break}else if(a.name===`moof`){if(!this.input._initInput)throw 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 t=await this.input._initInput._getDemuxer();if(t.constructor!==e)throw Error(`Init input must match the input's format.`);await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(let e of t.tracks){let t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};e.trackBacking&&(D(t.info),t.info.type===`video`&&t.info.width!==-1?(t.trackBacking=new ps(t),this.tracks.push(t)):t.info.type===`audio`&&t.info.numberOfChannels!==-1&&(t.trackBacking=new ms(t),this.tracks.push(t)))}n=!1;break}t=i+a.totalSize}if(n){D(this.reader.fileSize!==null);let e=this.reader.requestSlice(this.reader.fileSize-4,4);e instanceof Promise&&(e=await e),D(e);let t=U(e),n=this.reader.fileSize-t;if(n>=0&&n<=this.reader.fileSize-Wo){let e=this.reader.requestSliceRange(n,Uo,Wo);if(e instanceof Promise&&(e=await e),e){let t=Go(e);if(t&&t.name===`mfra`){let n=this.reader.requestSlice(e.filePos,t.contentSize);n instanceof Promise&&(n=await n),n&&this.readContiguousBoxes(n)}}}}})()}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;let t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,e.sampleTableByteOffset===null)return t;D(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&&Ii.includes(e.info.codec)&&t.sampleCompositionTimeOffsets.length===0){D(e.info?.type===`audio`);let n=na(e.info.codec),r=[],i=[];for(let a=0;a<t.sampleToChunk.length;a++){let o=t.sampleToChunk[a],s=t.sampleToChunk[a+1],c=(s?s.startChunkIndex:t.chunkOffsets.length)-o.startChunkIndex;for(let a=0;a<c;a++){let s=o.startSampleIndex+a*o.samplesPerChunk,c=s+o.samplesPerChunk,l=N(t.sampleTimingEntries,s,e=>e.startIndex),u=t.sampleTimingEntries[l],d=N(t.sampleTimingEntries,c,e=>e.startIndex),f=t.sampleTimingEntries[d],p=u.startDecodeTimestamp+(s-u.startIndex)*u.delta,m=f.startDecodeTimestamp+(c-f.startIndex)*f.delta-p,h=O(r);h&&h.delta===m?h.count++:r.push({startIndex:o.startChunkIndex+a,startDecodeTimestamp:p,count:1,delta:m});let g=o.samplesPerChunk*n.sampleSize*e.info.numberOfChannels;i.push(g)}o.startSampleIndex=o.startChunkIndex,o.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=i}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(let e of t.sampleTimingEntries)for(let n=0;n<e.count;n++)t.presentationTimestamps.push({presentationTimestamp:e.startDecodeTimestamp+n*e.delta,sampleIndex:e.startIndex+n});for(let e of t.sampleCompositionTimeOffsets)for(let n=0;n<e.count;n++){let r=e.startIndex+n,i=t.presentationTimestamps[r];i&&(i.presentationTimestamp+=e.offset)}t.presentationTimestamps.sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;e<t.presentationTimestamps.length;e++)t.presentationTimestampIndexMap[t.presentationTimestamps[e].sampleIndex]=e}return t}async readFragment(e){if(this.lastReadFragment?.moofOffset===e)return this.lastReadFragment;let t=this.reader.requestSliceRange(e,Uo,Wo);t instanceof Promise&&(t=await t),D(t);let n=Go(t);D(n?.name===`moof`);let r=this.reader.requestSlice(e,n.totalSize);r instanceof Promise&&(r=await r),D(r),this.traverseBox(r);let i=this.lastReadFragment;D(i&&i.moofOffset===e);for(let[,e]of i.trackData){let t=e.track,{fragmentPositionCache:n}=t;if(!e.startTimestampIsFinal){let r=t.fragmentLookupTable.find(e=>e.moofOffset===i.moofOffset);if(r)ys(e,r.timestamp);else{let t=N(n,i.moofOffset-1,e=>e.moofOffset);if(t!==-1){let r=n[t];ys(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}let r=N(n,e.startTimestamp,e=>e.startTimestamp);if((r===-1||n[r].moofOffset!==i.moofOffset)&&n.splice(r+1,0,{moofOffset:i.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){let n=await Cs(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t<Math.min(e.samples.length,n.length);t++){let r=n[t];e.samples[t].encryption=r}}}return i}readContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Uo&&this.traverseBox(e););}*iterateContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Uo;){let t=e.filePos,n=Go(e);if(!n)break;yield{boxInfo:n,slice:e},e.filePos=t+n.totalSize}}traverseBox(e){let t=e.filePos,n=Go(e);if(!n)return!1;let r=e.filePos,i=t+n.totalSize;switch(n.name){case`mdia`:case`minf`:case`dinf`:case`mfra`:case`edts`:case`sinf`:case`schi`:this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`mvhd`:{let t=H(e);e.skip(3),t===1?(e.skip(16),this.movieTimescale=U(e),this.movieDurationInTimescale=Fp(e)):(e.skip(8),this.movieTimescale=U(e),this.movieDurationInTimescale=U(e))}break;case`trak`:{let t={id:-1,demuxer:this,trackBacking:null,disposition:{...wi,primary:!1},info:null,timescale:-1,durationInMovieTimescale:-1,durationInMediaTimescale:-1,rotation:0,internalCodecId:null,name:null,languageCode:xr,sampleTableByteOffset:-1,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:0,editListOffset:0,encryptionInfo:null,encryptionAuxInfo:null,frmaCodecString:null};this.currentTrack=t,this.readContiguousBoxes(e.slice(r,n.contentSize)),t.id!==-1&&t.timescale!==-1&&t.info!==null&&(t.info.type===`video`&&t.info.width!==-1?(t.trackBacking=new ps(t),this.tracks.push(t)):t.info.type===`audio`&&t.info.numberOfChannels!==-1&&(t.trackBacking=new ms(t),this.tracks.push(t))),this.currentTrack=null}break;case`tkhd`:{let t=this.currentTrack;if(!t)break;let n=H(e),r=!!(Op(e)&1);if(t.disposition.default=r,n===0)e.skip(8),t.id=U(e),e.skip(4),t.durationInMovieTimescale=U(e);else if(n===1)e.skip(16),t.id=U(e),e.skip(4),t.durationInMovieTimescale=Fp(e);else throw Error(`Incorrect track header version ${n}.`);e.skip(16);let i=Bn(Cr(bs([Ko(e),Ko(e),qo(e),Ko(e),Ko(e),qo(e),Ko(e),Ko(e),qo(e)]),90));D(i===0||i===90||i===180||i===270),t.rotation=i}break;case`elst`:{let t=this.currentTrack;if(!t)break;let n=H(e);e.skip(3);let r=!1,i=0,a=U(e);for(let o=0;o<a;o++){let a=n===1?Fp(e):U(e),o=n===1?Ip(e):Mp(e),s=Ko(e);if(a!==0){if(r){console.warn(`Unsupported edit list: multiple edits are not currently supported. Only using first edit.`);break}if(o===-1){i+=a;continue}if(s!==1){console.warn(`Unsupported edit list entry: media rate must be 1.`);break}t.editListPreviousSegmentDurations=i,t.editListOffset=o,r=!0}}}break;case`mdhd`:{let t=this.currentTrack;if(!t)break;let n=H(e);e.skip(3),n===0?(e.skip(8),t.timescale=U(e),t.durationInMediaTimescale=U(e)):n===1&&(e.skip(16),t.timescale=U(e),t.durationInMediaTimescale=Fp(e));let r=Dp(e);if(r>0){t.languageCode=``;for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(r&31))+t.languageCode,r>>=5;kr(t.languageCode)||(t.languageCode=xr)}}break;case`hdlr`:{let t=this.currentTrack;if(!t)break;e.skip(8);let n=W(e,4);n===`vide`?t.info={type:`video`,width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}:n===`soun`&&(t.info={type:`audio`,numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case`stbl`:{let i=this.currentTrack;if(!i)break;i.sampleTableByteOffset=t,this.readContiguousBoxes(e.slice(r,n.contentSize))}break;case`stsd`:{let t=this.currentTrack;if(!t||t.info===null||t.sampleTable)break;let n=H(e);e.skip(3);let r=U(e);for(let i=0;i<r;i++){let r=e.filePos,i=Go(e);if(!i)break;t.internalCodecId=i.name;let a=i.name.toLowerCase();if(t.info.type===`video`){e.skip(24),t.info.width=Dp(e),t.info.height=Dp(e),t.info.squarePixelWidth=t.info.width,t.info.squarePixelHeight=t.info.height,e.skip(50),t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+i.totalSize-e.filePos));let n=a===`encv`?t.frmaCodecString:a;t.frmaCodecString=null,n===`avc1`||n===`avc3`?(t.info.codec=`avc`,t.info.avcType=n===`avc1`?1:3):n===`hvc1`||n===`hev1`?t.info.codec=`hevc`:n===`vp08`?t.info.codec=`vp8`:n===`vp09`?t.info.codec=`vp9`:n===`av01`?t.info.codec=`av1`:n===null?console.warn(`Unknown encrypted video codec due to missing frma box.`):console.warn(`Unsupported video codec (sample entry type '${i.name}').`)}else{e.skip(8);let o=Dp(e);e.skip(6);let s=Dp(e),c=Dp(e);e.skip(4);let l=U(e)/65536,u=null;n===0&&o>0&&(o===1?(e.skip(4),c=8*U(e),e.skip(8)):o===2&&(e.skip(4),l=zp(e),s=U(e),e.skip(4),c=U(e),u=U(e),e.skip(8))),t.info.numberOfChannels=s,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+i.totalSize-e.filePos));let d=a===`enca`?t.frmaCodecString:a;if(t.frmaCodecString=null,d!==`mp4a`)if(d===`opus`)t.info.codec=`opus`,t.info.sampleRate=ea;else if(d===`flac`)t.info.codec=`flac`;else if(d===`ulaw`)t.info.codec=`ulaw`;else if(d===`alaw`)t.info.codec=`alaw`;else if(d===`ac-3`)t.info.codec=`ac3`;else if(d===`ec-3`)t.info.codec=`eac3`;else if(d===`twos`)c===8?t.info.codec=`pcm-s8`:c===16?t.info.codec=t.info.pcmLittleEndian?`pcm-s16`:`pcm-s16be`:(console.warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if(d===`sowt`)c===8?t.info.codec=`pcm-s8`:c===16?t.info.codec=`pcm-s16`:(console.warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if(d===`raw `)t.info.codec=`pcm-u8`;else if(d===`in24`)t.info.codec=t.info.pcmLittleEndian?`pcm-s24`:`pcm-s24be`;else if(d===`in32`)t.info.codec=t.info.pcmLittleEndian?`pcm-s32`:`pcm-s32be`;else if(d===`fl32`)t.info.codec=t.info.pcmLittleEndian?`pcm-f32`:`pcm-f32be`;else if(d===`fl64`)t.info.codec=t.info.pcmLittleEndian?`pcm-f64`:`pcm-f64be`;else if(d===`ipcm`){let e=t.info.pcmSampleSize;t.info.pcmLittleEndian?e===16?t.info.codec=`pcm-s16`:e===24?t.info.codec=`pcm-s24`:e===32?t.info.codec=`pcm-s32`:(console.warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):e===16?t.info.codec=`pcm-s16be`:e===24?t.info.codec=`pcm-s24be`:e===32?t.info.codec=`pcm-s32be`:(console.warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if(d===`fpcm`){let e=t.info.pcmSampleSize;t.info.pcmLittleEndian?e===32?t.info.codec=`pcm-f32`:e===64?t.info.codec=`pcm-f64`:(console.warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):e===32?t.info.codec=`pcm-f32be`:e===64?t.info.codec=`pcm-f64be`:(console.warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if(d===`lpcm`&&u!==null){let e=c+7>>3,n=!!(u&1),r=!!(u&2),i=u&4?-1:0;c>0&&c<=64&&(n?c===32&&(t.info.codec=r?`pcm-f32be`:`pcm-f32`):i&1<<e-1?e===1?t.info.codec=`pcm-s8`:e===2?t.info.codec=r?`pcm-s16be`:`pcm-s16`:e===3?t.info.codec=r?`pcm-s24be`:`pcm-s24`:e===4&&(t.info.codec=r?`pcm-s32be`:`pcm-s32`):e===1&&(t.info.codec=`pcm-u8`)),t.info.codec===null&&console.warn(`Unsupported PCM format.`)}else d===null?console.warn(`Unknown encrypted audio codec due to missing frma box.`):console.warn(`Unsupported audio codec (sample entry type '${i.name}').`)}e.filePos=r+i.totalSize}}break;case`frma`:{let t=this.currentTrack;if(!t)break;t.frmaCodecString=W(e,4).toLowerCase()}break;case`schm`:{let t=this.currentTrack;if(!t)break;e.skip(4);let n=W(e,4);n===`cenc`||n===`cens`||n===`cbcs`?t.encryptionInfo={scheme:n,defaultKid:null,defaultIsProtected:null,defaultPerSampleIvSize:null,defaultConstantIv:null,defaultCryptByteBlock:null,defaultSkipByteBlock:null}:console.warn(`Unsupported encryption scheme '${n}'.`)}break;case`tenc`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;let n=H(e);e.skip(3),e.skip(1);let r=H(e);if(n>0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=r&15):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=H(e)!==0,t.encryptionInfo.defaultPerSampleIvSize=H(e),t.encryptionInfo.defaultKid=rr(V(e,16)),t.encryptionInfo.defaultIsProtected&&t.encryptionInfo.defaultPerSampleIvSize===0){let n=H(e),r=new Uint8Array(16);r.set(V(e,n),0),t.encryptionInfo.defaultConstantIv=r}}break;case`avcC`:{let t=this.currentTrack;if(!t)break;D(t.info),t.info.codecDescription=V(e,n.contentSize)}break;case`hvcC`:{let t=this.currentTrack;if(!t)break;D(t.info),t.info.codecDescription=V(e,n.contentSize)}break;case`vpcC`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`),e.skip(4);let n=H(e),r=H(e),i=H(e),a=i>>4,o=i>>1&7,s=i&1,c=H(e),l=H(e),u=H(e);t.info.vp9CodecInfo={profile:n,level:r,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:s,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case`av1C`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`),e.skip(1);let n=H(e),r=n>>5,i=n&31,a=H(e),o=a>>7,s=a>>6&1,c=a>>5&1,l=a>>4&1,u=a>>3&1,d=a>>2&1,f=a&3,p=r===2&&s?c?12:10:s?10:8;t.info.av1CodecInfo={profile:r,level:i,tier:o,bitDepth:p,monochrome:l,chromaSubsamplingX:u,chromaSubsamplingY:d,chromaSamplePosition:f}}break;case`colr`:{let t=this.currentTrack;if(!t||(D(t.info?.type===`video`),W(e,4)!==`nclx`))break;let n=Dp(e),r=Dp(e),i=Dp(e),a=!!(H(e)&128);t.info.colorSpace={primaries:Jn[n],transfer:Xn[r],matrix:Qn[i],fullRange:a}}break;case`pasp`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`);let n=U(e),r=U(e);n>0&&r>0&&(n>r?t.info.squarePixelWidth=Math.round(t.info.width*n/r):t.info.squarePixelHeight=Math.round(t.info.height*r/n))}break;case`wave`:this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`esds`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4),D(H(e)===3),Jo(e),e.skip(2);let n=H(e),r=(n&128)!=0,i=(n&64)!=0,a=(n&32)!=0;if(r&&e.skip(2),i){let t=H(e);e.skip(t)}a&&e.skip(2),D(H(e)===4);let o=Jo(e),s=e.filePos,c=H(e);if(c===64||c===103?(t.info.codec=`aac`,t.info.aacCodecInfo={isMpeg2:c===103,objectType:null}):c===105||c===107?t.info.codec=`mp3`:c===221?t.info.codec=`vorbis`:console.warn(`Unsupported audio codec (objectTypeIndication ${c}) - discarding track.`),e.skip(12),o>e.filePos-s){D(H(e)===5);let n=Jo(e);if(t.info.codecDescription=V(e,n),t.info.codec===`aac`){let e=Ai(t.info.codecDescription);e.numberOfChannels!==null&&(t.info.numberOfChannels=e.numberOfChannels),e.sampleRate!==null&&(t.info.sampleRate=e.sampleRate)}}}break;case`enda`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),t.info.pcmLittleEndian=!!(Dp(e)&255)}break;case`pcmC`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4);let n=H(e);t.info.pcmLittleEndian=!!(n&1),t.info.pcmSampleSize=H(e)}break;case`dOps`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(1);let n=H(e),r=Dp(e),i=U(e),a=kp(e),o=H(e),s;s=o===0?new Uint8Array:V(e,2+n);let c=new Uint8Array(19+s.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,n),l.setUint16(10,r,!0),l.setUint32(12,i,!0),l.setInt16(16,a,!0),l.setUint8(18,o),c.set(s,19),t.info.codecDescription=c,t.info.numberOfChannels=n}break;case`dfLa`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4);let n=e.filePos;for(;e.filePos<i;){let n=H(e),r=Op(e);if((n&127)===bo.STREAMINFO){e.skip(10);let n=U(e),r=n>>>12,i=(n>>9&7)+1;t.info.sampleRate=r,t.info.numberOfChannels=i,e.skip(20)}else e.skip(r);if(n&128)break}let r=e.filePos;e.filePos=n;let a=V(e,r-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case`dac3`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`);let n=new I(V(e,3)),r=n.readBits(2);n.skipBits(8);let i=n.readBits(3),a=n.readBits(1);r<3&&(t.info.sampleRate=ka[r]),t.info.numberOfChannels=Co[i]+a}break;case`dec3`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`);let r=jo(V(e,n.contentSize));if(!r){console.warn(`Invalid dec3 box contents, ignoring.`);break}let i=Mo(r);i!==null&&(t.info.sampleRate=i),t.info.numberOfChannels=No(r)}break;case`stts`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e),r=0,i=0;for(let a=0;a<n;a++){let n=U(e),a=U(e);t.sampleTable.sampleTimingEntries.push({startIndex:r,startDecodeTimestamp:i,count:n,delta:a}),r+=n,i+=n*a}}break;case`ctts`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e),r=0;for(let i=0;i<n;i++){let n=U(e),i=Mp(e);t.sampleTable.sampleCompositionTimeOffsets.push({startIndex:r,count:n,offset:i}),r+=n}}break;case`stsz`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e),r=U(e);if(n===0)for(let n=0;n<r;n++){let n=U(e);t.sampleTable.sampleSizes.push(n)}else t.sampleTable.sampleSizes.push(n)}break;case`stz2`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4),e.skip(3);let n=H(e),r=U(e),i=new I(V(e,Math.ceil(r*n/8)));for(let e=0;e<r;e++){let e=i.readBits(n);t.sampleTable.sampleSizes.push(e)}}break;case`stss`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4),t.sampleTable.keySampleIndices=[];let n=U(e);for(let r=0;r<n;r++){let n=U(e)-1;t.sampleTable.keySampleIndices.push(n)}t.sampleTable.keySampleIndices[0]!==0&&t.sampleTable.keySampleIndices.unshift(0)}break;case`stsc`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e);for(let r=0;r<n;r++){let n=U(e)-1,r=U(e),i=U(e);t.sampleTable.sampleToChunk.push({startSampleIndex:-1,startChunkIndex:n,samplesPerChunk:r,sampleDescriptionIndex:i})}let r=0;for(let e=0;e<t.sampleTable.sampleToChunk.length;e++)if(t.sampleTable.sampleToChunk[e].startSampleIndex=r,e<t.sampleTable.sampleToChunk.length-1){let n=t.sampleTable.sampleToChunk[e+1].startChunkIndex-t.sampleTable.sampleToChunk[e].startChunkIndex;r+=n*t.sampleTable.sampleToChunk[e].samplesPerChunk}}break;case`stco`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e);for(let r=0;r<n;r++){let n=U(e);t.sampleTable.chunkOffsets.push(n)}}break;case`co64`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=U(e);for(let r=0;r<n;r++){let n=Fp(e);t.sampleTable.chunkOffsets.push(n)}}break;case`mvex`:this.isFragmented=!0,this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`mehd`:{let t=H(e);e.skip(3),this.movieDurationInTimescale=t===1?Fp(e):U(e)}break;case`trex`:{e.skip(4);let t=U(e),n=U(e),r=U(e),i=U(e),a=U(e);this.fragmentTrackDefaults.push({trackId:t,defaultSampleDescriptionIndex:n,defaultSampleDuration:r,defaultSampleSize:i,defaultSampleFlags:a})}break;case`tfra`:{let t=H(e);e.skip(3);let n=U(e),r=this.tracks.find(e=>e.id===n);if(!r)break;let i=U(e),a=(i&48)>>4,o=(i&12)>>2,s=i&3,c=[H,Dp,Op,U],l=c[a],u=c[o],d=c[s],f=U(e);for(let n=0;n<f;n++){let n=t===1?Fp(e):U(e),i=t===1?Fp(e):U(e);l(e),u(e),d(e),r.fragmentLookupTable.push({timestamp:n,moofOffset:i})}r.fragmentLookupTable.sort((e,t)=>e.timestamp-t.timestamp);for(let e=0;e<r.fragmentLookupTable.length-1;e++){let t=r.fragmentLookupTable[e],n=r.fragmentLookupTable[e+1];t.timestamp===n.timestamp&&(r.fragmentLookupTable.splice(e+1,1),e--)}}break;case`moof`:this.currentFragment={moofOffset:t,moofSize:n.totalSize,implicitBaseDataOffset:t,trackData:new Map,psshBoxes:[]},this.readContiguousBoxes(e.slice(r,n.contentSize)),this.lastReadFragment=this.currentFragment,this.currentFragment=null;break;case`traf`:if(D(this.currentFragment),this.readContiguousBoxes(e.slice(r,n.contentSize)),this.currentTrack){let e=this.currentFragment.trackData.get(this.currentTrack.id);if(e){this.currentFragment.implicitBaseDataOffset=e.currentOffset,e.presentationTimestamps=e.samples.map((e,t)=>({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let t=0;t<e.presentationTimestamps.length;t++){let n=e.presentationTimestamps[t],r=e.samples[n.sampleIndex];e.firstKeyFrameTimestamp===null&&r.isKeyFrame&&(e.firstKeyFrameTimestamp=r.presentationTimestamp),t<e.presentationTimestamps.length-1&&(r.duration=e.presentationTimestamps[t+1].presentationTimestamp-n.presentationTimestamp)}let t=e.samples[e.presentationTimestamps[0].sampleIndex],n=e.samples[O(e.presentationTimestamps).sampleIndex];e.startTimestamp=t.presentationTimestamp,e.endTimestamp=n.presentationTimestamp+n.duration;let{currentFragmentState:r}=this.currentTrack;D(r),r.startTimestamp!==null&&(ys(e,r.startTimestamp),e.startTimestampIsFinal=!0),r.encryptionAuxInfo&&!e.samples[0].encryption&&(e.encryptionAuxInfo=r.encryptionAuxInfo)}this.currentTrack.currentFragmentState=null,this.currentTrack=null}break;case`pssh`:{if(this.input._formatOptions.isobmff?._suppressPsshParsing)break;let t=Bo(V(e,n.contentSize));this.currentFragment?this.currentFragment.psshBoxes.push(t):this.currentTrack||this.psshBoxes.push(t)}break;case`tfhd`:{D(this.currentFragment),e.skip(1);let t=Op(e),n=!!(t&1),r=!!(t&2),i=!!(t&8),a=!!(t&16),o=!!(t&32),s=!!(t&65536),c=!!(t&131072),l=U(e),u=this.tracks.find(e=>e.id===l);if(!u)break;let d=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:d?.defaultSampleDescriptionIndex??null,defaultSampleDuration:d?.defaultSampleDuration??null,defaultSampleSize:d?.defaultSampleSize??null,defaultSampleFlags:d?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},n?u.currentFragmentState.baseDataOffset=Fp(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=U(e)),i&&(u.currentFragmentState.defaultSampleDuration=U(e)),a&&(u.currentFragmentState.defaultSampleSize=U(e)),o&&(u.currentFragmentState.defaultSampleFlags=U(e)),s&&(u.currentFragmentState.defaultSampleDuration=0)}break;case`tfdt`:{let t=this.currentTrack;if(!t)break;D(t.currentFragmentState);let n=H(e);e.skip(3);let r=n===0?U(e):Fp(e);t.currentFragmentState.startTimestamp=r}break;case`trun`:{let t=this.currentTrack;if(!t)break;D(this.currentFragment),D(t.currentFragmentState);let n=H(e),r=Op(e),i=!!(r&1),a=!!(r&4),o=!!(r&256),s=!!(r&512),c=!!(r&1024),l=!!(r&2048),u=U(e),d=null;i&&(d=Mp(e));let f=null;a&&(f=U(e));let p;if(this.currentFragment.trackData.has(t.id)?(p=this.currentFragment.trackData.get(t.id),d!==null&&(p.currentOffset=t.currentFragmentState.baseDataOffset+d)):(p={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(d??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,p)),u===0){this.currentFragment.implicitBaseDataOffset=p.currentOffset;break}for(let r=0;r<u;r++){let i;o?i=U(e):(D(t.currentFragmentState.defaultSampleDuration!==null),i=t.currentFragmentState.defaultSampleDuration);let a;s?a=U(e):(D(t.currentFragmentState.defaultSampleSize!==null),a=t.currentFragmentState.defaultSampleSize);let u;c?u=U(e):(D(t.currentFragmentState.defaultSampleFlags!==null),u=t.currentFragmentState.defaultSampleFlags),r===0&&f!==null&&(u=f);let d=0;l&&(d=n===0?U(e):Mp(e));let m=!(u&65536);p.samples.push({presentationTimestamp:p.currentTimestamp+d,duration:i,byteOffset:p.currentOffset,byteSize:a,isKeyFrame:m,encryption:null}),p.currentOffset+=a,p.currentTimestamp+=i}}break;case`saiz`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;if(e.skip(1),Op(e)&1){let n=W(e,4),r=U(e);if(n!==t.encryptionInfo.scheme||r!==0)break}let n=H(e),r=U(e),i=null;n===0&&r>0&&(i=V(e,r));let a=Ss(t);a.defaultSampleInfoSize=n,a.sampleSizes=i,a.sampleCount=r}break;case`saio`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;let n=H(e);if(Op(e)&1){let n=W(e,4),r=U(e);if(n!==t.encryptionInfo.scheme||r!==0)break}let r=U(e);if(r===0)break;r>1&&console.warn(`Multiple saio entries are not supported; using the first offset only.`);let i=n===0?U(e):Number(Fp(e));this.currentFragment&&(i+=this.currentFragment.moofOffset);let a=Ss(t);a.offset=i}break;case`senc`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;D(this.currentFragment);let n=this.currentFragment.trackData.get(t.id);if(!n)break;e.skip(1);let r=!!(Op(e)&2),i=U(e),a=t.encryptionInfo.defaultPerSampleIvSize;D(a!==null);for(let o=0;o<Math.min(i,n.samples.length);o++){let i=new Uint8Array(16);a>0?i.set(V(e,a),0):i.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(r){let t=Dp(e);s=[];for(let n=0;n<t;n++){let t=Dp(e),n=U(e);s.push({clearLen:t,protectedLen:n})}}let c=n.samples[o];c.encryption={iv:i,subsamples:s}}}break;case`udta`:{let t=this.iterateContiguousBoxes(e.slice(r,n.contentSize));for(let{boxInfo:e,slice:n}of t){if(e.name!==`meta`&&!this.currentTrack){let t=n.filePos;this.metadataTags.raw??={},e.name[0]===`©`?this.metadataTags.raw[e.name]??=Yo(n):this.metadataTags.raw[e.name]??=V(n,e.contentSize),n.filePos=t}switch(e.name){case`meta`:n.skip(-e.headerSize),this.traverseBox(n);break;case`©nam`:case`name`:this.currentTrack?this.currentTrack.name=Wn.decode(V(n,e.contentSize)):this.metadataTags.title??=Yo(n);break;case`©des`:this.currentTrack||(this.metadataTags.description??=Yo(n));break;case`©ART`:this.currentTrack||(this.metadataTags.artist??=Yo(n));break;case`©alb`:this.currentTrack||(this.metadataTags.album??=Yo(n));break;case`albr`:this.currentTrack||(this.metadataTags.albumArtist??=Yo(n));break;case`©gen`:this.currentTrack||(this.metadataTags.genre??=Yo(n));break;case`©day`:if(!this.currentTrack){let e=new Date(Yo(n));Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`©cmt`:this.currentTrack||(this.metadataTags.comment??=Yo(n));break;case`©lyr`:this.currentTrack||(this.metadataTags.lyrics??=Yo(n));break}}}break;case`meta`:{if(this.currentTrack)break;let t=U(e)!==0;this.currentMetadataKeys=new Map,t?this.readContiguousBoxes(e.slice(r,n.contentSize)):this.readContiguousBoxes(e.slice(r+4,n.contentSize-4)),this.currentMetadataKeys=null}break;case`keys`:{if(!this.currentMetadataKeys)break;e.skip(4);let t=U(e);for(let n=0;n<t;n++){let t=U(e);e.skip(4);let r=Wn.decode(V(e,t-8));this.currentMetadataKeys.set(n+1,r)}}break;case`ilst`:{if(!this.currentMetadataKeys)break;let t=this.iterateContiguousBoxes(e.slice(r,n.contentSize));for(let{boxInfo:e,slice:n}of t){let t=e.name,r=(t.charCodeAt(0)<<24)+(t.charCodeAt(1)<<16)+(t.charCodeAt(2)<<8)+t.charCodeAt(3);this.currentMetadataKeys.has(r)&&(t=this.currentMetadataKeys.get(r));let i=Xo(n);switch(this.metadataTags.raw??={},this.metadataTags.raw[t]??=i,t){case`©nam`:case`titl`:case`com.apple.quicktime.title`:case`title`:typeof i==`string`&&(this.metadataTags.title??=i);break;case`©des`:case`desc`:case`dscp`:case`com.apple.quicktime.description`:case`description`:typeof i==`string`&&(this.metadataTags.description??=i);break;case`©ART`:case`com.apple.quicktime.artist`:case`artist`:typeof i==`string`&&(this.metadataTags.artist??=i);break;case`©alb`:case`albm`:case`com.apple.quicktime.album`:case`album`:typeof i==`string`&&(this.metadataTags.album??=i);break;case`aART`:case`album_artist`:typeof i==`string`&&(this.metadataTags.albumArtist??=i);break;case`©cmt`:case`com.apple.quicktime.comment`:case`comment`:typeof i==`string`&&(this.metadataTags.comment??=i);break;case`©gen`:case`gnre`:case`com.apple.quicktime.genre`:case`genre`:typeof i==`string`&&(this.metadataTags.genre??=i);break;case`©lyr`:case`lyrics`:typeof i==`string`&&(this.metadataTags.lyrics??=i);break;case`©day`:case`rldt`:case`com.apple.quicktime.creationdate`:case`date`:if(typeof i==`string`){let e=new Date(i);Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`covr`:case`com.apple.quicktime.artwork`:i instanceof bi?(this.metadataTags.images??=[],this.metadataTags.images.push({data:i.data,kind:`coverFront`,mimeType:i.mimeType})):i instanceof Uint8Array&&(this.metadataTags.images??=[],this.metadataTags.images.push({data:i,kind:`coverFront`,mimeType:`image/*`}));break;case`track`:if(typeof i==`string`){let e=i.split(`/`),t=Number.parseInt(e[0],10),n=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(this.metadataTags.trackNumber??=t),n&&Number.isInteger(n)&&n>0&&(this.metadataTags.tracksTotal??=n)}break;case`trkn`:if(i instanceof Uint8Array&&i.length>=6){let e=j(i),t=e.getUint16(2,!1),n=e.getUint16(4,!1);t>0&&(this.metadataTags.trackNumber??=t),n>0&&(this.metadataTags.tracksTotal??=n)}break;case`disc`:case`disk`:if(i instanceof Uint8Array&&i.length>=6){let e=j(i),t=e.getUint16(2,!1),n=e.getUint16(4,!1);t>0&&(this.metadataTags.discNumber??=t),n>0&&(this.metadataTags.discsTotal??=n)}break}}}break}return e.filePos=i,!0}},fs=class{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),n=0;for(let r of e.tracks)if(r.trackBacking.getType()===t&&n++,r===this.internalTrack)break;return n}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.internalTrack;return e.durationInMediaTimescale<=0?null:(D(e.trackBacking),((await e.trackBacking.getFirstPacket({metadataOnly:!0}))?.timestamp??0)+e.durationInMediaTimescale/e.timescale)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){let t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return Sr(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){let n=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=hs(r,n),a=await this.fetchPacketForSampleIndex(i,t);return!xs(r)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};let r=N(t.presentationTimestamps,n,e=>e.presentationTimestamp);return{sampleIndex:r===-1?-1:t.presentationTimestamps[r].sampleIndex,correctSampleFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextPacket(e,t){let n=this.packetToSampleIndex.get(e);if(n!==void 0)return this.fetchPacketForSampleIndex(n+1,t);let r=this.packetToFragmentLocation.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);return this.performFragmentedLookup(r.fragment,e=>{if(e===r.fragment){let t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1<t.samples.length)return{sampleIndex:r.sampleIndex+1,correctSampleFound:!0}}else if(e.trackData.get(this.internalTrack.id))return{sampleIndex:0,correctSampleFound:!0};return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let n=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=gs(r,n),a=await this.fetchPacketForSampleIndex(i,t);return!xs(r)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};let r=ur(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=n);return{sampleIndex:r===-1?-1:t.presentationTimestamps[r].sampleIndex,correctSampleFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextKeyPacket(e,t){let n=this.packetToSampleIndex.get(e);if(n!==void 0){let e=vs(this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n);return this.fetchPacketForSampleIndex(e,t)}let r=this.packetToFragmentLocation.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);return this.performFragmentedLookup(r.fragment,e=>{if(e===r.fragment){let t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(t!==-1)return{sampleIndex:t,correctSampleFound:!0}}else{let t=e.trackData.get(this.internalTrack.id);if(t&&t.firstKeyFrameTimestamp!==null){let e=t.samples.findIndex(e=>e.isKeyFrame);return D(e!==-1),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(e===-1)return null;let n=_s(this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),e);if(!n)return null;let r;if(t.metadataOnly)r=Lo;else{let t=this.internalTrack.demuxer.reader.requestSlice(n.sampleOffset,n.sampleSize);if(t instanceof Promise&&(t=await t),!t)return null;if(r=V(t,n.sampleSize),this.internalTrack.encryptionAuxInfo){D(this.internalTrack.encryptionInfo);let t=await Cs(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);e<t.length&&(r=await ws(this.internalTrack,t[e],r,null))}}let i=(n.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,a=n.duration/this.internalTrack.timescale,o=new L(r,n.isKeyFrame?`key`:`delta`,i,a,e,n.sampleSize);return this.packetToSampleIndex.set(o,e),o}async fetchPacketInFragment(e,t,n){if(t===-1)return null;let r=e.trackData.get(this.internalTrack.id).samples[t];D(r);let i;if(n.metadataOnly)i=Lo;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(t instanceof Promise&&(t=await t),!t)return null;i=V(t,r.byteSize),r.encryption&&(i=await ws(this.internalTrack,r.encryption,i,e))}let a=(r.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=r.duration/this.internalTrack.timescale,s=new L(i,r.isKeyFrame?`key`:`delta`,a,o,e.moofOffset+t,r.byteSize);return this.packetToFragmentLocation.set(s,{fragment:e,sampleIndex:t}),s}async performFragmentedLookup(e,t,n,r,i){let a=this.internalTrack.demuxer,o=null,s=null,c=-1;if(e){let{sampleIndex:n,correctSampleFound:r}=t(e);if(r)return this.fetchPacketInFragment(e,n,i);n!==-1&&(s=e,c=n)}let l=N(this.internalTrack.fragmentLookupTable,n,e=>e.timestamp),u=l===-1?null:this.internalTrack.fragmentLookupTable[l],d=N(this.internalTrack.fragmentPositionCache,n,e=>e.startTimestamp),f=d===-1?null:this.internalTrack.fragmentPositionCache[d],p=Math.max(u?.moofOffset??0,f?.moofOffset??0)||null,m;for(e?p===null||e.moofOffset>=p?(m=e.moofOffset+e.moofSize,o=e):m=p:m=p??0;;){if(o){let e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=a.reader.requestSliceRange(m,Uo,Wo);if(e instanceof Promise&&(e=await e),!e)break;let n=m,l=Go(e);if(!l)break;if(l.name===`moof`){o=await a.readFragment(n);let{sampleIndex:e,correctSampleFound:r}=t(o);if(r)return this.fetchPacketInFragment(o,e,i);e!==-1&&(s=o,c=e)}m=n+l.totalSize}if(u&&(!s||s.moofOffset<u.moofOffset)){let e=this.internalTrack.fragmentLookupTable[l-1];D(!e||e.timestamp<u.timestamp);let n=e?.timestamp??-1/0;return this.performFragmentedLookup(null,t,n,r,i)}return s?this.fetchPacketInFragment(s,c,i):null}},ps=class extends fs{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return`video`}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return!1}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{if(this.internalTrack.info.codec===`vp9`&&!this.internalTrack.info.vp9CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.vp9CodecInfo=e&&fo(e.data)}else if(this.internalTrack.info.codec===`av1`&&!this.internalTrack.info.av1CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=e&&mo(e.data)}let e={codec:Yi(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}},ms=class extends fs{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:Zi(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}:null}},hs=(e,t)=>{if(e.presentationTimestamps){let n=N(e.presentationTimestamps,t,e=>e.presentationTimestamp);return n===-1?-1:e.presentationTimestamps[n].sampleIndex}else{let n=N(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(n===-1)return-1;let r=e.sampleTimingEntries[n];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},gs=(e,t)=>{if(!e.keySampleIndices)return hs(e,t);if(e.presentationTimestamps){let n=N(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(n===-1)return-1;for(let t=n;t>=0;t--){let n=e.presentationTimestamps[t].sampleIndex;if(or(e.keySampleIndices,n,e=>e)!==-1)return n}return-1}else{let n=hs(e,t),r=N(e.keySampleIndices,n,e=>e);return e.keySampleIndices[r]??-1}},_s=(e,t)=>{let n=N(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[n];if(!r||r.startIndex+r.count<=t)return null;let i=r.startDecodeTimestamp+(t-r.startIndex)*r.delta,a=N(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),o=e.sampleCompositionTimeOffsets[a];o&&t-o.startIndex<o.count&&(i+=o.offset);let s=e.sampleSizes[Math.min(t,e.sampleSizes.length-1)],c=N(e.sampleToChunk,t,e=>e.startSampleIndex),l=e.sampleToChunk[c];D(l);let u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=e.chunkOffsets[u],f=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk,p=0,m=d;if(e.sampleSizes.length===1)m+=s*(t-f),p+=s*l.samplesPerChunk;else for(let n=f;n<f+l.samplesPerChunk;n++){let r=e.sampleSizes[n];n<t&&(m+=r),p+=r}let h=r.delta;if(e.presentationTimestamps){let n=e.presentationTimestampIndexMap[t];D(n!==void 0),n<e.presentationTimestamps.length-1&&(h=e.presentationTimestamps[n+1].presentationTimestamp-i)}return{presentationTimestamp:i,duration:h,sampleOffset:m,sampleSize:s,chunkOffset:d,chunkSize:p,isKeyFrame:e.keySampleIndices?or(e.keySampleIndices,t,e=>e)!==-1:!0}},vs=(e,t)=>{if(!e.keySampleIndices)return t+1;let n=N(e.keySampleIndices,t,e=>e);return e.keySampleIndices[n+1]??-1},ys=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(let n of e.samples)n.presentationTimestamp+=t;for(let n of e.presentationTimestamps)n.presentationTimestamp+=t},bs=e=>{let[t,n]=e,r=Math.atan2(n,t);return Number.isFinite(r)?r*(180/Math.PI):0},xs=e=>e.sampleSizes.length===0,Ss=e=>e.currentFragmentState?e.currentFragmentState.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:e.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null},Cs=async(e,t,n)=>{if(n.resolved)return n.resolved;if(n.offset===null||n.sampleCount===0)throw Error(`Incomplete saiz/saio info; cannot resolve encryption data.`);let r=0;if(n.defaultSampleInfoSize>0)r=n.defaultSampleInfoSize*n.sampleCount;else{D(n.sampleSizes);for(let e=0;e<n.sampleCount;e++)r+=n.sampleSizes[e]}let i=e.requestSlice(n.offset,r);if(i instanceof Promise&&(i=await i),!i)throw Error(`Failed to read auxiliary encryption info.`);let a=t.defaultPerSampleIvSize;D(a!==null);let o=[];for(let e=0;e<n.sampleCount;e++){let r=n.defaultSampleInfoSize>0?n.defaultSampleInfoSize:n.sampleSizes[e],s=new Uint8Array(16);a>0?s.set(V(i,a),0):s.set(t.defaultConstantIv,0);let c=null;if(r>a){let e=Dp(i);c=[];for(let t=0;t<e;t++){let e=Dp(i),t=U(i);c.push({clearLen:e,protectedLen:t})}}o.push({iv:s,subsamples:c})}return n.resolved=o,o},ws=async(e,t,n,r)=>{D(e.encryptionInfo);let i=e.encryptionInfo;D(i.defaultKid!==null);let a=i.defaultKid,o,s=e.demuxer.decryptionKeyCache.get(a);if(s)o=await s;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw Error(`Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.`);let t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>e.keyIds===null||e.keyIds.includes(a));for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++)Vo(t[e],t[n])&&(t.splice(n,1),n--)}let n=await e.demuxer.input._formatOptions.isobmff.resolveKeyId({keyId:a,psshBoxes:t});if(!(typeof n==`string`&&n.length===32&&nr.test(n)||n instanceof Uint8Array&&n.byteLength===16))throw TypeError(`resolveKeyId must return a 32-character hex string or a 16-byte Uint8Array containing the decryption key.`);return n instanceof Uint8Array?n:ir(n)})();e.demuxer.decryptionKeyCache.set(a,t),o=await t}return i.scheme===`cenc`||i.scheme===`cens`?Ts(o,i,t,n):Es(o,i,t,n)},Ts=async(e,t,n,r)=>{let i=new Uint8Array(16);i.set(n.iv,0);let a=await crypto.subtle.importKey(`raw`,e,{name:`AES-CTR`},!1,[`decrypt`]),o=async e=>{let t=await crypto.subtle.decrypt({name:`AES-CTR`,counter:i,length:64},a,e);return new Uint8Array(t)};if(!n.subsamples)return o(r);D(t.defaultCryptByteBlock!==null&&t.defaultSkipByteBlock!==null);let s=Ds(n.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock),c=0;for(let e of s)for(let t of e.perSubsample)c+=t.length;let l=new Uint8Array(c),u=0;for(let e of s)for(let t of e.perSubsample)l.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;let d=await o(l),f=new Uint8Array(r),p=0;for(let e of s)for(let t of e.perSubsample)f.set(d.subarray(p,p+t.length),t.offset),p+=t.length;return f},Es=(e,t,n,r)=>{let i=new cs;i.init({key:e,iv:n.iv});let a=t.defaultCryptByteBlock,o=t.defaultSkipByteBlock;if(D(a!==null&&o!==null),!n.subsamples){let e=new Uint8Array(r),t=Math.floor(r.length/16);for(let n=0;n<t;n++){let t=n*16;i.in.set(r.subarray(t,t+16)),i.decrypt(),e.set(i.out,t)}return e}if(a===0&&o===0)throw Error(`cbcs with subsamples requires pattern encryption.`);let s=new Uint8Array(r),c=Ds(n.subsamples,a,o),l=new DataView(n.iv.buffer,n.iv.byteOffset,16);for(let e of c){i.iv[0]=l.getUint32(0,!1),i.iv[1]=l.getUint32(4,!1),i.iv[2]=l.getUint32(8,!1),i.iv[3]=l.getUint32(12,!1);for(let t of e.perSubsample){let e=t.length/16;for(let n=0;n<e;n++){let e=t.offset+n*16;i.in.set(r.subarray(e,e+16)),i.decrypt(),s.set(i.out,e)}}}return s},Ds=(e,t,n)=>{let r=[],i=t!==0||n!==0,a=0;for(let o of e){a+=o.clearLen;let e=[];if(!i)o.protectedLen>0&&e.push({offset:a,length:o.protectedLen}),a+=o.protectedLen;else{let r=o.protectedLen,i=a;for(;r>0&&!(r<16*t);){let a=16*t;e.push({offset:i,length:a}),i+=a,r-=a;let o=Math.min(16*n,r);i+=o,r-=o}a+=o.protectedLen}r.push({perSubsample:e})}return r}}));function ks(e){if(e===void 0)throw Error(`Undefined element size is used in a place where it is not supported.`)}var As,js,Ms,Ns,R,Ps,Fs,Is,Ls,Rs,zs,Bs,Vs,Hs,Us,Ws,Gs,Ks,z,qs,Js,Ys,Xs,Zs,Qs,$s,ec,tc,nc,rc=n((()=>{F(),G(),As=class{constructor(e){this.value=e}},js=class{constructor(e){this.value=e}},Ms=class{constructor(e){this.value=e}},Ns=class{constructor(e){this.value=e}},(function(e){e[e.EBML=440786851]=`EBML`,e[e.EBMLVersion=17030]=`EBMLVersion`,e[e.EBMLReadVersion=17143]=`EBMLReadVersion`,e[e.EBMLMaxIDLength=17138]=`EBMLMaxIDLength`,e[e.EBMLMaxSizeLength=17139]=`EBMLMaxSizeLength`,e[e.DocType=17026]=`DocType`,e[e.DocTypeVersion=17031]=`DocTypeVersion`,e[e.DocTypeReadVersion=17029]=`DocTypeReadVersion`,e[e.Void=236]=`Void`,e[e.Segment=408125543]=`Segment`,e[e.SeekHead=290298740]=`SeekHead`,e[e.Seek=19899]=`Seek`,e[e.SeekID=21419]=`SeekID`,e[e.SeekPosition=21420]=`SeekPosition`,e[e.Duration=17545]=`Duration`,e[e.Info=357149030]=`Info`,e[e.TimestampScale=2807729]=`TimestampScale`,e[e.MuxingApp=19840]=`MuxingApp`,e[e.WritingApp=22337]=`WritingApp`,e[e.Tracks=374648427]=`Tracks`,e[e.TrackEntry=174]=`TrackEntry`,e[e.TrackNumber=215]=`TrackNumber`,e[e.TrackUID=29637]=`TrackUID`,e[e.TrackType=131]=`TrackType`,e[e.FlagEnabled=185]=`FlagEnabled`,e[e.FlagDefault=136]=`FlagDefault`,e[e.FlagForced=21930]=`FlagForced`,e[e.FlagOriginal=21934]=`FlagOriginal`,e[e.FlagHearingImpaired=21931]=`FlagHearingImpaired`,e[e.FlagVisualImpaired=21932]=`FlagVisualImpaired`,e[e.FlagCommentary=21935]=`FlagCommentary`,e[e.FlagLacing=156]=`FlagLacing`,e[e.Name=21358]=`Name`,e[e.Language=2274716]=`Language`,e[e.LanguageBCP47=2274717]=`LanguageBCP47`,e[e.CodecID=134]=`CodecID`,e[e.CodecPrivate=25506]=`CodecPrivate`,e[e.CodecDelay=22186]=`CodecDelay`,e[e.SeekPreRoll=22203]=`SeekPreRoll`,e[e.DefaultDuration=2352003]=`DefaultDuration`,e[e.Video=224]=`Video`,e[e.PixelWidth=176]=`PixelWidth`,e[e.PixelHeight=186]=`PixelHeight`,e[e.DisplayWidth=21680]=`DisplayWidth`,e[e.DisplayHeight=21690]=`DisplayHeight`,e[e.DisplayUnit=21682]=`DisplayUnit`,e[e.AlphaMode=21440]=`AlphaMode`,e[e.Audio=225]=`Audio`,e[e.SamplingFrequency=181]=`SamplingFrequency`,e[e.Channels=159]=`Channels`,e[e.BitDepth=25188]=`BitDepth`,e[e.SimpleBlock=163]=`SimpleBlock`,e[e.BlockGroup=160]=`BlockGroup`,e[e.Block=161]=`Block`,e[e.BlockAdditions=30113]=`BlockAdditions`,e[e.BlockMore=166]=`BlockMore`,e[e.BlockAdditional=165]=`BlockAdditional`,e[e.BlockAddID=238]=`BlockAddID`,e[e.BlockDuration=155]=`BlockDuration`,e[e.ReferenceBlock=251]=`ReferenceBlock`,e[e.Cluster=524531317]=`Cluster`,e[e.Timestamp=231]=`Timestamp`,e[e.Cues=475249515]=`Cues`,e[e.CuePoint=187]=`CuePoint`,e[e.CueTime=179]=`CueTime`,e[e.CueTrackPositions=183]=`CueTrackPositions`,e[e.CueTrack=247]=`CueTrack`,e[e.CueClusterPosition=241]=`CueClusterPosition`,e[e.Colour=21936]=`Colour`,e[e.MatrixCoefficients=21937]=`MatrixCoefficients`,e[e.TransferCharacteristics=21946]=`TransferCharacteristics`,e[e.Primaries=21947]=`Primaries`,e[e.Range=21945]=`Range`,e[e.Projection=30320]=`Projection`,e[e.ProjectionType=30321]=`ProjectionType`,e[e.ProjectionPoseRoll=30325]=`ProjectionPoseRoll`,e[e.Attachments=423732329]=`Attachments`,e[e.AttachedFile=24999]=`AttachedFile`,e[e.FileDescription=18046]=`FileDescription`,e[e.FileName=18030]=`FileName`,e[e.FileMediaType=18016]=`FileMediaType`,e[e.FileData=18012]=`FileData`,e[e.FileUID=18094]=`FileUID`,e[e.Chapters=272869232]=`Chapters`,e[e.Tags=307544935]=`Tags`,e[e.Tag=29555]=`Tag`,e[e.Targets=25536]=`Targets`,e[e.TargetTypeValue=26826]=`TargetTypeValue`,e[e.TargetType=25546]=`TargetType`,e[e.TagTrackUID=25541]=`TagTrackUID`,e[e.TagEditionUID=25545]=`TagEditionUID`,e[e.TagChapterUID=25540]=`TagChapterUID`,e[e.TagAttachmentUID=25542]=`TagAttachmentUID`,e[e.SimpleTag=26568]=`SimpleTag`,e[e.TagName=17827]=`TagName`,e[e.TagLanguage=17530]=`TagLanguage`,e[e.TagString=17543]=`TagString`,e[e.TagBinary=17541]=`TagBinary`,e[e.ContentEncodings=28032]=`ContentEncodings`,e[e.ContentEncoding=25152]=`ContentEncoding`,e[e.ContentEncodingOrder=20529]=`ContentEncodingOrder`,e[e.ContentEncodingScope=20530]=`ContentEncodingScope`,e[e.ContentCompression=20532]=`ContentCompression`,e[e.ContentCompAlgo=16980]=`ContentCompAlgo`,e[e.ContentCompSettings=16981]=`ContentCompSettings`,e[e.ContentEncryption=20533]=`ContentEncryption`})(R||={}),Ps=[R.EBML,R.Segment],Fs=[R.SeekHead,R.Info,R.Cluster,R.Tracks,R.Cues,R.Attachments,R.Chapters,R.Tags],Is=[...Ps,...Fs],Ls=e=>e<256?1:e<65536?2:e<1<<24?3:e<2**32?4:e<2**40?5:6,Rs=e=>e<1n<<8n?1:e<1n<<16n?2:e<1n<<24n?3:e<1n<<32n?4:e<1n<<40n?5:e<1n<<48n?6:e<1n<<56n?7:8,zs=e=>e>=-64&&e<64?1:e>=-8192&&e<8192?2:e>=-1048576&&e<1<<20?3:e>=-134217728&&e<1<<27?4:e>=-(2**34)&&e<2**34?5:6,Bs=e=>{if(e<127)return 1;if(e<16383)return 2;if(e<(1<<21)-1)return 3;if(e<(1<<28)-1)return 4;if(e<2**35-1)return 5;if(e<2**42-1)return 6;throw Error(`EBML varint size not supported `+e)},Vs=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap,this.dataOffsets=new WeakMap}writeByte(e){this.helperView.setUint8(0,e),this.writer.write(this.helper.subarray(0,1))}writeFloat32(e){this.helperView.setFloat32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeFloat64(e){this.helperView.setFloat64(0,e,!1),this.writer.write(this.helper)}writeUnsignedInt(e,t=Ls(e)){let n=0;switch(t){case 6:this.helperView.setUint8(n++,e/2**40|0);case 5:this.helperView.setUint8(n++,e/2**32|0);case 4:this.helperView.setUint8(n++,e>>24);case 3:this.helperView.setUint8(n++,e>>16);case 2:this.helperView.setUint8(n++,e>>8);case 1:this.helperView.setUint8(n++,e);break;default:throw Error(`Bad unsigned int size `+t)}this.writer.write(this.helper.subarray(0,n))}writeUnsignedBigInt(e,t=Rs(e)){let n=0;for(let r=t-1;r>=0;r--)this.helperView.setUint8(n++,Number(e>>BigInt(r*8)&255n));this.writer.write(this.helper.subarray(0,n))}writeSignedInt(e,t=zs(e)){e<0&&(e+=2**(t*8)),this.writeUnsignedInt(e,t)}writeVarInt(e,t=Bs(e)){let n=0;switch(t){case 1:this.helperView.setUint8(n++,128|e);break;case 2:this.helperView.setUint8(n++,64|e>>8),this.helperView.setUint8(n++,e);break;case 3:this.helperView.setUint8(n++,32|e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 4:this.helperView.setUint8(n++,16|e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 5:this.helperView.setUint8(n++,8|e/2**32&7),this.helperView.setUint8(n++,e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 6:this.helperView.setUint8(n++,4|e/2**40&3),this.helperView.setUint8(n++,e/2**32|0),this.helperView.setUint8(n++,e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;default:throw Error(`Bad EBML varint size `+t)}this.writer.write(this.helper.subarray(0,n))}writeAsciiString(e){this.writer.write(new Uint8Array(e.split(``).map(e=>e.charCodeAt(0))))}writeEBML(e){if(e!==null)if(e instanceof Uint8Array)this.writer.write(e);else if(Array.isArray(e))for(let t of e)this.writeEBML(t);else if(this.offsets.set(e,this.writer.getPos()),this.writeUnsignedInt(e.id),Array.isArray(e.data)){let t=this.writer.getPos(),n=e.size===-1?1:e.size??4;e.size===-1?this.writeByte(255):this.writer.seek(this.writer.getPos()+n);let r=this.writer.getPos();if(this.dataOffsets.set(e,r),this.writeEBML(e.data),e.size!==-1){let e=this.writer.getPos()-r,i=this.writer.getPos();this.writer.seek(t),this.writeVarInt(e,n),this.writer.seek(i)}}else if(typeof e.data==`number`){let t=e.size??Ls(e.data);this.writeVarInt(t),this.writeUnsignedInt(e.data,t)}else if(typeof e.data==`bigint`){let t=e.size??Rs(e.data);this.writeVarInt(t),this.writeUnsignedBigInt(e.data,t)}else if(typeof e.data==`string`)this.writeVarInt(e.data.length),this.writeAsciiString(e.data);else if(e.data instanceof Uint8Array)this.writeVarInt(e.data.byteLength,e.size),this.writer.write(e.data);else if(e.data instanceof As)this.writeVarInt(4),this.writeFloat32(e.data.value);else if(e.data instanceof js)this.writeVarInt(8),this.writeFloat64(e.data.value);else if(e.data instanceof Ms){let t=e.size??zs(e.data.value);this.writeVarInt(t),this.writeSignedInt(e.data.value,t)}else if(e.data instanceof Ns){let t=M.encode(e.data.value);this.writeVarInt(t.length),this.writer.write(t)}else pr(e.data)}},Hs=8,Us=2,Ws=2*Hs,Gs=e=>{if(e.remainingLength<1)return null;let t=H(e);if(e.skip(-1),t===0)return null;let n=1,r=128;for(;(t&r)===0;)n++,r>>=1;return e.remainingLength<n?null:n},Ks=e=>{if(e.remainingLength<1)return null;let t=H(e);if(t===0)return null;let n=1,r=128;for(;(t&r)===0;)n++,r>>=1;if(e.remainingLength<n-1)return null;let i=t&r-1;for(let t=1;t<n;t++)i*=256,i+=H(e);return i},z=(e,t)=>{if(t<1||t>8)throw Error(`Bad unsigned int size `+t);let n=0;for(let r=0;r<t;r++)n*=256,n+=H(e);return n},qs=(e,t)=>{if(t<1)throw Error(`Bad unsigned int size `+t);let n=0n;for(let r=0;r<t;r++)n<<=8n,n+=BigInt(H(e));return n},Js=e=>{let t=Gs(e);return t===null||e.remainingLength<t?null:z(e,t)},Ys=e=>{if(e.remainingLength<1)return null;if(H(e)===255)return;e.skip(-1);let t=Ks(e);if(t===null)return null;if(t!==72057594037927940)return t},Xs=e=>{D(e.remainingLength>=Us);let t=Js(e);if(t===null)return null;let n=Ys(e);return n===null?null:{id:t,size:n}},Zs=(e,t)=>{let n=V(e,t),r=0;for(;r<t&&n[r]!==0;)r+=1;return String.fromCharCode(...n.subarray(0,r))},Qs=(e,t)=>{let n=V(e,t),r=0;for(;r<t&&n[r]!==0;)r+=1;return Wn.decode(n.subarray(0,r))},$s=(e,t)=>{if(t===0)return 0;if(t!==4&&t!==8)throw Error(`Bad float size `+t);return t===4?Rp(e):zp(e)},ec=async(e,t,n,r)=>{let i=new Set(n),a=t;for(;r===null||a<r;){let t=e.requestSliceRange(a,Us,Ws);if(t instanceof Promise&&(t=await t),!t)break;let n=Xs(t);if(!n)break;if(i.has(n.id))return{pos:a,found:!0};ks(n.size),a=t.filePos+n.size}return{pos:r!==null&&r>a?r:a,found:!1}},tc=async(e,t,n,r)=>{let i=2**16,a=new Set(n),o=t;for(;o<r;){let t=e.requestSliceRange(o,0,Math.min(i,r-o));if(t instanceof Promise&&(t=await t),!t||t.length<Hs)break;for(let e=0;e<t.length-Hs;e++){t.filePos=o;let e=Js(t);if(e!==null&&a.has(e))return o;o++}}return null},nc={avc:`V_MPEG4/ISO/AVC`,hevc:`V_MPEGH/ISO/HEVC`,vp8:`V_VP8`,vp9:`V_VP9`,av1:`V_AV1`,aac:`A_AAC`,mp3:`A_MPEG/L3`,opus:`A_OPUS`,vorbis:`A_VORBIS`,flac:`A_FLAC`,ac3:`A_AC3`,eac3:`A_EAC3`,"pcm-u8":`A_PCM/INT/LIT`,"pcm-s16":`A_PCM/INT/LIT`,"pcm-s16be":`A_PCM/INT/BIG`,"pcm-s24":`A_PCM/INT/LIT`,"pcm-s24be":`A_PCM/INT/BIG`,"pcm-s32":`A_PCM/INT/LIT`,"pcm-s32be":`A_PCM/INT/BIG`,"pcm-f32":`A_PCM/FLOAT/IEEE`,"pcm-f64":`A_PCM/FLOAT/IEEE`,webvtt:`S_TEXT/WEBVTT`}})),ic,ac=n((()=>{ic=e=>{let t=(e.hasVideo?`video/`:e.hasAudio?`audio/`:`application/`)+(e.isWebM?`webm`:`x-matroska`);if(e.codecStrings.length>0){let n=[...new Set(e.codecStrings.filter(Boolean))];t+=`; codecs="${n.join(`, `)}"`}return t}})),oc,sc,cc,lc,uc,dc,fc,pc,mc,hc=n((()=>{Po(),ha(),Io(),Ei(),F(),Ro(),rc(),ac(),G(),(function(e){e[e.None=0]=`None`,e[e.Xiph=1]=`Xiph`,e[e.FixedSize=2]=`FixedSize`,e[e.Ebml=3]=`Ebml`})(oc||={}),(function(e){e[e.Block=1]=`Block`,e[e.Private=2]=`Private`,e[e.Next=4]=`Next`})(sc||={}),(function(e){e[e.Zlib=0]=`Zlib`,e[e.Bzlib=1]=`Bzlib`,e[e.lzo1x=2]=`lzo1x`,e[e.HeaderStripping=3]=`HeaderStripping`})(cc||={}),lc=[{id:R.SeekHead,flag:`seekHeadSeen`},{id:R.Info,flag:`infoSeen`},{id:R.Tracks,flag:`tracksSeen`},{id:R.Cues,flag:`cuesSeen`}],uc=10*2**20,dc=class extends Fo{constructor(e){super(e),this.readMetadataPromise=null,this.segments=[],this.currentSegment=null,this.currentTrack=null,this.currentCluster=null,this.currentBlock=null,this.currentBlockAdditional=null,this.currentCueTime=null,this.currentDecodingInstruction=null,this.currentTagTargetIsMovie=!0,this.currentSimpleTagName=null,this.currentAttachedFile=null,this.isWebM=!1,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.segments.flatMap(e=>e.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();let e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return ic({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>e.info?.type===`video`)),hasAudio:this.segments.some(e=>e.tracks.some(e=>e.info?.type===`audio`)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(let e of this.segments)e.metadataTagsCollected||=(this.reader.fileSize!==null&&await this.loadSegmentMetadata(e),!0);let e={};for(let t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Us,Ws);if(t instanceof Promise&&(t=await t),!t)break;let n=Xs(t);if(!n)break;let r=n.id,i=n.size,a=t.filePos;if(r===R.EBML){ks(i);let e=this.reader.requestSlice(a,i);if(e instanceof Promise&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===R.Segment){if(await this.readSegment(a,i),i===void 0||this.reader.fileSize===null)break}else if(r===R.Cluster){if(this.reader.fileSize===null)break;i===void 0&&(i=(await ec(this.reader,a,Is,this.reader.fileSize)).pos-a);let e=O(this.segments);e&&(e.elementEndPos=a+i)}ks(i),e=a+i}})()}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:t===void 0?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let n=e;for(;this.currentSegment.elementEndPos===null||n<this.currentSegment.elementEndPos;){let e=this.reader.requestSliceRange(n,Us,Ws);if(e instanceof Promise&&(e=await e),!e)break;let t=n,r=Xs(e);if(!r||!Fs.includes(r.id)&&r.id!==R.Void){let e=await tc(this.reader,t,Fs,Math.min(this.currentSegment.elementEndPos??1/0,t+uc));if(e){n=e;continue}else break}let{id:i,size:a}=r,o=e.filePos,s=lc.findIndex(e=>e.id===i);if(s!==-1){let e=lc[s].flag;this.currentSegment[e]=!0,ks(a);let t=this.reader.requestSlice(o,a);t instanceof Promise&&(t=await t),t&&this.readContiguousElements(t)}else if(i===R.Tags||i===R.Attachments){i===R.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,ks(a);let e=this.reader.requestSlice(o,a);e instanceof Promise&&(e=await e),e&&this.readContiguousElements(e)}else if(i===R.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(a===void 0)break;n=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),this.reader.fileSize!==null)for(let t of this.currentSegment.seekEntries){let n=lc.find(e=>e.id===t.id);if(!n||this.currentSegment[n.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,Us,Ws);if(r instanceof Promise&&(r=await r),!r)continue;let i=Xs(r);if(!i)continue;let{id:a,size:o}=i;if(a!==n.id)continue;ks(o),this.currentSegment[n.flag]=!0;let s=this.reader.requestSlice(r.filePos,o);s instanceof Promise&&(s=await s),s&&this.readContiguousElements(s)}this.currentSegment.timestampScale===-1&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e9/1e6);for(let e of this.currentSegment.tracks)e.defaultDurationNs!==null&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);let r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(let e of this.currentSegment.cuePoints){let t=r.get(e.trackId);t&&t.cuePoints.push(e)}for(let e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;t<e.cuePoints.length-1;t++){let n=e.cuePoints[t],r=e.cuePoints[t+1];n.time===r.time&&(e.cuePoints.splice(t+1,1),t--)}}let i=null,a=-1/0;for(let e of this.currentSegment.tracks)e.cuePoints.length>a&&(a=e.cuePoints.length,i=e);for(let e of this.currentSegment.tracks)e.cuePoints.length===0&&(e.cuePoints=i.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let n=this.reader.requestSliceRange(e,Us,Ws);n instanceof Promise&&(n=await n),D(n);let r=e,i=Xs(n);D(i);let a=i.id;D(a===R.Cluster);let o=i.size,s=n.filePos;o===void 0&&(o=(await ec(this.reader,s,Is,t.elementEndPos)).pos-s);let c=this.reader.requestSlice(s,o);c instanceof Promise&&(c=await c);let l={segment:t,elementStartPos:r,elementEndPos:s+o,dataStartPos:s,timestamp:-1,trackData:new Map};this.currentCluster=l,c&&(l.elementEndPos=this.readContiguousElements(c,Is));for(let[,e]of l.trackData){let t=e.track;D(e.blocks.length>0);let n=!1;for(let t=0;t<e.blocks.length;t++){let r=e.blocks[t];r.timestamp+=l.timestamp,n||=r.lacing!==oc.None}e.presentationTimestamps=e.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n<e.presentationTimestamps.length;n++){let r=e.presentationTimestamps[n],i=e.blocks[r.blockIndex];e.firstKeyFrameTimestamp===null&&i.isKeyFrame&&(e.firstKeyFrameTimestamp=i.timestamp),n<e.presentationTimestamps.length-1?i.duration=e.presentationTimestamps[n+1].timestamp-i.timestamp:i.duration===0&&t.defaultDuration!=null&&i.lacing===oc.None&&(i.duration=t.defaultDuration)}n&&(this.expandLacedBlocks(e.blocks,t),e.presentationTimestamps=e.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));let i=e.blocks[e.presentationTimestamps[0].blockIndex],a=e.blocks[O(e.presentationTimestamps).blockIndex];e.startTimestamp=i.timestamp,e.endTimestamp=a.timestamp+a.duration;let o=N(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);(o===-1||t.clusterPositionCache[o].elementStartPos!==r)&&t.clusterPositionCache.splice(o+1,0,{elementStartPos:l.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=l,l}getTrackDataInCluster(e,t){let n=e.trackData.get(t);if(!n){let r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;n={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,n)}return n}expandLacedBlocks(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r.lacing===oc.None)continue;r.decoded||=(r.data=this.decodeBlockData(t,r.data),!0);let i=wp.tempFromBytes(r.data),a=[],o=H(i)+1;switch(r.lacing){case oc.Xiph:{let e=0;for(let t=0;t<o-1;t++){let t=0;for(;i.bufferPos<i.length;){let n=H(i);if(t+=n,n<255){a.push(t),e+=t;break}}}a.push(i.length-(i.bufferPos+e))}break;case oc.FixedSize:{let e=i.length-1,t=Math.floor(e/o);for(let e=0;e<o;e++)a.push(t)}break;case oc.Ebml:{let e=Ks(i);D(e!==null);let t=e;a.push(t);let n=t;for(let e=1;e<o-1;e++){let e=i.bufferPos,r=Ks(i);D(r!==null);let o=r-((1<<(i.bufferPos-e)*7-1)-1);t+=o,a.push(t),n+=t}a.push(i.length-(i.bufferPos+n))}break;default:D(!1)}D(a.length===o),e.splice(n,1);let s=r.duration||o*(t.defaultDuration??0);for(let t=0;t<o;t++){let c=a[t],l=V(i,c),u=r.timestamp+s*t/o,d=s/o;e.splice(n+t,0,{timestamp:u,duration:d,isKeyFrame:r.isKeyFrame,data:l,lacing:oc.None,decoded:!0,mainAdditional:r.mainAdditional})}n+=o,n--}}async loadSegmentMetadata(e){for(let t of e.seekEntries){if(!(t.id===R.Tags&&!e.tagsSeen)&&!(t.id===R.Attachments&&!e.attachmentsSeen))continue;let n=this.reader.requestSliceRange(e.dataStartPos+t.segmentPosition,Us,Ws);if(n instanceof Promise&&(n=await n),!n)continue;let r=Xs(n);if(!r||r.id!==t.id)continue;let{size:i}=r;ks(i),D(!this.currentSegment),this.currentSegment=e;let a=this.reader.requestSlice(n.filePos,i);a instanceof Promise&&(a=await a),a&&this.readContiguousElements(a),this.currentSegment=null,t.id===R.Tags?e.tagsSeen=!0:t.id===R.Attachments&&(e.attachmentsSeen=!0)}}readContiguousElements(e,t){for(;e.remainingLength>=Us;){let n=e.filePos;if(!this.traverseElement(e,t))return n}return e.filePos}traverseElement(e,t){let n=Xs(e);if(!n||t&&t.includes(n.id))return!1;let{id:r,size:i}=n,a=e.filePos;switch(ks(i),r){case R.DocType:this.isWebM=Zs(e,i)===`webm`;break;case R.Seek:{if(!this.currentSegment)break;let t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(a,i)),(t.id===-1||t.segmentPosition===-1)&&this.currentSegment.seekEntries.pop()}break;case R.SeekID:{let t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=z(e,i)}break;case R.SeekPosition:{let t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=z(e,i)}break;case R.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=z(e,i),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case R.Duration:if(!this.currentSegment)break;this.currentSegment.duration=$s(e,i);break;case R.TrackEntry:if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...wi,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(a,i)),!this.currentTrack))break;if(this.currentTrack.decodingInstructions.some(e=>e.data?.type!==`decompress`||e.scope!==sc.Block||e.data.algorithm!==cc.HeaderStripping)&&(console.warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&this.currentTrack.id!==-1&&this.currentTrack.codecId&&this.currentTrack.info){let e=this.currentTrack.codecId.indexOf(`/`),t=e===-1?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);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 e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}this.currentTrack.codecId===nc.avc?(this.currentTrack.info.codec=`avc`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===nc.hevc?(this.currentTrack.info.codec=`hevc`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===nc.vp8?this.currentTrack.info.codec=`vp8`:t===nc.vp9?this.currentTrack.info.codec=`vp9`:t===nc.av1&&(this.currentTrack.info.codec=`av1`);let e=this.currentTrack;this.currentTrack.trackBacking=new pc(e),this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type===`audio`){t===nc.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===nc.mp3?this.currentTrack.info.codec=`mp3`:t===nc.opus?(this.currentTrack.info.codec=`opus`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=ea):t===nc.vorbis?(this.currentTrack.info.codec=`vorbis`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===nc.flac?(this.currentTrack.info.codec=`flac`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===nc.ac3?(this.currentTrack.info.codec=`ac3`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===nc.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 e=this.currentTrack;this.currentTrack.trackBacking=new mc(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case R.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=z(e,i);break;case R.TrackType:{if(!this.currentTrack)break;let t=z(e,i);t===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}:t===2&&(this.currentTrack.info={type:`audio`,numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case R.FlagEnabled:if(!this.currentTrack)break;z(e,i)||(this.currentTrack=null);break;case R.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!z(e,i);break;case R.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!z(e,i);break;case R.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!z(e,i);break;case R.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!z(e,i);break;case R.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!z(e,i);break;case R.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!z(e,i);break;case R.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Zs(e,i);break;case R.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=V(e,i);break;case R.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=z(e,i);break;case R.Name:if(!this.currentTrack)break;this.currentTrack.name=Qs(e,i);break;case R.Language:if(!this.currentTrack||this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Zs(e,i),kr(this.currentTrack.languageCode)||(this.currentTrack.languageCode=xr);break;case R.LanguageBCP47:{if(!this.currentTrack)break;let t=Zs(e,i).split(`-`)[0];t?this.currentTrack.languageCode=t:this.currentTrack.languageCode=xr,this.currentTrack.hasLanguageBcp47=!0}break;case R.Video:if(this.currentTrack?.info?.type!==`video`)break;this.readContiguousElements(e.slice(a,i));break;case R.PixelWidth:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.width=z(e,i);break;case R.PixelHeight:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.height=z(e,i);break;case R.DisplayWidth:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayWidth=z(e,i);break;case R.DisplayHeight:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayHeight=z(e,i);break;case R.DisplayUnit:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayUnit=z(e,i);break;case R.AlphaMode:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.alphaMode=z(e,i)===1;break;case R.Colour:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.colorSpace={},this.readContiguousElements(e.slice(a,i));break;case R.MatrixCoefficients:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Qn[z(e,i)]??null;this.currentTrack.info.colorSpace.matrix=t}break;case R.Range:if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;this.currentTrack.info.colorSpace.fullRange=z(e,i)===2;break;case R.TransferCharacteristics:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Xn[z(e,i)]??null;this.currentTrack.info.colorSpace.transfer=t}break;case R.Primaries:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Jn[z(e,i)]??null;this.currentTrack.info.colorSpace.primaries=t}break;case R.Projection:if(this.currentTrack?.info?.type!==`video`)break;this.readContiguousElements(e.slice(a,i));break;case R.ProjectionPoseRoll:{if(this.currentTrack?.info?.type!==`video`)break;let t=-$s(e,i);try{this.currentTrack.info.rotation=Bn(t)}catch{}}break;case R.Audio:if(this.currentTrack?.info?.type!==`audio`)break;this.readContiguousElements(e.slice(a,i));break;case R.SamplingFrequency:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.sampleRate=$s(e,i);break;case R.Channels:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.numberOfChannels=z(e,i);break;case R.BitDepth:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.bitDepth=z(e,i);break;case R.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(a,i)),this.currentCueTime=null;break;case R.CueTime:this.currentCueTime=z(e,i);break;case R.CueTrackPositions:{if(this.currentCueTime===null)break;D(this.currentSegment);let t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(a,i)),(t.trackId===-1||t.clusterPosition===-1)&&this.currentSegment.cuePoints.pop()}break;case R.CueTrack:{let t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=z(e,i)}break;case R.CueClusterPosition:{let t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;D(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+z(e,i)}break;case R.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=z(e,i);break;case R.SimpleBlock:{if(!this.currentCluster)break;let t=Ks(e);if(t===null)break;let n=this.getTrackDataInCluster(this.currentCluster,t);if(!n)break;let r=kp(e),o=H(e),s=o>>1&3,c=!!(o&128);n.track.info?.type===`audio`&&n.track.info.codec&&(c=!0);let l=V(e,i-(e.filePos-a)),u=n.track.decodingInstructions.length>0;n.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:s,decoded:!u,mainAdditional:null})}break;case R.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(a,i)),this.currentBlock=null;break;case R.Block:{if(!this.currentCluster)break;let t=Ks(e);if(t===null)break;let n=this.getTrackDataInCluster(this.currentCluster,t);if(!n)break;let r=kp(e),o=H(e)>>1&3;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:V(e,i-(e.filePos-a)),lacing:o,decoded:!(n.track.decodingInstructions.length>0),mainAdditional:null},n.blocks.push(this.currentBlock)}break;case R.BlockAdditions:this.readContiguousElements(e.slice(a,i));break;case R.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(a,i)),this.currentBlockAdditional.data&&this.currentBlockAdditional.addId===1&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case R.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=V(e,i);break;case R.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=z(e,i);break;case R.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=z(e,i);break;case R.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case R.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(a,i));break;case R.Targets:this.readContiguousElements(e.slice(a,i));break;case R.TargetTypeValue:z(e,i)!==50&&(this.currentTagTargetIsMovie=!1);break;case R.TagTrackUID:case R.TagEditionUID:case R.TagChapterUID:case R.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case R.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(a,i));break;case R.TagName:this.currentSimpleTagName=Qs(e,i);break;case R.TagString:{if(!this.currentSimpleTagName)break;let t=Qs(e,i);this.processTagValue(this.currentSimpleTagName,t)}break;case R.TagBinary:{if(!this.currentSimpleTagName)break;let t=V(e,i);this.processTagValue(this.currentSimpleTagName,t)}break;case R.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(a,i));let t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??={},t.raw[this.currentAttachedFile.fileUid.toString()]=new xi(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 e=this.currentAttachedFile.fileName,n=`unknown`;if(e){let t=e.toLowerCase();t.startsWith(`cover.`)?n=`coverFront`:t.startsWith(`back.`)&&(n=`coverBack`)}t.images??=[],t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:n,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case R.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=qs(e,i);break;case R.FileName:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=Qs(e,i);break;case R.FileMediaType:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=Zs(e,i);break;case R.FileData:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=V(e,i);break;case R.FileDescription:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=Qs(e,i);break;case R.ContentEncodings:if(!this.currentTrack)break;this.readContiguousElements(e.slice(a,i)),this.currentTrack.decodingInstructions.sort((e,t)=>t.order-e.order);break;case R.ContentEncoding:this.currentDecodingInstruction={order:0,scope:sc.Block,data:null},this.readContiguousElements(e.slice(a,i)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case R.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=z(e,i);break;case R.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=z(e,i);break;case R.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:`decompress`,algorithm:cc.Zlib,settings:null},this.readContiguousElements(e.slice(a,i));break;case R.ContentCompAlgo:if(this.currentDecodingInstruction?.data?.type!==`decompress`)break;this.currentDecodingInstruction.data.algorithm=z(e,i);break;case R.ContentCompSettings:if(this.currentDecodingInstruction?.data?.type!==`decompress`)break;this.currentDecodingInstruction.data.settings=V(e,i);break;case R.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:`decrypt`};break}return e.filePos=a+i,!0}decodeBlockData(e,t){D(e.decodingInstructions.length>0);let n=t;for(let t of e.decodingInstructions)switch(D(t.data),t.data.type){case`decompress`:switch(t.data.algorithm){case cc.HeaderStripping:if(t.data.settings&&t.data.settings.length>0){let e=t.data.settings,r=new Uint8Array(e.length+n.length);r.set(e,0),r.set(n,e.length),n=r}break;default:}break;default:}return n}processTagValue(e,t){if(!this.currentSegment?.metadataTags)return;let n=this.currentSegment.metadataTags;if(n.raw??={},n.raw[e]??=t,typeof t==`string`)switch(e.toLowerCase()){case`title`:n.title??=t;break;case`description`:n.description??=t;break;case`artist`:n.artist??=t;break;case`album`:n.album??=t;break;case`album_artist`:n.albumArtist??=t;break;case`genre`:n.genre??=t;break;case`comment`:n.comment??=t;break;case`lyrics`:n.lyrics??=t;break;case`date`:{let e=new Date(t);Number.isNaN(e.getTime())||(n.date??=e)}break;case`track_number`:case`part_number`:{let e=t.split(`/`),r=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(r)&&r>0&&(n.trackNumber??=r),i&&Number.isInteger(i)&&i>0&&(n.tracksTotal??=i)}break;case`disc_number`:case`disc`:{let e=t.split(`/`),r=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(r)&&r>0&&(n.discNumber??=r),i&&Number.isInteger(i)&&i>0&&(n.discsTotal??=i)}break}}},fc=class{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),n=0;for(let r of e.segments)for(let e of r.tracks)if(e.trackBacking.getType()===t&&n++,e===this.internalTrack)break;return n}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.internalTrack.segment;if(e.duration<=0)return null;let t=e.duration/e.timestampFactor,n=await this.getFirstPacket({metadataOnly:!0});return t+=n?.timestamp??0,t}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return Sr(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){let n=this.intoTimescale(e);return this.performClusterLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};let r=N(t.presentationTimestamps,n,e=>e.timestamp);return{blockIndex:r===-1?-1:t.presentationTimestamps[r].blockIndex,correctBlockFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextPacket(e,t){let n=this.packetToClusterLocation.get(e);if(n===void 0)throw Error(`Packet was not created from this track.`);return this.performClusterLookup(n.cluster,e=>{if(e===n.cluster){let t=e.trackData.get(this.internalTrack.id);if(n.blockIndex+1<t.blocks.length)return{blockIndex:n.blockIndex+1,correctBlockFound:!0}}else if(e.trackData.get(this.internalTrack.id))return{blockIndex:0,correctBlockFound:!0};return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let n=this.intoTimescale(e);return this.performClusterLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};let r=ur(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=n);return{blockIndex:r===-1?-1:t.presentationTimestamps[r].blockIndex,correctBlockFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextKeyPacket(e,t){let n=this.packetToClusterLocation.get(e);if(n===void 0)throw Error(`Packet was not created from this track.`);return this.performClusterLookup(n.cluster,e=>{if(e===n.cluster){let t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>n.blockIndex);if(t!==-1)return{blockIndex:t,correctBlockFound:!0}}else{let t=e.trackData.get(this.internalTrack.id);if(t&&t.firstKeyFrameTimestamp!==null){let e=t.blocks.findIndex(e=>e.isKeyFrame);return D(e!==-1),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,n){if(t===-1)return null;let r=e.trackData.get(this.internalTrack.id).blocks[t];D(r),r.decoded||=(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),!0);let i=n.metadataOnly?Lo:r.data,a=r.timestamp/this.internalTrack.segment.timestampFactor,o=r.duration/this.internalTrack.segment.timestampFactor,s={};r.mainAdditional&&this.internalTrack.info?.type===`video`&&this.internalTrack.info.alphaMode&&(s.alpha=n.metadataOnly?Lo:r.mainAdditional,s.alphaByteLength=r.mainAdditional.byteLength);let c=new L(i,r.isKeyFrame?`key`:`delta`,a,o,e.dataStartPos+t,r.data.byteLength,s);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,n,r,i){let{demuxer:a,segment:o}=this.internalTrack,s=null,c=null,l=-1;if(e){let{blockIndex:n,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,n,i);n!==-1&&(c=e,l=n)}let u=N(this.internalTrack.cuePoints,n,e=>e.time),d=u===-1?null:this.internalTrack.cuePoints[u],f=N(this.internalTrack.clusterPositionCache,n,e=>e.startTimestamp),p=f===-1?null:this.internalTrack.clusterPositionCache[f],m=Math.max(d?.clusterPosition??0,p?.elementStartPos??0)||null,h;for(e?m===null||e.elementStartPos>=m?(h=e.elementEndPos,s=e):h=m:h=m??o.clusterSeekStartPos;o.elementEndPos===null||h<=o.elementEndPos-Us;){if(s){let e=s.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=a.reader.requestSliceRange(h,Us,Ws);if(e instanceof Promise&&(e=await e),!e)break;let n=h,u=Xs(e);if(!u||!Fs.includes(u.id)&&u.id!==R.Void){let e=await tc(a.reader,n,Fs,Math.min(o.elementEndPos??1/0,n+uc));if(e){h=e;continue}else break}let d=u.id,f=u.size,p=e.filePos;if(d===R.Cluster){s=await a.readCluster(n,o),f=s.elementEndPos-p;let{blockIndex:e,correctBlockFound:r}=t(s);if(r)return this.fetchPacketInCluster(s,e,i);e!==-1&&(c=s,l=e)}f===void 0&&(D(d!==R.Cluster),f=(await ec(a.reader,p,Is,o.elementEndPos)).pos-p);let m=p+f;if(o.elementEndPos===null){let e=a.reader.requestSliceRange(m,Us,Ws);if(e instanceof Promise&&(e=await e),!e)break;if(Js(e)===R.Segment){o.elementEndPos=m;break}}h=m}if(d&&(!c||c.elementStartPos<d.clusterPosition)){let e=this.internalTrack.cuePoints[u-1];D(!e||e.time<d.time);let n=e?.time??-1/0;return this.performClusterLookup(null,t,n,r,i)}return c?this.fetchPacketInCluster(c,l,i):null}},pc=class extends fc{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return`video`}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.info.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return this.internalTrack.info.alphaMode}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{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 t={codec:Yi({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?Ua(e.data):null,hevcCodecInfo:this.internalTrack.info.codec===`hevc`&&e?$a(e.data):null,vp9CodecInfo:this.internalTrack.info.codec===`vp9`&&e?fo(e.data):null,av1CodecInfo:this.internalTrack.info.codec===`av1`&&e?mo(e.data):null}),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace??void 0};return(this.internalTrack.info.width!==this.internalTrack.info.squarePixelWidth||this.internalTrack.info.height!==this.internalTrack.info.squarePixelHeight)&&(t.displayAspectWidth=this.internalTrack.info.squarePixelWidth,t.displayAspectHeight=this.internalTrack.info.squarePixelHeight),t})():null}},mc=class extends fc{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:Zi({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}}})),gc,_c=n((()=>{Oa(),G(),gc=async(e,t,n)=>{let r=2**16,i=t;for(;n===null||i<n;){let t=n===null?r:Math.min(r,n-i),a=e.requestSliceRange(i,ga,t);if(a instanceof Promise&&(a=await a),!a||a.length<ga)break;for(;a.remainingLength>=ga;){let t=a.filePos,n=wa(U(a),e.fileSize===null?null:e.fileSize-i);if(n.header)return{header:n.header,startPos:i};a.filePos=t+n.bytesAdvanced,i=a.filePos}}return null}})),vc,yc,bc=n((()=>{Io(),Ei(),F(),Ro(),Oa(),Qp(),_c(),G(),vc=class extends Fo{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 tr,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 Error(`No valid MP3 frame found.`);this.trackBackings=[new yc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Wp);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Jp(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=await gc(this.reader,this.lastLoadedPos,this.reader.fileSize);if(!e){this.lastSampleLoaded=!0;return}let t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;let n=Ca(t.mpegVersionId,t.channel),r=this.reader.requestSlice(e.startPos+n,4);if(r instanceof Promise&&(r=await r),r){let t=U(r);if(t===ya||t===ba){if(!this.xingData){let t=this.reader.requestSlice(e.startPos+n+4,12);if(t instanceof Promise&&(t=await t),t){let e=j(V(t,12)),n=e.getUint32(0,!1);this.xingData={frameCount:n&Da.FrameCount?e.getUint32(4,!1):null,fileSize:n&Da.FileSize?e.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos),t.sampleRate!==this.firstFrameHeader.sampleRate&&console.warn(`MP3 changed sample rate mid-file: ${this.firstFrameHeader.sampleRate} Hz to ${t.sampleRate} Hz. Might be a bug, so please report this file.`);let i=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,a={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:i,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(a),this.nextTimestampInSamples+=t.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 e=0,t=!1;for(;;){let n=this.reader.requestSlice(e,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=!0;let i=this.reader.requestSlice(n.filePos,r.size);if(i instanceof Promise&&(i=await i),!i)break;Yp(i,r,this.metadataTags),e=n.filePos+r.size}if(!t&&this.reader.fileSize!==null&&this.reader.fileSize>=Up){let e=this.reader.requestSlice(this.reader.fileSize-Up,Up);e instanceof Promise&&(e=await e),D(e),W(e,3)===`TAG`&&Kp(e,this.metadataTags)}return this.metadataTags}finally{e()}}},yc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getTimeResolution(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.demuxer;if(D(e.firstFrameHeader!==null),D(e.firstFrameHeaderPos!==null),e.xingData){if(e.xingData.frameCount!==null)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(e.reader.fileSize!==null){let t=Sa(e.firstFrameHeader.lowSamplingFrequency,e.firstFrameHeader.layer,e.firstFrameHeader.bitrate,e.firstFrameHeader.sampleRate),n=(e.reader.fileSize-e.firstFrameHeaderPos)/t;return Math.round(n)*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getCodec(){return`mp3`}getInternalCodecId(){return null}getNumberOfChannels(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.channel===3?1:2}getSampleRate(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.firstFrameHeader),{codec:`mp3`,numberOfChannels:this.demuxer.firstFrameHeader.channel===3?1:2,sampleRate:this.demuxer.firstFrameHeader.sampleRate}}async getPacketAtIndex(e,t){if(e===-1)return null;let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Lo;else{let e=this.demuxer.reader.requestSlice(n.dataStart,n.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=V(e,n.dataSize)}return new L(r,`key`,n.timestamp,n.duration,e,n.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=or(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(n===-1)throw Error(`Packet was not created from this track.`);let r=n+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{n()}}async getPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded||n>=0&&n+1<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(n,t);await this.demuxer.advanceReader()}}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),xc,Sc,Cc,wc,Tc,Ec,Dc=n((()=>{Po(),F(),xc=1399285583,Sc=79764919,Cc=new Uint32Array(256);for(let e=0;e<256;e++){let t=e<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Sc:t<<1;Cc[e]=t>>>0&4294967295}wc=e=>{let t=j(e),n=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let t=0;t<e.length;t++){let n=e[t];r=(r<<8^Cc[r>>>24^n])>>>0}return t.setUint32(22,n,!0),r},Tc=(e,t,n)=>{let r=0,i=null;if(e.length>0)if(t.codec===`vorbis`){D(t.vorbisInfo);let a=t.vorbisInfo.modeBlockflags.length,o=(1<<Dr(a-1))-1<<1,s=(e[0]&o)>>1;if(s>=t.vorbisInfo.modeBlockflags.length)throw Error(`Invalid mode number.`);let c=n,l=t.vorbisInfo.modeBlockflags[s];if(i=t.vorbisInfo.blocksizes[l],l===1){let n=(o|1)+1,r=e[0]&n?1:0;c=t.vorbisInfo.blocksizes[r]}r=c===null?0:c+i>>2}else t.codec===`opus`&&(r=_o(e).durationInSamples);return{durationInSamples:r,vorbisBlockSize:i}},Ec=e=>{let t=`audio/ogg`;if(e.codecStrings){let n=[...new Set(e.codecStrings)];t+=`; codecs="${n.join(`, `)}"`}return t}})),Oc,kc,Ac,jc,Mc,Nc=n((()=>{G(),Dc(),Oc=27,kc=282,Ac=kc+65025,jc=e=>{let t=e.filePos;if(jp(e)!==xc)return null;e.skip(1);let n=H(e),r=Lp(e),i=jp(e),a=jp(e),o=jp(e),s=H(e),c=new Uint8Array(s);for(let t=0;t<s;t++)c[t]=H(e);let l=27+s,u=c.reduce((e,t)=>e+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:n,granulePosition:r,serialNumber:i,sequenceNumber:a,checksum:o,lacingValues:c}},Mc=(e,t)=>{for(;e.filePos<t-3;){let t=jp(e),n=t&255,r=t>>>8&255,i=t>>>16&255,a=t>>>24&255;if(!(n!==79&&r!==79&&i!==79&&a!==79)){if(e.skip(-4),t===xc)return!0;e.skip(1)}}return!1}})),Pc,Fc,Ic,Lc,Rc=n((()=>{ha(),Po(),Io(),Ei(),F(),Ro(),G(),Dc(),Nc(),Pc=class extends Fo{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 t=this.reader.requestSliceRange(e,Oc,kc);if(t instanceof Promise&&(t=await t),!t)break;let n=jc(t);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 e of this.bitstreams){let t=await this.readPacket(e.bosPage,0);t&&(t.data.byteLength>=7&&t.data[0]===1&&t.data[1]===118&&t.data[2]===111&&t.data[3]===114&&t.data[4]===98&&t.data[5]===105&&t.data[6]===115?await this.readVorbisMetadata(t,e):t.data.byteLength>=8&&t.data[0]===79&&t.data[1]===112&&t.data[2]===117&&t.data[3]===115&&t.data[4]===72&&t.data[5]===101&&t.data[6]===97&&t.data[7]===100&&await this.readOpusMetadata(t,e),e.codecInfo.codec!==null&&this.trackBackings.push(new Fc(e,this)))}})()}async readVorbisMetadata(e,t){let n=await this.findNextPacketStart(e);if(!n)return;let r=await this.readPacket(n.startPage,n.startSegmentIndex);if(!r||(n=await this.findNextPacketStart(r),!n))return;let i=await this.readPacket(n.startPage,n.startSegmentIndex);if(!i||r.data[0]!==3||i.data[0]!==5)return;let a=[],o=e=>{for(;a.push(Math.min(255,e)),!(e<255);)e-=255};o(e.data.length),o(r.data.length);let s=new Uint8Array(1+a.length+e.data.length+r.data.length+i.data.length);s[0]=2,s.set(a,1),s.set(e.data,1+a.length),s.set(r.data,1+a.length+e.data.length),s.set(i.data,1+a.length+e.data.length+r.data.length),t.codecInfo.codec=`vorbis`,t.description=s,t.lastMetadataPacket=i;let c=j(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);let l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(l&15),1<<(l>>4)],modeBlockflags:vo(i.data).modeBlockflags},xo(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){let n=await this.findNextPacketStart(e);if(!n)return;let r=await this.readPacket(n.startPage,n.startSegmentIndex);if(!r)return;t.codecInfo.codec=`opus`,t.description=e.data,t.lastMetadataPacket=r;let i=ho(e.data);t.numberOfChannels=i.outputChannelCount,t.sampleRate=ea,t.codecInfo.opusInfo={preSkip:i.preSkip},xo(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){D(t<e.lacingValues.length);let n=0;for(let r=0;r<t;r++)n+=e.lacingValues[r];let r=e,i=n,a=t,o=[];outer:for(;;){let t=this.reader.requestSlice(r.dataStartPos,r.dataSize);t instanceof Promise&&(t=await t),D(t);let s=V(t,r.dataSize);for(;;){if(a===r.lacingValues.length){o.push(s.subarray(n,i));break}let e=r.lacingValues[a];if(i+=e,e<255){o.push(s.subarray(n,i));break outer}a++}let c=r.headerStartPos+r.totalSize;for(;;){let t=this.reader.requestSliceRange(c,Oc,kc);if(t instanceof Promise&&(t=await t),!t)return null;let n=jc(t);if(!n)return null;if(r=n,r.serialNumber===e.serialNumber)break;c=r.headerStartPos+r.totalSize}n=0,i=0,a=0}let s=o.reduce((e,t)=>e+t.length,0);if(s===0)return null;let c=new Uint8Array(s),l=0;for(let e=0;e<o.length;e++){let t=o[e];c.set(t,l),l+=t.length}return{data:c,endPage:r,endSegmentIndex:a}}async findNextPacketStart(e){if(e.endSegmentIndex<e.endPage.lacingValues.length-1)return{startPage:e.endPage,startSegmentIndex:e.endSegmentIndex+1};if(e.endPage.headerType&4)return null;let t=e.endPage.headerStartPos+e.endPage.totalSize;for(;;){let n=this.reader.requestSliceRange(t,Oc,kc);if(n instanceof Promise&&(n=await n),!n)return null;let r=jc(n);if(!r)return null;if(r.serialNumber===e.endPage.serialNumber)return{startPage:r,startSegmentIndex:0};t=r.headerStartPos+r.totalSize}}async getMimeType(){return await this.readMetadata(),Ec({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},Fc=class{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new tr,this.internalSampleRate=e.codecInfo.codec===`opus`?ea:e.sampleRate}getType(){return`audio`}getId(){return this.bitstream.serialNumber}getNumber(){let e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return D(e!==-1),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return D(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 xr}getDisposition(){return{...wi,primary:!1}}granulePositionToTimestampInSamples(e){return this.bitstream.codecInfo.codec===`opus`?(D(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,n){if(!e)return null;let{durationInSamples:r,vorbisBlockSize:i}=Tc(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),a=new L(n.metadataOnly?Lo:e.data,`key`,Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(a,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:i}),a}async getFirstPacket(e){D(this.bitstream.lastMetadataPacket);let t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let n=0;this.bitstream.codecInfo.codec===`opus`&&(D(this.bitstream.codecInfo.opusInfo),n-=this.bitstream.codecInfo.opusInfo.preSkip);let r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:n,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){let n=this.encodedPacketToMetadata.get(e);if(!n)throw Error(`Packet was not created from this track.`);let r=await this.demuxer.findNextPacketStart(n.packet);if(!r)return null;let i=n.timestampInSamples+n.durationInSamples,a=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(a,{timestampInSamples:i,vorbisLastBlocksize:n.vorbisBlockSize},t)}async getPacket(e,t){if(this.demuxer.reader.fileSize===null)return this.getPacketSequential(e,t);let n=Sr(e*this.internalSampleRate);if(n===0)return this.getFirstPacket(t);if(n<0)return null;D(this.bitstream.lastMetadataPacket);let r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let i=r.startPage,a=this.demuxer.reader.fileSize,o=[i];outer:for(;i.headerStartPos+i.totalSize<a;){let e=i.headerStartPos,t=Math.floor((e+a)/2),r=t;for(;;){let e=Math.min(r+Ac,a-Oc),s=this.demuxer.reader.requestSlice(r,e-r);if(s instanceof Promise&&(s=await s),D(s),!Mc(s,e)){a=t+Oc;continue outer}let c=this.demuxer.reader.requestSliceRange(s.filePos,Oc,kc);c instanceof Promise&&(c=await c),D(c);let l=jc(c);D(l);let u=!1;if(l.serialNumber===this.bitstream.serialNumber)u=!0;else{let e=this.demuxer.reader.requestSlice(l.headerStartPos,l.totalSize);e instanceof Promise&&(e=await e),D(e),u=wc(V(e,l.totalSize))===l.checksum}if(!u){r=l.headerStartPos+4;continue}if(u&&l.serialNumber!==this.bitstream.serialNumber){r=l.headerStartPos+l.totalSize;continue}if(l.granulePosition===-1){r=l.headerStartPos+l.totalSize;continue}this.granulePositionToTimestampInSamples(l.granulePosition)>n?a=l.headerStartPos:(i=l,o.push(l));continue outer}}let s=r.startPage;for(let e of o){if(e.granulePosition===i.granulePosition)break;(!s||e.headerStartPos>s.headerStartPos)&&(s=e)}let c=s,l=[c];for(;!(c.serialNumber===this.bitstream.serialNumber&&c.granulePosition===i.granulePosition);){let e=c.headerStartPos+c.totalSize,t=this.demuxer.reader.requestSliceRange(e,Oc,kc);t instanceof Promise&&(t=await t),D(t);let n=jc(t);D(n),c=n,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}D(c.granulePosition!==-1);let u=null,d,f,p=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)d=this.granulePositionToTimestampInSamples(0),f=!0,u=0;else{d=0,f=!1;for(let e=c.lacingValues.length-1;e>=0;e--)if(c.lacingValues[e]<255){u=e+1;break}if(u===null)throw Error(`Invalid page with granule position: no packets end on this page.`);m=u-1;let e={data:Lo,endPage:p,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){let e=Lc(l,c,u);D(e);let t=Ic(l,e.page,e.segmentIndex);t&&(c=t.page,u=t.segmentIndex)}else for(;;){let e=Lc(l,c,u);if(!e)break;let t=Ic(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,u=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,m=e.segmentIndex;break}}}let h=null,g=null;for(;c!==null;){D(u!==null);let e=await this.demuxer.readPacket(c,u);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&u<r.startSegmentIndex)){let r=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d,vorbisLastBlocksize:g?.vorbisBlockSize??null},t);D(r);let i=this.encodedPacketToMetadata.get(r);if(D(i),!f&&e.endPage.headerStartPos===p.headerStartPos&&e.endSegmentIndex===m?(d=this.granulePositionToTimestampInSamples(c.granulePosition),f=!0,r=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d-i.durationInSamples,vorbisLastBlocksize:g?.vorbisBlockSize??null},t),D(r),i=this.encodedPacketToMetadata.get(r),D(i)):d+=i.durationInSamples,h=r,g=i,f&&(Math.max(d,0)>n||Math.max(i.timestampInSamples,0)===n))break}let i=await this.demuxer.findNextPacketStart(e);if(!i)break;c=i.startPage,u=i.startSegmentIndex}return h}async getPacketSequential(e,t){let n=await this.sequentialScanMutex.acquire();try{let n=Sr(e*this.internalSampleRate);e=n/this.internalSampleRate;let r=N(this.sequentialScanCache,n,e=>e.timestampInSamples),i;if(r!==-1){let e=this.sequentialScanCache[r];i=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else i=await this.getFirstPacket(t);let a=0;for(;i&&i.timestamp<e;){let n=await this.getNextPacket(i,t);if(!n||n.timestamp>e)break;if(i=n,a++,a===100){a=0;let e=this.encodedPacketToMetadata.get(i);D(e),this.sequentialScanCache.length>0&&D(O(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return i}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}},Ic=(e,t,n)=>{let r=t,i=n;outer:for(;;){for(i--;i>=0;i--)if(r.lacingValues[i]<255){i++;break outer}if(D(i===-1),!(r.headerType&1)){i=0;break}let t=lr(e,e=>e.headerStartPos<r.headerStartPos);if(!t)return null;r=t,i=r.lacingValues.length}if(D(i!==-1),i===r.lacingValues.length){let t=e[e.indexOf(r)+1];D(t),r=t,i=0}return{page:r,segmentIndex:i}},Lc=(e,t,n)=>{if(n>0)return{page:t,segmentIndex:n-1};let r=lr(e,e=>e.headerStartPos<t.headerStartPos);return r?{page:r,segmentIndex:r.lacingValues.length-1}:null}})),zc,Bc,Vc,Hc,Uc=n((()=>{Io(),Ei(),F(),Ro(),G(),Qp(),(function(e){e[e.PCM=1]=`PCM`,e[e.IEEE_FLOAT=3]=`IEEE_FLOAT`,e[e.ALAW=6]=`ALAW`,e[e.MULAW=7]=`MULAW`,e[e.EXTENSIBLE=65534]=`EXTENSIBLE`})(zc||={}),Bc=class extends Fo{constructor(e){super(e),this.metadataPromise=null,this.dataStart=-1,this.dataSize=-1,this.audioInfo=null,this.trackBackings=[],this.lastKnownPacketIndex=0,this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),D(e);let t=W(e,4),n=t!==`RIFX`,r=t===`RF64`,i=Ap(e,n),a=r?this.reader.fileSize:Math.min(i+8,this.reader.fileSize??1/0);if(W(e,4)!==`WAVE`)throw Error(`Invalid WAVE file - wrong format`);let o=0,s=null,c=e.filePos;for(;a===null||c<a;){let e=this.reader.requestSlice(c,8);if(e instanceof Promise&&(e=await e),!e)break;let t=W(e,4),i=Ap(e,n),l=e.filePos;if(r&&o===0&&t!==`ds64`)throw Error(`Invalid RF64 file: First chunk must be "ds64".`);if(t===`fmt `)await this.parseFmtChunk(l,i,n);else if(t===`data`){if(s??=i,this.dataStart=e.filePos,this.dataSize=Math.min(s,(a??1/0)-this.dataStart),this.reader.fileSize===null)break}else if(t===`ds64`){let e=this.reader.requestSlice(l,i);if(e instanceof Promise&&(e=await e),!e)break;let t=Pp(e,n);s=Pp(e,n),a=Math.min(t+8,this.reader.fileSize??1/0)}else t===`LIST`?await this.parseListChunk(l,i,n):(t===`ID3 `||t===`id3 `)&&await this.parseId3Chunk(l,i);c=l+i+(i&1),o++}if(!this.audioInfo)throw Error(`Invalid WAVE file - missing "fmt " chunk`);if(this.dataStart===-1)throw Error(`Invalid WAVE file - missing "data" chunk`);let l=this.audioInfo.blockSizeInBytes;this.dataSize=Math.floor(this.dataSize/l)*l,this.trackBackings.push(new Hc(this))})()}async parseFmtChunk(e,t,n){let r=this.reader.requestSlice(e,t);if(r instanceof Promise&&(r=await r),!r)return;let i=Ep(r,n),a=Ep(r,n),o=Ap(r,n);r.skip(4);let s=Ep(r,n),c;if(c=t===14?8:Ep(r,n),t>=18&&i!==357){let e=Ep(r,n),a=t-18;if(Math.min(a,e)>=22&&i===zc.EXTENSIBLE){r.skip(6);let e=V(r,16);i=e[0]|e[1]<<8}}(i===zc.MULAW||i===zc.ALAW)&&(c=8),this.audioInfo={format:i,numberOfChannels:a,sampleRate:o,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:s}}async parseListChunk(e,t,n){let r=this.reader.requestSlice(e,t);if(r instanceof Promise&&(r=await r),!r)return;let i=W(r,4);if(i!==`INFO`&&i!==`INF0`)return;let a=r.filePos;for(;a<=e+t-8;){r.filePos=a;let e=W(r,4),t=Ap(r,n),i=V(r,t),o=0;for(let e=0;e<i.length&&i[e]!==0;e++)o++;let s=String.fromCharCode(...i.subarray(0,o));switch(this.metadataTags.raw??={},this.metadataTags.raw[e]=s,e){case`INAM`:case`TITL`:this.metadataTags.title??=s;break;case`TIT3`:this.metadataTags.description??=s;break;case`IART`:this.metadataTags.artist??=s;break;case`IPRD`:this.metadataTags.album??=s;break;case`IPRT`:case`ITRK`:case`TRCK`:{let e=s.split(`/`),t=Number.parseInt(e[0],10),n=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(this.metadataTags.trackNumber??=t),n&&Number.isInteger(n)&&n>0&&(this.metadataTags.tracksTotal??=n)}break;case`ICRD`:case`IDIT`:{let e=new Date(s);Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`YEAR`:{let e=Number.parseInt(s,10);Number.isInteger(e)&&e>0&&(this.metadataTags.date??=new Date(e,0,1))}break;case`IGNR`:case`GENR`:this.metadataTags.genre??=s;break;case`ICMT`:case`CMNT`:case`COMM`:this.metadataTags.comment??=s;break}a+=8+t+(t&1)}}async parseId3Chunk(e,t){let n=this.reader.requestSlice(e,t);if(n instanceof Promise&&(n=await n),!n)return;let r=Jp(n);if(r){let i=t-Wp;r.size=Math.min(r.size,i),r.size>0&&Yp(n.slice(e+Wp,r.size),r,this.metadataTags)}}getCodec(){if(D(this.audioInfo),this.audioInfo.format===zc.MULAW)return`ulaw`;if(this.audioInfo.format===zc.ALAW)return`alaw`;if(this.audioInfo.format===zc.PCM){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===zc.IEEE_FLOAT&&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}},Vc=2048,Hc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){let e=this.demuxer.getCodec();return e?(D(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return D(this.demuxer.dataSize!==-1),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getDisposition(){return{...wi}}async getPacketAtIndex(e,t){D(e>=0),D(this.demuxer.audioInfo);let n=e*Vc*this.demuxer.audioInfo.blockSizeInBytes;if(n>=this.demuxer.dataSize)return null;let r=Math.min(Vc*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-n);if(this.demuxer.reader.fileSize===null){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+n,r);if(e instanceof Promise&&(e=await e),!e)return null}let i;if(t.metadataOnly)i=Lo;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+n,r);e instanceof Promise&&(e=await e),D(e),i=V(e,r)}let a=e*Vc/this.demuxer.audioInfo.sampleRate,o=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new L(i,`key`,a,o,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){D(this.demuxer.audioInfo);let n=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Vc,(this.demuxer.dataSize-1)/(Vc*this.demuxer.audioInfo.blockSizeInBytes)));if(n<0)return null;let r=await this.getPacketAtIndex(n,t);if(r)return r;if(n===0)return null;D(this.demuxer.reader.fileSize===null);let i=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;i;){let e=await this.getNextPacket(i,t);if(!e)break;i=e}return i}getNextPacket(e,t){D(this.demuxer.audioInfo);let n=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Vc);return this.getPacketAtIndex(n+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),Wc,Gc,Kc,qc=n((()=>{Di(),G(),Wc=7,Gc=9,Kc=e=>{let t=e.filePos,n=new I(V(e,9));if(n.readBits(12)!==4095||(n.skipBits(1),n.readBits(2)!==0))return null;let r=n.readBits(1),i=n.readBits(2)+1,a=n.readBits(4);if(a===15)return null;n.skipBits(1);let o=n.readBits(3);if(o===0)throw Error(`ADTS frames with channel configuration 0 are not supported.`);n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let s=n.readBits(13);n.skipBits(11);let c=n.readBits(2)+1;if(c!==1)throw Error(`ADTS frames with more than one AAC frame are not supported.`);let l=null;return r===1?e.filePos-=2:l=n.readBits(16),{objectType:i,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:s,numberOfAacFrames:c,crcCheck:l,startPos:t}}})),Jc,Yc,Xc,Zc=n((()=>{Pi(),Io(),Qp(),Ei(),F(),Ro(),G(),qc(),Jc=1024,Yc=class extends Fo{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new tr,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();D(this.firstFrameHeader),this.trackBackings=[new Xc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Wp);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Jp(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,Wc,Gc);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Kc(e);if(!t){this.lastSampleLoaded=!0;return}if(this.reader.fileSize!==null&&t.startPos+t.frameLength>this.reader.fileSize){this.lastSampleLoaded=!0;return}this.firstFrameHeader||=t;let n=Oi[t.samplingFrequencyIndex];D(n!==void 0);let r=Jc/n,i={timestamp:this.nextTimestampInSamples/n,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(i),this.nextTimestampInSamples+=Jc,this.lastLoadedPos=t.startPos+t.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 e=0;for(;;){let t=this.reader.requestSlice(e,Wp);if(t instanceof Promise&&(t=await t),!t)break;let n=Jp(t);if(!n)break;let r=this.reader.requestSlice(t.filePos,n.size);if(r instanceof Promise&&(r=await r),!r)break;Yp(r,n,this.metadataTags),e=t.filePos+n.size}return this.metadataTags}finally{e()}}},Xc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/Jc}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getCodec(){return`aac`}getInternalCodecId(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){D(this.demuxer.firstFrameHeader);let e=ki[this.demuxer.firstFrameHeader.channelConfiguration];return D(e!==void 0),e}getSampleRate(){D(this.demuxer.firstFrameHeader);let e=Oi[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return D(e!==void 0),e}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(e===-1)return null;let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Lo;else{let e=this.demuxer.reader.requestSlice(n.dataStart,n.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=V(e,n.dataSize)}return new L(r,`key`,n.timestamp,n.duration,e,n.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=or(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(n===-1)throw Error(`Packet was not created from this track.`);let r=n+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{n()}}async getPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded||n>=0&&n+1<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(n,t);await this.demuxer.advanceReader()}}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),Qc,$c,el,tl,nl,rl,il=n((()=>{Di(),F(),G(),Qc=e=>e===0?null:e===1?192:e>=2&&e<=5?144*2**e:e===6?`uncommon-u8`:e===7?`uncommon-u16`:e>=8&&e<=15?2**e:null,$c=(e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return`uncommon-u8`;case 13:return`uncommon-u16`;case 14:return`uncommon-u16-10`;default:return null}},el=e=>{let t=0,n=new I(V(e,1));for(;n.readBits(1)===1;)t++;if(t===0)return n.readBits(7);let r=[],i=t-1,a=new I(V(e,i)),o=8-t-1;for(let e=0;e<o;e++)r.unshift(n.readBits(1));for(let e=0;e<i;e++)for(let e=0;e<8;e++){let t=a.readBits(1);e<2||r.unshift(t)}return r.reduce((e,t,n)=>e|t<<n,0)},tl=(e,t)=>{if(t===`uncommon-u16`)return Dp(e)+1;if(t===`uncommon-u8`)return H(e)+1;if(typeof t==`number`)return t;pr(t),D(!1)},nl=(e,t)=>t===`uncommon-u16`?Dp(e):t===`uncommon-u16-10`?Dp(e)*10:t===`uncommon-u8`?H(e):typeof t==`number`?t:null,rl=e=>{let t=0;for(let n of e){t^=n;for(let e=0;e<8;e++)t&128?t=t<<1^7:t<<=1,t&=255}return t}})),al,ol,sl=n((()=>{Po(),Io(),F(),Ro(),G(),Ei(),il(),Di(),al=class extends Fo{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 tr,this.lastSampleLoaded=!1,this.reader=e._reader}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTrackBackings(){return await this.readMetadata(),D(this.trackBacking),[this.trackBacking]}async getMimeType(){return`audio/flac`}async readMetadata(){let e=4;return this.metadataPromise??=(async()=>{for(;this.reader.fileSize===null||e<this.reader.fileSize;){let t=this.reader.requestSlice(e,4);if(t instanceof Promise&&(t=await t),e+=4,t===null)throw Error(`Metadata block at position ${e} is too small! Corrupted file.`);D(t);let n=H(t),r=Op(t),i=(n&128)!=0;switch(n&127){case bo.STREAMINFO:{let t=this.reader.requestSlice(e,r);if(t instanceof Promise&&(t=await t),D(t),t===null)throw Error(`StreamInfo block at position ${e} is too small! Corrupted file.`);let n=V(t,34),i=new I(n),a=i.readBits(16),o=i.readBits(16),s=i.readBits(24),c=i.readBits(24),l=i.readBits(20),u=i.readBits(3)+1;i.readBits(5);let d=i.readBits(36);i.skipBits(128);let f=new Uint8Array(42);f.set(new Uint8Array([102,76,97,67]),0),f.set(new Uint8Array([128,0,0,34]),4),f.set(n,8),this.audioInfo={numberOfChannels:u,sampleRate:l,totalSamples:d,minimumBlockSize:a,maximumBlockSize:o,minimumFrameSize:s,maximumFrameSize:c,description:f},this.trackBacking=new ol(this);break}case bo.VORBIS_COMMENT:{let t=this.reader.requestSlice(e,r);t instanceof Promise&&(t=await t),D(t),xo(V(t,r),this.metadataTags);break}case bo.PICTURE:{let t=this.reader.requestSlice(e,r);t instanceof Promise&&(t=await t),D(t);let n=U(t),i=U(t),a=Wn.decode(V(t,i)),o=U(t),s=Wn.decode(V(t,o));t.skip(16);let c=U(t),l=V(t,c);this.metadataTags.images??=[],this.metadataTags.images.push({data:l,mimeType:a,kind:n===3?`coverFront`:n===4?`coverBack`:`unknown`,description:s});break}default:break}if(e+=r,i){this.lastLoadedPos=e;break}}if(!this.audioInfo)throw Error(`Missing STREAMINFO metadata block! Corrupted FLAC file.`)})()}async readNextFlacFrame({startPos:e,isFirstPacket:t}){D(this.audioInfo);let n=this.audioInfo.maximumBlockSize*this.audioInfo.numberOfChannels*4+16+2,r=this.audioInfo.minimumFrameSize||10,i=(this.audioInfo.maximumFrameSize||n)+16,a=await this.reader.requestSliceRange(e,16,i);if(!a)return null;let o=this.readFlacFrameHeader({slice:a,isFirstPacket:t});if(!o)return null;for(a.filePos=e+r;;){if(a.filePos>a.end-6)return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:a.end-e,isLastFrame:!0};if(H(a)===255){let t=a.filePos;if(H(a)!==(this.blockingBit===1?249:248)){a.filePos=t;continue}a.skip(-2);let n=a.filePos-e,r=this.readFlacFrameHeader({slice:a,isFirstPacket:!1});if(!r){a.filePos=t;continue}if(this.blockingBit===0){if(r.num-o.num!==1){a.filePos=t;continue}}else if(r.num-o.num!==o.blockSize){a.filePos=t;continue}return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:n,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){let n=e.filePos,r=new I(V(e,4));if(r.readBits(15)!==32764)return null;if(this.blockingBit===null)D(t),this.blockingBit=r.readBits(1);else if(this.blockingBit===1){if(D(!t),r.readBits(1)!==1)return null}else if(this.blockingBit===0){if(D(!t),r.readBits(1)!==0)return null}else throw Error(`Invalid blocking bit`);let i=Qc(r.readBits(4));if(!i)return null;D(this.audioInfo);let a=$c(r.readBits(4),this.audioInfo.sampleRate);if(!a||(r.readBits(4),r.readBits(3),r.readBits(1)!==0))return null;let o=el(e),s=tl(e,i),c=nl(e,a);if(c===null||c!==this.audioInfo.sampleRate)return null;let l=e.filePos-n,u=H(e);return e.skip(-l),e.skip(-1),u===rl(V(e,l))?{num:o,blockSize:s,sampleRate:c}:null}async advanceReader(){await this.readMetadata(),D(this.lastLoadedPos!==null),D(this.audioInfo);let e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:this.loadedSamples.length===0});if(!t){this.lastSampleLoaded=!0;return}let n=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:n?n.blockOffset+n.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};if(this.lastLoadedPos+=t.size,this.loadedSamples.push(r),t.isLastFrame){this.lastSampleLoaded=!0;return}}},ol=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getCodec(){return`flac`}getInternalCodecId(){return null}getNumberOfChannels(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return xr}getTimeResolution(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.totalSamples===0?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.audioInfo),{codec:`flac`,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(D(this.demuxer.audioInfo),e<0)return null;let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(n===-1){await this.demuxer.advanceReader();continue}let r=this.demuxer.loadedSamples[n];if(r.blockOffset/this.demuxer.audioInfo.sampleRate+r.blockSize/this.demuxer.audioInfo.sampleRate<=e){if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader();continue}return this.getPacketAtIndex(n,t)}}finally{n()}}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=e.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,t)}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Lo;else{let e=this.demuxer.reader.requestSlice(n.byteOffset,n.byteSize);if(e instanceof Promise&&(e=await e),!e)return null;r=V(e,n.byteSize)}D(this.demuxer.audioInfo);let i=n.blockOffset/this.demuxer.audioInfo.sampleRate,a=n.blockSize/this.demuxer.audioInfo.sampleRate;return new L(r,`key`,i,a,e,n.byteSize)}async getFirstPacket(e){for(;this.demuxer.loadedSamples.length===0&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}})),cl,ll,ul,dl=n((()=>{cl=9e4,ll=188,ul=e=>{let t=`video/MP2T`,n=[...new Set(e.filter(Boolean))];return n.length>0&&(t+=`; codecs="${n.join(`, `)}"`),t}})),fl,pl,ml,hl,gl,_l,vl,yl,bl,xl,Sl,Cl=n((()=>{Zc(),qc(),Pi(),ha(),Po(),Io(),Ei(),F(),Oa(),Ro(),G(),dl(),ja(),Di(),fl=`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.`,pl=new Set,ml=class extends Fo{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=ll+16+1,t=this.reader.requestSlice(0,e);t instanceof Promise&&(t=await t),D(t);let n=V(t,e);if(n[0]===71&&n[ll]===71)this.packetOffset=0,this.packetStride=ll;else if(n[0]===71&&n[ll+16]===71)this.packetOffset=0,this.packetStride=ll+16;else if(n[4]===71&&n[4+ll+4]===71)this.packetOffset=4,this.packetStride=ll+4;else throw Error(`Unreachable.`);this.minReferencePointByteDistance=256*this.packetStride;let r=this.packetOffset,i=null,a=!1,o=!1;for(;;){let e=await this.readPacketHeader(r);if(!e)break;if(e.payloadUnitStartIndicator===0){r+=this.packetStride;continue}let t=await this.readSection(r,!0,!o);if(!t)break;let n=!1;if(!o&&t.pid!==0&&!(t.payload[0]===0&&t.payload[1]===0&&t.payload[2]===1)){let e=new I(t.payload),r=e.readAlignedByte();e.skipBits(8*r),n=e.readBits(8)===2}if(t.pid===0&&!a){let e=new I(t.payload),n=e.readAlignedByte();e.skipBits(8*n),e.skipBits(14);let r=e.readBits(10);for(e.skipBits(40);8*(r+3)-e.pos>32;){let t=e.readBits(16);e.skipBits(3);let n=e.readBits(13);if(t!==0){if(i!==null)throw Error(`Only files with a single program are supported.`);i=n}}if(i===null)throw Error(`Program Association Table must link to a Program Map Table.`);a=!0}else if((t.pid===i||n)&&!o){let e=new I(t.payload),n=e.readAlignedByte();e.skipBits(8*n),e.skipBits(12);let r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);let i=e.readBits(10);for(e.skipBits(8*i);8*(r+3)-e.pos>32;){let t=e.readBits(8);e.skipBits(3);let n=e.readBits(13);e.skipBits(6);let r=e.readBits(10),i=e.pos+8*r,a=!1,o=!1;for(;e.pos<i;){let t=e.readBits(8),n=e.readBits(8);t===106?a=!0:(t===122||t===204)&&(o=!0),e.skipBits(8*n)}let s=null;switch(t){case 27:case 36:s={type:`video`,codec:t===27?`avc`:`hevc`,decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:{let e;if(t===3||t===4)e=`mp3`;else if(t===15)e=`aac`;else if(t===129)e=`ac3`;else if(t===135)e=`eac3`;else throw Error(`Unreachable.`);s={type:`audio`,codec:e,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:o?s={type:`audio`,codec:`eac3`,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}:a&&(s={type:`audio`,codec:`ac3`,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1});break;default:pl.has(t)||(console.warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),pl.add(t))}s&&this.elementaryStreams.push({demuxer:this,pid:n,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:s,referencePesPackets:[]})}o=!0}else{let e=this.elementaryStreams.find(e=>e.pid===t.pid);outer:if(e&&!e.initialized){let n=gl(t,!0);if(!n)throw Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=t.randomAccessIndicator===1,this.input._initInput){let n=(await this.input._initInput._getDemuxer()).elementaryStreams.find(n=>n.pid===t.pid&&n.info.codec===e.info.codec);if(n){e.info=n.info,e.initialized=!0;break outer}}let r=new xl(e,n);if(e.info.type===`video`){for(;;){let t=r;if(t.suppliedPacket=null,await r.markNextPacket(),e.info.codec===`avc`){if(!r.suppliedPacket)throw Error(`Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.`);if(e.info.avcCodecInfo=Ua(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;let t=e.info.avcCodecInfo.sequenceParameterSets[0];D(t);let n=qa(t);e.info.width=n.displayWidth,e.info.height=n.displayHeight;let i=n.pixelAspectRatio.num,a=n.pixelAspectRatio.den;i>0&&a>0&&(i>a?(e.info.squarePixelWidth=Math.round(e.info.width*i/a),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*a/i))),e.info.colorSpace={primaries:Jn[n.colourPrimaries],transfer:Xn[n.transferCharacteristics],matrix:Qn[n.matrixCoefficients],fullRange:!!n.fullRangeFlag},e.info.reorderSize=n.maxDecFrameBuffering;break}else if(e.info.codec===`hevc`){if(!r.suppliedPacket)throw Error(`Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.`);if(e.info.hevcCodecInfo=$a(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;let t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===Na.SPS_NUT).nalUnits[0];D(t);let n=Qa(t);e.info.width=n.displayWidth,e.info.height=n.displayHeight,n.pixelAspectRatio.num>n.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*n.pixelAspectRatio.num/n.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*n.pixelAspectRatio.den/n.pixelAspectRatio.num)),e.info.colorSpace={primaries:Jn[n.colourPrimaries],transfer:Xn[n.transferCharacteristics],matrix:Qn[n.matrixCoefficients],fullRange:!!n.fullRangeFlag},e.info.reorderSize=n.maxDecFrameBuffering;break}else throw Error(`Unhandled.`)}e.info.decoderConfig={codec:Yi({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},(e.info.width!==e.info.squarePixelWidth||e.info.height!==e.info.squarePixelHeight)&&(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if(e.info.codec===`aac`){let t=Kc(wp.tempFromBytes(r.suppliedPacket.data));if(!t)throw Error(`Invalid AAC audio stream; could not read ADTS frame header from first packet.`);e.info.aacCodecInfo={isMpeg2:!1,objectType:t.objectType},e.info.numberOfChannels=ki[t.channelConfiguration],e.info.sampleRate=Oi[t.samplingFrequencyIndex]}else if(e.info.codec===`mp3`){let t=wa(U(wp.tempFromBytes(r.suppliedPacket.data)),r.suppliedPacket.data.byteLength);if(!t.header)throw Error(`Invalid MP3 audio stream; could not read frame header from first packet.`);e.info.numberOfChannels=t.header.channel===3?1:2,e.info.sampleRate=t.header.sampleRate}else if(e.info.codec===`ac3`){let t=wo(r.suppliedPacket.data);if(!t)throw Error(`Invalid AC-3 audio stream; could not read sync frame from first packet.`);if(t.fscod===3)throw Error(`Invalid AC-3 audio stream; reserved sample rate code found in first packet.`);e.info.numberOfChannels=Co[t.acmod]+t.lfeon,e.info.sampleRate=ka[t.fscod]}else if(e.info.codec===`eac3`){let t=Ao(r.suppliedPacket.data);if(!t)throw Error(`Invalid E-AC-3 audio stream; could not read sync frame from first packet.`);let n=Mo(t);if(n===null)throw Error(`Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.`);e.info.numberOfChannels=No(t),e.info.sampleRate=n}else throw Error(`Unhandled.`);e.info.decoderConfig={codec:Zi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}if(o&&this.elementaryStreams.every(e=>e.initialized))break;r+=this.packetStride}if(!o)throw a?Error(`No Program Map Table found in the file.`):Error(`No Program Association Table found in the file.`);for(let e of this.elementaryStreams)e.info.type===`video`?this.trackBackingEntries.push(new vl(e)):this.trackBackingEntries.push(new yl(e))})()}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){return await this.readMetadata(),ul(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,n=!1){let r=e,i=e,a=[],o=0,s=null,c=!0,l=0;for(;;){let e=await this.readPacket(i);if(i+=this.packetStride,!e)break;if(s){if(e.pid!==s.pid){if(n)break;continue}if(e.payloadUnitStartIndicator===1)break}else{if(e.payloadUnitStartIndicator===0)break;s=e}let u=!!(e.adaptationFieldControl&2),d=!!(e.adaptationFieldControl&1),f=0;if(u&&(f=1+e.body[0],e===s&&f>1&&(l=e.body[1]>>6&1)),d&&(f===0?(a.push(e.body),o+=e.body.byteLength):(a.push(e.body.subarray(f)),o+=e.body.byteLength-f)),r=i,!t&&o>=64){c=!1;break}if(or(this.sectionEndPositions,r,e=>e)!==-1){c=!1;break}}if(c){let e=N(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!s)return null;let u;if(a.length===1)u=a[0];else{let e=a.reduce((e,t)=>e+t.length,0);u=new Uint8Array(e);let t=0;for(let e of a)u.set(e,t),t+=e.length}return{startPos:e,endPos:t?r:null,pid:s.pid,payload:u,randomAccessIndicator:l}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(t instanceof Promise&&(t=await t),!t)return null;if(H(t)!==71)throw Error(`Invalid TS packet sync byte. Likely an internal bug, please report this file.`);let n=Dp(t);n>>15;let r=n>>14&1;n>>13&1;let i=n&8191,a=H(t);a>>6;let o=a>>4&3;return a&15,{payloadUnitStartIndicator:r,pid:i,adaptationFieldControl:o}}async readPacket(e){let t=this.reader.requestSlice(e,ll);if(t instanceof Promise&&(t=await t),!t)return null;let n=V(t,ll);if(n[0]!==71)throw Error(`Invalid TS packet sync byte. Likely an internal bug, please report this file.`);let r=(n[1]<<8)+n[2];r>>15;let i=r>>14&1;r>>13&1;let a=r&8191,o=n[3];o>>6;let s=o>>4&3;return o&15,{payloadUnitStartIndicator:i,pid:a,adaptationFieldControl:s,body:n.subarray(4)}}},hl=(e,t)=>{if(e.payload.byteLength<3)return null;let n=new I(e.payload);if(n.readBits(24)!==1)return null;let r=n.readBits(8);if(n.skipBits(16),r===188||r===190||r===191||r===240||r===241||r===255||r===242||r===248)return null;n.skipBits(8);let i=n.readBits(2);n.skipBits(14);let a=null;if(i===2||i===3)a=0,n.skipBits(4),a+=n.readBits(3)*(1<<30),n.skipBits(1),a+=n.readBits(15)*32768,n.skipBits(1),a+=n.readBits(15);else if(t)throw Error(fl);return{sectionStartPos:e.startPos,sectionEndPos:e.endPos,pts:a,randomAccessIndicator:e.randomAccessIndicator}},gl=(e,t)=>{D(e.endPos!==null);let n=hl(e,t);if(!n)return null;let r=new I(e.payload);r.skipBits(32);let i=r.readBits(16);r.skipBits(16);let a=r.readBits(8),o=r.pos+8*a;r.pos=o;let s=o/8;D(Number.isInteger(s));let c=e.payload.subarray(s,i>0?6+i:e.payload.byteLength);return{...n,data:c}},_l=class e{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){let t=this.elementaryStream.demuxer,n=this.elementaryStream.info.type,r=0;for(let i of t.trackBackingEntries)if(i.getType()===n&&r++,D(i instanceof e),i.elementaryStream===this.elementaryStream)break;return r}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return xr}getDisposition(){return{...wi,primary:!1}}getTimeResolution(){return cl}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,n){let r;return r=this.allPacketsAreKeyPackets()||e.randomAccessIndicator===1?`key`:`delta`,new L(n.metadataOnly?Lo:e.data,r,e.pts/cl,Math.max(t/cl,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){let t=this.elementaryStream.firstSection;D(t);let n=gl(t,!0);D(n);let r=new xl(this.elementaryStream,n),i=new Sl(this,r),a=await i.readNext();if(!a)return null;let o=this.createEncodedPacket(a.packet,a.duration,e);return this.packetBuffers.set(o,i),this.packetSectionStarts.set(o,a.packet.sectionStartPos),o}async getNextPacket(e,t){let n=this.packetBuffers.get(e);if(n){let r=await n.readNext();if(!r)return null;this.packetBuffers.delete(e);let i=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(i,n),this.packetSectionStarts.set(i,r.packet.sectionStartPos),i}let r=this.packetSectionStarts.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);let i=await this.elementaryStream.demuxer.readSection(r,!0);D(i);let a=gl(i,!0);D(a);let o=new xl(this.elementaryStream,a);n=new Sl(this,o);let s=e.sequenceNumber;for(;;){let e=await n.readNext();if(!e)return null;if(e.packet.sequenceNumber>s){let r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,n),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let n=e;for(;;){if(n=await this.getNextPacket(n,t),!n)return null;if(n.type===`key`)return n}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,n){let r=Sr(e*cl),i=this.elementaryStream.demuxer,{reader:a,seekChunkSize:o}=i,s=this.elementaryStream.pid,c=async(e,t,n)=>{let r=e;for(;r<t;){let e=await i.readPacketHeader(r);if(!e)return null;if(e.pid===s&&e.payloadUnitStartIndicator===1){let e=await i.readSection(r,n);if(!e)return null;let t=hl(e,!1);if(t&&t.pts!==null)return{pesPacketHeader:t,section:e}}r+=i.packetStride}return null},l=this.elementaryStream.firstSection;D(l);let u=hl(l,!0);if(D(u),r<u.pts)return null;let d,f=this.elementaryStream.referencePesPackets,p=N(f,r,e=>e.pts),m=p===-1?null:f[p];if(m&&r-m.pts<cl/2)d=m.sectionStartPos;else{let e=0;if(a.fileSize!==null){let t=Math.ceil(a.fileSize/o);if(t>1){let n=0,a=t-1;for(e=n;n<=a;){let t=Math.floor((n+a)/2),s=Tr(t*o,i.packetStride)+u.sectionStartPos,l=await c(s,s+o,!1);if(!l){a=t-1;continue}l.pesPacketHeader.pts<=r?(e=t,n=t+1):a=t-1}}}d=Tr(e*o,i.packetStride)+u.sectionStartPos}let h=(await c(d,a.fileSize??1/0,!1))?.pesPacketHeader??null;h||=u;let g=this.getReorderSize(),_=async(e,t)=>{let a=await i.readSection(e,!0);D(a);let o=gl(a,!0);D(o);let s=new xl(this.elementaryStream,o),c=new Sl(this,s);for(;!((O(c.presentationOrderPackets)?.pts??-1/0)>=r||!await c.readNextPacket()););let l=ur(c.presentationOrderPackets,t);if(l===-1)return null;let u=c.presentationOrderPackets[l],d=l===0?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=d;let f=await c.readNext();D(f);let p=this.createEncodedPacket(f.packet,f.duration,n);return this.packetBuffers.set(p,c),this.packetSectionStarts.set(p,f.packet.sectionStartPos),p};if(!t||this.allPacketsAreKeyPackets()){outer:for(;;){let e=h.sectionStartPos+i.packetStride;for(;;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,!1);if(t){let e=hl(t,!1);if(e&&e.pts!==null){if(e.pts>r)break outer;h=e,bl(this.elementaryStream,h);break}}}e+=i.packetStride}}outer:for(let e=0;e<g+1;e++){let e=h.sectionStartPos-i.packetStride;for(;e>=i.packetOffset;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,!1);if(t){let e=hl(t,!1);if(e&&e.pts!==null){h=e;break}}}e-=i.packetStride}}return _(h.sectionStartPos,e=>e.pts<=r)}else{let e=d,t=null,n=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let d=null,f=e<=u.sectionStartPos,p,m=null;if(f)p=u,m=l;else{let t=await c(e,a.fileSize??1/0,n);p=t?.pesPacketHeader??null,m=t?.section??null}let h=!1,v=0;outer:for(;p&&!(t!==null&&p.sectionStartPos>=t);){if(p.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=p.randomAccessIndicator===1;else{D(m);let t=gl(m,!0);D(t);let n=new xl(this.elementaryStream,t);await n.markNextPacket(),e=n.suppliedPacket?.randomAccessIndicator===1}e&&(d=p)}if(p.pts>r&&(h=!0),h&&(v++,v>g))break;let e=p.sectionStartPos+i.packetStride;for(;;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,n);if(t){let e=hl(t,!1);if(e&&e.pts!==null){p=e,m=t,bl(this.elementaryStream,p);break}}}e+=i.packetStride}}if(d){let e=d;if(v===0)outer:for(let t=0;t<g;t++){let t=e.sectionStartPos-i.packetStride;for(;t>=i.packetOffset;){let r=await i.readPacketHeader(t);if(!r)break outer;if(r.pid===s&&r.payloadUnitStartIndicator===1){let r=await i.readSection(t,n);if(r){let t=hl(r,!1);if(t&&t.pts!==null){e=t;break}}}t-=i.packetStride}}let t=await _(e.sectionStartPos,e=>e.pts<=r&&e.randomAccessIndicator===1);return D(t),t}if(f)return null;t=e,e=Math.max(Tr(e-u.sectionStartPos-o,i.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}},vl=class extends _l{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 D(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}},yl=class extends _l{getType(){return`audio`}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return D(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}},bl=(e,t)=>{let n=e.referencePesPackets,r=N(n,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){let i=n[r];if(t.pts<=i.pts)return!1;let a=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-i.sectionStartPos<a)return!1;if(r<n.length-1){let e=n[r+1];if(e.pts<t.pts||e.sectionStartPos-t.sectionStartPos<a)return!1}}return n.splice(r+1,0,t),!0},xl=class{constructor(e,t){this.currentPos=0,this.pesPackets=[],this.currentPesPacketIndex=0,this.currentPesPacketPos=0,this.endPos=0,this.lastSuppliedPesPacket=null,this.nextPts=null,this.suppliedPacket=null,this.elementaryStream=e,this.pid=e.pid,this.demuxer=e.demuxer,this.startingPesPacket=t}ensureBuffered(e){let t=this.endPos-this.currentPos;return t>=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){let e=this.pesPackets[this.currentPesPacketIndex];return D(e),e}async bufferData(e){let t=this.endPos+e;for(;this.endPos<t;){let e;if(this.pesPackets.length===0)e=this.startingPesPacket;else{let t=O(this.pesPackets).sectionEndPos;for(D(t!==null);;){let n=await this.demuxer.readPacketHeader(t);if(!n)return;if(n.pid===this.pid){let n=await this.demuxer.readSection(t,!0);if(!n)return;let r=gl(n,!1);if(r){e=r;break}}t+=this.demuxer.packetStride}}this.pesPackets.push(e),this.endPos+=e.data.byteLength}}readBytes(e){let t=this.getCurrentPesPacket(),n=this.currentPos-this.currentPesPacketPos,r=n+e;if(this.currentPos+=e,r<=t.data.byteLength)return t.data.subarray(n,r);let i=new Uint8Array(e);i.set(t.data.subarray(n));let a=t.data.byteLength-n;for(;;){this.advanceCurrentPacket();let t=this.getCurrentPesPacket(),n=e-a;if(n<=t.data.byteLength){i.set(t.data.subarray(0,n),a);break}i.set(t.data,a),a+=t.data.byteLength}return i}readU8(){let e=this.getCurrentPesPacket(),t=this.currentPos-this.currentPesPacketPos;return this.currentPos++,t<e.data.byteLength?e.data[t]:(this.advanceCurrentPacket(),e=this.getCurrentPesPacket(),e.data[0])}seekTo(e){if(e!==this.currentPos){if(e<this.currentPos)for(;e<this.currentPesPacketPos;){this.currentPesPacketIndex--;let e=this.getCurrentPesPacket();this.currentPesPacketPos-=e.data.byteLength}else for(;;){let t=this.getCurrentPesPacket();if(e<this.currentPesPacketPos+t.data.byteLength)break;this.currentPesPacketPos+=t.data.byteLength,this.currentPesPacketIndex++}this.currentPos=e}}skip(e){this.seekTo(this.currentPos+e)}advanceCurrentPacket(){this.currentPesPacketPos+=this.getCurrentPesPacket().data.byteLength,this.currentPesPacketIndex++}async markNextPacket(){D(!this.suppliedPacket);let e=this.elementaryStream;if(e.info.type===`video`){let t=e.info.codec,n=1024;if(t!==`avc`&&t!==`hevc`)throw Error(`Unhandled.`);let r=null;for(;;){let e=this.ensureBuffered(n);if(e instanceof Promise&&(e=await e),e===0)break;let i=this.currentPos,a=this.readBytes(e),o=a.byteLength,s=0;for(;s<o;){let e=a.indexOf(0,s);if(e===-1||e>=o)break;s=e;let n=i+s;if(s+4>=o){this.seekTo(n);break}let c=a[s+1],l=a[s+2],u=a[s+3],d=0,f=null;if(c===0&&l===0&&u===1?(d=4,f=a[s+4]):c===0&&l===1&&(d=3,f=u),d===0){s++;continue}let p=n;if(r===null){r=p,s+=d;continue}if(f!==null){let e=t===`avc`?La(f):Za(f);if(t===`avc`?e===Ma.AUD:e===Na.AUD_NUT){let e=p-r;return this.seekTo(r),this.supplyPacket(e,0)}}s+=d}if(e<n)break}if(r!==null){let e=this.endPos-r;return this.seekTo(r),this.supplyPacket(e,0)}}else{let t=e.info.codec;for(;;){let n=this.ensureBuffered(128);n instanceof Promise&&(n=await n);let r=this.currentPos;for(;this.currentPos-r<n;){let n=this.readU8();if(t===`aac`){if(n!==255)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(Gc);if(r instanceof Promise&&(r=await r),r<Gc)return;let i=this.readBytes(Gc),a=Kc(wp.tempFromBytes(i));if(a){this.seekTo(t);let n=this.ensureBuffered(a.frameLength);return n instanceof Promise&&(n=await n),this.supplyPacket(n,Math.round(Jc*cl/e.info.sampleRate))}else this.seekTo(t+1)}else if(t===`mp3`){if(n!==255)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(ga);if(r instanceof Promise&&(r=await r),r<ga)return;let i=wa(j(this.readBytes(ga)).getUint32(0),null);if(i.header){this.seekTo(t);let n=this.ensureBuffered(i.header.totalSize);n instanceof Promise&&(n=await n);let r=i.header.audioSamplesInFrame*cl/e.info.sampleRate;return this.supplyPacket(n,Math.round(r))}else this.seekTo(t+1)}else if(t===`ac3`){if(n!==11)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(5);if(r instanceof Promise&&(r=await r),r<5)return;let i=this.readBytes(5);if(i[0]!==11||i[1]!==119){this.seekTo(t+1);continue}let a=i[4]>>6,o=i[4]&63;if(a===3||o>37){this.seekTo(t+1);continue}let s=To[3*o+a];D(s!==void 0),this.seekTo(t),r=this.ensureBuffered(s),r instanceof Promise&&(r=await r);let c=Math.round(Eo*cl/e.info.sampleRate);return this.supplyPacket(r,c)}else if(t===`eac3`){if(n!==11)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(5);if(r instanceof Promise&&(r=await r),r<5)return;let i=this.readBytes(5);if(i[0]!==11||i[1]!==119){this.seekTo(t+1);continue}let a=(((i[2]&7)<<8|i[3])+1)*2,o=ko[i[4]>>6==3?3:i[4]>>4&3];this.seekTo(t),r=this.ensureBuffered(a),r instanceof Promise&&(r=await r);let s=o*256,c=Math.round(s*cl/e.info.sampleRate);return this.supplyPacket(r,c)}else throw Error(`Unhandled.`)}if(n<128)break}}}supplyPacket(e,t){let n=this.getCurrentPesPacket(),r;if(this.lastSuppliedPesPacket===n)D(this.nextPts!==null),r=this.nextPts;else{if(n.pts===null)throw Error(fl);r=n.pts,bl(this.elementaryStream,n)}this.lastSuppliedPesPacket=n,this.nextPts=r+t;let i=n.sectionStartPos,a=i+(this.currentPos-this.currentPesPacketPos),o=this.readBytes(e),s=n.randomAccessIndicator;if(s===0&&!this.elementaryStream.canBeTrustedWithKeyPackets){if(this.elementaryStream.info.type===`audio`)s=1;else if(this.elementaryStream.info.decoderConfig){let e=yo(this.elementaryStream.info.codec,this.elementaryStream.info.decoderConfig,o)===`key`;s=Number(e)}}this.suppliedPacket={pts:r,data:o,sequenceNumber:a,sectionStartPos:i,randomAccessIndicator:s},this.pesPackets.splice(0,this.currentPesPacketIndex),this.currentPesPacketIndex=0}},Sl=class{constructor(e,t){this.decodeOrderPackets=[],this.reorderBuffer=[],this.presentationOrderPackets=[],this.reachedEnd=!1,this.lastDuration=0,this.backing=e,this.context=t,this.reorderSize=e.getReorderSize(),D(this.reorderSize>=0)}async readNext(){if(this.decodeOrderPackets.length===0&&!await this.readNextPacket())return null;await this.ensureCurrentPacketHasNext();let e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);D(t!==-1);let n;for(t===this.presentationOrderPackets.length-1?n=this.lastDuration:(n=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=n),this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){let e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:n}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){let e=this.decodeOrderPackets[0];for(D(e);;){let t=this.presentationOrderPackets.indexOf(e);if(t!==-1&&t<=this.presentationOrderPackets.length-2||!await this.readNextPacket())break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let t=1;t<this.reorderBuffer.length;t++)this.reorderBuffer[t].pts<this.reorderBuffer[e].pts&&(e=t);let t=this.reorderBuffer[e];this.presentationOrderPackets.push(t),this.reorderBuffer.splice(e,1)}}flushReorderBuffer(){this.reorderBuffer.sort((e,t)=>e.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}})),wl,Tl,El,Dl,Ol,kl,Al,jl,Ml,Nl,Pl,Fl,Il,Ll,Rl,zl,Bl,Vl=n((()=>{wl=`application/vnd.apple.mpegurl`,Tl=`#EXT-X-STREAM-INF:`,El=`#EXT-X-I-FRAME-STREAM-INF:`,Dl=`#EXT-X-MEDIA:`,Ol=`#EXTINF:`,kl=`#EXT-X-MAP:`,Al=`#EXT-X-KEY:`,jl=`#EXT-X-MEDIA-SEQUENCE:`,Ml=`#EXT-X-BYTERANGE:`,Nl=`#EXT-X-PROGRAM-DATE-TIME:`,Pl=`#EXT-X-DISCONTINUITY`,Fl=`#EXT-X-TARGETDURATION:`,Il=`#EXT-X-ENDLIST`,Ll=`#EXT-X-PLAYLIST-TYPE:`,Rl=`#EXT-X-I-FRAMES-ONLY`,zl=e=>e.length===0||e.startsWith(`#`)&&!e.startsWith(`#EXT`),Bl=class{constructor(e){this._attributes={};let t=``,n=``,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];o===`"`?i=!i:o===`=`&&!r&&!i?r=!0:o===`,`&&!i?(t&&(this._attributes[t.trim().toLowerCase()]=n),t=``,n=``,r=!1):r?n+=o:t+=o}t&&(this._attributes[t.trim().toLowerCase()]=n)}get(e){return this._attributes[e.toLowerCase()]??null}getAsNumber(e){let t=this.get(e);if(t===null)return null;let n=Number(t);return Number.isFinite(n)?n:null}merge(e){Object.assign(this._attributes,e._attributes)}}})),Hl,Ul,Wl,Gl,Kl=n((()=>{F(),Hl=class{constructor(e,t,n){this.nextInputCacheAge=0,this.inputCache=[],this.trackBackingsPromise=null,this.firstSegment=null,this.firstSegmentFirstTimestamps=new WeakMap,this.firstTimestampCache=new WeakMap,this.input=e,this.path=t,this.trackDeclarations=n}async getDurationFromMetadata(e){let t=await this.getSegmentAt(1/0,{skipLiveWait:e.skipLiveWait});return t?t.timestamp+t.duration:null}async getTrackBackings(){return this.trackBackingsPromise??=(async()=>{let e=[];if(this.trackDeclarations){for(let t of this.trackDeclarations)if(t.type===`video`){let n=ei(e,e=>e.getType()===`video`)+1;e.push(new Wl(this,t,n))}else if(t.type===`audio`){let n=ei(e,e=>e.getType()===`audio`)+1;e.push(new Gl(this,t,n))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];let t=await this.getInputForSegment(this.firstSegment).getTracks();for(let n of t)if(n.type===`video`){let t=ei(e,e=>e.getType()===`video`)+1;e.push(new Wl(this,{id:e.length+1,type:`video`},t))}else if(n.type===`audio`){let t=ei(e,e=>e.getType()===`audio`)+1;e.push(new Gl(this,{id:e.length+1,type:`audio`},t))}}return e})()}async getFirstTimestampForInput(e){let t=this.firstTimestampCache.get(e);if(t!==void 0)return t;let n=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,n),n}async getMediaOffset(e,t){let n=e.firstSegment??e,r;if(this.firstSegmentFirstTimestamps.has(n))r=this.firstSegmentFirstTimestamps.get(n);else{let e=this.getInputForSegment(n);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(n,r)}if(n===e)return n.timestamp-r;let i=await this.getFirstTimestampForInput(t),a=e.timestamp-n.timestamp,o=i-r-a;return Math.abs(o)<=Math.min(.25,a)?n.timestamp-r:e.timestamp-i}dispose(){for(let e of this.inputCache)e.input.dispose();this.inputCache.length=0}},Ul=class{constructor(e,t,n){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.segmentedInput=e,this.decl=t,this.number=n}hydrate(){return this.hydrationPromise??=(async()=>{if(this.segmentedInput.firstSegment??=await this.segmentedInput.getFirstSegment({}),!this.segmentedInput.firstSegment)throw Error(`Missing first segment, can't retrieve track.`);let e=(await this.segmentedInput.getInputForSegment(this.segmentedInput.firstSegment).getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number);if(!e)throw Error(`No matching track found in underlying media data.`);this.firstInputTrack=e})()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),D(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.relativeToUnixEpoch}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,n){D(e.sequenceNumber>=0),D(this.segmentedInput.firstSegment);let r=await this.segmentedInput.getMediaOffset(t,n.input),i=t.timestamp-this.segmentedInput.firstSegment.timestamp,a=e.clone({timestamp:wr(e.timestamp+r,await n.getTimeResolution()),sequenceNumber:Math.floor(1e8*i)+e.sequenceNumber});return this.packetInfos.set(a,{segment:t,track:n,sourcePacket:e}),a}async getFirstPacket(e){await this.hydrate(),D(this.segmentedInput.firstSegment),D(this.firstInputTrack);let t=await this.firstInputTrack._backing.getFirstPacket(e);return t?this.createAdjustedPacket(t,this.segmentedInput.firstSegment,this.firstInputTrack):null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,n){let r=this.packetInfos.get(e);if(!r)throw Error(`Packet was not created from this track.`);let i=n?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(i)return this.createAdjustedPacket(i,r.segment,r.track);let a=r.segment;for(;;){let e=await this.segmentedInput.getNextSegment(a,{skipLiveWait:t.skipLiveWait});if(!e)return null;let n=(await this.segmentedInput.getInputForSegment(e).getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){a=e;continue}let i=await n._backing.getFirstPacket(t);return i?this.createAdjustedPacket(i,e,n):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,n){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){let i=this.segmentedInput.getInputForSegment(r),a=(await i.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!a){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}let o=e-await this.segmentedInput.getMediaOffset(r,i),s=n?await a._backing.getKeyPacket(o,t):await a._backing.getPacket(o,t);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}return this.createAdjustedPacket(s,r,a)}return null}},Wl=class extends Ul{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())}},Gl=class extends Ul{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())}}})),ql=r({}),Jl=n((()=>{})),Yl,Xl,Zl,Ql,$l,eu,tu,nu,ru,iu,au,ou,su,cu,lu,uu,du,fu,pu,mu,hu=n((()=>{F(),Jl(),Sp(),Zr(),Yl=ql===void 0?void 0:ql,Xl=0,Zl=1/0,Ql=class extends gi{constructor(){super(...arguments),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._sizePromise=null,this.onread=null}async getSizeOrNull(){if(this._disposed)throw new xp;return this._sizePromise??=(async()=>{let e=this._getFileSize();return e===void 0?(await this._read(0,1,Xl,Zl),e=this._getFileSize(),D(e!==void 0),e):e})()}async getSize(){if(this._disposed)throw new xp;let e=await this.getSizeOrNull();if(e===null)throw Error(`Cannot determine the size of an unsized source.`);return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw TypeError(`offset must be a non-negative integer.`);if(t!==void 0&&(!Number.isInteger(t)||t<0))throw TypeError(`length, when provided, must be a non-negative integer.`);return new mu(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit(`read`,{start:e,end:t})}ref(){return new $l(this)}},$l=class{constructor(e){if(this._freed=!1,e._disposed)throw Error(`Cannot ref a disposed source.`);e._refCount++,this._source=e}get source(){if(!this._source)throw Error(`Can't get source; ref has already been freed.`);return this._source}get freed(){return this._freed}free(){if(this._freed)throw Error(`Illegal operation: double free on SourceRef.`);let e=this.source;D(e._refCount>0),e._refCount--,e._refCount===0&&(e._dispose(),e._disposed=!0),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}},eu=class extends Ql{constructor(e,t){if(typeof e!=`string`)throw TypeError(`rootPath must be a string.`);if(typeof t!=`function`)throw TypeError(`requestHandler must be a function.`);super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){let t=this.requestHandler(e),n=e=>{if(!(e instanceof Ql||e instanceof $l))throw TypeError(`requestHandler must return or resolve to a Source or SourceRef.`);let t=e instanceof Ql?e.ref():e;return t.source._usedForHls||=this._usedForHls,t};return t instanceof Promise?t.then(n):n(t)}},tu=(e,t)=>e.path===t.path,nu=class extends eu{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,n,r){if(!this._root){if(!this._rootRequest){let e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{let t=e instanceof Ql?e.ref():e;return this._root=t,this._rootRequest=null,t};e instanceof Promise?this._rootRequest=e.then(t):(t(e),D(this._root))}if(this._rootRequest)return this._rootRequest.then(i=>i.source._read(e,t,n,r))}return this._root.source._read(e,t,n,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}},ru=class extends Ql{constructor(e){if(!(e instanceof ArrayBuffer)&&!(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)&&!ArrayBuffer.isView(e))throw TypeError(`buffer must be an ArrayBuffer, SharedArrayBuffer, or ArrayBufferView.`);super(),this._onreadCalled=!1,this._bytes=A(e),this._view=j(e)}_getFileSize(){return this._bytes.byteLength}_read(){return this._onreadCalled||=(this._dispatchRead(0,this._bytes.byteLength),!0),{bytes:this._bytes,view:this._view,offset:0}}_dispose(){}},iu=class extends Ql{constructor(e,t={}){if(!(e instanceof Blob))throw TypeError(`blob must be a Blob.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.maxCacheSize!==void 0&&(!Qr(t.maxCacheSize)||t.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(t.useStreamReader!==void 0&&typeof t.useStreamReader!=`boolean`)throw TypeError(`options.useStreamReader, when provided, must be a boolean.`);super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new pu({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:fu.fileSystem}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,n,r){return this._orchestrator.read(e,t,n,r)}async _runWorker(e){D(e.strictTarget);let t=this._readers.get(e);for(t===void 0&&(t=(`stream`in this._blob)&&!Lr()&&this._options.useStreamReader!==!1?this._blob.slice(e.currentPos).stream().getReader():null,this._readers.set(e,t));e.currentPos<e.targetPos&&!e.aborted;)if(t){let{done:n,value:r}=await t.read();if(n)throw this._orchestrator.onWorkerFinished(e),Error(`Blob reader stopped unexpectedly before all requested data was read.`);if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+r.length),this._orchestrator.supplyWorkerData(e,r)}else{let t=await this._blob.slice(e.currentPos,e.targetPos).arrayBuffer();if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+t.byteLength),this._orchestrator.supplyWorkerData(e,new Uint8Array(t))}this._orchestrator.signalWorkerStoppedRunning(e),e.aborted&&await t?.cancel()}_dispose(){this._orchestrator.dispose()}},au=.5*2**20,ou=((e,t,n)=>{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 e=null;try{typeof window<`u`&&window.location!==void 0&&(e=new URL(n instanceof Request?n.url:n,window.location.href).origin)}catch{}if((!(typeof navigator<`u`&&typeof navigator.onLine==`boolean`)||navigator.onLine)&&e!==null&&e!==window.location.origin)return console.warn(`Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option.`),null}return Math.min(2**(e-2),16)}),su=new Set,cu=class e extends eu{constructor(t,n={}){if(typeof t!=`string`&&!(t instanceof URL)&&!(typeof Request<`u`&&t instanceof Request))throw TypeError(`url must be a string, URL or Request.`);if(!n||typeof n!=`object`)throw TypeError(`options must be an object.`);if(n.requestInit!==void 0&&(!n.requestInit||typeof n.requestInit!=`object`))throw TypeError(`options.requestInit, when provided, must be an object.`);if(n.getRetryDelay!==void 0&&typeof n.getRetryDelay!=`function`)throw TypeError(`options.getRetryDelay, when provided, must be a function.`);if(n.maxCacheSize!==void 0&&(!Qr(n.maxCacheSize)||n.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(n.parallelism!==void 0&&(!Number.isInteger(n.parallelism)||n.parallelism<1))throw TypeError(`options.parallelism, when provided, must be a positive number.`);if(n.fetchFn!==void 0&&typeof n.fetchFn!=`function`)throw TypeError(`options.fetchFn, when provided, must be a function.`);let r=t instanceof Request?t.url:t instanceof URL?t.href:t;super(r,t=>new e(t.path,this._options)),this._fileSizeDetermined=!1,this._url=t,this._options=n,this._getRetryDelay=n.getRetryDelay??ou,this._orchestrator=new pu({maxCacheSize:n.maxCacheSize??64*2**20,maxWorkerCount:n.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:fu.network})}_getFileSize(){return this._fileSizeDetermined?this._orchestrator.fileSize:void 0}_read(e,t,n,r){return this._orchestrator.read(e,t,n,r)}async _runWorker(e){for(;;){let t=new AbortController,n=await Nr(this._options.fetchFn??fetch,this._url,jr(this._options.requestInit??{},{headers:{Range:`bytes=${e.currentPos}-`},signal:t.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);outer:if(this._orchestrator.fileSize===null){let t=n.headers.get(`Content-Range`);if(t){let e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break outer}}let r=n.headers.get(`Content-Length`);r&&this._orchestrator.supplyFileSize(e.currentPos+Number(r))}if(this._fileSizeDetermined=!0,n.status!==206){if(!this._usedForHls){let e=new URL(this._url instanceof Request?this._url.url:this._url,typeof window<`u`?window.location.href:void 0);e.origin!==`null`&&!(e.pathname.endsWith(`.m3u8`)||e.pathname.endsWith(`.m3u`))&&(su.has(e.origin)||(console.log(this._usedForHls,this._url,e.pathname),console.warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the entire resource will now be downloaded. To enable efficient media file streaming across a network, please make sure your server supports range requests.`),su.add(e.origin)))}e.currentPos=0,this._orchestrator.options.maxCacheSize=1/0,this._orchestrator.fileSize===null?(e.targetPos=1/0,e.strictTarget=!1):e.targetPos=this._orchestrator.fileSize,this._orchestrator.consolidateEverythingIntoOneWorker(e)}if(!n.body)throw Error(`Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.`);let r=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted){t.abort(),this._orchestrator.signalWorkerStoppedRunning(e);return}let n;try{n=await r.read()}catch(e){if(this._disposed)throw e;let t=this._getRetryDelay(1,e,this._url);if(t!==null){console.error(`Error while reading response stream. Attempting to resume.`,e),await mi(1e3*t);break}else throw e}if(e.aborted)continue;let{done:i,value:a}=n;if(i){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+a.length),this._orchestrator.supplyWorkerData(e,a)}}}_dispose(){this._orchestrator.dispose()}},lu=class e extends eu{constructor(t,n={}){if(typeof t!=`string`)throw TypeError(`filePath must be a string.`);if(!n||typeof n!=`object`)throw TypeError(`options must be an object.`);if(n.maxCacheSize!==void 0&&(!Qr(n.maxCacheSize)||n.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(!Yl.fs)throw Error(`FilePathSource is only available in server-side environments (Node.js, Bun, Deno).`);super(t,t=>new e(t.path,n)),this._fileHandle=null,this._streamSource=new uu({getSize:async()=>(this._fileHandle=await Yl.fs.open(t,`r`),(await this._fileHandle.stat()).size),read:async(e,t)=>{D(this._fileHandle);let n=new Uint8Array(t-e);return await this._fileHandle.read(n,0,t-e,e),n},maxCacheSize:n.maxCacheSize,prefetchProfile:`fileSystem`})}_read(e,t,n,r){return this._streamSource._read(e,t,n,r)}_getFileSize(){return this._streamSource._getFileSize()}_dispose(){this._streamSource._dispose(),this._fileHandle?.close(),this._fileHandle=null}},uu=class extends Ql{constructor(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(typeof e.getSize!=`function`)throw TypeError(`options.getSize must be a function.`);if(typeof e.read!=`function`)throw TypeError(`options.read must be a function.`);if(e.dispose!==void 0&&typeof e.dispose!=`function`)throw TypeError(`options.dispose, when provided, must be a function.`);if(e.maxCacheSize!==void 0&&(!Qr(e.maxCacheSize)||e.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(e.prefetchProfile&&![`none`,`fileSystem`,`network`].includes(e.prefetchProfile))throw TypeError(`options.prefetchProfile, when provided, must be one of 'none', 'fileSystem' or 'network'.`);super(),this._options=e,this._orchestrator=new pu({maxCacheSize:e.maxCacheSize??8*2**20,maxWorkerCount:2,prefetchProfile:fu[e.prefetchProfile??`none`],runWorker:this._runWorker.bind(this)})}_getFileSize(){return this._orchestrator.fileSize??void 0}_read(e,t,n,r){if(this._orchestrator.fileSize!==null)return this._orchestrator.read(e,t,n,r);let i=this._options.getSize();if(i instanceof Promise)return i.then(i=>{if(!Number.isInteger(i)||i<0)throw TypeError(`options.getSize must return or resolve to a non-negative integer.`);return this._orchestrator.fileSize=i,this._orchestrator.read(e,t,n,r)});if(!Number.isInteger(i)||i<0)throw TypeError(`options.getSize must return or resolve to a non-negative integer.`);return this._orchestrator.fileSize=i,this._orchestrator.read(e,t,n,r)}async _runWorker(e){for(;e.currentPos<e.targetPos&&!e.aborted;){let t=e.currentPos,n=e.targetPos,r=this._options.read(e.currentPos,n);if(r instanceof Promise&&(r=await r),e.aborted)break;if(r instanceof Uint8Array){if(r=A(r),r.length!==n-e.currentPos)throw Error(`options.read returned a Uint8Array with unexpected length: Requested ${n-e.currentPos} bytes, but got ${r.length}.`);this._dispatchRead(e.currentPos,e.currentPos+r.length),this._orchestrator.supplyWorkerData(e,r)}else if(r instanceof ReadableStream){let i=r.getReader();for(;e.currentPos<n&&!e.aborted;){let{done:r,value:a}=await i.read();if(r){if(e.currentPos<n)throw Error(`ReadableStream returned by options.read ended before supplying enough data. Requested ${n-t} bytes, but got ${e.currentPos-t}`);break}if(!(a instanceof Uint8Array))throw TypeError(`ReadableStream returned by options.read must yield Uint8Array chunks.`);if(e.aborted)break;let o=A(a);this._dispatchRead(e.currentPos,e.currentPos+o.length),this._orchestrator.supplyWorkerData(e,o)}}else throw TypeError(`options.read must return or resolve to a Uint8Array or a ReadableStream.`)}this._orchestrator.signalWorkerStoppedRunning(e)}_dispose(){this._orchestrator.dispose(),this._options.dispose?.()}},du=class extends Ql{constructor(e,t={}){if(!(e instanceof ReadableStream))throw TypeError(`stream must be a ReadableStream.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.maxCacheSize!==void 0&&(!Qr(t.maxCacheSize)||t.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);super(),this._reader=null,this._cache=[],this._pendingSlices=[],this._currentIndex=0,this._targetIndex=0,this._maxRequestedIndex=0,this._endIndex=null,this._pulling=!1,this._stream=e,this._maxCacheSize=t.maxCacheSize??32*2**20}_getFileSize(){return this._endIndex}_read(e,t){if(this._endIndex!==null&&t>this._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);let n=N(this._cache,e,e=>e.start),r=n===-1?null:this._cache[n];if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let i=e,a=new Uint8Array(t-e);if(n!==-1)for(let r=n;r<this._cache.length;r++){let n=this._cache[r];if(n.start>=t)break;let o=Math.max(e,n.start);o>i&&this._throwDueToCacheMiss();let s=Math.min(t,n.end);o<s&&(a.set(n.bytes.subarray(o-n.start,s-n.start),o-e),i=s)}if(i===t)return{bytes:a,view:j(a),offset:e};this._currentIndex>i&&this._throwDueToCacheMiss();let{promise:o,resolve:s,reject:c}=P();return this._pendingSlices.push({start:e,end:t,bytes:a,resolve:s,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else throw e})),o}_throwDueToCacheMiss(){throw 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._currentIndex<this._targetIndex&&!this._disposed;){let{done:e,value:t}=await this._reader.read();if(e){for(let e of this._pendingSlices)e.resolve(null);this._pendingSlices.length=0,this._endIndex=this._currentIndex;break}let n=this._currentIndex,r=this._currentIndex+t.byteLength;this._dispatchRead(n,r);for(let e=0;e<this._pendingSlices.length;e++){let i=this._pendingSlices[e],a=Math.max(n,i.start),o=Math.min(r,i.end);a<o&&(i.bytes.set(t.subarray(a-n,o-n),a-i.start),o===i.end&&(i.resolve({bytes:i.bytes,view:j(i.bytes),offset:i.start}),this._pendingSlices.splice(e,1),e--))}for(this._cache.push({start:n,end:r,bytes:t,view:j(t),age:0});this._cache.length>0;){let e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}},fu={none:(e,t)=>({start:e,end:t}),fileSystem:(e,t)=>{let n=2**16;return e=Math.floor((e-n)/n)*n,t=Math.ceil((t+n)/n)*n,{start:e,end:t}},network:(e,t,n)=>{let r=2**16;e=Math.max(0,Math.floor((e-r)/r)*r);for(let r of n){let n=8*2**20,i=Math.max((r.startPos+r.targetPos)/2,r.targetPos-n);if(Gr(e,t,i,r.targetPos)){let e=r.targetPos-r.startPos,i=Math.ceil((e+1)/n)*n,a=2**Math.ceil(Math.log2(e+1)),o=Math.min(a,i);t=Math.max(t,r.startPos+o)}}return t=Math.max(t,e+au),{start:e,end:t}}},pu=class{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,n,r){D(!this.disposed);let i=this.options.prefetchProfile(e,t,this.workers),a=Math.max(i.start,n),o=Math.min(i.end,this.fileSize??1/0,r);D(a<=e&&t<=o);let s=null,c=N(this.cache,e,e=>e.start),l=c===-1?null:this.cache[c];l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,s={bytes:l.bytes,view:l.view,offset:l.start});let u=N(this.cache,a,e=>e.start),d=s?null:new Uint8Array(t-e),f=0,p=a,m=[];if(u!==-1){for(let n=u;n<this.cache.length;n++){let r=this.cache[n];if(r.start>=o)break;if(r.end<=a)continue;let i=Math.max(a,r.start),s=Math.min(o,r.end);if(D(i<=s),p<i&&m.push({start:p,end:i}),p=s,d){let n=Math.max(e,r.start),i=Math.min(t,r.end);if(n<i){let t=n-e;d.set(r.bytes.subarray(n-r.start,i-r.start),t),t===f&&(f=i-e)}}r.age=this.nextAge++}p<o&&m.push({start:p,end:o})}else m.push({start:a,end:o});if(d&&f>=d.length&&(s={bytes:d,view:j(d),offset:e}),m.length===0)return D(s),s;let{promise:h,resolve:g,reject:_}=P(),v=[];for(let n of m){let r=Math.max(e,n.start),i=Math.min(t,n.end);r===n.start&&i===n.end?v.push(n):r<i&&v.push({start:r,end:i})}let y=d&&{start:e,bytes:d,holes:v,resolve:g,reject:_};outer:for(let e of m){for(let t of this.workers)if(this.checkHoleAgainstWorker(t,e,y?[y]:[])){this.checkQueuedReadsAgainstWorker(t);continue outer}let t=e.end<o||this.fileSize!==null,n=this.createWorker(e.start,e.end,t);if(n)y&&(n.pendingSlices=[y]),this.runWorker(n);else{let n=N(this.queuedReads,e.start,e=>e.hole.start),r=n===-1?null:this.queuedReads[n];for(r&&e.start<=r.hole.end?(r.hole.end=Math.max(r.hole.end,e.end),r.strictTarget&&=t,y&&r.pendingSlices.push(y)):(n++,r={hole:{start:e.start,end:e.end},strictTarget:t,pendingSlices:y?[y]:[],age:this.nextAge++},this.queuedReads.splice(n,0,r));n+1<this.queuedReads.length;){let e=this.queuedReads[n+1];if(e.hole.start>r.hole.end)break;r.hole.end=Math.max(r.hole.end,e.hole.end),r.pendingSlices.push(...e.pendingSlices),r.strictTarget&&=e.strictTarget,r.age=Math.min(r.age,e.age),this.queuedReads.splice(n+1,1)}}}return s||=(D(d),h.then(t=>t&&{bytes:t,view:j(t),offset:e})),s}checkHoleAgainstWorker(e,t,n){if(Gr(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t<n.length;t++){let r=n[t];e.pendingSlices.includes(r)||e.pendingSlices.push(r)}return e.running||this.runWorker(e),!0}return!1}checkQueuedReadsAgainstWorker(e){let t=!1;for(let n=0;n<this.queuedReads.length;n++){let r=this.queuedReads[n];if(this.checkHoleAgainstWorker(e,r.hole,r.pendingSlices))this.queuedReads.splice(n,1),n--,t=!0;else if(t)break}}createWorker(e,t,n){if(this.workers.length>=this.options.maxWorkerCount){let e=null,t=null;for(let n=0;n<this.workers.length;n++){let r=this.workers[n];!r.running&&r.pendingSlices.length===0&&(!e||r.age<e.age)&&(t=n,e=r)}if(e)D(t!==null),D(e.pendingSlices.length===0),this.workers.splice(t,1);else return null}let r={startPos:e,currentPos:e,targetPos:t,strictTarget:n,running:!1,aborted:this.disposed,pendingSlices:[],age:this.nextAge++};return this.workers.push(r),r}runWorker(e){D(!e.running),D(e.currentPos<e.targetPos),e.running=!0,e.age=this.nextAge++,this.options.runWorker(e).catch(t=>{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else throw t}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let t=1;t<this.queuedReads.length;t++)this.queuedReads[t].age<this.queuedReads[e].age&&(e=t);let t=this.queuedReads[e];this.queuedReads.splice(e,1);let n=this.createWorker(t.hole.start,t.hole.end,t.strictTarget);D(n),n.pendingSlices=t.pendingSlices,this.runWorker(n)}})}consolidateEverythingIntoOneWorker(e){let t=new Set(e.pendingSlices);for(let n=0;n<this.workers.length;n++){let r=this.workers[n];if(r!==e){for(let e of r.pendingSlices)t.add(e);r.aborted=!0,r.pendingSlices.length=0,this.workers.splice(n,1),n--}}for(let e=0;e<this.queuedReads.length;e++){let n=this.queuedReads[e];for(let e of n.pendingSlices)t.add(e)}e.pendingSlices=[...t],this.queuedReads.length=0}supplyWorkerData(e,t){D(!e.aborted);let n=e.currentPos,r=n+t.length;this.insertIntoCache({start:n,end:r,bytes:t,view:j(t),age:this.nextAge++}),e.currentPos+=t.length,e.currentPos>e.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let i=0;i<e.pendingSlices.length;i++){let a=e.pendingSlices[i],o=Math.max(n,a.start),s=Math.min(r,a.start+a.bytes.length);o<s&&a.bytes.set(t.subarray(o-n,s-n),o-a.start);for(let e=0;e<a.holes.length;e++){let t=a.holes[e];n<=t.start&&r>t.start&&(t.start=r),t.end<=t.start&&(a.holes.splice(e,1),e--)}a.holes.length===0&&(a.resolve(a.bytes),e.pendingSlices.splice(i,1),i--)}for(let t=0;t<this.workers.length;t++){let i=this.workers[t];e===i||i.running||Gr(n,r,i.currentPos,i.targetPos)&&(this.workers.splice(t,1),t--)}}supplyFileSize(e){D(this.fileSize===null),this.fileSize=e;for(let t of this.workers){t.targetPos=Math.min(t.targetPos,e),t.strictTarget=!0;for(let n=0;n<t.pendingSlices.length;n++){let r=t.pendingSlices[n];for(let i of r.holes)if(i.end>e){r.resolve(null),t.pendingSlices.splice(n,1),n--;break}}}for(let t=0;t<this.queuedReads.length;t++){let n=this.queuedReads[t];if(n.hole.start>=e){for(let e of n.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(n.hole.end>e){n.hole.end=e,n.strictTarget=!0;for(let t=0;t<n.pendingSlices.length;t++){let r=n.pendingSlices[t];r.start>=e&&(r.resolve(null),n.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.pendingSlices.length=0}onWorkerFinished(e){let t=this.workers.indexOf(e);D(t!==-1),e.running=!1,this.workers.splice(t,1),this.fileSize===null&&this.supplyFileSize(e.currentPos);for(let t of e.pendingSlices)t.resolve(null)}insertIntoCache(e){if(this.options.maxCacheSize===0)return;let t=N(this.cache,e.start,e=>e.start)+1;if(t>0){let n=this.cache[t-1];if(n.end>=e.end)return;if(n.end>e.start){let r=new Uint8Array(e.end-n.start);r.set(n.bytes,0),r.set(e.bytes,e.start-n.start),this.currentCacheSize+=e.end-n.end,n.bytes=r,n.view=j(r),n.end=e.end,t--,e=n}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let n=t+1;n<this.cache.length;n++){let t=this.cache[n];if(e.end<=t.start)break;if(e.end>=t.end){this.cache.splice(n,1),this.currentCacheSize-=t.bytes.length,n--;continue}let r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=j(r),e.end=t.end,this.cache.splice(n,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let n=1;n<this.cache.length;n++){let r=this.cache[n];r.age<t.age&&(e=n,t=r)}if(this.currentCacheSize-t.bytes.length<=this.options.maxCacheSize)break;this.cache.splice(e,1),this.currentCacheSize-=t.bytes.length}}dispose(){for(let e of this.workers)e.aborted=!0;this.workers.length=0,this.cache.length=0,this.disposed=!0}},mu=class extends Ql{constructor(e,t,n){if(super(),this._ref=null,e._disposed)throw Error(`Cannot create a slice of a disposed source.`);this._baseSource=e,this._offset=t,this._length=n??null}_getFileSize(){let e=this._baseSource._getFileSize();return e===void 0?this._length===null?void 0:this._length:e===null?this._length===null?null:this._length:br(e-this._offset,0,this._length??1/0)}_read(e,t,n,r){if(this._length!==null&&t>this._length)return null;let i=this._baseSource._read(this._offset+e,this._offset+t,this._offset+n,this._offset+r);return i instanceof Promise?i.then(e=>e?(e.offset-=this._offset,e):null):i?(i.offset-=this._offset,i):null}_dispose(){this._ref?.free()}ref(){return this._ref??=this._baseSource.ref(),super.ref()}}})),gu,_u,vu,yu,bu,xu=n((()=>{us(),Sp(),Kl(),F(),G(),hu(),Vl(),rd(),Ho(),gu=function(e,t,n){if(t!=null){if(typeof t!=`object`&&typeof t!=`function`)throw TypeError(`Object expected.`);var r,i;if(n){if(!Symbol.asyncDispose)throw TypeError(`Symbol.asyncDispose is not defined.`);r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw TypeError(`Symbol.dispose is not defined.`);r=t[Symbol.dispose],n&&(i=r)}if(typeof r!=`function`)throw TypeError(`Object not disposable.`);i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t},_u=(function(e){return function(t){function n(n){t.error=t.hasError?new e(n,t.error,`An error was suppressed during disposal.`):n,t.hasError=!0}var r,i=0;function a(){for(;r=t.stack.pop();)try{if(!r.async&&i===1)return i=0,t.stack.push(r),Promise.resolve().then(a);if(r.dispose){var e=r.dispose.call(r.value);if(r.async)return i|=2,Promise.resolve(e).then(a,function(e){return n(e),a()})}else i|=1}catch(e){n(e)}if(i===1)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}return a()}})(typeof SuppressedError==`function`?SuppressedError:function(e,t,n){var r=Error(n);return r.name=`SuppressedError`,r.error=e,r.suppressed=t,r}),vu=/^0[xX][0-9a-fA-F]+$/,yu=/^data:.*;base64,/i,bu=class extends Hl{constructor(e,t,n,r){super(e.input,t,n),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??=(async()=>{try{let e=this.getRemainingWaitTimeMs();e>0&&await mi(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})()}getRemainingWaitTimeMs(){let e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){let t={stack:[],error:void 0,hasError:!1};try{let n=await new Cp(gu(t,await this.demuxer.input._getSourceUncached({path:this.path,isRoot:!1}),!1).source).requestEntireFile();D(n),e=Bp(n,n.length,{ignore:zl})}catch(e){t.error=e,t.hasError=!0}finally{_u(t)}}let t=!1,n=0,r=null,i=null,a=0,o=null,s=null,c=null,l=null,u=null,d=null,f=!1,p=O(this.segments)??null,m=e=>{let t=e.indexOf(`@`),n=Number(t===-1?e:e.slice(0,t));if(!Number.isInteger(n)||n<0)throw Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(t!==-1&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:n,offset:r}},h=e=>{a=e,p&&(D(p.sequenceNumber!==null),p.sequenceNumber<e&&(n=p.timestamp+p.duration,o=p.firstSegment,s=p.initSegment,u=p.lastProgramDateTimeSeconds,p=null))};for(let g=0;g<e.length;g++){let _=e[g];if(!t){if(_!==`#EXTM3U`)throw Error(`Invalid M3U8 file; expected first line to be #EXTM3U.`);t=!0;continue}if(!_.startsWith(`#`)){if(!p){if(r===null)throw Error(`Invalid M3U8 file; a segment must be preceded by an #EXTINF tag.`);let e=i;if(e&&e.method===`AES-128`&&!e.iv){let t=new Uint8Array(Qo),n=j(t);n.setUint32(8,Math.floor(a/2**32)),n.setUint32(12,a),e={...e,iv:t}}let t={path:$r(this.path,_),offset:l?.offset??0,length:l?.length??null},c={timestamp:n,relativeToUnixEpoch:u!==null,firstSegment:o,sequenceNumber:a,location:t,duration:r,encryption:e,initSegment:s,lastProgramDateTimeSeconds:u};o??=c,n+=r,this.segments.push(c)}r=null,l===null?c=null:l=null,h(a+1)}if(_.startsWith(Ol)){if(p){f=!0;continue}f||=(u===null&&a>0&&d!==null&&(n=a*d),!0);let e=_.slice(Ol.length),t=e.indexOf(`,`),i=t===-1?e:e.slice(0,t),o=Number(i);if(!Number.isFinite(o)||o<0)throw Error(`Invalid #EXTINF tag duration '${i}'.`);r=o}else if(_.startsWith(kl)){let e=new Bl(_.slice(kl.length)),t=e.get(`uri`);if(!t)throw Error(`Invalid #EXT-X-MAP tag; missing URI attribute.`);let a=e.get(`byterange`),o=null;if(a!==null&&(o=m(a)),o&&o.offset===null)throw Error(`Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.`);if(!p){let e={path:$r(this.path,t),offset:o?.offset??0,length:o?.length??null};if(i?.method===`AES-128`&&!i.iv)throw Error(`IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.`);s={timestamp:n,relativeToUnixEpoch:u!==null,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:i,initSegment:null,lastProgramDateTimeSeconds:u}}r=null,l===null?c=null:l=null}else if(_.startsWith(Al)){let e=new Bl(_.slice(Al.length)),t=e.get(`method`);if(t===`NONE`)i=null;else if(t===`AES-128`){let t=e.get(`uri`);if(!t)throw Error(`Invalid #EXT-X-KEY: AES-128 requires a URI attribute.`);let n=null,r=e.get(`iv`);if(r){if(!vu.test(r))throw Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(Qo*2,`0`),n=new Uint8Array(Qo);for(let t=0;t<Qo;t++){let r=-Qo*2+t;n[t]=parseInt(e.slice(r,r+2),16)}}let a=e.get(`keyformat`)??`identity`;if(a!==`identity`)throw Error(`For AES-128 encryption, only the 'identity' KEYFORMAT is currently supported. If you think other formats should be supported, please raise an issue.`);i={method:`AES-128`,keyUri:$r(this.path,t),iv:n,keyFormat:a}}else if(t===`SAMPLE-AES`||t===`SAMPLE-AES-CTR`){let n=e.get(`uri`);if(!n)throw Error(`Invalid #EXT-X-KEY: ${t} requires a URI attribute.`);if((e.get(`keyformat`)??`identity`)===`identity`)throw Error(`For SAMPLE-AES and SAMPLE-AES-CTR encryption, the 'identity' KEYFORMAT is not supported. If you think this format should be supported, please raise an issue.`);let r=null;if(yu.test(n)){let e=n.indexOf(`,`),t=Jr(n.slice(e+1));if(t.length>=8&&t[4]===112&&t[5]===115&&t[6]===115&&t[7]===104){let e=j(t).getUint32(0);r=Bo(t.subarray(8,Math.min(e,t.length)))}}i={method:t,psshBox:r}}else throw Error(`Unsupported encryption method '${t}'. If you think this method should be supported, please raise an issue.`)}else if(_.startsWith(jl)){let e=_.slice(jl.length),t=Number(e);if(!Number.isInteger(t)||t<0)throw Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);h(t)}else if(_.startsWith(Ml)){let e=m(_.slice(Ml.length));if(e.offset===null){if(c===null)throw Error(`Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.`);e.offset=c}l=e,c=e.offset+e.length}else if(_.startsWith(Nl)){if(p)continue;let e=_.slice(Nl.length),t=Date.parse(e);if(!Number.isFinite(t))continue;let r=t/1e3;if(u===r)continue;if(u===null&&this.segments.length>0){let e=O(this.segments),t=r-(e.timestamp+e.duration);for(let e of this.segments)e.timestamp+=t,e.relativeToUnixEpoch=!0;n+=t}u=r,n=r}else if(_===Pl)o=null;else if(_.startsWith(Fl)){let e=_.slice(Fl.length),t=Number(e);if(!Number.isFinite(t)||t<0)throw Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,d=t}else if(_===Il){this.streamHasEnded=!0;break}else _.startsWith(Ll)&&_.slice(Ll.length).toLowerCase()===`vod`&&(this.streamHasEnded=!0)}if(!t)throw Error(`Invalid M3U8 file; no #EXTM3U header.`)}async getFirstSegment(){return this.segments.length===0&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){this.segments.length===0&&await this.runUpdateSegments();let n=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){let r=N(this.segments,e,e=>e.timestamp);if(r===-1)return null;if(r<this.segments.length-1||this.streamHasEnded||n)return this.segments[r];let i=this.segments[r];if(e<i.timestamp+i.duration)return i;await this.runUpdateSegments(),t.skipLiveWait&&(n=!0)}}async getNextSegment(e,t){let n=this.segments.indexOf(e);D(n!==-1);let r=n+1,i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){if(r<this.segments.length)return this.segments[r];if(this.streamHasEnded||i)return null;await this.runUpdateSegments(),t.skipLiveWait&&(i=!0)}}async getPreviousSegment(e){let t=this.segments.indexOf(e);return D(t!==-1),this.segments[t-1]??null}getInputForSegment(e){let t=e,n=this.inputCache.find(e=>e.segment===t);if(n)return n.age=this.nextInputCacheAge++,n.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));let i={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||!(t.encryption.method===`SAMPLE-AES`||t.encryption.method===`SAMPLE-AES-CTR`)||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let n=e.psshBoxes,{psshBox:r}=t.encryption;return(r.keyIds===null||r.keyIds.includes(e.keyId))&&!n.some(e=>Vo(e,r))&&(n=[...n,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:n})})}},a=new yp({source:new nu(t.location.path,async e=>{D(e.isRoot);let n={...e,isRoot:!1},r,i=t.location.offset>0||t.location.length!==null;if(!t.encryption||t.encryption.method===`SAMPLE-AES`||t.encryption.method===`SAMPLE-AES-CTR`){if(r=await this.input._getSourceCached(n),i){let e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}}else if(t.encryption.method===`AES-128`){let e=t.encryption;D(e.iv);let a=await this.input._getSourceCached(n);if(i){let e=a.source.slice(t.location.offset,t.location.length??void 0).ref();a.free(),a=e}r=new du(ls(new Cp(a.source),async()=>{let t={stack:[],error:void 0,hasError:!1};try{let n=await new Cp(gu(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},_p),!1).source).requestSlice(0,Qo);if(!n)throw Error(`Invalid AES-128 key; expected at least 16 bytes of data.`);return{key:V(n,Qo),iv:e.iv}}catch(e){t.error=e,t.hasError=!0}finally{_u(t)}},()=>{a.free()})).ref()}else D(!1);return r}),formats:this.input._formats.filter(e=>!(e instanceof Hu)),initInput:r??void 0,formatOptions:i});if(a._onFormatDetermined=e=>{if((t.encryption?.method===`SAMPLE-AES`||t.encryption?.method===`SAMPLE-AES-CTR`)&&!e._isIsobmff)throw Error(`The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.`)},this.inputCache.push({segment:t,input:a,age:this.nextInputCacheAge++}),this.inputCache.length>4){let e=ti(this.inputCache,e=>e.age);D(e!==-1),this.inputCache.splice(e,1)}return a}async getLiveRefreshInterval(){return this.getRemainingWaitTimeMs()===0&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}})),Su,Cu,wu,Tu,Eu,Du,Ou,ku=n((()=>{ha(),Io(),Ei(),F(),G(),Vl(),xu(),hu(),Su=class extends Fo{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??=(async()=>{D(this.input._rootSource instanceof eu);let{rootPath:e}=this.input._rootSource,t=await this.input._reader.requestEntireFile();D(t);let n=Bp(t,t.length,{ignore:zl}),r=[],i=[];for(let t=1;t<n.length;t++){let a=n[t];if(a.startsWith(Tl)){let i=t,o=n[++t];if(o===void 0)throw Error(`Incorrect M3U8 file; a line must follow the #EXT-X-STREAM-INF tag.`);let s=$r(e,o),c=new Bl(a.slice(Tl.length));if(c.getAsNumber(`bandwidth`)===null)throw Error(`Invalid M3U8 file; #EXT-X-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.`);r.push({fullPath:s,attributes:c,lineNumber:i,hasOnlyKeyPackets:!1})}else if(a.startsWith(El)){let n=new Bl(a.slice(El.length)),i=n.get(`uri`);if(i===null)throw Error(`Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a URI attribute.`);if(n.getAsNumber(`bandwidth`)===null)throw Error(`Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.`);let o=$r(e,i);r.push({fullPath:o,attributes:n,lineNumber:t,hasOnlyKeyPackets:!0})}else if(a.startsWith(Dl)){let n=new Bl(a.slice(Dl.length));if(n.get(`type`)===null)throw Error(`Invalid M3U8 file; #EXT-X-MEDIA tag requires a TYPE attribute.`);if(n.get(`group-id`)===null)throw Error(`Invalid M3U8 file; #EXT-X-MEDIA tag requires a GROUP-ID attribute.`);let r=null,o=n.get(`uri`);o!==null&&(r=$r(e,o)),i.push({fullPath:r,attributes:n,lineNumber:t})}else if(a!==Rl&&a.startsWith(Ol)){let t=new bu(this,e,null,n);this.segmentedInputs=[t],this.hasMasterPlaylist=!1,this.trackBackings=await t.getTrackBackings();return}}let a=[...new Set(i.filter(e=>e.attributes.get(`type`).toLowerCase()===`video`).map(e=>e.attributes.get(`group-id`)))],o=[...new Set(i.filter(e=>e.attributes.get(`type`).toLowerCase()===`audio`).map(e=>e.attributes.get(`group-id`)))],s=await Promise.all(r.map(async(t,n)=>{let r=[],s=t.attributes.get(`codecs`),c;if(s)c=s.split(`,`).map(e=>e.trim());else{let e=await this.getSegmentedInputForPath(t.fullPath).getTrackBackings(),n=await Promise.all(e.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(n.filter(e=>e.codec!==null).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}let l=t.attributes.get(`video`),u=t.attributes.get(`audio`),d=c.some(e=>Fi.includes(ra(e))),f=c.some(e=>Ri.includes(ra(e)));if(l!==null&&!d){if(!a.includes(l))throw Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);let t=i.find(e=>{let t=e.attributes.get(`group-id`),n=e.attributes.get(`type`);return t===l&&n.toLowerCase()===`video`});outer:if(t){let n=t.attributes.get(`uri`);if(n===null)break outer;let r=$r(e,n),i=(await this.getSegmentedInputForPath(r).getTrackBackings()).find(e=>e.getType()===`video`);if(!i||await i.getCodec()===null)break outer;let a=await i.getDecoderConfig().then(e=>e?.codec??null);D(a!==null),c.push(a)}}if(u!==null&&!f){if(!o.includes(u))throw Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);let t=i.find(e=>{let t=e.attributes.get(`group-id`),n=e.attributes.get(`type`);return t===u&&n.toLowerCase()===`audio`});outer:if(t){let n=t.attributes.get(`uri`);if(n===null)break outer;let r=$r(e,n),i=(await this.getSegmentedInputForPath(r).getTrackBackings()).find(e=>e.getType()===`audio`);if(!i||await i.getCodec()===null)break outer;let a=await i.getDecoderConfig().then(e=>e?.codec??null);D(a!==null),c.push(a)}}c=[...new Set(c)];let p=null,m=null,h=t.attributes.getAsNumber(`bandwidth`);D(h!==null);let g=t.attributes.getAsNumber(`average-bandwidth`),_=t.attributes.get(`name`);for(let e of c){let s=ra(e);if(s!==null){if(Fi.includes(s)){if(p!==null)throw Error(`Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.`);p=e;let o=t.attributes.get(`video`);if(o===null){let e=t.attributes.get(`resolution`),i=null,a=null;if(e){let t=e.match(/^(\d+)x(\d+)$/);t&&(i=Number(t[1]),a=Number(t[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xr,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(n),peakBitrate:h,averageBitrate:g,name:_,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`video`,width:i,height:a}})}else{if(!a.includes(o))throw Error(`Invalid M3U8 file; variant stream references video group "${o}" which is not defined in any #EXT-X-MEDIA tags.`);for(let e of i){let i=e.attributes.get(`group-id`),a=e.attributes.get(`type`);if(i!==o||a.toLowerCase()!==`video`)continue;let s=e.attributes.get(`resolution`)??t.attributes.get(`resolution`),c=null,l=null;if(s){let e=s.match(/^(\d+)x(\d+)$/);e&&(c=Number(e[1]),l=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:Eu(e.attributes),autoselect:Eu(e.attributes)||Du(e.attributes),languageCode:Ou(e.attributes.get(`language`)),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(n),peakBitrate:null,averageBitrate:null,name:e.attributes.get(`name`),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`video`,width:c,height:l}})}}}else if(Ri.includes(s)){if(m!==null)throw Error(`Unsupported M3U8 file; multiple audio codecs found in the CODECS attribute of a variant stream.`);m=e;let a=t.attributes.get(`audio`);if(a===null){let e=t.attributes.get(`channels`),i=e===null?null:Number(e.split(`/`)[0]);r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xr,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(n),peakBitrate:h,averageBitrate:g,name:_,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`audio`,numberOfChannels:i!==null&&Number.isInteger(i)&&i>0?i:null}})}else{if(!o.includes(a))throw Error(`Invalid M3U8 file; variant stream references audio group "${a}" which is not defined in any #EXT-X-MEDIA tags.`);for(let e of i){let i=e.attributes.get(`group-id`),o=e.attributes.get(`type`);if(i!==a||o.toLowerCase()!==`audio`)continue;let s=e.attributes.get(`channels`)??t.attributes.get(`channels`),c=s===null?null:Number(s.split(`/`)[0]);r.push({id:-1,demuxer:this,backingTrack:null,default:Eu(e.attributes),autoselect:Eu(e.attributes)||Du(e.attributes),languageCode:Ou(e.attributes.get(`language`)),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(n),peakBitrate:null,averageBitrate:null,name:e.attributes.get(`name`),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`audio`,numberOfChannels:c!==null&&Number.isInteger(c)&&c>0?c:null}})}}}}}return r})),c=[],l=e=>{let t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||=e.default,t.autoselect||=e.autoselect,t.lineNumber=Math.min(t.lineNumber,e.lineNumber),e.peakBitrate!==null&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),e.averageBitrate!==null&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===xr&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(let e of s)for(let t of e)l(t);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(let e of c)e.info.type===`video`?this.trackBackings.push(new wu(e)):this.trackBackings.push(new Tu(e));this.internalTracks=c})()}async getTrackBackings(){return await this.readMetadata(),D(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let n=null;return this.internalTracks&&(n=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))),t=new bu(this,e,n,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return wl}dispose(){if(this.segmentedInputs){for(let e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}},Cu=class{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??=(async()=>{let e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath),t=null,n=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(n.length===1)t=n[0];else if(this instanceof wu){for(let e of n)if(await e.getCodec()===this.getCodec()){t=e;break}}else{D(this instanceof Tu);for(let e of n)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw Error(`Could not find matching track in underlying media data.`);this.internalTrack.backingTrack=t})()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw Error(`Not implemented on base class.`)}getDisposition(){return{...wi,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(){D(this.internalTrack.demuxer.internalTracks);let e=this.internalTrack.info.type,t=0;for(let n of this.internalTrack.demuxer.internalTracks)if(n.info.type===e&&t++,n===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}},wu=class extends Cu{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return`video`}getCodec(){return ra(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()}},Tu=class extends Cu{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return`audio`}getCodec(){return ra(this.internalTrack.fullCodecString)}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels===null?this.delegate(()=>this.backingAudioTrack.getNumberOfChannels()):this.internalTrack.info.numberOfChannels}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}},Eu=e=>{let t=e.get(`default`);if(t===null)return!1;let n=t.toUpperCase();if(n===`YES`)return!0;if(n===`NO`)return!1;throw Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Du=e=>{let t=e.get(`autoselect`);if(t===null)return!1;let n=t.toUpperCase();if(n===`YES`)return!0;if(n===`NO`)return!1;throw Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},Ou=e=>e===null?xr:e.split(`-`)[0]||xr})),Au,ju,Mu,Nu,Pu,Fu,Iu,Lu,Ru,zu,Bu,Vu,Hu,Uu,Wu,Gu,Ku,qu,Ju,Yu,Xu,Zu,Qu,$u,ed,td,nd,rd=n((()=>{Os(),rc(),hc(),bc(),Oa(),Qp(),_c(),Rc(),Uc(),qc(),Zc(),G(),sl(),Cl(),dl(),ku(),Vl(),hu(),Au=class{constructor(){this._isIsobmff=!1}},ju=class extends Au{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return null;t.skip(4);let n=W(t,4);return n!==`ftyp`&&n!==`styp`?null:W(t,4)}_createDemuxer(e){return new ds(e)}},Mu=class extends ju{async _canReadInput(e){let t=await this._getMajorBrand(e);if(t!==null)return t!==`qt `;let n=e._reader.requestSlice(4,4);if(n instanceof Promise&&(n=await n),!n)return!1;let r=W(n,4);return r===`moof`||r===`sidx`}get name(){return`MP4`}get mimeType(){return`video/mp4`}},Nu=class extends ju{async _canReadInput(e){return await this._getMajorBrand(e)===`qt `}get name(){return`QuickTime File Format`}get mimeType(){return`video/quicktime`}},Pu=class extends Au{async isSupportedEBMLOfDocType(e,t){let n=e._reader.requestSlice(0,Ws);if(n instanceof Promise&&(n=await n),!n)return!1;let r=Gs(n);if(r===null||r<1||r>8||z(n,r)!==R.EBML)return!1;let i=Ys(n);if(typeof i!=`number`)return!1;let a=e._reader.requestSlice(n.filePos,i);if(a instanceof Promise&&(a=await a),!a)return!1;let o=n.filePos;for(;a.filePos<=o+i-Us;){let e=Xs(a);if(!e)break;let{id:n,size:r}=e,i=a.filePos;if(r===void 0)return!1;switch(n){case R.EBMLVersion:if(z(a,r)!==1)return!1;break;case R.EBMLReadVersion:if(z(a,r)!==1)return!1;break;case R.DocType:if(Zs(a,r)!==t)return!1;break;case R.DocTypeVersion:if(z(a,r)>4)return!1;break}a.filePos=i+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,`matroska`)}_createDemuxer(e){return new dc(e)}get name(){return`Matroska`}get mimeType(){return`video/x-matroska`}},Fu=class extends Pu{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,`webm`)}get name(){return`WebM`}get mimeType(){return`video/webm`}},Iu=class extends Au{async _canReadInput(e){let t=0;for(;;){let n=e._reader.requestSlice(t,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=n.filePos+r.size}let n=await gc(e._reader,t,t+4096);if(!n)return!1;let r=n.header,i=Ca(r.mpegVersionId,r.channel),a=e._reader.requestSlice(n.startPos+i,4);if(a instanceof Promise&&(a=await a),!a)return!1;let o=U(a);if(o===ya||o===ba)return!0;t=n.startPos+n.header.totalSize;let s=await gc(e._reader,t,t+ga);if(!s)return!1;let c=s.header;return!(r.channel!==c.channel||r.sampleRate!==c.sampleRate)}_createDemuxer(e){return new vc(e)}get name(){return`MP3`}get mimeType(){return`audio/mpeg`}},Lu=class extends Au{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return!1;let n=W(t,4);return n!==`RIFF`&&n!==`RIFX`&&n!==`RF64`?!1:(t.skip(4),W(t,4)===`WAVE`)}_createDemuxer(e){return new Bc(e)}get name(){return`WAVE`}get mimeType(){return`audio/wav`}},Ru=class extends Au{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),t?W(t,4)===`OggS`:!1}_createDemuxer(e){return new Pc(e)}get name(){return`Ogg`}get mimeType(){return`application/ogg`}},zu=class extends Au{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),t?W(t,4)===`fLaC`:!1}get name(){return`FLAC`}get mimeType(){return`audio/flac`}_createDemuxer(e){return new al(e)}},Bu=class extends Au{async _canReadInput(e){let t=0;for(;;){let n=e._reader.requestSlice(t,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=n.filePos+r.size}let n=e._reader.requestSliceRange(t,Wc,Gc);if(n instanceof Promise&&(n=await n),!n)return!1;let r=Kc(n);if(!r||(t+=r.frameLength,n=e._reader.requestSliceRange(t,Wc,Gc),n instanceof Promise&&(n=await n),!n))return!1;let i=Kc(n);return i?r.objectType===i.objectType&&r.samplingFrequencyIndex===i.samplingFrequencyIndex&&r.channelConfiguration===i.channelConfiguration:!1}_createDemuxer(e){return new Yc(e)}get name(){return`ADTS`}get mimeType(){return`audio/aac`}},Vu=class extends Au{async _canReadInput(e){let t=ll+16+1,n=e._reader.requestSlice(0,t);if(n instanceof Promise&&(n=await n),!n)return!1;let r=V(n,t);return r[0]===71&&r[ll]===71||r[0]===71&&r[ll+16]===71?!0:r[4]===71&&r[4+ll+4]===71}_createDemuxer(e){return new ml(e)}get name(){return`MPEG Transport Stream`}get mimeType(){return`video/MP2T`}},Hu=class extends Au{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(t instanceof Promise&&(t=await t),!t||W(t,7)!==`#EXTM3U`)return!1;if(!(e._rootSource instanceof eu))throw TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new Su(e)}get name(){return`HTTP Live Streaming (HLS)`}get mimeType(){return wl}},Uu=new Mu,Wu=new Nu,Gu=new Pu,Ku=new Fu,qu=new Iu,Ju=new Lu,Yu=new Ru,Xu=new Bu,Zu=new zu,Qu=new Vu,$u=new Hu,ed=[$u,Uu,Wu,Gu,Ku,Ju,Yu,Zu,qu,Xu,Qu],td=[$u,Uu,Wu,qu,Xu,Qu],nd=(e,t)=>{if(!e||typeof e!=`object`)throw TypeError(`${t}, when provided, must be an object.`);if(e.isobmff!==void 0){if(!e.isobmff||typeof e.isobmff!=`object`)throw TypeError(`${t}.isobmff, when provided, must be an object.`);if(e.isobmff.resolveKeyId!==void 0&&typeof e.isobmff.resolveKeyId!=`function`)throw TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}}})),id,ad,od,sd,cd,ld,ud,dd,fd,pd,md=n((()=>{ha(),Ff(),F(),id=new Map,ad=new Map,od=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.codec!==void 0&&typeof t.codec!=`string`)throw TypeError(`options.codec, when provided, must be a string.`);if(t.codec!==void 0&&ra(t.codec)!==e)throw TypeError(`options.codec, when provided, must match the specified codec (${e}).`);if(t.codedWidth!==void 0&&(!Number.isInteger(t.codedWidth)||t.codedWidth<=0))throw TypeError(`options.codedWidth, when provided, must be a positive integer.`);if(t.codedHeight!==void 0&&(!Number.isInteger(t.codedHeight)||t.codedHeight<=0))throw TypeError(`options.codedHeight, when provided, must be a positive integer.`);if(t.displayAspectWidth!==void 0&&(!Number.isInteger(t.displayAspectWidth)||t.displayAspectWidth<=0))throw TypeError(`options.displayAspectWidth, when provided, must be a positive integer.`);if(t.displayAspectHeight!==void 0&&(!Number.isInteger(t.displayAspectHeight)||t.displayAspectHeight<=0))throw TypeError(`options.displayAspectHeight, when provided, must be a positive integer.`);if(t.description!==void 0&&!er(t.description))throw 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 TypeError(`options.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(t.optimizeForLatency!==void 0&&typeof t.optimizeForLatency!=`boolean`)throw TypeError(`options.optimizeForLatency, when provided, must be a boolean.`)},sd=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.codec!==void 0&&typeof t.codec!=`string`)throw TypeError(`options.codec, when provided, must be a string.`);if(t.codec!==void 0&&ra(t.codec)!==e)throw TypeError(`options.codec, when provided, must match the specified codec (${e}).`);if(t.numberOfChannels!==void 0&&(!Number.isInteger(t.numberOfChannels)||t.numberOfChannels<=0))throw TypeError(`options.numberOfChannels, when provided, must be a positive integer.`);if(t.sampleRate!==void 0&&(!Number.isInteger(t.sampleRate)||t.sampleRate<=0))throw TypeError(`options.sampleRate, when provided, must be a positive integer.`);if(t.description!==void 0&&!er(t.description))throw TypeError(`options.description, when provided, must be a buffer source.`)},cd=e=>Fi.includes(e)?ld(e):Ri.includes(e)?ud(e):!1,ld=async(e,t={})=>{if(!Fi.includes(e))return!1;od(e,t);let n={...t,codedWidth:t.codedWidth??1280,codedHeight:t.codedHeight??720,codec:t.codec??Ki(e,1280,720,1e6)};n.description??=Qi(n);let r=JSON.stringify(n),i=id.get(r);if(i)return i;let a=(async()=>kf.some(t=>t.supports(e,n))?!0:typeof VideoDecoder>`u`?!1:(await VideoDecoder.isConfigSupported(n)).supported===!0)();return id.set(r,a),a},ud=async(e,t={})=>{if(!Ri.includes(e))return!1;sd(e,t);let n={...t,numberOfChannels:t.numberOfChannels??2,sampleRate:t.sampleRate??48e3,codec:t.codec??Xi(e,2,48e3)};if(n.description===void 0){let e=$i(n);if(e===!1)return!1;n.description=e}let r=JSON.stringify(n),i=ad.get(r);if(i)return i;let a=(async()=>Af.some(t=>t.supports(e,n))||Ii.includes(e)?!0:typeof AudioDecoder>`u`?!1:(await AudioDecoder.isConfigSupported(n)).supported===!0)();return ad.set(r,a),a},dd=async()=>{let[e,t]=await Promise.all([fd(),pd()]);return[...e,...t]},fd=async(e=Fi,t)=>{let n=await Promise.all(e.map(e=>ld(e,t)));return e.filter((e,t)=>n[t])},pd=async(e=Ri,t)=>{let n=await Promise.all(e.map(e=>ud(e,t)));return e.filter((e,t)=>n[t])}})),hd,gd,_d,vd,yd,bd,xd,Sd,Cd,wd,Td,Ed,Dd,Od,kd,Ad,jd,Md,Nd,Pd,Fd,Id,Ld,Rd,zd,Bd,Vd,Hd,Ud,Wd,Gd,Kd,qd,Jd,Yd,Xd,Zd=n((()=>{F(),hd=function(e,t,n){if(t!=null){if(typeof t!=`object`&&typeof t!=`function`)throw TypeError(`Object expected.`);var r,i;if(n){if(!Symbol.asyncDispose)throw TypeError(`Symbol.asyncDispose is not defined.`);r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw TypeError(`Symbol.dispose is not defined.`);r=t[Symbol.dispose],n&&(i=r)}if(typeof r!=`function`)throw TypeError(`Object not disposable.`);i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t},gd=(function(e){return function(t){function n(n){t.error=t.hasError?new e(n,t.error,`An error was suppressed during disposal.`):n,t.hasError=!0}var r,i=0;function a(){for(;r=t.stack.pop();)try{if(!r.async&&i===1)return i=0,t.stack.push(r),Promise.resolve().then(a);if(r.dispose){var e=r.dispose.call(r.value);if(r.async)return i|=2,Promise.resolve(e).then(a,function(e){return n(e),a()})}else i|=1}catch(e){n(e)}if(i===1)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}return a()}})(typeof SuppressedError==`function`?SuppressedError:function(e,t,n){var r=Error(n);return r.name=`SuppressedError`,r.error=e,r.suppressed=t,r}),Zr(),_d=-1/0,vd=-1/0,yd=null,typeof FinalizationRegistry<`u`&&(yd=new FinalizationRegistry(e=>{let t=performance.now();e.type===`video`?(t-_d>=1e3&&(console.error(`A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them.`),_d=t),typeof VideoFrame<`u`&&e.data instanceof VideoFrame&&e.data.close()):(t-vd>=1e3&&(console.error(`An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them.`),vd=t),typeof AudioData<`u`&&e.data instanceof AudioData&&e.data.close())})),bd=class{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}},xd=[`I420`,`I420P10`,`I420P12`,`I420A`,`I420AP10`,`I420AP12`,`I422`,`I422P10`,`I422P12`,`I422A`,`I422AP10`,`I422AP12`,`I444`,`I444P10`,`I444P12`,`I444A`,`I444AP10`,`I444AP12`,`NV12`,`RGBA`,`RGBX`,`BGRA`,`BGRX`],Sd=new Set(xd),Cd=class e{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(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}get hasAlpha(){return this.format&&this.format.includes(`A`)}constructor(t,n){if(this._closed=!1,t instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t)){if(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.format===void 0||!Sd.has(n.format))throw TypeError(`init.format must be one of: `+xd.join(`, `));if(!Number.isInteger(n.codedWidth)||n.codedWidth<=0)throw TypeError(`init.codedWidth must be a positive integer.`);if(!Number.isInteger(n.codedHeight)||n.codedHeight<=0)throw TypeError(`init.codedHeight must be a positive integer.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(n.layout!==void 0){if(!Array.isArray(n.layout))throw TypeError(`init.layout, when provided, must be an array.`);for(let e of n.layout){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`Each entry in init.layout must be an object.`);if(!Number.isInteger(e.offset)||e.offset<0)throw TypeError(`plane.offset must be a non-negative integer.`);if(!Number.isInteger(e.stride)||e.stride<0)throw TypeError(`plane.stride must be a non-negative integer.`)}}if(n.visibleRect!==void 0&&ii(n.visibleRect,`init.visibleRect`),n.displayWidth!==void 0&&(!Number.isInteger(n.displayWidth)||n.displayWidth<=0))throw TypeError(`init.displayWidth, when provided, must be a positive integer.`);if(n.displayHeight!==void 0&&(!Number.isInteger(n.displayHeight)||n.displayHeight<=0))throw TypeError(`init.displayHeight, when provided, must be a positive integer.`);if(n.displayWidth!==void 0!=(n.displayHeight!==void 0))throw TypeError(`init.displayWidth and init.displayHeight must be either both provided or both omitted.`);this._data=A(t).slice(),this._layout=n.layout??Pd(n.format,n.codedWidth,n.codedHeight),this.format=n.format,this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0;let e=n.colorSpace??null;e===null&&(e=this.format===`RGBA`||this.format===`RGBX`||this.format===`BGRA`||this.format===`BGRX`?{primaries:`bt709`,transfer:`iec61966-2-1`,matrix:`rgb`,fullRange:!0}:{primaries:`bt709`,transfer:`bt709`,matrix:`bt709`,fullRange:!1}),this.colorSpace=new kd(e),this.visibleRect={left:n.visibleRect?.left??0,top:n.visibleRect?.top??0,width:n.visibleRect?.width??n.codedWidth,height:n.visibleRect?.height??n.codedHeight},n.displayWidth===void 0?(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height):(this.squarePixelWidth=this.rotation%180==0?n.displayWidth:n.displayHeight,this.squarePixelHeight=this.rotation%180==0?n.displayHeight:n.displayWidth)}else if(typeof VideoFrame<`u`&&t instanceof VideoFrame){if(n?.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(n?.timestamp!==void 0&&!Number.isFinite(n?.timestamp))throw TypeError(`init.timestamp, when provided, must be a number.`);if(n?.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);n?.visibleRect!==void 0&&ii(n.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=n?.rotation??0,this.squarePixelWidth=t.displayWidth,this.squarePixelHeight=t.displayHeight,this.timestamp=n?.timestamp??t.timestamp/1e6,this.duration=n?.duration??(t.duration??0)/1e6,this.colorSpace=new kd(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(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(typeof VideoFrame<`u`)return new e(new VideoFrame(t,{timestamp:Math.trunc(n.timestamp*Ar),duration:Math.trunc((n.duration??0)*Ar)||void 0}),n);let r=0,i=0;if(`naturalWidth`in t?(r=t.naturalWidth,i=t.naturalHeight):`videoWidth`in t?(r=t.videoWidth,i=t.videoHeight):`width`in t&&(r=Number(t.width),i=Number(t.height)),!r||!i)throw TypeError(`Could not determine dimensions.`);let a=new OffscreenCanvas(r,i),o=a.getContext(`2d`,{alpha:zr(),willReadFrequently:!0});D(o),o.drawImage(t,0,0),this._data=a,this._layout=null,this.format=`RGBX`,this.visibleRect={left:0,top:0,width:r,height:i},this.squarePixelWidth=r,this.squarePixelHeight=i,this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0,this.colorSpace=new kd({matrix:`rgb`,primaries:`bt709`,transfer:`iec61966-2-1`,fullRange:!0})}else if(t instanceof bd){if(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(this._data=t,t._referenceCount++,this.format=t.getFormat(),this.format!==null&&!xd.includes(this.format))throw 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 TypeError(`getCodedWidth() must return a positive integer.`);if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw TypeError(`getCodedHeight() must return a positive integer.`);if(this.squarePixelWidth=t.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw TypeError(`getSquarePixelWidth() must return a positive integer.`);if(this.squarePixelHeight=t.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw TypeError(`getSquarePixelHeight() must return a positive integer.`);this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0,this.colorSpace=t.getColorSpace()}else throw TypeError(`Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.`);this.pixelAspectRatio=ri({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),yd?.register(this,{type:`video`,data:this._data},this)}clone(){if(this._closed)throw Error(`VideoSample is closed.`);return D(this._data!==null),this._data instanceof bd?new e(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):Ad(this._data)?new e(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):this._data instanceof Uint8Array?(D(this._layout),new e(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight})):new e(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight})}close(){this._closed||=(yd?.unregister(this),this._data instanceof bd?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):Ad(this._data)?this._data.close():this._data=null,!0)}allocationSize(e={}){if(Nd(e),this._closed)throw Error(`VideoSample is closed.`);if((e.format??this.format)==null)throw Error(`Cannot get allocation size when format is null.`);return Ad(this._data)?this._data.allocationSize(e):Id(this,e).allocationSize}async copyTo(t,n={}){if(!er(t))throw TypeError(`destination must be an ArrayBuffer or an ArrayBuffer view.`);if(Nd(n),this._closed)throw Error(`VideoSample is closed.`);if((n.format??this.format)==null)throw Error(`Cannot copy video sample data when format is null.`);if(D(this._data!==null),Ad(this._data))return this._data.copyTo(t,n);if(n.format&&![`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(this.format)&&[`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(n.format))if(this._data instanceof bd){let r={stack:[],error:void 0,hasError:!1};try{let i=hd(r,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},n.colorSpace??`srgb`),!1);if(!(i instanceof e))throw TypeError(`toRgbSample() must return a VideoSample.`);if(![`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(i.format))throw Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${i.format}' instead.`);return await i.copyTo(t,n)}catch(e){r.error=e,r.hasError=!0}finally{gd(r)}}else{if(typeof VideoFrame>`u`)throw Error(`For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.`);let e=this.toVideoFrame(),r=await e.copyTo(t,n);return e.close(),r}let r=Id(this,n);D(this.format);let i=A(t);if(i.byteLength<r.allocationSize)throw TypeError(`Destination buffer too small. Required: ${r.allocationSize}, Available: ${i.byteLength}`);let a=Fd(this.format),o;if(this._data instanceof bd){let e=this._data.getDataPlanes();if(e instanceof Promise&&(e=await e),!Array.isArray(e)||e.some(e=>!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw TypeError(`getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.`);o=e}else if(this._data instanceof Uint8Array)D(this._layout),D(this._layout.length===a.length),o=this._layout.map((e,t)=>{let n=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*n),stride:e.stride}});else{let e=this._data.getContext(`2d`);D(e),o=[{data:A(e.getImageData(0,0,this.codedWidth,this.codedHeight).data),stride:4*this.codedWidth}]}let s=[],c=a.length;for(let e=0;e<c;e++){let t=r.computedLayouts[e],n=o[e].stride,a=o[e].data,c=t.sourceTop*n;c+=t.sourceLeftBytes;let l=t.destinationOffset,u=t.sourceWidthBytes,d={offset:l,stride:t.destinationStride};for(let e=0;e<t.sourceHeight;e++){if(c+u>a.byteLength)throw Error(`Source buffer OOB read.`);if(l+u>i.byteLength)throw Error(`Destination buffer OOB write.`);let e=a.subarray(c,c+u);i.set(e,l),c+=n,l+=t.destinationStride}s.push(d)}if(n.format!==void 0){let e=this.format.startsWith(`RGB`)!==n.format.startsWith(`RGB`),t=this.format.includes(`X`)&&n.format.includes(`A`);if(e||t)for(let n=0;n<r.allocationSize;n+=4){if(e){let e=i[n];i[n]=i[n+2],i[n+2]=e}t&&(i[n+3]=255)}}return s}toVideoFrame(){if(this._closed)throw Error(`VideoSample is closed.`);if(D(this._data!==null),this._data instanceof bd){if(this.format===null)throw Error(`Cannot convert a VideoSampleResource-backed VideoSample to VideoFrame if format is null.`);let e=this._data.getDataPlanes();if(e instanceof Promise)throw Error(`Cannot convert a VideoSampleResource-backed VideoSample to VideoFrame if getDataPlanes() returns a promise.`);let t=e.reduce((e,t)=>e+t.data.byteLength,0),n=new Uint8Array(t),r=0,i=[];for(let t of e)n.set(t.data,r),i.push(r),r+=t.data.byteLength;return new VideoFrame(n,{format:this.format,layout:e.map((e,t)=>({offset:i[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}else if(Ad(this._data))return new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0});else if(this._data instanceof Uint8Array)return new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight});else return new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,n,r,i,a,o,s,c){let l=0,u=0,d=this.displayWidth,f=this.displayHeight,p=0,m=0,h=this.displayWidth,g=this.displayHeight;if(a===void 0?(p=t,m=n,r!==void 0&&(h=r,g=i)):(l=t,u=n,d=r,f=i,p=a,m=o,s===void 0?(h=d,g=f):(h=s,g=c)),!(typeof CanvasRenderingContext2D<`u`&&e instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<`u`&&e instanceof OffscreenCanvasRenderingContext2D))throw TypeError(`context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.`);if(!Number.isFinite(l))throw TypeError(`sx must be a number.`);if(!Number.isFinite(u))throw TypeError(`sy must be a number.`);if(!Number.isFinite(d)||d<0)throw TypeError(`sWidth must be a non-negative number.`);if(!Number.isFinite(f)||f<0)throw TypeError(`sHeight must be a non-negative number.`);if(!Number.isFinite(p))throw TypeError(`dx must be a number.`);if(!Number.isFinite(m))throw TypeError(`dy must be a number.`);if(!Number.isFinite(h)||h<0)throw TypeError(`dWidth must be a non-negative number.`);if(!Number.isFinite(g)||g<0)throw TypeError(`dHeight must be a non-negative number.`);if(this._closed)throw Error(`VideoSample is closed.`);({sx:l,sy:u,sWidth:d,sHeight:f}=this._rotateSourceRegion(l,u,d,f,this.rotation));let _=this.toCanvasImageSource();e.save();let v=p+h/2,y=m+g/2;e.translate(v,y),e.rotate(this.rotation*Math.PI/180);let b=this.rotation%180==0?1:h/g;e.scale(1/b,b),e.drawImage(_,l,u,d,f,-h/2,-g/2,h,g),e.restore()}drawWithFit(e,t){if(!(typeof CanvasRenderingContext2D<`u`&&e instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<`u`&&e instanceof OffscreenCanvasRenderingContext2D))throw TypeError(`context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(![`fill`,`contain`,`cover`].includes(t.fit))throw TypeError(`options.fit must be 'fill', 'contain', or 'cover'.`);if(t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`options.rotation, when provided, must be 0, 90, 180, or 270.`);t.crop!==void 0&&Md(t.crop,`options.`);let n=e.canvas.width,r=e.canvas.height,i=t.rotation??this.rotation,[a,o]=i%180==0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],s=t.crop;s&&=jd(s,a,o);let c,l,u,d,{sx:f,sy:p,sWidth:m,sHeight:h}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??a,t.crop?.height??o,i);if(t.fit===`fill`)c=0,l=0,u=n,d=r;else{let[e,i]=t.crop?[t.crop.width,t.crop.height]:[a,o],s=t.fit===`contain`?Math.min(n/e,r/i):Math.max(n/e,r/i);u=e*s,d=i*s,c=(n-u)/2,l=(r-d)/2}e.save();let g=i%180==0?1:u/d;e.translate(n/2,r/2),e.rotate(i*Math.PI/180),e.scale(1/g,g),e.translate(-n/2,-r/2),e.drawImage(this.toCanvasImageSource(),f,p,m,h,c,l,u,d),e.restore()}_rotateSourceRegion(e,t,n,r,i){return i===90?[e,t,n,r]=[t,this.squarePixelHeight-e-n,r,n]:i===180?[e,t]=[this.squarePixelWidth-e-n,this.squarePixelHeight-t-r]:i===270&&([e,t,n,r]=[this.squarePixelWidth-t-r,e,r,n]),{sx:e,sy:t,sWidth:n,sHeight:r}}toCanvasImageSource(){if(this._closed)throw Error(`VideoSample is closed.`);if(D(this._data!==null),this._data instanceof bd||this._data instanceof Uint8Array){let e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}else return this._data}async transform(t){if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.width!==void 0&&(!Number.isInteger(t.width)||t.width<=0))throw TypeError(`options.width, when provided, must be a positive integer.`);if(t.height!==void 0&&(!Number.isInteger(t.height)||t.height<=0))throw TypeError(`options.height, when provided, must be a positive integer.`);if(t.roundDimensionsTo!==void 0&&(!Number.isInteger(t.roundDimensionsTo)||t.roundDimensionsTo<=0))throw TypeError(`options.roundDimensionsTo, when provided, must be a positive integer.`);if(t.fit!==void 0&&![`fill`,`contain`,`cover`].includes(t.fit))throw 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 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 TypeError(`options.rotate, when provided, must be 0, 90, 180 or 270.`);if(t.crop!==void 0&&Md(t.crop,`options.`),t.alpha!==void 0&&![`keep`,`discard`].includes(t.alpha))throw TypeError(`options.alpha, when provided, must be 'keep' or 'discard'.`);let n=Bn(this.rotation+(t.rotate??0)),[r,i]=n%180==0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],a=t.crop;a&&=jd(a,r,i);let o=a?a.width:r,s=a?a.height:i,c=o/s,l,u;t.width!==void 0&&t.height===void 0?(l=t.width,u=l/c):t.width===void 0&&t.height!==void 0?(u=t.height,l=u*c):t.width!==void 0&&t.height!==void 0?(l=t.width,u=t.height):(l=o,u=s),l=Cr(l,t.roundDimensionsTo??1),u=Cr(u,t.roundDimensionsTo??1);let d={width:l,height:u,fit:t.fit??`fill`,rotation:n,crop:a??{left:0,top:0,width:r,height:i},alpha:t.alpha??`keep`};for(let e of wd){let t=e(this,d);if(t instanceof Promise&&(t=await t),t!==null)return t}let f=null,p=!1;for(let e of Dd)if(e.canvas.width===d.width&&e.canvas.height===d.height){f=e.canvas,e.age=Od++;break}if(f===null){if(typeof OffscreenCanvas<`u`)f=new OffscreenCanvas(d.width,d.height);else{if(typeof window>`u`||typeof document>`u`)throw Error(`Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().`);f=document.createElement(`canvas`),f.width=d.width,f.height=d.height}p=!0,Dd.length>=Ed&&Dd.splice(ti(Dd,e=>e.age),1),Dd.push({canvas:f,age:Od++})}let m=f.getContext(`2d`,{alpha:!0});return D(m),d.alpha===`discard`?(m.fillStyle=`black`,m.fillRect(0,0,d.width,d.height)):p||m.clearRect(0,0,d.width,d.height),this.drawWithFit(m,{fit:d.fit,rotation:d.rotation,crop:d.crop}),new e(f,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw TypeError(`newRotation must be 0, 90, 180, or 270.`);this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw TypeError(`newTimestamp must be a number.`);this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw TypeError(`newDuration must be a non-negative number.`);this.duration=e}[Symbol.dispose](){this.close()}},wd=[],Td=e=>{wd.includes(e)||wd.push(e)},Ed=3,Dd=[],Od=0,kd=class{constructor(e){if(e!==void 0){if(!e||typeof e!=`object`)throw TypeError(`init.colorSpace, when provided, must be an object.`);let t=Object.keys(qn);if(e.primaries!=null&&!t.includes(e.primaries))throw TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(`, `)}.`);let n=Object.keys(Yn);if(e.transfer!=null&&!n.includes(e.transfer))throw TypeError(`init.colorSpace.transfer, when provided, must be one of ${n.join(`, `)}.`);let r=Object.keys(Zn);if(e.matrix!=null&&!r.includes(e.matrix))throw TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(`, `)}.`);if(e.fullRange!=null&&typeof e.fullRange!=`boolean`)throw TypeError(`init.colorSpace.fullRange, when provided, must be a boolean.`)}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}},Ad=e=>typeof VideoFrame<`u`&&e instanceof VideoFrame,jd=(e,t,n)=>{let r=Math.min(e.left,t),i=Math.min(e.top,n),a=Math.min(e.width,t-r),o=Math.min(e.height,n-i);return D(a>=0),D(o>=0),{left:r,top:i,width:a,height:o}},Md=(e,t)=>{if(!e||typeof e!=`object`)throw TypeError(t+`crop, when provided, must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw TypeError(t+`crop.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw TypeError(t+`crop.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw TypeError(t+`crop.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw TypeError(t+`crop.height must be a non-negative integer.`)},Nd=e=>{if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.colorSpace!==void 0&&![`display-p3`,`srgb`].includes(e.colorSpace))throw TypeError(`options.colorSpace, when provided, must be 'display-p3' or 'srgb'.`);if(e.format!==void 0&&typeof e.format!=`string`)throw TypeError(`options.format, when provided, must be a string.`);if(e.layout!==void 0){if(!Array.isArray(e.layout))throw TypeError(`options.layout, when provided, must be an array.`);for(let t of e.layout){if(!t||typeof t!=`object`)throw TypeError(`Each entry in options.layout must be an object.`);if(!Number.isInteger(t.offset)||t.offset<0)throw TypeError(`plane.offset must be a non-negative integer.`);if(!Number.isInteger(t.stride)||t.stride<0)throw TypeError(`plane.stride must be a non-negative integer.`)}}if(e.rect!==void 0){if(!e.rect||typeof e.rect!=`object`)throw TypeError(`options.rect, when provided, must be an object.`);if(e.rect.x!==void 0&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw TypeError(`options.rect.x, when provided, must be a non-negative integer.`);if(e.rect.y!==void 0&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw TypeError(`options.rect.y, when provided, must be a non-negative integer.`);if(e.rect.width!==void 0&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw TypeError(`options.rect.width, when provided, must be a non-negative integer.`);if(e.rect.height!==void 0&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw TypeError(`options.rect.height, when provided, must be a non-negative integer.`)}},Pd=(e,t,n)=>{let r=Fd(e),i=[],a=0;for(let e of r){let r=Math.ceil(t/e.widthDivisor),o=Math.ceil(n/e.heightDivisor),s=r*e.sampleBytes,c=s*o;i.push({offset:a,stride:s}),a+=c}return i},Fd=e=>{let t=(e,t,n,r,i)=>{let a=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:n,heightDivisor:r},{sampleBytes:t,widthDivisor:n,heightDivisor:r}];return i&&a.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),a};switch(e){case`I420`:return t(1,1,2,2,!1);case`I420P10`:case`I420P12`:return t(2,2,2,2,!1);case`I420A`:return t(1,1,2,2,!0);case`I420AP10`:case`I420AP12`:return t(2,2,2,2,!0);case`I422`:return t(1,1,2,1,!1);case`I422P10`:case`I422P12`:return t(2,2,2,1,!1);case`I422A`:return t(1,1,2,1,!0);case`I422AP10`:case`I422AP12`:return t(2,2,2,1,!0);case`I444`:return t(1,1,1,1,!1);case`I444P10`:case`I444P12`:return t(2,2,1,1,!1);case`I444A`:return t(1,1,1,1,!0);case`I444AP10`:case`I444AP12`:return t(2,2,1,1,!0);case`NV12`:return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case`RGBA`:case`RGBX`:case`BGRA`:case`BGRX`:return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:pr(e),D(!1)}},Id=(e,t)=>{let n={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,i=Ld(n,r,e.codedWidth,e.codedHeight,e.format),a=t.layout,o;if(!t.format||t.format===e.format)o=e.format;else if([`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(t.format))o=t.format;else throw Error(`NotSupportedError: Invalid destination format.`);return zd(i,o,a)},Ld=(e,t,n,r,i)=>{let a={...e};if(t!==void 0){if(t.width===0||t.height===0)throw TypeError(`visibleRect dimensions cannot be zero.`);if((t.x||0)+(t.width||0)>n)throw TypeError(`visibleRect exceeds codedWidth.`);if((t.y||0)+(t.height||0)>r)throw 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(!Rd(i,a))throw TypeError(`visibleRect alignment is invalid for the format.`);return a},Rd=(e,t)=>{if(e===null)return!0;let n=Fd(e);for(let e=0;e<n.length;e++){let r=n[e],i=r.widthDivisor,a=r.heightDivisor;if((t.x||0)%i!==0||(t.y||0)%a!==0)return!1}return!0},zd=(e,t,n)=>{let r=Fd(t),i=r.length;if(n!==void 0&&n.length!==i)throw TypeError(`Layout must have ${i} planes.`);let a=0,o=[],s=[];for(let t=0;t<i;t++){let i=r[t],c=i.sampleBytes,l=i.widthDivisor,u=i.heightDivisor,d={destinationOffset:0,destinationStride:0,sourceTop:0,sourceHeight:0,sourceLeftBytes:0,sourceWidthBytes:0};if(d.sourceTop=Math.ceil(Math.trunc(e.y||0)/u),d.sourceHeight=Math.ceil(Math.trunc(e.height||0)/u),d.sourceLeftBytes=Math.floor(Math.trunc(e.x||0)/l)*c,d.sourceWidthBytes=Math.floor(Math.trunc(e.width||0)/l)*c,n!==void 0){let e=n[t];if(e.stride<d.sourceWidthBytes)throw TypeError(`Stride for plane ${t} is too small.`);d.destinationOffset=e.offset,d.destinationStride=e.stride}else d.destinationOffset=a,d.destinationStride=d.sourceWidthBytes;let f=d.destinationStride*d.sourceHeight+d.destinationOffset;if(f>4294967295)throw TypeError(`Allocation size exceeds limit.`);s.push(f),a=Math.max(a,f);for(let e=0;e<t;e++){let n=o[e];if(!(s[t]<=n.destinationOffset||s[e]<=d.destinationOffset))throw TypeError(`Planes overlap.`)}o.push(d)}return{allocationSize:a,computedLayouts:o}},Bd=new Set([`f32`,`f32-planar`,`s16`,`s16-planar`,`s32`,`s32-planar`,`u8`,`u8-planar`]),Vd=class{constructor(){this._referenceCount=0}},Hd=class e{get microsecondTimestamp(){return Math.trunc(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}constructor(e){if(this._closed=!1,qd(e)){if(e.format===null)throw TypeError(`AudioData with null format is not supported.`);this._data=e,this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=e.numberOfFrames,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp/1e6,this.duration=e.numberOfFrames/e.sampleRate}else if(e instanceof Vd){if(this._data=e,e._referenceCount++,this.format=e.getFormat(),!Bd.has(this.format))throw TypeError(`getFormat() must return an AudioSampleFormat.`);if(this.sampleRate=e.getSampleRate(),!Number.isInteger(this.sampleRate)||this.sampleRate<=0)throw TypeError(`getSampleRate() must return a positive integer.`);if(this.numberOfFrames=e.getNumberOfFrames(),!Number.isInteger(this.numberOfFrames)||this.numberOfFrames<0)throw TypeError(`getNumberOfFrames() must return a non-negative integer.`);if(this.numberOfChannels=e.getNumberOfChannels(),!Number.isInteger(this.numberOfChannels)||this.numberOfChannels<=0)throw TypeError(`getNumberOfChannels() must return a positive integer.`);if(this.timestamp=e.getTimestamp(),!Number.isFinite(this.timestamp))throw TypeError(`getTimestamp() must return a finite number.`);this.duration=this.numberOfFrames/this.sampleRate}else{if(!e||typeof e!=`object`)throw TypeError(`Invalid AudioDataInit: must be an object.`);if(!Bd.has(e.format))throw TypeError(`Invalid AudioDataInit: invalid format.`);if(!Number.isFinite(e.sampleRate)||e.sampleRate<=0)throw TypeError(`Invalid AudioDataInit: sampleRate must be > 0.`);if(!Number.isInteger(e.numberOfChannels)||e.numberOfChannels===0)throw TypeError(`Invalid AudioDataInit: numberOfChannels must be an integer > 0.`);if(!Number.isFinite(e?.timestamp))throw TypeError(`init.timestamp must be a number.`);let t=e.data.byteLength/(Ud(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw TypeError(`Invalid AudioDataInit: data size is not a multiple of frame size.`);this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate;let n;if(e.data instanceof ArrayBuffer)n=new Uint8Array(e.data);else if(ArrayBuffer.isView(e.data))n=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength);else throw TypeError(`Invalid AudioDataInit: data is not a BufferSource.`);let r=this.numberOfFrames*this.numberOfChannels*Ud(this.format);if(n.byteLength<r)throw TypeError(`Invalid AudioDataInit: insufficient data size.`);this._data=n}yd?.register(this,{type:`audio`,data:this._data},this)}allocationSize(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!Number.isInteger(e.planeIndex)||e.planeIndex<0)throw TypeError(`planeIndex must be a non-negative integer.`);if(e.format!==void 0&&!Bd.has(e.format))throw TypeError(`Invalid format.`);if(e.frameOffset!==void 0&&(!Number.isInteger(e.frameOffset)||e.frameOffset<0))throw TypeError(`frameOffset must be a non-negative integer.`);if(e.frameCount!==void 0&&(!Number.isInteger(e.frameCount)||e.frameCount<0))throw TypeError(`frameCount must be a non-negative integer.`);if(this._closed)throw Error(`AudioSample is closed.`);let t=e.format??this.format,n=e.frameOffset??0;if(n>=this.numberOfFrames)throw RangeError(`frameOffset out of range`);let r=e.frameCount===void 0?this.numberOfFrames-n:e.frameCount;if(r>this.numberOfFrames-n)throw RangeError(`frameCount out of range`);let i=Ud(t),a=Wd(t);if(a&&e.planeIndex>=this.numberOfChannels||!a&&e.planeIndex!==0)throw RangeError(`planeIndex out of range`);return(a?r:r*this.numberOfChannels)*i}copyTo(e,t){if(!er(e))throw TypeError(`destination must be an ArrayBuffer or an ArrayBuffer view.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw TypeError(`planeIndex must be a non-negative integer.`);if(t.format!==void 0&&!Bd.has(t.format))throw TypeError(`Invalid format.`);if(t.frameOffset!==void 0&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw TypeError(`frameOffset must be a non-negative integer.`);if(t.frameCount!==void 0&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw TypeError(`frameCount must be a non-negative integer.`);if(this._closed)throw Error(`AudioSample is closed.`);let{format:n,frameCount:r,frameOffset:i}=t,{planeIndex:a}=t,o=this.format,s=n??this.format;if(!s)throw Error(`Destination format not determined`);let c=this.numberOfFrames,l=this.numberOfChannels,u=i??0;if(u>=c)throw RangeError(`frameOffset out of range`);let d=r===void 0?c-u:r;if(d>c-u)throw RangeError(`frameCount out of range`);let f=Ud(s),p=Wd(s);if(p&&a>=l||!p&&a!==0)throw RangeError(`planeIndex out of range`);let m=(p?d:d*l)*f;if(e.byteLength<m)throw RangeError(`Destination buffer is too small`);let h=j(e),g=Kd(s);if(qd(this._data))Lr()&&l>2&&s!==o?Yd(this._data,h,o,s,l,a,u,d):this._data.copyTo(e,{planeIndex:a,frameOffset:u,frameCount:d,format:s});else{let e=Gd(o),t=Ud(o),n=Wd(o),r;if(this._data instanceof Vd){let e=e=>{let r=this._data.getDataPlane(e);if(!(r instanceof Uint8Array))throw TypeError(`getDataPlane() must return a Uint8Array.`);let i=c*t*(n?1:l);if(r.byteLength!==i)throw TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${r.byteLength} bytes.`);return r};if(n)if(p)r=e(a),a=0;else{r=new Uint8Array(c*t*l);for(let n=0;n<l;n++){let i=e(n);r.set(i,n*c*t)}}else r=e(0)}else r=this._data;let i=j(r);for(let r=0;r<d;r++)if(p){let o=r*f,s;s=n?(a*c+(r+u))*t:((r+u)*l+a)*t,g(h,o,e(i,s))}else for(let a=0;a<l;a++){let o=(r*l+a)*f,s;s=n?(a*c+(r+u))*t:((r+u)*l+a)*t,g(h,o,e(i,s))}}}clone(){if(this._closed)throw Error(`AudioSample is closed.`);if(this._data instanceof Vd){let t=new e(this._data);return t.setTimestamp(this.timestamp),t}else if(qd(this._data)){let t=new e(this._data.clone());return t.setTimestamp(this.timestamp),t}else return new e({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp,data:this._data})}close(){this._closed||=(yd?.unregister(this),this._data instanceof Vd?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):qd(this._data)?this._data.close():this._data=new Uint8Array,!0)}toAudioData(){if(this._closed)throw Error(`AudioSample is closed.`);return this._data instanceof Vd?this._createAudioDataFromData():qd(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(Wd(this.format)){let e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let n=0;n<this.numberOfChannels;n++)this.copyTo(new Uint8Array(t,n*e,e),{planeIndex:n,format:this.format});return new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:t})}else{let e=new ArrayBuffer(this.allocationSize({planeIndex:0,format:this.format}));return this.copyTo(e,{planeIndex:0,format:this.format}),new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:e})}}toAudioBuffer(){if(this._closed)throw Error(`AudioSample is closed.`);let e=new AudioBuffer({numberOfChannels:this.numberOfChannels,length:this.numberOfFrames,sampleRate:this.sampleRate}),t=new Float32Array(this.allocationSize({planeIndex:0,format:`f32-planar`})/4);for(let n=0;n<this.numberOfChannels;n++)this.copyTo(t,{planeIndex:n,format:`f32-planar`}),e.copyToChannel(t,n);return e}setTimestamp(e){if(!Number.isFinite(e))throw TypeError(`newTimestamp must be a number.`);this.timestamp=e}[Symbol.dispose](){this.close()}static*_fromAudioBuffer(t,n){if(!(t instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let r=t.numberOfChannels,i=t.sampleRate,a=t.length,o=Math.floor(24e4/r),s=0,c=a;for(;c>0;){let a=Math.min(o,c),l=new Float32Array(r*a);for(let e=0;e<r;e++)t.copyFromChannel(l.subarray(e*a,(e+1)*a),e,s);yield new e({format:`f32-planar`,sampleRate:i,numberOfFrames:a,numberOfChannels:r,timestamp:n+s/i,data:l}),s+=a,c-=a}}static fromAudioBuffer(t,n){if(!(t instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let r=t.numberOfChannels,i=t.sampleRate,a=t.length,o=Math.floor(24e4/r),s=0,c=a,l=[];for(;c>0;){let a=Math.min(o,c),u=new Float32Array(r*a);for(let e=0;e<r;e++)t.copyFromChannel(u.subarray(e*a,(e+1)*a),e,s);let d=new e({format:`f32-planar`,sampleRate:i,numberOfFrames:a,numberOfChannels:r,timestamp:n+s/i,data:u});l.push(d),s+=a,c-=a}return l}},Ud=e=>{switch(e){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 Error(`Unknown AudioSampleFormat`)}},Wd=e=>{switch(e){case`u8-planar`:case`s16-planar`:case`s32-planar`:case`f32-planar`:return!0;default:return!1}},Gd=e=>{switch(e){case`u8`:case`u8-planar`:return(e,t)=>(e.getUint8(t)-128)/128;case`s16`:case`s16-planar`:return(e,t)=>e.getInt16(t,!0)/32768;case`s32`:case`s32-planar`:return(e,t)=>e.getInt32(t,!0)/2147483648;case`f32`:case`f32-planar`:return(e,t)=>e.getFloat32(t,!0)}},Kd=e=>{switch(e){case`u8`:case`u8-planar`:return(e,t,n)=>e.setUint8(t,br((n+1)*127.5,0,255));case`s16`:case`s16-planar`:return(e,t,n)=>e.setInt16(t,br(Math.round(n*32767),-32768,32767),!0);case`s32`:case`s32-planar`:return(e,t,n)=>e.setInt32(t,br(Math.round(n*2147483647),-2147483648,2147483647),!0);case`f32`:case`f32-planar`:return(e,t,n)=>e.setFloat32(t,n,!0)}},qd=e=>typeof AudioData<`u`&&e instanceof AudioData,Jd=e=>{switch(e){case`u8-planar`:return`u8`;case`s16-planar`:return`s16`;case`s32-planar`:return`s32`;case`f32-planar`:return`f32`;default:return e}},Yd=(e,t,n,r,i,a,o,s)=>{let c=Gd(n),l=Kd(r),u=Ud(n),d=Ud(r),f=Wd(n);if(Wd(r))if(f){let r=new ArrayBuffer(s*u),i=j(r);e.copyTo(r,{planeIndex:a,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=e*u;l(t,e*d,c(i,n))}}else{let r=new ArrayBuffer(s*i*u),f=j(r);e.copyTo(r,{planeIndex:0,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=(e*i+a)*u;l(t,e*d,c(f,n))}}else if(f){let r=s*u,a=new ArrayBuffer(r),f=j(a);for(let r=0;r<i;r++){e.copyTo(a,{planeIndex:r,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=e*u;l(t,(e*i+r)*d,c(f,n))}}}else{let r=new ArrayBuffer(s*i*u),a=j(r);e.copyTo(r,{planeIndex:0,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++)for(let n=0;n<i;n++){let r=e*i+n,o=r*u;l(t,r*d,c(a,o))}}},Xd=(e,t)=>{let n=e.allocationSize({format:t,planeIndex:0}),r=new ArrayBuffer(n);return e.copyTo(r,{format:t,planeIndex:0}),new Hd({data:r,format:t,numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,timestamp:e.timestamp,duration:e.duration})}})),Qd,$d,ef,tf,nf,rf,af,of,sf,cf,lf,uf,df,ff,pf,mf,hf,gf,_f,vf,yf,bf,xf,Sf,Cf,wf=n((()=>{ha(),Ff(),F(),Zd(),Qd=new Map,$d=new Map,ef=e=>{if(!e||typeof e!=`object`)throw TypeError(`Encoding config must be an object.`);if(!Fi.includes(e.codec))throw TypeError(`Invalid video codec '${e.codec}'. Must be one of: ${Fi.join(`, `)}.`);if(!(e.bitrate instanceof sf)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`config.bitrate must be a positive integer or a quality.`);if(e.keyFrameInterval!==void 0&&(!Number.isFinite(e.keyFrameInterval)||e.keyFrameInterval<0))throw TypeError(`config.keyFrameInterval, when provided, must be a non-negative number.`);if(e.sizeChangeBehavior!==void 0&&![`deny`,`passThrough`,`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior))throw TypeError(`config.sizeChangeBehavior, when provided, must be 'deny', 'passThrough', 'fill', 'contain' or 'cover'.`);if(e.transform!==void 0){if(typeof e.transform!=`object`||!e.transform)throw TypeError(`config.transform, when provided, must be an object.`);if(e.transform.width!==void 0&&(!Number.isInteger(e.transform.width)||e.transform.width<=0))throw TypeError(`config.transform.width, when provided, must be a positive integer.`);if(e.transform.height!==void 0&&(!Number.isInteger(e.transform.height)||e.transform.height<=0))throw TypeError(`config.transform.height, when provided, must be a positive integer.`);if(e.transform.fit!==void 0&&![`fill`,`contain`,`cover`].includes(e.transform.fit))throw TypeError(`config.transform.fit, when provided, must be one of "fill", "contain", or "cover".`);if(e.transform.width!==void 0&&e.transform.height!==void 0&&e.transform.fit===void 0&&![`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior))throw TypeError(`When both config.transform.width and config.transform.height are provided, config.transform.fit must also be provided.`);if(e.transform.fit!==void 0&&[`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior)&&e.transform.fit!==e.sizeChangeBehavior)throw 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(e.transform.rotate!==void 0&&![0,90,180,270].includes(e.transform.rotate))throw TypeError(`config.transform.rotate, when provided, must be 0, 90, 180 or 270.`);if(e.transform.crop!==void 0&&Md(e.transform.crop,`config.transform.`),e.transform.process!==void 0&&typeof e.transform.process!=`function`)throw TypeError(`config.transform.process, when provided, must be a function.`);if(e.transform.frameRate!==void 0&&(!Number.isFinite(e.transform.frameRate)||e.transform.frameRate<=0))throw TypeError(`config.transform.frameRate, when provided, must be a finite positive number.`);if(e.transform.force!==void 0&&typeof e.transform.force!=`boolean`)throw TypeError(`config.transform.force, when provided, must be a boolean.`)}if(e.onEncodedPacket!==void 0&&typeof e.onEncodedPacket!=`function`)throw TypeError(`config.onEncodedPacket, when provided, must be a function.`);if(e.onEncoderConfig!==void 0&&typeof e.onEncoderConfig!=`function`)throw TypeError(`config.onEncoderConfig, when provided, must be a function.`);tf(e.codec,e)},tf=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`Encoding options must be an object.`);if(t.alpha!==void 0&&![`discard`,`keep`].includes(t.alpha))throw TypeError(`options.alpha, when provided, must be 'discard' or 'keep'.`);if(t.bitrateMode!==void 0&&![`constant`,`variable`].includes(t.bitrateMode))throw TypeError(`bitrateMode, when provided, must be 'constant' or 'variable'.`);if(t.latencyMode!==void 0&&![`quality`,`realtime`].includes(t.latencyMode))throw TypeError(`latencyMode, when provided, must be 'quality' or 'realtime'.`);if(t.fullCodecString!==void 0&&typeof t.fullCodecString!=`string`)throw TypeError(`fullCodecString, when provided, must be a string.`);if(t.fullCodecString!==void 0&&ra(t.fullCodecString)!==e)throw TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${e}).`);if(t.hardwareAcceleration!==void 0&&![`no-preference`,`prefer-hardware`,`prefer-software`].includes(t.hardwareAcceleration))throw TypeError(`hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(t.scalabilityMode!==void 0&&typeof t.scalabilityMode!=`string`)throw TypeError(`scalabilityMode, when provided, must be a string.`);if(t.contentHint!==void 0&&typeof t.contentHint!=`string`)throw TypeError(`contentHint, when provided, must be a string.`)},nf=e=>{let t=e.bitrate instanceof sf?e.bitrate._toVideoBitrate(e.codec,e.width,e.height):e.bitrate;return{codec:e.fullCodecString??Ki(e.codec,e.width,e.height,t),width:e.width,height:e.height,displayWidth:e.squarePixelWidth,displayHeight:e.squarePixelHeight,bitrate:t,bitrateMode:e.bitrateMode,alpha:e.alpha??`discard`,framerate:e.framerate,latencyMode:e.latencyMode,hardwareAcceleration:e.hardwareAcceleration,scalabilityMode:e.scalabilityMode,contentHint:e.contentHint,...ia(e.codec)}},rf=e=>{if(!e||typeof e!=`object`)throw TypeError(`Encoding config must be an object.`);if(!Ri.includes(e.codec))throw TypeError(`Invalid audio codec '${e.codec}'. Must be one of: ${Ri.join(`, `)}.`);if(e.bitrate===void 0&&!(Ii.includes(e.codec)||e.codec===`flac`))throw TypeError(`config.bitrate must be provided for compressed audio codecs.`);if(e.bitrate!==void 0&&!(e.bitrate instanceof sf)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`config.bitrate, when provided, must be a positive integer or a quality.`);if(e.transform!==void 0){if(typeof e.transform!=`object`||!e.transform)throw TypeError(`config.transform, when provided, must be an object.`);if(e.transform.numberOfChannels!==void 0&&(!Number.isInteger(e.transform.numberOfChannels)||e.transform.numberOfChannels<=0))throw TypeError(`config.transform.numberOfChannels, when provided, must be a positive integer.`);if(e.transform.sampleRate!==void 0&&(!Number.isInteger(e.transform.sampleRate)||e.transform.sampleRate<=0))throw TypeError(`config.transform.sampleRate, when provided, must be a positive integer.`);if(e.transform.sampleFormat!==void 0&&![`u8`,`s16`,`s32`,`f32`].includes(e.transform.sampleFormat))throw TypeError(`config.transform.sampleFormat, when provided, must be one of: u8, s16, s32, f32.`);if(e.transform.process!==void 0&&typeof e.transform.process!=`function`)throw TypeError(`config.transform.process, when provided, must be a function.`)}if(e.onEncodedPacket!==void 0&&typeof e.onEncodedPacket!=`function`)throw TypeError(`config.onEncodedPacket, when provided, must be a function.`);if(e.onEncoderConfig!==void 0&&typeof e.onEncoderConfig!=`function`)throw TypeError(`config.onEncoderConfig, when provided, must be a function.`);af(e.codec,e)},af=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`Encoding options must be an object.`);if(t.bitrateMode!==void 0&&![`constant`,`variable`].includes(t.bitrateMode))throw TypeError(`bitrateMode, when provided, must be 'constant' or 'variable'.`);if(t.fullCodecString!==void 0&&typeof t.fullCodecString!=`string`)throw TypeError(`fullCodecString, when provided, must be a string.`);if(t.fullCodecString!==void 0&&ra(t.fullCodecString)!==e)throw TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${e}).`)},of=e=>{let t=e.bitrate instanceof sf?e.bitrate._toAudioBitrate(e.codec):e.bitrate;return{codec:e.fullCodecString??Xi(e.codec,e.numberOfChannels,e.sampleRate),numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,bitrate:t,bitrateMode:e.bitrateMode,...aa(e.codec)}},sf=class{constructor(e){this._factor=e}_toVideoBitrate(e,t,n){let r=3e6*(t*n/(1920*1080))**.95*{avc:1,hevc:.6,vp9:.6,av1:.4,vp8:1.2}[e]*this._factor;return Math.ceil(r/1e3)*1e3}_toAudioBitrate(e){if(Ii.includes(e)||e===`flac`)return;let t={aac:128e3,opus:64e3,mp3:16e4,vorbis:64e3,ac3:384e3,eac3:192e3}[e];if(!t)throw Error(`Unhandled codec: ${e}`);let n=t*this._factor;return e===`aac`?n=[96e3,128e3,16e4,192e3].reduce((e,t)=>Math.abs(t-n)<Math.abs(e-n)?t:e):e===`opus`||e===`vorbis`?n=Math.max(6e3,n):e===`mp3`&&(n=[8e3,16e3,24e3,32e3,4e4,48e3,64e3,8e4,96e3,112e3,128e3,16e4,192e3,224e3,256e3,32e4].reduce((e,t)=>Math.abs(t-n)<Math.abs(e-n)?t:e)),Math.round(n/1e3)*1e3}},cf=new sf(.3),lf=new sf(.6),uf=new sf(1),df=new sf(2),ff=new sf(4),pf=e=>{if(Fi.includes(e))return mf(e);if(Ri.includes(e))return hf(e);if(zi.includes(e))return gf(e);throw TypeError(`Unknown codec '${e}'.`)},mf=async(e,t={})=>{let{width:n=1280,height:r=720,bitrate:i=1e6,...a}=t;if(!Fi.includes(e))return!1;if(!Number.isInteger(n)||n<=0)throw TypeError(`width must be a positive integer.`);if(!Number.isInteger(r)||r<=0)throw TypeError(`height must be a positive integer.`);if(!(i instanceof sf)&&(!Number.isInteger(i)||i<=0))throw TypeError(`bitrate must be a positive integer or a quality.`);tf(e,a);let o=nf({codec:e,width:n,height:r,bitrate:i,framerate:void 0,...a,alpha:`discard`}),s=JSON.stringify(o),c=Qd.get(s);if(c)return c;let l=(async()=>jf.some(t=>t.supports(e,o))?!0:typeof VideoEncoder>`u`||(n%2==1||r%2==1)&&(e===`avc`||e===`hevc`)||!(await VideoEncoder.isConfigSupported(o)).supported?!1:zr()?new Promise(async e=>{try{let t=new VideoEncoder({output:()=>{},error:()=>e(!1)});t.configure(o);let i=new Uint8Array(n*r*4),a=new VideoFrame(i,{format:`RGBA`,codedWidth:n,codedHeight:r,timestamp:0});t.encode(a),a.close(),await t.flush(),e(!0)}catch{e(!1)}}):!0)();return Qd.set(s,l),l},hf=async(e,t={})=>{let{numberOfChannels:n=2,sampleRate:r=48e3,bitrate:i=128e3,...a}=t;if(!Ri.includes(e))return!1;if(!Number.isInteger(n)||n<=0)throw TypeError(`numberOfChannels must be a positive integer.`);if(!Number.isInteger(r)||r<=0)throw TypeError(`sampleRate must be a positive integer.`);if(!(i instanceof sf)&&(!Number.isInteger(i)||i<=0))throw TypeError(`bitrate must be a positive integer.`);af(e,a);let o=of({codec:e,numberOfChannels:n,sampleRate:r,bitrate:i,...a}),s=JSON.stringify(o),c=$d.get(s);if(c)return c;let l=(async()=>Mf.some(t=>t.supports(e,o))||Ii.includes(e)?!0:typeof AudioEncoder>`u`?!1:(await AudioEncoder.isConfigSupported(o)).supported===!0)();return $d.set(s,l),l},gf=async e=>!!zi.includes(e),_f=async()=>{let[e,t,n]=await Promise.all([vf(),yf(),bf()]);return[...e,...t,...n]},vf=async(e=Fi,t)=>{let n=await Promise.all(e.map(e=>mf(e,t)));return e.filter((e,t)=>n[t])},yf=async(e=Ri,t)=>{let n=await Promise.all(e.map(e=>hf(e,t)));return e.filter((e,t)=>n[t])},bf=async(e=zi)=>{let t=await Promise.all(e.map(gf));return e.filter((e,n)=>t[n])},xf=async(e,t)=>{for(let n of e)if(await mf(n,t))return n;return null},Sf=async(e,t)=>{for(let n of e)if(await hf(n,t))return n;return null},Cf=async e=>{for(let t of e)if(await gf(t))return t;return null}})),Tf,Ef,Df,Of,kf,Af,jf,Mf,Nf,Pf,Ff=n((()=>{md(),wf(),Tf=class{static supports(e,t){return!1}},Ef=class{static supports(e,t){return!1}},Df=class{static supports(e,t){return!1}},Of=class{static supports(e,t){return!1}},kf=[],Af=[],jf=[],Mf=[],Nf=e=>{if(e.prototype instanceof Tf){let t=e;if(kf.includes(t)){console.warn(`Video decoder already registered.`);return}kf.push(t),id.clear()}else if(e.prototype instanceof Ef){let t=e;if(Af.includes(t)){console.warn(`Audio decoder already registered.`);return}Af.push(t),ad.clear()}else throw TypeError(`Decoder must be a CustomVideoDecoder or CustomAudioDecoder.`)},Pf=e=>{if(e.prototype instanceof Df){let t=e;if(jf.includes(t)){console.warn(`Video encoder already registered.`);return}jf.push(t),Qd.clear()}else if(e.prototype instanceof Of){let t=e;if(Mf.includes(t)){console.warn(`Audio encoder already registered.`);return}Mf.push(t),$d.clear()}else throw TypeError(`Encoder must be a CustomVideoEncoder or CustomAudioEncoder.`)}})),If,Lf,Rf,zf,Bf=n((()=>{If=e=>{let t=8191,n=e,r=4096,i=0,a=12,o=0;for(n<0&&(n=-n,i=128),n+=33,n>t&&(n=t);(n&r)!==r&&a>=5;)r>>=1,a--;return o=n>>a-4&15,~(i|a-5<<4|o)&255},Lf=e=>{let t=0,n=0,r=~e;r&128&&(r&=-129,t=-1),n=((r&240)>>4)+5;let i=(1<<n|(r&15)<<n-4|1<<n-5)-33;return t===0?i:-i},Rf=e=>{let t=4095,n=2048,r=0,i=11,a=0,o=e;for(o<0&&(o=-o,r=128),o>t&&(o=t);(o&n)!==n&&i>=5;)n>>=1,i--;return a=o>>(i===4?1:i-4)&15,(r|i-4<<4|a)^85},zf=e=>{let t=0,n=0,r=e^85;r&128&&(r&=-129,t=-1),n=((r&240)>>4)+4;let i=0;return i=n===4?r<<1|1:1<<n|(r&15)<<n-4|1<<n-5,t===0?i:-i}})),Vf,Hf,Uf,Wf,Gf,Kf,qf,Jf,Yf,Xf,Zf,Qf,$f,ep,tp,np,rp,ip=n((()=>{ha(),Po(),Ff(),Sp(),hp(),F(),Ro(),Bf(),Zd(),Vf=e=>{if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.metadataOnly!==void 0&&typeof e.metadataOnly!=`boolean`)throw TypeError(`options.metadataOnly, when defined, must be a boolean.`);if(e.verifyKeyPackets!==void 0&&typeof e.verifyKeyPackets!=`boolean`)throw TypeError(`options.verifyKeyPackets, when defined, must be a boolean.`);if(e.verifyKeyPackets&&e.metadataOnly)throw TypeError(`options.verifyKeyPackets and options.metadataOnly cannot be enabled together.`);if(e.skipLiveWait!==void 0&&typeof e.skipLiveWait!=`boolean`)throw TypeError(`options.skipLiveWait, when defined, must be a boolean.`)},Hf=e=>{if(!Qr(e))throw TypeError(`timestamp must be a number.`)},Uf=(e,t,n)=>n.verifyKeyPackets?t.then(async t=>{if(!t||t.type===`delta`)return t;let n=await e.determinePacketType(t);return n&&(t.type=n),t}):t,Wf=class{constructor(e){if(!(e instanceof ap))throw TypeError(`track must be an InputTrack.`);this._track=e}async getFirstPacket(e={}){if(Vf(e),this._track.input._disposed)throw new xp;return Uf(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){Vf(e);let t=await this.getFirstPacket(e);return t?t.type===`key`?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(Hf(e),Vf(t),this._track.input._disposed)throw new xp;return Uf(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);if(Vf(t),this._track.input._disposed)throw new xp;return Uf(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(Hf(e),Vf(t),this._track.input._disposed)throw new xp;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);let n=await this._track._backing.getKeyPacket(e,t);return n&&(D(n.type===`key`),await this._track.determinePacketType(n)===`delta`?this.getKeyPacket(n.timestamp-1/await this._track.getTimeResolution(),t):n)}async getNextKeyPacket(e,t={}){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);if(Vf(t),this._track.input._disposed)throw new xp;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);let n=await this._track._backing.getNextKeyPacket(e,t);return n&&(D(n.type===`key`),await this._track.determinePacketType(n)===`delta`?this.getNextKeyPacket(n,t):n)}packets(e,t,n={}){if(e!==void 0&&!(e instanceof L))throw TypeError(`startPacket must be an EncodedPacket.`);if(e!==void 0&&e.isMetadataOnly&&!n?.metadataOnly)throw TypeError(`startPacket can only be metadata-only if options.metadataOnly is enabled.`);if(t!==void 0&&!(t instanceof L))throw TypeError(`endPacket must be an EncodedPacket.`);if(Vf(n),this._track.input._disposed)throw new xp;let r=[],{promise:i,resolve:a}=P(),{promise:o,resolve:s}=P(),c=!1,l=!1,u=null,d=[],f=()=>Math.max(2,d.length);(async()=>{let u=e??await this.getFirstPacket(n);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);){if(r.length>f()){({promise:o,resolve:s}=P()),await o;continue}r.push(u),a(),{promise:i,resolve:a}=P(),u=await this.getNextPacket(u,n)}c=!0,a()})().catch(e=>{u||(u=e,a())});let p=this._track;return{async next(){for(;;)if(p.input._disposed)throw new xp;else if(l)return{value:void 0,done:!0};else if(u)throw u;else if(r.length>0){let e=r.shift(),t=performance.now();for(d.push(t);d.length>0&&t-d[0]>=1e3;)d.shift();return s(),{value:e,done:!1}}else if(c)return{value:void 0,done:!0};else await i},async return(){return l=!0,s(),a(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}},Gf=class{constructor(e,t){this.onSample=e,this.onError=t}},Kf=class{mediaSamplesInRange(e=-1/0,t=1/0,n){Hf(e),Hf(t);let r=[],i=!1,a=null,{promise:o,resolve:s}=P(),{promise:c,resolve:l}=P(),u=!1,d=!1,f=!1,p=null,m={...n,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let n=await this._createDecoder(n=>{if(l(),n.timestamp>=t&&(d=!0),d){n.close();return}a&&(n.timestamp>e?(r.push(a),i=!0):a.close()),n.timestamp>=e&&(r.push(n),i=!0),a=i?null:n,r.length>0&&(s(),{promise:o,resolve:s}=P())},e=>{p||(p=e,s())}),h=this._createPacketSink(),g=await h.getKeyPacket(e,m)??await h.getFirstKeyPacket(m),_=g,v=h.packets(g??void 0,void 0,m);for(await v.next();_&&!d&&!this._track.input._disposed;){let e=qf(r.length);if(r.length+n.getDecodeQueueSize()>e){({promise:c,resolve:l}=P()),await c;continue}n.decode(_);let t=await v.next();if(t.done)break;_=t.value}await v.return(),!f&&!this._track.input._disposed&&await n.flush(),n.close(),!i&&a&&r.push(a),u=!0,s()})().catch(e=>{p||(p=e,s())});let h=this._track,g=()=>{a?.close();for(let e of r)e.close()};return{async next(){for(;;)if(h.input._disposed)throw g(),new xp;else if(f)return{value:void 0,done:!0};else if(p)throw g(),p;else if(r.length>0){let e=r.shift();return l(),{value:e,done:!1}}else if(!u)await o;else return{value:void 0,done:!0}},async return(){return f=!0,d=!0,l(),s(),g(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){fr(e);let n=dr(e),r=[],i=[],{promise:a,resolve:o}=P(),{promise:s,resolve:c}=P(),l=!1,u=!1,d=null,f=e=>{i.push(e),o(),{promise:a,resolve:o}=P()},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let e=await this._createDecoder(e=>{if(c(),u){e.close();return}let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let n=0;n<t;n++)f(n<t-1?e.clone():e);else e.close()},e=>{d||(d=e,o())}),t=this._createPacketSink(),a=null,m=null,h=-1,g=async()=>{D(m);let n=m;for(e.decode(n);n.sequenceNumber<h;){let r=qf(i.length);for(;i.length+e.getDecodeQueueSize()>r&&!u;)({promise:s,resolve:c}=P()),await s;if(u)break;let a=await t.getNextPacket(n,p);D(a),e.decode(a),n=a}h=-1},_=async()=>{await e.flush();for(let e=0;e<r.length;e++)f(null);r.length=0};for await(let e of n){if(Hf(e),u||this._track.input._disposed)break;let n=await t.getPacket(e,p),i=n&&await t.getKeyPacket(e,p);if(!i){h!==-1&&(await g(),await _()),f(null),a=null;continue}a&&(i.sequenceNumber!==m.sequenceNumber||n.timestamp<a.timestamp)&&(await g(),await _()),r.push(n.timestamp),h=Math.max(n.sequenceNumber,h),a=n,m=i}!u&&!this._track.input._disposed&&(h!==-1&&await g(),await _()),e.close(),l=!0,o()})().catch(e=>{d||(d=e,o())});let m=this._track,h=()=>{for(let e of i)e?.close()};return{async next(){for(;;)if(m.input._disposed)throw h(),new xp;else if(u)return{value:void 0,done:!0};else if(d)throw h(),d;else if(i.length>0){let e=i.shift();return D(e!==void 0),c(),{value:e,done:!1}}else if(!l)await a;else return{value:void 0,done:!0}},async return(){return u=!0,c(),o(),h(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}},qf=e=>e===0?40:8,Jf=class extends Gf{constructor(e,t,n,r,i,a){super(e,t),this.codec=n,this.decoderConfig=r,this.rotation=i,this.timeResolution=a,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Fr,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.frameHandlerSerializer=new Fr;let o=kf.find(e=>e.supports(n,r));if(o)this.customDecoder=new o,this.customDecoder.codec=n,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Cd))throw TypeError(`The argument passed to onSample must be a VideoSample.`);this.finalizeAndEmitSample(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let e=e=>{this.frameHandlerSerializer.call(async()=>{if(this.alphaQueue.length>0){let t=this.alphaQueue.shift();D(t!==void 0),await this.mergeAlpha(e,t)}else this.colorQueue.push(e)}).catch(e=>this.onError(e))};if(n===`avc`&&this.decoderConfig.description&&Vr()){let e=Ga(A(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){let t=qa(e.sequenceParameterSets[0]);t&&t.frameMbsOnlyFlag===0&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:`prefer-software`})}}let t=Error(`Decoding error`).stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(e){this.onError(e)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(D(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if(this.codec===`hevc`&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--);else{if(D(this.decoder),Lr()||sr(this.inputTimestamps,e.timestamp,e=>e),Vr()&&this.currentPacketIndex===0){if(this.codec===`avc`){let t=[];for(let n of Ia(e.data,this.decoderConfig)){let r=La(e.data[n.offset]);r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}e=new L(Ha(t,this.decoderConfig),e.type,e.timestamp,e.duration)}else if(this.codec===`hevc`){let t=uo(e.data,this.decoderConfig);t&&(e=new L(t,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||=new Xf,!this.alphaDecoder){let e=e=>{this.frameHandlerSerializer.call(async()=>{if(this.colorQueue.length>0){let t=this.colorQueue.shift();D(t!==void 0),await this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){let e=this.colorQueue.shift();D(e!==void 0),await this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--}).catch(e=>this.onError(e))},t=Error(`Decoding error`).stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(e){this.onError(e)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}let t=yo(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||=t===`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(t??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 t of Xa(e,this.decoderConfig)){let n=Za(e[t.offset]);if(n===Na.RASL_N||n===Na.RASL_R)return!0}return!1}sampleHandler(e){if(Lr()){if(this.sampleQueue.length>0&&e.timestamp>=O(this.sampleQueue).timestamp){for(let e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}sr(this.sampleQueue,e,e=>e.timestamp)}else{let t=this.inputTimestamps.shift();D(t!==void 0),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){if(!t){let t=new Cd(e);this.sampleHandler(t);return}D(this.merger);let n=new Cd(await this.merger.update(e,t));this.sampleHandler(n)}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(D(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await this.frameHandlerSerializer.currentPromise,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()):(D(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}},Yf=!1,Xf=class e{constructor(){this.canvas=null,this.gl=null,this.program=null,this.vao=null,this.colorTexture=null,this.alphaTexture=null,this.worker=null,this.pendingRequests=new Map,this.nextRequestId=0;let t=typeof OffscreenCanvas<`u`||typeof document<`u`&&typeof document.createElement==`function`;if(!e.forceCpu&&t&&!Yf)try{typeof OffscreenCanvas<`u`?this.canvas=new OffscreenCanvas(300,150):this.canvas=document.createElement(`canvas`);let e=this.canvas.getContext(`webgl2`,{premultipliedAlpha:!1});if(!e)throw Error(`Couldn't acquire WebGL 2 context.`);this.gl=e,this.program=this.createProgram(),this.vao=this.createVAO(),this.colorTexture=this.createTexture(),this.alphaTexture=this.createTexture(),this.gl.useProgram(this.program),this.gl.uniform1i(this.gl.getUniformLocation(this.program,`u_colorTexture`),0),this.gl.uniform1i(this.gl.getUniformLocation(this.program,`u_alphaTexture`),1)}catch(e){this.gl=null,this.canvas=null,Yf=!0,console.warn(`Falling back to CPU for color/alpha merging.`,e)}}async update(e,t){return this.gl?this.updateGpu(e,t):this.updateCpu(e,t)}createProgram(){D(this.gl);let e=this.createShader(this.gl.VERTEX_SHADER,`#version 300 es
|
|
9
|
+
function D(e){if(!e)throw Error(`Assertion failed.`)}var Bn,O,Vn,k,Hn,Un,A,j,Wn,M,Gn,Kn,qn,Jn,Yn,Xn,Zn,Qn,$n,er,tr,nr,rr,ir,ar,or,N,sr,P,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar,jr,Mr,Nr,Pr,Fr,Ir,Lr,Rr,zr,Br,Vr,Hr,Ur,Wr,Gr,Kr,qr,Jr,Yr,Xr,Zr,Qr,$r,ei,ti,ni,ri,ii,ai,oi,si,ci,li,ui,di,fi,pi,mi,hi,gi,_i,vi,yi,F=n((()=>{Bn=e=>{let t=(e%360+360)%360;if(t===0||t===90||t===180||t===270)return t;throw Error(`Invalid rotation ${e}.`)},O=e=>e&&e[e.length-1],Vn=e=>e>=0&&e<2**32,k=e=>{let t=0;for(;e.readBits(1)===0&&t<32;)t++;if(t>=32)throw Error(`Invalid exponential-Golomb code.`);return(1<<t)-1+e.readBits(t)},Hn=e=>{let t=k(e);return t&1?t+1>>1:-(t>>1)},Un=(e,t,n,r)=>{for(let i=t;i<n;i++){let t=Math.floor(i/8),a=e[t],o=7-(i&7);a&=~(1<<o),a|=(r&1<<n-i-1)>>n-i-1<<o,e[t]=a}},A=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),j=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e),Wn=new TextDecoder,M=new TextEncoder,Gn=e=>{for(let t=0;t<e.length;t++)if(e.charCodeAt(t)>255)return!1;return!0},Kn=e=>Object.fromEntries(Object.entries(e).map(([e,t])=>[t,e])),qn={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Jn=Kn(qn),Yn={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},Xn=Kn(Yn),Zn={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},Qn=Kn(Zn),$n=e=>!!e&&!!e.primaries&&!!e.transfer&&!!e.matrix&&e.fullRange!==void 0,er=e=>e instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer||ArrayBuffer.isView(e),tr=class{constructor(){this.currentPromise=Promise.resolve(),this.pending=0}async acquire(){let e,t=new Promise(t=>{let n=!1;e=()=>{n||=(t(),this.pending--,!0)}}),n=this.currentPromise;return this.currentPromise=t,this.pending++,await n,e}},nr=/^[0-9a-fA-F]+$/,rr=e=>[...e].map(e=>e.toString(16).padStart(2,`0`)).join(``),ir=e=>{D(e.length%2==0);let t=new Uint8Array(e.length/2);for(let n=0;n<e.length;n+=2)t[n/2]=parseInt(e.slice(n,n+2),16);return t},ar=e=>(e=e>>1&1431655765|(e&1431655765)<<1,e=e>>2&858993459|(e&858993459)<<2,e=e>>4&252645135|(e&252645135)<<4,e=e>>8&16711935|(e&16711935)<<8,e=e>>16&65535|(e&65535)<<16,e>>>0),or=(e,t,n)=>{let r=0,i=e.length-1,a=-1;for(;r<=i;){let o=r+i>>1,s=n(e[o]);s===t?(a=o,i=o-1):s<t?r=o+1:i=o-1}return a},N=(e,t,n)=>{let r=0,i=e.length-1,a=-1;for(;r<=i;){let o=r+(i-r+1)/2|0;n(e[o])<=t?(a=o,r=o+1):i=o-1}return a},sr=(e,t,n)=>{let r=N(e,n(t),n);e.splice(r+1,0,t)},P=()=>{let e,t;return{promise:new Promise((n,r)=>{e=n,t=r}),resolve:e,reject:t}},cr=(e,t)=>{let n=e.indexOf(t);n!==-1&&e.splice(n,1)},lr=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(t(e[n]))return e[n]},ur=(e,t)=>{for(let n=e.length-1;n>=0;n--)if(t(e[n]))return n;return-1},dr=async function*(e){Symbol.iterator in e?yield*e[Symbol.iterator]():yield*e[Symbol.asyncIterator]()},fr=e=>{if(!(Symbol.iterator in e)&&!(Symbol.asyncIterator in e))throw TypeError(`Argument must be an iterable or async iterable.`)},pr=e=>{throw Error(`Unexpected value: ${e}`)},mr=(e,t,n)=>{let r=e.getUint8(t),i=e.getUint8(t+1),a=e.getUint8(t+2);return n?r|i<<8|a<<16:r<<16|i<<8|a},hr=(e,t,n)=>mr(e,t,n)<<8>>8,gr=(e,t,n,r)=>{n>>>=0,n&=16777215,r?(e.setUint8(t,n&255),e.setUint8(t+1,n>>>8&255),e.setUint8(t+2,n>>>16&255)):(e.setUint8(t,n>>>16&255),e.setUint8(t+1,n>>>8&255),e.setUint8(t+2,n&255))},_r=(e,t,n,r)=>{n=br(n,-8388608,8388607),n<0&&(n=n+16777216&16777215),gr(e,t,n,r)},vr=(e,t,n,r)=>{r?(e.setUint32(t+0,n,!0),e.setInt32(t+4,Math.floor(n/2**32),!0)):(e.setInt32(t+0,Math.floor(n/2**32),!0),e.setUint32(t+4,n,!0))},yr=(e,t)=>({async next(){let n=await e.next();return n.done?{value:void 0,done:!0}:{value:t(n.value),done:!1}},return(){return e.return()},throw(t){return e.throw(t)},[Symbol.asyncIterator](){return this}}),br=(e,t,n)=>Math.max(t,Math.min(n,e)),xr=`und`,Sr=e=>{let t=Math.round(e);return Math.abs(e/t-1)<10*2**-52?t:e},Cr=(e,t)=>Math.round(e/t)*t,wr=(e,t)=>Math.round(e*t)/t,Tr=(e,t)=>Math.floor(e/t)*t,Er=(e,t)=>Math.floor(e*t)/t,Dr=e=>{let t=0;for(;e;)t++,e>>=1;return t},Or=/^[a-z]{3}$/,kr=e=>Or.test(e),Ar=1e6*(1+2**-52),jr=(e,t)=>{let n={...e,...t};if(e.headers||t.headers){let r=e.headers?Mr(e.headers):{},i=t.headers?Mr(t.headers):{},a={...r};Object.entries(i).forEach(([e,t])=>{let n=Object.keys(a).find(t=>t.toLowerCase()===e.toLowerCase());n&&delete a[n],a[e]=t}),n.headers=a}return n},Mr=e=>{if(e instanceof Headers){let t={};return e.forEach((e,n)=>{t[n]=e}),t}if(Array.isArray(e)){let t={};return e.forEach(([e,n])=>{t[e]=n}),t}return e},Nr=async(e,t,n,r,i)=>{let a=0;for(;;)try{return await e(t,n)}catch(e){if(i())throw e;a++;let n=r(a,e,t);if(n===null)throw e;if(console.error(`Retrying failed fetch. Error:`,e),!Number.isFinite(n)||n<0)throw TypeError(`Retry delay must be a non-negative finite number.`);if(n>0&&await mi(1e3*n),i())throw e}},Pr=(e,t)=>{let n=e<0?-1:1;e=Math.abs(e);let r=0,i=1,a=1,o=0,s=e;for(;;){let e=Math.floor(s),c=e*a+r,l=e*o+i;if(l>t)return{num:n*a,den:o};if(r=a,i=o,a=c,o=l,s=1/(s-e),!isFinite(s))break}return{num:n*a,den:o}},Fr=class{constructor(){this.currentPromise=Promise.resolve()}call(e){return this.currentPromise=this.currentPromise.then(e)}},Ir=null,Lr=()=>Ir===null?Ir=!!(typeof navigator<`u`&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent))):Ir,Rr=null,zr=()=>Rr===null?Rr=typeof navigator<`u`&&navigator.userAgent?.includes(`Firefox`):Rr,Br=null,Vr=()=>Br===null?Br=!!(typeof navigator<`u`&&(navigator.vendor?.includes(`Google Inc`)||/Chrome/.test(navigator.userAgent))):Br,Hr=null,Ur=()=>{if(Hr!==null)return Hr;if(typeof navigator>`u`)return null;let e=/\bChrome\/(\d+)/.exec(navigator.userAgent);return e?Hr=Number(e[1]):null},Wr=(e,t)=>e===-1?t:e,Gr=(e,t,n,r)=>e<=r&&n<=t,Kr=function*(e){for(let t in e){let n=e[t];n!==void 0&&(yield{key:t,value:n})}},qr=e=>{switch(e.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}},Jr=e=>{let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;e++)n[e]=t.charCodeAt(e);return n},Yr=e=>{let t=``;for(let n=0;n<e.length;n++)t+=String.fromCharCode(e[n]);return btoa(t)},Xr=(e,t)=>{if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0},Zr=()=>{Symbol.dispose??=Symbol(`Symbol.dispose`)},Qr=e=>typeof e==`number`&&!Number.isNaN(e),$r=(e,t)=>{if(t.includes(`://`))return t;if(e.includes(`://`)){let t=e.indexOf(`?`);t!==-1&&(e=e.slice(0,t))}let n;if(t.startsWith(`/`)){let r=e.indexOf(`://`);if(r===-1)n=t;else{let i=e.indexOf(`/`,r+3);n=i===-1?e+t:e.slice(0,i)+t}}else{let r=e.lastIndexOf(`/`);n=r===-1?t:e.slice(0,r+1)+t}let r=``,i=n.indexOf(`://`);if(i!==-1){let e=n.indexOf(`/`,i+3);e!==-1&&(r=n.slice(0,e),n=n.slice(e))}let a=n.split(`/`),o=[];for(let e of a)e===`..`?o.pop():e!==`.`&&o.push(e);return r+o.join(`/`)},ei=(e,t)=>{let n=0;for(let r=0;r<e.length;r++)t(e[r])&&n++;return n},ti=(e,t)=>{let n=-1,r=1/0;for(let i=0;i<e.length;i++){let a=t(e[i]);a<r&&(r=a,n=i)}return n},ni=(e,t)=>{let n=-1,r=-1/0;for(let i=0;i<e.length;i++){let a=t(e[i]);a>r&&(r=a,n=i)}return n},ri=e=>{D(Number.isInteger(e.num)),D(Number.isInteger(e.den)),D(e.den!==0);let t=Math.abs(e.num),n=Math.abs(e.den);for(;n!==0;){let e=t%n;t=n,n=e}let r=t||1;return{num:e.num/r,den:e.den/r}},ii=(e,t)=>{if(typeof e!=`object`||!e)throw TypeError(`${t} must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw TypeError(`${t}.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw TypeError(`${t}.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw TypeError(`${t}.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw TypeError(`${t}.height must be a non-negative integer.`)},oi=1,si=new Map,ci=new Map,li=()=>typeof window>`u`,ui=()=>{let e=new Map,t=new Map;self.onmessage=n=>{let r=n.data;switch(r.type){case`set-timeout`:{let t=setTimeout(()=>{e.delete(r.timerId),self.postMessage({type:`fire`,timerId:r.timerId})},r.delay);e.set(r.timerId,t)}break;case`set-interval`:{let e=setInterval(()=>{self.postMessage({type:`fire`,timerId:r.timerId})},r.delay);t.set(r.timerId,e)}break;case`clear-timeout`:{let t=e.get(r.timerId);t!==void 0&&(clearTimeout(t),e.delete(r.timerId))}break;case`clear-interval`:{let e=t.get(r.timerId);e!==void 0&&(clearInterval(e),t.delete(r.timerId))}break}}},di=()=>{if(ai)return ai;let e=`(${ui.toString()})();`,t=URL.createObjectURL(new Blob([e],{type:`text/javascript`}));return ai=new Worker(t),URL.revokeObjectURL(t),ai.onmessage=e=>{let t=e.data,n=si.get(t.timerId);if(n){si.delete(t.timerId),n();return}let r=ci.get(t.timerId);r&&r()},ai},fi=(e,t)=>{if(li())return{id:setInterval(e,t)};let n=oi++;return ci.set(n,()=>{e()}),di().postMessage({type:`set-interval`,timerId:n,delay:t}),{id:n}},pi=e=>{if(li()){clearInterval(e.id);return}D(typeof e.id==`number`),ci.delete(e.id),di().postMessage({type:`clear-interval`,timerId:e.id})},mi=e=>new Promise(t=>setTimeout(t,e)),hi=e=>Array.isArray(e)?e:[e],gi=class{constructor(){this._listeners=new Map}on(e,t,n){this._listeners.has(e)||this._listeners.set(e,new Set);let r={fn:t,once:n?.once??!1};return this._listeners.get(e).add(r),()=>{this._listeners.get(e)?.delete(r)}}_emit(...e){let[t,n]=e,r=this._listeners.get(t);if(r)for(let e of r){try{e.fn(n)}catch(e){console.error(e)}e.once&&r.delete(e)}}},_i=e=>Math.ceil(e/2)*2,vi=class{constructor(e){this._queue=[],this._errored=!1,this.parallelism=e}get errored(){return this._errored}get inFlightCount(){return this._queue.length}async run(e){for(this._errored&&await Promise.race(this._queue);this._queue.length>=this.parallelism;)await Promise.race(this._queue);let t=e();this._queue.push(t),t.then(()=>cr(this._queue,t)).catch(()=>this._errored=!0)}async flush(){await Promise.all(this._queue)}},yi=e=>typeof e==`object`&&!!e&&Object.getPrototypeOf(e)===Object.prototype&&Object.values(e).every(e=>typeof e==`string`)})),bi,xi,Si,Ci,wi,Ti,Ei=n((()=>{F(),bi=class{constructor(e,t){if(this.data=e,this.mimeType=t,!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(typeof t!=`string`)throw TypeError(`mimeType must be a string.`)}},xi=class{constructor(e,t,n,r){if(this.data=e,this.mimeType=t,this.name=n,this.description=r,!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(t!==void 0&&typeof t!=`string`)throw TypeError(`mimeType, when provided, must be a string.`);if(n!==void 0&&typeof n!=`string`)throw TypeError(`name, when provided, must be a string.`);if(r!==void 0&&typeof r!=`string`)throw TypeError(`description, when provided, must be a string.`)}},Si=e=>{if(!e||typeof e!=`object`)throw TypeError(`tags must be an object.`);if(e.title!==void 0&&typeof e.title!=`string`)throw TypeError(`tags.title, when provided, must be a string.`);if(e.description!==void 0&&typeof e.description!=`string`)throw TypeError(`tags.description, when provided, must be a string.`);if(e.artist!==void 0&&typeof e.artist!=`string`)throw TypeError(`tags.artist, when provided, must be a string.`);if(e.album!==void 0&&typeof e.album!=`string`)throw TypeError(`tags.album, when provided, must be a string.`);if(e.albumArtist!==void 0&&typeof e.albumArtist!=`string`)throw TypeError(`tags.albumArtist, when provided, must be a string.`);if(e.trackNumber!==void 0&&(!Number.isInteger(e.trackNumber)||e.trackNumber<=0))throw TypeError(`tags.trackNumber, when provided, must be a positive integer.`);if(e.tracksTotal!==void 0&&(!Number.isInteger(e.tracksTotal)||e.tracksTotal<=0))throw TypeError(`tags.tracksTotal, when provided, must be a positive integer.`);if(e.discNumber!==void 0&&(!Number.isInteger(e.discNumber)||e.discNumber<=0))throw TypeError(`tags.discNumber, when provided, must be a positive integer.`);if(e.discsTotal!==void 0&&(!Number.isInteger(e.discsTotal)||e.discsTotal<=0))throw TypeError(`tags.discsTotal, when provided, must be a positive integer.`);if(e.genre!==void 0&&typeof e.genre!=`string`)throw TypeError(`tags.genre, when provided, must be a string.`);if(e.date!==void 0&&(!(e.date instanceof Date)||Number.isNaN(e.date.getTime())))throw TypeError(`tags.date, when provided, must be a valid Date.`);if(e.lyrics!==void 0&&typeof e.lyrics!=`string`)throw TypeError(`tags.lyrics, when provided, must be a string.`);if(e.images!==void 0){if(!Array.isArray(e.images))throw TypeError(`tags.images, when provided, must be an array.`);for(let t of e.images){if(!t||typeof t!=`object`)throw TypeError(`Each image in tags.images must be an object.`);if(!(t.data instanceof Uint8Array))throw TypeError(`Each image.data must be a Uint8Array.`);if(typeof t.mimeType!=`string`)throw TypeError(`Each image.mimeType must be a string.`);if(![`coverFront`,`coverBack`,`unknown`].includes(t.kind))throw TypeError(`Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.`)}}if(e.comment!==void 0&&typeof e.comment!=`string`)throw TypeError(`tags.comment, when provided, must be a string.`);if(e.raw!==void 0){if(!e.raw||typeof e.raw!=`object`)throw TypeError(`tags.raw, when provided, must be an object.`);for(let t of Object.values(e.raw))if(t!==null&&typeof t!=`string`&&!(t instanceof Uint8Array)&&!(t instanceof bi)&&!(t instanceof xi)&&!yi(t))throw TypeError(`Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, Record<string, string>, or null.`)}},Ci=e=>e.title===void 0&&e.description===void 0&&e.artist===void 0&&e.album===void 0&&e.albumArtist===void 0&&e.trackNumber===void 0&&e.tracksTotal===void 0&&e.discNumber===void 0&&e.discsTotal===void 0&&e.genre===void 0&&e.date===void 0&&e.lyrics===void 0&&(!e.images||e.images.length===0)&&e.comment===void 0&&(e.raw===void 0||Object.keys(e.raw).length===0),wi={default:!0,primary:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1},Ti=e=>{if(!e||typeof e!=`object`)throw TypeError(`disposition must be an object.`);if(e.default!==void 0&&typeof e.default!=`boolean`)throw TypeError(`disposition.default must be a boolean.`);if(e.primary!==void 0&&typeof e.primary!=`boolean`)throw TypeError(`disposition.primary must be a boolean.`);if(e.forced!==void 0&&typeof e.forced!=`boolean`)throw TypeError(`disposition.forced must be a boolean.`);if(e.original!==void 0&&typeof e.original!=`boolean`)throw TypeError(`disposition.original must be a boolean.`);if(e.commentary!==void 0&&typeof e.commentary!=`boolean`)throw TypeError(`disposition.commentary must be a boolean.`);if(e.hearingImpaired!==void 0&&typeof e.hearingImpaired!=`boolean`)throw TypeError(`disposition.hearingImpaired must be a boolean.`);if(e.visuallyImpaired!==void 0&&typeof e.visuallyImpaired!=`boolean`)throw TypeError(`disposition.visuallyImpaired must be a boolean.`)}})),I,Di=n((()=>{I=class e{constructor(e){this.bytes=e,this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),t=this.bytes[e]??0,n=7-(this.pos&7),r=(t&1<<n)>>n;return this.pos++,r}readBits(e){if(e===1)return this.readBit();let t=0;for(let n=0;n<e;n++)t<<=1,t|=this.readBit();return t}writeBits(e,t){let n=this.pos+e;for(let e=this.pos;e<n;e++){let r=Math.floor(e/8),i=this.bytes[r],a=7-(e&7);i&=~(1<<a),i|=(t&1<<n-e-1)>>n-e-1<<a,this.bytes[r]=i}this.pos=n}readAlignedByte(){if(this.pos%8!=0)throw Error(`Bitstream is not byte-aligned.`);let e=this.pos/8,t=this.bytes[e]??0;return this.pos+=8,t}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let t=new e(this.bytes);return t.pos=this.pos,t}}})),Oi,ki,Ai,ji,Mi,Ni,Pi=n((()=>{Di(),Oi=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ki=[-1,1,2,3,4,5,6,8],Ai=e=>{if(!e||e.byteLength<2)throw TypeError(`AAC description must be at least 2 bytes long.`);let t=new I(e),n=t.readBits(5);n===31&&(n=32+t.readBits(6));let r=t.readBits(4),i=null;r===15?i=t.readBits(24):r<Oi.length&&(i=Oi[r]);let a=t.readBits(4),o=null;return a>=1&&a<=7&&(o=ki[a]),{objectType:n,frequencyIndex:r,sampleRate:i,channelConfiguration:a,numberOfChannels:o}},ji=e=>{let t=Oi.indexOf(e.sampleRate),n=null;t===-1&&(t=15,n=e.sampleRate);let r=ki.indexOf(e.numberOfChannels);if(r===-1)throw TypeError(`Unsupported number of channels: ${e.numberOfChannels}`);let i=13;e.objectType>=32&&(i+=6),t===15&&(i+=24);let a=Math.ceil(i/8),o=new Uint8Array(a),s=new I(o);return e.objectType<32?s.writeBits(5,e.objectType):(s.writeBits(5,31),s.writeBits(6,e.objectType-32)),s.writeBits(4,t),t===15&&s.writeBits(24,n),s.writeBits(4,r),o},Mi=e=>{let t=new Uint8Array(7),n=new I(t),{objectType:r,frequencyIndex:i,channelConfiguration:a}=e,o=r-1;return n.writeBits(12,4095),n.writeBits(1,0),n.writeBits(2,0),n.writeBits(1,1),n.writeBits(2,o),n.writeBits(4,i),n.writeBits(1,0),n.writeBits(3,a),n.writeBits(1,0),n.writeBits(1,0),n.writeBits(1,0),n.writeBits(1,0),n.skipBits(13),n.writeBits(11,2047),n.writeBits(2,0),{header:t,bitstream:n}},Ni=(e,t)=>{e.pos=30,e.writeBits(13,t)}})),L,Fi,Ii,Li,Ri,zi,Bi,Vi,Hi,Ui,Wi,Gi,Ki,qi,Ji,Yi,Xi,Zi,Qi,$i,ea,ta,na,ra,ia,aa,oa,sa,ca,la,ua,da,fa,pa,ma=n((()=>{Pi(),F(),L=[`avc`,`hevc`,`vp9`,`av1`,`vp8`],Fi=[`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`],Ii=[`aac`,`opus`,`mp3`,`vorbis`,`flac`,`ac3`,`eac3`],Li=[...Ii,...Fi],Ri=[`webvtt`],zi=[{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}],Bi=[{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}],Vi=[{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}],Hi=[{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}],Ui=`.01.01.01.01.00`,Wi=`.0.110.01.01.01.0`,Gi=(e,t,n,r)=>{if(e===`avc`){let e=Math.ceil(t/16)*Math.ceil(n/16),i=zi.find(t=>e<=t.maxMacroblocks&&r<=t.maxBitrate)??O(zi),a=i?i.level:0;return`avc1.${`64`.padStart(2,`0`)}00${a.toString(16).padStart(2,`0`)}`}else if(e===`hevc`){let e=t*n,i=Bi.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Bi);return`hev1.1.6.${i.tier}${i.level}.B0`}else if(e===`vp8`)return`vp8`;else if(e===`vp9`){let e=t*n;return`vp09.00.${(Vi.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Vi)).level.toString().padStart(2,`0`)}.08`}else if(e===`av1`){let e=t*n,i=Hi.find(t=>e<=t.maxPictureSize&&r<=t.maxBitrate)??O(Hi);return`av01.0.${i.level.toString().padStart(2,`0`)}${i.tier}.08`}throw TypeError(`Unhandled codec '${e}'.`)},Ki=e=>{let t=e.split(`.`);return[1,1,Number(t[1]),2,1,Number(t[2]),3,1,Number(t[3]),4,1,t[4]?Number(t[4]):1]},qi=e=>{let t=e.split(`.`),n=Number(t[1]),r=t[2],i=Number(r.slice(0,-1)),a=(n<<5)+i,o=r.slice(-1)===`H`?1:0,s=Number(t[3])===8?0:1,c=t[4]?Number(t[4]):0,l=t[5]?Number(t[5][0]):1,u=t[5]?Number(t[5][1]):1,d=t[5]?Number(t[5][2]):0;return[129,a,(o<<7)+(s<<6)+0+(c<<4)+(l<<3)+(u<<2)+d,0]},Ji=e=>{let{codec:t,codecDescription:n,colorSpace:r,avcCodecInfo:i,hevcCodecInfo:a,vp9CodecInfo:o,av1CodecInfo:s}=e;if(t===`avc`){if(D(e.avcType!==null),i){let t=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${e.avcType}.${rr(t)}`}if(!n||n.byteLength<4)throw TypeError(`AVC decoder description is not provided or is not at least 4 bytes long.`);return`avc${e.avcType}.${rr(n.subarray(1,4))}`}else if(t===`hevc`){let e,t,r,i,o,s;if(a)e=a.generalProfileSpace,t=a.generalProfileIdc,r=ar(a.generalProfileCompatibilityFlags),i=a.generalTierFlag,o=a.generalLevelIdc,s=[...a.generalConstraintIndicatorFlags];else{if(!n||n.byteLength<23)throw TypeError(`HEVC decoder description is not provided or is not at least 23 bytes long.`);let a=j(n),c=a.getUint8(1);e=c>>6&3,t=c&31,r=ar(a.getUint32(2)),i=c>>5&1,o=a.getUint8(12),s=[];for(let e=0;e<6;e++)s.push(a.getUint8(6+e))}let c=`hev1.`;for(c+=[``,`A`,`B`,`C`][e]+t,c+=`.`,c+=r.toString(16).toUpperCase(),c+=`.`,c+=i===0?`L`:`H`,c+=o;s.length>0&&s[s.length-1]===0;)s.pop();return s.length>0&&(c+=`.`,c+=s.map(e=>e.toString(16).toUpperCase()).join(`.`)),c}else if(t===`vp8`)return`vp8`;else if(t===`vp9`){if(!o){let t=e.width*e.height,n=O(Vi).level;for(let e of Vi)if(t<=e.maxPictureSize){n=e.level;break}return`vp09.00.${n.toString().padStart(2,`0`)}.08`}let t=o.profile.toString().padStart(2,`0`),n=o.level.toString().padStart(2,`0`),r=o.bitDepth.toString().padStart(2,`0`),i=o.chromaSubsampling.toString().padStart(2,`0`),a=o.colourPrimaries.toString().padStart(2,`0`),s=o.transferCharacteristics.toString().padStart(2,`0`),c=o.matrixCoefficients.toString().padStart(2,`0`),l=o.videoFullRangeFlag.toString().padStart(2,`0`),u=`vp09.${t}.${n}.${r}.${i}`;return u+=`.${a}.${s}.${c}.${l}`,u.endsWith(Ui)&&(u=u.slice(0,-15)),u}else if(t===`av1`){if(!s){let t=e.width*e.height,n=O(Vi).level;for(let e of Vi)if(t<=e.maxPictureSize){n=e.level;break}return`av01.0.${n.toString().padStart(2,`0`)}M.08`}let t=s.profile,n=s.level.toString().padStart(2,`0`),i=s.tier?`H`:`M`,a=s.bitDepth.toString().padStart(2,`0`),o=s.monochrome?`1`:`0`,c=100*s.chromaSubsamplingX+10*s.chromaSubsamplingY+1*(s.chromaSubsamplingX&&s.chromaSubsamplingY?s.chromaSamplePosition:0),l=r?.primaries?qn[r.primaries]:1,u=r?.transfer?Yn[r.transfer]:1,d=r?.matrix?Zn[r.matrix]:1,f=r?.fullRange?1:0,p=`av01.${t}.${n}${i}.${a}`;return p+=`.${o}.${c.toString().padStart(3,`0`)}`,p+=`.${l.toString().padStart(2,`0`)}`,p+=`.${u.toString().padStart(2,`0`)}`,p+=`.${d.toString().padStart(2,`0`)}`,p+=`.${f}`,p.endsWith(Wi)&&(p=p.slice(0,-17)),p}throw TypeError(`Unhandled codec '${t}'.`)},Yi=(e,t,n)=>{if(e===`aac`)return t>=2&&n<=24e3?`mp4a.40.29`:n<=24e3?`mp4a.40.5`:`mp4a.40.2`;if(e===`mp3`)return`mp3`;if(e===`opus`)return`opus`;if(e===`vorbis`)return`vorbis`;if(e===`flac`)return`flac`;if(e===`ac3`)return`ac-3`;if(e===`eac3`)return`ec-3`;if(Fi.includes(e))return e;throw TypeError(`Unhandled codec '${e}'.`)},Xi=e=>{let{codec:t,codecDescription:n,aacCodecInfo:r}=e;if(t===`aac`){if(!r)throw TypeError(`AAC codec info must be provided.`);if(r.isMpeg2)return`mp4a.67`;{let e;return e=r.objectType===null?Ai(n).objectType:r.objectType,`mp4a.40.${e}`}}else if(t===`mp3`)return`mp3`;else if(t===`opus`)return`opus`;else if(t===`vorbis`)return`vorbis`;else if(t===`flac`)return`flac`;else if(t===`ac3`)return`ac-3`;else if(t===`eac3`)return`ec-3`;else if(t&&Fi.includes(t))return t;throw TypeError(`Unhandled codec '${t}'.`)},Zi=e=>{},Qi=e=>{switch(e.codec){case`flac`:{let t=Jr(`ZkxhQ4AAACIQABAAAAYtACWtCsRC8AANRBhVFucAcYu5ASE2m1Dxv8tw`);return e.sampleRate>=1<<20||e.numberOfChannels>8?!1:(t[18]=e.sampleRate>>>12,t[19]=e.sampleRate>>>4,t[20]=(e.sampleRate&15)<<4|e.numberOfChannels-1<<1,t)}case`vorbis`:{let t=Jr(`Ah7/AgF2b3JiaXMAAAAAAoC7AAAAAAAAgLUBAAAAAAC4AQN2b3JiaXMNAAAATGF2ZjU4Ljc2LjEwMAgAAAAMAAAAbGFuZ3VhZ2U9dW5kGQAAAGhhbmRsZXJfbmFtZT1Tb3VuZEhhbmRsZXIWAAAAdmVuZG9yX2lkPVswXVswXVswXVswXSAAAABlbmNvZGVyPUxhdmM1OC4xMzQuMTAwIGxpYnZvcmJpcxAAAABtYWpvcl9icmFuZD1pc29tEQAAAG1pbm9yX3ZlcnNpb249NTEyIgAAAGNvbXBhdGlibGVfYnJhbmRzPWlzb21pc28yYXZjMW1wNDEmAAAAREVTQ1JJUFRJT049TWFkZSB3aXRoIFJlbW90aW9uIDQuMC4yNzgBBXZvcmJpcyVCQ1YBAEAAACRzGCpGpXMWhBAaQlAZ4xxCzmvsGUJMEYIcMkxbyyVzkCGkoEKIWyiB0JBVAABAAACHQXgUhIpBCCGEJT1YkoMnPQghhIg5eBSEaUEIIYQQQgghhBBCCCGERTlokoMnQQgdhOMwOAyD5Tj4HIRFOVgQgydB6CCED0K4moOsOQghhCQ1SFCDBjnoHITCLCiKgsQwuBaEBDUojILkMMjUgwtCiJqDSTX4GoRnQXgWhGlBCCGEJEFIkIMGQcgYhEZBWJKDBjm4FITLQagahCo5CB+EIDRkFQCQAACgoiiKoigKEBqyCgDIAAAQQFEUx3EcyZEcybEcCwgNWQUAAAEACAAAoEiKpEiO5EiSJFmSJVmSJVmS5omqLMuyLMuyLMsyEBqyCgBIAABQUQxFcRQHCA1ZBQBkAAAIoDiKpViKpWiK54iOCISGrAIAgAAABAAAEDRDUzxHlETPVFXXtm3btm3btm3btm3btm1blmUZCA1ZBQBAAAAQ0mlmqQaIMAMZBkJDVgEACAAAgBGKMMSA0JBVAABAAACAGEoOogmtOd+c46BZDppKsTkdnEi1eZKbirk555xzzsnmnDHOOeecopxZDJoJrTnnnMSgWQqaCa0555wnsXnQmiqtOeeccc7pYJwRxjnnnCateZCajbU555wFrWmOmkuxOeecSLl5UptLtTnnnHPOOeecc84555zqxekcnBPOOeecqL25lpvQxTnnnE/G6d6cEM4555xzzjnnnHPOOeecIDRkFQAABABAEIaNYdwpCNLnaCBGEWIaMulB9+gwCRqDnELq0ehopJQ6CCWVcVJKJwgNWQUAAAIAQAghhRRSSCGFFFJIIYUUYoghhhhyyimnoIJKKqmooowyyyyzzDLLLLPMOuyssw47DDHEEEMrrcRSU2011lhr7jnnmoO0VlprrbVSSimllFIKQkNWAQAgAAAEQgYZZJBRSCGFFGKIKaeccgoqqIDQkFUAACAAgAAAAABP8hzRER3RER3RER3RER3R8RzPESVREiVREi3TMjXTU0VVdWXXlnVZt31b2IVd933d933d+HVhWJZlWZZlWZZlWZZlWZZlWZYgNGQVAAACAAAghBBCSCGFFFJIKcYYc8w56CSUEAgNWQUAAAIACAAAAHAUR3EcyZEcSbIkS9IkzdIsT/M0TxM9URRF0zRV0RVdUTdtUTZl0zVdUzZdVVZtV5ZtW7Z125dl2/d93/d93/d93/d93/d9XQdCQ1YBABIAADqSIymSIimS4ziOJElAaMgqAEAGAEAAAIriKI7jOJIkSZIlaZJneZaomZrpmZ4qqkBoyCoAABAAQAAAAAAAAIqmeIqpeIqoeI7oiJJomZaoqZoryqbsuq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq7ruq4LhIasAgAkAAB0JEdyJEdSJEVSJEdygNCQVQCADACAAAAcwzEkRXIsy9I0T/M0TxM90RM901NFV3SB0JBVAAAgAIAAAAAAAAAMybAUy9EcTRIl1VItVVMt1VJF1VNVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVN0zRNEwgNWQkAkAEAkBBTLS3GmgmLJGLSaqugYwxS7KWxSCpntbfKMYUYtV4ah5RREHupJGOKQcwtpNApJq3WVEKFFKSYYyoVUg5SIDRkhQAQmgHgcBxAsixAsiwAAAAAAAAAkDQN0DwPsDQPAAAAAAAAACRNAyxPAzTPAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAA0DwP8DwR8EQRAAAAAAAAACzPAzTRAzxRBAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABA0jRA8zxA8zwAAAAAAAAAsDwP8EQR0DwRAAAAAAAAACzPAzxRBDzRAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAEOAAABBgIRQasiIAiBMAcEgSJAmSBM0DSJYFTYOmwTQBkmVB06BpME0AAAAAAAAAAAAAJE2DpkHTIIoASdOgadA0iCIAAAAAAAAAAAAAkqZB06BpEEWApGnQNGgaRBEAAAAAAAAAAAAAzzQhihBFmCbAM02IIkQRpgkAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAGHAAAAgwoQwUGrIiAIgTAHA4imUBAIDjOJYFAACO41gWAABYliWKAABgWZooAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAYcAAACDChDBQashIAiAIAcCiKZQHHsSzgOJYFJMmyAJYF0DyApgFEEQAIAAAocAAACLBBU2JxgEJDVgIAUQAABsWxLE0TRZKkaZoniiRJ0zxPFGma53meacLzPM80IYqiaJoQRVE0TZimaaoqME1VFQAAUOAAABBgg6bE4gCFhqwEAEICAByKYlma5nmeJ4qmqZokSdM8TxRF0TRNU1VJkqZ5niiKommapqqyLE3zPFEURdNUVVWFpnmeKIqiaaqq6sLzPE8URdE0VdV14XmeJ4qiaJqq6roQRVE0TdNUTVV1XSCKpmmaqqqqrgtETxRNU1Vd13WB54miaaqqq7ouEE3TVFVVdV1ZBpimaaqq68oyQFVV1XVdV5YBqqqqruu6sgxQVdd1XVmWZQCu67qyLMsCAAAOHAAAAoygk4wqi7DRhAsPQKEhKwKAKAAAwBimFFPKMCYhpBAaxiSEFEImJaXSUqogpFJSKRWEVEoqJaOUUmopVRBSKamUCkIqJZVSAADYgQMA2IGFUGjISgAgDwCAMEYpxhhzTiKkFGPOOScRUoox55yTSjHmnHPOSSkZc8w556SUzjnnnHNSSuacc845KaVzzjnnnJRSSuecc05KKSWEzkEnpZTSOeecEwAAVOAAABBgo8jmBCNBhYasBABSAQAMjmNZmuZ5omialiRpmud5niiapiZJmuZ5nieKqsnzPE8URdE0VZXneZ4oiqJpqirXFUXTNE1VVV2yLIqmaZqq6rowTdNUVdd1XZimaaqq67oubFtVVdV1ZRm2raqq6rqyDFzXdWXZloEsu67s2rIAAPAEBwCgAhtWRzgpGgssNGQlAJABAEAYg5BCCCFlEEIKIYSUUggJAAAYcAAACDChDBQashIASAUAAIyx1lprrbXWQGettdZaa62AzFprrbXWWmuttdZaa6211lJrrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmuttdZaa6211lprrbXWWmstpZRSSimllFJKKaWUUkoppZRSSgUA+lU4APg/2LA6wknRWGChISsBgHAAAMAYpRhzDEIppVQIMeacdFRai7FCiDHnJKTUWmzFc85BKCGV1mIsnnMOQikpxVZjUSmEUlJKLbZYi0qho5JSSq3VWIwxqaTWWoutxmKMSSm01FqLMRYjbE2ptdhqq7EYY2sqLbQYY4zFCF9kbC2m2moNxggjWywt1VprMMYY3VuLpbaaizE++NpSLDHWXAAAd4MDAESCjTOsJJ0VjgYXGrISAAgJACAQUooxxhhzzjnnpFKMOeaccw5CCKFUijHGnHMOQgghlIwx5pxzEEIIIYRSSsaccxBCCCGEkFLqnHMQQgghhBBKKZ1zDkIIIYQQQimlgxBCCCGEEEoopaQUQgghhBBCCKmklEIIIYRSQighlZRSCCGEEEIpJaSUUgohhFJCCKGElFJKKYUQQgillJJSSimlEkoJJYQSUikppRRKCCGUUkpKKaVUSgmhhBJKKSWllFJKIYQQSikFAAAcOAAABBhBJxlVFmGjCRcegEJDVgIAZAAAkKKUUiktRYIipRikGEtGFXNQWoqocgxSzalSziDmJJaIMYSUk1Qy5hRCDELqHHVMKQYtlRhCxhik2HJLoXMOAAAAQQCAgJAAAAMEBTMAwOAA4XMQdAIERxsAgCBEZohEw0JweFAJEBFTAUBigkIuAFRYXKRdXECXAS7o4q4DIQQhCEEsDqCABByccMMTb3jCDU7QKSp1IAAAAAAADADwAACQXAAREdHMYWRobHB0eHyAhIiMkAgAAAAAABcAfAAAJCVAREQ0cxgZGhscHR4fICEiIyQBAIAAAgAAAAAggAAEBAQAAAAAAAIAAAAEBA==`),n=j(t);return n.setUint8(15,e.numberOfChannels),n.setUint32(16,e.sampleRate,!0),t}default:return}},$i=48e3,ea=/^pcm-([usf])(\d+)(be)?$/,ta=e=>{if(D(Fi.includes(e)),e===`ulaw`)return{dataType:`ulaw`,sampleSize:1,littleEndian:!0,silentValue:255};if(e===`alaw`)return{dataType:`alaw`,sampleSize:1,littleEndian:!0,silentValue:213};let t=ea.exec(e);D(t);let n;n=t[1]===`u`?`unsigned`:t[1]===`s`?`signed`:`float`;let r=Number(t[2])/8,i=t[3]!==`be`;return{dataType:n,sampleSize:r,littleEndian:i,silentValue:e===`pcm-u8`?2**7:0}},na=e=>e.startsWith(`avc1`)||e.startsWith(`avc3`)?`avc`:e.startsWith(`hev1`)||e.startsWith(`hvc1`)?`hevc`:e===`vp8`?`vp8`:e.startsWith(`vp09`)?`vp9`:e.startsWith(`av01`)?`av1`:e===`mp3`||e===`mp4a.69`||e===`mp4a.6B`||e===`mp4a.6b`||e===`mp4a.40.34`?`mp3`:e.startsWith(`mp4a.40.`)||e===`mp4a.67`?`aac`:e===`opus`?`opus`:e===`vorbis`?`vorbis`:e===`flac`?`flac`:e===`ac-3`||e===`ac3`?`ac3`:e===`ec-3`||e===`eac3`?`eac3`:e===`ulaw`?`ulaw`:e===`alaw`?`alaw`:ea.test(e)?e:e===`webvtt`?`webvtt`:null,ra=e=>e===`avc`?{avc:{format:`avc`}}:e===`hevc`?{hevc:{format:`hevc`}}:{},ia=e=>e===`aac`?{aac:{format:`aac`}}:e===`opus`?{opus:{format:`opus`}}:{},aa=[`avc1`,`avc3`,`hev1`,`hvc1`,`vp8`,`vp09`,`av01`],oa=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,sa=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,ca=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,la=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,ua=e=>{if(!e)throw TypeError(`Video chunk metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Video chunk metadata must be an object.`);if(!e.decoderConfig)throw TypeError(`Video chunk metadata must include a decoder configuration.`);if(typeof e.decoderConfig!=`object`)throw TypeError(`Video chunk metadata decoder configuration must be an object.`);if(typeof e.decoderConfig.codec!=`string`)throw TypeError(`Video chunk metadata decoder configuration must specify a codec string.`);if(!aa.some(t=>e.decoderConfig.codec.startsWith(t)))throw 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(e.decoderConfig.codedWidth)||e.decoderConfig.codedWidth<=0)throw TypeError(`Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).`);if(!Number.isInteger(e.decoderConfig.codedHeight)||e.decoderConfig.codedHeight<=0)throw TypeError(`Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).`);if(e.decoderConfig.displayAspectWidth!==void 0&&(!Number.isInteger(e.decoderConfig.displayAspectWidth)||e.decoderConfig.displayAspectWidth<=0))throw TypeError(`Video chunk metadata decoder configuration displayAspectWidth, when defined, must be a positive integer.`);if(e.decoderConfig.displayAspectHeight!==void 0&&(!Number.isInteger(e.decoderConfig.displayAspectHeight)||e.decoderConfig.displayAspectHeight<=0))throw TypeError(`Video chunk metadata decoder configuration displayAspectHeight, when defined, must be a positive integer.`);if(e.decoderConfig.displayAspectWidth!==void 0!=(e.decoderConfig.displayAspectHeight!==void 0))throw TypeError(`Video chunk metadata decoder configuration must specify both displayAspectWidth and displayAspectHeight, or neither.`);if(e.decoderConfig.description!==void 0&&!er(e.decoderConfig.description))throw TypeError(`Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.`);if(e.decoderConfig.colorSpace!==void 0){let{colorSpace:t}=e.decoderConfig;if(typeof t!=`object`)throw TypeError(`Video chunk metadata decoder configuration colorSpace, when provided, must be an object.`);let n=Object.keys(qn);if(t.primaries!=null&&!n.includes(t.primaries))throw TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${n.join(`, `)}.`);let r=Object.keys(Yn);if(t.transfer!=null&&!r.includes(t.transfer))throw TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${r.join(`, `)}.`);let i=Object.keys(Zn);if(t.matrix!=null&&!i.includes(t.matrix))throw TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${i.join(`, `)}.`);if(t.fullRange!=null&&typeof t.fullRange!=`boolean`)throw TypeError(`Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.`)}if(e.decoderConfig.codec.startsWith(`avc1`)||e.decoderConfig.codec.startsWith(`avc3`)){if(!oa.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`hev1`)||e.decoderConfig.codec.startsWith(`hvc1`)){if(!sa.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`vp8`)){if(e.decoderConfig.codec!==`vp8`)throw TypeError(`Video chunk metadata decoder configuration codec string for VP8 must be "vp8".`)}else if(e.decoderConfig.codec.startsWith(`vp09`)){if(!ca.test(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`av01`)&&!la.test(e.decoderConfig.codec))throw 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/.`)},da=[`mp4a`,`mp3`,`opus`,`vorbis`,`flac`,`ulaw`,`alaw`,`pcm`,`ac-3`,`ec-3`],fa=e=>{if(!e)throw TypeError(`Audio chunk metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Audio chunk metadata must be an object.`);if(!e.decoderConfig)throw TypeError(`Audio chunk metadata must include a decoder configuration.`);if(typeof e.decoderConfig!=`object`)throw TypeError(`Audio chunk metadata decoder configuration must be an object.`);if(typeof e.decoderConfig.codec!=`string`)throw TypeError(`Audio chunk metadata decoder configuration must specify a codec string.`);if(!da.some(t=>e.decoderConfig.codec.startsWith(t)))throw 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(e.decoderConfig.sampleRate)||e.decoderConfig.sampleRate<=0)throw TypeError(`Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).`);if(!Number.isInteger(e.decoderConfig.numberOfChannels)||e.decoderConfig.numberOfChannels<=0)throw TypeError(`Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).`);if(e.decoderConfig.description!==void 0&&!er(e.decoderConfig.description))throw TypeError(`Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.`);if(e.decoderConfig.codec.startsWith(`mp4a`)&&e.decoderConfig.codec!==`mp4a.69`&&e.decoderConfig.codec!==`mp4a.6B`&&e.decoderConfig.codec!==`mp4a.6b`){if(![`mp4a.40.2`,`mp4a.40.02`,`mp4a.40.5`,`mp4a.40.05`,`mp4a.40.29`,`mp4a.67`].includes(e.decoderConfig.codec))throw 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(e.decoderConfig.codec.startsWith(`mp3`)||e.decoderConfig.codec.startsWith(`mp4a`)){if(e.decoderConfig.codec!==`mp3`&&e.decoderConfig.codec!==`mp4a.69`&&e.decoderConfig.codec!==`mp4a.6B`&&e.decoderConfig.codec!==`mp4a.6b`)throw TypeError(`Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".`)}else if(e.decoderConfig.codec.startsWith(`opus`)){if(e.decoderConfig.codec!==`opus`)throw TypeError(`Audio chunk metadata decoder configuration codec string for Opus must be "opus".`);if(e.decoderConfig.description&&e.decoderConfig.description.byteLength<18)throw 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(e.decoderConfig.codec.startsWith(`vorbis`)){if(e.decoderConfig.codec!==`vorbis`)throw TypeError(`Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".`);if(!e.decoderConfig.description)throw 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(e.decoderConfig.codec.startsWith(`flac`)){if(e.decoderConfig.codec!==`flac`)throw TypeError(`Audio chunk metadata decoder configuration codec string for FLAC must be "flac".`);if(!e.decoderConfig.description||e.decoderConfig.description.byteLength<42)throw 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(e.decoderConfig.codec.startsWith(`ac-3`)||e.decoderConfig.codec.startsWith(`ac3`)){if(e.decoderConfig.codec!==`ac-3`)throw TypeError(`Audio chunk metadata decoder configuration codec string for AC-3 must be "ac-3".`)}else if(e.decoderConfig.codec.startsWith(`ec-3`)||e.decoderConfig.codec.startsWith(`eac3`)){if(e.decoderConfig.codec!==`ec-3`)throw TypeError(`Audio chunk metadata decoder configuration codec string for EC-3 must be "ec-3".`)}else if((e.decoderConfig.codec.startsWith(`pcm`)||e.decoderConfig.codec.startsWith(`ulaw`)||e.decoderConfig.codec.startsWith(`alaw`))&&!Fi.includes(e.decoderConfig.codec))throw TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${Fi.join(`, `)}).`)},pa=e=>{if(!e)throw TypeError(`Subtitle metadata must be provided.`);if(typeof e!=`object`)throw TypeError(`Subtitle metadata must be an object.`);if(!e.config)throw TypeError(`Subtitle metadata must include a config object.`);if(typeof e.config!=`object`)throw TypeError(`Subtitle metadata config must be an object.`);if(typeof e.config.description!=`string`)throw TypeError(`Subtitle metadata config description must be a string.`)}})),ha,ga,_a,va,ya,ba,xa,Sa,Ca,wa,Ta,Ea,Da=n((()=>{ha=4,ga=[44100,48e3,32e3],_a=[-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],va=1483304551,ya=1231971951,ba=(e,t,n,r,i)=>t===0?0:t===1?Math.floor(144*n/(r<<e))+i:t===2?Math.floor(144*n/r)+i:(Math.floor(12*n/r)+i)*4,xa=(e,t,n,r)=>t===0?0:t===1?144*n/(r<<e):t===2?144*n/r:12*n/r*4,Sa=(e,t)=>e===3?t===3?21:36:t===3?13:21,Ca=(e,t)=>{let n=e>>>24,r=e>>>16&255,i=e>>>8&255,a=e&255;if(n!==255&&r!==255&&i!==255&&a!==255)return{header:null,bytesAdvanced:4};if(n!==255||(r&224)!=224)return{header:null,bytesAdvanced:1};let o=0,s=0;r&16?o=r&8?0:1:(o=1,s=1);let c=r>>3&3,l=r>>1&3,u=i>>4&15,d=(i>>2&3)%3,f=i>>1&1,p=a>>6&3,m=a>>4&3,h=a>>3&1,g=a>>2&1,_=a&3,v=_a[o*16*4+l*16+u];if(v===-1)return{header:null,bytesAdvanced:1};let y=v*1e3,b=ga[d]>>o+s,x=ba(o,l,y,b,f);if(t!==null&&t<x)return{header:null,bytesAdvanced:1};let S;return S=c===3?l===3?384:1152:l===3?384:l===2?1152:576,{header:{totalSize:x,mpegVersionId:c,lowSamplingFrequency:o,layer:l,bitrate:y,frequencyIndex:d,sampleRate:b,channel:p,modeExtension:m,copyright:h,original:g,emphasis:_,audioSamplesInFrame:S},bytesAdvanced:1}},wa=e=>{let t=127,n=0,r=e;for(;t^2147483647;)n=r&~t,n<<=1,n|=r&t,t=(t+1<<8)-1,r=n;return n},Ta=e=>{let t=2130706432,n=0;for(;t!==0;)n>>=1,n|=e&t,t>>=8;return n},(function(e){e[e.FrameCount=1]=`FrameCount`,e[e.FileSize=2]=`FileSize`,e[e.Toc=4]=`Toc`})(Ea||={})})),Oa,ka,Aa=n((()=>{Oa=[48e3,44100,32e3],ka=[24e3,22050,16e3]})),ja,Ma,Na,Pa,Fa,Ia,La,Ra,za,Ba,Va,Ha,Ua,Wa,Ga,Ka,qa,Ja,Ya,Xa,Za,Qa,$a,eo,to,no,ro,io,ao,oo,so,co,lo,uo,fo,po,mo,ho,go,_o,vo,yo,bo,xo,So,Co,wo,To,Eo,Do,Oo,ko,Ao,jo,Mo,No=n((()=>{ma(),F(),Aa(),Di(),(function(e){e[e.NON_IDR_SLICE=1]=`NON_IDR_SLICE`,e[e.SLICE_DPA=2]=`SLICE_DPA`,e[e.SLICE_DPB=3]=`SLICE_DPB`,e[e.SLICE_DPC=4]=`SLICE_DPC`,e[e.IDR=5]=`IDR`,e[e.SEI=6]=`SEI`,e[e.SPS=7]=`SPS`,e[e.PPS=8]=`PPS`,e[e.AUD=9]=`AUD`,e[e.SPS_EXT=13]=`SPS_EXT`})(ja||={}),(function(e){e[e.RASL_N=8]=`RASL_N`,e[e.RASL_R=9]=`RASL_R`,e[e.BLA_W_LP=16]=`BLA_W_LP`,e[e.RSV_IRAP_VCL23=23]=`RSV_IRAP_VCL23`,e[e.VPS_NUT=32]=`VPS_NUT`,e[e.SPS_NUT=33]=`SPS_NUT`,e[e.PPS_NUT=34]=`PPS_NUT`,e[e.AUD_NUT=35]=`AUD_NUT`,e[e.PREFIX_SEI_NUT=39]=`PREFIX_SEI_NUT`,e[e.SUFFIX_SEI_NUT=40]=`SUFFIX_SEI_NUT`})(Ma||={}),Na=function*(e){let t=0,n=-1;for(;t<e.length-2;){let r=e.indexOf(0,t);if(r===-1||r>=e.length-2)break;t=r;let i=0;if(t+3<e.length&&e[t+1]===0&&e[t+2]===0&&e[t+3]===1?i=4:e[t+1]===0&&e[t+2]===1&&(i=3),i===0){t++;continue}n!==-1&&t>n&&(yield{offset:n,length:t-n}),n=t+i,t=n}n!==-1&&n<e.length&&(yield{offset:n,length:e.length-n})},Pa=function*(e,t){let n=0,r=new DataView(e.buffer,e.byteOffset,e.byteLength);for(;n+t<=e.length;){let e;t===1?e=r.getUint8(n):t===2?e=r.getUint16(n,!1):t===3?e=mr(r,n,!1):(D(t===4),e=r.getUint32(n,!1)),n+=t,yield{offset:n,length:e},n+=e}},Fa=(e,t)=>t.description?Pa(e,(A(t.description)[4]&3)+1):Na(e),Ia=e=>e&31,La=e=>{let t=[],n=e.length;for(let r=0;r<n;r++)r+2<n&&e[r]===0&&e[r+1]===0&&e[r+2]===3?(t.push(0,0),r+=2):t.push(e[r]);return new Uint8Array(t)},Ra=new Uint8Array([0,0,0,1]),za=e=>{let t=e.reduce((e,t)=>e+Ra.byteLength+t.byteLength,0),n=new Uint8Array(t),r=0;for(let t of e)n.set(Ra,r),r+=Ra.byteLength,n.set(t,r),r+=t.byteLength;return n},Ba=(e,t)=>{let n=e.reduce((e,n)=>e+t+n.byteLength,0),r=new Uint8Array(n),i=0;for(let n of e){let e=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:e.setUint8(i,n.byteLength);break;case 2:e.setUint16(i,n.byteLength,!1);break;case 3:gr(e,i,n.byteLength,!1);break;case 4:e.setUint32(i,n.byteLength,!1);break}i+=t,r.set(n,i),i+=n.byteLength}return r},Va=(e,t)=>t.description?Ba(e,(A(t.description)[4]&3)+1):za(e),Ha=e=>{try{let t=[],n=[],r=[];for(let i of Na(e)){let a=e.subarray(i.offset,i.offset+i.length),o=Ia(a[0]);o===ja.SPS?t.push(a):o===ja.PPS?n.push(a):o===ja.SPS_EXT&&r.push(a)}if(t.length===0||n.length===0)return null;let i=t[0],a=Ka(i);D(a!==null);let o=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:n,chromaFormat:o?a.chromaFormatIdc:null,bitDepthLumaMinus8:o?a.bitDepthLumaMinus8:null,bitDepthChromaMinus8:o?a.bitDepthChromaMinus8:null,sequenceParameterSetExt:o?r:null}}catch(e){return console.error(`Error building AVC Decoder Configuration Record:`,e),null}},Ua=e=>{let t=[];t.push(e.configurationVersion),t.push(e.avcProfileIndication),t.push(e.profileCompatibility),t.push(e.avcLevelIndication),t.push(252|e.lengthSizeMinusOne&3),t.push(224|e.sequenceParameterSets.length&31);for(let n of e.sequenceParameterSets){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}t.push(e.pictureParameterSets.length);for(let n of e.pictureParameterSets){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}if(e.avcProfileIndication===100||e.avcProfileIndication===110||e.avcProfileIndication===122||e.avcProfileIndication===144){D(e.chromaFormat!==null),D(e.bitDepthLumaMinus8!==null),D(e.bitDepthChromaMinus8!==null),D(e.sequenceParameterSetExt!==null),t.push(252|e.chromaFormat&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.sequenceParameterSetExt.length);for(let n of e.sequenceParameterSetExt){let e=n.byteLength;t.push(e>>8),t.push(e&255);for(let r=0;r<e;r++)t.push(n[r])}}return new Uint8Array(t)},Wa=e=>{try{let t=j(e),n=0,r=t.getUint8(n++),i=t.getUint8(n++),a=t.getUint8(n++),o=t.getUint8(n++),s=t.getUint8(n++)&3,c=t.getUint8(n++)&31,l=[];for(let r=0;r<c;r++){let r=t.getUint16(n,!1);n+=2,l.push(e.subarray(n,n+r)),n+=r}let u=t.getUint8(n++),d=[];for(let r=0;r<u;r++){let r=t.getUint16(n,!1);n+=2,d.push(e.subarray(n,n+r)),n+=r}let f={configurationVersion:r,avcProfileIndication:i,profileCompatibility:a,avcLevelIndication:o,lengthSizeMinusOne:s,sequenceParameterSets:l,pictureParameterSets:d,chromaFormat:null,bitDepthLumaMinus8:null,bitDepthChromaMinus8:null,sequenceParameterSetExt:null};if((i===100||i===110||i===122||i===144)&&n+4<=e.length){let r=t.getUint8(n++)&3,i=t.getUint8(n++)&7,a=t.getUint8(n++)&7,o=t.getUint8(n++);f.chromaFormat=r,f.bitDepthLumaMinus8=i,f.bitDepthChromaMinus8=a;let s=[];for(let r=0;r<o;r++){let r=t.getUint16(n,!1);n+=2,s.push(e.subarray(n,n+r)),n+=r}f.sequenceParameterSetExt=s}return f}catch(e){return console.error(`Error deserializing AVC Decoder Configuration Record:`,e),null}},Ga={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Ka=e=>{try{let t=new I(La(e));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let n=t.readAlignedByte(),r=t.readAlignedByte(),i=t.readAlignedByte();k(t);let a=1,o=0,s=0,c=0;if((n===100||n===110||n===122||n===244||n===44||n===83||n===86||n===118||n===128)&&(a=k(t),a===3&&(c=t.readBits(1)),o=k(t),s=k(t),t.skipBits(1),t.readBits(1))){for(let e=0;e<(a===3?12:8);e++)if(t.readBits(1)){let n=e<6?16:64,r=8,i=8;for(let e=0;e<n;e++){if(i!==0){let e=Hn(t);i=(r+e+256)%256}r=i===0?r:i}}}k(t);let l=k(t);if(l===0)k(t);else if(l===1){t.skipBits(1),Hn(t),Hn(t);let e=k(t);for(let n=0;n<e;n++)Hn(t)}k(t),t.skipBits(1);let u=k(t),d=k(t),f=16*(u+1),p=16*(d+1),m=f,h=p,g=t.readBits(1);if(g||t.skipBits(1),t.skipBits(1),t.readBits(1)){let e=k(t),n=k(t),r=k(t),i=k(t),o,s;if((c===0?a:0)===0)o=1,s=2-g;else{let e=a===3?1:2,t=a===1?2:1;o=e,s=t*(2-g)}m-=o*(e+n),h-=s*(r+i)}let _=2,v=2,y=2,b=0,x={num:1,den:1},S=null,C=null;if(t.readBits(1)){if(t.readBits(1)){let e=t.readBits(8);if(e===255)x={num:t.readBits(16),den:t.readBits(16)};else{let t=Ga[e];t&&(x=t)}}t.readBits(1)&&t.skipBits(1),t.readBits(1)&&(t.skipBits(3),b=t.readBits(1),t.readBits(1)&&(_=t.readBits(8),v=t.readBits(8),y=t.readBits(8))),t.readBits(1)&&(k(t),k(t)),t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));let e=t.readBits(1);e&&qa(t);let n=t.readBits(1);n&&qa(t),(e||n)&&t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(1),k(t),k(t),k(t),k(t),S=k(t),C=k(t))}if(S===null){D(C===null);let e=r&16;if((n===44||n===86||n===100||n===110||n===122||n===244)&&e)S=0,C=0;else{let e=u+1,t=d+1,n=(2-g)*t,r=zi.find(e=>e.level>=i)??O(zi),a=Math.min(Math.floor(r.maxDpbMbs/(e*n)),16);S=a,C=a}}return D(C!==null),{profileIdc:n,constraintFlags:r,levelIdc:i,frameMbsOnlyFlag:g,chromaFormatIdc:a,bitDepthLumaMinus8:o,bitDepthChromaMinus8:s,codedWidth:f,codedHeight:p,displayWidth:m,displayHeight:h,pixelAspectRatio:x,colourPrimaries:_,matrixCoefficients:y,transferCharacteristics:v,fullRangeFlag:b,numReorderFrames:S,maxDecFrameBuffering:C}}catch(e){return console.error(`Error parsing AVC SPS:`,e),null}},qa=e=>{let t=k(e);e.skipBits(4),e.skipBits(4);for(let n=0;n<=t;n++)k(e),k(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)},Ja=(e,t)=>t.description?Ba(e,(A(t.description)[21]&3)+1):za(e),Ya=(e,t)=>t.description?Pa(e,(A(t.description)[21]&3)+1):Na(e),Xa=e=>e>>1&63,Za=e=>{try{let t=new I(La(e));t.skipBits(16),t.readBits(4);let n=t.readBits(3),r=t.readBits(1),{general_profile_space:i,general_tier_flag:a,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:c,general_level_idc:l}=$a(t,n);k(t);let u=k(t),d=0;u===3&&(d=t.readBits(1));let f=k(t),p=k(t),m=f,h=p;if(t.readBits(1)){let e=k(t),n=k(t),r=k(t),i=k(t),a=1,o=1,s=d===0?u:0;s===1?(a=2,o=2):s===2&&(a=2,o=1),m-=(e+n)*a,h-=(r+i)*o}let g=k(t),_=k(t);k(t);let v=t.readBits(1)?0:n,y=0;for(let e=v;e<=n;e++)k(t),y=k(t),k(t);if(k(t),k(t),k(t),k(t),k(t),k(t),t.readBits(1)&&t.readBits(1)&&eo(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),k(t),k(t),t.skipBits(1)),to(t,k(t)),t.readBits(1)){let e=k(t);for(let n=0;n<e;n++)k(t),t.skipBits(1)}t.skipBits(1),t.skipBits(1);let b=2,x=2,S=2,C=0,ee=0,w={num:1,den:1};if(t.readBits(1)){let e=ro(t,n);w=e.pixelAspectRatio,b=e.colourPrimaries,x=e.transferCharacteristics,S=e.matrixCoefficients,C=e.fullRangeFlag,ee=e.minSpatialSegmentationIdc}return{displayWidth:m,displayHeight:h,pixelAspectRatio:w,colourPrimaries:b,transferCharacteristics:x,matrixCoefficients:S,fullRangeFlag:C,maxDecFrameBuffering:y+1,spsMaxSubLayersMinus1:n,spsTemporalIdNestingFlag:r,generalProfileSpace:i,generalTierFlag:a,generalProfileIdc:o,generalProfileCompatibilityFlags:s,generalConstraintIndicatorFlags:c,generalLevelIdc:l,chromaFormatIdc:u,bitDepthLumaMinus8:g,bitDepthChromaMinus8:_,minSpatialSegmentationIdc:ee}}catch(e){return console.error(`Error parsing HEVC SPS:`,e),null}},Qa=e=>{try{let t=[],n=[],r=[],i=[];for(let a of Na(e)){let o=e.subarray(a.offset,a.offset+a.length),s=Xa(o[0]);s===Ma.VPS_NUT?t.push(o):s===Ma.SPS_NUT?n.push(o):s===Ma.PPS_NUT?r.push(o):(s===Ma.PREFIX_SEI_NUT||s===Ma.SUFFIX_SEI_NUT)&&i.push(o)}if(n.length===0||r.length===0)return null;let a=Za(n[0]);if(!a)return null;let o=0;if(r.length>0){let e=r[0],t=new I(La(e));t.skipBits(16),k(t),k(t),t.skipBits(1),t.skipBits(1),t.skipBits(3),t.skipBits(1),t.skipBits(1),k(t),k(t),Hn(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&k(t),Hn(t),Hn(t),t.skipBits(1),t.skipBits(1),t.skipBits(1),t.skipBits(1);let n=t.readBits(1),i=t.readBits(1);o=!n&&!i?0:n&&!i?2:!n&&i?3:0}let s=[...t.length?[{arrayCompleteness:1,nalUnitType:Ma.VPS_NUT,nalUnits:t}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:Ma.SPS_NUT,nalUnits:n}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:Ma.PPS_NUT,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Xa(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:a.generalProfileSpace,generalTierFlag:a.generalTierFlag,generalProfileIdc:a.generalProfileIdc,generalProfileCompatibilityFlags:a.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:a.generalConstraintIndicatorFlags,generalLevelIdc:a.generalLevelIdc,minSpatialSegmentationIdc:a.minSpatialSegmentationIdc,parallelismType:o,chromaFormatIdc:a.chromaFormatIdc,bitDepthLumaMinus8:a.bitDepthLumaMinus8,bitDepthChromaMinus8:a.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:a.spsMaxSubLayersMinus1+1,temporalIdNested:a.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:s}}catch(e){return console.error(`Error building HEVC Decoder Configuration Record:`,e),null}},$a=(e,t)=>{let n=e.readBits(2),r=e.readBits(1),i=e.readBits(5),a=0;for(let t=0;t<32;t++)a=a<<1|e.readBits(1);let o=new Uint8Array(6);for(let t=0;t<6;t++)o[t]=e.readBits(8);let s=e.readBits(8),c=[],l=[];for(let n=0;n<t;n++)c.push(e.readBits(1)),l.push(e.readBits(1));if(t>0)for(let n=t;n<8;n++)e.skipBits(2);for(let n=0;n<t;n++)c[n]&&e.skipBits(88),l[n]&&e.skipBits(8);return{general_profile_space:n,general_tier_flag:r,general_profile_idc:i,general_profile_compatibility_flags:a,general_constraint_indicator_flags:o,general_level_idc:s}},eo=e=>{for(let t=0;t<4;t++)for(let n=0;n<(t===3?2:6);n++)if(!e.readBits(1))k(e);else{let n=Math.min(64,1<<4+(t<<1));t>1&&Hn(e);for(let t=0;t<n;t++)Hn(e)}},to=(e,t)=>{let n=[];for(let r=0;r<t;r++)n[r]=no(e,r,t,n)},no=(e,t,n,r)=>{let i=0,a=0,o=0;if(t!==0&&(a=e.readBits(1)),a){o=t===n?t-(k(e)+1):t-1,e.readBits(1),k(e);let a=r[o]??0;for(let t=0;t<=a;t++)e.readBits(1)||e.readBits(1);i=r[o]}else{let t=k(e),n=k(e);for(let n=0;n<t;n++)k(e),e.readBits(1);for(let t=0;t<n;t++)k(e),e.readBits(1);i=t+n}return i},ro=(e,t)=>{let n=2,r=2,i=2,a=0,o=0,s={num:1,den:1};if(e.readBits(1)){let t=e.readBits(8);if(t===255)s={num:e.readBits(16),den:e.readBits(16)};else{let e=Ga[t];e&&(s=e)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),a=e.readBits(1),e.readBits(1)&&(n=e.readBits(8),r=e.readBits(8),i=e.readBits(8))),e.readBits(1)&&(k(e),k(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(k(e),k(e),k(e),k(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&k(e),e.readBits(1)&&io(e,!0,t)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),o=k(e),k(e),k(e),k(e),k(e)),{pixelAspectRatio:s,colourPrimaries:n,transferCharacteristics:r,matrixCoefficients:i,fullRangeFlag:a,minSpatialSegmentationIdc:o}},io=(e,t,n)=>{let r=!1,i=!1,a=!1;t&&(r=e.readBits(1)===1,i=e.readBits(1)===1,(r||i)&&(a=e.readBits(1)===1,a&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),a&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5)));for(let t=0;t<=n;t++){let t=e.readBits(1)===1,n=!0;t||(n=e.readBits(1)===1);let o=!1;n?k(e):o=e.readBits(1)===1;let s=1;o||(s=k(e)+1),r&&ao(e,s,a),i&&ao(e,s,a)}},ao=(e,t,n)=>{for(let r=0;r<t;r++)k(e),k(e),n&&(k(e),k(e)),e.readBits(1)},oo=e=>{let t=[];t.push(e.configurationVersion),t.push((e.generalProfileSpace&3)<<6|(e.generalTierFlag&1)<<5|e.generalProfileIdc&31),t.push(e.generalProfileCompatibilityFlags>>>24&255),t.push(e.generalProfileCompatibilityFlags>>>16&255),t.push(e.generalProfileCompatibilityFlags>>>8&255),t.push(e.generalProfileCompatibilityFlags&255),t.push(...e.generalConstraintIndicatorFlags),t.push(e.generalLevelIdc&255),t.push(240|e.minSpatialSegmentationIdc>>8&15),t.push(e.minSpatialSegmentationIdc&255),t.push(252|e.parallelismType&3),t.push(252|e.chromaFormatIdc&3),t.push(248|e.bitDepthLumaMinus8&7),t.push(248|e.bitDepthChromaMinus8&7),t.push(e.avgFrameRate>>8&255),t.push(e.avgFrameRate&255),t.push((e.constantFrameRate&3)<<6|(e.numTemporalLayers&7)<<3|(e.temporalIdNested&1)<<2|e.lengthSizeMinusOne&3),t.push(e.arrays.length&255);for(let n of e.arrays){t.push((n.arrayCompleteness&1)<<7|0|n.nalUnitType&63),t.push(n.nalUnits.length>>8&255),t.push(n.nalUnits.length&255);for(let e of n.nalUnits){t.push(e.length>>8&255),t.push(e.length&255);for(let n=0;n<e.length;n++)t.push(e[n])}}return new Uint8Array(t)},so=e=>{try{let t=j(e),n=0,r=t.getUint8(n++),i=t.getUint8(n++),a=i>>6&3,o=i>>5&1,s=i&31,c=t.getUint32(n,!1);n+=4;let l=e.subarray(n,n+6);n+=6;let u=t.getUint8(n++),d=(t.getUint8(n++)&15)<<8|t.getUint8(n++),f=t.getUint8(n++)&3,p=t.getUint8(n++)&3,m=t.getUint8(n++)&7,h=t.getUint8(n++)&7,g=t.getUint16(n,!1);n+=2;let _=t.getUint8(n++),v=_>>6&3,y=_>>3&7,b=_>>2&1,x=_&3,S=t.getUint8(n++),C=[];for(let r=0;r<S;r++){let r=t.getUint8(n++),i=r>>7&1,a=r&63,o=t.getUint16(n,!1);n+=2;let s=[];for(let r=0;r<o;r++){let r=t.getUint16(n,!1);n+=2,s.push(e.subarray(n,n+r)),n+=r}C.push({arrayCompleteness:i,nalUnitType:a,nalUnits:s})}return{configurationVersion:r,generalProfileSpace:a,generalTierFlag:o,generalProfileIdc:s,generalProfileCompatibilityFlags:c,generalConstraintIndicatorFlags:l,generalLevelIdc:u,minSpatialSegmentationIdc:d,parallelismType:f,chromaFormatIdc:p,bitDepthLumaMinus8:m,bitDepthChromaMinus8:h,avgFrameRate:g,constantFrameRate:v,numTemporalLayers:y,temporalIdNested:b,lengthSizeMinusOne:x,arrays:C}}catch(e){return console.error(`Error deserializing HEVC Decoder Configuration Record:`,e),null}},(function(e){e[e.audAllowed=0]=`audAllowed`,e[e.beforeFirstVcl=1]=`beforeFirstVcl`,e[e.afterFirstVcl=2]=`afterFirstVcl`,e[e.eoBitstreamAllowed=3]=`eoBitstreamAllowed`,e[e.noMoreDataAllowed=4]=`noMoreDataAllowed`})(co||={}),lo=(e,t)=>{let n=new Set,r=co.audAllowed;for(let i of Ya(e,t)){if(r===co.noMoreDataAllowed){n.add(i.offset);continue}let t=Xa(e[i.offset]);if(r===co.eoBitstreamAllowed&&t!==37){n.add(i.offset);continue}let a=!1;t===35?r>co.audAllowed?a=!0:r=co.beforeFirstVcl:t<=31?r>co.afterFirstVcl?a=!0:r=co.afterFirstVcl:t===36?r===co.afterFirstVcl?r=co.eoBitstreamAllowed:a=!0:t===37?r<co.afterFirstVcl?a=!0:r=co.noMoreDataAllowed:t===32||t===33||t===34||t===39||t>=41&&t<=44||t>=48&&t<=55?r>co.beforeFirstVcl?a=!0:r=co.beforeFirstVcl:(t===38||t===40||t>=45&&t<=47||t>=56&&t<=63)&&r<co.afterFirstVcl&&(a=!0),a&&n.add(i.offset)}if(n.size===0)return null;let i=[];for(let r of Ya(e,t))n.has(r.offset)||i.push(e.subarray(r.offset,r.offset+r.length));return Ja(i,t)},uo=e=>{let t=new I(e);if(t.readBits(2)!==2)return null;let n=t.readBits(1),r=(t.readBits(1)<<1)+n;if(r===3&&t.skipBits(1),t.readBits(1)===1||t.readBits(1)!==0||(t.skipBits(2),t.readBits(24)!==4817730))return null;let i=8;r>=2&&(i=t.readBits(1)?12:10);let a=t.readBits(3),o=0,s=0;if(a!==7)if(s=t.readBits(1),r===1||r===3){let e=t.readBits(1),n=t.readBits(1);o=!e&&!n?3:e&&!n?2:1,t.skipBits(1)}else o=1;else o=3,s=1;let c=t.readBits(16),l=t.readBits(16),u=(c+1)*(l+1),d=O(Vi).level;for(let e of Vi)if(u<=e.maxPictureSize){d=e.level;break}return{profile:r,level:d,bitDepth:i,chromaSubsampling:o,videoFullRangeFlag:s,colourPrimaries:a===2?1:a===1?6:2,transferCharacteristics:a===2?1:a===1?6:2,matrixCoefficients:a===7?0:a===2?1:a===1?6:2}},fo=function*(e){let t=new I(e),n=()=>{let e=0;for(let n=0;n<8;n++){let r=t.readAlignedByte();if(e|=(r&127)<<n*7,!(r&128))break;if(n===7&&r&128)return null}return e>=2**32-1?null:e};for(;t.getBitsLeft()>=8;){t.skipBits(1);let r=t.readBits(4),i=t.readBits(1),a=t.readBits(1);t.skipBits(1),i&&t.skipBits(8);let o;if(a){let e=n();if(e===null)return;o=e}else o=Math.floor(t.getBitsLeft()/8);D(t.pos%8==0),yield{type:r,data:e.subarray(t.pos/8,t.pos/8+o)},t.skipBits(o*8)}},po=e=>{for(let{type:t,data:n}of fo(e)){if(t!==1)continue;let e=new I(n),r=e.readBits(3);e.readBits(1);let i=e.readBits(1),a=0,o=0,s=0;if(i)a=e.readBits(5);else{if(e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.readBits(1)))return null;let t=e.readBits(1);t&&(s=e.readBits(5),e.skipBits(32),e.skipBits(5),e.skipBits(5));let n=e.readBits(5);for(let r=0;r<=n;r++){e.skipBits(12);let n=e.readBits(5);if(r===0&&(a=n),n>7){let t=e.readBits(1);r===0&&(o=t)}if(t&&e.readBits(1)){let t=s+1;e.skipBits(t),e.skipBits(t),e.skipBits(1)}e.readBits(1)&&e.skipBits(4)}}let c=e.readBits(4),l=e.readBits(4),u=c+1;e.skipBits(u);let d=l+1;e.skipBits(d);let f=0;if(f=i?0:e.readBits(1),f&&(e.skipBits(4),e.skipBits(3)),e.skipBits(1),e.skipBits(1),e.skipBits(1),!i){e.skipBits(1),e.skipBits(1),e.skipBits(1),e.skipBits(1);let t=e.readBits(1);t&&(e.skipBits(1),e.skipBits(1));let n=e.readBits(1),r=0;r=n?2:e.readBits(1),r>0&&(e.readBits(1)||e.skipBits(1)),t&&e.skipBits(3)}e.skipBits(1),e.skipBits(1),e.skipBits(1);let p=e.readBits(1),m=8;r===2&&p?m=e.readBits(1)?12:10:r<=2&&(m=p?10:8);let h=0;r!==1&&(h=e.readBits(1));let g=1,_=1,v=0;return h||(r===0?(g=1,_=1):r===1?(g=0,_=0):m===12&&(g=e.readBits(1),g&&(_=e.readBits(1))),g&&_&&(v=e.readBits(2))),{profile:r,level:a,tier:o,bitDepth:m,monochrome:h,chromaSubsamplingX:g,chromaSubsamplingY:_,chromaSamplePosition:v}}return null},mo=e=>{let t=j(e),n=t.getUint8(9),r=t.getUint16(10,!0),i=t.getUint32(12,!0),a=t.getInt16(16,!0),o=t.getUint8(18),s=null;return o&&(s=e.subarray(19,21+n)),{outputChannelCount:n,preSkip:r,inputSampleRate:i,outputGain:a,channelMappingFamily:o,channelMappingTable:s}},ho=[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],go=e=>({durationInSamples:ho[e[0]>>3]}),_o=e=>{if(e.length<7)throw Error(`Setup header is too short.`);if(e[0]!==5)throw Error(`Wrong packet type in Setup header.`);if(String.fromCharCode(...e.slice(1,7))!==`vorbis`)throw Error(`Invalid packet signature in Setup header.`);let t=e.length,n=new Uint8Array(t);for(let r=0;r<t;r++)n[r]=e[t-1-r];let r=new I(n),i=0;for(;r.getBitsLeft()>97;)if(r.readBits(1)===1){i=r.pos;break}if(i===0)throw Error(`Invalid Setup header: framing bit not found.`);let a=0,o=!1,s=0;for(;r.getBitsLeft()>=97;){let e=r.pos,t=r.readBits(8),n=r.readBits(16),i=r.readBits(16);if(t>63||n!==0||i!==0){r.pos=e;break}if(r.skipBits(1),a++,a>64)break;r.clone().readBits(6)+1===a&&(o=!0,s=a)}if(!o)throw Error(`Invalid Setup header: mode header not found.`);if(s>63)throw Error(`Unsupported mode count: ${s}.`);let c=s;r.pos=0,r.skipBits(i);let l=Array(c).fill(0);for(let e=c-1;e>=0;e--)r.skipBits(40),l[e]=r.readBits(1);return{modeBlockflags:l}},vo=(e,t,n)=>{switch(e){case`avc`:for(let e of Fa(n,t)){let t=n[e.offset],r=Ia(t);if(r>=ja.NON_IDR_SLICE&&r<=ja.SLICE_DPC)return`delta`;if(r===ja.IDR)return`key`;if(r===ja.SEI&&(!Vr()||Ur()>=144)){let t=La(n.subarray(e.offset,e.offset+e.length)),r=1;do{let e=0;for(;;){let n=t[r++];if(n===void 0||(e+=n,n<255))break}let n=0;for(;;){let e=t[r++];if(e===void 0||(n+=e,e<255))break}if(e===6){let e=new I(t);e.pos=8*r;let n=k(e),i=e.readBits(1);if(n===0&&i===1)return`key`}r+=n}while(r<t.length-1)}}return`delta`;case`hevc`:for(let e of Ya(n,t)){let t=Xa(n[e.offset]);if(t<Ma.BLA_W_LP)return`delta`;if(t<=Ma.RSV_IRAP_VCL23)return`key`}return`delta`;case`vp8`:return n[0]&1?`delta`:`key`;case`vp9`:{let e=new I(n);if(e.readBits(2)!==2)return null;let t=e.readBits(1);return(e.readBits(1)<<1)+t===3&&e.skipBits(1),e.readBits(1)?null:e.readBits(1)===0?`key`:`delta`}case`av1`:{let e=!1;for(let{type:t,data:r}of fo(n))if(t===1){let t=new I(r);t.skipBits(4),e=!!t.readBits(1)}else if(t===3||t===6||t===7){if(e)return`key`;let t=new I(r);return t.readBits(1)?null:t.readBits(2)===0?`key`:`delta`}return null}default:pr(e),D(!1)}},(function(e){e[e.STREAMINFO=0]=`STREAMINFO`,e[e.VORBIS_COMMENT=4]=`VORBIS_COMMENT`,e[e.PICTURE=6]=`PICTURE`})(yo||={}),bo=(e,t)=>{let n=j(e),r=0,i=n.getUint32(r,!0);r+=4;let a=Wn.decode(e.subarray(r,r+i));r+=i,i>0&&(t.raw??={},t.raw.vendor??=a);let o=n.getUint32(r,!0);r+=4;for(let i=0;i<o;i++){let i=n.getUint32(r,!0);r+=4;let a=Wn.decode(e.subarray(r,r+i));r+=i;let o=a.indexOf(`=`);if(o===-1)continue;let s=a.slice(0,o).toUpperCase(),c=a.slice(o+1);switch(t.raw??={},t.raw[s]??=c,s){case`TITLE`:t.title??=c;break;case`DESCRIPTION`:t.description??=c;break;case`ARTIST`:t.artist??=c;break;case`ALBUM`:t.album??=c;break;case`ALBUMARTIST`:t.albumArtist??=c;break;case`COMMENT`:t.comment??=c;break;case`LYRICS`:t.lyrics??=c;break;case`TRACKNUMBER`:{let e=c.split(`/`),n=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(n)&&n>0&&(t.trackNumber??=n),r&&Number.isInteger(r)&&r>0&&(t.tracksTotal??=r)}break;case`TRACKTOTAL`:{let e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(t.tracksTotal??=e)}break;case`DISCNUMBER`:{let e=c.split(`/`),n=Number.parseInt(e[0],10),r=e[1]&&Number.parseInt(e[1],10);Number.isInteger(n)&&n>0&&(t.discNumber??=n),r&&Number.isInteger(r)&&r>0&&(t.discsTotal??=r)}break;case`DISCTOTAL`:{let e=Number.parseInt(c,10);Number.isInteger(e)&&e>0&&(t.discsTotal??=e)}break;case`DATE`:{let e=new Date(c);Number.isNaN(e.getTime())||(t.date??=e)}break;case`GENRE`:t.genre??=c;break;case`METADATA_BLOCK_PICTURE`:{let e=Jr(c),n=j(e),r=n.getUint32(0,!1),i=n.getUint32(4,!1),a=String.fromCharCode(...e.subarray(8,8+i)),o=n.getUint32(8+i,!1),s=Wn.decode(e.subarray(12+i,12+i+o)),l=n.getUint32(i+o+28),u=e.subarray(i+o+32,i+o+32+l);t.images??=[],t.images.push({data:u,mimeType:a,kind:r===3?`coverFront`:r===4?`coverBack`:`unknown`,name:void 0,description:s||void 0})}break}}},xo=(e,t,n)=>{let r=[e],i=M.encode(`Mediabunny`),a=new Uint8Array(4+i.length),o=new DataView(a.buffer);o.setUint32(0,i.length,!0),a.set(i,4),r.push(a);let s=new Set,c=(e,t)=>{let n=`${e}=${t}`,i=M.encode(n);a=new Uint8Array(4+i.length),o=new DataView(a.buffer),o.setUint32(0,i.length,!0),a.set(i,4),r.push(a),s.add(e)};for(let{key:e,value:r}of Kr(t))switch(e){case`title`:c(`TITLE`,r);break;case`description`:c(`DESCRIPTION`,r);break;case`artist`:c(`ARTIST`,r);break;case`album`:c(`ALBUM`,r);break;case`albumArtist`:c(`ALBUMARTIST`,r);break;case`genre`:c(`GENRE`,r);break;case`date`:{let e=t.raw?.DATE??t.raw?.date;e&&typeof e==`string`?c(`DATE`,e):c(`DATE`,r.toISOString().slice(0,10))}break;case`comment`:c(`COMMENT`,r);break;case`lyrics`:c(`LYRICS`,r);break;case`trackNumber`:c(`TRACKNUMBER`,r.toString());break;case`tracksTotal`:c(`TRACKTOTAL`,r.toString());break;case`discNumber`:c(`DISCNUMBER`,r.toString());break;case`discsTotal`:c(`DISCTOTAL`,r.toString());break;case`images`:if(!n)break;for(let e of r){let t=e.kind===`coverFront`?3:e.kind===`coverBack`?4:0,n=new Uint8Array(e.mimeType.length);for(let t=0;t<e.mimeType.length;t++)n[t]=e.mimeType.charCodeAt(t);let r=M.encode(e.description??``),i=new Uint8Array(8+n.length+4+r.length+16+4+e.data.length),a=j(i);a.setUint32(0,t,!1),a.setUint32(4,n.length,!1),i.set(n,8),a.setUint32(8+n.length,r.length,!1),i.set(r,12+n.length),a.setUint32(28+n.length+r.length,e.data.length,!1),i.set(e.data,32+n.length+r.length),c(`METADATA_BLOCK_PICTURE`,Yr(i))}break;case`raw`:break;default:pr(e)}if(t.raw)for(let e in t.raw){let n=t.raw[e]??t.raw[e.toLowerCase()];e===`vendor`||n==null||s.has(e)||typeof n==`string`&&c(e,n)}let l=new Uint8Array(4);j(l).setUint32(0,s.size,!0),r.splice(2,0,l);let u=r.reduce((e,t)=>e+t.length,0),d=new Uint8Array(u),f=0;for(let e of r)d.set(e,f),f+=e.length;return d},So=[2,1,2,3,3,4,4,5],Co=e=>{if(e.length<7||e[0]!==11||e[1]!==119)return null;let t=new I(e);t.skipBits(16),t.skipBits(16);let n=t.readBits(2);if(n===3)return null;let r=t.readBits(6),i=t.readBits(5);if(i>8)return null;let a=t.readBits(3),o=t.readBits(3);return o&1&&o!==1&&t.skipBits(2),o&4&&t.skipBits(2),o===2&&t.skipBits(2),{fscod:n,bsid:i,bsmod:a,acmod:o,lfeon:t.readBits(1),bitRateCode:Math.floor(r/2)}},wo=[128,138,192,128,140,192,160,174,240,160,176,240,192,208,288,192,210,288,224,242,336,224,244,336,256,278,384,256,280,384,320,348,480,320,350,480,384,416,288*2,384,418,288*2,448,486,336*2,448,488,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],To=1536,Eo=new Uint8Array([5,4,65,67,45,51]),Do=new Uint8Array([5,4,69,65,67,51]),Oo=[1,2,3,6],ko=e=>{if(e.length<6||e[0]!==11||e[1]!==119)return null;let t=new I(e);t.skipBits(16);let n=t.readBits(2);if(t.skipBits(3),n!==0&&n!==2)return null;let r=t.readBits(11),i=t.readBits(2),a=0,o;i===3?(a=t.readBits(2),o=3):o=t.readBits(2);let s=t.readBits(3),c=t.readBits(1),l=t.readBits(5);if(l<11||l>16)return null;let u=Oo[o],d;return d=i<3?Oa[i]/1e3:ka[a]/1e3,{dataRate:Math.round((r+1)*d/(u*16)),substreams:[{fscod:i,fscod2:a,bsid:l,bsmod:0,acmod:s,lfeon:c,numDepSub:0,chanLoc:0}]}},Ao=e=>{if(e.length<2)return null;let t=new I(e),n=t.readBits(13),r=t.readBits(3),i=[];for(let n=0;n<=r&&!(Math.ceil(t.pos/8)+3>e.length);n++){let e=t.readBits(2),n=t.readBits(5);t.skipBits(1),t.skipBits(1);let r=t.readBits(3),a=t.readBits(3),o=t.readBits(1);t.skipBits(3);let s=t.readBits(4),c=0;s>0?c=t.readBits(9):t.skipBits(1),i.push({fscod:e,fscod2:null,bsid:n,bsmod:r,acmod:a,lfeon:o,numDepSub:s,chanLoc:c})}return i.length===0?null:{dataRate:n,substreams:i}},jo=e=>{let t=e.substreams[0];return D(t),t.fscod<3?Oa[t.fscod]:t.fscod2!==null&&t.fscod2<3?ka[t.fscod2]:null},Mo=e=>{let t=e.substreams[0];D(t);let n=So[t.acmod]+t.lfeon;if(t.numDepSub>0){let e=[2,2,1,1,2,2,2,1,1];for(let r=0;r<9;r++)t.chanLoc&1<<8-r&&(n+=e[r])}return n}})),Po,Fo=n((()=>{Po=class{constructor(e){this.input=e}dispose(){}}})),Io,R,Lo=n((()=>{F(),Io=new Uint8Array,R=class e{constructor(e,t,n,r,i=-1,a,o){if(this.data=e,this.type=t,this.timestamp=n,this.duration=r,this.sequenceNumber=i,e===Io&&a===void 0)throw Error(`Internal error: byteLength must be explicitly provided when constructing metadata-only packets.`);if(a===void 0&&(a=e.byteLength),!(e instanceof Uint8Array))throw TypeError(`data must be a Uint8Array.`);if(t!==`key`&&t!==`delta`)throw TypeError(`type must be either "key" or "delta".`);if(!Number.isFinite(n))throw TypeError(`timestamp must be a number.`);if(!Number.isFinite(r)||r<0)throw TypeError(`duration must be a non-negative number.`);if(!Number.isFinite(i))throw TypeError(`sequenceNumber must be a number.`);if(!Number.isInteger(a)||a<0)throw TypeError(`byteLength must be a non-negative integer.`);if(o!==void 0&&(typeof o!=`object`||!o))throw TypeError(`sideData, when provided, must be an object.`);if(o?.alpha!==void 0&&!(o.alpha instanceof Uint8Array))throw TypeError(`sideData.alpha, when provided, must be a Uint8Array.`);if(o?.alphaByteLength!==void 0&&(!Number.isInteger(o.alphaByteLength)||o.alphaByteLength<0))throw TypeError(`sideData.alphaByteLength, when provided, must be a non-negative integer.`);this.byteLength=a,this.sideData=o??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===Io}get microsecondTimestamp(){return Math.trunc(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to a video chunk.`);if(typeof EncodedVideoChunk>`u`)throw Error(`Your browser does not support EncodedVideoChunk.`);return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(e=this.type){if(!this.sideData.alpha)throw TypeError(`This packet does not contain alpha side data.`);if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to a video chunk.`);if(typeof EncodedVideoChunk>`u`)throw Error(`Your browser does not support EncodedVideoChunk.`);return new EncodedVideoChunk({data:this.sideData.alpha,type:e,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be converted to an audio chunk.`);if(typeof EncodedAudioChunk>`u`)throw 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,n){if(!(t instanceof EncodedVideoChunk||t instanceof EncodedAudioChunk))throw TypeError(`chunk must be an EncodedVideoChunk or EncodedAudioChunk.`);let r=new Uint8Array(t.byteLength);return t.copyTo(r),new e(r,t.type,t.timestamp/1e6,(t.duration??0)/1e6,void 0,void 0,n)}clone(t){if(t!==void 0&&(typeof t!=`object`||!t))throw TypeError(`options, when provided, must be an object.`);if(t?.data!==void 0&&!(t.data instanceof Uint8Array))throw TypeError(`options.data, when provided, must be a Uint8Array.`);if(t?.type!==void 0&&t.type!==`key`&&t.type!==`delta`)throw TypeError(`options.type, when provided, must be either "key" or "delta".`);if(t?.timestamp!==void 0&&!Number.isFinite(t.timestamp))throw TypeError(`options.timestamp, when provided, must be a number.`);if(t?.duration!==void 0&&!Number.isFinite(t.duration))throw TypeError(`options.duration, when provided, must be a number.`);if(t?.sequenceNumber!==void 0&&!Number.isFinite(t.sequenceNumber))throw TypeError(`options.sequenceNumber, when provided, must be a number.`);if(t?.sideData!==void 0&&(typeof t.sideData!=`object`||t.sideData===null))throw TypeError(`options.sideData, when provided, must be an object.`);return new e(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)}}})),Ro,zo,Bo,Vo=n((()=>{F(),Ro=e=>{let t=(e.hasVideo?`video/`:e.hasAudio?`audio/`:`application/`)+(e.isQuickTime?`quicktime`:`mp4`);if(e.codecStrings.length>0){let n=[...new Set(e.codecStrings)];t+=`; codecs="${n.join(`, `)}"`}return t},zo=e=>{let t=j(e),n=0,r=t.getUint8(n);n+=1,n+=3;let i=rr(e.subarray(n,n+16));n+=16;let a=null;if(r>0){let r=t.getUint32(n);if(n+=4,r>0){a=[];for(let t=0;t<r;t++)a.push(rr(e.subarray(n,n+16))),n+=16}}let o=t.getUint32(n);return n+=4,{systemId:i,keyIds:a,data:e.slice(n,n+o)}},Bo=(e,t)=>e.systemId===t.systemId&&Xr(e.data,t.data)})),Ho,Uo,Wo,Go,Ko,qo,Jo,Yo,Xo=n((()=>{Ei(),F(),Bp(),Ho=8,Uo=16,Wo=e=>{let t=W(e),n=G(e,4),r=8;t===1&&(t=Pp(e),r=16);let i=t-r;return i<0?null:{name:n,totalSize:t,headerSize:r,contentSize:i}},Go=e=>jp(e)/65536,Ko=e=>jp(e)/1073741824,qo=e=>{let t=0;for(let n=0;n<4;n++){t<<=7;let n=U(e);if(t|=n&127,!(n&128))break}return t},Jo=e=>{let t=Ep(e);return e.skip(2),t=Math.min(t,e.remainingLength),Wn.decode(H(e,t))},Yo=e=>{let t=Wo(e);if(!t||t.name!==`data`||e.remainingLength<8)return null;let n=W(e);e.skip(4);let r=H(e,t.contentSize-8);switch(n){case 1:return Wn.decode(r);case 2:return new TextDecoder(`utf-16be`).decode(r);case 13:return new bi(r,`image/jpeg`);case 14:return new bi(r,`image/png`);case 27:return new bi(r,`image/bmp`);default:return r}}})),Zo,Qo,$o,es,ts,ns,rs,is,as,os,ss,cs,ls=n((()=>{F(),Bp(),Zo=16,Qo=new Uint32Array(256),$o=new Uint32Array(256),es=new Uint32Array(256),ts=new Uint32Array(256),ns=new Uint32Array(256),rs=new Uint32Array(256),is=new Uint32Array(10),as=!1,os=()=>{let e=new Uint8Array(256),t=new Uint8Array(256),n=new Uint8Array(256);for(let e=0,r=1;e<256;e++)n[e]=r,t[r]=e,r=r^r<<1^(r&128?283:0);let r=(e,r)=>e&&r?n[(t[e]+t[r])%255]:0;e[0]=99;for(let r=1;r<256;r++){let i=n[255-t[r]],a=i^i<<1^i<<2^i<<3^i<<4;a=a>>>8^a&255^99,e[r]=a}for(let t=0;t<256;t++){let n=e[t],i=e.indexOf(t);Qo[t]=n<<24|n<<16|n<<8|n,rs[t]=i<<24|i<<16|i<<8|i;let a=r(i,14),o=r(i,9),s=r(i,13),c=r(i,11),l=a<<24|o<<16|s<<8|c;$o[t]=l,es[t]=l>>>8|l<<24,ts[t]=l>>>16|l<<16,ns[t]=l>>>24|l<<8}let i=1;for(let e=0;e<10;e++)is[e]=i<<24,i=i<<1^(i&128?283:0);as=!0},ss=class{constructor(){this.roundkey=new Uint32Array(44),this.iv=new Uint32Array(Zo/Uint32Array.BYTES_PER_ELEMENT),this.in=new Uint8Array(Zo),this.out=new Uint8Array(Zo),this.inView=new DataView(this.in.buffer),this.outView=new DataView(this.out.buffer)}init({key:e,iv:t}){D(e.byteLength===16),D(t.byteLength===16),as||os();let n=new DataView(e.buffer,e.byteOffset,e.byteLength),r=new DataView(t.buffer,t.byteOffset,t.byteLength);this.roundkey[0]=n.getUint32(0,!1),this.roundkey[1]=n.getUint32(4,!1),this.roundkey[2]=n.getUint32(8,!1),this.roundkey[3]=n.getUint32(12,!1),this.iv[0]=r.getUint32(0,!1),this.iv[1]=r.getUint32(4,!1),this.iv[2]=r.getUint32(8,!1),this.iv[3]=r.getUint32(12,!1);for(let e=4;e<44;e+=4){let t=this.roundkey[e-1];this.roundkey[e]=this.roundkey[e-4]^Qo[t>>>16&255]&4278190080^Qo[t>>>8&255]&16711680^Qo[t>>>0&255]&65280^Qo[t>>>24&255]&255^is[e/4-1],this.roundkey[e+1]=this.roundkey[e-3]^this.roundkey[e],this.roundkey[e+2]=this.roundkey[e-2]^this.roundkey[e+1],this.roundkey[e+3]=this.roundkey[e-1]^this.roundkey[e+2]}for(let e=0,t=40;e<t;e+=4,t-=4)for(let n=0;n<4;n++){let r=this.roundkey[e+n];this.roundkey[e+n]=this.roundkey[t+n],this.roundkey[t+n]=r}for(let e=4;e<40;e+=4)for(let t=0;t<4;t++){let n=this.roundkey[e+t];this.roundkey[e+t]=$o[Qo[n>>>24&255]&255]^es[Qo[n>>>16&255]&255]^ts[Qo[n>>>8&255]&255]^ns[Qo[n>>>0&255]&255]}}decrypt(){let e=this.inView.getUint32(0,!1)^this.roundkey[0],t=this.inView.getUint32(4,!1)^this.roundkey[1],n=this.inView.getUint32(8,!1)^this.roundkey[2],r=this.inView.getUint32(12,!1)^this.roundkey[3],i=this.inView.getUint32(0,!1),a=this.inView.getUint32(4,!1),o=this.inView.getUint32(8,!1),s=this.inView.getUint32(12,!1),c,l,u,d;for(let i=1;i<10;i++){let a=i*4;c=$o[e>>>24]^es[r>>>16&255]^ts[n>>>8&255]^ns[t&255]^this.roundkey[a],l=$o[t>>>24]^es[e>>>16&255]^ts[r>>>8&255]^ns[n&255]^this.roundkey[a+1],u=$o[n>>>24]^es[t>>>16&255]^ts[e>>>8&255]^ns[r&255]^this.roundkey[a+2],d=$o[r>>>24]^es[n>>>16&255]^ts[t>>>8&255]^ns[e&255]^this.roundkey[a+3],e=c,t=l,n=u,r=d}let f=rs[e>>>24&255]&4278190080^rs[r>>>16&255]&16711680^rs[n>>>8&255]&65280^rs[t>>>0&255]&255^this.roundkey[40],p=rs[t>>>24&255]&4278190080^rs[e>>>16&255]&16711680^rs[r>>>8&255]&65280^rs[n>>>0&255]&255^this.roundkey[41],m=rs[n>>>24&255]&4278190080^rs[t>>>16&255]&16711680^rs[e>>>8&255]&65280^rs[r>>>0&255]&255^this.roundkey[42],h=rs[r>>>24&255]&4278190080^rs[n>>>16&255]&16711680^rs[t>>>8&255]&65280^rs[e>>>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,m^this.iv[2],!1),this.outView.setUint32(12,h^this.iv[3],!1),this.iv[0]=i,this.iv[1]=a,this.iv[2]=o,this.iv[3]=s}},cs=(e,t,n)=>{let r=!1,i=0,a=2**16,o=new ss;return new ReadableStream({pull:async s=>{r||=(o.init(await t()),!0);let c=a+16,l=e.requestSliceRange(i,0,c);if(l instanceof Promise&&(l=await l),!l||l.length===0)throw Error(`Invalid ciphertext.`);let u=l.length;if(u%16!=0)throw Error(`Invalid ciphertext.`);let d=u===c?u-16:u,f=H(l,d),p=new Uint8Array(d);for(let e=0;e<d;e+=16)o.in.set(f.subarray(e,e+16)),o.decrypt(),p.set(o.out,e);if(d<u)s.enqueue(p),i+=d;else{let e=p[d-1];if(e===0||e>16)throw Error(`Invalid PKCS#7 padding. Incorrect key or corrupted data.`);let t=p.subarray(0,d-e);s.enqueue(t),s.close(),n()}},cancel:()=>{n()}})}})),us,ds,fs,ps,ms,hs,gs,_s,vs,ys,bs,xs,Ss,Cs,ws,Ts,Es,Ds=n((()=>{Pi(),ma(),No(),Fo(),F(),Lo(),Vo(),Xo(),Bp(),Ei(),Aa(),Di(),ls(),us=class e extends Po{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(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return Ro({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(e=>e.info?.type===`video`),hasAudio:this.tracks.some(e=>e.info?.type===`audio`),codecStrings:t.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??=(async()=>{let t=0,n=!1;for(;;){let r=this.reader.requestSliceRange(t,Ho,Uo);if(r instanceof Promise&&(r=await r),!r)break;let i=t,a=Wo(r);if(!a)break;if(a.name===`ftyp`||a.name===`styp`)this.isQuickTime=G(r,4)===`qt `;else if(a.name===`moov`){let e=this.reader.requestSlice(r.filePos,a.contentSize);if(e instanceof Promise&&(e=await e),!e)break;this.moovSlice=e,this.readContiguousBoxes(this.moovSlice);for(let e of this.tracks){let t=e.editListPreviousSegmentDurations/this.movieTimescale;e.editListOffset-=Math.round(t*e.timescale)}n=this.isFragmented&&this.reader.fileSize!==null&&this.reader.fileSize>i+a.totalSize;break}else if(a.name===`moof`){if(!this.input._initInput)throw 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 t=await this.input._initInput._getDemuxer();if(t.constructor!==e)throw Error(`Init input must match the input's format.`);await t.readMetadata(),this.movieTimescale=t.movieTimescale,this.movieDurationInTimescale=t.movieDurationInTimescale,this.metadataTags=t.metadataTags,this.isFragmented=!0,this.fragmentTrackDefaults=t.fragmentTrackDefaults,this.psshBoxes=t.psshBoxes;for(let e of t.tracks){let t={id:e.id,demuxer:this,trackBacking:null,disposition:e.disposition,timescale:e.timescale,durationInMediaTimescale:e.durationInMediaTimescale,durationInMovieTimescale:e.durationInMovieTimescale,rotation:e.rotation,internalCodecId:e.internalCodecId,name:e.name,languageCode:e.languageCode,sampleTableByteOffset:null,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:e.editListPreviousSegmentDurations,editListOffset:e.editListOffset,encryptionInfo:e.encryptionInfo,encryptionAuxInfo:null,frmaCodecString:null,info:e.info};e.trackBacking&&(D(t.info),t.info.type===`video`&&t.info.width!==-1?(t.trackBacking=new fs(t),this.tracks.push(t)):t.info.type===`audio`&&t.info.numberOfChannels!==-1&&(t.trackBacking=new ps(t),this.tracks.push(t)))}n=!1;break}t=i+a.totalSize}if(n){D(this.reader.fileSize!==null);let e=this.reader.requestSlice(this.reader.fileSize-4,4);e instanceof Promise&&(e=await e),D(e);let t=W(e),n=this.reader.fileSize-t;if(n>=0&&n<=this.reader.fileSize-Uo){let e=this.reader.requestSliceRange(n,Ho,Uo);if(e instanceof Promise&&(e=await e),e){let t=Wo(e);if(t&&t.name===`mfra`){let n=this.reader.requestSlice(e.filePos,t.contentSize);n instanceof Promise&&(n=await n),n&&this.readContiguousBoxes(n)}}}}})()}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;let t={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};if(e.sampleTable=t,e.sampleTableByteOffset===null)return t;D(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&&Fi.includes(e.info.codec)&&t.sampleCompositionTimeOffsets.length===0){D(e.info?.type===`audio`);let n=ta(e.info.codec),r=[],i=[];for(let a=0;a<t.sampleToChunk.length;a++){let o=t.sampleToChunk[a],s=t.sampleToChunk[a+1],c=(s?s.startChunkIndex:t.chunkOffsets.length)-o.startChunkIndex;for(let a=0;a<c;a++){let s=o.startSampleIndex+a*o.samplesPerChunk,c=s+o.samplesPerChunk,l=N(t.sampleTimingEntries,s,e=>e.startIndex),u=t.sampleTimingEntries[l],d=N(t.sampleTimingEntries,c,e=>e.startIndex),f=t.sampleTimingEntries[d],p=u.startDecodeTimestamp+(s-u.startIndex)*u.delta,m=f.startDecodeTimestamp+(c-f.startIndex)*f.delta-p,h=O(r);h&&h.delta===m?h.count++:r.push({startIndex:o.startChunkIndex+a,startDecodeTimestamp:p,count:1,delta:m});let g=o.samplesPerChunk*n.sampleSize*e.info.numberOfChannels;i.push(g)}o.startSampleIndex=o.startChunkIndex,o.samplesPerChunk=1}t.sampleTimingEntries=r,t.sampleSizes=i}if(t.sampleCompositionTimeOffsets.length>0){t.presentationTimestamps=[];for(let e of t.sampleTimingEntries)for(let n=0;n<e.count;n++)t.presentationTimestamps.push({presentationTimestamp:e.startDecodeTimestamp+n*e.delta,sampleIndex:e.startIndex+n});for(let e of t.sampleCompositionTimeOffsets)for(let n=0;n<e.count;n++){let r=e.startIndex+n,i=t.presentationTimestamps[r];i&&(i.presentationTimestamp+=e.offset)}t.presentationTimestamps.sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp),t.presentationTimestampIndexMap=Array(t.presentationTimestamps.length).fill(-1);for(let e=0;e<t.presentationTimestamps.length;e++)t.presentationTimestampIndexMap[t.presentationTimestamps[e].sampleIndex]=e}return t}async readFragment(e){if(this.lastReadFragment?.moofOffset===e)return this.lastReadFragment;let t=this.reader.requestSliceRange(e,Ho,Uo);t instanceof Promise&&(t=await t),D(t);let n=Wo(t);D(n?.name===`moof`);let r=this.reader.requestSlice(e,n.totalSize);r instanceof Promise&&(r=await r),D(r),this.traverseBox(r);let i=this.lastReadFragment;D(i&&i.moofOffset===e);for(let[,e]of i.trackData){let t=e.track,{fragmentPositionCache:n}=t;if(!e.startTimestampIsFinal){let r=t.fragmentLookupTable.find(e=>e.moofOffset===i.moofOffset);if(r)vs(e,r.timestamp);else{let t=N(n,i.moofOffset-1,e=>e.moofOffset);if(t!==-1){let r=n[t];vs(e,r.endTimestamp)}}e.startTimestampIsFinal=!0}let r=N(n,e.startTimestamp,e=>e.startTimestamp);if((r===-1||n[r].moofOffset!==i.moofOffset)&&n.splice(r+1,0,{moofOffset:i.moofOffset,startTimestamp:e.startTimestamp,endTimestamp:e.endTimestamp}),e.encryptionAuxInfo&&t.encryptionInfo){let n=await Ss(this.reader,t.encryptionInfo,e.encryptionAuxInfo);for(let t=0;t<Math.min(e.samples.length,n.length);t++){let r=n[t];e.samples[t].encryption=r}}}return i}readContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Ho&&this.traverseBox(e););}*iterateContiguousBoxes(e){let t=e.filePos;for(;e.filePos-t<=e.length-Ho;){let t=e.filePos,n=Wo(e);if(!n)break;yield{boxInfo:n,slice:e},e.filePos=t+n.totalSize}}traverseBox(e){let t=e.filePos,n=Wo(e);if(!n)return!1;let r=e.filePos,i=t+n.totalSize;switch(n.name){case`mdia`:case`minf`:case`dinf`:case`mfra`:case`edts`:case`sinf`:case`schi`:this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`mvhd`:{let t=U(e);e.skip(3),t===1?(e.skip(16),this.movieTimescale=W(e),this.movieDurationInTimescale=Pp(e)):(e.skip(8),this.movieTimescale=W(e),this.movieDurationInTimescale=W(e))}break;case`trak`:{let t={id:-1,demuxer:this,trackBacking:null,disposition:{...wi,primary:!1},info:null,timescale:-1,durationInMovieTimescale:-1,durationInMediaTimescale:-1,rotation:0,internalCodecId:null,name:null,languageCode:xr,sampleTableByteOffset:-1,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:0,editListOffset:0,encryptionInfo:null,encryptionAuxInfo:null,frmaCodecString:null};this.currentTrack=t,this.readContiguousBoxes(e.slice(r,n.contentSize)),t.id!==-1&&t.timescale!==-1&&t.info!==null&&(t.info.type===`video`&&t.info.width!==-1?(t.trackBacking=new fs(t),this.tracks.push(t)):t.info.type===`audio`&&t.info.numberOfChannels!==-1&&(t.trackBacking=new ps(t),this.tracks.push(t))),this.currentTrack=null}break;case`tkhd`:{let t=this.currentTrack;if(!t)break;let n=U(e),r=!!(Dp(e)&1);if(t.disposition.default=r,n===0)e.skip(8),t.id=W(e),e.skip(4),t.durationInMovieTimescale=W(e);else if(n===1)e.skip(16),t.id=W(e),e.skip(4),t.durationInMovieTimescale=Pp(e);else throw Error(`Incorrect track header version ${n}.`);e.skip(16);let i=Bn(Cr(ys([Go(e),Go(e),Ko(e),Go(e),Go(e),Ko(e),Go(e),Go(e),Ko(e)]),90));D(i===0||i===90||i===180||i===270),t.rotation=i}break;case`elst`:{let t=this.currentTrack;if(!t)break;let n=U(e);e.skip(3);let r=!1,i=0,a=W(e);for(let o=0;o<a;o++){let a=n===1?Pp(e):W(e),o=n===1?Fp(e):jp(e),s=Go(e);if(a!==0){if(r){console.warn(`Unsupported edit list: multiple edits are not currently supported. Only using first edit.`);break}if(o===-1){i+=a;continue}if(s!==1){console.warn(`Unsupported edit list entry: media rate must be 1.`);break}t.editListPreviousSegmentDurations=i,t.editListOffset=o,r=!0}}}break;case`mdhd`:{let t=this.currentTrack;if(!t)break;let n=U(e);e.skip(3),n===0?(e.skip(8),t.timescale=W(e),t.durationInMediaTimescale=W(e)):n===1&&(e.skip(16),t.timescale=W(e),t.durationInMediaTimescale=Pp(e));let r=Ep(e);if(r>0){t.languageCode=``;for(let e=0;e<3;e++)t.languageCode=String.fromCharCode(96+(r&31))+t.languageCode,r>>=5;kr(t.languageCode)||(t.languageCode=xr)}}break;case`hdlr`:{let t=this.currentTrack;if(!t)break;e.skip(8);let n=G(e,4);n===`vide`?t.info={type:`video`,width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,codec:null,codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}:n===`soun`&&(t.info={type:`audio`,numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null,pcmLittleEndian:!1,pcmSampleSize:null})}break;case`stbl`:{let i=this.currentTrack;if(!i)break;i.sampleTableByteOffset=t,this.readContiguousBoxes(e.slice(r,n.contentSize))}break;case`stsd`:{let t=this.currentTrack;if(!t||t.info===null||t.sampleTable)break;let n=U(e);e.skip(3);let r=W(e);for(let i=0;i<r;i++){let r=e.filePos,i=Wo(e);if(!i)break;t.internalCodecId=i.name;let a=i.name.toLowerCase();if(t.info.type===`video`){e.skip(24),t.info.width=Ep(e),t.info.height=Ep(e),t.info.squarePixelWidth=t.info.width,t.info.squarePixelHeight=t.info.height,e.skip(50),t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+i.totalSize-e.filePos));let n=a===`encv`?t.frmaCodecString:a;t.frmaCodecString=null,n===`avc1`||n===`avc3`?(t.info.codec=`avc`,t.info.avcType=n===`avc1`?1:3):n===`hvc1`||n===`hev1`?t.info.codec=`hevc`:n===`vp08`?t.info.codec=`vp8`:n===`vp09`?t.info.codec=`vp9`:n===`av01`?t.info.codec=`av1`:n===null?console.warn(`Unknown encrypted video codec due to missing frma box.`):console.warn(`Unsupported video codec (sample entry type '${i.name}').`)}else{e.skip(8);let o=Ep(e);e.skip(6);let s=Ep(e),c=Ep(e);e.skip(4);let l=W(e)/65536,u=null;n===0&&o>0&&(o===1?(e.skip(4),c=8*W(e),e.skip(8)):o===2&&(e.skip(4),l=Rp(e),s=W(e),e.skip(4),c=W(e),u=W(e),e.skip(8))),t.info.numberOfChannels=s,t.info.sampleRate=l,t.frmaCodecString=null,this.readContiguousBoxes(e.slice(e.filePos,r+i.totalSize-e.filePos));let d=a===`enca`?t.frmaCodecString:a;if(t.frmaCodecString=null,d!==`mp4a`)if(d===`opus`)t.info.codec=`opus`,t.info.sampleRate=$i;else if(d===`flac`)t.info.codec=`flac`;else if(d===`ulaw`)t.info.codec=`ulaw`;else if(d===`alaw`)t.info.codec=`alaw`;else if(d===`ac-3`)t.info.codec=`ac3`;else if(d===`ec-3`)t.info.codec=`eac3`;else if(d===`twos`)c===8?t.info.codec=`pcm-s8`:c===16?t.info.codec=t.info.pcmLittleEndian?`pcm-s16`:`pcm-s16be`:(console.warn(`Unsupported sample size ${c} for codec 'twos'.`),t.info.codec=null);else if(d===`sowt`)c===8?t.info.codec=`pcm-s8`:c===16?t.info.codec=`pcm-s16`:(console.warn(`Unsupported sample size ${c} for codec 'sowt'.`),t.info.codec=null);else if(d===`raw `)t.info.codec=`pcm-u8`;else if(d===`in24`)t.info.codec=t.info.pcmLittleEndian?`pcm-s24`:`pcm-s24be`;else if(d===`in32`)t.info.codec=t.info.pcmLittleEndian?`pcm-s32`:`pcm-s32be`;else if(d===`fl32`)t.info.codec=t.info.pcmLittleEndian?`pcm-f32`:`pcm-f32be`;else if(d===`fl64`)t.info.codec=t.info.pcmLittleEndian?`pcm-f64`:`pcm-f64be`;else if(d===`ipcm`){let e=t.info.pcmSampleSize;t.info.pcmLittleEndian?e===16?t.info.codec=`pcm-s16`:e===24?t.info.codec=`pcm-s24`:e===32?t.info.codec=`pcm-s32`:(console.warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null):e===16?t.info.codec=`pcm-s16be`:e===24?t.info.codec=`pcm-s24be`:e===32?t.info.codec=`pcm-s32be`:(console.warn(`Invalid ipcm sample size ${e}.`),t.info.codec=null)}else if(d===`fpcm`){let e=t.info.pcmSampleSize;t.info.pcmLittleEndian?e===32?t.info.codec=`pcm-f32`:e===64?t.info.codec=`pcm-f64`:(console.warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null):e===32?t.info.codec=`pcm-f32be`:e===64?t.info.codec=`pcm-f64be`:(console.warn(`Invalid fpcm sample size ${e}.`),t.info.codec=null)}else if(d===`lpcm`&&u!==null){let e=c+7>>3,n=!!(u&1),r=!!(u&2),i=u&4?-1:0;c>0&&c<=64&&(n?c===32&&(t.info.codec=r?`pcm-f32be`:`pcm-f32`):i&1<<e-1?e===1?t.info.codec=`pcm-s8`:e===2?t.info.codec=r?`pcm-s16be`:`pcm-s16`:e===3?t.info.codec=r?`pcm-s24be`:`pcm-s24`:e===4&&(t.info.codec=r?`pcm-s32be`:`pcm-s32`):e===1&&(t.info.codec=`pcm-u8`)),t.info.codec===null&&console.warn(`Unsupported PCM format.`)}else d===null?console.warn(`Unknown encrypted audio codec due to missing frma box.`):console.warn(`Unsupported audio codec (sample entry type '${i.name}').`)}e.filePos=r+i.totalSize}}break;case`frma`:{let t=this.currentTrack;if(!t)break;t.frmaCodecString=G(e,4).toLowerCase()}break;case`schm`:{let t=this.currentTrack;if(!t)break;e.skip(4);let n=G(e,4);n===`cenc`||n===`cens`||n===`cbcs`?t.encryptionInfo={scheme:n,defaultKid:null,defaultIsProtected:null,defaultPerSampleIvSize:null,defaultConstantIv:null,defaultCryptByteBlock:null,defaultSkipByteBlock:null}:console.warn(`Unsupported encryption scheme '${n}'.`)}break;case`tenc`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;let n=U(e);e.skip(3),e.skip(1);let r=U(e);if(n>0?(t.encryptionInfo.defaultCryptByteBlock=r>>4,t.encryptionInfo.defaultSkipByteBlock=r&15):(t.encryptionInfo.defaultCryptByteBlock=0,t.encryptionInfo.defaultSkipByteBlock=0),t.encryptionInfo.defaultIsProtected=U(e)!==0,t.encryptionInfo.defaultPerSampleIvSize=U(e),t.encryptionInfo.defaultKid=rr(H(e,16)),t.encryptionInfo.defaultIsProtected&&t.encryptionInfo.defaultPerSampleIvSize===0){let n=U(e),r=new Uint8Array(16);r.set(H(e,n),0),t.encryptionInfo.defaultConstantIv=r}}break;case`avcC`:{let t=this.currentTrack;if(!t)break;D(t.info),t.info.codecDescription=H(e,n.contentSize)}break;case`hvcC`:{let t=this.currentTrack;if(!t)break;D(t.info),t.info.codecDescription=H(e,n.contentSize)}break;case`vpcC`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`),e.skip(4);let n=U(e),r=U(e),i=U(e),a=i>>4,o=i>>1&7,s=i&1,c=U(e),l=U(e),u=U(e);t.info.vp9CodecInfo={profile:n,level:r,bitDepth:a,chromaSubsampling:o,videoFullRangeFlag:s,colourPrimaries:c,transferCharacteristics:l,matrixCoefficients:u}}break;case`av1C`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`),e.skip(1);let n=U(e),r=n>>5,i=n&31,a=U(e),o=a>>7,s=a>>6&1,c=a>>5&1,l=a>>4&1,u=a>>3&1,d=a>>2&1,f=a&3,p=r===2&&s?c?12:10:s?10:8;t.info.av1CodecInfo={profile:r,level:i,tier:o,bitDepth:p,monochrome:l,chromaSubsamplingX:u,chromaSubsamplingY:d,chromaSamplePosition:f}}break;case`colr`:{let t=this.currentTrack;if(!t||(D(t.info?.type===`video`),G(e,4)!==`nclx`))break;let n=Ep(e),r=Ep(e),i=Ep(e),a=!!(U(e)&128);t.info.colorSpace={primaries:Jn[n],transfer:Xn[r],matrix:Qn[i],fullRange:a}}break;case`pasp`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`video`);let n=W(e),r=W(e);n>0&&r>0&&(n>r?t.info.squarePixelWidth=Math.round(t.info.width*n/r):t.info.squarePixelHeight=Math.round(t.info.height*r/n))}break;case`wave`:this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`esds`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4),D(U(e)===3),qo(e),e.skip(2);let n=U(e),r=(n&128)!=0,i=(n&64)!=0,a=(n&32)!=0;if(r&&e.skip(2),i){let t=U(e);e.skip(t)}a&&e.skip(2),D(U(e)===4);let o=qo(e),s=e.filePos,c=U(e);if(c===64||c===103?(t.info.codec=`aac`,t.info.aacCodecInfo={isMpeg2:c===103,objectType:null}):c===105||c===107?t.info.codec=`mp3`:c===221?t.info.codec=`vorbis`:console.warn(`Unsupported audio codec (objectTypeIndication ${c}) - discarding track.`),e.skip(12),o>e.filePos-s){D(U(e)===5);let n=qo(e);if(t.info.codecDescription=H(e,n),t.info.codec===`aac`){let e=Ai(t.info.codecDescription);e.numberOfChannels!==null&&(t.info.numberOfChannels=e.numberOfChannels),e.sampleRate!==null&&(t.info.sampleRate=e.sampleRate)}}}break;case`enda`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),t.info.pcmLittleEndian=!!(Ep(e)&255)}break;case`pcmC`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4);let n=U(e);t.info.pcmLittleEndian=!!(n&1),t.info.pcmSampleSize=U(e)}break;case`dOps`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(1);let n=U(e),r=Ep(e),i=W(e),a=Op(e),o=U(e),s;s=o===0?new Uint8Array:H(e,2+n);let c=new Uint8Array(19+s.byteLength),l=new DataView(c.buffer);l.setUint32(0,1332770163,!1),l.setUint32(4,1214603620,!1),l.setUint8(8,1),l.setUint8(9,n),l.setUint16(10,r,!0),l.setUint32(12,i,!0),l.setInt16(16,a,!0),l.setUint8(18,o),c.set(s,19),t.info.codecDescription=c,t.info.numberOfChannels=n}break;case`dfLa`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`),e.skip(4);let n=e.filePos;for(;e.filePos<i;){let n=U(e),r=Dp(e);if((n&127)===yo.STREAMINFO){e.skip(10);let n=W(e),r=n>>>12,i=(n>>9&7)+1;t.info.sampleRate=r,t.info.numberOfChannels=i,e.skip(20)}else e.skip(r);if(n&128)break}let r=e.filePos;e.filePos=n;let a=H(e,r-n),o=new Uint8Array(4+a.byteLength);new DataView(o.buffer).setUint32(0,1716281667,!1),o.set(a,4),t.info.codecDescription=o}break;case`dac3`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`);let n=new I(H(e,3)),r=n.readBits(2);n.skipBits(8);let i=n.readBits(3),a=n.readBits(1);r<3&&(t.info.sampleRate=Oa[r]),t.info.numberOfChannels=So[i]+a}break;case`dec3`:{let t=this.currentTrack;if(!t)break;D(t.info?.type===`audio`);let r=Ao(H(e,n.contentSize));if(!r){console.warn(`Invalid dec3 box contents, ignoring.`);break}let i=jo(r);i!==null&&(t.info.sampleRate=i),t.info.numberOfChannels=Mo(r)}break;case`stts`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e),r=0,i=0;for(let a=0;a<n;a++){let n=W(e),a=W(e);t.sampleTable.sampleTimingEntries.push({startIndex:r,startDecodeTimestamp:i,count:n,delta:a}),r+=n,i+=n*a}}break;case`ctts`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e),r=0;for(let i=0;i<n;i++){let n=W(e),i=jp(e);t.sampleTable.sampleCompositionTimeOffsets.push({startIndex:r,count:n,offset:i}),r+=n}}break;case`stsz`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e),r=W(e);if(n===0)for(let n=0;n<r;n++){let n=W(e);t.sampleTable.sampleSizes.push(n)}else t.sampleTable.sampleSizes.push(n)}break;case`stz2`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4),e.skip(3);let n=U(e),r=W(e),i=new I(H(e,Math.ceil(r*n/8)));for(let e=0;e<r;e++){let e=i.readBits(n);t.sampleTable.sampleSizes.push(e)}}break;case`stss`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4),t.sampleTable.keySampleIndices=[];let n=W(e);for(let r=0;r<n;r++){let n=W(e)-1;t.sampleTable.keySampleIndices.push(n)}t.sampleTable.keySampleIndices[0]!==0&&t.sampleTable.keySampleIndices.unshift(0)}break;case`stsc`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e);for(let r=0;r<n;r++){let n=W(e)-1,r=W(e),i=W(e);t.sampleTable.sampleToChunk.push({startSampleIndex:-1,startChunkIndex:n,samplesPerChunk:r,sampleDescriptionIndex:i})}let r=0;for(let e=0;e<t.sampleTable.sampleToChunk.length;e++)if(t.sampleTable.sampleToChunk[e].startSampleIndex=r,e<t.sampleTable.sampleToChunk.length-1){let n=t.sampleTable.sampleToChunk[e+1].startChunkIndex-t.sampleTable.sampleToChunk[e].startChunkIndex;r+=n*t.sampleTable.sampleToChunk[e].samplesPerChunk}}break;case`stco`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e);for(let r=0;r<n;r++){let n=W(e);t.sampleTable.chunkOffsets.push(n)}}break;case`co64`:{let t=this.currentTrack;if(!t||!t.sampleTable)break;e.skip(4);let n=W(e);for(let r=0;r<n;r++){let n=Pp(e);t.sampleTable.chunkOffsets.push(n)}}break;case`mvex`:this.isFragmented=!0,this.readContiguousBoxes(e.slice(r,n.contentSize));break;case`mehd`:{let t=U(e);e.skip(3),this.movieDurationInTimescale=t===1?Pp(e):W(e)}break;case`trex`:{e.skip(4);let t=W(e),n=W(e),r=W(e),i=W(e),a=W(e);this.fragmentTrackDefaults.push({trackId:t,defaultSampleDescriptionIndex:n,defaultSampleDuration:r,defaultSampleSize:i,defaultSampleFlags:a})}break;case`tfra`:{let t=U(e);e.skip(3);let n=W(e),r=this.tracks.find(e=>e.id===n);if(!r)break;let i=W(e),a=(i&48)>>4,o=(i&12)>>2,s=i&3,c=[U,Ep,Dp,W],l=c[a],u=c[o],d=c[s],f=W(e);for(let n=0;n<f;n++){let n=t===1?Pp(e):W(e),i=t===1?Pp(e):W(e);l(e),u(e),d(e),r.fragmentLookupTable.push({timestamp:n,moofOffset:i})}r.fragmentLookupTable.sort((e,t)=>e.timestamp-t.timestamp);for(let e=0;e<r.fragmentLookupTable.length-1;e++){let t=r.fragmentLookupTable[e],n=r.fragmentLookupTable[e+1];t.timestamp===n.timestamp&&(r.fragmentLookupTable.splice(e+1,1),e--)}}break;case`moof`:this.currentFragment={moofOffset:t,moofSize:n.totalSize,implicitBaseDataOffset:t,trackData:new Map,psshBoxes:[]},this.readContiguousBoxes(e.slice(r,n.contentSize)),this.lastReadFragment=this.currentFragment,this.currentFragment=null;break;case`traf`:if(D(this.currentFragment),this.readContiguousBoxes(e.slice(r,n.contentSize)),this.currentTrack){let e=this.currentFragment.trackData.get(this.currentTrack.id);if(e){this.currentFragment.implicitBaseDataOffset=e.currentOffset,e.presentationTimestamps=e.samples.map((e,t)=>({presentationTimestamp:e.presentationTimestamp,sampleIndex:t})).sort((e,t)=>e.presentationTimestamp-t.presentationTimestamp);for(let t=0;t<e.presentationTimestamps.length;t++){let n=e.presentationTimestamps[t],r=e.samples[n.sampleIndex];e.firstKeyFrameTimestamp===null&&r.isKeyFrame&&(e.firstKeyFrameTimestamp=r.presentationTimestamp),t<e.presentationTimestamps.length-1&&(r.duration=e.presentationTimestamps[t+1].presentationTimestamp-n.presentationTimestamp)}let t=e.samples[e.presentationTimestamps[0].sampleIndex],n=e.samples[O(e.presentationTimestamps).sampleIndex];e.startTimestamp=t.presentationTimestamp,e.endTimestamp=n.presentationTimestamp+n.duration;let{currentFragmentState:r}=this.currentTrack;D(r),r.startTimestamp!==null&&(vs(e,r.startTimestamp),e.startTimestampIsFinal=!0),r.encryptionAuxInfo&&!e.samples[0].encryption&&(e.encryptionAuxInfo=r.encryptionAuxInfo)}this.currentTrack.currentFragmentState=null,this.currentTrack=null}break;case`pssh`:{if(this.input._formatOptions.isobmff?._suppressPsshParsing)break;let t=zo(H(e,n.contentSize));this.currentFragment?this.currentFragment.psshBoxes.push(t):this.currentTrack||this.psshBoxes.push(t)}break;case`tfhd`:{D(this.currentFragment),e.skip(1);let t=Dp(e),n=!!(t&1),r=!!(t&2),i=!!(t&8),a=!!(t&16),o=!!(t&32),s=!!(t&65536),c=!!(t&131072),l=W(e),u=this.tracks.find(e=>e.id===l);if(!u)break;let d=this.fragmentTrackDefaults.find(e=>e.trackId===l);this.currentTrack=u,u.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:d?.defaultSampleDescriptionIndex??null,defaultSampleDuration:d?.defaultSampleDuration??null,defaultSampleSize:d?.defaultSampleSize??null,defaultSampleFlags:d?.defaultSampleFlags??null,startTimestamp:null,encryptionAuxInfo:null},n?u.currentFragmentState.baseDataOffset=Pp(e):c&&(u.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),r&&(u.currentFragmentState.sampleDescriptionIndex=W(e)),i&&(u.currentFragmentState.defaultSampleDuration=W(e)),a&&(u.currentFragmentState.defaultSampleSize=W(e)),o&&(u.currentFragmentState.defaultSampleFlags=W(e)),s&&(u.currentFragmentState.defaultSampleDuration=0)}break;case`tfdt`:{let t=this.currentTrack;if(!t)break;D(t.currentFragmentState);let n=U(e);e.skip(3);let r=n===0?W(e):Pp(e);t.currentFragmentState.startTimestamp=r}break;case`trun`:{let t=this.currentTrack;if(!t)break;D(this.currentFragment),D(t.currentFragmentState);let n=U(e),r=Dp(e),i=!!(r&1),a=!!(r&4),o=!!(r&256),s=!!(r&512),c=!!(r&1024),l=!!(r&2048),u=W(e),d=null;i&&(d=jp(e));let f=null;a&&(f=W(e));let p;if(this.currentFragment.trackData.has(t.id)?(p=this.currentFragment.trackData.get(t.id),d!==null&&(p.currentOffset=t.currentFragmentState.baseDataOffset+d)):(p={track:t,currentTimestamp:0,currentOffset:t.currentFragmentState.baseDataOffset+(d??0),startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1,encryptionAuxInfo:null},this.currentFragment.trackData.set(t.id,p)),u===0){this.currentFragment.implicitBaseDataOffset=p.currentOffset;break}for(let r=0;r<u;r++){let i;o?i=W(e):(D(t.currentFragmentState.defaultSampleDuration!==null),i=t.currentFragmentState.defaultSampleDuration);let a;s?a=W(e):(D(t.currentFragmentState.defaultSampleSize!==null),a=t.currentFragmentState.defaultSampleSize);let u;c?u=W(e):(D(t.currentFragmentState.defaultSampleFlags!==null),u=t.currentFragmentState.defaultSampleFlags),r===0&&f!==null&&(u=f);let d=0;l&&(d=n===0?W(e):jp(e));let m=!(u&65536);p.samples.push({presentationTimestamp:p.currentTimestamp+d,duration:i,byteOffset:p.currentOffset,byteSize:a,isKeyFrame:m,encryption:null}),p.currentOffset+=a,p.currentTimestamp+=i}}break;case`saiz`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;if(e.skip(1),Dp(e)&1){let n=G(e,4),r=W(e);if(n!==t.encryptionInfo.scheme||r!==0)break}let n=U(e),r=W(e),i=null;n===0&&r>0&&(i=H(e,r));let a=xs(t);a.defaultSampleInfoSize=n,a.sampleSizes=i,a.sampleCount=r}break;case`saio`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;let n=U(e);if(Dp(e)&1){let n=G(e,4),r=W(e);if(n!==t.encryptionInfo.scheme||r!==0)break}let r=W(e);if(r===0)break;r>1&&console.warn(`Multiple saio entries are not supported; using the first offset only.`);let i=n===0?W(e):Number(Pp(e));this.currentFragment&&(i+=this.currentFragment.moofOffset);let a=xs(t);a.offset=i}break;case`senc`:{let t=this.currentTrack;if(!t||!t.encryptionInfo)break;D(this.currentFragment);let n=this.currentFragment.trackData.get(t.id);if(!n)break;e.skip(1);let r=!!(Dp(e)&2),i=W(e),a=t.encryptionInfo.defaultPerSampleIvSize;D(a!==null);for(let o=0;o<Math.min(i,n.samples.length);o++){let i=new Uint8Array(16);a>0?i.set(H(e,a),0):i.set(t.encryptionInfo.defaultConstantIv,0);let s=null;if(r){let t=Ep(e);s=[];for(let n=0;n<t;n++){let t=Ep(e),n=W(e);s.push({clearLen:t,protectedLen:n})}}let c=n.samples[o];c.encryption={iv:i,subsamples:s}}}break;case`udta`:{let t=this.iterateContiguousBoxes(e.slice(r,n.contentSize));for(let{boxInfo:e,slice:n}of t){if(e.name!==`meta`&&!this.currentTrack){let t=n.filePos;this.metadataTags.raw??={},e.name[0]===`©`?this.metadataTags.raw[e.name]??=Jo(n):this.metadataTags.raw[e.name]??=H(n,e.contentSize),n.filePos=t}switch(e.name){case`meta`:n.skip(-e.headerSize),this.traverseBox(n);break;case`©nam`:case`name`:this.currentTrack?this.currentTrack.name=Wn.decode(H(n,e.contentSize)):this.metadataTags.title??=Jo(n);break;case`©des`:this.currentTrack||(this.metadataTags.description??=Jo(n));break;case`©ART`:this.currentTrack||(this.metadataTags.artist??=Jo(n));break;case`©alb`:this.currentTrack||(this.metadataTags.album??=Jo(n));break;case`albr`:this.currentTrack||(this.metadataTags.albumArtist??=Jo(n));break;case`©gen`:this.currentTrack||(this.metadataTags.genre??=Jo(n));break;case`©day`:if(!this.currentTrack){let e=new Date(Jo(n));Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`©cmt`:this.currentTrack||(this.metadataTags.comment??=Jo(n));break;case`©lyr`:this.currentTrack||(this.metadataTags.lyrics??=Jo(n));break}}}break;case`meta`:{if(this.currentTrack)break;let t=W(e)!==0;this.currentMetadataKeys=new Map,t?this.readContiguousBoxes(e.slice(r,n.contentSize)):this.readContiguousBoxes(e.slice(r+4,n.contentSize-4)),this.currentMetadataKeys=null}break;case`keys`:{if(!this.currentMetadataKeys)break;e.skip(4);let t=W(e);for(let n=0;n<t;n++){let t=W(e);e.skip(4);let r=Wn.decode(H(e,t-8));this.currentMetadataKeys.set(n+1,r)}}break;case`ilst`:{if(!this.currentMetadataKeys)break;let t=this.iterateContiguousBoxes(e.slice(r,n.contentSize));for(let{boxInfo:e,slice:n}of t){let t=e.name,r=(t.charCodeAt(0)<<24)+(t.charCodeAt(1)<<16)+(t.charCodeAt(2)<<8)+t.charCodeAt(3);this.currentMetadataKeys.has(r)&&(t=this.currentMetadataKeys.get(r));let i=Yo(n);switch(this.metadataTags.raw??={},this.metadataTags.raw[t]??=i,t){case`©nam`:case`titl`:case`com.apple.quicktime.title`:case`title`:typeof i==`string`&&(this.metadataTags.title??=i);break;case`©des`:case`desc`:case`dscp`:case`com.apple.quicktime.description`:case`description`:typeof i==`string`&&(this.metadataTags.description??=i);break;case`©ART`:case`com.apple.quicktime.artist`:case`artist`:typeof i==`string`&&(this.metadataTags.artist??=i);break;case`©alb`:case`albm`:case`com.apple.quicktime.album`:case`album`:typeof i==`string`&&(this.metadataTags.album??=i);break;case`aART`:case`album_artist`:typeof i==`string`&&(this.metadataTags.albumArtist??=i);break;case`©cmt`:case`com.apple.quicktime.comment`:case`comment`:typeof i==`string`&&(this.metadataTags.comment??=i);break;case`©gen`:case`gnre`:case`com.apple.quicktime.genre`:case`genre`:typeof i==`string`&&(this.metadataTags.genre??=i);break;case`©lyr`:case`lyrics`:typeof i==`string`&&(this.metadataTags.lyrics??=i);break;case`©day`:case`rldt`:case`com.apple.quicktime.creationdate`:case`date`:if(typeof i==`string`){let e=new Date(i);Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`covr`:case`com.apple.quicktime.artwork`:i instanceof bi?(this.metadataTags.images??=[],this.metadataTags.images.push({data:i.data,kind:`coverFront`,mimeType:i.mimeType})):i instanceof Uint8Array&&(this.metadataTags.images??=[],this.metadataTags.images.push({data:i,kind:`coverFront`,mimeType:`image/*`}));break;case`track`:if(typeof i==`string`){let e=i.split(`/`),t=Number.parseInt(e[0],10),n=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(this.metadataTags.trackNumber??=t),n&&Number.isInteger(n)&&n>0&&(this.metadataTags.tracksTotal??=n)}break;case`trkn`:if(i instanceof Uint8Array&&i.length>=6){let e=j(i),t=e.getUint16(2,!1),n=e.getUint16(4,!1);t>0&&(this.metadataTags.trackNumber??=t),n>0&&(this.metadataTags.tracksTotal??=n)}break;case`disc`:case`disk`:if(i instanceof Uint8Array&&i.length>=6){let e=j(i),t=e.getUint16(2,!1),n=e.getUint16(4,!1);t>0&&(this.metadataTags.discNumber??=t),n>0&&(this.metadataTags.discsTotal??=n)}break}}}break}return e.filePos=i,!0}},ds=class{constructor(e){this.internalTrack=e,this.packetToSampleIndex=new WeakMap,this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),n=0;for(let r of e.tracks)if(r.trackBacking.getType()===t&&n++,r===this.internalTrack)break;return n}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}isRelativeToUnixEpoch(){return!1}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.internalTrack;return e.durationInMediaTimescale<=0?null:(D(e.trackBacking),((await e.trackBacking.getFirstPacket({metadataOnly:!0}))?.timestamp??0)+e.durationInMediaTimescale/e.timescale)}async getLiveRefreshInterval(){return null}async getFirstPacket(e){let t=await this.fetchPacketForSampleIndex(0,e);return t||!this.internalTrack.demuxer.isFragmented?t:this.performFragmentedLookup(null,e=>e.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,e)}mapTimestampIntoTimescale(e){return Sr(e*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(e,t){let n=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=ms(r,n),a=await this.fetchPacketForSampleIndex(i,t);return!bs(r)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};let r=N(t.presentationTimestamps,n,e=>e.presentationTimestamp);return{sampleIndex:r===-1?-1:t.presentationTimestamps[r].sampleIndex,correctSampleFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextPacket(e,t){let n=this.packetToSampleIndex.get(e);if(n!==void 0)return this.fetchPacketForSampleIndex(n+1,t);let r=this.packetToFragmentLocation.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);return this.performFragmentedLookup(r.fragment,e=>{if(e===r.fragment){let t=e.trackData.get(this.internalTrack.id);if(r.sampleIndex+1<t.samples.length)return{sampleIndex:r.sampleIndex+1,correctSampleFound:!0}}else if(e.trackData.get(this.internalTrack.id))return{sampleIndex:0,correctSampleFound:!0};return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let n=this.mapTimestampIntoTimescale(e),r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),i=hs(r,n),a=await this.fetchPacketForSampleIndex(i,t);return!bs(r)||!this.internalTrack.demuxer.isFragmented?a:this.performFragmentedLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{sampleIndex:-1,correctSampleFound:!1};let r=ur(t.presentationTimestamps,e=>t.samples[e.sampleIndex].isKeyFrame&&e.presentationTimestamp<=n);return{sampleIndex:r===-1?-1:t.presentationTimestamps[r].sampleIndex,correctSampleFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextKeyPacket(e,t){let n=this.packetToSampleIndex.get(e);if(n!==void 0){let e=_s(this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n);return this.fetchPacketForSampleIndex(e,t)}let r=this.packetToFragmentLocation.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);return this.performFragmentedLookup(r.fragment,e=>{if(e===r.fragment){let t=e.trackData.get(this.internalTrack.id).samples.findIndex((e,t)=>e.isKeyFrame&&t>r.sampleIndex);if(t!==-1)return{sampleIndex:t,correctSampleFound:!0}}else{let t=e.trackData.get(this.internalTrack.id);if(t&&t.firstKeyFrameTimestamp!==null){let e=t.samples.findIndex(e=>e.isKeyFrame);return D(e!==-1),{sampleIndex:e,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,t)}async fetchPacketForSampleIndex(e,t){if(e===-1)return null;let n=gs(this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),e);if(!n)return null;let r;if(t.metadataOnly)r=Io;else{let t=this.internalTrack.demuxer.reader.requestSlice(n.sampleOffset,n.sampleSize);if(t instanceof Promise&&(t=await t),!t)return null;if(r=H(t,n.sampleSize),this.internalTrack.encryptionAuxInfo){D(this.internalTrack.encryptionInfo);let t=await Ss(this.internalTrack.demuxer.reader,this.internalTrack.encryptionInfo,this.internalTrack.encryptionAuxInfo);e<t.length&&(r=await Cs(this.internalTrack,t[e],r,null))}}let i=(n.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,a=n.duration/this.internalTrack.timescale,o=new R(r,n.isKeyFrame?`key`:`delta`,i,a,e,n.sampleSize);return this.packetToSampleIndex.set(o,e),o}async fetchPacketInFragment(e,t,n){if(t===-1)return null;let r=e.trackData.get(this.internalTrack.id).samples[t];D(r);let i;if(n.metadataOnly)i=Io;else{let t=this.internalTrack.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(t instanceof Promise&&(t=await t),!t)return null;i=H(t,r.byteSize),r.encryption&&(i=await Cs(this.internalTrack,r.encryption,i,e))}let a=(r.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=r.duration/this.internalTrack.timescale,s=new R(i,r.isKeyFrame?`key`:`delta`,a,o,e.moofOffset+t,r.byteSize);return this.packetToFragmentLocation.set(s,{fragment:e,sampleIndex:t}),s}async performFragmentedLookup(e,t,n,r,i){let a=this.internalTrack.demuxer,o=null,s=null,c=-1;if(e){let{sampleIndex:n,correctSampleFound:r}=t(e);if(r)return this.fetchPacketInFragment(e,n,i);n!==-1&&(s=e,c=n)}let l=N(this.internalTrack.fragmentLookupTable,n,e=>e.timestamp),u=l===-1?null:this.internalTrack.fragmentLookupTable[l],d=N(this.internalTrack.fragmentPositionCache,n,e=>e.startTimestamp),f=d===-1?null:this.internalTrack.fragmentPositionCache[d],p=Math.max(u?.moofOffset??0,f?.moofOffset??0)||null,m;for(e?p===null||e.moofOffset>=p?(m=e.moofOffset+e.moofSize,o=e):m=p:m=p??0;;){if(o){let e=o.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=a.reader.requestSliceRange(m,Ho,Uo);if(e instanceof Promise&&(e=await e),!e)break;let n=m,l=Wo(e);if(!l)break;if(l.name===`moof`){o=await a.readFragment(n);let{sampleIndex:e,correctSampleFound:r}=t(o);if(r)return this.fetchPacketInFragment(o,e,i);e!==-1&&(s=o,c=e)}m=n+l.totalSize}if(u&&(!s||s.moofOffset<u.moofOffset)){let e=this.internalTrack.fragmentLookupTable[l-1];D(!e||e.timestamp<u.timestamp);let n=e?.timestamp??-1/0;return this.performFragmentedLookup(null,t,n,r,i)}return s?this.fetchPacketInFragment(s,c,i):null}},fs=class extends ds{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return`video`}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return!1}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{if(this.internalTrack.info.codec===`vp9`&&!this.internalTrack.info.vp9CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.vp9CodecInfo=e&&uo(e.data)}else if(this.internalTrack.info.codec===`av1`&&!this.internalTrack.info.av1CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=e&&po(e.data)}let e={codec:Ji(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}},ps=class extends ds{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}},ms=(e,t)=>{if(e.presentationTimestamps){let n=N(e.presentationTimestamps,t,e=>e.presentationTimestamp);return n===-1?-1:e.presentationTimestamps[n].sampleIndex}else{let n=N(e.sampleTimingEntries,t,e=>e.startDecodeTimestamp);if(n===-1)return-1;let r=e.sampleTimingEntries[n];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},hs=(e,t)=>{if(!e.keySampleIndices)return ms(e,t);if(e.presentationTimestamps){let n=N(e.presentationTimestamps,t,e=>e.presentationTimestamp);if(n===-1)return-1;for(let t=n;t>=0;t--){let n=e.presentationTimestamps[t].sampleIndex;if(or(e.keySampleIndices,n,e=>e)!==-1)return n}return-1}else{let n=ms(e,t),r=N(e.keySampleIndices,n,e=>e);return e.keySampleIndices[r]??-1}},gs=(e,t)=>{let n=N(e.sampleTimingEntries,t,e=>e.startIndex),r=e.sampleTimingEntries[n];if(!r||r.startIndex+r.count<=t)return null;let i=r.startDecodeTimestamp+(t-r.startIndex)*r.delta,a=N(e.sampleCompositionTimeOffsets,t,e=>e.startIndex),o=e.sampleCompositionTimeOffsets[a];o&&t-o.startIndex<o.count&&(i+=o.offset);let s=e.sampleSizes[Math.min(t,e.sampleSizes.length-1)],c=N(e.sampleToChunk,t,e=>e.startSampleIndex),l=e.sampleToChunk[c];D(l);let u=l.startChunkIndex+Math.floor((t-l.startSampleIndex)/l.samplesPerChunk),d=e.chunkOffsets[u],f=l.startSampleIndex+(u-l.startChunkIndex)*l.samplesPerChunk,p=0,m=d;if(e.sampleSizes.length===1)m+=s*(t-f),p+=s*l.samplesPerChunk;else for(let n=f;n<f+l.samplesPerChunk;n++){let r=e.sampleSizes[n];n<t&&(m+=r),p+=r}let h=r.delta;if(e.presentationTimestamps){let n=e.presentationTimestampIndexMap[t];D(n!==void 0),n<e.presentationTimestamps.length-1&&(h=e.presentationTimestamps[n+1].presentationTimestamp-i)}return{presentationTimestamp:i,duration:h,sampleOffset:m,sampleSize:s,chunkOffset:d,chunkSize:p,isKeyFrame:e.keySampleIndices?or(e.keySampleIndices,t,e=>e)!==-1:!0}},_s=(e,t)=>{if(!e.keySampleIndices)return t+1;let n=N(e.keySampleIndices,t,e=>e);return e.keySampleIndices[n+1]??-1},vs=(e,t)=>{e.startTimestamp+=t,e.endTimestamp+=t;for(let n of e.samples)n.presentationTimestamp+=t;for(let n of e.presentationTimestamps)n.presentationTimestamp+=t},ys=e=>{let[t,n]=e,r=Math.atan2(n,t);return Number.isFinite(r)?r*(180/Math.PI):0},bs=e=>e.sampleSizes.length===0,xs=e=>e.currentFragmentState?e.currentFragmentState.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null}:e.encryptionAuxInfo??={defaultSampleInfoSize:0,sampleSizes:null,sampleCount:0,offset:null,resolved:null},Ss=async(e,t,n)=>{if(n.resolved)return n.resolved;if(n.offset===null||n.sampleCount===0)throw Error(`Incomplete saiz/saio info; cannot resolve encryption data.`);let r=0;if(n.defaultSampleInfoSize>0)r=n.defaultSampleInfoSize*n.sampleCount;else{D(n.sampleSizes);for(let e=0;e<n.sampleCount;e++)r+=n.sampleSizes[e]}let i=e.requestSlice(n.offset,r);if(i instanceof Promise&&(i=await i),!i)throw Error(`Failed to read auxiliary encryption info.`);let a=t.defaultPerSampleIvSize;D(a!==null);let o=[];for(let e=0;e<n.sampleCount;e++){let r=n.defaultSampleInfoSize>0?n.defaultSampleInfoSize:n.sampleSizes[e],s=new Uint8Array(16);a>0?s.set(H(i,a),0):s.set(t.defaultConstantIv,0);let c=null;if(r>a){let e=Ep(i);c=[];for(let t=0;t<e;t++){let e=Ep(i),t=W(i);c.push({clearLen:e,protectedLen:t})}}o.push({iv:s,subsamples:c})}return n.resolved=o,o},Cs=async(e,t,n,r)=>{D(e.encryptionInfo);let i=e.encryptionInfo;D(i.defaultKid!==null);let a=i.defaultKid,o,s=e.demuxer.decryptionKeyCache.get(a);if(s)o=await s;else{if(!e.demuxer.input._formatOptions.isobmff?.resolveKeyId)throw Error(`Encrypted media samples encountered. To decrypt them, please provide a callback for InputOptions.formatOptions.isobmff.resolveKeyId.`);let t=(async()=>{let t=e.demuxer.psshBoxes;if(r){t=[...t,...r.psshBoxes].filter(e=>e.keyIds===null||e.keyIds.includes(a));for(let e=0;e<t.length-1;e++)for(let n=e+1;n<t.length;n++)Bo(t[e],t[n])&&(t.splice(n,1),n--)}let n=await e.demuxer.input._formatOptions.isobmff.resolveKeyId({keyId:a,psshBoxes:t});if(!(typeof n==`string`&&n.length===32&&nr.test(n)||n instanceof Uint8Array&&n.byteLength===16))throw TypeError(`resolveKeyId must return a 32-character hex string or a 16-byte Uint8Array containing the decryption key.`);return n instanceof Uint8Array?n:ir(n)})();e.demuxer.decryptionKeyCache.set(a,t),o=await t}return i.scheme===`cenc`||i.scheme===`cens`?ws(o,i,t,n):Ts(o,i,t,n)},ws=async(e,t,n,r)=>{let i=new Uint8Array(16);i.set(n.iv,0);let a=await crypto.subtle.importKey(`raw`,e,{name:`AES-CTR`},!1,[`decrypt`]),o=async e=>{let t=await crypto.subtle.decrypt({name:`AES-CTR`,counter:i,length:64},a,e);return new Uint8Array(t)};if(!n.subsamples)return o(r);D(t.defaultCryptByteBlock!==null&&t.defaultSkipByteBlock!==null);let s=Es(n.subsamples,t.defaultCryptByteBlock,t.defaultSkipByteBlock),c=0;for(let e of s)for(let t of e.perSubsample)c+=t.length;let l=new Uint8Array(c),u=0;for(let e of s)for(let t of e.perSubsample)l.set(r.subarray(t.offset,t.offset+t.length),u),u+=t.length;let d=await o(l),f=new Uint8Array(r),p=0;for(let e of s)for(let t of e.perSubsample)f.set(d.subarray(p,p+t.length),t.offset),p+=t.length;return f},Ts=(e,t,n,r)=>{let i=new ss;i.init({key:e,iv:n.iv});let a=t.defaultCryptByteBlock,o=t.defaultSkipByteBlock;if(D(a!==null&&o!==null),!n.subsamples){let e=new Uint8Array(r),t=Math.floor(r.length/16);for(let n=0;n<t;n++){let t=n*16;i.in.set(r.subarray(t,t+16)),i.decrypt(),e.set(i.out,t)}return e}if(a===0&&o===0)throw Error(`cbcs with subsamples requires pattern encryption.`);let s=new Uint8Array(r),c=Es(n.subsamples,a,o),l=new DataView(n.iv.buffer,n.iv.byteOffset,16);for(let e of c){i.iv[0]=l.getUint32(0,!1),i.iv[1]=l.getUint32(4,!1),i.iv[2]=l.getUint32(8,!1),i.iv[3]=l.getUint32(12,!1);for(let t of e.perSubsample){let e=t.length/16;for(let n=0;n<e;n++){let e=t.offset+n*16;i.in.set(r.subarray(e,e+16)),i.decrypt(),s.set(i.out,e)}}}return s},Es=(e,t,n)=>{let r=[],i=t!==0||n!==0,a=0;for(let o of e){a+=o.clearLen;let e=[];if(!i)o.protectedLen>0&&e.push({offset:a,length:o.protectedLen}),a+=o.protectedLen;else{let r=o.protectedLen,i=a;for(;r>0&&!(r<16*t);){let a=16*t;e.push({offset:i,length:a}),i+=a,r-=a;let o=Math.min(16*n,r);i+=o,r-=o}a+=o.protectedLen}r.push({perSubsample:e})}return r}}));function Os(e){if(e===void 0)throw Error(`Undefined element size is used in a place where it is not supported.`)}var ks,As,js,Ms,z,Ns,Ps,Fs,Is,Ls,Rs,zs,Bs,Vs,Hs,Us,Ws,Gs,B,Ks,qs,Js,Ys,Xs,Zs,Qs,$s,ec,tc,nc=n((()=>{F(),Bp(),ks=class{constructor(e){this.value=e}},As=class{constructor(e){this.value=e}},js=class{constructor(e){this.value=e}},Ms=class{constructor(e){this.value=e}},(function(e){e[e.EBML=440786851]=`EBML`,e[e.EBMLVersion=17030]=`EBMLVersion`,e[e.EBMLReadVersion=17143]=`EBMLReadVersion`,e[e.EBMLMaxIDLength=17138]=`EBMLMaxIDLength`,e[e.EBMLMaxSizeLength=17139]=`EBMLMaxSizeLength`,e[e.DocType=17026]=`DocType`,e[e.DocTypeVersion=17031]=`DocTypeVersion`,e[e.DocTypeReadVersion=17029]=`DocTypeReadVersion`,e[e.Void=236]=`Void`,e[e.Segment=408125543]=`Segment`,e[e.SeekHead=290298740]=`SeekHead`,e[e.Seek=19899]=`Seek`,e[e.SeekID=21419]=`SeekID`,e[e.SeekPosition=21420]=`SeekPosition`,e[e.Duration=17545]=`Duration`,e[e.Info=357149030]=`Info`,e[e.TimestampScale=2807729]=`TimestampScale`,e[e.MuxingApp=19840]=`MuxingApp`,e[e.WritingApp=22337]=`WritingApp`,e[e.Tracks=374648427]=`Tracks`,e[e.TrackEntry=174]=`TrackEntry`,e[e.TrackNumber=215]=`TrackNumber`,e[e.TrackUID=29637]=`TrackUID`,e[e.TrackType=131]=`TrackType`,e[e.FlagEnabled=185]=`FlagEnabled`,e[e.FlagDefault=136]=`FlagDefault`,e[e.FlagForced=21930]=`FlagForced`,e[e.FlagOriginal=21934]=`FlagOriginal`,e[e.FlagHearingImpaired=21931]=`FlagHearingImpaired`,e[e.FlagVisualImpaired=21932]=`FlagVisualImpaired`,e[e.FlagCommentary=21935]=`FlagCommentary`,e[e.FlagLacing=156]=`FlagLacing`,e[e.Name=21358]=`Name`,e[e.Language=2274716]=`Language`,e[e.LanguageBCP47=2274717]=`LanguageBCP47`,e[e.CodecID=134]=`CodecID`,e[e.CodecPrivate=25506]=`CodecPrivate`,e[e.CodecDelay=22186]=`CodecDelay`,e[e.SeekPreRoll=22203]=`SeekPreRoll`,e[e.DefaultDuration=2352003]=`DefaultDuration`,e[e.Video=224]=`Video`,e[e.PixelWidth=176]=`PixelWidth`,e[e.PixelHeight=186]=`PixelHeight`,e[e.DisplayWidth=21680]=`DisplayWidth`,e[e.DisplayHeight=21690]=`DisplayHeight`,e[e.DisplayUnit=21682]=`DisplayUnit`,e[e.AlphaMode=21440]=`AlphaMode`,e[e.Audio=225]=`Audio`,e[e.SamplingFrequency=181]=`SamplingFrequency`,e[e.Channels=159]=`Channels`,e[e.BitDepth=25188]=`BitDepth`,e[e.SimpleBlock=163]=`SimpleBlock`,e[e.BlockGroup=160]=`BlockGroup`,e[e.Block=161]=`Block`,e[e.BlockAdditions=30113]=`BlockAdditions`,e[e.BlockMore=166]=`BlockMore`,e[e.BlockAdditional=165]=`BlockAdditional`,e[e.BlockAddID=238]=`BlockAddID`,e[e.BlockDuration=155]=`BlockDuration`,e[e.ReferenceBlock=251]=`ReferenceBlock`,e[e.Cluster=524531317]=`Cluster`,e[e.Timestamp=231]=`Timestamp`,e[e.Cues=475249515]=`Cues`,e[e.CuePoint=187]=`CuePoint`,e[e.CueTime=179]=`CueTime`,e[e.CueTrackPositions=183]=`CueTrackPositions`,e[e.CueTrack=247]=`CueTrack`,e[e.CueClusterPosition=241]=`CueClusterPosition`,e[e.Colour=21936]=`Colour`,e[e.MatrixCoefficients=21937]=`MatrixCoefficients`,e[e.TransferCharacteristics=21946]=`TransferCharacteristics`,e[e.Primaries=21947]=`Primaries`,e[e.Range=21945]=`Range`,e[e.Projection=30320]=`Projection`,e[e.ProjectionType=30321]=`ProjectionType`,e[e.ProjectionPoseRoll=30325]=`ProjectionPoseRoll`,e[e.Attachments=423732329]=`Attachments`,e[e.AttachedFile=24999]=`AttachedFile`,e[e.FileDescription=18046]=`FileDescription`,e[e.FileName=18030]=`FileName`,e[e.FileMediaType=18016]=`FileMediaType`,e[e.FileData=18012]=`FileData`,e[e.FileUID=18094]=`FileUID`,e[e.Chapters=272869232]=`Chapters`,e[e.Tags=307544935]=`Tags`,e[e.Tag=29555]=`Tag`,e[e.Targets=25536]=`Targets`,e[e.TargetTypeValue=26826]=`TargetTypeValue`,e[e.TargetType=25546]=`TargetType`,e[e.TagTrackUID=25541]=`TagTrackUID`,e[e.TagEditionUID=25545]=`TagEditionUID`,e[e.TagChapterUID=25540]=`TagChapterUID`,e[e.TagAttachmentUID=25542]=`TagAttachmentUID`,e[e.SimpleTag=26568]=`SimpleTag`,e[e.TagName=17827]=`TagName`,e[e.TagLanguage=17530]=`TagLanguage`,e[e.TagString=17543]=`TagString`,e[e.TagBinary=17541]=`TagBinary`,e[e.ContentEncodings=28032]=`ContentEncodings`,e[e.ContentEncoding=25152]=`ContentEncoding`,e[e.ContentEncodingOrder=20529]=`ContentEncodingOrder`,e[e.ContentEncodingScope=20530]=`ContentEncodingScope`,e[e.ContentCompression=20532]=`ContentCompression`,e[e.ContentCompAlgo=16980]=`ContentCompAlgo`,e[e.ContentCompSettings=16981]=`ContentCompSettings`,e[e.ContentEncryption=20533]=`ContentEncryption`})(z||={}),Ns=[z.EBML,z.Segment],Ps=[z.SeekHead,z.Info,z.Cluster,z.Tracks,z.Cues,z.Attachments,z.Chapters,z.Tags],Fs=[...Ns,...Ps],Is=e=>e<256?1:e<65536?2:e<1<<24?3:e<2**32?4:e<2**40?5:6,Ls=e=>e<1n<<8n?1:e<1n<<16n?2:e<1n<<24n?3:e<1n<<32n?4:e<1n<<40n?5:e<1n<<48n?6:e<1n<<56n?7:8,Rs=e=>e>=-64&&e<64?1:e>=-8192&&e<8192?2:e>=-1048576&&e<1<<20?3:e>=-134217728&&e<1<<27?4:e>=-(2**34)&&e<2**34?5:6,zs=e=>{if(e<127)return 1;if(e<16383)return 2;if(e<(1<<21)-1)return 3;if(e<(1<<28)-1)return 4;if(e<2**35-1)return 5;if(e<2**42-1)return 6;throw Error(`EBML varint size not supported `+e)},Bs=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap,this.dataOffsets=new WeakMap}writeByte(e){this.helperView.setUint8(0,e),this.writer.write(this.helper.subarray(0,1))}writeFloat32(e){this.helperView.setFloat32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeFloat64(e){this.helperView.setFloat64(0,e,!1),this.writer.write(this.helper)}writeUnsignedInt(e,t=Is(e)){let n=0;switch(t){case 6:this.helperView.setUint8(n++,e/2**40|0);case 5:this.helperView.setUint8(n++,e/2**32|0);case 4:this.helperView.setUint8(n++,e>>24);case 3:this.helperView.setUint8(n++,e>>16);case 2:this.helperView.setUint8(n++,e>>8);case 1:this.helperView.setUint8(n++,e);break;default:throw Error(`Bad unsigned int size `+t)}this.writer.write(this.helper.subarray(0,n))}writeUnsignedBigInt(e,t=Ls(e)){let n=0;for(let r=t-1;r>=0;r--)this.helperView.setUint8(n++,Number(e>>BigInt(r*8)&255n));this.writer.write(this.helper.subarray(0,n))}writeSignedInt(e,t=Rs(e)){e<0&&(e+=2**(t*8)),this.writeUnsignedInt(e,t)}writeVarInt(e,t=zs(e)){let n=0;switch(t){case 1:this.helperView.setUint8(n++,128|e);break;case 2:this.helperView.setUint8(n++,64|e>>8),this.helperView.setUint8(n++,e);break;case 3:this.helperView.setUint8(n++,32|e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 4:this.helperView.setUint8(n++,16|e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 5:this.helperView.setUint8(n++,8|e/2**32&7),this.helperView.setUint8(n++,e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;case 6:this.helperView.setUint8(n++,4|e/2**40&3),this.helperView.setUint8(n++,e/2**32|0),this.helperView.setUint8(n++,e>>24),this.helperView.setUint8(n++,e>>16),this.helperView.setUint8(n++,e>>8),this.helperView.setUint8(n++,e);break;default:throw Error(`Bad EBML varint size `+t)}this.writer.write(this.helper.subarray(0,n))}writeAsciiString(e){this.writer.write(new Uint8Array(e.split(``).map(e=>e.charCodeAt(0))))}writeEBML(e){if(e!==null)if(e instanceof Uint8Array)this.writer.write(e);else if(Array.isArray(e))for(let t of e)this.writeEBML(t);else if(this.offsets.set(e,this.writer.getPos()),this.writeUnsignedInt(e.id),Array.isArray(e.data)){let t=this.writer.getPos(),n=e.size===-1?1:e.size??4;e.size===-1?this.writeByte(255):this.writer.seek(this.writer.getPos()+n);let r=this.writer.getPos();if(this.dataOffsets.set(e,r),this.writeEBML(e.data),e.size!==-1){let e=this.writer.getPos()-r,i=this.writer.getPos();this.writer.seek(t),this.writeVarInt(e,n),this.writer.seek(i)}}else if(typeof e.data==`number`){let t=e.size??Is(e.data);this.writeVarInt(t),this.writeUnsignedInt(e.data,t)}else if(typeof e.data==`bigint`){let t=e.size??Ls(e.data);this.writeVarInt(t),this.writeUnsignedBigInt(e.data,t)}else if(typeof e.data==`string`)this.writeVarInt(e.data.length),this.writeAsciiString(e.data);else if(e.data instanceof Uint8Array)this.writeVarInt(e.data.byteLength,e.size),this.writer.write(e.data);else if(e.data instanceof ks)this.writeVarInt(4),this.writeFloat32(e.data.value);else if(e.data instanceof As)this.writeVarInt(8),this.writeFloat64(e.data.value);else if(e.data instanceof js){let t=e.size??Rs(e.data.value);this.writeVarInt(t),this.writeSignedInt(e.data.value,t)}else if(e.data instanceof Ms){let t=M.encode(e.data.value);this.writeVarInt(t.length),this.writer.write(t)}else pr(e.data)}},Vs=8,Hs=2,Us=2*Vs,Ws=e=>{if(e.remainingLength<1)return null;let t=U(e);if(e.skip(-1),t===0)return null;let n=1,r=128;for(;(t&r)===0;)n++,r>>=1;return e.remainingLength<n?null:n},Gs=e=>{if(e.remainingLength<1)return null;let t=U(e);if(t===0)return null;let n=1,r=128;for(;(t&r)===0;)n++,r>>=1;if(e.remainingLength<n-1)return null;let i=t&r-1;for(let t=1;t<n;t++)i*=256,i+=U(e);return i},B=(e,t)=>{if(t<1||t>8)throw Error(`Bad unsigned int size `+t);let n=0;for(let r=0;r<t;r++)n*=256,n+=U(e);return n},Ks=(e,t)=>{if(t<1)throw Error(`Bad unsigned int size `+t);let n=0n;for(let r=0;r<t;r++)n<<=8n,n+=BigInt(U(e));return n},qs=e=>{let t=Ws(e);return t===null||e.remainingLength<t?null:B(e,t)},Js=e=>{if(e.remainingLength<1)return null;if(U(e)===255)return;e.skip(-1);let t=Gs(e);if(t===null)return null;if(t!==72057594037927940)return t},Ys=e=>{D(e.remainingLength>=Hs);let t=qs(e);if(t===null)return null;let n=Js(e);return n===null?null:{id:t,size:n}},Xs=(e,t)=>{let n=H(e,t),r=0;for(;r<t&&n[r]!==0;)r+=1;return String.fromCharCode(...n.subarray(0,r))},Zs=(e,t)=>{let n=H(e,t),r=0;for(;r<t&&n[r]!==0;)r+=1;return Wn.decode(n.subarray(0,r))},Qs=(e,t)=>{if(t===0)return 0;if(t!==4&&t!==8)throw Error(`Bad float size `+t);return t===4?Lp(e):Rp(e)},$s=async(e,t,n,r)=>{let i=new Set(n),a=t;for(;r===null||a<r;){let t=e.requestSliceRange(a,Hs,Us);if(t instanceof Promise&&(t=await t),!t)break;let n=Ys(t);if(!n)break;if(i.has(n.id))return{pos:a,found:!0};Os(n.size),a=t.filePos+n.size}return{pos:r!==null&&r>a?r:a,found:!1}},ec=async(e,t,n,r)=>{let i=2**16,a=new Set(n),o=t;for(;o<r;){let t=e.requestSliceRange(o,0,Math.min(i,r-o));if(t instanceof Promise&&(t=await t),!t||t.length<Vs)break;for(let e=0;e<t.length-Vs;e++){t.filePos=o;let e=qs(t);if(e!==null&&a.has(e))return o;o++}}return null},tc={avc:`V_MPEG4/ISO/AVC`,hevc:`V_MPEGH/ISO/HEVC`,vp8:`V_VP8`,vp9:`V_VP9`,av1:`V_AV1`,aac:`A_AAC`,mp3:`A_MPEG/L3`,opus:`A_OPUS`,vorbis:`A_VORBIS`,flac:`A_FLAC`,ac3:`A_AC3`,eac3:`A_EAC3`,"pcm-u8":`A_PCM/INT/LIT`,"pcm-s16":`A_PCM/INT/LIT`,"pcm-s16be":`A_PCM/INT/BIG`,"pcm-s24":`A_PCM/INT/LIT`,"pcm-s24be":`A_PCM/INT/BIG`,"pcm-s32":`A_PCM/INT/LIT`,"pcm-s32be":`A_PCM/INT/BIG`,"pcm-f32":`A_PCM/FLOAT/IEEE`,"pcm-f64":`A_PCM/FLOAT/IEEE`,webvtt:`S_TEXT/WEBVTT`}})),rc,ic=n((()=>{rc=e=>{let t=(e.hasVideo?`video/`:e.hasAudio?`audio/`:`application/`)+(e.isWebM?`webm`:`x-matroska`);if(e.codecStrings.length>0){let n=[...new Set(e.codecStrings.filter(Boolean))];t+=`; codecs="${n.join(`, `)}"`}return t}})),ac,oc,sc,cc,lc,uc,dc,fc,pc,mc=n((()=>{No(),ma(),Fo(),Ei(),F(),Lo(),nc(),ic(),Bp(),(function(e){e[e.None=0]=`None`,e[e.Xiph=1]=`Xiph`,e[e.FixedSize=2]=`FixedSize`,e[e.Ebml=3]=`Ebml`})(ac||={}),(function(e){e[e.Block=1]=`Block`,e[e.Private=2]=`Private`,e[e.Next=4]=`Next`})(oc||={}),(function(e){e[e.Zlib=0]=`Zlib`,e[e.Bzlib=1]=`Bzlib`,e[e.lzo1x=2]=`lzo1x`,e[e.HeaderStripping=3]=`HeaderStripping`})(sc||={}),cc=[{id:z.SeekHead,flag:`seekHeadSeen`},{id:z.Info,flag:`infoSeen`},{id:z.Tracks,flag:`tracksSeen`},{id:z.Cues,flag:`cuesSeen`}],lc=10*2**20,uc=class extends Po{constructor(e){super(e),this.readMetadataPromise=null,this.segments=[],this.currentSegment=null,this.currentTrack=null,this.currentCluster=null,this.currentBlock=null,this.currentBlockAdditional=null,this.currentCueTime=null,this.currentDecodingInstruction=null,this.currentTagTargetIsMovie=!0,this.currentSimpleTagName=null,this.currentAttachedFile=null,this.isWebM=!1,this.reader=e._reader}async getTrackBackings(){return await this.readMetadata(),this.segments.flatMap(e=>e.tracks.map(e=>e.trackBacking))}async getMimeType(){await this.readMetadata();let e=await this.getTrackBackings(),t=await Promise.all(e.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)));return rc({isWebM:this.isWebM,hasVideo:this.segments.some(e=>e.tracks.some(e=>e.info?.type===`video`)),hasAudio:this.segments.some(e=>e.tracks.some(e=>e.info?.type===`audio`)),codecStrings:t.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(let e of this.segments)e.metadataTagsCollected||=(this.reader.fileSize!==null&&await this.loadSegmentMetadata(e),!0);let e={};for(let t of this.segments)e={...e,...t.metadataTags};return e}readMetadata(){return this.readMetadataPromise??=(async()=>{let e=0;for(;;){let t=this.reader.requestSliceRange(e,Hs,Us);if(t instanceof Promise&&(t=await t),!t)break;let n=Ys(t);if(!n)break;let r=n.id,i=n.size,a=t.filePos;if(r===z.EBML){Os(i);let e=this.reader.requestSlice(a,i);if(e instanceof Promise&&(e=await e),!e)break;this.readContiguousElements(e)}else if(r===z.Segment){if(await this.readSegment(a,i),i===void 0||this.reader.fileSize===null)break}else if(r===z.Cluster){if(this.reader.fileSize===null)break;i===void 0&&(i=(await $s(this.reader,a,Fs,this.reader.fileSize)).pos-a);let e=O(this.segments);e&&(e.elementEndPos=a+i)}Os(i),e=a+i}})()}async readSegment(e,t){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:t===void 0?null:e+t,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let n=e;for(;this.currentSegment.elementEndPos===null||n<this.currentSegment.elementEndPos;){let e=this.reader.requestSliceRange(n,Hs,Us);if(e instanceof Promise&&(e=await e),!e)break;let t=n,r=Ys(e);if(!r||!Ps.includes(r.id)&&r.id!==z.Void){let e=await ec(this.reader,t,Ps,Math.min(this.currentSegment.elementEndPos??1/0,t+lc));if(e){n=e;continue}else break}let{id:i,size:a}=r,o=e.filePos,s=cc.findIndex(e=>e.id===i);if(s!==-1){let e=cc[s].flag;this.currentSegment[e]=!0,Os(a);let t=this.reader.requestSlice(o,a);t instanceof Promise&&(t=await t),t&&this.readContiguousElements(t)}else if(i===z.Tags||i===z.Attachments){i===z.Tags?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,Os(a);let e=this.reader.requestSlice(o,a);e instanceof Promise&&(e=await e),e&&this.readContiguousElements(e)}else if(i===z.Cluster){this.currentSegment.clusterSeekStartPos=t;break}if(a===void 0)break;n=o+a}if(this.currentSegment.seekEntries.sort((e,t)=>e.segmentPosition-t.segmentPosition),this.reader.fileSize!==null)for(let t of this.currentSegment.seekEntries){let n=cc.find(e=>e.id===t.id);if(!n||this.currentSegment[n.flag])continue;let r=this.reader.requestSliceRange(e+t.segmentPosition,Hs,Us);if(r instanceof Promise&&(r=await r),!r)continue;let i=Ys(r);if(!i)continue;let{id:a,size:o}=i;if(a!==n.id)continue;Os(o),this.currentSegment[n.flag]=!0;let s=this.reader.requestSlice(r.filePos,o);s instanceof Promise&&(s=await s),s&&this.readContiguousElements(s)}this.currentSegment.timestampScale===-1&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e9/1e6);for(let e of this.currentSegment.tracks)e.defaultDurationNs!==null&&(e.defaultDuration=this.currentSegment.timestampFactor*e.defaultDurationNs/1e9);let r=new Map(this.currentSegment.tracks.map(e=>[e.id,e]));for(let e of this.currentSegment.cuePoints){let t=r.get(e.trackId);t&&t.cuePoints.push(e)}for(let e of this.currentSegment.tracks){e.cuePoints.sort((e,t)=>e.time-t.time);for(let t=0;t<e.cuePoints.length-1;t++){let n=e.cuePoints[t],r=e.cuePoints[t+1];n.time===r.time&&(e.cuePoints.splice(t+1,1),t--)}}let i=null,a=-1/0;for(let e of this.currentSegment.tracks)e.cuePoints.length>a&&(a=e.cuePoints.length,i=e);for(let e of this.currentSegment.tracks)e.cuePoints.length===0&&(e.cuePoints=i.cuePoints);this.currentSegment=null}async readCluster(e,t){if(t.lastReadCluster?.elementStartPos===e)return t.lastReadCluster;let n=this.reader.requestSliceRange(e,Hs,Us);n instanceof Promise&&(n=await n),D(n);let r=e,i=Ys(n);D(i);let a=i.id;D(a===z.Cluster);let o=i.size,s=n.filePos;o===void 0&&(o=(await $s(this.reader,s,Fs,t.elementEndPos)).pos-s);let c=this.reader.requestSlice(s,o);c instanceof Promise&&(c=await c);let l={segment:t,elementStartPos:r,elementEndPos:s+o,dataStartPos:s,timestamp:-1,trackData:new Map};this.currentCluster=l,c&&(l.elementEndPos=this.readContiguousElements(c,Fs));for(let[,e]of l.trackData){let t=e.track;D(e.blocks.length>0);let n=!1;for(let t=0;t<e.blocks.length;t++){let r=e.blocks[t];r.timestamp+=l.timestamp,n||=r.lacing!==ac.None}e.presentationTimestamps=e.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp);for(let n=0;n<e.presentationTimestamps.length;n++){let r=e.presentationTimestamps[n],i=e.blocks[r.blockIndex];e.firstKeyFrameTimestamp===null&&i.isKeyFrame&&(e.firstKeyFrameTimestamp=i.timestamp),n<e.presentationTimestamps.length-1?i.duration=e.presentationTimestamps[n+1].timestamp-i.timestamp:i.duration===0&&t.defaultDuration!=null&&i.lacing===ac.None&&(i.duration=t.defaultDuration)}n&&(this.expandLacedBlocks(e.blocks,t),e.presentationTimestamps=e.blocks.map((e,t)=>({timestamp:e.timestamp,blockIndex:t})).sort((e,t)=>e.timestamp-t.timestamp));let i=e.blocks[e.presentationTimestamps[0].blockIndex],a=e.blocks[O(e.presentationTimestamps).blockIndex];e.startTimestamp=i.timestamp,e.endTimestamp=a.timestamp+a.duration;let o=N(t.clusterPositionCache,e.startTimestamp,e=>e.startTimestamp);(o===-1||t.clusterPositionCache[o].elementStartPos!==r)&&t.clusterPositionCache.splice(o+1,0,{elementStartPos:l.elementStartPos,startTimestamp:e.startTimestamp})}return t.lastReadCluster=l,l}getTrackDataInCluster(e,t){let n=e.trackData.get(t);if(!n){let r=e.segment.tracks.find(e=>e.id===t);if(!r)return null;n={track:r,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(t,n)}return n}expandLacedBlocks(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(r.lacing===ac.None)continue;r.decoded||=(r.data=this.decodeBlockData(t,r.data),!0);let i=Cp.tempFromBytes(r.data),a=[],o=U(i)+1;switch(r.lacing){case ac.Xiph:{let e=0;for(let t=0;t<o-1;t++){let t=0;for(;i.bufferPos<i.length;){let n=U(i);if(t+=n,n<255){a.push(t),e+=t;break}}}a.push(i.length-(i.bufferPos+e))}break;case ac.FixedSize:{let e=i.length-1,t=Math.floor(e/o);for(let e=0;e<o;e++)a.push(t)}break;case ac.Ebml:{let e=Gs(i);D(e!==null);let t=e;a.push(t);let n=t;for(let e=1;e<o-1;e++){let e=i.bufferPos,r=Gs(i);D(r!==null);let o=r-((1<<(i.bufferPos-e)*7-1)-1);t+=o,a.push(t),n+=t}a.push(i.length-(i.bufferPos+n))}break;default:D(!1)}D(a.length===o),e.splice(n,1);let s=r.duration||o*(t.defaultDuration??0);for(let t=0;t<o;t++){let c=a[t],l=H(i,c),u=r.timestamp+s*t/o,d=s/o;e.splice(n+t,0,{timestamp:u,duration:d,isKeyFrame:r.isKeyFrame,data:l,lacing:ac.None,decoded:!0,mainAdditional:r.mainAdditional})}n+=o,n--}}async loadSegmentMetadata(e){for(let t of e.seekEntries){if(!(t.id===z.Tags&&!e.tagsSeen)&&!(t.id===z.Attachments&&!e.attachmentsSeen))continue;let n=this.reader.requestSliceRange(e.dataStartPos+t.segmentPosition,Hs,Us);if(n instanceof Promise&&(n=await n),!n)continue;let r=Ys(n);if(!r||r.id!==t.id)continue;let{size:i}=r;Os(i),D(!this.currentSegment),this.currentSegment=e;let a=this.reader.requestSlice(n.filePos,i);a instanceof Promise&&(a=await a),a&&this.readContiguousElements(a),this.currentSegment=null,t.id===z.Tags?e.tagsSeen=!0:t.id===z.Attachments&&(e.attachmentsSeen=!0)}}readContiguousElements(e,t){for(;e.remainingLength>=Hs;){let n=e.filePos;if(!this.traverseElement(e,t))return n}return e.filePos}traverseElement(e,t){let n=Ys(e);if(!n||t&&t.includes(n.id))return!1;let{id:r,size:i}=n,a=e.filePos;switch(Os(i),r){case z.DocType:this.isWebM=Xs(e,i)===`webm`;break;case z.Seek:{if(!this.currentSegment)break;let t={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(t),this.readContiguousElements(e.slice(a,i)),(t.id===-1||t.segmentPosition===-1)&&this.currentSegment.seekEntries.pop()}break;case z.SeekID:{let t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.id=B(e,i)}break;case z.SeekPosition:{let t=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!t)break;t.segmentPosition=B(e,i)}break;case z.TimestampScale:if(!this.currentSegment)break;this.currentSegment.timestampScale=B(e,i),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale;break;case z.Duration:if(!this.currentSegment)break;this.currentSegment.duration=Qs(e,i);break;case z.TrackEntry:if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...wi,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(a,i)),!this.currentTrack))break;if(this.currentTrack.decodingInstructions.some(e=>e.data?.type!==`decompress`||e.scope!==oc.Block||e.data.algorithm!==sc.HeaderStripping)&&(console.warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&this.currentTrack.id!==-1&&this.currentTrack.codecId&&this.currentTrack.info){let e=this.currentTrack.codecId.indexOf(`/`),t=e===-1?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,e);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 e=this.currentTrack.info.displayWidth*this.currentTrack.info.height,t=this.currentTrack.info.displayHeight*this.currentTrack.info.width;e>0&&t>0&&(e>t?this.currentTrack.info.squarePixelWidth=Math.round(this.currentTrack.info.width*e/t):this.currentTrack.info.squarePixelHeight=Math.round(this.currentTrack.info.height*t/e))}this.currentTrack.codecId===tc.avc?(this.currentTrack.info.codec=`avc`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===tc.hevc?(this.currentTrack.info.codec=`hevc`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===tc.vp8?this.currentTrack.info.codec=`vp8`:t===tc.vp9?this.currentTrack.info.codec=`vp9`:t===tc.av1&&(this.currentTrack.info.codec=`av1`);let e=this.currentTrack;this.currentTrack.trackBacking=new fc(e),this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type===`audio`){t===tc.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===tc.mp3?this.currentTrack.info.codec=`mp3`:t===tc.opus?(this.currentTrack.info.codec=`opus`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=$i):t===tc.vorbis?(this.currentTrack.info.codec=`vorbis`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===tc.flac?(this.currentTrack.info.codec=`flac`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===tc.ac3?(this.currentTrack.info.codec=`ac3`,this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):t===tc.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 e=this.currentTrack;this.currentTrack.trackBacking=new pc(e),this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null;break;case z.TrackNumber:if(!this.currentTrack)break;this.currentTrack.id=B(e,i);break;case z.TrackType:{if(!this.currentTrack)break;let t=B(e,i);t===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}:t===2&&(this.currentTrack.info={type:`audio`,numberOfChannels:1,sampleRate:8e3,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case z.FlagEnabled:if(!this.currentTrack)break;B(e,i)||(this.currentTrack=null);break;case z.FlagDefault:if(!this.currentTrack)break;this.currentTrack.disposition.default=!!B(e,i);break;case z.FlagForced:if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!B(e,i);break;case z.FlagOriginal:if(!this.currentTrack)break;this.currentTrack.disposition.original=!!B(e,i);break;case z.FlagHearingImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!B(e,i);break;case z.FlagVisualImpaired:if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!B(e,i);break;case z.FlagCommentary:if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!B(e,i);break;case z.CodecID:if(!this.currentTrack)break;this.currentTrack.codecId=Xs(e,i);break;case z.CodecPrivate:if(!this.currentTrack)break;this.currentTrack.codecPrivate=H(e,i);break;case z.DefaultDuration:if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=B(e,i);break;case z.Name:if(!this.currentTrack)break;this.currentTrack.name=Zs(e,i);break;case z.Language:if(!this.currentTrack||this.currentTrack.hasLanguageBcp47)break;this.currentTrack.languageCode=Xs(e,i),kr(this.currentTrack.languageCode)||(this.currentTrack.languageCode=xr);break;case z.LanguageBCP47:{if(!this.currentTrack)break;let t=Xs(e,i).split(`-`)[0];t?this.currentTrack.languageCode=t:this.currentTrack.languageCode=xr,this.currentTrack.hasLanguageBcp47=!0}break;case z.Video:if(this.currentTrack?.info?.type!==`video`)break;this.readContiguousElements(e.slice(a,i));break;case z.PixelWidth:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.width=B(e,i);break;case z.PixelHeight:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.height=B(e,i);break;case z.DisplayWidth:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayWidth=B(e,i);break;case z.DisplayHeight:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayHeight=B(e,i);break;case z.DisplayUnit:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.displayUnit=B(e,i);break;case z.AlphaMode:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.alphaMode=B(e,i)===1;break;case z.Colour:if(this.currentTrack?.info?.type!==`video`)break;this.currentTrack.info.colorSpace={},this.readContiguousElements(e.slice(a,i));break;case z.MatrixCoefficients:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Qn[B(e,i)]??null;this.currentTrack.info.colorSpace.matrix=t}break;case z.Range:if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;this.currentTrack.info.colorSpace.fullRange=B(e,i)===2;break;case z.TransferCharacteristics:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Xn[B(e,i)]??null;this.currentTrack.info.colorSpace.transfer=t}break;case z.Primaries:{if(this.currentTrack?.info?.type!==`video`||!this.currentTrack.info.colorSpace)break;let t=Jn[B(e,i)]??null;this.currentTrack.info.colorSpace.primaries=t}break;case z.Projection:if(this.currentTrack?.info?.type!==`video`)break;this.readContiguousElements(e.slice(a,i));break;case z.ProjectionPoseRoll:{if(this.currentTrack?.info?.type!==`video`)break;let t=-Qs(e,i);try{this.currentTrack.info.rotation=Bn(t)}catch{}}break;case z.Audio:if(this.currentTrack?.info?.type!==`audio`)break;this.readContiguousElements(e.slice(a,i));break;case z.SamplingFrequency:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.sampleRate=Qs(e,i);break;case z.Channels:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.numberOfChannels=B(e,i);break;case z.BitDepth:if(this.currentTrack?.info?.type!==`audio`)break;this.currentTrack.info.bitDepth=B(e,i);break;case z.CuePoint:if(!this.currentSegment)break;this.readContiguousElements(e.slice(a,i)),this.currentCueTime=null;break;case z.CueTime:this.currentCueTime=B(e,i);break;case z.CueTrackPositions:{if(this.currentCueTime===null)break;D(this.currentSegment);let t={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(t),this.readContiguousElements(e.slice(a,i)),(t.trackId===-1||t.clusterPosition===-1)&&this.currentSegment.cuePoints.pop()}break;case z.CueTrack:{let t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;t.trackId=B(e,i)}break;case z.CueClusterPosition:{let t=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!t)break;D(this.currentSegment),t.clusterPosition=this.currentSegment.dataStartPos+B(e,i)}break;case z.Timestamp:if(!this.currentCluster)break;this.currentCluster.timestamp=B(e,i);break;case z.SimpleBlock:{if(!this.currentCluster)break;let t=Gs(e);if(t===null)break;let n=this.getTrackDataInCluster(this.currentCluster,t);if(!n)break;let r=Op(e),o=U(e),s=o>>1&3,c=!!(o&128);n.track.info?.type===`audio`&&n.track.info.codec&&(c=!0);let l=H(e,i-(e.filePos-a)),u=n.track.decodingInstructions.length>0;n.blocks.push({timestamp:r,duration:0,isKeyFrame:c,data:l,lacing:s,decoded:!u,mainAdditional:null})}break;case z.BlockGroup:if(!this.currentCluster)break;this.readContiguousElements(e.slice(a,i)),this.currentBlock=null;break;case z.Block:{if(!this.currentCluster)break;let t=Gs(e);if(t===null)break;let n=this.getTrackDataInCluster(this.currentCluster,t);if(!n)break;let r=Op(e),o=U(e)>>1&3;this.currentBlock={timestamp:r,duration:0,isKeyFrame:!0,data:H(e,i-(e.filePos-a)),lacing:o,decoded:!(n.track.decodingInstructions.length>0),mainAdditional:null},n.blocks.push(this.currentBlock)}break;case z.BlockAdditions:this.readContiguousElements(e.slice(a,i));break;case z.BlockMore:if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(a,i)),this.currentBlockAdditional.data&&this.currentBlockAdditional.addId===1&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null;break;case z.BlockAdditional:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=H(e,i);break;case z.BlockAddID:if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=B(e,i);break;case z.BlockDuration:if(!this.currentBlock)break;this.currentBlock.duration=B(e,i);break;case z.ReferenceBlock:if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1;break;case z.Tag:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(a,i));break;case z.Targets:this.readContiguousElements(e.slice(a,i));break;case z.TargetTypeValue:B(e,i)!==50&&(this.currentTagTargetIsMovie=!1);break;case z.TagTrackUID:case z.TagEditionUID:case z.TagChapterUID:case z.TagAttachmentUID:this.currentTagTargetIsMovie=!1;break;case z.SimpleTag:if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(a,i));break;case z.TagName:this.currentSimpleTagName=Zs(e,i);break;case z.TagString:{if(!this.currentSimpleTagName)break;let t=Zs(e,i);this.processTagValue(this.currentSimpleTagName,t)}break;case z.TagBinary:{if(!this.currentSimpleTagName)break;let t=H(e,i);this.processTagValue(this.currentSimpleTagName,t)}break;case z.AttachedFile:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(a,i));let t=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(t.raw??={},t.raw[this.currentAttachedFile.fileUid.toString()]=new xi(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 e=this.currentAttachedFile.fileName,n=`unknown`;if(e){let t=e.toLowerCase();t.startsWith(`cover.`)?n=`coverFront`:t.startsWith(`back.`)&&(n=`coverBack`)}t.images??=[],t.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:n,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case z.FileUID:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=Ks(e,i);break;case z.FileName:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=Zs(e,i);break;case z.FileMediaType:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=Xs(e,i);break;case z.FileData:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=H(e,i);break;case z.FileDescription:if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=Zs(e,i);break;case z.ContentEncodings:if(!this.currentTrack)break;this.readContiguousElements(e.slice(a,i)),this.currentTrack.decodingInstructions.sort((e,t)=>t.order-e.order);break;case z.ContentEncoding:this.currentDecodingInstruction={order:0,scope:oc.Block,data:null},this.readContiguousElements(e.slice(a,i)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case z.ContentEncodingOrder:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=B(e,i);break;case z.ContentEncodingScope:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=B(e,i);break;case z.ContentCompression:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:`decompress`,algorithm:sc.Zlib,settings:null},this.readContiguousElements(e.slice(a,i));break;case z.ContentCompAlgo:if(this.currentDecodingInstruction?.data?.type!==`decompress`)break;this.currentDecodingInstruction.data.algorithm=B(e,i);break;case z.ContentCompSettings:if(this.currentDecodingInstruction?.data?.type!==`decompress`)break;this.currentDecodingInstruction.data.settings=H(e,i);break;case z.ContentEncryption:if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:`decrypt`};break}return e.filePos=a+i,!0}decodeBlockData(e,t){D(e.decodingInstructions.length>0);let n=t;for(let t of e.decodingInstructions)switch(D(t.data),t.data.type){case`decompress`:switch(t.data.algorithm){case sc.HeaderStripping:if(t.data.settings&&t.data.settings.length>0){let e=t.data.settings,r=new Uint8Array(e.length+n.length);r.set(e,0),r.set(n,e.length),n=r}break;default:}break;default:}return n}processTagValue(e,t){if(!this.currentSegment?.metadataTags)return;let n=this.currentSegment.metadataTags;if(n.raw??={},n.raw[e]??=t,typeof t==`string`)switch(e.toLowerCase()){case`title`:n.title??=t;break;case`description`:n.description??=t;break;case`artist`:n.artist??=t;break;case`album`:n.album??=t;break;case`album_artist`:n.albumArtist??=t;break;case`genre`:n.genre??=t;break;case`comment`:n.comment??=t;break;case`lyrics`:n.lyrics??=t;break;case`date`:{let e=new Date(t);Number.isNaN(e.getTime())||(n.date??=e)}break;case`track_number`:case`part_number`:{let e=t.split(`/`),r=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(r)&&r>0&&(n.trackNumber??=r),i&&Number.isInteger(i)&&i>0&&(n.tracksTotal??=i)}break;case`disc_number`:case`disc`:{let e=t.split(`/`),r=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(r)&&r>0&&(n.discNumber??=r),i&&Number.isInteger(i)&&i>0&&(n.discsTotal??=i)}break}}},dc=class{constructor(e){this.internalTrack=e,this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let e=this.internalTrack.demuxer,t=this.internalTrack.trackBacking.getType(),n=0;for(let r of e.segments)for(let e of r.tracks)if(e.trackBacking.getType()===t&&n++,e===this.internalTrack)break;return n}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.internalTrack.codecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.segment.timestampFactor}isRelativeToUnixEpoch(){return!1}getDisposition(){return this.internalTrack.disposition}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.internalTrack.segment;if(e.duration<=0)return null;let t=e.duration/e.timestampFactor,n=await this.getFirstPacket({metadataOnly:!0});return t+=n?.timestamp??0,t}async getLiveRefreshInterval(){return null}async getFirstPacket(e){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,e)}intoTimescale(e){return Sr(e*this.internalTrack.segment.timestampFactor)}async getPacket(e,t){let n=this.intoTimescale(e);return this.performClusterLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};let r=N(t.presentationTimestamps,n,e=>e.timestamp);return{blockIndex:r===-1?-1:t.presentationTimestamps[r].blockIndex,correctBlockFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextPacket(e,t){let n=this.packetToClusterLocation.get(e);if(n===void 0)throw Error(`Packet was not created from this track.`);return this.performClusterLookup(n.cluster,e=>{if(e===n.cluster){let t=e.trackData.get(this.internalTrack.id);if(n.blockIndex+1<t.blocks.length)return{blockIndex:n.blockIndex+1,correctBlockFound:!0}}else if(e.trackData.get(this.internalTrack.id))return{blockIndex:0,correctBlockFound:!0};return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async getKeyPacket(e,t){let n=this.intoTimescale(e);return this.performClusterLookup(null,e=>{let t=e.trackData.get(this.internalTrack.id);if(!t)return{blockIndex:-1,correctBlockFound:!1};let r=ur(t.presentationTimestamps,e=>t.blocks[e.blockIndex].isKeyFrame&&e.timestamp<=n);return{blockIndex:r===-1?-1:t.presentationTimestamps[r].blockIndex,correctBlockFound:r!==-1&&n<t.endTimestamp}},n,n,t)}async getNextKeyPacket(e,t){let n=this.packetToClusterLocation.get(e);if(n===void 0)throw Error(`Packet was not created from this track.`);return this.performClusterLookup(n.cluster,e=>{if(e===n.cluster){let t=e.trackData.get(this.internalTrack.id).blocks.findIndex((e,t)=>e.isKeyFrame&&t>n.blockIndex);if(t!==-1)return{blockIndex:t,correctBlockFound:!0}}else{let t=e.trackData.get(this.internalTrack.id);if(t&&t.firstKeyFrameTimestamp!==null){let e=t.blocks.findIndex(e=>e.isKeyFrame);return D(e!==-1),{blockIndex:e,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,t)}async fetchPacketInCluster(e,t,n){if(t===-1)return null;let r=e.trackData.get(this.internalTrack.id).blocks[t];D(r),r.decoded||=(r.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,r.data),!0);let i=n.metadataOnly?Io:r.data,a=r.timestamp/this.internalTrack.segment.timestampFactor,o=r.duration/this.internalTrack.segment.timestampFactor,s={};r.mainAdditional&&this.internalTrack.info?.type===`video`&&this.internalTrack.info.alphaMode&&(s.alpha=n.metadataOnly?Io:r.mainAdditional,s.alphaByteLength=r.mainAdditional.byteLength);let c=new R(i,r.isKeyFrame?`key`:`delta`,a,o,e.dataStartPos+t,r.data.byteLength,s);return this.packetToClusterLocation.set(c,{cluster:e,blockIndex:t}),c}async performClusterLookup(e,t,n,r,i){let{demuxer:a,segment:o}=this.internalTrack,s=null,c=null,l=-1;if(e){let{blockIndex:n,correctBlockFound:r}=t(e);if(r)return this.fetchPacketInCluster(e,n,i);n!==-1&&(c=e,l=n)}let u=N(this.internalTrack.cuePoints,n,e=>e.time),d=u===-1?null:this.internalTrack.cuePoints[u],f=N(this.internalTrack.clusterPositionCache,n,e=>e.startTimestamp),p=f===-1?null:this.internalTrack.clusterPositionCache[f],m=Math.max(d?.clusterPosition??0,p?.elementStartPos??0)||null,h;for(e?m===null||e.elementStartPos>=m?(h=e.elementEndPos,s=e):h=m:h=m??o.clusterSeekStartPos;o.elementEndPos===null||h<=o.elementEndPos-Hs;){if(s){let e=s.trackData.get(this.internalTrack.id);if(e&&e.startTimestamp>r)break}let e=a.reader.requestSliceRange(h,Hs,Us);if(e instanceof Promise&&(e=await e),!e)break;let n=h,u=Ys(e);if(!u||!Ps.includes(u.id)&&u.id!==z.Void){let e=await ec(a.reader,n,Ps,Math.min(o.elementEndPos??1/0,n+lc));if(e){h=e;continue}else break}let d=u.id,f=u.size,p=e.filePos;if(d===z.Cluster){s=await a.readCluster(n,o),f=s.elementEndPos-p;let{blockIndex:e,correctBlockFound:r}=t(s);if(r)return this.fetchPacketInCluster(s,e,i);e!==-1&&(c=s,l=e)}f===void 0&&(D(d!==z.Cluster),f=(await $s(a.reader,p,Fs,o.elementEndPos)).pos-p);let m=p+f;if(o.elementEndPos===null){let e=a.reader.requestSliceRange(m,Hs,Us);if(e instanceof Promise&&(e=await e),!e)break;if(qs(e)===z.Segment){o.elementEndPos=m;break}}h=m}if(d&&(!c||c.elementStartPos<d.clusterPosition)){let e=this.internalTrack.cuePoints[u-1];D(!e||e.time<d.time);let n=e?.time??-1/0;return this.performClusterLookup(null,t,n,r,i)}return c?this.fetchPacketInCluster(c,l,i):null}},fc=class extends dc{constructor(e){super(e),this.decoderConfigPromise=null,this.internalTrack=e}getType(){return`video`}getCodec(){return this.internalTrack.info.codec}getCodedWidth(){return this.internalTrack.info.width}getCodedHeight(){return this.internalTrack.info.height}getSquarePixelWidth(){return this.internalTrack.info.squarePixelWidth}getSquarePixelHeight(){return this.internalTrack.info.squarePixelHeight}getRotation(){return this.internalTrack.info.rotation}async getColorSpace(){return{primaries:this.internalTrack.info.colorSpace?.primaries,transfer:this.internalTrack.info.colorSpace?.transfer,matrix:this.internalTrack.info.colorSpace?.matrix,fullRange:this.internalTrack.info.colorSpace?.fullRange}}async canBeTransparent(){return this.internalTrack.info.alphaMode}async getDecoderConfig(){return this.internalTrack.info.codec?this.decoderConfigPromise??=(async()=>{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 t={codec:Ji({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?Ha(e.data):null,hevcCodecInfo:this.internalTrack.info.codec===`hevc`&&e?Qa(e.data):null,vp9CodecInfo:this.internalTrack.info.codec===`vp9`&&e?uo(e.data):null,av1CodecInfo:this.internalTrack.info.codec===`av1`&&e?po(e.data):null}),codedWidth:this.internalTrack.info.width,codedHeight:this.internalTrack.info.height,description:this.internalTrack.info.codecDescription??void 0,colorSpace:this.internalTrack.info.colorSpace??void 0};return(this.internalTrack.info.width!==this.internalTrack.info.squarePixelWidth||this.internalTrack.info.height!==this.internalTrack.info.squarePixelHeight)&&(t.displayAspectWidth=this.internalTrack.info.squarePixelWidth,t.displayAspectHeight=this.internalTrack.info.squarePixelHeight),t})():null}},pc=class extends dc{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}}})),hc,gc=n((()=>{Da(),Bp(),hc=async(e,t,n)=>{let r=2**16,i=t;for(;n===null||i<n;){let t=n===null?r:Math.min(r,n-i),a=e.requestSliceRange(i,ha,t);if(a instanceof Promise&&(a=await a),!a||a.length<ha)break;for(;a.remainingLength>=ha;){let t=a.filePos,n=Ca(W(a),e.fileSize===null?null:e.fileSize-i);if(n.header)return{header:n.header,startPos:i};a.filePos=t+n.bytesAdvanced,i=a.filePos}}return null}})),_c,vc,yc=n((()=>{Fo(),Ei(),F(),Lo(),Da(),Qp(),gc(),Bp(),_c=class extends Po{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 tr,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 Error(`No valid MP3 frame found.`);this.trackBackings=[new vc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Wp);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Jp(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=await hc(this.reader,this.lastLoadedPos,this.reader.fileSize);if(!e){this.lastSampleLoaded=!0;return}let t=e.header;this.lastLoadedPos=e.startPos+t.totalSize-1;let n=Sa(t.mpegVersionId,t.channel),r=this.reader.requestSlice(e.startPos+n,4);if(r instanceof Promise&&(r=await r),r){let t=W(r);if(t===va||t===ya){if(!this.xingData){let t=this.reader.requestSlice(e.startPos+n+4,12);if(t instanceof Promise&&(t=await t),t){let e=j(H(t,12)),n=e.getUint32(0,!1);this.xingData={frameCount:n&Ea.FrameCount?e.getUint32(4,!1):null,fileSize:n&Ea.FileSize?e.getUint32(8,!1):null}}}return}}this.firstFrameHeader||(this.firstFrameHeader=t,this.firstFrameHeaderPos=e.startPos),t.sampleRate!==this.firstFrameHeader.sampleRate&&console.warn(`MP3 changed sample rate mid-file: ${this.firstFrameHeader.sampleRate} Hz to ${t.sampleRate} Hz. Might be a bug, so please report this file.`);let i=t.audioSamplesInFrame/this.firstFrameHeader.sampleRate,a={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:i,dataStart:e.startPos,dataSize:t.totalSize};this.loadedSamples.push(a),this.nextTimestampInSamples+=t.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 e=0,t=!1;for(;;){let n=this.reader.requestSlice(e,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=!0;let i=this.reader.requestSlice(n.filePos,r.size);if(i instanceof Promise&&(i=await i),!i)break;Yp(i,r,this.metadataTags),e=n.filePos+r.size}if(!t&&this.reader.fileSize!==null&&this.reader.fileSize>=Up){let e=this.reader.requestSlice(this.reader.fileSize-Up,Up);e instanceof Promise&&(e=await e),D(e),G(e,3)===`TAG`&&Kp(e,this.metadataTags)}return this.metadataTags}finally{e()}}},vc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getTimeResolution(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){let e=this.demuxer;if(D(e.firstFrameHeader!==null),D(e.firstFrameHeaderPos!==null),e.xingData){if(e.xingData.frameCount!==null)return e.xingData.frameCount*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}else if(e.reader.fileSize!==null){let t=xa(e.firstFrameHeader.lowSamplingFrequency,e.firstFrameHeader.layer,e.firstFrameHeader.bitrate,e.firstFrameHeader.sampleRate),n=(e.reader.fileSize-e.firstFrameHeaderPos)/t;return Math.round(n)*e.firstFrameHeader.audioSamplesInFrame/e.firstFrameHeader.sampleRate}return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getCodec(){return`mp3`}getInternalCodecId(){return null}getNumberOfChannels(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.channel===3?1:2}getSampleRate(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.firstFrameHeader),{codec:`mp3`,numberOfChannels:this.demuxer.firstFrameHeader.channel===3?1:2,sampleRate:this.demuxer.firstFrameHeader.sampleRate}}async getPacketAtIndex(e,t){if(e===-1)return null;let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Io;else{let e=this.demuxer.reader.requestSlice(n.dataStart,n.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=H(e,n.dataSize)}return new R(r,`key`,n.timestamp,n.duration,e,n.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=or(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(n===-1)throw Error(`Packet was not created from this track.`);let r=n+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{n()}}async getPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded||n>=0&&n+1<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(n,t);await this.demuxer.advanceReader()}}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),bc,xc,Sc,Cc,wc,Tc,Ec=n((()=>{No(),F(),bc=1399285583,xc=79764919,Sc=new Uint32Array(256);for(let e=0;e<256;e++){let t=e<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^xc:t<<1;Sc[e]=t>>>0&4294967295}Cc=e=>{let t=j(e),n=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let t=0;t<e.length;t++){let n=e[t];r=(r<<8^Sc[r>>>24^n])>>>0}return t.setUint32(22,n,!0),r},wc=(e,t,n)=>{let r=0,i=null;if(e.length>0)if(t.codec===`vorbis`){D(t.vorbisInfo);let a=t.vorbisInfo.modeBlockflags.length,o=(1<<Dr(a-1))-1<<1,s=(e[0]&o)>>1;if(s>=t.vorbisInfo.modeBlockflags.length)throw Error(`Invalid mode number.`);let c=n,l=t.vorbisInfo.modeBlockflags[s];if(i=t.vorbisInfo.blocksizes[l],l===1){let n=(o|1)+1,r=e[0]&n?1:0;c=t.vorbisInfo.blocksizes[r]}r=c===null?0:c+i>>2}else t.codec===`opus`&&(r=go(e).durationInSamples);return{durationInSamples:r,vorbisBlockSize:i}},Tc=e=>{let t=`audio/ogg`;if(e.codecStrings){let n=[...new Set(e.codecStrings)];t+=`; codecs="${n.join(`, `)}"`}return t}})),Dc,Oc,kc,Ac,jc,Mc=n((()=>{Bp(),Ec(),Dc=27,Oc=282,kc=Oc+65025,Ac=e=>{let t=e.filePos;if(Ap(e)!==bc)return null;e.skip(1);let n=U(e),r=Ip(e),i=Ap(e),a=Ap(e),o=Ap(e),s=U(e),c=new Uint8Array(s);for(let t=0;t<s;t++)c[t]=U(e);let l=27+s,u=c.reduce((e,t)=>e+t,0);return{headerStartPos:t,totalSize:l+u,dataStartPos:t+l,dataSize:u,headerType:n,granulePosition:r,serialNumber:i,sequenceNumber:a,checksum:o,lacingValues:c}},jc=(e,t)=>{for(;e.filePos<t-3;){let t=Ap(e),n=t&255,r=t>>>8&255,i=t>>>16&255,a=t>>>24&255;if(!(n!==79&&r!==79&&i!==79&&a!==79)){if(e.skip(-4),t===bc)return!0;e.skip(1)}}return!1}})),Nc,Pc,Fc,Ic,Lc=n((()=>{ma(),No(),Fo(),Ei(),F(),Lo(),Bp(),Ec(),Mc(),Nc=class extends Po{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 t=this.reader.requestSliceRange(e,Dc,Oc);if(t instanceof Promise&&(t=await t),!t)break;let n=Ac(t);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 e of this.bitstreams){let t=await this.readPacket(e.bosPage,0);t&&(t.data.byteLength>=7&&t.data[0]===1&&t.data[1]===118&&t.data[2]===111&&t.data[3]===114&&t.data[4]===98&&t.data[5]===105&&t.data[6]===115?await this.readVorbisMetadata(t,e):t.data.byteLength>=8&&t.data[0]===79&&t.data[1]===112&&t.data[2]===117&&t.data[3]===115&&t.data[4]===72&&t.data[5]===101&&t.data[6]===97&&t.data[7]===100&&await this.readOpusMetadata(t,e),e.codecInfo.codec!==null&&this.trackBackings.push(new Pc(e,this)))}})()}async readVorbisMetadata(e,t){let n=await this.findNextPacketStart(e);if(!n)return;let r=await this.readPacket(n.startPage,n.startSegmentIndex);if(!r||(n=await this.findNextPacketStart(r),!n))return;let i=await this.readPacket(n.startPage,n.startSegmentIndex);if(!i||r.data[0]!==3||i.data[0]!==5)return;let a=[],o=e=>{for(;a.push(Math.min(255,e)),!(e<255);)e-=255};o(e.data.length),o(r.data.length);let s=new Uint8Array(1+a.length+e.data.length+r.data.length+i.data.length);s[0]=2,s.set(a,1),s.set(e.data,1+a.length),s.set(r.data,1+a.length+e.data.length),s.set(i.data,1+a.length+e.data.length+r.data.length),t.codecInfo.codec=`vorbis`,t.description=s,t.lastMetadataPacket=i;let c=j(e.data);t.numberOfChannels=c.getUint8(11),t.sampleRate=c.getUint32(12,!0);let l=c.getUint8(28);t.codecInfo.vorbisInfo={blocksizes:[1<<(l&15),1<<(l>>4)],modeBlockflags:_o(i.data).modeBlockflags},bo(r.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,t){let n=await this.findNextPacketStart(e);if(!n)return;let r=await this.readPacket(n.startPage,n.startSegmentIndex);if(!r)return;t.codecInfo.codec=`opus`,t.description=e.data,t.lastMetadataPacket=r;let i=mo(e.data);t.numberOfChannels=i.outputChannelCount,t.sampleRate=$i,t.codecInfo.opusInfo={preSkip:i.preSkip},bo(r.data.subarray(8),this.metadataTags)}async readPacket(e,t){D(t<e.lacingValues.length);let n=0;for(let r=0;r<t;r++)n+=e.lacingValues[r];let r=e,i=n,a=t,o=[];outer:for(;;){let t=this.reader.requestSlice(r.dataStartPos,r.dataSize);t instanceof Promise&&(t=await t),D(t);let s=H(t,r.dataSize);for(;;){if(a===r.lacingValues.length){o.push(s.subarray(n,i));break}let e=r.lacingValues[a];if(i+=e,e<255){o.push(s.subarray(n,i));break outer}a++}let c=r.headerStartPos+r.totalSize;for(;;){let t=this.reader.requestSliceRange(c,Dc,Oc);if(t instanceof Promise&&(t=await t),!t)return null;let n=Ac(t);if(!n)return null;if(r=n,r.serialNumber===e.serialNumber)break;c=r.headerStartPos+r.totalSize}n=0,i=0,a=0}let s=o.reduce((e,t)=>e+t.length,0);if(s===0)return null;let c=new Uint8Array(s),l=0;for(let e=0;e<o.length;e++){let t=o[e];c.set(t,l),l+=t.length}return{data:c,endPage:r,endSegmentIndex:a}}async findNextPacketStart(e){if(e.endSegmentIndex<e.endPage.lacingValues.length-1)return{startPage:e.endPage,startSegmentIndex:e.endSegmentIndex+1};if(e.endPage.headerType&4)return null;let t=e.endPage.headerStartPos+e.endPage.totalSize;for(;;){let n=this.reader.requestSliceRange(t,Dc,Oc);if(n instanceof Promise&&(n=await n),!n)return null;let r=Ac(n);if(!r)return null;if(r.serialNumber===e.endPage.serialNumber)return{startPage:r,startSegmentIndex:0};t=r.headerStartPos+r.totalSize}}async getMimeType(){return await this.readMetadata(),Tc({codecStrings:(await Promise.all(this.trackBackings.map(e=>e.getDecoderConfig().then(e=>e?.codec??null)))).filter(Boolean)})}async getTrackBackings(){return await this.readMetadata(),this.trackBackings}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},Pc=class{constructor(e,t){this.bitstream=e,this.demuxer=t,this.encodedPacketToMetadata=new WeakMap,this.sequentialScanCache=[],this.sequentialScanMutex=new tr,this.internalSampleRate=e.codecInfo.codec===`opus`?$i:e.sampleRate}getType(){return`audio`}getId(){return this.bitstream.serialNumber}getNumber(){let e=this.demuxer.trackBackings.findIndex(e=>e.bitstream===this.bitstream);return D(e!==-1),e+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return D(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 xr}getDisposition(){return{...wi,primary:!1}}granulePositionToTimestampInSamples(e){return this.bitstream.codecInfo.codec===`opus`?(D(this.bitstream.codecInfo.opusInfo),e-this.bitstream.codecInfo.opusInfo.preSkip):e}createEncodedPacketFromOggPacket(e,t,n){if(!e)return null;let{durationInSamples:r,vorbisBlockSize:i}=wc(e.data,this.bitstream.codecInfo,t.vorbisLastBlocksize),a=new R(n.metadataOnly?Io:e.data,`key`,Math.max(0,t.timestampInSamples)/this.internalSampleRate,r/this.internalSampleRate,e.endPage.headerStartPos+e.endSegmentIndex,e.data.byteLength);return this.encodedPacketToMetadata.set(a,{packet:e,timestampInSamples:t.timestampInSamples,durationInSamples:r,vorbisLastBlockSize:t.vorbisLastBlocksize,vorbisBlockSize:i}),a}async getFirstPacket(e){D(this.bitstream.lastMetadataPacket);let t=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!t)return null;let n=0;this.bitstream.codecInfo.codec===`opus`&&(D(this.bitstream.codecInfo.opusInfo),n-=this.bitstream.codecInfo.opusInfo.preSkip);let r=await this.demuxer.readPacket(t.startPage,t.startSegmentIndex);return this.createEncodedPacketFromOggPacket(r,{timestampInSamples:n,vorbisLastBlocksize:null},e)}async getNextPacket(e,t){let n=this.encodedPacketToMetadata.get(e);if(!n)throw Error(`Packet was not created from this track.`);let r=await this.demuxer.findNextPacketStart(n.packet);if(!r)return null;let i=n.timestampInSamples+n.durationInSamples,a=await this.demuxer.readPacket(r.startPage,r.startSegmentIndex);return this.createEncodedPacketFromOggPacket(a,{timestampInSamples:i,vorbisLastBlocksize:n.vorbisBlockSize},t)}async getPacket(e,t){if(this.demuxer.reader.fileSize===null)return this.getPacketSequential(e,t);let n=Sr(e*this.internalSampleRate);if(n===0)return this.getFirstPacket(t);if(n<0)return null;D(this.bitstream.lastMetadataPacket);let r=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!r)return null;let i=r.startPage,a=this.demuxer.reader.fileSize,o=[i];outer:for(;i.headerStartPos+i.totalSize<a;){let e=i.headerStartPos,t=Math.floor((e+a)/2),r=t;for(;;){let e=Math.min(r+kc,a-Dc),s=this.demuxer.reader.requestSlice(r,e-r);if(s instanceof Promise&&(s=await s),D(s),!jc(s,e)){a=t+Dc;continue outer}let c=this.demuxer.reader.requestSliceRange(s.filePos,Dc,Oc);c instanceof Promise&&(c=await c),D(c);let l=Ac(c);D(l);let u=!1;if(l.serialNumber===this.bitstream.serialNumber)u=!0;else{let e=this.demuxer.reader.requestSlice(l.headerStartPos,l.totalSize);e instanceof Promise&&(e=await e),D(e),u=Cc(H(e,l.totalSize))===l.checksum}if(!u){r=l.headerStartPos+4;continue}if(u&&l.serialNumber!==this.bitstream.serialNumber){r=l.headerStartPos+l.totalSize;continue}if(l.granulePosition===-1){r=l.headerStartPos+l.totalSize;continue}this.granulePositionToTimestampInSamples(l.granulePosition)>n?a=l.headerStartPos:(i=l,o.push(l));continue outer}}let s=r.startPage;for(let e of o){if(e.granulePosition===i.granulePosition)break;(!s||e.headerStartPos>s.headerStartPos)&&(s=e)}let c=s,l=[c];for(;!(c.serialNumber===this.bitstream.serialNumber&&c.granulePosition===i.granulePosition);){let e=c.headerStartPos+c.totalSize,t=this.demuxer.reader.requestSliceRange(e,Dc,Oc);t instanceof Promise&&(t=await t),D(t);let n=Ac(t);D(n),c=n,c.serialNumber===this.bitstream.serialNumber&&l.push(c)}D(c.granulePosition!==-1);let u=null,d,f,p=c,m=0;if(c.headerStartPos===r.startPage.headerStartPos)d=this.granulePositionToTimestampInSamples(0),f=!0,u=0;else{d=0,f=!1;for(let e=c.lacingValues.length-1;e>=0;e--)if(c.lacingValues[e]<255){u=e+1;break}if(u===null)throw Error(`Invalid page with granule position: no packets end on this page.`);m=u-1;let e={data:Io,endPage:p,endSegmentIndex:m};if(await this.demuxer.findNextPacketStart(e)){let e=Ic(l,c,u);D(e);let t=Fc(l,e.page,e.segmentIndex);t&&(c=t.page,u=t.segmentIndex)}else for(;;){let e=Ic(l,c,u);if(!e)break;let t=Fc(l,e.page,e.segmentIndex);if(!t)break;if(c=t.page,u=t.segmentIndex,e.page.headerStartPos!==p.headerStartPos){p=e.page,m=e.segmentIndex;break}}}let h=null,g=null;for(;c!==null;){D(u!==null);let e=await this.demuxer.readPacket(c,u);if(!e)break;if(!(c.headerStartPos===r.startPage.headerStartPos&&u<r.startSegmentIndex)){let r=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d,vorbisLastBlocksize:g?.vorbisBlockSize??null},t);D(r);let i=this.encodedPacketToMetadata.get(r);if(D(i),!f&&e.endPage.headerStartPos===p.headerStartPos&&e.endSegmentIndex===m?(d=this.granulePositionToTimestampInSamples(c.granulePosition),f=!0,r=this.createEncodedPacketFromOggPacket(e,{timestampInSamples:d-i.durationInSamples,vorbisLastBlocksize:g?.vorbisBlockSize??null},t),D(r),i=this.encodedPacketToMetadata.get(r),D(i)):d+=i.durationInSamples,h=r,g=i,f&&(Math.max(d,0)>n||Math.max(i.timestampInSamples,0)===n))break}let i=await this.demuxer.findNextPacketStart(e);if(!i)break;c=i.startPage,u=i.startSegmentIndex}return h}async getPacketSequential(e,t){let n=await this.sequentialScanMutex.acquire();try{let n=Sr(e*this.internalSampleRate);e=n/this.internalSampleRate;let r=N(this.sequentialScanCache,n,e=>e.timestampInSamples),i;if(r!==-1){let e=this.sequentialScanCache[r];i=this.createEncodedPacketFromOggPacket(e.packet,{timestampInSamples:e.timestampInSamples,vorbisLastBlocksize:e.vorbisLastBlockSize},t)}else i=await this.getFirstPacket(t);let a=0;for(;i&&i.timestamp<e;){let n=await this.getNextPacket(i,t);if(!n||n.timestamp>e)break;if(i=n,a++,a===100){a=0;let e=this.encodedPacketToMetadata.get(i);D(e),this.sequentialScanCache.length>0&&D(O(this.sequentialScanCache).timestampInSamples<=e.timestampInSamples),this.sequentialScanCache.push(e)}}return i}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}},Fc=(e,t,n)=>{let r=t,i=n;outer:for(;;){for(i--;i>=0;i--)if(r.lacingValues[i]<255){i++;break outer}if(D(i===-1),!(r.headerType&1)){i=0;break}let t=lr(e,e=>e.headerStartPos<r.headerStartPos);if(!t)return null;r=t,i=r.lacingValues.length}if(D(i!==-1),i===r.lacingValues.length){let t=e[e.indexOf(r)+1];D(t),r=t,i=0}return{page:r,segmentIndex:i}},Ic=(e,t,n)=>{if(n>0)return{page:t,segmentIndex:n-1};let r=lr(e,e=>e.headerStartPos<t.headerStartPos);return r?{page:r,segmentIndex:r.lacingValues.length-1}:null}})),Rc,zc,Bc,Vc,Hc=n((()=>{Fo(),Ei(),F(),Lo(),Bp(),Qp(),(function(e){e[e.PCM=1]=`PCM`,e[e.IEEE_FLOAT=3]=`IEEE_FLOAT`,e[e.ALAW=6]=`ALAW`,e[e.MULAW=7]=`MULAW`,e[e.EXTENSIBLE=65534]=`EXTENSIBLE`})(Rc||={}),zc=class extends Po{constructor(e){super(e),this.metadataPromise=null,this.dataStart=-1,this.dataSize=-1,this.audioInfo=null,this.trackBackings=[],this.lastKnownPacketIndex=0,this.metadataTags={},this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),D(e);let t=G(e,4),n=t!==`RIFX`,r=t===`RF64`,i=kp(e,n),a=r?this.reader.fileSize:Math.min(i+8,this.reader.fileSize??1/0);if(G(e,4)!==`WAVE`)throw Error(`Invalid WAVE file - wrong format`);let o=0,s=null,c=e.filePos;for(;a===null||c<a;){let e=this.reader.requestSlice(c,8);if(e instanceof Promise&&(e=await e),!e)break;let t=G(e,4),i=kp(e,n),l=e.filePos;if(r&&o===0&&t!==`ds64`)throw Error(`Invalid RF64 file: First chunk must be "ds64".`);if(t===`fmt `)await this.parseFmtChunk(l,i,n);else if(t===`data`){if(s??=i,this.dataStart=e.filePos,this.dataSize=Math.min(s,(a??1/0)-this.dataStart),this.reader.fileSize===null)break}else if(t===`ds64`){let e=this.reader.requestSlice(l,i);if(e instanceof Promise&&(e=await e),!e)break;let t=Np(e,n);s=Np(e,n),a=Math.min(t+8,this.reader.fileSize??1/0)}else t===`LIST`?await this.parseListChunk(l,i,n):(t===`ID3 `||t===`id3 `)&&await this.parseId3Chunk(l,i);c=l+i+(i&1),o++}if(!this.audioInfo)throw Error(`Invalid WAVE file - missing "fmt " chunk`);if(this.dataStart===-1)throw Error(`Invalid WAVE file - missing "data" chunk`);let l=this.audioInfo.blockSizeInBytes;this.dataSize=Math.floor(this.dataSize/l)*l,this.trackBackings.push(new Vc(this))})()}async parseFmtChunk(e,t,n){let r=this.reader.requestSlice(e,t);if(r instanceof Promise&&(r=await r),!r)return;let i=Tp(r,n),a=Tp(r,n),o=kp(r,n);r.skip(4);let s=Tp(r,n),c;if(c=t===14?8:Tp(r,n),t>=18&&i!==357){let e=Tp(r,n),a=t-18;if(Math.min(a,e)>=22&&i===Rc.EXTENSIBLE){r.skip(6);let e=H(r,16);i=e[0]|e[1]<<8}}(i===Rc.MULAW||i===Rc.ALAW)&&(c=8),this.audioInfo={format:i,numberOfChannels:a,sampleRate:o,sampleSizeInBytes:Math.ceil(c/8),blockSizeInBytes:s}}async parseListChunk(e,t,n){let r=this.reader.requestSlice(e,t);if(r instanceof Promise&&(r=await r),!r)return;let i=G(r,4);if(i!==`INFO`&&i!==`INF0`)return;let a=r.filePos;for(;a<=e+t-8;){r.filePos=a;let e=G(r,4),t=kp(r,n),i=H(r,t),o=0;for(let e=0;e<i.length&&i[e]!==0;e++)o++;let s=String.fromCharCode(...i.subarray(0,o));switch(this.metadataTags.raw??={},this.metadataTags.raw[e]=s,e){case`INAM`:case`TITL`:this.metadataTags.title??=s;break;case`TIT3`:this.metadataTags.description??=s;break;case`IART`:this.metadataTags.artist??=s;break;case`IPRD`:this.metadataTags.album??=s;break;case`IPRT`:case`ITRK`:case`TRCK`:{let e=s.split(`/`),t=Number.parseInt(e[0],10),n=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(this.metadataTags.trackNumber??=t),n&&Number.isInteger(n)&&n>0&&(this.metadataTags.tracksTotal??=n)}break;case`ICRD`:case`IDIT`:{let e=new Date(s);Number.isNaN(e.getTime())||(this.metadataTags.date??=e)}break;case`YEAR`:{let e=Number.parseInt(s,10);Number.isInteger(e)&&e>0&&(this.metadataTags.date??=new Date(e,0,1))}break;case`IGNR`:case`GENR`:this.metadataTags.genre??=s;break;case`ICMT`:case`CMNT`:case`COMM`:this.metadataTags.comment??=s;break}a+=8+t+(t&1)}}async parseId3Chunk(e,t){let n=this.reader.requestSlice(e,t);if(n instanceof Promise&&(n=await n),!n)return;let r=Jp(n);if(r){let i=t-Wp;r.size=Math.min(r.size,i),r.size>0&&Yp(n.slice(e+Wp,r.size),r,this.metadataTags)}}getCodec(){if(D(this.audioInfo),this.audioInfo.format===Rc.MULAW)return`ulaw`;if(this.audioInfo.format===Rc.ALAW)return`alaw`;if(this.audioInfo.format===Rc.PCM){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===Rc.IEEE_FLOAT&&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}},Bc=2048,Vc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){let e=this.demuxer.getCodec();return e?(D(this.demuxer.audioInfo),{codec:e,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}getNumberOfChannels(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return D(this.demuxer.dataSize!==-1),this.demuxer.dataSize/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getDisposition(){return{...wi}}async getPacketAtIndex(e,t){D(e>=0),D(this.demuxer.audioInfo);let n=e*Bc*this.demuxer.audioInfo.blockSizeInBytes;if(n>=this.demuxer.dataSize)return null;let r=Math.min(Bc*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-n);if(this.demuxer.reader.fileSize===null){let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+n,r);if(e instanceof Promise&&(e=await e),!e)return null}let i;if(t.metadataOnly)i=Io;else{let e=this.demuxer.reader.requestSlice(this.demuxer.dataStart+n,r);e instanceof Promise&&(e=await e),D(e),i=H(e,r)}let a=e*Bc/this.demuxer.audioInfo.sampleRate,o=r/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(e,this.demuxer.lastKnownPacketIndex),new R(i,`key`,a,o,e,r)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getPacket(e,t){D(this.demuxer.audioInfo);let n=Math.floor(Math.min(e*this.demuxer.audioInfo.sampleRate/Bc,(this.demuxer.dataSize-1)/(Bc*this.demuxer.audioInfo.blockSizeInBytes)));if(n<0)return null;let r=await this.getPacketAtIndex(n,t);if(r)return r;if(n===0)return null;D(this.demuxer.reader.fileSize===null);let i=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,t);for(;i;){let e=await this.getNextPacket(i,t);if(!e)break;i=e}return i}getNextPacket(e,t){D(this.demuxer.audioInfo);let n=Math.round(e.timestamp*this.demuxer.audioInfo.sampleRate/Bc);return this.getPacketAtIndex(n+1,t)}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),Uc,Wc,Gc,Kc=n((()=>{Di(),Bp(),Uc=7,Wc=9,Gc=e=>{let t=e.filePos,n=new I(H(e,9));if(n.readBits(12)!==4095||(n.skipBits(1),n.readBits(2)!==0))return null;let r=n.readBits(1),i=n.readBits(2)+1,a=n.readBits(4);if(a===15)return null;n.skipBits(1);let o=n.readBits(3);if(o===0)throw Error(`ADTS frames with channel configuration 0 are not supported.`);n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let s=n.readBits(13);n.skipBits(11);let c=n.readBits(2)+1;if(c!==1)throw Error(`ADTS frames with more than one AAC frame are not supported.`);let l=null;return r===1?e.filePos-=2:l=n.readBits(16),{objectType:i,samplingFrequencyIndex:a,channelConfiguration:o,frameLength:s,numberOfAacFrames:c,crcCheck:l,startPos:t}}})),qc,Jc,Yc,Xc=n((()=>{Pi(),Fo(),Qp(),Ei(),F(),Lo(),Bp(),Kc(),qc=1024,Jc=class extends Po{constructor(e){super(e),this.metadataPromise=null,this.firstFrameHeader=null,this.loadedSamples=[],this.metadataTags=null,this.trackBackings=[],this.readingMutex=new tr,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();D(this.firstFrameHeader),this.trackBackings=[new Yc(this)]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let e=this.reader.requestSlice(this.lastLoadedPos,Wp);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Jp(e);if(!t)break;this.lastLoadedPos=e.filePos+t.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,Uc,Wc);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let t=Gc(e);if(!t){this.lastSampleLoaded=!0;return}if(this.reader.fileSize!==null&&t.startPos+t.frameLength>this.reader.fileSize){this.lastSampleLoaded=!0;return}this.firstFrameHeader||=t;let n=Oi[t.samplingFrequencyIndex];D(n!==void 0);let r=qc/n,i={timestamp:this.nextTimestampInSamples/n,duration:r,dataStart:t.startPos,dataSize:t.frameLength};this.loadedSamples.push(i),this.nextTimestampInSamples+=qc,this.lastLoadedPos=t.startPos+t.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 e=0;for(;;){let t=this.reader.requestSlice(e,Wp);if(t instanceof Promise&&(t=await t),!t)break;let n=Jp(t);if(!n)break;let r=this.reader.requestSlice(t.filePos,n.size);if(r instanceof Promise&&(r=await r),!r)break;Yp(r,n,this.metadataTags),e=t.filePos+n.size}return this.metadataTags}finally{e()}}},Yc=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getTimeResolution(){return this.getSampleRate()/qc}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}getName(){return null}getLanguageCode(){return xr}getCodec(){return`aac`}getInternalCodecId(){return D(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){D(this.demuxer.firstFrameHeader);let e=ki[this.demuxer.firstFrameHeader.channelConfiguration];return D(e!==void 0),e}getSampleRate(){D(this.demuxer.firstFrameHeader);let e=Oi[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return D(e!==void 0),e}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(e,t){if(e===-1)return null;let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Io;else{let e=this.demuxer.reader.requestSlice(n.dataStart,n.dataSize);if(e instanceof Promise&&(e=await e),!e)return null;r=H(e,n.dataSize)}return new R(r,`key`,n.timestamp,n.duration,e,n.dataSize)}getFirstPacket(e){return this.getPacketAtIndex(0,e)}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=or(this.demuxer.loadedSamples,e.timestamp,e=>e.timestamp);if(n===-1)throw Error(`Packet was not created from this track.`);let r=n+1;for(;r>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(r,t)}finally{n()}}async getPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded||n>=0&&n+1<this.demuxer.loadedSamples.length)return this.getPacketAtIndex(n,t);await this.demuxer.advanceReader()}}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}}})),Zc,Qc,$c,el,tl,nl,rl=n((()=>{Di(),F(),Bp(),Zc=e=>e===0?null:e===1?192:e>=2&&e<=5?144*2**e:e===6?`uncommon-u8`:e===7?`uncommon-u16`:e>=8&&e<=15?2**e:null,Qc=(e,t)=>{switch(e){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return`uncommon-u8`;case 13:return`uncommon-u16`;case 14:return`uncommon-u16-10`;default:return null}},$c=e=>{let t=0,n=new I(H(e,1));for(;n.readBits(1)===1;)t++;if(t===0)return n.readBits(7);let r=[],i=t-1,a=new I(H(e,i)),o=8-t-1;for(let e=0;e<o;e++)r.unshift(n.readBits(1));for(let e=0;e<i;e++)for(let e=0;e<8;e++){let t=a.readBits(1);e<2||r.unshift(t)}return r.reduce((e,t,n)=>e|t<<n,0)},el=(e,t)=>{if(t===`uncommon-u16`)return Ep(e)+1;if(t===`uncommon-u8`)return U(e)+1;if(typeof t==`number`)return t;pr(t),D(!1)},tl=(e,t)=>t===`uncommon-u16`?Ep(e):t===`uncommon-u16-10`?Ep(e)*10:t===`uncommon-u8`?U(e):typeof t==`number`?t:null,nl=e=>{let t=0;for(let n of e){t^=n;for(let e=0;e<8;e++)t&128?t=t<<1^7:t<<=1,t&=255}return t}})),il,al,ol=n((()=>{No(),Fo(),F(),Lo(),Bp(),Ei(),rl(),Di(),il=class extends Po{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 tr,this.lastSampleLoaded=!1,this.reader=e._reader}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTrackBackings(){return await this.readMetadata(),D(this.trackBacking),[this.trackBacking]}async getMimeType(){return`audio/flac`}async readMetadata(){let e=4;return this.metadataPromise??=(async()=>{for(;this.reader.fileSize===null||e<this.reader.fileSize;){let t=this.reader.requestSlice(e,4);if(t instanceof Promise&&(t=await t),e+=4,t===null)throw Error(`Metadata block at position ${e} is too small! Corrupted file.`);D(t);let n=U(t),r=Dp(t),i=(n&128)!=0;switch(n&127){case yo.STREAMINFO:{let t=this.reader.requestSlice(e,r);if(t instanceof Promise&&(t=await t),D(t),t===null)throw Error(`StreamInfo block at position ${e} is too small! Corrupted file.`);let n=H(t,34),i=new I(n),a=i.readBits(16),o=i.readBits(16),s=i.readBits(24),c=i.readBits(24),l=i.readBits(20),u=i.readBits(3)+1;i.readBits(5);let d=i.readBits(36);i.skipBits(128);let f=new Uint8Array(42);f.set(new Uint8Array([102,76,97,67]),0),f.set(new Uint8Array([128,0,0,34]),4),f.set(n,8),this.audioInfo={numberOfChannels:u,sampleRate:l,totalSamples:d,minimumBlockSize:a,maximumBlockSize:o,minimumFrameSize:s,maximumFrameSize:c,description:f},this.trackBacking=new al(this);break}case yo.VORBIS_COMMENT:{let t=this.reader.requestSlice(e,r);t instanceof Promise&&(t=await t),D(t),bo(H(t,r),this.metadataTags);break}case yo.PICTURE:{let t=this.reader.requestSlice(e,r);t instanceof Promise&&(t=await t),D(t);let n=W(t),i=W(t),a=Wn.decode(H(t,i)),o=W(t),s=Wn.decode(H(t,o));t.skip(16);let c=W(t),l=H(t,c);this.metadataTags.images??=[],this.metadataTags.images.push({data:l,mimeType:a,kind:n===3?`coverFront`:n===4?`coverBack`:`unknown`,description:s});break}default:break}if(e+=r,i){this.lastLoadedPos=e;break}}if(!this.audioInfo)throw Error(`Missing STREAMINFO metadata block! Corrupted FLAC file.`)})()}async readNextFlacFrame({startPos:e,isFirstPacket:t}){D(this.audioInfo);let n=this.audioInfo.maximumBlockSize*this.audioInfo.numberOfChannels*4+16+2,r=this.audioInfo.minimumFrameSize||10,i=(this.audioInfo.maximumFrameSize||n)+16,a=await this.reader.requestSliceRange(e,16,i);if(!a)return null;let o=this.readFlacFrameHeader({slice:a,isFirstPacket:t});if(!o)return null;for(a.filePos=e+r;;){if(a.filePos>a.end-6)return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:a.end-e,isLastFrame:!0};if(U(a)===255){let t=a.filePos;if(U(a)!==(this.blockingBit===1?249:248)){a.filePos=t;continue}a.skip(-2);let n=a.filePos-e,r=this.readFlacFrameHeader({slice:a,isFirstPacket:!1});if(!r){a.filePos=t;continue}if(this.blockingBit===0){if(r.num-o.num!==1){a.filePos=t;continue}}else if(r.num-o.num!==o.blockSize){a.filePos=t;continue}return{num:o.num,blockSize:o.blockSize,sampleRate:o.sampleRate,size:n,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:t}){let n=e.filePos,r=new I(H(e,4));if(r.readBits(15)!==32764)return null;if(this.blockingBit===null)D(t),this.blockingBit=r.readBits(1);else if(this.blockingBit===1){if(D(!t),r.readBits(1)!==1)return null}else if(this.blockingBit===0){if(D(!t),r.readBits(1)!==0)return null}else throw Error(`Invalid blocking bit`);let i=Zc(r.readBits(4));if(!i)return null;D(this.audioInfo);let a=Qc(r.readBits(4),this.audioInfo.sampleRate);if(!a||(r.readBits(4),r.readBits(3),r.readBits(1)!==0))return null;let o=$c(e),s=el(e,i),c=tl(e,a);if(c===null||c!==this.audioInfo.sampleRate)return null;let l=e.filePos-n,u=U(e);return e.skip(-l),e.skip(-1),u===nl(H(e,l))?{num:o,blockSize:s,sampleRate:c}:null}async advanceReader(){await this.readMetadata(),D(this.lastLoadedPos!==null),D(this.audioInfo);let e=this.lastLoadedPos,t=await this.readNextFlacFrame({startPos:e,isFirstPacket:this.loadedSamples.length===0});if(!t){this.lastSampleLoaded=!0;return}let n=this.loadedSamples[this.loadedSamples.length-1],r={blockOffset:n?n.blockOffset+n.blockSize:0,blockSize:t.blockSize,byteOffset:e,byteSize:t.size};if(this.lastLoadedPos+=t.size,this.loadedSamples.push(r),t.isLastFrame){this.lastSampleLoaded=!0;return}}},al=class{constructor(e){this.demuxer=e}getType(){return`audio`}getId(){return 1}getNumber(){return 1}getCodec(){return`flac`}getInternalCodecId(){return null}getNumberOfChannels(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return xr}getTimeResolution(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return D(this.demuxer.audioInfo),this.demuxer.audioInfo.totalSamples===0?null:this.demuxer.audioInfo.totalSamples/this.demuxer.audioInfo.sampleRate}async getLiveRefreshInterval(){return null}getDisposition(){return{...wi}}async getDecoderConfig(){return D(this.demuxer.audioInfo),{codec:`flac`,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(e,t){if(D(this.demuxer.audioInfo),e<0)return null;let n=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,e,e=>e.blockOffset/this.demuxer.audioInfo.sampleRate);if(n===-1){await this.demuxer.advanceReader();continue}let r=this.demuxer.loadedSamples[n];if(r.blockOffset/this.demuxer.audioInfo.sampleRate+r.blockSize/this.demuxer.audioInfo.sampleRate<=e){if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,t);await this.demuxer.advanceReader();continue}return this.getPacketAtIndex(n,t)}}finally{n()}}async getNextPacket(e,t){let n=await this.demuxer.readingMutex.acquire();try{let n=e.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,t)}finally{n()}}getKeyPacket(e,t){return this.getPacket(e,t)}getNextKeyPacket(e,t){return this.getNextPacket(e,t)}async getPacketAtIndex(e,t){let n=this.demuxer.loadedSamples[e];if(!n)return null;let r;if(t.metadataOnly)r=Io;else{let e=this.demuxer.reader.requestSlice(n.byteOffset,n.byteSize);if(e instanceof Promise&&(e=await e),!e)return null;r=H(e,n.byteSize)}D(this.demuxer.audioInfo);let i=n.blockOffset/this.demuxer.audioInfo.sampleRate,a=n.blockSize/this.demuxer.audioInfo.sampleRate;return new R(r,`key`,i,a,e,n.byteSize)}async getFirstPacket(e){for(;this.demuxer.loadedSamples.length===0&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,e)}}})),sl,cl,ll,ul=n((()=>{sl=9e4,cl=188,ll=e=>{let t=`video/MP2T`,n=[...new Set(e.filter(Boolean))];return n.length>0&&(t+=`; codecs="${n.join(`, `)}"`),t}})),dl,fl,pl,ml,hl,gl,_l,vl,yl,bl,xl,Sl=n((()=>{Xc(),Kc(),Pi(),ma(),No(),Fo(),Ei(),F(),Da(),Lo(),Bp(),ul(),Aa(),Di(),dl=`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.`,fl=new Set,pl=class extends Po{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=cl+16+1,t=this.reader.requestSlice(0,e);t instanceof Promise&&(t=await t),D(t);let n=H(t,e);if(n[0]===71&&n[cl]===71)this.packetOffset=0,this.packetStride=cl;else if(n[0]===71&&n[cl+16]===71)this.packetOffset=0,this.packetStride=cl+16;else if(n[4]===71&&n[4+cl+4]===71)this.packetOffset=4,this.packetStride=cl+4;else throw Error(`Unreachable.`);this.minReferencePointByteDistance=256*this.packetStride;let r=this.packetOffset,i=null,a=!1,o=!1;for(;;){let e=await this.readPacketHeader(r);if(!e)break;if(e.payloadUnitStartIndicator===0){r+=this.packetStride;continue}let t=await this.readSection(r,!0,!o);if(!t)break;let n=!1;if(!o&&t.pid!==0&&!(t.payload[0]===0&&t.payload[1]===0&&t.payload[2]===1)){let e=new I(t.payload),r=e.readAlignedByte();e.skipBits(8*r),n=e.readBits(8)===2}if(t.pid===0&&!a){let e=new I(t.payload),n=e.readAlignedByte();e.skipBits(8*n),e.skipBits(14);let r=e.readBits(10);for(e.skipBits(40);8*(r+3)-e.pos>32;){let t=e.readBits(16);e.skipBits(3);let n=e.readBits(13);if(t!==0){if(i!==null)throw Error(`Only files with a single program are supported.`);i=n}}if(i===null)throw Error(`Program Association Table must link to a Program Map Table.`);a=!0}else if((t.pid===i||n)&&!o){let e=new I(t.payload),n=e.readAlignedByte();e.skipBits(8*n),e.skipBits(12);let r=e.readBits(12);e.skipBits(43),e.readBits(13),e.skipBits(6);let i=e.readBits(10);for(e.skipBits(8*i);8*(r+3)-e.pos>32;){let t=e.readBits(8);e.skipBits(3);let n=e.readBits(13);e.skipBits(6);let r=e.readBits(10),i=e.pos+8*r,a=!1,o=!1;for(;e.pos<i;){let t=e.readBits(8),n=e.readBits(8);t===106?a=!0:(t===122||t===204)&&(o=!0),e.skipBits(8*n)}let s=null;switch(t){case 27:case 36:s={type:`video`,codec:t===27?`avc`:`hevc`,decoderConfig:null,avcCodecInfo:null,hevcCodecInfo:null,colorSpace:{primaries:null,transfer:null,matrix:null,fullRange:null},width:-1,height:-1,squarePixelWidth:-1,squarePixelHeight:-1,reorderSize:-1};break;case 3:case 4:case 15:case 129:case 135:{let e;if(t===3||t===4)e=`mp3`;else if(t===15)e=`aac`;else if(t===129)e=`ac3`;else if(t===135)e=`eac3`;else throw Error(`Unreachable.`);s={type:`audio`,codec:e,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}}break;case 6:o?s={type:`audio`,codec:`eac3`,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1}:a&&(s={type:`audio`,codec:`ac3`,decoderConfig:null,aacCodecInfo:null,numberOfChannels:-1,sampleRate:-1});break;default:fl.has(t)||(console.warn(`Note: MPEG-TS streams with stream_type 0x${t.toString(16)} are not currently supported.`),fl.add(t))}s&&this.elementaryStreams.push({demuxer:this,pid:n,streamType:t,initialized:!1,firstSection:null,canBeTrustedWithKeyPackets:!1,info:s,referencePesPackets:[]})}o=!0}else{let e=this.elementaryStreams.find(e=>e.pid===t.pid);outer:if(e&&!e.initialized){let n=hl(t,!0);if(!n)throw Error(`Couldn't read first PES packet for Elementary Stream with PID ${e.pid}`);if(e.firstSection=t,e.canBeTrustedWithKeyPackets=t.randomAccessIndicator===1,this.input._initInput){let n=(await this.input._initInput._getDemuxer()).elementaryStreams.find(n=>n.pid===t.pid&&n.info.codec===e.info.codec);if(n){e.info=n.info,e.initialized=!0;break outer}}let r=new bl(e,n);if(e.info.type===`video`){for(;;){let t=r;if(t.suppliedPacket=null,await r.markNextPacket(),e.info.codec===`avc`){if(!r.suppliedPacket)throw Error(`Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from any packet.`);if(e.info.avcCodecInfo=Ha(r.suppliedPacket.data),!e.info.avcCodecInfo)continue;let t=e.info.avcCodecInfo.sequenceParameterSets[0];D(t);let n=Ka(t);e.info.width=n.displayWidth,e.info.height=n.displayHeight;let i=n.pixelAspectRatio.num,a=n.pixelAspectRatio.den;i>0&&a>0&&(i>a?(e.info.squarePixelWidth=Math.round(e.info.width*i/a),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*a/i))),e.info.colorSpace={primaries:Jn[n.colourPrimaries],transfer:Xn[n.transferCharacteristics],matrix:Qn[n.matrixCoefficients],fullRange:!!n.fullRangeFlag},e.info.reorderSize=n.maxDecFrameBuffering;break}else if(e.info.codec===`hevc`){if(!r.suppliedPacket)throw Error(`Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.`);if(e.info.hevcCodecInfo=Qa(r.suppliedPacket.data),!e.info.hevcCodecInfo)continue;let t=e.info.hevcCodecInfo.arrays.find(e=>e.nalUnitType===Ma.SPS_NUT).nalUnits[0];D(t);let n=Za(t);e.info.width=n.displayWidth,e.info.height=n.displayHeight,n.pixelAspectRatio.num>n.pixelAspectRatio.den?(e.info.squarePixelWidth=Math.round(e.info.width*n.pixelAspectRatio.num/n.pixelAspectRatio.den),e.info.squarePixelHeight=e.info.height):(e.info.squarePixelWidth=e.info.width,e.info.squarePixelHeight=Math.round(e.info.height*n.pixelAspectRatio.den/n.pixelAspectRatio.num)),e.info.colorSpace={primaries:Jn[n.colourPrimaries],transfer:Xn[n.transferCharacteristics],matrix:Qn[n.matrixCoefficients],fullRange:!!n.fullRangeFlag},e.info.reorderSize=n.maxDecFrameBuffering;break}else throw Error(`Unhandled.`)}e.info.decoderConfig={codec:Ji({width:e.info.width,height:e.info.height,codec:e.info.codec,codecDescription:null,colorSpace:e.info.colorSpace,avcType:1,avcCodecInfo:e.info.avcCodecInfo,hevcCodecInfo:e.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null}),codedWidth:e.info.width,codedHeight:e.info.height,colorSpace:e.info.colorSpace},(e.info.width!==e.info.squarePixelWidth||e.info.height!==e.info.squarePixelHeight)&&(e.info.decoderConfig.displayAspectWidth=e.info.squarePixelWidth,e.info.decoderConfig.displayAspectHeight=e.info.squarePixelHeight),e.initialized=!0}else{if(await r.markNextPacket(),!r.suppliedPacket)throw Error(`Couldn't parse first media packet for Elementary Stream with PID ${e.pid}`);if(e.info.codec===`aac`){let t=Gc(Cp.tempFromBytes(r.suppliedPacket.data));if(!t)throw Error(`Invalid AAC audio stream; could not read ADTS frame header from first packet.`);e.info.aacCodecInfo={isMpeg2:!1,objectType:t.objectType},e.info.numberOfChannels=ki[t.channelConfiguration],e.info.sampleRate=Oi[t.samplingFrequencyIndex]}else if(e.info.codec===`mp3`){let t=Ca(W(Cp.tempFromBytes(r.suppliedPacket.data)),r.suppliedPacket.data.byteLength);if(!t.header)throw Error(`Invalid MP3 audio stream; could not read frame header from first packet.`);e.info.numberOfChannels=t.header.channel===3?1:2,e.info.sampleRate=t.header.sampleRate}else if(e.info.codec===`ac3`){let t=Co(r.suppliedPacket.data);if(!t)throw Error(`Invalid AC-3 audio stream; could not read sync frame from first packet.`);if(t.fscod===3)throw Error(`Invalid AC-3 audio stream; reserved sample rate code found in first packet.`);e.info.numberOfChannels=So[t.acmod]+t.lfeon,e.info.sampleRate=Oa[t.fscod]}else if(e.info.codec===`eac3`){let t=ko(r.suppliedPacket.data);if(!t)throw Error(`Invalid E-AC-3 audio stream; could not read sync frame from first packet.`);let n=jo(t);if(n===null)throw Error(`Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.`);e.info.numberOfChannels=Mo(t),e.info.sampleRate=n}else throw Error(`Unhandled.`);e.info.decoderConfig={codec:Xi({codec:e.info.codec,codecDescription:null,aacCodecInfo:e.info.aacCodecInfo}),numberOfChannels:e.info.numberOfChannels,sampleRate:e.info.sampleRate},e.initialized=!0}}}if(o&&this.elementaryStreams.every(e=>e.initialized))break;r+=this.packetStride}if(!o)throw a?Error(`No Program Map Table found in the file.`):Error(`No Program Association Table found in the file.`);for(let e of this.elementaryStreams)e.info.type===`video`?this.trackBackingEntries.push(new _l(e)):this.trackBackingEntries.push(new vl(e))})()}async getTrackBackings(){return await this.readMetadata(),this.trackBackingEntries}async getMetadataTags(){return{}}async getMimeType(){return await this.readMetadata(),ll(await Promise.all(this.trackBackingEntries.map(e=>e.getDecoderConfig().then(e=>e?.codec??null))))}async readSection(e,t,n=!1){let r=e,i=e,a=[],o=0,s=null,c=!0,l=0;for(;;){let e=await this.readPacket(i);if(i+=this.packetStride,!e)break;if(s){if(e.pid!==s.pid){if(n)break;continue}if(e.payloadUnitStartIndicator===1)break}else{if(e.payloadUnitStartIndicator===0)break;s=e}let u=!!(e.adaptationFieldControl&2),d=!!(e.adaptationFieldControl&1),f=0;if(u&&(f=1+e.body[0],e===s&&f>1&&(l=e.body[1]>>6&1)),d&&(f===0?(a.push(e.body),o+=e.body.byteLength):(a.push(e.body.subarray(f)),o+=e.body.byteLength-f)),r=i,!t&&o>=64){c=!1;break}if(or(this.sectionEndPositions,r,e=>e)!==-1){c=!1;break}}if(c){let e=N(this.sectionEndPositions,r,e=>e);this.sectionEndPositions.splice(e+1,0,r)}if(!s)return null;let u;if(a.length===1)u=a[0];else{let e=a.reduce((e,t)=>e+t.length,0);u=new Uint8Array(e);let t=0;for(let e of a)u.set(e,t),t+=e.length}return{startPos:e,endPos:t?r:null,pid:s.pid,payload:u,randomAccessIndicator:l}}async readPacketHeader(e){let t=this.reader.requestSlice(e,4);if(t instanceof Promise&&(t=await t),!t)return null;if(U(t)!==71)throw Error(`Invalid TS packet sync byte. Likely an internal bug, please report this file.`);let n=Ep(t);n>>15;let r=n>>14&1;n>>13&1;let i=n&8191,a=U(t);a>>6;let o=a>>4&3;return a&15,{payloadUnitStartIndicator:r,pid:i,adaptationFieldControl:o}}async readPacket(e){let t=this.reader.requestSlice(e,cl);if(t instanceof Promise&&(t=await t),!t)return null;let n=H(t,cl);if(n[0]!==71)throw Error(`Invalid TS packet sync byte. Likely an internal bug, please report this file.`);let r=(n[1]<<8)+n[2];r>>15;let i=r>>14&1;r>>13&1;let a=r&8191,o=n[3];o>>6;let s=o>>4&3;return o&15,{payloadUnitStartIndicator:i,pid:a,adaptationFieldControl:s,body:n.subarray(4)}}},ml=(e,t)=>{if(e.payload.byteLength<3)return null;let n=new I(e.payload);if(n.readBits(24)!==1)return null;let r=n.readBits(8);if(n.skipBits(16),r===188||r===190||r===191||r===240||r===241||r===255||r===242||r===248)return null;n.skipBits(8);let i=n.readBits(2);n.skipBits(14);let a=null;if(i===2||i===3)a=0,n.skipBits(4),a+=n.readBits(3)*(1<<30),n.skipBits(1),a+=n.readBits(15)*32768,n.skipBits(1),a+=n.readBits(15);else if(t)throw Error(dl);return{sectionStartPos:e.startPos,sectionEndPos:e.endPos,pts:a,randomAccessIndicator:e.randomAccessIndicator}},hl=(e,t)=>{D(e.endPos!==null);let n=ml(e,t);if(!n)return null;let r=new I(e.payload);r.skipBits(32);let i=r.readBits(16);r.skipBits(16);let a=r.readBits(8),o=r.pos+8*a;r.pos=o;let s=o/8;D(Number.isInteger(s));let c=e.payload.subarray(s,i>0?6+i:e.payload.byteLength);return{...n,data:c}},gl=class e{constructor(e){this.elementaryStream=e,this.packetBuffers=new WeakMap,this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){let t=this.elementaryStream.demuxer,n=this.elementaryStream.info.type,r=0;for(let i of t.trackBackingEntries)if(i.getType()===n&&r++,D(i instanceof e),i.elementaryStream===this.elementaryStream)break;return r}getCodec(){throw Error(`Not implemented on base class.`)}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return xr}getDisposition(){return{...wi,primary:!1}}getTimeResolution(){return sl}isRelativeToUnixEpoch(){return!1}getPairingMask(){return 1n}getBitrate(){return null}getAverageBitrate(){return null}async getDurationFromMetadata(){return null}async getLiveRefreshInterval(){return null}createEncodedPacket(e,t,n){let r;return r=this.allPacketsAreKeyPackets()||e.randomAccessIndicator===1?`key`:`delta`,new R(n.metadataOnly?Io:e.data,r,e.pts/sl,Math.max(t/sl,0),e.sequenceNumber,e.data.byteLength)}async getFirstPacket(e){let t=this.elementaryStream.firstSection;D(t);let n=hl(t,!0);D(n);let r=new bl(this.elementaryStream,n),i=new xl(this,r),a=await i.readNext();if(!a)return null;let o=this.createEncodedPacket(a.packet,a.duration,e);return this.packetBuffers.set(o,i),this.packetSectionStarts.set(o,a.packet.sectionStartPos),o}async getNextPacket(e,t){let n=this.packetBuffers.get(e);if(n){let r=await n.readNext();if(!r)return null;this.packetBuffers.delete(e);let i=this.createEncodedPacket(r.packet,r.duration,t);return this.packetBuffers.set(i,n),this.packetSectionStarts.set(i,r.packet.sectionStartPos),i}let r=this.packetSectionStarts.get(e);if(r===void 0)throw Error(`Packet was not created from this track.`);let i=await this.elementaryStream.demuxer.readSection(r,!0);D(i);let a=hl(i,!0);D(a);let o=new bl(this.elementaryStream,a);n=new xl(this,o);let s=e.sequenceNumber;for(;;){let e=await n.readNext();if(!e)return null;if(e.packet.sequenceNumber>s){let r=this.createEncodedPacket(e.packet,e.duration,t);return this.packetBuffers.set(r,n),this.packetSectionStarts.set(r,e.packet.sectionStartPos),r}}}async getNextKeyPacket(e,t){let n=e;for(;;){if(n=await this.getNextPacket(n,t),!n)return null;if(n.type===`key`)return n}}getPacket(e,t){return this.doPacketLookup(e,!1,t)}getKeyPacket(e,t){return this.doPacketLookup(e,!0,t)}async doPacketLookup(e,t,n){let r=Sr(e*sl),i=this.elementaryStream.demuxer,{reader:a,seekChunkSize:o}=i,s=this.elementaryStream.pid,c=async(e,t,n)=>{let r=e;for(;r<t;){let e=await i.readPacketHeader(r);if(!e)return null;if(e.pid===s&&e.payloadUnitStartIndicator===1){let e=await i.readSection(r,n);if(!e)return null;let t=ml(e,!1);if(t&&t.pts!==null)return{pesPacketHeader:t,section:e}}r+=i.packetStride}return null},l=this.elementaryStream.firstSection;D(l);let u=ml(l,!0);if(D(u),r<u.pts)return null;let d,f=this.elementaryStream.referencePesPackets,p=N(f,r,e=>e.pts),m=p===-1?null:f[p];if(m&&r-m.pts<sl/2)d=m.sectionStartPos;else{let e=0;if(a.fileSize!==null){let t=Math.ceil(a.fileSize/o);if(t>1){let n=0,a=t-1;for(e=n;n<=a;){let t=Math.floor((n+a)/2),s=Tr(t*o,i.packetStride)+u.sectionStartPos,l=await c(s,s+o,!1);if(!l){a=t-1;continue}l.pesPacketHeader.pts<=r?(e=t,n=t+1):a=t-1}}}d=Tr(e*o,i.packetStride)+u.sectionStartPos}let h=(await c(d,a.fileSize??1/0,!1))?.pesPacketHeader??null;h||=u;let g=this.getReorderSize(),_=async(e,t)=>{let a=await i.readSection(e,!0);D(a);let o=hl(a,!0);D(o);let s=new bl(this.elementaryStream,o),c=new xl(this,s);for(;!((O(c.presentationOrderPackets)?.pts??-1/0)>=r||!await c.readNextPacket()););let l=ur(c.presentationOrderPackets,t);if(l===-1)return null;let u=c.presentationOrderPackets[l],d=l===0?0:u.pts-c.presentationOrderPackets[l-1].pts;for(;c.decodeOrderPackets[0]!==u;)c.decodeOrderPackets.shift();c.lastDuration=d;let f=await c.readNext();D(f);let p=this.createEncodedPacket(f.packet,f.duration,n);return this.packetBuffers.set(p,c),this.packetSectionStarts.set(p,f.packet.sectionStartPos),p};if(!t||this.allPacketsAreKeyPackets()){outer:for(;;){let e=h.sectionStartPos+i.packetStride;for(;;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,!1);if(t){let e=ml(t,!1);if(e&&e.pts!==null){if(e.pts>r)break outer;h=e,yl(this.elementaryStream,h);break}}}e+=i.packetStride}}outer:for(let e=0;e<g+1;e++){let e=h.sectionStartPos-i.packetStride;for(;e>=i.packetOffset;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,!1);if(t){let e=ml(t,!1);if(e&&e.pts!==null){h=e;break}}}e-=i.packetStride}}return _(h.sectionStartPos,e=>e.pts<=r)}else{let e=d,t=null,n=!this.elementaryStream.canBeTrustedWithKeyPackets;for(;;){let d=null,f=e<=u.sectionStartPos,p,m=null;if(f)p=u,m=l;else{let t=await c(e,a.fileSize??1/0,n);p=t?.pesPacketHeader??null,m=t?.section??null}let h=!1,v=0;outer:for(;p&&!(t!==null&&p.sectionStartPos>=t);){if(p.pts<=r){let e;if(this.elementaryStream.canBeTrustedWithKeyPackets)e=p.randomAccessIndicator===1;else{D(m);let t=hl(m,!0);D(t);let n=new bl(this.elementaryStream,t);await n.markNextPacket(),e=n.suppliedPacket?.randomAccessIndicator===1}e&&(d=p)}if(p.pts>r&&(h=!0),h&&(v++,v>g))break;let e=p.sectionStartPos+i.packetStride;for(;;){let t=await i.readPacketHeader(e);if(!t)break outer;if(t.pid===s&&t.payloadUnitStartIndicator===1){let t=await i.readSection(e,n);if(t){let e=ml(t,!1);if(e&&e.pts!==null){p=e,m=t,yl(this.elementaryStream,p);break}}}e+=i.packetStride}}if(d){let e=d;if(v===0)outer:for(let t=0;t<g;t++){let t=e.sectionStartPos-i.packetStride;for(;t>=i.packetOffset;){let r=await i.readPacketHeader(t);if(!r)break outer;if(r.pid===s&&r.payloadUnitStartIndicator===1){let r=await i.readSection(t,n);if(r){let t=ml(r,!1);if(t&&t.pts!==null){e=t;break}}}t-=i.packetStride}}let t=await _(e.sectionStartPos,e=>e.pts<=r&&e.randomAccessIndicator===1);return D(t),t}if(f)return null;t=e,e=Math.max(Tr(e-u.sectionStartPos-o,i.packetStride)+u.sectionStartPos,u.sectionStartPos)}}}},_l=class extends gl{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 D(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}},vl=class extends gl{getType(){return`audio`}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return D(this.elementaryStream.info.decoderConfig),this.elementaryStream.info.decoderConfig}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 0}},yl=(e,t)=>{let n=e.referencePesPackets,r=N(n,t.sectionStartPos,e=>e.sectionStartPos);if(r>=0){let i=n[r];if(t.pts<=i.pts)return!1;let a=e.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-i.sectionStartPos<a)return!1;if(r<n.length-1){let e=n[r+1];if(e.pts<t.pts||e.sectionStartPos-t.sectionStartPos<a)return!1}}return n.splice(r+1,0,t),!0},bl=class{constructor(e,t){this.currentPos=0,this.pesPackets=[],this.currentPesPacketIndex=0,this.currentPesPacketPos=0,this.endPos=0,this.lastSuppliedPesPacket=null,this.nextPts=null,this.suppliedPacket=null,this.elementaryStream=e,this.pid=e.pid,this.demuxer=e.demuxer,this.startingPesPacket=t}ensureBuffered(e){let t=this.endPos-this.currentPos;return t>=e?e:this.bufferData(e-t).then(()=>Math.min(this.endPos-this.currentPos,e))}getCurrentPesPacket(){let e=this.pesPackets[this.currentPesPacketIndex];return D(e),e}async bufferData(e){let t=this.endPos+e;for(;this.endPos<t;){let e;if(this.pesPackets.length===0)e=this.startingPesPacket;else{let t=O(this.pesPackets).sectionEndPos;for(D(t!==null);;){let n=await this.demuxer.readPacketHeader(t);if(!n)return;if(n.pid===this.pid){let n=await this.demuxer.readSection(t,!0);if(!n)return;let r=hl(n,!1);if(r){e=r;break}}t+=this.demuxer.packetStride}}this.pesPackets.push(e),this.endPos+=e.data.byteLength}}readBytes(e){let t=this.getCurrentPesPacket(),n=this.currentPos-this.currentPesPacketPos,r=n+e;if(this.currentPos+=e,r<=t.data.byteLength)return t.data.subarray(n,r);let i=new Uint8Array(e);i.set(t.data.subarray(n));let a=t.data.byteLength-n;for(;;){this.advanceCurrentPacket();let t=this.getCurrentPesPacket(),n=e-a;if(n<=t.data.byteLength){i.set(t.data.subarray(0,n),a);break}i.set(t.data,a),a+=t.data.byteLength}return i}readU8(){let e=this.getCurrentPesPacket(),t=this.currentPos-this.currentPesPacketPos;return this.currentPos++,t<e.data.byteLength?e.data[t]:(this.advanceCurrentPacket(),e=this.getCurrentPesPacket(),e.data[0])}seekTo(e){if(e!==this.currentPos){if(e<this.currentPos)for(;e<this.currentPesPacketPos;){this.currentPesPacketIndex--;let e=this.getCurrentPesPacket();this.currentPesPacketPos-=e.data.byteLength}else for(;;){let t=this.getCurrentPesPacket();if(e<this.currentPesPacketPos+t.data.byteLength)break;this.currentPesPacketPos+=t.data.byteLength,this.currentPesPacketIndex++}this.currentPos=e}}skip(e){this.seekTo(this.currentPos+e)}advanceCurrentPacket(){this.currentPesPacketPos+=this.getCurrentPesPacket().data.byteLength,this.currentPesPacketIndex++}async markNextPacket(){D(!this.suppliedPacket);let e=this.elementaryStream;if(e.info.type===`video`){let t=e.info.codec,n=1024;if(t!==`avc`&&t!==`hevc`)throw Error(`Unhandled.`);let r=null;for(;;){let e=this.ensureBuffered(n);if(e instanceof Promise&&(e=await e),e===0)break;let i=this.currentPos,a=this.readBytes(e),o=a.byteLength,s=0;for(;s<o;){let e=a.indexOf(0,s);if(e===-1||e>=o)break;s=e;let n=i+s;if(s+4>=o){this.seekTo(n);break}let c=a[s+1],l=a[s+2],u=a[s+3],d=0,f=null;if(c===0&&l===0&&u===1?(d=4,f=a[s+4]):c===0&&l===1&&(d=3,f=u),d===0){s++;continue}let p=n;if(r===null){r=p,s+=d;continue}if(f!==null){let e=t===`avc`?Ia(f):Xa(f);if(t===`avc`?e===ja.AUD:e===Ma.AUD_NUT){let e=p-r;return this.seekTo(r),this.supplyPacket(e,0)}}s+=d}if(e<n)break}if(r!==null){let e=this.endPos-r;return this.seekTo(r),this.supplyPacket(e,0)}}else{let t=e.info.codec;for(;;){let n=this.ensureBuffered(128);n instanceof Promise&&(n=await n);let r=this.currentPos;for(;this.currentPos-r<n;){let n=this.readU8();if(t===`aac`){if(n!==255)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(Wc);if(r instanceof Promise&&(r=await r),r<Wc)return;let i=this.readBytes(Wc),a=Gc(Cp.tempFromBytes(i));if(a){this.seekTo(t);let n=this.ensureBuffered(a.frameLength);return n instanceof Promise&&(n=await n),this.supplyPacket(n,Math.round(qc*sl/e.info.sampleRate))}else this.seekTo(t+1)}else if(t===`mp3`){if(n!==255)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(ha);if(r instanceof Promise&&(r=await r),r<ha)return;let i=Ca(j(this.readBytes(ha)).getUint32(0),null);if(i.header){this.seekTo(t);let n=this.ensureBuffered(i.header.totalSize);n instanceof Promise&&(n=await n);let r=i.header.audioSamplesInFrame*sl/e.info.sampleRate;return this.supplyPacket(n,Math.round(r))}else this.seekTo(t+1)}else if(t===`ac3`){if(n!==11)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(5);if(r instanceof Promise&&(r=await r),r<5)return;let i=this.readBytes(5);if(i[0]!==11||i[1]!==119){this.seekTo(t+1);continue}let a=i[4]>>6,o=i[4]&63;if(a===3||o>37){this.seekTo(t+1);continue}let s=wo[3*o+a];D(s!==void 0),this.seekTo(t),r=this.ensureBuffered(s),r instanceof Promise&&(r=await r);let c=Math.round(To*sl/e.info.sampleRate);return this.supplyPacket(r,c)}else if(t===`eac3`){if(n!==11)continue;this.skip(-1);let t=this.currentPos,r=this.ensureBuffered(5);if(r instanceof Promise&&(r=await r),r<5)return;let i=this.readBytes(5);if(i[0]!==11||i[1]!==119){this.seekTo(t+1);continue}let a=(((i[2]&7)<<8|i[3])+1)*2,o=Oo[i[4]>>6==3?3:i[4]>>4&3];this.seekTo(t),r=this.ensureBuffered(a),r instanceof Promise&&(r=await r);let s=o*256,c=Math.round(s*sl/e.info.sampleRate);return this.supplyPacket(r,c)}else throw Error(`Unhandled.`)}if(n<128)break}}}supplyPacket(e,t){let n=this.getCurrentPesPacket(),r;if(this.lastSuppliedPesPacket===n)D(this.nextPts!==null),r=this.nextPts;else{if(n.pts===null)throw Error(dl);r=n.pts,yl(this.elementaryStream,n)}this.lastSuppliedPesPacket=n,this.nextPts=r+t;let i=n.sectionStartPos,a=i+(this.currentPos-this.currentPesPacketPos),o=this.readBytes(e),s=n.randomAccessIndicator;if(s===0&&!this.elementaryStream.canBeTrustedWithKeyPackets){if(this.elementaryStream.info.type===`audio`)s=1;else if(this.elementaryStream.info.decoderConfig){let e=vo(this.elementaryStream.info.codec,this.elementaryStream.info.decoderConfig,o)===`key`;s=Number(e)}}this.suppliedPacket={pts:r,data:o,sequenceNumber:a,sectionStartPos:i,randomAccessIndicator:s},this.pesPackets.splice(0,this.currentPesPacketIndex),this.currentPesPacketIndex=0}},xl=class{constructor(e,t){this.decodeOrderPackets=[],this.reorderBuffer=[],this.presentationOrderPackets=[],this.reachedEnd=!1,this.lastDuration=0,this.backing=e,this.context=t,this.reorderSize=e.getReorderSize(),D(this.reorderSize>=0)}async readNext(){if(this.decodeOrderPackets.length===0&&!await this.readNextPacket())return null;await this.ensureCurrentPacketHasNext();let e=this.decodeOrderPackets[0],t=this.presentationOrderPackets.indexOf(e);D(t!==-1);let n;for(t===this.presentationOrderPackets.length-1?n=this.lastDuration:(n=this.presentationOrderPackets[t+1].pts-e.pts,this.lastDuration=n),this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){let e=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(e))break;this.presentationOrderPackets.shift()}return{packet:e,duration:n}}async readNextPacket(){if(this.reachedEnd)return!1;let e;return this.context.suppliedPacket||await this.context.markNextPacket(),e=this.context.suppliedPacket,this.context.suppliedPacket=null,e?(this.decodeOrderPackets.push(e),this.processPacketThroughReorderBuffer(e),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){let e=this.decodeOrderPackets[0];for(D(e);;){let t=this.presentationOrderPackets.indexOf(e);if(t!==-1&&t<=this.presentationOrderPackets.length-2||!await this.readNextPacket())break}}processPacketThroughReorderBuffer(e){if(this.reorderBuffer.push(e),this.reorderBuffer.length>this.reorderSize){let e=0;for(let t=1;t<this.reorderBuffer.length;t++)this.reorderBuffer[t].pts<this.reorderBuffer[e].pts&&(e=t);let t=this.reorderBuffer[e];this.presentationOrderPackets.push(t),this.reorderBuffer.splice(e,1)}}flushReorderBuffer(){this.reorderBuffer.sort((e,t)=>e.pts-t.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}}})),Cl,wl,Tl,El,Dl,Ol,kl,Al,jl,Ml,Nl,Pl,Fl,Il,Ll,Rl,zl,Bl=n((()=>{Cl=`application/vnd.apple.mpegurl`,wl=`#EXT-X-STREAM-INF:`,Tl=`#EXT-X-I-FRAME-STREAM-INF:`,El=`#EXT-X-MEDIA:`,Dl=`#EXTINF:`,Ol=`#EXT-X-MAP:`,kl=`#EXT-X-KEY:`,Al=`#EXT-X-MEDIA-SEQUENCE:`,jl=`#EXT-X-BYTERANGE:`,Ml=`#EXT-X-PROGRAM-DATE-TIME:`,Nl=`#EXT-X-DISCONTINUITY`,Pl=`#EXT-X-TARGETDURATION:`,Fl=`#EXT-X-ENDLIST`,Il=`#EXT-X-PLAYLIST-TYPE:`,Ll=`#EXT-X-I-FRAMES-ONLY`,Rl=e=>e.length===0||e.startsWith(`#`)&&!e.startsWith(`#EXT`),zl=class{constructor(e){this._attributes={};let t=``,n=``,r=!1,i=!1;for(let a=0;a<e.length;a++){let o=e[a];o===`"`?i=!i:o===`=`&&!r&&!i?r=!0:o===`,`&&!i?(t&&(this._attributes[t.trim().toLowerCase()]=n),t=``,n=``,r=!1):r?n+=o:t+=o}t&&(this._attributes[t.trim().toLowerCase()]=n)}get(e){return this._attributes[e.toLowerCase()]??null}getAsNumber(e){let t=this.get(e);if(t===null)return null;let n=Number(t);return Number.isFinite(n)?n:null}merge(e){Object.assign(this._attributes,e._attributes)}}})),Vl,Hl,Ul,Wl,Gl=n((()=>{F(),Vl=class{constructor(e,t,n){this.nextInputCacheAge=0,this.inputCache=[],this.trackBackingsPromise=null,this.firstSegment=null,this.firstSegmentFirstTimestamps=new WeakMap,this.firstTimestampCache=new WeakMap,this.input=e,this.path=t,this.trackDeclarations=n}async getDurationFromMetadata(e){let t=await this.getSegmentAt(1/0,{skipLiveWait:e.skipLiveWait});return t?t.timestamp+t.duration:null}async getTrackBackings(){return this.trackBackingsPromise??=(async()=>{let e=[];if(this.trackDeclarations){for(let t of this.trackDeclarations)if(t.type===`video`){let n=ei(e,e=>e.getType()===`video`)+1;e.push(new Ul(this,t,n))}else if(t.type===`audio`){let n=ei(e,e=>e.getType()===`audio`)+1;e.push(new Wl(this,t,n))}}else{if(this.firstSegment=await this.getFirstSegment({}),!this.firstSegment)return[];let t=await this.getInputForSegment(this.firstSegment).getTracks();for(let n of t)if(n.type===`video`){let t=ei(e,e=>e.getType()===`video`)+1;e.push(new Ul(this,{id:e.length+1,type:`video`},t))}else if(n.type===`audio`){let t=ei(e,e=>e.getType()===`audio`)+1;e.push(new Wl(this,{id:e.length+1,type:`audio`},t))}}return e})()}async getFirstTimestampForInput(e){let t=this.firstTimestampCache.get(e);if(t!==void 0)return t;let n=await e.getFirstTimestamp();return this.firstTimestampCache.set(e,n),n}async getMediaOffset(e,t){let n=e.firstSegment??e,r;if(this.firstSegmentFirstTimestamps.has(n))r=this.firstSegmentFirstTimestamps.get(n);else{let e=this.getInputForSegment(n);r=await this.getFirstTimestampForInput(e),this.firstSegmentFirstTimestamps.set(n,r)}if(n===e)return n.timestamp-r;let i=await this.getFirstTimestampForInput(t),a=e.timestamp-n.timestamp,o=i-r-a;return Math.abs(o)<=Math.min(.25,a)?n.timestamp-r:e.timestamp-i}dispose(){for(let e of this.inputCache)e.input.dispose();this.inputCache.length=0}},Hl=class{constructor(e,t,n){this.packetInfos=new WeakMap,this.hydrationPromise=null,this.firstInputTrack=null,this.segmentedInput=e,this.decl=t,this.number=n}hydrate(){return this.hydrationPromise??=(async()=>{if(this.segmentedInput.firstSegment??=await this.segmentedInput.getFirstSegment({}),!this.segmentedInput.firstSegment)throw Error(`Missing first segment, can't retrieve track.`);let e=(await this.segmentedInput.getInputForSegment(this.segmentedInput.firstSegment).getTracks()).find(e=>e.type===this.decl.type&&e.number===this.number);if(!e)throw Error(`No matching track found in underlying media data.`);this.firstInputTrack=e})()}getId(){return this.decl.id}getType(){return this.decl.type}getNumber(){return this.number}delegate(e){return this.firstInputTrack?e():this.hydrate().then(e)}async getDecoderConfig(){return this.delegate(()=>this.firstInputTrack._backing.getDecoderConfig())}getHasOnlyKeyPackets(){return this.delegate(()=>this.firstInputTrack._backing.getHasOnlyKeyPackets?.()??null)}getPairingMask(){return 1n}getCodec(){return this.delegate(()=>this.firstInputTrack._backing.getCodec())}getInternalCodecId(){return this.delegate(()=>this.firstInputTrack._backing.getInternalCodecId())}getDisposition(){return this.delegate(()=>this.firstInputTrack._backing.getDisposition())}getLanguageCode(){return this.delegate(()=>this.firstInputTrack._backing.getLanguageCode())}getName(){return this.delegate(()=>this.firstInputTrack._backing.getName())}getTimeResolution(){return this.delegate(()=>this.firstInputTrack._backing.getTimeResolution())}async isRelativeToUnixEpoch(){return await this.hydrate(),D(this.segmentedInput.firstSegment),this.segmentedInput.firstSegment.relativeToUnixEpoch}getBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getBitrate())}getAverageBitrate(){return this.delegate(()=>this.firstInputTrack._backing.getAverageBitrate())}getDurationFromMetadata(e){return this.segmentedInput.getDurationFromMetadata(e)}getLiveRefreshInterval(){return this.segmentedInput.getLiveRefreshInterval()}async createAdjustedPacket(e,t,n){D(e.sequenceNumber>=0),D(this.segmentedInput.firstSegment);let r=await this.segmentedInput.getMediaOffset(t,n.input),i=t.timestamp-this.segmentedInput.firstSegment.timestamp,a=e.clone({timestamp:wr(e.timestamp+r,await n.getTimeResolution()),sequenceNumber:Math.floor(1e8*i)+e.sequenceNumber});return this.packetInfos.set(a,{segment:t,track:n,sourcePacket:e}),a}async getFirstPacket(e){await this.hydrate(),D(this.segmentedInput.firstSegment),D(this.firstInputTrack);let t=await this.firstInputTrack._backing.getFirstPacket(e);return t?this.createAdjustedPacket(t,this.segmentedInput.firstSegment,this.firstInputTrack):null}getNextPacket(e,t){return this._getNextInternal(e,t,!1)}getNextKeyPacket(e,t){return this._getNextInternal(e,t,!0)}async _getNextInternal(e,t,n){let r=this.packetInfos.get(e);if(!r)throw Error(`Packet was not created from this track.`);let i=n?await r.track._backing.getNextKeyPacket(r.sourcePacket,t):await r.track._backing.getNextPacket(r.sourcePacket,t);if(i)return this.createAdjustedPacket(i,r.segment,r.track);let a=r.segment;for(;;){let e=await this.segmentedInput.getNextSegment(a,{skipLiveWait:t.skipLiveWait});if(!e)return null;let n=(await this.segmentedInput.getInputForSegment(e).getTracks()).find(e=>e.type===r.track.type&&e.number===r.track.number);if(!n){a=e;continue}let i=await n._backing.getFirstPacket(t);return i?this.createAdjustedPacket(i,e,n):null}}getPacket(e,t){return this._getPacketInternal(e,t,!1)}getKeyPacket(e,t){return this._getPacketInternal(e,t,!0)}async _getPacketInternal(e,t,n){let r=await this.segmentedInput.getSegmentAt(e,{skipLiveWait:t.skipLiveWait});if(!r)return null;for(await this.hydrate();r;){let i=this.segmentedInput.getInputForSegment(r),a=(await i.getTracks()).find(e=>e.type===this.firstInputTrack.type&&e.number===this.firstInputTrack.number);if(!a){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}let o=e-await this.segmentedInput.getMediaOffset(r,i),s=n?await a._backing.getKeyPacket(o,t):await a._backing.getPacket(o,t);if(!s){r=await this.segmentedInput.getPreviousSegment(r,{skipLiveWait:t.skipLiveWait});continue}return this.createAdjustedPacket(s,r,a)}return null}},Ul=class extends Hl{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())}},Wl=class extends Hl{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())}}})),Kl=r({}),ql=n((()=>{})),Jl,Yl,Xl,Zl,Ql,$l,eu,tu,nu,ru,iu,au,ou,su,cu,lu,uu,du,fu,pu,mu=n((()=>{F(),ql(),xp(),Zr(),Jl=Kl===void 0?void 0:Kl,Yl=0,Xl=1/0,Zl=class extends gi{constructor(){super(...arguments),this._disposed=!1,this._refCount=0,this._usedForHls=!1,this._sizePromise=null,this.onread=null}async getSizeOrNull(){if(this._disposed)throw new bp;return this._sizePromise??=(async()=>{let e=this._getFileSize();return e===void 0?(await this._read(0,1,Yl,Xl),e=this._getFileSize(),D(e!==void 0),e):e})()}async getSize(){if(this._disposed)throw new bp;let e=await this.getSizeOrNull();if(e===null)throw Error(`Cannot determine the size of an unsized source.`);return e}slice(e,t){if(!Number.isInteger(e)||e<0)throw TypeError(`offset must be a non-negative integer.`);if(t!==void 0&&(!Number.isInteger(t)||t<0))throw TypeError(`length, when provided, must be a non-negative integer.`);return new pu(this,e,t)}_dispatchRead(e,t){this.onread?.(e,t),this._emit(`read`,{start:e,end:t})}ref(){return new Ql(this)}},Ql=class{constructor(e){if(this._freed=!1,e._disposed)throw Error(`Cannot ref a disposed source.`);e._refCount++,this._source=e}get source(){if(!this._source)throw Error(`Can't get source; ref has already been freed.`);return this._source}get freed(){return this._freed}free(){if(this._freed)throw Error(`Illegal operation: double free on SourceRef.`);let e=this.source;D(e._refCount>0),e._refCount--,e._refCount===0&&(e._dispose(),e._disposed=!0),this._freed=!0,this._source=null}[Symbol.dispose](){this.freed||this.free()}},$l=class extends Zl{constructor(e,t){if(typeof e!=`string`)throw TypeError(`rootPath must be a string.`);if(typeof t!=`function`)throw TypeError(`requestHandler must be a function.`);super(),this.rootPath=e,this.requestHandler=t}_resolveRequest(e){let t=this.requestHandler(e),n=e=>{if(!(e instanceof Zl||e instanceof Ql))throw TypeError(`requestHandler must return or resolve to a Source or SourceRef.`);let t=e instanceof Zl?e.ref():e;return t.source._usedForHls||=this._usedForHls,t};return t instanceof Promise?t.then(n):n(t)}},eu=(e,t)=>e.path===t.path,tu=class extends $l{constructor(){super(...arguments),this._root=null,this._rootRequest=null}_read(e,t,n,r){if(!this._root){if(!this._rootRequest){let e=this._resolveRequest({path:this.rootPath,isRoot:!0}),t=e=>{let t=e instanceof Zl?e.ref():e;return this._root=t,this._rootRequest=null,t};e instanceof Promise?this._rootRequest=e.then(t):(t(e),D(this._root))}if(this._rootRequest)return this._rootRequest.then(i=>i.source._read(e,t,n,r))}return this._root.source._read(e,t,n,r)}_getFileSize(){if(this._root)return this._root.source._getFileSize()}_dispose(){this._root?this._root.free():this._rootRequest&&this._rootRequest.then(e=>e.free())}},nu=class extends Zl{constructor(e){if(!(e instanceof ArrayBuffer)&&!(typeof SharedArrayBuffer<`u`&&e instanceof SharedArrayBuffer)&&!ArrayBuffer.isView(e))throw TypeError(`buffer must be an ArrayBuffer, SharedArrayBuffer, or ArrayBufferView.`);super(),this._onreadCalled=!1,this._bytes=A(e),this._view=j(e)}_getFileSize(){return this._bytes.byteLength}_read(){return this._onreadCalled||=(this._dispatchRead(0,this._bytes.byteLength),!0),{bytes:this._bytes,view:this._view,offset:0}}_dispose(){}},ru=class extends Zl{constructor(e,t={}){if(!(e instanceof Blob))throw TypeError(`blob must be a Blob.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.maxCacheSize!==void 0&&(!Qr(t.maxCacheSize)||t.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(t.useStreamReader!==void 0&&typeof t.useStreamReader!=`boolean`)throw TypeError(`options.useStreamReader, when provided, must be a boolean.`);super(),this._readers=new WeakMap,this._blob=e,this._options=t,this._orchestrator=new fu({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:du.fileSystem}),this._orchestrator.fileSize=e.size}_getFileSize(){return this._orchestrator.fileSize}_read(e,t,n,r){return this._orchestrator.read(e,t,n,r)}async _runWorker(e){D(e.strictTarget);let t=this._readers.get(e);for(t===void 0&&(t=(`stream`in this._blob)&&!Lr()&&this._options.useStreamReader!==!1?this._blob.slice(e.currentPos).stream().getReader():null,this._readers.set(e,t));e.currentPos<e.targetPos&&!e.aborted;)if(t){let{done:n,value:r}=await t.read();if(n)throw this._orchestrator.onWorkerFinished(e),Error(`Blob reader stopped unexpectedly before all requested data was read.`);if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+r.length),this._orchestrator.supplyWorkerData(e,r)}else{let t=await this._blob.slice(e.currentPos,e.targetPos).arrayBuffer();if(e.aborted)break;this._dispatchRead(e.currentPos,e.currentPos+t.byteLength),this._orchestrator.supplyWorkerData(e,new Uint8Array(t))}this._orchestrator.signalWorkerStoppedRunning(e),e.aborted&&await t?.cancel()}_dispose(){this._orchestrator.dispose()}},iu=.5*2**20,au=((e,t,n)=>{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 e=null;try{typeof window<`u`&&window.location!==void 0&&(e=new URL(n instanceof Request?n.url:n,window.location.href).origin)}catch{}if((!(typeof navigator<`u`&&typeof navigator.onLine==`boolean`)||navigator.onLine)&&e!==null&&e!==window.location.origin)return console.warn(`Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option.`),null}return Math.min(2**(e-2),16)}),ou=new Set,su=class e extends $l{constructor(t,n={}){if(typeof t!=`string`&&!(t instanceof URL)&&!(typeof Request<`u`&&t instanceof Request))throw TypeError(`url must be a string, URL or Request.`);if(!n||typeof n!=`object`)throw TypeError(`options must be an object.`);if(n.requestInit!==void 0&&(!n.requestInit||typeof n.requestInit!=`object`))throw TypeError(`options.requestInit, when provided, must be an object.`);if(n.getRetryDelay!==void 0&&typeof n.getRetryDelay!=`function`)throw TypeError(`options.getRetryDelay, when provided, must be a function.`);if(n.maxCacheSize!==void 0&&(!Qr(n.maxCacheSize)||n.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(n.parallelism!==void 0&&(!Number.isInteger(n.parallelism)||n.parallelism<1))throw TypeError(`options.parallelism, when provided, must be a positive number.`);if(n.fetchFn!==void 0&&typeof n.fetchFn!=`function`)throw TypeError(`options.fetchFn, when provided, must be a function.`);let r=t instanceof Request?t.url:t instanceof URL?t.href:t;super(r,t=>new e(t.path,this._options)),this._fileSizeDetermined=!1,this._url=t,this._options=n,this._getRetryDelay=n.getRetryDelay??au,this._orchestrator=new fu({maxCacheSize:n.maxCacheSize??64*2**20,maxWorkerCount:n.parallelism??2,runWorker:this._runWorker.bind(this),prefetchProfile:du.network})}_getFileSize(){return this._fileSizeDetermined?this._orchestrator.fileSize:void 0}_read(e,t,n,r){return this._orchestrator.read(e,t,n,r)}async _runWorker(e){for(;;){let t=new AbortController,n=await Nr(this._options.fetchFn??fetch,this._url,jr(this._options.requestInit??{},{headers:{Range:`bytes=${e.currentPos}-`},signal:t.signal}),this._getRetryDelay,()=>this._disposed);if(!n.ok)throw Error(`Error fetching ${String(this._url)}: ${n.status} ${n.statusText}`);outer:if(this._orchestrator.fileSize===null){let t=n.headers.get(`Content-Range`);if(t){let e=/\/(\d+)/.exec(t);if(e){this._orchestrator.supplyFileSize(Number(e[1]));break outer}}let r=n.headers.get(`Content-Length`);r&&this._orchestrator.supplyFileSize(e.currentPos+Number(r))}if(this._fileSizeDetermined=!0,n.status!==206){if(!this._usedForHls){let e=new URL(this._url instanceof Request?this._url.url:this._url,typeof window<`u`?window.location.href:void 0);e.origin!==`null`&&!(e.pathname.endsWith(`.m3u8`)||e.pathname.endsWith(`.m3u`))&&(ou.has(e.origin)||(console.log(this._usedForHls,this._url,e.pathname),console.warn(`HTTP server (origin ${e.origin}) did not respond to a range request with 206 Partial Content, meaning the entire resource will now be downloaded. To enable efficient media file streaming across a network, please make sure your server supports range requests.`),ou.add(e.origin)))}e.currentPos=0,this._orchestrator.options.maxCacheSize=1/0,this._orchestrator.fileSize===null?(e.targetPos=1/0,e.strictTarget=!1):e.targetPos=this._orchestrator.fileSize,this._orchestrator.consolidateEverythingIntoOneWorker(e)}if(!n.body)throw Error(`Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.`);let r=n.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted){t.abort(),this._orchestrator.signalWorkerStoppedRunning(e);return}let n;try{n=await r.read()}catch(e){if(this._disposed)throw e;let t=this._getRetryDelay(1,e,this._url);if(t!==null){console.error(`Error while reading response stream. Attempting to resume.`,e),await mi(1e3*t);break}else throw e}if(e.aborted)continue;let{done:i,value:a}=n;if(i){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+a.length),this._orchestrator.supplyWorkerData(e,a)}}}_dispose(){this._orchestrator.dispose()}},cu=class e extends $l{constructor(t,n={}){if(typeof t!=`string`)throw TypeError(`filePath must be a string.`);if(!n||typeof n!=`object`)throw TypeError(`options must be an object.`);if(n.maxCacheSize!==void 0&&(!Qr(n.maxCacheSize)||n.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(!Jl.fs)throw Error(`FilePathSource is only available in server-side environments (Node.js, Bun, Deno).`);super(t,t=>new e(t.path,n)),this._fileHandle=null,this._streamSource=new lu({getSize:async()=>(this._fileHandle=await Jl.fs.open(t,`r`),(await this._fileHandle.stat()).size),read:async(e,t)=>{D(this._fileHandle);let n=new Uint8Array(t-e);return await this._fileHandle.read(n,0,t-e,e),n},maxCacheSize:n.maxCacheSize,prefetchProfile:`fileSystem`})}_read(e,t,n,r){return this._streamSource._read(e,t,n,r)}_getFileSize(){return this._streamSource._getFileSize()}_dispose(){this._streamSource._dispose(),this._fileHandle?.close(),this._fileHandle=null}},lu=class extends Zl{constructor(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(typeof e.getSize!=`function`)throw TypeError(`options.getSize must be a function.`);if(typeof e.read!=`function`)throw TypeError(`options.read must be a function.`);if(e.dispose!==void 0&&typeof e.dispose!=`function`)throw TypeError(`options.dispose, when provided, must be a function.`);if(e.maxCacheSize!==void 0&&(!Qr(e.maxCacheSize)||e.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);if(e.prefetchProfile&&![`none`,`fileSystem`,`network`].includes(e.prefetchProfile))throw TypeError(`options.prefetchProfile, when provided, must be one of 'none', 'fileSystem' or 'network'.`);super(),this._options=e,this._orchestrator=new fu({maxCacheSize:e.maxCacheSize??8*2**20,maxWorkerCount:2,prefetchProfile:du[e.prefetchProfile??`none`],runWorker:this._runWorker.bind(this)})}_getFileSize(){return this._orchestrator.fileSize??void 0}_read(e,t,n,r){if(this._orchestrator.fileSize!==null)return this._orchestrator.read(e,t,n,r);let i=this._options.getSize();if(i instanceof Promise)return i.then(i=>{if(!Number.isInteger(i)||i<0)throw TypeError(`options.getSize must return or resolve to a non-negative integer.`);return this._orchestrator.fileSize=i,this._orchestrator.read(e,t,n,r)});if(!Number.isInteger(i)||i<0)throw TypeError(`options.getSize must return or resolve to a non-negative integer.`);return this._orchestrator.fileSize=i,this._orchestrator.read(e,t,n,r)}async _runWorker(e){for(;e.currentPos<e.targetPos&&!e.aborted;){let t=e.currentPos,n=e.targetPos,r=this._options.read(e.currentPos,n);if(r instanceof Promise&&(r=await r),e.aborted)break;if(r instanceof Uint8Array){if(r=A(r),r.length!==n-e.currentPos)throw Error(`options.read returned a Uint8Array with unexpected length: Requested ${n-e.currentPos} bytes, but got ${r.length}.`);this._dispatchRead(e.currentPos,e.currentPos+r.length),this._orchestrator.supplyWorkerData(e,r)}else if(r instanceof ReadableStream){let i=r.getReader();for(;e.currentPos<n&&!e.aborted;){let{done:r,value:a}=await i.read();if(r){if(e.currentPos<n)throw Error(`ReadableStream returned by options.read ended before supplying enough data. Requested ${n-t} bytes, but got ${e.currentPos-t}`);break}if(!(a instanceof Uint8Array))throw TypeError(`ReadableStream returned by options.read must yield Uint8Array chunks.`);if(e.aborted)break;let o=A(a);this._dispatchRead(e.currentPos,e.currentPos+o.length),this._orchestrator.supplyWorkerData(e,o)}}else throw TypeError(`options.read must return or resolve to a Uint8Array or a ReadableStream.`)}this._orchestrator.signalWorkerStoppedRunning(e)}_dispose(){this._orchestrator.dispose(),this._options.dispose?.()}},uu=class extends Zl{constructor(e,t={}){if(!(e instanceof ReadableStream))throw TypeError(`stream must be a ReadableStream.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.maxCacheSize!==void 0&&(!Qr(t.maxCacheSize)||t.maxCacheSize<0))throw TypeError(`options.maxCacheSize, when provided, must be a non-negative number.`);super(),this._reader=null,this._cache=[],this._pendingSlices=[],this._currentIndex=0,this._targetIndex=0,this._maxRequestedIndex=0,this._endIndex=null,this._pulling=!1,this._stream=e,this._maxCacheSize=t.maxCacheSize??32*2**20}_getFileSize(){return this._endIndex}_read(e,t){if(this._endIndex!==null&&t>this._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,t);let n=N(this._cache,e,e=>e.start),r=n===-1?null:this._cache[n];if(r&&r.start<=e&&t<=r.end)return{bytes:r.bytes,view:r.view,offset:r.start};let i=e,a=new Uint8Array(t-e);if(n!==-1)for(let r=n;r<this._cache.length;r++){let n=this._cache[r];if(n.start>=t)break;let o=Math.max(e,n.start);o>i&&this._throwDueToCacheMiss();let s=Math.min(t,n.end);o<s&&(a.set(n.bytes.subarray(o-n.start,s-n.start),o-e),i=s)}if(i===t)return{bytes:a,view:j(a),offset:e};this._currentIndex>i&&this._throwDueToCacheMiss();let{promise:o,resolve:s,reject:c}=P();return this._pendingSlices.push({start:e,end:t,bytes:a,resolve:s,reject:c}),this._targetIndex=Math.max(this._targetIndex,t),this._pulling||(this._pulling=!0,this._pull().catch(e=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(t=>t.reject(e)),this._pendingSlices.length=0;else throw e})),o}_throwDueToCacheMiss(){throw 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._currentIndex<this._targetIndex&&!this._disposed;){let{done:e,value:t}=await this._reader.read();if(e){for(let e of this._pendingSlices)e.resolve(null);this._pendingSlices.length=0,this._endIndex=this._currentIndex;break}let n=this._currentIndex,r=this._currentIndex+t.byteLength;this._dispatchRead(n,r);for(let e=0;e<this._pendingSlices.length;e++){let i=this._pendingSlices[e],a=Math.max(n,i.start),o=Math.min(r,i.end);a<o&&(i.bytes.set(t.subarray(a-n,o-n),a-i.start),o===i.end&&(i.resolve({bytes:i.bytes,view:j(i.bytes),offset:i.start}),this._pendingSlices.splice(e,1),e--))}for(this._cache.push({start:n,end:r,bytes:t,view:j(t),age:0});this._cache.length>0;){let e=this._cache[0];if(this._maxRequestedIndex-e.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=t.byteLength}this._pulling=!1}_dispose(){this._pendingSlices.length=0,this._cache.length=0,this._reader?.cancel()}},du={none:(e,t)=>({start:e,end:t}),fileSystem:(e,t)=>{let n=2**16;return e=Math.floor((e-n)/n)*n,t=Math.ceil((t+n)/n)*n,{start:e,end:t}},network:(e,t,n)=>{let r=2**16;e=Math.max(0,Math.floor((e-r)/r)*r);for(let r of n){let n=8*2**20,i=Math.max((r.startPos+r.targetPos)/2,r.targetPos-n);if(Gr(e,t,i,r.targetPos)){let e=r.targetPos-r.startPos,i=Math.ceil((e+1)/n)*n,a=2**Math.ceil(Math.log2(e+1)),o=Math.min(a,i);t=Math.max(t,r.startPos+o)}}return t=Math.max(t,e+iu),{start:e,end:t}}},fu=class{constructor(e){this.options=e,this.fileSize=null,this.nextAge=0,this.workers=[],this.cache=[],this.currentCacheSize=0,this.disposed=!1,this.queuedReads=[]}read(e,t,n,r){D(!this.disposed);let i=this.options.prefetchProfile(e,t,this.workers),a=Math.max(i.start,n),o=Math.min(i.end,this.fileSize??1/0,r);D(a<=e&&t<=o);let s=null,c=N(this.cache,e,e=>e.start),l=c===-1?null:this.cache[c];l&&l.start<=e&&t<=l.end&&(l.age=this.nextAge++,s={bytes:l.bytes,view:l.view,offset:l.start});let u=N(this.cache,a,e=>e.start),d=s?null:new Uint8Array(t-e),f=0,p=a,m=[];if(u!==-1){for(let n=u;n<this.cache.length;n++){let r=this.cache[n];if(r.start>=o)break;if(r.end<=a)continue;let i=Math.max(a,r.start),s=Math.min(o,r.end);if(D(i<=s),p<i&&m.push({start:p,end:i}),p=s,d){let n=Math.max(e,r.start),i=Math.min(t,r.end);if(n<i){let t=n-e;d.set(r.bytes.subarray(n-r.start,i-r.start),t),t===f&&(f=i-e)}}r.age=this.nextAge++}p<o&&m.push({start:p,end:o})}else m.push({start:a,end:o});if(d&&f>=d.length&&(s={bytes:d,view:j(d),offset:e}),m.length===0)return D(s),s;let{promise:h,resolve:g,reject:_}=P(),v=[];for(let n of m){let r=Math.max(e,n.start),i=Math.min(t,n.end);r===n.start&&i===n.end?v.push(n):r<i&&v.push({start:r,end:i})}let y=d&&{start:e,bytes:d,holes:v,resolve:g,reject:_};outer:for(let e of m){for(let t of this.workers)if(this.checkHoleAgainstWorker(t,e,y?[y]:[])){this.checkQueuedReadsAgainstWorker(t);continue outer}let t=e.end<o||this.fileSize!==null,n=this.createWorker(e.start,e.end,t);if(n)y&&(n.pendingSlices=[y]),this.runWorker(n);else{let n=N(this.queuedReads,e.start,e=>e.hole.start),r=n===-1?null:this.queuedReads[n];for(r&&e.start<=r.hole.end?(r.hole.end=Math.max(r.hole.end,e.end),r.strictTarget&&=t,y&&r.pendingSlices.push(y)):(n++,r={hole:{start:e.start,end:e.end},strictTarget:t,pendingSlices:y?[y]:[],age:this.nextAge++},this.queuedReads.splice(n,0,r));n+1<this.queuedReads.length;){let e=this.queuedReads[n+1];if(e.hole.start>r.hole.end)break;r.hole.end=Math.max(r.hole.end,e.hole.end),r.pendingSlices.push(...e.pendingSlices),r.strictTarget&&=e.strictTarget,r.age=Math.min(r.age,e.age),this.queuedReads.splice(n+1,1)}}}return s||=(D(d),h.then(t=>t&&{bytes:t,view:j(t),offset:e})),s}checkHoleAgainstWorker(e,t,n){if(Gr(t.start-2**17,t.start,e.currentPos,e.targetPos)){e.targetPos=Math.max(e.targetPos,t.end);for(let t=0;t<n.length;t++){let r=n[t];e.pendingSlices.includes(r)||e.pendingSlices.push(r)}return e.running||this.runWorker(e),!0}return!1}checkQueuedReadsAgainstWorker(e){let t=!1;for(let n=0;n<this.queuedReads.length;n++){let r=this.queuedReads[n];if(this.checkHoleAgainstWorker(e,r.hole,r.pendingSlices))this.queuedReads.splice(n,1),n--,t=!0;else if(t)break}}createWorker(e,t,n){if(this.workers.length>=this.options.maxWorkerCount){let e=null,t=null;for(let n=0;n<this.workers.length;n++){let r=this.workers[n];!r.running&&r.pendingSlices.length===0&&(!e||r.age<e.age)&&(t=n,e=r)}if(e)D(t!==null),D(e.pendingSlices.length===0),this.workers.splice(t,1);else return null}let r={startPos:e,currentPos:e,targetPos:t,strictTarget:n,running:!1,aborted:this.disposed,pendingSlices:[],age:this.nextAge++};return this.workers.push(r),r}runWorker(e){D(!e.running),D(e.currentPos<e.targetPos),e.running=!0,e.age=this.nextAge++,this.options.runWorker(e).catch(t=>{if(e.running=!1,e.pendingSlices.length>0)e.pendingSlices.forEach(e=>e.reject(t)),e.pendingSlices.length=0;else throw t}).finally(()=>{if(!e.running&&this.queuedReads.length>0){let e=0;for(let t=1;t<this.queuedReads.length;t++)this.queuedReads[t].age<this.queuedReads[e].age&&(e=t);let t=this.queuedReads[e];this.queuedReads.splice(e,1);let n=this.createWorker(t.hole.start,t.hole.end,t.strictTarget);D(n),n.pendingSlices=t.pendingSlices,this.runWorker(n)}})}consolidateEverythingIntoOneWorker(e){let t=new Set(e.pendingSlices);for(let n=0;n<this.workers.length;n++){let r=this.workers[n];if(r!==e){for(let e of r.pendingSlices)t.add(e);r.aborted=!0,r.pendingSlices.length=0,this.workers.splice(n,1),n--}}for(let e=0;e<this.queuedReads.length;e++){let n=this.queuedReads[e];for(let e of n.pendingSlices)t.add(e)}e.pendingSlices=[...t],this.queuedReads.length=0}supplyWorkerData(e,t){D(!e.aborted);let n=e.currentPos,r=n+t.length;this.insertIntoCache({start:n,end:r,bytes:t,view:j(t),age:this.nextAge++}),e.currentPos+=t.length,e.currentPos>e.targetPos&&(e.targetPos=e.currentPos,this.checkQueuedReadsAgainstWorker(e));for(let i=0;i<e.pendingSlices.length;i++){let a=e.pendingSlices[i],o=Math.max(n,a.start),s=Math.min(r,a.start+a.bytes.length);o<s&&a.bytes.set(t.subarray(o-n,s-n),o-a.start);for(let e=0;e<a.holes.length;e++){let t=a.holes[e];n<=t.start&&r>t.start&&(t.start=r),t.end<=t.start&&(a.holes.splice(e,1),e--)}a.holes.length===0&&(a.resolve(a.bytes),e.pendingSlices.splice(i,1),i--)}for(let t=0;t<this.workers.length;t++){let i=this.workers[t];e===i||i.running||Gr(n,r,i.currentPos,i.targetPos)&&(this.workers.splice(t,1),t--)}}supplyFileSize(e){D(this.fileSize===null),this.fileSize=e;for(let t of this.workers){t.targetPos=Math.min(t.targetPos,e),t.strictTarget=!0;for(let n=0;n<t.pendingSlices.length;n++){let r=t.pendingSlices[n];for(let i of r.holes)if(i.end>e){r.resolve(null),t.pendingSlices.splice(n,1),n--;break}}}for(let t=0;t<this.queuedReads.length;t++){let n=this.queuedReads[t];if(n.hole.start>=e){for(let e of n.pendingSlices)e.resolve(null);this.queuedReads.splice(t,1),t--}else if(n.hole.end>e){n.hole.end=e,n.strictTarget=!0;for(let t=0;t<n.pendingSlices.length;t++){let r=n.pendingSlices[t];r.start>=e&&(r.resolve(null),n.pendingSlices.splice(t,1),t--)}}}}signalWorkerStoppedRunning(e){e.running=!1,e.pendingSlices.length=0}onWorkerFinished(e){let t=this.workers.indexOf(e);D(t!==-1),e.running=!1,this.workers.splice(t,1),this.fileSize===null&&this.supplyFileSize(e.currentPos);for(let t of e.pendingSlices)t.resolve(null)}insertIntoCache(e){if(this.options.maxCacheSize===0)return;let t=N(this.cache,e.start,e=>e.start)+1;if(t>0){let n=this.cache[t-1];if(n.end>=e.end)return;if(n.end>e.start){let r=new Uint8Array(e.end-n.start);r.set(n.bytes,0),r.set(e.bytes,e.start-n.start),this.currentCacheSize+=e.end-n.end,n.bytes=r,n.view=j(r),n.end=e.end,t--,e=n}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length}else this.cache.splice(t,0,e),this.currentCacheSize+=e.bytes.length;for(let n=t+1;n<this.cache.length;n++){let t=this.cache[n];if(e.end<=t.start)break;if(e.end>=t.end){this.cache.splice(n,1),this.currentCacheSize-=t.bytes.length,n--;continue}let r=new Uint8Array(t.end-e.start);r.set(e.bytes,0),r.set(t.bytes,t.start-e.start),this.currentCacheSize-=e.end-t.start,e.bytes=r,e.view=j(r),e.end=t.end,this.cache.splice(n,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let e=0,t=this.cache[0];for(let n=1;n<this.cache.length;n++){let r=this.cache[n];r.age<t.age&&(e=n,t=r)}if(this.currentCacheSize-t.bytes.length<=this.options.maxCacheSize)break;this.cache.splice(e,1),this.currentCacheSize-=t.bytes.length}}dispose(){for(let e of this.workers)e.aborted=!0;this.workers.length=0,this.cache.length=0,this.disposed=!0}},pu=class extends Zl{constructor(e,t,n){if(super(),this._ref=null,e._disposed)throw Error(`Cannot create a slice of a disposed source.`);this._baseSource=e,this._offset=t,this._length=n??null}_getFileSize(){let e=this._baseSource._getFileSize();return e===void 0?this._length===null?void 0:this._length:e===null?this._length===null?null:this._length:br(e-this._offset,0,this._length??1/0)}_read(e,t,n,r){if(this._length!==null&&t>this._length)return null;let i=this._baseSource._read(this._offset+e,this._offset+t,this._offset+n,this._offset+r);return i instanceof Promise?i.then(e=>e?(e.offset-=this._offset,e):null):i?(i.offset-=this._offset,i):null}_dispose(){this._ref?.free()}ref(){return this._ref??=this._baseSource.ref(),super.ref()}}})),hu,gu,_u,vu,yu,bu=n((()=>{ls(),xp(),Gl(),F(),Bp(),mu(),Bl(),nd(),Vo(),hu=function(e,t,n){if(t!=null){if(typeof t!=`object`&&typeof t!=`function`)throw TypeError(`Object expected.`);var r,i;if(n){if(!Symbol.asyncDispose)throw TypeError(`Symbol.asyncDispose is not defined.`);r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw TypeError(`Symbol.dispose is not defined.`);r=t[Symbol.dispose],n&&(i=r)}if(typeof r!=`function`)throw TypeError(`Object not disposable.`);i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t},gu=(function(e){return function(t){function n(n){t.error=t.hasError?new e(n,t.error,`An error was suppressed during disposal.`):n,t.hasError=!0}var r,i=0;function a(){for(;r=t.stack.pop();)try{if(!r.async&&i===1)return i=0,t.stack.push(r),Promise.resolve().then(a);if(r.dispose){var e=r.dispose.call(r.value);if(r.async)return i|=2,Promise.resolve(e).then(a,function(e){return n(e),a()})}else i|=1}catch(e){n(e)}if(i===1)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}return a()}})(typeof SuppressedError==`function`?SuppressedError:function(e,t,n){var r=Error(n);return r.name=`SuppressedError`,r.error=e,r.suppressed=t,r}),_u=/^0[xX][0-9a-fA-F]+$/,vu=/^data:.*;base64,/i,yu=class extends Vl{constructor(e,t,n,r){super(e.input,t,n),this.segments=[],this.nextLines=null,this.currentUpdateSegmentsPromise=null,this.streamHasEnded=!1,this.lastSegmentUpdateTime=-1/0,this.refreshInterval=5,this.demuxer=e,this.nextLines=r}runUpdateSegments(){return this.currentUpdateSegmentsPromise??=(async()=>{try{let e=this.getRemainingWaitTimeMs();e>0&&await mi(e),this.lastSegmentUpdateTime=performance.now(),await this.updateSegments()}finally{this.currentUpdateSegmentsPromise=null}})()}getRemainingWaitTimeMs(){let e=performance.now()-this.lastSegmentUpdateTime,t=Math.max(0,1e3*this.refreshInterval-e);return t<=50?0:t}async updateSegments(){let e=this.nextLines;if(this.nextLines=null,!e){let t={stack:[],error:void 0,hasError:!1};try{let n=await new Sp(hu(t,await this.demuxer.input._getSourceUncached({path:this.path,isRoot:!1}),!1).source).requestEntireFile();D(n),e=zp(n,n.length,{ignore:Rl})}catch(e){t.error=e,t.hasError=!0}finally{gu(t)}}let t=!1,n=0,r=null,i=null,a=0,o=null,s=null,c=null,l=null,u=null,d=null,f=!1,p=O(this.segments)??null,m=e=>{let t=e.indexOf(`@`),n=Number(t===-1?e:e.slice(0,t));if(!Number.isInteger(n)||n<0)throw Error(`Invalid #EXT-X-BYTERANGE length '${e}'.`);let r=null;if(t!==-1&&(r=Number(e.slice(t+1)),!Number.isInteger(r)||r<0))throw Error(`Invalid #EXT-X-BYTERANGE offset '${e}'.`);return{length:n,offset:r}},h=e=>{a=e,p&&(D(p.sequenceNumber!==null),p.sequenceNumber<e&&(n=p.timestamp+p.duration,o=p.firstSegment,s=p.initSegment,u=p.lastProgramDateTimeSeconds,p=null))};for(let g=0;g<e.length;g++){let _=e[g];if(!t){if(_!==`#EXTM3U`)throw Error(`Invalid M3U8 file; expected first line to be #EXTM3U.`);t=!0;continue}if(!_.startsWith(`#`)){if(!p){if(r===null)throw Error(`Invalid M3U8 file; a segment must be preceded by an #EXTINF tag.`);let e=i;if(e&&e.method===`AES-128`&&!e.iv){let t=new Uint8Array(Zo),n=j(t);n.setUint32(8,Math.floor(a/2**32)),n.setUint32(12,a),e={...e,iv:t}}let t={path:$r(this.path,_),offset:l?.offset??0,length:l?.length??null},c={timestamp:n,relativeToUnixEpoch:u!==null,firstSegment:o,sequenceNumber:a,location:t,duration:r,encryption:e,initSegment:s,lastProgramDateTimeSeconds:u};o??=c,n+=r,this.segments.push(c)}r=null,l===null?c=null:l=null,h(a+1)}if(_.startsWith(Dl)){if(p){f=!0;continue}f||=(u===null&&a>0&&d!==null&&(n=a*d),!0);let e=_.slice(Dl.length),t=e.indexOf(`,`),i=t===-1?e:e.slice(0,t),o=Number(i);if(!Number.isFinite(o)||o<0)throw Error(`Invalid #EXTINF tag duration '${i}'.`);r=o}else if(_.startsWith(Ol)){let e=new zl(_.slice(Ol.length)),t=e.get(`uri`);if(!t)throw Error(`Invalid #EXT-X-MAP tag; missing URI attribute.`);let a=e.get(`byterange`),o=null;if(a!==null&&(o=m(a)),o&&o.offset===null)throw Error(`Invalid #EXT-X-MAP tag; BYTERANGE attribute must have a specified offset.`);if(!p){let e={path:$r(this.path,t),offset:o?.offset??0,length:o?.length??null};if(i?.method===`AES-128`&&!i.iv)throw Error(`IV attribute must be set on #EXT-X-KEY tag preceding the #EXT-X-MAP tag.`);s={timestamp:n,relativeToUnixEpoch:u!==null,firstSegment:null,sequenceNumber:null,location:e,duration:0,encryption:i,initSegment:null,lastProgramDateTimeSeconds:u}}r=null,l===null?c=null:l=null}else if(_.startsWith(kl)){let e=new zl(_.slice(kl.length)),t=e.get(`method`);if(t===`NONE`)i=null;else if(t===`AES-128`){let t=e.get(`uri`);if(!t)throw Error(`Invalid #EXT-X-KEY: AES-128 requires a URI attribute.`);let n=null,r=e.get(`iv`);if(r){if(!_u.test(r))throw Error(`Unsupported IV format '${r}'.`);let e=r.slice(2);e=e.padStart(Zo*2,`0`),n=new Uint8Array(Zo);for(let t=0;t<Zo;t++){let r=-Zo*2+t;n[t]=parseInt(e.slice(r,r+2),16)}}let a=e.get(`keyformat`)??`identity`;if(a!==`identity`)throw Error(`For AES-128 encryption, only the 'identity' KEYFORMAT is currently supported. If you think other formats should be supported, please raise an issue.`);i={method:`AES-128`,keyUri:$r(this.path,t),iv:n,keyFormat:a}}else if(t===`SAMPLE-AES`||t===`SAMPLE-AES-CTR`){let n=e.get(`uri`);if(!n)throw Error(`Invalid #EXT-X-KEY: ${t} requires a URI attribute.`);if((e.get(`keyformat`)??`identity`)===`identity`)throw Error(`For SAMPLE-AES and SAMPLE-AES-CTR encryption, the 'identity' KEYFORMAT is not supported. If you think this format should be supported, please raise an issue.`);let r=null;if(vu.test(n)){let e=n.indexOf(`,`),t=Jr(n.slice(e+1));if(t.length>=8&&t[4]===112&&t[5]===115&&t[6]===115&&t[7]===104){let e=j(t).getUint32(0);r=zo(t.subarray(8,Math.min(e,t.length)))}}i={method:t,psshBox:r}}else throw Error(`Unsupported encryption method '${t}'. If you think this method should be supported, please raise an issue.`)}else if(_.startsWith(Al)){let e=_.slice(Al.length),t=Number(e);if(!Number.isInteger(t)||t<0)throw Error(`Invalid EXT-X-MEDIA-SEQUENCE value '${e}'.`);h(t)}else if(_.startsWith(jl)){let e=m(_.slice(jl.length));if(e.offset===null){if(c===null)throw Error(`Invalid M3U8 file; #EXT-X-BYTERANGE without offset requires a previous byte range.`);e.offset=c}l=e,c=e.offset+e.length}else if(_.startsWith(Ml)){if(p)continue;let e=_.slice(Ml.length),t=Date.parse(e);if(!Number.isFinite(t))continue;let r=t/1e3;if(u===r)continue;if(u===null&&this.segments.length>0){let e=O(this.segments),t=r-(e.timestamp+e.duration);for(let e of this.segments)e.timestamp+=t,e.relativeToUnixEpoch=!0;n+=t}u=r,n=r}else if(_===Nl)o=null;else if(_.startsWith(Pl)){let e=_.slice(Pl.length),t=Number(e);if(!Number.isFinite(t)||t<0)throw Error(`Invalid EXT-X-TARGETDURATION value '${e}'.`);this.refreshInterval=t,d=t}else if(_===Fl){this.streamHasEnded=!0;break}else _.startsWith(Il)&&_.slice(Il.length).toLowerCase()===`vod`&&(this.streamHasEnded=!0)}if(!t)throw Error(`Invalid M3U8 file; no #EXTM3U header.`)}async getFirstSegment(){return this.segments.length===0&&await this.runUpdateSegments(),this.segments[0]??null}async getSegmentAt(e,t){this.segments.length===0&&await this.runUpdateSegments();let n=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){let r=N(this.segments,e,e=>e.timestamp);if(r===-1)return null;if(r<this.segments.length-1||this.streamHasEnded||n)return this.segments[r];let i=this.segments[r];if(e<i.timestamp+i.duration)return i;await this.runUpdateSegments(),t.skipLiveWait&&(n=!0)}}async getNextSegment(e,t){let n=this.segments.indexOf(e);D(n!==-1);let r=n+1,i=!!t.skipLiveWait&&this.getRemainingWaitTimeMs()>0;for(;;){if(r<this.segments.length)return this.segments[r];if(this.streamHasEnded||i)return null;await this.runUpdateSegments(),t.skipLiveWait&&(i=!0)}}async getPreviousSegment(e){let t=this.segments.indexOf(e);return D(t!==-1),this.segments[t-1]??null}getInputForSegment(e){let t=e,n=this.inputCache.find(e=>e.segment===t);if(n)return n.age=this.nextInputCacheAge++,n.input;let r=null;(t.initSegment||t.firstSegment)&&(r=this.getInputForSegment(t.initSegment??t.firstSegment));let i={...this.input._formatOptions,isobmff:{...this.input._formatOptions.isobmff,resolveKeyId:this.input._formatOptions.isobmff?.resolveKeyId&&(e=>{if(!t.encryption||!(t.encryption.method===`SAMPLE-AES`||t.encryption.method===`SAMPLE-AES-CTR`)||!t.encryption.psshBox)return this.input._formatOptions.isobmff.resolveKeyId(e);let n=e.psshBoxes,{psshBox:r}=t.encryption;return(r.keyIds===null||r.keyIds.includes(e.keyId))&&!n.some(e=>Bo(e,r))&&(n=[...n,r]),this.input._formatOptions.isobmff.resolveKeyId({...e,psshBoxes:n})})}},a=new vp({source:new tu(t.location.path,async e=>{D(e.isRoot);let n={...e,isRoot:!1},r,i=t.location.offset>0||t.location.length!==null;if(!t.encryption||t.encryption.method===`SAMPLE-AES`||t.encryption.method===`SAMPLE-AES-CTR`){if(r=await this.input._getSourceCached(n),i){let e=r.source.slice(t.location.offset,t.location.length??void 0).ref();r.free(),r=e}}else if(t.encryption.method===`AES-128`){let e=t.encryption;D(e.iv);let a=await this.input._getSourceCached(n);if(i){let e=a.source.slice(t.location.offset,t.location.length??void 0).ref();a.free(),a=e}r=new uu(cs(new Sp(a.source),async()=>{let t={stack:[],error:void 0,hasError:!1};try{let n=await new Sp(hu(t,await this.input._getSourceCached({path:e.keyUri,isRoot:!1},gp),!1).source).requestSlice(0,Zo);if(!n)throw Error(`Invalid AES-128 key; expected at least 16 bytes of data.`);return{key:H(n,Zo),iv:e.iv}}catch(e){t.error=e,t.hasError=!0}finally{gu(t)}},()=>{a.free()})).ref()}else D(!1);return r}),formats:this.input._formats.filter(e=>!(e instanceof Vu)),initInput:r??void 0,formatOptions:i});if(a._onFormatDetermined=e=>{if((t.encryption?.method===`SAMPLE-AES`||t.encryption?.method===`SAMPLE-AES-CTR`)&&!e._isIsobmff)throw Error(`The SAMPLE-AES and SAMPLE-AES-CTR encryption methods are currently only supported for ISOBMFF files.`)},this.inputCache.push({segment:t,input:a,age:this.nextInputCacheAge++}),this.inputCache.length>4){let e=ti(this.inputCache,e=>e.age);D(e!==-1),this.inputCache.splice(e,1)}return a}async getLiveRefreshInterval(){return this.getRemainingWaitTimeMs()===0&&await this.runUpdateSegments(),this.streamHasEnded?null:this.refreshInterval}}})),xu,Su,Cu,wu,Tu,Eu,Du,Ou=n((()=>{ma(),Fo(),Ei(),F(),Bp(),Bl(),bu(),mu(),xu=class extends Po{constructor(e){super(e),this.metadataPromise=null,this.trackBackings=null,this.internalTracks=null,this.segmentedInputs=[],this.hasMasterPlaylist=!0}readMetadata(){return this.metadataPromise??=(async()=>{D(this.input._rootSource instanceof $l);let{rootPath:e}=this.input._rootSource,t=await this.input._reader.requestEntireFile();D(t);let n=zp(t,t.length,{ignore:Rl}),r=[],i=[];for(let t=1;t<n.length;t++){let a=n[t];if(a.startsWith(wl)){let i=t,o=n[++t];if(o===void 0)throw Error(`Incorrect M3U8 file; a line must follow the #EXT-X-STREAM-INF tag.`);let s=$r(e,o),c=new zl(a.slice(wl.length));if(c.getAsNumber(`bandwidth`)===null)throw Error(`Invalid M3U8 file; #EXT-X-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.`);r.push({fullPath:s,attributes:c,lineNumber:i,hasOnlyKeyPackets:!1})}else if(a.startsWith(Tl)){let n=new zl(a.slice(Tl.length)),i=n.get(`uri`);if(i===null)throw Error(`Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a URI attribute.`);if(n.getAsNumber(`bandwidth`)===null)throw Error(`Invalid M3U8 file; #EXT-X-I-FRAME-STREAM-INF tag requires a BANDWIDTH attribute with a valid numerical value.`);let o=$r(e,i);r.push({fullPath:o,attributes:n,lineNumber:t,hasOnlyKeyPackets:!0})}else if(a.startsWith(El)){let n=new zl(a.slice(El.length));if(n.get(`type`)===null)throw Error(`Invalid M3U8 file; #EXT-X-MEDIA tag requires a TYPE attribute.`);if(n.get(`group-id`)===null)throw Error(`Invalid M3U8 file; #EXT-X-MEDIA tag requires a GROUP-ID attribute.`);let r=null,o=n.get(`uri`);o!==null&&(r=$r(e,o)),i.push({fullPath:r,attributes:n,lineNumber:t})}else if(a!==Ll&&a.startsWith(Dl)){let t=new yu(this,e,null,n);this.segmentedInputs=[t],this.hasMasterPlaylist=!1,this.trackBackings=await t.getTrackBackings();return}}let a=[...new Set(i.filter(e=>e.attributes.get(`type`).toLowerCase()===`video`).map(e=>e.attributes.get(`group-id`)))],o=[...new Set(i.filter(e=>e.attributes.get(`type`).toLowerCase()===`audio`).map(e=>e.attributes.get(`group-id`)))],s=await Promise.all(r.map(async(t,n)=>{let r=[],s=t.attributes.get(`codecs`),c;if(s)c=s.split(`,`).map(e=>e.trim());else{let e=await this.getSegmentedInputForPath(t.fullPath).getTrackBackings(),n=await Promise.all(e.map(async e=>({track:e,codec:await e.getCodec()})));c=await Promise.all(n.filter(e=>e.codec!==null).map(e=>e.track.getDecoderConfig().then(e=>e.codec)))}let l=t.attributes.get(`video`),u=t.attributes.get(`audio`),d=c.some(e=>L.includes(na(e))),f=c.some(e=>Li.includes(na(e)));if(l!==null&&!d){if(!a.includes(l))throw Error(`Invalid M3U8 file; variant stream references video group "${l}" which is not defined in any #EXT-X-MEDIA tags.`);let t=i.find(e=>{let t=e.attributes.get(`group-id`),n=e.attributes.get(`type`);return t===l&&n.toLowerCase()===`video`});outer:if(t){let n=t.attributes.get(`uri`);if(n===null)break outer;let r=$r(e,n),i=(await this.getSegmentedInputForPath(r).getTrackBackings()).find(e=>e.getType()===`video`);if(!i||await i.getCodec()===null)break outer;let a=await i.getDecoderConfig().then(e=>e?.codec??null);D(a!==null),c.push(a)}}if(u!==null&&!f){if(!o.includes(u))throw Error(`Invalid M3U8 file; variant stream references audio group "${u}" which is not defined in any #EXT-X-MEDIA tags.`);let t=i.find(e=>{let t=e.attributes.get(`group-id`),n=e.attributes.get(`type`);return t===u&&n.toLowerCase()===`audio`});outer:if(t){let n=t.attributes.get(`uri`);if(n===null)break outer;let r=$r(e,n),i=(await this.getSegmentedInputForPath(r).getTrackBackings()).find(e=>e.getType()===`audio`);if(!i||await i.getCodec()===null)break outer;let a=await i.getDecoderConfig().then(e=>e?.codec??null);D(a!==null),c.push(a)}}c=[...new Set(c)];let p=null,m=null,h=t.attributes.getAsNumber(`bandwidth`);D(h!==null);let g=t.attributes.getAsNumber(`average-bandwidth`),_=t.attributes.get(`name`);for(let e of c){let s=na(e);if(s!==null){if(L.includes(s)){if(p!==null)throw Error(`Unsupported M3U8 file; multiple video codecs found in the CODECS attribute of a variant stream.`);p=e;let o=t.attributes.get(`video`);if(o===null){let e=t.attributes.get(`resolution`),i=null,a=null;if(e){let t=e.match(/^(\d+)x(\d+)$/);t&&(i=Number(t[1]),a=Number(t[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xr,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(n),peakBitrate:h,averageBitrate:g,name:_,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`video`,width:i,height:a}})}else{if(!a.includes(o))throw Error(`Invalid M3U8 file; variant stream references video group "${o}" which is not defined in any #EXT-X-MEDIA tags.`);for(let e of i){let i=e.attributes.get(`group-id`),a=e.attributes.get(`type`);if(i!==o||a.toLowerCase()!==`video`)continue;let s=e.attributes.get(`resolution`)??t.attributes.get(`resolution`),c=null,l=null;if(s){let e=s.match(/^(\d+)x(\d+)$/);e&&(c=Number(e[1]),l=Number(e[2]))}r.push({id:-1,demuxer:this,backingTrack:null,default:Tu(e.attributes),autoselect:Tu(e.attributes)||Eu(e.attributes),languageCode:Du(e.attributes.get(`language`)),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:p,pairingMask:1n<<BigInt(n),peakBitrate:null,averageBitrate:null,name:e.attributes.get(`name`),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`video`,width:c,height:l}})}}}else if(Li.includes(s)){if(m!==null)throw Error(`Unsupported M3U8 file; multiple audio codecs found in the CODECS attribute of a variant stream.`);m=e;let a=t.attributes.get(`audio`);if(a===null){let e=t.attributes.get(`channels`),i=e===null?null:Number(e.split(`/`)[0]);r.push({id:-1,demuxer:this,backingTrack:null,default:!0,autoselect:!0,languageCode:xr,lineNumber:t.lineNumber,fullPath:t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(n),peakBitrate:h,averageBitrate:g,name:_,hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`audio`,numberOfChannels:i!==null&&Number.isInteger(i)&&i>0?i:null}})}else{if(!o.includes(a))throw Error(`Invalid M3U8 file; variant stream references audio group "${a}" which is not defined in any #EXT-X-MEDIA tags.`);for(let e of i){let i=e.attributes.get(`group-id`),o=e.attributes.get(`type`);if(i!==a||o.toLowerCase()!==`audio`)continue;let s=e.attributes.get(`channels`)??t.attributes.get(`channels`),c=s===null?null:Number(s.split(`/`)[0]);r.push({id:-1,demuxer:this,backingTrack:null,default:Tu(e.attributes),autoselect:Tu(e.attributes)||Eu(e.attributes),languageCode:Du(e.attributes.get(`language`)),lineNumber:e.lineNumber,fullPath:e.fullPath??t.fullPath,fullCodecString:m,pairingMask:1n<<BigInt(n),peakBitrate:null,averageBitrate:null,name:e.attributes.get(`name`),hasOnlyKeyPackets:t.hasOnlyKeyPackets,info:{type:`audio`,numberOfChannels:c!==null&&Number.isInteger(c)&&c>0?c:null}})}}}}}return r})),c=[],l=e=>{let t=c.find(t=>t.fullPath===e.fullPath&&t.info.type===e.info.type);t?(t.pairingMask|=e.pairingMask,t.default||=e.default,t.autoselect||=e.autoselect,t.lineNumber=Math.min(t.lineNumber,e.lineNumber),e.peakBitrate!==null&&(t.peakBitrate=Math.max(t.peakBitrate??-1/0,e.peakBitrate)),e.averageBitrate!==null&&(t.averageBitrate=Math.max(t.averageBitrate??-1/0,e.averageBitrate)),t.languageCode===xr&&(t.languageCode=e.languageCode)):(e.id=c.length+1,c.push(e))};for(let e of s)for(let t of e)l(t);c.sort((e,t)=>e.lineNumber-t.lineNumber),this.trackBackings=[];for(let e of c)e.info.type===`video`?this.trackBackings.push(new Cu(e)):this.trackBackings.push(new wu(e));this.internalTracks=c})()}async getTrackBackings(){return await this.readMetadata(),D(this.trackBackings),this.trackBackings}getSegmentedInputForPath(e){let t=this.segmentedInputs.find(t=>t.path===e);if(t)return t;let n=null;return this.internalTracks&&(n=this.internalTracks.filter(t=>t.fullPath===e).map(e=>({id:e.id,type:e.info.type}))),t=new yu(this,e,n,null),this.segmentedInputs.push(t),t}async getMetadataTags(){return{}}async getMimeType(){return Cl}dispose(){if(this.segmentedInputs){for(let e of this.segmentedInputs)e.dispose();this.segmentedInputs.length=0}}},Su=class{constructor(e){this.internalTrack=e,this.hydrationPromise=null}hydrate(){return this.hydrationPromise??=(async()=>{let e=this.internalTrack.demuxer.getSegmentedInputForPath(this.internalTrack.fullPath),t=null,n=(await e.getTrackBackings()).filter(e=>e.getType()===this.getType());if(n.length===1)t=n[0];else if(this instanceof Cu){for(let e of n)if(await e.getCodec()===this.getCodec()){t=e;break}}else{D(this instanceof wu);for(let e of n)if(await e.getCodec()===this.getCodec()){t=e;break}}if(!t)throw Error(`Could not find matching track in underlying media data.`);this.internalTrack.backingTrack=t})()}delegate(e){return this.internalTrack.backingTrack?e():this.hydrate().then(e)}getCodec(){throw Error(`Not implemented on base class.`)}getDisposition(){return{...wi,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(){D(this.internalTrack.demuxer.internalTracks);let e=this.internalTrack.info.type,t=0;for(let n of this.internalTrack.demuxer.internalTracks)if(n.info.type===e&&t++,n===this.internalTrack)break;return t}getTimeResolution(){return this.delegate(()=>this.internalTrack.backingTrack.getTimeResolution())}isRelativeToUnixEpoch(){return this.delegate(()=>this.internalTrack.backingTrack.isRelativeToUnixEpoch())}getBitrate(){return this.internalTrack.peakBitrate}getAverageBitrate(){return this.internalTrack.averageBitrate}async getDurationFromMetadata(e){return await this.hydrate(),this.internalTrack.backingTrack.getDurationFromMetadata(e)}async getLiveRefreshInterval(){return await this.hydrate(),this.internalTrack.backingTrack.getLiveRefreshInterval()}getHasOnlyKeyPackets(){return this.internalTrack.hasOnlyKeyPackets||null}async getFirstPacket(e){return await this.hydrate(),this.internalTrack.backingTrack.getFirstPacket(e)}async getPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getPacket(e,t)}async getKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getKeyPacket(e,t)}async getNextPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextPacket(e,t)}async getNextKeyPacket(e,t){return await this.hydrate(),this.internalTrack.backingTrack.getNextKeyPacket(e,t)}},Cu=class extends Su{constructor(e){super(e)}get backingVideoTrack(){return this.internalTrack.backingTrack}getType(){return`video`}getCodec(){return na(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()}},wu=class extends Su{constructor(e){super(e)}get backingAudioTrack(){return this.internalTrack.backingTrack}getType(){return`audio`}getCodec(){return na(this.internalTrack.fullCodecString)}getNumberOfChannels(){return this.internalTrack.info.numberOfChannels===null?this.delegate(()=>this.backingAudioTrack.getNumberOfChannels()):this.internalTrack.info.numberOfChannels}getSampleRate(){return this.delegate(()=>this.backingAudioTrack.getSampleRate())}getMetadataCodecParameterString(){return this.backingAudioTrack?null:this.internalTrack.fullCodecString}async getDecoderConfig(){return await this.hydrate(),this.backingAudioTrack.getDecoderConfig()}},Tu=e=>{let t=e.get(`default`);if(t===null)return!1;let n=t.toUpperCase();if(n===`YES`)return!0;if(n===`NO`)return!1;throw Error(`Invalid M3U8 file; #EXT-X-MEDIA DEFAULT attribute must be YES or NO, got "${t}".`)},Eu=e=>{let t=e.get(`autoselect`);if(t===null)return!1;let n=t.toUpperCase();if(n===`YES`)return!0;if(n===`NO`)return!1;throw Error(`Invalid M3U8 file; #EXT-X-MEDIA AUTOSELECT attribute must be YES or NO, got "${t}".`)},Du=e=>e===null?xr:e.split(`-`)[0]||xr})),ku,Au,ju,Mu,Nu,Pu,Fu,Iu,Lu,Ru,zu,Bu,Vu,Hu,Uu,Wu,Gu,Ku,qu,Ju,Yu,Xu,Zu,Qu,$u,ed,td,nd=n((()=>{Ds(),nc(),mc(),yc(),Da(),Qp(),gc(),Lc(),Hc(),Kc(),Xc(),Bp(),ol(),Sl(),ul(),Ou(),Bl(),mu(),ku=class{constructor(){this._isIsobmff=!1}},Au=class extends ku{constructor(){super(...arguments),this._isIsobmff=!0}async _getMajorBrand(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return null;t.skip(4);let n=G(t,4);return n!==`ftyp`&&n!==`styp`?null:G(t,4)}_createDemuxer(e){return new us(e)}},ju=class extends Au{async _canReadInput(e){let t=await this._getMajorBrand(e);if(t!==null)return t!==`qt `;let n=e._reader.requestSlice(4,4);if(n instanceof Promise&&(n=await n),!n)return!1;let r=G(n,4);return r===`moof`||r===`sidx`}get name(){return`MP4`}get mimeType(){return`video/mp4`}},Mu=class extends Au{async _canReadInput(e){return await this._getMajorBrand(e)===`qt `}get name(){return`QuickTime File Format`}get mimeType(){return`video/quicktime`}},Nu=class extends ku{async isSupportedEBMLOfDocType(e,t){let n=e._reader.requestSlice(0,Us);if(n instanceof Promise&&(n=await n),!n)return!1;let r=Ws(n);if(r===null||r<1||r>8||B(n,r)!==z.EBML)return!1;let i=Js(n);if(typeof i!=`number`)return!1;let a=e._reader.requestSlice(n.filePos,i);if(a instanceof Promise&&(a=await a),!a)return!1;let o=n.filePos;for(;a.filePos<=o+i-Hs;){let e=Ys(a);if(!e)break;let{id:n,size:r}=e,i=a.filePos;if(r===void 0)return!1;switch(n){case z.EBMLVersion:if(B(a,r)!==1)return!1;break;case z.EBMLReadVersion:if(B(a,r)!==1)return!1;break;case z.DocType:if(Xs(a,r)!==t)return!1;break;case z.DocTypeVersion:if(B(a,r)>4)return!1;break}a.filePos=i+r}return!0}_canReadInput(e){return this.isSupportedEBMLOfDocType(e,`matroska`)}_createDemuxer(e){return new uc(e)}get name(){return`Matroska`}get mimeType(){return`video/x-matroska`}},Pu=class extends Nu{_canReadInput(e){return this.isSupportedEBMLOfDocType(e,`webm`)}get name(){return`WebM`}get mimeType(){return`video/webm`}},Fu=class extends ku{async _canReadInput(e){let t=0;for(;;){let n=e._reader.requestSlice(t,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=n.filePos+r.size}let n=await hc(e._reader,t,t+4096);if(!n)return!1;let r=n.header,i=Sa(r.mpegVersionId,r.channel),a=e._reader.requestSlice(n.startPos+i,4);if(a instanceof Promise&&(a=await a),!a)return!1;let o=W(a);if(o===va||o===ya)return!0;t=n.startPos+n.header.totalSize;let s=await hc(e._reader,t,t+ha);if(!s)return!1;let c=s.header;return!(r.channel!==c.channel||r.sampleRate!==c.sampleRate)}_createDemuxer(e){return new _c(e)}get name(){return`MP3`}get mimeType(){return`audio/mpeg`}},Iu=class extends ku{async _canReadInput(e){let t=e._reader.requestSlice(0,12);if(t instanceof Promise&&(t=await t),!t)return!1;let n=G(t,4);return n!==`RIFF`&&n!==`RIFX`&&n!==`RF64`?!1:(t.skip(4),G(t,4)===`WAVE`)}_createDemuxer(e){return new zc(e)}get name(){return`WAVE`}get mimeType(){return`audio/wav`}},Lu=class extends ku{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),t?G(t,4)===`OggS`:!1}_createDemuxer(e){return new Nc(e)}get name(){return`Ogg`}get mimeType(){return`application/ogg`}},Ru=class extends ku{async _canReadInput(e){let t=e._reader.requestSlice(0,4);return t instanceof Promise&&(t=await t),t?G(t,4)===`fLaC`:!1}get name(){return`FLAC`}get mimeType(){return`audio/flac`}_createDemuxer(e){return new il(e)}},zu=class extends ku{async _canReadInput(e){let t=0;for(;;){let n=e._reader.requestSlice(t,Wp);if(n instanceof Promise&&(n=await n),!n)break;let r=Jp(n);if(!r)break;t=n.filePos+r.size}let n=e._reader.requestSliceRange(t,Uc,Wc);if(n instanceof Promise&&(n=await n),!n)return!1;let r=Gc(n);if(!r||(t+=r.frameLength,n=e._reader.requestSliceRange(t,Uc,Wc),n instanceof Promise&&(n=await n),!n))return!1;let i=Gc(n);return i?r.objectType===i.objectType&&r.samplingFrequencyIndex===i.samplingFrequencyIndex&&r.channelConfiguration===i.channelConfiguration:!1}_createDemuxer(e){return new Jc(e)}get name(){return`ADTS`}get mimeType(){return`audio/aac`}},Bu=class extends ku{async _canReadInput(e){let t=cl+16+1,n=e._reader.requestSlice(0,t);if(n instanceof Promise&&(n=await n),!n)return!1;let r=H(n,t);return r[0]===71&&r[cl]===71||r[0]===71&&r[cl+16]===71?!0:r[4]===71&&r[4+cl+4]===71}_createDemuxer(e){return new pl(e)}get name(){return`MPEG Transport Stream`}get mimeType(){return`video/MP2T`}},Vu=class extends ku{async _canReadInput(e){let t=e._reader.requestSlice(0,7);if(t instanceof Promise&&(t=await t),!t||G(t,7)!==`#EXTM3U`)return!1;if(!(e._rootSource instanceof $l))throw TypeError("HLS inputs require `InputOptions.source` to be a PathedSource or a ref to one.");return e._rootSource._usedForHls=!0,!0}_createDemuxer(e){return new xu(e)}get name(){return`HTTP Live Streaming (HLS)`}get mimeType(){return Cl}},Hu=new ju,Uu=new Mu,Wu=new Nu,Gu=new Pu,Ku=new Fu,qu=new Iu,Ju=new Lu,Yu=new zu,Xu=new Ru,Zu=new Bu,Qu=new Vu,$u=[Qu,Hu,Uu,Wu,Gu,qu,Ju,Xu,Ku,Yu,Zu],ed=[Qu,Hu,Uu,Ku,Yu,Zu],td=(e,t)=>{if(!e||typeof e!=`object`)throw TypeError(`${t}, when provided, must be an object.`);if(e.isobmff!==void 0){if(!e.isobmff||typeof e.isobmff!=`object`)throw TypeError(`${t}.isobmff, when provided, must be an object.`);if(e.isobmff.resolveKeyId!==void 0&&typeof e.isobmff.resolveKeyId!=`function`)throw TypeError(`${t}.isobmff.resolveKeyId, when provided, must be a function.`)}}})),rd,id,ad,od,sd,cd,ld,ud,dd,fd,pd=n((()=>{ma(),Pf(),F(),rd=new Map,id=new Map,ad=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.codec!==void 0&&typeof t.codec!=`string`)throw TypeError(`options.codec, when provided, must be a string.`);if(t.codec!==void 0&&na(t.codec)!==e)throw TypeError(`options.codec, when provided, must match the specified codec (${e}).`);if(t.codedWidth!==void 0&&(!Number.isInteger(t.codedWidth)||t.codedWidth<=0))throw TypeError(`options.codedWidth, when provided, must be a positive integer.`);if(t.codedHeight!==void 0&&(!Number.isInteger(t.codedHeight)||t.codedHeight<=0))throw TypeError(`options.codedHeight, when provided, must be a positive integer.`);if(t.displayAspectWidth!==void 0&&(!Number.isInteger(t.displayAspectWidth)||t.displayAspectWidth<=0))throw TypeError(`options.displayAspectWidth, when provided, must be a positive integer.`);if(t.displayAspectHeight!==void 0&&(!Number.isInteger(t.displayAspectHeight)||t.displayAspectHeight<=0))throw TypeError(`options.displayAspectHeight, when provided, must be a positive integer.`);if(t.description!==void 0&&!er(t.description))throw 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 TypeError(`options.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(t.optimizeForLatency!==void 0&&typeof t.optimizeForLatency!=`boolean`)throw TypeError(`options.optimizeForLatency, when provided, must be a boolean.`)},od=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.codec!==void 0&&typeof t.codec!=`string`)throw TypeError(`options.codec, when provided, must be a string.`);if(t.codec!==void 0&&na(t.codec)!==e)throw TypeError(`options.codec, when provided, must match the specified codec (${e}).`);if(t.numberOfChannels!==void 0&&(!Number.isInteger(t.numberOfChannels)||t.numberOfChannels<=0))throw TypeError(`options.numberOfChannels, when provided, must be a positive integer.`);if(t.sampleRate!==void 0&&(!Number.isInteger(t.sampleRate)||t.sampleRate<=0))throw TypeError(`options.sampleRate, when provided, must be a positive integer.`);if(t.description!==void 0&&!er(t.description))throw TypeError(`options.description, when provided, must be a buffer source.`)},sd=e=>L.includes(e)?cd(e):Li.includes(e)?ld(e):!1,cd=async(e,t={})=>{if(!L.includes(e))return!1;ad(e,t);let n={...t,codedWidth:t.codedWidth??1280,codedHeight:t.codedHeight??720,codec:t.codec??Gi(e,1280,720,1e6)};n.description??=Zi(n);let r=JSON.stringify(n),i=rd.get(r);if(i)return i;let a=(async()=>Of.some(t=>t.supports(e,n))?!0:typeof VideoDecoder>`u`?!1:(await VideoDecoder.isConfigSupported(n)).supported===!0)();return rd.set(r,a),a},ld=async(e,t={})=>{if(!Li.includes(e))return!1;od(e,t);let n={...t,numberOfChannels:t.numberOfChannels??2,sampleRate:t.sampleRate??48e3,codec:t.codec??Yi(e,2,48e3)};if(n.description===void 0){let e=Qi(n);if(e===!1)return!1;n.description=e}let r=JSON.stringify(n),i=id.get(r);if(i)return i;let a=(async()=>kf.some(t=>t.supports(e,n))||Fi.includes(e)?!0:typeof AudioDecoder>`u`?!1:(await AudioDecoder.isConfigSupported(n)).supported===!0)();return id.set(r,a),a},ud=async()=>{let[e,t]=await Promise.all([dd(),fd()]);return[...e,...t]},dd=async(e=L,t)=>{let n=await Promise.all(e.map(e=>cd(e,t)));return e.filter((e,t)=>n[t])},fd=async(e=Li,t)=>{let n=await Promise.all(e.map(e=>ld(e,t)));return e.filter((e,t)=>n[t])}})),md,hd,gd,_d,vd,yd,bd,xd,Sd,Cd,wd,Td,Ed,Dd,Od,kd,Ad,jd,Md,Nd,Pd,Fd,Id,Ld,Rd,zd,Bd,Vd,Hd,Ud,Wd,Gd,Kd,qd,Jd,Yd,Xd=n((()=>{F(),md=function(e,t,n){if(t!=null){if(typeof t!=`object`&&typeof t!=`function`)throw TypeError(`Object expected.`);var r,i;if(n){if(!Symbol.asyncDispose)throw TypeError(`Symbol.asyncDispose is not defined.`);r=t[Symbol.asyncDispose]}if(r===void 0){if(!Symbol.dispose)throw TypeError(`Symbol.dispose is not defined.`);r=t[Symbol.dispose],n&&(i=r)}if(typeof r!=`function`)throw TypeError(`Object not disposable.`);i&&(r=function(){try{i.call(this)}catch(e){return Promise.reject(e)}}),e.stack.push({value:t,dispose:r,async:n})}else n&&e.stack.push({async:!0});return t},hd=(function(e){return function(t){function n(n){t.error=t.hasError?new e(n,t.error,`An error was suppressed during disposal.`):n,t.hasError=!0}var r,i=0;function a(){for(;r=t.stack.pop();)try{if(!r.async&&i===1)return i=0,t.stack.push(r),Promise.resolve().then(a);if(r.dispose){var e=r.dispose.call(r.value);if(r.async)return i|=2,Promise.resolve(e).then(a,function(e){return n(e),a()})}else i|=1}catch(e){n(e)}if(i===1)return t.hasError?Promise.reject(t.error):Promise.resolve();if(t.hasError)throw t.error}return a()}})(typeof SuppressedError==`function`?SuppressedError:function(e,t,n){var r=Error(n);return r.name=`SuppressedError`,r.error=e,r.suppressed=t,r}),Zr(),gd=-1/0,_d=-1/0,vd=null,typeof FinalizationRegistry<`u`&&(vd=new FinalizationRegistry(e=>{let t=performance.now();e.type===`video`?(t-gd>=1e3&&(console.error(`A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them.`),gd=t),typeof VideoFrame<`u`&&e.data instanceof VideoFrame&&e.data.close()):(t-_d>=1e3&&(console.error(`An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them.`),_d=t),typeof AudioData<`u`&&e.data instanceof AudioData&&e.data.close())})),yd=class{constructor(){this._referenceCount=0,this._lastAllocationBuffer=null}},bd=[`I420`,`I420P10`,`I420P12`,`I420A`,`I420AP10`,`I420AP12`,`I422`,`I422P10`,`I422P12`,`I422A`,`I422AP10`,`I422AP12`,`I444`,`I444P10`,`I444P12`,`I444A`,`I444AP10`,`I444AP12`,`NV12`,`RGBA`,`RGBX`,`BGRA`,`BGRX`],xd=new Set(bd),Sd=class e{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(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}get hasAlpha(){return this.format&&this.format.includes(`A`)}constructor(t,n){if(this._closed=!1,t instanceof ArrayBuffer||typeof SharedArrayBuffer<`u`&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t)){if(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.format===void 0||!xd.has(n.format))throw TypeError(`init.format must be one of: `+bd.join(`, `));if(!Number.isInteger(n.codedWidth)||n.codedWidth<=0)throw TypeError(`init.codedWidth must be a positive integer.`);if(!Number.isInteger(n.codedHeight)||n.codedHeight<=0)throw TypeError(`init.codedHeight must be a positive integer.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(n.layout!==void 0){if(!Array.isArray(n.layout))throw TypeError(`init.layout, when provided, must be an array.`);for(let e of n.layout){if(!e||typeof e!=`object`||Array.isArray(e))throw TypeError(`Each entry in init.layout must be an object.`);if(!Number.isInteger(e.offset)||e.offset<0)throw TypeError(`plane.offset must be a non-negative integer.`);if(!Number.isInteger(e.stride)||e.stride<0)throw TypeError(`plane.stride must be a non-negative integer.`)}}if(n.visibleRect!==void 0&&ii(n.visibleRect,`init.visibleRect`),n.displayWidth!==void 0&&(!Number.isInteger(n.displayWidth)||n.displayWidth<=0))throw TypeError(`init.displayWidth, when provided, must be a positive integer.`);if(n.displayHeight!==void 0&&(!Number.isInteger(n.displayHeight)||n.displayHeight<=0))throw TypeError(`init.displayHeight, when provided, must be a positive integer.`);if(n.displayWidth!==void 0!=(n.displayHeight!==void 0))throw TypeError(`init.displayWidth and init.displayHeight must be either both provided or both omitted.`);this._data=A(t).slice(),this._layout=n.layout??Nd(n.format,n.codedWidth,n.codedHeight),this.format=n.format,this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0;let e=n.colorSpace??null;e===null&&(e=this.format===`RGBA`||this.format===`RGBX`||this.format===`BGRA`||this.format===`BGRX`?{primaries:`bt709`,transfer:`iec61966-2-1`,matrix:`rgb`,fullRange:!0}:{primaries:`bt709`,transfer:`bt709`,matrix:`bt709`,fullRange:!1}),this.colorSpace=new Od(e),this.visibleRect={left:n.visibleRect?.left??0,top:n.visibleRect?.top??0,width:n.visibleRect?.width??n.codedWidth,height:n.visibleRect?.height??n.codedHeight},n.displayWidth===void 0?(this.squarePixelWidth=this.visibleRect.width,this.squarePixelHeight=this.visibleRect.height):(this.squarePixelWidth=this.rotation%180==0?n.displayWidth:n.displayHeight,this.squarePixelHeight=this.rotation%180==0?n.displayHeight:n.displayWidth)}else if(typeof VideoFrame<`u`&&t instanceof VideoFrame){if(n?.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(n?.timestamp!==void 0&&!Number.isFinite(n?.timestamp))throw TypeError(`init.timestamp, when provided, must be a number.`);if(n?.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);n?.visibleRect!==void 0&&ii(n.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=n?.rotation??0,this.squarePixelWidth=t.displayWidth,this.squarePixelHeight=t.displayHeight,this.timestamp=n?.timestamp??t.timestamp/1e6,this.duration=n?.duration??(t.duration??0)/1e6,this.colorSpace=new Od(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(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(typeof VideoFrame<`u`)return new e(new VideoFrame(t,{timestamp:Math.trunc(n.timestamp*Ar),duration:Math.trunc((n.duration??0)*Ar)||void 0}),n);let r=0,i=0;if(`naturalWidth`in t?(r=t.naturalWidth,i=t.naturalHeight):`videoWidth`in t?(r=t.videoWidth,i=t.videoHeight):`width`in t&&(r=Number(t.width),i=Number(t.height)),!r||!i)throw TypeError(`Could not determine dimensions.`);let a=new OffscreenCanvas(r,i),o=a.getContext(`2d`,{alpha:zr(),willReadFrequently:!0});D(o),o.drawImage(t,0,0),this._data=a,this._layout=null,this.format=`RGBX`,this.visibleRect={left:0,top:0,width:r,height:i},this.squarePixelWidth=r,this.squarePixelHeight=i,this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0,this.colorSpace=new Od({matrix:`rgb`,primaries:`bt709`,transfer:`iec61966-2-1`,fullRange:!0})}else if(t instanceof yd){if(!n||typeof n!=`object`)throw TypeError(`init must be an object.`);if(n.rotation!==void 0&&![0,90,180,270].includes(n.rotation))throw TypeError(`init.rotation, when provided, must be 0, 90, 180, or 270.`);if(!Number.isFinite(n.timestamp))throw TypeError(`init.timestamp must be a number.`);if(n.duration!==void 0&&(!Number.isFinite(n.duration)||n.duration<0))throw TypeError(`init.duration, when provided, must be a non-negative number.`);if(this._data=t,t._referenceCount++,this.format=t.getFormat(),this.format!==null&&!bd.includes(this.format))throw 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 TypeError(`getCodedWidth() must return a positive integer.`);if(!Number.isInteger(this.visibleRect.height)||this.visibleRect.height<=0)throw TypeError(`getCodedHeight() must return a positive integer.`);if(this.squarePixelWidth=t.getSquarePixelWidth(),!Number.isInteger(this.squarePixelWidth)||this.squarePixelWidth<=0)throw TypeError(`getSquarePixelWidth() must return a positive integer.`);if(this.squarePixelHeight=t.getSquarePixelHeight(),!Number.isInteger(this.squarePixelHeight)||this.squarePixelHeight<=0)throw TypeError(`getSquarePixelHeight() must return a positive integer.`);this.rotation=n.rotation??0,this.timestamp=n.timestamp,this.duration=n.duration??0,this.colorSpace=t.getColorSpace()}else throw TypeError(`Invalid data type: Must be a BufferSource, CanvasImageSource, or VideoSampleResource.`);this.pixelAspectRatio=ri({num:this.squarePixelWidth*this.codedHeight,den:this.squarePixelHeight*this.codedWidth}),vd?.register(this,{type:`video`,data:this._data},this)}clone(){if(this._closed)throw Error(`VideoSample is closed.`);return D(this._data!==null),this._data instanceof yd?new e(this._data,{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):kd(this._data)?new e(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):this._data instanceof Uint8Array?(D(this._layout),new e(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight})):new e(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation,visibleRect:this.visibleRect,displayWidth:this.displayWidth,displayHeight:this.displayHeight})}close(){this._closed||=(vd?.unregister(this),this._data instanceof yd?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):kd(this._data)?this._data.close():this._data=null,!0)}allocationSize(e={}){if(Md(e),this._closed)throw Error(`VideoSample is closed.`);if((e.format??this.format)==null)throw Error(`Cannot get allocation size when format is null.`);return kd(this._data)?this._data.allocationSize(e):Fd(this,e).allocationSize}async copyTo(t,n={}){if(!er(t))throw TypeError(`destination must be an ArrayBuffer or an ArrayBuffer view.`);if(Md(n),this._closed)throw Error(`VideoSample is closed.`);if((n.format??this.format)==null)throw Error(`Cannot copy video sample data when format is null.`);if(D(this._data!==null),kd(this._data))return this._data.copyTo(t,n);if(n.format&&![`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(this.format)&&[`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(n.format))if(this._data instanceof yd){let r={stack:[],error:void 0,hasError:!1};try{let i=md(r,await this._data.toRgbSample({timestamp:this.timestamp,duration:this.duration,rotation:this.rotation},n.colorSpace??`srgb`),!1);if(!(i instanceof e))throw TypeError(`toRgbSample() must return a VideoSample.`);if(![`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(i.format))throw Error(`Sample returned by toRgbSample was expected to have an RGB format, got '${i.format}' instead.`);return await i.copyTo(t,n)}catch(e){r.error=e,r.hasError=!0}finally{hd(r)}}else{if(typeof VideoFrame>`u`)throw Error(`For this sample, converting from a non-RGB to an RGB format requires VideoFrame to be defined.`);let e=this.toVideoFrame(),r=await e.copyTo(t,n);return e.close(),r}let r=Fd(this,n);D(this.format);let i=A(t);if(i.byteLength<r.allocationSize)throw TypeError(`Destination buffer too small. Required: ${r.allocationSize}, Available: ${i.byteLength}`);let a=Pd(this.format),o;if(this._data instanceof yd){let e=this._data.getDataPlanes();if(e instanceof Promise&&(e=await e),!Array.isArray(e)||e.some(e=>!(e.data instanceof Uint8Array)||!Number.isInteger(e.stride)||e.stride<0))throw TypeError(`getDataPlanes() must return an array of objects with a Uint8Array "data" property and a non-negative integer "stride" property.`);o=e}else if(this._data instanceof Uint8Array)D(this._layout),D(this._layout.length===a.length),o=this._layout.map((e,t)=>{let n=Math.ceil(this.codedHeight/a[t].heightDivisor);return{data:this._data.subarray(e.offset,e.offset+e.stride*n),stride:e.stride}});else{let e=this._data.getContext(`2d`);D(e),o=[{data:A(e.getImageData(0,0,this.codedWidth,this.codedHeight).data),stride:4*this.codedWidth}]}let s=[],c=a.length;for(let e=0;e<c;e++){let t=r.computedLayouts[e],n=o[e].stride,a=o[e].data,c=t.sourceTop*n;c+=t.sourceLeftBytes;let l=t.destinationOffset,u=t.sourceWidthBytes,d={offset:l,stride:t.destinationStride};for(let e=0;e<t.sourceHeight;e++){if(c+u>a.byteLength)throw Error(`Source buffer OOB read.`);if(l+u>i.byteLength)throw Error(`Destination buffer OOB write.`);let e=a.subarray(c,c+u);i.set(e,l),c+=n,l+=t.destinationStride}s.push(d)}if(n.format!==void 0){let e=this.format.startsWith(`RGB`)!==n.format.startsWith(`RGB`),t=this.format.includes(`X`)&&n.format.includes(`A`);if(e||t)for(let n=0;n<r.allocationSize;n+=4){if(e){let e=i[n];i[n]=i[n+2],i[n+2]=e}t&&(i[n+3]=255)}}return s}toVideoFrame(){if(this._closed)throw Error(`VideoSample is closed.`);if(D(this._data!==null),this._data instanceof yd){if(this.format===null)throw Error(`Cannot convert a VideoSampleResource-backed VideoSample to VideoFrame if format is null.`);let e=this._data.getDataPlanes();if(e instanceof Promise)throw Error(`Cannot convert a VideoSampleResource-backed VideoSample to VideoFrame if getDataPlanes() returns a promise.`);let t=e.reduce((e,t)=>e+t.data.byteLength,0),n=new Uint8Array(t),r=0,i=[];for(let t of e)n.set(t.data,r),i.push(r),r+=t.data.byteLength;return new VideoFrame(n,{format:this.format,layout:e.map((e,t)=>({offset:i[t],stride:e.stride})),codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration,colorSpace:this.colorSpace,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight})}else if(kd(this._data))return new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0});else if(this._data instanceof Uint8Array)return new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace,displayWidth:this.squarePixelWidth,displayHeight:this.squarePixelHeight});else return new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(e,t,n,r,i,a,o,s,c){let l=0,u=0,d=this.displayWidth,f=this.displayHeight,p=0,m=0,h=this.displayWidth,g=this.displayHeight;if(a===void 0?(p=t,m=n,r!==void 0&&(h=r,g=i)):(l=t,u=n,d=r,f=i,p=a,m=o,s===void 0?(h=d,g=f):(h=s,g=c)),!(typeof CanvasRenderingContext2D<`u`&&e instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<`u`&&e instanceof OffscreenCanvasRenderingContext2D))throw TypeError(`context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.`);if(!Number.isFinite(l))throw TypeError(`sx must be a number.`);if(!Number.isFinite(u))throw TypeError(`sy must be a number.`);if(!Number.isFinite(d)||d<0)throw TypeError(`sWidth must be a non-negative number.`);if(!Number.isFinite(f)||f<0)throw TypeError(`sHeight must be a non-negative number.`);if(!Number.isFinite(p))throw TypeError(`dx must be a number.`);if(!Number.isFinite(m))throw TypeError(`dy must be a number.`);if(!Number.isFinite(h)||h<0)throw TypeError(`dWidth must be a non-negative number.`);if(!Number.isFinite(g)||g<0)throw TypeError(`dHeight must be a non-negative number.`);if(this._closed)throw Error(`VideoSample is closed.`);({sx:l,sy:u,sWidth:d,sHeight:f}=this._rotateSourceRegion(l,u,d,f,this.rotation));let _=this.toCanvasImageSource();e.save();let v=p+h/2,y=m+g/2;e.translate(v,y),e.rotate(this.rotation*Math.PI/180);let b=this.rotation%180==0?1:h/g;e.scale(1/b,b),e.drawImage(_,l,u,d,f,-h/2,-g/2,h,g),e.restore()}drawWithFit(e,t){if(!(typeof CanvasRenderingContext2D<`u`&&e instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<`u`&&e instanceof OffscreenCanvasRenderingContext2D))throw TypeError(`context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(![`fill`,`contain`,`cover`].includes(t.fit))throw TypeError(`options.fit must be 'fill', 'contain', or 'cover'.`);if(t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`options.rotation, when provided, must be 0, 90, 180, or 270.`);t.crop!==void 0&&jd(t.crop,`options.`);let n=e.canvas.width,r=e.canvas.height,i=t.rotation??this.rotation,[a,o]=i%180==0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],s=t.crop;s&&=Ad(s,a,o);let c,l,u,d,{sx:f,sy:p,sWidth:m,sHeight:h}=this._rotateSourceRegion(t.crop?.left??0,t.crop?.top??0,t.crop?.width??a,t.crop?.height??o,i);if(t.fit===`fill`)c=0,l=0,u=n,d=r;else{let[e,i]=t.crop?[t.crop.width,t.crop.height]:[a,o],s=t.fit===`contain`?Math.min(n/e,r/i):Math.max(n/e,r/i);u=e*s,d=i*s,c=(n-u)/2,l=(r-d)/2}e.save();let g=i%180==0?1:u/d;e.translate(n/2,r/2),e.rotate(i*Math.PI/180),e.scale(1/g,g),e.translate(-n/2,-r/2),e.drawImage(this.toCanvasImageSource(),f,p,m,h,c,l,u,d),e.restore()}_rotateSourceRegion(e,t,n,r,i){return i===90?[e,t,n,r]=[t,this.squarePixelHeight-e-n,r,n]:i===180?[e,t]=[this.squarePixelWidth-e-n,this.squarePixelHeight-t-r]:i===270&&([e,t,n,r]=[this.squarePixelWidth-t-r,e,r,n]),{sx:e,sy:t,sWidth:n,sHeight:r}}toCanvasImageSource(){if(this._closed)throw Error(`VideoSample is closed.`);if(D(this._data!==null),this._data instanceof yd||this._data instanceof Uint8Array){let e=this.toVideoFrame();return queueMicrotask(()=>e.close()),e}else return this._data}async transform(t){if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.width!==void 0&&(!Number.isInteger(t.width)||t.width<=0))throw TypeError(`options.width, when provided, must be a positive integer.`);if(t.height!==void 0&&(!Number.isInteger(t.height)||t.height<=0))throw TypeError(`options.height, when provided, must be a positive integer.`);if(t.roundDimensionsTo!==void 0&&(!Number.isInteger(t.roundDimensionsTo)||t.roundDimensionsTo<=0))throw TypeError(`options.roundDimensionsTo, when provided, must be a positive integer.`);if(t.fit!==void 0&&![`fill`,`contain`,`cover`].includes(t.fit))throw 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 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 TypeError(`options.rotate, when provided, must be 0, 90, 180 or 270.`);if(t.crop!==void 0&&jd(t.crop,`options.`),t.alpha!==void 0&&![`keep`,`discard`].includes(t.alpha))throw TypeError(`options.alpha, when provided, must be 'keep' or 'discard'.`);let n=Bn(this.rotation+(t.rotate??0)),[r,i]=n%180==0?[this.squarePixelWidth,this.squarePixelHeight]:[this.squarePixelHeight,this.squarePixelWidth],a=t.crop;a&&=Ad(a,r,i);let o=a?a.width:r,s=a?a.height:i,c=o/s,l,u;t.width!==void 0&&t.height===void 0?(l=t.width,u=l/c):t.width===void 0&&t.height!==void 0?(u=t.height,l=u*c):t.width!==void 0&&t.height!==void 0?(l=t.width,u=t.height):(l=o,u=s),l=Cr(l,t.roundDimensionsTo??1),u=Cr(u,t.roundDimensionsTo??1);let d={width:l,height:u,fit:t.fit??`fill`,rotation:n,crop:a??{left:0,top:0,width:r,height:i},alpha:t.alpha??`keep`};for(let e of Cd){let t=e(this,d);if(t instanceof Promise&&(t=await t),t!==null)return t}let f=null,p=!1;for(let e of Ed)if(e.canvas.width===d.width&&e.canvas.height===d.height){f=e.canvas,e.age=Dd++;break}if(f===null){if(typeof OffscreenCanvas<`u`)f=new OffscreenCanvas(d.width,d.height);else{if(typeof window>`u`||typeof document>`u`)throw Error(`Cannot transform VideoSamples in this environment. Either run in an environment with OffscreenCanvas or HTMLCanvasElement, or supply a custom VideoSample transformer using registerVideoSampleTransformer().`);f=document.createElement(`canvas`),f.width=d.width,f.height=d.height}p=!0,Ed.length>=Td&&Ed.splice(ti(Ed,e=>e.age),1),Ed.push({canvas:f,age:Dd++})}let m=f.getContext(`2d`,{alpha:!0});return D(m),d.alpha===`discard`?(m.fillStyle=`black`,m.fillRect(0,0,d.width,d.height)):p||m.clearRect(0,0,d.width,d.height),this.drawWithFit(m,{fit:d.fit,rotation:d.rotation,crop:d.crop}),new e(f,{timestamp:this.timestamp,duration:this.duration,rotation:0})}setRotation(e){if(![0,90,180,270].includes(e))throw TypeError(`newRotation must be 0, 90, 180, or 270.`);this.rotation=e}setTimestamp(e){if(!Number.isFinite(e))throw TypeError(`newTimestamp must be a number.`);this.timestamp=e}setDuration(e){if(!Number.isFinite(e)||e<0)throw TypeError(`newDuration must be a non-negative number.`);this.duration=e}[Symbol.dispose](){this.close()}},Cd=[],wd=e=>{Cd.includes(e)||Cd.push(e)},Td=3,Ed=[],Dd=0,Od=class{constructor(e){if(e!==void 0){if(!e||typeof e!=`object`)throw TypeError(`init.colorSpace, when provided, must be an object.`);let t=Object.keys(qn);if(e.primaries!=null&&!t.includes(e.primaries))throw TypeError(`init.colorSpace.primaries, when provided, must be one of ${t.join(`, `)}.`);let n=Object.keys(Yn);if(e.transfer!=null&&!n.includes(e.transfer))throw TypeError(`init.colorSpace.transfer, when provided, must be one of ${n.join(`, `)}.`);let r=Object.keys(Zn);if(e.matrix!=null&&!r.includes(e.matrix))throw TypeError(`init.colorSpace.matrix, when provided, must be one of ${r.join(`, `)}.`);if(e.fullRange!=null&&typeof e.fullRange!=`boolean`)throw TypeError(`init.colorSpace.fullRange, when provided, must be a boolean.`)}this.primaries=e?.primaries??null,this.transfer=e?.transfer??null,this.matrix=e?.matrix??null,this.fullRange=e?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}},kd=e=>typeof VideoFrame<`u`&&e instanceof VideoFrame,Ad=(e,t,n)=>{let r=Math.min(e.left,t),i=Math.min(e.top,n),a=Math.min(e.width,t-r),o=Math.min(e.height,n-i);return D(a>=0),D(o>=0),{left:r,top:i,width:a,height:o}},jd=(e,t)=>{if(!e||typeof e!=`object`)throw TypeError(t+`crop, when provided, must be an object.`);if(!Number.isInteger(e.left)||e.left<0)throw TypeError(t+`crop.left must be a non-negative integer.`);if(!Number.isInteger(e.top)||e.top<0)throw TypeError(t+`crop.top must be a non-negative integer.`);if(!Number.isInteger(e.width)||e.width<0)throw TypeError(t+`crop.width must be a non-negative integer.`);if(!Number.isInteger(e.height)||e.height<0)throw TypeError(t+`crop.height must be a non-negative integer.`)},Md=e=>{if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.colorSpace!==void 0&&![`display-p3`,`srgb`].includes(e.colorSpace))throw TypeError(`options.colorSpace, when provided, must be 'display-p3' or 'srgb'.`);if(e.format!==void 0&&typeof e.format!=`string`)throw TypeError(`options.format, when provided, must be a string.`);if(e.layout!==void 0){if(!Array.isArray(e.layout))throw TypeError(`options.layout, when provided, must be an array.`);for(let t of e.layout){if(!t||typeof t!=`object`)throw TypeError(`Each entry in options.layout must be an object.`);if(!Number.isInteger(t.offset)||t.offset<0)throw TypeError(`plane.offset must be a non-negative integer.`);if(!Number.isInteger(t.stride)||t.stride<0)throw TypeError(`plane.stride must be a non-negative integer.`)}}if(e.rect!==void 0){if(!e.rect||typeof e.rect!=`object`)throw TypeError(`options.rect, when provided, must be an object.`);if(e.rect.x!==void 0&&(!Number.isInteger(e.rect.x)||e.rect.x<0))throw TypeError(`options.rect.x, when provided, must be a non-negative integer.`);if(e.rect.y!==void 0&&(!Number.isInteger(e.rect.y)||e.rect.y<0))throw TypeError(`options.rect.y, when provided, must be a non-negative integer.`);if(e.rect.width!==void 0&&(!Number.isInteger(e.rect.width)||e.rect.width<0))throw TypeError(`options.rect.width, when provided, must be a non-negative integer.`);if(e.rect.height!==void 0&&(!Number.isInteger(e.rect.height)||e.rect.height<0))throw TypeError(`options.rect.height, when provided, must be a non-negative integer.`)}},Nd=(e,t,n)=>{let r=Pd(e),i=[],a=0;for(let e of r){let r=Math.ceil(t/e.widthDivisor),o=Math.ceil(n/e.heightDivisor),s=r*e.sampleBytes,c=s*o;i.push({offset:a,stride:s}),a+=c}return i},Pd=e=>{let t=(e,t,n,r,i)=>{let a=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:t,widthDivisor:n,heightDivisor:r},{sampleBytes:t,widthDivisor:n,heightDivisor:r}];return i&&a.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),a};switch(e){case`I420`:return t(1,1,2,2,!1);case`I420P10`:case`I420P12`:return t(2,2,2,2,!1);case`I420A`:return t(1,1,2,2,!0);case`I420AP10`:case`I420AP12`:return t(2,2,2,2,!0);case`I422`:return t(1,1,2,1,!1);case`I422P10`:case`I422P12`:return t(2,2,2,1,!1);case`I422A`:return t(1,1,2,1,!0);case`I422AP10`:case`I422AP12`:return t(2,2,2,1,!0);case`I444`:return t(1,1,1,1,!1);case`I444P10`:case`I444P12`:return t(2,2,1,1,!1);case`I444A`:return t(1,1,1,1,!0);case`I444AP10`:case`I444AP12`:return t(2,2,1,1,!0);case`NV12`:return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case`RGBA`:case`RGBX`:case`BGRA`:case`BGRX`:return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:pr(e),D(!1)}},Fd=(e,t)=>{let n={left:0,top:0,width:e.codedWidth,height:e.codedHeight},r=t.rect,i=Id(n,r,e.codedWidth,e.codedHeight,e.format),a=t.layout,o;if(!t.format||t.format===e.format)o=e.format;else if([`RGBA`,`RGBX`,`BGRA`,`BGRX`].includes(t.format))o=t.format;else throw Error(`NotSupportedError: Invalid destination format.`);return Rd(i,o,a)},Id=(e,t,n,r,i)=>{let a={...e};if(t!==void 0){if(t.width===0||t.height===0)throw TypeError(`visibleRect dimensions cannot be zero.`);if((t.x||0)+(t.width||0)>n)throw TypeError(`visibleRect exceeds codedWidth.`);if((t.y||0)+(t.height||0)>r)throw 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(!Ld(i,a))throw TypeError(`visibleRect alignment is invalid for the format.`);return a},Ld=(e,t)=>{if(e===null)return!0;let n=Pd(e);for(let e=0;e<n.length;e++){let r=n[e],i=r.widthDivisor,a=r.heightDivisor;if((t.x||0)%i!==0||(t.y||0)%a!==0)return!1}return!0},Rd=(e,t,n)=>{let r=Pd(t),i=r.length;if(n!==void 0&&n.length!==i)throw TypeError(`Layout must have ${i} planes.`);let a=0,o=[],s=[];for(let t=0;t<i;t++){let i=r[t],c=i.sampleBytes,l=i.widthDivisor,u=i.heightDivisor,d={destinationOffset:0,destinationStride:0,sourceTop:0,sourceHeight:0,sourceLeftBytes:0,sourceWidthBytes:0};if(d.sourceTop=Math.ceil(Math.trunc(e.y||0)/u),d.sourceHeight=Math.ceil(Math.trunc(e.height||0)/u),d.sourceLeftBytes=Math.floor(Math.trunc(e.x||0)/l)*c,d.sourceWidthBytes=Math.floor(Math.trunc(e.width||0)/l)*c,n!==void 0){let e=n[t];if(e.stride<d.sourceWidthBytes)throw TypeError(`Stride for plane ${t} is too small.`);d.destinationOffset=e.offset,d.destinationStride=e.stride}else d.destinationOffset=a,d.destinationStride=d.sourceWidthBytes;let f=d.destinationStride*d.sourceHeight+d.destinationOffset;if(f>4294967295)throw TypeError(`Allocation size exceeds limit.`);s.push(f),a=Math.max(a,f);for(let e=0;e<t;e++){let n=o[e];if(!(s[t]<=n.destinationOffset||s[e]<=d.destinationOffset))throw TypeError(`Planes overlap.`)}o.push(d)}return{allocationSize:a,computedLayouts:o}},zd=new Set([`f32`,`f32-planar`,`s16`,`s16-planar`,`s32`,`s32-planar`,`u8`,`u8-planar`]),Bd=class{constructor(){this._referenceCount=0}},Vd=class e{get microsecondTimestamp(){return Math.trunc(Ar*this.timestamp)}get microsecondDuration(){return Math.trunc(Ar*this.duration)}constructor(e){if(this._closed=!1,Kd(e)){if(e.format===null)throw TypeError(`AudioData with null format is not supported.`);this._data=e,this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=e.numberOfFrames,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp/1e6,this.duration=e.numberOfFrames/e.sampleRate}else if(e instanceof Bd){if(this._data=e,e._referenceCount++,this.format=e.getFormat(),!zd.has(this.format))throw TypeError(`getFormat() must return an AudioSampleFormat.`);if(this.sampleRate=e.getSampleRate(),!Number.isInteger(this.sampleRate)||this.sampleRate<=0)throw TypeError(`getSampleRate() must return a positive integer.`);if(this.numberOfFrames=e.getNumberOfFrames(),!Number.isInteger(this.numberOfFrames)||this.numberOfFrames<0)throw TypeError(`getNumberOfFrames() must return a non-negative integer.`);if(this.numberOfChannels=e.getNumberOfChannels(),!Number.isInteger(this.numberOfChannels)||this.numberOfChannels<=0)throw TypeError(`getNumberOfChannels() must return a positive integer.`);if(this.timestamp=e.getTimestamp(),!Number.isFinite(this.timestamp))throw TypeError(`getTimestamp() must return a finite number.`);this.duration=this.numberOfFrames/this.sampleRate}else{if(!e||typeof e!=`object`)throw TypeError(`Invalid AudioDataInit: must be an object.`);if(!zd.has(e.format))throw TypeError(`Invalid AudioDataInit: invalid format.`);if(!Number.isFinite(e.sampleRate)||e.sampleRate<=0)throw TypeError(`Invalid AudioDataInit: sampleRate must be > 0.`);if(!Number.isInteger(e.numberOfChannels)||e.numberOfChannels===0)throw TypeError(`Invalid AudioDataInit: numberOfChannels must be an integer > 0.`);if(!Number.isFinite(e?.timestamp))throw TypeError(`init.timestamp must be a number.`);let t=e.data.byteLength/(Hd(e.format)*e.numberOfChannels);if(!Number.isInteger(t))throw TypeError(`Invalid AudioDataInit: data size is not a multiple of frame size.`);this.format=e.format,this.sampleRate=e.sampleRate,this.numberOfFrames=t,this.numberOfChannels=e.numberOfChannels,this.timestamp=e.timestamp,this.duration=t/e.sampleRate;let n;if(e.data instanceof ArrayBuffer)n=new Uint8Array(e.data);else if(ArrayBuffer.isView(e.data))n=new Uint8Array(e.data.buffer,e.data.byteOffset,e.data.byteLength);else throw TypeError(`Invalid AudioDataInit: data is not a BufferSource.`);let r=this.numberOfFrames*this.numberOfChannels*Hd(this.format);if(n.byteLength<r)throw TypeError(`Invalid AudioDataInit: insufficient data size.`);this._data=n}vd?.register(this,{type:`audio`,data:this._data},this)}allocationSize(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!Number.isInteger(e.planeIndex)||e.planeIndex<0)throw TypeError(`planeIndex must be a non-negative integer.`);if(e.format!==void 0&&!zd.has(e.format))throw TypeError(`Invalid format.`);if(e.frameOffset!==void 0&&(!Number.isInteger(e.frameOffset)||e.frameOffset<0))throw TypeError(`frameOffset must be a non-negative integer.`);if(e.frameCount!==void 0&&(!Number.isInteger(e.frameCount)||e.frameCount<0))throw TypeError(`frameCount must be a non-negative integer.`);if(this._closed)throw Error(`AudioSample is closed.`);let t=e.format??this.format,n=e.frameOffset??0;if(n>=this.numberOfFrames)throw RangeError(`frameOffset out of range`);let r=e.frameCount===void 0?this.numberOfFrames-n:e.frameCount;if(r>this.numberOfFrames-n)throw RangeError(`frameCount out of range`);let i=Hd(t),a=Ud(t);if(a&&e.planeIndex>=this.numberOfChannels||!a&&e.planeIndex!==0)throw RangeError(`planeIndex out of range`);return(a?r:r*this.numberOfChannels)*i}copyTo(e,t){if(!er(e))throw TypeError(`destination must be an ArrayBuffer or an ArrayBuffer view.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!Number.isInteger(t.planeIndex)||t.planeIndex<0)throw TypeError(`planeIndex must be a non-negative integer.`);if(t.format!==void 0&&!zd.has(t.format))throw TypeError(`Invalid format.`);if(t.frameOffset!==void 0&&(!Number.isInteger(t.frameOffset)||t.frameOffset<0))throw TypeError(`frameOffset must be a non-negative integer.`);if(t.frameCount!==void 0&&(!Number.isInteger(t.frameCount)||t.frameCount<0))throw TypeError(`frameCount must be a non-negative integer.`);if(this._closed)throw Error(`AudioSample is closed.`);let{format:n,frameCount:r,frameOffset:i}=t,{planeIndex:a}=t,o=this.format,s=n??this.format;if(!s)throw Error(`Destination format not determined`);let c=this.numberOfFrames,l=this.numberOfChannels,u=i??0;if(u>=c)throw RangeError(`frameOffset out of range`);let d=r===void 0?c-u:r;if(d>c-u)throw RangeError(`frameCount out of range`);let f=Hd(s),p=Ud(s);if(p&&a>=l||!p&&a!==0)throw RangeError(`planeIndex out of range`);let m=(p?d:d*l)*f;if(e.byteLength<m)throw RangeError(`Destination buffer is too small`);let h=j(e),g=Gd(s);if(Kd(this._data))Lr()&&l>2&&s!==o?Jd(this._data,h,o,s,l,a,u,d):this._data.copyTo(e,{planeIndex:a,frameOffset:u,frameCount:d,format:s});else{let e=Wd(o),t=Hd(o),n=Ud(o),r;if(this._data instanceof Bd){let e=e=>{let r=this._data.getDataPlane(e);if(!(r instanceof Uint8Array))throw TypeError(`getDataPlane() must return a Uint8Array.`);let i=c*t*(n?1:l);if(r.byteLength!==i)throw TypeError(`Data plane ${e} has invalid size. Expected exactly ${i} bytes, got ${r.byteLength} bytes.`);return r};if(n)if(p)r=e(a),a=0;else{r=new Uint8Array(c*t*l);for(let n=0;n<l;n++){let i=e(n);r.set(i,n*c*t)}}else r=e(0)}else r=this._data;let i=j(r);for(let r=0;r<d;r++)if(p){let o=r*f,s;s=n?(a*c+(r+u))*t:((r+u)*l+a)*t,g(h,o,e(i,s))}else for(let a=0;a<l;a++){let o=(r*l+a)*f,s;s=n?(a*c+(r+u))*t:((r+u)*l+a)*t,g(h,o,e(i,s))}}}clone(){if(this._closed)throw Error(`AudioSample is closed.`);if(this._data instanceof Bd){let t=new e(this._data);return t.setTimestamp(this.timestamp),t}else if(Kd(this._data)){let t=new e(this._data.clone());return t.setTimestamp(this.timestamp),t}else return new e({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.timestamp,data:this._data})}close(){this._closed||=(vd?.unregister(this),this._data instanceof Bd?(this._data._referenceCount--,this._data._referenceCount===0&&this._data.close()):Kd(this._data)?this._data.close():this._data=new Uint8Array,!0)}toAudioData(){if(this._closed)throw Error(`AudioSample is closed.`);return this._data instanceof Bd?this._createAudioDataFromData():Kd(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(Ud(this.format)){let e=this.allocationSize({planeIndex:0,format:this.format}),t=new ArrayBuffer(e*this.numberOfChannels);for(let n=0;n<this.numberOfChannels;n++)this.copyTo(new Uint8Array(t,n*e,e),{planeIndex:n,format:this.format});return new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:t})}else{let e=new ArrayBuffer(this.allocationSize({planeIndex:0,format:this.format}));return this.copyTo(e,{planeIndex:0,format:this.format}),new AudioData({format:this.format,sampleRate:this.sampleRate,numberOfFrames:this.numberOfFrames,numberOfChannels:this.numberOfChannels,timestamp:this.microsecondTimestamp,data:e})}}toAudioBuffer(){if(this._closed)throw Error(`AudioSample is closed.`);let e=new AudioBuffer({numberOfChannels:this.numberOfChannels,length:this.numberOfFrames,sampleRate:this.sampleRate}),t=new Float32Array(this.allocationSize({planeIndex:0,format:`f32-planar`})/4);for(let n=0;n<this.numberOfChannels;n++)this.copyTo(t,{planeIndex:n,format:`f32-planar`}),e.copyToChannel(t,n);return e}setTimestamp(e){if(!Number.isFinite(e))throw TypeError(`newTimestamp must be a number.`);this.timestamp=e}[Symbol.dispose](){this.close()}static*_fromAudioBuffer(t,n){if(!(t instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let r=t.numberOfChannels,i=t.sampleRate,a=t.length,o=Math.floor(24e4/r),s=0,c=a;for(;c>0;){let a=Math.min(o,c),l=new Float32Array(r*a);for(let e=0;e<r;e++)t.copyFromChannel(l.subarray(e*a,(e+1)*a),e,s);yield new e({format:`f32-planar`,sampleRate:i,numberOfFrames:a,numberOfChannels:r,timestamp:n+s/i,data:l}),s+=a,c-=a}}static fromAudioBuffer(t,n){if(!(t instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let r=t.numberOfChannels,i=t.sampleRate,a=t.length,o=Math.floor(24e4/r),s=0,c=a,l=[];for(;c>0;){let a=Math.min(o,c),u=new Float32Array(r*a);for(let e=0;e<r;e++)t.copyFromChannel(u.subarray(e*a,(e+1)*a),e,s);let d=new e({format:`f32-planar`,sampleRate:i,numberOfFrames:a,numberOfChannels:r,timestamp:n+s/i,data:u});l.push(d),s+=a,c-=a}return l}},Hd=e=>{switch(e){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 Error(`Unknown AudioSampleFormat`)}},Ud=e=>{switch(e){case`u8-planar`:case`s16-planar`:case`s32-planar`:case`f32-planar`:return!0;default:return!1}},Wd=e=>{switch(e){case`u8`:case`u8-planar`:return(e,t)=>(e.getUint8(t)-128)/128;case`s16`:case`s16-planar`:return(e,t)=>e.getInt16(t,!0)/32768;case`s32`:case`s32-planar`:return(e,t)=>e.getInt32(t,!0)/2147483648;case`f32`:case`f32-planar`:return(e,t)=>e.getFloat32(t,!0)}},Gd=e=>{switch(e){case`u8`:case`u8-planar`:return(e,t,n)=>e.setUint8(t,br((n+1)*127.5,0,255));case`s16`:case`s16-planar`:return(e,t,n)=>e.setInt16(t,br(Math.round(n*32767),-32768,32767),!0);case`s32`:case`s32-planar`:return(e,t,n)=>e.setInt32(t,br(Math.round(n*2147483647),-2147483648,2147483647),!0);case`f32`:case`f32-planar`:return(e,t,n)=>e.setFloat32(t,n,!0)}},Kd=e=>typeof AudioData<`u`&&e instanceof AudioData,qd=e=>{switch(e){case`u8-planar`:return`u8`;case`s16-planar`:return`s16`;case`s32-planar`:return`s32`;case`f32-planar`:return`f32`;default:return e}},Jd=(e,t,n,r,i,a,o,s)=>{let c=Wd(n),l=Gd(r),u=Hd(n),d=Hd(r),f=Ud(n);if(Ud(r))if(f){let r=new ArrayBuffer(s*u),i=j(r);e.copyTo(r,{planeIndex:a,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=e*u;l(t,e*d,c(i,n))}}else{let r=new ArrayBuffer(s*i*u),f=j(r);e.copyTo(r,{planeIndex:0,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=(e*i+a)*u;l(t,e*d,c(f,n))}}else if(f){let r=s*u,a=new ArrayBuffer(r),f=j(a);for(let r=0;r<i;r++){e.copyTo(a,{planeIndex:r,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++){let n=e*u;l(t,(e*i+r)*d,c(f,n))}}}else{let r=new ArrayBuffer(s*i*u),a=j(r);e.copyTo(r,{planeIndex:0,frameOffset:o,frameCount:s,format:n});for(let e=0;e<s;e++)for(let n=0;n<i;n++){let r=e*i+n,o=r*u;l(t,r*d,c(a,o))}}},Yd=(e,t)=>{let n=e.allocationSize({format:t,planeIndex:0}),r=new ArrayBuffer(n);return e.copyTo(r,{format:t,planeIndex:0}),new Vd({data:r,format:t,numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,timestamp:e.timestamp,duration:e.duration})}})),Zd,Qd,$d,ef,tf,nf,rf,af,of,sf,cf,lf,uf,df,ff,pf,mf,hf,gf,_f,vf,yf,bf,xf,Sf,Cf=n((()=>{ma(),Pf(),F(),Xd(),Zd=new Map,Qd=new Map,$d=e=>{if(!e||typeof e!=`object`)throw TypeError(`Encoding config must be an object.`);if(!L.includes(e.codec))throw TypeError(`Invalid video codec '${e.codec}'. Must be one of: ${L.join(`, `)}.`);if(!(e.bitrate instanceof of)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`config.bitrate must be a positive integer or a quality.`);if(e.keyFrameInterval!==void 0&&(!Number.isFinite(e.keyFrameInterval)||e.keyFrameInterval<0))throw TypeError(`config.keyFrameInterval, when provided, must be a non-negative number.`);if(e.sizeChangeBehavior!==void 0&&![`deny`,`passThrough`,`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior))throw TypeError(`config.sizeChangeBehavior, when provided, must be 'deny', 'passThrough', 'fill', 'contain' or 'cover'.`);if(e.transform!==void 0){if(typeof e.transform!=`object`||!e.transform)throw TypeError(`config.transform, when provided, must be an object.`);if(e.transform.width!==void 0&&(!Number.isInteger(e.transform.width)||e.transform.width<=0))throw TypeError(`config.transform.width, when provided, must be a positive integer.`);if(e.transform.height!==void 0&&(!Number.isInteger(e.transform.height)||e.transform.height<=0))throw TypeError(`config.transform.height, when provided, must be a positive integer.`);if(e.transform.fit!==void 0&&![`fill`,`contain`,`cover`].includes(e.transform.fit))throw TypeError(`config.transform.fit, when provided, must be one of "fill", "contain", or "cover".`);if(e.transform.width!==void 0&&e.transform.height!==void 0&&e.transform.fit===void 0&&![`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior))throw TypeError(`When both config.transform.width and config.transform.height are provided, config.transform.fit must also be provided.`);if(e.transform.fit!==void 0&&[`fill`,`contain`,`cover`].includes(e.sizeChangeBehavior)&&e.transform.fit!==e.sizeChangeBehavior)throw 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(e.transform.rotate!==void 0&&![0,90,180,270].includes(e.transform.rotate))throw TypeError(`config.transform.rotate, when provided, must be 0, 90, 180 or 270.`);if(e.transform.crop!==void 0&&jd(e.transform.crop,`config.transform.`),e.transform.process!==void 0&&typeof e.transform.process!=`function`)throw TypeError(`config.transform.process, when provided, must be a function.`);if(e.transform.frameRate!==void 0&&(!Number.isFinite(e.transform.frameRate)||e.transform.frameRate<=0))throw TypeError(`config.transform.frameRate, when provided, must be a finite positive number.`);if(e.transform.force!==void 0&&typeof e.transform.force!=`boolean`)throw TypeError(`config.transform.force, when provided, must be a boolean.`)}if(e.onEncodedPacket!==void 0&&typeof e.onEncodedPacket!=`function`)throw TypeError(`config.onEncodedPacket, when provided, must be a function.`);if(e.onEncoderConfig!==void 0&&typeof e.onEncoderConfig!=`function`)throw TypeError(`config.onEncoderConfig, when provided, must be a function.`);ef(e.codec,e)},ef=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`Encoding options must be an object.`);if(t.alpha!==void 0&&![`discard`,`keep`].includes(t.alpha))throw TypeError(`options.alpha, when provided, must be 'discard' or 'keep'.`);if(t.bitrateMode!==void 0&&![`constant`,`variable`].includes(t.bitrateMode))throw TypeError(`bitrateMode, when provided, must be 'constant' or 'variable'.`);if(t.latencyMode!==void 0&&![`quality`,`realtime`].includes(t.latencyMode))throw TypeError(`latencyMode, when provided, must be 'quality' or 'realtime'.`);if(t.fullCodecString!==void 0&&typeof t.fullCodecString!=`string`)throw TypeError(`fullCodecString, when provided, must be a string.`);if(t.fullCodecString!==void 0&&na(t.fullCodecString)!==e)throw TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${e}).`);if(t.hardwareAcceleration!==void 0&&![`no-preference`,`prefer-hardware`,`prefer-software`].includes(t.hardwareAcceleration))throw TypeError(`hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(t.scalabilityMode!==void 0&&typeof t.scalabilityMode!=`string`)throw TypeError(`scalabilityMode, when provided, must be a string.`);if(t.contentHint!==void 0&&typeof t.contentHint!=`string`)throw TypeError(`contentHint, when provided, must be a string.`)},tf=e=>{let t=e.bitrate instanceof of?e.bitrate._toVideoBitrate(e.codec,e.width,e.height):e.bitrate;return{codec:e.fullCodecString??Gi(e.codec,e.width,e.height,t),width:e.width,height:e.height,displayWidth:e.squarePixelWidth,displayHeight:e.squarePixelHeight,bitrate:t,bitrateMode:e.bitrateMode,alpha:e.alpha??`discard`,framerate:e.framerate,latencyMode:e.latencyMode,hardwareAcceleration:e.hardwareAcceleration,scalabilityMode:e.scalabilityMode,contentHint:e.contentHint,...ra(e.codec)}},nf=e=>{if(!e||typeof e!=`object`)throw TypeError(`Encoding config must be an object.`);if(!Li.includes(e.codec))throw TypeError(`Invalid audio codec '${e.codec}'. Must be one of: ${Li.join(`, `)}.`);if(e.bitrate===void 0&&!(Fi.includes(e.codec)||e.codec===`flac`))throw TypeError(`config.bitrate must be provided for compressed audio codecs.`);if(e.bitrate!==void 0&&!(e.bitrate instanceof of)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`config.bitrate, when provided, must be a positive integer or a quality.`);if(e.transform!==void 0){if(typeof e.transform!=`object`||!e.transform)throw TypeError(`config.transform, when provided, must be an object.`);if(e.transform.numberOfChannels!==void 0&&(!Number.isInteger(e.transform.numberOfChannels)||e.transform.numberOfChannels<=0))throw TypeError(`config.transform.numberOfChannels, when provided, must be a positive integer.`);if(e.transform.sampleRate!==void 0&&(!Number.isInteger(e.transform.sampleRate)||e.transform.sampleRate<=0))throw TypeError(`config.transform.sampleRate, when provided, must be a positive integer.`);if(e.transform.sampleFormat!==void 0&&![`u8`,`s16`,`s32`,`f32`].includes(e.transform.sampleFormat))throw TypeError(`config.transform.sampleFormat, when provided, must be one of: u8, s16, s32, f32.`);if(e.transform.process!==void 0&&typeof e.transform.process!=`function`)throw TypeError(`config.transform.process, when provided, must be a function.`)}if(e.onEncodedPacket!==void 0&&typeof e.onEncodedPacket!=`function`)throw TypeError(`config.onEncodedPacket, when provided, must be a function.`);if(e.onEncoderConfig!==void 0&&typeof e.onEncoderConfig!=`function`)throw TypeError(`config.onEncoderConfig, when provided, must be a function.`);rf(e.codec,e)},rf=(e,t)=>{if(!t||typeof t!=`object`)throw TypeError(`Encoding options must be an object.`);if(t.bitrateMode!==void 0&&![`constant`,`variable`].includes(t.bitrateMode))throw TypeError(`bitrateMode, when provided, must be 'constant' or 'variable'.`);if(t.fullCodecString!==void 0&&typeof t.fullCodecString!=`string`)throw TypeError(`fullCodecString, when provided, must be a string.`);if(t.fullCodecString!==void 0&&na(t.fullCodecString)!==e)throw TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${e}).`)},af=e=>{let t=e.bitrate instanceof of?e.bitrate._toAudioBitrate(e.codec):e.bitrate;return{codec:e.fullCodecString??Yi(e.codec,e.numberOfChannels,e.sampleRate),numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,bitrate:t,bitrateMode:e.bitrateMode,...ia(e.codec)}},of=class{constructor(e){this._factor=e}_toVideoBitrate(e,t,n){let r=3e6*(t*n/(1920*1080))**.95*{avc:1,hevc:.6,vp9:.6,av1:.4,vp8:1.2}[e]*this._factor;return Math.ceil(r/1e3)*1e3}_toAudioBitrate(e){if(Fi.includes(e)||e===`flac`)return;let t={aac:128e3,opus:64e3,mp3:16e4,vorbis:64e3,ac3:384e3,eac3:192e3}[e];if(!t)throw Error(`Unhandled codec: ${e}`);let n=t*this._factor;return e===`aac`?n=[96e3,128e3,16e4,192e3].reduce((e,t)=>Math.abs(t-n)<Math.abs(e-n)?t:e):e===`opus`||e===`vorbis`?n=Math.max(6e3,n):e===`mp3`&&(n=[8e3,16e3,24e3,32e3,4e4,48e3,64e3,8e4,96e3,112e3,128e3,16e4,192e3,224e3,256e3,32e4].reduce((e,t)=>Math.abs(t-n)<Math.abs(e-n)?t:e)),Math.round(n/1e3)*1e3}},sf=new of(.3),cf=new of(.6),lf=new of(1),uf=new of(2),df=new of(4),ff=e=>{if(L.includes(e))return pf(e);if(Li.includes(e))return mf(e);if(Ri.includes(e))return hf(e);throw TypeError(`Unknown codec '${e}'.`)},pf=async(e,t={})=>{let{width:n=1280,height:r=720,bitrate:i=1e6,...a}=t;if(!L.includes(e))return!1;if(!Number.isInteger(n)||n<=0)throw TypeError(`width must be a positive integer.`);if(!Number.isInteger(r)||r<=0)throw TypeError(`height must be a positive integer.`);if(!(i instanceof of)&&(!Number.isInteger(i)||i<=0))throw TypeError(`bitrate must be a positive integer or a quality.`);ef(e,a);let o=tf({codec:e,width:n,height:r,bitrate:i,framerate:void 0,...a,alpha:`discard`}),s=JSON.stringify(o),c=Zd.get(s);if(c)return c;let l=(async()=>Af.some(t=>t.supports(e,o))?!0:typeof VideoEncoder>`u`||(n%2==1||r%2==1)&&(e===`avc`||e===`hevc`)||!(await VideoEncoder.isConfigSupported(o)).supported?!1:zr()?new Promise(async e=>{try{let t=new VideoEncoder({output:()=>{},error:()=>e(!1)});t.configure(o);let i=new Uint8Array(n*r*4),a=new VideoFrame(i,{format:`RGBA`,codedWidth:n,codedHeight:r,timestamp:0});t.encode(a),a.close(),await t.flush(),e(!0)}catch{e(!1)}}):!0)();return Zd.set(s,l),l},mf=async(e,t={})=>{let{numberOfChannels:n=2,sampleRate:r=48e3,bitrate:i=128e3,...a}=t;if(!Li.includes(e))return!1;if(!Number.isInteger(n)||n<=0)throw TypeError(`numberOfChannels must be a positive integer.`);if(!Number.isInteger(r)||r<=0)throw TypeError(`sampleRate must be a positive integer.`);if(!(i instanceof of)&&(!Number.isInteger(i)||i<=0))throw TypeError(`bitrate must be a positive integer.`);rf(e,a);let o=af({codec:e,numberOfChannels:n,sampleRate:r,bitrate:i,...a}),s=JSON.stringify(o),c=Qd.get(s);if(c)return c;let l=(async()=>jf.some(t=>t.supports(e,o))||Fi.includes(e)?!0:typeof AudioEncoder>`u`?!1:(await AudioEncoder.isConfigSupported(o)).supported===!0)();return Qd.set(s,l),l},hf=async e=>!!Ri.includes(e),gf=async()=>{let[e,t,n]=await Promise.all([_f(),vf(),yf()]);return[...e,...t,...n]},_f=async(e=L,t)=>{let n=await Promise.all(e.map(e=>pf(e,t)));return e.filter((e,t)=>n[t])},vf=async(e=Li,t)=>{let n=await Promise.all(e.map(e=>mf(e,t)));return e.filter((e,t)=>n[t])},yf=async(e=Ri)=>{let t=await Promise.all(e.map(hf));return e.filter((e,n)=>t[n])},bf=async(e,t)=>{for(let n of e)if(await pf(n,t))return n;return null},xf=async(e,t)=>{for(let n of e)if(await mf(n,t))return n;return null},Sf=async e=>{for(let t of e)if(await hf(t))return t;return null}})),wf,Tf,Ef,Df,Of,kf,Af,jf,Mf,Nf,Pf=n((()=>{pd(),Cf(),wf=class{static supports(e,t){return!1}},Tf=class{static supports(e,t){return!1}},Ef=class{static supports(e,t){return!1}},Df=class{static supports(e,t){return!1}},Of=[],kf=[],Af=[],jf=[],Mf=e=>{if(e.prototype instanceof wf){let t=e;if(Of.includes(t)){console.warn(`Video decoder already registered.`);return}Of.push(t),rd.clear()}else if(e.prototype instanceof Tf){let t=e;if(kf.includes(t)){console.warn(`Audio decoder already registered.`);return}kf.push(t),id.clear()}else throw TypeError(`Decoder must be a CustomVideoDecoder or CustomAudioDecoder.`)},Nf=e=>{if(e.prototype instanceof Ef){let t=e;if(Af.includes(t)){console.warn(`Video encoder already registered.`);return}Af.push(t),Zd.clear()}else if(e.prototype instanceof Df){let t=e;if(jf.includes(t)){console.warn(`Audio encoder already registered.`);return}jf.push(t),Qd.clear()}else throw TypeError(`Encoder must be a CustomVideoEncoder or CustomAudioEncoder.`)}})),Ff,If,Lf,Rf,zf=n((()=>{Ff=e=>{let t=8191,n=e,r=4096,i=0,a=12,o=0;for(n<0&&(n=-n,i=128),n+=33,n>t&&(n=t);(n&r)!==r&&a>=5;)r>>=1,a--;return o=n>>a-4&15,~(i|a-5<<4|o)&255},If=e=>{let t=0,n=0,r=~e;r&128&&(r&=-129,t=-1),n=((r&240)>>4)+5;let i=(1<<n|(r&15)<<n-4|1<<n-5)-33;return t===0?i:-i},Lf=e=>{let t=4095,n=2048,r=0,i=11,a=0,o=e;for(o<0&&(o=-o,r=128),o>t&&(o=t);(o&n)!==n&&i>=5;)n>>=1,i--;return a=o>>(i===4?1:i-4)&15,(r|i-4<<4|a)^85},Rf=e=>{let t=0,n=0,r=e^85;r&128&&(r&=-129,t=-1),n=((r&240)>>4)+4;let i=0;return i=n===4?r<<1|1:1<<n|(r&15)<<n-4|1<<n-5,t===0?i:-i}})),Bf,Vf,Hf,Uf,Wf,Gf,Kf,qf,Jf,Yf,Xf,Zf,Qf,$f,ep,tp,np,rp=n((()=>{ma(),No(),Pf(),xp(),mp(),F(),Lo(),zf(),Xd(),Bf=e=>{if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.metadataOnly!==void 0&&typeof e.metadataOnly!=`boolean`)throw TypeError(`options.metadataOnly, when defined, must be a boolean.`);if(e.verifyKeyPackets!==void 0&&typeof e.verifyKeyPackets!=`boolean`)throw TypeError(`options.verifyKeyPackets, when defined, must be a boolean.`);if(e.verifyKeyPackets&&e.metadataOnly)throw TypeError(`options.verifyKeyPackets and options.metadataOnly cannot be enabled together.`);if(e.skipLiveWait!==void 0&&typeof e.skipLiveWait!=`boolean`)throw TypeError(`options.skipLiveWait, when defined, must be a boolean.`)},Vf=e=>{if(!Qr(e))throw TypeError(`timestamp must be a number.`)},Hf=(e,t,n)=>n.verifyKeyPackets?t.then(async t=>{if(!t||t.type===`delta`)return t;let n=await e.determinePacketType(t);return n&&(t.type=n),t}):t,Uf=class{constructor(e){if(!(e instanceof ip))throw TypeError(`track must be an InputTrack.`);this._track=e}async getFirstPacket(e={}){if(Bf(e),this._track.input._disposed)throw new bp;return Hf(this._track,this._track._backing.getFirstPacket(e),e)}async getFirstKeyPacket(e={}){Bf(e);let t=await this.getFirstPacket(e);return t?t.type===`key`?t:this.getNextKeyPacket(t,e):null}async getPacket(e,t={}){if(Vf(e),Bf(t),this._track.input._disposed)throw new bp;return Hf(this._track,this._track._backing.getPacket(e,t),t)}async getNextPacket(e,t={}){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);if(Bf(t),this._track.input._disposed)throw new bp;return Hf(this._track,this._track._backing.getNextPacket(e,t),t)}async getKeyPacket(e,t={}){if(Vf(e),Bf(t),this._track.input._disposed)throw new bp;if(!t.verifyKeyPackets)return this._track._backing.getKeyPacket(e,t);let n=await this._track._backing.getKeyPacket(e,t);return n&&(D(n.type===`key`),await this._track.determinePacketType(n)===`delta`?this.getKeyPacket(n.timestamp-1/await this._track.getTimeResolution(),t):n)}async getNextKeyPacket(e,t={}){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);if(Bf(t),this._track.input._disposed)throw new bp;if(!t.verifyKeyPackets)return this._track._backing.getNextKeyPacket(e,t);let n=await this._track._backing.getNextKeyPacket(e,t);return n&&(D(n.type===`key`),await this._track.determinePacketType(n)===`delta`?this.getNextKeyPacket(n,t):n)}packets(e,t,n={}){if(e!==void 0&&!(e instanceof R))throw TypeError(`startPacket must be an EncodedPacket.`);if(e!==void 0&&e.isMetadataOnly&&!n?.metadataOnly)throw TypeError(`startPacket can only be metadata-only if options.metadataOnly is enabled.`);if(t!==void 0&&!(t instanceof R))throw TypeError(`endPacket must be an EncodedPacket.`);if(Bf(n),this._track.input._disposed)throw new bp;let r=[],{promise:i,resolve:a}=P(),{promise:o,resolve:s}=P(),c=!1,l=!1,u=null,d=[],f=()=>Math.max(2,d.length);(async()=>{let u=e??await this.getFirstPacket(n);for(;u&&!l&&!this._track.input._disposed&&!(t&&u.sequenceNumber>=t?.sequenceNumber);){if(r.length>f()){({promise:o,resolve:s}=P()),await o;continue}r.push(u),a(),{promise:i,resolve:a}=P(),u=await this.getNextPacket(u,n)}c=!0,a()})().catch(e=>{u||(u=e,a())});let p=this._track;return{async next(){for(;;)if(p.input._disposed)throw new bp;else if(l)return{value:void 0,done:!0};else if(u)throw u;else if(r.length>0){let e=r.shift(),t=performance.now();for(d.push(t);d.length>0&&t-d[0]>=1e3;)d.shift();return s(),{value:e,done:!1}}else if(c)return{value:void 0,done:!0};else await i},async return(){return l=!0,s(),a(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}},Wf=class{constructor(e,t){this.onSample=e,this.onError=t}},Gf=class{mediaSamplesInRange(e=-1/0,t=1/0,n){Vf(e),Vf(t);let r=[],i=!1,a=null,{promise:o,resolve:s}=P(),{promise:c,resolve:l}=P(),u=!1,d=!1,f=!1,p=null,m={...n,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let n=await this._createDecoder(n=>{if(l(),n.timestamp>=t&&(d=!0),d){n.close();return}a&&(n.timestamp>e?(r.push(a),i=!0):a.close()),n.timestamp>=e&&(r.push(n),i=!0),a=i?null:n,r.length>0&&(s(),{promise:o,resolve:s}=P())},e=>{p||(p=e,s())}),h=this._createPacketSink(),g=await h.getKeyPacket(e,m)??await h.getFirstKeyPacket(m),_=g,v=h.packets(g??void 0,void 0,m);for(await v.next();_&&!d&&!this._track.input._disposed;){let e=Kf(r.length);if(r.length+n.getDecodeQueueSize()>e){({promise:c,resolve:l}=P()),await c;continue}n.decode(_);let t=await v.next();if(t.done)break;_=t.value}await v.return(),!f&&!this._track.input._disposed&&await n.flush(),n.close(),!i&&a&&r.push(a),u=!0,s()})().catch(e=>{p||(p=e,s())});let h=this._track,g=()=>{a?.close();for(let e of r)e.close()};return{async next(){for(;;)if(h.input._disposed)throw g(),new bp;else if(f)return{value:void 0,done:!0};else if(p)throw g(),p;else if(r.length>0){let e=r.shift();return l(),{value:e,done:!1}}else if(!u)await o;else return{value:void 0,done:!0}},async return(){return f=!0,d=!0,l(),s(),g(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(e,t){fr(e);let n=dr(e),r=[],i=[],{promise:a,resolve:o}=P(),{promise:s,resolve:c}=P(),l=!1,u=!1,d=null,f=e=>{i.push(e),o(),{promise:a,resolve:o}=P()},p={...t,verifyKeyPackets:!0,metadataOnly:!1};(async()=>{let e=await this._createDecoder(e=>{if(c(),u){e.close();return}let t=0;for(;r.length>0&&e.timestamp-r[0]>-1e-10;)t++,r.shift();if(t>0)for(let n=0;n<t;n++)f(n<t-1?e.clone():e);else e.close()},e=>{d||(d=e,o())}),t=this._createPacketSink(),a=null,m=null,h=-1,g=async()=>{D(m);let n=m;for(e.decode(n);n.sequenceNumber<h;){let r=Kf(i.length);for(;i.length+e.getDecodeQueueSize()>r&&!u;)({promise:s,resolve:c}=P()),await s;if(u)break;let a=await t.getNextPacket(n,p);D(a),e.decode(a),n=a}h=-1},_=async()=>{await e.flush();for(let e=0;e<r.length;e++)f(null);r.length=0};for await(let e of n){if(Vf(e),u||this._track.input._disposed)break;let n=await t.getPacket(e,p),i=n&&await t.getKeyPacket(e,p);if(!i){h!==-1&&(await g(),await _()),f(null),a=null;continue}a&&(i.sequenceNumber!==m.sequenceNumber||n.timestamp<a.timestamp)&&(await g(),await _()),r.push(n.timestamp),h=Math.max(n.sequenceNumber,h),a=n,m=i}!u&&!this._track.input._disposed&&(h!==-1&&await g(),await _()),e.close(),l=!0,o()})().catch(e=>{d||(d=e,o())});let m=this._track,h=()=>{for(let e of i)e?.close()};return{async next(){for(;;)if(m.input._disposed)throw h(),new bp;else if(u)return{value:void 0,done:!0};else if(d)throw h(),d;else if(i.length>0){let e=i.shift();return D(e!==void 0),c(),{value:e,done:!1}}else if(!l)await a;else return{value:void 0,done:!0}},async return(){return u=!0,c(),o(),h(),{value:void 0,done:!0}},async throw(e){throw e},[Symbol.asyncIterator](){return this}}}},Kf=e=>e===0?40:8,qf=class extends Wf{constructor(e,t,n,r,i,a){super(e,t),this.codec=n,this.decoderConfig=r,this.rotation=i,this.timeResolution=a,this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Fr,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.frameHandlerSerializer=new Fr;let o=Of.find(e=>e.supports(n,r));if(o)this.customDecoder=new o,this.customDecoder.codec=n,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Sd))throw TypeError(`The argument passed to onSample must be a VideoSample.`);this.finalizeAndEmitSample(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let e=e=>{this.frameHandlerSerializer.call(async()=>{if(this.alphaQueue.length>0){let t=this.alphaQueue.shift();D(t!==void 0),await this.mergeAlpha(e,t)}else this.colorQueue.push(e)}).catch(e=>this.onError(e))};if(n===`avc`&&this.decoderConfig.description&&Vr()){let e=Wa(A(this.decoderConfig.description));if(e&&e.sequenceParameterSets.length>0){let t=Ka(e.sequenceParameterSets[0]);t&&t.frameMbsOnlyFlag===0&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:`prefer-software`})}}let t=Error(`Decoding error`).stack;this.decoder=new VideoDecoder({output:t=>{try{e(t)}catch(e){this.onError(e)}},error:e=>{e.stack=t,this.onError(e)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(D(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if(this.codec===`hevc`&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--);else{if(D(this.decoder),Lr()||sr(this.inputTimestamps,e.timestamp,e=>e),Vr()&&this.currentPacketIndex===0){if(this.codec===`avc`){let t=[];for(let n of Fa(e.data,this.decoderConfig)){let r=Ia(e.data[n.offset]);r>=20&&r<=31||t.push(e.data.subarray(n.offset,n.offset+n.length))}e=new R(Va(t,this.decoderConfig),e.type,e.timestamp,e.duration)}else if(this.codec===`hevc`){let t=lo(e.data,this.decoderConfig);t&&(e=new R(t,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||=new Yf,!this.alphaDecoder){let e=e=>{this.frameHandlerSerializer.call(async()=>{if(this.colorQueue.length>0){let t=this.colorQueue.shift();D(t!==void 0),await this.mergeAlpha(t,e)}else this.alphaQueue.push(e);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){let e=this.colorQueue.shift();D(e!==void 0),await this.mergeAlpha(e,null)}else this.alphaQueue.push(null);this.alphaDecoderQueueSize--}).catch(e=>this.onError(e))},t=Error(`Decoding error`).stack;this.alphaDecoder=new VideoDecoder({output:t=>{try{e(t)}catch(e){this.onError(e)}},error:e=>{e.stack=t,this.onError(e)}}),this.alphaDecoder.configure(this.decoderConfig)}let t=vo(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||=t===`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(t??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 t of Ya(e,this.decoderConfig)){let n=Xa(e[t.offset]);if(n===Ma.RASL_N||n===Ma.RASL_R)return!0}return!1}sampleHandler(e){if(Lr()){if(this.sampleQueue.length>0&&e.timestamp>=O(this.sampleQueue).timestamp){for(let e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}sr(this.sampleQueue,e,e=>e.timestamp)}else{let t=this.inputTimestamps.shift();D(t!==void 0),e.setTimestamp(t),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}async mergeAlpha(e,t){if(!t){let t=new Sd(e);this.sampleHandler(t);return}D(this.merger);let n=new Sd(await this.merger.update(e,t));this.sampleHandler(n)}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(D(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),await this.frameHandlerSerializer.currentPromise,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()):(D(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}},Jf=!1,Yf=class e{constructor(){this.canvas=null,this.gl=null,this.program=null,this.vao=null,this.colorTexture=null,this.alphaTexture=null,this.worker=null,this.pendingRequests=new Map,this.nextRequestId=0;let t=typeof OffscreenCanvas<`u`||typeof document<`u`&&typeof document.createElement==`function`;if(!e.forceCpu&&t&&!Jf)try{typeof OffscreenCanvas<`u`?this.canvas=new OffscreenCanvas(300,150):this.canvas=document.createElement(`canvas`);let e=this.canvas.getContext(`webgl2`,{premultipliedAlpha:!1});if(!e)throw Error(`Couldn't acquire WebGL 2 context.`);this.gl=e,this.program=this.createProgram(),this.vao=this.createVAO(),this.colorTexture=this.createTexture(),this.alphaTexture=this.createTexture(),this.gl.useProgram(this.program),this.gl.uniform1i(this.gl.getUniformLocation(this.program,`u_colorTexture`),0),this.gl.uniform1i(this.gl.getUniformLocation(this.program,`u_alphaTexture`),1)}catch(e){this.gl=null,this.canvas=null,Jf=!0,console.warn(`Falling back to CPU for color/alpha merging.`,e)}}async update(e,t){return this.gl?this.updateGpu(e,t):this.updateCpu(e,t)}createProgram(){D(this.gl);let e=this.createShader(this.gl.VERTEX_SHADER,`#version 300 es
|
|
10
10
|
in vec2 a_position;
|
|
11
11
|
in vec2 a_texCoord;
|
|
12
12
|
out vec2 v_texCoord;
|
|
@@ -28,14 +28,14 @@ function D(e){if(!e)throw Error(`Assertion failed.`)}var Bn,O,Vn,k,Hn,Un,A,j,Wn,
|
|
|
28
28
|
float alpha = texture(u_alphaTexture, v_texCoord).r;
|
|
29
29
|
fragColor = vec4(color, alpha);
|
|
30
30
|
}
|
|
31
|
-
`),n=this.gl.createProgram();return this.gl.attachShader(n,e),this.gl.attachShader(n,t),this.gl.linkProgram(n),n}createShader(e,t){D(this.gl);let n=this.gl.createShader(e);return this.gl.shaderSource(n,t),this.gl.compileShader(n),n}createVAO(){D(this.gl),D(this.program);let e=this.gl.createVertexArray();this.gl.bindVertexArray(e);let t=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),n=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,n),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW);let r=this.gl.getAttribLocation(this.program,`a_position`),i=this.gl.getAttribLocation(this.program,`a_texCoord`);return this.gl.enableVertexAttribArray(r),this.gl.vertexAttribPointer(r,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,8),e}createTexture(){D(this.gl);let e=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),e}updateGpu(e,t){D(this.gl),D(this.canvas),(e.displayWidth!==this.canvas.width||e.displayHeight!==this.canvas.height)&&(this.canvas.width=e.displayWidth,this.canvas.height=e.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.colorTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,this.alphaTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4);let n=new VideoFrame(this.canvas,{timestamp:e.timestamp,duration:e.duration??void 0});return e.close(),t.close(),n}updateCpu(e,t){if(!this.worker){let e=new Blob([`(${Zf.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.addEventListener(`message`,e=>{let t=e.data,n=this.pendingRequests.get(t.id);n&&(this.pendingRequests.delete(t.id),`error`in t?n.reject(Error(t.error)):n.resolve(t.frame))}),this.worker.addEventListener(`error`,e=>{let t=Error(e.message||`Color/alpha merge worker error.`);for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()})}let n=this.nextRequestId++,r=P();return this.pendingRequests.set(n,r),this.worker.postMessage({id:n,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){this.gl?.getExtension(`WEBGL_lose_context`)?.loseContext(),this.gl=null,this.canvas=null,this.worker?.terminate(),this.worker=null;let e=Error(`Color/alpha merger closed.`);for(let t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}},Xf.forceCpu=!0,Zf=()=>{let e=null,t=null,n=Promise.resolve();self.addEventListener(`message`,e=>{let{id:t,color:i,alpha:a}=e.data;n=n.then(async()=>{try{let e=await r(i,a);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{i.close(),a.close()}})});let r=async(e,t)=>{let n=e.format,r=t.format;if(!n||!r)throw Error(`CPU color/alpha merging requires a known VideoFrame format.`);let s=n.includes(`P10`),c=n.includes(`P12`),l=r.includes(`P10`),u=r.includes(`P12`);if(l!==s||u!==c)throw Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${n}', alpha: '${r}').`);let d=e.codedWidth,f=e.codedHeight;if(n===`RGBX`||n===`RGBA`||n===`BGRX`||n===`BGRA`)return await i(e,t,d,f,n);if(n===`I420`||n===`I420P10`||n===`I420P12`||n===`I422`||n===`I422P10`||n===`I422P12`||n===`I444`||n===`I444P10`||n===`I444P12`)return await a(e,t,d,f,n);if(n===`NV12`)return await o(e,t,d,f);throw Error(`CPU color/alpha merging does not support format '${n}'.`)},i=async(e,t,n,r,i)=>{let a=n*r,o=new Uint8Array(a*4);await e.copyTo(o);let c=await s(t,n,r,1);for(let e=0,t=3;e<a;e++,t+=4)o[t]=c[e];let l={format:i===`RGBX`||i===`RGBA`?`RGBA`:`BGRA`,codedWidth:n,codedHeight:r,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,l)},a=async(e,t,n,r,i)=>{let a=i.includes(`P10`),o=i.includes(`P12`),c=a||o?2:1,l,u;i.startsWith(`I420`)?(l=Math.ceil(n/2),u=Math.ceil(r/2)):i.startsWith(`I422`)?(l=Math.ceil(n/2),u=r):(l=n,u=r);let d=n*r,f=l*u,p=d*c,m=f*c,h=d*c,g=p+2*m+h,_=new Uint8Array(g);await e.copyTo(_);let v=await s(t,n,r,c),y=p+2*m;_.set(v,y);let b={format:i.slice(0,4)+`A`+i.slice(4),codedWidth:n,codedHeight:r,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[_.buffer]};return new VideoFrame(_,b)},o=async(e,n,r,i)=>{let a=r*i,o=Math.ceil(r/2)*Math.ceil(i/2),c=e.allocationSize();(!t||t.byteLength!==c)&&(t=new Uint8Array(c)),await e.copyTo(t);let l=new Uint8Array(a+2*o+a);l.set(t.subarray(0,a),0);let u=a,d=a+o,f=a;for(let e=0;e<o;e++)l[u+e]=t[f+e*2],l[d+e]=t[f+e*2+1];let p=await s(n,r,i,1);l.set(p,a+2*o);let m={format:`I420A`,codedWidth:r,codedHeight:i,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[l.buffer]};return new VideoFrame(l,m)},s=async(t,n,r,i)=>{let a=t.allocationSize();(!e||e.byteLength!==a)&&(e=new Uint8Array(a)),await t.copyTo(e);let o=t.format;if(o===`RGBA`||o===`BGRA`||o===`RGBX`||o===`BGRX`){let t=o===`RGBA`||o===`RGBX`?0:2,i=n*r;for(let n=0;n<i;n++)e[n]=e[n*4+t];return e.subarray(0,i)}else return e.subarray(0,n*r*i)}},Qf=class extends Kf{constructor(e){if(!(e instanceof sp))throw TypeError(`videoTrack must be an InputVideoTrack.`);super(),this._track=e}async _createDecoder(e,t){if(!await this._track.canDecode())throw Error(`This video track cannot be decoded by this browser. Make sure to check decodability before using a track.`);let n=await this._track.getCodec(),r=await this._track.getRotation(),i=await this._track.getDecoderConfig(),a=await this._track.getTimeResolution();return D(n&&i),new Jf(e,t,n,i,r,a)}_createPacketSink(){return new Wf(this._track)}async getSample(e,t={}){Hf(e);for await(let n of this.mediaSamplesAtTimestamps([e],t))return n;throw Error(`Internal error: Iterator returned nothing.`)}samples(e,t,n={}){return this.mediaSamplesInRange(e,t,n)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}},$f=class{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof sp))throw TypeError(`videoTrack must be an InputVideoTrack.`);if(t&&typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.alpha!==void 0&&typeof t.alpha!=`boolean`)throw TypeError(`options.alpha, when provided, must be a boolean.`);if(t.width!==void 0&&(!Number.isInteger(t.width)||t.width<=0))throw TypeError(`options.width, when defined, must be a positive integer.`);if(t.height!==void 0&&(!Number.isInteger(t.height)||t.height<=0))throw TypeError(`options.height, when defined, must be a positive integer.`);if(t.fit!==void 0&&![`fill`,`contain`,`cover`].includes(t.fit))throw 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 TypeError(`When both options.width and options.height are provided, options.fit must also be provided.`);if(t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`options.rotation, when provided, must be 0, 90, 180 or 270.`);if(t.crop!==void 0&&Md(t.crop,`options.`),t.poolSize!==void 0&&(typeof t.poolSize!=`number`||!Number.isInteger(t.poolSize)||t.poolSize<0))throw TypeError(`poolSize must be a non-negative integer.`);this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??`fill`,this._videoSampleSink=new Qf(e),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??=(async()=>{let e=this._options,t=this._videoTrack,n=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),i=await t.getSquarePixelHeight(),[a,o]=n%180==0?[r,i]:[i,r],s=e.crop;s&&=jd(s,a,o);let[c,l]=s?[s.width,s.height]:[a,o],u=c/l;e.width!==void 0&&e.height===void 0?(c=e.width,l=Math.round(c/u)):e.width===void 0&&e.height!==void 0?(l=e.height,c=Math.round(l*u)):e.width!==void 0&&e.height!==void 0&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=n,this._crop=s})()}_videoSampleToWrappedCanvas(e){let t=this._width,n=this._height,r=this._canvasPool[this._nextCanvasIndex],i=!1;r||(typeof document<`u`?(r=document.createElement(`canvas`),r.width=t,r.height=n):r=new OffscreenCanvas(t,n),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),i=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);let a=r.getContext(`2d`,{alpha:this._alpha||zr()});D(a),a.resetTransform(),i||(!this._alpha&&zr()?(a.fillStyle=`black`,a.fillRect(0,0,t,n)):a.clearRect(0,0,t,n)),e.drawWithFit(a,{fit:this._fit,rotation:this._rotation,crop:this._crop});let o={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),o}async getCanvas(e,t){Hf(e),await this._ensureInit();let n=await this._videoSampleSink.getSample(e,t);return n&&this._videoSampleToWrappedCanvas(n)}async*canvases(e,t,n){await this._ensureInit(),yield*yr(this._videoSampleSink.samples(e,t,n),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*yr(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}},ep=class extends Gf{constructor(e,t,n,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Fr,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;let i=t=>{let n=t.timestamp;this.expectedFirstTimestamp&&this.currentTimestamp===null&&(this.timestampOffset=this.expectedFirstTimestamp-n),n+=this.timestampOffset,(this.currentTimestamp===null||Math.abs(n-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=n);let i=this.currentTimestamp;if(this.currentTimestamp+=t.duration,t.numberOfFrames===0){t.close();return}let a=r.sampleRate;t.setTimestamp(Math.round(i*a)/a),e(t)},a=Af.find(e=>e.supports(n,r));if(a)this.customDecoder=new a,this.customDecoder.codec=n,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Hd))throw TypeError(`The argument passed to onSample must be an AudioSample.`);i(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let e=Error(`Decoding error`).stack;this.decoder=new AudioDecoder({output:e=>{try{i(new Hd(e))}catch(e){this.onError(e)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(D(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--)):(D(this.decoder),this.expectedFirstTimestamp??=e.timestamp,this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(D(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(D(this.decoder),this.decoder.close())}},tp=class extends Gf{constructor(e,t,n){super(e,t),this.decoderConfig=n,this.currentTimestamp=null,D(Ii.includes(n.codec)),this.codec=n.codec;let{dataType:r,sampleSize:i,littleEndian:a}=na(this.codec);switch(this.inputSampleSize=i,i){case 1:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint8(t)-2**7:r===`signed`?this.readInputValue=(e,t)=>e.getInt8(t):r===`ulaw`?this.readInputValue=(e,t)=>Lf(e.getUint8(t)):r===`alaw`?this.readInputValue=(e,t)=>zf(e.getUint8(t)):D(!1);break;case 2:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint16(t,a)-2**15:r===`signed`?this.readInputValue=(e,t)=>e.getInt16(t,a):D(!1);break;case 3:r===`unsigned`?this.readInputValue=(e,t)=>mr(e,t,a)-2**23:r===`signed`?this.readInputValue=(e,t)=>hr(e,t,a):D(!1);break;case 4:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint32(t,a)-2**31:r===`signed`?this.readInputValue=(e,t)=>e.getInt32(t,a):r===`float`?this.readInputValue=(e,t)=>e.getFloat32(t,a):D(!1);break;case 8:r===`float`?this.readInputValue=(e,t)=>e.getFloat64(t,a):D(!1);break;default:pr(i),D(!1)}switch(i){case 1:r===`ulaw`||r===`alaw`?(this.outputSampleSize=2,this.outputFormat=`s16`,this.writeOutputValue=(e,t,n)=>e.setInt16(t,n,!0)):(this.outputSampleSize=1,this.outputFormat=`u8`,this.writeOutputValue=(e,t,n)=>e.setUint8(t,n+2**7));break;case 2:this.outputSampleSize=2,this.outputFormat=`s16`,this.writeOutputValue=(e,t,n)=>e.setInt16(t,n,!0);break;case 3:this.outputSampleSize=4,this.outputFormat=`s32`,this.writeOutputValue=(e,t,n)=>e.setInt32(t,n<<8,!0);break;case 4:this.outputSampleSize=4,r===`float`?(this.outputFormat=`f32`,this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,!0)):(this.outputFormat=`s32`,this.writeOutputValue=(e,t,n)=>e.setInt32(t,n,!0));break;case 8:this.outputSampleSize=4,this.outputFormat=`f32`,this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,!0);break;default:pr(i),D(!1)}}getDecodeQueueSize(){return 0}decode(e){let t=j(e.data),n=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=n*this.decoderConfig.numberOfChannels*this.outputSampleSize,i=new ArrayBuffer(r),a=new DataView(i);for(let e=0;e<n*this.decoderConfig.numberOfChannels;e++){let n=e*this.inputSampleSize,r=e*this.outputSampleSize,i=this.readInputValue(t,n);this.writeOutputValue(a,r,i)}let o=n/this.decoderConfig.sampleRate;(this.currentTimestamp===null||Math.abs(e.timestamp-this.currentTimestamp)>=o)&&(this.currentTimestamp=e.timestamp);let s=this.currentTimestamp;this.currentTimestamp+=o;let c=new Hd({format:this.outputFormat,data:i,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:n,timestamp:s});this.onSample(c)}async flush(){}close(){}},np=class extends Kf{constructor(e){if(!(e instanceof cp))throw TypeError(`audioTrack must be an InputAudioTrack.`);super(),this._track=e}async _createDecoder(e,t){if(!await this._track.canDecode())throw Error(`This audio track cannot be decoded by this browser. Make sure to check decodability before using a track.`);let n=await this._track.getCodec(),r=await this._track.getDecoderConfig();return D(n&&r),Ii.includes(r.codec)?new tp(e,t,r):new ep(e,t,n,r)}_createPacketSink(){return new Wf(this._track)}async getSample(e,t={}){Hf(e);for await(let n of this.mediaSamplesAtTimestamps([e],t))return n;throw Error(`Internal error: Iterator returned nothing.`)}samples(e,t,n={}){return this.mediaSamplesInRange(e,t,n)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}},rp=class{constructor(e){if(!(e instanceof cp))throw TypeError(`audioTrack must be an InputAudioTrack.`);this._audioSampleSink=new np(e)}_audioSampleToWrappedArrayBuffer(e){let t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){Hf(e);let n=await this._audioSampleSink.getSample(e,t);return n&&this._audioSampleToWrappedArrayBuffer(n)}buffers(e,t,n){return yr(this._audioSampleSink.samples(e,t,n),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return yr(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}})),ap,B,op,sp,cp,lp,up,dp,fp,pp,mp,hp=n((()=>{Po(),Ff(),ip(),F(),Ro(),ap=class e{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof sp}isAudioTrack(){return this instanceof cp}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return B(this._backing.getInternalCodecId(),`internalCodecId`,`getInternalCodecId`)}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return B(this._backing.getLanguageCode(),`languageCode`,`getLanguageCode`)}async getName(){return this._backing.getName()}get name(){return B(this._backing.getName(),`name`,`getName`)}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return B(this._backing.getTimeResolution(),`timeResolution`,`getTimeResolution`)}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getDisposition(){return this._backing.getDisposition()}get disposition(){return B(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(e){let t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return wr((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){let n=new Wf(this),r=1/0,i=-1/0,a=0,o=0;for await(let s of n.packets(void 0,void 0,{metadataOnly:!0,...t})){if(a>=e&&s.timestamp>=i)break;r=Math.min(r,s.timestamp),i=Math.max(i,s.timestamp+s.duration),a++,o+=s.byteLength}return{packetCount:a,averagePacketRate:a?Number((a/(i-r)).toPrecision(16)):0,averageBitrate:a?Number((8*o/(i-r)).toPrecision(16)):0}}async isLive(){return await this._backing.getLiveRefreshInterval()!==null}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(t){if(!(t instanceof e))throw TypeError(`other must be an InputTrack.`);return this.input!==t.input||this===t?!1:(this._backing.getPairingMask()&t._backing.getPairingMask())!==0n}async getPairableTracks(e){return this.input.getTracks(pp({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(pp({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(pp({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(pp({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(pp({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&=op(e);let t=await this.input.getTracks();for(let n of t)if(this.canBePairedWith(n)&&(!e||await e(n)))return!0;return!1}hasPairableVideoTrack(e){return e&&=op(e),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&=op(e),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}},B=(e,t,n)=>{if(e instanceof Promise)throw Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${n}()' instead.`);return e},op=e=>{if(e!==void 0&&typeof e!=`function`)throw TypeError(`predicate, when provided, must be a function.`);return e?t=>{let n=e=>{if(typeof e!=`boolean`)throw TypeError(`predicate must return or resolve to a boolean value.`);return e},r=e(t);return r instanceof Promise?r.then(n):n(r)}:void 0},sp=class extends ap{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return`video`}async getCodec(){return this._backing.getCodec()}get codec(){return B(this._backing.getCodec(),`codec`,`getCodec`)}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!1}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return B(this._backing.getCodedWidth(),`codedWidth`,`getCodedWidth`)}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return B(this._backing.getCodedHeight(),`codedHeight`,`getCodedHeight`)}async getRotation(){return this._backing.getRotation()}get rotation(){return B(this._backing.getRotation(),`rotation`,`getRotation`)}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return B(this._backing.getSquarePixelWidth(),`squarePixelWidth`,`getSquarePixelWidth`)}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return B(this._backing.getSquarePixelHeight(),`squarePixelHeight`,`getSquarePixelHeight`)}async getPixelAspectRatio(){return this._pixelAspectRatioCache??=ri({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()})}get pixelAspectRatio(){return this._pixelAspectRatioCache??=ri({num:B(this._backing.getSquarePixelWidth(),`pixelAspectRatio`,`getPixelAspectRatio`)*B(this._backing.getCodedHeight(),`pixelAspectRatio`,`getPixelAspectRatio`),den:B(this._backing.getSquarePixelHeight(),`pixelAspectRatio`,`getPixelAspectRatio`)*B(this._backing.getCodedWidth(),`pixelAspectRatio`,`getPixelAspectRatio`)})}async getDisplayWidth(){return await this._backing.getMetadataDisplayWidth?.()??(await this.getRotation()%180==0?this.getSquarePixelWidth():this.getSquarePixelHeight())}get displayWidth(){let e=this._backing.getMetadataDisplayWidth?.();if(e!==void 0){let t=B(e,`displayWidth`,`getDisplayWidth`);if(t!==null)return t}return B(B(this._backing.getRotation(),`displayWidth`,`getDisplayWidth`)%180==0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight(),`displayWidth`,`getDisplayWidth`)}async getDisplayHeight(){return await this._backing.getMetadataDisplayHeight?.()??(await this.getRotation()%180==0?this.getSquarePixelHeight():this.getSquarePixelWidth())}get displayHeight(){let e=this._backing.getMetadataDisplayHeight?.();if(e!==void 0){let t=B(e,`displayHeight`,`getDisplayHeight`);if(t!==null)return t}return B(B(this._backing.getRotation(),`displayHeight`,`getDisplayHeight`)%180==0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth(),`displayHeight`,`getDisplayHeight`)}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){let e=await this._backing.getColorSpace();return e.primaries===`bt2020`||e.primaries===`smpte432`||e.transfer===`pg`||e.transfer===`hlg`||e.matrix===`bt2020-ncl`}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return await this._backing.getMetadataCodecParameterString?.()??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return D(t!==null),kf.some(n=>n.supports(t,e))?!0:typeof VideoDecoder>`u`?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0}catch(e){return console.error(`Error during decodability check:`,e),!1}}async determinePacketType(e){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`packet must not be metadata-only to determine its type.`);let t=await this.getCodec();if(t===null)return null;let n=await this.getDecoderConfig();return D(n),yo(t,n,e.data)}},cp=class extends ap{constructor(e,t){super(e,t),this._backing=t}get type(){return`audio`}async getCodec(){return this._backing.getCodec()}get codec(){return B(this._backing.getCodec(),`codec`,`getCodec`)}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return B(this._backing.getNumberOfChannels(),`numberOfChannels`,`getNumberOfChannels`)}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return B(this._backing.getSampleRate(),`sampleRate`,`getSampleRate`)}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return await this._backing.getMetadataCodecParameterString?.()??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return D(t!==null),Af.some(n=>n.supports(t,e))||e.codec.startsWith(`pcm-`)?!0:typeof AudioDecoder>`u`?!1:(await AudioDecoder.isConfigSupported(e)).supported===!0}catch(e){return console.error(`Error during decodability check:`,e),!1}}async determinePacketType(e){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);return await this.getCodec()===null?null:`key`}},lp=e=>e??1/0,up=e=>-(e??-1/0),dp=e=>-e,fp=e=>{if(typeof e!=`object`||!e)throw TypeError(`query must be an object.`);if(e.filter!==void 0&&typeof e.filter!=`function`)throw TypeError(`query.filter, when provided, must be a function.`);if(e.sortBy!==void 0&&typeof e.sortBy!=`function`)throw TypeError(`query.sortBy, when provided, must be a function.`);return{filter:e.filter?t=>{let n=e=>{if(typeof e!=`boolean`)throw TypeError(`query.filter must return or resolve to a boolean.`);return e},r=e.filter(t);return r instanceof Promise?r.then(n):n(r)}:void 0,sortBy:e.sortBy?t=>{let n=e=>{if(typeof e!=`number`&&(!Array.isArray(e)||!e.every(e=>typeof e==`number`)))throw TypeError(`query.sortBy must return or resolve to a number or an array of numbers.`);return e},r=e.sortBy(t);return r instanceof Promise?r.then(n):n(r)}:void 0}},pp=(e,t)=>({filter:e?.filter||t?.filter?n=>{let r=e?.filter?.(n)??!0,i=e=>e===!1?!1:t?.filter?.(n)??!0;return r instanceof Promise?r.then(i):i(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?n=>{let r=e?.sortBy?.(n)??[],i=t?.sortBy?.(n)??[],a=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return r instanceof Promise||i instanceof Promise?Promise.all([r,i]).then(([e,t])=>a(e,t)):a(r,i)}:void 0}),mp=async(e,t)=>{let n=e;if(t?.filter){let r=e.map(e=>t.filter(e));if(r.some(e=>e instanceof Promise)){let t=await Promise.all(r);n=e.filter((e,n)=>t[n])}else n=e.filter((e,t)=>r[t])}if(!t?.sortBy)return n;let r=n.map(e=>t.sortBy(e)),i=r.some(e=>e instanceof Promise)?await Promise.all(r):r;return n.map((e,t)=>({track:e,sortValue:i[t]})).sort((e,t)=>{let n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=n[e]??0,i=r[e]??0;if(t!==i)return t-i}return 0}).map(e=>e.track)}})),gp,_p,vp,yp,bp,xp,Sp=n((()=>{rd(),hp(),F(),G(),hu(),Zr(),gp=1,_p=2,vp=null,typeof FinalizationRegistry<`u`&&(vp=new FinalizationRegistry(e=>{for(let t of e)t.freed||t.free()})),yp=class e extends gi{get disposed(){return this._disposed}constructor(t){if(super(),this._demuxerPromise=null,this._format=null,this._trackBackingsCache=null,this._backingToTrack=new Map,this._disposed=!1,this._nextSourceCacheAge=0,this._sourceRefs=[],this._sourceCache=[],this._sourceCachePromises=[],this._onFormatDetermined=null,!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!Array.isArray(t.formats)||t.formats.some(e=>!(e instanceof Au)))throw TypeError(`options.formats must be an array of InputFormat.`);if(!(t.source instanceof Ql||t.source instanceof $l))throw TypeError(`options.source must be a Source or SourceRef.`);if(t.source instanceof Ql&&t.source._disposed)throw TypeError(`options.source must not be a disposed Source.`);if(t.initInput!==void 0&&!(t.initInput instanceof e))throw TypeError(`options.initInput, when provided, must be an Input.`);t.formatOptions!==void 0&&nd(t.formatOptions,`formatOptions`),this._formats=t.formats,this._initInput=t.initInput??null,this._formatOptions=t.formatOptions??{},t.source instanceof Ql?this._rootRef=t.source.ref():this._rootRef=t.source,this._sourceRefs.push(this._rootRef),vp?.register(this,this._sourceRefs,this)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){D(this._rootSource instanceof eu);let t=await this._rootSource._resolveRequest(e);return this._emit(`source`,{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=gp){let n=this._sourceCache.find(n=>n.cacheGroup===t&&tu(n.request,e));if(n)return n.age++,Promise.resolve(n.sourceRef.source.ref());let r=this._sourceCachePromises.find(n=>n.cacheGroup===t&&tu(n.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());let i=(async()=>{let n=await this._getSourceUncached(e);if(ei(this._sourceCache,e=>e.cacheGroup===t&&e.sourceRef.source._refCount===1)>=4){let e=ti(this._sourceCache,e=>e.cacheGroup===t&&e.sourceRef.source._refCount===1?e.age:1/0);D(e!==-1);let n=this._sourceCache[e];this._sourceCache.splice(e,1),n.sourceRef.free(),cr(this._sourceRefs,n.sourceRef)}this._sourceRefs.push(n);let r=this._sourceCachePromises.findIndex(t=>t.request===e);return D(r!==-1),this._sourceCachePromises.splice(r,1),{request:e,sourceRef:n,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:i}),i.then(e=>{let t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??=(async()=>{this._reader=new Cp(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 bp})()}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),D(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof bp)return!1;throw e}}async getFirstTimestamp(e){e??=await this.getTracks();let t=e.filter(e=>e!==null);if(t.length===0)return 0;let n=await Promise.all(t.map(e=>e.getFirstTimestamp()));return Math.min(...n)}async computeDuration(e,t){e??=await this.getTracks();let n=e.filter(e=>e!==null);if(n.length===0)return 0;let r=await Promise.all(n.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??=await this.getTracks();let n=e.filter(e=>e!==null),r=(await Promise.all(n.map(e=>e.getDurationFromMetadata(t)))).filter(e=>e!==null);return r.length===0?null:Math.max(...r)}async getTracks(e){return e&&=fp(e),mp((await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e)),e)}async getVideoTracks(e){return e&&=fp(e),mp((await this.getTracks()).filter(e=>e.isVideoTrack()),e)}async getAudioTracks(e){return e&&=fp(e),mp((await this.getTracks()).filter(e=>e.isAudioTrack()),e)}async getPrimaryVideoTrack(e){e&&=fp(e);let t=pp(e,{sortBy:async e=>[dp((await e.getDisposition()).default),dp(await e.hasPairableAudioTrack()),dp(!await e.hasOnlyKeyPackets()),up(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&=fp(e);let t=await this.getPrimaryVideoTrack(),n=pp(e,{sortBy:async e=>[dp(!t||e.canBePairedWith(t)),dp((await e.getDisposition()).default),up(await e.getBitrate())]});return(await this.getAudioTracks(n))[0]??null}async _getTrackBackings(){let e=await this._getDemuxer();return this._trackBackingsCache??=await e.getTrackBackings()}_wrapBackingAsTrack(e){let t=this._backingToTrack.get(e);if(t)return t;let n=e.getType()===`video`?new sp(this,e):new cp(this,e);return this._backingToTrack.set(e,n),n}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,vp?.unregister(this),this._demuxerPromise?.then(e=>e.dispose())}}[Symbol.dispose](){this.dispose()}},bp=class extends Error{constructor(e=`Input has an unsupported or unrecognizable format.`){super(e),this.name=`UnsupportedInputFormatError`}},xp=class extends Error{constructor(e=`Input has been disposed.`){super(e),this.name=`InputDisposedError`}}})),Cp,wp,Tp,V,H,Ep,Dp,Op,kp,Ap,U,jp,Mp,Np,Pp,Fp,Ip,Lp,Rp,zp,W,Bp,G=n((()=>{Sp(),F(),hu(),Cp=class{constructor(e){this.source=e}get fileSize(){let e=this.source._getFileSize();if(e===void 0)throw Error(`Reading file size too early; read required first.`);return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new xp;if(e<0||this.fileSizeNonStrict!==null&&e+t>this.fileSizeNonStrict)return null;if(t===0){let t=new Uint8Array;return new wp(t,j(t),0,e,e)}let n=e+t,r=this.source._read(e,n,Xl,Zl);return r instanceof Promise?r.then(t=>t?new wp(t.bytes,t.view,t.offset,e,n):null):r?new wp(r.bytes,r.view,r.offset,e,n):null}requestSliceRange(e,t,n){if(this.source._disposed)throw new xp;if(e<0)return null;if(this.fileSizeNonStrict!==null)return this.requestSlice(e,br(this.fileSizeNonStrict-e,t,n));{let r=this.requestSlice(e,n),i=r=>r||(D(this.fileSizeNonStrict!==null),this.requestSlice(e,br(this.fileSizeNonStrict-e,t,n)));return r instanceof Promise?r.then(i):i(r)}}requestEntireFile(){if(this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let e=1024;return(async()=>{let t=[],n=0;for(;;){if(t.length===1&&this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let r=t.length*e,i=this.requestSliceRange(r,0,e);if(i instanceof Promise&&(i=await i),!i)break;t.push(V(i,i.length)),n+=i.length}let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.length;return new wp(r,j(r),0,0,n)})()}},wp=class e{constructor(e,t,n,r,i){this.bytes=e,this.view=t,this.offset=n,this.start=r,this.end=i,this.bufferPos=r-n}static tempFromBytes(t){return new e(t,j(t),0,0,t.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(t,n=this.end-t){if(t<this.start||t+n>this.end)throw RangeError(`Slicing outside of original slice.`);return new e(this.bytes,this.view,this.offset,t,t+n)}},Tp=(e,t)=>{if(e.filePos<e.start||e.filePos+t>e.end)throw RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},V=(e,t)=>{Tp(e,t);let n=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,n},H=e=>(Tp(e,1),e.view.getUint8(e.bufferPos++)),Ep=(e,t)=>{Tp(e,2);let n=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,n},Dp=e=>{Tp(e,2);let t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},Op=e=>{Tp(e,3);let t=mr(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},kp=e=>{Tp(e,2);let t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},Ap=(e,t)=>{Tp(e,4);let n=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,n},U=e=>{Tp(e,4);let t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},jp=e=>{Tp(e,4);let t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},Mp=e=>{Tp(e,4);let t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Np=e=>{Tp(e,4);let t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t},Pp=(e,t)=>{let n,r;return t?(n=Ap(e,!0),r=Ap(e,!0)):(r=Ap(e,!1),n=Ap(e,!1)),r*4294967296+n},Fp=e=>{let t=U(e),n=U(e);return t*4294967296+n},Ip=e=>{let t=Mp(e),n=U(e);return t*4294967296+n},Lp=e=>{let t=jp(e);return Np(e)*4294967296+t},Rp=e=>{Tp(e,4);let t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},zp=e=>{Tp(e,8);let t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},W=(e,t)=>{Tp(e,t);let n=``;for(let r=0;r<t;r++)n+=String.fromCharCode(e.bytes[e.bufferPos++]);return n},Bp=(e,t,n)=>Wn.decode(V(e,t)).split(`
|
|
32
|
-
`).map(e=>e.trim()).filter(e=>e.length>0&&!n?.ignore?.(e))})),Vp,Hp,Up,Wp,Gp,Kp,qp,Jp,Yp,Xp,Zp,Qp=n((()=>{Oa(),F(),G(),(function(e){e[e.Unsynchronisation=128]=`Unsynchronisation`,e[e.ExtendedHeader=64]=`ExtendedHeader`,e[e.ExperimentalIndicator=32]=`ExperimentalIndicator`,e[e.Footer=16]=`Footer`})(Vp||={}),(function(e){e[e.ISO_8859_1=0]=`ISO_8859_1`,e[e.UTF_16_WITH_BOM=1]=`UTF_16_WITH_BOM`,e[e.UTF_16_BE_NO_BOM=2]=`UTF_16_BE_NO_BOM`,e[e.UTF_8=3]=`UTF_8`})(Hp||={}),Up=128,Wp=10,Gp=`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`.split(`.`),Kp=(e,t)=>{let n=e.filePos;t.raw??={},t.raw.TAG??=V(e,Up-3),e.filePos=n;let r=qp(e,30);r&&(t.title??=r);let i=qp(e,30);i&&(t.artist??=i);let a=qp(e,30);a&&(t.album??=a);let o=qp(e,4),s=Number.parseInt(o,10);Number.isInteger(s)&&s>0&&(t.date??=new Date(s,0,1));let c=V(e,30),l;if(c[28]===0&&c[29]!==0){let n=c[29];n>0&&(t.trackNumber??=n),e.skip(-30),l=qp(e,28),e.skip(2)}else e.skip(-30),l=qp(e,30);l&&(t.comment??=l);let u=H(e);u<Gp.length&&(t.genre??=Gp[u])},qp=(e,t)=>{let n=V(e,t),r=Wr(n.indexOf(0),n.length),i=n.subarray(0,r),a=``;for(let e=0;e<i.length;e++)a+=String.fromCharCode(i[e]);return a.trimEnd()},Jp=e=>{let t=e.filePos,n=W(e,3),r=H(e),i=H(e),a=H(e),o=U(e);return n!==`ID3`||r===255||i===255||o&2155905152?(e.filePos=t,null):{majorVersion:r,revision:i,flags:a,size:Ea(o)}},Yp=(e,t,n)=>{if(![2,3,4].includes(t.majorVersion)){console.warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);return}let r=new Xp(t,V(e,t.size));if(t.flags&Vp.Footer&&r.removeFooter(),t.flags&Vp.Unsynchronisation&&t.majorVersion===3&&r.ununsynchronizeAll(),t.flags&Vp.ExtendedHeader){let e=r.readU32();t.majorVersion===3?r.pos+=e:r.pos+=e-4}for(;r.pos<=r.bytes.length-r.frameHeaderSize();){let e=r.readId3V2Frame();if(!e)break;let i=r.pos,a=r.pos+e.size,o=!1,s=!1,c=!1;if(t.majorVersion===3?(o=!!(e.flags&64),s=!!(e.flags&128)):t.majorVersion===4&&(o=!!(e.flags&4),s=!!(e.flags&8),c=!!(e.flags&2)||!!(t.flags&Vp.Unsynchronisation)),o){console.warn(`Skipping encrypted ID3v2 frame ${e.id}`),r.pos=a;continue}if(s){console.warn(`Skipping compressed ID3v2 frame ${e.id}`),r.pos=a;continue}if(c&&r.ununsynchronizeRegion(r.pos,a),n.raw??={},e.id===`TXXX`){let e=n.raw.TXXX??={},t=r.readId3V2TextEncoding(),i=r.readId3V2Text(t,a),o=r.readId3V2Text(t,a);e[i]??=o}else e.id[0]===`T`?n.raw[e.id]??=r.readId3V2EncodingAndText(a):n.raw[e.id]??=r.readBytes(e.size);switch(r.pos=i,e.id){case`TIT2`:case`TT2`:n.title??=r.readId3V2EncodingAndText(a);break;case`TIT3`:case`TT3`:n.description??=r.readId3V2EncodingAndText(a);break;case`TPE1`:case`TP1`:n.artist??=r.readId3V2EncodingAndText(a);break;case`TALB`:case`TAL`:n.album??=r.readId3V2EncodingAndText(a);break;case`TPE2`:case`TP2`:n.albumArtist??=r.readId3V2EncodingAndText(a);break;case`TRCK`:case`TRK`:{let e=r.readId3V2EncodingAndText(a).split(`/`),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(n.trackNumber??=t),i&&Number.isInteger(i)&&i>0&&(n.tracksTotal??=i)}break;case`TPOS`:case`TPA`:{let e=r.readId3V2EncodingAndText(a).split(`/`),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(n.discNumber??=t),i&&Number.isInteger(i)&&i>0&&(n.discsTotal??=i)}break;case`TCON`:case`TCO`:{let e=r.readId3V2EncodingAndText(a),t=/^\((\d+)\)/.exec(e);if(t){let e=Number.parseInt(t[1]);if(Gp[e]!==void 0){n.genre??=Gp[e];break}}if(t=/^\d+$/.exec(e),t){let e=Number.parseInt(t[0]);if(Gp[e]!==void 0){n.genre??=Gp[e];break}}n.genre??=e}break;case`TDRC`:case`TDAT`:{let e=r.readId3V2EncodingAndText(a),t=new Date(e);Number.isNaN(t.getTime())||(n.date??=t)}break;case`TYER`:case`TYE`:{let e=r.readId3V2EncodingAndText(a),t=Number.parseInt(e,10);Number.isInteger(t)&&(n.date??=new Date(t,0,1))}break;case`USLT`:case`ULT`:{let e=r.readU8();r.pos+=3,r.readId3V2Text(e,a),n.lyrics??=r.readId3V2Text(e,a)}break;case`COMM`:case`COM`:{let e=r.readU8();r.pos+=3,r.readId3V2Text(e,a),n.comment??=r.readId3V2Text(e,a)}break;case`APIC`:case`PIC`:{let e=r.readId3V2TextEncoding(),i;if(t.majorVersion===2){let e=r.readAscii(3);i=e===`PNG`?`image/png`:e===`JPG`?`image/jpeg`:`image/*`}else i=r.readId3V2Text(e,a);let o=r.readU8(),s=r.readId3V2Text(e,a).trimEnd(),c=a-r.pos;if(c>=0){let e=r.readBytes(c);n.images||=[],n.images.push({data:e,mimeType:i,kind:o===3?`coverFront`:o===4?`coverBack`:`unknown`,description:s})}}break;default:r.pos+=e.size;break}r.pos=a}},Xp=class{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return this.header.majorVersion===2?6:10}ununsynchronizeAll(){let e=[];for(let t=0;t<this.bytes.length;t++){let n=this.bytes[t];e.push(n),n===255&&t!==this.bytes.length-1&&this.bytes[t]===0&&t++}this.bytes=new Uint8Array(e),this.view=new DataView(this.bytes.buffer)}ununsynchronizeRegion(e,t){let n=[];for(let r=e;r<t;r++){let e=this.bytes[r];n.push(e),e===255&&r!==t-1&&this.bytes[r+1]===0&&r++}let r=this.bytes.subarray(0,e),i=this.bytes.subarray(t);this.bytes=new Uint8Array(r.length+n.length+i.length),this.bytes.set(r,0),this.bytes.set(n,r.length),this.bytes.set(i,r.length+n.length),this.view=new DataView(this.bytes.buffer)}removeFooter(){this.bytes=this.bytes.subarray(0,this.bytes.length-Wp),this.view=new DataView(this.bytes.buffer)}readBytes(e){let t=this.bytes.subarray(this.pos,this.pos+e);return this.pos+=e,t}readU8(){let e=this.view.getUint8(this.pos);return this.pos+=1,e}readU16(){let e=this.view.getUint16(this.pos,!1);return this.pos+=2,e}readU24(){let e=this.view.getUint16(this.pos,!1),t=this.view.getUint8(this.pos+2);return this.pos+=3,e*256+t}readU32(){let e=this.view.getUint32(this.pos,!1);return this.pos+=4,e}readAscii(e){let t=``;for(let n=0;n<e;n++)t+=String.fromCharCode(this.view.getUint8(this.pos+n));return this.pos+=e,t}readId3V2Frame(){if(this.header.majorVersion===2){let e=this.readAscii(3);return e===`\0\0\0`?null:{id:e,size:this.readU24(),flags:0}}else{let e=this.readAscii(4);if(e===`\0\0\0\0`)return null;let t=this.readU32(),n=this.header.majorVersion===4?Ea(t):t,r=this.readU16(),i=this.pos,a=e=>{let t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;let t=this.readAscii(4);if(t!==`\0\0\0\0`&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!a(n)){let e=this.header.majorVersion===4?t:Ea(t);a(e)&&(n=e)}return this.pos=i,{id:e,size:n,flags:r}}}readId3V2TextEncoding(){let e=this.readU8();if(e>3)throw Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){let n=this.pos,r=this.readBytes(t-this.pos);switch(e){case Hp.ISO_8859_1:{let e=``;for(let t=0;t<r.length;t++){let i=r[t];if(i===0){this.pos=n+t+1;break}e+=String.fromCharCode(i)}return e}case Hp.UTF_16_WITH_BOM:if(r[0]===255&&r[1]===254){let e=new TextDecoder(`utf-16le`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}else if(r[0]===254&&r[1]===255){let e=new TextDecoder(`utf-16be`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}else{let e=Wr(r.findIndex(e=>e===0),r.length);return this.pos=n+Math.min(e+1,r.length),Wn.decode(r.subarray(0,e))}case Hp.UTF_16_BE_NO_BOM:{let e=new TextDecoder(`utf-16be`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Hp.UTF_8:{let e=Wr(r.findIndex(e=>e===0),r.length);return this.pos=n+Math.min(e+1,r.length),Wn.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return``;let t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}},Zp=class{constructor(e){this.helper=new Uint8Array(8),this.helperView=j(this.helper),this.writer=e}writeId3V2Tag(e){let t=this.writer.getPos();this.writeAscii(`ID3`),this.writeU8(4),this.writeU8(0),this.writeU8(0),this.writeSynchsafeU32(0);let n=this.writer.getPos(),r=new Set;for(let{key:t,value:n}of Kr(e))switch(t){case`title`:this.writeId3V2TextFrame(`TIT2`,n),r.add(`TIT2`);break;case`description`:this.writeId3V2TextFrame(`TIT3`,n),r.add(`TIT3`);break;case`artist`:this.writeId3V2TextFrame(`TPE1`,n),r.add(`TPE1`);break;case`album`:this.writeId3V2TextFrame(`TALB`,n),r.add(`TALB`);break;case`albumArtist`:this.writeId3V2TextFrame(`TPE2`,n),r.add(`TPE2`);break;case`trackNumber`:{let t=e.tracksTotal===void 0?n.toString():`${n}/${e.tracksTotal}`;this.writeId3V2TextFrame(`TRCK`,t),r.add(`TRCK`)}break;case`discNumber`:{let t=e.discsTotal===void 0?n.toString():`${n}/${e.discsTotal}`;this.writeId3V2TextFrame(`TPOS`,t),r.add(`TPOS`)}break;case`genre`:this.writeId3V2TextFrame(`TCON`,n),r.add(`TCON`);break;case`date`:this.writeId3V2TextFrame(`TDRC`,n.toISOString().slice(0,10)),r.add(`TDRC`);break;case`lyrics`:this.writeId3V2LyricsFrame(n),r.add(`USLT`);break;case`comment`:this.writeId3V2CommentFrame(n),r.add(`COMM`);break;case`images`:{let e={coverFront:3,coverBack:4,unknown:0};for(let t of n){let n=e[t.kind]??0,r=t.description??``;this.writeId3V2ApicFrame(t.mimeType,n,r,t.data)}}break;case`tracksTotal`:case`discsTotal`:break;case`raw`:break;default:pr(t)}if(e.raw)for(let t in e.raw){let n=e.raw[t];if(n==null||t.length!==4||r.has(t))continue;let i;if(typeof n==`string`)if(Gn(n)){i=new Uint8Array(n.length+2),i[0]=Hp.ISO_8859_1;for(let e=0;e<n.length;e++)i[e+1]=n.charCodeAt(e)}else{let e=M.encode(n);i=new Uint8Array(e.byteLength+2),i[0]=Hp.UTF_8,i.set(e,1)}else if(n instanceof Uint8Array)i=n;else if(t===`TXXX`&&yi(n)){for(let e in n){let t=n[e],r=Gn(e)&&Gn(t),i=r?null:M.encode(e),a=r?null:M.encode(t),o=r?e.length:i.byteLength,s=r?t.length:a.byteLength,c=1+o+1+s+1;this.writeAscii(`TXXX`),this.writeSynchsafeU32(c),this.writeU16(0),this.writeU8(r?Hp.ISO_8859_1:Hp.UTF_8),r?(this.writeIsoString(e),this.writeIsoString(t)):(this.writer.write(i),this.writeU8(0),this.writer.write(a),this.writeU8(0))}continue}else continue;this.writeAscii(t),this.writeSynchsafeU32(i.byteLength),this.writeU16(0),this.writer.write(i)}let i=this.writer.getPos(),a=i-n;return this.writer.seek(t+6),this.writeSynchsafeU32(a),this.writer.seek(i),a+10}writeU8(e){this.helper[0]=e,this.writer.write(this.helper.subarray(0,1))}writeU16(e){this.helperView.setUint16(0,e,!1),this.writer.write(this.helper.subarray(0,2))}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeAscii(e){for(let t=0;t<e.length;t++)this.helper[t]=e.charCodeAt(t);this.writer.write(this.helper.subarray(0,e.length))}writeSynchsafeU32(e){this.writeU32(Ta(e))}writeIsoString(e){let t=new Uint8Array(e.length+1);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);this.writer.write(t)}writeUtf8String(e){let t=M.encode(e);this.writer.write(t),this.writeU8(0)}writeId3V2TextFrame(e,t){let n=Gn(t),r=1+(n?t.length:M.encode(t).byteLength)+1;this.writeAscii(e),this.writeSynchsafeU32(r),this.writeU16(0),this.writeU8(n?Hp.ISO_8859_1:Hp.UTF_8),n?this.writeIsoString(t):this.writeUtf8String(t)}writeId3V2LyricsFrame(e){let t=Gn(e),n=5+e.length+1;this.writeAscii(`USLT`),this.writeSynchsafeU32(n),this.writeU16(0),this.writeU8(t?Hp.ISO_8859_1:Hp.UTF_8),this.writeAscii(`und`),t?(this.writeIsoString(``),this.writeIsoString(e)):(this.writeUtf8String(``),this.writeUtf8String(e))}writeId3V2CommentFrame(e){let t=Gn(e),n=5+(t?e.length:M.encode(e).byteLength)+1;this.writeAscii(`COMM`),this.writeSynchsafeU32(n),this.writeU16(0),this.writeU8(t?Hp.ISO_8859_1:Hp.UTF_8),this.writeU8(117),this.writeU8(110),this.writeU8(100),t?(this.writeIsoString(``),this.writeIsoString(e)):(this.writeUtf8String(``),this.writeUtf8String(e))}writeId3V2ApicFrame(e,t,n,r){let i=Gn(e)&&Gn(n),a=i?n.length:M.encode(n).byteLength,o=1+e.length+1+1+a+1+r.byteLength;this.writeAscii(`APIC`),this.writeSynchsafeU32(o),this.writeU16(0),this.writeU8(i?Hp.ISO_8859_1:Hp.UTF_8),i?this.writeIsoString(e):this.writeUtf8String(e),this.writeU8(t),i?this.writeIsoString(n):this.writeUtf8String(n),this.writer.write(r)}}})),$p,em=n((()=>{F(),$p=class{constructor(e){this.mutex=new tr,this.trackTimestampInfo=new WeakMap,this.output=e}onTrackClose(e){}validateTimestamp(e,t,n){if(t<0)throw Error(`Timestamps must be non-negative (got ${t}s).`);let r=this.trackTimestampInfo.get(e);if(r){if(n&&(r.maxTimestampBeforeLastKeyPacket=r.maxTimestamp),r.maxTimestampBeforeLastKeyPacket!==null&&t<r.maxTimestampBeforeLastKeyPacket)throw Error(`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key packet and ends right before the next key packet). Got ${t}s, but largest timestamp is ${r.maxTimestampBeforeLastKeyPacket}s.`);r.maxTimestamp=Math.max(r.maxTimestamp,t)}else{if(!n)throw Error(`First packet must be a key packet.`);r={maxTimestamp:t,maxTimestampBeforeLastKeyPacket:null},this.trackTimestampInfo.set(e,r)}}}})),tm,nm=n((()=>{Pi(),ha(),Qp(),Ei(),F(),em(),tm=class extends $p{constructor(e,t){super(e),this.header=null,this.headerBitstream=null,this.inputIsAdts=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),Ci(this.output._metadataTags)||new Zp(this.writer).writeId3V2Tag(this.output._metadataTags),e()}async getMimeType(){return`audio/aac`}async addEncodedVideoPacket(){throw Error(`ADTS does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.validateTimestamp(e,t.timestamp,t.type===`key`),this.inputIsAdts===null){pa(n);let e=n?.decoderConfig?.description;if(this.inputIsAdts=!e,!this.inputIsAdts){let t=Mi(Ai(A(e)));this.header=t.header,this.headerBitstream=t.bitstream}}if(this.inputIsAdts){let e=this.writer.getPos();this.writer.write(t.data),this.format._options.onFrame&&this.format._options.onFrame(t.data,e)}else{D(this.header);let e=t.data.byteLength+this.header.byteLength;Ni(this.headerBitstream,e);let n=this.writer.getPos();if(this.writer.write(this.header),this.writer.write(t.data),this.format._options.onFrame){let r=new Uint8Array(e);r.set(this.header,0),r.set(t.data,this.header.byteLength),this.format._options.onFrame(r,n)}}await this.writer.flush()}finally{r()}}async addSubtitleCue(){throw Error(`ADTS does not support subtitles.`)}async finalize(){(await this.mutex.acquire())()}}})),rm,im,am,om,sm=n((()=>{ha(),Po(),F(),em(),G(),Ei(),il(),Di(),rm=new Uint8Array([102,76,97,67]),im=38,am=34,om=class extends $p{constructor(e,t){super(e),this.metadataWritten=!1,this.blockSizes=[],this.frameSizes=[],this.sampleRate=null,this.channels=null,this.bitsPerSample=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!!this.format._options.appendOnly),this.writer.write(rm),e()}writeHeader({bitsPerSample:e,minimumBlockSize:t,maximumBlockSize:n,minimumFrameSize:r,maximumFrameSize:i,sampleRate:a,channels:o,totalSamples:s}){D(this.writer.getPos()===4);let c=!Ci(this.output._metadataTags),l=new I(new Uint8Array(4));l.writeBits(1,Number(!c)),l.writeBits(7,bo.STREAMINFO),l.writeBits(24,am),this.writer.write(l.bytes);let u=new I(new Uint8Array(18));if(u.writeBits(16,t),u.writeBits(16,n),u.writeBits(24,r),u.writeBits(24,i),u.writeBits(20,a),u.writeBits(3,o-1),u.writeBits(5,e-1),s>=2**32)throw Error(`This muxer only supports writing up to 2 ** 32 samples`);u.writeBits(4,0),u.writeBits(32,s),this.writer.write(u.bytes),this.writer.write(new Uint8Array(16))}writePictureBlock(e){let t=32+e.mimeType.length+(e.description?.length??0)+e.data.length,n=new Uint8Array(t),r=0,i=j(n);i.setUint32(r,e.kind===`coverFront`?3:e.kind===`coverBack`?4:0),r+=4,i.setUint32(r,e.mimeType.length),r+=4,n.set(M.encode(e.mimeType),8),r+=e.mimeType.length,i.setUint32(r,e.description?.length??0),r+=4,n.set(M.encode(e.description??``),r),r+=e.description?.length??0,r+=16,i.setUint32(r,e.data.length),r+=4,n.set(e.data,r),r+=e.data.length,D(r===t);let a=new I(new Uint8Array(4));a.writeBits(1,0),a.writeBits(7,bo.PICTURE),a.writeBits(24,t),this.writer.write(a.bytes),this.writer.write(n)}writeVorbisCommentAndPictureBlock(){if(this.format._options.appendOnly||this.writer.seek(im+rm.byteLength),Ci(this.output._metadataTags)){this.metadataWritten=!0;return}let e=this.output._metadataTags.images??[];for(let t of e)this.writePictureBlock(t);let t=So(new Uint8Array,this.output._metadataTags,!1),n=new I(new Uint8Array(4));n.writeBits(1,1),n.writeBits(7,bo.VORBIS_COMMENT),n.writeBits(24,t.length),this.writer.write(n.bytes),this.writer.write(t),this.metadataWritten=!0}async getMimeType(){return`audio/flac`}async addEncodedVideoPacket(){throw Error(`FLAC does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.validateTimestamp(e,t.timestamp,t.type===`key`),this.sampleRate===null){pa(n),D(n),D(n.decoderConfig),D(n.decoderConfig.description),this.sampleRate=n.decoderConfig.sampleRate,this.channels=n.decoderConfig.numberOfChannels;let e=new I(A(n.decoderConfig.description));e.skipBits(167),this.bitsPerSample=e.readBits(5)+1,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 r=wp.tempFromBytes(t.data);r.skip(2);let i=Qc(new I(V(r,2)).readBits(4));if(i===null)throw Error(`Invalid FLAC frame: Invalid block size.`);el(r);let a=tl(r,i);this.format._options.appendOnly||(this.blockSizes.push(a),this.frameSizes.push(t.data.length));let o=this.writer.getPos();this.writer.write(t.data),this.format._options.onFrame&&this.format._options.onFrame(t.data,o),await this.writer.flush()}finally{r()}}addSubtitleCue(){throw Error(`FLAC does not support subtitles.`)}async finalize(){let e=await this.mutex.acquire();if(!this.format._options.appendOnly){let e=1/0,t=0,n=1/0,r=0,i=0;for(let a=0;a<this.blockSizes.length;a++)n=Math.min(n,this.frameSizes[a]),r=Math.max(r,this.frameSizes[a]),t=Math.max(t,this.blockSizes[a]),i+=this.blockSizes[a],a!==this.blockSizes.length-1&&(e=Math.min(e,this.blockSizes[a]));D(this.sampleRate!==null),D(this.channels!==null),D(this.bitsPerSample!==null),this.writer.seek(4),this.writeHeader({minimumBlockSize:e,maximumBlockSize:t,minimumFrameSize:n,maximumFrameSize:r,sampleRate:this.sampleRate,channels:this.channels,bitsPerSample:this.bitsPerSample,totalSamples:i})}e()}}})),cm,lm,um,dm,fm,pm,mm,hm=n((()=>{cm=/(?:(.+?)\n)?((?:\d{2}:)?\d{2}:\d{2}.\d{3})\s+-->\s+((?:\d{2}:)?\d{2}:\d{2}.\d{3})/g,lm=/^WEBVTT(.|\n)*?\n{2}/,um=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,dm=class{constructor(e){this.preambleText=null,this.preambleEmitted=!1,this.options=e}parse(e){e=e.replaceAll(`\r
|
|
31
|
+
`),n=this.gl.createProgram();return this.gl.attachShader(n,e),this.gl.attachShader(n,t),this.gl.linkProgram(n),n}createShader(e,t){D(this.gl);let n=this.gl.createShader(e);return this.gl.shaderSource(n,t),this.gl.compileShader(n),n}createVAO(){D(this.gl),D(this.program);let e=this.gl.createVertexArray();this.gl.bindVertexArray(e);let t=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),n=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,n),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW);let r=this.gl.getAttribLocation(this.program,`a_position`),i=this.gl.getAttribLocation(this.program,`a_texCoord`);return this.gl.enableVertexAttribArray(r),this.gl.vertexAttribPointer(r,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,8),e}createTexture(){D(this.gl);let e=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),e}updateGpu(e,t){D(this.gl),D(this.canvas),(e.displayWidth!==this.canvas.width||e.displayHeight!==this.canvas.height)&&(this.canvas.width=e.displayWidth,this.canvas.height=e.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.colorTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,this.alphaTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4);let n=new VideoFrame(this.canvas,{timestamp:e.timestamp,duration:e.duration??void 0});return e.close(),t.close(),n}updateCpu(e,t){if(!this.worker){let e=new Blob([`(${Xf.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.addEventListener(`message`,e=>{let t=e.data,n=this.pendingRequests.get(t.id);n&&(this.pendingRequests.delete(t.id),`error`in t?n.reject(Error(t.error)):n.resolve(t.frame))}),this.worker.addEventListener(`error`,e=>{let t=Error(e.message||`Color/alpha merge worker error.`);for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()})}let n=this.nextRequestId++,r=P();return this.pendingRequests.set(n,r),this.worker.postMessage({id:n,color:e,alpha:t},{transfer:[e,t]}),r.promise}close(){this.gl?.getExtension(`WEBGL_lose_context`)?.loseContext(),this.gl=null,this.canvas=null,this.worker?.terminate(),this.worker=null;let e=Error(`Color/alpha merger closed.`);for(let t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}},Yf.forceCpu=!0,Xf=()=>{let e=null,t=null,n=Promise.resolve();self.addEventListener(`message`,e=>{let{id:t,color:i,alpha:a}=e.data;n=n.then(async()=>{try{let e=await r(i,a);self.postMessage({id:t,frame:e},{transfer:[e]})}catch(e){self.postMessage({id:t,error:e.message})}finally{i.close(),a.close()}})});let r=async(e,t)=>{let n=e.format,r=t.format;if(!n||!r)throw Error(`CPU color/alpha merging requires a known VideoFrame format.`);let s=n.includes(`P10`),c=n.includes(`P12`),l=r.includes(`P10`),u=r.includes(`P12`);if(l!==s||u!==c)throw Error(`CPU color/alpha merging requires the alpha frame to have the same bit depth as the color frame (color: '${n}', alpha: '${r}').`);let d=e.codedWidth,f=e.codedHeight;if(n===`RGBX`||n===`RGBA`||n===`BGRX`||n===`BGRA`)return await i(e,t,d,f,n);if(n===`I420`||n===`I420P10`||n===`I420P12`||n===`I422`||n===`I422P10`||n===`I422P12`||n===`I444`||n===`I444P10`||n===`I444P12`)return await a(e,t,d,f,n);if(n===`NV12`)return await o(e,t,d,f);throw Error(`CPU color/alpha merging does not support format '${n}'.`)},i=async(e,t,n,r,i)=>{let a=n*r,o=new Uint8Array(a*4);await e.copyTo(o);let c=await s(t,n,r,1);for(let e=0,t=3;e<a;e++,t+=4)o[t]=c[e];let l={format:i===`RGBX`||i===`RGBA`?`RGBA`:`BGRA`,codedWidth:n,codedHeight:r,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,l)},a=async(e,t,n,r,i)=>{let a=i.includes(`P10`),o=i.includes(`P12`),c=a||o?2:1,l,u;i.startsWith(`I420`)?(l=Math.ceil(n/2),u=Math.ceil(r/2)):i.startsWith(`I422`)?(l=Math.ceil(n/2),u=r):(l=n,u=r);let d=n*r,f=l*u,p=d*c,m=f*c,h=d*c,g=p+2*m+h,_=new Uint8Array(g);await e.copyTo(_);let v=await s(t,n,r,c),y=p+2*m;_.set(v,y);let b={format:i.slice(0,4)+`A`+i.slice(4),codedWidth:n,codedHeight:r,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[_.buffer]};return new VideoFrame(_,b)},o=async(e,n,r,i)=>{let a=r*i,o=Math.ceil(r/2)*Math.ceil(i/2),c=e.allocationSize();(!t||t.byteLength!==c)&&(t=new Uint8Array(c)),await e.copyTo(t);let l=new Uint8Array(a+2*o+a);l.set(t.subarray(0,a),0);let u=a,d=a+o,f=a;for(let e=0;e<o;e++)l[u+e]=t[f+e*2],l[d+e]=t[f+e*2+1];let p=await s(n,r,i,1);l.set(p,a+2*o);let m={format:`I420A`,codedWidth:r,codedHeight:i,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[l.buffer]};return new VideoFrame(l,m)},s=async(t,n,r,i)=>{let a=t.allocationSize();(!e||e.byteLength!==a)&&(e=new Uint8Array(a)),await t.copyTo(e);let o=t.format;if(o===`RGBA`||o===`BGRA`||o===`RGBX`||o===`BGRX`){let t=o===`RGBA`||o===`RGBX`?0:2,i=n*r;for(let n=0;n<i;n++)e[n]=e[n*4+t];return e.subarray(0,i)}else return e.subarray(0,n*r*i)}},Zf=class extends Gf{constructor(e){if(!(e instanceof op))throw TypeError(`videoTrack must be an InputVideoTrack.`);super(),this._track=e}async _createDecoder(e,t){if(!await this._track.canDecode())throw Error(`This video track cannot be decoded by this browser. Make sure to check decodability before using a track.`);let n=await this._track.getCodec(),r=await this._track.getRotation(),i=await this._track.getDecoderConfig(),a=await this._track.getTimeResolution();return D(n&&i),new qf(e,t,n,i,r,a)}_createPacketSink(){return new Uf(this._track)}async getSample(e,t={}){Vf(e);for await(let n of this.mediaSamplesAtTimestamps([e],t))return n;throw Error(`Internal error: Iterator returned nothing.`)}samples(e,t,n={}){return this.mediaSamplesInRange(e,t,n)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}},Qf=class{constructor(e,t={}){if(this._rotation=0,this._initPromise=null,this._nextCanvasIndex=0,!(e instanceof op))throw TypeError(`videoTrack must be an InputVideoTrack.`);if(t&&typeof t!=`object`)throw TypeError(`options must be an object.`);if(t.alpha!==void 0&&typeof t.alpha!=`boolean`)throw TypeError(`options.alpha, when provided, must be a boolean.`);if(t.width!==void 0&&(!Number.isInteger(t.width)||t.width<=0))throw TypeError(`options.width, when defined, must be a positive integer.`);if(t.height!==void 0&&(!Number.isInteger(t.height)||t.height<=0))throw TypeError(`options.height, when defined, must be a positive integer.`);if(t.fit!==void 0&&![`fill`,`contain`,`cover`].includes(t.fit))throw 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 TypeError(`When both options.width and options.height are provided, options.fit must also be provided.`);if(t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`options.rotation, when provided, must be 0, 90, 180 or 270.`);if(t.crop!==void 0&&jd(t.crop,`options.`),t.poolSize!==void 0&&(typeof t.poolSize!=`number`||!Number.isInteger(t.poolSize)||t.poolSize<0))throw TypeError(`poolSize must be a non-negative integer.`);this._videoTrack=e,this._alpha=t.alpha??!1,this._options=t,this._fit=t.fit??`fill`,this._videoSampleSink=new Zf(e),this._canvasPool=Array.from({length:t.poolSize??0},()=>null)}_ensureInit(){return this._initPromise??=(async()=>{let e=this._options,t=this._videoTrack,n=e.rotation??await t.getRotation(),r=await t.getSquarePixelWidth(),i=await t.getSquarePixelHeight(),[a,o]=n%180==0?[r,i]:[i,r],s=e.crop;s&&=Ad(s,a,o);let[c,l]=s?[s.width,s.height]:[a,o],u=c/l;e.width!==void 0&&e.height===void 0?(c=e.width,l=Math.round(c/u)):e.width===void 0&&e.height!==void 0?(l=e.height,c=Math.round(l*u)):e.width!==void 0&&e.height!==void 0&&(c=e.width,l=e.height),this._width=c,this._height=l,this._rotation=n,this._crop=s})()}_videoSampleToWrappedCanvas(e){let t=this._width,n=this._height,r=this._canvasPool[this._nextCanvasIndex],i=!1;r||(typeof document<`u`?(r=document.createElement(`canvas`),r.width=t,r.height=n):r=new OffscreenCanvas(t,n),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=r),i=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);let a=r.getContext(`2d`,{alpha:this._alpha||zr()});D(a),a.resetTransform(),i||(!this._alpha&&zr()?(a.fillStyle=`black`,a.fillRect(0,0,t,n)):a.clearRect(0,0,t,n)),e.drawWithFit(a,{fit:this._fit,rotation:this._rotation,crop:this._crop});let o={canvas:r,timestamp:e.timestamp,duration:e.duration};return e.close(),o}async getCanvas(e,t){Vf(e),await this._ensureInit();let n=await this._videoSampleSink.getSample(e,t);return n&&this._videoSampleToWrappedCanvas(n)}async*canvases(e,t,n){await this._ensureInit(),yield*yr(this._videoSampleSink.samples(e,t,n),e=>this._videoSampleToWrappedCanvas(e))}async*canvasesAtTimestamps(e,t){await this._ensureInit(),yield*yr(this._videoSampleSink.samplesAtTimestamps(e,t),e=>e&&this._videoSampleToWrappedCanvas(e))}},$f=class extends Wf{constructor(e,t,n,r){super(e,t),this.decoder=null,this.customDecoder=null,this.customDecoderCallSerializer=new Fr,this.customDecoderQueueSize=0,this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0;let i=t=>{let n=t.timestamp;this.expectedFirstTimestamp&&this.currentTimestamp===null&&(this.timestampOffset=this.expectedFirstTimestamp-n),n+=this.timestampOffset,(this.currentTimestamp===null||Math.abs(n-this.currentTimestamp)>=t.duration)&&(this.currentTimestamp=n);let i=this.currentTimestamp;if(this.currentTimestamp+=t.duration,t.numberOfFrames===0){t.close();return}let a=r.sampleRate;t.setTimestamp(Math.round(i*a)/a),e(t)},a=kf.find(e=>e.supports(n,r));if(a)this.customDecoder=new a,this.customDecoder.codec=n,this.customDecoder.config=r,this.customDecoder.onSample=e=>{if(!(e instanceof Vd))throw TypeError(`The argument passed to onSample must be an AudioSample.`);i(e)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let e=Error(`Decoding error`).stack;this.decoder=new AudioDecoder({output:e=>{try{i(new Vd(e))}catch(e){this.onError(e)}},error:t=>{t.stack=e,this.onError(t)}}),this.decoder.configure(r)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(D(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--)):(D(this.decoder),this.expectedFirstTimestamp??=e.timestamp,this.decoder.decode(e.toEncodedAudioChunk()))}async flush(){this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(D(this.decoder),await this.decoder.flush()),this.currentTimestamp=null,this.expectedFirstTimestamp=null,this.timestampOffset=0}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(D(this.decoder),this.decoder.close())}},ep=class extends Wf{constructor(e,t,n){super(e,t),this.decoderConfig=n,this.currentTimestamp=null,D(Fi.includes(n.codec)),this.codec=n.codec;let{dataType:r,sampleSize:i,littleEndian:a}=ta(this.codec);switch(this.inputSampleSize=i,i){case 1:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint8(t)-2**7:r===`signed`?this.readInputValue=(e,t)=>e.getInt8(t):r===`ulaw`?this.readInputValue=(e,t)=>If(e.getUint8(t)):r===`alaw`?this.readInputValue=(e,t)=>Rf(e.getUint8(t)):D(!1);break;case 2:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint16(t,a)-2**15:r===`signed`?this.readInputValue=(e,t)=>e.getInt16(t,a):D(!1);break;case 3:r===`unsigned`?this.readInputValue=(e,t)=>mr(e,t,a)-2**23:r===`signed`?this.readInputValue=(e,t)=>hr(e,t,a):D(!1);break;case 4:r===`unsigned`?this.readInputValue=(e,t)=>e.getUint32(t,a)-2**31:r===`signed`?this.readInputValue=(e,t)=>e.getInt32(t,a):r===`float`?this.readInputValue=(e,t)=>e.getFloat32(t,a):D(!1);break;case 8:r===`float`?this.readInputValue=(e,t)=>e.getFloat64(t,a):D(!1);break;default:pr(i),D(!1)}switch(i){case 1:r===`ulaw`||r===`alaw`?(this.outputSampleSize=2,this.outputFormat=`s16`,this.writeOutputValue=(e,t,n)=>e.setInt16(t,n,!0)):(this.outputSampleSize=1,this.outputFormat=`u8`,this.writeOutputValue=(e,t,n)=>e.setUint8(t,n+2**7));break;case 2:this.outputSampleSize=2,this.outputFormat=`s16`,this.writeOutputValue=(e,t,n)=>e.setInt16(t,n,!0);break;case 3:this.outputSampleSize=4,this.outputFormat=`s32`,this.writeOutputValue=(e,t,n)=>e.setInt32(t,n<<8,!0);break;case 4:this.outputSampleSize=4,r===`float`?(this.outputFormat=`f32`,this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,!0)):(this.outputFormat=`s32`,this.writeOutputValue=(e,t,n)=>e.setInt32(t,n,!0));break;case 8:this.outputSampleSize=4,this.outputFormat=`f32`,this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,!0);break;default:pr(i),D(!1)}}getDecodeQueueSize(){return 0}decode(e){let t=j(e.data),n=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,r=n*this.decoderConfig.numberOfChannels*this.outputSampleSize,i=new ArrayBuffer(r),a=new DataView(i);for(let e=0;e<n*this.decoderConfig.numberOfChannels;e++){let n=e*this.inputSampleSize,r=e*this.outputSampleSize,i=this.readInputValue(t,n);this.writeOutputValue(a,r,i)}let o=n/this.decoderConfig.sampleRate;(this.currentTimestamp===null||Math.abs(e.timestamp-this.currentTimestamp)>=o)&&(this.currentTimestamp=e.timestamp);let s=this.currentTimestamp;this.currentTimestamp+=o;let c=new Vd({format:this.outputFormat,data:i,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:n,timestamp:s});this.onSample(c)}async flush(){}close(){}},tp=class extends Gf{constructor(e){if(!(e instanceof sp))throw TypeError(`audioTrack must be an InputAudioTrack.`);super(),this._track=e}async _createDecoder(e,t){if(!await this._track.canDecode())throw Error(`This audio track cannot be decoded by this browser. Make sure to check decodability before using a track.`);let n=await this._track.getCodec(),r=await this._track.getDecoderConfig();return D(n&&r),Fi.includes(r.codec)?new ep(e,t,r):new $f(e,t,n,r)}_createPacketSink(){return new Uf(this._track)}async getSample(e,t={}){Vf(e);for await(let n of this.mediaSamplesAtTimestamps([e],t))return n;throw Error(`Internal error: Iterator returned nothing.`)}samples(e,t,n={}){return this.mediaSamplesInRange(e,t,n)}samplesAtTimestamps(e,t={}){return this.mediaSamplesAtTimestamps(e,t)}},np=class{constructor(e){if(!(e instanceof sp))throw TypeError(`audioTrack must be an InputAudioTrack.`);this._audioSampleSink=new tp(e)}_audioSampleToWrappedArrayBuffer(e){let t={buffer:e.toAudioBuffer(),timestamp:e.timestamp,duration:e.duration};return e.close(),t}async getBuffer(e,t){Vf(e);let n=await this._audioSampleSink.getSample(e,t);return n&&this._audioSampleToWrappedArrayBuffer(n)}buffers(e,t,n){return yr(this._audioSampleSink.samples(e,t,n),e=>this._audioSampleToWrappedArrayBuffer(e))}buffersAtTimestamps(e,t){return yr(this._audioSampleSink.samplesAtTimestamps(e,t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}}})),ip,V,ap,op,sp,cp,lp,up,dp,fp,pp,mp=n((()=>{No(),Pf(),rp(),F(),Lo(),ip=class e{constructor(e,t){this.input=e,this._backing=t}isVideoTrack(){return this instanceof op}isAudioTrack(){return this instanceof sp}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}async getInternalCodecId(){return this._backing.getInternalCodecId()}get internalCodecId(){return V(this._backing.getInternalCodecId(),`internalCodecId`,`getInternalCodecId`)}async getLanguageCode(){return this._backing.getLanguageCode()}get languageCode(){return V(this._backing.getLanguageCode(),`languageCode`,`getLanguageCode`)}async getName(){return this._backing.getName()}get name(){return V(this._backing.getName(),`name`,`getName`)}async getTimeResolution(){return this._backing.getTimeResolution()}get timeResolution(){return V(this._backing.getTimeResolution(),`timeResolution`,`getTimeResolution`)}async isRelativeToUnixEpoch(){return this._backing.isRelativeToUnixEpoch()}async getDisposition(){return this._backing.getDisposition()}get disposition(){return V(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(e){let t=await this._backing.getPacket(1/0,{metadataOnly:!0,...e});return wr((t?.timestamp??0)+(t?.duration??0),await this.getTimeResolution())}async getDurationFromMetadata(e={}){return this._backing.getDurationFromMetadata(e)}async computePacketStats(e=1/0,t){let n=new Uf(this),r=1/0,i=-1/0,a=0,o=0;for await(let s of n.packets(void 0,void 0,{metadataOnly:!0,...t})){if(a>=e&&s.timestamp>=i)break;r=Math.min(r,s.timestamp),i=Math.max(i,s.timestamp+s.duration),a++,o+=s.byteLength}return{packetCount:a,averagePacketRate:a?Number((a/(i-r)).toPrecision(16)):0,averageBitrate:a?Number((8*o/(i-r)).toPrecision(16)):0}}async isLive(){return await this._backing.getLiveRefreshInterval()!==null}async getLiveRefreshInterval(){return this._backing.getLiveRefreshInterval()}canBePairedWith(t){if(!(t instanceof e))throw TypeError(`other must be an InputTrack.`);return this.input!==t.input||this===t?!1:(this._backing.getPairingMask()&t._backing.getPairingMask())!==0n}async getPairableTracks(e){return this.input.getTracks(fp({filter:e=>e.canBePairedWith(this)},e))}async getPairableVideoTracks(e){return this.input.getVideoTracks(fp({filter:e=>e.canBePairedWith(this)},e))}async getPairableAudioTracks(e){return this.input.getAudioTracks(fp({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableVideoTrack(e){return this.input.getPrimaryVideoTrack(fp({filter:e=>e.canBePairedWith(this)},e))}async getPrimaryPairableAudioTrack(e){return this.input.getPrimaryAudioTrack(fp({filter:e=>e.canBePairedWith(this)},e))}async hasPairableTrack(e){e&&=ap(e);let t=await this.input.getTracks();for(let n of t)if(this.canBePairedWith(n)&&(!e||await e(n)))return!0;return!1}hasPairableVideoTrack(e){return e&&=ap(e),this.hasPairableTrack(async t=>t.isVideoTrack()&&(!e||await e(t)))}hasPairableAudioTrack(e){return e&&=ap(e),this.hasPairableTrack(async t=>t.isAudioTrack()&&(!e||await e(t)))}},V=(e,t,n)=>{if(e instanceof Promise)throw Error(`'${t}' is deprecated and not available synchronously for this track. Use the preferred '${n}()' instead.`);return e},ap=e=>{if(e!==void 0&&typeof e!=`function`)throw TypeError(`predicate, when provided, must be a function.`);return e?t=>{let n=e=>{if(typeof e!=`boolean`)throw TypeError(`predicate must return or resolve to a boolean value.`);return e},r=e(t);return r instanceof Promise?r.then(n):n(r)}:void 0},op=class extends ip{constructor(e,t){super(e,t),this._pixelAspectRatioCache=null,this._backing=t}get type(){return`video`}async getCodec(){return this._backing.getCodec()}get codec(){return V(this._backing.getCodec(),`codec`,`getCodec`)}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!1}async getCodedWidth(){return this._backing.getCodedWidth()}get codedWidth(){return V(this._backing.getCodedWidth(),`codedWidth`,`getCodedWidth`)}async getCodedHeight(){return this._backing.getCodedHeight()}get codedHeight(){return V(this._backing.getCodedHeight(),`codedHeight`,`getCodedHeight`)}async getRotation(){return this._backing.getRotation()}get rotation(){return V(this._backing.getRotation(),`rotation`,`getRotation`)}async getSquarePixelWidth(){return this._backing.getSquarePixelWidth()}get squarePixelWidth(){return V(this._backing.getSquarePixelWidth(),`squarePixelWidth`,`getSquarePixelWidth`)}async getSquarePixelHeight(){return this._backing.getSquarePixelHeight()}get squarePixelHeight(){return V(this._backing.getSquarePixelHeight(),`squarePixelHeight`,`getSquarePixelHeight`)}async getPixelAspectRatio(){return this._pixelAspectRatioCache??=ri({num:await this.getSquarePixelWidth()*await this.getCodedHeight(),den:await this.getSquarePixelHeight()*await this.getCodedWidth()})}get pixelAspectRatio(){return this._pixelAspectRatioCache??=ri({num:V(this._backing.getSquarePixelWidth(),`pixelAspectRatio`,`getPixelAspectRatio`)*V(this._backing.getCodedHeight(),`pixelAspectRatio`,`getPixelAspectRatio`),den:V(this._backing.getSquarePixelHeight(),`pixelAspectRatio`,`getPixelAspectRatio`)*V(this._backing.getCodedWidth(),`pixelAspectRatio`,`getPixelAspectRatio`)})}async getDisplayWidth(){return await this._backing.getMetadataDisplayWidth?.()??(await this.getRotation()%180==0?this.getSquarePixelWidth():this.getSquarePixelHeight())}get displayWidth(){let e=this._backing.getMetadataDisplayWidth?.();if(e!==void 0){let t=V(e,`displayWidth`,`getDisplayWidth`);if(t!==null)return t}return V(V(this._backing.getRotation(),`displayWidth`,`getDisplayWidth`)%180==0?this._backing.getSquarePixelWidth():this._backing.getSquarePixelHeight(),`displayWidth`,`getDisplayWidth`)}async getDisplayHeight(){return await this._backing.getMetadataDisplayHeight?.()??(await this.getRotation()%180==0?this.getSquarePixelHeight():this.getSquarePixelWidth())}get displayHeight(){let e=this._backing.getMetadataDisplayHeight?.();if(e!==void 0){let t=V(e,`displayHeight`,`getDisplayHeight`);if(t!==null)return t}return V(V(this._backing.getRotation(),`displayHeight`,`getDisplayHeight`)%180==0?this._backing.getSquarePixelHeight():this._backing.getSquarePixelWidth(),`displayHeight`,`getDisplayHeight`)}async getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){let e=await this._backing.getColorSpace();return e.primaries===`bt2020`||e.primaries===`smpte432`||e.transfer===`pg`||e.transfer===`hlg`||e.matrix===`bt2020-ncl`}async canBeTransparent(){return this._backing.canBeTransparent()}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return await this._backing.getMetadataCodecParameterString?.()??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return D(t!==null),Of.some(n=>n.supports(t,e))?!0:typeof VideoDecoder>`u`?!1:(await VideoDecoder.isConfigSupported(e)).supported===!0}catch(e){return console.error(`Error during decodability check:`,e),!1}}async determinePacketType(e){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`packet must not be metadata-only to determine its type.`);let t=await this.getCodec();if(t===null)return null;let n=await this.getDecoderConfig();return D(n),vo(t,n,e.data)}},sp=class extends ip{constructor(e,t){super(e,t),this._backing=t}get type(){return`audio`}async getCodec(){return this._backing.getCodec()}get codec(){return V(this._backing.getCodec(),`codec`,`getCodec`)}async hasOnlyKeyPackets(){return await this._backing.getHasOnlyKeyPackets?.()??!0}async getNumberOfChannels(){return this._backing.getNumberOfChannels()}get numberOfChannels(){return V(this._backing.getNumberOfChannels(),`numberOfChannels`,`getNumberOfChannels`)}async getSampleRate(){return this._backing.getSampleRate()}get sampleRate(){return V(this._backing.getSampleRate(),`sampleRate`,`getSampleRate`)}async getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return await this._backing.getMetadataCodecParameterString?.()??(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let e=await this._backing.getDecoderConfig();if(!e)return!1;let t=await this._backing.getCodec();return D(t!==null),kf.some(n=>n.supports(t,e))||e.codec.startsWith(`pcm-`)?!0:typeof AudioDecoder>`u`?!1:(await AudioDecoder.isConfigSupported(e)).supported===!0}catch(e){return console.error(`Error during decodability check:`,e),!1}}async determinePacketType(e){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);return await this.getCodec()===null?null:`key`}},cp=e=>e??1/0,lp=e=>-(e??-1/0),up=e=>-e,dp=e=>{if(typeof e!=`object`||!e)throw TypeError(`query must be an object.`);if(e.filter!==void 0&&typeof e.filter!=`function`)throw TypeError(`query.filter, when provided, must be a function.`);if(e.sortBy!==void 0&&typeof e.sortBy!=`function`)throw TypeError(`query.sortBy, when provided, must be a function.`);return{filter:e.filter?t=>{let n=e=>{if(typeof e!=`boolean`)throw TypeError(`query.filter must return or resolve to a boolean.`);return e},r=e.filter(t);return r instanceof Promise?r.then(n):n(r)}:void 0,sortBy:e.sortBy?t=>{let n=e=>{if(typeof e!=`number`&&(!Array.isArray(e)||!e.every(e=>typeof e==`number`)))throw TypeError(`query.sortBy must return or resolve to a number or an array of numbers.`);return e},r=e.sortBy(t);return r instanceof Promise?r.then(n):n(r)}:void 0}},fp=(e,t)=>({filter:e?.filter||t?.filter?n=>{let r=e?.filter?.(n)??!0,i=e=>e===!1?!1:t?.filter?.(n)??!0;return r instanceof Promise?r.then(i):i(r)}:void 0,sortBy:e?.sortBy||t?.sortBy?n=>{let r=e?.sortBy?.(n)??[],i=t?.sortBy?.(n)??[],a=(e,t)=>[...Array.isArray(e)?e:[e],...Array.isArray(t)?t:[t]];return r instanceof Promise||i instanceof Promise?Promise.all([r,i]).then(([e,t])=>a(e,t)):a(r,i)}:void 0}),pp=async(e,t)=>{let n=e;if(t?.filter){let r=e.map(e=>t.filter(e));if(r.some(e=>e instanceof Promise)){let t=await Promise.all(r);n=e.filter((e,n)=>t[n])}else n=e.filter((e,t)=>r[t])}if(!t?.sortBy)return n;let r=n.map(e=>t.sortBy(e)),i=r.some(e=>e instanceof Promise)?await Promise.all(r):r;return n.map((e,t)=>({track:e,sortValue:i[t]})).sort((e,t)=>{let n=Array.isArray(e.sortValue)?e.sortValue:[e.sortValue],r=Array.isArray(t.sortValue)?t.sortValue:[t.sortValue],i=Math.max(n.length,r.length);for(let e=0;e<i;e++){let t=n[e]??0,i=r[e]??0;if(t!==i)return t-i}return 0}).map(e=>e.track)}})),hp,gp,_p,vp,yp,bp,xp=n((()=>{nd(),mp(),F(),Bp(),mu(),Zr(),hp=1,gp=2,_p=null,typeof FinalizationRegistry<`u`&&(_p=new FinalizationRegistry(e=>{for(let t of e)t.freed||t.free()})),vp=class e extends gi{get disposed(){return this._disposed}constructor(t){if(super(),this._demuxerPromise=null,this._format=null,this._trackBackingsCache=null,this._backingToTrack=new Map,this._disposed=!1,this._nextSourceCacheAge=0,this._sourceRefs=[],this._sourceCache=[],this._sourceCachePromises=[],this._onFormatDetermined=null,!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!Array.isArray(t.formats)||t.formats.some(e=>!(e instanceof ku)))throw TypeError(`options.formats must be an array of InputFormat.`);if(!(t.source instanceof Zl||t.source instanceof Ql))throw TypeError(`options.source must be a Source or SourceRef.`);if(t.source instanceof Zl&&t.source._disposed)throw TypeError(`options.source must not be a disposed Source.`);if(t.initInput!==void 0&&!(t.initInput instanceof e))throw TypeError(`options.initInput, when provided, must be an Input.`);t.formatOptions!==void 0&&td(t.formatOptions,`formatOptions`),this._formats=t.formats,this._initInput=t.initInput??null,this._formatOptions=t.formatOptions??{},t.source instanceof Zl?this._rootRef=t.source.ref():this._rootRef=t.source,this._sourceRefs.push(this._rootRef),_p?.register(this,this._sourceRefs,this)}get _rootSource(){return this._rootRef.source}async _getSourceUncached(e){D(this._rootSource instanceof $l);let t=await this._rootSource._resolveRequest(e);return this._emit(`source`,{source:t.source,request:e,isRoot:e.isRoot}),t}_getSourceCached(e,t=hp){let n=this._sourceCache.find(n=>n.cacheGroup===t&&eu(n.request,e));if(n)return n.age++,Promise.resolve(n.sourceRef.source.ref());let r=this._sourceCachePromises.find(n=>n.cacheGroup===t&&eu(n.request,e));if(r)return r.promise.then(e=>e.sourceRef.source.ref());let i=(async()=>{let n=await this._getSourceUncached(e);if(ei(this._sourceCache,e=>e.cacheGroup===t&&e.sourceRef.source._refCount===1)>=4){let e=ti(this._sourceCache,e=>e.cacheGroup===t&&e.sourceRef.source._refCount===1?e.age:1/0);D(e!==-1);let n=this._sourceCache[e];this._sourceCache.splice(e,1),n.sourceRef.free(),cr(this._sourceRefs,n.sourceRef)}this._sourceRefs.push(n);let r=this._sourceCachePromises.findIndex(t=>t.request===e);return D(r!==-1),this._sourceCachePromises.splice(r,1),{request:e,sourceRef:n,age:this._nextSourceCacheAge++,cacheGroup:t}})();return this._sourceCachePromises.push({request:e,cacheGroup:t,promise:i}),i.then(e=>{let t=e.sourceRef.source.ref();return this._sourceCache.push(e),t})}_getDemuxer(){return this._demuxerPromise??=(async()=>{this._reader=new Sp(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 yp})()}get source(){return this._rootSource}async getFormat(){return await this._getDemuxer(),D(this._format),this._format}async canRead(){try{return await this._getDemuxer(),!0}catch(e){if(e instanceof yp)return!1;throw e}}async getFirstTimestamp(e){e??=await this.getTracks();let t=e.filter(e=>e!==null);if(t.length===0)return 0;let n=await Promise.all(t.map(e=>e.getFirstTimestamp()));return Math.min(...n)}async computeDuration(e,t){e??=await this.getTracks();let n=e.filter(e=>e!==null);if(n.length===0)return 0;let r=await Promise.all(n.map(e=>e.computeDuration(t)));return Math.max(...r)}async getDurationFromMetadata(e,t){e??=await this.getTracks();let n=e.filter(e=>e!==null),r=(await Promise.all(n.map(e=>e.getDurationFromMetadata(t)))).filter(e=>e!==null);return r.length===0?null:Math.max(...r)}async getTracks(e){return e&&=dp(e),pp((await this._getTrackBackings()).map(e=>this._wrapBackingAsTrack(e)),e)}async getVideoTracks(e){return e&&=dp(e),pp((await this.getTracks()).filter(e=>e.isVideoTrack()),e)}async getAudioTracks(e){return e&&=dp(e),pp((await this.getTracks()).filter(e=>e.isAudioTrack()),e)}async getPrimaryVideoTrack(e){e&&=dp(e);let t=fp(e,{sortBy:async e=>[up((await e.getDisposition()).default),up(await e.hasPairableAudioTrack()),up(!await e.hasOnlyKeyPackets()),lp(await e.getBitrate())]});return(await this.getVideoTracks(t))[0]??null}async getPrimaryAudioTrack(e){e&&=dp(e);let t=await this.getPrimaryVideoTrack(),n=fp(e,{sortBy:async e=>[up(!t||e.canBePairedWith(t)),up((await e.getDisposition()).default),lp(await e.getBitrate())]});return(await this.getAudioTracks(n))[0]??null}async _getTrackBackings(){let e=await this._getDemuxer();return this._trackBackingsCache??=await e.getTrackBackings()}_wrapBackingAsTrack(e){let t=this._backingToTrack.get(e);if(t)return t;let n=e.getType()===`video`?new op(this,e):new sp(this,e);return this._backingToTrack.set(e,n),n}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,_p?.unregister(this),this._demuxerPromise?.then(e=>e.dispose())}}[Symbol.dispose](){this.dispose()}},yp=class extends Error{constructor(e=`Input has an unsupported or unrecognizable format.`){super(e),this.name=`UnsupportedInputFormatError`}},bp=class extends Error{constructor(e=`Input has been disposed.`){super(e),this.name=`InputDisposedError`}}})),Sp,Cp,wp,H,U,Tp,Ep,Dp,Op,kp,W,Ap,jp,Mp,Np,Pp,Fp,Ip,Lp,Rp,G,zp,Bp=n((()=>{xp(),F(),mu(),Sp=class{constructor(e){this.source=e}get fileSize(){let e=this.source._getFileSize();if(e===void 0)throw Error(`Reading file size too early; read required first.`);return e}get fileSizeNonStrict(){return this.source._getFileSize()??null}requestSlice(e,t){if(this.source._disposed)throw new bp;if(e<0||this.fileSizeNonStrict!==null&&e+t>this.fileSizeNonStrict)return null;if(t===0){let t=new Uint8Array;return new Cp(t,j(t),0,e,e)}let n=e+t,r=this.source._read(e,n,Yl,Xl);return r instanceof Promise?r.then(t=>t?new Cp(t.bytes,t.view,t.offset,e,n):null):r?new Cp(r.bytes,r.view,r.offset,e,n):null}requestSliceRange(e,t,n){if(this.source._disposed)throw new bp;if(e<0)return null;if(this.fileSizeNonStrict!==null)return this.requestSlice(e,br(this.fileSizeNonStrict-e,t,n));{let r=this.requestSlice(e,n),i=r=>r||(D(this.fileSizeNonStrict!==null),this.requestSlice(e,br(this.fileSizeNonStrict-e,t,n)));return r instanceof Promise?r.then(i):i(r)}}requestEntireFile(){if(this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let e=1024;return(async()=>{let t=[],n=0;for(;;){if(t.length===1&&this.fileSizeNonStrict!==null)return this.requestSlice(0,this.fileSizeNonStrict);let r=t.length*e,i=this.requestSliceRange(r,0,e);if(i instanceof Promise&&(i=await i),!i)break;t.push(H(i,i.length)),n+=i.length}let r=new Uint8Array(n),i=0;for(let e of t)r.set(e,i),i+=e.length;return new Cp(r,j(r),0,0,n)})()}},Cp=class e{constructor(e,t,n,r,i){this.bytes=e,this.view=t,this.offset=n,this.start=r,this.end=i,this.bufferPos=r-n}static tempFromBytes(t){return new e(t,j(t),0,0,t.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(e){this.bufferPos=e-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(e){this.bufferPos+=e}slice(t,n=this.end-t){if(t<this.start||t+n>this.end)throw RangeError(`Slicing outside of original slice.`);return new e(this.bytes,this.view,this.offset,t,t+n)}},wp=(e,t)=>{if(e.filePos<e.start||e.filePos+t>e.end)throw RangeError(`Tried reading [${e.filePos}, ${e.filePos+t}), but slice is [${e.start}, ${e.end}). This is likely an internal error, please report it alongside the file that caused it.`)},H=(e,t)=>{wp(e,t);let n=e.bytes.subarray(e.bufferPos,e.bufferPos+t);return e.bufferPos+=t,n},U=e=>(wp(e,1),e.view.getUint8(e.bufferPos++)),Tp=(e,t)=>{wp(e,2);let n=e.view.getUint16(e.bufferPos,t);return e.bufferPos+=2,n},Ep=e=>{wp(e,2);let t=e.view.getUint16(e.bufferPos,!1);return e.bufferPos+=2,t},Dp=e=>{wp(e,3);let t=mr(e.view,e.bufferPos,!1);return e.bufferPos+=3,t},Op=e=>{wp(e,2);let t=e.view.getInt16(e.bufferPos,!1);return e.bufferPos+=2,t},kp=(e,t)=>{wp(e,4);let n=e.view.getUint32(e.bufferPos,t);return e.bufferPos+=4,n},W=e=>{wp(e,4);let t=e.view.getUint32(e.bufferPos,!1);return e.bufferPos+=4,t},Ap=e=>{wp(e,4);let t=e.view.getUint32(e.bufferPos,!0);return e.bufferPos+=4,t},jp=e=>{wp(e,4);let t=e.view.getInt32(e.bufferPos,!1);return e.bufferPos+=4,t},Mp=e=>{wp(e,4);let t=e.view.getInt32(e.bufferPos,!0);return e.bufferPos+=4,t},Np=(e,t)=>{let n,r;return t?(n=kp(e,!0),r=kp(e,!0)):(r=kp(e,!1),n=kp(e,!1)),r*4294967296+n},Pp=e=>{let t=W(e),n=W(e);return t*4294967296+n},Fp=e=>{let t=jp(e),n=W(e);return t*4294967296+n},Ip=e=>{let t=Ap(e);return Mp(e)*4294967296+t},Lp=e=>{wp(e,4);let t=e.view.getFloat32(e.bufferPos,!1);return e.bufferPos+=4,t},Rp=e=>{wp(e,8);let t=e.view.getFloat64(e.bufferPos,!1);return e.bufferPos+=8,t},G=(e,t)=>{wp(e,t);let n=``;for(let r=0;r<t;r++)n+=String.fromCharCode(e.bytes[e.bufferPos++]);return n},zp=(e,t,n)=>Wn.decode(H(e,t)).split(`
|
|
32
|
+
`).map(e=>e.trim()).filter(e=>e.length>0&&!n?.ignore?.(e))})),Vp,Hp,Up,Wp,Gp,Kp,qp,Jp,Yp,Xp,Zp,Qp=n((()=>{Da(),F(),Bp(),(function(e){e[e.Unsynchronisation=128]=`Unsynchronisation`,e[e.ExtendedHeader=64]=`ExtendedHeader`,e[e.ExperimentalIndicator=32]=`ExperimentalIndicator`,e[e.Footer=16]=`Footer`})(Vp||={}),(function(e){e[e.ISO_8859_1=0]=`ISO_8859_1`,e[e.UTF_16_WITH_BOM=1]=`UTF_16_WITH_BOM`,e[e.UTF_16_BE_NO_BOM=2]=`UTF_16_BE_NO_BOM`,e[e.UTF_8=3]=`UTF_8`})(Hp||={}),Up=128,Wp=10,Gp=`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`.split(`.`),Kp=(e,t)=>{let n=e.filePos;t.raw??={},t.raw.TAG??=H(e,Up-3),e.filePos=n;let r=qp(e,30);r&&(t.title??=r);let i=qp(e,30);i&&(t.artist??=i);let a=qp(e,30);a&&(t.album??=a);let o=qp(e,4),s=Number.parseInt(o,10);Number.isInteger(s)&&s>0&&(t.date??=new Date(s,0,1));let c=H(e,30),l;if(c[28]===0&&c[29]!==0){let n=c[29];n>0&&(t.trackNumber??=n),e.skip(-30),l=qp(e,28),e.skip(2)}else e.skip(-30),l=qp(e,30);l&&(t.comment??=l);let u=U(e);u<Gp.length&&(t.genre??=Gp[u])},qp=(e,t)=>{let n=H(e,t),r=Wr(n.indexOf(0),n.length),i=n.subarray(0,r),a=``;for(let e=0;e<i.length;e++)a+=String.fromCharCode(i[e]);return a.trimEnd()},Jp=e=>{let t=e.filePos,n=G(e,3),r=U(e),i=U(e),a=U(e),o=W(e);return n!==`ID3`||r===255||i===255||o&2155905152?(e.filePos=t,null):{majorVersion:r,revision:i,flags:a,size:Ta(o)}},Yp=(e,t,n)=>{if(![2,3,4].includes(t.majorVersion)){console.warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);return}let r=new Xp(t,H(e,t.size));if(t.flags&Vp.Footer&&r.removeFooter(),t.flags&Vp.Unsynchronisation&&t.majorVersion===3&&r.ununsynchronizeAll(),t.flags&Vp.ExtendedHeader){let e=r.readU32();t.majorVersion===3?r.pos+=e:r.pos+=e-4}for(;r.pos<=r.bytes.length-r.frameHeaderSize();){let e=r.readId3V2Frame();if(!e)break;let i=r.pos,a=r.pos+e.size,o=!1,s=!1,c=!1;if(t.majorVersion===3?(o=!!(e.flags&64),s=!!(e.flags&128)):t.majorVersion===4&&(o=!!(e.flags&4),s=!!(e.flags&8),c=!!(e.flags&2)||!!(t.flags&Vp.Unsynchronisation)),o){console.warn(`Skipping encrypted ID3v2 frame ${e.id}`),r.pos=a;continue}if(s){console.warn(`Skipping compressed ID3v2 frame ${e.id}`),r.pos=a;continue}if(c&&r.ununsynchronizeRegion(r.pos,a),n.raw??={},e.id===`TXXX`){let e=n.raw.TXXX??={},t=r.readId3V2TextEncoding(),i=r.readId3V2Text(t,a),o=r.readId3V2Text(t,a);e[i]??=o}else e.id[0]===`T`?n.raw[e.id]??=r.readId3V2EncodingAndText(a):n.raw[e.id]??=r.readBytes(e.size);switch(r.pos=i,e.id){case`TIT2`:case`TT2`:n.title??=r.readId3V2EncodingAndText(a);break;case`TIT3`:case`TT3`:n.description??=r.readId3V2EncodingAndText(a);break;case`TPE1`:case`TP1`:n.artist??=r.readId3V2EncodingAndText(a);break;case`TALB`:case`TAL`:n.album??=r.readId3V2EncodingAndText(a);break;case`TPE2`:case`TP2`:n.albumArtist??=r.readId3V2EncodingAndText(a);break;case`TRCK`:case`TRK`:{let e=r.readId3V2EncodingAndText(a).split(`/`),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(n.trackNumber??=t),i&&Number.isInteger(i)&&i>0&&(n.tracksTotal??=i)}break;case`TPOS`:case`TPA`:{let e=r.readId3V2EncodingAndText(a).split(`/`),t=Number.parseInt(e[0],10),i=e[1]&&Number.parseInt(e[1],10);Number.isInteger(t)&&t>0&&(n.discNumber??=t),i&&Number.isInteger(i)&&i>0&&(n.discsTotal??=i)}break;case`TCON`:case`TCO`:{let e=r.readId3V2EncodingAndText(a),t=/^\((\d+)\)/.exec(e);if(t){let e=Number.parseInt(t[1]);if(Gp[e]!==void 0){n.genre??=Gp[e];break}}if(t=/^\d+$/.exec(e),t){let e=Number.parseInt(t[0]);if(Gp[e]!==void 0){n.genre??=Gp[e];break}}n.genre??=e}break;case`TDRC`:case`TDAT`:{let e=r.readId3V2EncodingAndText(a),t=new Date(e);Number.isNaN(t.getTime())||(n.date??=t)}break;case`TYER`:case`TYE`:{let e=r.readId3V2EncodingAndText(a),t=Number.parseInt(e,10);Number.isInteger(t)&&(n.date??=new Date(t,0,1))}break;case`USLT`:case`ULT`:{let e=r.readU8();r.pos+=3,r.readId3V2Text(e,a),n.lyrics??=r.readId3V2Text(e,a)}break;case`COMM`:case`COM`:{let e=r.readU8();r.pos+=3,r.readId3V2Text(e,a),n.comment??=r.readId3V2Text(e,a)}break;case`APIC`:case`PIC`:{let e=r.readId3V2TextEncoding(),i;if(t.majorVersion===2){let e=r.readAscii(3);i=e===`PNG`?`image/png`:e===`JPG`?`image/jpeg`:`image/*`}else i=r.readId3V2Text(e,a);let o=r.readU8(),s=r.readId3V2Text(e,a).trimEnd(),c=a-r.pos;if(c>=0){let e=r.readBytes(c);n.images||=[],n.images.push({data:e,mimeType:i,kind:o===3?`coverFront`:o===4?`coverBack`:`unknown`,description:s})}}break;default:r.pos+=e.size;break}r.pos=a}},Xp=class{constructor(e,t){this.header=e,this.bytes=t,this.pos=0,this.view=new DataView(t.buffer,t.byteOffset,t.byteLength)}frameHeaderSize(){return this.header.majorVersion===2?6:10}ununsynchronizeAll(){let e=[];for(let t=0;t<this.bytes.length;t++){let n=this.bytes[t];e.push(n),n===255&&t!==this.bytes.length-1&&this.bytes[t]===0&&t++}this.bytes=new Uint8Array(e),this.view=new DataView(this.bytes.buffer)}ununsynchronizeRegion(e,t){let n=[];for(let r=e;r<t;r++){let e=this.bytes[r];n.push(e),e===255&&r!==t-1&&this.bytes[r+1]===0&&r++}let r=this.bytes.subarray(0,e),i=this.bytes.subarray(t);this.bytes=new Uint8Array(r.length+n.length+i.length),this.bytes.set(r,0),this.bytes.set(n,r.length),this.bytes.set(i,r.length+n.length),this.view=new DataView(this.bytes.buffer)}removeFooter(){this.bytes=this.bytes.subarray(0,this.bytes.length-Wp),this.view=new DataView(this.bytes.buffer)}readBytes(e){let t=this.bytes.subarray(this.pos,this.pos+e);return this.pos+=e,t}readU8(){let e=this.view.getUint8(this.pos);return this.pos+=1,e}readU16(){let e=this.view.getUint16(this.pos,!1);return this.pos+=2,e}readU24(){let e=this.view.getUint16(this.pos,!1),t=this.view.getUint8(this.pos+2);return this.pos+=3,e*256+t}readU32(){let e=this.view.getUint32(this.pos,!1);return this.pos+=4,e}readAscii(e){let t=``;for(let n=0;n<e;n++)t+=String.fromCharCode(this.view.getUint8(this.pos+n));return this.pos+=e,t}readId3V2Frame(){if(this.header.majorVersion===2){let e=this.readAscii(3);return e===`\0\0\0`?null:{id:e,size:this.readU24(),flags:0}}else{let e=this.readAscii(4);if(e===`\0\0\0\0`)return null;let t=this.readU32(),n=this.header.majorVersion===4?Ta(t):t,r=this.readU16(),i=this.pos,a=e=>{let t=this.pos+e;if(t>this.bytes.length)return!1;if(t<=this.bytes.length-this.frameHeaderSize()){this.pos+=e;let t=this.readAscii(4);if(t!==`\0\0\0\0`&&!/[0-9A-Z]{4}/.test(t))return!1}return!0};if(!a(n)){let e=this.header.majorVersion===4?t:Ta(t);a(e)&&(n=e)}return this.pos=i,{id:e,size:n,flags:r}}}readId3V2TextEncoding(){let e=this.readU8();if(e>3)throw Error(`Unsupported text encoding: ${e}`);return e}readId3V2Text(e,t){let n=this.pos,r=this.readBytes(t-this.pos);switch(e){case Hp.ISO_8859_1:{let e=``;for(let t=0;t<r.length;t++){let i=r[t];if(i===0){this.pos=n+t+1;break}e+=String.fromCharCode(i)}return e}case Hp.UTF_16_WITH_BOM:if(r[0]===255&&r[1]===254){let e=new TextDecoder(`utf-16le`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}else if(r[0]===254&&r[1]===255){let e=new TextDecoder(`utf-16be`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(2,t))}else{let e=Wr(r.findIndex(e=>e===0),r.length);return this.pos=n+Math.min(e+1,r.length),Wn.decode(r.subarray(0,e))}case Hp.UTF_16_BE_NO_BOM:{let e=new TextDecoder(`utf-16be`),t=Wr(r.findIndex((e,t)=>e===0&&r[t+1]===0&&t%2==0),r.length);return this.pos=n+Math.min(t+2,r.length),e.decode(r.subarray(0,t))}case Hp.UTF_8:{let e=Wr(r.findIndex(e=>e===0),r.length);return this.pos=n+Math.min(e+1,r.length),Wn.decode(r.subarray(0,e))}}}readId3V2EncodingAndText(e){if(this.pos>=e)return``;let t=this.readId3V2TextEncoding();return this.readId3V2Text(t,e)}},Zp=class{constructor(e){this.helper=new Uint8Array(8),this.helperView=j(this.helper),this.writer=e}writeId3V2Tag(e){let t=this.writer.getPos();this.writeAscii(`ID3`),this.writeU8(4),this.writeU8(0),this.writeU8(0),this.writeSynchsafeU32(0);let n=this.writer.getPos(),r=new Set;for(let{key:t,value:n}of Kr(e))switch(t){case`title`:this.writeId3V2TextFrame(`TIT2`,n),r.add(`TIT2`);break;case`description`:this.writeId3V2TextFrame(`TIT3`,n),r.add(`TIT3`);break;case`artist`:this.writeId3V2TextFrame(`TPE1`,n),r.add(`TPE1`);break;case`album`:this.writeId3V2TextFrame(`TALB`,n),r.add(`TALB`);break;case`albumArtist`:this.writeId3V2TextFrame(`TPE2`,n),r.add(`TPE2`);break;case`trackNumber`:{let t=e.tracksTotal===void 0?n.toString():`${n}/${e.tracksTotal}`;this.writeId3V2TextFrame(`TRCK`,t),r.add(`TRCK`)}break;case`discNumber`:{let t=e.discsTotal===void 0?n.toString():`${n}/${e.discsTotal}`;this.writeId3V2TextFrame(`TPOS`,t),r.add(`TPOS`)}break;case`genre`:this.writeId3V2TextFrame(`TCON`,n),r.add(`TCON`);break;case`date`:this.writeId3V2TextFrame(`TDRC`,n.toISOString().slice(0,10)),r.add(`TDRC`);break;case`lyrics`:this.writeId3V2LyricsFrame(n),r.add(`USLT`);break;case`comment`:this.writeId3V2CommentFrame(n),r.add(`COMM`);break;case`images`:{let e={coverFront:3,coverBack:4,unknown:0};for(let t of n){let n=e[t.kind]??0,r=t.description??``;this.writeId3V2ApicFrame(t.mimeType,n,r,t.data)}}break;case`tracksTotal`:case`discsTotal`:break;case`raw`:break;default:pr(t)}if(e.raw)for(let t in e.raw){let n=e.raw[t];if(n==null||t.length!==4||r.has(t))continue;let i;if(typeof n==`string`)if(Gn(n)){i=new Uint8Array(n.length+2),i[0]=Hp.ISO_8859_1;for(let e=0;e<n.length;e++)i[e+1]=n.charCodeAt(e)}else{let e=M.encode(n);i=new Uint8Array(e.byteLength+2),i[0]=Hp.UTF_8,i.set(e,1)}else if(n instanceof Uint8Array)i=n;else if(t===`TXXX`&&yi(n)){for(let e in n){let t=n[e],r=Gn(e)&&Gn(t),i=r?null:M.encode(e),a=r?null:M.encode(t),o=r?e.length:i.byteLength,s=r?t.length:a.byteLength,c=1+o+1+s+1;this.writeAscii(`TXXX`),this.writeSynchsafeU32(c),this.writeU16(0),this.writeU8(r?Hp.ISO_8859_1:Hp.UTF_8),r?(this.writeIsoString(e),this.writeIsoString(t)):(this.writer.write(i),this.writeU8(0),this.writer.write(a),this.writeU8(0))}continue}else continue;this.writeAscii(t),this.writeSynchsafeU32(i.byteLength),this.writeU16(0),this.writer.write(i)}let i=this.writer.getPos(),a=i-n;return this.writer.seek(t+6),this.writeSynchsafeU32(a),this.writer.seek(i),a+10}writeU8(e){this.helper[0]=e,this.writer.write(this.helper.subarray(0,1))}writeU16(e){this.helperView.setUint16(0,e,!1),this.writer.write(this.helper.subarray(0,2))}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeAscii(e){for(let t=0;t<e.length;t++)this.helper[t]=e.charCodeAt(t);this.writer.write(this.helper.subarray(0,e.length))}writeSynchsafeU32(e){this.writeU32(wa(e))}writeIsoString(e){let t=new Uint8Array(e.length+1);for(let n=0;n<e.length;n++)t[n]=e.charCodeAt(n);this.writer.write(t)}writeUtf8String(e){let t=M.encode(e);this.writer.write(t),this.writeU8(0)}writeId3V2TextFrame(e,t){let n=Gn(t),r=1+(n?t.length:M.encode(t).byteLength)+1;this.writeAscii(e),this.writeSynchsafeU32(r),this.writeU16(0),this.writeU8(n?Hp.ISO_8859_1:Hp.UTF_8),n?this.writeIsoString(t):this.writeUtf8String(t)}writeId3V2LyricsFrame(e){let t=Gn(e),n=5+e.length+1;this.writeAscii(`USLT`),this.writeSynchsafeU32(n),this.writeU16(0),this.writeU8(t?Hp.ISO_8859_1:Hp.UTF_8),this.writeAscii(`und`),t?(this.writeIsoString(``),this.writeIsoString(e)):(this.writeUtf8String(``),this.writeUtf8String(e))}writeId3V2CommentFrame(e){let t=Gn(e),n=5+(t?e.length:M.encode(e).byteLength)+1;this.writeAscii(`COMM`),this.writeSynchsafeU32(n),this.writeU16(0),this.writeU8(t?Hp.ISO_8859_1:Hp.UTF_8),this.writeU8(117),this.writeU8(110),this.writeU8(100),t?(this.writeIsoString(``),this.writeIsoString(e)):(this.writeUtf8String(``),this.writeUtf8String(e))}writeId3V2ApicFrame(e,t,n,r){let i=Gn(e)&&Gn(n),a=i?n.length:M.encode(n).byteLength,o=1+e.length+1+1+a+1+r.byteLength;this.writeAscii(`APIC`),this.writeSynchsafeU32(o),this.writeU16(0),this.writeU8(i?Hp.ISO_8859_1:Hp.UTF_8),i?this.writeIsoString(e):this.writeUtf8String(e),this.writeU8(t),i?this.writeIsoString(n):this.writeUtf8String(n),this.writer.write(r)}}})),$p,em=n((()=>{F(),$p=class{constructor(e){this.mutex=new tr,this.trackTimestampInfo=new WeakMap,this.output=e}onTrackClose(e){}validateTimestamp(e,t,n){if(t<0)throw Error(`Timestamps must be non-negative (got ${t}s).`);let r=this.trackTimestampInfo.get(e);if(r){if(n&&(r.maxTimestampBeforeLastKeyPacket=r.maxTimestamp),r.maxTimestampBeforeLastKeyPacket!==null&&t<r.maxTimestampBeforeLastKeyPacket)throw Error(`Timestamps cannot be smaller than the largest timestamp of the previous GOP (a GOP begins with a key packet and ends right before the next key packet). Got ${t}s, but largest timestamp is ${r.maxTimestampBeforeLastKeyPacket}s.`);r.maxTimestamp=Math.max(r.maxTimestamp,t)}else{if(!n)throw Error(`First packet must be a key packet.`);r={maxTimestamp:t,maxTimestampBeforeLastKeyPacket:null},this.trackTimestampInfo.set(e,r)}}}})),tm,nm=n((()=>{Pi(),ma(),Qp(),Ei(),F(),em(),tm=class extends $p{constructor(e,t){super(e),this.header=null,this.headerBitstream=null,this.inputIsAdts=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),Ci(this.output._metadataTags)||new Zp(this.writer).writeId3V2Tag(this.output._metadataTags),e()}async getMimeType(){return`audio/aac`}async addEncodedVideoPacket(){throw Error(`ADTS does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.validateTimestamp(e,t.timestamp,t.type===`key`),this.inputIsAdts===null){fa(n);let e=n?.decoderConfig?.description;if(this.inputIsAdts=!e,!this.inputIsAdts){let t=Mi(Ai(A(e)));this.header=t.header,this.headerBitstream=t.bitstream}}if(this.inputIsAdts){let e=this.writer.getPos();this.writer.write(t.data),this.format._options.onFrame&&this.format._options.onFrame(t.data,e)}else{D(this.header);let e=t.data.byteLength+this.header.byteLength;Ni(this.headerBitstream,e);let n=this.writer.getPos();if(this.writer.write(this.header),this.writer.write(t.data),this.format._options.onFrame){let r=new Uint8Array(e);r.set(this.header,0),r.set(t.data,this.header.byteLength),this.format._options.onFrame(r,n)}}await this.writer.flush()}finally{r()}}async addSubtitleCue(){throw Error(`ADTS does not support subtitles.`)}async finalize(){(await this.mutex.acquire())()}}})),rm,im,am,om,sm=n((()=>{ma(),No(),F(),em(),Bp(),Ei(),rl(),Di(),rm=new Uint8Array([102,76,97,67]),im=38,am=34,om=class extends $p{constructor(e,t){super(e),this.metadataWritten=!1,this.blockSizes=[],this.frameSizes=[],this.sampleRate=null,this.channels=null,this.bitsPerSample=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!!this.format._options.appendOnly),this.writer.write(rm),e()}writeHeader({bitsPerSample:e,minimumBlockSize:t,maximumBlockSize:n,minimumFrameSize:r,maximumFrameSize:i,sampleRate:a,channels:o,totalSamples:s}){D(this.writer.getPos()===4);let c=!Ci(this.output._metadataTags),l=new I(new Uint8Array(4));l.writeBits(1,Number(!c)),l.writeBits(7,yo.STREAMINFO),l.writeBits(24,am),this.writer.write(l.bytes);let u=new I(new Uint8Array(18));if(u.writeBits(16,t),u.writeBits(16,n),u.writeBits(24,r),u.writeBits(24,i),u.writeBits(20,a),u.writeBits(3,o-1),u.writeBits(5,e-1),s>=2**32)throw Error(`This muxer only supports writing up to 2 ** 32 samples`);u.writeBits(4,0),u.writeBits(32,s),this.writer.write(u.bytes),this.writer.write(new Uint8Array(16))}writePictureBlock(e){let t=32+e.mimeType.length+(e.description?.length??0)+e.data.length,n=new Uint8Array(t),r=0,i=j(n);i.setUint32(r,e.kind===`coverFront`?3:e.kind===`coverBack`?4:0),r+=4,i.setUint32(r,e.mimeType.length),r+=4,n.set(M.encode(e.mimeType),8),r+=e.mimeType.length,i.setUint32(r,e.description?.length??0),r+=4,n.set(M.encode(e.description??``),r),r+=e.description?.length??0,r+=16,i.setUint32(r,e.data.length),r+=4,n.set(e.data,r),r+=e.data.length,D(r===t);let a=new I(new Uint8Array(4));a.writeBits(1,0),a.writeBits(7,yo.PICTURE),a.writeBits(24,t),this.writer.write(a.bytes),this.writer.write(n)}writeVorbisCommentAndPictureBlock(){if(this.format._options.appendOnly||this.writer.seek(im+rm.byteLength),Ci(this.output._metadataTags)){this.metadataWritten=!0;return}let e=this.output._metadataTags.images??[];for(let t of e)this.writePictureBlock(t);let t=xo(new Uint8Array,this.output._metadataTags,!1),n=new I(new Uint8Array(4));n.writeBits(1,1),n.writeBits(7,yo.VORBIS_COMMENT),n.writeBits(24,t.length),this.writer.write(n.bytes),this.writer.write(t),this.metadataWritten=!0}async getMimeType(){return`audio/flac`}async addEncodedVideoPacket(){throw Error(`FLAC does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.validateTimestamp(e,t.timestamp,t.type===`key`),this.sampleRate===null){fa(n),D(n),D(n.decoderConfig),D(n.decoderConfig.description),this.sampleRate=n.decoderConfig.sampleRate,this.channels=n.decoderConfig.numberOfChannels;let e=new I(A(n.decoderConfig.description));e.skipBits(167),this.bitsPerSample=e.readBits(5)+1,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 r=Cp.tempFromBytes(t.data);r.skip(2);let i=Zc(new I(H(r,2)).readBits(4));if(i===null)throw Error(`Invalid FLAC frame: Invalid block size.`);$c(r);let a=el(r,i);this.format._options.appendOnly||(this.blockSizes.push(a),this.frameSizes.push(t.data.length));let o=this.writer.getPos();this.writer.write(t.data),this.format._options.onFrame&&this.format._options.onFrame(t.data,o),await this.writer.flush()}finally{r()}}addSubtitleCue(){throw Error(`FLAC does not support subtitles.`)}async finalize(){let e=await this.mutex.acquire();if(!this.format._options.appendOnly){let e=1/0,t=0,n=1/0,r=0,i=0;for(let a=0;a<this.blockSizes.length;a++)n=Math.min(n,this.frameSizes[a]),r=Math.max(r,this.frameSizes[a]),t=Math.max(t,this.blockSizes[a]),i+=this.blockSizes[a],a!==this.blockSizes.length-1&&(e=Math.min(e,this.blockSizes[a]));D(this.sampleRate!==null),D(this.channels!==null),D(this.bitsPerSample!==null),this.writer.seek(4),this.writeHeader({minimumBlockSize:e,maximumBlockSize:t,minimumFrameSize:n,maximumFrameSize:r,sampleRate:this.sampleRate,channels:this.channels,bitsPerSample:this.bitsPerSample,totalSamples:i})}e()}}})),cm,lm,um,dm,fm,pm,mm,hm=n((()=>{cm=/(?:(.+?)\n)?((?:\d{2}:)?\d{2}:\d{2}.\d{3})\s+-->\s+((?:\d{2}:)?\d{2}:\d{2}.\d{3})/g,lm=/^WEBVTT(.|\n)*?\n{2}/,um=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,dm=class{constructor(e){this.preambleText=null,this.preambleEmitted=!1,this.options=e}parse(e){e=e.replaceAll(`\r
|
|
33
33
|
`,`
|
|
34
34
|
`).replaceAll(`\r`,`
|
|
35
35
|
`),cm.lastIndex=0;let t;if(!this.preambleText){if(!lm.test(e))throw Error(`WebVTT preamble incorrect.`);t=cm.exec(e);let n=e.slice(0,t?.index??e.length).trimEnd();if(!n)throw Error(`No WebVTT preamble provided.`);this.preambleText=n,t&&(e=e.slice(t.index),cm.lastIndex=0)}for(;t=cm.exec(e);){let n=e.slice(0,t.index),r=t[1],i=t.index+t[0].length,a=e.indexOf(`
|
|
36
36
|
`,i)+1,o=e.slice(i,a).trim(),s=e.indexOf(`
|
|
37
37
|
|
|
38
|
-
`,i);s===-1&&(s=e.length);let c=pm(t[2]),l=pm(t[3])-c,u=e.slice(a,s).trim();e=e.slice(s).trimStart(),cm.lastIndex=0;let d={timestamp:c/1e3,duration:l/1e3,text:u,identifier:r,settings:o,notes:n},f={};this.preambleEmitted||=(f.config={description:this.preambleText},!0),this.options.output(d,f)}}},fm=/(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})/,pm=e=>{let t=fm.exec(e);if(!t)throw Error(`Expected match.`);return 3600*1e3*Number(t[1]||`0`)+60*1e3*Number(t[2])+1e3*Number(t[3])+Number(t[4])},mm=e=>{let t=Math.floor(e/(3600*1e3)),n=Math.floor(e%(3600*1e3)/(60*1e3)),r=Math.floor(e%(60*1e3)/1e3),i=e%1e3;return t.toString().padStart(2,`0`)+`:`+n.toString().padStart(2,`0`)+`:`+r.toString().padStart(2,`0`)+`.`+i.toString().padStart(3,`0`)}})),gm,K,_m,vm,q,ym,bm,J,xm,Sm,Cm,wm,Tm,Em,Dm,Y,Om,km,Am,X,Z,jm,Mm,Nm,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm,Gm,Km,qm,Jm,Ym,Xm,Zm,Qm,$m,eh,th,nh,rh,ih,ah,oh,sh,ch,lh,uh,dh,fh,ph,mh,hh,gh,_h,vh,yh,bh,xh,Sh,Ch,wh,Th,Eh,Dh,Oh,kh,Ah,jh,Mh,Nh,Ph,Fh,Ih,Lh,Rh,zh,Bh,Vh,Hh,Uh,Wh,Gh,Kh,qh,Jh,Yh,Xh,Zh,Qh,$h,eg,tg,ng,rg,ig,ag=n((()=>{F(),ha(),hm(),Eg(),Po(),Ei(),Di(),gm=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,Math.floor(e/2**32),!1),this.helperView.setUint32(4,e,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(e){for(let t=0;t<e.length;t++)this.helperView.setUint8(t%8,e.charCodeAt(t)),t%8==7&&this.writer.write(this.helper);e.length%8!=0&&this.writer.write(this.helper.subarray(0,e.length%8))}writeBox(e){if(this.offsets.set(e,this.writer.getPos()),e.contents&&!e.children)this.writeBoxHeader(e,e.size??e.contents.byteLength+8),this.writer.write(e.contents);else{let t=this.writer.getPos();if(this.writeBoxHeader(e,0),e.contents&&this.writer.write(e.contents),e.children)for(let t of e.children)t&&this.writeBox(t);let n=this.writer.getPos(),r=e.size??n-t;this.writer.seek(t),this.writeBoxHeader(e,r),this.writer.seek(n)}}writeBoxHeader(e,t){this.writeU32(e.largeSize?1:t),this.writeAscii(e.type),e.largeSize&&this.writeU64(t)}measureBoxHeader(e){return 8+(e.largeSize?8:0)}patchBox(e){let t=this.offsets.get(e);D(t!==void 0);let n=this.writer.getPos();this.writer.seek(t),this.writeBox(e),this.writer.seek(n)}measureBox(e){if(e.contents&&!e.children)return this.measureBoxHeader(e)+e.contents.byteLength;{let t=this.measureBoxHeader(e);if(e.contents&&(t+=e.contents.byteLength),e.children)for(let n of e.children)n&&(t+=this.measureBox(n));return t}}},K=new Uint8Array(8),_m=new DataView(K.buffer),vm=e=>[(e%256+256)%256],q=e=>(_m.setUint16(0,e,!1),[K[0],K[1]]),ym=e=>(_m.setInt16(0,e,!1),[K[0],K[1]]),bm=e=>(_m.setUint32(0,e,!1),[K[1],K[2],K[3]]),J=e=>(_m.setUint32(0,e,!1),[K[0],K[1],K[2],K[3]]),xm=e=>(_m.setInt32(0,e,!1),[K[0],K[1],K[2],K[3]]),Sm=e=>(_m.setUint32(0,Math.floor(e/2**32),!1),_m.setUint32(4,e,!1),[K[0],K[1],K[2],K[3],K[4],K[5],K[6],K[7]]),Cm=e=>(_m.setInt32(0,Math.floor(e/2**32),!1),_m.setUint32(4,e,!1),[K[0],K[1],K[2],K[3],K[4],K[5],K[6],K[7]]),wm=e=>(_m.setInt16(0,2**8*e,!1),[K[0],K[1]]),Tm=e=>(_m.setInt32(0,2**16*e,!1),[K[0],K[1],K[2],K[3]]),Em=e=>(_m.setInt32(0,2**30*e,!1),[K[0],K[1],K[2],K[3]]),Dm=(e,t)=>{let n=[],r=e;do{let e=r&127;r>>=7,n.length>0&&(e|=128),n.push(e),t!==void 0&&t--}while(r>0||t);return n.reverse()},Y=(e,t=!1)=>{let n=Array(e.length).fill(null).map((t,n)=>e.charCodeAt(n));return t&&n.push(0),n},Om=e=>{let t=e*(Math.PI/180),n=Math.round(Math.cos(t)),r=Math.round(Math.sin(t));return[n,r,0,-r,n,0,0,0,1]},km=Om(0),Am=e=>[Tm(e[0]),Tm(e[1]),Em(e[2]),Tm(e[3]),Tm(e[4]),Em(e[5]),Tm(e[6]),Tm(e[7]),Em(e[8])],X=(e,t,n)=>({type:e,contents:t&&new Uint8Array(t.flat(10)),children:n}),Z=(e,t,n,r,i)=>X(e,[vm(t),bm(n),r??[]],i),jm=e=>e.isQuickTime?X(`ftyp`,[Y(`qt `),J(512),Y(`qt `)]):e.fragmented?e.cmaf?X(`ftyp`,[Y(`iso5`),J(512),Y(`iso5`),Y(`iso6`),Y(`mp41`),Y(`cmfc`),Y(`dash`)]):X(`ftyp`,[Y(`iso5`),J(512),Y(`iso5`),Y(`iso6`),Y(`mp41`)]):X(`ftyp`,[Y(`isom`),J(512),Y(`isom`),e.holdsAvc?Y(`avc1`):[],Y(`mp41`)]),Mm=()=>X(`styp`,[Y(`iso5`),J(0),Y(`iso5`),Y(`iso6`),Y(`mp41`),Y(`cmfc`),Y(`dash`)]),Nm=(e,t)=>{let n=e.maxWrittenEndTimestamp-e.minWrittenTimestamp;return Number.isFinite(n)||(n=0),Z(`sidx`,1,0,[J(1),J(Sg),Sm(Q(e.minWrittenTimestamp,Sg)),Sm(0),q(0),q(1),J(t&2147483647),J(Q(n,Sg)),J(0)])},Pm=e=>({type:`mdat`,largeSize:e}),Fm=e=>({type:`free`,size:e}),Im=e=>X(`moov`,void 0,[Lm(e.creationTime,e.trackDatas),...e.trackDatas.map(t=>zm(t,e.creationTime)),e.isFragmented?kh(e.trackDatas):null,Wh(e)]),Lm=(e,t)=>{let n=Math.max(0,...t.map(e=>Q(Rm(e),Sg)+Q(e.startTimestampOffset??0,Sg))),r=Math.max(0,...t.map(e=>e.track.id))+1,i=!Vn(e)||!Vn(n),a=i?Sm:J;return Z(`mvhd`,+i,0,[a(e),a(e),J(Sg),a(n),Tm(1),wm(1),Array(10).fill(0),Am(km),Array(24).fill(0),J(r)])},Rm=e=>{if(e.samples.length===0)return 0;let t=1/0,n=-1/0;for(let r=0;r<e.samples.length;r++){let i=e.samples[r];i.timestamp<t&&(t=i.timestamp),i.timestamp+i.duration>n&&(n=i.timestamp+i.duration)}return t===1/0?0:n-t},zm=(e,t)=>{let n=wg(e),r=e.startTimestampOffset!==null&&e.startTimestampOffset>0;return X(`trak`,void 0,[Bm(e,t),r?Vm(e,e.startTimestampOffset):null,Hm(e,t),n.name===void 0?null:X(`udta`,void 0,[X(`name`,[...M.encode(n.name)])])])},Bm=(e,t)=>{let n=Q(Rm(e),Sg)+Q(e.startTimestampOffset??0,Sg),r=!Vn(t)||!Vn(n),i=r?Sm:J,a;if(e.type===`video`){let t=e.track.metadata.rotation;a=Om(t??0)}else a=km;let o=2;return e.track.metadata.disposition?.default!==!1&&(o|=1),Z(`tkhd`,+r,o,[i(t),i(t),J(e.track.id),J(0),i(n),Array(8).fill(0),q(0),q(e.track.id),wm(e.type===`audio`?1:0),q(0),Am(a),Tm(e.type===`video`?e.info.width:0),Tm(e.type===`video`?e.info.height:0)])},Vm=(e,t)=>{let n=Q(t,Sg),r=Q(Rm(e),Sg),i=!Vn(n)||!Vn(r),a=i?Sm:J,o=i?Cm:xm;return X(`edts`,void 0,[Z(`elst`,i?1:0,0,[J(2),a(n),o(-1),Tm(1),a(r),o(0),Tm(1)])])},Hm=(e,t)=>X(`mdia`,void 0,[Um(e,t),Km(!0,Wm[e.type],Gm[e.type]),qm(e)]),Um=(e,t)=>{let n=Q(Rm(e),e.timescale),r=!Vn(t)||!Vn(n),i=r?Sm:J;return Z(`mdhd`,+r,0,[i(t),i(t),J(e.timescale),i(n),q(ig(e.track.metadata.languageCode??xr)),q(0)])},Wm={video:`vide`,audio:`soun`,subtitle:`text`},Gm={video:`MediabunnyVideoHandler`,audio:`MediabunnySoundHandler`,subtitle:`MediabunnyTextHandler`},Km=(e,t,n,r=`\0\0\0\0`)=>Z(`hdlr`,0,0,[e?Y(`mhlr`):J(0),Y(t),Y(r),J(0),J(0),Y(n,!0)]),qm=e=>X(`minf`,void 0,[Zm[e.type](),Qm(),th(e)]),Jm=()=>Z(`vmhd`,0,1,[q(0),q(0),q(0),q(0)]),Ym=()=>Z(`smhd`,0,0,[q(0),q(0)]),Xm=()=>Z(`nmhd`,0,0),Zm={video:Jm,audio:Ym,subtitle:Xm},Qm=()=>X(`dinf`,void 0,[$m()]),$m=()=>Z(`dref`,0,0,[J(1)],[eh()]),eh=()=>Z(`url `,0,1),th=e=>{let t=e.compositionTimeOffsetTable.length>1||e.compositionTimeOffsetTable.some(e=>e.sampleCompositionTimeOffset!==0);return X(`stbl`,void 0,[nh(e),Sh(e),t?Dh(e):null,t?Oh(e):null,wh(e),Th(e),Eh(e),Ch(e)])},nh=e=>{let t;if(e.type===`video`)t=rh(Qh(e.track.source._codec,e.info.decoderConfig.codec),e);else if(e.type===`audio`){let n=eg(e.track.source._codec,e.muxer.isQuickTime);D(n),t=uh(n,e)}else e.type===`subtitle`&&(t=bh(ng[e.track.source._codec],e));return D(t),Z(`stsd`,0,0,[J(1)],[t])},rh=(e,t)=>X(e,[[,,,,,,].fill(0),q(1),q(0),q(0),Array(12).fill(0),q(t.info.width),q(t.info.height),J(4718592),J(4718592),J(0),q(1),Array(32).fill(0),q(24),ym(65535)],[$h[t.track.source._codec](t),ih(t),$n(t.info.decoderConfig.colorSpace)?ah(t):null]),ih=e=>e.info.pixelAspectRatio.num===e.info.pixelAspectRatio.den?null:X(`pasp`,[J(e.info.pixelAspectRatio.num),J(e.info.pixelAspectRatio.den)]),ah=e=>X(`colr`,[Y(`nclx`),q(qn[e.info.decoderConfig.colorSpace.primaries]),q(Yn[e.info.decoderConfig.colorSpace.transfer]),q(Zn[e.info.decoderConfig.colorSpace.matrix]),vm((e.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),oh=e=>e.info.decoderConfig&&X(`avcC`,[...A(e.info.decoderConfig.description)]),sh=e=>e.info.decoderConfig&&X(`hvcC`,[...A(e.info.decoderConfig.description)]),ch=e=>{if(!e.info.decoderConfig)return null;let t=e.info.decoderConfig,n=t.codec.split(`.`),r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=n[4]?Number(n[4]):1,s=n[8]?Number(n[8]):Number(t.colorSpace?.fullRange??0),c=(a<<4)+(o<<1)+s,l=n[5]?Number(n[5]):t.colorSpace?.primaries?qn[t.colorSpace.primaries]:2,u=n[6]?Number(n[6]):t.colorSpace?.transfer?Yn[t.colorSpace.transfer]:2,d=n[7]?Number(n[7]):t.colorSpace?.matrix?Zn[t.colorSpace.matrix]:2;return Z(`vpcC`,1,0,[vm(r),vm(i),vm(c),vm(l),vm(u),vm(d),q(0)])},lh=e=>X(`av1C`,Ji(e.info.decoderConfig.codec)),uh=(e,t)=>{let n=0,r,i=16,a=Ii.includes(t.track.source._codec);if(a){let e=t.track.source._codec,{sampleSize:r}=na(e);i=8*r,i>16&&(n=1)}if(t.muxer.isQuickTime&&(n=1),n===0)r=[[,,,,,,].fill(0),q(1),q(n),q(0),J(0),q(t.info.numberOfChannels),q(i),q(0),q(0),q(t.info.sampleRate<2**16?t.info.sampleRate:0),q(0)];else{let e=a?0:-2;r=[[,,,,,,].fill(0),q(1),q(n),q(0),J(0),q(t.info.numberOfChannels),q(Math.min(i,16)),ym(e),q(0),q(t.info.sampleRate<2**16?t.info.sampleRate:0),q(0),a?[J(1),J(i/8),J(t.info.numberOfChannels*i/8)]:[J(0),J(0),J(0)],J(2)]}return X(e,r,[tg(t.track.source._codec,t.muxer.isQuickTime)?.(t)??null])},dh=e=>{let t;switch(e.track.source._codec){case`aac`:t=64;break;case`mp3`:t=107;break;case`vorbis`:t=221;break;default:throw Error(`Unhandled audio codec: ${e.track.source._codec}`)}let n=[...vm(t),...vm(21),...bm(0),...J(0),...J(0)];if(e.info.decoderConfig.description){let t=A(e.info.decoderConfig.description);n=[...n,...vm(5),...Dm(t.byteLength),...t]}return n=[...q(1),...vm(0),...vm(4),...Dm(n.length),...n,...vm(6),...vm(1),...vm(2)],n=[...vm(3),...Dm(n.length),...n],Z(`esds`,0,0,n)},fh=e=>X(`wave`,void 0,[ph(e),mh(e),X(`\0\0\0\0`)]),ph=e=>X(`frma`,[Y(eg(e.track.source._codec,e.muxer.isQuickTime))]),mh=e=>{let{littleEndian:t}=na(e.track.source._codec);return X(`enda`,[q(+t)])},hh=e=>{let t=e.info.numberOfChannels,n=3840,r=e.info.sampleRate,i=0,a=0,o=new Uint8Array,s=e.info.decoderConfig?.description;if(s){D(s.byteLength>=18);let e=ho(A(s));t=e.outputChannelCount,n=e.preSkip,r=e.inputSampleRate,i=e.outputGain,a=e.channelMappingFamily,e.channelMappingTable&&(o=e.channelMappingTable)}return X(`dOps`,[vm(0),vm(t),q(n),J(r),ym(i),vm(a),...o])},gh=e=>{let t=e.info.decoderConfig?.description;return D(t),Z(`dfLa`,0,0,[...A(t).subarray(4)])},_h=e=>{let{littleEndian:t,sampleSize:n}=na(e.track.source._codec);return Z(`pcmC`,0,0,[vm(+t),vm(8*n)])},vh=e=>{let t=wo(e.info.firstPacket.data);if(!t)throw 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 n=new Uint8Array(3),r=new I(n);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),X(`dac3`,[...n])},yh=e=>{let t=Ao(e.info.firstPacket.data);if(!t)throw 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 n=16;for(let e of t.substreams)n+=23,e.numDepSub>0?n+=9:n+=1;let r=Math.ceil(n/8),i=new Uint8Array(r),a=new I(i);a.writeBits(13,t.dataRate),a.writeBits(3,t.substreams.length-1);for(let e of t.substreams)a.writeBits(2,e.fscod),a.writeBits(5,e.bsid),a.writeBits(1,0),a.writeBits(1,0),a.writeBits(3,e.bsmod),a.writeBits(3,e.acmod),a.writeBits(1,e.lfeon),a.writeBits(3,0),a.writeBits(4,e.numDepSub),e.numDepSub>0?a.writeBits(9,e.chanLoc):a.writeBits(1,0);return X(`dec3`,[...i])},bh=(e,t)=>X(e,[[,,,,,,].fill(0),q(1)],[rg[t.track.source._codec](t)]),xh=e=>X(`vttC`,[...M.encode(e.info.config.description)]),Sh=e=>Z(`stts`,0,0,[J(e.timeToSampleTable.length),e.timeToSampleTable.map(e=>[J(e.sampleCount),J(e.sampleDelta)])]),Ch=e=>{if(e.samples.every(e=>e.type===`key`))return null;let t=[...e.samples.entries()].filter(([,e])=>e.type===`key`);return Z(`stss`,0,0,[J(t.length),t.map(([e])=>J(e+1))])},wh=e=>Z(`stsc`,0,0,[J(e.compactlyCodedChunkTable.length),e.compactlyCodedChunkTable.map(e=>[J(e.firstChunk),J(e.samplesPerChunk),J(1)])]),Th=e=>{if(e.type===`audio`&&e.info.requiresPcmTransformation){let{sampleSize:t}=na(e.track.source._codec);return Z(`stsz`,0,0,[J(t*e.info.numberOfChannels),J(e.samples.reduce((t,n)=>t+Q(n.duration,e.timescale),0))])}return Z(`stsz`,0,0,[J(0),J(e.samples.length),e.samples.map(e=>J(e.size))])},Eh=e=>e.finalizedChunks.length>0&&O(e.finalizedChunks).offset>=2**32?Z(`co64`,0,0,[J(e.finalizedChunks.length),e.finalizedChunks.map(e=>Sm(e.offset))]):Z(`stco`,0,0,[J(e.finalizedChunks.length),e.finalizedChunks.map(e=>J(e.offset))]),Dh=e=>Z(`ctts`,1,0,[J(e.compositionTimeOffsetTable.length),e.compositionTimeOffsetTable.map(e=>[J(e.sampleCount),xm(e.sampleCompositionTimeOffset)])]),Oh=e=>{let t=1/0,n=-1/0,r=1/0,i=-1/0;D(e.compositionTimeOffsetTable.length>0),D(e.samples.length>0);for(let r=0;r<e.compositionTimeOffsetTable.length;r++){let i=e.compositionTimeOffsetTable[r];t=Math.min(t,i.sampleCompositionTimeOffset),n=Math.max(n,i.sampleCompositionTimeOffset)}for(let t=0;t<e.samples.length;t++){let n=e.samples[t];r=Math.min(r,Q(n.timestamp,e.timescale)),i=Math.max(i,Q(n.timestamp+n.duration,e.timescale))}let a=Math.max(-t,0);return i>=2**31?null:Z(`cslg`,0,0,[xm(a),xm(t),xm(n),xm(r),xm(i)])},kh=e=>X(`mvex`,void 0,e.map(Ah)),Ah=e=>Z(`trex`,0,0,[J(e.track.id),J(1),J(0),J(0),J(0)]),jh=(e,t)=>X(`moof`,void 0,[Mh(e),...t.map(Ph)]),Mh=e=>Z(`mfhd`,0,0,[J(e)]),Nh=e=>{let t=0,n=0,r=e.type===`delta`;return n|=+r,r?t|=1:t|=2,t<<24|n<<16|0},Ph=e=>X(`traf`,void 0,[Fh(e),Ih(e),Lh(e)]),Fh=e=>{D(e.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;let n=e.currentChunk.samples[1]??e.currentChunk.samples[0],r={duration:n.timescaleUnitsToNextSample,size:n.size,flags:Nh(n)};return Z(`tfhd`,0,t,[J(e.track.id),J(r.duration),J(r.size),J(r.flags)])},Ih=e=>(D(e.currentChunk),Z(`tfdt`,1,0,[Sm(Q(e.currentChunk.startTimestamp,e.timescale))])),Lh=e=>{D(e.currentChunk);let t=e.currentChunk.samples.map(e=>e.timescaleUnitsToNextSample),n=e.currentChunk.samples.map(e=>e.size),r=e.currentChunk.samples.map(Nh),i=e.currentChunk.samples.map(t=>Q(t.timestamp-t.decodeTimestamp,e.timescale)),a=new Set(t),o=new Set(n),s=new Set(r),c=new Set(i),l=s.size===2&&r[0]!==r[1],u=a.size>1,d=o.size>1,f=!l&&s.size>1,p=c.size>1||[...c].some(e=>e!==0),m=0;return m|=1,m|=4*l,m|=256*u,m|=512*d,m|=1024*f,m|=2048*p,Z(`trun`,1,m,[J(e.currentChunk.samples.length),J(e.currentChunk.offset-e.currentChunk.moofOffset||0),l?J(r[0]):[],e.currentChunk.samples.map((e,a)=>[u?J(t[a]):[],d?J(n[a]):[],f?J(r[a]):[],p?xm(i[a]):[]])])},Rh=e=>X(`mfra`,void 0,[...e.map(zh),Bh()]),zh=(e,t)=>Z(`tfra`,1,0,[J(e.track.id),J(63),J(e.finalizedChunks.length),e.finalizedChunks.map(n=>[Sm(Q(n.samples[0].timestamp,e.timescale)),Sm(n.moofOffset),J(t+1),J(1),J(1)])]),Bh=()=>Z(`mfro`,0,0,[J(0)]),Vh=()=>X(`vtte`),Hh=(e,t,n,r,i)=>X(`vttc`,void 0,[i===null?null:X(`vsid`,[xm(i)]),n===null?null:X(`iden`,[...M.encode(n)]),t===null?null:X(`ctim`,[...M.encode(mm(t))]),r===null?null:X(`sttg`,[...M.encode(r)]),X(`payl`,[...M.encode(e)])]),Uh=e=>X(`vtta`,[...M.encode(e)]),Wh=e=>{let t=[],n=e.format._options.metadataFormat??`auto`,r=e.output._metadataTags;if(n===`mdir`||n===`auto`&&!e.isQuickTime){let e=Yh(r);e&&t.push(e)}else if(n===`mdta`){let e=Xh(r);e&&t.push(e)}else (n===`udta`||n===`auto`&&e.isQuickTime)&&Gh(t,e.output._metadataTags);return t.length===0?null:X(`udta`,void 0,t)},Gh=(e,t)=>{for(let{key:n,value:r}of Kr(t))switch(n){case`title`:e.push(Kh(`©nam`,r));break;case`description`:e.push(Kh(`©des`,r));break;case`artist`:e.push(Kh(`©ART`,r));break;case`album`:e.push(Kh(`©alb`,r));break;case`albumArtist`:e.push(Kh(`albr`,r));break;case`genre`:e.push(Kh(`©gen`,r));break;case`date`:e.push(Kh(`©day`,r.toISOString().slice(0,10)));break;case`comment`:e.push(Kh(`©cmt`,r));break;case`lyrics`:e.push(Kh(`©lyr`,r));break;case`raw`:break;case`discNumber`:case`discsTotal`:case`trackNumber`:case`tracksTotal`:case`images`:break;default:pr(n)}if(t.raw)for(let n in t.raw){let r=t.raw[n];r==null||n.length!==4||e.some(e=>e.type===n)||(typeof r==`string`?e.push(Kh(n,r)):r instanceof Uint8Array&&e.push(X(n,Array.from(r))))}},Kh=(e,t)=>{let n=M.encode(t);return X(e,[q(n.length),q(ig(`und`)),Array.from(n)])},qh={"image/jpeg":13,"image/png":14,"image/bmp":27},Jh=(e,t)=>{let n=[];for(let{key:r,value:i}of Kr(e))switch(r){case`title`:n.push({key:t?`title`:`©nam`,value:Zh(i)});break;case`description`:n.push({key:t?`description`:`©des`,value:Zh(i)});break;case`artist`:n.push({key:t?`artist`:`©ART`,value:Zh(i)});break;case`album`:n.push({key:t?`album`:`©alb`,value:Zh(i)});break;case`albumArtist`:n.push({key:t?`album_artist`:`aART`,value:Zh(i)});break;case`comment`:n.push({key:t?`comment`:`©cmt`,value:Zh(i)});break;case`genre`:n.push({key:t?`genre`:`©gen`,value:Zh(i)});break;case`lyrics`:n.push({key:t?`lyrics`:`©lyr`,value:Zh(i)});break;case`date`:n.push({key:t?`date`:`©day`,value:Zh(i.toISOString().slice(0,10))});break;case`images`:for(let e of i)e.kind===`coverFront`&&n.push({key:`covr`,value:X(`data`,[J(qh[e.mimeType]??0),J(0),Array.from(e.data)])});break;case`trackNumber`:if(t){let t=e.tracksTotal===void 0?i.toString():`${i}/${e.tracksTotal}`;n.push({key:`track`,value:Zh(t)})}else n.push({key:`trkn`,value:X(`data`,[J(0),J(0),q(0),q(i),q(e.tracksTotal??0),q(0)])});break;case`discNumber`:t||n.push({key:`disc`,value:X(`data`,[J(0),J(0),q(0),q(i),q(e.discsTotal??0),q(0)])});break;case`tracksTotal`:case`discsTotal`:break;case`raw`:break;default:pr(r)}if(e.raw)for(let r in e.raw){let i=e.raw[r];i==null||!t&&r.length!==4||n.some(e=>e.key===r)||(typeof i==`string`?n.push({key:r,value:Zh(i)}):i instanceof Uint8Array?n.push({key:r,value:X(`data`,[J(0),J(0),Array.from(i)])}):i instanceof bi&&n.push({key:r,value:X(`data`,[J(qh[i.mimeType]??0),J(0),Array.from(i.data)])}))}return n},Yh=e=>{let t=Jh(e,!1);return t.length===0?null:Z(`meta`,0,0,void 0,[Km(!1,`mdir`,``,`appl`),X(`ilst`,void 0,t.map(e=>X(e.key,void 0,[e.value])))])},Xh=e=>{let t=Jh(e,!0);return t.length===0?null:X(`meta`,void 0,[Km(!1,`mdta`,``),Z(`keys`,0,0,[J(t.length)],t.map(e=>X(`mdta`,[...M.encode(e.key)]))),X(`ilst`,void 0,t.map((e,t)=>X(String.fromCharCode(...J(t+1)),void 0,[e.value])))])},Zh=e=>X(`data`,[J(1),J(0),...M.encode(e)]),Qh=(e,t)=>{switch(e){case`avc`:return t.startsWith(`avc3`)?`avc3`:`avc1`;case`hevc`:return`hvc1`;case`vp8`:return`vp08`;case`vp9`:return`vp09`;case`av1`:return`av01`}},$h={avc:oh,hevc:sh,vp8:ch,vp9:ch,av1:lh},eg=(e,t)=>{switch(e){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(e){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(e){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`}},tg=(e,t)=>{switch(e){case`aac`:return dh;case`mp3`:return dh;case`opus`:return hh;case`vorbis`:return dh;case`flac`:return gh;case`ac3`:return vh;case`eac3`:return yh}if(t)switch(e){case`pcm-s24`:return fh;case`pcm-s24be`:return fh;case`pcm-s32`:return fh;case`pcm-s32be`:return fh;case`pcm-f32`:return fh;case`pcm-f32be`:return fh;case`pcm-f64`:return fh;case`pcm-f64be`:return fh}else switch(e){case`pcm-s16`:return _h;case`pcm-s16be`:return _h;case`pcm-s24`:return _h;case`pcm-s24be`:return _h;case`pcm-s32`:return _h;case`pcm-s32be`:return _h;case`pcm-f32`:return _h;case`pcm-f32be`:return _h;case`pcm-f64`:return _h;case`pcm-f64be`:return _h}return null},ng={webvtt:`wvtt`},rg={webvtt:xh},ig=e=>{D(e.length===3);let t=0;for(let n=0;n<3;n++)t<<=5,t+=e.charCodeAt(n)-96;return t}})),og,sg=n((()=>{F(),og=class{constructor(e,t){if(this.finalized=!1,this.started=!1,this.pos=0,this.trackedWrites=null,this.trackedStart=-1,this.trackedEnd=-1,e._writerAcquired)throw Error(`Can't have multiple Writers for the same Target.`);this.target=e,e._setMonotonicity(t),e._writerAcquired=!0}start(){D(!this.started),this.target._start(),this.started=!0}write(e){D(this.started&&!this.finalized),this.maybeTrackWrites(e),this.target._write(e,this.pos),this.pos+=e.byteLength}seek(e){this.pos=e}getPos(){return this.pos}async flush(){return D(this.started&&!this.finalized),this.target._flush()}async finalize(){D(this.started&&!this.finalized),await this.target._finalize(),this.finalized=!0}maybeTrackWrites(e){if(!this.trackedWrites)return;let t=this.getPos();if(t<this.trackedStart){if(t+e.byteLength<=this.trackedStart)return;e=e.subarray(this.trackedStart-t),t=0}let n=t+e.byteLength-this.trackedStart,r=this.trackedWrites.byteLength;for(;r<n;)r*=2;if(r!==this.trackedWrites.byteLength){let e=new Uint8Array(r);e.set(this.trackedWrites,0),this.trackedWrites=e}this.trackedWrites.set(e,t-this.trackedStart),this.trackedEnd=Math.max(this.trackedEnd,t+e.byteLength)}startTrackingWrites(){this.trackedWrites=new Uint8Array(2**10),this.trackedStart=this.getPos(),this.trackedEnd=this.trackedStart}stopTrackingWrites(){if(!this.trackedWrites)throw Error(`Internal error: Can't get tracked writes since nothing was tracked.`);let e={data:this.trackedWrites.subarray(0,this.trackedEnd-this.trackedStart),start:this.trackedStart,end:this.trackedEnd};return this.trackedWrites=null,e}}})),cg,lg,ug,dg,fg,pg,mg,hg,gg,_g,vg,yg,bg,xg=n((()=>{Jl(),F(),cg=ql===void 0?void 0:ql,lg=class extends gi{constructor(){super(...arguments),this._writerAcquired=!1,this._monotonicity=null,this.onwrite=null}_setMonotonicity(e){this._monotonicity!==!1&&(this._monotonicity=e)}_dispatchWrite(e,t){this.onwrite?.(e,t),this._emit(`write`,{start:e,end:t})}slice(e){if(!Number.isInteger(e)||e<0)throw TypeError(`offset must be a non-negative integer.`);return new yg(this,e)}},ug=2**16,dg=2**32,fg=class extends lg{constructor(e={}){if(super(),this.buffer=null,this._maxPos=0,!e||typeof e!=`object`)throw TypeError(`BufferTarget options, when provided, must be an object.`);if(e.onFinalize!==void 0&&typeof e.onFinalize!=`function`)throw TypeError(`options.onFinalize, when provided, must be a function.`);if(this._options=e,this._supportsResize=`resize`in new ArrayBuffer(0),this._supportsResize)try{this._buffer=new ArrayBuffer(ug,{maxByteLength:dg})}catch{this._buffer=new ArrayBuffer(ug),this._supportsResize=!1}else this._buffer=new ArrayBuffer(ug);this._bytes=new Uint8Array(this._buffer)}_ensureSize(e){let t=this._buffer.byteLength;for(;t<e;)t*=2;if(t!==this._buffer.byteLength){if(t>dg)throw Error(`ArrayBuffer exceeded maximum size of ${dg} bytes. Please consider using another target.`);if(this._supportsResize)this._buffer.resize(t);else{let e=new ArrayBuffer(t),n=new Uint8Array(e);n.set(this._bytes,0),this._buffer=e,this._bytes=n}}}_start(){}_write(e,t){this._ensureSize(t+e.byteLength),this._bytes.set(e,t),this._maxPos=Math.max(this._maxPos,t+e.byteLength),this._dispatchWrite(t,t+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,t){return this._bytes.slice(e,t)}},pg=2**24,mg=2,hg=class extends lg{constructor(e,t={}){if(super(),this._sections=[],this._lastWriteEnd=0,this._lastFlushEnd=0,this._streamWriter=null,this._writeError=null,this._chunks=[],!(e instanceof WritableStream))throw TypeError(`StreamTarget requires a WritableStream instance.`);if(t!=null&&typeof t!=`object`)throw TypeError(`StreamTarget options, when provided, must be an object.`);if(t.chunked!==void 0&&typeof t.chunked!=`boolean`)throw TypeError(`options.chunked, when provided, must be a boolean.`);if(t.chunkSize!==void 0&&(!Number.isInteger(t.chunkSize)||t.chunkSize<1024))throw TypeError(`options.chunkSize, when provided, must be an integer and not smaller than 1024.`);this._writable=e,this._options=t,this._chunked=t.chunked??!1,this._chunkSize=t.chunkSize??pg}_start(){this._streamWriter=this._writable.getWriter()}_write(e,t){if(t>this._lastWriteEnd){let e=t-this._lastWriteEnd;this._write(new Uint8Array(e),this._lastWriteEnd)}this._sections.push({data:e.slice(),start:t}),this._lastWriteEnd=Math.max(this._lastWriteEnd,t+e.byteLength),this._dispatchWrite(t,t+e.byteLength)}async _flush(){if(this._writeError!==null)throw this._writeError;if(D(this._streamWriter),this._sections.length===0)return;let e=[],t=[...this._sections].sort((e,t)=>e.start-t.start);e.push({start:t[0].start,size:t[0].data.byteLength});for(let n=1;n<t.length;n++){let r=e[e.length-1],i=t[n];i.start<=r.start+r.size?r.size=Math.max(r.size,i.start+i.data.byteLength-r.start):e.push({start:i.start,size:i.data.byteLength})}for(let t of e){t.data=new Uint8Array(t.size);for(let e of this._sections)t.start<=e.start&&e.start<t.start+t.size&&t.data.set(e.data,e.start-t.start);if(this._streamWriter.desiredSize!==null&&this._streamWriter.desiredSize<=0&&await this._streamWriter.ready,this._chunked)this._writeDataIntoChunks(t.data,t.start),this._tryToFlushChunks();else{if(this._monotonicity===!0&&t.start!==this._lastFlushEnd)throw Error(`Internal error: Monotonicity violation.`);this._streamWriter.write({type:`write`,data:t.data,position:t.start}).catch(e=>{this._writeError??=e}),this._lastFlushEnd=t.start+t.data.byteLength}}this._sections.length=0}_writeDataIntoChunks(e,t){let n=this._chunks.findIndex(e=>e.start<=t&&t<e.start+this._chunkSize);n===-1&&(n=this._createChunk(t));let r=this._chunks[n],i=t-r.start,a=e.subarray(0,Math.min(this._chunkSize-i,e.byteLength));r.data.set(a,i);let o={start:i,end:i+a.byteLength};if(this._insertSectionIntoChunk(r,o),r.written[0].start===0&&r.written[0].end===this._chunkSize&&(r.shouldFlush=!0),this._chunks.length>mg){for(let e=0;e<this._chunks.length-1;e++)this._chunks[e].shouldFlush=!0;this._tryToFlushChunks()}a.byteLength<e.byteLength&&this._writeDataIntoChunks(e.subarray(a.byteLength),t+a.byteLength)}_insertSectionIntoChunk(e,t){let n=0,r=e.written.length-1,i=-1;for(;n<=r;){let a=Math.floor(n+(r-n+1)/2);e.written[a].start<=t.start?(n=a+1,i=a):r=a-1}for(e.written.splice(i+1,0,t),(i===-1||e.written[i].end<t.start)&&i++;i<e.written.length-1&&e.written[i].end>=e.written[i+1].start;)e.written[i].end=Math.max(e.written[i].end,e.written[i+1].end),e.written.splice(i+1,1)}_createChunk(e){let t={start:Math.floor(e/this._chunkSize)*this._chunkSize,data:new Uint8Array(this._chunkSize),written:[],shouldFlush:!1};return this._chunks.push(t),this._chunks.sort((e,t)=>e.start-t.start),this._chunks.indexOf(t)}_tryToFlushChunks(e=!1){D(this._streamWriter);for(let t=0;t<this._chunks.length;t++){let n=this._chunks[t];if(!(!n.shouldFlush&&!e)){for(let e of n.written){let t=n.start+e.start;if(this._monotonicity===!0&&t!==this._lastFlushEnd)throw Error(`Internal error: Monotonicity violation.`);this._streamWriter.write({type:`write`,data:n.data.subarray(e.start,e.end),position:t}).catch(e=>{this._writeError??=e}),this._lastFlushEnd=n.start+e.end}this._chunks.splice(t--,1)}}}async _finalize(){if(this._chunked&&this._tryToFlushChunks(!0),this._writeError!==null)throw this._writeError;D(this._streamWriter),await this._streamWriter.ready,await this._streamWriter.close(),this._emit(`finalized`)}async _close(){return this._streamWriter?.close()}},gg=class extends lg{constructor(e){super(),this._writer=null,this._nextWritePos=0,this._writable=e,this._streamTarget=new hg(new WritableStream({start:()=>{this._writer=this._writable.getWriter()},write:e=>{if(this._monotonicity!==!0)throw Error(`AppendOnlyStreamTarget requires that data be written monotonically (always appended to the end). You must use a format that guarantees this behavior.`);return D(e.position===this._nextWritePos),this._nextWritePos+=e.data.byteLength,D(this._writer),this._writer.write(e.data)},close:()=>this._writer?.close()}))}_start(){this._streamTarget._start()}_write(e,t){this._streamTarget._write(e,t)}_flush(){return this._streamTarget._flush()}_finalize(){return this._streamTarget._finalize()}_close(){return this._streamTarget._close()}_setMonotonicity(e){super._setMonotonicity(e),this._streamTarget._setMonotonicity(e)}},_g=class extends lg{constructor(e,t={}){if(typeof e!=`string`)throw TypeError(`filePath must be a string.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!cg.fs)throw Error(`FilePathTarget is only available in server-side environments (Node.js, Bun, Deno).`);super(),this._fileHandle=null,this._streamTarget=new hg(new WritableStream({start:async()=>{this._fileHandle=await cg.fs.open(e,`w`)},write:async e=>{D(this._fileHandle),await this._fileHandle.write(e.data,0,e.data.byteLength,e.position)},close:async()=>{this._fileHandle&&=(await this._fileHandle.close(),null)}}),{chunked:!0,...t})}_start(){this._streamTarget._start()}_write(e,t){this._streamTarget._write(e,t),this._dispatchWrite(t,t+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)}},vg=class extends lg{_start(){}_write(e,t){this._dispatchWrite(t,t+e.byteLength)}async _flush(){}async _finalize(){this._emit(`finalized`)}async _close(){}},yg=class extends lg{constructor(e,t){super(),this._baseTarget=e,this._offset=t}_start(){}_write(e,t){this._baseTarget._write(e,this._offset+t),this._dispatchWrite(t,t+e.byteLength)}_flush(){return this._baseTarget._flush()}async _finalize(){this._emit(`finalized`)}async _close(){}_setMonotonicity(e){super._setMonotonicity(e),this._baseTarget._setMonotonicity(e)}},bg=class{constructor(e,t){if(this.rootPath=e,this.getTarget=t,typeof e!=`string`)throw TypeError(`rootPath must be a string.`);if(typeof t!=`function`)throw TypeError(`getTarget must be a function.`)}}})),Sg,Cg,wg,Q,Tg,Eg=n((()=>{ag(),em(),sg(),xg(),F(),tv(),hm(),Pi(),ha(),qc(),G(),Po(),Ho(),Zo(),Sg=57600,Cg=2082844800,wg=e=>{let t={},n=e.track;return n.metadata.name!==void 0&&(t.name=n.metadata.name),t},Q=(e,t,n=!0)=>{let r=e*t;return n?Math.round(r):r},Tg=class extends $p{constructor(e,t){super(e),this.writer=null,this.boxWriter=null,this.initWriter=null,this.initBoxWriter=null,this.auxTarget=new fg,this.auxWriter=new og(this.auxTarget,!1),this.auxBoxWriter=new gm(this.auxWriter),this.mdat=null,this.ftypSize=null,this.trackDatas=[],this.allTracksKnown=P(),this.creationTime=Math.floor(Date.now()/1e3)+Cg,this.finalizedChunks=[],this.nextFragmentNumber=1,this.maxWrittenTimestamp=-1/0,this.minWrittenTimestamp=1/0,this.maxWrittenEndTimestamp=-1/0,this.segmentHeaderSize=null,this.format=t,this.isQuickTime=t instanceof G_,this.isCmaf=t instanceof W_,this.minimumFragmentDuration=t._options.minimumFragmentDuration??(t instanceof W_?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(e=>this.format._options.fastStart===void 0?e instanceof fg:this.format._options.fastStart===`fragmented`),this.boxWriter=new gm(this.writer),this.fastStart=this.format._options.fastStart??(this.writer.target instanceof fg?`in-memory`:!1),this.isFragmented=this.fastStart===`fragmented`),this.isCmaf){if(!this.output._hasInitTarget())throw Error(`CMAF outputs require the initTarget field in OutputOptions to be set; the init segment will be written to it.`);let e=new og(await this.output._getInitTarget(),!0);e.start(),this.initWriter=e,this.initBoxWriter=new gm(e)}let t=this.output._tracks.some(e=>e.isVideoTrack()&&e.source._codec===`avc`);{let e=this.initBoxWriter??this.boxWriter;if(D(e),this.format._options.onFtyp&&e.writer.startTrackingWrites(),e.writeBox(jm({isQuickTime:this.isQuickTime,holdsAvc:t,fragmented:this.isFragmented,cmaf:this.isCmaf})),this.format._options.onFtyp){let{data:t,start:n}=e.writer.stopTrackingWrites();this.format._options.onFtyp(t,n)}this.ftypSize=e.writer.getPos(),this.isCmaf&&await this.initWriter.flush()}if(this.fastStart!==`in-memory`)if(this.fastStart===`reserve`){for(let e of this.output._tracks)if(e.metadata.maximumPacketCount===void 0)throw Error(`All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.`)}else this.isFragmented||(D(this.writer),D(this.boxWriter),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Pm(!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(t=>t.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(e=>e.type===`video`||e.type===`audio`?e.info.decoderConfig.codec:{webvtt:`wvtt`}[e.track.source._codec]);return zo({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(e=>e.type===`video`),hasAudio:this.trackDatas.some(e=>e.type===`audio`),codecStrings:e})}getVideoTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;da(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig};D(i.codedWidth!==void 0),D(i.codedHeight!==void 0);let a=!1;if(e.source._codec===`avc`&&!i.description){let e=Ua(t.data);if(!e)throw 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.`);i.description=Wa(e),a=!0}else if(e.source._codec===`hevc`&&!i.description){let e=$a(t.data);if(!e)throw 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.`);i.description=so(e),a=!0}let o=Pr(1/(e.metadata.frameRate??Sg),1e6).den,s=i.displayAspectWidth,c=i.displayAspectHeight,l=s===void 0||c===void 0?{num:1,den:1}:ri({num:s*i.codedHeight,den:c*i.codedWidth}),u={muxer:this,track:e,type:`video`,info:{width:i.codedWidth,height:i.codedHeight,pixelAspectRatio:l,decoderConfig:i,requiresAnnexBTransformation:a},timescale:o,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(u),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;pa(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig},a=!1;if(e.source._codec===`aac`&&!i.description){let e=Kc(wp.tempFromBytes(t.data));if(!e)throw 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 n=Oi[e.samplingFrequencyIndex],r=ki[e.channelConfiguration];if(n===void 0||r===void 0)throw Error(`Invalid ADTS frame header.`);i.description=ji({objectType:e.objectType,sampleRate:n,numberOfChannels:r}),a=!0}let o={muxer:this,track:e,type:`audio`,info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:i,requiresPcmTransformation:!this.isFragmented&&Ii.includes(e.source._codec),expectedNextPcmPacketTimestamp:null,requiresAdtsStripping:a,firstPacket:t},timescale:i.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(o),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}getSubtitleTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;ma(t),D(t),D(t.config);let r={muxer:this,track:e,type:`subtitle`,info:{config:t.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(r),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),r}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,t,n),i=t.data;if(r.info.requiresAnnexBTransformation){let e=[...Pa(i)].map(e=>i.subarray(e.offset,e.offset+e.length));if(e.length===0)throw 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.`);i=Va(e,4)}this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let a=this.createSampleForTrack(r,i,t.timestamp,t.duration,t.type);await this.registerSample(r,a)}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,t,n),i=t.data;if(r.info.requiresAdtsStripping){let e=Kc(wp.tempFromBytes(i));if(!e)throw Error(`Expected ADTS frame, didn't get one.`);let t=e.crcCheck===null?Wc:Gc;i=i.subarray(t)}this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let a=t.timestamp,o=t.duration;if(r.info.requiresPcmTransformation){let e=na(r.info.decoderConfig.codec).sampleSize*r.info.numberOfChannels;if(o=i.byteLength/e/r.info.sampleRate,r.info.expectedNextPcmPacketTimestamp!==null){let e=a-r.info.expectedNextPcmPacketTimestamp;if(e<.01)a=r.info.expectedNextPcmPacketTimestamp;else{let t=await this.padWithSilence(r,r.info.expectedNextPcmPacketTimestamp,e);a=r.info.expectedNextPcmPacketTimestamp+t}}r.info.expectedNextPcmPacketTimestamp=a+o}let s=this.createSampleForTrack(r,i,a,o,t.type);await this.registerSample(r,s)}finally{r()}}async padWithSilence(e,t,n){let r=Q(n,e.timescale);if(n=r/e.timescale,r>0){let{sampleSize:i,silentValue:a}=na(e.info.decoderConfig.codec),o=r*e.info.numberOfChannels,s=new Uint8Array(i*o).fill(a),c=this.createSampleForTrack(e,new Uint8Array(s.buffer),t,n,`key`);await this.registerSample(e,c)}return n}async addSubtitleCue(e,t,n){let r=await this.mutex.acquire();try{let r=this.getSubtitleTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,!0),e.source._codec===`webvtt`&&(r.cueQueue.push(t),await this.processWebVTTCues(r,t.timestamp))}finally{r()}}async processWebVTTCues(e,t){for(;e.cueQueue.length>0;){let n=new Set([]);for(let r of e.cueQueue)D(r.timestamp<=t),D(e.lastCueEndTimestamp<=r.timestamp+r.duration),n.add(Math.max(r.timestamp,e.lastCueEndTimestamp)),n.add(r.timestamp+r.duration);let r=[...n].sort((e,t)=>e-t),i=r[0],a=r[1]??i;if(t<a)break;if(e.lastCueEndTimestamp<i){this.auxWriter.seek(0);let t=Vh();this.auxBoxWriter.writeBox(t);let n=this.auxTarget._getSlice(0,this.auxWriter.getPos()),r=this.createSampleForTrack(e,n,e.lastCueEndTimestamp,i-e.lastCueEndTimestamp,`key`);await this.registerSample(e,r),e.lastCueEndTimestamp=i}this.auxWriter.seek(0);for(let t=0;t<e.cueQueue.length;t++){let n=e.cueQueue[t];if(n.timestamp>=a)break;um.lastIndex=0;let r=um.test(n.text),o=n.timestamp+n.duration,s=e.cueToSourceId.get(n);if(s===void 0&&a<o&&(s=e.nextSourceId++,e.cueToSourceId.set(n,s)),n.notes){let e=Uh(n.notes);this.auxBoxWriter.writeBox(e)}let c=Hh(n.text,r?i:null,n.identifier??null,n.settings??null,s??null);this.auxBoxWriter.writeBox(c),o===a&&e.cueQueue.splice(t--,1)}let o=this.auxTarget._getSlice(0,this.auxWriter.getPos()),s=this.createSampleForTrack(e,o,i,a-i,`key`);await this.registerSample(e,s),e.lastCueEndTimestamp=a}}createSampleForTrack(e,t,n,r,i){return{timestamp:n,decodeTimestamp:n,duration:r,data:t,size:t.byteLength,type:i,timescaleUnitsToNextSample:Q(r,e.timescale)}}processTimestamps(e,t){if(e.timestampProcessingQueue.length===0)return;if(e.type===`audio`&&e.info.requiresPcmTransformation){this.isFragmented||(e.startTimestampOffset??=e.timestampProcessingQueue[0].timestamp);let t=0;for(let n=0;n<e.timestampProcessingQueue.length;n++){let r=e.timestampProcessingQueue[n],i=Q(r.duration,e.timescale);t+=i}if(e.timeToSampleTable.length===0)e.timeToSampleTable.push({sampleCount:t,sampleDelta:1});else{let n=O(e.timeToSampleTable);n.sampleCount+=t}e.timestampProcessingQueue.length=0;return}let n=e.timestampProcessingQueue.map(e=>e.timestamp).sort((e,t)=>e-t);this.isFragmented||(e.startTimestampOffset??=n[0]);for(let t=0;t<e.timestampProcessingQueue.length;t++){let r=e.timestampProcessingQueue[t];r.decodeTimestamp=n[t];let i=Q(r.timestamp-r.decodeTimestamp,e.timescale),a=Q(r.duration,e.timescale);if(e.lastTimescaleUnits!==null){D(e.lastSample);let t=Q(r.decodeTimestamp,e.timescale,!1),n=Math.round(t-e.lastTimescaleUnits);if(D(n>=0),e.lastTimescaleUnits+=n,e.lastSample.timescaleUnitsToNextSample=n,!this.isFragmented){let t=O(e.timeToSampleTable);if(D(t),t.sampleCount===1){t.sampleDelta=n;let r=e.timeToSampleTable[e.timeToSampleTable.length-2];r&&r.sampleDelta===n&&(r.sampleCount++,e.timeToSampleTable.pop(),t=r)}else t.sampleDelta!==n&&(t.sampleCount--,e.timeToSampleTable.push(t={sampleCount:1,sampleDelta:n}));t.sampleDelta===a?t.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:a});let r=O(e.compositionTimeOffsetTable);D(r),r.sampleCompositionTimeOffset===i?r.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:i})}}else e.lastTimescaleUnits=Q(r.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:a}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:i}));e.lastSample=r}if(e.timestampProcessingQueue.length=0,D(e.lastSample),D(e.lastTimescaleUnits!==null),t!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){D(t.type===`key`);let n=Q(t.timestamp,e.timescale,!1),r=Math.round(n-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=r}}async registerSample(e,t){t.type===`key`&&this.processTimestamps(e,t),e.timestampProcessingQueue.push(t),this.isFragmented?(e.sampleQueue.push(t),await this.interleaveSamples()):this.fastStart===`reserve`?await this.registerSampleFastStartReserve(e,t):await this.addSampleToTrack(e,t)}async addSampleToTrack(e,t){if(!this.isFragmented&&(e.samples.push(t),this.fastStart===`reserve`)){let t=e.track.metadata.maximumPacketCount;if(D(t!==void 0),e.samples.length>t)throw Error(`Track #${e.track.id} has already reached the maximum packet count (${t}). 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,t.timestamp);let r=t.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){let i=this.trackDatas.every(n=>{if(e===n)return t.type===`key`;let r=n.sampleQueue[0];return r?r.type===`key`:n.closed});r>=this.minimumFragmentDuration&&i&&t.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=r>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:t.timestamp,samples:[],offset:null,moofOffset:null}),D(e.currentChunk),e.currentChunk.samples.push(t),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,t.timestamp),this.maxWrittenEndTimestamp=Math.max(this.maxWrittenEndTimestamp,t.timestamp+t.duration),this.minWrittenTimestamp=Math.min(this.minWrittenTimestamp,t.timestamp))}async finalizeCurrentChunk(e){if(D(!this.isFragmented),D(this.writer),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let t=e.currentChunk.samples.length;if(e.type===`audio`&&e.info.requiresPcmTransformation&&(t=e.currentChunk.samples.reduce((t,n)=>t+Q(n.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||O(e.compactlyCodedChunkTable).samplesPerChunk!==t)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:t}),this.fastStart===`in-memory`){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(let t of e.currentChunk.samples)D(t.data),this.writer.write(t.data),t.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(D(this.isFragmented),!(!e&&!this.allTracksAreKnown()))outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.sampleQueue.length===0&&!r.closed)break outer;r.sampleQueue.length>0&&r.sampleQueue[0].timestamp<n&&(t=r,n=r.sampleQueue[0].timestamp)}if(!t)break;let r=t.sampleQueue.shift();await this.addSampleToTrack(t,r)}}async finalizeFragment(e=!this.isCmaf){D(this.isFragmented);let t=this.nextFragmentNumber++;if(t===1){let e=this.initBoxWriter??this.boxWriter;D(e),this.format._options.onMoov&&e.writer.startTrackingWrites();let t=Im(this);if(e.writeBox(t),this.format._options.onMoov){let{data:t,start:n}=e.writer.stopTrackingWrites();this.format._options.onMoov(t,n)}this.isCmaf&&(D(this.initWriter),await this.initWriter.flush(),await this.initWriter.finalize(),this.writer=await this.output._getRootWriter(!0),this.boxWriter=new gm(this.writer),this.segmentHeaderSize=this.boxWriter.measureBox(Mm())+this.boxWriter.measureBox(Nm(this,0)),this.writer.seek(this.segmentHeaderSize))}D(this.writer),D(this.boxWriter);let n=this.trackDatas.filter(e=>e.currentChunk),r=jh(t,n),i=this.writer.getPos(),a=i+this.boxWriter.measureBox(r),o=a+Uo,s=1/0;for(let e of n){e.currentChunk.offset=o,e.currentChunk.moofOffset=i;for(let t of e.currentChunk.samples)o+=t.size;s=Math.min(s,e.currentChunk.startTimestamp)}let c=o-a,l=c>=2**32;if(l)for(let e of n)e.currentChunk.offset+=Wo-Uo;this.format._options.onMoof&&this.writer.startTrackingWrites();let u=jh(t,n);if(this.boxWriter.writeBox(u),this.format._options.onMoof){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoof(e,t,s)}D(this.writer.getPos()===a),this.format._options.onMdat&&this.writer.startTrackingWrites();let d=Pm(l);d.size=c,this.boxWriter.writeBox(d),this.writer.seek(a+(l?Wo:Uo));for(let e of n)for(let t of e.currentChunk.samples)this.writer.write(t.data),t.data=null;if(this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}for(let e of n)e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk),e.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,t){if(D(this.writer),D(this.boxWriter),this.allTracksAreKnown()){if(!this.mdat){let e=Im(this),t=this.boxWriter.measureBox(e)+this.computeSampleTableSizeUpperBound()+4096;D(this.ftypSize!==null),this.writer.seek(this.ftypSize+t),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Pm(!0),this.boxWriter.writeBox(this.mdat);for(let e of this.trackDatas){for(let t of e.sampleQueue)await this.addSampleToTrack(e,t);e.sampleQueue.length=0}}await this.addSampleToTrack(e,t)}else e.sampleQueue.push(t)}computeSampleTableSizeUpperBound(){D(this.fastStart===`reserve`);let e=0;for(let t of this.trackDatas){let n=t.track.metadata.maximumPacketCount;D(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 t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.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(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0,e.type===`subtitle`&&e.track.source._codec===`webvtt`&&await this.processWebVTTCues(e,1/0),this.processTimestamps(e);if(this.isFragmented)await this.interleaveSamples(!0),await this.finalizeFragment(!1);else for(let e of this.trackDatas){await this.finalizeCurrentChunk(e),D(e.startTimestampOffset!==null);for(let t=0;t<e.samples.length;t++){let n=e.samples[t];n.timestamp-=e.startTimestampOffset,n.decodeTimestamp-=e.startTimestampOffset}}if(D(this.writer),D(this.boxWriter),this.fastStart===`in-memory`){this.mdat=Pm(!1);let e;for(let t=0;t<2;t++){let t=Im(this),n=this.boxWriter.measureBox(t);e=this.boxWriter.measureBox(this.mdat);let r=this.writer.getPos()+n+e;for(let t of this.finalizedChunks){t.offset=r;for(let{data:n}of t.samples)D(n),r+=n.byteLength,e+=n.byteLength}if(r<2**32)break;e>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();let t=Im(this);if(this.boxWriter.writeBox(t),this.format._options.onMoov){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoov(e,t)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=e,this.boxWriter.writeBox(this.mdat);for(let e of this.finalizedChunks)for(let t of e.samples)D(t.data),this.writer.write(t.data),t.data=null;if(this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}}else if(this.isFragmented)if(this.isCmaf){let e=this.segmentHeaderSize===null?0:this.writer.getPos()-this.segmentHeaderSize;this.writer.seek(0),this.boxWriter.writeBox(Mm()),this.boxWriter.writeBox(Nm(this,e))}else{let e=this.writer.getPos(),t=Rh(this.trackDatas);this.boxWriter.writeBox(t);let n=this.writer.getPos()-e;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(n)}else{D(this.mdat);let e=this.boxWriter.offsets.get(this.mdat);D(e!==void 0);let t=this.writer.getPos()-e;if(this.mdat.size=t,this.mdat.largeSize=t>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}let n=Im(this);if(this.fastStart===`reserve`){D(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(n);let e=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(Fm(e))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(n);if(this.format._options.onMoov){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoov(e,t)}}e()}}})),Dg,Og,kg,Ag,jg,Mg,Ng,Pg=n((()=>{Di(),F(),rc(),ac(),tv(),hm(),Pi(),ha(),qc(),G(),em(),Po(),Ei(),Dg=-(2**15),Og=2**15-1,kg=`Mediabunny`,Ag=6,jg=5,Mg={video:1,audio:2,subtitle:17},Ng=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.allTracksKnown=P(),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=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!!this.format._options.appendOnly),this.ebmlWriter=new Vs(this.writer),this.writeEBMLHeader(),this.createSegmentInfo(),this.createCues(),await this.writer.flush(),e()}writeEBMLHeader(){this.format._options.onEbmlHeader&&this.writer.startTrackingWrites();let e={id:R.EBML,data:[{id:R.EBMLVersion,data:1},{id:R.EBMLReadVersion,data:1},{id:R.EBMLMaxIDLength,data:4},{id:R.EBMLMaxSizeLength,data:8},{id:R.DocType,data:this.format instanceof q_?`webm`:`matroska`},{id:R.DocTypeVersion,data:2},{id:R.DocTypeReadVersion,data:2}]};if(this.ebmlWriter.writeEBML(e),this.format._options.onEbmlHeader){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onEbmlHeader(e,t)}}maybeCreateSeekHead(e){if(this.format._options.appendOnly)return;let t=new Uint8Array([28,83,187,107]),n=new Uint8Array([21,73,169,102]),r=new Uint8Array([22,84,174,107]),i=new Uint8Array([25,65,164,105]),a=new Uint8Array([18,84,195,103]);this.seekHead={id:R.SeekHead,data:[{id:R.Seek,data:[{id:R.SeekID,data:t},{id:R.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.cues)-this.segmentDataOffset:0}]},{id:R.Seek,data:[{id:R.SeekID,data:n},{id:R.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.segmentInfo)-this.segmentDataOffset:0}]},{id:R.Seek,data:[{id:R.SeekID,data:r},{id:R.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.tracksElement)-this.segmentDataOffset:0}]},this.attachmentsElement?{id:R.Seek,data:[{id:R.SeekID,data:i},{id:R.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.attachmentsElement)-this.segmentDataOffset:0}]}:null,this.tagsElement?{id:R.Seek,data:[{id:R.SeekID,data:a},{id:R.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.tagsElement)-this.segmentDataOffset:0}]}:null]}}createSegmentInfo(){let e={id:R.Duration,data:new js(0)};this.segmentDuration=e,this.segmentInfo={id:R.Info,data:[{id:R.TimestampScale,data:1e6},{id:R.MuxingApp,data:kg},{id:R.WritingApp,data:kg},this.format._options.appendOnly?null:e]}}createTracks(){let e={id:R.Tracks,data:[]};this.tracksElement=e;for(let t of this.trackDatas){let n=nc[t.track.source._codec];D(n);let r=0;if(t.type===`audio`&&t.track.source._codec===`opus`){r=1e6*80;let e=t.info.decoderConfig.description;if(e){let t=ho(A(e));r=Math.round(1e9*(t.preSkip/ea))}}e.data.push({id:R.TrackEntry,data:[{id:R.TrackNumber,data:t.track.id},{id:R.TrackUID,data:t.track.id},{id:R.TrackType,data:Mg[t.type]},t.track.metadata.disposition?.default===!1?{id:R.FlagDefault,data:0}:null,t.track.metadata.disposition?.forced?{id:R.FlagForced,data:1}:null,t.track.metadata.disposition?.hearingImpaired?{id:R.FlagHearingImpaired,data:1}:null,t.track.metadata.disposition?.visuallyImpaired?{id:R.FlagVisualImpaired,data:1}:null,t.track.metadata.disposition?.original?{id:R.FlagOriginal,data:1}:null,t.track.metadata.disposition?.commentary?{id:R.FlagCommentary,data:1}:null,{id:R.FlagLacing,data:0},{id:R.Language,data:t.track.metadata.languageCode??xr},{id:R.CodecID,data:n},{id:R.CodecDelay,data:0},{id:R.SeekPreRoll,data:r},t.track.metadata.name===void 0?null:{id:R.Name,data:new Ns(t.track.metadata.name)},t.type===`video`?this.videoSpecificTrackInfo(t):null,t.type===`audio`?this.audioSpecificTrackInfo(t):null,t.type===`subtitle`?this.subtitleSpecificTrackInfo(t):null]})}}videoSpecificTrackInfo(e){let{frameRate:t,rotation:n}=e.track.metadata,r=[e.info.decoderConfig.description?{id:R.CodecPrivate,data:A(e.info.decoderConfig.description)}:null,t?{id:R.DefaultDuration,data:1e9/t}:null],i=n?Bn(-n):0,a=!!e.info.aspectRatio&&e.info.aspectRatio.num*e.info.height!==e.info.aspectRatio.den*e.info.width,o=e.info.decoderConfig.colorSpace,s={id:R.Video,data:[{id:R.PixelWidth,data:e.info.width},{id:R.PixelHeight,data:e.info.height},a?{id:R.DisplayWidth,data:e.info.aspectRatio.num}:null,a?{id:R.DisplayHeight,data:e.info.aspectRatio.den}:null,a?{id:R.DisplayUnit,data:3}:null,e.info.alphaMode?{id:R.AlphaMode,data:1}:null,$n(o)?{id:R.Colour,data:[{id:R.MatrixCoefficients,data:Zn[o.matrix]},{id:R.TransferCharacteristics,data:Yn[o.transfer]},{id:R.Primaries,data:qn[o.primaries]},{id:R.Range,data:o.fullRange?2:1}]}:null,i?{id:R.Projection,data:[{id:R.ProjectionType,data:0},{id:R.ProjectionPoseRoll,data:new As((i+180)%360-180)}]}:null]};return r.push(s),r}audioSpecificTrackInfo(e){let t=Ii.includes(e.track.source._codec)?na(e.track.source._codec):null;return[e.info.decoderConfig.description?{id:R.CodecPrivate,data:A(e.info.decoderConfig.description)}:null,{id:R.Audio,data:[{id:R.SamplingFrequency,data:new As(e.info.sampleRate)},{id:R.Channels,data:e.info.numberOfChannels},t?{id:R.BitDepth,data:8*t.sampleSize}:null]}]}subtitleSpecificTrackInfo(e){return[{id:R.CodecPrivate,data:M.encode(e.info.config.description)}]}maybeCreateTags(){let e=[],t=(t,n)=>{e.push({id:R.SimpleTag,data:[{id:R.TagName,data:new Ns(t)},typeof n==`string`?{id:R.TagString,data:new Ns(n)}:{id:R.TagBinary,data:n}]})},n=this.output._metadataTags,r=new Set;for(let{key:e,value:i}of Kr(n))switch(e){case`title`:t(`TITLE`,i),r.add(`TITLE`);break;case`description`:t(`DESCRIPTION`,i),r.add(`DESCRIPTION`);break;case`artist`:t(`ARTIST`,i),r.add(`ARTIST`);break;case`album`:t(`ALBUM`,i),r.add(`ALBUM`);break;case`albumArtist`:t(`ALBUM_ARTIST`,i),r.add(`ALBUM_ARTIST`);break;case`genre`:t(`GENRE`,i),r.add(`GENRE`);break;case`comment`:t(`COMMENT`,i),r.add(`COMMENT`);break;case`lyrics`:t(`LYRICS`,i),r.add(`LYRICS`);break;case`date`:t(`DATE`,i.toISOString().slice(0,10)),r.add(`DATE`);break;case`trackNumber`:t(`PART_NUMBER`,n.tracksTotal===void 0?i.toString():`${i}/${n.tracksTotal}`),r.add(`PART_NUMBER`);break;case`discNumber`:t(`DISC`,n.discsTotal===void 0?i.toString():`${i}/${n.discsTotal}`),r.add(`DISC`);break;case`tracksTotal`:case`discsTotal`:break;case`images`:case`raw`:break;default:pr(e)}if(n.raw)for(let e in n.raw){let i=n.raw[e];i==null||r.has(e)||(typeof i==`string`||i instanceof Uint8Array)&&t(e,i)}e.length!==0&&(this.tagsElement={id:R.Tags,data:[{id:R.Tag,data:[{id:R.Targets,data:[{id:R.TargetTypeValue,data:50},{id:R.TargetType,data:`MOVIE`}]},...e]}]})}maybeCreateAttachments(){let e=this.output._metadataTags,t=[],n=new Set,r=e.images??[];for(let e of r){let r=e.name;r===void 0&&(r=(e.kind===`coverFront`?`cover`:e.kind===`coverBack`?`back`:`image`)+(qr(e.mimeType)??``));let i;for(;;){i=0n;for(let e=0;e<8;e++)i<<=8n,i|=BigInt(Math.floor(Math.random()*256));if(i!==0n&&!n.has(i))break}n.add(i),t.push({id:R.AttachedFile,data:[e.description===void 0?null:{id:R.FileDescription,data:new Ns(e.description)},{id:R.FileName,data:new Ns(r)},{id:R.FileMediaType,data:e.mimeType},{id:R.FileData,data:e.data},{id:R.FileUID,data:i}]})}for(let[n,i]of Object.entries(e.raw??{}))i instanceof xi&&/^\d+$/.test(n)&&(r.find(e=>e.mimeType===i.mimeType&&Xr(e.data,i.data))||t.push({id:R.AttachedFile,data:[i.description===void 0?null:{id:R.FileDescription,data:new Ns(i.description)},{id:R.FileName,data:new Ns(i.name??``)},{id:R.FileMediaType,data:i.mimeType??``},{id:R.FileData,data:i.data},{id:R.FileUID,data:BigInt(n)}]}));t.length!==0&&(this.attachmentsElement={id:R.Attachments,data:t})}createSegment(){this.createTracks(),this.maybeCreateTags(),this.maybeCreateAttachments(),this.maybeCreateSeekHead(!1);let e={id:R.Segment,size:this.format._options.appendOnly?-1:Ag,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:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onSegmentHeader(e,t)}}createCues(){this.cues={id:R.Cues,data:[]}}get segmentDataOffset(){return D(this.segment),this.ebmlWriter.dataOffsets.get(this.segment)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(e=>e.type===`video`||e.type===`audio`?e.info.decoderConfig.codec:{webvtt:`wvtt`}[e.track.source._codec]);return ic({isWebM:this.format instanceof q_,hasVideo:this.trackDatas.some(e=>e.type===`video`),hasAudio:this.trackDatas.some(e=>e.type===`audio`),codecStrings:e})}getVideoTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;da(n),D(n),D(n.decoderConfig),D(n.decoderConfig.codedWidth!==void 0),D(n.decoderConfig.codedHeight!==void 0);let i=n.decoderConfig.displayAspectWidth,a=n.decoderConfig.displayAspectHeight,o=i===void 0||a===void 0?null:ri({num:i,den:a}),s={track:e,type:`video`,info:{width:n.decoderConfig.codedWidth,height:n.decoderConfig.codedHeight,aspectRatio:o,decoderConfig:n.decoderConfig,alphaMode:!!t.sideData.alpha},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return e.source._codec===`vp9`?s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(qi(s.info.decoderConfig.codec))}:e.source._codec===`av1`&&(s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(Ji(s.info.decoderConfig.codec))}),this.trackDatas.push(s),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),s}getAudioTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;pa(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig},a=!1;if(e.source._codec===`aac`&&!i.description){let e=Kc(wp.tempFromBytes(t.data));if(!e)throw 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 n=Oi[e.samplingFrequencyIndex],r=ki[e.channelConfiguration];if(n===void 0||r===void 0)throw Error(`Invalid ADTS frame header.`);i.description=ji({objectType:e.objectType,sampleRate:n,numberOfChannels:r}),a=!0}let o={track:e,type:`audio`,info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:i,requiresAdtsStripping:a},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(o),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}getSubtitleTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;ma(t),D(t),D(t.config);let r={track:e,type:`subtitle`,info:{config:t.config},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(r),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),r}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,t,n),i=t.type===`key`;this.validateTimestamp(r.track,t.timestamp,i);let a=t.timestamp,o=t.duration;e.metadata.frameRate!==void 0&&(a=wr(a,e.metadata.frameRate),o=wr(o,e.metadata.frameRate));let s=r.info.alphaMode?t.sideData.alpha??null:null,c=this.createInternalChunk(t.data,a,o,t.type,s);e.source._codec===`vp9`&&this.fixVP9ColorSpace(r,c),r.chunkQueue.push(c),await this.interleaveChunks()}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,t,n),i=t.data;if(r.info.requiresAdtsStripping){let e=Kc(wp.tempFromBytes(i));if(!e)throw Error(`Expected ADTS frame, didn't get one.`);let t=e.crcCheck===null?Wc:Gc;i=i.subarray(t)}let a=t.type===`key`;this.validateTimestamp(r.track,t.timestamp,a);let o=this.createInternalChunk(i,t.timestamp,t.duration,t.type);r.chunkQueue.push(o),await this.interleaveChunks()}finally{r()}}async addSubtitleCue(e,t,n){let r=await this.mutex.acquire();try{let r=this.getSubtitleTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,!0);let i=t.text,a=Math.round(t.timestamp*1e3);um.lastIndex=0,i=i.replace(um,e=>`<${mm(pm(e.slice(1,-1))-a)}>`);let o=M.encode(i),s=`${t.settings??``}\n${t.identifier??``}\n${t.notes??``}`,c=this.createInternalChunk(o,t.timestamp,t.duration,`key`,s.trim()?M.encode(s):null);r.chunkQueue.push(c),await this.interleaveChunks()}finally{r()}}async interleaveChunks(e=!1){if(!(!e&&!this.allTracksAreKnown())){outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.chunkQueue.length===0&&!r.closed)break outer;r.chunkQueue.length>0&&r.chunkQueue[0].timestamp<n&&(t=r,n=r.chunkQueue[0].timestamp)}if(!t)break;let r=t.chunkQueue.shift();this.writeBlock(t,r)}e||await this.writer.flush()}}fixVP9ColorSpace(e,t){if(t.type!==`key`||!e.info.decoderConfig.colorSpace||!e.info.decoderConfig.colorSpace.matrix)return;let n=new I(t.data);n.skipBits(2);let r=n.readBits(1),i=(n.readBits(1)<<1)+r;if(i===3&&n.skipBits(1),n.readBits(1)||n.readBits(1)!==0||(n.skipBits(2),n.readBits(24)!==4817730))return;i>=2&&n.skipBits(1);let a={rgb:7,bt709:2,bt470bg:1,smpte170m:3}[e.info.decoderConfig.colorSpace.matrix];Un(t.data,n.pos,n.pos+3,a)}createInternalChunk(e,t,n,r,i=null){return{data:e,type:r,timestamp:t,duration:n,additions:i}}writeBlock(e,t){this.segment||this.createSegment();let n=Math.round(1e3*t.timestamp),r=this.trackDatas.every(n=>{if(e===n)return t.type===`key`;let r=n.chunkQueue[0];return r?r.type===`key`:n.closed}),i=!1;if(!this.currentCluster)i=!0;else{D(this.currentClusterStartMsTimestamp!==null),D(this.currentClusterMaxMsTimestamp!==null);let e=n-this.currentClusterStartMsTimestamp;i=r&&n>this.currentClusterMaxMsTimestamp&&e>=1e3*(this.format._options.minimumClusterDuration??1)||e>Og}i&&this.createNewCluster(n);let a=n-this.currentClusterStartMsTimestamp;if(a<Dg)return;let o=new Uint8Array(4),s=new DataView(o.buffer);s.setUint8(0,128|e.track.id),s.setInt16(1,a,!1);let c=Math.round(1e3*t.duration);if(t.additions){let r={id:R.BlockGroup,data:[{id:R.Block,data:[o,t.data]},t.type===`delta`?{id:R.ReferenceBlock,data:new Ms(e.lastWrittenMsTimestamp-n)}:null,t.additions?{id:R.BlockAdditions,data:[{id:R.BlockMore,data:[{id:R.BlockAddID,data:1},{id:R.BlockAdditional,data:t.additions}]}]}:null,c>0?{id:R.BlockDuration,data:c}:null]};this.ebmlWriter.writeEBML(r)}else{s.setUint8(3,Number(t.type===`key`)<<7);let e={id:R.SimpleBlock,data:[o,t.data]};this.ebmlWriter.writeEBML(e)}this.startTimestamp=Math.min(this.startTimestamp,n),this.endTimestamp=Math.max(this.endTimestamp,n+c),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:R.Cluster,size:this.format._options.appendOnly?-1:jg,data:[{id:R.Timestamp,data:e}]},this.ebmlWriter.writeEBML(this.currentCluster),this.currentClusterStartMsTimestamp=e,this.currentClusterMaxMsTimestamp=e,this.trackDatasInCurrentCluster.clear()}finalizeCurrentCluster(){if(D(this.currentCluster),!this.format._options.appendOnly){let e=this.writer.getPos()-this.ebmlWriter.dataOffsets.get(this.currentCluster),t=this.writer.getPos();this.writer.seek(this.ebmlWriter.offsets.get(this.currentCluster)+4),this.ebmlWriter.writeVarInt(e,jg),this.writer.seek(t)}if(this.format._options.onCluster){D(this.currentClusterStartMsTimestamp!==null);let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onCluster(e,t,this.currentClusterStartMsTimestamp/1e3)}let e=this.ebmlWriter.offsets.get(this.currentCluster)-this.segmentDataOffset,t=new Map;for(let[e,{firstMsTimestamp:n}]of this.trackDatasInCurrentCluster)t.has(n)||t.set(n,[]),t.get(n).push(e);let n=[...t.entries()].sort((e,t)=>e[0]-t[0]);for(let[t,r]of n)D(this.cues),this.cues.data.push({id:R.CuePoint,data:[{id:R.CueTime,data:t},...r.map(t=>({id:R.CueTrackPositions,data:[{id:R.CueTrack,data:t.track.id},{id:R.CueClusterPosition,data:e}]}))]})}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleaveChunks(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0;if(this.segment||this.createSegment(),await this.interleaveChunks(!0),this.currentCluster&&this.finalizeCurrentCluster(),D(this.cues),this.ebmlWriter.writeEBML(this.cues),!this.format._options.appendOnly){let e=this.writer.getPos()-this.segmentDataOffset;this.writer.seek(this.ebmlWriter.offsets.get(this.segment)+4),this.ebmlWriter.writeVarInt(e,Ag);let t=this.startTimestamp===1/0?0:this.endTimestamp-this.startTimestamp;this.segmentDuration.data=new js(t),this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration)),this.ebmlWriter.writeEBML(this.segmentDuration),D(this.seekHead),this.writer.seek(this.ebmlWriter.offsets.get(this.seekHead)),this.maybeCreateSeekHead(!0),this.ebmlWriter.writeEBML(this.seekHead)}e()}}})),Fg,Ig=n((()=>{Oa(),Fg=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer)}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeXingFrame(e){let t=this.writer.getPos(),n=224|e.mpegVersionId<<3|e.layer<<1,r;r=e.mpegVersionId&2&&e.mpegVersionId&1?0:1;let i=-1,a=r*16*4+e.layer*16;for(let t=0;t<16;t++){let n=va[a+t];if(xa(r,e.layer,1e3*n,e.sampleRate,0)>=155){i=t;break}}if(i===-1)throw Error(`No suitable bitrate found.`);let o=i<<4|e.frequencyIndex<<2|0,s=e.channel<<6|e.modeExtension<<4|e.copyright<<3|e.original<<2|e.emphasis;this.helper[0]=255,this.helper[1]=n,this.helper[2]=o,this.helper[3]=s,this.writer.write(this.helper.subarray(0,4));let c=Ca(e.mpegVersionId,e.channel);this.writer.seek(t+c),this.writeU32(ya);let l=0;e.frameCount!==null&&(l|=Da.FrameCount),e.fileSize!==null&&(l|=Da.FileSize),e.toc!==null&&(l|=Da.Toc),this.writeU32(l),this.writeU32(e.frameCount??0),this.writeU32(e.fileSize??0),this.writer.write(e.toc??new Uint8Array(100));let u=va[a+i],d=xa(r,e.layer,1e3*u,e.sampleRate,0);this.writer.seek(t+d)}}})),Lg,Rg=n((()=>{F(),Ei(),em(),Oa(),Ig(),Qp(),Lg=class extends $p{constructor(e,t){super(e),this.xingFrameData=null,this.frameCount=0,this.framePositions=[],this.xingFramePos=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(this.format._options.xingHeader===!1),this.mp3Writer=new Fg(this.writer),Ci(this.output._metadataTags)||new Zp(this.writer).writeId3V2Tag(this.output._metadataTags),e()}async getMimeType(){return`audio/mpeg`}async addEncodedVideoPacket(){throw Error(`MP3 does not support video.`)}async addEncodedAudioPacket(e,t){let n=await this.mutex.acquire();try{let n=this.format._options.xingHeader!==!1;if(!this.xingFrameData&&n){let e=j(t.data);if(e.byteLength<4)throw Error(`Invalid MP3 header in sample.`);let n=wa(e.getUint32(0,!1),null).header;if(!n)throw Error(`Invalid MP3 header in sample.`);let r=Ca(n.mpegVersionId,n.channel);if(e.byteLength>=r+4){let t=e.getUint32(r,!1);if(t===ya||t===ba)return}this.xingFrameData={mpegVersionId:n.mpegVersionId,layer:n.layer,frequencyIndex:n.frequencyIndex,sampleRate:n.sampleRate,channel:n.channel,modeExtension:n.modeExtension,copyright:n.copyright,original:n.original,emphasis:n.emphasis,frameCount:null,fileSize:null,toc:null},this.xingFramePos=this.writer.getPos(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.frameCount++}this.validateTimestamp(e,t.timestamp,t.type===`key`),n&&this.framePositions.push(this.writer.getPos()),this.writer.write(t.data),this.frameCount++,await this.writer.flush()}finally{n()}}async addSubtitleCue(){throw Error(`MP3 does not support subtitles.`)}async finalize(){if(!this.xingFrameData||this.xingFramePos===null)return;let e=await this.mutex.acquire(),t=this.writer.getPos()-this.xingFramePos;this.writer.seek(this.xingFramePos);let n=new Uint8Array(100);for(let e=0;e<100;e++){let r=Math.floor(this.framePositions.length*(e/100));n[e]=256*((this.framePositions[r]-this.xingFramePos)/t)}if(this.xingFrameData.frameCount=this.frameCount,this.xingFrameData.fileSize=t,this.xingFrameData.toc=n,this.format._options.onXingFrame&&this.writer.startTrackingWrites(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.format._options.onXingFrame){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onXingFrame(e,t)}e()}}})),zg,Bg,Vg=n((()=>{ha(),Po(),F(),em(),Dc(),Nc(),zg=8192,Bg=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.bosPagesWritten=!1,this.allTracksKnown=P(),this.pageBytes=new Uint8Array(Ac),this.pageView=new DataView(this.pageBytes.buffer),this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,Ec({codecStrings:this.trackDatas.map(e=>e.codecInfo.codec)})}addEncodedVideoPacket(){throw Error(`Video tracks are not supported.`)}getTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;let r;do r=Math.floor(2**32*Math.random());while(this.trackDatas.some(e=>e.serialNumber===r));D(e.source._codec===`vorbis`||e.source._codec===`opus`),pa(t),D(t),D(t.decoderConfig);let i={track:e,serialNumber:r,internalSampleRate:e.source._codec===`opus`?ea:t.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(i,t),this.trackDatas.push(i),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),i}queueHeaderPackets(e,t){if(D(t.decoderConfig),e.track.source._codec===`vorbis`){D(t.decoderConfig.description);let n=A(t.decoderConfig.description);if(n[0]!==2)throw TypeError(`First byte of Vorbis decoder description must be 2.`);let r=1,i=()=>{let e=0;for(;;){let t=n[r++];if(t===void 0)throw TypeError(`Vorbis decoder description is too short.`);if(e+=t,t<255)return e}},a=i(),o=i();if(n.length-r<=0)throw TypeError(`Vorbis decoder description is too short.`);let s=n.subarray(r,r+=a);r+=o;let c=n.subarray(r),l=new Uint8Array(7);l[0]=3,l[1]=118,l[2]=111,l[3]=114,l[4]=98,l[5]=105,l[6]=115;let u=So(l,this.output._metadataTags,!0);e.packetQueue.push({data:s,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:u,timestampInSamples:0,durationInSamples:0,forcePageFlush:!1},{data:c,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0});let d=j(s).getUint8(28);e.codecInfo.vorbisInfo={blocksizes:[1<<(d&15),1<<(d>>4)],modeBlockflags:vo(c).modeBlockflags}}else if(e.track.source._codec===`opus`){if(!t.decoderConfig.description)throw TypeError(`For Ogg, Opus decoder description is required.`);let n=A(t.decoderConfig.description),r=new Uint8Array(8),i=j(r);i.setUint32(0,1332770163,!1),i.setUint32(4,1415669619,!1);let a=So(r,this.output._metadataTags,!0);e.packetQueue.push({data:n,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:a,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0}),e.codecInfo.opusInfo={preSkip:ho(n).preSkip}}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=r.currentTimestampInSamples,{durationInSamples:a,vorbisBlockSize:o}=Tc(t.data,r.codecInfo,r.vorbisLastBlocksize);r.currentTimestampInSamples+=a,r.vorbisLastBlocksize=o,r.packetQueue.push({data:t.data,timestampInSamples:i,durationInSamples:a,forcePageFlush:!1}),await this.interleavePages()}finally{r()}}addSubtitleCue(){throw Error(`Subtitle tracks are not supported.`)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async interleavePages(e=!1){if(!this.bosPagesWritten){if(!this.allTracksAreKnown()&&!e)return;for(let e of this.trackDatas)for(;e.packetQueue.length>0;){let t=e.packetQueue.shift();if(this.writePacket(e,t,!1),t.forcePageFlush)break}this.bosPagesWritten=!0}outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.packetQueue.length<=1&&!r.closed)break outer;r.packetQueue.length>0&&r.packetQueue[0].timestampInSamples<n&&(t=r,n=r.packetQueue[0].timestampInSamples)}if(!t)break;let r=t.packetQueue.shift(),i=t.packetQueue.length===0;this.writePacket(t,r,i)}e||await this.writer.flush()}writePacket(e,t,n){let r=t.timestampInSamples+t.durationInSamples;if(this.format._options.maximumPageDuration!==void 0){let t=this.format._options.maximumPageDuration*e.internalSampleRate;e.currentLacingValues.length>0&&r-e.currentPageStartTimestampInSamples>t&&this.writePage(e,!1)}let i=t.data.length,a=0,o=0;for(;;){e.currentLacingValues.length===0&&a>0&&(e.currentPageStartsWithFreshPacket=!1);let r=Math.min(255,i);e.currentLacingValues.push(r),e.currentPageSize++,o+=r;let s=i<255;if(e.currentLacingValues.length===255){let r=t.data.subarray(a,o);if(a=o,e.currentPageData.push(r),e.currentPageSize+=r.length,this.writePage(e,n&&s),s)return}if(s)break;i-=255}let s=t.data.subarray(a);e.currentPageData.push(s),e.currentPageSize+=s.length,e.currentGranulePosition=r,(e.currentPageSize>=zg||t.forcePageFlush)&&this.writePage(e,n)}writePage(e,t){this.pageView.setUint32(0,xc,!0),this.pageView.setUint8(4,0);let n=0;e.currentPageStartsWithFreshPacket||(n|=1),e.pagesWritten===0&&(n|=2),t&&(n|=4),this.pageView.setUint8(5,n);let r=e.currentLacingValues.every(e=>e===255)?-1:e.currentGranulePosition;vr(this.pageView,6,r,!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 i=27+e.currentLacingValues.length;for(let t of e.currentPageData)this.pageBytes.set(t,i),i+=t.length;let a=this.pageBytes.subarray(0,i),o=wc(a);if(this.pageView.setUint32(22,o,!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(a),this.format._options.onPage){let{data:t,start:n}=this.writer.stopTrackingWrites();this.format._options.onPage(t,n,e.track.source)}}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePages(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0;await this.interleavePages(!0);for(let e of this.trackDatas)e.currentLacingValues.length>0&&this.writePage(e,!0);e()}}})),Hg,Ug,Wg,Gg,Kg,qg,Jg,Yg,Xg,Zg,Qg,$g,e_,t_=n((()=>{Pi(),ha(),Po(),Di(),F(),em(),dl(),Hg=0,Ug=4096,Wg=256,Gg=224,Kg=192,qg=new Uint8Array([9,240]),Jg=new Uint8Array([70,1]),Yg=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.tablesWritten=!1,this.continuityCounters=new Map,this.packetBuffer=new Uint8Array(ll),this.packetView=j(this.packetBuffer),this.allTracksKnown=P(),this.videoTrackIndex=0,this.audioTrackIndex=0,this.adaptationFieldBuffer=new Uint8Array(184),this.payloadBuffer=new Uint8Array(184),this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,ul(this.trackDatas.map(e=>e.codecString))}getVideoTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;da(t),D(t?.decoderConfig);let r=e.source._codec;D(r===`avc`||r===`hevc`);let i=r===`avc`?27:36,a={track:e,pid:Wg+this.trackDatas.length,streamType:i,streamId:Gg+ this.videoTrackIndex++,codecString:t.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(a),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}getAudioTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;pa(t),D(t?.decoderConfig);let r=e.source._codec;D(r===`aac`||r===`mp3`||r===`ac3`||r===`eac3`);let i,a;switch(r){case`aac`:i=15,a=Kg+ this.audioTrackIndex++;break;case`mp3`:i=3,a=Kg+ this.audioTrackIndex++;break;case`ac3`:i=129,a=189;break;case`eac3`:i=135,a=189;break}let o={track:e,pid:Wg+this.trackDatas.length,streamType:i,streamId:a,codecString:t.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(o),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=this.prepareVideoPacket(r,t,n);t.type===`key`&&await this.flushTimestampQueue(r),r.timestampProcessingQueue.push({data:i,presentationTimestamp:t.timestamp,decodeTimestamp:null,isKeyframe:t.type===`key`})}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=this.prepareAudioPacket(r,t,n);t.type===`key`&&await this.flushTimestampQueue(r),r.timestampProcessingQueue.push({data:i,presentationTimestamp:t.timestamp,decodeTimestamp:null,isKeyframe:t.type===`key`})}finally{r()}}async addSubtitleCue(){throw Error(`MPEG-TS does not support subtitles.`)}prepareVideoPacket(e,t,n){let r=e.track.source._codec;if(e.inputIsAnnexB===null){let t=n?.decoderConfig?.description;if(e.inputIsAnnexB=!t,!e.inputIsAnnexB){let n=A(t);r===`avc`?e.avcDecoderConfig=Ga(n):e.hevcDecoderConfig=co(n)}}return e.inputIsAnnexB?this.prepareAnnexBVideoPacket(t.data,r):this.prepareLengthPrefixedVideoPacket(e,t,r)}prepareAnnexBVideoPacket(e,t){let n=[];for(let r of Pa(e)){let i=e.subarray(r.offset,r.offset+r.length);(t===`avc`?La(i[0])===Ma.AUD:Za(i[0])===Na.AUD_NUT)||n.push(i)}let r=t===`avc`?qg:Jg;return n.unshift(r),Ba(n)}prepareLengthPrefixedVideoPacket(e,t,n){let r=t.data,i=n===`avc`?e.avcDecoderConfig.lengthSizeMinusOne+1:e.hevcDecoderConfig.lengthSizeMinusOne+1,a=[];for(let e of Fa(r,i)){let t=r.subarray(e.offset,e.offset+e.length);(n===`avc`?La(t[0])===Ma.AUD:Za(t[0])===Na.AUD_NUT)||a.push(t)}if(t.type===`key`)if(n===`avc`){let t=e.avcDecoderConfig;for(let e of t.pictureParameterSets)a.unshift(e);for(let e of t.sequenceParameterSets)a.unshift(e)}else{let t=e.hevcDecoderConfig;for(let e of t.arrays)if(e.nalUnitType===Na.PPS_NUT)for(let t of e.nalUnits)a.unshift(t);for(let e of t.arrays)if(e.nalUnitType===Na.SPS_NUT)for(let t of e.nalUnits)a.unshift(t);for(let e of t.arrays)if(e.nalUnitType===Na.VPS_NUT)for(let t of e.nalUnits)a.unshift(t)}let o=n===`avc`?qg:Jg;return a.unshift(o),Ba(a)}prepareAudioPacket(e,t,n){let r=e.track.source._codec;if(r===`mp3`||r===`ac3`||r===`eac3`)return t.data;if(e.inputIsAdts===null){let t=n?.decoderConfig?.description;if(e.inputIsAdts=!t,!e.inputIsAdts){let n=Mi(Ai(A(t)));e.adtsHeader=n.header,e.adtsHeaderBitstream=n.bitstream}}if(e.inputIsAdts)return t.data;D(e.adtsHeader),D(e.adtsHeaderBitstream);let i=e.adtsHeader,a=t.data.byteLength+i.byteLength;Ni(e.adtsHeaderBitstream,a);let o=new Uint8Array(a);return o.set(i,0),o.set(t.data,i.byteLength),o}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async flushTimestampQueue(e,t=!0){if(e.timestampProcessingQueue.length===0)return;let n=e.timestampProcessingQueue.map(e=>e.presentationTimestamp).sort((e,t)=>e-t);for(let t=0;t<e.timestampProcessingQueue.length;t++){let r=e.timestampProcessingQueue[t];r.decodeTimestamp=n[t],e.packetQueue.push(r)}e.timestampProcessingQueue.length=0,t&&await this.interleavePackets()}async interleavePackets(e=!1){if(!this.tablesWritten){if(!this.allTracksAreKnown()&&!e)return;this.writeTables()}outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.packetQueue.length===0&&!r.closed)break outer;r.packetQueue.length>0&&r.packetQueue[0].presentationTimestamp<n&&(t=r,n=r.packetQueue[0].presentationTimestamp)}if(!t)break;let r=t.packetQueue.shift();this.writePesPacket(t,r)}e||await this.writer.flush()}writeTables(){D(!this.tablesWritten),this.writePsiSection(Hg,$g),this.writePsiSection(Ug,e_(this.trackDatas)),this.tablesWritten=!0}writePsiSection(e,t){let n=0,r=!0;for(;n<t.length;){let i=184-(r?1:0),a=t.length-n,o=Math.min(i,a),s;r?(s=this.payloadBuffer.subarray(0,1+o),s[0]=0,s.set(t.subarray(n,n+o),1)):s=t.subarray(n,n+o),this.writeTsPacket(e,r,null,s),n+=o,r=!1}}writePesPacket(e,t){let n=e.track.type===`video`,r=n?10:5,i=new Uint8Array(9+r),a=j(i),o=new I(i.subarray(9));gr(a,0,1,!1),i[3]=e.streamId;let s=e.track.type===`video`?0:Math.min(8+t.data.length,65535);a.setUint16(4,s,!1),a.setUint8(6,132),a.setUint8(7,n?192:128),a.setUint8(8,r);let c=Math.round(t.presentationTimestamp*cl);if(o.pos=0,o.writeBits(4,n?3:2),o.writeBits(3,c>>>30&7),o.writeBits(1,1),o.writeBits(15,c>>>15&32767),o.writeBits(1,1),o.writeBits(15,c&32767),o.writeBits(1,1),n){D(t.decodeTimestamp!==null);let e=Math.round(t.decodeTimestamp*cl);o.writeBits(4,1),o.writeBits(3,e>>>30&7),o.writeBits(1,1),o.writeBits(15,e>>>15&32767),o.writeBits(1,1),o.writeBits(15,e&32767),o.writeBits(1,1)}let l=i.length+t.data.length,u=0,d=!0;for(;u<l;){let n=d,r=l-u,a=d&&t.isKeyframe,o=d&&!e.firstPacketWritten,s=Math.max(0,184-r),c;c=a||o?Math.max(2,s):s;let f=null;if(c>0){let e=this.adaptationFieldBuffer;c===1?e[0]=0:(e[0]=c-1,e[1]=Number(o)<<7|Number(a)<<6,e.fill(255,2,c)),f=e.subarray(0,c)}let p=Math.min(184-c,r),m=this.payloadBuffer.subarray(0,p),h=0;if(u<i.length){let e=Math.min(i.length-u,p);m.set(i.subarray(u,u+e),0),h=e}let g=Math.max(0,u-i.length),_=g+(p-h);h<p&&m.set(t.data.subarray(g,_),h),this.writeTsPacket(e.pid,n,f,m),u+=p,d=!1}e.firstPacketWritten=!0}writeTsPacket(e,t,n,r){let i=this.continuityCounters.get(e)??0,a=r.length>0,o=n?a?3:2:a?1:0;this.packetBuffer[0]=71,this.packetView.setUint16(1,(t?16384:0)|e&8191,!1),this.packetBuffer[3]=o<<4|i&15,a&&this.continuityCounters.set(e,i+1&15);let s=4;n&&(this.packetBuffer.set(n,s),s+=n.length),this.packetBuffer.set(r,s),s+=r.length,s<ll&&this.packetBuffer.fill(255,s);let c=this.writer.getPos();this.writer.write(this.packetBuffer),this.format._options.onPacket&&this.format._options.onPacket(this.packetBuffer.slice(),c)}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0,await this.flushTimestampQueue(n,!1)),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePackets(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0,await this.flushTimestampQueue(e,!1);await this.interleavePackets(!0),e()}},Xg=79764919,Zg=new Uint32Array(256);for(let e=0;e<256;e++){let t=e<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Xg:t<<1;Zg[e]=t>>>0&4294967295}Qg=e=>{let t=4294967295;for(let n=0;n<e.length;n++){let r=e[n];t=(t<<8^Zg[t>>>24^r])>>>0}return t},$g=new Uint8Array(16);{let e=j($g);$g[0]=0,e.setUint16(1,45069,!1),e.setUint16(3,1,!1),$g[5]=193,$g[6]=0,$g[7]=0,e.setUint16(8,1,!1),e.setUint16(10,57344|Ug&8191,!1),e.setUint32(12,Qg($g.subarray(0,12)),!1)}e_=e=>{let t=0;for(let n of e)t+=5,n.streamType===129?t+=Do.length:n.streamType===135&&(t+=Oo.length);let n=9+t+4,r=new Uint8Array(3+n-4),i=j(r);r[0]=2,i.setUint16(1,45056|n&4095,!1),i.setUint16(3,1,!1),r[5]=193,r[6]=0,r[7]=0,i.setUint16(8,65535,!1),i.setUint16(10,61440,!1);let a=12;for(let t of e)r[a++]=t.streamType,i.setUint16(a,57344|t.pid&8191,!1),a+=2,t.streamType===129?(i.setUint16(a,61440|Do.length,!1),a+=2,r.set(Do,a),a+=Do.length):t.streamType===135?(i.setUint16(a,61440|Oo.length,!1),a+=2,r.set(Oo,a),a+=Oo.length):(i.setUint16(a,61440,!1),a+=2);let o=Qg(r),s=new Uint8Array(r.length+4);return s.set(r,0),j(s).setUint32(r.length,o,!1),s}})),n_,r_=n((()=>{n_=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer)}writeU16(e){this.helperView.setUint16(0,e,!0),this.writer.write(this.helper.subarray(0,2))}writeU32(e){this.helperView.setUint32(0,e,!0),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,e,!0),this.helperView.setUint32(4,Math.floor(e/2**32),!0),this.writer.write(this.helper)}writeAscii(e){this.writer.write(new TextEncoder().encode(e))}}})),i_,a_=n((()=>{em(),ha(),Uc(),r_(),F(),Ei(),Qp(),i_=class extends $p{constructor(e,t){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=t,this.isRf64=!!t._options.large}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!1),this.riffWriter=new n_(this.writer),e()}async getMimeType(){return`audio/wav`}async addEncodedVideoPacket(){throw Error(`WAVE does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.headerWritten||=(pa(n),D(n),D(n.decoderConfig),this.writeHeader(e,n.decoderConfig),this.sampleRate=n.decoderConfig.sampleRate,!0),this.validateTimestamp(e,t.timestamp,t.type===`key`),!this.isRf64&&this.writer.getPos()+t.data.byteLength>=2**32)throw 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(t.data),this.dataSize+=t.data.byteLength,this.sampleCount+=Math.round(t.duration*this.sampleRate),await this.writer.flush()}finally{r()}}async addSubtitleCue(){throw Error(`WAVE does not support subtitles.`)}writeHeader(e,t){this.format._options.onHeader&&this.writer.startTrackingWrites();let n,r=e.source._codec,i=na(r);n=i.dataType===`ulaw`?zc.MULAW:i.dataType===`alaw`?zc.ALAW:i.dataType===`float`?zc.IEEE_FLOAT:zc.PCM;let a=t.numberOfChannels,o=t.sampleRate,s=i.sampleSize*a;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(a),this.riffWriter.writeU32(o),this.riffWriter.writeU32(o*s),this.riffWriter.writeU16(s),this.riffWriter.writeU16(8*i.sampleSize),!Ci(this.output._metadataTags)){let e=this.format._options.metadataFormat??`info`;e===`info`?this.writeInfoChunk(this.output._metadataTags):e===`id3`?this.writeId3Chunk(this.output._metadataTags):pr(e)}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:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onHeader(e,t)}}writeInfoChunk(e){let t=this.writer.getPos();this.riffWriter.writeAscii(`LIST`),this.riffWriter.writeU32(0),this.riffWriter.writeAscii(`INFO`);let n=new Set,r=(e,t)=>{if(!Gn(t)){console.warn(`Didn't write tag '${e}' because '${t}' is not ISO 8859-1-compatible.`);return}let r=t.length+1,i=new Uint8Array(r);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);this.riffWriter.writeAscii(e),this.riffWriter.writeU32(r),this.writer.write(i),r&1&&this.writer.write(new Uint8Array(1)),n.add(e)};for(let{key:t,value:i}of Kr(e))switch(t){case`title`:r(`INAM`,i),n.add(`INAM`);break;case`artist`:r(`IART`,i),n.add(`IART`);break;case`album`:r(`IPRD`,i),n.add(`IPRD`);break;case`trackNumber`:r(`ITRK`,e.tracksTotal===void 0?i.toString():`${i}/${e.tracksTotal}`),n.add(`ITRK`);break;case`genre`:r(`IGNR`,i),n.add(`IGNR`);break;case`date`:r(`ICRD`,i.toISOString().slice(0,10)),n.add(`ICRD`);break;case`comment`:r(`ICMT`,i),n.add(`ICMT`);break;case`albumArtist`:case`discNumber`:case`tracksTotal`:case`discsTotal`:case`description`:case`lyrics`:case`images`:break;case`raw`:break;default:pr(t)}if(e.raw)for(let t in e.raw){let i=e.raw[t];i==null||t.length!==4||n.has(t)||typeof i==`string`&&r(t,i)}let i=this.writer.getPos(),a=i-t-8;this.writer.seek(t+4),this.riffWriter.writeU32(a),this.writer.seek(i),a&1&&this.writer.write(new Uint8Array(1))}writeId3Chunk(e){let t=this.writer.getPos();this.riffWriter.writeAscii(`ID3 `),this.riffWriter.writeU32(0);let n=new Zp(this.writer).writeId3V2Tag(e),r=this.writer.getPos();this.writer.seek(t+4),this.riffWriter.writeU32(n),this.writer.seek(r),n&1&&this.writer.write(new Uint8Array(1))}async finalize(){let e=await this.mutex.acquire(),t=this.writer.getPos();this.isRf64?(D(this.ds64RiffSizePos!==null),this.writer.seek(this.ds64RiffSizePos),this.riffWriter.writeU64(t-8),D(this.ds64DataSizePos!==null),this.writer.seek(this.ds64DataSizePos),this.riffWriter.writeU64(this.dataSize),D(this.ds64SampleCountPos!==null),this.writer.seek(this.ds64SampleCountPos),this.riffWriter.writeU64(this.sampleCount)):(D(this.riffSizePos!==null),this.writer.seek(this.riffSizePos),this.riffWriter.writeU32(t-8),D(this.dataSizePos!==null),this.writer.seek(this.dataSizePos),this.riffWriter.writeU32(this.dataSize)),e()}}})),o_,s_=n((()=>{F(),Zd(),o_=class{constructor(e){this.sourceSampleRate=null,this.sourceNumberOfChannels=null,this.maxWrittenFrame=null,this.targetSampleRate=e.targetSampleRate,this.targetNumberOfChannels=e.targetNumberOfChannels,this.endTime=e.endTime,this.onSample=e.onSample,this.bufferSizeInFrames=Math.floor(this.targetSampleRate*5),this.bufferSizeInSamples=this.bufferSizeInFrames*this.targetNumberOfChannels,this.outputBuffer=new Float32Array(this.bufferSizeInSamples),this.bufferStartFrame=Math.floor(e.startTime*this.targetSampleRate),this.timestampOffset=e.startTime-this.bufferStartFrame/this.targetSampleRate}doChannelMixerSetup(){D(this.sourceNumberOfChannels!==null);let e=this.sourceNumberOfChannels,t=this.targetNumberOfChannels;e===1&&t===2?this.channelMixer=(t,n)=>t[n*e]:e===1&&t===4?this.channelMixer=(t,n,r)=>t[n*e]*+(r<2):e===1&&t===6?this.channelMixer=(t,n,r)=>t[n*e]*+(r===2):e===2&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return .5*(t[r]+t[r+1])}:e===2&&t===4||e===2&&t===6?this.channelMixer=(t,n,r)=>t[n*e+r]*+(r<2):e===4&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return .25*(t[r]+t[r+1]+t[r+2]+t[r+3])}:e===4&&t===2?this.channelMixer=(t,n,r)=>{let i=n*e;return .5*(t[i+r]+t[i+r+2])}:e===4&&t===6?this.channelMixer=(t,n,r)=>{let i=n*e;return r<2?t[i+r]:r===2||r===3?0:t[i+r-2]}:e===6&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return Math.SQRT1_2*(t[r]+t[r+1])+t[r+2]+.5*(t[r+4]+t[r+5])}:e===6&&t===2?this.channelMixer=(t,n,r)=>{let i=n*e;return t[i+r]+Math.SQRT1_2*(t[i+2]+t[i+r+4])}:e===6&&t===4?this.channelMixer=(t,n,r)=>{let i=n*e;return r<2?t[i+r]+Math.SQRT1_2*t[i+2]:t[i+r+2]}:this.channelMixer=(t,n,r)=>r<e?t[n*e+r]:0}ensureTempBufferSize(e){let t=this.tempSourceBuffer.length;for(;t<e;)t*=2;if(t!==this.tempSourceBuffer.length){let e=new Float32Array(t);e.set(this.tempSourceBuffer),this.tempSourceBuffer=e}}async add(e){this.sourceSampleRate===null&&(this.sourceSampleRate=e.sampleRate,this.sourceNumberOfChannels=e.numberOfChannels,this.tempSourceBuffer=new Float32Array(this.sourceSampleRate*this.sourceNumberOfChannels),this.doChannelMixerSetup());let t=e.numberOfFrames*e.numberOfChannels;this.ensureTempBufferSize(t);let n=e.allocationSize({planeIndex:0,format:`f32`}),r=new Float32Array(this.tempSourceBuffer.buffer,0,n/4);e.copyTo(r,{planeIndex:0,format:`f32`});let i=e.timestamp,a=Math.min(e.timestamp+e.duration,this.endTime),o=Math.floor(i*this.targetSampleRate),s=Math.ceil(a*this.targetSampleRate);for(let t=o;t<s;t++){if(t<this.bufferStartFrame)continue;for(;t>=this.bufferStartFrame+this.bufferSizeInFrames;)await this.finalizeCurrentBuffer(),this.bufferStartFrame+=this.bufferSizeInFrames;let n=t-this.bufferStartFrame;D(n<this.bufferSizeInFrames);let a=(t/this.targetSampleRate-i)*this.sourceSampleRate,o=Math.floor(a),s=Math.ceil(a),c=a-o;for(let t=0;t<this.targetNumberOfChannels;t++){let i=0,a=0;o>=0&&o<e.numberOfFrames&&(i=this.channelMixer(r,o,t)),s>=0&&s<e.numberOfFrames&&(a=this.channelMixer(r,s,t));let l=i+c*(a-i),u=n*this.targetNumberOfChannels+t;this.outputBuffer[u]+=l}this.maxWrittenFrame===null?this.maxWrittenFrame=n:this.maxWrittenFrame=Math.max(this.maxWrittenFrame,n)}}async finalizeCurrentBuffer(){if(this.maxWrittenFrame===null)return;let e=(this.maxWrittenFrame+1)*this.targetNumberOfChannels,t=new Float32Array(e);t.set(this.outputBuffer.subarray(0,e));let n=this.bufferStartFrame/this.targetSampleRate,r=new Hd({format:`f32`,sampleRate:this.targetSampleRate,numberOfChannels:this.targetNumberOfChannels,timestamp:n+this.timestampOffset,data:t});await this.onSample(r),this.outputBuffer.fill(0),this.maxWrittenFrame=null}finalize(){return this.finalizeCurrentBuffer()}}})),c_,l_,u_,d_,f_,p_,m_,h_,g_,__,v_,y_,b_,x_,S_,C_,w_,T_,E_,D_,O_,k_,A_,j_,M_,N_,P_=n((()=>{Pi(),ha(),F(),hm(),Bf(),Ff(),Ro(),Zd(),wf(),s_(),c_=class{constructor(){this._connectedTrack=null,this._closingPromise=null,this._closed=!1}_ensureValidAdd(){if(!this._connectedTrack)throw Error(`Source is not connected to an output track.`);if(this._connectedTrack.output.state===`canceled`)throw Error(`Output has been canceled.`);if(this._connectedTrack.output.state===`finalizing`||this._connectedTrack.output.state===`finalized`)throw Error(`Output has been finalized.`);if(this._connectedTrack.output.state===`pending`)throw Error(`Output has not started.`);if(this._closed)throw Error(`Source is closed.`)}async _start(){}async _flushAndClose(e){}close(){if(this._closingPromise)return;let e=this._connectedTrack;if(!e)throw Error(`Cannot call close without connecting the source to an output track.`);if(e.output.state===`pending`)throw Error(`Cannot call close before output has been started.`);this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(e.output.state===`finalizing`||e.output.state===`finalized`)&&e.output._muxer.onTrackClose(e)})()}async _flushOrWaitForOngoingClose(e){return this._closingPromise??=(async()=>{await this._flushAndClose(e),this._closed=!0})()}},l_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!Fi.includes(e))throw TypeError(`Invalid video codec '${e}'. Must be one of: ${Fi.join(`, `)}.`);this._codec=e}},u_=(e,t)=>{if(e.metadata.hasOnlyKeyPackets&&t.type!==`key`)throw Error(`Cannot add non-key packets to a hasOnlyKeyPackets video track.`)},d_=class extends l_{constructor(e){super(e)}add(e,t){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be added.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`meta, when provided, must be an object.`);return this._ensureValidAdd(),u_(this._connectedTrack,e),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,e,t)}},f_=class{constructor(e,t){this.source=e,this.encodingConfig=t,this.ensureEncoderPromise=null,this.encoderInitialized=!1,this.encoder=null,this.muxer=null,this.lastMultipleOfKeyFrameInterval=-1,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 Fr,this.customEncoderQueueSize=0,this.alphaEncoder=null,this.splitter=null,this.splitterCreationFailed=!1,this.alphaFrameQueue=[],this.error=null,this.lastMuxerPromise=Promise.resolve()}async add(e,t,n){let r=e;try{this.checkForEncoderError(),this.source._ensureValidAdd();let i=this.encodingConfig,a=i.sizeChangeBehavior??`deny`,o=!1;if(this.codedWidth!==null&&this.codedHeight!==null){if((e.codedWidth!==this.codedWidth||e.codedHeight!==this.codedHeight)&&(o=!0,a===`deny`))throw Error(`Video sample size must remain constant. Expected ${this.codedWidth}x${this.codedHeight}, got ${e.codedWidth}x${e.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=e.codedWidth,this.codedHeight=e.codedHeight;if(i.transform?.width!==void 0||i.transform?.height!==void 0||i.transform?.rotate!==void 0||i.transform?.crop!==void 0||i.transform?.force===!0||o&&a!==`passThrough`){let n=i.transform?.width,r=i.transform?.height,s=i.transform?.fit??`fill`;o&&a!==`passThrough`&&(D(this.outputWidth),D(this.outputHeight),D(a!==`deny`),n=this.outputWidth,r=this.outputHeight,s=a);let c=await e.transform({width:n,height:r,roundDimensionsTo:2,crop:i.transform?.crop,rotate:i.transform?.rotate,fit:s,alpha:i.alpha});(this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=c.displayWidth,this.outputHeight=c.displayHeight),t&&e.close(),e=c,t=!0}else (this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=e.codedWidth,this.outputHeight=e.codedHeight);let s=i.transform?.frameRate;if(s!==void 0){let i=e.timestamp+e.duration,a=Er(e.timestamp,s);if(this.frameRateLastSample!==null)if(a<=this.frameRateLastTimestamp){this.frameRateLastSample.close(),this.frameRateLastSample=e.clone(),this.frameRateLastEndTimestamp=i;return}else await this.padFrameRate(a,n);e===r&&(e=e.clone(),t=!0),e.setTimestamp(a),e.setDuration(1/s),this.frameRateLastSample?.close(),this.frameRateLastSample=e.clone(),this.frameRateLastTimestamp=a,this.frameRateLastEndTimestamp=i}await this.processAndEncode(e,n)}finally{t&&e.close()}}async processAndEncode(e,t){let n=this.encodingConfig,r;if(n.transform?.process){let t=n.transform.process(e);if(t instanceof Promise&&(t=await t),t===null)return;Array.isArray(t)||(t=[t]),r=t.map(t=>t instanceof Cd?t:typeof VideoFrame<`u`&&t instanceof VideoFrame?new Cd(t):new Cd(t,{timestamp:e.timestamp,duration:e.duration}))}else r=[e];try{for(let e of r){this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(e),this.encoderInitialized||await this.ensureEncoderPromise),D(this.encoderInitialized);let n=this.encodingConfig.keyFrameInterval??2,r=Math.floor(e.timestamp/n),i={...t,keyFrame:t?.keyFrame||n===0||r!==this.lastMultipleOfKeyFrameInterval};if(this.lastMultipleOfKeyFrameInterval=r,this.customEncoder){this.customEncoderQueueSize++;let t=e.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(t,i)).then(()=>this.customEncoderQueueSize--).catch(e=>this.error??=e).finally(()=>{t.close()});this.customEncoderQueueSize>=4&&await n}else{D(this.encoder);let t=e.toVideoFrame(),n=N(this.preciseTimings,t.timestamp,e=>e.microsecondTimestamp),r=n===-1?null:this.preciseTimings[n];if(r&&r.microsecondTimestamp===t.timestamp?(r.timestamp!==e.timestamp&&(r.timestampIsValid=!1),r.duration!==e.duration&&(r.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:t.timestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift()),!this.alphaEncoder)this.encoder.encode(t,i),t.close();else if(t.format&&!t.format.includes(`A`)||this.splitterCreationFailed)this.alphaFrameQueue.push(null),this.encoder.encode(t,i),t.close();else{let e=t.displayWidth,n=t.displayHeight;this.splitter||=new m_(e,n);let{colorFrame:r,alphaFrame:a}=await this.splitter.update(t);this.alphaFrameQueue.push(a),this.encoder.encode(r,i),r.close()}this.encoder.encodeQueueSize>=4&&await new Promise(e=>this.encoder.addEventListener(`dequeue`,e,{once:!0}))}await this.lastMuxerPromise}}finally{for(let t of r)t!==e&&t.close()}}async padFrameRate(e,t){let n=this.encodingConfig.transform.frameRate;D(this.frameRateLastSample);let r=Math.round((e-this.frameRateLastTimestamp)*n);for(let e=1;e<r;e++){let r=this.frameRateLastSample.clone();r.setTimestamp(this.frameRateLastTimestamp+e/n),r.setDuration(1/n),await this.processAndEncode(r,t),r.close()}}ensureEncoder(e){this.ensureEncoderPromise=(async()=>{let t=nf({...this.encodingConfig,width:e.codedWidth,height:e.codedHeight,squarePixelWidth:e.squarePixelWidth,squarePixelHeight:e.squarePixelHeight,framerate:this.source._connectedTrack?.metadata.frameRate});this.encodingConfig.onEncoderConfig?.(t);let n=jf.find(e=>e.supports(this.encodingConfig.codec,t));if(n)this.customEncoder=new n,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=t,this.customEncoder.onPacket=(e,t)=>{if(!(e instanceof L))throw TypeError(`The first argument passed to onPacket must be an EncodedPacket.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`The second argument passed to onPacket must be an object or undefined.`);u_(this.source._connectedTrack,e),this.encodingConfig.onEncodedPacket?.(e,t),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,e,t).catch(e=>{this.error??=e})},await this.customEncoder.init();else{if(typeof VideoEncoder>`u`)throw Error(`VideoEncoder is not supported by this browser.`);if(t.alpha=`discard`,this.encodingConfig.alpha===`keep`&&(t.latencyMode=`quality`),(t.width%2==1||t.height%2==1)&&(this.encodingConfig.codec===`avc`||this.encodingConfig.codec===`hevc`))throw Error(`The dimensions ${t.width}x${t.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(t)).supported)throw Error(`This specific encoder configuration (${t.codec}, ${t.bitrate} bps, ${t.width}x${t.height}, hardware acceleration: ${t.hardwareAcceleration??`no-preference`}) is not supported by this browser. Consider using another codec or changing your video parameters.`);let e=[],n=[],r=0,i=0,a=(e,t,n)=>{let r={};if(t){let e=new Uint8Array(t.byteLength);t.copyTo(e),r.alpha=e}let i=L.fromEncodedChunk(e,r),a=N(this.preciseTimings,e.timestamp,e=>e.microsecondTimestamp),o=a===-1?null:this.preciseTimings[a];o&&o.microsecondTimestamp===e.timestamp&&(i=i.clone({timestamp:o.timestampIsValid?o.timestamp:void 0,duration:o.durationIsValid?o.duration:void 0})),u_(this.source._connectedTrack,i),this.encodingConfig.onEncodedPacket?.(i,n),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,i,n).catch(e=>{this.error??=e})},o=Error(`Encoding error`).stack;if(this.encoder=new VideoEncoder({output:(t,o)=>{if(!this.alphaEncoder){a(t,null,o);return}let s=this.alphaFrameQueue.shift();D(s!==void 0),s?(this.alphaEncoder.encode(s,{keyFrame:t.type===`key`}),i++,s.close(),e.push({chunk:t,meta:o})):i===0?a(t,null,o):(n.push(r+i),e.push({chunk:t,meta:o}))},error:e=>{e.stack=o,this.error??=e}}),this.encoder.configure(t),this.encodingConfig.alpha===`keep`){let o=Error(`Encoding error`).stack;this.alphaEncoder=new VideoEncoder({output:(t,o)=>{i--;let s=e.shift();for(D(s!==void 0),a(s.chunk,t,s.meta),r++;n.length>0&&n[0]===r;){n.shift();let t=e.shift();D(t!==void 0),a(t.chunk,null,t.meta)}},error:e=>{e.stack=o,this.error??=e}}),this.alphaEncoder.configure(t)}}D(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}async flushAndClose(e){if(e||this.checkForEncoderError(),!e&&this.frameRateLastSample){let e=this.encodingConfig.transform.frameRate,t=Er(this.frameRateLastEndTimestamp,e);await this.padFrameRate(t)}this.frameRateLastSample?.close(),this.frameRateLastSample=null,this.customEncoder?(e||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(e||(await this.encoder.flush(),await this.alphaEncoder?.flush()),this.encoder.state!==`closed`&&this.encoder.close(),this.alphaEncoder&&this.alphaEncoder.state!==`closed`&&this.alphaEncoder.close(),this.alphaFrameQueue.forEach(e=>e?.close()),this.splitter?.close()),e||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},p_=!1,m_=class e{constructor(t,n){this.canvas=null,this.gl=null,this.colorProgram=null,this.alphaProgram=null,this.vao=null,this.sourceTexture=null,this.alphaResolutionLocation=null,this.worker=null,this.pendingRequests=new Map,this.nextRequestId=0;let r=typeof OffscreenCanvas<`u`||typeof document<`u`&&typeof document.createElement==`function`;if(!e.forceCpu&&r&&!p_)try{typeof OffscreenCanvas<`u`?this.canvas=new OffscreenCanvas(t,n):(this.canvas=document.createElement(`canvas`),this.canvas.width=t,this.canvas.height=n);let e=this.canvas.getContext(`webgl2`,{alpha:!0});if(!e)throw Error(`Couldn't acquire WebGL 2 context.`);this.gl=e,this.colorProgram=this.createColorProgram(),this.alphaProgram=this.createAlphaProgram(),this.vao=this.createVAO(),this.sourceTexture=this.createTexture(),this.alphaResolutionLocation=this.gl.getUniformLocation(this.alphaProgram,`u_resolution`),this.gl.useProgram(this.colorProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.colorProgram,`u_sourceTexture`),0),this.gl.useProgram(this.alphaProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.alphaProgram,`u_sourceTexture`),0)}catch(e){this.gl=null,this.canvas=null,p_=!0,console.warn(`Falling back to CPU for color/alpha splitting.`,e)}}async update(e){return this.gl?this.updateGpu(e):this.updateCpu(e)}updateGpu(e){D(this.gl),D(this.canvas),(e.displayWidth!==this.canvas.width||e.displayHeight!==this.canvas.height)&&(this.canvas.width=e.displayWidth,this.canvas.height=e.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.sourceTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e);let t=this.runColorProgram(e),n=this.runAlphaProgram(e);return e.close(),{colorFrame:t,alphaFrame:n}}createVertexShader(){return D(this.gl),this.createShader(this.gl.VERTEX_SHADER,`#version 300 es
|
|
38
|
+
`,i);s===-1&&(s=e.length);let c=pm(t[2]),l=pm(t[3])-c,u=e.slice(a,s).trim();e=e.slice(s).trimStart(),cm.lastIndex=0;let d={timestamp:c/1e3,duration:l/1e3,text:u,identifier:r,settings:o,notes:n},f={};this.preambleEmitted||=(f.config={description:this.preambleText},!0),this.options.output(d,f)}}},fm=/(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})/,pm=e=>{let t=fm.exec(e);if(!t)throw Error(`Expected match.`);return 3600*1e3*Number(t[1]||`0`)+60*1e3*Number(t[2])+1e3*Number(t[3])+Number(t[4])},mm=e=>{let t=Math.floor(e/(3600*1e3)),n=Math.floor(e%(3600*1e3)/(60*1e3)),r=Math.floor(e%(60*1e3)/1e3),i=e%1e3;return t.toString().padStart(2,`0`)+`:`+n.toString().padStart(2,`0`)+`:`+r.toString().padStart(2,`0`)+`.`+i.toString().padStart(3,`0`)}})),gm,K,_m,vm,q,ym,bm,J,xm,Sm,Cm,wm,Tm,Em,Dm,Y,Om,km,Am,X,Z,jm,Mm,Nm,Pm,Fm,Im,Lm,Rm,zm,Bm,Vm,Hm,Um,Wm,Gm,Km,qm,Jm,Ym,Xm,Zm,Qm,$m,eh,th,nh,rh,ih,ah,oh,sh,ch,lh,uh,dh,fh,ph,mh,hh,gh,_h,vh,yh,bh,xh,Sh,Ch,wh,Th,Eh,Dh,Oh,kh,Ah,jh,Mh,Nh,Ph,Fh,Ih,Lh,Rh,zh,Bh,Vh,Hh,Uh,Wh,Gh,Kh,qh,Jh,Yh,Xh,Zh,Qh,$h,eg,tg,ng,rg,ig,ag=n((()=>{F(),ma(),hm(),Eg(),No(),Ei(),Di(),gm=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer),this.offsets=new WeakMap}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,Math.floor(e/2**32),!1),this.helperView.setUint32(4,e,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(e){for(let t=0;t<e.length;t++)this.helperView.setUint8(t%8,e.charCodeAt(t)),t%8==7&&this.writer.write(this.helper);e.length%8!=0&&this.writer.write(this.helper.subarray(0,e.length%8))}writeBox(e){if(this.offsets.set(e,this.writer.getPos()),e.contents&&!e.children)this.writeBoxHeader(e,e.size??e.contents.byteLength+8),this.writer.write(e.contents);else{let t=this.writer.getPos();if(this.writeBoxHeader(e,0),e.contents&&this.writer.write(e.contents),e.children)for(let t of e.children)t&&this.writeBox(t);let n=this.writer.getPos(),r=e.size??n-t;this.writer.seek(t),this.writeBoxHeader(e,r),this.writer.seek(n)}}writeBoxHeader(e,t){this.writeU32(e.largeSize?1:t),this.writeAscii(e.type),e.largeSize&&this.writeU64(t)}measureBoxHeader(e){return 8+(e.largeSize?8:0)}patchBox(e){let t=this.offsets.get(e);D(t!==void 0);let n=this.writer.getPos();this.writer.seek(t),this.writeBox(e),this.writer.seek(n)}measureBox(e){if(e.contents&&!e.children)return this.measureBoxHeader(e)+e.contents.byteLength;{let t=this.measureBoxHeader(e);if(e.contents&&(t+=e.contents.byteLength),e.children)for(let n of e.children)n&&(t+=this.measureBox(n));return t}}},K=new Uint8Array(8),_m=new DataView(K.buffer),vm=e=>[(e%256+256)%256],q=e=>(_m.setUint16(0,e,!1),[K[0],K[1]]),ym=e=>(_m.setInt16(0,e,!1),[K[0],K[1]]),bm=e=>(_m.setUint32(0,e,!1),[K[1],K[2],K[3]]),J=e=>(_m.setUint32(0,e,!1),[K[0],K[1],K[2],K[3]]),xm=e=>(_m.setInt32(0,e,!1),[K[0],K[1],K[2],K[3]]),Sm=e=>(_m.setUint32(0,Math.floor(e/2**32),!1),_m.setUint32(4,e,!1),[K[0],K[1],K[2],K[3],K[4],K[5],K[6],K[7]]),Cm=e=>(_m.setInt32(0,Math.floor(e/2**32),!1),_m.setUint32(4,e,!1),[K[0],K[1],K[2],K[3],K[4],K[5],K[6],K[7]]),wm=e=>(_m.setInt16(0,2**8*e,!1),[K[0],K[1]]),Tm=e=>(_m.setInt32(0,2**16*e,!1),[K[0],K[1],K[2],K[3]]),Em=e=>(_m.setInt32(0,2**30*e,!1),[K[0],K[1],K[2],K[3]]),Dm=(e,t)=>{let n=[],r=e;do{let e=r&127;r>>=7,n.length>0&&(e|=128),n.push(e),t!==void 0&&t--}while(r>0||t);return n.reverse()},Y=(e,t=!1)=>{let n=Array(e.length).fill(null).map((t,n)=>e.charCodeAt(n));return t&&n.push(0),n},Om=e=>{let t=e*(Math.PI/180),n=Math.round(Math.cos(t)),r=Math.round(Math.sin(t));return[n,r,0,-r,n,0,0,0,1]},km=Om(0),Am=e=>[Tm(e[0]),Tm(e[1]),Em(e[2]),Tm(e[3]),Tm(e[4]),Em(e[5]),Tm(e[6]),Tm(e[7]),Em(e[8])],X=(e,t,n)=>({type:e,contents:t&&new Uint8Array(t.flat(10)),children:n}),Z=(e,t,n,r,i)=>X(e,[vm(t),bm(n),r??[]],i),jm=e=>e.isQuickTime?X(`ftyp`,[Y(`qt `),J(512),Y(`qt `)]):e.fragmented?e.cmaf?X(`ftyp`,[Y(`iso5`),J(512),Y(`iso5`),Y(`iso6`),Y(`mp41`),Y(`cmfc`),Y(`dash`)]):X(`ftyp`,[Y(`iso5`),J(512),Y(`iso5`),Y(`iso6`),Y(`mp41`)]):X(`ftyp`,[Y(`isom`),J(512),Y(`isom`),e.holdsAvc?Y(`avc1`):[],Y(`mp41`)]),Mm=()=>X(`styp`,[Y(`iso5`),J(0),Y(`iso5`),Y(`iso6`),Y(`mp41`),Y(`cmfc`),Y(`dash`)]),Nm=(e,t)=>{let n=e.maxWrittenEndTimestamp-e.minWrittenTimestamp;return Number.isFinite(n)||(n=0),Z(`sidx`,1,0,[J(1),J(Sg),Sm(Q(e.minWrittenTimestamp,Sg)),Sm(0),q(0),q(1),J(t&2147483647),J(Q(n,Sg)),J(0)])},Pm=e=>({type:`mdat`,largeSize:e}),Fm=e=>({type:`free`,size:e}),Im=e=>X(`moov`,void 0,[Lm(e.creationTime,e.trackDatas),...e.trackDatas.map(t=>zm(t,e.creationTime)),e.isFragmented?kh(e.trackDatas):null,Wh(e)]),Lm=(e,t)=>{let n=Math.max(0,...t.map(e=>Q(Rm(e),Sg)+Q(e.startTimestampOffset??0,Sg))),r=Math.max(0,...t.map(e=>e.track.id))+1,i=!Vn(e)||!Vn(n),a=i?Sm:J;return Z(`mvhd`,+i,0,[a(e),a(e),J(Sg),a(n),Tm(1),wm(1),Array(10).fill(0),Am(km),Array(24).fill(0),J(r)])},Rm=e=>{if(e.samples.length===0)return 0;let t=1/0,n=-1/0;for(let r=0;r<e.samples.length;r++){let i=e.samples[r];i.timestamp<t&&(t=i.timestamp),i.timestamp+i.duration>n&&(n=i.timestamp+i.duration)}return t===1/0?0:n-t},zm=(e,t)=>{let n=wg(e),r=e.startTimestampOffset!==null&&e.startTimestampOffset>0;return X(`trak`,void 0,[Bm(e,t),r?Vm(e,e.startTimestampOffset):null,Hm(e,t),n.name===void 0?null:X(`udta`,void 0,[X(`name`,[...M.encode(n.name)])])])},Bm=(e,t)=>{let n=Q(Rm(e),Sg)+Q(e.startTimestampOffset??0,Sg),r=!Vn(t)||!Vn(n),i=r?Sm:J,a;if(e.type===`video`){let t=e.track.metadata.rotation;a=Om(t??0)}else a=km;let o=2;return e.track.metadata.disposition?.default!==!1&&(o|=1),Z(`tkhd`,+r,o,[i(t),i(t),J(e.track.id),J(0),i(n),Array(8).fill(0),q(0),q(e.track.id),wm(e.type===`audio`?1:0),q(0),Am(a),Tm(e.type===`video`?e.info.width:0),Tm(e.type===`video`?e.info.height:0)])},Vm=(e,t)=>{let n=Q(t,Sg),r=Q(Rm(e),Sg),i=!Vn(n)||!Vn(r),a=i?Sm:J,o=i?Cm:xm;return X(`edts`,void 0,[Z(`elst`,i?1:0,0,[J(2),a(n),o(-1),Tm(1),a(r),o(0),Tm(1)])])},Hm=(e,t)=>X(`mdia`,void 0,[Um(e,t),Km(!0,Wm[e.type],Gm[e.type]),qm(e)]),Um=(e,t)=>{let n=Q(Rm(e),e.timescale),r=!Vn(t)||!Vn(n),i=r?Sm:J;return Z(`mdhd`,+r,0,[i(t),i(t),J(e.timescale),i(n),q(ig(e.track.metadata.languageCode??xr)),q(0)])},Wm={video:`vide`,audio:`soun`,subtitle:`text`},Gm={video:`MediabunnyVideoHandler`,audio:`MediabunnySoundHandler`,subtitle:`MediabunnyTextHandler`},Km=(e,t,n,r=`\0\0\0\0`)=>Z(`hdlr`,0,0,[e?Y(`mhlr`):J(0),Y(t),Y(r),J(0),J(0),Y(n,!0)]),qm=e=>X(`minf`,void 0,[Zm[e.type](),Qm(),th(e)]),Jm=()=>Z(`vmhd`,0,1,[q(0),q(0),q(0),q(0)]),Ym=()=>Z(`smhd`,0,0,[q(0),q(0)]),Xm=()=>Z(`nmhd`,0,0),Zm={video:Jm,audio:Ym,subtitle:Xm},Qm=()=>X(`dinf`,void 0,[$m()]),$m=()=>Z(`dref`,0,0,[J(1)],[eh()]),eh=()=>Z(`url `,0,1),th=e=>{let t=e.compositionTimeOffsetTable.length>1||e.compositionTimeOffsetTable.some(e=>e.sampleCompositionTimeOffset!==0);return X(`stbl`,void 0,[nh(e),Sh(e),t?Dh(e):null,t?Oh(e):null,wh(e),Th(e),Eh(e),Ch(e)])},nh=e=>{let t;if(e.type===`video`)t=rh(Qh(e.track.source._codec,e.info.decoderConfig.codec),e);else if(e.type===`audio`){let n=eg(e.track.source._codec,e.muxer.isQuickTime);D(n),t=uh(n,e)}else e.type===`subtitle`&&(t=bh(ng[e.track.source._codec],e));return D(t),Z(`stsd`,0,0,[J(1)],[t])},rh=(e,t)=>X(e,[[,,,,,,].fill(0),q(1),q(0),q(0),Array(12).fill(0),q(t.info.width),q(t.info.height),J(4718592),J(4718592),J(0),q(1),Array(32).fill(0),q(24),ym(65535)],[$h[t.track.source._codec](t),ih(t),$n(t.info.decoderConfig.colorSpace)?ah(t):null]),ih=e=>e.info.pixelAspectRatio.num===e.info.pixelAspectRatio.den?null:X(`pasp`,[J(e.info.pixelAspectRatio.num),J(e.info.pixelAspectRatio.den)]),ah=e=>X(`colr`,[Y(`nclx`),q(qn[e.info.decoderConfig.colorSpace.primaries]),q(Yn[e.info.decoderConfig.colorSpace.transfer]),q(Zn[e.info.decoderConfig.colorSpace.matrix]),vm((e.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),oh=e=>e.info.decoderConfig&&X(`avcC`,[...A(e.info.decoderConfig.description)]),sh=e=>e.info.decoderConfig&&X(`hvcC`,[...A(e.info.decoderConfig.description)]),ch=e=>{if(!e.info.decoderConfig)return null;let t=e.info.decoderConfig,n=t.codec.split(`.`),r=Number(n[1]),i=Number(n[2]),a=Number(n[3]),o=n[4]?Number(n[4]):1,s=n[8]?Number(n[8]):Number(t.colorSpace?.fullRange??0),c=(a<<4)+(o<<1)+s,l=n[5]?Number(n[5]):t.colorSpace?.primaries?qn[t.colorSpace.primaries]:2,u=n[6]?Number(n[6]):t.colorSpace?.transfer?Yn[t.colorSpace.transfer]:2,d=n[7]?Number(n[7]):t.colorSpace?.matrix?Zn[t.colorSpace.matrix]:2;return Z(`vpcC`,1,0,[vm(r),vm(i),vm(c),vm(l),vm(u),vm(d),q(0)])},lh=e=>X(`av1C`,qi(e.info.decoderConfig.codec)),uh=(e,t)=>{let n=0,r,i=16,a=Fi.includes(t.track.source._codec);if(a){let e=t.track.source._codec,{sampleSize:r}=ta(e);i=8*r,i>16&&(n=1)}if(t.muxer.isQuickTime&&(n=1),n===0)r=[[,,,,,,].fill(0),q(1),q(n),q(0),J(0),q(t.info.numberOfChannels),q(i),q(0),q(0),q(t.info.sampleRate<2**16?t.info.sampleRate:0),q(0)];else{let e=a?0:-2;r=[[,,,,,,].fill(0),q(1),q(n),q(0),J(0),q(t.info.numberOfChannels),q(Math.min(i,16)),ym(e),q(0),q(t.info.sampleRate<2**16?t.info.sampleRate:0),q(0),a?[J(1),J(i/8),J(t.info.numberOfChannels*i/8)]:[J(0),J(0),J(0)],J(2)]}return X(e,r,[tg(t.track.source._codec,t.muxer.isQuickTime)?.(t)??null])},dh=e=>{let t;switch(e.track.source._codec){case`aac`:t=64;break;case`mp3`:t=107;break;case`vorbis`:t=221;break;default:throw Error(`Unhandled audio codec: ${e.track.source._codec}`)}let n=[...vm(t),...vm(21),...bm(0),...J(0),...J(0)];if(e.info.decoderConfig.description){let t=A(e.info.decoderConfig.description);n=[...n,...vm(5),...Dm(t.byteLength),...t]}return n=[...q(1),...vm(0),...vm(4),...Dm(n.length),...n,...vm(6),...vm(1),...vm(2)],n=[...vm(3),...Dm(n.length),...n],Z(`esds`,0,0,n)},fh=e=>X(`wave`,void 0,[ph(e),mh(e),X(`\0\0\0\0`)]),ph=e=>X(`frma`,[Y(eg(e.track.source._codec,e.muxer.isQuickTime))]),mh=e=>{let{littleEndian:t}=ta(e.track.source._codec);return X(`enda`,[q(+t)])},hh=e=>{let t=e.info.numberOfChannels,n=3840,r=e.info.sampleRate,i=0,a=0,o=new Uint8Array,s=e.info.decoderConfig?.description;if(s){D(s.byteLength>=18);let e=mo(A(s));t=e.outputChannelCount,n=e.preSkip,r=e.inputSampleRate,i=e.outputGain,a=e.channelMappingFamily,e.channelMappingTable&&(o=e.channelMappingTable)}return X(`dOps`,[vm(0),vm(t),q(n),J(r),ym(i),vm(a),...o])},gh=e=>{let t=e.info.decoderConfig?.description;return D(t),Z(`dfLa`,0,0,[...A(t).subarray(4)])},_h=e=>{let{littleEndian:t,sampleSize:n}=ta(e.track.source._codec);return Z(`pcmC`,0,0,[vm(+t),vm(8*n)])},vh=e=>{let t=Co(e.info.firstPacket.data);if(!t)throw 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 n=new Uint8Array(3),r=new I(n);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),X(`dac3`,[...n])},yh=e=>{let t=ko(e.info.firstPacket.data);if(!t)throw 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 n=16;for(let e of t.substreams)n+=23,e.numDepSub>0?n+=9:n+=1;let r=Math.ceil(n/8),i=new Uint8Array(r),a=new I(i);a.writeBits(13,t.dataRate),a.writeBits(3,t.substreams.length-1);for(let e of t.substreams)a.writeBits(2,e.fscod),a.writeBits(5,e.bsid),a.writeBits(1,0),a.writeBits(1,0),a.writeBits(3,e.bsmod),a.writeBits(3,e.acmod),a.writeBits(1,e.lfeon),a.writeBits(3,0),a.writeBits(4,e.numDepSub),e.numDepSub>0?a.writeBits(9,e.chanLoc):a.writeBits(1,0);return X(`dec3`,[...i])},bh=(e,t)=>X(e,[[,,,,,,].fill(0),q(1)],[rg[t.track.source._codec](t)]),xh=e=>X(`vttC`,[...M.encode(e.info.config.description)]),Sh=e=>Z(`stts`,0,0,[J(e.timeToSampleTable.length),e.timeToSampleTable.map(e=>[J(e.sampleCount),J(e.sampleDelta)])]),Ch=e=>{if(e.samples.every(e=>e.type===`key`))return null;let t=[...e.samples.entries()].filter(([,e])=>e.type===`key`);return Z(`stss`,0,0,[J(t.length),t.map(([e])=>J(e+1))])},wh=e=>Z(`stsc`,0,0,[J(e.compactlyCodedChunkTable.length),e.compactlyCodedChunkTable.map(e=>[J(e.firstChunk),J(e.samplesPerChunk),J(1)])]),Th=e=>{if(e.type===`audio`&&e.info.requiresPcmTransformation){let{sampleSize:t}=ta(e.track.source._codec);return Z(`stsz`,0,0,[J(t*e.info.numberOfChannels),J(e.samples.reduce((t,n)=>t+Q(n.duration,e.timescale),0))])}return Z(`stsz`,0,0,[J(0),J(e.samples.length),e.samples.map(e=>J(e.size))])},Eh=e=>e.finalizedChunks.length>0&&O(e.finalizedChunks).offset>=2**32?Z(`co64`,0,0,[J(e.finalizedChunks.length),e.finalizedChunks.map(e=>Sm(e.offset))]):Z(`stco`,0,0,[J(e.finalizedChunks.length),e.finalizedChunks.map(e=>J(e.offset))]),Dh=e=>Z(`ctts`,1,0,[J(e.compositionTimeOffsetTable.length),e.compositionTimeOffsetTable.map(e=>[J(e.sampleCount),xm(e.sampleCompositionTimeOffset)])]),Oh=e=>{let t=1/0,n=-1/0,r=1/0,i=-1/0;D(e.compositionTimeOffsetTable.length>0),D(e.samples.length>0);for(let r=0;r<e.compositionTimeOffsetTable.length;r++){let i=e.compositionTimeOffsetTable[r];t=Math.min(t,i.sampleCompositionTimeOffset),n=Math.max(n,i.sampleCompositionTimeOffset)}for(let t=0;t<e.samples.length;t++){let n=e.samples[t];r=Math.min(r,Q(n.timestamp,e.timescale)),i=Math.max(i,Q(n.timestamp+n.duration,e.timescale))}let a=Math.max(-t,0);return i>=2**31?null:Z(`cslg`,0,0,[xm(a),xm(t),xm(n),xm(r),xm(i)])},kh=e=>X(`mvex`,void 0,e.map(Ah)),Ah=e=>Z(`trex`,0,0,[J(e.track.id),J(1),J(0),J(0),J(0)]),jh=(e,t)=>X(`moof`,void 0,[Mh(e),...t.map(Ph)]),Mh=e=>Z(`mfhd`,0,0,[J(e)]),Nh=e=>{let t=0,n=0,r=e.type===`delta`;return n|=+r,r?t|=1:t|=2,t<<24|n<<16|0},Ph=e=>X(`traf`,void 0,[Fh(e),Ih(e),Lh(e)]),Fh=e=>{D(e.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;let n=e.currentChunk.samples[1]??e.currentChunk.samples[0],r={duration:n.timescaleUnitsToNextSample,size:n.size,flags:Nh(n)};return Z(`tfhd`,0,t,[J(e.track.id),J(r.duration),J(r.size),J(r.flags)])},Ih=e=>(D(e.currentChunk),Z(`tfdt`,1,0,[Sm(Q(e.currentChunk.startTimestamp,e.timescale))])),Lh=e=>{D(e.currentChunk);let t=e.currentChunk.samples.map(e=>e.timescaleUnitsToNextSample),n=e.currentChunk.samples.map(e=>e.size),r=e.currentChunk.samples.map(Nh),i=e.currentChunk.samples.map(t=>Q(t.timestamp-t.decodeTimestamp,e.timescale)),a=new Set(t),o=new Set(n),s=new Set(r),c=new Set(i),l=s.size===2&&r[0]!==r[1],u=a.size>1,d=o.size>1,f=!l&&s.size>1,p=c.size>1||[...c].some(e=>e!==0),m=0;return m|=1,m|=4*l,m|=256*u,m|=512*d,m|=1024*f,m|=2048*p,Z(`trun`,1,m,[J(e.currentChunk.samples.length),J(e.currentChunk.offset-e.currentChunk.moofOffset||0),l?J(r[0]):[],e.currentChunk.samples.map((e,a)=>[u?J(t[a]):[],d?J(n[a]):[],f?J(r[a]):[],p?xm(i[a]):[]])])},Rh=e=>X(`mfra`,void 0,[...e.map(zh),Bh()]),zh=(e,t)=>Z(`tfra`,1,0,[J(e.track.id),J(63),J(e.finalizedChunks.length),e.finalizedChunks.map(n=>[Sm(Q(n.samples[0].timestamp,e.timescale)),Sm(n.moofOffset),J(t+1),J(1),J(1)])]),Bh=()=>Z(`mfro`,0,0,[J(0)]),Vh=()=>X(`vtte`),Hh=(e,t,n,r,i)=>X(`vttc`,void 0,[i===null?null:X(`vsid`,[xm(i)]),n===null?null:X(`iden`,[...M.encode(n)]),t===null?null:X(`ctim`,[...M.encode(mm(t))]),r===null?null:X(`sttg`,[...M.encode(r)]),X(`payl`,[...M.encode(e)])]),Uh=e=>X(`vtta`,[...M.encode(e)]),Wh=e=>{let t=[],n=e.format._options.metadataFormat??`auto`,r=e.output._metadataTags;if(n===`mdir`||n===`auto`&&!e.isQuickTime){let e=Yh(r);e&&t.push(e)}else if(n===`mdta`){let e=Xh(r);e&&t.push(e)}else (n===`udta`||n===`auto`&&e.isQuickTime)&&Gh(t,e.output._metadataTags);return t.length===0?null:X(`udta`,void 0,t)},Gh=(e,t)=>{for(let{key:n,value:r}of Kr(t))switch(n){case`title`:e.push(Kh(`©nam`,r));break;case`description`:e.push(Kh(`©des`,r));break;case`artist`:e.push(Kh(`©ART`,r));break;case`album`:e.push(Kh(`©alb`,r));break;case`albumArtist`:e.push(Kh(`albr`,r));break;case`genre`:e.push(Kh(`©gen`,r));break;case`date`:e.push(Kh(`©day`,r.toISOString().slice(0,10)));break;case`comment`:e.push(Kh(`©cmt`,r));break;case`lyrics`:e.push(Kh(`©lyr`,r));break;case`raw`:break;case`discNumber`:case`discsTotal`:case`trackNumber`:case`tracksTotal`:case`images`:break;default:pr(n)}if(t.raw)for(let n in t.raw){let r=t.raw[n];r==null||n.length!==4||e.some(e=>e.type===n)||(typeof r==`string`?e.push(Kh(n,r)):r instanceof Uint8Array&&e.push(X(n,Array.from(r))))}},Kh=(e,t)=>{let n=M.encode(t);return X(e,[q(n.length),q(ig(`und`)),Array.from(n)])},qh={"image/jpeg":13,"image/png":14,"image/bmp":27},Jh=(e,t)=>{let n=[];for(let{key:r,value:i}of Kr(e))switch(r){case`title`:n.push({key:t?`title`:`©nam`,value:Zh(i)});break;case`description`:n.push({key:t?`description`:`©des`,value:Zh(i)});break;case`artist`:n.push({key:t?`artist`:`©ART`,value:Zh(i)});break;case`album`:n.push({key:t?`album`:`©alb`,value:Zh(i)});break;case`albumArtist`:n.push({key:t?`album_artist`:`aART`,value:Zh(i)});break;case`comment`:n.push({key:t?`comment`:`©cmt`,value:Zh(i)});break;case`genre`:n.push({key:t?`genre`:`©gen`,value:Zh(i)});break;case`lyrics`:n.push({key:t?`lyrics`:`©lyr`,value:Zh(i)});break;case`date`:n.push({key:t?`date`:`©day`,value:Zh(i.toISOString().slice(0,10))});break;case`images`:for(let e of i)e.kind===`coverFront`&&n.push({key:`covr`,value:X(`data`,[J(qh[e.mimeType]??0),J(0),Array.from(e.data)])});break;case`trackNumber`:if(t){let t=e.tracksTotal===void 0?i.toString():`${i}/${e.tracksTotal}`;n.push({key:`track`,value:Zh(t)})}else n.push({key:`trkn`,value:X(`data`,[J(0),J(0),q(0),q(i),q(e.tracksTotal??0),q(0)])});break;case`discNumber`:t||n.push({key:`disc`,value:X(`data`,[J(0),J(0),q(0),q(i),q(e.discsTotal??0),q(0)])});break;case`tracksTotal`:case`discsTotal`:break;case`raw`:break;default:pr(r)}if(e.raw)for(let r in e.raw){let i=e.raw[r];i==null||!t&&r.length!==4||n.some(e=>e.key===r)||(typeof i==`string`?n.push({key:r,value:Zh(i)}):i instanceof Uint8Array?n.push({key:r,value:X(`data`,[J(0),J(0),Array.from(i)])}):i instanceof bi&&n.push({key:r,value:X(`data`,[J(qh[i.mimeType]??0),J(0),Array.from(i.data)])}))}return n},Yh=e=>{let t=Jh(e,!1);return t.length===0?null:Z(`meta`,0,0,void 0,[Km(!1,`mdir`,``,`appl`),X(`ilst`,void 0,t.map(e=>X(e.key,void 0,[e.value])))])},Xh=e=>{let t=Jh(e,!0);return t.length===0?null:X(`meta`,void 0,[Km(!1,`mdta`,``),Z(`keys`,0,0,[J(t.length)],t.map(e=>X(`mdta`,[...M.encode(e.key)]))),X(`ilst`,void 0,t.map((e,t)=>X(String.fromCharCode(...J(t+1)),void 0,[e.value])))])},Zh=e=>X(`data`,[J(1),J(0),...M.encode(e)]),Qh=(e,t)=>{switch(e){case`avc`:return t.startsWith(`avc3`)?`avc3`:`avc1`;case`hevc`:return`hvc1`;case`vp8`:return`vp08`;case`vp9`:return`vp09`;case`av1`:return`av01`}},$h={avc:oh,hevc:sh,vp8:ch,vp9:ch,av1:lh},eg=(e,t)=>{switch(e){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(e){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(e){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`}},tg=(e,t)=>{switch(e){case`aac`:return dh;case`mp3`:return dh;case`opus`:return hh;case`vorbis`:return dh;case`flac`:return gh;case`ac3`:return vh;case`eac3`:return yh}if(t)switch(e){case`pcm-s24`:return fh;case`pcm-s24be`:return fh;case`pcm-s32`:return fh;case`pcm-s32be`:return fh;case`pcm-f32`:return fh;case`pcm-f32be`:return fh;case`pcm-f64`:return fh;case`pcm-f64be`:return fh}else switch(e){case`pcm-s16`:return _h;case`pcm-s16be`:return _h;case`pcm-s24`:return _h;case`pcm-s24be`:return _h;case`pcm-s32`:return _h;case`pcm-s32be`:return _h;case`pcm-f32`:return _h;case`pcm-f32be`:return _h;case`pcm-f64`:return _h;case`pcm-f64be`:return _h}return null},ng={webvtt:`wvtt`},rg={webvtt:xh},ig=e=>{D(e.length===3);let t=0;for(let n=0;n<3;n++)t<<=5,t+=e.charCodeAt(n)-96;return t}})),og,sg=n((()=>{F(),og=class{constructor(e,t){if(this.finalized=!1,this.started=!1,this.pos=0,this.trackedWrites=null,this.trackedStart=-1,this.trackedEnd=-1,e._writerAcquired)throw Error(`Can't have multiple Writers for the same Target.`);this.target=e,e._setMonotonicity(t),e._writerAcquired=!0}start(){D(!this.started),this.target._start(),this.started=!0}write(e){D(this.started&&!this.finalized),this.maybeTrackWrites(e),this.target._write(e,this.pos),this.pos+=e.byteLength}seek(e){this.pos=e}getPos(){return this.pos}async flush(){return D(this.started&&!this.finalized),this.target._flush()}async finalize(){D(this.started&&!this.finalized),await this.target._finalize(),this.finalized=!0}maybeTrackWrites(e){if(!this.trackedWrites)return;let t=this.getPos();if(t<this.trackedStart){if(t+e.byteLength<=this.trackedStart)return;e=e.subarray(this.trackedStart-t),t=0}let n=t+e.byteLength-this.trackedStart,r=this.trackedWrites.byteLength;for(;r<n;)r*=2;if(r!==this.trackedWrites.byteLength){let e=new Uint8Array(r);e.set(this.trackedWrites,0),this.trackedWrites=e}this.trackedWrites.set(e,t-this.trackedStart),this.trackedEnd=Math.max(this.trackedEnd,t+e.byteLength)}startTrackingWrites(){this.trackedWrites=new Uint8Array(2**10),this.trackedStart=this.getPos(),this.trackedEnd=this.trackedStart}stopTrackingWrites(){if(!this.trackedWrites)throw Error(`Internal error: Can't get tracked writes since nothing was tracked.`);let e={data:this.trackedWrites.subarray(0,this.trackedEnd-this.trackedStart),start:this.trackedStart,end:this.trackedEnd};return this.trackedWrites=null,e}}})),cg,lg,ug,dg,fg,pg,mg,hg,gg,_g,vg,yg,bg,xg=n((()=>{ql(),F(),cg=Kl===void 0?void 0:Kl,lg=class extends gi{constructor(){super(...arguments),this._writerAcquired=!1,this._monotonicity=null,this.onwrite=null}_setMonotonicity(e){this._monotonicity!==!1&&(this._monotonicity=e)}_dispatchWrite(e,t){this.onwrite?.(e,t),this._emit(`write`,{start:e,end:t})}slice(e){if(!Number.isInteger(e)||e<0)throw TypeError(`offset must be a non-negative integer.`);return new yg(this,e)}},ug=2**16,dg=2**32,fg=class extends lg{constructor(e={}){if(super(),this.buffer=null,this._maxPos=0,!e||typeof e!=`object`)throw TypeError(`BufferTarget options, when provided, must be an object.`);if(e.onFinalize!==void 0&&typeof e.onFinalize!=`function`)throw TypeError(`options.onFinalize, when provided, must be a function.`);if(this._options=e,this._supportsResize=`resize`in new ArrayBuffer(0),this._supportsResize)try{this._buffer=new ArrayBuffer(ug,{maxByteLength:dg})}catch{this._buffer=new ArrayBuffer(ug),this._supportsResize=!1}else this._buffer=new ArrayBuffer(ug);this._bytes=new Uint8Array(this._buffer)}_ensureSize(e){let t=this._buffer.byteLength;for(;t<e;)t*=2;if(t!==this._buffer.byteLength){if(t>dg)throw Error(`ArrayBuffer exceeded maximum size of ${dg} bytes. Please consider using another target.`);if(this._supportsResize)this._buffer.resize(t);else{let e=new ArrayBuffer(t),n=new Uint8Array(e);n.set(this._bytes,0),this._buffer=e,this._bytes=n}}}_start(){}_write(e,t){this._ensureSize(t+e.byteLength),this._bytes.set(e,t),this._maxPos=Math.max(this._maxPos,t+e.byteLength),this._dispatchWrite(t,t+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,t){return this._bytes.slice(e,t)}},pg=2**24,mg=2,hg=class extends lg{constructor(e,t={}){if(super(),this._sections=[],this._lastWriteEnd=0,this._lastFlushEnd=0,this._streamWriter=null,this._writeError=null,this._chunks=[],!(e instanceof WritableStream))throw TypeError(`StreamTarget requires a WritableStream instance.`);if(t!=null&&typeof t!=`object`)throw TypeError(`StreamTarget options, when provided, must be an object.`);if(t.chunked!==void 0&&typeof t.chunked!=`boolean`)throw TypeError(`options.chunked, when provided, must be a boolean.`);if(t.chunkSize!==void 0&&(!Number.isInteger(t.chunkSize)||t.chunkSize<1024))throw TypeError(`options.chunkSize, when provided, must be an integer and not smaller than 1024.`);this._writable=e,this._options=t,this._chunked=t.chunked??!1,this._chunkSize=t.chunkSize??pg}_start(){this._streamWriter=this._writable.getWriter()}_write(e,t){if(t>this._lastWriteEnd){let e=t-this._lastWriteEnd;this._write(new Uint8Array(e),this._lastWriteEnd)}this._sections.push({data:e.slice(),start:t}),this._lastWriteEnd=Math.max(this._lastWriteEnd,t+e.byteLength),this._dispatchWrite(t,t+e.byteLength)}async _flush(){if(this._writeError!==null)throw this._writeError;if(D(this._streamWriter),this._sections.length===0)return;let e=[],t=[...this._sections].sort((e,t)=>e.start-t.start);e.push({start:t[0].start,size:t[0].data.byteLength});for(let n=1;n<t.length;n++){let r=e[e.length-1],i=t[n];i.start<=r.start+r.size?r.size=Math.max(r.size,i.start+i.data.byteLength-r.start):e.push({start:i.start,size:i.data.byteLength})}for(let t of e){t.data=new Uint8Array(t.size);for(let e of this._sections)t.start<=e.start&&e.start<t.start+t.size&&t.data.set(e.data,e.start-t.start);if(this._streamWriter.desiredSize!==null&&this._streamWriter.desiredSize<=0&&await this._streamWriter.ready,this._chunked)this._writeDataIntoChunks(t.data,t.start),this._tryToFlushChunks();else{if(this._monotonicity===!0&&t.start!==this._lastFlushEnd)throw Error(`Internal error: Monotonicity violation.`);this._streamWriter.write({type:`write`,data:t.data,position:t.start}).catch(e=>{this._writeError??=e}),this._lastFlushEnd=t.start+t.data.byteLength}}this._sections.length=0}_writeDataIntoChunks(e,t){let n=this._chunks.findIndex(e=>e.start<=t&&t<e.start+this._chunkSize);n===-1&&(n=this._createChunk(t));let r=this._chunks[n],i=t-r.start,a=e.subarray(0,Math.min(this._chunkSize-i,e.byteLength));r.data.set(a,i);let o={start:i,end:i+a.byteLength};if(this._insertSectionIntoChunk(r,o),r.written[0].start===0&&r.written[0].end===this._chunkSize&&(r.shouldFlush=!0),this._chunks.length>mg){for(let e=0;e<this._chunks.length-1;e++)this._chunks[e].shouldFlush=!0;this._tryToFlushChunks()}a.byteLength<e.byteLength&&this._writeDataIntoChunks(e.subarray(a.byteLength),t+a.byteLength)}_insertSectionIntoChunk(e,t){let n=0,r=e.written.length-1,i=-1;for(;n<=r;){let a=Math.floor(n+(r-n+1)/2);e.written[a].start<=t.start?(n=a+1,i=a):r=a-1}for(e.written.splice(i+1,0,t),(i===-1||e.written[i].end<t.start)&&i++;i<e.written.length-1&&e.written[i].end>=e.written[i+1].start;)e.written[i].end=Math.max(e.written[i].end,e.written[i+1].end),e.written.splice(i+1,1)}_createChunk(e){let t={start:Math.floor(e/this._chunkSize)*this._chunkSize,data:new Uint8Array(this._chunkSize),written:[],shouldFlush:!1};return this._chunks.push(t),this._chunks.sort((e,t)=>e.start-t.start),this._chunks.indexOf(t)}_tryToFlushChunks(e=!1){D(this._streamWriter);for(let t=0;t<this._chunks.length;t++){let n=this._chunks[t];if(!(!n.shouldFlush&&!e)){for(let e of n.written){let t=n.start+e.start;if(this._monotonicity===!0&&t!==this._lastFlushEnd)throw Error(`Internal error: Monotonicity violation.`);this._streamWriter.write({type:`write`,data:n.data.subarray(e.start,e.end),position:t}).catch(e=>{this._writeError??=e}),this._lastFlushEnd=n.start+e.end}this._chunks.splice(t--,1)}}}async _finalize(){if(this._chunked&&this._tryToFlushChunks(!0),this._writeError!==null)throw this._writeError;D(this._streamWriter),await this._streamWriter.ready,await this._streamWriter.close(),this._emit(`finalized`)}async _close(){return this._streamWriter?.close()}},gg=class extends lg{constructor(e){super(),this._writer=null,this._nextWritePos=0,this._writable=e,this._streamTarget=new hg(new WritableStream({start:()=>{this._writer=this._writable.getWriter()},write:e=>{if(this._monotonicity!==!0)throw Error(`AppendOnlyStreamTarget requires that data be written monotonically (always appended to the end). You must use a format that guarantees this behavior.`);return D(e.position===this._nextWritePos),this._nextWritePos+=e.data.byteLength,D(this._writer),this._writer.write(e.data)},close:()=>this._writer?.close()}))}_start(){this._streamTarget._start()}_write(e,t){this._streamTarget._write(e,t)}_flush(){return this._streamTarget._flush()}_finalize(){return this._streamTarget._finalize()}_close(){return this._streamTarget._close()}_setMonotonicity(e){super._setMonotonicity(e),this._streamTarget._setMonotonicity(e)}},_g=class extends lg{constructor(e,t={}){if(typeof e!=`string`)throw TypeError(`filePath must be a string.`);if(!t||typeof t!=`object`)throw TypeError(`options must be an object.`);if(!cg.fs)throw Error(`FilePathTarget is only available in server-side environments (Node.js, Bun, Deno).`);super(),this._fileHandle=null,this._streamTarget=new hg(new WritableStream({start:async()=>{this._fileHandle=await cg.fs.open(e,`w`)},write:async e=>{D(this._fileHandle),await this._fileHandle.write(e.data,0,e.data.byteLength,e.position)},close:async()=>{this._fileHandle&&=(await this._fileHandle.close(),null)}}),{chunked:!0,...t})}_start(){this._streamTarget._start()}_write(e,t){this._streamTarget._write(e,t),this._dispatchWrite(t,t+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)}},vg=class extends lg{_start(){}_write(e,t){this._dispatchWrite(t,t+e.byteLength)}async _flush(){}async _finalize(){this._emit(`finalized`)}async _close(){}},yg=class extends lg{constructor(e,t){super(),this._baseTarget=e,this._offset=t}_start(){}_write(e,t){this._baseTarget._write(e,this._offset+t),this._dispatchWrite(t,t+e.byteLength)}_flush(){return this._baseTarget._flush()}async _finalize(){this._emit(`finalized`)}async _close(){}_setMonotonicity(e){super._setMonotonicity(e),this._baseTarget._setMonotonicity(e)}},bg=class{constructor(e,t){if(this.rootPath=e,this.getTarget=t,typeof e!=`string`)throw TypeError(`rootPath must be a string.`);if(typeof t!=`function`)throw TypeError(`getTarget must be a function.`)}}})),Sg,Cg,wg,Q,Tg,Eg=n((()=>{ag(),em(),sg(),xg(),F(),tv(),hm(),Pi(),ma(),Kc(),Bp(),No(),Vo(),Xo(),Sg=57600,Cg=2082844800,wg=e=>{let t={},n=e.track;return n.metadata.name!==void 0&&(t.name=n.metadata.name),t},Q=(e,t,n=!0)=>{let r=e*t;return n?Math.round(r):r},Tg=class extends $p{constructor(e,t){super(e),this.writer=null,this.boxWriter=null,this.initWriter=null,this.initBoxWriter=null,this.auxTarget=new fg,this.auxWriter=new og(this.auxTarget,!1),this.auxBoxWriter=new gm(this.auxWriter),this.mdat=null,this.ftypSize=null,this.trackDatas=[],this.allTracksKnown=P(),this.creationTime=Math.floor(Date.now()/1e3)+Cg,this.finalizedChunks=[],this.nextFragmentNumber=1,this.maxWrittenTimestamp=-1/0,this.minWrittenTimestamp=1/0,this.maxWrittenEndTimestamp=-1/0,this.segmentHeaderSize=null,this.format=t,this.isQuickTime=t instanceof G_,this.isCmaf=t instanceof W_,this.minimumFragmentDuration=t._options.minimumFragmentDuration??(t instanceof W_?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(e=>this.format._options.fastStart===void 0?e instanceof fg:this.format._options.fastStart===`fragmented`),this.boxWriter=new gm(this.writer),this.fastStart=this.format._options.fastStart??(this.writer.target instanceof fg?`in-memory`:!1),this.isFragmented=this.fastStart===`fragmented`),this.isCmaf){if(!this.output._hasInitTarget())throw Error(`CMAF outputs require the initTarget field in OutputOptions to be set; the init segment will be written to it.`);let e=new og(await this.output._getInitTarget(),!0);e.start(),this.initWriter=e,this.initBoxWriter=new gm(e)}let t=this.output._tracks.some(e=>e.isVideoTrack()&&e.source._codec===`avc`);{let e=this.initBoxWriter??this.boxWriter;if(D(e),this.format._options.onFtyp&&e.writer.startTrackingWrites(),e.writeBox(jm({isQuickTime:this.isQuickTime,holdsAvc:t,fragmented:this.isFragmented,cmaf:this.isCmaf})),this.format._options.onFtyp){let{data:t,start:n}=e.writer.stopTrackingWrites();this.format._options.onFtyp(t,n)}this.ftypSize=e.writer.getPos(),this.isCmaf&&await this.initWriter.flush()}if(this.fastStart!==`in-memory`)if(this.fastStart===`reserve`){for(let e of this.output._tracks)if(e.metadata.maximumPacketCount===void 0)throw Error(`All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.`)}else this.isFragmented||(D(this.writer),D(this.boxWriter),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Pm(!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(t=>t.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(e=>e.type===`video`||e.type===`audio`?e.info.decoderConfig.codec:{webvtt:`wvtt`}[e.track.source._codec]);return Ro({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(e=>e.type===`video`),hasAudio:this.trackDatas.some(e=>e.type===`audio`),codecStrings:e})}getVideoTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;ua(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig};D(i.codedWidth!==void 0),D(i.codedHeight!==void 0);let a=!1;if(e.source._codec===`avc`&&!i.description){let e=Ha(t.data);if(!e)throw 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.`);i.description=Ua(e),a=!0}else if(e.source._codec===`hevc`&&!i.description){let e=Qa(t.data);if(!e)throw 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.`);i.description=oo(e),a=!0}let o=Pr(1/(e.metadata.frameRate??Sg),1e6).den,s=i.displayAspectWidth,c=i.displayAspectHeight,l=s===void 0||c===void 0?{num:1,den:1}:ri({num:s*i.codedHeight,den:c*i.codedWidth}),u={muxer:this,track:e,type:`video`,info:{width:i.codedWidth,height:i.codedHeight,pixelAspectRatio:l,decoderConfig:i,requiresAnnexBTransformation:a},timescale:o,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(u),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;fa(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig},a=!1;if(e.source._codec===`aac`&&!i.description){let e=Gc(Cp.tempFromBytes(t.data));if(!e)throw 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 n=Oi[e.samplingFrequencyIndex],r=ki[e.channelConfiguration];if(n===void 0||r===void 0)throw Error(`Invalid ADTS frame header.`);i.description=ji({objectType:e.objectType,sampleRate:n,numberOfChannels:r}),a=!0}let o={muxer:this,track:e,type:`audio`,info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:i,requiresPcmTransformation:!this.isFragmented&&Fi.includes(e.source._codec),expectedNextPcmPacketTimestamp:null,requiresAdtsStripping:a,firstPacket:t},timescale:i.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,startTimestampOffset:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],closed:!1};return this.trackDatas.push(o),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}getSubtitleTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;pa(t),D(t),D(t.config);let r={muxer:this,track:e,type:`subtitle`,info:{config:t.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(r),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),r}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,t,n),i=t.data;if(r.info.requiresAnnexBTransformation){let e=[...Na(i)].map(e=>i.subarray(e.offset,e.offset+e.length));if(e.length===0)throw 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.`);i=Ba(e,4)}this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let a=this.createSampleForTrack(r,i,t.timestamp,t.duration,t.type);await this.registerSample(r,a)}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,t,n),i=t.data;if(r.info.requiresAdtsStripping){let e=Gc(Cp.tempFromBytes(i));if(!e)throw Error(`Expected ADTS frame, didn't get one.`);let t=e.crcCheck===null?Uc:Wc;i=i.subarray(t)}this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let a=t.timestamp,o=t.duration;if(r.info.requiresPcmTransformation){let e=ta(r.info.decoderConfig.codec).sampleSize*r.info.numberOfChannels;if(o=i.byteLength/e/r.info.sampleRate,r.info.expectedNextPcmPacketTimestamp!==null){let e=a-r.info.expectedNextPcmPacketTimestamp;if(e<.01)a=r.info.expectedNextPcmPacketTimestamp;else{let t=await this.padWithSilence(r,r.info.expectedNextPcmPacketTimestamp,e);a=r.info.expectedNextPcmPacketTimestamp+t}}r.info.expectedNextPcmPacketTimestamp=a+o}let s=this.createSampleForTrack(r,i,a,o,t.type);await this.registerSample(r,s)}finally{r()}}async padWithSilence(e,t,n){let r=Q(n,e.timescale);if(n=r/e.timescale,r>0){let{sampleSize:i,silentValue:a}=ta(e.info.decoderConfig.codec),o=r*e.info.numberOfChannels,s=new Uint8Array(i*o).fill(a),c=this.createSampleForTrack(e,new Uint8Array(s.buffer),t,n,`key`);await this.registerSample(e,c)}return n}async addSubtitleCue(e,t,n){let r=await this.mutex.acquire();try{let r=this.getSubtitleTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,!0),e.source._codec===`webvtt`&&(r.cueQueue.push(t),await this.processWebVTTCues(r,t.timestamp))}finally{r()}}async processWebVTTCues(e,t){for(;e.cueQueue.length>0;){let n=new Set([]);for(let r of e.cueQueue)D(r.timestamp<=t),D(e.lastCueEndTimestamp<=r.timestamp+r.duration),n.add(Math.max(r.timestamp,e.lastCueEndTimestamp)),n.add(r.timestamp+r.duration);let r=[...n].sort((e,t)=>e-t),i=r[0],a=r[1]??i;if(t<a)break;if(e.lastCueEndTimestamp<i){this.auxWriter.seek(0);let t=Vh();this.auxBoxWriter.writeBox(t);let n=this.auxTarget._getSlice(0,this.auxWriter.getPos()),r=this.createSampleForTrack(e,n,e.lastCueEndTimestamp,i-e.lastCueEndTimestamp,`key`);await this.registerSample(e,r),e.lastCueEndTimestamp=i}this.auxWriter.seek(0);for(let t=0;t<e.cueQueue.length;t++){let n=e.cueQueue[t];if(n.timestamp>=a)break;um.lastIndex=0;let r=um.test(n.text),o=n.timestamp+n.duration,s=e.cueToSourceId.get(n);if(s===void 0&&a<o&&(s=e.nextSourceId++,e.cueToSourceId.set(n,s)),n.notes){let e=Uh(n.notes);this.auxBoxWriter.writeBox(e)}let c=Hh(n.text,r?i:null,n.identifier??null,n.settings??null,s??null);this.auxBoxWriter.writeBox(c),o===a&&e.cueQueue.splice(t--,1)}let o=this.auxTarget._getSlice(0,this.auxWriter.getPos()),s=this.createSampleForTrack(e,o,i,a-i,`key`);await this.registerSample(e,s),e.lastCueEndTimestamp=a}}createSampleForTrack(e,t,n,r,i){return{timestamp:n,decodeTimestamp:n,duration:r,data:t,size:t.byteLength,type:i,timescaleUnitsToNextSample:Q(r,e.timescale)}}processTimestamps(e,t){if(e.timestampProcessingQueue.length===0)return;if(e.type===`audio`&&e.info.requiresPcmTransformation){this.isFragmented||(e.startTimestampOffset??=e.timestampProcessingQueue[0].timestamp);let t=0;for(let n=0;n<e.timestampProcessingQueue.length;n++){let r=e.timestampProcessingQueue[n],i=Q(r.duration,e.timescale);t+=i}if(e.timeToSampleTable.length===0)e.timeToSampleTable.push({sampleCount:t,sampleDelta:1});else{let n=O(e.timeToSampleTable);n.sampleCount+=t}e.timestampProcessingQueue.length=0;return}let n=e.timestampProcessingQueue.map(e=>e.timestamp).sort((e,t)=>e-t);this.isFragmented||(e.startTimestampOffset??=n[0]);for(let t=0;t<e.timestampProcessingQueue.length;t++){let r=e.timestampProcessingQueue[t];r.decodeTimestamp=n[t];let i=Q(r.timestamp-r.decodeTimestamp,e.timescale),a=Q(r.duration,e.timescale);if(e.lastTimescaleUnits!==null){D(e.lastSample);let t=Q(r.decodeTimestamp,e.timescale,!1),n=Math.round(t-e.lastTimescaleUnits);if(D(n>=0),e.lastTimescaleUnits+=n,e.lastSample.timescaleUnitsToNextSample=n,!this.isFragmented){let t=O(e.timeToSampleTable);if(D(t),t.sampleCount===1){t.sampleDelta=n;let r=e.timeToSampleTable[e.timeToSampleTable.length-2];r&&r.sampleDelta===n&&(r.sampleCount++,e.timeToSampleTable.pop(),t=r)}else t.sampleDelta!==n&&(t.sampleCount--,e.timeToSampleTable.push(t={sampleCount:1,sampleDelta:n}));t.sampleDelta===a?t.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:a});let r=O(e.compositionTimeOffsetTable);D(r),r.sampleCompositionTimeOffset===i?r.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:i})}}else e.lastTimescaleUnits=Q(r.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:a}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:i}));e.lastSample=r}if(e.timestampProcessingQueue.length=0,D(e.lastSample),D(e.lastTimescaleUnits!==null),t!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){D(t.type===`key`);let n=Q(t.timestamp,e.timescale,!1),r=Math.round(n-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=r}}async registerSample(e,t){t.type===`key`&&this.processTimestamps(e,t),e.timestampProcessingQueue.push(t),this.isFragmented?(e.sampleQueue.push(t),await this.interleaveSamples()):this.fastStart===`reserve`?await this.registerSampleFastStartReserve(e,t):await this.addSampleToTrack(e,t)}async addSampleToTrack(e,t){if(!this.isFragmented&&(e.samples.push(t),this.fastStart===`reserve`)){let t=e.track.metadata.maximumPacketCount;if(D(t!==void 0),e.samples.length>t)throw Error(`Track #${e.track.id} has already reached the maximum packet count (${t}). 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,t.timestamp);let r=t.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){let i=this.trackDatas.every(n=>{if(e===n)return t.type===`key`;let r=n.sampleQueue[0];return r?r.type===`key`:n.closed});r>=this.minimumFragmentDuration&&i&&t.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=r>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:t.timestamp,samples:[],offset:null,moofOffset:null}),D(e.currentChunk),e.currentChunk.samples.push(t),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,t.timestamp),this.maxWrittenEndTimestamp=Math.max(this.maxWrittenEndTimestamp,t.timestamp+t.duration),this.minWrittenTimestamp=Math.min(this.minWrittenTimestamp,t.timestamp))}async finalizeCurrentChunk(e){if(D(!this.isFragmented),D(this.writer),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let t=e.currentChunk.samples.length;if(e.type===`audio`&&e.info.requiresPcmTransformation&&(t=e.currentChunk.samples.reduce((t,n)=>t+Q(n.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||O(e.compactlyCodedChunkTable).samplesPerChunk!==t)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:t}),this.fastStart===`in-memory`){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(let t of e.currentChunk.samples)D(t.data),this.writer.write(t.data),t.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(D(this.isFragmented),!(!e&&!this.allTracksAreKnown()))outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.sampleQueue.length===0&&!r.closed)break outer;r.sampleQueue.length>0&&r.sampleQueue[0].timestamp<n&&(t=r,n=r.sampleQueue[0].timestamp)}if(!t)break;let r=t.sampleQueue.shift();await this.addSampleToTrack(t,r)}}async finalizeFragment(e=!this.isCmaf){D(this.isFragmented);let t=this.nextFragmentNumber++;if(t===1){let e=this.initBoxWriter??this.boxWriter;D(e),this.format._options.onMoov&&e.writer.startTrackingWrites();let t=Im(this);if(e.writeBox(t),this.format._options.onMoov){let{data:t,start:n}=e.writer.stopTrackingWrites();this.format._options.onMoov(t,n)}this.isCmaf&&(D(this.initWriter),await this.initWriter.flush(),await this.initWriter.finalize(),this.writer=await this.output._getRootWriter(!0),this.boxWriter=new gm(this.writer),this.segmentHeaderSize=this.boxWriter.measureBox(Mm())+this.boxWriter.measureBox(Nm(this,0)),this.writer.seek(this.segmentHeaderSize))}D(this.writer),D(this.boxWriter);let n=this.trackDatas.filter(e=>e.currentChunk),r=jh(t,n),i=this.writer.getPos(),a=i+this.boxWriter.measureBox(r),o=a+Ho,s=1/0;for(let e of n){e.currentChunk.offset=o,e.currentChunk.moofOffset=i;for(let t of e.currentChunk.samples)o+=t.size;s=Math.min(s,e.currentChunk.startTimestamp)}let c=o-a,l=c>=2**32;if(l)for(let e of n)e.currentChunk.offset+=Uo-Ho;this.format._options.onMoof&&this.writer.startTrackingWrites();let u=jh(t,n);if(this.boxWriter.writeBox(u),this.format._options.onMoof){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoof(e,t,s)}D(this.writer.getPos()===a),this.format._options.onMdat&&this.writer.startTrackingWrites();let d=Pm(l);d.size=c,this.boxWriter.writeBox(d),this.writer.seek(a+(l?Uo:Ho));for(let e of n)for(let t of e.currentChunk.samples)this.writer.write(t.data),t.data=null;if(this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}for(let e of n)e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk),e.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,t){if(D(this.writer),D(this.boxWriter),this.allTracksAreKnown()){if(!this.mdat){let e=Im(this),t=this.boxWriter.measureBox(e)+this.computeSampleTableSizeUpperBound()+4096;D(this.ftypSize!==null),this.writer.seek(this.ftypSize+t),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Pm(!0),this.boxWriter.writeBox(this.mdat);for(let e of this.trackDatas){for(let t of e.sampleQueue)await this.addSampleToTrack(e,t);e.sampleQueue.length=0}}await this.addSampleToTrack(e,t)}else e.sampleQueue.push(t)}computeSampleTableSizeUpperBound(){D(this.fastStart===`reserve`);let e=0;for(let t of this.trackDatas){let n=t.track.metadata.maximumPacketCount;D(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 t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.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(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0,e.type===`subtitle`&&e.track.source._codec===`webvtt`&&await this.processWebVTTCues(e,1/0),this.processTimestamps(e);if(this.isFragmented)await this.interleaveSamples(!0),await this.finalizeFragment(!1);else for(let e of this.trackDatas){await this.finalizeCurrentChunk(e),D(e.startTimestampOffset!==null);for(let t=0;t<e.samples.length;t++){let n=e.samples[t];n.timestamp-=e.startTimestampOffset,n.decodeTimestamp-=e.startTimestampOffset}}if(D(this.writer),D(this.boxWriter),this.fastStart===`in-memory`){this.mdat=Pm(!1);let e;for(let t=0;t<2;t++){let t=Im(this),n=this.boxWriter.measureBox(t);e=this.boxWriter.measureBox(this.mdat);let r=this.writer.getPos()+n+e;for(let t of this.finalizedChunks){t.offset=r;for(let{data:n}of t.samples)D(n),r+=n.byteLength,e+=n.byteLength}if(r<2**32)break;e>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();let t=Im(this);if(this.boxWriter.writeBox(t),this.format._options.onMoov){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoov(e,t)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=e,this.boxWriter.writeBox(this.mdat);for(let e of this.finalizedChunks)for(let t of e.samples)D(t.data),this.writer.write(t.data),t.data=null;if(this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}}else if(this.isFragmented)if(this.isCmaf){let e=this.segmentHeaderSize===null?0:this.writer.getPos()-this.segmentHeaderSize;this.writer.seek(0),this.boxWriter.writeBox(Mm()),this.boxWriter.writeBox(Nm(this,e))}else{let e=this.writer.getPos(),t=Rh(this.trackDatas);this.boxWriter.writeBox(t);let n=this.writer.getPos()-e;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(n)}else{D(this.mdat);let e=this.boxWriter.offsets.get(this.mdat);D(e!==void 0);let t=this.writer.getPos()-e;if(this.mdat.size=t,this.mdat.largeSize=t>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMdat(e,t)}let n=Im(this);if(this.fastStart===`reserve`){D(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(n);let e=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(Fm(e))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(n);if(this.format._options.onMoov){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onMoov(e,t)}}e()}}})),Dg,Og,kg,Ag,jg,Mg,Ng,Pg=n((()=>{Di(),F(),nc(),ic(),tv(),hm(),Pi(),ma(),Kc(),Bp(),em(),No(),Ei(),Dg=-(2**15),Og=2**15-1,kg=`Mediabunny`,Ag=6,jg=5,Mg={video:1,audio:2,subtitle:17},Ng=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.allTracksKnown=P(),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=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!!this.format._options.appendOnly),this.ebmlWriter=new Bs(this.writer),this.writeEBMLHeader(),this.createSegmentInfo(),this.createCues(),await this.writer.flush(),e()}writeEBMLHeader(){this.format._options.onEbmlHeader&&this.writer.startTrackingWrites();let e={id:z.EBML,data:[{id:z.EBMLVersion,data:1},{id:z.EBMLReadVersion,data:1},{id:z.EBMLMaxIDLength,data:4},{id:z.EBMLMaxSizeLength,data:8},{id:z.DocType,data:this.format instanceof q_?`webm`:`matroska`},{id:z.DocTypeVersion,data:2},{id:z.DocTypeReadVersion,data:2}]};if(this.ebmlWriter.writeEBML(e),this.format._options.onEbmlHeader){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onEbmlHeader(e,t)}}maybeCreateSeekHead(e){if(this.format._options.appendOnly)return;let t=new Uint8Array([28,83,187,107]),n=new Uint8Array([21,73,169,102]),r=new Uint8Array([22,84,174,107]),i=new Uint8Array([25,65,164,105]),a=new Uint8Array([18,84,195,103]);this.seekHead={id:z.SeekHead,data:[{id:z.Seek,data:[{id:z.SeekID,data:t},{id:z.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.cues)-this.segmentDataOffset:0}]},{id:z.Seek,data:[{id:z.SeekID,data:n},{id:z.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.segmentInfo)-this.segmentDataOffset:0}]},{id:z.Seek,data:[{id:z.SeekID,data:r},{id:z.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.tracksElement)-this.segmentDataOffset:0}]},this.attachmentsElement?{id:z.Seek,data:[{id:z.SeekID,data:i},{id:z.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.attachmentsElement)-this.segmentDataOffset:0}]}:null,this.tagsElement?{id:z.Seek,data:[{id:z.SeekID,data:a},{id:z.SeekPosition,size:5,data:e?this.ebmlWriter.offsets.get(this.tagsElement)-this.segmentDataOffset:0}]}:null]}}createSegmentInfo(){let e={id:z.Duration,data:new As(0)};this.segmentDuration=e,this.segmentInfo={id:z.Info,data:[{id:z.TimestampScale,data:1e6},{id:z.MuxingApp,data:kg},{id:z.WritingApp,data:kg},this.format._options.appendOnly?null:e]}}createTracks(){let e={id:z.Tracks,data:[]};this.tracksElement=e;for(let t of this.trackDatas){let n=tc[t.track.source._codec];D(n);let r=0;if(t.type===`audio`&&t.track.source._codec===`opus`){r=1e6*80;let e=t.info.decoderConfig.description;if(e){let t=mo(A(e));r=Math.round(1e9*(t.preSkip/$i))}}e.data.push({id:z.TrackEntry,data:[{id:z.TrackNumber,data:t.track.id},{id:z.TrackUID,data:t.track.id},{id:z.TrackType,data:Mg[t.type]},t.track.metadata.disposition?.default===!1?{id:z.FlagDefault,data:0}:null,t.track.metadata.disposition?.forced?{id:z.FlagForced,data:1}:null,t.track.metadata.disposition?.hearingImpaired?{id:z.FlagHearingImpaired,data:1}:null,t.track.metadata.disposition?.visuallyImpaired?{id:z.FlagVisualImpaired,data:1}:null,t.track.metadata.disposition?.original?{id:z.FlagOriginal,data:1}:null,t.track.metadata.disposition?.commentary?{id:z.FlagCommentary,data:1}:null,{id:z.FlagLacing,data:0},{id:z.Language,data:t.track.metadata.languageCode??xr},{id:z.CodecID,data:n},{id:z.CodecDelay,data:0},{id:z.SeekPreRoll,data:r},t.track.metadata.name===void 0?null:{id:z.Name,data:new Ms(t.track.metadata.name)},t.type===`video`?this.videoSpecificTrackInfo(t):null,t.type===`audio`?this.audioSpecificTrackInfo(t):null,t.type===`subtitle`?this.subtitleSpecificTrackInfo(t):null]})}}videoSpecificTrackInfo(e){let{frameRate:t,rotation:n}=e.track.metadata,r=[e.info.decoderConfig.description?{id:z.CodecPrivate,data:A(e.info.decoderConfig.description)}:null,t?{id:z.DefaultDuration,data:1e9/t}:null],i=n?Bn(-n):0,a=!!e.info.aspectRatio&&e.info.aspectRatio.num*e.info.height!==e.info.aspectRatio.den*e.info.width,o=e.info.decoderConfig.colorSpace,s={id:z.Video,data:[{id:z.PixelWidth,data:e.info.width},{id:z.PixelHeight,data:e.info.height},a?{id:z.DisplayWidth,data:e.info.aspectRatio.num}:null,a?{id:z.DisplayHeight,data:e.info.aspectRatio.den}:null,a?{id:z.DisplayUnit,data:3}:null,e.info.alphaMode?{id:z.AlphaMode,data:1}:null,$n(o)?{id:z.Colour,data:[{id:z.MatrixCoefficients,data:Zn[o.matrix]},{id:z.TransferCharacteristics,data:Yn[o.transfer]},{id:z.Primaries,data:qn[o.primaries]},{id:z.Range,data:o.fullRange?2:1}]}:null,i?{id:z.Projection,data:[{id:z.ProjectionType,data:0},{id:z.ProjectionPoseRoll,data:new ks((i+180)%360-180)}]}:null]};return r.push(s),r}audioSpecificTrackInfo(e){let t=Fi.includes(e.track.source._codec)?ta(e.track.source._codec):null;return[e.info.decoderConfig.description?{id:z.CodecPrivate,data:A(e.info.decoderConfig.description)}:null,{id:z.Audio,data:[{id:z.SamplingFrequency,data:new ks(e.info.sampleRate)},{id:z.Channels,data:e.info.numberOfChannels},t?{id:z.BitDepth,data:8*t.sampleSize}:null]}]}subtitleSpecificTrackInfo(e){return[{id:z.CodecPrivate,data:M.encode(e.info.config.description)}]}maybeCreateTags(){let e=[],t=(t,n)=>{e.push({id:z.SimpleTag,data:[{id:z.TagName,data:new Ms(t)},typeof n==`string`?{id:z.TagString,data:new Ms(n)}:{id:z.TagBinary,data:n}]})},n=this.output._metadataTags,r=new Set;for(let{key:e,value:i}of Kr(n))switch(e){case`title`:t(`TITLE`,i),r.add(`TITLE`);break;case`description`:t(`DESCRIPTION`,i),r.add(`DESCRIPTION`);break;case`artist`:t(`ARTIST`,i),r.add(`ARTIST`);break;case`album`:t(`ALBUM`,i),r.add(`ALBUM`);break;case`albumArtist`:t(`ALBUM_ARTIST`,i),r.add(`ALBUM_ARTIST`);break;case`genre`:t(`GENRE`,i),r.add(`GENRE`);break;case`comment`:t(`COMMENT`,i),r.add(`COMMENT`);break;case`lyrics`:t(`LYRICS`,i),r.add(`LYRICS`);break;case`date`:t(`DATE`,i.toISOString().slice(0,10)),r.add(`DATE`);break;case`trackNumber`:t(`PART_NUMBER`,n.tracksTotal===void 0?i.toString():`${i}/${n.tracksTotal}`),r.add(`PART_NUMBER`);break;case`discNumber`:t(`DISC`,n.discsTotal===void 0?i.toString():`${i}/${n.discsTotal}`),r.add(`DISC`);break;case`tracksTotal`:case`discsTotal`:break;case`images`:case`raw`:break;default:pr(e)}if(n.raw)for(let e in n.raw){let i=n.raw[e];i==null||r.has(e)||(typeof i==`string`||i instanceof Uint8Array)&&t(e,i)}e.length!==0&&(this.tagsElement={id:z.Tags,data:[{id:z.Tag,data:[{id:z.Targets,data:[{id:z.TargetTypeValue,data:50},{id:z.TargetType,data:`MOVIE`}]},...e]}]})}maybeCreateAttachments(){let e=this.output._metadataTags,t=[],n=new Set,r=e.images??[];for(let e of r){let r=e.name;r===void 0&&(r=(e.kind===`coverFront`?`cover`:e.kind===`coverBack`?`back`:`image`)+(qr(e.mimeType)??``));let i;for(;;){i=0n;for(let e=0;e<8;e++)i<<=8n,i|=BigInt(Math.floor(Math.random()*256));if(i!==0n&&!n.has(i))break}n.add(i),t.push({id:z.AttachedFile,data:[e.description===void 0?null:{id:z.FileDescription,data:new Ms(e.description)},{id:z.FileName,data:new Ms(r)},{id:z.FileMediaType,data:e.mimeType},{id:z.FileData,data:e.data},{id:z.FileUID,data:i}]})}for(let[n,i]of Object.entries(e.raw??{}))i instanceof xi&&/^\d+$/.test(n)&&(r.find(e=>e.mimeType===i.mimeType&&Xr(e.data,i.data))||t.push({id:z.AttachedFile,data:[i.description===void 0?null:{id:z.FileDescription,data:new Ms(i.description)},{id:z.FileName,data:new Ms(i.name??``)},{id:z.FileMediaType,data:i.mimeType??``},{id:z.FileData,data:i.data},{id:z.FileUID,data:BigInt(n)}]}));t.length!==0&&(this.attachmentsElement={id:z.Attachments,data:t})}createSegment(){this.createTracks(),this.maybeCreateTags(),this.maybeCreateAttachments(),this.maybeCreateSeekHead(!1);let e={id:z.Segment,size:this.format._options.appendOnly?-1:Ag,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:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onSegmentHeader(e,t)}}createCues(){this.cues={id:z.Cues,data:[]}}get segmentDataOffset(){return D(this.segment),this.ebmlWriter.dataOffsets.get(this.segment)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(e=>e.type===`video`||e.type===`audio`?e.info.decoderConfig.codec:{webvtt:`wvtt`}[e.track.source._codec]);return rc({isWebM:this.format instanceof q_,hasVideo:this.trackDatas.some(e=>e.type===`video`),hasAudio:this.trackDatas.some(e=>e.type===`audio`),codecStrings:e})}getVideoTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;ua(n),D(n),D(n.decoderConfig),D(n.decoderConfig.codedWidth!==void 0),D(n.decoderConfig.codedHeight!==void 0);let i=n.decoderConfig.displayAspectWidth,a=n.decoderConfig.displayAspectHeight,o=i===void 0||a===void 0?null:ri({num:i,den:a}),s={track:e,type:`video`,info:{width:n.decoderConfig.codedWidth,height:n.decoderConfig.codedHeight,aspectRatio:o,decoderConfig:n.decoderConfig,alphaMode:!!t.sideData.alpha},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return e.source._codec===`vp9`?s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(Ki(s.info.decoderConfig.codec))}:e.source._codec===`av1`&&(s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(qi(s.info.decoderConfig.codec))}),this.trackDatas.push(s),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),s}getAudioTrackData(e,t,n){let r=this.trackDatas.find(t=>t.track===e);if(r)return r;fa(n),D(n),D(n.decoderConfig);let i={...n.decoderConfig},a=!1;if(e.source._codec===`aac`&&!i.description){let e=Gc(Cp.tempFromBytes(t.data));if(!e)throw 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 n=Oi[e.samplingFrequencyIndex],r=ki[e.channelConfiguration];if(n===void 0||r===void 0)throw Error(`Invalid ADTS frame header.`);i.description=ji({objectType:e.objectType,sampleRate:n,numberOfChannels:r}),a=!0}let o={track:e,type:`audio`,info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:i,requiresAdtsStripping:a},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(o),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}getSubtitleTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;pa(t),D(t),D(t.config);let r={track:e,type:`subtitle`,info:{config:t.config},chunkQueue:[],lastWrittenMsTimestamp:null,closed:!1};return this.trackDatas.push(r),this.trackDatas.sort((e,t)=>e.track.id-t.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),r}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,t,n),i=t.type===`key`;this.validateTimestamp(r.track,t.timestamp,i);let a=t.timestamp,o=t.duration;e.metadata.frameRate!==void 0&&(a=wr(a,e.metadata.frameRate),o=wr(o,e.metadata.frameRate));let s=r.info.alphaMode?t.sideData.alpha??null:null,c=this.createInternalChunk(t.data,a,o,t.type,s);e.source._codec===`vp9`&&this.fixVP9ColorSpace(r,c),r.chunkQueue.push(c),await this.interleaveChunks()}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,t,n),i=t.data;if(r.info.requiresAdtsStripping){let e=Gc(Cp.tempFromBytes(i));if(!e)throw Error(`Expected ADTS frame, didn't get one.`);let t=e.crcCheck===null?Uc:Wc;i=i.subarray(t)}let a=t.type===`key`;this.validateTimestamp(r.track,t.timestamp,a);let o=this.createInternalChunk(i,t.timestamp,t.duration,t.type);r.chunkQueue.push(o),await this.interleaveChunks()}finally{r()}}async addSubtitleCue(e,t,n){let r=await this.mutex.acquire();try{let r=this.getSubtitleTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,!0);let i=t.text,a=Math.round(t.timestamp*1e3);um.lastIndex=0,i=i.replace(um,e=>`<${mm(pm(e.slice(1,-1))-a)}>`);let o=M.encode(i),s=`${t.settings??``}\n${t.identifier??``}\n${t.notes??``}`,c=this.createInternalChunk(o,t.timestamp,t.duration,`key`,s.trim()?M.encode(s):null);r.chunkQueue.push(c),await this.interleaveChunks()}finally{r()}}async interleaveChunks(e=!1){if(!(!e&&!this.allTracksAreKnown())){outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.chunkQueue.length===0&&!r.closed)break outer;r.chunkQueue.length>0&&r.chunkQueue[0].timestamp<n&&(t=r,n=r.chunkQueue[0].timestamp)}if(!t)break;let r=t.chunkQueue.shift();this.writeBlock(t,r)}e||await this.writer.flush()}}fixVP9ColorSpace(e,t){if(t.type!==`key`||!e.info.decoderConfig.colorSpace||!e.info.decoderConfig.colorSpace.matrix)return;let n=new I(t.data);n.skipBits(2);let r=n.readBits(1),i=(n.readBits(1)<<1)+r;if(i===3&&n.skipBits(1),n.readBits(1)||n.readBits(1)!==0||(n.skipBits(2),n.readBits(24)!==4817730))return;i>=2&&n.skipBits(1);let a={rgb:7,bt709:2,bt470bg:1,smpte170m:3}[e.info.decoderConfig.colorSpace.matrix];Un(t.data,n.pos,n.pos+3,a)}createInternalChunk(e,t,n,r,i=null){return{data:e,type:r,timestamp:t,duration:n,additions:i}}writeBlock(e,t){this.segment||this.createSegment();let n=Math.round(1e3*t.timestamp),r=this.trackDatas.every(n=>{if(e===n)return t.type===`key`;let r=n.chunkQueue[0];return r?r.type===`key`:n.closed}),i=!1;if(!this.currentCluster)i=!0;else{D(this.currentClusterStartMsTimestamp!==null),D(this.currentClusterMaxMsTimestamp!==null);let e=n-this.currentClusterStartMsTimestamp;i=r&&n>this.currentClusterMaxMsTimestamp&&e>=1e3*(this.format._options.minimumClusterDuration??1)||e>Og}i&&this.createNewCluster(n);let a=n-this.currentClusterStartMsTimestamp;if(a<Dg)return;let o=new Uint8Array(4),s=new DataView(o.buffer);s.setUint8(0,128|e.track.id),s.setInt16(1,a,!1);let c=Math.round(1e3*t.duration);if(t.additions){let r={id:z.BlockGroup,data:[{id:z.Block,data:[o,t.data]},t.type===`delta`?{id:z.ReferenceBlock,data:new js(e.lastWrittenMsTimestamp-n)}:null,t.additions?{id:z.BlockAdditions,data:[{id:z.BlockMore,data:[{id:z.BlockAddID,data:1},{id:z.BlockAdditional,data:t.additions}]}]}:null,c>0?{id:z.BlockDuration,data:c}:null]};this.ebmlWriter.writeEBML(r)}else{s.setUint8(3,Number(t.type===`key`)<<7);let e={id:z.SimpleBlock,data:[o,t.data]};this.ebmlWriter.writeEBML(e)}this.startTimestamp=Math.min(this.startTimestamp,n),this.endTimestamp=Math.max(this.endTimestamp,n+c),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:z.Cluster,size:this.format._options.appendOnly?-1:jg,data:[{id:z.Timestamp,data:e}]},this.ebmlWriter.writeEBML(this.currentCluster),this.currentClusterStartMsTimestamp=e,this.currentClusterMaxMsTimestamp=e,this.trackDatasInCurrentCluster.clear()}finalizeCurrentCluster(){if(D(this.currentCluster),!this.format._options.appendOnly){let e=this.writer.getPos()-this.ebmlWriter.dataOffsets.get(this.currentCluster),t=this.writer.getPos();this.writer.seek(this.ebmlWriter.offsets.get(this.currentCluster)+4),this.ebmlWriter.writeVarInt(e,jg),this.writer.seek(t)}if(this.format._options.onCluster){D(this.currentClusterStartMsTimestamp!==null);let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onCluster(e,t,this.currentClusterStartMsTimestamp/1e3)}let e=this.ebmlWriter.offsets.get(this.currentCluster)-this.segmentDataOffset,t=new Map;for(let[e,{firstMsTimestamp:n}]of this.trackDatasInCurrentCluster)t.has(n)||t.set(n,[]),t.get(n).push(e);let n=[...t.entries()].sort((e,t)=>e[0]-t[0]);for(let[t,r]of n)D(this.cues),this.cues.data.push({id:z.CuePoint,data:[{id:z.CueTime,data:t},...r.map(t=>({id:z.CueTrackPositions,data:[{id:z.CueTrack,data:t.track.id},{id:z.CueClusterPosition,data:e}]}))]})}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleaveChunks(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0;if(this.segment||this.createSegment(),await this.interleaveChunks(!0),this.currentCluster&&this.finalizeCurrentCluster(),D(this.cues),this.ebmlWriter.writeEBML(this.cues),!this.format._options.appendOnly){let e=this.writer.getPos()-this.segmentDataOffset;this.writer.seek(this.ebmlWriter.offsets.get(this.segment)+4),this.ebmlWriter.writeVarInt(e,Ag);let t=this.startTimestamp===1/0?0:this.endTimestamp-this.startTimestamp;this.segmentDuration.data=new As(t),this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration)),this.ebmlWriter.writeEBML(this.segmentDuration),D(this.seekHead),this.writer.seek(this.ebmlWriter.offsets.get(this.seekHead)),this.maybeCreateSeekHead(!0),this.ebmlWriter.writeEBML(this.seekHead)}e()}}})),Fg,Ig=n((()=>{Da(),Fg=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer)}writeU32(e){this.helperView.setUint32(0,e,!1),this.writer.write(this.helper.subarray(0,4))}writeXingFrame(e){let t=this.writer.getPos(),n=224|e.mpegVersionId<<3|e.layer<<1,r;r=e.mpegVersionId&2&&e.mpegVersionId&1?0:1;let i=-1,a=r*16*4+e.layer*16;for(let t=0;t<16;t++){let n=_a[a+t];if(ba(r,e.layer,1e3*n,e.sampleRate,0)>=155){i=t;break}}if(i===-1)throw Error(`No suitable bitrate found.`);let o=i<<4|e.frequencyIndex<<2|0,s=e.channel<<6|e.modeExtension<<4|e.copyright<<3|e.original<<2|e.emphasis;this.helper[0]=255,this.helper[1]=n,this.helper[2]=o,this.helper[3]=s,this.writer.write(this.helper.subarray(0,4));let c=Sa(e.mpegVersionId,e.channel);this.writer.seek(t+c),this.writeU32(va);let l=0;e.frameCount!==null&&(l|=Ea.FrameCount),e.fileSize!==null&&(l|=Ea.FileSize),e.toc!==null&&(l|=Ea.Toc),this.writeU32(l),this.writeU32(e.frameCount??0),this.writeU32(e.fileSize??0),this.writer.write(e.toc??new Uint8Array(100));let u=_a[a+i],d=ba(r,e.layer,1e3*u,e.sampleRate,0);this.writer.seek(t+d)}}})),Lg,Rg=n((()=>{F(),Ei(),em(),Da(),Ig(),Qp(),Lg=class extends $p{constructor(e,t){super(e),this.xingFrameData=null,this.frameCount=0,this.framePositions=[],this.xingFramePos=null,this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(this.format._options.xingHeader===!1),this.mp3Writer=new Fg(this.writer),Ci(this.output._metadataTags)||new Zp(this.writer).writeId3V2Tag(this.output._metadataTags),e()}async getMimeType(){return`audio/mpeg`}async addEncodedVideoPacket(){throw Error(`MP3 does not support video.`)}async addEncodedAudioPacket(e,t){let n=await this.mutex.acquire();try{let n=this.format._options.xingHeader!==!1;if(!this.xingFrameData&&n){let e=j(t.data);if(e.byteLength<4)throw Error(`Invalid MP3 header in sample.`);let n=Ca(e.getUint32(0,!1),null).header;if(!n)throw Error(`Invalid MP3 header in sample.`);let r=Sa(n.mpegVersionId,n.channel);if(e.byteLength>=r+4){let t=e.getUint32(r,!1);if(t===va||t===ya)return}this.xingFrameData={mpegVersionId:n.mpegVersionId,layer:n.layer,frequencyIndex:n.frequencyIndex,sampleRate:n.sampleRate,channel:n.channel,modeExtension:n.modeExtension,copyright:n.copyright,original:n.original,emphasis:n.emphasis,frameCount:null,fileSize:null,toc:null},this.xingFramePos=this.writer.getPos(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.frameCount++}this.validateTimestamp(e,t.timestamp,t.type===`key`),n&&this.framePositions.push(this.writer.getPos()),this.writer.write(t.data),this.frameCount++,await this.writer.flush()}finally{n()}}async addSubtitleCue(){throw Error(`MP3 does not support subtitles.`)}async finalize(){if(!this.xingFrameData||this.xingFramePos===null)return;let e=await this.mutex.acquire(),t=this.writer.getPos()-this.xingFramePos;this.writer.seek(this.xingFramePos);let n=new Uint8Array(100);for(let e=0;e<100;e++){let r=Math.floor(this.framePositions.length*(e/100));n[e]=256*((this.framePositions[r]-this.xingFramePos)/t)}if(this.xingFrameData.frameCount=this.frameCount,this.xingFrameData.fileSize=t,this.xingFrameData.toc=n,this.format._options.onXingFrame&&this.writer.startTrackingWrites(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.format._options.onXingFrame){let{data:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onXingFrame(e,t)}e()}}})),zg,Bg,Vg=n((()=>{ma(),No(),F(),em(),Ec(),Mc(),zg=8192,Bg=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.bosPagesWritten=!1,this.allTracksKnown=P(),this.pageBytes=new Uint8Array(kc),this.pageView=new DataView(this.pageBytes.buffer),this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,Tc({codecStrings:this.trackDatas.map(e=>e.codecInfo.codec)})}addEncodedVideoPacket(){throw Error(`Video tracks are not supported.`)}getTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;let r;do r=Math.floor(2**32*Math.random());while(this.trackDatas.some(e=>e.serialNumber===r));D(e.source._codec===`vorbis`||e.source._codec===`opus`),fa(t),D(t),D(t.decoderConfig);let i={track:e,serialNumber:r,internalSampleRate:e.source._codec===`opus`?$i:t.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(i,t),this.trackDatas.push(i),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),i}queueHeaderPackets(e,t){if(D(t.decoderConfig),e.track.source._codec===`vorbis`){D(t.decoderConfig.description);let n=A(t.decoderConfig.description);if(n[0]!==2)throw TypeError(`First byte of Vorbis decoder description must be 2.`);let r=1,i=()=>{let e=0;for(;;){let t=n[r++];if(t===void 0)throw TypeError(`Vorbis decoder description is too short.`);if(e+=t,t<255)return e}},a=i(),o=i();if(n.length-r<=0)throw TypeError(`Vorbis decoder description is too short.`);let s=n.subarray(r,r+=a);r+=o;let c=n.subarray(r),l=new Uint8Array(7);l[0]=3,l[1]=118,l[2]=111,l[3]=114,l[4]=98,l[5]=105,l[6]=115;let u=xo(l,this.output._metadataTags,!0);e.packetQueue.push({data:s,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:u,timestampInSamples:0,durationInSamples:0,forcePageFlush:!1},{data:c,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0});let d=j(s).getUint8(28);e.codecInfo.vorbisInfo={blocksizes:[1<<(d&15),1<<(d>>4)],modeBlockflags:_o(c).modeBlockflags}}else if(e.track.source._codec===`opus`){if(!t.decoderConfig.description)throw TypeError(`For Ogg, Opus decoder description is required.`);let n=A(t.decoderConfig.description),r=new Uint8Array(8),i=j(r);i.setUint32(0,1332770163,!1),i.setUint32(4,1415669619,!1);let a=xo(r,this.output._metadataTags,!0);e.packetQueue.push({data:n,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:a,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0}),e.codecInfo.opusInfo={preSkip:mo(n).preSkip}}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=r.currentTimestampInSamples,{durationInSamples:a,vorbisBlockSize:o}=wc(t.data,r.codecInfo,r.vorbisLastBlocksize);r.currentTimestampInSamples+=a,r.vorbisLastBlocksize=o,r.packetQueue.push({data:t.data,timestampInSamples:i,durationInSamples:a,forcePageFlush:!1}),await this.interleavePages()}finally{r()}}addSubtitleCue(){throw Error(`Subtitle tracks are not supported.`)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async interleavePages(e=!1){if(!this.bosPagesWritten){if(!this.allTracksAreKnown()&&!e)return;for(let e of this.trackDatas)for(;e.packetQueue.length>0;){let t=e.packetQueue.shift();if(this.writePacket(e,t,!1),t.forcePageFlush)break}this.bosPagesWritten=!0}outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.packetQueue.length<=1&&!r.closed)break outer;r.packetQueue.length>0&&r.packetQueue[0].timestampInSamples<n&&(t=r,n=r.packetQueue[0].timestampInSamples)}if(!t)break;let r=t.packetQueue.shift(),i=t.packetQueue.length===0;this.writePacket(t,r,i)}e||await this.writer.flush()}writePacket(e,t,n){let r=t.timestampInSamples+t.durationInSamples;if(this.format._options.maximumPageDuration!==void 0){let t=this.format._options.maximumPageDuration*e.internalSampleRate;e.currentLacingValues.length>0&&r-e.currentPageStartTimestampInSamples>t&&this.writePage(e,!1)}let i=t.data.length,a=0,o=0;for(;;){e.currentLacingValues.length===0&&a>0&&(e.currentPageStartsWithFreshPacket=!1);let r=Math.min(255,i);e.currentLacingValues.push(r),e.currentPageSize++,o+=r;let s=i<255;if(e.currentLacingValues.length===255){let r=t.data.subarray(a,o);if(a=o,e.currentPageData.push(r),e.currentPageSize+=r.length,this.writePage(e,n&&s),s)return}if(s)break;i-=255}let s=t.data.subarray(a);e.currentPageData.push(s),e.currentPageSize+=s.length,e.currentGranulePosition=r,(e.currentPageSize>=zg||t.forcePageFlush)&&this.writePage(e,n)}writePage(e,t){this.pageView.setUint32(0,bc,!0),this.pageView.setUint8(4,0);let n=0;e.currentPageStartsWithFreshPacket||(n|=1),e.pagesWritten===0&&(n|=2),t&&(n|=4),this.pageView.setUint8(5,n);let r=e.currentLacingValues.every(e=>e===255)?-1:e.currentGranulePosition;vr(this.pageView,6,r,!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 i=27+e.currentLacingValues.length;for(let t of e.currentPageData)this.pageBytes.set(t,i),i+=t.length;let a=this.pageBytes.subarray(0,i),o=Cc(a);if(this.pageView.setUint32(22,o,!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(a),this.format._options.onPage){let{data:t,start:n}=this.writer.stopTrackingWrites();this.format._options.onPage(t,n,e.track.source)}}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePages(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0;await this.interleavePages(!0);for(let e of this.trackDatas)e.currentLacingValues.length>0&&this.writePage(e,!0);e()}}})),Hg,Ug,Wg,Gg,Kg,qg,Jg,Yg,Xg,Zg,Qg,$g,e_,t_=n((()=>{Pi(),ma(),No(),Di(),F(),em(),ul(),Hg=0,Ug=4096,Wg=256,Gg=224,Kg=192,qg=new Uint8Array([9,240]),Jg=new Uint8Array([70,1]),Yg=class extends $p{constructor(e,t){super(e),this.trackDatas=[],this.tablesWritten=!1,this.continuityCounters=new Map,this.packetBuffer=new Uint8Array(cl),this.packetView=j(this.packetBuffer),this.allTracksKnown=P(),this.videoTrackIndex=0,this.audioTrackIndex=0,this.adaptationFieldBuffer=new Uint8Array(184),this.payloadBuffer=new Uint8Array(184),this.format=t}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!0),e()}async getMimeType(){return await this.allTracksKnown.promise,ll(this.trackDatas.map(e=>e.codecString))}getVideoTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;ua(t),D(t?.decoderConfig);let r=e.source._codec;D(r===`avc`||r===`hevc`);let i=r===`avc`?27:36,a={track:e,pid:Wg+this.trackDatas.length,streamType:i,streamId:Gg+ this.videoTrackIndex++,codecString:t.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(a),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}getAudioTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;fa(t),D(t?.decoderConfig);let r=e.source._codec;D(r===`aac`||r===`mp3`||r===`ac3`||r===`eac3`);let i,a;switch(r){case`aac`:i=15,a=Kg+ this.audioTrackIndex++;break;case`mp3`:i=3,a=Kg+ this.audioTrackIndex++;break;case`ac3`:i=129,a=189;break;case`eac3`:i=135,a=189;break}let o={track:e,pid:Wg+this.trackDatas.length,streamType:i,streamId:a,codecString:t.decoderConfig.codec,timestampProcessingQueue:[],packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1,closed:!1};return this.trackDatas.push(o),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),o}async addEncodedVideoPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getVideoTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=this.prepareVideoPacket(r,t,n);t.type===`key`&&await this.flushTimestampQueue(r),r.timestampProcessingQueue.push({data:i,presentationTimestamp:t.timestamp,decodeTimestamp:null,isKeyframe:t.type===`key`})}finally{r()}}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{let r=this.getAudioTrackData(e,n);this.validateTimestamp(r.track,t.timestamp,t.type===`key`);let i=this.prepareAudioPacket(r,t,n);t.type===`key`&&await this.flushTimestampQueue(r),r.timestampProcessingQueue.push({data:i,presentationTimestamp:t.timestamp,decodeTimestamp:null,isKeyframe:t.type===`key`})}finally{r()}}async addSubtitleCue(){throw Error(`MPEG-TS does not support subtitles.`)}prepareVideoPacket(e,t,n){let r=e.track.source._codec;if(e.inputIsAnnexB===null){let t=n?.decoderConfig?.description;if(e.inputIsAnnexB=!t,!e.inputIsAnnexB){let n=A(t);r===`avc`?e.avcDecoderConfig=Wa(n):e.hevcDecoderConfig=so(n)}}return e.inputIsAnnexB?this.prepareAnnexBVideoPacket(t.data,r):this.prepareLengthPrefixedVideoPacket(e,t,r)}prepareAnnexBVideoPacket(e,t){let n=[];for(let r of Na(e)){let i=e.subarray(r.offset,r.offset+r.length);(t===`avc`?Ia(i[0])===ja.AUD:Xa(i[0])===Ma.AUD_NUT)||n.push(i)}let r=t===`avc`?qg:Jg;return n.unshift(r),za(n)}prepareLengthPrefixedVideoPacket(e,t,n){let r=t.data,i=n===`avc`?e.avcDecoderConfig.lengthSizeMinusOne+1:e.hevcDecoderConfig.lengthSizeMinusOne+1,a=[];for(let e of Pa(r,i)){let t=r.subarray(e.offset,e.offset+e.length);(n===`avc`?Ia(t[0])===ja.AUD:Xa(t[0])===Ma.AUD_NUT)||a.push(t)}if(t.type===`key`)if(n===`avc`){let t=e.avcDecoderConfig;for(let e of t.pictureParameterSets)a.unshift(e);for(let e of t.sequenceParameterSets)a.unshift(e)}else{let t=e.hevcDecoderConfig;for(let e of t.arrays)if(e.nalUnitType===Ma.PPS_NUT)for(let t of e.nalUnits)a.unshift(t);for(let e of t.arrays)if(e.nalUnitType===Ma.SPS_NUT)for(let t of e.nalUnits)a.unshift(t);for(let e of t.arrays)if(e.nalUnitType===Ma.VPS_NUT)for(let t of e.nalUnits)a.unshift(t)}let o=n===`avc`?qg:Jg;return a.unshift(o),za(a)}prepareAudioPacket(e,t,n){let r=e.track.source._codec;if(r===`mp3`||r===`ac3`||r===`eac3`)return t.data;if(e.inputIsAdts===null){let t=n?.decoderConfig?.description;if(e.inputIsAdts=!t,!e.inputIsAdts){let n=Mi(Ai(A(t)));e.adtsHeader=n.header,e.adtsHeaderBitstream=n.bitstream}}if(e.inputIsAdts)return t.data;D(e.adtsHeader),D(e.adtsHeaderBitstream);let i=e.adtsHeader,a=t.data.byteLength+i.byteLength;Ni(e.adtsHeaderBitstream,a);let o=new Uint8Array(a);return o.set(i,0),o.set(t.data,i.byteLength),o}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(t=>t.track===e))return!1;return!0}async flushTimestampQueue(e,t=!0){if(e.timestampProcessingQueue.length===0)return;let n=e.timestampProcessingQueue.map(e=>e.presentationTimestamp).sort((e,t)=>e-t);for(let t=0;t<e.timestampProcessingQueue.length;t++){let r=e.timestampProcessingQueue[t];r.decodeTimestamp=n[t],e.packetQueue.push(r)}e.timestampProcessingQueue.length=0,t&&await this.interleavePackets()}async interleavePackets(e=!1){if(!this.tablesWritten){if(!this.allTracksAreKnown()&&!e)return;this.writeTables()}outer:for(;;){let t=null,n=1/0;for(let r of this.trackDatas){if(!e&&r.packetQueue.length===0&&!r.closed)break outer;r.packetQueue.length>0&&r.packetQueue[0].presentationTimestamp<n&&(t=r,n=r.packetQueue[0].presentationTimestamp)}if(!t)break;let r=t.packetQueue.shift();this.writePesPacket(t,r)}e||await this.writer.flush()}writeTables(){D(!this.tablesWritten),this.writePsiSection(Hg,$g),this.writePsiSection(Ug,e_(this.trackDatas)),this.tablesWritten=!0}writePsiSection(e,t){let n=0,r=!0;for(;n<t.length;){let i=184-(r?1:0),a=t.length-n,o=Math.min(i,a),s;r?(s=this.payloadBuffer.subarray(0,1+o),s[0]=0,s.set(t.subarray(n,n+o),1)):s=t.subarray(n,n+o),this.writeTsPacket(e,r,null,s),n+=o,r=!1}}writePesPacket(e,t){let n=e.track.type===`video`,r=n?10:5,i=new Uint8Array(9+r),a=j(i),o=new I(i.subarray(9));gr(a,0,1,!1),i[3]=e.streamId;let s=e.track.type===`video`?0:Math.min(8+t.data.length,65535);a.setUint16(4,s,!1),a.setUint8(6,132),a.setUint8(7,n?192:128),a.setUint8(8,r);let c=Math.round(t.presentationTimestamp*sl);if(o.pos=0,o.writeBits(4,n?3:2),o.writeBits(3,c>>>30&7),o.writeBits(1,1),o.writeBits(15,c>>>15&32767),o.writeBits(1,1),o.writeBits(15,c&32767),o.writeBits(1,1),n){D(t.decodeTimestamp!==null);let e=Math.round(t.decodeTimestamp*sl);o.writeBits(4,1),o.writeBits(3,e>>>30&7),o.writeBits(1,1),o.writeBits(15,e>>>15&32767),o.writeBits(1,1),o.writeBits(15,e&32767),o.writeBits(1,1)}let l=i.length+t.data.length,u=0,d=!0;for(;u<l;){let n=d,r=l-u,a=d&&t.isKeyframe,o=d&&!e.firstPacketWritten,s=Math.max(0,184-r),c;c=a||o?Math.max(2,s):s;let f=null;if(c>0){let e=this.adaptationFieldBuffer;c===1?e[0]=0:(e[0]=c-1,e[1]=Number(o)<<7|Number(a)<<6,e.fill(255,2,c)),f=e.subarray(0,c)}let p=Math.min(184-c,r),m=this.payloadBuffer.subarray(0,p),h=0;if(u<i.length){let e=Math.min(i.length-u,p);m.set(i.subarray(u,u+e),0),h=e}let g=Math.max(0,u-i.length),_=g+(p-h);h<p&&m.set(t.data.subarray(g,_),h),this.writeTsPacket(e.pid,n,f,m),u+=p,d=!1}e.firstPacketWritten=!0}writeTsPacket(e,t,n,r){let i=this.continuityCounters.get(e)??0,a=r.length>0,o=n?a?3:2:a?1:0;this.packetBuffer[0]=71,this.packetView.setUint16(1,(t?16384:0)|e&8191,!1),this.packetBuffer[3]=o<<4|i&15,a&&this.continuityCounters.set(e,i+1&15);let s=4;n&&(this.packetBuffer.set(n,s),s+=n.length),this.packetBuffer.set(r,s),s+=r.length,s<cl&&this.packetBuffer.fill(255,s);let c=this.writer.getPos();this.writer.write(this.packetBuffer),this.format._options.onPacket&&this.format._options.onPacket(this.packetBuffer.slice(),c)}async onTrackClose(e){let t=await this.mutex.acquire(),n=this.trackDatas.find(t=>t.track===e);n&&(n.closed=!0,await this.flushTimestampQueue(n,!1)),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePackets(),t()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let e of this.trackDatas)e.closed=!0,await this.flushTimestampQueue(e,!1);await this.interleavePackets(!0),e()}},Xg=79764919,Zg=new Uint32Array(256);for(let e=0;e<256;e++){let t=e<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Xg:t<<1;Zg[e]=t>>>0&4294967295}Qg=e=>{let t=4294967295;for(let n=0;n<e.length;n++){let r=e[n];t=(t<<8^Zg[t>>>24^r])>>>0}return t},$g=new Uint8Array(16);{let e=j($g);$g[0]=0,e.setUint16(1,45069,!1),e.setUint16(3,1,!1),$g[5]=193,$g[6]=0,$g[7]=0,e.setUint16(8,1,!1),e.setUint16(10,57344|Ug&8191,!1),e.setUint32(12,Qg($g.subarray(0,12)),!1)}e_=e=>{let t=0;for(let n of e)t+=5,n.streamType===129?t+=Eo.length:n.streamType===135&&(t+=Do.length);let n=9+t+4,r=new Uint8Array(3+n-4),i=j(r);r[0]=2,i.setUint16(1,45056|n&4095,!1),i.setUint16(3,1,!1),r[5]=193,r[6]=0,r[7]=0,i.setUint16(8,65535,!1),i.setUint16(10,61440,!1);let a=12;for(let t of e)r[a++]=t.streamType,i.setUint16(a,57344|t.pid&8191,!1),a+=2,t.streamType===129?(i.setUint16(a,61440|Eo.length,!1),a+=2,r.set(Eo,a),a+=Eo.length):t.streamType===135?(i.setUint16(a,61440|Do.length,!1),a+=2,r.set(Do,a),a+=Do.length):(i.setUint16(a,61440,!1),a+=2);let o=Qg(r),s=new Uint8Array(r.length+4);return s.set(r,0),j(s).setUint32(r.length,o,!1),s}})),n_,r_=n((()=>{n_=class{constructor(e){this.writer=e,this.helper=new Uint8Array(8),this.helperView=new DataView(this.helper.buffer)}writeU16(e){this.helperView.setUint16(0,e,!0),this.writer.write(this.helper.subarray(0,2))}writeU32(e){this.helperView.setUint32(0,e,!0),this.writer.write(this.helper.subarray(0,4))}writeU64(e){this.helperView.setUint32(0,e,!0),this.helperView.setUint32(4,Math.floor(e/2**32),!0),this.writer.write(this.helper)}writeAscii(e){this.writer.write(new TextEncoder().encode(e))}}})),i_,a_=n((()=>{em(),ma(),Hc(),r_(),F(),Ei(),Qp(),i_=class extends $p{constructor(e,t){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=t,this.isRf64=!!t._options.large}async start(){let e=await this.mutex.acquire();this.writer=await this.output._getRootWriter(!1),this.riffWriter=new n_(this.writer),e()}async getMimeType(){return`audio/wav`}async addEncodedVideoPacket(){throw Error(`WAVE does not support video.`)}async addEncodedAudioPacket(e,t,n){let r=await this.mutex.acquire();try{if(this.headerWritten||=(fa(n),D(n),D(n.decoderConfig),this.writeHeader(e,n.decoderConfig),this.sampleRate=n.decoderConfig.sampleRate,!0),this.validateTimestamp(e,t.timestamp,t.type===`key`),!this.isRf64&&this.writer.getPos()+t.data.byteLength>=2**32)throw 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(t.data),this.dataSize+=t.data.byteLength,this.sampleCount+=Math.round(t.duration*this.sampleRate),await this.writer.flush()}finally{r()}}async addSubtitleCue(){throw Error(`WAVE does not support subtitles.`)}writeHeader(e,t){this.format._options.onHeader&&this.writer.startTrackingWrites();let n,r=e.source._codec,i=ta(r);n=i.dataType===`ulaw`?Rc.MULAW:i.dataType===`alaw`?Rc.ALAW:i.dataType===`float`?Rc.IEEE_FLOAT:Rc.PCM;let a=t.numberOfChannels,o=t.sampleRate,s=i.sampleSize*a;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(a),this.riffWriter.writeU32(o),this.riffWriter.writeU32(o*s),this.riffWriter.writeU16(s),this.riffWriter.writeU16(8*i.sampleSize),!Ci(this.output._metadataTags)){let e=this.format._options.metadataFormat??`info`;e===`info`?this.writeInfoChunk(this.output._metadataTags):e===`id3`?this.writeId3Chunk(this.output._metadataTags):pr(e)}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:e,start:t}=this.writer.stopTrackingWrites();this.format._options.onHeader(e,t)}}writeInfoChunk(e){let t=this.writer.getPos();this.riffWriter.writeAscii(`LIST`),this.riffWriter.writeU32(0),this.riffWriter.writeAscii(`INFO`);let n=new Set,r=(e,t)=>{if(!Gn(t)){console.warn(`Didn't write tag '${e}' because '${t}' is not ISO 8859-1-compatible.`);return}let r=t.length+1,i=new Uint8Array(r);for(let e=0;e<t.length;e++)i[e]=t.charCodeAt(e);this.riffWriter.writeAscii(e),this.riffWriter.writeU32(r),this.writer.write(i),r&1&&this.writer.write(new Uint8Array(1)),n.add(e)};for(let{key:t,value:i}of Kr(e))switch(t){case`title`:r(`INAM`,i),n.add(`INAM`);break;case`artist`:r(`IART`,i),n.add(`IART`);break;case`album`:r(`IPRD`,i),n.add(`IPRD`);break;case`trackNumber`:r(`ITRK`,e.tracksTotal===void 0?i.toString():`${i}/${e.tracksTotal}`),n.add(`ITRK`);break;case`genre`:r(`IGNR`,i),n.add(`IGNR`);break;case`date`:r(`ICRD`,i.toISOString().slice(0,10)),n.add(`ICRD`);break;case`comment`:r(`ICMT`,i),n.add(`ICMT`);break;case`albumArtist`:case`discNumber`:case`tracksTotal`:case`discsTotal`:case`description`:case`lyrics`:case`images`:break;case`raw`:break;default:pr(t)}if(e.raw)for(let t in e.raw){let i=e.raw[t];i==null||t.length!==4||n.has(t)||typeof i==`string`&&r(t,i)}let i=this.writer.getPos(),a=i-t-8;this.writer.seek(t+4),this.riffWriter.writeU32(a),this.writer.seek(i),a&1&&this.writer.write(new Uint8Array(1))}writeId3Chunk(e){let t=this.writer.getPos();this.riffWriter.writeAscii(`ID3 `),this.riffWriter.writeU32(0);let n=new Zp(this.writer).writeId3V2Tag(e),r=this.writer.getPos();this.writer.seek(t+4),this.riffWriter.writeU32(n),this.writer.seek(r),n&1&&this.writer.write(new Uint8Array(1))}async finalize(){let e=await this.mutex.acquire(),t=this.writer.getPos();this.isRf64?(D(this.ds64RiffSizePos!==null),this.writer.seek(this.ds64RiffSizePos),this.riffWriter.writeU64(t-8),D(this.ds64DataSizePos!==null),this.writer.seek(this.ds64DataSizePos),this.riffWriter.writeU64(this.dataSize),D(this.ds64SampleCountPos!==null),this.writer.seek(this.ds64SampleCountPos),this.riffWriter.writeU64(this.sampleCount)):(D(this.riffSizePos!==null),this.writer.seek(this.riffSizePos),this.riffWriter.writeU32(t-8),D(this.dataSizePos!==null),this.writer.seek(this.dataSizePos),this.riffWriter.writeU32(this.dataSize)),e()}}})),o_,s_=n((()=>{F(),Xd(),o_=class{constructor(e){this.sourceSampleRate=null,this.sourceNumberOfChannels=null,this.maxWrittenFrame=null,this.targetSampleRate=e.targetSampleRate,this.targetNumberOfChannels=e.targetNumberOfChannels,this.endTime=e.endTime,this.onSample=e.onSample,this.bufferSizeInFrames=Math.floor(this.targetSampleRate*5),this.bufferSizeInSamples=this.bufferSizeInFrames*this.targetNumberOfChannels,this.outputBuffer=new Float32Array(this.bufferSizeInSamples),this.bufferStartFrame=Math.floor(e.startTime*this.targetSampleRate),this.timestampOffset=e.startTime-this.bufferStartFrame/this.targetSampleRate}doChannelMixerSetup(){D(this.sourceNumberOfChannels!==null);let e=this.sourceNumberOfChannels,t=this.targetNumberOfChannels;e===1&&t===2?this.channelMixer=(t,n)=>t[n*e]:e===1&&t===4?this.channelMixer=(t,n,r)=>t[n*e]*+(r<2):e===1&&t===6?this.channelMixer=(t,n,r)=>t[n*e]*+(r===2):e===2&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return .5*(t[r]+t[r+1])}:e===2&&t===4||e===2&&t===6?this.channelMixer=(t,n,r)=>t[n*e+r]*+(r<2):e===4&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return .25*(t[r]+t[r+1]+t[r+2]+t[r+3])}:e===4&&t===2?this.channelMixer=(t,n,r)=>{let i=n*e;return .5*(t[i+r]+t[i+r+2])}:e===4&&t===6?this.channelMixer=(t,n,r)=>{let i=n*e;return r<2?t[i+r]:r===2||r===3?0:t[i+r-2]}:e===6&&t===1?this.channelMixer=(t,n)=>{let r=n*e;return Math.SQRT1_2*(t[r]+t[r+1])+t[r+2]+.5*(t[r+4]+t[r+5])}:e===6&&t===2?this.channelMixer=(t,n,r)=>{let i=n*e;return t[i+r]+Math.SQRT1_2*(t[i+2]+t[i+r+4])}:e===6&&t===4?this.channelMixer=(t,n,r)=>{let i=n*e;return r<2?t[i+r]+Math.SQRT1_2*t[i+2]:t[i+r+2]}:this.channelMixer=(t,n,r)=>r<e?t[n*e+r]:0}ensureTempBufferSize(e){let t=this.tempSourceBuffer.length;for(;t<e;)t*=2;if(t!==this.tempSourceBuffer.length){let e=new Float32Array(t);e.set(this.tempSourceBuffer),this.tempSourceBuffer=e}}async add(e){this.sourceSampleRate===null&&(this.sourceSampleRate=e.sampleRate,this.sourceNumberOfChannels=e.numberOfChannels,this.tempSourceBuffer=new Float32Array(this.sourceSampleRate*this.sourceNumberOfChannels),this.doChannelMixerSetup());let t=e.numberOfFrames*e.numberOfChannels;this.ensureTempBufferSize(t);let n=e.allocationSize({planeIndex:0,format:`f32`}),r=new Float32Array(this.tempSourceBuffer.buffer,0,n/4);e.copyTo(r,{planeIndex:0,format:`f32`});let i=e.timestamp,a=Math.min(e.timestamp+e.duration,this.endTime),o=Math.floor(i*this.targetSampleRate),s=Math.ceil(a*this.targetSampleRate);for(let t=o;t<s;t++){if(t<this.bufferStartFrame)continue;for(;t>=this.bufferStartFrame+this.bufferSizeInFrames;)await this.finalizeCurrentBuffer(),this.bufferStartFrame+=this.bufferSizeInFrames;let n=t-this.bufferStartFrame;D(n<this.bufferSizeInFrames);let a=(t/this.targetSampleRate-i)*this.sourceSampleRate,o=Math.floor(a),s=Math.ceil(a),c=a-o;for(let t=0;t<this.targetNumberOfChannels;t++){let i=0,a=0;o>=0&&o<e.numberOfFrames&&(i=this.channelMixer(r,o,t)),s>=0&&s<e.numberOfFrames&&(a=this.channelMixer(r,s,t));let l=i+c*(a-i),u=n*this.targetNumberOfChannels+t;this.outputBuffer[u]+=l}this.maxWrittenFrame===null?this.maxWrittenFrame=n:this.maxWrittenFrame=Math.max(this.maxWrittenFrame,n)}}async finalizeCurrentBuffer(){if(this.maxWrittenFrame===null)return;let e=(this.maxWrittenFrame+1)*this.targetNumberOfChannels,t=new Float32Array(e);t.set(this.outputBuffer.subarray(0,e));let n=this.bufferStartFrame/this.targetSampleRate,r=new Vd({format:`f32`,sampleRate:this.targetSampleRate,numberOfChannels:this.targetNumberOfChannels,timestamp:n+this.timestampOffset,data:t});await this.onSample(r),this.outputBuffer.fill(0),this.maxWrittenFrame=null}finalize(){return this.finalizeCurrentBuffer()}}})),c_,l_,u_,d_,f_,p_,m_,h_,g_,__,v_,y_,b_,x_,S_,C_,w_,T_,E_,D_,O_,k_,A_,j_,M_,N_,P_=n((()=>{Pi(),ma(),F(),hm(),zf(),Pf(),Lo(),Xd(),Cf(),s_(),c_=class{constructor(){this._connectedTrack=null,this._closingPromise=null,this._closed=!1}_ensureValidAdd(){if(!this._connectedTrack)throw Error(`Source is not connected to an output track.`);if(this._connectedTrack.output.state===`canceled`)throw Error(`Output has been canceled.`);if(this._connectedTrack.output.state===`finalizing`||this._connectedTrack.output.state===`finalized`)throw Error(`Output has been finalized.`);if(this._connectedTrack.output.state===`pending`)throw Error(`Output has not started.`);if(this._closed)throw Error(`Source is closed.`)}async _start(){}async _flushAndClose(e){}close(){if(this._closingPromise)return;let e=this._connectedTrack;if(!e)throw Error(`Cannot call close without connecting the source to an output track.`);if(e.output.state===`pending`)throw Error(`Cannot call close before output has been started.`);this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(e.output.state===`finalizing`||e.output.state===`finalized`)&&e.output._muxer.onTrackClose(e)})()}async _flushOrWaitForOngoingClose(e){return this._closingPromise??=(async()=>{await this._flushAndClose(e),this._closed=!0})()}},l_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!L.includes(e))throw TypeError(`Invalid video codec '${e}'. Must be one of: ${L.join(`, `)}.`);this._codec=e}},u_=(e,t)=>{if(e.metadata.hasOnlyKeyPackets&&t.type!==`key`)throw Error(`Cannot add non-key packets to a hasOnlyKeyPackets video track.`)},d_=class extends l_{constructor(e){super(e)}add(e,t){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be added.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`meta, when provided, must be an object.`);return this._ensureValidAdd(),u_(this._connectedTrack,e),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,e,t)}},f_=class{constructor(e,t){this.source=e,this.encodingConfig=t,this.ensureEncoderPromise=null,this.encoderInitialized=!1,this.encoder=null,this.muxer=null,this.lastMultipleOfKeyFrameInterval=-1,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 Fr,this.customEncoderQueueSize=0,this.alphaEncoder=null,this.splitter=null,this.splitterCreationFailed=!1,this.alphaFrameQueue=[],this.error=null,this.lastMuxerPromise=Promise.resolve()}async add(e,t,n){let r=e;try{this.checkForEncoderError(),this.source._ensureValidAdd();let i=this.encodingConfig,a=i.sizeChangeBehavior??`deny`,o=!1;if(this.codedWidth!==null&&this.codedHeight!==null){if((e.codedWidth!==this.codedWidth||e.codedHeight!==this.codedHeight)&&(o=!0,a===`deny`))throw Error(`Video sample size must remain constant. Expected ${this.codedWidth}x${this.codedHeight}, got ${e.codedWidth}x${e.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=e.codedWidth,this.codedHeight=e.codedHeight;if(i.transform?.width!==void 0||i.transform?.height!==void 0||i.transform?.rotate!==void 0||i.transform?.crop!==void 0||i.transform?.force===!0||o&&a!==`passThrough`){let n=i.transform?.width,r=i.transform?.height,s=i.transform?.fit??`fill`;o&&a!==`passThrough`&&(D(this.outputWidth),D(this.outputHeight),D(a!==`deny`),n=this.outputWidth,r=this.outputHeight,s=a);let c=await e.transform({width:n,height:r,roundDimensionsTo:2,crop:i.transform?.crop,rotate:i.transform?.rotate,fit:s,alpha:i.alpha});(this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=c.displayWidth,this.outputHeight=c.displayHeight),t&&e.close(),e=c,t=!0}else (this.outputWidth===null||this.outputHeight===null)&&(this.outputWidth=e.codedWidth,this.outputHeight=e.codedHeight);let s=i.transform?.frameRate;if(s!==void 0){let i=e.timestamp+e.duration,a=Er(e.timestamp,s);if(this.frameRateLastSample!==null)if(a<=this.frameRateLastTimestamp){this.frameRateLastSample.close(),this.frameRateLastSample=e.clone(),this.frameRateLastEndTimestamp=i;return}else await this.padFrameRate(a,n);e===r&&(e=e.clone(),t=!0),e.setTimestamp(a),e.setDuration(1/s),this.frameRateLastSample?.close(),this.frameRateLastSample=e.clone(),this.frameRateLastTimestamp=a,this.frameRateLastEndTimestamp=i}await this.processAndEncode(e,n)}finally{t&&e.close()}}async processAndEncode(e,t){let n=this.encodingConfig,r;if(n.transform?.process){let t=n.transform.process(e);if(t instanceof Promise&&(t=await t),t===null)return;Array.isArray(t)||(t=[t]),r=t.map(t=>t instanceof Sd?t:typeof VideoFrame<`u`&&t instanceof VideoFrame?new Sd(t):new Sd(t,{timestamp:e.timestamp,duration:e.duration}))}else r=[e];try{for(let e of r){this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(e),this.encoderInitialized||await this.ensureEncoderPromise),D(this.encoderInitialized);let n=this.encodingConfig.keyFrameInterval??2,r=Math.floor(e.timestamp/n),i={...t,keyFrame:t?.keyFrame||n===0||r!==this.lastMultipleOfKeyFrameInterval};if(this.lastMultipleOfKeyFrameInterval=r,this.customEncoder){this.customEncoderQueueSize++;let t=e.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(t,i)).then(()=>this.customEncoderQueueSize--).catch(e=>this.error??=e).finally(()=>{t.close()});this.customEncoderQueueSize>=4&&await n}else{D(this.encoder);let t=e.toVideoFrame(),n=N(this.preciseTimings,t.timestamp,e=>e.microsecondTimestamp),r=n===-1?null:this.preciseTimings[n];if(r&&r.microsecondTimestamp===t.timestamp?(r.timestamp!==e.timestamp&&(r.timestampIsValid=!1),r.duration!==e.duration&&(r.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:t.timestamp,timestamp:e.timestamp,duration:e.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift()),!this.alphaEncoder)this.encoder.encode(t,i),t.close();else if(t.format&&!t.format.includes(`A`)||this.splitterCreationFailed)this.alphaFrameQueue.push(null),this.encoder.encode(t,i),t.close();else{let e=t.displayWidth,n=t.displayHeight;this.splitter||=new m_(e,n);let{colorFrame:r,alphaFrame:a}=await this.splitter.update(t);this.alphaFrameQueue.push(a),this.encoder.encode(r,i),r.close()}this.encoder.encodeQueueSize>=4&&await new Promise(e=>this.encoder.addEventListener(`dequeue`,e,{once:!0}))}await this.lastMuxerPromise}}finally{for(let t of r)t!==e&&t.close()}}async padFrameRate(e,t){let n=this.encodingConfig.transform.frameRate;D(this.frameRateLastSample);let r=Math.round((e-this.frameRateLastTimestamp)*n);for(let e=1;e<r;e++){let r=this.frameRateLastSample.clone();r.setTimestamp(this.frameRateLastTimestamp+e/n),r.setDuration(1/n),await this.processAndEncode(r,t),r.close()}}ensureEncoder(e){this.ensureEncoderPromise=(async()=>{let t=tf({...this.encodingConfig,width:e.codedWidth,height:e.codedHeight,squarePixelWidth:e.squarePixelWidth,squarePixelHeight:e.squarePixelHeight,framerate:this.source._connectedTrack?.metadata.frameRate});this.encodingConfig.onEncoderConfig?.(t);let n=Af.find(e=>e.supports(this.encodingConfig.codec,t));if(n)this.customEncoder=new n,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=t,this.customEncoder.onPacket=(e,t)=>{if(!(e instanceof R))throw TypeError(`The first argument passed to onPacket must be an EncodedPacket.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`The second argument passed to onPacket must be an object or undefined.`);u_(this.source._connectedTrack,e),this.encodingConfig.onEncodedPacket?.(e,t),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,e,t).catch(e=>{this.error??=e})},await this.customEncoder.init();else{if(typeof VideoEncoder>`u`)throw Error(`VideoEncoder is not supported by this browser.`);if(t.alpha=`discard`,this.encodingConfig.alpha===`keep`&&(t.latencyMode=`quality`),(t.width%2==1||t.height%2==1)&&(this.encodingConfig.codec===`avc`||this.encodingConfig.codec===`hevc`))throw Error(`The dimensions ${t.width}x${t.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(t)).supported)throw Error(`This specific encoder configuration (${t.codec}, ${t.bitrate} bps, ${t.width}x${t.height}, hardware acceleration: ${t.hardwareAcceleration??`no-preference`}) is not supported by this browser. Consider using another codec or changing your video parameters.`);let e=[],n=[],r=0,i=0,a=(e,t,n)=>{let r={};if(t){let e=new Uint8Array(t.byteLength);t.copyTo(e),r.alpha=e}let i=R.fromEncodedChunk(e,r),a=N(this.preciseTimings,e.timestamp,e=>e.microsecondTimestamp),o=a===-1?null:this.preciseTimings[a];o&&o.microsecondTimestamp===e.timestamp&&(i=i.clone({timestamp:o.timestampIsValid?o.timestamp:void 0,duration:o.durationIsValid?o.duration:void 0})),u_(this.source._connectedTrack,i),this.encodingConfig.onEncodedPacket?.(i,n),this.lastMuxerPromise=this.muxer.addEncodedVideoPacket(this.source._connectedTrack,i,n).catch(e=>{this.error??=e})},o=Error(`Encoding error`).stack;if(this.encoder=new VideoEncoder({output:(t,o)=>{if(!this.alphaEncoder){a(t,null,o);return}let s=this.alphaFrameQueue.shift();D(s!==void 0),s?(this.alphaEncoder.encode(s,{keyFrame:t.type===`key`}),i++,s.close(),e.push({chunk:t,meta:o})):i===0?a(t,null,o):(n.push(r+i),e.push({chunk:t,meta:o}))},error:e=>{e.stack=o,this.error??=e}}),this.encoder.configure(t),this.encodingConfig.alpha===`keep`){let o=Error(`Encoding error`).stack;this.alphaEncoder=new VideoEncoder({output:(t,o)=>{i--;let s=e.shift();for(D(s!==void 0),a(s.chunk,t,s.meta),r++;n.length>0&&n[0]===r;){n.shift();let t=e.shift();D(t!==void 0),a(t.chunk,null,t.meta)}},error:e=>{e.stack=o,this.error??=e}}),this.alphaEncoder.configure(t)}}D(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}async flushAndClose(e){if(e||this.checkForEncoderError(),!e&&this.frameRateLastSample){let e=this.encodingConfig.transform.frameRate,t=Er(this.frameRateLastEndTimestamp,e);await this.padFrameRate(t)}this.frameRateLastSample?.close(),this.frameRateLastSample=null,this.customEncoder?(e||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(e||(await this.encoder.flush(),await this.alphaEncoder?.flush()),this.encoder.state!==`closed`&&this.encoder.close(),this.alphaEncoder&&this.alphaEncoder.state!==`closed`&&this.alphaEncoder.close(),this.alphaFrameQueue.forEach(e=>e?.close()),this.splitter?.close()),e||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},p_=!1,m_=class e{constructor(t,n){this.canvas=null,this.gl=null,this.colorProgram=null,this.alphaProgram=null,this.vao=null,this.sourceTexture=null,this.alphaResolutionLocation=null,this.worker=null,this.pendingRequests=new Map,this.nextRequestId=0;let r=typeof OffscreenCanvas<`u`||typeof document<`u`&&typeof document.createElement==`function`;if(!e.forceCpu&&r&&!p_)try{typeof OffscreenCanvas<`u`?this.canvas=new OffscreenCanvas(t,n):(this.canvas=document.createElement(`canvas`),this.canvas.width=t,this.canvas.height=n);let e=this.canvas.getContext(`webgl2`,{alpha:!0});if(!e)throw Error(`Couldn't acquire WebGL 2 context.`);this.gl=e,this.colorProgram=this.createColorProgram(),this.alphaProgram=this.createAlphaProgram(),this.vao=this.createVAO(),this.sourceTexture=this.createTexture(),this.alphaResolutionLocation=this.gl.getUniformLocation(this.alphaProgram,`u_resolution`),this.gl.useProgram(this.colorProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.colorProgram,`u_sourceTexture`),0),this.gl.useProgram(this.alphaProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.alphaProgram,`u_sourceTexture`),0)}catch(e){this.gl=null,this.canvas=null,p_=!0,console.warn(`Falling back to CPU for color/alpha splitting.`,e)}}async update(e){return this.gl?this.updateGpu(e):this.updateCpu(e)}updateGpu(e){D(this.gl),D(this.canvas),(e.displayWidth!==this.canvas.width||e.displayHeight!==this.canvas.height)&&(this.canvas.width=e.displayWidth,this.canvas.height=e.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.sourceTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e);let t=this.runColorProgram(e),n=this.runAlphaProgram(e);return e.close(),{colorFrame:t,alphaFrame:n}}createVertexShader(){return D(this.gl),this.createShader(this.gl.VERTEX_SHADER,`#version 300 es
|
|
39
39
|
in vec2 a_position;
|
|
40
40
|
in vec2 a_texCoord;
|
|
41
41
|
out vec2 v_texCoord;
|
|
@@ -99,7 +99,7 @@ function D(e){if(!e)throw Error(`Assertion failed.`)}var Bn,O,Vn,k,Hn,Un,A,j,Wn,
|
|
|
99
99
|
|
|
100
100
|
fragColor = result;
|
|
101
101
|
}
|
|
102
|
-
`),n=this.gl.createProgram();return this.gl.attachShader(n,e),this.gl.attachShader(n,t),this.gl.linkProgram(n),n}createShader(e,t){D(this.gl);let n=this.gl.createShader(e);return this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)||console.error(`Shader compile error:`,this.gl.getShaderInfoLog(n)),n}createVAO(){D(this.gl),D(this.colorProgram);let e=this.gl.createVertexArray();this.gl.bindVertexArray(e);let t=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),n=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,n),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW);let r=this.gl.getAttribLocation(this.colorProgram,`a_position`),i=this.gl.getAttribLocation(this.colorProgram,`a_texCoord`);return this.gl.enableVertexAttribArray(r),this.gl.vertexAttribPointer(r,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,8),e}createTexture(){D(this.gl);let e=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),e}runColorProgram(e){return D(this.gl),D(this.canvas),this.gl.useProgram(this.colorProgram),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),new VideoFrame(this.canvas,{timestamp:e.timestamp,duration:e.duration??void 0,alpha:`discard`})}runAlphaProgram(e){D(this.gl),D(this.canvas),this.gl.useProgram(this.alphaProgram),this.gl.uniform2f(this.alphaResolutionLocation,this.canvas.width,this.canvas.height),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4);let{width:t,height:n}=this.canvas,r=Math.ceil(t/2)*Math.ceil(n/2),i=t*n+r*2,a=Math.ceil(i/(t*4)),o=new Uint8Array(4*t*a);this.gl.readPixels(0,0,t,a,this.gl.RGBA,this.gl.UNSIGNED_BYTE,o),o=o.subarray(0,i),D(o[t*n]===128),D(o[o.length-1]===128);let s={format:`I420`,codedWidth:t,codedHeight:n,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,s)}updateCpu(e){if(!this.worker){let e=new Blob([`(${h_.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.addEventListener(`message`,e=>{let t=e.data,n=this.pendingRequests.get(t.id);n&&(this.pendingRequests.delete(t.id),`error`in t?n.reject(Error(t.error)):n.resolve({colorFrame:t.colorFrame,alphaFrame:t.alphaFrame}))}),this.worker.addEventListener(`error`,e=>{let t=Error(e.message||`Color/alpha splitter worker error.`);for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()})}let t=this.nextRequestId++,n=P();return this.pendingRequests.set(t,n),this.worker.postMessage({id:t,sourceFrame:e},{transfer:[e]}),n.promise}close(){this.gl?.getExtension(`WEBGL_lose_context`)?.loseContext(),this.gl=null,this.canvas=null,this.worker?.terminate(),this.worker=null;let e=Error(`Color/alpha splitter closed.`);for(let t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}},m_.forceCpu=!0,h_=()=>{let e=null,t=Promise.resolve();self.addEventListener(`message`,e=>{let{id:r,sourceFrame:i}=e.data;t=t.then(async()=>{try{let{colorFrame:e,alphaFrame:t}=await n(i);self.postMessage({id:r,colorFrame:e,alphaFrame:t},{transfer:[e,t]})}catch(e){self.postMessage({id:r,error:e.message})}finally{i.close()}})});let n=async t=>{let n=t.format;if(!n)throw Error(`CPU color/alpha splitting requires a known VideoFrame format.`);let a=t.codedWidth,o=t.codedHeight,s=t.allocationSize();if((!e||e.byteLength!==s)&&(e=new Uint8Array(s)),await t.copyTo(e),n===`RGBA`||n===`BGRA`)return r(e,a,o,n,t);if(n===`I420A`||n===`I420AP10`||n===`I420AP12`||n===`I422A`||n===`I422AP10`||n===`I422AP12`||n===`I444A`||n===`I444AP10`||n===`I444AP12`)return i(e,a,o,n,t);throw Error(`CPU color/alpha splitting does not support format '${n}'.`)},r=(e,t,n,r,i)=>{let a=t*n,o=a+Math.ceil(t/2)*Math.ceil(n/2)*2,s=new Uint8Array(o);for(let t=0,n=3;t<a;t++,n+=4)s[t]=e[n];s.fill(128,a);let c=new VideoFrame(e,{format:r===`RGBA`?`RGBX`:`BGRX`,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0}),l={format:`I420`,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0,transfer:[s.buffer]};return{colorFrame:c,alphaFrame:new VideoFrame(s,l)}},i=(e,t,n,r,i)=>{let a=r.includes(`P10`),o=r.includes(`P12`),s=a||o?2:1,c,l;r.startsWith(`I420`)?(c=Math.ceil(t/2),l=Math.ceil(n/2)):r.startsWith(`I422`)?(c=Math.ceil(t/2),l=n):(c=t,l=n);let u=t*n,d=c*l,f=u*s,p=d*s,m=u*s,h=f+p*2,g=r.replace(`A`,``),_=Math.ceil(t/2)*Math.ceil(n/2),v=m+_*s*2,y=new Uint8Array(v),b=h;y.set(e.subarray(b,b+m),0);let x=m,S=a?512:o?2048:128;s===1?y.fill(S,x):new Uint16Array(y.buffer,x,2*_).fill(S);let C=a?`I420P10`:o?`I420P12`:`I420`,ee=new VideoFrame(e.subarray(0,h),{format:g,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0}),w={format:C,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0,transfer:[y.buffer]};return{colorFrame:ee,alphaFrame:new VideoFrame(y,w)}}},g_=class extends l_{constructor(e){ef(e),super(e.codec),this._encoder=new f_(this,e)}add(e,t){if(!(e instanceof Cd))throw TypeError(`videoSample must be a VideoSample.`);return this._encoder.add(e,!1,t)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},__=class extends l_{constructor(e,t){if(!(typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas))throw TypeError(`canvas must be an HTMLCanvasElement or OffscreenCanvas.`);ef(t),super(t.codec),this._encoder=new f_(this,t),this._canvas=e}add(e,t=0,n){if(!Number.isFinite(e)||e<0)throw TypeError(`timestamp must be a non-negative number.`);if(!Number.isFinite(t)||t<0)throw TypeError(`duration must be a non-negative number.`);let r=new Cd(this._canvas,{timestamp:e,duration:t});return this._encoder.add(r,!0,n)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},v_=class extends l_{get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}constructor(e,t,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!==`video`)throw TypeError(`track must be a video MediaStreamTrack.`);if(ef(t),typeof n!=`object`||!n)throw TypeError(`options must be an object.`);if(n.frameRate!=null&&(typeof n.frameRate!=`number`||n.frameRate<=0))throw 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 TypeError(`options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.`);t={...t,latencyMode:`realtime`},super(t.codec),this._abortController=null,this._workerTrackId=null,this._workerListener=null,this._promiseWithResolvers=P(),this._errorPromiseAccessed=!1,this._paused=!1,this._lastVideoFrame=null,this._timerHandle=null,this._videoElement=null,this._options=n,this._encoder=new f_(this,t),this._track=e}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly.");let e=this._options.frameRate===void 0?this._track.getSettings().frameRate??null:this._options.frameRate;this._abortController=new AbortController;let t=null,n=null,r=0,i=!1,a=null,o=0,s=()=>{if(D(e!==null),!this._lastVideoFrame)return;D(n!==null),D(t!==null);let i=performance.now();for(;i-n>1e3/e;){n+=1e3/e;let a=t+r/e;l(new VideoFrame(this._videoElement??this._lastVideoFrame,{timestamp:1e6*a,duration:1e6/e}),i)}};e!==null&&(this._timerHandle=fi(s,4));let c=t=>{if(e===null)l(t);else{let e=performance.now();this._lastVideoFrame?(s(),this._lastVideoFrame?.close(),this._lastVideoFrame=t):(l(t.clone(),e),n=e,this._lastVideoFrame=t)}},l=(e,n=performance.now())=>{if(i){e.close();return}r++;let s=e.timestamp/1e6;if(this._paused){if(t!==null){if(a!==null&&this._options.timestampBase!==`unix`){let e=s-a;o-=e}a=s}e.close();return}if(t===null){t=s;let e,r=this._options.timestampBase??`synced-zero`;if(r===`unix`)e=Date.now()/1e3;else if(r===`zero`)e=0;else{let t=this._connectedTrack.output;t._firstMediaStreamTimestamp===null?(t._firstMediaStreamTimestamp=n/1e3,e=0):e=n/1e3-t._firstMediaStreamTimestamp}o=e-t}if(a=s,this._encoder.getQueueSize()>=8){e.close();return}let c=new Cd(e,{timestamp:s+o});this._encoder.add(c,!0).catch(e=>{i=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(e),this._workerTrackId!==null&&j_({type:`stopTrack`,trackId:this._workerTrackId})})};if(typeof MediaStreamTrackProcessor<`u`){let e=new MediaStreamTrackProcessor({track:this._track}),t=new WritableStream({write:c});e.readable.pipeTo(t,{signal:this._abortController.signal}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||this._promiseWithResolvers.reject(e)})}else if(await A_())this._workerTrackId=E_++,j_({type:`videoTrack`,trackId:this._workerTrackId,track:this._track}),this._workerListener=e=>{let t=e.data;t.type===`videoFrame`&&t.trackId===this._workerTrackId?c(t.videoFrame):t.type===`error`&&t.trackId===this._workerTrackId&&this._promiseWithResolvers.reject(t.error)},D_.addEventListener(`message`,this._workerListener);else if(e!==null){let e=document.createElement(`video`);e.style.position=`fixed`,e.style.left=`-10000px`,e.style.top=`-10000px`,e.style.width=`1px`,e.style.height=`1px`,e.style.opacity=`0`,e.style.pointerEvents=`none`,e.muted=!0,e.srcObject=new MediaStream([this._track]),document.body.appendChild(e),this._videoElement=e,e.addEventListener(`loadeddata`,()=>{if(i||!this._videoElement)return;let t=new VideoFrame(e,{timestamp:1e3*performance.now()});c(t),t.close()},{once:!0}),e.play().catch(e=>{i=!0,this._promiseWithResolvers.reject(e)})}else throw 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(),null),this._timerHandle&&pi(this._timerHandle),this._lastVideoFrame?.close(),this._videoElement&&=(this._videoElement.srcObject=null,this._videoElement.remove(),null),this._workerTrackId!==null&&(D(this._workerListener),j_({type:`stopTrack`,trackId:this._workerTrackId}),await new Promise(e=>{let t=n=>{let r=n.data;r.type===`trackStopped`&&r.trackId===this._workerTrackId&&(D(this._workerListener),D_.removeEventListener(`message`,this._workerListener),D_.removeEventListener(`message`,t),e())};D_.addEventListener(`message`,t)})),await this._encoder.flushAndClose(e)}},y_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!Ri.includes(e))throw TypeError(`Invalid audio codec '${e}'. Must be one of: ${Ri.join(`, `)}.`);this._codec=e}},b_=class extends y_{constructor(e){super(e)}add(e,t){if(!(e instanceof L))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be added.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`meta, when provided, must be an object.`);return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,e,t)}},x_=class{constructor(e,t){this.source=e,this.encodingConfig=t,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 Fr,this.customEncoderQueueSize=0,this.lastEndSampleIndex=null,this.resampler=null,this.error=null,this.lastMuxerPromise=Promise.resolve()}async add(e,t){try{if(this.checkForEncoderError(),this.source._ensureValidAdd(),this.lastNumberOfChannels!==null&&this.lastSampleRate!==null){if(e.numberOfChannels!==this.lastNumberOfChannels||e.sampleRate!==this.lastSampleRate)throw Error(`Audio parameters must remain constant. Expected ${this.lastNumberOfChannels} channels at ${this.lastSampleRate} Hz, got ${e.numberOfChannels} channels at ${e.sampleRate} Hz.`)}else this.lastNumberOfChannels=e.numberOfChannels,this.lastSampleRate=e.sampleRate;let n=this.encodingConfig;n.transform?.numberOfChannels!==void 0||n.transform?.sampleRate!==void 0?(this.resampler||=new o_({targetNumberOfChannels:n.transform.numberOfChannels??e.numberOfChannels,targetSampleRate:n.transform.sampleRate??e.sampleRate,startTime:e.timestamp,endTime:1/0,onSample:async e=>{await this.processAndEncode(e,!0)}}),await this.resampler.add(e)):await this.processAndEncode(e,t)}finally{t&&e.close()}}async processAndEncode(e,t){let n=this.encodingConfig;if(n.transform?.sampleFormat!==void 0&&Jd(e.format)!==n.transform.sampleFormat){let r=Xd(e,n.transform.sampleFormat);t&&e.close(),e=r,t=!0}if(n.transform?.process){let r=n.transform.process(e);if(r instanceof Promise&&(r=await r),r===null)return;Array.isArray(r)||(r=[r]);for(let e of r){if(!(e instanceof Hd))throw TypeError(`The audio process function must return an AudioSample, null, or an array of AudioSamples.`);await this.encodeSample(e,!0)}t&&e.close()}else await this.encodeSample(e,t)}async encodeSample(e,t){try{this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(e),this.encoderInitialized||await this.ensureEncoderPromise),D(this.encoderInitialized);{let t=Math.round(e.timestamp*e.sampleRate),n=Math.round((e.timestamp+e.duration)*e.sampleRate);if(this.lastEndSampleIndex===null)this.lastEndSampleIndex=n;else{let n=t-this.lastEndSampleIndex;if(n>=64){let t=new Hd({data:new Float32Array(n*e.numberOfChannels),format:`f32-planar`,sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,numberOfFrames:n,timestamp:this.lastEndSampleIndex/e.sampleRate});await this.encodeSample(t,!0)}this.lastEndSampleIndex+=e.numberOfFrames}}if(this.customEncoder){this.customEncoderQueueSize++;let t=e.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(t)).then(()=>this.customEncoderQueueSize--).catch(e=>this.error??=e).finally(()=>{t.close()});this.customEncoderQueueSize>=4&&await n,await this.lastMuxerPromise}else if(this.isPcmEncoder)await this.doPcmEncoding(e,t);else{D(this.encoder);let n=e.toAudioData();this.encoder.encode(n),n.close(),t&&e.close(),this.encoder.encodeQueueSize>=4&&await new Promise(e=>this.encoder.addEventListener(`dequeue`,e,{once:!0})),await this.lastMuxerPromise}}finally{t&&e.close()}}async doPcmEncoding(e,t){D(this.outputSampleSize),D(this.writeOutputValue);let{numberOfChannels:n,numberOfFrames:r,sampleRate:i,timestamp:a}=e,o=2048,s=[];for(let t=0;t<r;t+=o){let r=Math.min(o,e.numberOfFrames-t),i=r*n*this.outputSampleSize,a=new ArrayBuffer(i),c=new DataView(a);s.push({frameCount:r,view:c})}let c=e.allocationSize({planeIndex:0,format:`f32-planar`}),l=new Float32Array(c/Float32Array.BYTES_PER_ELEMENT);for(let t=0;t<n;t++){e.copyTo(l,{planeIndex:t,format:`f32-planar`});for(let e=0;e<s.length;e++){let{frameCount:r,view:i}=s[e];for(let a=0;a<r;a++)this.writeOutputValue(i,(a*n+t)*this.outputSampleSize,l[e*o+a])}}t&&e.close();let u={decoderConfig:{codec:this.encodingConfig.codec,numberOfChannels:n,sampleRate:i}};for(let e=0;e<s.length;e++){let{frameCount:t,view:n}=s[e],r=n.buffer,c=e*o,l=new L(new Uint8Array(r),`key`,a+c/i,t/i);this.encodingConfig.onEncodedPacket?.(l,u),await this.muxer.addEncodedAudioPacket(this.source._connectedTrack,l,u)}}ensureEncoder(e){this.ensureEncoderPromise=(async()=>{let{numberOfChannels:t,sampleRate:n}=e,r=of({numberOfChannels:t,sampleRate:n,...this.encodingConfig});this.encodingConfig.onEncoderConfig?.(r);let i=Mf.find(e=>e.supports(this.encodingConfig.codec,r));if(i)this.customEncoder=new i,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=r,this.customEncoder.onPacket=(e,t)=>{if(!(e instanceof L))throw TypeError(`The first argument passed to onPacket must be an EncodedPacket.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`The second argument passed to onPacket must be an object or undefined.`);this.encodingConfig.onEncodedPacket?.(e,t),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,e,t).catch(e=>{this.error??=e})},await this.customEncoder.init();else if(Ii.includes(this.encodingConfig.codec))this.initPcmEncoder();else{if(typeof AudioEncoder>`u`)throw Error(`AudioEncoder is not supported by this browser.`);if(!(await AudioEncoder.isConfigSupported(r)).supported)throw Error(`This specific encoder configuration (${r.codec}, ${r.bitrate} bps, ${r.numberOfChannels} channels, ${r.sampleRate} Hz) is not supported by this browser. Consider using another codec or changing your audio parameters.`);let e=Error(`Encoding error`).stack;this.encoder=new AudioEncoder({output:(e,t)=>{if(this.encodingConfig.codec===`aac`&&t?.decoderConfig){let e=!1;if(e=!t.decoderConfig.description||t.decoderConfig.description.byteLength<2?!0:Ai(A(t.decoderConfig.description)).objectType===0,e){let e=Number(O(r.codec.split(`.`)));t.decoderConfig.description=ji({objectType:e,numberOfChannels:t.decoderConfig.numberOfChannels,sampleRate:t.decoderConfig.sampleRate})}}let n=L.fromEncodedChunk(e);n=n.clone({timestamp:wr(n.timestamp,r.sampleRate),duration:e.duration==null?void 0:wr(n.duration,r.sampleRate)}),this.encodingConfig.onEncodedPacket?.(n,t),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,n,t).catch(e=>{this.error??=e})},error:t=>{t.stack=e,this.error??=t}}),this.encoder.configure(r)}D(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}initPcmEncoder(){this.isPcmEncoder=!0;let e=this.encodingConfig.codec,{dataType:t,sampleSize:n,littleEndian:r}=na(e);switch(this.outputSampleSize=n,n){case 1:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint8(t,br((n+1)*127.5,0,255)):t===`signed`?this.writeOutputValue=(e,t,n)=>{e.setInt8(t,br(Math.round(n*128),-128,127))}:t===`ulaw`?this.writeOutputValue=(e,t,n)=>{let r=br(Math.floor(n*32767),-32768,32767);e.setUint8(t,If(r))}:t===`alaw`?this.writeOutputValue=(e,t,n)=>{let r=br(Math.floor(n*32767),-32768,32767);e.setUint8(t,Rf(r))}:D(!1);break;case 2:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint16(t,br((n+1)*32767.5,0,65535),r):t===`signed`?this.writeOutputValue=(e,t,n)=>e.setInt16(t,br(Math.round(n*32767),-32768,32767),r):D(!1);break;case 3:t===`unsigned`?this.writeOutputValue=(e,t,n)=>gr(e,t,br((n+1)*8388607.5,0,16777215),r):t===`signed`?this.writeOutputValue=(e,t,n)=>_r(e,t,br(Math.round(n*8388607),-8388608,8388607),r):D(!1);break;case 4:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint32(t,br((n+1)*2147483647.5,0,4294967295),r):t===`signed`?this.writeOutputValue=(e,t,n)=>e.setInt32(t,br(Math.round(n*2147483647),-2147483648,2147483647),r):t===`float`?this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,r):D(!1);break;case 8:t===`float`?this.writeOutputValue=(e,t,n)=>e.setFloat64(t,n,r):D(!1);break;default:pr(n),D(!1)}}async flushAndClose(e){e||this.checkForEncoderError(),!e&&this.resampler&&await this.resampler.finalize(),this.resampler=null,this.customEncoder?(e||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(e||await this.encoder.flush(),this.encoder.state!==`closed`&&this.encoder.close()),e||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.isPcmEncoder?0:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},S_=class extends y_{constructor(e){rf(e),super(e.codec),this._encoder=new x_(this,e)}add(e){if(!(e instanceof Hd))throw TypeError(`audioSample must be an AudioSample.`);return this._encoder.add(e,!1)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},C_=class extends y_{constructor(e){rf(e),super(e.codec),this._accumulatedTime=0,this._encoder=new x_(this,e)}async add(e){if(!(e instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let t=Hd._fromAudioBuffer(e,this._accumulatedTime);this._accumulatedTime+=e.duration;for(let e of t)await this._encoder.add(e,!0)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},w_=class extends y_{get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}constructor(e,t,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!==`audio`)throw TypeError(`track must be an audio MediaStreamTrack.`);if(rf(t),typeof n!=`object`||!n)throw TypeError(`options must be an object.`);if(n.timestampBase!==void 0&&n.timestampBase!==`synced-zero`&&n.timestampBase!==`zero`&&n.timestampBase!==`unix`)throw TypeError(`options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.`);super(t.codec),this._abortController=null,this._audioContext=null,this._scriptProcessorNode=null,this._promiseWithResolvers=P(),this._errorPromiseAccessed=!1,this._paused=!1,this._options=n,this._encoder=new x_(this,t),this._track=e}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamAudioTrackSource, so that any internal errors get bubbled up properly."),this._abortController=new AbortController;let e=null,t=!1,n=null,r=0,i=i=>{if(t){i.close();return}let a=i.timestamp;if(this._paused){if(e!==null){if(n!==null&&this._options.timestampBase!==`unix`){let e=a-n;r-=e}n=a}i.close();return}if(e===null){e=i.timestamp;let t,n=this._options.timestampBase??`synced-zero`;if(n===`unix`)t=Date.now()/1e3;else if(n===`zero`)t=0;else{let e=this._connectedTrack.output;e._firstMediaStreamTimestamp===null?(e._firstMediaStreamTimestamp=performance.now()/1e3,t=0):t=performance.now()/1e3-e._firstMediaStreamTimestamp}r=t-e}if(n=a,this._encoder.getQueueSize()>=8){i.close();return}i.setTimestamp(a+r),this._encoder.add(i,!0).catch(e=>{t=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(e),this._audioContext?.suspend()})};if(typeof MediaStreamTrackProcessor<`u`){let e=new MediaStreamTrackProcessor({track:this._track}),t=new WritableStream({write:e=>i(new Hd(e))});e.readable.pipeTo(t,{signal:this._abortController.signal}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||this._promiseWithResolvers.reject(e)})}else{this._audioContext=new(window.AudioContext||window.webkitAudioContext)({sampleRate:this._track.getSettings().sampleRate});let e=this._audioContext.createMediaStreamSource(new MediaStream([this._track]));this._scriptProcessorNode=this._audioContext.createScriptProcessor(4096),this._audioContext.state===`suspended`&&await this._audioContext.resume(),e.connect(this._scriptProcessorNode),this._scriptProcessorNode.connect(this._audioContext.destination);let t=0;this._scriptProcessorNode.onaudioprocess=e=>{let n=Hd._fromAudioBuffer(e.inputBuffer,t);t+=e.inputBuffer.duration;for(let e of n)i(e)}}}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&=(this._abortController.abort(),null),this._audioContext&&(D(this._scriptProcessorNode),this._scriptProcessorNode.disconnect(),await this._audioContext.suspend()),await this._encoder.flushAndClose(e)}},T_=()=>{let e=(e,t)=>{t?self.postMessage(e,{transfer:t}):self.postMessage(e)};e({type:`support`,supported:typeof MediaStreamTrackProcessor<`u`});let t=new Map,n=new Map;self.addEventListener(`message`,r=>{let i=r.data;switch(i.type){case`videoTrack`:{n.set(i.trackId,i.track);let r=new MediaStreamTrackProcessor({track:i.track}),a=new WritableStream({write:t=>{if(!n.has(i.trackId)){t.close();return}e({type:`videoFrame`,trackId:i.trackId,videoFrame:t},[t])}}),o=new AbortController;t.set(i.trackId,o),r.readable.pipeTo(a,{signal:o.signal}).catch(t=>{t instanceof DOMException&&t.name===`AbortError`||e({type:`error`,trackId:i.trackId,error:t})})}break;case`stopTrack`:{let r=t.get(i.trackId);r&&(r.abort(),t.delete(i.trackId)),n.get(i.trackId)?.stop(),n.delete(i.trackId),e({type:`trackStopped`,trackId:i.trackId})}break;default:pr(i)}})},E_=0,D_=null,O_=()=>{let e=new Blob([`(${T_.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);D_=new Worker(t)},k_=null,A_=async()=>k_===null?(D_||O_(),new Promise(e=>{D(D_);let t=n=>{let r=n.data;r.type===`support`&&(k_=r.supported,D_.removeEventListener(`message`,t),e(r.supported))};D_.addEventListener(`message`,t)})):k_,j_=(e,t)=>{D(D_),t?D_.postMessage(e,t):D_.postMessage(e)},M_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!zi.includes(e))throw TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${zi.join(`, `)}.`);this._codec=e}},N_=class extends M_{constructor(e){super(e),this._error=null,this._lastMuxerPromise=Promise.resolve(),this._parser=new dm({codec:e,output:(e,t)=>{this._lastMuxerPromise=this._connectedTrack.output._muxer.addSubtitleCue(this._connectedTrack,e,t).catch(e=>{this._error??=e})}})}add(e){if(typeof e!=`string`)throw TypeError(`text must be a string.`);return this._checkForError(),this._ensureValidAdd(),this._parser.parse(e),this._lastMuxerPromise}_checkForError(){if(this._error)throw this._error}async _flushAndClose(e){e||this._checkForError()}}})),F_,I_,L_,R_,z_,B_=n((()=>{ha(),P_(),F(),em(),uv(),sg(),xg(),Vl(),F_=class extends $p{constructor(e,t){if(!(e._target instanceof bg))throw 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=t,this.targetSegmentDuration=t._options.targetDuration??2,this.singleFilePerPlaylist=t._options.singleFilePerPlaylist??!1,this.isLive=t._options.live??!1,this.maxLiveSegmentCount=t._options.maxLiveSegmentCount??1/0,this.globalTargetDuration=this.targetSegmentDuration,this.getPlaylistPath=t._options.getPlaylistPath??(({n:e})=>`playlist-${e}.m3u8`),this.getSegmentPath=t._options.getSegmentPath??(e=>e.isSingleFile?`segments-${e.playlist.n}${e.format.fileExtension}`:`segment-${e.playlist.n}-${e.n}${e.format.fileExtension}`),this.getInitPath=t._options.getInitPath??(e=>`init-${e.n}${e.segmentFormat.fileExtension}`)}async start(){let e=await this.mutex.acquire(),t=this.output._tracks.some(e=>e.metadata.isRelativeToUnixEpoch),n=this.output._tracks.some(e=>!e.metadata.isRelativeToUnixEpoch);if(t&&n)throw Error("All tracks must agree on `relativeToUnixEpoch`: some tracks are relative to the Unix epoch and some are not.");this.isRelativeToUnixEpoch=t;let r=new Map,i=[],a=!1,o=!1,s=!1;for(let e of this.output._tracks){e.type===`video`&&(a=!0);let t=new Map;for(let n of this.output._tracks){if(e===n||!e.canBePairedWith(n))continue;if(e.type===n.type){o||=(console.warn(`Illegal pairing of two ${e.type} tracks detected, which is not possible in HLS; treating them as unpaired.`),!0);continue}if(e.isVideoTrack()&&e.metadata.hasOnlyKeyPackets||n.isVideoTrack()&&n.metadata.hasOnlyKeyPackets){s||=(console.warn(`A key-packets-only video track is pairable with another track, which is not possible in HLS; treating them as unpaired.`),!0);continue}let r=t.get(n.source._codec);r||t.set(n.source._codec,r=[]),r.push(n)}for(let[,n]of t){let t=n.map(e=>e.id).join(`-`);i.find(e=>e.key===t)||i.push({name:n[0].type+`-`+(i.length+1),key:t,tracks:n,needsEmit:!1,firstNoUri:!1});let a=r.get(e);a||r.set(e,a=[]),a.push(t)}}let c=a?`video`:`audio`,l=[],u=[],d=[];for(let e of this.output._tracks){let t=r.get(e);if(t){if(D(t.length>0),e.type!==c)continue;for(let n of t){let a=i.find(e=>e.key===n);if(D(a),t.length===1&&a.tracks.length===1){let t=r.get(a.tracks[0]);if(D(t!==void 0),t.length===1){let n=i.find(e=>e.key===t[0]);if(n.tracks.length===1){D(n.tracks[0]===e),l.push({tracks:[e,a.tracks[0]],linkedGroup:null});continue}}}l.push({tracks:[e],linkedGroup:a}),a.needsEmit=!0}}else e.type===`video`?u.push(e):e.type===`audio`&&d.push(e)}let f=({metadata:e})=>{let t=``;return t+=`${e.languageCode??xr}-`,t+=`${e.name??``}-`,t+=`${e.disposition?.default??!0}-`,t+=`${e.disposition?.primary??!1}-`,t+=`${e.disposition?.forced??!1}-`,t};if(u.length>0)if(new Set(u.map(f)).size>1){let e={key:u.map(e=>e.id).join(`-`),name:`video-`+(i.length+1),tracks:u,needsEmit:!0,firstNoUri:!0};i.push(e),l.push({tracks:[u[0]],linkedGroup:e})}else for(let e of u)l.push({tracks:[e],linkedGroup:null});if(d.length>0)if(new Set(d.map(f)).size>1){let e={key:d.map(e=>e.id).join(`-`),name:`audio-`+(i.length+1),tracks:d,needsEmit:!0,firstNoUri:!0};i.push(e),l.push({tracks:[d[0]],linkedGroup:e})}else for(let e of d)l.push({tracks:[e],linkedGroup:null});let p=e=>{let t=[],n=0,r=0,i=!1,a=null,o=-1/0;for(let a of e)a.isVideoTrack()?(n++,i||=(a.metadata.rotation??0)!==0):a.isAudioTrack()&&r++,t.push(a.source._codec);for(let e of hi(this.format._options.segmentFormat)){let s=e.getSupportedCodecs(),c=e.getSupportedTrackCounts();if(t.some(e=>!s.includes(e))||n<c.video.min||n>c.video.max||r<c.audio.min||r>c.audio.max)continue;let l=0;i&&e.supportsVideoRotationMetadata&&l++,l>o&&(a=e,o=l)}return D(a),a},m=async e=>{if(e.some(e=>this.playlists.some(t=>t.tracks.includes(e))))throw Error(`Internal error: track is already registered in a playlist.`);let t=p(e),n=this.playlists.length+1,r=await this.getPlaylistPath({n,tracks:e,segmentFormat:t});I_(r);let i={id:this.playlists.length+1,path:r,tracks:e,segmentFormat:t,currentSegmentStartTimestamp:null,currentSegmentStartTimestampIsFixed:!1,nextSegmentId:1,initSegment:null,writtenSegments:[],peakBitrate:null,averageBitrate:null,mediaSequence:0,done:!1,singleFile:null,mutex:new tr};return this.playlists.push(i),i};for(let e of i)if(e.needsEmit)for(let t=0;t<e.tracks.length;t++){let n=e.tracks[t],r=this.playlists.find(e=>e.tracks[0].id===n.id);r??=await m([n]),this.playlistDeclarations.push({playlist:r,groupId:e.name,noUri:e.firstNoUri&&t===0,references:[]})}for(let e of l){let t=this.playlists.find(t=>t.tracks[0].id===e.tracks[0].id);t??=await m(e.tracks),this.playlistDeclarations.push({playlist:t,groupId:null,noUri:!1,references:e.linkedGroup?this.playlistDeclarations.filter(t=>t.groupId===e.linkedGroup.name):[]})}e()}async getMimeType(){return wl}allTracksAreKnown(e){for(let t of e.tracks)if(!t.source._closed&&!this.trackDatas.some(e=>e.track===t))return!1;return!0}async onTrackClose(e){let t=this.trackDatas.find(t=>t.track===e);t&&(t.closed=!0);let n=this.playlists.find(t=>t.tracks.includes(e));D(n);let r=await n.mutex.acquire();try{await this.advancePlaylist(n)}finally{r()}}getVideoTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;da(t),D(t),D(t?.decoderConfig);let r=this.playlists.filter(t=>t.tracks.includes(e));return D(r.length===1),n={track:e,packets:[],playlist:r[0],closed:!1,info:{type:`video`,decoderConfig:t.decoderConfig}},this.trackDatas.push(n),n}getAudioTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;pa(t),D(t),D(t?.decoderConfig);let r=this.playlists.filter(t=>t.tracks.includes(e));return D(r.length===1),n={track:e,packets:[],playlist:r[0],closed:!1,info:{type:`audio`,decoderConfig:t.decoderConfig}},this.trackDatas.push(n),n}async addEncodedVideoPacket(e,t,n){let r=this.getVideoTrackData(e,n),i=r.playlist,a=await i.mutex.acquire();try{this.validateTimestamp(e,t.timestamp,t.type===`key`),r.packets.push(t),i.currentSegmentStartTimestamp===null?i.currentSegmentStartTimestamp=t.timestamp:i.currentSegmentStartTimestampIsFixed||(i.currentSegmentStartTimestamp=Math.min(i.currentSegmentStartTimestamp,t.timestamp)),await this.advancePlaylist(i)}finally{a()}}async addEncodedAudioPacket(e,t,n){let r=this.getAudioTrackData(e,n),i=r.playlist,a=await i.mutex.acquire();try{this.validateTimestamp(e,t.timestamp,t.type===`key`),r.packets.push(t),i.currentSegmentStartTimestamp===null?i.currentSegmentStartTimestamp=t.timestamp:i.currentSegmentStartTimestampIsFixed||(i.currentSegmentStartTimestamp=Math.min(i.currentSegmentStartTimestamp,t.timestamp)),await this.advancePlaylist(i)}finally{a()}}async addSubtitleCue(e,t,n){throw Error(`Unreachable.`)}async advancePlaylist(e){if(D(!e.done),!this.allTracksAreKnown(e))return;if(e.currentSegmentStartTimestamp===null){await this.onPlaylistDone(e);return}let t=this.trackDatas.filter(t=>e.tracks.includes(t.track)),n=t.find(e=>e.info.type===`video`),r=t.find(e=>e.info.type===`audio`);for(;;){let i=e.currentSegmentStartTimestamp+this.targetSegmentDuration,a=0,o=0;if(n&&(!n.closed||n.packets.length>0)){let e=n.packets.every(e=>e.timestamp<i),t=null,s=null;if(e){if(!n.closed)return}else for(let e=0;e<n.packets.length;e++){let r=n.packets[e];if(t!==null&&r.timestamp>i)break;e>0&&r.type===`key`&&(t=r,s=e)}if(s!==null){if(a=s,r){let e=r.packets.findIndex(e=>e.timestamp>=t.timestamp);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}}else{if(!n.closed)return;a=n.packets.length;let e=ni(n.packets,e=>e.timestamp),t=n.packets[e];if(D(t),r)if(t.timestamp<i){let e=r.packets.findIndex(e=>e.timestamp>=i);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}else{let e=r.packets.findIndex(e=>e.timestamp>t.timestamp);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}}}else if(r&&(!r.closed||r.packets.length>0))if(r.packets.every(e=>e.timestamp<i))if(r.closed)o=r.packets.length;else return;else{let e=ur(r.packets,e=>e.timestamp<=i);o=Math.max(e,1)}if(a===0&&o===0){t.every(e=>e.closed)&&await this.onPlaylistDone(e);return}let s=null,c,l;D(this.output._target instanceof bg);let u=this.output._target;if(this.singleFilePerPlaylist)if(e.singleFile===null){let t={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!0,playlist:z_(e)};c=await this.getSegmentPath(t),L_(c),l=$r($r(u.rootPath,e.path),c);let n=await this.output._getTarget({path:l,isRoot:!1,mimeType:e.segmentFormat.mimeType});n._start(),e.singleFile={target:n,path:c,nextOffset:0,info:t}}else c=e.singleFile.path,l=$r($r(u.rootPath,e.path),c);else s={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!1,playlist:z_(e)},c=await this.getSegmentPath(s),L_(c),l=$r($r(u.rootPath,e.path),c),e.nextSegmentId++;let d=0,f=null,p=new lv({format:e.segmentFormat,target:new bg(l,async t=>{let n={...t,isRoot:!1};if(t.isRoot)if(e.singleFile){let t=e.singleFile.target.slice(e.singleFile.nextOffset);return t.on(`write`,({end:e})=>d=Math.max(d,e)),t}else{let e=await this.output._getTarget(n);return f=e,e.on(`write`,({end:e})=>d=Math.max(d,e)),e}return this.output._getTarget(n)}),initTarget:async()=>{if(e.initSegment)return new vg;if(e.singleFile){e.initSegment={path:e.singleFile.path,duration:0,timestamp:0,byteSize:0,byteOffset:0,info:null};let t=e.singleFile.target.slice(e.singleFile.nextOffset);return t.on(`write`,({end:t})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,t)}),t.on(`finalized`,()=>{e.singleFile.nextOffset=e.initSegment.byteSize}),t}else{let t=z_(e),n=await this.getInitPath(t);R_(n),e.initSegment={path:n,duration:0,timestamp:0,byteSize:0,byteOffset:null,info:null};let r=$r($r(u.rootPath,e.path),n),i=await this.output._getTarget({path:r,isRoot:!1,mimeType:e.segmentFormat.mimeType});return i.on(`write`,({end:t})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,t)}),i.on(`finalized`,()=>{this.format._options.onInit?.(i,t)}),i}}}),m=-1/0;try{let e=null,t=null;if(n&&(e=new d_(n.track.source._codec),p.addVideoTrack(e,n.track.metadata)),r&&(t=new b_(r.track.source._codec),p.addAudioTrack(t,r.track.metadata)),await p.start(),n){D(e);let t={decoderConfig:n.info.decoderConfig};for(let r=0;r<a;r++){let i=n.packets[r];await e.add(i,t),m=Math.max(m,i.timestamp+i.duration)}}if(r){D(t);let e={decoderConfig:r.info.decoderConfig};for(let n=0;n<o;n++){let i=r.packets[n];await t.add(i,e),m=Math.max(m,i.timestamp+i.duration)}}await p.finalize()}catch(e){throw await p.cancel(),e}s&&(D(f),this.format._options.onSegment?.(f,s)),a>0&&(D(n),n.packets.splice(0,a)),o>0&&(D(r),r.packets.splice(0,o));let h=1/0;n&&n.packets.length>0&&(h=n.packets[0].timestamp),r&&r.packets.length>0&&(h=Math.min(h,r.packets[0].timestamp));let g=h<1/0?h:m;D(Number.isFinite(g));let _=g-e.currentSegmentStartTimestamp;if(D(_>=0),e.writtenSegments.push({path:c,duration:_,timestamp:e.currentSegmentStartTimestamp,byteSize:d,byteOffset:e.singleFile?e.singleFile.nextOffset:null,info:s??null}),this.globalTargetDuration=Math.max(this.globalTargetDuration,_),e.currentSegmentStartTimestamp=g,e.currentSegmentStartTimestampIsFixed=!0,e.singleFile&&(e.singleFile.nextOffset+=d),this.isLive){for(;e.writtenSegments.length>this.maxLiveSegmentCount;){let t=e.writtenSegments.shift();e.mediaSequence++,this.singleFilePerPlaylist||(D(t.info),this.format._options.onSegmentPopped?.(t.path,t.info))}await this.writePlaylist(e),await this.tryWriteMasterPlaylist()}}}async onPlaylistDone(e){D(!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 t=e.writtenSegments,n=0,r=0,i=0;for(let e=0;e<t.length;e++){i+=t[e].duration;let r=0,a=0;for(let i=e;i<t.length&&(r+=t[i].byteSize,a+=t[i].duration,a>=.5*this.globalTargetDuration&&a<=1.5*this.globalTargetDuration&&(n=Math.max(n,8*r/a)),!(a>1.5*this.globalTargetDuration));i++);}if(n===0)for(let e of t){let t=e.duration||1;n=Math.max(n,8*e.byteSize/t)}for(let e of t)r+=8*e.byteSize;e.peakBitrate=n,e.averageBitrate=r/(i||1)}async writePlaylist(e){D(this.output._target instanceof bg);let t=this.output._target;this.updatePlaylistBitrates(e);let n=!1;for(let t of e.writtenSegments)n||=t.byteOffset!==null;let r=e.tracks[0].isVideoTrack()&&e.tracks[0].metadata.hasOnlyKeyPackets,i=3;(r||n)&&(i=4),e.initSegment&&(i=5),e.initSegment&&!r&&(i=6);let a=this.isLive?this.targetSegmentDuration:this.globalTargetDuration,o=$r(t.rootPath,e.path),s=`#EXTM3U
|
|
102
|
+
`),n=this.gl.createProgram();return this.gl.attachShader(n,e),this.gl.attachShader(n,t),this.gl.linkProgram(n),n}createShader(e,t){D(this.gl);let n=this.gl.createShader(e);return this.gl.shaderSource(n,t),this.gl.compileShader(n),this.gl.getShaderParameter(n,this.gl.COMPILE_STATUS)||console.error(`Shader compile error:`,this.gl.getShaderInfoLog(n)),n}createVAO(){D(this.gl),D(this.colorProgram);let e=this.gl.createVertexArray();this.gl.bindVertexArray(e);let t=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),n=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,n),this.gl.bufferData(this.gl.ARRAY_BUFFER,t,this.gl.STATIC_DRAW);let r=this.gl.getAttribLocation(this.colorProgram,`a_position`),i=this.gl.getAttribLocation(this.colorProgram,`a_texCoord`);return this.gl.enableVertexAttribArray(r),this.gl.vertexAttribPointer(r,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(i),this.gl.vertexAttribPointer(i,2,this.gl.FLOAT,!1,16,8),e}createTexture(){D(this.gl);let e=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,e),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),e}runColorProgram(e){return D(this.gl),D(this.canvas),this.gl.useProgram(this.colorProgram),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),new VideoFrame(this.canvas,{timestamp:e.timestamp,duration:e.duration??void 0,alpha:`discard`})}runAlphaProgram(e){D(this.gl),D(this.canvas),this.gl.useProgram(this.alphaProgram),this.gl.uniform2f(this.alphaResolutionLocation,this.canvas.width,this.canvas.height),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4);let{width:t,height:n}=this.canvas,r=Math.ceil(t/2)*Math.ceil(n/2),i=t*n+r*2,a=Math.ceil(i/(t*4)),o=new Uint8Array(4*t*a);this.gl.readPixels(0,0,t,a,this.gl.RGBA,this.gl.UNSIGNED_BYTE,o),o=o.subarray(0,i),D(o[t*n]===128),D(o[o.length-1]===128);let s={format:`I420`,codedWidth:t,codedHeight:n,timestamp:e.timestamp,duration:e.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,s)}updateCpu(e){if(!this.worker){let e=new Blob([`(${h_.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);this.worker=new Worker(t),URL.revokeObjectURL(t),this.worker.addEventListener(`message`,e=>{let t=e.data,n=this.pendingRequests.get(t.id);n&&(this.pendingRequests.delete(t.id),`error`in t?n.reject(Error(t.error)):n.resolve({colorFrame:t.colorFrame,alphaFrame:t.alphaFrame}))}),this.worker.addEventListener(`error`,e=>{let t=Error(e.message||`Color/alpha splitter worker error.`);for(let e of this.pendingRequests.values())e.reject(t);this.pendingRequests.clear()})}let t=this.nextRequestId++,n=P();return this.pendingRequests.set(t,n),this.worker.postMessage({id:t,sourceFrame:e},{transfer:[e]}),n.promise}close(){this.gl?.getExtension(`WEBGL_lose_context`)?.loseContext(),this.gl=null,this.canvas=null,this.worker?.terminate(),this.worker=null;let e=Error(`Color/alpha splitter closed.`);for(let t of this.pendingRequests.values())t.reject(e);this.pendingRequests.clear()}},m_.forceCpu=!0,h_=()=>{let e=null,t=Promise.resolve();self.addEventListener(`message`,e=>{let{id:r,sourceFrame:i}=e.data;t=t.then(async()=>{try{let{colorFrame:e,alphaFrame:t}=await n(i);self.postMessage({id:r,colorFrame:e,alphaFrame:t},{transfer:[e,t]})}catch(e){self.postMessage({id:r,error:e.message})}finally{i.close()}})});let n=async t=>{let n=t.format;if(!n)throw Error(`CPU color/alpha splitting requires a known VideoFrame format.`);let a=t.codedWidth,o=t.codedHeight,s=t.allocationSize();if((!e||e.byteLength!==s)&&(e=new Uint8Array(s)),await t.copyTo(e),n===`RGBA`||n===`BGRA`)return r(e,a,o,n,t);if(n===`I420A`||n===`I420AP10`||n===`I420AP12`||n===`I422A`||n===`I422AP10`||n===`I422AP12`||n===`I444A`||n===`I444AP10`||n===`I444AP12`)return i(e,a,o,n,t);throw Error(`CPU color/alpha splitting does not support format '${n}'.`)},r=(e,t,n,r,i)=>{let a=t*n,o=a+Math.ceil(t/2)*Math.ceil(n/2)*2,s=new Uint8Array(o);for(let t=0,n=3;t<a;t++,n+=4)s[t]=e[n];s.fill(128,a);let c=new VideoFrame(e,{format:r===`RGBA`?`RGBX`:`BGRX`,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0}),l={format:`I420`,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0,transfer:[s.buffer]};return{colorFrame:c,alphaFrame:new VideoFrame(s,l)}},i=(e,t,n,r,i)=>{let a=r.includes(`P10`),o=r.includes(`P12`),s=a||o?2:1,c,l;r.startsWith(`I420`)?(c=Math.ceil(t/2),l=Math.ceil(n/2)):r.startsWith(`I422`)?(c=Math.ceil(t/2),l=n):(c=t,l=n);let u=t*n,d=c*l,f=u*s,p=d*s,m=u*s,h=f+p*2,g=r.replace(`A`,``),_=Math.ceil(t/2)*Math.ceil(n/2),v=m+_*s*2,y=new Uint8Array(v),b=h;y.set(e.subarray(b,b+m),0);let x=m,S=a?512:o?2048:128;s===1?y.fill(S,x):new Uint16Array(y.buffer,x,2*_).fill(S);let C=a?`I420P10`:o?`I420P12`:`I420`,ee=new VideoFrame(e.subarray(0,h),{format:g,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0}),w={format:C,codedWidth:t,codedHeight:n,timestamp:i.timestamp,duration:i.duration??void 0,transfer:[y.buffer]};return{colorFrame:ee,alphaFrame:new VideoFrame(y,w)}}},g_=class extends l_{constructor(e){$d(e),super(e.codec),this._encoder=new f_(this,e)}add(e,t){if(!(e instanceof Sd))throw TypeError(`videoSample must be a VideoSample.`);return this._encoder.add(e,!1,t)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},__=class extends l_{constructor(e,t){if(!(typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas))throw TypeError(`canvas must be an HTMLCanvasElement or OffscreenCanvas.`);$d(t),super(t.codec),this._encoder=new f_(this,t),this._canvas=e}add(e,t=0,n){if(!Number.isFinite(e)||e<0)throw TypeError(`timestamp must be a non-negative number.`);if(!Number.isFinite(t)||t<0)throw TypeError(`duration must be a non-negative number.`);let r=new Sd(this._canvas,{timestamp:e,duration:t});return this._encoder.add(r,!0,n)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},v_=class extends l_{get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}constructor(e,t,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!==`video`)throw TypeError(`track must be a video MediaStreamTrack.`);if($d(t),typeof n!=`object`||!n)throw TypeError(`options must be an object.`);if(n.frameRate!=null&&(typeof n.frameRate!=`number`||n.frameRate<=0))throw 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 TypeError(`options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.`);t={...t,latencyMode:`realtime`},super(t.codec),this._abortController=null,this._workerTrackId=null,this._workerListener=null,this._promiseWithResolvers=P(),this._errorPromiseAccessed=!1,this._paused=!1,this._lastVideoFrame=null,this._timerHandle=null,this._videoElement=null,this._options=n,this._encoder=new f_(this,t),this._track=e}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly.");let e=this._options.frameRate===void 0?this._track.getSettings().frameRate??null:this._options.frameRate;this._abortController=new AbortController;let t=null,n=null,r=0,i=!1,a=null,o=0,s=()=>{if(D(e!==null),!this._lastVideoFrame)return;D(n!==null),D(t!==null);let i=performance.now();for(;i-n>1e3/e;){n+=1e3/e;let a=t+r/e;l(new VideoFrame(this._videoElement??this._lastVideoFrame,{timestamp:1e6*a,duration:1e6/e}),i)}};e!==null&&(this._timerHandle=fi(s,4));let c=t=>{if(e===null)l(t);else{let e=performance.now();this._lastVideoFrame?(s(),this._lastVideoFrame?.close(),this._lastVideoFrame=t):(l(t.clone(),e),n=e,this._lastVideoFrame=t)}},l=(e,n=performance.now())=>{if(i){e.close();return}r++;let s=e.timestamp/1e6;if(this._paused){if(t!==null){if(a!==null&&this._options.timestampBase!==`unix`){let e=s-a;o-=e}a=s}e.close();return}if(t===null){t=s;let e,r=this._options.timestampBase??`synced-zero`;if(r===`unix`)e=Date.now()/1e3;else if(r===`zero`)e=0;else{let t=this._connectedTrack.output;t._firstMediaStreamTimestamp===null?(t._firstMediaStreamTimestamp=n/1e3,e=0):e=n/1e3-t._firstMediaStreamTimestamp}o=e-t}if(a=s,this._encoder.getQueueSize()>=8){e.close();return}let c=new Sd(e,{timestamp:s+o});this._encoder.add(c,!0).catch(e=>{i=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(e),this._workerTrackId!==null&&j_({type:`stopTrack`,trackId:this._workerTrackId})})};if(typeof MediaStreamTrackProcessor<`u`){let e=new MediaStreamTrackProcessor({track:this._track}),t=new WritableStream({write:c});e.readable.pipeTo(t,{signal:this._abortController.signal}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||this._promiseWithResolvers.reject(e)})}else if(await A_())this._workerTrackId=E_++,j_({type:`videoTrack`,trackId:this._workerTrackId,track:this._track}),this._workerListener=e=>{let t=e.data;t.type===`videoFrame`&&t.trackId===this._workerTrackId?c(t.videoFrame):t.type===`error`&&t.trackId===this._workerTrackId&&this._promiseWithResolvers.reject(t.error)},D_.addEventListener(`message`,this._workerListener);else if(e!==null){let e=document.createElement(`video`);e.style.position=`fixed`,e.style.left=`-10000px`,e.style.top=`-10000px`,e.style.width=`1px`,e.style.height=`1px`,e.style.opacity=`0`,e.style.pointerEvents=`none`,e.muted=!0,e.srcObject=new MediaStream([this._track]),document.body.appendChild(e),this._videoElement=e,e.addEventListener(`loadeddata`,()=>{if(i||!this._videoElement)return;let t=new VideoFrame(e,{timestamp:1e3*performance.now()});c(t),t.close()},{once:!0}),e.play().catch(e=>{i=!0,this._promiseWithResolvers.reject(e)})}else throw 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(),null),this._timerHandle&&pi(this._timerHandle),this._lastVideoFrame?.close(),this._videoElement&&=(this._videoElement.srcObject=null,this._videoElement.remove(),null),this._workerTrackId!==null&&(D(this._workerListener),j_({type:`stopTrack`,trackId:this._workerTrackId}),await new Promise(e=>{let t=n=>{let r=n.data;r.type===`trackStopped`&&r.trackId===this._workerTrackId&&(D(this._workerListener),D_.removeEventListener(`message`,this._workerListener),D_.removeEventListener(`message`,t),e())};D_.addEventListener(`message`,t)})),await this._encoder.flushAndClose(e)}},y_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!Li.includes(e))throw TypeError(`Invalid audio codec '${e}'. Must be one of: ${Li.join(`, `)}.`);this._codec=e}},b_=class extends y_{constructor(e){super(e)}add(e,t){if(!(e instanceof R))throw TypeError(`packet must be an EncodedPacket.`);if(e.isMetadataOnly)throw TypeError(`Metadata-only packets cannot be added.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`meta, when provided, must be an object.`);return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,e,t)}},x_=class{constructor(e,t){this.source=e,this.encodingConfig=t,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 Fr,this.customEncoderQueueSize=0,this.lastEndSampleIndex=null,this.resampler=null,this.error=null,this.lastMuxerPromise=Promise.resolve()}async add(e,t){try{if(this.checkForEncoderError(),this.source._ensureValidAdd(),this.lastNumberOfChannels!==null&&this.lastSampleRate!==null){if(e.numberOfChannels!==this.lastNumberOfChannels||e.sampleRate!==this.lastSampleRate)throw Error(`Audio parameters must remain constant. Expected ${this.lastNumberOfChannels} channels at ${this.lastSampleRate} Hz, got ${e.numberOfChannels} channels at ${e.sampleRate} Hz.`)}else this.lastNumberOfChannels=e.numberOfChannels,this.lastSampleRate=e.sampleRate;let n=this.encodingConfig;n.transform?.numberOfChannels!==void 0||n.transform?.sampleRate!==void 0?(this.resampler||=new o_({targetNumberOfChannels:n.transform.numberOfChannels??e.numberOfChannels,targetSampleRate:n.transform.sampleRate??e.sampleRate,startTime:e.timestamp,endTime:1/0,onSample:async e=>{await this.processAndEncode(e,!0)}}),await this.resampler.add(e)):await this.processAndEncode(e,t)}finally{t&&e.close()}}async processAndEncode(e,t){let n=this.encodingConfig;if(n.transform?.sampleFormat!==void 0&&qd(e.format)!==n.transform.sampleFormat){let r=Yd(e,n.transform.sampleFormat);t&&e.close(),e=r,t=!0}if(n.transform?.process){let r=n.transform.process(e);if(r instanceof Promise&&(r=await r),r===null)return;Array.isArray(r)||(r=[r]);for(let e of r){if(!(e instanceof Vd))throw TypeError(`The audio process function must return an AudioSample, null, or an array of AudioSamples.`);await this.encodeSample(e,!0)}t&&e.close()}else await this.encodeSample(e,t)}async encodeSample(e,t){try{this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(e),this.encoderInitialized||await this.ensureEncoderPromise),D(this.encoderInitialized);{let t=Math.round(e.timestamp*e.sampleRate),n=Math.round((e.timestamp+e.duration)*e.sampleRate);if(this.lastEndSampleIndex===null)this.lastEndSampleIndex=n;else{let n=t-this.lastEndSampleIndex;if(n>=64){let t=new Vd({data:new Float32Array(n*e.numberOfChannels),format:`f32-planar`,sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,numberOfFrames:n,timestamp:this.lastEndSampleIndex/e.sampleRate});await this.encodeSample(t,!0)}this.lastEndSampleIndex+=e.numberOfFrames}}if(this.customEncoder){this.customEncoderQueueSize++;let t=e.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(t)).then(()=>this.customEncoderQueueSize--).catch(e=>this.error??=e).finally(()=>{t.close()});this.customEncoderQueueSize>=4&&await n,await this.lastMuxerPromise}else if(this.isPcmEncoder)await this.doPcmEncoding(e,t);else{D(this.encoder);let n=e.toAudioData();this.encoder.encode(n),n.close(),t&&e.close(),this.encoder.encodeQueueSize>=4&&await new Promise(e=>this.encoder.addEventListener(`dequeue`,e,{once:!0})),await this.lastMuxerPromise}}finally{t&&e.close()}}async doPcmEncoding(e,t){D(this.outputSampleSize),D(this.writeOutputValue);let{numberOfChannels:n,numberOfFrames:r,sampleRate:i,timestamp:a}=e,o=2048,s=[];for(let t=0;t<r;t+=o){let r=Math.min(o,e.numberOfFrames-t),i=r*n*this.outputSampleSize,a=new ArrayBuffer(i),c=new DataView(a);s.push({frameCount:r,view:c})}let c=e.allocationSize({planeIndex:0,format:`f32-planar`}),l=new Float32Array(c/Float32Array.BYTES_PER_ELEMENT);for(let t=0;t<n;t++){e.copyTo(l,{planeIndex:t,format:`f32-planar`});for(let e=0;e<s.length;e++){let{frameCount:r,view:i}=s[e];for(let a=0;a<r;a++)this.writeOutputValue(i,(a*n+t)*this.outputSampleSize,l[e*o+a])}}t&&e.close();let u={decoderConfig:{codec:this.encodingConfig.codec,numberOfChannels:n,sampleRate:i}};for(let e=0;e<s.length;e++){let{frameCount:t,view:n}=s[e],r=n.buffer,c=e*o,l=new R(new Uint8Array(r),`key`,a+c/i,t/i);this.encodingConfig.onEncodedPacket?.(l,u),await this.muxer.addEncodedAudioPacket(this.source._connectedTrack,l,u)}}ensureEncoder(e){this.ensureEncoderPromise=(async()=>{let{numberOfChannels:t,sampleRate:n}=e,r=af({numberOfChannels:t,sampleRate:n,...this.encodingConfig});this.encodingConfig.onEncoderConfig?.(r);let i=jf.find(e=>e.supports(this.encodingConfig.codec,r));if(i)this.customEncoder=new i,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=r,this.customEncoder.onPacket=(e,t)=>{if(!(e instanceof R))throw TypeError(`The first argument passed to onPacket must be an EncodedPacket.`);if(t!==void 0&&(!t||typeof t!=`object`))throw TypeError(`The second argument passed to onPacket must be an object or undefined.`);this.encodingConfig.onEncodedPacket?.(e,t),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,e,t).catch(e=>{this.error??=e})},await this.customEncoder.init();else if(Fi.includes(this.encodingConfig.codec))this.initPcmEncoder();else{if(typeof AudioEncoder>`u`)throw Error(`AudioEncoder is not supported by this browser.`);if(!(await AudioEncoder.isConfigSupported(r)).supported)throw Error(`This specific encoder configuration (${r.codec}, ${r.bitrate} bps, ${r.numberOfChannels} channels, ${r.sampleRate} Hz) is not supported by this browser. Consider using another codec or changing your audio parameters.`);let e=Error(`Encoding error`).stack;this.encoder=new AudioEncoder({output:(e,t)=>{if(this.encodingConfig.codec===`aac`&&t?.decoderConfig){let e=!1;if(e=!t.decoderConfig.description||t.decoderConfig.description.byteLength<2?!0:Ai(A(t.decoderConfig.description)).objectType===0,e){let e=Number(O(r.codec.split(`.`)));t.decoderConfig.description=ji({objectType:e,numberOfChannels:t.decoderConfig.numberOfChannels,sampleRate:t.decoderConfig.sampleRate})}}let n=R.fromEncodedChunk(e);n=n.clone({timestamp:wr(n.timestamp,r.sampleRate),duration:e.duration==null?void 0:wr(n.duration,r.sampleRate)}),this.encodingConfig.onEncodedPacket?.(n,t),this.lastMuxerPromise=this.muxer.addEncodedAudioPacket(this.source._connectedTrack,n,t).catch(e=>{this.error??=e})},error:t=>{t.stack=e,this.error??=t}}),this.encoder.configure(r)}D(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}initPcmEncoder(){this.isPcmEncoder=!0;let e=this.encodingConfig.codec,{dataType:t,sampleSize:n,littleEndian:r}=ta(e);switch(this.outputSampleSize=n,n){case 1:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint8(t,br((n+1)*127.5,0,255)):t===`signed`?this.writeOutputValue=(e,t,n)=>{e.setInt8(t,br(Math.round(n*128),-128,127))}:t===`ulaw`?this.writeOutputValue=(e,t,n)=>{let r=br(Math.floor(n*32767),-32768,32767);e.setUint8(t,Ff(r))}:t===`alaw`?this.writeOutputValue=(e,t,n)=>{let r=br(Math.floor(n*32767),-32768,32767);e.setUint8(t,Lf(r))}:D(!1);break;case 2:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint16(t,br((n+1)*32767.5,0,65535),r):t===`signed`?this.writeOutputValue=(e,t,n)=>e.setInt16(t,br(Math.round(n*32767),-32768,32767),r):D(!1);break;case 3:t===`unsigned`?this.writeOutputValue=(e,t,n)=>gr(e,t,br((n+1)*8388607.5,0,16777215),r):t===`signed`?this.writeOutputValue=(e,t,n)=>_r(e,t,br(Math.round(n*8388607),-8388608,8388607),r):D(!1);break;case 4:t===`unsigned`?this.writeOutputValue=(e,t,n)=>e.setUint32(t,br((n+1)*2147483647.5,0,4294967295),r):t===`signed`?this.writeOutputValue=(e,t,n)=>e.setInt32(t,br(Math.round(n*2147483647),-2147483648,2147483647),r):t===`float`?this.writeOutputValue=(e,t,n)=>e.setFloat32(t,n,r):D(!1);break;case 8:t===`float`?this.writeOutputValue=(e,t,n)=>e.setFloat64(t,n,r):D(!1);break;default:pr(n),D(!1)}}async flushAndClose(e){e||this.checkForEncoderError(),!e&&this.resampler&&await this.resampler.finalize(),this.resampler=null,this.customEncoder?(e||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(e||await this.encoder.flush(),this.encoder.state!==`closed`&&this.encoder.close()),e||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.isPcmEncoder?0:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},S_=class extends y_{constructor(e){nf(e),super(e.codec),this._encoder=new x_(this,e)}add(e){if(!(e instanceof Vd))throw TypeError(`audioSample must be an AudioSample.`);return this._encoder.add(e,!1)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},C_=class extends y_{constructor(e){nf(e),super(e.codec),this._accumulatedTime=0,this._encoder=new x_(this,e)}async add(e){if(!(e instanceof AudioBuffer))throw TypeError(`audioBuffer must be an AudioBuffer.`);let t=Vd._fromAudioBuffer(e,this._accumulatedTime);this._accumulatedTime+=e.duration;for(let e of t)await this._encoder.add(e,!0)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},w_=class extends y_{get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}constructor(e,t,n={}){if(!(e instanceof MediaStreamTrack)||e.kind!==`audio`)throw TypeError(`track must be an audio MediaStreamTrack.`);if(nf(t),typeof n!=`object`||!n)throw TypeError(`options must be an object.`);if(n.timestampBase!==void 0&&n.timestampBase!==`synced-zero`&&n.timestampBase!==`zero`&&n.timestampBase!==`unix`)throw TypeError(`options.timestampBase, when provided, must be one of 'synced-zero', 'zero', or 'unix'.`);super(t.codec),this._abortController=null,this._audioContext=null,this._scriptProcessorNode=null,this._promiseWithResolvers=P(),this._errorPromiseAccessed=!1,this._paused=!1,this._options=n,this._encoder=new x_(this,t),this._track=e}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamAudioTrackSource, so that any internal errors get bubbled up properly."),this._abortController=new AbortController;let e=null,t=!1,n=null,r=0,i=i=>{if(t){i.close();return}let a=i.timestamp;if(this._paused){if(e!==null){if(n!==null&&this._options.timestampBase!==`unix`){let e=a-n;r-=e}n=a}i.close();return}if(e===null){e=i.timestamp;let t,n=this._options.timestampBase??`synced-zero`;if(n===`unix`)t=Date.now()/1e3;else if(n===`zero`)t=0;else{let e=this._connectedTrack.output;e._firstMediaStreamTimestamp===null?(e._firstMediaStreamTimestamp=performance.now()/1e3,t=0):t=performance.now()/1e3-e._firstMediaStreamTimestamp}r=t-e}if(n=a,this._encoder.getQueueSize()>=8){i.close();return}i.setTimestamp(a+r),this._encoder.add(i,!0).catch(e=>{t=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(e),this._audioContext?.suspend()})};if(typeof MediaStreamTrackProcessor<`u`){let e=new MediaStreamTrackProcessor({track:this._track}),t=new WritableStream({write:e=>i(new Vd(e))});e.readable.pipeTo(t,{signal:this._abortController.signal}).catch(e=>{e instanceof DOMException&&e.name===`AbortError`||this._promiseWithResolvers.reject(e)})}else{this._audioContext=new(window.AudioContext||window.webkitAudioContext)({sampleRate:this._track.getSettings().sampleRate});let e=this._audioContext.createMediaStreamSource(new MediaStream([this._track]));this._scriptProcessorNode=this._audioContext.createScriptProcessor(4096),this._audioContext.state===`suspended`&&await this._audioContext.resume(),e.connect(this._scriptProcessorNode),this._scriptProcessorNode.connect(this._audioContext.destination);let t=0;this._scriptProcessorNode.onaudioprocess=e=>{let n=Vd._fromAudioBuffer(e.inputBuffer,t);t+=e.inputBuffer.duration;for(let e of n)i(e)}}}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&=(this._abortController.abort(),null),this._audioContext&&(D(this._scriptProcessorNode),this._scriptProcessorNode.disconnect(),await this._audioContext.suspend()),await this._encoder.flushAndClose(e)}},T_=()=>{let e=(e,t)=>{t?self.postMessage(e,{transfer:t}):self.postMessage(e)};e({type:`support`,supported:typeof MediaStreamTrackProcessor<`u`});let t=new Map,n=new Map;self.addEventListener(`message`,r=>{let i=r.data;switch(i.type){case`videoTrack`:{n.set(i.trackId,i.track);let r=new MediaStreamTrackProcessor({track:i.track}),a=new WritableStream({write:t=>{if(!n.has(i.trackId)){t.close();return}e({type:`videoFrame`,trackId:i.trackId,videoFrame:t},[t])}}),o=new AbortController;t.set(i.trackId,o),r.readable.pipeTo(a,{signal:o.signal}).catch(t=>{t instanceof DOMException&&t.name===`AbortError`||e({type:`error`,trackId:i.trackId,error:t})})}break;case`stopTrack`:{let r=t.get(i.trackId);r&&(r.abort(),t.delete(i.trackId)),n.get(i.trackId)?.stop(),n.delete(i.trackId),e({type:`trackStopped`,trackId:i.trackId})}break;default:pr(i)}})},E_=0,D_=null,O_=()=>{let e=new Blob([`(${T_.toString()})()`],{type:`application/javascript`}),t=URL.createObjectURL(e);D_=new Worker(t)},k_=null,A_=async()=>k_===null?(D_||O_(),new Promise(e=>{D(D_);let t=n=>{let r=n.data;r.type===`support`&&(k_=r.supported,D_.removeEventListener(`message`,t),e(r.supported))};D_.addEventListener(`message`,t)})):k_,j_=(e,t)=>{D(D_),t?D_.postMessage(e,t):D_.postMessage(e)},M_=class extends c_{constructor(e){if(super(),this._connectedTrack=null,!Ri.includes(e))throw TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${Ri.join(`, `)}.`);this._codec=e}},N_=class extends M_{constructor(e){super(e),this._error=null,this._lastMuxerPromise=Promise.resolve(),this._parser=new dm({codec:e,output:(e,t)=>{this._lastMuxerPromise=this._connectedTrack.output._muxer.addSubtitleCue(this._connectedTrack,e,t).catch(e=>{this._error??=e})}})}add(e){if(typeof e!=`string`)throw TypeError(`text must be a string.`);return this._checkForError(),this._ensureValidAdd(),this._parser.parse(e),this._lastMuxerPromise}_checkForError(){if(this._error)throw this._error}async _flushAndClose(e){e||this._checkForError()}}})),F_,I_,L_,R_,z_,B_=n((()=>{ma(),P_(),F(),em(),uv(),sg(),xg(),Bl(),F_=class extends $p{constructor(e,t){if(!(e._target instanceof bg))throw 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=t,this.targetSegmentDuration=t._options.targetDuration??2,this.singleFilePerPlaylist=t._options.singleFilePerPlaylist??!1,this.isLive=t._options.live??!1,this.maxLiveSegmentCount=t._options.maxLiveSegmentCount??1/0,this.globalTargetDuration=this.targetSegmentDuration,this.getPlaylistPath=t._options.getPlaylistPath??(({n:e})=>`playlist-${e}.m3u8`),this.getSegmentPath=t._options.getSegmentPath??(e=>e.isSingleFile?`segments-${e.playlist.n}${e.format.fileExtension}`:`segment-${e.playlist.n}-${e.n}${e.format.fileExtension}`),this.getInitPath=t._options.getInitPath??(e=>`init-${e.n}${e.segmentFormat.fileExtension}`)}async start(){let e=await this.mutex.acquire(),t=this.output._tracks.some(e=>e.metadata.isRelativeToUnixEpoch),n=this.output._tracks.some(e=>!e.metadata.isRelativeToUnixEpoch);if(t&&n)throw Error("All tracks must agree on `relativeToUnixEpoch`: some tracks are relative to the Unix epoch and some are not.");this.isRelativeToUnixEpoch=t;let r=new Map,i=[],a=!1,o=!1,s=!1;for(let e of this.output._tracks){e.type===`video`&&(a=!0);let t=new Map;for(let n of this.output._tracks){if(e===n||!e.canBePairedWith(n))continue;if(e.type===n.type){o||=(console.warn(`Illegal pairing of two ${e.type} tracks detected, which is not possible in HLS; treating them as unpaired.`),!0);continue}if(e.isVideoTrack()&&e.metadata.hasOnlyKeyPackets||n.isVideoTrack()&&n.metadata.hasOnlyKeyPackets){s||=(console.warn(`A key-packets-only video track is pairable with another track, which is not possible in HLS; treating them as unpaired.`),!0);continue}let r=t.get(n.source._codec);r||t.set(n.source._codec,r=[]),r.push(n)}for(let[,n]of t){let t=n.map(e=>e.id).join(`-`);i.find(e=>e.key===t)||i.push({name:n[0].type+`-`+(i.length+1),key:t,tracks:n,needsEmit:!1,firstNoUri:!1});let a=r.get(e);a||r.set(e,a=[]),a.push(t)}}let c=a?`video`:`audio`,l=[],u=[],d=[];for(let e of this.output._tracks){let t=r.get(e);if(t){if(D(t.length>0),e.type!==c)continue;for(let n of t){let a=i.find(e=>e.key===n);if(D(a),t.length===1&&a.tracks.length===1){let t=r.get(a.tracks[0]);if(D(t!==void 0),t.length===1){let n=i.find(e=>e.key===t[0]);if(n.tracks.length===1){D(n.tracks[0]===e),l.push({tracks:[e,a.tracks[0]],linkedGroup:null});continue}}}l.push({tracks:[e],linkedGroup:a}),a.needsEmit=!0}}else e.type===`video`?u.push(e):e.type===`audio`&&d.push(e)}let f=({metadata:e})=>{let t=``;return t+=`${e.languageCode??xr}-`,t+=`${e.name??``}-`,t+=`${e.disposition?.default??!0}-`,t+=`${e.disposition?.primary??!1}-`,t+=`${e.disposition?.forced??!1}-`,t};if(u.length>0)if(new Set(u.map(f)).size>1){let e={key:u.map(e=>e.id).join(`-`),name:`video-`+(i.length+1),tracks:u,needsEmit:!0,firstNoUri:!0};i.push(e),l.push({tracks:[u[0]],linkedGroup:e})}else for(let e of u)l.push({tracks:[e],linkedGroup:null});if(d.length>0)if(new Set(d.map(f)).size>1){let e={key:d.map(e=>e.id).join(`-`),name:`audio-`+(i.length+1),tracks:d,needsEmit:!0,firstNoUri:!0};i.push(e),l.push({tracks:[d[0]],linkedGroup:e})}else for(let e of d)l.push({tracks:[e],linkedGroup:null});let p=e=>{let t=[],n=0,r=0,i=!1,a=null,o=-1/0;for(let a of e)a.isVideoTrack()?(n++,i||=(a.metadata.rotation??0)!==0):a.isAudioTrack()&&r++,t.push(a.source._codec);for(let e of hi(this.format._options.segmentFormat)){let s=e.getSupportedCodecs(),c=e.getSupportedTrackCounts();if(t.some(e=>!s.includes(e))||n<c.video.min||n>c.video.max||r<c.audio.min||r>c.audio.max)continue;let l=0;i&&e.supportsVideoRotationMetadata&&l++,l>o&&(a=e,o=l)}return D(a),a},m=async e=>{if(e.some(e=>this.playlists.some(t=>t.tracks.includes(e))))throw Error(`Internal error: track is already registered in a playlist.`);let t=p(e),n=this.playlists.length+1,r=await this.getPlaylistPath({n,tracks:e,segmentFormat:t});I_(r);let i={id:this.playlists.length+1,path:r,tracks:e,segmentFormat:t,currentSegmentStartTimestamp:null,currentSegmentStartTimestampIsFixed:!1,nextSegmentId:1,initSegment:null,writtenSegments:[],peakBitrate:null,averageBitrate:null,mediaSequence:0,done:!1,singleFile:null,mutex:new tr};return this.playlists.push(i),i};for(let e of i)if(e.needsEmit)for(let t=0;t<e.tracks.length;t++){let n=e.tracks[t],r=this.playlists.find(e=>e.tracks[0].id===n.id);r??=await m([n]),this.playlistDeclarations.push({playlist:r,groupId:e.name,noUri:e.firstNoUri&&t===0,references:[]})}for(let e of l){let t=this.playlists.find(t=>t.tracks[0].id===e.tracks[0].id);t??=await m(e.tracks),this.playlistDeclarations.push({playlist:t,groupId:null,noUri:!1,references:e.linkedGroup?this.playlistDeclarations.filter(t=>t.groupId===e.linkedGroup.name):[]})}e()}async getMimeType(){return Cl}allTracksAreKnown(e){for(let t of e.tracks)if(!t.source._closed&&!this.trackDatas.some(e=>e.track===t))return!1;return!0}async onTrackClose(e){let t=this.trackDatas.find(t=>t.track===e);t&&(t.closed=!0);let n=this.playlists.find(t=>t.tracks.includes(e));D(n);let r=await n.mutex.acquire();try{await this.advancePlaylist(n)}finally{r()}}getVideoTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;ua(t),D(t),D(t?.decoderConfig);let r=this.playlists.filter(t=>t.tracks.includes(e));return D(r.length===1),n={track:e,packets:[],playlist:r[0],closed:!1,info:{type:`video`,decoderConfig:t.decoderConfig}},this.trackDatas.push(n),n}getAudioTrackData(e,t){let n=this.trackDatas.find(t=>t.track===e);if(n)return n;fa(t),D(t),D(t?.decoderConfig);let r=this.playlists.filter(t=>t.tracks.includes(e));return D(r.length===1),n={track:e,packets:[],playlist:r[0],closed:!1,info:{type:`audio`,decoderConfig:t.decoderConfig}},this.trackDatas.push(n),n}async addEncodedVideoPacket(e,t,n){let r=this.getVideoTrackData(e,n),i=r.playlist,a=await i.mutex.acquire();try{this.validateTimestamp(e,t.timestamp,t.type===`key`),r.packets.push(t),i.currentSegmentStartTimestamp===null?i.currentSegmentStartTimestamp=t.timestamp:i.currentSegmentStartTimestampIsFixed||(i.currentSegmentStartTimestamp=Math.min(i.currentSegmentStartTimestamp,t.timestamp)),await this.advancePlaylist(i)}finally{a()}}async addEncodedAudioPacket(e,t,n){let r=this.getAudioTrackData(e,n),i=r.playlist,a=await i.mutex.acquire();try{this.validateTimestamp(e,t.timestamp,t.type===`key`),r.packets.push(t),i.currentSegmentStartTimestamp===null?i.currentSegmentStartTimestamp=t.timestamp:i.currentSegmentStartTimestampIsFixed||(i.currentSegmentStartTimestamp=Math.min(i.currentSegmentStartTimestamp,t.timestamp)),await this.advancePlaylist(i)}finally{a()}}async addSubtitleCue(e,t,n){throw Error(`Unreachable.`)}async advancePlaylist(e){if(D(!e.done),!this.allTracksAreKnown(e))return;if(e.currentSegmentStartTimestamp===null){await this.onPlaylistDone(e);return}let t=this.trackDatas.filter(t=>e.tracks.includes(t.track)),n=t.find(e=>e.info.type===`video`),r=t.find(e=>e.info.type===`audio`);for(;;){let i=e.currentSegmentStartTimestamp+this.targetSegmentDuration,a=0,o=0;if(n&&(!n.closed||n.packets.length>0)){let e=n.packets.every(e=>e.timestamp<i),t=null,s=null;if(e){if(!n.closed)return}else for(let e=0;e<n.packets.length;e++){let r=n.packets[e];if(t!==null&&r.timestamp>i)break;e>0&&r.type===`key`&&(t=r,s=e)}if(s!==null){if(a=s,r){let e=r.packets.findIndex(e=>e.timestamp>=t.timestamp);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}}else{if(!n.closed)return;a=n.packets.length;let e=ni(n.packets,e=>e.timestamp),t=n.packets[e];if(D(t),r)if(t.timestamp<i){let e=r.packets.findIndex(e=>e.timestamp>=i);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}else{let e=r.packets.findIndex(e=>e.timestamp>t.timestamp);if(e!==-1)o=e;else if(r.closed)o=r.packets.length;else return}}}else if(r&&(!r.closed||r.packets.length>0))if(r.packets.every(e=>e.timestamp<i))if(r.closed)o=r.packets.length;else return;else{let e=ur(r.packets,e=>e.timestamp<=i);o=Math.max(e,1)}if(a===0&&o===0){t.every(e=>e.closed)&&await this.onPlaylistDone(e);return}let s=null,c,l;D(this.output._target instanceof bg);let u=this.output._target;if(this.singleFilePerPlaylist)if(e.singleFile===null){let t={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!0,playlist:z_(e)};c=await this.getSegmentPath(t),L_(c),l=$r($r(u.rootPath,e.path),c);let n=await this.output._getTarget({path:l,isRoot:!1,mimeType:e.segmentFormat.mimeType});n._start(),e.singleFile={target:n,path:c,nextOffset:0,info:t}}else c=e.singleFile.path,l=$r($r(u.rootPath,e.path),c);else s={n:e.nextSegmentId,format:e.segmentFormat,isSingleFile:!1,playlist:z_(e)},c=await this.getSegmentPath(s),L_(c),l=$r($r(u.rootPath,e.path),c),e.nextSegmentId++;let d=0,f=null,p=new lv({format:e.segmentFormat,target:new bg(l,async t=>{let n={...t,isRoot:!1};if(t.isRoot)if(e.singleFile){let t=e.singleFile.target.slice(e.singleFile.nextOffset);return t.on(`write`,({end:e})=>d=Math.max(d,e)),t}else{let e=await this.output._getTarget(n);return f=e,e.on(`write`,({end:e})=>d=Math.max(d,e)),e}return this.output._getTarget(n)}),initTarget:async()=>{if(e.initSegment)return new vg;if(e.singleFile){e.initSegment={path:e.singleFile.path,duration:0,timestamp:0,byteSize:0,byteOffset:0,info:null};let t=e.singleFile.target.slice(e.singleFile.nextOffset);return t.on(`write`,({end:t})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,t)}),t.on(`finalized`,()=>{e.singleFile.nextOffset=e.initSegment.byteSize}),t}else{let t=z_(e),n=await this.getInitPath(t);R_(n),e.initSegment={path:n,duration:0,timestamp:0,byteSize:0,byteOffset:null,info:null};let r=$r($r(u.rootPath,e.path),n),i=await this.output._getTarget({path:r,isRoot:!1,mimeType:e.segmentFormat.mimeType});return i.on(`write`,({end:t})=>{e.initSegment.byteSize=Math.max(e.initSegment.byteSize,t)}),i.on(`finalized`,()=>{this.format._options.onInit?.(i,t)}),i}}}),m=-1/0;try{let e=null,t=null;if(n&&(e=new d_(n.track.source._codec),p.addVideoTrack(e,n.track.metadata)),r&&(t=new b_(r.track.source._codec),p.addAudioTrack(t,r.track.metadata)),await p.start(),n){D(e);let t={decoderConfig:n.info.decoderConfig};for(let r=0;r<a;r++){let i=n.packets[r];await e.add(i,t),m=Math.max(m,i.timestamp+i.duration)}}if(r){D(t);let e={decoderConfig:r.info.decoderConfig};for(let n=0;n<o;n++){let i=r.packets[n];await t.add(i,e),m=Math.max(m,i.timestamp+i.duration)}}await p.finalize()}catch(e){throw await p.cancel(),e}s&&(D(f),this.format._options.onSegment?.(f,s)),a>0&&(D(n),n.packets.splice(0,a)),o>0&&(D(r),r.packets.splice(0,o));let h=1/0;n&&n.packets.length>0&&(h=n.packets[0].timestamp),r&&r.packets.length>0&&(h=Math.min(h,r.packets[0].timestamp));let g=h<1/0?h:m;D(Number.isFinite(g));let _=g-e.currentSegmentStartTimestamp;if(D(_>=0),e.writtenSegments.push({path:c,duration:_,timestamp:e.currentSegmentStartTimestamp,byteSize:d,byteOffset:e.singleFile?e.singleFile.nextOffset:null,info:s??null}),this.globalTargetDuration=Math.max(this.globalTargetDuration,_),e.currentSegmentStartTimestamp=g,e.currentSegmentStartTimestampIsFixed=!0,e.singleFile&&(e.singleFile.nextOffset+=d),this.isLive){for(;e.writtenSegments.length>this.maxLiveSegmentCount;){let t=e.writtenSegments.shift();e.mediaSequence++,this.singleFilePerPlaylist||(D(t.info),this.format._options.onSegmentPopped?.(t.path,t.info))}await this.writePlaylist(e),await this.tryWriteMasterPlaylist()}}}async onPlaylistDone(e){D(!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 t=e.writtenSegments,n=0,r=0,i=0;for(let e=0;e<t.length;e++){i+=t[e].duration;let r=0,a=0;for(let i=e;i<t.length&&(r+=t[i].byteSize,a+=t[i].duration,a>=.5*this.globalTargetDuration&&a<=1.5*this.globalTargetDuration&&(n=Math.max(n,8*r/a)),!(a>1.5*this.globalTargetDuration));i++);}if(n===0)for(let e of t){let t=e.duration||1;n=Math.max(n,8*e.byteSize/t)}for(let e of t)r+=8*e.byteSize;e.peakBitrate=n,e.averageBitrate=r/(i||1)}async writePlaylist(e){D(this.output._target instanceof bg);let t=this.output._target;this.updatePlaylistBitrates(e);let n=!1;for(let t of e.writtenSegments)n||=t.byteOffset!==null;let r=e.tracks[0].isVideoTrack()&&e.tracks[0].metadata.hasOnlyKeyPackets,i=3;(r||n)&&(i=4),e.initSegment&&(i=5),e.initSegment&&!r&&(i=6);let a=this.isLive?this.targetSegmentDuration:this.globalTargetDuration,o=$r(t.rootPath,e.path),s=`#EXTM3U
|
|
103
103
|
#EXT-X-VERSION:${i}\n`+(this.isLive?``:`#EXT-X-PLAYLIST-TYPE:VOD
|
|
104
104
|
`)+`#EXT-X-TARGETDURATION:${Math.ceil(a)}\n`+(Number.isFinite(this.maxLiveSegmentCount)?`#EXT-X-MEDIA-SEQUENCE:${e.mediaSequence}\n`:``)+`#EXT-X-INDEPENDENT-SEGMENTS
|
|
105
105
|
`+(r?`#EXT-X-I-FRAMES-ONLY
|
|
@@ -107,13 +107,13 @@ function D(e){if(!e)throw Error(`Assertion failed.`)}var Bn,O,Vn,k,Hn,Un,A,j,Wn,
|
|
|
107
107
|
`:``)+`
|
|
108
108
|
`+e.writtenSegments.map(e=>`#EXTINF:${+e.duration.toFixed(12)},\n`+(this.isRelativeToUnixEpoch?`#EXT-X-PROGRAM-DATE-TIME:${new Date(1e3*e.timestamp).toISOString()}\n`:``)+(e.byteOffset===null?``:`#EXT-X-BYTERANGE:${e.byteSize}@${e.byteOffset}\n`)+`${e.path}\n`).join(``)+(e.done?(e.writtenSegments.length>0?`
|
|
109
109
|
`:``)+`#EXT-X-ENDLIST
|
|
110
|
-
`:``);this.format._options.onPlaylist?.(s,z_(e));let c=new og(await this.output._getTarget({path:o,isRoot:!1,mimeType:
|
|
110
|
+
`:``);this.format._options.onPlaylist?.(s,z_(e));let c=new og(await this.output._getTarget({path:o,isRoot:!1,mimeType:Cl}),!0);c.start(),c.write(M.encode(s)),await c.flush(),await c.finalize()}async writeMasterPlaylist(){D(this.output._target instanceof bg);let e=this.output._target,t=`#EXTM3U
|
|
111
111
|
`,n=!1,r=null,i=0,a=!1;for(let e of this.playlistDeclarations)if(e.groupId===null){let r=e.playlist.tracks[0].isVideoTrack()&&e.playlist.tracks[0].metadata.hasOnlyKeyPackets,i=[];for(let t of e.playlist.tracks){let e=this.trackDatas.find(e=>e.track===t)?.info.decoderConfig.codec??t.source._codec;i.push(e)}let a=0,o=0;if(e.references.length>0){let t=e.references[0].playlist.tracks[0],n=this.trackDatas.find(e=>e.track===t)?.info.decoderConfig.codec??t.source._codec;i.push(n);for(let t of e.references)D(t.playlist.peakBitrate!==null),a=Math.max(a,t.playlist.peakBitrate),o=Math.max(o,t.playlist.averageBitrate??0)}D(e.playlist.peakBitrate!==null);let s=e.playlist.peakBitrate+a,c=(e.playlist.averageBitrate??0)+o;n||=(t+=`
|
|
112
112
|
`,!0),r?t+=`#EXT-X-I-FRAME-STREAM-INF:`:t+=`#EXT-X-STREAM-INF:`,t+=`BANDWIDTH=${Math.ceil(s)}`,c>0&&(t+=`,AVERAGE-BANDWIDTH=${Math.ceil(c)}`),t+=`,CODECS="${i.join(`,`)}"`;let l=e.playlist.tracks.find(e=>e.isVideoTrack());if(l?.isVideoTrack()){let e=this.trackDatas.find(e=>e.track===l)?.info.decoderConfig;if(e){let n=e.displayAspectWidth??e.codedWidth,r=e.displayAspectHeight??e.codedHeight;n!==void 0&&r!==void 0&&(l.metadata.rotation!==void 0&&l.metadata.rotation%180==90&&([n,r]=[r,n]),t+=`,RESOLUTION=${n}x${r}`)}!r&&l.metadata.frameRate!==void 0&&(t+=`,FRAME-RATE=${+l.metadata.frameRate.toFixed(3)}`)}if(!r){let n=new Map;for(let t of e.references){D(t.groupId!==null);let e=t.playlist.tracks[0].type;n.set(e,t.groupId)}for(let[e,r]of n)t+=`,${e.toUpperCase()}="${r}"`}r?(t+=`,URI="${e.playlist.path}"`,t+=`
|
|
113
113
|
`):(t+=`
|
|
114
114
|
`,t+=`${e.playlist.path}\n`)}else{D(e.playlist.tracks.length===1);let n=e.playlist.tracks[0],o=n.type,s=n.metadata.name??null,c=n.metadata.languageCode,l=n.metadata.disposition;(r===null||e.groupId!==r)&&(i=0,t+=`
|
|
115
115
|
`,a=!1),r=e.groupId,i++,t+=`#EXT-X-MEDIA:TYPE=${o.toUpperCase()},GROUP-ID="${e.groupId}"`,s!==null&&/[\n\r"]/.test(s)&&(console.warn(`Dropping track name since it includes a line feed, carriage return, or double quote character, which are not allowed in HLS playlist attributes.`),s=null),s??=`${c??e.groupId}-${i}`,t+=`,NAME="${s}"`,c!==void 0&&(t+=`,LANGUAGE="${c}"`);let u=l?.primary??!1,d=l?.default??!0,f=l?.forced??!1;if(u&&!a&&(t+=`,DEFAULT=YES`,a=!0),(u||d)&&(t+=`,AUTOSELECT=YES`),f&&(t+=`,FORCED=YES`),o===`audio`){let e=this.trackDatas.find(e=>e.track===n)?.info.decoderConfig;e&&(t+=`,CHANNELS="${e.numberOfChannels}"`)}e.noUri||(t+=`,URI="${e.playlist.path}"`),t+=`
|
|
116
|
-
`}this.format._options.onMaster?.(t);let o=await this.mutex.acquire();try{let n;this.numWrittenMasterPlaylists===0?n=await this.output._getRootWriter(!0):(n=new og(await this.output._getTarget({path:e.rootPath,isRoot:!0,mimeType:wl}),!0),n.start()),n.write(M.encode(t)),await n.flush(),await n.finalize(),this.numWrittenMasterPlaylists++}finally{o()}}async tryWriteMasterPlaylist(){D(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(e=>e.mutex.acquire()))).forEach(e=>e());for(let e of this.trackDatas)e.closed=!0;await Promise.all(this.playlists.map(e=>e.done?Promise.resolve():this.advancePlaylist(e))),this.isLive||await this.writeMasterPlaylist()}},I_=e=>{if(typeof e!=`string`)throw TypeError(`options.getPlaylistPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Playlist paths cannot contain line feed, carriage return, or double quote characters.`)},L_=e=>{if(typeof e!=`string`)throw TypeError(`options.getSegmentPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Segment paths cannot contain line feed or carriage return characters.`)},R_=e=>{if(typeof e!=`string`)throw TypeError(`options.getInitPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Init paths cannot contain line feed, carriage return, or double quote characters.`)},z_=e=>({n:e.id,tracks:e.tracks,segmentFormat:e.segmentFormat})})),V_,H_,U_,W_,G_,K_,q_,J_,Y_,X_,Z_,Q_,$_,ev,tv=n((()=>{nm(),ha(),sm(),Eg(),Pg(),Rg(),Vg(),t_(),a_(),B_(),Vl(),F(),V_=class{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(e=>Fi.includes(e))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(e=>Ri.includes(e))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(e=>zi.includes(e))}_codecUnsupportedHint(e){return``}},H_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.fastStart!==void 0&&![!1,`in-memory`,`reserve`,`fragmented`].includes(e.fastStart))throw TypeError(`options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.`);if(e.minimumFragmentDuration!==void 0&&(!Number.isFinite(e.minimumFragmentDuration)||e.minimumFragmentDuration<0))throw TypeError(`options.minimumFragmentDuration, when provided, must be a non-negative number.`);if(e.onFtyp!==void 0&&typeof e.onFtyp!=`function`)throw TypeError(`options.onFtyp, when provided, must be a function.`);if(e.onMoov!==void 0&&typeof e.onMoov!=`function`)throw TypeError(`options.onMoov, when provided, must be a function.`);if(e.onMdat!==void 0&&typeof e.onMdat!=`function`)throw TypeError(`options.onMdat, when provided, must be a function.`);if(e.onMoof!==void 0&&typeof e.onMoof!=`function`)throw TypeError(`options.onMoof, when provided, must be a function.`);if(e.metadataFormat!==void 0&&![`mdir`,`mdta`,`udta`,`auto`].includes(e.metadataFormat))throw TypeError(`options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.`);super(),this._options=e}getSupportedTrackCounts(){let e=2**32-1;return{video:{min:0,max:e},audio:{min:0,max:e},subtitle:{min:0,max:e},total:{min:1,max:e}}}get supportsVideoRotationMetadata(){return!0}get supportsTimestampedMediaData(){return!0}_createMuxer(e){return new Tg(e,this)}},U_=class extends H_{constructor(e){super(e)}get _name(){return`MP4`}get fileExtension(){return`.mp4`}get mimeType(){return`video/mp4`}getSupportedCodecs(){return[...Fi,...Li,`pcm-s16`,`pcm-s16be`,`pcm-s24`,`pcm-s24be`,`pcm-s32`,`pcm-s32be`,`pcm-f32`,`pcm-f32be`,`pcm-f64`,`pcm-f64be`,...zi]}_codecUnsupportedHint(e){return new G_().getSupportedCodecs().includes(e)?` Switching to MOV will grant support for this codec.`:``}},W_=class extends H_{constructor(e){super(e)}get _name(){return`CMAF`}get fileExtension(){return`.m4s`}get mimeType(){return`video/mp4`}getSupportedCodecs(){return[...Fi,...Li,`pcm-s16`,`pcm-s16be`,`pcm-s24`,`pcm-s24be`,`pcm-s32`,`pcm-s32be`,`pcm-f32`,`pcm-f32be`,`pcm-f64`,`pcm-f64be`,...zi]}},G_=class extends H_{constructor(e){super(e)}get _name(){return`MOV`}get fileExtension(){return`.mov`}get mimeType(){return`video/quicktime`}getSupportedCodecs(){return[...Fi,...Ri]}_codecUnsupportedHint(e){return new U_().getSupportedCodecs().includes(e)?` Switching to MP4 will grant support for this codec.`:``}},K_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.appendOnly!==void 0&&typeof e.appendOnly!=`boolean`)throw TypeError(`options.appendOnly, when provided, must be a boolean.`);if(e.minimumClusterDuration!==void 0&&(!Number.isFinite(e.minimumClusterDuration)||e.minimumClusterDuration<0))throw TypeError(`options.minimumClusterDuration, when provided, must be a non-negative number.`);if(e.onEbmlHeader!==void 0&&typeof e.onEbmlHeader!=`function`)throw TypeError(`options.onEbmlHeader, when provided, must be a function.`);if(e.onSegmentHeader!==void 0&&typeof e.onSegmentHeader!=`function`)throw TypeError(`options.onHeader, when provided, must be a function.`);if(e.onCluster!==void 0&&typeof e.onCluster!=`function`)throw TypeError(`options.onCluster, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Ng(e,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[...Fi,...Li,...Ii.filter(e=>![`pcm-s8`,`pcm-f32be`,`pcm-f64be`,`ulaw`,`alaw`].includes(e)),...zi]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},q_=class extends K_{constructor(e){super(e)}getSupportedCodecs(){return[...Fi.filter(e=>[`vp8`,`vp9`,`av1`].includes(e)),...Ri.filter(e=>[`opus`,`vorbis`].includes(e)),...zi]}get _name(){return`WebM`}get fileExtension(){return`.webm`}get mimeType(){return`video/webm`}_codecUnsupportedHint(e){return new K_().getSupportedCodecs().includes(e)?` Switching to MKV will grant support for this codec.`:``}},J_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.xingHeader!==void 0&&typeof e.xingHeader!=`boolean`)throw TypeError(`options.xingHeader, when provided, must be a boolean.`);if(e.onXingFrame!==void 0&&typeof e.onXingFrame!=`function`)throw TypeError(`options.onXingFrame, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Lg(e,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}},Y_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.large!==void 0&&typeof e.large!=`boolean`)throw TypeError(`options.large, when provided, must be a boolean.`);if(e.metadataFormat!==void 0&&![`info`,`id3`].includes(e.metadataFormat))throw TypeError(`options.metadataFormat, when provided, must be either 'info' or 'id3'.`);if(e.onHeader!==void 0&&typeof e.onHeader!=`function`)throw TypeError(`options.onHeader, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new i_(e,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[...Ii.filter(e=>[`pcm-s16`,`pcm-s24`,`pcm-s32`,`pcm-f32`,`pcm-u8`,`ulaw`,`alaw`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},X_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.maximumPageDuration!==void 0&&(!Number.isFinite(e.maximumPageDuration)||e.maximumPageDuration<=0))throw TypeError(`options.maximumPageDuration, when provided, must be a positive number.`);if(e.onPage!==void 0&&typeof e.onPage!=`function`)throw TypeError(`options.onPage, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Bg(e,this)}get _name(){return`Ogg`}getSupportedTrackCounts(){let e=2**32;return{video:{min:0,max:0},audio:{min:0,max:e},subtitle:{min:0,max:0},total:{min:1,max:e}}}get fileExtension(){return`.ogg`}get mimeType(){return`application/ogg`}getSupportedCodecs(){return[...Ri.filter(e=>[`vorbis`,`opus`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Z_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.onFrame!==void 0&&typeof e.onFrame!=`function`)throw TypeError(`options.onFrame, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new tm(e,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}},Q_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.appendOnly!==void 0&&typeof e.appendOnly!=`boolean`)throw TypeError(`options.appendOnly, when provided, must be a boolean.`);super(),this._options=e}_createMuxer(e){return new om(e,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}},$_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.onPacket!==void 0&&typeof e.onPacket!=`function`)throw TypeError(`options.onPacket, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Yg(e,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[...Fi.filter(e=>[`avc`,`hevc`].includes(e)),...Ri.filter(e=>[`aac`,`mp3`,`ac3`,`eac3`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},ev=class extends V_{constructor(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.segmentFormat instanceof V_)&&(!Array.isArray(e.segmentFormat)||e.segmentFormat.length===0||!e.segmentFormat.every(e=>e instanceof V_)))throw TypeError(`options.segmentFormat must be an OutputFormat or a non-empty array of OutputFormat instances.`);if(e.targetDuration!==void 0&&(typeof e.targetDuration!=`number`||e.targetDuration<=0))throw TypeError(`options.targetDuration, when provided, must be a positive number.`);if(e.singleFilePerPlaylist!==void 0&&typeof e.singleFilePerPlaylist!=`boolean`)throw TypeError(`options.singleFilePerPlaylist, when provided, must be a boolean.`);if(e.live!==void 0&&typeof e.live!=`boolean`)throw TypeError(`options.live, when provided, must be a boolean.`);if(e.maxLiveSegmentCount!==void 0&&(typeof e.maxLiveSegmentCount!=`number`||e.maxLiveSegmentCount<1||Number.isFinite(e.maxLiveSegmentCount)&&!Number.isInteger(e.maxLiveSegmentCount)))throw TypeError(`options.maxLiveSegmentCount, when provided, must be a positive integer or Infinity.`);if(e.getPlaylistPath!==void 0&&typeof e.getPlaylistPath!=`function`)throw TypeError(`options.getPlaylistPath, when provided, must be a function.`);if(e.getSegmentPath!==void 0&&typeof e.getSegmentPath!=`function`)throw TypeError(`options.getSegmentPath, when provided, must be a function.`);if(e.getInitPath!==void 0&&typeof e.getInitPath!=`function`)throw TypeError(`options.getInitPath, when provided, must be a function.`);if(e.onMaster!==void 0&&typeof e.onMaster!=`function`)throw TypeError(`options.onMaster, when provided, must be a function.`);if(e.onPlaylist!==void 0&&typeof e.onPlaylist!=`function`)throw TypeError(`options.onPlaylist, when provided, must be a function.`);if(e.onSegment!==void 0&&typeof e.onSegment!=`function`)throw TypeError(`options.onSegment, when provided, must be a function.`);if(e.onInit!==void 0&&typeof e.onInit!=`function`)throw TypeError(`options.onInit, when provided, must be a function.`);if(e.onSegmentPopped!==void 0&&typeof e.onSegmentPopped!=`function`)throw TypeError(`options.onSegmentPopped, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new F_(e,this)}get _name(){return`HTTP Live Streaming (HLS)`}get fileExtension(){return`.m3u8`}get mimeType(){return wl}getSupportedCodecs(){return[...new Set(hi(this._options.segmentFormat).flatMap(e=>e.getSupportedCodecs()))]}getSupportedTrackCounts(){let e=!1,t=!1,n=!1;for(let r of hi(this._options.segmentFormat)){let i=r.getSupportedTrackCounts();e||=i.video.max>0,t||=i.audio.max>0,n||=i.subtitle.max>0}return{video:{min:0,max:e?1/0:0},audio:{min:0,max:t?1/0:0},subtitle:{min:0,max:0},total:{min:1,max:1/0}}}get supportsVideoRotationMetadata(){return hi(this._options.segmentFormat).some(e=>e.supportsVideoRotationMetadata)}get supportsTimestampedMediaData(){return!0}_codecUnsupportedHint(e){return` Using different segment formats may grant support for this codec.`}}})),nv,rv,iv,av,ov,sv,cv,lv,uv=n((()=>{F(),Ei(),tv(),P_(),xg(),sg(),nv=[`video`,`audio`,`subtitle`],rv=class e{constructor(e,t,n,r,i){this.id=e,this.output=t,this.type=n,this.source=r,this.metadata=i}isVideoTrack(){return this.type===`video`}isAudioTrack(){return this.type===`audio`}isSubtitleTrack(){return this.type===`subtitle`}canBePairedWith(t){if(!(t instanceof e))throw TypeError(`other must be an OutputTrack.`);if(this===t)return!1;let n=hi(this.metadata.group),r=hi(t.metadata.group);for(let e of n)if(this.type!==t.type&&r.some(t=>e===t)||r.some(t=>e._pairedGroups.has(t)))return!0;return!1}},iv=class extends rv{constructor(e,t,n,r){super(e,t,`video`,n,r)}},av=class extends rv{constructor(e,t,n,r){super(e,t,`audio`,n,r)}},ov=class extends rv{constructor(e,t,n,r){super(e,t,`subtitle`,n,r)}},sv=class e{constructor(){this._pairedGroups=new Set}pairWith(t){if(!(t instanceof e))throw TypeError(`other must be an OutputTrackGroup.`);if(this===t)throw TypeError(`Cannot pair a group with itself.`);this._pairedGroups.add(t),t._pairedGroups.add(this)}},cv=e=>{if(!e||typeof e!=`object`)throw TypeError(`metadata must be an object.`);if(e.languageCode!==void 0&&!kr(e.languageCode))throw TypeError(`metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.`);if(e.name!==void 0&&typeof e.name!=`string`)throw TypeError(`metadata.name, when provided, must be a string.`);if(e.disposition!==void 0&&Ti(e.disposition),e.maximumPacketCount!==void 0&&(!Number.isInteger(e.maximumPacketCount)||e.maximumPacketCount<0))throw TypeError(`metadata.maximumPacketCount, when provided, must be a non-negative integer.`);if(e.group!==void 0&&!(e.group instanceof sv)&&(!Array.isArray(e.group)||e.group.some(e=>!(e instanceof sv))))throw TypeError(`metadata.group, when provided, must be an OutputTrackGroup instance or an array of OutputTrackGroup instances.`)},lv=class extends gi{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 TypeError(e);let t=this._getRootTarget();if(t instanceof Promise)throw TypeError(e);return t}constructor(e){if(super(),this.state=`pending`,this.defaultTrackGroup=new sv,this._onFinalize=null,this._unfinalizedTargets=new Set,this._rootWriterPromise=null,this._tracks=[],this._startPromise=null,this._cancelPromise=null,this._finalizePromise=null,this._mutex=new tr,this._metadataTags={},this._rootTarget=null,this._rootTargetPromise=null,this._firstMediaStreamTimestamp=null,!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.format instanceof V_))throw TypeError(`options.format must be an OutputFormat.`);if(!(e.target instanceof lg||e.target instanceof bg))throw TypeError(`options.target must be a Target or a PathedTarget.`);if(e.target instanceof lg&&this._rememberTarget(e.target),e.initTarget!==void 0&&!(e.initTarget instanceof lg)&&typeof e.initTarget!=`function`)throw 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 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 lg&&this._rememberTarget(this._initTarget),this._muxer=e.format._createMuxer(this)}_getTargetValidated(e){D(this._target instanceof bg);let t=this._target.getTarget(e),n=e=>{if(!(e instanceof lg))throw TypeError(`getTarget must return a Target.`);return e};return t instanceof Promise?t.then(n):n(t)}async _getTarget(e){D(this._target instanceof bg);let t=await this._getTargetValidated(e);return this._emit(`target`,{target:t,request:e,isRoot:e.isRoot}),this.state===`canceled`?await t._close():this._rememberTarget(t),t}_rememberTarget(e){this._unfinalizedTargets.add(e),e.on(`finalized`,()=>this._unfinalizedTargets.delete(e),{once:!0})}async _getInitTarget(){if(D(this._initTarget!==null),this._initTarget instanceof lg)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 lg)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},t=this._getTargetValidated(e),n=t=>(this.state===`canceled`?t._close():this._rememberTarget(t),this._emit(`target`,{target:t,request:e,isRoot:!0}),this._rootTarget=t,t);return t instanceof Promise?this._rootTargetPromise=t.then(n):n(t)}_getRootWriter(e){return this._rootWriterPromise??=(async()=>{let t=await this._getRootTarget(),n=new og(t,typeof e==`boolean`?e:e(t));return n.start(),n})()}addVideoTrack(e,t={}){if(!(e instanceof l_))throw TypeError(`source must be a VideoSource.`);if(cv(t),t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`Invalid video rotation: ${t.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&t.rotation)throw Error(`${this.format._name} does not support video rotation metadata.`);if(t.frameRate!==void 0&&(!Number.isFinite(t.frameRate)||t.frameRate<=0))throw TypeError(`Invalid video frame rate: ${t.frameRate}. Must be a positive number.`);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new iv(this._tracks.length+1,this,e,n))}addAudioTrack(e,t={}){if(!(e instanceof y_))throw TypeError(`source must be an AudioSource.`);cv(t);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new av(this._tracks.length+1,this,e,n))}addSubtitleTrack(e,t={}){if(!(e instanceof M_))throw TypeError(`source must be a SubtitleSource.`);cv(t);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new ov(this._tracks.length+1,this,e,n))}setMetadataTags(e){if(Si(e),this.state!==`pending`)throw Error(`Cannot set metadata tags after output has been started or canceled.`);this._metadataTags=e}_addTrack(e){if(this.state!==`pending`)throw Error(`Cannot add track after output has been started or canceled.`);if(e.source._connectedTrack)throw Error(`Source is already used for a track.`);let t=this.format.getSupportedTrackCounts(),n=this._tracks.reduce((t,n)=>t+(n.type===e.type?1:0),0),r=t[e.type].max;if(n===r)throw Error(r===0?`${this.format._name} does not support ${e.type} tracks.`:`${this.format._name} does not support more than ${r} ${e.type} track${r===1?``:`s`}.`);let i=t.total.max;if(this._tracks.length===i)throw Error(`${this.format._name} does not support more than ${i} tracks${i===1?``:`s`} in total.`);if(e.isVideoTrack()){let t=this.format.getSupportedVideoCodecs();if(t.length===0)throw Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${t.map(e=>`'${e}'`).join(`, `)}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isAudioTrack()){let t=this.format.getSupportedAudioCodecs();if(t.length===0)throw Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${t.map(e=>`'${e}'`).join(`, `)}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isSubtitleTrack()){let t=this.format.getSupportedSubtitleCodecs();if(t.length===0)throw Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${t.map(e=>`'${e}'`).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 t of nv){let n=this._tracks.reduce((e,n)=>e+(n.type===t?1:0),0),r=e[t].min;if(n<r)throw Error(r===e[t].max?`${this.format._name} requires exactly ${r} ${t} track${r===1?``:`s`}.`:`${this.format._name} requires at least ${r} ${t} track${r===1?``:`s`}.`)}let t=e.total.min;if(this._tracks.length<t)throw Error(t===e.total.max?`${this.format._name} requires exactly ${t} track${t===1?``:`s`}.`:`${this.format._name} requires at least ${t} track${t===1?``:`s`}.`);if(this.state===`canceled`)throw Error(`Output has been canceled.`);return this._startPromise?(console.warn(`Output has already been started.`),this._startPromise):this._startPromise=(async()=>{this.state=`started`;let e=await this._mutex.acquire();try{await this._muxer.start();let e=this._tracks.map(e=>e.source._start());await Promise.all(e)}finally{e()}})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn(`Output has already been canceled.`),this._cancelPromise;if(this.state===`finalizing`||this.state===`finalized`){this.state===`finalized`&&console.warn(`Output has already been finalized.`);return}return this._cancelPromise=(async()=>{this.state=`canceled`;let e=await this._mutex.acquire();try{let e=this._tracks.map(e=>e.source._flushOrWaitForOngoingClose(!0));await Promise.all(e),await Promise.all([...this._unfinalizedTargets].map(e=>e._close())),this._unfinalizedTargets.clear()}finally{e()}})()}async finalize(){if(this.state===`pending`)throw Error(`Cannot finalize before starting.`);if(this.state===`canceled`)throw Error(`Cannot finalize after canceling.`);return this._finalizePromise?(console.warn(`Output has already been finalized.`),this._finalizePromise):this._finalizePromise=(async()=>{this.state=`finalizing`;let e=await this._mutex.acquire();try{let e=this._tracks.map(e=>e.source._flushOrWaitForOngoingClose(!1));if(await Promise.all(e),await this._muxer.finalize(),this._rootWriterPromise){let e=await this._rootWriterPromise;e.finalized||(await e.flush(),await e.finalize())}this._onFinalize&&await this._onFinalize(),this.state=`finalized`}finally{e()}})()}}})),dv,fv,pv,mv,hv,gv,_v,vv,yv=n((()=>{ha(),wf(),Sp(),ip(),P_(),F(),uv(),tv(),Zd(),Ei(),xg(),s_(),dv=e=>{if(!e||typeof e!=`object`)throw TypeError(`options.video, when provided, must be an object.`);if(e?.discard!==void 0&&typeof e.discard!=`boolean`)throw TypeError(`options.video.discard, when provided, must be a boolean.`);if(e?.forceTranscode!==void 0&&typeof e.forceTranscode!=`boolean`)throw TypeError(`options.video.forceTranscode, when provided, must be a boolean.`);if(e?.codec!==void 0&&!Fi.includes(e.codec))throw TypeError(`options.video.codec, when provided, must be one of: ${Fi.join(`, `)}.`);if(e?.bitrate!==void 0&&!(e.bitrate instanceof sf)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`options.video.bitrate, when provided, must be a positive integer or a quality.`);if(e?.width!==void 0&&(!Number.isInteger(e.width)||e.width<=0))throw TypeError(`options.video.width, when provided, must be a positive integer.`);if(e?.height!==void 0&&(!Number.isInteger(e.height)||e.height<=0))throw TypeError(`options.video.height, when provided, must be a positive integer.`);if(e?.fit!==void 0&&![`fill`,`contain`,`cover`].includes(e.fit))throw TypeError(`options.video.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 TypeError(`When both options.video.width and options.video.height are provided, options.video.fit must also be provided.`);if(e?.rotate!==void 0&&![0,90,180,270].includes(e.rotate))throw TypeError(`options.video.rotate, when provided, must be 0, 90, 180 or 270.`);if(e?.allowRotationMetadata!==void 0&&typeof e.allowRotationMetadata!=`boolean`)throw TypeError(`options.video.allowRotationMetadata, when provided, must be a boolean.`);if(e?.crop!==void 0&&Md(e.crop,`options.video.`),e?.frameRate!==void 0&&(!Number.isFinite(e.frameRate)||e.frameRate<=0))throw TypeError(`options.video.frameRate, when provided, must be a finite positive number.`);if(e?.alpha!==void 0&&![`discard`,`keep`].includes(e.alpha))throw TypeError(`options.video.alpha, when provided, must be either 'discard' or 'keep'.`);if(e?.keyFrameInterval!==void 0&&(!Number.isFinite(e.keyFrameInterval)||e.keyFrameInterval<0))throw TypeError(`options.video.keyFrameInterval, when provided, must be a non-negative number.`);if(e?.process!==void 0&&typeof e.process!=`function`)throw TypeError(`options.video.process, when provided, must be a function.`);if(e?.processedWidth!==void 0&&(!Number.isInteger(e.processedWidth)||e.processedWidth<=0))throw TypeError(`options.video.processedWidth, when provided, must be a positive integer.`);if(e?.processedHeight!==void 0&&(!Number.isInteger(e.processedHeight)||e.processedHeight<=0))throw TypeError(`options.video.processedHeight, when provided, must be a positive integer.`);if(e?.hardwareAcceleration!==void 0&&![`no-preference`,`prefer-hardware`,`prefer-software`].includes(e.hardwareAcceleration))throw TypeError(`options.video.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(e?.group!==void 0&&!(e.group instanceof sv||Array.isArray(e.group)&&e.group.every(e=>e instanceof sv)))throw TypeError(`options.video.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.`)},fv=e=>{if(!e||typeof e!=`object`)throw TypeError(`options.audio, when provided, must be an object.`);if(e?.discard!==void 0&&typeof e.discard!=`boolean`)throw TypeError(`options.audio.discard, when provided, must be a boolean.`);if(e?.forceTranscode!==void 0&&typeof e.forceTranscode!=`boolean`)throw TypeError(`options.audio.forceTranscode, when provided, must be a boolean.`);if(e?.codec!==void 0&&!Ri.includes(e.codec))throw TypeError(`options.audio.codec, when provided, must be one of: ${Ri.join(`, `)}.`);if(e?.bitrate!==void 0&&!(e.bitrate instanceof sf)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`options.audio.bitrate, when provided, must be a positive integer or a quality.`);if(e?.numberOfChannels!==void 0&&(!Number.isInteger(e.numberOfChannels)||e.numberOfChannels<=0))throw TypeError(`options.audio.numberOfChannels, when provided, must be a positive integer.`);if(e?.sampleRate!==void 0&&(!Number.isInteger(e.sampleRate)||e.sampleRate<=0))throw TypeError(`options.audio.sampleRate, when provided, must be a positive integer.`);if(e?.sampleFormat!==void 0&&![`u8`,`s16`,`s32`,`f32`].includes(e.sampleFormat))throw TypeError(`options.audio.sampleFormat, when provided, must be one of: u8, s16, s32, f32.`);if(e?.process!==void 0&&typeof e.process!=`function`)throw TypeError(`options.audio.process, when provided, must be a function.`);if(e?.processedNumberOfChannels!==void 0&&(!Number.isInteger(e.processedNumberOfChannels)||e.processedNumberOfChannels<=0))throw TypeError(`options.audio.processedNumberOfChannels, when provided, must be a positive integer.`);if(e?.processedSampleRate!==void 0&&(!Number.isInteger(e.processedSampleRate)||e.processedSampleRate<=0))throw TypeError(`options.audio.processedSampleRate, when provided, must be a positive integer.`);if(e?.group!==void 0&&!(e.group instanceof sv||Array.isArray(e.group)&&e.group.every(e=>e instanceof sv)))throw TypeError(`options.audio.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.`)},pv=2,mv=48e3,hv=class e{static async init(t){let n=new e(t);return await n._init(),n}constructor(e){if(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 vv,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=[],!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.input instanceof yp))throw TypeError(`options.input must be an Input.`);if(!(e.output instanceof lv))throw TypeError(`options.output must be an Output.`);if(e.tracks!==void 0&&e.tracks!==`all`&&e.tracks!==`primary`)throw TypeError(`options.tracks, when provided, must be either 'all' or 'primary'.`);if(e.output._tracks.length>0||Object.keys(e.output._metadataTags).length>0||e.output.state!==`pending`)throw TypeError(`options.output must be fresh: no tracks or metadata tags added and not started.`);if(e.video!==void 0&&typeof e.video!=`function`)if(Array.isArray(e.video))for(let t of e.video)dv(t);else dv(e.video);if(e.audio!==void 0&&typeof e.audio!=`function`)if(Array.isArray(e.audio))for(let t of e.audio)fv(t);else fv(e.audio);if(e.trim!==void 0&&(!e.trim||typeof e.trim!=`object`))throw TypeError(`options.trim, when provided, must be an object.`);if(e.trim?.start!==void 0&&!Number.isFinite(e.trim.start))throw TypeError(`options.trim.start, when provided, must be a finite number.`);if(e.trim?.end!==void 0&&!Number.isFinite(e.trim.end))throw TypeError(`options.trim.end, when provided, must be a finite number.`);if(e.trim?.start!==void 0&&e.trim.end!==void 0&&e.trim.start>=e.trim.end)throw TypeError(`options.trim.start must be less than options.trim.end.`);if(e.tags!==void 0&&(typeof e.tags!=`object`||!e.tags)&&typeof e.tags!=`function`)throw TypeError(`options.tags, when provided, must be an object or a function.`);if(typeof e.tags==`object`&&Si(e.tags),e.showWarnings!==void 0&&typeof e.showWarnings!=`boolean`)throw TypeError(`options.showWarnings, when provided, must be a boolean.`);this._options=e,this.input=e.input,this.output=e.output;let{promise:t,resolve:n}=P();this._started=t,this._start=n}async _init(){let e=await this.input.getFormat(),t,n=this._options.tracks;n===void 0&&(n=e.name.includes(`(HLS)`)?`primary`:`all`),n===`all`?t=await this.input.getTracks():n===`primary`?t=[await this.input.getPrimaryVideoTrack(),await this.input.getPrimaryAudioTrack()].filter(e=>e!==null):(pr(n),D(!1));let r=this.output.format.getSupportedTrackCounts(),i=1,a=1,o=[],s=[];for(let e of t){let t;if(e.isVideoTrack())if(this._options.video)if(typeof this._options.video==`function`){let n=await this._options.video(e,i)??{};if(Array.isArray(n))for(let e of n)dv(e);else dv(n);t=Array.isArray(n)?n:[n],i++}else t=Array.isArray(this._options.video)?this._options.video:[this._options.video];else t=[{}];else if(e.isAudioTrack())if(this._options.audio)if(typeof this._options.audio==`function`){let n=await this._options.audio(e,a)??{};if(Array.isArray(n))for(let e of n)fv(e);else fv(n);t=Array.isArray(n)?n:[n],a++}else t=Array.isArray(this._options.audio)?this._options.audio:[this._options.audio];else t=[{}];else D(!1);let n=t.filter(e=>e.discard);for(let t of n)this.discardedTracks.push({track:e,reason:`discarded_by_user`,trackOptions:t});if(t.length===n.length){t.length===0&&this.discardedTracks.push({track:e,reason:`discarded_by_user`,trackOptions:{}});continue}let r=t.filter(e=>!e.discard);o.push(e),s.push(r)}this._options.trim?.start===void 0?this._startTimestamp=Math.max(await this.input.getFirstTimestamp(o),0):this._startTimestamp=this._options.trim.start,this._endTimestamp=Math.max(this._options.trim?.end??1/0,this._startTimestamp);for(let e=0;e<o.length;e++){let t=o[e],n=s[e];for(let e of n){if(this._totalTrackCount===r.total.max){this.discardedTracks.push({track:t,reason:`max_track_count_reached`,trackOptions:e});continue}if(this._addedCounts[t.type]===r[t.type].max){this.discardedTracks.push({track:t,reason:`max_track_count_of_type_reached`,trackOptions:e});continue}let n=this._nextOutputTrackId++;t.isVideoTrack()?await this._processVideoTrack(t,e,n):t.isAudioTrack()?await this._processAudioTrack(t,e,n):D(!1)}}for(let e=0;e<this.utilizedTracks.length-1;e++)for(let t=e+1;t<this.utilizedTracks.length;t++){let n=this.utilizedTracks[e],r=this.utilizedTracks[t],i=this._outputOwnTrackGroups[e],a=this._outputOwnTrackGroups[t];D(i!==void 0),D(a!==void 0),i&&a&&n.canBePairedWith(r)&&i.pairWith(a)}let c=await this.input.getMetadataTags(),l;if(this._options.tags){let e=typeof this._options.tags==`function`?await this._options.tags(c):this._options.tags;Si(e),l=e}else l=c;let u=e.mimeType===this.output.format.mimeType,d=c.raw===l.raw;if(c.raw&&d&&!u&&delete l.raw,this.output.setMetadataTags(l),this.isValid=this._totalTrackCount>=r.total.min&&this._addedCounts.video>=r.video.min&&this._addedCounts.audio>=r.audio.min&&this._addedCounts.subtitle>=r.subtitle.min,this._options.showWarnings??!0){let e=[],t=this.discardedTracks.filter(e=>e.reason!==`discarded_by_user`);t.length>0&&e.push(`Some tracks had to be discarded from the conversion:`,t),this.isValid||(e.length>0&&e.push(`
|
|
116
|
+
`}this.format._options.onMaster?.(t);let o=await this.mutex.acquire();try{let n;this.numWrittenMasterPlaylists===0?n=await this.output._getRootWriter(!0):(n=new og(await this.output._getTarget({path:e.rootPath,isRoot:!0,mimeType:Cl}),!0),n.start()),n.write(M.encode(t)),await n.flush(),await n.finalize(),this.numWrittenMasterPlaylists++}finally{o()}}async tryWriteMasterPlaylist(){D(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(e=>e.mutex.acquire()))).forEach(e=>e());for(let e of this.trackDatas)e.closed=!0;await Promise.all(this.playlists.map(e=>e.done?Promise.resolve():this.advancePlaylist(e))),this.isLive||await this.writeMasterPlaylist()}},I_=e=>{if(typeof e!=`string`)throw TypeError(`options.getPlaylistPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Playlist paths cannot contain line feed, carriage return, or double quote characters.`)},L_=e=>{if(typeof e!=`string`)throw TypeError(`options.getSegmentPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Segment paths cannot contain line feed or carriage return characters.`)},R_=e=>{if(typeof e!=`string`)throw TypeError(`options.getInitPath must return or resolve to a string`);if(/[\n\r"]/.test(e))throw TypeError(`Init paths cannot contain line feed, carriage return, or double quote characters.`)},z_=e=>({n:e.id,tracks:e.tracks,segmentFormat:e.segmentFormat})})),V_,H_,U_,W_,G_,K_,q_,J_,Y_,X_,Z_,Q_,$_,ev,tv=n((()=>{nm(),ma(),sm(),Eg(),Pg(),Rg(),Vg(),t_(),a_(),B_(),Bl(),F(),V_=class{getSupportedVideoCodecs(){return this.getSupportedCodecs().filter(e=>L.includes(e))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(e=>Li.includes(e))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(e=>Ri.includes(e))}_codecUnsupportedHint(e){return``}},H_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.fastStart!==void 0&&![!1,`in-memory`,`reserve`,`fragmented`].includes(e.fastStart))throw TypeError(`options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.`);if(e.minimumFragmentDuration!==void 0&&(!Number.isFinite(e.minimumFragmentDuration)||e.minimumFragmentDuration<0))throw TypeError(`options.minimumFragmentDuration, when provided, must be a non-negative number.`);if(e.onFtyp!==void 0&&typeof e.onFtyp!=`function`)throw TypeError(`options.onFtyp, when provided, must be a function.`);if(e.onMoov!==void 0&&typeof e.onMoov!=`function`)throw TypeError(`options.onMoov, when provided, must be a function.`);if(e.onMdat!==void 0&&typeof e.onMdat!=`function`)throw TypeError(`options.onMdat, when provided, must be a function.`);if(e.onMoof!==void 0&&typeof e.onMoof!=`function`)throw TypeError(`options.onMoof, when provided, must be a function.`);if(e.metadataFormat!==void 0&&![`mdir`,`mdta`,`udta`,`auto`].includes(e.metadataFormat))throw TypeError(`options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.`);super(),this._options=e}getSupportedTrackCounts(){let e=2**32-1;return{video:{min:0,max:e},audio:{min:0,max:e},subtitle:{min:0,max:e},total:{min:1,max:e}}}get supportsVideoRotationMetadata(){return!0}get supportsTimestampedMediaData(){return!0}_createMuxer(e){return new Tg(e,this)}},U_=class extends H_{constructor(e){super(e)}get _name(){return`MP4`}get fileExtension(){return`.mp4`}get mimeType(){return`video/mp4`}getSupportedCodecs(){return[...L,...Ii,`pcm-s16`,`pcm-s16be`,`pcm-s24`,`pcm-s24be`,`pcm-s32`,`pcm-s32be`,`pcm-f32`,`pcm-f32be`,`pcm-f64`,`pcm-f64be`,...Ri]}_codecUnsupportedHint(e){return new G_().getSupportedCodecs().includes(e)?` Switching to MOV will grant support for this codec.`:``}},W_=class extends H_{constructor(e){super(e)}get _name(){return`CMAF`}get fileExtension(){return`.m4s`}get mimeType(){return`video/mp4`}getSupportedCodecs(){return[...L,...Ii,`pcm-s16`,`pcm-s16be`,`pcm-s24`,`pcm-s24be`,`pcm-s32`,`pcm-s32be`,`pcm-f32`,`pcm-f32be`,`pcm-f64`,`pcm-f64be`,...Ri]}},G_=class extends H_{constructor(e){super(e)}get _name(){return`MOV`}get fileExtension(){return`.mov`}get mimeType(){return`video/quicktime`}getSupportedCodecs(){return[...L,...Li]}_codecUnsupportedHint(e){return new U_().getSupportedCodecs().includes(e)?` Switching to MP4 will grant support for this codec.`:``}},K_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.appendOnly!==void 0&&typeof e.appendOnly!=`boolean`)throw TypeError(`options.appendOnly, when provided, must be a boolean.`);if(e.minimumClusterDuration!==void 0&&(!Number.isFinite(e.minimumClusterDuration)||e.minimumClusterDuration<0))throw TypeError(`options.minimumClusterDuration, when provided, must be a non-negative number.`);if(e.onEbmlHeader!==void 0&&typeof e.onEbmlHeader!=`function`)throw TypeError(`options.onEbmlHeader, when provided, must be a function.`);if(e.onSegmentHeader!==void 0&&typeof e.onSegmentHeader!=`function`)throw TypeError(`options.onHeader, when provided, must be a function.`);if(e.onCluster!==void 0&&typeof e.onCluster!=`function`)throw TypeError(`options.onCluster, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Ng(e,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[...L,...Ii,...Fi.filter(e=>![`pcm-s8`,`pcm-f32be`,`pcm-f64be`,`ulaw`,`alaw`].includes(e)),...Ri]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},q_=class extends K_{constructor(e){super(e)}getSupportedCodecs(){return[...L.filter(e=>[`vp8`,`vp9`,`av1`].includes(e)),...Li.filter(e=>[`opus`,`vorbis`].includes(e)),...Ri]}get _name(){return`WebM`}get fileExtension(){return`.webm`}get mimeType(){return`video/webm`}_codecUnsupportedHint(e){return new K_().getSupportedCodecs().includes(e)?` Switching to MKV will grant support for this codec.`:``}},J_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.xingHeader!==void 0&&typeof e.xingHeader!=`boolean`)throw TypeError(`options.xingHeader, when provided, must be a boolean.`);if(e.onXingFrame!==void 0&&typeof e.onXingFrame!=`function`)throw TypeError(`options.onXingFrame, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Lg(e,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}},Y_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.large!==void 0&&typeof e.large!=`boolean`)throw TypeError(`options.large, when provided, must be a boolean.`);if(e.metadataFormat!==void 0&&![`info`,`id3`].includes(e.metadataFormat))throw TypeError(`options.metadataFormat, when provided, must be either 'info' or 'id3'.`);if(e.onHeader!==void 0&&typeof e.onHeader!=`function`)throw TypeError(`options.onHeader, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new i_(e,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[...Fi.filter(e=>[`pcm-s16`,`pcm-s24`,`pcm-s32`,`pcm-f32`,`pcm-u8`,`ulaw`,`alaw`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},X_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.maximumPageDuration!==void 0&&(!Number.isFinite(e.maximumPageDuration)||e.maximumPageDuration<=0))throw TypeError(`options.maximumPageDuration, when provided, must be a positive number.`);if(e.onPage!==void 0&&typeof e.onPage!=`function`)throw TypeError(`options.onPage, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Bg(e,this)}get _name(){return`Ogg`}getSupportedTrackCounts(){let e=2**32;return{video:{min:0,max:0},audio:{min:0,max:e},subtitle:{min:0,max:0},total:{min:1,max:e}}}get fileExtension(){return`.ogg`}get mimeType(){return`application/ogg`}getSupportedCodecs(){return[...Li.filter(e=>[`vorbis`,`opus`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Z_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.onFrame!==void 0&&typeof e.onFrame!=`function`)throw TypeError(`options.onFrame, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new tm(e,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}},Q_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.appendOnly!==void 0&&typeof e.appendOnly!=`boolean`)throw TypeError(`options.appendOnly, when provided, must be a boolean.`);super(),this._options=e}_createMuxer(e){return new om(e,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}},$_=class extends V_{constructor(e={}){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(e.onPacket!==void 0&&typeof e.onPacket!=`function`)throw TypeError(`options.onPacket, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new Yg(e,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[...L.filter(e=>[`avc`,`hevc`].includes(e)),...Li.filter(e=>[`aac`,`mp3`,`ac3`,`eac3`].includes(e))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},ev=class extends V_{constructor(e){if(!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.segmentFormat instanceof V_)&&(!Array.isArray(e.segmentFormat)||e.segmentFormat.length===0||!e.segmentFormat.every(e=>e instanceof V_)))throw TypeError(`options.segmentFormat must be an OutputFormat or a non-empty array of OutputFormat instances.`);if(e.targetDuration!==void 0&&(typeof e.targetDuration!=`number`||e.targetDuration<=0))throw TypeError(`options.targetDuration, when provided, must be a positive number.`);if(e.singleFilePerPlaylist!==void 0&&typeof e.singleFilePerPlaylist!=`boolean`)throw TypeError(`options.singleFilePerPlaylist, when provided, must be a boolean.`);if(e.live!==void 0&&typeof e.live!=`boolean`)throw TypeError(`options.live, when provided, must be a boolean.`);if(e.maxLiveSegmentCount!==void 0&&(typeof e.maxLiveSegmentCount!=`number`||e.maxLiveSegmentCount<1||Number.isFinite(e.maxLiveSegmentCount)&&!Number.isInteger(e.maxLiveSegmentCount)))throw TypeError(`options.maxLiveSegmentCount, when provided, must be a positive integer or Infinity.`);if(e.getPlaylistPath!==void 0&&typeof e.getPlaylistPath!=`function`)throw TypeError(`options.getPlaylistPath, when provided, must be a function.`);if(e.getSegmentPath!==void 0&&typeof e.getSegmentPath!=`function`)throw TypeError(`options.getSegmentPath, when provided, must be a function.`);if(e.getInitPath!==void 0&&typeof e.getInitPath!=`function`)throw TypeError(`options.getInitPath, when provided, must be a function.`);if(e.onMaster!==void 0&&typeof e.onMaster!=`function`)throw TypeError(`options.onMaster, when provided, must be a function.`);if(e.onPlaylist!==void 0&&typeof e.onPlaylist!=`function`)throw TypeError(`options.onPlaylist, when provided, must be a function.`);if(e.onSegment!==void 0&&typeof e.onSegment!=`function`)throw TypeError(`options.onSegment, when provided, must be a function.`);if(e.onInit!==void 0&&typeof e.onInit!=`function`)throw TypeError(`options.onInit, when provided, must be a function.`);if(e.onSegmentPopped!==void 0&&typeof e.onSegmentPopped!=`function`)throw TypeError(`options.onSegmentPopped, when provided, must be a function.`);super(),this._options=e}_createMuxer(e){return new F_(e,this)}get _name(){return`HTTP Live Streaming (HLS)`}get fileExtension(){return`.m3u8`}get mimeType(){return Cl}getSupportedCodecs(){return[...new Set(hi(this._options.segmentFormat).flatMap(e=>e.getSupportedCodecs()))]}getSupportedTrackCounts(){let e=!1,t=!1,n=!1;for(let r of hi(this._options.segmentFormat)){let i=r.getSupportedTrackCounts();e||=i.video.max>0,t||=i.audio.max>0,n||=i.subtitle.max>0}return{video:{min:0,max:e?1/0:0},audio:{min:0,max:t?1/0:0},subtitle:{min:0,max:0},total:{min:1,max:1/0}}}get supportsVideoRotationMetadata(){return hi(this._options.segmentFormat).some(e=>e.supportsVideoRotationMetadata)}get supportsTimestampedMediaData(){return!0}_codecUnsupportedHint(e){return` Using different segment formats may grant support for this codec.`}}})),nv,rv,iv,av,ov,sv,cv,lv,uv=n((()=>{F(),Ei(),tv(),P_(),xg(),sg(),nv=[`video`,`audio`,`subtitle`],rv=class e{constructor(e,t,n,r,i){this.id=e,this.output=t,this.type=n,this.source=r,this.metadata=i}isVideoTrack(){return this.type===`video`}isAudioTrack(){return this.type===`audio`}isSubtitleTrack(){return this.type===`subtitle`}canBePairedWith(t){if(!(t instanceof e))throw TypeError(`other must be an OutputTrack.`);if(this===t)return!1;let n=hi(this.metadata.group),r=hi(t.metadata.group);for(let e of n)if(this.type!==t.type&&r.some(t=>e===t)||r.some(t=>e._pairedGroups.has(t)))return!0;return!1}},iv=class extends rv{constructor(e,t,n,r){super(e,t,`video`,n,r)}},av=class extends rv{constructor(e,t,n,r){super(e,t,`audio`,n,r)}},ov=class extends rv{constructor(e,t,n,r){super(e,t,`subtitle`,n,r)}},sv=class e{constructor(){this._pairedGroups=new Set}pairWith(t){if(!(t instanceof e))throw TypeError(`other must be an OutputTrackGroup.`);if(this===t)throw TypeError(`Cannot pair a group with itself.`);this._pairedGroups.add(t),t._pairedGroups.add(this)}},cv=e=>{if(!e||typeof e!=`object`)throw TypeError(`metadata must be an object.`);if(e.languageCode!==void 0&&!kr(e.languageCode))throw TypeError(`metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.`);if(e.name!==void 0&&typeof e.name!=`string`)throw TypeError(`metadata.name, when provided, must be a string.`);if(e.disposition!==void 0&&Ti(e.disposition),e.maximumPacketCount!==void 0&&(!Number.isInteger(e.maximumPacketCount)||e.maximumPacketCount<0))throw TypeError(`metadata.maximumPacketCount, when provided, must be a non-negative integer.`);if(e.group!==void 0&&!(e.group instanceof sv)&&(!Array.isArray(e.group)||e.group.some(e=>!(e instanceof sv))))throw TypeError(`metadata.group, when provided, must be an OutputTrackGroup instance or an array of OutputTrackGroup instances.`)},lv=class extends gi{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 TypeError(e);let t=this._getRootTarget();if(t instanceof Promise)throw TypeError(e);return t}constructor(e){if(super(),this.state=`pending`,this.defaultTrackGroup=new sv,this._onFinalize=null,this._unfinalizedTargets=new Set,this._rootWriterPromise=null,this._tracks=[],this._startPromise=null,this._cancelPromise=null,this._finalizePromise=null,this._mutex=new tr,this._metadataTags={},this._rootTarget=null,this._rootTargetPromise=null,this._firstMediaStreamTimestamp=null,!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.format instanceof V_))throw TypeError(`options.format must be an OutputFormat.`);if(!(e.target instanceof lg||e.target instanceof bg))throw TypeError(`options.target must be a Target or a PathedTarget.`);if(e.target instanceof lg&&this._rememberTarget(e.target),e.initTarget!==void 0&&!(e.initTarget instanceof lg)&&typeof e.initTarget!=`function`)throw 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 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 lg&&this._rememberTarget(this._initTarget),this._muxer=e.format._createMuxer(this)}_getTargetValidated(e){D(this._target instanceof bg);let t=this._target.getTarget(e),n=e=>{if(!(e instanceof lg))throw TypeError(`getTarget must return a Target.`);return e};return t instanceof Promise?t.then(n):n(t)}async _getTarget(e){D(this._target instanceof bg);let t=await this._getTargetValidated(e);return this._emit(`target`,{target:t,request:e,isRoot:e.isRoot}),this.state===`canceled`?await t._close():this._rememberTarget(t),t}_rememberTarget(e){this._unfinalizedTargets.add(e),e.on(`finalized`,()=>this._unfinalizedTargets.delete(e),{once:!0})}async _getInitTarget(){if(D(this._initTarget!==null),this._initTarget instanceof lg)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 lg)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},t=this._getTargetValidated(e),n=t=>(this.state===`canceled`?t._close():this._rememberTarget(t),this._emit(`target`,{target:t,request:e,isRoot:!0}),this._rootTarget=t,t);return t instanceof Promise?this._rootTargetPromise=t.then(n):n(t)}_getRootWriter(e){return this._rootWriterPromise??=(async()=>{let t=await this._getRootTarget(),n=new og(t,typeof e==`boolean`?e:e(t));return n.start(),n})()}addVideoTrack(e,t={}){if(!(e instanceof l_))throw TypeError(`source must be a VideoSource.`);if(cv(t),t.rotation!==void 0&&![0,90,180,270].includes(t.rotation))throw TypeError(`Invalid video rotation: ${t.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&t.rotation)throw Error(`${this.format._name} does not support video rotation metadata.`);if(t.frameRate!==void 0&&(!Number.isFinite(t.frameRate)||t.frameRate<=0))throw TypeError(`Invalid video frame rate: ${t.frameRate}. Must be a positive number.`);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new iv(this._tracks.length+1,this,e,n))}addAudioTrack(e,t={}){if(!(e instanceof y_))throw TypeError(`source must be an AudioSource.`);cv(t);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new av(this._tracks.length+1,this,e,n))}addSubtitleTrack(e,t={}){if(!(e instanceof M_))throw TypeError(`source must be a SubtitleSource.`);cv(t);let n={...t};return n.group??=this.defaultTrackGroup,this._addTrack(new ov(this._tracks.length+1,this,e,n))}setMetadataTags(e){if(Si(e),this.state!==`pending`)throw Error(`Cannot set metadata tags after output has been started or canceled.`);this._metadataTags=e}_addTrack(e){if(this.state!==`pending`)throw Error(`Cannot add track after output has been started or canceled.`);if(e.source._connectedTrack)throw Error(`Source is already used for a track.`);let t=this.format.getSupportedTrackCounts(),n=this._tracks.reduce((t,n)=>t+(n.type===e.type?1:0),0),r=t[e.type].max;if(n===r)throw Error(r===0?`${this.format._name} does not support ${e.type} tracks.`:`${this.format._name} does not support more than ${r} ${e.type} track${r===1?``:`s`}.`);let i=t.total.max;if(this._tracks.length===i)throw Error(`${this.format._name} does not support more than ${i} tracks${i===1?``:`s`} in total.`);if(e.isVideoTrack()){let t=this.format.getSupportedVideoCodecs();if(t.length===0)throw Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${t.map(e=>`'${e}'`).join(`, `)}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isAudioTrack()){let t=this.format.getSupportedAudioCodecs();if(t.length===0)throw Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${t.map(e=>`'${e}'`).join(`, `)}.`+this.format._codecUnsupportedHint(e.source._codec))}else if(e.isSubtitleTrack()){let t=this.format.getSupportedSubtitleCodecs();if(t.length===0)throw Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(e.source._codec));if(!t.includes(e.source._codec))throw Error(`Codec '${e.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${t.map(e=>`'${e}'`).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 t of nv){let n=this._tracks.reduce((e,n)=>e+(n.type===t?1:0),0),r=e[t].min;if(n<r)throw Error(r===e[t].max?`${this.format._name} requires exactly ${r} ${t} track${r===1?``:`s`}.`:`${this.format._name} requires at least ${r} ${t} track${r===1?``:`s`}.`)}let t=e.total.min;if(this._tracks.length<t)throw Error(t===e.total.max?`${this.format._name} requires exactly ${t} track${t===1?``:`s`}.`:`${this.format._name} requires at least ${t} track${t===1?``:`s`}.`);if(this.state===`canceled`)throw Error(`Output has been canceled.`);return this._startPromise?(console.warn(`Output has already been started.`),this._startPromise):this._startPromise=(async()=>{this.state=`started`;let e=await this._mutex.acquire();try{await this._muxer.start();let e=this._tracks.map(e=>e.source._start());await Promise.all(e)}finally{e()}})()}getMimeType(){return this._muxer.getMimeType()}async cancel(){if(this._cancelPromise)return console.warn(`Output has already been canceled.`),this._cancelPromise;if(this.state===`finalizing`||this.state===`finalized`){this.state===`finalized`&&console.warn(`Output has already been finalized.`);return}return this._cancelPromise=(async()=>{this.state=`canceled`;let e=await this._mutex.acquire();try{let e=this._tracks.map(e=>e.source._flushOrWaitForOngoingClose(!0));await Promise.all(e),await Promise.all([...this._unfinalizedTargets].map(e=>e._close())),this._unfinalizedTargets.clear()}finally{e()}})()}async finalize(){if(this.state===`pending`)throw Error(`Cannot finalize before starting.`);if(this.state===`canceled`)throw Error(`Cannot finalize after canceling.`);return this._finalizePromise?(console.warn(`Output has already been finalized.`),this._finalizePromise):this._finalizePromise=(async()=>{this.state=`finalizing`;let e=await this._mutex.acquire();try{let e=this._tracks.map(e=>e.source._flushOrWaitForOngoingClose(!1));if(await Promise.all(e),await this._muxer.finalize(),this._rootWriterPromise){let e=await this._rootWriterPromise;e.finalized||(await e.flush(),await e.finalize())}this._onFinalize&&await this._onFinalize(),this.state=`finalized`}finally{e()}})()}}})),dv,fv,pv,mv,hv,gv,_v,vv,yv=n((()=>{ma(),Cf(),xp(),rp(),P_(),F(),uv(),tv(),Xd(),Ei(),xg(),s_(),dv=e=>{if(!e||typeof e!=`object`)throw TypeError(`options.video, when provided, must be an object.`);if(e?.discard!==void 0&&typeof e.discard!=`boolean`)throw TypeError(`options.video.discard, when provided, must be a boolean.`);if(e?.forceTranscode!==void 0&&typeof e.forceTranscode!=`boolean`)throw TypeError(`options.video.forceTranscode, when provided, must be a boolean.`);if(e?.codec!==void 0&&!L.includes(e.codec))throw TypeError(`options.video.codec, when provided, must be one of: ${L.join(`, `)}.`);if(e?.bitrate!==void 0&&!(e.bitrate instanceof of)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`options.video.bitrate, when provided, must be a positive integer or a quality.`);if(e?.width!==void 0&&(!Number.isInteger(e.width)||e.width<=0))throw TypeError(`options.video.width, when provided, must be a positive integer.`);if(e?.height!==void 0&&(!Number.isInteger(e.height)||e.height<=0))throw TypeError(`options.video.height, when provided, must be a positive integer.`);if(e?.fit!==void 0&&![`fill`,`contain`,`cover`].includes(e.fit))throw TypeError(`options.video.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 TypeError(`When both options.video.width and options.video.height are provided, options.video.fit must also be provided.`);if(e?.rotate!==void 0&&![0,90,180,270].includes(e.rotate))throw TypeError(`options.video.rotate, when provided, must be 0, 90, 180 or 270.`);if(e?.allowRotationMetadata!==void 0&&typeof e.allowRotationMetadata!=`boolean`)throw TypeError(`options.video.allowRotationMetadata, when provided, must be a boolean.`);if(e?.crop!==void 0&&jd(e.crop,`options.video.`),e?.frameRate!==void 0&&(!Number.isFinite(e.frameRate)||e.frameRate<=0))throw TypeError(`options.video.frameRate, when provided, must be a finite positive number.`);if(e?.alpha!==void 0&&![`discard`,`keep`].includes(e.alpha))throw TypeError(`options.video.alpha, when provided, must be either 'discard' or 'keep'.`);if(e?.keyFrameInterval!==void 0&&(!Number.isFinite(e.keyFrameInterval)||e.keyFrameInterval<0))throw TypeError(`options.video.keyFrameInterval, when provided, must be a non-negative number.`);if(e?.process!==void 0&&typeof e.process!=`function`)throw TypeError(`options.video.process, when provided, must be a function.`);if(e?.processedWidth!==void 0&&(!Number.isInteger(e.processedWidth)||e.processedWidth<=0))throw TypeError(`options.video.processedWidth, when provided, must be a positive integer.`);if(e?.processedHeight!==void 0&&(!Number.isInteger(e.processedHeight)||e.processedHeight<=0))throw TypeError(`options.video.processedHeight, when provided, must be a positive integer.`);if(e?.hardwareAcceleration!==void 0&&![`no-preference`,`prefer-hardware`,`prefer-software`].includes(e.hardwareAcceleration))throw TypeError(`options.video.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.`);if(e?.group!==void 0&&!(e.group instanceof sv||Array.isArray(e.group)&&e.group.every(e=>e instanceof sv)))throw TypeError(`options.video.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.`)},fv=e=>{if(!e||typeof e!=`object`)throw TypeError(`options.audio, when provided, must be an object.`);if(e?.discard!==void 0&&typeof e.discard!=`boolean`)throw TypeError(`options.audio.discard, when provided, must be a boolean.`);if(e?.forceTranscode!==void 0&&typeof e.forceTranscode!=`boolean`)throw TypeError(`options.audio.forceTranscode, when provided, must be a boolean.`);if(e?.codec!==void 0&&!Li.includes(e.codec))throw TypeError(`options.audio.codec, when provided, must be one of: ${Li.join(`, `)}.`);if(e?.bitrate!==void 0&&!(e.bitrate instanceof of)&&(!Number.isInteger(e.bitrate)||e.bitrate<=0))throw TypeError(`options.audio.bitrate, when provided, must be a positive integer or a quality.`);if(e?.numberOfChannels!==void 0&&(!Number.isInteger(e.numberOfChannels)||e.numberOfChannels<=0))throw TypeError(`options.audio.numberOfChannels, when provided, must be a positive integer.`);if(e?.sampleRate!==void 0&&(!Number.isInteger(e.sampleRate)||e.sampleRate<=0))throw TypeError(`options.audio.sampleRate, when provided, must be a positive integer.`);if(e?.sampleFormat!==void 0&&![`u8`,`s16`,`s32`,`f32`].includes(e.sampleFormat))throw TypeError(`options.audio.sampleFormat, when provided, must be one of: u8, s16, s32, f32.`);if(e?.process!==void 0&&typeof e.process!=`function`)throw TypeError(`options.audio.process, when provided, must be a function.`);if(e?.processedNumberOfChannels!==void 0&&(!Number.isInteger(e.processedNumberOfChannels)||e.processedNumberOfChannels<=0))throw TypeError(`options.audio.processedNumberOfChannels, when provided, must be a positive integer.`);if(e?.processedSampleRate!==void 0&&(!Number.isInteger(e.processedSampleRate)||e.processedSampleRate<=0))throw TypeError(`options.audio.processedSampleRate, when provided, must be a positive integer.`);if(e?.group!==void 0&&!(e.group instanceof sv||Array.isArray(e.group)&&e.group.every(e=>e instanceof sv)))throw TypeError(`options.audio.group, when provided, must be an OutputTrackGroup or an array of OutputTrackGroups.`)},pv=2,mv=48e3,hv=class e{static async init(t){let n=new e(t);return await n._init(),n}constructor(e){if(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 vv,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=[],!e||typeof e!=`object`)throw TypeError(`options must be an object.`);if(!(e.input instanceof vp))throw TypeError(`options.input must be an Input.`);if(!(e.output instanceof lv))throw TypeError(`options.output must be an Output.`);if(e.tracks!==void 0&&e.tracks!==`all`&&e.tracks!==`primary`)throw TypeError(`options.tracks, when provided, must be either 'all' or 'primary'.`);if(e.output._tracks.length>0||Object.keys(e.output._metadataTags).length>0||e.output.state!==`pending`)throw TypeError(`options.output must be fresh: no tracks or metadata tags added and not started.`);if(e.video!==void 0&&typeof e.video!=`function`)if(Array.isArray(e.video))for(let t of e.video)dv(t);else dv(e.video);if(e.audio!==void 0&&typeof e.audio!=`function`)if(Array.isArray(e.audio))for(let t of e.audio)fv(t);else fv(e.audio);if(e.trim!==void 0&&(!e.trim||typeof e.trim!=`object`))throw TypeError(`options.trim, when provided, must be an object.`);if(e.trim?.start!==void 0&&!Number.isFinite(e.trim.start))throw TypeError(`options.trim.start, when provided, must be a finite number.`);if(e.trim?.end!==void 0&&!Number.isFinite(e.trim.end))throw TypeError(`options.trim.end, when provided, must be a finite number.`);if(e.trim?.start!==void 0&&e.trim.end!==void 0&&e.trim.start>=e.trim.end)throw TypeError(`options.trim.start must be less than options.trim.end.`);if(e.tags!==void 0&&(typeof e.tags!=`object`||!e.tags)&&typeof e.tags!=`function`)throw TypeError(`options.tags, when provided, must be an object or a function.`);if(typeof e.tags==`object`&&Si(e.tags),e.showWarnings!==void 0&&typeof e.showWarnings!=`boolean`)throw TypeError(`options.showWarnings, when provided, must be a boolean.`);this._options=e,this.input=e.input,this.output=e.output;let{promise:t,resolve:n}=P();this._started=t,this._start=n}async _init(){let e=await this.input.getFormat(),t,n=this._options.tracks;n===void 0&&(n=e.name.includes(`(HLS)`)?`primary`:`all`),n===`all`?t=await this.input.getTracks():n===`primary`?t=[await this.input.getPrimaryVideoTrack(),await this.input.getPrimaryAudioTrack()].filter(e=>e!==null):(pr(n),D(!1));let r=this.output.format.getSupportedTrackCounts(),i=1,a=1,o=[],s=[];for(let e of t){let t;if(e.isVideoTrack())if(this._options.video)if(typeof this._options.video==`function`){let n=await this._options.video(e,i)??{};if(Array.isArray(n))for(let e of n)dv(e);else dv(n);t=Array.isArray(n)?n:[n],i++}else t=Array.isArray(this._options.video)?this._options.video:[this._options.video];else t=[{}];else if(e.isAudioTrack())if(this._options.audio)if(typeof this._options.audio==`function`){let n=await this._options.audio(e,a)??{};if(Array.isArray(n))for(let e of n)fv(e);else fv(n);t=Array.isArray(n)?n:[n],a++}else t=Array.isArray(this._options.audio)?this._options.audio:[this._options.audio];else t=[{}];else D(!1);let n=t.filter(e=>e.discard);for(let t of n)this.discardedTracks.push({track:e,reason:`discarded_by_user`,trackOptions:t});if(t.length===n.length){t.length===0&&this.discardedTracks.push({track:e,reason:`discarded_by_user`,trackOptions:{}});continue}let r=t.filter(e=>!e.discard);o.push(e),s.push(r)}this._options.trim?.start===void 0?this._startTimestamp=Math.max(await this.input.getFirstTimestamp(o),0):this._startTimestamp=this._options.trim.start,this._endTimestamp=Math.max(this._options.trim?.end??1/0,this._startTimestamp);for(let e=0;e<o.length;e++){let t=o[e],n=s[e];for(let e of n){if(this._totalTrackCount===r.total.max){this.discardedTracks.push({track:t,reason:`max_track_count_reached`,trackOptions:e});continue}if(this._addedCounts[t.type]===r[t.type].max){this.discardedTracks.push({track:t,reason:`max_track_count_of_type_reached`,trackOptions:e});continue}let n=this._nextOutputTrackId++;t.isVideoTrack()?await this._processVideoTrack(t,e,n):t.isAudioTrack()?await this._processAudioTrack(t,e,n):D(!1)}}for(let e=0;e<this.utilizedTracks.length-1;e++)for(let t=e+1;t<this.utilizedTracks.length;t++){let n=this.utilizedTracks[e],r=this.utilizedTracks[t],i=this._outputOwnTrackGroups[e],a=this._outputOwnTrackGroups[t];D(i!==void 0),D(a!==void 0),i&&a&&n.canBePairedWith(r)&&i.pairWith(a)}let c=await this.input.getMetadataTags(),l;if(this._options.tags){let e=typeof this._options.tags==`function`?await this._options.tags(c):this._options.tags;Si(e),l=e}else l=c;let u=e.mimeType===this.output.format.mimeType,d=c.raw===l.raw;if(c.raw&&d&&!u&&delete l.raw,this.output.setMetadataTags(l),this.isValid=this._totalTrackCount>=r.total.min&&this._addedCounts.video>=r.video.min&&this._addedCounts.audio>=r.audio.min&&this._addedCounts.subtitle>=r.subtitle.min,this._options.showWarnings??!0){let e=[],t=this.discardedTracks.filter(e=>e.reason!==`discarded_by_user`);t.length>0&&e.push(`Some tracks had to be discarded from the conversion:`,t),this.isValid||(e.length>0&&e.push(`
|
|
117
117
|
|
|
118
118
|
`),e.push(this._getInvalidityExplanation().join(``))),e.length>0&&console.warn(...e)}}_getInvalidityExplanation(){let e=[];if(this.discardedTracks.length===0)e.push(`Due to missing tracks, this conversion cannot be executed.`);else{let t=this.discardedTracks.every(e=>e.reason===`discarded_by_user`||e.reason===`no_encodable_target_codec`)&&this.discardedTracks.some(e=>e.reason===`no_encodable_target_codec`);if(e.push(`Due to discarded tracks, this conversion cannot be executed.`),t){let t=this.discardedTracks.flatMap(e=>e.reason===`discarded_by_user`?[]:e.track.type===`video`?this.output.format.getSupportedVideoCodecs():e.track.type===`audio`?this.output.format.getSupportedAudioCodecs():this.output.format.getSupportedSubtitleCodecs()),n=[...new Set(t)];n.length===1?e.push(`\nTracks were discarded because your environment is not able to encode '${n[0]}'.`):e.push(`
|
|
119
119
|
Tracks were discarded because your environment is not able to encode any of the following codecs: ${n.map(e=>`'${e}'`).join(`, `)}.`),n.includes(`mp3`)&&e.push(`
|
|
@@ -122,8 +122,8 @@ The @mediabunny/aac-encoder extension package provides support for encoding AAC.
|
|
|
122
122
|
The @mediabunny/ac3 extension package provides support for encoding and decoding AC-3/E-AC-3.`),n.includes(`flac`)&&e.push(`
|
|
123
123
|
The @mediabunny/flac-encoder extension package provides support for encoding FLAC.`)}else e.push(`
|
|
124
124
|
Check the discardedTracks field for more info.`)}return e}async execute(){if(!this.isValid)throw Error(`Cannot execute this conversion because its output configuration is invalid. Make sure to always check the isValid field before executing a conversion.
|
|
125
|
-
`+this._getInvalidityExplanation().join(``));if(this._executed)throw Error(`Conversion cannot be executed twice.`);this._executed=!0;for(let e of this._outputTrackIds)this._synchronizer.declareTrack(e);if(this.onProgress){let e=[...new Set(this.utilizedTracks)].map(async e=>await e.isLive()?1/0:await e.getDurationFromMetadata()??await e.computeDuration()),t=Math.max(0,...await Promise.all(e));this._computeProgress=!0,this._totalDuration=Math.min(t-this._startTimestamp,this._endTimestamp-this._startTimestamp);for(let e of this._outputTrackIds)this._maxTimestamps.set(e,0);this.onProgress?.(0,0)}await this.output.start(),this._start();try{await Promise.all(this._trackPromises)}catch(e){throw this._canceled||this.cancel(),e}if(this._canceled)throw new gv;if(await this.output.finalize(),this._computeProgress){let e=Math.min(...this._maxTimestamps.values());this.onProgress?.(1,e)}}async cancel(){if(!(this.output.state===`finalizing`||this.output.state===`finalized`)){if(this._canceled){console.warn(`Conversion already canceled.`);return}this._canceled=!0,await this.output.cancel()}}async _processVideoTrack(e,t,n){let r=await e.getCodec();if(!r){this.discardedTracks.push({track:e,reason:`unknown_source_codec`,trackOptions:t});return}let i,a=await e.getRotation(),o=Bn(a+(t.rotate??0)),s=o,c=this.output.format.supportsVideoRotationMetadata&&(t.allowRotationMetadata??!0),l=await e.getSquarePixelWidth(),u=await e.getSquarePixelHeight(),[d,f]=o%180==0?[l,u]:[u,l],p=t.crop;p&&=jd(p,d,f);let[m,h]=p?[p.width,p.height]:[d,f],g=m,_=h,v=g/_;t.width!==void 0&&t.height===void 0?(g=_i(t.width),_=_i(Math.round(g/v))):t.width===void 0&&t.height!==void 0?(_=_i(t.height),g=_i(Math.round(_*v))):t.width!==void 0&&t.height!==void 0&&(g=_i(t.width),_=_i(t.height));let y=await e.getFirstTimestamp(),b=this.output.format.getSupportedVideoCodecs(),x=!!t.forceTranscode||y<this._startTimestamp||!!t.frameRate||t.keyFrameInterval!==void 0||t.process!==void 0||t.bitrate!==void 0||!b.includes(r)||t.codec&&t.codec!==r||g!==m||_!==h||o!==0&&!c||!!p,S=t.alpha??`discard`;if(x){if(!await e.canDecode()){this.discardedTracks.push({track:e,reason:`undecodable_source_codec`,trackOptions:t});return}t.codec&&(b=b.filter(e=>e===t.codec));let r=t.bitrate??df,d=await xf(b,{width:t.process&&t.processedWidth?t.processedWidth:g,height:t.process&&t.processedHeight?t.processedHeight:_,bitrate:r});if(!d){this.discardedTracks.push({track:e,reason:`no_encodable_target_codec`,trackOptions:t});return}let f={codec:d,bitrate:r,keyFrameInterval:t.keyFrameInterval,sizeChangeBehavior:t.fit??`passThrough`,alpha:S,hardwareAcceleration:t.hardwareAcceleration,transform:{}};D(f.transform);let v=g!==m||_!==h||o!==0&&(!c||t.process!==void 0)||!!p||l!==await e.getCodedWidth()||u!==await e.getCodedHeight();if(!v){let t=new lv({format:new U_,target:new vg}),n=new g_(f);t.addVideoTrack(n),await t.start();let r=await new Qf(e).getSample(y);if(r)try{await n.add(r),r.close(),await t.finalize()}catch(e){console.info(`Error when probing encoder support. Falling back to rerender path.`,e),v=!0,t.cancel()}else await t.cancel()}t.frameRate&&(f.transform.frameRate=t.frameRate),v&&(s=0,f.transform.width=g,f.transform.height=_,f.transform.fit=t.fit??`fill`,f.transform.rotate=Bn(o-a),f.transform.crop=p,f.transform.alpha=S);let x=new g_(f);i=x,this._trackPromises.push((async()=>{await this._started;let r=new Qf(e);for await(let e of r.samples(this._startTimestamp,this._endTimestamp)){if(this._canceled){e.close();return}let r=Math.max(e.timestamp-this._startTimestamp,0);e.setTimestamp(r),await this._registerVideoSample(t,n,x,e),e.close()}x.close(),this._synchronizer.closeTrack(n)})())}else{let t=new d_(r);i=t,this._trackPromises.push((async()=>{await this._started;let r=new Wf(e),i={decoderConfig:await e.getDecoderConfig()??void 0};for await(let e of r.packets(void 0,void 0,{verifyKeyPackets:!0})){if(this._canceled)return;if(e.timestamp>=this._endTimestamp)break;let r=e.clone({timestamp:e.timestamp-this._startTimestamp,sideData:S===`discard`?{}:e.sideData});D(r.timestamp>=0),this._reportProgress(n,r.timestamp+r.duration),await t.add(r,i),this._synchronizer.shouldWait(n,r.timestamp)&&await this._synchronizer.wait(r.timestamp)}t.close(),this._synchronizer.closeTrack(n)})())}let C=null;t.group||(C=new sv);let ee=await e.getLanguageCode();this.output.addVideoTrack(i,{frameRate:t.frameRate,languageCode:kr(ee)?ee:void 0,name:await e.getName()??void 0,disposition:await e.getDisposition(),rotation:s,group:C??t.group}),this._addedCounts.video++,this._totalTrackCount++,this.utilizedTracks.push(e),this._outputTrackIds.push(n),this._outputOwnTrackGroups.push(C)}async _registerVideoSample(e,t,n,r){if(this._canceled)return;this._reportProgress(t,r.timestamp+r.duration);let i;if(!e.process)i=[r];else{let t=e.process(r);t instanceof Promise&&(t=await t),Array.isArray(t)||(t=t===null?[]:[t]),i=t.map(e=>e instanceof Cd?e:typeof VideoFrame<`u`&&e instanceof VideoFrame?new Cd(e):new Cd(e,{timestamp:r.timestamp,duration:r.duration}))}try{for(let e of i){if(this._canceled)break;await n.add(e),this._synchronizer.shouldWait(t,e.timestamp)&&await this._synchronizer.wait(e.timestamp)}}finally{for(let e of i)e!==r&&e.close()}}async _processAudioTrack(e,t,n){let r=await e.getCodec();if(!r){this.discardedTracks.push({track:e,reason:`unknown_source_codec`,trackOptions:t});return}let i,a=await e.getNumberOfChannels(),o=await e.getSampleRate(),s=await e.getFirstTimestamp(),c=t.numberOfChannels??a,l=t.sampleRate??o,u=c!==a||l!==o||s<this._startTimestamp||s>this._startTimestamp&&!this.output.format.supportsTimestampedMediaData,d=this.output.format.getSupportedAudioCodecs();if(!t.forceTranscode&&!t.bitrate&&!u&&d.includes(r)&&(!t.codec||t.codec===r)&&!t.process&&t.sampleFormat===void 0){let t=new b_(r);i=t,this._trackPromises.push((async()=>{await this._started;let r=new Wf(e),i={decoderConfig:await e.getDecoderConfig()??void 0};for await(let e of r.packets()){if(this._canceled)return;if(e.timestamp>=this._endTimestamp)break;let r=e.clone({timestamp:e.timestamp-this._startTimestamp});D(r.timestamp>=0),this._reportProgress(n,r.timestamp+r.duration),await t.add(r,i),this._synchronizer.shouldWait(n,r.timestamp)&&await this._synchronizer.wait(r.timestamp)}t.close(),this._synchronizer.closeTrack(n)})())}else{if(!await e.canDecode()){this.discardedTracks.push({track:e,reason:`undecodable_source_codec`,trackOptions:t});return}let r=null;t.codec&&(d=d.filter(e=>e===t.codec));let a=t.bitrate??df,o=await yf(d,{numberOfChannels:t.process&&t.processedNumberOfChannels?t.processedNumberOfChannels:c,sampleRate:t.process&&t.processedSampleRate?t.processedSampleRate:l,bitrate:a});if(!o.some(e=>Li.includes(e))&&d.some(e=>Li.includes(e))&&(c!==pv||l!==mv)){let e=(await yf(d,{numberOfChannels:pv,sampleRate:mv,bitrate:a})).find(e=>Li.includes(e));e&&(u=!0,r=e,c=pv,l=mv)}else r=o[0]??null;if(r===null){this.discardedTracks.push({track:e,reason:`no_encodable_target_codec`,trackOptions:t});return}if(u)i=this._resampleAudio(e,t,n,r,c,l,a);else{let o=new S_({codec:r,bitrate:a});i=o,this._trackPromises.push((async()=>{await this._started;let r=new np(e);for await(let e of r.samples(void 0,this._endTimestamp)){if(this._canceled){e.close();return}e.setTimestamp(e.timestamp-this._startTimestamp),await this._registerAudioSample(t,n,o,e),e.close()}o.close(),this._synchronizer.closeTrack(n)})())}}let f=null;t.group||(f=new sv);let p=await e.getLanguageCode();this.output.addAudioTrack(i,{languageCode:kr(p)?p:void 0,name:await e.getName()??void 0,disposition:await e.getDisposition(),group:f??t.group}),this._addedCounts.audio++,this._totalTrackCount++,this.utilizedTracks.push(e),this._outputTrackIds.push(n),this._outputOwnTrackGroups.push(f)}async _registerAudioSample(e,t,n,r){if(this._canceled)return;let i=r;e.sampleFormat!==void 0&&Jd(i.format)!==e.sampleFormat&&(i=Xd(i,e.sampleFormat)),this._reportProgress(t,i.timestamp+i.duration);let a;if(!e.process)a=[i];else{let t=e.process(i);if(t instanceof Promise&&(t=await t),Array.isArray(t)||(t=t===null?[]:[t]),!t.every(e=>e instanceof Hd))throw TypeError(`The audio process function must return an AudioSample, null, or an array of AudioSamples.`);a=t}try{for(let e of a){if(this._canceled)break;await n.add(e),this._synchronizer.shouldWait(t,e.timestamp)&&await this._synchronizer.wait(e.timestamp)}}finally{i!==r&&i.close();for(let e of a)e!==r&&e.close()}}_resampleAudio(e,t,n,r,i,a,o){let s=new S_({codec:r,bitrate:o});return this._trackPromises.push((async()=>{await this._started;let r=new o_({targetNumberOfChannels:i,targetSampleRate:a,startTime:this._startTimestamp,endTime:this._endTimestamp,onSample:async e=>{D(e.timestamp>=this._startTimestamp),e.setTimestamp(e.timestamp-this._startTimestamp),await this._registerAudioSample(t,n,s,e),e.close()}}),o=new np(e).samples(this._startTimestamp,this._endTimestamp);for await(let e of o){if(this._canceled){e.close();return}await r.add(e),e.close()}await r.finalize(),s.close(),this._synchronizer.closeTrack(n)})()),s}_reportProgress(e,t){if(!this._computeProgress)return;D(this._totalDuration!==null),this._maxTimestamps.set(e,Math.max(t,this._maxTimestamps.get(e)));let n=Math.min(...this._maxTimestamps.values()),r=br(n/this._totalDuration,0,1);r!==this._lastProgress&&(this._lastProgress=r,this.onProgress?.(r,n))}},gv=class extends Error{constructor(e=`Conversion has been canceled.`){super(e),this.name=`ConversionCanceledError`}},_v=1,vv=class{constructor(){this.maxTimestamps=new Map,this.resolvers=[]}declareTrack(e){this.maxTimestamps.set(e,0)}shouldWait(e,t){let n=this.maxTimestamps.get(e);return D(n!==void 0),this.maxTimestamps.set(e,Math.max(t,n)),t-this.computeMinAndMaybeResolve()>_v}wait(e){let{promise:t,resolve:n}=P();return this.resolvers.push({timestamp:e,resolve:n}),t}closeTrack(e){this.maxTimestamps.delete(e),this.computeMinAndMaybeResolve()}computeMinAndMaybeResolve(){let e=1/0;for(let[,t]of this.maxTimestamps)e=Math.min(e,t);for(let t=0;t<this.resolvers.length;t++){let n=this.resolvers[t];n.timestamp-e<_v&&(n.resolve(),this.resolvers.splice(t,1),t--)}return e}}})),bv=r({ADTS:()=>Xu,ALL_FORMATS:()=>ed,ALL_TRACK_TYPES:()=>nv,AUDIO_CODECS:()=>Ri,AdtsInputFormat:()=>Bu,AdtsOutputFormat:()=>Z_,AppendOnlyStreamTarget:()=>gg,AttachedFile:()=>xi,AudioBufferSink:()=>rp,AudioBufferSource:()=>C_,AudioSample:()=>Hd,AudioSampleResource:()=>Vd,AudioSampleSink:()=>np,AudioSampleSource:()=>S_,AudioSource:()=>y_,BaseMediaSampleSink:()=>Kf,BlobSource:()=>iu,BufferSource:()=>ru,BufferTarget:()=>fg,CanvasSink:()=>$f,CanvasSource:()=>__,CmafOutputFormat:()=>W_,ConcurrentRunner:()=>vi,Conversion:()=>hv,ConversionCanceledError:()=>gv,CustomAudioDecoder:()=>Ef,CustomAudioEncoder:()=>Of,CustomPathedSource:()=>nu,CustomVideoDecoder:()=>Tf,CustomVideoEncoder:()=>Df,EncodedAudioPacketSource:()=>b_,EncodedPacket:()=>L,EncodedPacketSink:()=>Wf,EncodedVideoPacketSource:()=>d_,EventEmitter:()=>gi,FLAC:()=>Zu,FilePathSource:()=>lu,FilePathTarget:()=>_g,FlacInputFormat:()=>zu,FlacOutputFormat:()=>Q_,HLS:()=>$u,HLS_FORMATS:()=>td,HlsInputFormat:()=>Hu,HlsOutputFormat:()=>ev,Input:()=>yp,InputAudioTrack:()=>cp,InputDisposedError:()=>xp,InputFormat:()=>Au,InputTrack:()=>ap,InputVideoTrack:()=>sp,IsobmffInputFormat:()=>ju,IsobmffOutputFormat:()=>H_,MATROSKA:()=>Gu,MP3:()=>qu,MP4:()=>Uu,MPEG_TS:()=>Qu,MatroskaInputFormat:()=>Pu,MediaSource:()=>c_,MediaStreamAudioTrackSource:()=>w_,MediaStreamVideoTrackSource:()=>v_,MkvOutputFormat:()=>K_,MovOutputFormat:()=>G_,Mp3InputFormat:()=>Iu,Mp3OutputFormat:()=>J_,Mp4InputFormat:()=>Mu,Mp4OutputFormat:()=>U_,MpegTsInputFormat:()=>Vu,MpegTsOutputFormat:()=>$_,NON_PCM_AUDIO_CODECS:()=>Li,NullTarget:()=>vg,OGG:()=>Yu,OggInputFormat:()=>Ru,OggOutputFormat:()=>X_,Output:()=>lv,OutputAudioTrack:()=>av,OutputFormat:()=>V_,OutputSubtitleTrack:()=>ov,OutputTrack:()=>rv,OutputTrackGroup:()=>sv,OutputVideoTrack:()=>iv,PCM_AUDIO_CODECS:()=>Ii,PathedSource:()=>eu,PathedTarget:()=>bg,QTFF:()=>Wu,QUALITY_HIGH:()=>df,QUALITY_LOW:()=>lf,QUALITY_MEDIUM:()=>uf,QUALITY_VERY_HIGH:()=>ff,QUALITY_VERY_LOW:()=>cf,Quality:()=>sf,QuickTimeInputFormat:()=>Nu,RangedSource:()=>mu,RangedTarget:()=>yg,ReadableStreamSource:()=>du,RichImageData:()=>bi,SUBTITLE_CODECS:()=>zi,Source:()=>Ql,SourceRef:()=>$l,StreamSource:()=>uu,StreamTarget:()=>hg,SubtitleSource:()=>M_,Target:()=>lg,TextSubtitleSource:()=>N_,UnsupportedInputFormatError:()=>bp,UrlSource:()=>cu,VIDEO_CODECS:()=>Fi,VIDEO_SAMPLE_PIXEL_FORMATS:()=>xd,VideoSample:()=>Cd,VideoSampleColorSpace:()=>kd,VideoSampleResource:()=>bd,VideoSampleSink:()=>Qf,VideoSampleSource:()=>g_,VideoSource:()=>l_,WAVE:()=>Ju,WEBM:()=>Ku,WavOutputFormat:()=>Y_,WaveInputFormat:()=>Lu,WebMInputFormat:()=>Fu,WebMOutputFormat:()=>q_,asc:()=>lp,canDecode:()=>cd,canDecodeAudio:()=>ud,canDecodeVideo:()=>ld,canEncode:()=>pf,canEncodeAudio:()=>hf,canEncodeSubtitles:()=>gf,canEncodeVideo:()=>mf,desc:()=>up,getDecodableAudioCodecs:()=>pd,getDecodableCodecs:()=>dd,getDecodableVideoCodecs:()=>fd,getEncodableAudioCodecs:()=>yf,getEncodableCodecs:()=>_f,getEncodableSubtitleCodecs:()=>bf,getEncodableVideoCodecs:()=>vf,getFirstEncodableAudioCodec:()=>Sf,getFirstEncodableSubtitleCodec:()=>Cf,getFirstEncodableVideoCodec:()=>xf,prefer:()=>dp,registerDecoder:()=>Nf,registerEncoder:()=>Pf,registerVideoSampleTransformer:()=>Td}),xv,Sv=n((()=>{uv(),tv(),P_(),ha(),md(),wf(),xg(),F(),hu(),rd(),Sp(),hp(),Ro(),Zd(),ip(),yv(),Ff(),Ei(),xv=Symbol.for(`mediabunny loaded`),globalThis[xv]&&console.error(`[WARNING]
|
|
126
|
-
Mediabunny was loaded twice. This will likely cause Mediabunny not to work correctly. Check if multiple dependencies are importing different versions of Mediabunny, or if something is being bundled incorrectly.`),globalThis[xv]=!0}));Sv();async function Cv(e){try{let t=new iu(e),n=new yp({formats:[Uu],source:t});if(typeof n.computeDuration!=`function`)throw Error(`computeDuration method is not available`);let r=await n.computeDuration();if(!r)throw Error(`Duration is missing from computeDuration`);if(r<=0)throw Error(`Invalid duration: must be greater than 0`);return r}catch{return wv(e)}}function wv(e){return new Promise((t,n)=>{let r=document.createElement(`video`),i=URL.createObjectURL(e),a=()=>{URL.revokeObjectURL(i)};r.addEventListener(`loadedmetadata`,()=>{a();let e=r.duration;if(!Number.isFinite(e)||e<=0){n(Error(`Invalid video duration`));return}t(e)}),r.addEventListener(`error`,()=>{a(),n(Error(`Failed to load video metadata`))}),r.src=i,r.load()})}let Tv=[`video/mp4`,`video/quicktime`,`video/webm`];async function Ev(e,t={}){let n=t.maxFileSize===void 0?524288e3:t.maxFileSize;if(e.size>n)return{valid:!1,error:`File too large. Maximum size is ${Math.round(n/1024/1024)}MB`};let r=t.allowedFormats===void 0?Tv:t.allowedFormats;if(!r.includes(e.type))return{valid:!1,error:`Unsupported format. Please use: ${r.join(`, `)}`};let a=await Cv(e).then(e=>({success:!0,duration:e})).catch(e=>({success:!1,error:i(e)}));if(a.success===!1)return{valid:!1,error:`Failed to read video file: ${a.error}`};let o=a.duration;return t.maxRecordingTime!==null&&t.maxRecordingTime!==void 0&&o>t.maxRecordingTime?{valid:!1,error:`Video too long. Maximum duration is ${t.maxRecordingTime} seconds`}:{valid:!0}}let Dv=`unknown`;function Ov(){if(typeof navigator>`u`)return null;let e=navigator;return{userAgent:e.userAgent,platform:e.platform,hardwareConcurrency:e.hardwareConcurrency,deviceMemory:e.deviceMemory,onLine:e.onLine,connection:e.connection}}function kv(){return globalThis.isSecureContext===!0}function Av(){return globalThis.MediaRecorder!==void 0}function jv(){return globalThis.VideoEncoder!==void 0}function Mv(e){return globalThis.VideoEncoder===void 0?Promise.resolve({config:e,supported:!1}):globalThis.VideoEncoder.isConfigSupported(e)}function Nv(e){return{navigatorProvider:e?.navigatorProvider??Ov(),secureContextProvider:e?.secureContextProvider??kv,mediaRecorderAvailabilityProvider:e?.mediaRecorderAvailabilityProvider??Av,videoEncoderAvailabilityProvider:e?.videoEncoderAvailabilityProvider??jv,codecSupportProbe:e?.codecSupportProbe??Mv}}function Pv(e){let t=new wt(e??``).getResult(),n=t.browser.name??Dv;return{browser:{name:n,version:t.browser.version??``,normalizedName:n.toLowerCase()},os:{name:t.os.name??Dv,version:t.os.version??``}}}function Fv(e){return e instanceof Error?e.message:String(e)}async function Iv(e,t){try{let n=await t(e.config);return{id:e.id,config:e.config,supported:n.supported===!0}}catch(t){return{id:e.id,config:e.config,supported:!1,errorCode:`codec-probe-error`,errorMessage:Fv(t)}}}async function Lv(e={}){let t=Nv(e.dependencies),{browser:n,os:r}=Pv(t.navigatorProvider?.userAgent),i=await Promise.all((e.codecCandidates??[]).map(e=>Iv(e,t.codecSupportProbe)));return{browser:n,os:r,resources:{deviceMemory:t.navigatorProvider?.deviceMemory,hardwareConcurrency:t.navigatorProvider?.hardwareConcurrency},network:{online:t.navigatorProvider?.onLine,effectiveType:t.navigatorProvider?.connection?.effectiveType},features:{isSecureContext:t.secureContextProvider(),hasMediaRecorder:t.mediaRecorderAvailabilityProvider(),hasVideoEncoder:t.videoEncoderAvailabilityProvider()},codecProbeResults:i}}function Rv(e,t){let n=e.resources.deviceMemory;return n===void 0||n>=t}function zv(e,t){let n=e.resources.hardwareConcurrency;return n===void 0||n>=t}function Bv(e,t){let n=new Set(t);return e.codecProbeResults.find(e=>n.has(e.id)&&e.supported)?.id}function Vv(e,t){return e.features.isSecureContext&&e.features.hasMediaRecorder&&e.features.hasVideoEncoder&&t&&e.network.online!==!1}function Hv(e){return e.os.name.toLowerCase()===`android`}function Uv(e,t,n,r){let i=[];return e.features.isSecureContext||i.push(`insecure-context`),e.features.hasVideoEncoder||i.push(`webcodecs-unavailable`),t||i.push(`target-codec-unsupported`),n||i.push(`insufficient-device-memory`),r||i.push(`insufficient-hardware-concurrency`),Hv(e)&&i.push(`android-post-recording-transcode`),i}function Wv(e){let t=[];return e.features.hasMediaRecorder||t.push(`mediarecorder-unavailable`),e.network.online===!1&&t.push(`offline`),t}function Gv(e){let t=e.resourceThresholds?.minDeviceMemory??4,n=e.resourceThresholds?.minHardwareConcurrency??4,r=Bv(e.profile,e.targetCodecIds),i=r!==void 0,a=Rv(e.profile,t),o=zv(e.profile,n),s=Uv(e.profile,i,a,o);return e.profile.features.isSecureContext&&e.profile.features.hasVideoEncoder&&i&&e.profile.network.online!==!1&&!Hv(e.profile)&&a&&o?{route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`],selectedCodecId:r}:Vv(e.profile,i)?{route:`safe-capture-post-recording-transcode`,reasonCodes:[...s,`mediarecorder-supported`],selectedCodecId:r}:{route:`unsupported-with-guidance`,reasonCodes:[...s,...Wv(e.profile)],guidance:{canRetry:!0,message:`Recording is not supported in this browser context. Use a secure connection, go online, and try a current Chrome or Edge browser.`}}}let Kv=[`prefer-hardware`,`no-preference`,`prefer-software`];async function qv(){let e=(await Promise.allSettled([Promise.resolve().then(()=>(Sv(),bv))]))[0];return e.status===`fulfilled`?e.value:null}let Jv={loadMediabunnyModule:qv};function Yv(e){let t=e?.loadMediabunnyModule,n;return n=t===void 0?Jv.loadMediabunnyModule:t,{loadMediabunnyModule:n}}function Xv(e,t){return t===void 0||e.includes(t)?e:[...e,t]}function Zv(e,t){let n=[];e!==void 0&&t.videoCodecFallbackOrder.includes(e)&&(n=Xv(n,e)),n=Xv(n,t.preferredVideoCodec);for(let e of t.videoCodecFallbackOrder)n=Xv(n,e);return n}function Qv(e,t){let n=[];e!==void 0&&t.audioCodecFallbackOrder.includes(e)&&(n=Xv(n,e)),n=Xv(n,t.preferredAudioCodec);for(let e of t.audioCodecFallbackOrder)n=Xv(n,e);return n}function $v(e,t,n){let r=Error(`No encodable video codec available for format: ${e}`);return r.code=`recording.video-codec-unavailable`,r.details={candidates:t,format:e,probeErrors:n},r}async function ey(e,t,n){try{return await e(t,n)?{kind:`supported`,codec:t}:{kind:`unsupported`,codec:t}}catch(e){return{kind:`error`,codec:t,error:e}}}async function ty(e){let t=await Yv(e.dependencies).loadMediabunnyModule();if(t===null)return e.policy.preferredVideoCodec;let n=t.canEncodeVideo;if(typeof n!=`function`)return e.policy.preferredVideoCodec;let r=Zv(e.overrideCodec,e.policy),a={};e.width!==void 0&&(a.width=e.width),e.height!==void 0&&(a.height=e.height),e.bitrate!==void 0&&(a.bitrate=e.bitrate);let o=[];for(let e of Kv){let t={...a,hardwareAcceleration:e},i=await Promise.all(r.map(e=>ey(n,e,t)));o.push(...i);for(let e of i)if(e.kind===`supported`)return e.codec}let s=o.filter(e=>e.kind===`error`).map(e=>`${e.codec}: ${i(e.error)}`);if(e.dependencies?.loadMediabunnyModule===void 0&&s.length===0&&typeof VideoEncoder>`u`)return e.policy.preferredVideoCodec;throw $v(e.format,r,s)}async function ny(e){let t=await Yv(e.dependencies).loadMediabunnyModule();if(t===null)return e.policy.preferredAudioCodec;let n=t.getFirstEncodableAudioCodec;if(typeof n!=`function`)return e.policy.preferredAudioCodec;let r=Qv(e.overrideCodec,e.policy),i={};e.bitrate!==void 0&&(i.bitrate=e.bitrate);let a=(await Promise.allSettled([n(r,i)]))[0];if(a.status===`rejected`)return e.policy.preferredAudioCodec;let o=a.value;if(o===null){if(e.shouldThrowIfNoCodecAvailable)throw Error(`No encodable audio codec available for format: ${e.format}`);return e.policy.preferredAudioCodec}if(r.includes(o))return o;if(e.shouldThrowIfNoCodecAvailable)throw Error(`No encodable audio codec available for format: ${e.format}`);return e.policy.preferredAudioCodec}function ry(e){switch(e){case`mp4`:return`video/mp4`;case`webm`:return`video/webm`;case`mkv`:return`video/x-matroska`;case`mov`:return`video/quicktime`;default:throw Error(`Unsupported output format: ${e}`)}}function iy(e){switch(e){case`mp4`:return`mp4`;case`webm`:return`webm`;case`mkv`:return`mkv`;case`mov`:return`mov`;default:throw Error(`Unsupported output format: ${e}`)}}Sv();function ay(e){if(typeof e==`string`)return new lu(e);if(e instanceof Blob)return new iu(e);throw Error(`Invalid input type. Expected Blob, File, or file path string.`)}function oy(e){switch(e){case`mp4`:return new U_;case`webm`:return new q_;case`mkv`:return new K_;case`mov`:return new G_;default:throw Error(`Unsupported output format: ${e}`)}}function sy(e,t=!1){let n={fit:`contain`,forceTranscode:!0,allowRotationMetadata:!1};return e.width!==void 0&&(n.width=e.width),e.height!==void 0&&(n.height=e.height),e.fps!==void 0&&(n.frameRate=e.fps),e.bitrate!==void 0&&(n.bitrate=e.bitrate),e.codec!==void 0&&(n.codec=e.codec),t&&(n.bitrateMode=`variable`,n.latencyMode=`realtime`,n.hardwareAcceleration=`prefer-hardware`,n.keyFrameInterval=2),{video:n,audio:{codec:e.audioCodec,forceTranscode:!0,...t&&{bitrateMode:`variable`}}}}function cy(e){if(!e.isValid){let t=e.discardedTracks.map(e=>e.reason).join(`, `);throw Error(`Conversion is invalid. Discarded tracks: ${t}`)}}async function ly(e,t={},n){let r=t.format;r===void 0&&(r=Xt.format);let i={...Xt,...t,format:r},a=ay(e),o=Ht(i.format,{isLinuxPlatform:on()});i.audioBitrate===void 0&&(i.audioBitrate=Kt(i.format)),i.audioCodec=await ny({format:i.format,overrideCodec:i.audioCodec,policy:o,bitrate:i.audioBitrate}),i.codec=await ty({format:i.format,overrideCodec:i.codec,policy:o,width:i.width,height:i.height,bitrate:i.bitrate});let s=new yp({formats:ed,source:a}),c=new lv({format:oy(i.format),target:new fg}),l=await hv.init({input:s,output:c,...sy(i)});cy(l),n&&(l.onProgress=n),await l.execute();let u=c.target.buffer;if(!u)throw Error(`Transcoding completed but no output buffer was generated`);let d=ry(i.format);return{buffer:u,blob:new Blob([u],{type:d})}}async function uy(e,t={},n){let r=t.format;r===void 0&&(r=Xt.format);let i={...Xt,...t,format:r},a=Ht(i.format,{isLinuxPlatform:on()});i.audioBitrate===void 0&&(i.audioBitrate=Kt(i.format)),i.audioCodec=await ny({format:i.format,overrideCodec:i.audioCodec,policy:a,bitrate:i.audioBitrate}),i.codec=await ty({format:i.format,overrideCodec:i.codec,policy:a,width:i.width,height:i.height,bitrate:i.bitrate});let o=new yp({formats:ed,source:new iu(e)}),s=new lv({format:oy(i.format),target:new fg}),c=await hv.init({input:o,output:s,video:{codec:i.codec,width:i.width,height:i.height,frameRate:i.fps,bitrate:i.bitrate,fit:`contain`,allowRotationMetadata:!1},audio:{codec:i.audioCodec}});cy(c),n&&(c.onProgress=n),await c.execute();let l=s.target.buffer;if(!l)throw Error(`Transcoding completed but no output buffer was generated`);let u=ry(i.format);return{buffer:l,blob:new Blob([l],{type:u})}}function dy(e,t=1e4){return new Promise((n,r)=>{let i=document.createElement(`video`);i.preload=`metadata`,i.muted=!0;let a=setTimeout(()=>{o(),r(Error(`Preview extraction timeout`))},t),o=()=>{clearTimeout(a),URL.revokeObjectURL(i.src)};i.addEventListener(`loadedmetadata`,()=>{i.currentTime=Math.max(0,i.duration-.1)}),i.addEventListener(`seeked`,()=>{let e=document.createElement(`canvas`);e.width=i.videoWidth,e.height=i.videoHeight;let t=e.getContext(`2d`);if(!t){o(),r(Error(`Canvas context unavailable`));return}if(i.videoWidth===0||i.videoHeight===0){o(),r(Error(`Invalid video dimensions`));return}if(!(Number.isFinite(i.videoWidth)&&Number.isFinite(i.videoHeight))){o(),r(Error(`Invalid video dimensions`));return}t.drawImage(i,0,0,e.width,e.height),e.toBlob(e=>{o(),e?n(e):r(Error(`Failed to create preview blob`))},`image/jpeg`,.8)}),i.addEventListener(`error`,()=>{o(),r(Error(`Failed to load video for preview extraction`))}),i.src=URL.createObjectURL(e)})}var fy=class{constructor(e,t,n){this.pendingFile=null,this.configService=null,this.config=e,this.configService=t,this.uploadService=n}async handleFileSelection(e){let t=await Ev(e,{maxFileSize:this.config.maxFileSize===void 0?2*1024*1024*1024:this.config.maxFileSize,maxRecordingTime:this.config.maxRecordingTime,allowedFormats:[`video/mp4`,`video/quicktime`,`video/webm`]});if(!t.valid)throw Error(t.error);let n=await dy(e),r=URL.createObjectURL(n),a=await Cv(e).then(e=>({success:!0,duration:e})).catch(e=>({success:!1,error:i(e)}));if(a.success===!1)throw Error(`Failed to extract video duration: ${a.error}`);let o=a.duration;return this.pendingFile=e,{file:e,previewUrl:r,duration:o,validated:!0}}async processAndUpload(e,t){if(!this.pendingFile)throw Error(`No file selected`);let n=this.configService?await this.configService.fetchConfig():Xt,r=await this.resolveNativeCameraRouteDecision(n);if(r.route===`unsupported-with-guidance`)throw Error(r.guidance?.message??`This browser or device cannot safely process this video. Try another browser or upload from a different device.`);let i=(await uy(this.pendingFile,n,e)).blob;if(!(this.config.apiKey&&this.config.backendUrl))throw Error(`Upload requires API key and backend URL`);let a=await this.uploadService.uploadVideo(i,{apiKey:this.config.apiKey,backendUrl:this.config.backendUrl,filename:this.resolveUploadFilename(i),userMetadata:this.config.userMetadata,onProgress:t});return this.pendingFile=null,{blob:i,recordingId:a.id,uploadUrl:a.uploadUrl||``}}async resolveNativeCameraRouteDecision(e){let t=this.buildCodecProbeCandidates(e);return Gv({profile:await Lv({codecCandidates:t}),targetCodecIds:t.map(e=>e.id)})}buildCodecProbeCandidates(e){let t=e.width??1280,n=e.height??720,r=typeof e.bitrate==`number`?e.bitrate:25e5,i=e.fps??30;return this.resolveTargetCodecIds(e.codec).map(e=>({id:`${e}-${t}x${n}`,config:{codec:e,width:t,height:n,bitrate:r,framerate:i}}))}resolveTargetCodecIds(e){switch(e){case`avc`:return[`avc1.640028`,`avc1.42001f`];case`vp9`:return[`vp09.00.10.08`];case`vp8`:return[`vp8`];case`av1`:return[`av01.0.08M.08`];case`hevc`:return[`hvc1.1.6.L123.B0`];default:return[`avc1.640028`,`avc1.42001f`,`vp09.00.10.08`,`vp8`]}}resolveUploadFilename(e){let t=this.resolveUploadExtension(e.type);return`${Date.now()}.${t}`}resolveUploadExtension(e){switch(e){case`video/webm`:return`webm`;case`video/quicktime`:return`mov`;default:return`mp4`}}cancel(){this.pendingFile=null}async preloadConfig(){this.configService&&await this.configService.fetchConfig()}};let py={isLinuxPlatform:on()};Ht(`mp4`,py).preferredAudioCodec,Ht(`mov`,py).preferredAudioCodec,Ht(`mkv`,py).preferredAudioCodec,Ht(`webm`,py).preferredAudioCodec;let my=`recording.invalid-container-layout`,hy=`recording.no-video-track`,gy=`recording.no-audio-track`,_y=`moov`,vy=`trak`,yy=`stsz`,by=`soun`;function xy(e){return e>=6e3&&e<=384e3}function Sy(e){let t=Error(my);return t.code=my,t.detectedBoxTypes=e,t}function Cy(e){let t=Error(e);return t.code=e,t}function wy(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function Ty(e,t){let n=e.getUint8(t),r=e.getUint8(t+1),i=e.getUint8(t+2),a=e.getUint8(t+3);return String.fromCharCode(n,r,i,a)}function Ey(e,t){let n=e.getUint32(t,!1),r=e.getUint32(t+4,!1);return n*4294967296+r}function Dy(e){let t=new Set;for(let n of e)t.add(n);return[...t]}function Oy(e,t,n){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=[],a=t;for(;a<n;){if(!(a+8<=n))throw Sy(i.map(e=>e.type));let e=r.getUint32(a,!1),t=Ty(r,a+4),o=e,s=8;if(e===1){let e=a+8;if(!(e+8<=n))throw Sy(i.map(e=>e.type));o=Ey(r,e),s=16}if(e===0&&(o=n-a),!(o>=s))throw Sy(i.map(e=>e.type));let c=a+o;if(!(c<=n))throw Sy(i.map(e=>e.type));let l=a+s;i.push({type:t,size:o,startOffset:a,endOffset:c,payloadStartOffset:l}),a=c}return i}function ky(e,t){for(let n of e)if(n.type===t)return n;return null}function Ay(e,t,n){if(!(t+4<=n))throw Sy([]);return Ty(e,t)}function jy(e,t){let n=ky(t,`mdhd`);if(n===null||n.endOffset-n.payloadStartOffset<16||e.getUint8(n.payloadStartOffset)!==0)return 0;let r=n.payloadStartOffset+8,i=n.payloadStartOffset+12,a=e.getUint32(r,!1),o=e.getUint32(i,!1);return a===0?0:o/a}function My(e,t){let n=ky(t,`stsd`);if(n===null)return{channelCount:0,sampleRate:0};let r=n.payloadStartOffset+4+4+8;if(r+28>n.endOffset)return{channelCount:0,sampleRate:0};let i=e.getUint16(r+16,!1),a=e.getUint32(r+24,!1);return{channelCount:i,sampleRate:Math.floor(a/65536)}}function Ny(e,t,n){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=ky(Oy(e,t.payloadStartOffset,t.endOffset),`mdia`);if(i===null)return{isMatchingTrack:!1,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:0};let a=Oy(e,i.payloadStartOffset,i.endOffset),o=ky(a,`hdlr`);if(o===null||Ay(r,o.payloadStartOffset+8,o.endOffset)!==n)return{isMatchingTrack:!1,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:0};let s=jy(r,a),c=ky(a,`minf`);if(c===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let l=ky(Oy(e,c.payloadStartOffset,c.endOffset),`stbl`);if(l===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let u=Oy(e,l.payloadStartOffset,l.endOffset),d=ky(u,yy);if(d===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let f=d.payloadStartOffset+8;if(!(f+4<=d.endOffset))throw Sy([yy]);return{isMatchingTrack:!0,sampleCount:r.getUint32(f,!1),...n===by?My(r,u):{channelCount:0,sampleRate:0},durationSeconds:s}}function Py(e){let t=wy(e),n=t.byteLength,r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=[],a=0;for(;a<n;){if(!(a+8<=n))throw Sy(i.map(e=>e.type));let e=r.getUint32(a,!1),t=Ty(r,a+4),o=e,s=8;if(e===1){let e=a+8;if(!(e+8<=n))throw Sy(i.map(e=>e.type));o=Ey(r,e),s=16}if(e===0&&(o=n-a),!(o>=s))throw Sy(i.map(e=>e.type));let c=a+o;if(!(c<=n))throw Sy(i.map(e=>e.type));i.push({type:t,size:o,startOffset:a,endOffset:c}),a=c}return i}function Fy(e){let t=Py(e).filter(e=>e.type===`moof`||e.type===`mfra`).map(e=>e.type);if(t.length>0)throw Sy(Dy(t))}function Iy(e){let t=wy(e),n=ky(Oy(t,0,t.byteLength),_y);if(n===null)throw Cy(hy);let r=Oy(t,n.payloadStartOffset,n.endOffset).filter(e=>e.type===vy);if(r.length===0)throw Cy(hy);let i=!1;for(let e of r){let n=Ny(t,e,`vide`);if(n.isMatchingTrack&&(i=!0,n.sampleCount>0))return}throw Cy(i?`recording.no-video-frames`:hy)}function Ly(e){let t=wy(e),n=ky(Oy(t,0,t.byteLength),_y);if(n===null)throw Cy(gy);let r=Oy(t,n.payloadStartOffset,n.endOffset).filter(e=>e.type===vy);if(r.length===0)throw Cy(gy);let i=!1;for(let e of r){let n=Ny(t,e,by);if(n.isMatchingTrack&&(i=!0,n.sampleCount!==0)){if(n.channelCount===0)throw Cy(`recording.audio-zero-channels`);if(!xy(n.sampleRate))throw Cy(`recording.audio-invalid-sample-rate`);return}}throw Cy(i?`recording.no-audio-frames`:gy)}function Ry(){return new Blob([`"use strict";
|
|
125
|
+
`+this._getInvalidityExplanation().join(``));if(this._executed)throw Error(`Conversion cannot be executed twice.`);this._executed=!0;for(let e of this._outputTrackIds)this._synchronizer.declareTrack(e);if(this.onProgress){let e=[...new Set(this.utilizedTracks)].map(async e=>await e.isLive()?1/0:await e.getDurationFromMetadata()??await e.computeDuration()),t=Math.max(0,...await Promise.all(e));this._computeProgress=!0,this._totalDuration=Math.min(t-this._startTimestamp,this._endTimestamp-this._startTimestamp);for(let e of this._outputTrackIds)this._maxTimestamps.set(e,0);this.onProgress?.(0,0)}await this.output.start(),this._start();try{await Promise.all(this._trackPromises)}catch(e){throw this._canceled||this.cancel(),e}if(this._canceled)throw new gv;if(await this.output.finalize(),this._computeProgress){let e=Math.min(...this._maxTimestamps.values());this.onProgress?.(1,e)}}async cancel(){if(!(this.output.state===`finalizing`||this.output.state===`finalized`)){if(this._canceled){console.warn(`Conversion already canceled.`);return}this._canceled=!0,await this.output.cancel()}}async _processVideoTrack(e,t,n){let r=await e.getCodec();if(!r){this.discardedTracks.push({track:e,reason:`unknown_source_codec`,trackOptions:t});return}let i,a=await e.getRotation(),o=Bn(a+(t.rotate??0)),s=o,c=this.output.format.supportsVideoRotationMetadata&&(t.allowRotationMetadata??!0),l=await e.getSquarePixelWidth(),u=await e.getSquarePixelHeight(),[d,f]=o%180==0?[l,u]:[u,l],p=t.crop;p&&=Ad(p,d,f);let[m,h]=p?[p.width,p.height]:[d,f],g=m,_=h,v=g/_;t.width!==void 0&&t.height===void 0?(g=_i(t.width),_=_i(Math.round(g/v))):t.width===void 0&&t.height!==void 0?(_=_i(t.height),g=_i(Math.round(_*v))):t.width!==void 0&&t.height!==void 0&&(g=_i(t.width),_=_i(t.height));let y=await e.getFirstTimestamp(),b=this.output.format.getSupportedVideoCodecs(),x=!!t.forceTranscode||y<this._startTimestamp||!!t.frameRate||t.keyFrameInterval!==void 0||t.process!==void 0||t.bitrate!==void 0||!b.includes(r)||t.codec&&t.codec!==r||g!==m||_!==h||o!==0&&!c||!!p,S=t.alpha??`discard`;if(x){if(!await e.canDecode()){this.discardedTracks.push({track:e,reason:`undecodable_source_codec`,trackOptions:t});return}t.codec&&(b=b.filter(e=>e===t.codec));let r=t.bitrate??uf,d=await bf(b,{width:t.process&&t.processedWidth?t.processedWidth:g,height:t.process&&t.processedHeight?t.processedHeight:_,bitrate:r});if(!d){this.discardedTracks.push({track:e,reason:`no_encodable_target_codec`,trackOptions:t});return}let f={codec:d,bitrate:r,keyFrameInterval:t.keyFrameInterval,sizeChangeBehavior:t.fit??`passThrough`,alpha:S,hardwareAcceleration:t.hardwareAcceleration,transform:{}};D(f.transform);let v=g!==m||_!==h||o!==0&&(!c||t.process!==void 0)||!!p||l!==await e.getCodedWidth()||u!==await e.getCodedHeight();if(!v){let t=new lv({format:new U_,target:new vg}),n=new g_(f);t.addVideoTrack(n),await t.start();let r=await new Zf(e).getSample(y);if(r)try{await n.add(r),r.close(),await t.finalize()}catch(e){console.info(`Error when probing encoder support. Falling back to rerender path.`,e),v=!0,t.cancel()}else await t.cancel()}t.frameRate&&(f.transform.frameRate=t.frameRate),v&&(s=0,f.transform.width=g,f.transform.height=_,f.transform.fit=t.fit??`fill`,f.transform.rotate=Bn(o-a),f.transform.crop=p,f.transform.alpha=S);let x=new g_(f);i=x,this._trackPromises.push((async()=>{await this._started;let r=new Zf(e);for await(let e of r.samples(this._startTimestamp,this._endTimestamp)){if(this._canceled){e.close();return}let r=Math.max(e.timestamp-this._startTimestamp,0);e.setTimestamp(r),await this._registerVideoSample(t,n,x,e),e.close()}x.close(),this._synchronizer.closeTrack(n)})())}else{let t=new d_(r);i=t,this._trackPromises.push((async()=>{await this._started;let r=new Uf(e),i={decoderConfig:await e.getDecoderConfig()??void 0};for await(let e of r.packets(void 0,void 0,{verifyKeyPackets:!0})){if(this._canceled)return;if(e.timestamp>=this._endTimestamp)break;let r=e.clone({timestamp:e.timestamp-this._startTimestamp,sideData:S===`discard`?{}:e.sideData});D(r.timestamp>=0),this._reportProgress(n,r.timestamp+r.duration),await t.add(r,i),this._synchronizer.shouldWait(n,r.timestamp)&&await this._synchronizer.wait(r.timestamp)}t.close(),this._synchronizer.closeTrack(n)})())}let C=null;t.group||(C=new sv);let ee=await e.getLanguageCode();this.output.addVideoTrack(i,{frameRate:t.frameRate,languageCode:kr(ee)?ee:void 0,name:await e.getName()??void 0,disposition:await e.getDisposition(),rotation:s,group:C??t.group}),this._addedCounts.video++,this._totalTrackCount++,this.utilizedTracks.push(e),this._outputTrackIds.push(n),this._outputOwnTrackGroups.push(C)}async _registerVideoSample(e,t,n,r){if(this._canceled)return;this._reportProgress(t,r.timestamp+r.duration);let i;if(!e.process)i=[r];else{let t=e.process(r);t instanceof Promise&&(t=await t),Array.isArray(t)||(t=t===null?[]:[t]),i=t.map(e=>e instanceof Sd?e:typeof VideoFrame<`u`&&e instanceof VideoFrame?new Sd(e):new Sd(e,{timestamp:r.timestamp,duration:r.duration}))}try{for(let e of i){if(this._canceled)break;await n.add(e),this._synchronizer.shouldWait(t,e.timestamp)&&await this._synchronizer.wait(e.timestamp)}}finally{for(let e of i)e!==r&&e.close()}}async _processAudioTrack(e,t,n){let r=await e.getCodec();if(!r){this.discardedTracks.push({track:e,reason:`unknown_source_codec`,trackOptions:t});return}let i,a=await e.getNumberOfChannels(),o=await e.getSampleRate(),s=await e.getFirstTimestamp(),c=t.numberOfChannels??a,l=t.sampleRate??o,u=c!==a||l!==o||s<this._startTimestamp||s>this._startTimestamp&&!this.output.format.supportsTimestampedMediaData,d=this.output.format.getSupportedAudioCodecs();if(!t.forceTranscode&&!t.bitrate&&!u&&d.includes(r)&&(!t.codec||t.codec===r)&&!t.process&&t.sampleFormat===void 0){let t=new b_(r);i=t,this._trackPromises.push((async()=>{await this._started;let r=new Uf(e),i={decoderConfig:await e.getDecoderConfig()??void 0};for await(let e of r.packets()){if(this._canceled)return;if(e.timestamp>=this._endTimestamp)break;let r=e.clone({timestamp:e.timestamp-this._startTimestamp});D(r.timestamp>=0),this._reportProgress(n,r.timestamp+r.duration),await t.add(r,i),this._synchronizer.shouldWait(n,r.timestamp)&&await this._synchronizer.wait(r.timestamp)}t.close(),this._synchronizer.closeTrack(n)})())}else{if(!await e.canDecode()){this.discardedTracks.push({track:e,reason:`undecodable_source_codec`,trackOptions:t});return}let r=null;t.codec&&(d=d.filter(e=>e===t.codec));let a=t.bitrate??uf,o=await vf(d,{numberOfChannels:t.process&&t.processedNumberOfChannels?t.processedNumberOfChannels:c,sampleRate:t.process&&t.processedSampleRate?t.processedSampleRate:l,bitrate:a});if(!o.some(e=>Ii.includes(e))&&d.some(e=>Ii.includes(e))&&(c!==pv||l!==mv)){let e=(await vf(d,{numberOfChannels:pv,sampleRate:mv,bitrate:a})).find(e=>Ii.includes(e));e&&(u=!0,r=e,c=pv,l=mv)}else r=o[0]??null;if(r===null){this.discardedTracks.push({track:e,reason:`no_encodable_target_codec`,trackOptions:t});return}if(u)i=this._resampleAudio(e,t,n,r,c,l,a);else{let o=new S_({codec:r,bitrate:a});i=o,this._trackPromises.push((async()=>{await this._started;let r=new tp(e);for await(let e of r.samples(void 0,this._endTimestamp)){if(this._canceled){e.close();return}e.setTimestamp(e.timestamp-this._startTimestamp),await this._registerAudioSample(t,n,o,e),e.close()}o.close(),this._synchronizer.closeTrack(n)})())}}let f=null;t.group||(f=new sv);let p=await e.getLanguageCode();this.output.addAudioTrack(i,{languageCode:kr(p)?p:void 0,name:await e.getName()??void 0,disposition:await e.getDisposition(),group:f??t.group}),this._addedCounts.audio++,this._totalTrackCount++,this.utilizedTracks.push(e),this._outputTrackIds.push(n),this._outputOwnTrackGroups.push(f)}async _registerAudioSample(e,t,n,r){if(this._canceled)return;let i=r;e.sampleFormat!==void 0&&qd(i.format)!==e.sampleFormat&&(i=Yd(i,e.sampleFormat)),this._reportProgress(t,i.timestamp+i.duration);let a;if(!e.process)a=[i];else{let t=e.process(i);if(t instanceof Promise&&(t=await t),Array.isArray(t)||(t=t===null?[]:[t]),!t.every(e=>e instanceof Vd))throw TypeError(`The audio process function must return an AudioSample, null, or an array of AudioSamples.`);a=t}try{for(let e of a){if(this._canceled)break;await n.add(e),this._synchronizer.shouldWait(t,e.timestamp)&&await this._synchronizer.wait(e.timestamp)}}finally{i!==r&&i.close();for(let e of a)e!==r&&e.close()}}_resampleAudio(e,t,n,r,i,a,o){let s=new S_({codec:r,bitrate:o});return this._trackPromises.push((async()=>{await this._started;let r=new o_({targetNumberOfChannels:i,targetSampleRate:a,startTime:this._startTimestamp,endTime:this._endTimestamp,onSample:async e=>{D(e.timestamp>=this._startTimestamp),e.setTimestamp(e.timestamp-this._startTimestamp),await this._registerAudioSample(t,n,s,e),e.close()}}),o=new tp(e).samples(this._startTimestamp,this._endTimestamp);for await(let e of o){if(this._canceled){e.close();return}await r.add(e),e.close()}await r.finalize(),s.close(),this._synchronizer.closeTrack(n)})()),s}_reportProgress(e,t){if(!this._computeProgress)return;D(this._totalDuration!==null),this._maxTimestamps.set(e,Math.max(t,this._maxTimestamps.get(e)));let n=Math.min(...this._maxTimestamps.values()),r=br(n/this._totalDuration,0,1);r!==this._lastProgress&&(this._lastProgress=r,this.onProgress?.(r,n))}},gv=class extends Error{constructor(e=`Conversion has been canceled.`){super(e),this.name=`ConversionCanceledError`}},_v=1,vv=class{constructor(){this.maxTimestamps=new Map,this.resolvers=[]}declareTrack(e){this.maxTimestamps.set(e,0)}shouldWait(e,t){let n=this.maxTimestamps.get(e);return D(n!==void 0),this.maxTimestamps.set(e,Math.max(t,n)),t-this.computeMinAndMaybeResolve()>_v}wait(e){let{promise:t,resolve:n}=P();return this.resolvers.push({timestamp:e,resolve:n}),t}closeTrack(e){this.maxTimestamps.delete(e),this.computeMinAndMaybeResolve()}computeMinAndMaybeResolve(){let e=1/0;for(let[,t]of this.maxTimestamps)e=Math.min(e,t);for(let t=0;t<this.resolvers.length;t++){let n=this.resolvers[t];n.timestamp-e<_v&&(n.resolve(),this.resolvers.splice(t,1),t--)}return e}}})),bv=r({ADTS:()=>Yu,ALL_FORMATS:()=>$u,ALL_TRACK_TYPES:()=>nv,AUDIO_CODECS:()=>Li,AdtsInputFormat:()=>zu,AdtsOutputFormat:()=>Z_,AppendOnlyStreamTarget:()=>gg,AttachedFile:()=>xi,AudioBufferSink:()=>np,AudioBufferSource:()=>C_,AudioSample:()=>Vd,AudioSampleResource:()=>Bd,AudioSampleSink:()=>tp,AudioSampleSource:()=>S_,AudioSource:()=>y_,BaseMediaSampleSink:()=>Gf,BlobSource:()=>ru,BufferSource:()=>nu,BufferTarget:()=>fg,CanvasSink:()=>Qf,CanvasSource:()=>__,CmafOutputFormat:()=>W_,ConcurrentRunner:()=>vi,Conversion:()=>hv,ConversionCanceledError:()=>gv,CustomAudioDecoder:()=>Tf,CustomAudioEncoder:()=>Df,CustomPathedSource:()=>tu,CustomVideoDecoder:()=>wf,CustomVideoEncoder:()=>Ef,EncodedAudioPacketSource:()=>b_,EncodedPacket:()=>R,EncodedPacketSink:()=>Uf,EncodedVideoPacketSource:()=>d_,EventEmitter:()=>gi,FLAC:()=>Xu,FilePathSource:()=>cu,FilePathTarget:()=>_g,FlacInputFormat:()=>Ru,FlacOutputFormat:()=>Q_,HLS:()=>Qu,HLS_FORMATS:()=>ed,HlsInputFormat:()=>Vu,HlsOutputFormat:()=>ev,Input:()=>vp,InputAudioTrack:()=>sp,InputDisposedError:()=>bp,InputFormat:()=>ku,InputTrack:()=>ip,InputVideoTrack:()=>op,IsobmffInputFormat:()=>Au,IsobmffOutputFormat:()=>H_,MATROSKA:()=>Wu,MP3:()=>Ku,MP4:()=>Hu,MPEG_TS:()=>Zu,MatroskaInputFormat:()=>Nu,MediaSource:()=>c_,MediaStreamAudioTrackSource:()=>w_,MediaStreamVideoTrackSource:()=>v_,MkvOutputFormat:()=>K_,MovOutputFormat:()=>G_,Mp3InputFormat:()=>Fu,Mp3OutputFormat:()=>J_,Mp4InputFormat:()=>ju,Mp4OutputFormat:()=>U_,MpegTsInputFormat:()=>Bu,MpegTsOutputFormat:()=>$_,NON_PCM_AUDIO_CODECS:()=>Ii,NullTarget:()=>vg,OGG:()=>Ju,OggInputFormat:()=>Lu,OggOutputFormat:()=>X_,Output:()=>lv,OutputAudioTrack:()=>av,OutputFormat:()=>V_,OutputSubtitleTrack:()=>ov,OutputTrack:()=>rv,OutputTrackGroup:()=>sv,OutputVideoTrack:()=>iv,PCM_AUDIO_CODECS:()=>Fi,PathedSource:()=>$l,PathedTarget:()=>bg,QTFF:()=>Uu,QUALITY_HIGH:()=>uf,QUALITY_LOW:()=>cf,QUALITY_MEDIUM:()=>lf,QUALITY_VERY_HIGH:()=>df,QUALITY_VERY_LOW:()=>sf,Quality:()=>of,QuickTimeInputFormat:()=>Mu,RangedSource:()=>pu,RangedTarget:()=>yg,ReadableStreamSource:()=>uu,RichImageData:()=>bi,SUBTITLE_CODECS:()=>Ri,Source:()=>Zl,SourceRef:()=>Ql,StreamSource:()=>lu,StreamTarget:()=>hg,SubtitleSource:()=>M_,Target:()=>lg,TextSubtitleSource:()=>N_,UnsupportedInputFormatError:()=>yp,UrlSource:()=>su,VIDEO_CODECS:()=>L,VIDEO_SAMPLE_PIXEL_FORMATS:()=>bd,VideoSample:()=>Sd,VideoSampleColorSpace:()=>Od,VideoSampleResource:()=>yd,VideoSampleSink:()=>Zf,VideoSampleSource:()=>g_,VideoSource:()=>l_,WAVE:()=>qu,WEBM:()=>Gu,WavOutputFormat:()=>Y_,WaveInputFormat:()=>Iu,WebMInputFormat:()=>Pu,WebMOutputFormat:()=>q_,asc:()=>cp,canDecode:()=>sd,canDecodeAudio:()=>ld,canDecodeVideo:()=>cd,canEncode:()=>ff,canEncodeAudio:()=>mf,canEncodeSubtitles:()=>hf,canEncodeVideo:()=>pf,desc:()=>lp,getDecodableAudioCodecs:()=>fd,getDecodableCodecs:()=>ud,getDecodableVideoCodecs:()=>dd,getEncodableAudioCodecs:()=>vf,getEncodableCodecs:()=>gf,getEncodableSubtitleCodecs:()=>yf,getEncodableVideoCodecs:()=>_f,getFirstEncodableAudioCodec:()=>xf,getFirstEncodableSubtitleCodec:()=>Sf,getFirstEncodableVideoCodec:()=>bf,prefer:()=>up,registerDecoder:()=>Mf,registerEncoder:()=>Nf,registerVideoSampleTransformer:()=>wd}),xv,Sv=n((()=>{uv(),tv(),P_(),ma(),pd(),Cf(),xg(),F(),mu(),nd(),xp(),mp(),Lo(),Xd(),rp(),yv(),Pf(),Ei(),xv=Symbol.for(`mediabunny loaded`),globalThis[xv]&&console.error(`[WARNING]
|
|
126
|
+
Mediabunny was loaded twice. This will likely cause Mediabunny not to work correctly. Check if multiple dependencies are importing different versions of Mediabunny, or if something is being bundled incorrectly.`),globalThis[xv]=!0}));Sv();async function Cv(e){try{let t=new ru(e),n=new vp({formats:[Hu],source:t});if(typeof n.computeDuration!=`function`)throw Error(`computeDuration method is not available`);let r=await n.computeDuration();if(!r)throw Error(`Duration is missing from computeDuration`);if(r<=0)throw Error(`Invalid duration: must be greater than 0`);return r}catch{return wv(e)}}function wv(e){return new Promise((t,n)=>{let r=document.createElement(`video`),i=URL.createObjectURL(e),a=()=>{URL.revokeObjectURL(i)};r.addEventListener(`loadedmetadata`,()=>{a();let e=r.duration;if(!Number.isFinite(e)||e<=0){n(Error(`Invalid video duration`));return}t(e)}),r.addEventListener(`error`,()=>{a(),n(Error(`Failed to load video metadata`))}),r.src=i,r.load()})}let Tv=[`video/mp4`,`video/quicktime`,`video/webm`];async function Ev(e,t={}){let n=t.maxFileSize===void 0?524288e3:t.maxFileSize;if(e.size>n)return{valid:!1,error:`File too large. Maximum size is ${Math.round(n/1024/1024)}MB`};let r=t.allowedFormats===void 0?Tv:t.allowedFormats;if(!r.includes(e.type))return{valid:!1,error:`Unsupported format. Please use: ${r.join(`, `)}`};let a=await Cv(e).then(e=>({success:!0,duration:e})).catch(e=>({success:!1,error:i(e)}));if(a.success===!1)return{valid:!1,error:`Failed to read video file: ${a.error}`};let o=a.duration;return t.maxRecordingTime!==null&&t.maxRecordingTime!==void 0&&o>t.maxRecordingTime?{valid:!1,error:`Video too long. Maximum duration is ${t.maxRecordingTime} seconds`}:{valid:!0}}let Dv=`unknown`;function Ov(){if(typeof navigator>`u`)return null;let e=navigator;return{userAgent:e.userAgent,platform:e.platform,hardwareConcurrency:e.hardwareConcurrency,deviceMemory:e.deviceMemory,onLine:e.onLine,connection:e.connection}}function kv(){return globalThis.isSecureContext===!0}function Av(){return globalThis.MediaRecorder!==void 0}function jv(){return globalThis.VideoEncoder!==void 0}function Mv(){return typeof navigator>`u`?null:navigator.mediaCapabilities}function Nv(e){let t=e.toLowerCase();return t.startsWith(`avc1`)||t.startsWith(`av01`)||t.startsWith(`hvc1`)||t.startsWith(`hev1`)?`video/mp4;codecs="${e}"`:t===`vp8`||t.startsWith(`vp09`)||t.startsWith(`vp9`)?`video/webm;codecs="${e}"`:null}function Pv(e){let t=Mv();if(!t)return Promise.resolve(null);let n=Nv(e.codec);return n===null||typeof e.bitrate!=`number`||typeof e.framerate!=`number`?Promise.resolve(null):t.encodingInfo({type:`record`,video:{contentType:n,width:e.width,height:e.height,bitrate:e.bitrate,framerate:e.framerate}})}function Fv(e){return globalThis.VideoEncoder===void 0?Promise.resolve({config:e,supported:!1}):globalThis.VideoEncoder.isConfigSupported(e)}function Iv(e){return{navigatorProvider:e?.navigatorProvider??Ov(),secureContextProvider:e?.secureContextProvider??kv,mediaRecorderAvailabilityProvider:e?.mediaRecorderAvailabilityProvider??Av,videoEncoderAvailabilityProvider:e?.videoEncoderAvailabilityProvider??jv,codecSupportProbe:e?.codecSupportProbe??Fv,encodingCapabilityProbe:e?.encodingCapabilityProbe??Pv}}function Lv(e){let t=new wt(e??``).getResult(),n=t.browser.name??Dv;return{browser:{name:n,version:t.browser.version??``,normalizedName:n.toLowerCase()},os:{name:t.os.name??Dv,version:t.os.version??``}}}function Rv(e){return e instanceof Error?e.message:String(e)}async function zv(e,t,n){try{let r=await t(e.config),i=await Bv(e.config,n),a={id:e.id,config:e.config,supported:r.supported===!0};return i===void 0?a:{...a,encodingCapability:i}}catch(t){return{id:e.id,config:e.config,supported:!1,errorCode:`codec-probe-error`,errorMessage:Rv(t)}}}function Bv(e,t){return Promise.resolve().then(()=>t(e)).then(e=>{if(e!==null)return{supported:e.supported===!0,smooth:e.smooth===!0,powerEfficient:e.powerEfficient===!0}}).catch(e=>({supported:!1,smooth:!1,powerEfficient:!1,errorCode:`encoding-capability-probe-error`,errorMessage:Rv(e)}))}async function Vv(e={}){let t=Iv(e.dependencies),{browser:n,os:r}=Lv(t.navigatorProvider?.userAgent),i=await Promise.all((e.codecCandidates??[]).map(e=>zv(e,t.codecSupportProbe,t.encodingCapabilityProbe)));return{browser:n,os:r,resources:{deviceMemory:t.navigatorProvider?.deviceMemory,hardwareConcurrency:t.navigatorProvider?.hardwareConcurrency},network:{online:t.navigatorProvider?.onLine,effectiveType:t.navigatorProvider?.connection?.effectiveType},features:{isSecureContext:t.secureContextProvider(),hasMediaRecorder:t.mediaRecorderAvailabilityProvider(),hasVideoEncoder:t.videoEncoderAvailabilityProvider()},codecProbeResults:i}}function Hv(e,t){let n=e.resources.deviceMemory;return n===void 0||n>=t}function Uv(e,t){let n=e.resources.hardwareConcurrency;return n===void 0||n>=t}function Wv(e,t){let n=new Set(t);return e.codecProbeResults.find(e=>n.has(e.id)&&e.supported)}function Gv(e,t){return e.features.isSecureContext&&e.features.hasMediaRecorder&&e.features.hasVideoEncoder&&t&&e.network.online!==!1}function Kv(e,t,n,r,i,a,o){let s=[];return e.features.isSecureContext||s.push(`insecure-context`),e.features.hasVideoEncoder||s.push(`webcodecs-unavailable`),t||s.push(`target-codec-unsupported`),n||s.push(`insufficient-device-memory`),r||s.push(`insufficient-hardware-concurrency`),i||s.push(`encoding-capability-unsupported`),a||s.push(`encoding-not-smooth`),o||s.push(`encoding-not-power-efficient`),s}function qv(e){let t=[];return e.features.hasMediaRecorder||t.push(`mediarecorder-unavailable`),e.network.online===!1&&t.push(`offline`),t}function Jv(e){let t=e?.encodingCapability;return t===void 0||t.errorCode!==void 0||t.supported===!0}function Yv(e){let t=e?.encodingCapability;return t===void 0||t.errorCode!==void 0||t.supported!==!0||t.smooth===!0}function Xv(e){let t=e?.encodingCapability;return t===void 0||t.errorCode!==void 0||t.supported!==!0||t.powerEfficient===!0}function Zv(e){let t=e.resourceThresholds?.minDeviceMemory??4,n=e.resourceThresholds?.minHardwareConcurrency??5,r=Wv(e.profile,e.targetCodecIds),i=r?.id,a=i!==void 0,o=Hv(e.profile,t),s=Uv(e.profile,n),c=Jv(r),l=Yv(r),u=Xv(r),d=Kv(e.profile,a,o,s,c,l,u);return e.profile.features.isSecureContext&&e.profile.features.hasVideoEncoder&&a&&e.profile.network.online!==!1&&o&&s&&c&&l&&u?{route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`],selectedCodecId:i}:Gv(e.profile,a)?{route:`safe-capture-post-recording-transcode`,reasonCodes:[...d,`mediarecorder-supported`],selectedCodecId:i}:{route:`unsupported-with-guidance`,reasonCodes:[...d,...qv(e.profile)],guidance:{canRetry:!0,message:`Recording is not supported in this browser context. Use a secure connection, go online, and try a current Chrome or Edge browser.`}}}let Qv=[`prefer-hardware`,`no-preference`,`prefer-software`];async function $v(){let e=(await Promise.allSettled([Promise.resolve().then(()=>(Sv(),bv))]))[0];return e.status===`fulfilled`?e.value:null}let ey={loadMediabunnyModule:$v};function ty(e){let t=e?.loadMediabunnyModule,n;return n=t===void 0?ey.loadMediabunnyModule:t,{loadMediabunnyModule:n}}function ny(e,t){return t===void 0||e.includes(t)?e:[...e,t]}function ry(e,t){let n=[];e!==void 0&&t.videoCodecFallbackOrder.includes(e)&&(n=ny(n,e)),n=ny(n,t.preferredVideoCodec);for(let e of t.videoCodecFallbackOrder)n=ny(n,e);return n}function iy(e,t){let n=[];e!==void 0&&t.audioCodecFallbackOrder.includes(e)&&(n=ny(n,e)),n=ny(n,t.preferredAudioCodec);for(let e of t.audioCodecFallbackOrder)n=ny(n,e);return n}function ay(e,t,n){let r=Error(`No encodable video codec available for format: ${e}`);return r.code=`recording.video-codec-unavailable`,r.details={candidates:t,format:e,probeErrors:n},r}async function oy(e,t,n){try{return await e(t,n)?{kind:`supported`,codec:t}:{kind:`unsupported`,codec:t}}catch(e){return{kind:`error`,codec:t,error:e}}}async function sy(e){let t=await ty(e.dependencies).loadMediabunnyModule();if(t===null)return e.policy.preferredVideoCodec;let n=t.canEncodeVideo;if(typeof n!=`function`)return e.policy.preferredVideoCodec;let r=ry(e.overrideCodec,e.policy),a={};e.width!==void 0&&(a.width=e.width),e.height!==void 0&&(a.height=e.height),e.bitrate!==void 0&&(a.bitrate=e.bitrate);let o=[];for(let e of Qv){let t={...a,hardwareAcceleration:e},i=await Promise.all(r.map(e=>oy(n,e,t)));o.push(...i);for(let e of i)if(e.kind===`supported`)return e.codec}let s=o.filter(e=>e.kind===`error`).map(e=>`${e.codec}: ${i(e.error)}`);if(e.dependencies?.loadMediabunnyModule===void 0&&s.length===0&&typeof VideoEncoder>`u`)return e.policy.preferredVideoCodec;throw ay(e.format,r,s)}async function cy(e){let t=await ty(e.dependencies).loadMediabunnyModule();if(t===null)return e.policy.preferredAudioCodec;let n=t.getFirstEncodableAudioCodec;if(typeof n!=`function`)return e.policy.preferredAudioCodec;let r=iy(e.overrideCodec,e.policy),i={};e.bitrate!==void 0&&(i.bitrate=e.bitrate);let a=(await Promise.allSettled([n(r,i)]))[0];if(a.status===`rejected`)return e.policy.preferredAudioCodec;let o=a.value;if(o===null){if(e.shouldThrowIfNoCodecAvailable)throw Error(`No encodable audio codec available for format: ${e.format}`);return e.policy.preferredAudioCodec}if(r.includes(o))return o;if(e.shouldThrowIfNoCodecAvailable)throw Error(`No encodable audio codec available for format: ${e.format}`);return e.policy.preferredAudioCodec}function ly(e){switch(e){case`mp4`:return`video/mp4`;case`webm`:return`video/webm`;case`mkv`:return`video/x-matroska`;case`mov`:return`video/quicktime`;default:throw Error(`Unsupported output format: ${e}`)}}function uy(e){switch(e){case`mp4`:return`mp4`;case`webm`:return`webm`;case`mkv`:return`mkv`;case`mov`:return`mov`;default:throw Error(`Unsupported output format: ${e}`)}}Sv();function dy(e){if(typeof e==`string`)return new cu(e);if(e instanceof Blob)return new ru(e);throw Error(`Invalid input type. Expected Blob, File, or file path string.`)}function fy(e){switch(e){case`mp4`:return new U_;case`webm`:return new q_;case`mkv`:return new K_;case`mov`:return new G_;default:throw Error(`Unsupported output format: ${e}`)}}function py(e,t=!1){let n={fit:`contain`,forceTranscode:!0,allowRotationMetadata:!1};return e.width!==void 0&&(n.width=e.width),e.height!==void 0&&(n.height=e.height),e.fps!==void 0&&(n.frameRate=e.fps),e.bitrate!==void 0&&(n.bitrate=e.bitrate),e.codec!==void 0&&(n.codec=e.codec),t&&(n.bitrateMode=`variable`,n.latencyMode=`realtime`,n.hardwareAcceleration=`prefer-hardware`,n.keyFrameInterval=2),{video:n,audio:{codec:e.audioCodec,forceTranscode:!0,...t&&{bitrateMode:`variable`}}}}function my(e){if(!e.isValid){let t=e.discardedTracks.map(e=>e.reason).join(`, `);throw Error(`Conversion is invalid. Discarded tracks: ${t}`)}}async function hy(e,t={},n){let r=t.format;r===void 0&&(r=Xt.format);let i={...Xt,...t,format:r},a=dy(e),o=Ht(i.format,{isLinuxPlatform:on()});i.audioBitrate===void 0&&(i.audioBitrate=Kt(i.format)),i.audioCodec=await cy({format:i.format,overrideCodec:i.audioCodec,policy:o,bitrate:i.audioBitrate}),i.codec=await sy({format:i.format,overrideCodec:i.codec,policy:o,width:i.width,height:i.height,bitrate:i.bitrate});let s=new vp({formats:$u,source:a}),c=new lv({format:fy(i.format),target:new fg}),l=await hv.init({input:s,output:c,...py(i)});my(l),n&&(l.onProgress=n),await l.execute();let u=c.target.buffer;if(!u)throw Error(`Transcoding completed but no output buffer was generated`);let d=ly(i.format);return{buffer:u,blob:new Blob([u],{type:d})}}async function gy(e,t={},n){let r=t.format;r===void 0&&(r=Xt.format);let i={...Xt,...t,format:r},a=Ht(i.format,{isLinuxPlatform:on()});i.audioBitrate===void 0&&(i.audioBitrate=Kt(i.format)),i.audioCodec=await cy({format:i.format,overrideCodec:i.audioCodec,policy:a,bitrate:i.audioBitrate}),i.codec=await sy({format:i.format,overrideCodec:i.codec,policy:a,width:i.width,height:i.height,bitrate:i.bitrate});let o=new vp({formats:$u,source:new ru(e)}),s=new lv({format:fy(i.format),target:new fg}),c=await hv.init({input:o,output:s,video:{codec:i.codec,width:i.width,height:i.height,frameRate:i.fps,bitrate:i.bitrate,fit:`contain`,allowRotationMetadata:!1},audio:{codec:i.audioCodec}});my(c),n&&(c.onProgress=n),await c.execute();let l=s.target.buffer;if(!l)throw Error(`Transcoding completed but no output buffer was generated`);let u=ly(i.format);return{buffer:l,blob:new Blob([l],{type:u})}}function _y(e,t=1e4){return new Promise((n,r)=>{let i=document.createElement(`video`);i.preload=`metadata`,i.muted=!0;let a=setTimeout(()=>{o(),r(Error(`Preview extraction timeout`))},t),o=()=>{clearTimeout(a),URL.revokeObjectURL(i.src)};i.addEventListener(`loadedmetadata`,()=>{i.currentTime=Math.max(0,i.duration-.1)}),i.addEventListener(`seeked`,()=>{let e=document.createElement(`canvas`);e.width=i.videoWidth,e.height=i.videoHeight;let t=e.getContext(`2d`);if(!t){o(),r(Error(`Canvas context unavailable`));return}if(i.videoWidth===0||i.videoHeight===0){o(),r(Error(`Invalid video dimensions`));return}if(!(Number.isFinite(i.videoWidth)&&Number.isFinite(i.videoHeight))){o(),r(Error(`Invalid video dimensions`));return}t.drawImage(i,0,0,e.width,e.height),e.toBlob(e=>{o(),e?n(e):r(Error(`Failed to create preview blob`))},`image/jpeg`,.8)}),i.addEventListener(`error`,()=>{o(),r(Error(`Failed to load video for preview extraction`))}),i.src=URL.createObjectURL(e)})}var vy=class{constructor(e,t,n){this.pendingFile=null,this.configService=null,this.config=e,this.configService=t,this.uploadService=n}async handleFileSelection(e){let t=await Ev(e,{maxFileSize:this.config.maxFileSize===void 0?2*1024*1024*1024:this.config.maxFileSize,maxRecordingTime:this.config.maxRecordingTime,allowedFormats:[`video/mp4`,`video/quicktime`,`video/webm`]});if(!t.valid)throw Error(t.error);let n=await _y(e),r=URL.createObjectURL(n),a=await Cv(e).then(e=>({success:!0,duration:e})).catch(e=>({success:!1,error:i(e)}));if(a.success===!1)throw Error(`Failed to extract video duration: ${a.error}`);let o=a.duration;return this.pendingFile=e,{file:e,previewUrl:r,duration:o,validated:!0}}async processAndUpload(e,t){if(!this.pendingFile)throw Error(`No file selected`);let n=this.configService?await this.configService.fetchConfig():Xt,r=await this.resolveNativeCameraRouteDecision(n);if(r.route===`unsupported-with-guidance`)throw Error(r.guidance?.message??`This browser or device cannot safely process this video. Try another browser or upload from a different device.`);let i=(await gy(this.pendingFile,n,e)).blob;if(!(this.config.apiKey&&this.config.backendUrl))throw Error(`Upload requires API key and backend URL`);let a=await this.uploadService.uploadVideo(i,{apiKey:this.config.apiKey,backendUrl:this.config.backendUrl,filename:this.resolveUploadFilename(i),userMetadata:this.config.userMetadata,onProgress:t});return this.pendingFile=null,{blob:i,recordingId:a.id,uploadUrl:a.uploadUrl||``}}async resolveNativeCameraRouteDecision(e){let t=this.buildCodecProbeCandidates(e);return Zv({profile:await Vv({codecCandidates:t}),targetCodecIds:t.map(e=>e.id)})}buildCodecProbeCandidates(e){let t=e.width??1280,n=e.height??720,r=typeof e.bitrate==`number`?e.bitrate:25e5,i=e.fps??30;return this.resolveTargetCodecIds(e.codec).map(e=>({id:`${e}-${t}x${n}`,config:{codec:e,width:t,height:n,bitrate:r,framerate:i}}))}resolveTargetCodecIds(e){switch(e){case`avc`:return[`avc1.640028`,`avc1.42001f`];case`vp9`:return[`vp09.00.10.08`];case`vp8`:return[`vp8`];case`av1`:return[`av01.0.08M.08`];case`hevc`:return[`hvc1.1.6.L123.B0`];default:return[`avc1.640028`,`avc1.42001f`,`vp09.00.10.08`,`vp8`]}}resolveUploadFilename(e){let t=this.resolveUploadExtension(e.type);return`${Date.now()}.${t}`}resolveUploadExtension(e){switch(e){case`video/webm`:return`webm`;case`video/quicktime`:return`mov`;default:return`mp4`}}cancel(){this.pendingFile=null}async preloadConfig(){this.configService&&await this.configService.fetchConfig()}};let yy={isLinuxPlatform:on()};Ht(`mp4`,yy).preferredAudioCodec,Ht(`mov`,yy).preferredAudioCodec,Ht(`mkv`,yy).preferredAudioCodec,Ht(`webm`,yy).preferredAudioCodec;let by=`recording.invalid-container-layout`,xy=`recording.no-video-track`,Sy=`recording.no-audio-track`,Cy=`moov`,wy=`trak`,Ty=`stsz`,Ey=`soun`;function Dy(e){return e>=6e3&&e<=384e3}function Oy(e){let t=Error(by);return t.code=by,t.detectedBoxTypes=e,t}function ky(e){let t=Error(e);return t.code=e,t}function Ay(e){return e instanceof Uint8Array?e:new Uint8Array(e)}function jy(e,t){let n=e.getUint8(t),r=e.getUint8(t+1),i=e.getUint8(t+2),a=e.getUint8(t+3);return String.fromCharCode(n,r,i,a)}function My(e,t){let n=e.getUint32(t,!1),r=e.getUint32(t+4,!1);return n*4294967296+r}function Ny(e){let t=new Set;for(let n of e)t.add(n);return[...t]}function Py(e,t,n){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=[],a=t;for(;a<n;){if(!(a+8<=n))throw Oy(i.map(e=>e.type));let e=r.getUint32(a,!1),t=jy(r,a+4),o=e,s=8;if(e===1){let e=a+8;if(!(e+8<=n))throw Oy(i.map(e=>e.type));o=My(r,e),s=16}if(e===0&&(o=n-a),!(o>=s))throw Oy(i.map(e=>e.type));let c=a+o;if(!(c<=n))throw Oy(i.map(e=>e.type));let l=a+s;i.push({type:t,size:o,startOffset:a,endOffset:c,payloadStartOffset:l}),a=c}return i}function Fy(e,t){for(let n of e)if(n.type===t)return n;return null}function Iy(e,t,n){if(!(t+4<=n))throw Oy([]);return jy(e,t)}function Ly(e,t){let n=Fy(t,`mdhd`);if(n===null||n.endOffset-n.payloadStartOffset<16||e.getUint8(n.payloadStartOffset)!==0)return 0;let r=n.payloadStartOffset+8,i=n.payloadStartOffset+12,a=e.getUint32(r,!1),o=e.getUint32(i,!1);return a===0?0:o/a}function Ry(e,t){let n=Fy(t,`stsd`);if(n===null)return{channelCount:0,sampleRate:0};let r=n.payloadStartOffset+4+4+8;if(r+28>n.endOffset)return{channelCount:0,sampleRate:0};let i=e.getUint16(r+16,!1),a=e.getUint32(r+24,!1);return{channelCount:i,sampleRate:Math.floor(a/65536)}}function zy(e,t,n){let r=new DataView(e.buffer,e.byteOffset,e.byteLength),i=Fy(Py(e,t.payloadStartOffset,t.endOffset),`mdia`);if(i===null)return{isMatchingTrack:!1,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:0};let a=Py(e,i.payloadStartOffset,i.endOffset),o=Fy(a,`hdlr`);if(o===null||Iy(r,o.payloadStartOffset+8,o.endOffset)!==n)return{isMatchingTrack:!1,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:0};let s=Ly(r,a),c=Fy(a,`minf`);if(c===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let l=Fy(Py(e,c.payloadStartOffset,c.endOffset),`stbl`);if(l===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let u=Py(e,l.payloadStartOffset,l.endOffset),d=Fy(u,Ty);if(d===null)return{isMatchingTrack:!0,sampleCount:0,channelCount:0,sampleRate:0,durationSeconds:s};let f=d.payloadStartOffset+8;if(!(f+4<=d.endOffset))throw Oy([Ty]);return{isMatchingTrack:!0,sampleCount:r.getUint32(f,!1),...n===Ey?Ry(r,u):{channelCount:0,sampleRate:0},durationSeconds:s}}function By(e){let t=Ay(e),n=t.byteLength,r=new DataView(t.buffer,t.byteOffset,t.byteLength),i=[],a=0;for(;a<n;){if(!(a+8<=n))throw Oy(i.map(e=>e.type));let e=r.getUint32(a,!1),t=jy(r,a+4),o=e,s=8;if(e===1){let e=a+8;if(!(e+8<=n))throw Oy(i.map(e=>e.type));o=My(r,e),s=16}if(e===0&&(o=n-a),!(o>=s))throw Oy(i.map(e=>e.type));let c=a+o;if(!(c<=n))throw Oy(i.map(e=>e.type));i.push({type:t,size:o,startOffset:a,endOffset:c}),a=c}return i}function Vy(e){let t=By(e).filter(e=>e.type===`moof`||e.type===`mfra`).map(e=>e.type);if(t.length>0)throw Oy(Ny(t))}function Hy(e){let t=Ay(e),n=Fy(Py(t,0,t.byteLength),Cy);if(n===null)throw ky(xy);let r=Py(t,n.payloadStartOffset,n.endOffset).filter(e=>e.type===wy);if(r.length===0)throw ky(xy);let i=!1;for(let e of r){let n=zy(t,e,`vide`);if(n.isMatchingTrack&&(i=!0,n.sampleCount>0))return}throw ky(i?`recording.no-video-frames`:xy)}function Uy(e){let t=Ay(e),n=Fy(Py(t,0,t.byteLength),Cy);if(n===null)throw ky(Sy);let r=Py(t,n.payloadStartOffset,n.endOffset).filter(e=>e.type===wy);if(r.length===0)throw ky(Sy);let i=!1;for(let e of r){let n=zy(t,e,Ey);if(n.isMatchingTrack&&(i=!0,n.sampleCount!==0)){if(n.channelCount===0)throw ky(`recording.audio-zero-channels`);if(!Dy(n.sampleRate))throw ky(`recording.audio-invalid-sample-rate`);return}}throw ky(i?`recording.no-audio-frames`:Sy)}function Wy(){return new Blob([`"use strict";
|
|
127
127
|
var PROBE_MESSAGE_TYPE="probe";
|
|
128
128
|
var PROBE_RESULT_TYPE="probeResult";
|
|
129
129
|
self.onmessage=function(e){
|
|
@@ -137,11 +137,11 @@ hasOffscreenCanvas:typeof OffscreenCanvas!=="undefined",
|
|
|
137
137
|
hasCreateImageBitmap:typeof createImageBitmap!=="undefined",
|
|
138
138
|
hasReadableStream:typeof ReadableStream!=="undefined"
|
|
139
139
|
});
|
|
140
|
-
};`],{type:`application/javascript`})}function zy(){let e=Ry();return URL.createObjectURL(e)}function By(e){URL.revokeObjectURL(e)}let Vy=`probe`,Hy=`probeResult`,Uy=`mediaStreamTrackProcessor`,Wy=`unavailable`,Gy=`unavailable`,Ky=new Map,qy=new Map;function Jy(e,t){return typeof e==`boolean`?e:t}function Yy(e){return e?`1`:`0`}function Xy(e,t){return[`audio`,Yy(e),`watermark`,Yy(t)].join(`|`)}function Zy(){return typeof process>`u`||process.env,!0}function Qy(e){return e.probeResult.hasMediaStreamTrackProcessor?`worker-track`:e.hasMainThreadMediaStreamTrackProcessor?`main-thread-stream`:Wy}function $y(e){return e.requiresAudio?e.hasMainThreadMediaStreamTrackProcessor&&e.probeResult.hasAudioData?`main-thread-audio-stream`:e.hasAudioContext&&e.hasAudioWorklet?`audio-worklet-chunks`:Gy:`none-required`}function eb(e,t){return e.includes(t)?e:[...e,t]}function tb(e,t){let n=e;return t.hasWorker||(n=eb(n,`worker`)),t.probeResult.hasVideoFrame||(n=eb(n,`videoFrame`)),t.probeResult.hasOffscreenCanvas||(n=eb(n,`offscreenCanvas`)),t.probeResult.hasReadableStream||(n=eb(n,`readableStream`)),n}function nb(e,t){let n=e;return t.requiresWatermark&&!t.probeResult.hasCreateImageBitmap&&(n=eb(n,`createImageBitmap`)),n}function rb(e,t){let n=e;return t.videoPath===Wy&&(n=eb(n,Uy)),n}function ib(e,t){let n=e;return t.hasMainThreadMediaStreamTrackProcessor&&t.probeResult.hasAudioData?n:(t.hasMainThreadMediaStreamTrackProcessor||(n=eb(n,Uy)),t.hasMainThreadMediaStreamTrackProcessor&&!t.probeResult.hasAudioData&&(n=eb(n,`audioData`)),n)}function ab(e,t){let n=e;return t.hasAudioContext&&t.hasAudioWorklet?n:(t.hasAudioContext||(n=eb(n,`audioContext`)),t.hasAudioWorklet||(n=eb(n,`audioWorklet`)),n)}function ob(e,t){let n=e;return t.requiresAudio&&t.audioPath===Gy?(n=ib(n,t),n=ab(n,t),n):n}function sb(e){let t=[];return t=tb(t,e),t=nb(t,e),t=rb(t,e),t=ob(t,e),t}function cb(e,t){return!(e===Wy||t===Gy)}function lb(e,t){return!(!e.hasVideoFrame||!e.hasOffscreenCanvas||!e.hasReadableStream||t&&!e.hasCreateImageBitmap)}async function ub(e={},t={}){let n=Jy(e.requiresAudio,!0),r=Jy(e.requiresWatermark,!1);if(!Zy())return await db(n,r,t);let i=Xy(n,r),a=Ky.get(i);if(a)return a;let o=qy.get(i);if(o)return await o;let s=db(n,r,t).then(e=>(Ky.set(i,e),qy.delete(i),e)).catch(e=>{throw qy.delete(i),e});return qy.set(i,s),await s}async function db(e,t,n){let r=typeof Worker<`u`,i=a()!==null,o=typeof AudioWorkletNode<`u`,s=typeof MediaStreamTrackProcessor<`u`,c=await fb(r,n),l=Qy({probeResult:c,hasMainThreadMediaStreamTrackProcessor:s}),u=$y({requiresAudio:e,hasAudioContext:i,hasAudioWorklet:o,hasMainThreadMediaStreamTrackProcessor:s,probeResult:c}),d=sb({hasWorker:r,hasAudioContext:i,hasAudioWorklet:o,hasMainThreadMediaStreamTrackProcessor:s,probeResult:c,requiresAudio:e,requiresWatermark:t,videoPath:l,audioPath:u}),f=cb(l,u),p=lb(c,t);return{isSupported:r&&f&&p,missing:d,hasWorker:r,hasAudioContext:i,hasAudioWorklet:o,hasMediaStreamTrackProcessor:c.hasMediaStreamTrackProcessor,hasMainThreadMediaStreamTrackProcessor:s,hasVideoFrame:c.hasVideoFrame,hasAudioData:c.hasAudioData,hasOffscreenCanvas:c.hasOffscreenCanvas,hasCreateImageBitmap:c.hasCreateImageBitmap,hasReadableStream:c.hasReadableStream,requiresAudio:e,requiresWatermark:t,videoPath:l,audioPath:u}}async function fb(e,t){if(!e)return mb();let n=await pb().catch(()=>null);return n?await new Promise(e=>{let r=!1,i=t.probeTimeoutMilliseconds??2e3,a=t=>{r||(r=!0,n.terminate(),e(t))},o=setTimeout(()=>{a(mb())},i);n.onmessage=e=>{let t=e.data;t.type===Hy&&(clearTimeout(o),a({hasMediaStreamTrackProcessor:t.hasMediaStreamTrackProcessor===!0,hasVideoFrame:t.hasVideoFrame===!0,hasAudioData:t.hasAudioData===!0,hasOffscreenCanvas:t.hasOffscreenCanvas===!0,hasCreateImageBitmap:t.hasCreateImageBitmap===!0,hasReadableStream:t.hasReadableStream===!0}))},n.onerror=()=>{clearTimeout(o),a(mb())},Promise.resolve().then(()=>{n.postMessage({type:Vy})}).catch(()=>{clearTimeout(o),a(mb())})}):mb()}function pb(){return Promise.resolve().then(()=>{let e=zy();try{let t=new Worker(e,{type:`classic`});return By(e),t}catch(t){throw By(e),t}})}function mb(){return{hasMediaStreamTrackProcessor:!1,hasVideoFrame:!1,hasAudioData:!1,hasOffscreenCanvas:!1,hasCreateImageBitmap:!1,hasReadableStream:!1}}let hb=`recording.audio-no-chunks`,gb=`recording.audio-silent`,_b=`recording.audio-track-ended`,vb=`audio.no-track-at-start`;function yb(e,t){let n=Error(e);return n.code=e,t&&(n.details=t),n}function bb(){let e=Error(vb);return e.code=vb,e}function xb(e){if(!(e instanceof Error))return!1;let t=e;return t.code===hb||t.code===gb||t.code===_b||t.code===`recording.no-audio-track`||t.code===`recording.no-audio-frames`||t.code===`recording.audio-zero-channels`||t.code===`recording.audio-invalid-sample-rate`}function Sb(e){return e.hadTrackEndedWarning?{ok:!1,code:_b}:e.totalChunks===0?{ok:!1,code:hb}:e.nonSilentChunks===0&&(e.durationMs>0?e.mutedDurationMs/e.durationMs:0)<.9?{ok:!1,code:gb}:{ok:!0}}let Cb=`vidtreo-recorder`,wb=`pending-uploads`,Tb=`status`,Eb=`createdAt`,Db=`Failed to prepare upload data for storage. The recorded file could not be read.`,Ob=`__probe__`,kb=new ArrayBuffer(1);var Ab=class{constructor(e){if(this.db=null,e){this.databaseFactory=e;return}this.databaseFactory=indexedDB}init(){return this.db?Promise.resolve():this.openDatabase(3,!0)}openDatabase(e,t){return new Promise((n,r)=>{let i=this.createOpenRequest(e);i.onerror=()=>{let e=i.error;if(t&&e&&e.name===`VersionError`){this.openDatabase(void 0,!1).then(n).catch(r);return}if(e){r(e);return}r(Error(`Failed to open database`))},i.onsuccess=()=>{if(!i.result){r(Error(`Database result is null`));return}let e=i.result,t=this.validateRequiredSchema(e);if(t){e.close(),r(t);return}this.db=e,n()},i.onupgradeneeded=e=>{let t=e.target.result;if(!t){r(Error(`Database upgrade result is null`));return}this.initializeStoreSchema(t)}})}createOpenRequest(e){return e===void 0?this.databaseFactory.open(Cb):this.databaseFactory.open(Cb,e)}initializeStoreSchema(e){if(e.objectStoreNames.contains(wb))return;let t=e.createObjectStore(wb,{keyPath:`id`});t.createIndex(Tb,Tb,{unique:!1}),t.createIndex(Eb,Eb,{unique:!1})}validateRequiredSchema(e){if(!e.objectStoreNames.contains(wb))return Error(`Database schema is missing required object store: pending-uploads`);let t=e.transaction([wb],`readonly`).objectStore(wb);return t.indexNames.contains(Tb)?t.indexNames.contains(Eb)?null:Error(`Database schema is missing required index: createdAt`):Error(`Database schema is missing required index: status`)}isInitialized(){return this.db!==null}async probeWriteCapability(){if(!this.db)return{ok:!1,reason:`Database not initialized`};try{return await this.executeTransaction(`readwrite`,e=>{let t={id:Ob,blobData:kb,blobType:`application/octet-stream`,apiKey:``,backendUrl:``,filename:`probe`,status:`pending`,retryCount:0,createdAt:0,updatedAt:0};return new Promise((n,r)=>{let i=e.put(t);i.onsuccess=()=>{let t=e.delete(Ob);t.onsuccess=()=>n(),t.onerror=()=>{if(t.error){r(t.error);return}r(Error(`Probe delete failed`))}},i.onerror=()=>{if(i.error){r(i.error);return}r(Error(`Probe write failed`))}})}),{ok:!0}}catch(e){return{ok:!1,reason:`Storage write probe failed. Browser may be in private browsing mode or IndexedDB writes are restricted. ${e instanceof Error?e.message:String(e)}`}}}async savePendingUpload(e){let t=this.generateUploadId(),n=Date.now(),r={...e,id:t,status:`pending`,retryCount:0,createdAt:n,updatedAt:n,blobData:await this.readBlobData(e.blob),blobType:e.blob.type};return r.blob=void 0,this.executeTransaction(`readwrite`,e=>{let n=e.add(r);return new Promise((e,r)=>{n.onsuccess=()=>e(t),n.onerror=()=>{n.error?n.error.name===`QuotaExceededError`?r(Error(`Storage quota exceeded. Please free up space or delete old uploads.`)):r(n.error):r(Error(`Failed to save upload`))}})})}getPendingUploads(e){return this.executeTransaction(`readonly`,t=>{let n=e?t.index(Tb).getAll(e):t.getAll();return new Promise((e,t)=>{n.onsuccess=()=>{if(n.result===void 0){t(Error(`Failed to get uploads: result is undefined`));return}e(n.result.map(e=>this.hydrateUpload(e)))},n.onerror=()=>{n.error?t(n.error):t(Error(`Failed to get uploads`))}})})}async updateUploadStatus(e,t){let n=await this.createStoredUpdates(t);return this.executeTransaction(`readwrite`,r=>{let i=r.get(e);return new Promise((e,a)=>{i.onsuccess=()=>{let o=i.result;if(!o){a(Error(`Upload not found`));return}let s=t.updatedAt===void 0?Date.now():t.updatedAt,c={...o,...n,updatedAt:s},l=r.put(c);l.onsuccess=()=>e(),l.onerror=()=>{if(l.error){a(l.error);return}a(Error(`Failed to update upload`))}},i.onerror=()=>{i.error?a(i.error):a(Error(`Failed to get upload`))}})})}deleteUpload(e){return this.executeTransaction(`readwrite`,t=>{let n=t.delete(e);return new Promise((e,t)=>{n.onsuccess=()=>e(),n.onerror=()=>{n.error?t(n.error):t(Error(`Failed to delete upload`))}})})}async cleanupPermanentlyFailedUploads(e){let t=e===void 0?24:e;if(typeof t!=`number`||t<0)throw Error(`retentionHours must be a non-negative number`);let n=Date.now()-t*36e5,r=(await this.getPendingUploads()).filter(e=>e.status===`failed`&&e.retryCount>=10&&e.updatedAt<n);for(let e of r)await this.deleteUpload(e.id);return r.length}async getTotalStorageSize(){return(await this.getPendingUploads()).reduce((e,t)=>e+t.blob.size,0)}hydrateUpload(e){if(`blobData`in e&&e.blobData){let{blobData:t,blobType:n,...r}=e;return{...r,blob:new Blob([t],{type:n})}}return e}async createStoredUpdates(e){let t={...e};return e.blob&&(t.blobData=await this.readBlobData(e.blob),t.blobType=e.blob.type,t.blob=void 0),t}readBlobData(e){return e.arrayBuffer().catch(e=>{throw e instanceof Error?Error(`${Db} ${e.message}`):Error(Db)})}generateUploadId(){return`upload-${Date.now()}-${Math.random().toString(36).substring(2,11)}`}executeTransaction(e,t){if(!this.db)throw Error(`Database not initialized`);let n=this.db.transaction([wb],e),r=n.objectStore(wb);return new Promise((e,i)=>{let a,o=!1,s=!1;n.oncomplete=()=>{!o||s||e(a)},n.onerror=()=>{if(n.error){i(n.error);return}i(Error(`Storage transaction failed`))},n.onabort=()=>{if(n.error){i(n.error);return}i(Error(`Storage transaction aborted`))},t(r).then(e=>{a=e,o=!0},e=>{s=!0,i(e)})})}},jb=class{constructor(){this.storageService=null,this.cleanupIntervalId=null,this.writeProbeResult=null}async initialize(e){this.storageService||=new Ab,this.storageService.isInitialized()||await this.storageService.init(),this.writeProbeResult=await this.storageService.probeWriteCapability(),this.setupCleanupInterval(e)}getWriteProbeResult(){return this.writeProbeResult}setupCleanupInterval(e){this.cleanupIntervalId===null&&(this.cleanupIntervalId=window.setInterval(()=>{this.performCleanup().catch(t=>{e(i(t))})},36e5))}async performCleanup(){if(!this.storageService)throw Error(`StorageService not initialized`);await this.storageService.cleanupPermanentlyFailedUploads(24)}getStorageService(){return this.storageService}isStorageWritable(){return this.writeProbeResult?.ok===!0}destroy(){this.cleanupIntervalId!==null&&(clearInterval(this.cleanupIntervalId),this.cleanupIntervalId=null)}};function Mb(){let e=globalThis;if(e.__VIDTREO_DEBUG__===!0||e.__VIDTREO_DEV__===!0)return!0;let t=typeof process<`u`&&process?.env?`production`:void 0;return t===`development`||t===`test`||typeof localStorage<`u`&&localStorage.getItem(`VIDTREO_DEBUG`)===`true`}let Nb=Mb(),Pb={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`,gray:`\x1B[90m`};function Fb(e,t,n){if(!Nb)return``;let r=n?.prefix||`[${e.toUpperCase()}]`;return`${Pb[n?.color||Ib(e)]}${r}${Pb.reset} ${t}`}function Ib(e){switch(e){case`error`:return`red`;case`warn`:return`yellow`;case`info`:return`cyan`;case`debug`:return`gray`;default:return`white`}}function Lb(e,t,...n){if(!Nb)return;let r=Fb(e,t);console[e](r,...n)}let $={log:(e,...t)=>{Lb(`log`,e,...t)},info:(e,...t)=>{Lb(`info`,e,...t)},warn:(e,...t)=>{Lb(`warn`,e,...t)},error:(e,...t)=>{Lb(`error`,e,...t)},debug:(e,...t)=>{Lb(`debug`,e,...t)},group:(e,t=`cyan`)=>{if(!Nb)return;let n=Pb[t],r=Pb.reset;console.group(`${n}${e}${r}`)},groupEnd:()=>{Nb&&console.groupEnd()}};function Rb(e,t){if(e==null)throw Error(t);return e}function zb(e,t=`StreamProcessor`){if(!e)throw Error(`${t} is required`);return e}function Bb(){if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia){let e=typeof window<`u`&&window.isSecureContext===!0?`Camera access is not supported in this browser`:`Camera access requires HTTPS. Please use a secure connection (https://) or localhost.`;throw Error(e)}return navigator.mediaDevices}function Vb(e,t){let n={};if(t.originalCameraConstraints){let{deviceId:e,...r}=t.originalCameraConstraints;n={...n,...r}}e&&(n={...n,deviceId:{exact:e}});let r=t.getSelectedCameraDeviceId(),i=!1;return e&&(i=!0),n.deviceId&&(i=!0),!i&&r&&(n={...n,deviceId:{exact:r}}),n}function Hb(e){let t={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};return e?{...t,deviceId:{exact:e}}:t}let Ub=`live`;function Wb(e){for(let t of e)t.readyState===Ub&&t.stop()}function Gb(e){Wb(e.getTracks())}function Kb(e){Wb(e.getVideoTracks())}function qb(e){return e?e.readyState===Ub:!1}function Jb(e,t){return qb(e)&&qb(t)}function Yb(e,t,n){if(!qb(e)){Gb(n);let r=`undefined`;throw e&&(r=e.readyState),Error(`Failed to get live camera ${t} track. ReadyState: ${r}`)}}let Xb=`[SourceSwitchManager]`;var Zb=class{constructor(e){this.dependencies=e}async createCameraStreamWithOriginalAudio(e){let t=this.dependencies.getOriginalCameraStream(),n;if(t&&(n=t.getAudioTracks()[0]),this.dependencies.logger.debug(`${Xb} createCameraStreamWithOriginalAudio`,{hasOriginalCameraStream:!!t,originalCameraStreamId:t?.id,hasOriginalAudioTrack:!!n,originalAudioTrackId:n?.id,originalAudioTrackReadyState:n?.readyState,originalAudioTrackEnabled:n?.enabled,originalAudioTrackMuted:n?.muted,originalAudioTrackLabel:n?.label,isTrackLive:qb(n),cameraDeviceId:e}),!qb(n))return this.dependencies.logger.warn(`${Xb} Original audio track is not live, cannot reuse`,{originalAudioTrackId:n?.id,originalAudioTrackReadyState:n?.readyState}),null;let r=Vb(e,{originalCameraConstraints:this.dependencies.getOriginalCameraConstraints(),getSelectedCameraDeviceId:this.dependencies.getSelectedCameraDeviceId}),i=Object.keys(r).length>0,a=!0;i&&(a=r);let o={video:a,audio:!1};this.dependencies.logger.debug(`${Xb} Requesting new video stream`,{constraints:o,cameraDeviceId:e});let s=await Bb().getUserMedia(o),c=s.getVideoTracks()[0];Yb(c,`video`,s),this.dependencies.logger.debug(`${Xb} New video stream obtained`,{newStreamId:s.id,videoTrackId:c.id,videoTrackReadyState:c.readyState,newStreamAudioTracksCount:s.getAudioTracks().length});let l=[c];n&&(l=[...l,n]),this.dependencies.logger.debug(`${Xb} Creating combined stream with original audio`,{videoTrackId:c.id,audioTrackId:n?.id,audioTrackReadyState:n?.readyState,audioTrackEnabled:n?.enabled,audioTrackMuted:n?.muted,combinedTracksCount:l.length});let u=new MediaStream(l);Wb(s.getAudioTracks());let d=t?.id;return this.dependencies.setOriginalCameraStream(u),this.dependencies.logger.debug(`${Xb} Combined stream created and assigned`,{combinedStreamId:u.id,previousOriginalCameraStreamId:d,newOriginalCameraStreamId:u.id,combinedStreamVideoTracksCount:u.getVideoTracks().length,combinedStreamAudioTracksCount:u.getAudioTracks().length,combinedStreamAudioTrackId:u.getAudioTracks()[0]?.id,combinedStreamAudioTrackReadyState:u.getAudioTracks()[0]?.readyState,audioTrackStillSame:u.getAudioTracks()[0]===n}),u}async createCameraStreamWithNewAudio(e){let t=this.dependencies.getSelectedMicDeviceId(),n=Vb(e,{originalCameraConstraints:this.dependencies.getOriginalCameraConstraints(),getSelectedCameraDeviceId:this.dependencies.getSelectedCameraDeviceId}),r=Hb(t),i=Object.keys(n).length>0,a=!0;i&&(a=n);let o={video:a,audio:r},s=await Bb().getUserMedia(o),c=s.getVideoTracks()[0],l=s.getAudioTracks()[0];return Yb(c,`video`,s),Yb(l,`audio`,s),this.dependencies.setOriginalCameraStream(s),s}async createNewCameraStreamForRecording(){let e=this.dependencies.getSelectedCameraDeviceId();return await this.createCameraStreamWithOriginalAudio(e)||this.createCameraStreamWithNewAudio(e)}async getCameraStream(e){let t=this.dependencies.streamManager.isRecording(),n=this.dependencies.getSelectedCameraDeviceId(),r=this.dependencies.getSelectedMicDeviceId();if(this.dependencies.streamManager.setVideoDevice(n),this.dependencies.streamManager.setAudioDevice(r),e.canReuseOriginalStream()){let e=this.dependencies.getOriginalCameraStream();if(!e)throw Error(`Original camera stream is null`);return e}if(e.canReuseManagerStream()){let e=this.dependencies.streamManager.getStream();if(!e)throw Error(`Manager stream is null`);return e}t||this.dependencies.getOriginalCameraStream()&&this.dependencies.setOriginalCameraStream(null);let i=this.dependencies.streamManager.getStream();if(!t&&i&&i!==this.dependencies.getOriginalCameraStream()&&(Gb(i),this.dependencies.streamManager.setMediaStream(null)),t)return this.dependencies.streamManager.setVideoDevice(this.dependencies.getSelectedCameraDeviceId()),this.dependencies.streamManager.setAudioDevice(this.dependencies.getSelectedMicDeviceId()),this.createNewCameraStreamForRecording();let a=await this.dependencies.streamManager.startStream();return this.dependencies.setOriginalCameraStream(a),a}};let Qb=`screen`,$b=`No video track found in screen share stream`;async function ex(e,t,n){n.setScreenShareStream(e);let r=e.getVideoTracks()[0];if(!r)throw n.stopStreamTracks(e),Error($b);let i=n.combineScreenShareWithOriginalAudio(r),a=n.getOriginalCameraStream();t&&t!==a&&n.stopStreamVideoTracks(t);let o=e.getAudioTracks();for(let e of o)e.stop();return n.setCurrentSourceType(Qb),n.callbacks.onSourceChange&&await n.callbacks.onSourceChange(n.getCurrentSourceType()),tx(i,n),i}function tx(e,t){let n=e.getVideoTracks()[0];if(!n)throw Error($b);let r=t.getScreenShareTrackEndHandler();if(r){let e=t.streamManager.getStream();if(e){let t=e.getVideoTracks()[0];t&&t.removeEventListener(`ended`,r)}}let i=()=>{t.getCurrentSourceType()===Qb&&t.switchToCamera().catch(e=>{t.handleSwitchError(e)})};t.setScreenShareTrackEndHandler(i),n.addEventListener(`ended`,i)}function nx(e,t){let n=t.getScreenShareTrackEndHandler();if(!(n&&e))return;let r=e.getVideoTracks()[0];r&&r.removeEventListener(`ended`,n),t.setScreenShareTrackEndHandler(null)}function rx(e,t){e.onTransitionStart&&e.onTransitionStart(t)}function ix(e){e.onTransitionEnd&&e.onTransitionEnd()}function ax(e){e.onScreenSelectionStart&&e.onScreenSelectionStart()}function ox(e){e.onScreenSelectionEnd&&e.onScreenSelectionEnd()}function sx(e){ox(e),ix(e)}let cx=`Failed to get camera stream`;var lx=class{constructor(e,t={}){this.currentSourceType=`camera`,this.originalCameraStream=null,this.screenShareStream=null,this.screenShareTrackEndHandler=null,this.streamManager=e,this.callbacks=t;let n=null,r=()=>n;this.getOriginalCameraConstraints=r,this.setOriginalCameraConstraints=e=>{n=e},this.cameraStreamBuilder=new Zb({streamManager:this.streamManager,logger:{debug:(e,t)=>$.debug(e,t),warn:(e,t)=>$.warn(e,t)},getSelectedCameraDeviceId:()=>this.callbacks.getSelectedCameraDeviceId?this.callbacks.getSelectedCameraDeviceId():this.streamManager.getVideoDevice(),getSelectedMicDeviceId:()=>this.callbacks.getSelectedMicDeviceId?this.callbacks.getSelectedMicDeviceId():this.streamManager.getAudioDevice(),getOriginalCameraStream:()=>this.originalCameraStream,setOriginalCameraStream:e=>{this.originalCameraStream=e},getOriginalCameraConstraints:r})}getCurrentSourceType(){return this.currentSourceType}getOriginalCameraStream(){return this.originalCameraStream}storeOriginalCameraConstraints(e){let t=e.getVideoTracks()[0];if(!t)return;let n=t.getSettings(),r={width:n.width,height:n.height,aspectRatio:n.aspectRatio,frameRate:n.frameRate,deviceId:n.deviceId,facingMode:n.facingMode},i=this.getOriginalCameraConstraints();i&&i.width===r.width&&i.height===r.height&&i.aspectRatio===r.aspectRatio&&i.frameRate===r.frameRate&&i.deviceId===r.deviceId&&i.facingMode===r.facingMode||this.setOriginalCameraConstraints(r)}storeOriginalCameraStream(e){let t=e.getVideoTracks()[0],n=e.getAudioTracks()[0];Jb(t,n)?this.originalCameraStream=new MediaStream([t,n]):this.originalCameraStream=e}createError(e){return e instanceof Error?e:Error(i(e))}waitForTracksToEnd(e){return new Promise(t=>{setTimeout(()=>{this.screenShareStream=null,t()},e)})}combineScreenShareWithOriginalAudio(e){let t;this.originalCameraStream&&(t=this.originalCameraStream.getAudioTracks()[0]),$.debug(`[SourceSwitchManager] combineScreenShareWithOriginalAudio`,{hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,hasOriginalAudioTrack:!!t,originalAudioTrackId:t?.id,originalAudioTrackReadyState:t?.readyState,originalAudioTrackEnabled:t?.enabled,originalAudioTrackMuted:t?.muted,originalAudioTrackLabel:t?.label,isTrackLive:qb(t),screenVideoTrackId:e.id,screenVideoTrackReadyState:e.readyState});let n=[e];qb(t)&&t?(n=[...n,t],$.debug(`[SourceSwitchManager] Added original audio track to combined stream`,{audioTrackId:t.id,combinedTracksCount:n.length})):$.warn(`[SourceSwitchManager] Original audio track is not live, not adding to combined stream`,{audioTrackId:t?.id,audioTrackReadyState:t?.readyState,combinedTracksCount:n.length});let r=new MediaStream(n);return $.debug(`[SourceSwitchManager] Combined stream created`,{combinedStreamId:r.id,combinedStreamVideoTracksCount:r.getVideoTracks().length,combinedStreamAudioTracksCount:r.getAudioTracks().length,combinedStreamAudioTrackId:r.getAudioTracks()[0]?.id,combinedStreamAudioTrackReadyState:r.getAudioTracks()[0]?.readyState}),r}isPermissionDeniedError(e){let t=i(e),n=!1;t.includes(`NotAllowedError`)&&(n=!0),t.includes(`AbortError`)&&(n=!0);let r=t.toLowerCase();return r.includes(`permission denied`)&&(n=!0),r.includes(`user denied`)&&(n=!0),n}switchToScreenCapture(){let e=this.streamManager.getStream();return e&&(this.storeOriginalCameraConstraints(e),this.storeOriginalCameraStream(e)),rx(this.callbacks,`Select screen to share...`),ax(this.callbacks),Promise.resolve().then(async()=>{let t=Bb();if(typeof t.getDisplayMedia!=`function`)throw Error(`Screen sharing is not supported on this device`);return ex(await t.getDisplayMedia({video:!0,audio:!0}),e,this.getScreenShareDependencies())}).catch(e=>{if(sx(this.callbacks),this.isPermissionDeniedError(e))return null;throw e})}canReuseStream(e,t){if(!e||t&&e!==this.originalCameraStream)return!1;let n=e.getVideoTracks()[0],r=e.getAudioTracks()[0];return!(!Jb(n,r)||this.callbacks.getSelectedCameraDeviceId&&this.callbacks.getSelectedCameraDeviceId()!==n.getSettings().deviceId)}canReuseOriginalStream(){return this.canReuseStream(this.originalCameraStream,!1)}canReuseManagerStream(){let e=this.streamManager.getStream();return e&&this.originalCameraStream?this.canReuseStream(e,!0):!1}getScreenShareDependencies(){return{callbacks:this.callbacks,streamManager:this.streamManager,combineScreenShareWithOriginalAudio:e=>this.combineScreenShareWithOriginalAudio(e),stopStreamTracks:e=>Gb(e),stopStreamVideoTracks:e=>Kb(e),getCurrentSourceType:()=>this.currentSourceType,setCurrentSourceType:e=>{this.currentSourceType=e},getOriginalCameraStream:()=>this.originalCameraStream,getScreenShareStream:()=>this.screenShareStream,setScreenShareStream:e=>{this.screenShareStream=e},getScreenShareTrackEndHandler:()=>this.screenShareTrackEndHandler,setScreenShareTrackEndHandler:e=>{this.screenShareTrackEndHandler=e},switchToCamera:()=>this.switchToCamera(),handleSwitchError:e=>{this.callbacks.onError&&this.callbacks.onError(this.createError(e))}}}getCameraStream(){return this.cameraStreamBuilder.getCameraStream({canReuseOriginalStream:()=>this.canReuseOriginalStream(),canReuseManagerStream:()=>this.canReuseManagerStream()})}switchToCamera(){let e=this.streamManager.isRecording();return!e&&this.currentSourceType===`camera`?Promise.resolve():Promise.resolve().then(async()=>{rx(this.callbacks,`Switching to camera...`),await this.handleScreenShareStop();let t=await this.getCameraStream();if(!t)throw Error(cx);await this.applyCameraStream(t,e),ix(this.callbacks)}).catch(e=>{throw ix(this.callbacks),e})}stopScreenShareStreamTracks(e){let t=e.getVideoTracks(),n=e.getAudioTracks();$.debug(`[SourceSwitchManager] stopping screen share tracks`,{videoTracks:t.map(e=>({id:e.id,readyState:e.readyState,displaySurface:e.getSettings().displaySurface,constraints:e.getConstraints()})),audioTracks:n.map(e=>({id:e.id,readyState:e.readyState,constraints:e.getConstraints()}))});for(let e of t)e.stop();for(let e of n)e.stop()}stopDisplayTracks(e){if(e)for(let t of e.getVideoTracks())typeof t.getSettings().displaySurface==`string`&&qb(t)&&($.debug(`[SourceSwitchManager] stopping display track`,{id:t.id,readyState:t.readyState,constraints:t.getConstraints(),settings:t.getSettings()}),t.stop())}async handleScreenShareStop(){if(this.currentSourceType!==`screen`)return;$.debug(`[SourceSwitchManager] handleScreenShareStop invoked`,{currentSourceType:this.currentSourceType,hasScreenShareStream:!!this.screenShareStream,screenShareStreamId:this.screenShareStream?.id,hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id});let e=this.screenShareStream,t=this.streamManager.getStream();if($.debug(`[SourceSwitchManager] Current stream state before stop`,{currentStreamId:t?.id,currentStreamVideoTracksCount:t?.getVideoTracks().length,currentStreamAudioTracksCount:t?.getAudioTracks().length,currentStreamAudioTrackId:t?.getAudioTracks()[0]?.id,currentStreamAudioTrackReadyState:t?.getAudioTracks()[0]?.readyState,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState}),e){let t=e.getAudioTracks();$.debug(`[SourceSwitchManager] Screen share stream audio tracks before stop`,{screenShareStreamId:e.id,screenShareAudioTracksCount:t.length,screenShareAudioTrackIds:t.map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))}),nx(e,this.getScreenShareDependencies()),this.stopScreenShareStreamTracks(e),this.stopDisplayTracks(e),this.screenShareStream=null,await this.waitForTracksToEnd(0),$.debug(`[SourceSwitchManager] Screen share stream stopped`,{screenShareAudioTracksAfterStop:t.map(e=>({id:e.id,readyState:e.readyState}))})}if(t){let e=t.getAudioTracks();$.debug(`[SourceSwitchManager] Current stream audio tracks before video stop`,{currentStreamId:t.id,currentStreamAudioTracksCount:e.length,currentStreamAudioTrackIds:e.map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))}),Kb(t),this.stopDisplayTracks(t),$.debug(`[SourceSwitchManager] Current stream audio tracks after video stop`,{currentStreamId:t.id,currentStreamAudioTracksCount:t.getAudioTracks().length,currentStreamAudioTrackIds:t.getAudioTracks().map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))})}$.debug(`[SourceSwitchManager] Original camera stream state before source change`,{hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,originalCameraStreamAudioTracksCount:this.originalCameraStream?.getAudioTracks().length,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState,originalCameraStreamAudioTrackEnabled:this.originalCameraStream?.getAudioTracks()[0]?.enabled}),this.currentSourceType=`camera`,this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),$.debug(`[SourceSwitchManager] handleScreenShareStop completed`,{hasScreenShareStream:!!this.screenShareStream,currentSourceType:this.currentSourceType,hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,originalCameraStreamAudioTracksCount:this.originalCameraStream?.getAudioTracks().length,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState})}async applyCameraStream(e,t){this.streamManager.setMediaStream(e);let n=this.currentSourceType!==`camera`;this.currentSourceType=`camera`,n&&this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),t&&await this.streamManager.switchVideoSource(e),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(e)}async toggleSource(){if(!this.streamManager.isRecording())return;let e;e=this.currentSourceType===`camera`?this.switchToScreen():this.switchToCamera(),await e.catch(e=>{this.handleToggleError(e)})}async switchToScreen(){let e=await this.switchToScreenCapture();if(!e){ix(this.callbacks);return}rx(this.callbacks,`Switching to screen...`),await this.streamManager.switchVideoSource(e),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(e),ix(this.callbacks)}handleToggleError(e){ix(this.callbacks);let t=i(e),n=!1;t.includes(`NotAllowedError`)&&(n=!0),t.includes(`AbortError`)&&(n=!0),n&&this.currentSourceType===`screen`&&this.switchToCamera().catch(e=>{this.callbacks.onError&&this.callbacks.onError(this.createError(e))}),!n&&this.callbacks.onError&&this.callbacks.onError(this.createError(e))}async handleRecordingStop(){if(this.currentSourceType!==`screen`){this.cleanup();return}await Promise.resolve().then(async()=>{let e=this.streamManager.getStream();e&&(nx(e,this.getScreenShareDependencies()),Kb(e));let t=await this.getCameraStream();if(!t)throw Error(cx);this.streamManager.setMediaStream(t),this.currentSourceType=`camera`,this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(t)}).catch(e=>{throw this.callbacks.onError&&this.callbacks.onError(this.createError(e)),e}),this.cleanup()}cleanup(){this.screenShareStream&&=(nx(this.screenShareStream,this.getScreenShareDependencies()),this.stopScreenShareStreamTracks(this.screenShareStream),null);let e=this.streamManager.getStream();e&&nx(e,this.getScreenShareDependencies()),this.screenShareTrackEndHandler=null,this.originalCameraStream=null,this.setOriginalCameraConstraints(null)}setCallbacks(e){this.callbacks={...this.callbacks,...e}}};let ux=Object.freeze({width:{ideal:Xt.width||1920},height:{ideal:Xt.height||1080},frameRate:{ideal:Xt.fps||30}}),dx=Object.freeze({video:ux,audio:!0});Object.freeze({mimeType:`video/webm;codecs=vp9,opus`});let fx={NotReadableError:`camera.in-use`,NotFoundError:`camera.not-found`,NotAllowedError:`camera.permission-denied`,OverconstrainedError:`camera.overconstrained`,TimeoutError:`camera.timeout`},px={NotReadableError:`audio.in-use`,NotFoundError:`audio.not-found`,NotAllowedError:`audio.permission-denied`,OverconstrainedError:`audio.overconstrained`,TimeoutError:`audio.timeout`};function mx(e){return e instanceof DOMException||typeof e==`object`&&e&&`name`in e&&typeof e.name==`string`?e.name:null}function hx(e){return i(e).toLowerCase()}function gx(e,t){let n=hx(e),r=t===`camera`?`camera`:`audio`;return n.includes(`permission denied`)||n.includes(`permission dismissed`)||n.includes(`not allowed`)?`${r}.permission-denied`:n.includes(`requested device not found`)||n.includes(`device not found`)||n.includes(`no camera`)||n.includes(`no microphone`)?`${r}.not-found`:n.includes(`timeout starting`)||n.includes(`timed out`)||n.includes(`timeout`)?`${r}.timeout`:n.includes(`could not start video source`)||n.includes(`could not start audio source`)||n.includes(`device in use`)?`${r}.in-use`:null}function _x(e){let t=gx(e,`camera`);if(t!==null)return t;let n=mx(e);if(n!==null){let e=fx[n];if(e!==void 0)return e}return`camera.unknown`}function vx(e){let t=gx(e,`audio`);if(t!==null)return t;let n=mx(e);if(n!==null){let e=px[n];if(e!==void 0)return e}return`audio.unknown`}function yx(e){let t=i(e),n=Error(t);return n.name=`CameraError`,n.code=_x(e),n}function bx(e){let t=i(e),n=Error(t);return n.name=`AudioError`,n.code=vx(e),n}function xx(e){return mx(e)===`NotReadableError`}function Sx(e){return new Promise(t=>setTimeout(t,e))}var Cx=class{constructor(e={},t={}){this.mediaStream=null,this.state=`idle`,this.eventListeners=new Map,this.selectedAudioDeviceId=null,this.selectedVideoDeviceId=null,this.audioStatus=`pending`,this.audioAcquisitionPromise=null,this.pendingAudioError=null,this.acquisitionGeneration=0,this.streamConfig={...dx,...e},this.waitMilliseconds=t.waitMilliseconds??Sx,this.audioRetryDelayMilliseconds=t.audioRetryDelayMilliseconds??300}getAudioStatus(){return this.audioStatus}isAudioReady(){return this.audioStatus===`acquired`}async waitForAudio(){if(this.audioStatus!==`acquired`&&(this.audioStatus===`failed`||(this.audioAcquisitionPromise&&await this.audioAcquisitionPromise,this.getAudioStatus()===`failed`)))throw this.pendingAudioError??bx(null)}setAudioStatus(e){this.audioStatus!==e&&(this.audioStatus=e,this.emit(`audiostatuschange`,{status:e}))}emitAudioTelemetry(e){this.emit(`audiotelemetry`,{event:e})}getState(){return this.state}getStream(){return this.mediaStream}getAudioStreamForAnalysis(){return this.mediaStream&&this.mediaStream.getAudioTracks().length>0?this.mediaStream:null}isActive(){return this.state===`active`||this.state===`recording`}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set);let n=this.eventListeners.get(e);return n&&n.add(t),()=>{this.off(e,t)}}off(e,t){let n=this.eventListeners.get(e);n&&n.delete(t)}once(e,t){let n=(r=>{t(r),this.off(e,n)});return this.on(e,n)}emit(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)try{e(t)}catch{}}setState(e){if(this.state===e)return;let t=this.state;this.state=e,this.emit(`statechange`,{state:e,previousState:t})}setAudioDevice(e){this.selectedAudioDeviceId=e}setVideoDevice(e){this.selectedVideoDeviceId=e}getAudioDevice(){return this.selectedAudioDeviceId}getVideoDevice(){return this.selectedVideoDeviceId}async getAvailableDevices(){try{let e=await navigator.mediaDevices.enumerateDevices();return{audioinput:e.filter(e=>e.kind===`audioinput`),videoinput:e.filter(e=>e.kind===`videoinput`)}}catch(e){throw Error(`Failed to enumerate devices: ${i(e)}`)}}buildDeviceConstraints(e,t){return e?typeof t==`object`?{...t,deviceId:{exact:e}}:{deviceId:{exact:e}}:t}buildVideoConstraints(e){return this.buildDeviceConstraints(e,this.streamConfig.video)}buildAudioConstraints(e){return this.buildDeviceConstraints(e,this.streamConfig.audio)}async startStream(){if($.debug(`[StreamManager] startStream called`,{hasExistingStream:!!this.mediaStream,selectedVideoDeviceId:this.selectedVideoDeviceId,selectedAudioDeviceId:this.selectedAudioDeviceId}),this.mediaStream){let e=this.mediaStream.getVideoTracks()[0];if(this.selectedVideoDeviceId===null)if(e?.getSettings?.()?.deviceId)$.debug(`[StreamManager] Stopping existing stream to recreate`),this.stopStream();else return $.debug(`[StreamManager] Reusing existing stream`),this.mediaStream;if(e?.getSettings&&e.getSettings().deviceId===this.selectedVideoDeviceId)return $.debug(`[StreamManager] Existing stream matches device, reusing`),this.mediaStream;$.debug(`[StreamManager] Device changed, stopping existing stream`),this.stopStream()}this.setState(`starting`),$.debug(`[StreamManager] State set to 'starting'`);try{return this.mediaStream=await this.acquireVideoAndAudioStream(),$.info(`[StreamManager] Media stream obtained`,{streamId:this.mediaStream.id,videoTracks:this.mediaStream.getVideoTracks().length,audioTracks:this.mediaStream.getAudioTracks().length}),this.setState(`active`),$.debug(`[StreamManager] State set to 'active'`),$.debug(`[StreamManager] Emitting streamstart event`),this.emit(`streamstart`,{stream:this.mediaStream}),this.mediaStream}catch(e){if(e instanceof Error&&`code`in e&&(e.name===`CameraError`||e.name===`AudioError`))throw $.error(`[StreamManager] Failed to start stream`,e),this.setState(`error`),this.emit(`error`,{error:e}),e;let t=yx(e);throw $.error(`[StreamManager] Failed to start stream`,t),this.setState(`error`),this.emit(`error`,{error:t}),t}}async acquireVideoAndAudioStream(){let e=Bb(),t=this.buildVideoConstraints(this.selectedVideoDeviceId),n=this.buildAudioConstraints(this.selectedAudioDeviceId);this.setAudioStatus(`pending`),this.pendingAudioError=null,$.debug(`[StreamManager] Attempting combined getUserMedia`,{selectedVideoDeviceId:this.selectedVideoDeviceId,selectedAudioDeviceId:this.selectedAudioDeviceId});try{let r=await e.getUserMedia({video:t,audio:n}),i=r.getVideoTracks().length>0,a=r.getAudioTracks().length>0;if(i&&a)return $.debug(`[StreamManager] Combined getUserMedia succeeded with video + audio`),this.setAudioStatus(`acquired`),r;$.warn(`[StreamManager] Combined getUserMedia returned incomplete stream`,{videoTracks:r.getVideoTracks().length,audioTracks:r.getAudioTracks().length}),this.stopStreamTracks(r)}catch(e){let t=mx(e),n=i(e);$.warn(`[StreamManager] Combined getUserMedia failed, falling back to separate acquisition`,{error:n,errorName:t}),this.emitAudioTelemetry({name:`audio.acquisition.fallback`,properties:{reason:`combined_getUserMedia_failed`,originalError:n,originalErrorName:t,selectedAudioDeviceId:this.selectedAudioDeviceId,selectedVideoDeviceId:this.selectedVideoDeviceId}})}let r;try{r=await e.getUserMedia({video:t,audio:!1}),$.debug(`[StreamManager] Video-only stream acquired for preview`)}catch(e){throw this.setAudioStatus(`failed`),yx(e)}this.mediaStream=r,this.acquisitionGeneration++;let a=this.acquisitionGeneration;return this.audioAcquisitionPromise=this.acquireAudioInBackground(e,n,a),r}async acquireAudioInBackground(e,t,n){try{let r=await this.acquireAudioTrackWithRetry(e,t);if(!this.mediaStream||this.acquisitionGeneration!==n){$.debug(`[StreamManager] Audio acquired but stream was replaced/stopped, discarding track`,{generation:n,currentGeneration:this.acquisitionGeneration}),r.stop();return}this.mediaStream.addTrack(r),$.info(`[StreamManager] Audio track added to stream`,{audioTrackId:r.id,audioTrackLabel:r.label,totalAudioTracks:this.mediaStream.getAudioTracks().length}),this.setAudioStatus(`acquired`)}catch(e){if(this.acquisitionGeneration!==n)return;let t=e instanceof Error&&`code`in e?e:bx(e);this.pendingAudioError=t,this.setAudioStatus(`failed`),$.error(`[StreamManager] Background audio acquisition failed`,t),this.emitAudioTelemetry({name:`audio.acquisition.failed`,properties:{errorCode:t.code,errorName:t.name,maxRetries:2,retryDelayMs:this.audioRetryDelayMilliseconds,selectedAudioDeviceId:this.selectedAudioDeviceId},error:t}),this.emit(`error`,{error:t})}finally{this.audioAcquisitionPromise=null}}resolveAudioConstraintsForAttempt(e,t){if(t!==2||typeof e!=`object`)return e;let{deviceId:n,...r}=e,i=Object.keys(r).length>0?r:!0;return $.debug(`[StreamManager] Audio retry with relaxed constraints (no deviceId)`,{attempt:t}),i}async acquireAudioTrackWithRetry(e,t){let n=null;for(let r=0;r<=2;r++)try{let n=this.resolveAudioConstraintsForAttempt(t,r),i=await e.getUserMedia({video:!1,audio:n}),a=i.getAudioTracks()[0];if(!a)throw this.stopStreamTracks(i),Error(`getUserMedia returned no audio tracks`);for(let e of i.getVideoTracks())e.stop();return $.debug(`[StreamManager] Audio track acquired`,{attempt:r,trackId:a.id,trackLabel:a.label}),r>0&&this.emitAudioTelemetry({name:`audio.acquisition.recovered`,properties:{successAttempt:r,totalAttempts:r+1,audioTrackLabel:a.label,usedRelaxedConstraints:r===2}}),a}catch(e){n=e;let t=i(e),a=mx(e),o=xx(e);if($.warn(`[StreamManager] Audio acquisition failed`,{attempt:r,maxRetries:2,error:t,errorName:a,isRetriable:o}),this.emitAudioTelemetry({name:`audio.acquisition.retry`,properties:{attempt:r,maxRetries:2,errorMessage:t,errorName:a??`unknown`,isRetriable:o,usedRelaxedConstraints:r===2,willRetry:r<2&&o}}),!(r<2&&o))break;await this.waitMilliseconds(this.audioRetryDelayMilliseconds)}throw bx(n)}stopStream(){if(this.mediaStream){for(let e of this.mediaStream.getTracks())e.stop();this.mediaStream=null}this.audioStatus=`pending`,this.pendingAudioError=null,this.audioAcquisitionPromise=null,this.acquisitionGeneration++,this.state!==`idle`&&(this.setState(`idle`),this.emit(`streamstop`,void 0))}stopStreamTracks(e){for(let t of e.getTracks())t.stop()}isTrackLive(e){return e!==void 0&&e.readyState===`live`}async tryReplaceTrack(e,t,n){let r=e.replaceTrack;if(typeof r!=`function`)return!1;try{await r.call(e,t),e.stop();for(let e of n.getTracks())e!==t&&e.stop();return t.stop(),!0}catch{return!1}}recreateStreamWithNewTrack(e,t,n){for(let t of n.getTracks())t!==e&&t.stop();let r=[e];this.isTrackLive(t)&&t&&r.push(t);let i=new MediaStream(r);if(this.mediaStream)for(let e of this.mediaStream.getTracks())e!==t&&e.stop();return i}async switchDeviceTrack(e,t,n){if(!this.mediaStream)throw Error(`No active stream to switch device`);let r=t===`video`?this.mediaStream.getVideoTracks()[0]:this.mediaStream.getAudioTracks()[0],i=t===`video`?this.mediaStream.getAudioTracks()[0]:this.mediaStream.getVideoTracks()[0];if(!r){let e=t===`video`?`video`:`audio`;throw Error(`No ${e} track in current stream`)}let a={[t]:this.buildDeviceConstraints(e,n)},o=await Bb().getUserMedia(a),s=t===`video`?o.getVideoTracks()[0]:o.getAudioTracks()[0];if(!s){this.stopStreamTracks(o);let e=t===`video`?`video`:`audio`;throw Error(`Failed to get new ${e} track`)}return await this.tryReplaceTrack(r,s,o)||(r.stop(),this.mediaStream=this.recreateStreamWithNewTrack(s,i,o)),t===`video`?(this.selectedVideoDeviceId=e,this.emit(`videosourcechange`,{stream:this.mediaStream})):this.selectedAudioDeviceId=e,this.mediaStream}switchVideoDevice(e){return this.switchDeviceTrack(e,`video`,this.streamConfig.video)}switchAudioDevice(e){return this.switchDeviceTrack(e,`audio`,this.streamConfig.audio)}setMediaStream(e){this.mediaStream=e}setAudioTracksEnabled(e){if(!this.mediaStream)return;let t=this.mediaStream.getAudioTracks();for(let n of t)n.enabled=e}destroy(){this.stopStream(),this.eventListeners.clear(),this.setState(`idle`)}};let wx=`recording.stop-not-ready`,Tx=`recording.finalize-not-ready`,Ex=`recording.finalize-timeout`;function Dx(e,t,n){let r=Error(`${t} [${e}]`);return r.code=e,r.isRecoverable=!0,n!==void 0&&(r.details=n),r}function Ox(e){return!(e instanceof Error)||kx(e)?e:e.message===`Not currently recording`?Dx(wx,`Recording is not ready to stop`):e.message===`Processing not active`?Dx(Tx,`Recording is not ready to finalize`):e}function kx(e){let t=e;return t.code===wx||t.code===Tx||t.code===Ex}let Ax=[`Bytes`,`KB`,`MB`,`GB`],jx=1024;function Mx(e){if(e===0)return`0 Bytes`;let t=Math.floor(Math.log(e)/Math.log(jx));return`${Math.round(e/jx**t*100)/100} ${Ax[t]}`}function Nx(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`:`${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}let Px={getCurrentTimestamp:()=>performance.now()};var Fx=class{constructor(e){this.recordingStartTime=0,this.totalPausedTime=0,this.pauseStartTime=null,this.intervals=[],this.currentIntervalStart=null,this.isTracking=!1,this.visibilityChangeHandler=this.handleVisibilityChange.bind(this),this.blurHandler=this.handleBlur.bind(this),this.focusHandler=this.handleFocus.bind(this);let t=e?.getCurrentTimestamp;t===void 0?this.getCurrentTimestamp=Px.getCurrentTimestamp:this.getCurrentTimestamp=t}start(e){this.isTracking||(this.recordingStartTime=e,this.totalPausedTime=0,this.pauseStartTime=null,this.intervals=[],this.currentIntervalStart=null,this.isTracking=!0,typeof document<`u`&&document.addEventListener(`visibilitychange`,this.visibilityChangeHandler),typeof window<`u`&&(window.addEventListener(`blur`,this.blurHandler),window.addEventListener(`focus`,this.focusHandler)),this.checkInitialState())}pause(){!this.isTracking||this.pauseStartTime!==null||(this.pauseStartTime=this.getCurrentTimestamp(),this.endCurrentIntervalIfActive())}resume(){if(!this.isTracking||this.pauseStartTime===null)return;let e=this.getCurrentTimestamp()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}getIntervals(){return this.endCurrentIntervalIfActive(),this.intervals.map(e=>({start:this.normalizeTimestamp(e.start),end:this.normalizeTimestamp(e.end)}))}reset(){this.intervals=[],this.currentIntervalStart=null,this.totalPausedTime=0,this.pauseStartTime=null}cleanup(){this.isTracking=!1,this.endCurrentIntervalIfActive(),typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.visibilityChangeHandler),typeof window<`u`&&(window.removeEventListener(`blur`,this.blurHandler),window.removeEventListener(`focus`,this.focusHandler)),this.reset()}checkInitialState(){typeof document>`u`||document.visibilityState===`hidden`&&this.startInterval()}handleVisibilityChange(){typeof document>`u`||(document.visibilityState===`hidden`?this.startInterval():this.endCurrentIntervalIfActive())}handleBlur(){this.startInterval()}handleFocus(){this.endCurrentIntervalIfActive()}startInterval(){this.currentIntervalStart!==null||!this.isTracking||this.pauseStartTime===null&&(this.currentIntervalStart=this.getCurrentTimestamp())}endCurrentIntervalIfActive(){if(this.currentIntervalStart===null)return;let e=this.getCurrentTimestamp(),t=this.currentIntervalStart;e>t&&this.intervals.push({start:t,end:e}),this.currentIntervalStart=null}normalizeTimestamp(e){let t=(e-this.recordingStartTime-this.totalPausedTime)/1e3;return Math.max(0,t)}};let Ix=1e3,Lx=1e3,Rx={route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`]},zx={width:{ideal:854,max:854},height:{ideal:480,max:480},frameRate:{ideal:20,max:20}},Bx={width:{ideal:1280,max:1280},height:{ideal:720,max:720},frameRate:{ideal:24,max:24}};function Vx(e){let t=e.guidance?.message??`This browser or device cannot safely record video. Try a supported browser or upload an existing video file.`,n=Error(t);return n.name=`RecordingUnsupportedError`,n.code=`recording.unsupported-with-guidance`,n.isRecoverable=!0,n}let Hx={checkRecorderSupport:ub,getCurrentTimestamp:()=>performance.now()};var Ux=class{constructor(e,t){this.recordingStartTime=0,this.recordingTimer=null,this.pauseStartTime=null,this.totalPausedTime=0,this.streamProcessor=null,this.bufferSizeUpdateInterval=null,this.tabVisibilityTracker=null,this.visibilityChangeHandler=null,this.blurHandler=null,this.focusHandler=null,this.preResolvedSupportReport=null,this.activeRouteDecision=Rx,this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.streamManager=e;let n=t?.checkRecorderSupport,r;r=n===void 0?Hx.checkRecorderSupport:n;let i=t?.getCurrentTimestamp,a;a=i===void 0?Hx.getCurrentTimestamp:i,this.dependencies={checkRecorderSupport:r,getCurrentTimestamp:a}}setPreResolvedSupportReport(e){this.preResolvedSupportReport=e}isRecording(){return this.streamManager.getState()===`recording`}getStreamProcessor(){return this.streamProcessor}getAudioStreamForAnalysis(){if(this.streamProcessor){let e=this.streamProcessor.getAudioStreamForAnalysis();if(e)return e}return this.streamManager.getAudioStreamForAnalysis()}async startRecording(e,t,n,r,i){this.activeRouteDecision=i??Rx;let a=this.streamManager.getStream(),o=0;if(a!==null&&(o=a.getAudioTracks().length),$.debug(`[StreamRecordingState] startRecording called`,{hasMediaStream:!!a,isRecording:this.isRecording(),hasProcessor:!!e,audioTracks:o}),!a)throw Error(`Stream must be started before recording`);if(this.isRecording())return $.debug(`[StreamRecordingState] Already recording, returning`),Promise.resolve();if(!(a.getAudioTracks().length>0))throw $.error(`[StreamRecordingState] Cannot start recording without audio tracks`),bb();if(this.activeRouteDecision.route===`unsupported-with-guidance`)throw Vx(this.activeRouteDecision);if(this.activeRouteDecision.route===`local-webcodecs`){let e=t.watermark!==void 0,n;if(n=this.preResolvedSupportReport?.isSupported?this.preResolvedSupportReport:await this.dependencies.checkRecorderSupport({requiresAudio:!0,requiresWatermark:e}),!n.isSupported)throw Nt({missingCapabilities:n.missing,resolutionStage:`feature-preflight`})}this.streamProcessor=e,$.debug(`[StreamRecordingState] StreamProcessor assigned, setting callbacks`),e.setOnMuteStateChange(e=>{this.streamManager.emit(`audiomutetoggle`,{muted:e})}),e.setOnSourceChange(e=>{this.streamManager.emit(`videosourcechange`,{stream:e})}),this.bufferSizeUpdateInterval=window.setInterval(()=>{if(!this.streamProcessor)return;let e=this.streamProcessor.getBufferSize(),t=Mx(e);this.streamManager.emit(`recordingbufferupdate`,{size:e,formatted:t})},Ix),this.resetRecordingState();let s;n===!0&&(s={enabled:!0,text:this.resolveTabVisibilityOverlayText(r),recordingStartTime:this.recordingStartTime}),$.debug(`[StreamRecordingState] Overlay config`,{enableTabVisibilityOverlay:n,hasOverlayText:!!r,overlayText:r,overlayConfig:s}),this.activeRouteDecision.route===`safe-capture-post-recording-transcode`?(await this.startSafeCaptureRecording(a,t),$.info(`[StreamRecordingState] MediaRecorder capture started for post-recording transcode`)):($.debug(`[StreamRecordingState] Starting processing`),await e.startProcessing(a,t,s),$.info(`[StreamRecordingState] Processing started and worker ready`)),n&&($.debug(`[StreamRecordingState] Setting up tab visibility tracking`,{recordingStartTime:this.recordingStartTime}),this.tabVisibilityTracker=new Fx,this.tabVisibilityTracker.start(this.recordingStartTime),this.setupVisibilityUpdates(e)),this.streamManager.setState(`recording`),this.streamManager.emit(`recordingstart`,{recorder:null}),this.startRecordingTimer()}async stopRecording(){let e=(this.dependencies.getCurrentTimestamp()-this.recordingStartTime-this.totalPausedTime)/Lx;if($.debug(`[StreamRecordingState] stopRecording called`,{hasStreamProcessor:!!this.streamProcessor,isRecording:this.isRecording(),recordingElapsedSeconds:e}),!(this.streamProcessor&&this.isRecording()))throw Dx(wx,`Recording is not ready to stop`,{hasStreamProcessor:!!this.streamProcessor,streamState:this.streamManager.getState()});this.streamManager.setState(`stopping`),this.clearRecordingTimer(),this.clearBufferSizeInterval(),this.resetPauseState(),this.cleanupVisibilityUpdates();let t=[];this.tabVisibilityTracker?(t=this.tabVisibilityTracker.getIntervals(),$.debug(`[StreamRecordingState] Tab visibility intervals collected`,{intervalsCount:t.length,intervals:t}),this.tabVisibilityTracker.cleanup(),this.tabVisibilityTracker=null):$.debug(`[StreamRecordingState] No tab visibility tracker was active`);let n;return this.activeRouteDecision.route===`safe-capture-post-recording-transcode`?($.debug(`[StreamRecordingState] Finalizing MediaRecorder capture`),n={blob:await this.stopSafeCaptureRecording()}):($.debug(`[StreamRecordingState] Finalizing stream processor`),n=await this.streamProcessor.finalize(),$.info(`[StreamRecordingState] Stream processor finalized`,{blobSize:n.blob.size,hasBlob:!!n.blob})),this.streamManager.setState(`active`),this.streamManager.emit(`recordingstop`,{blob:n.blob,mimeType:n.blob.type||`video/mp4`}),{blob:n.blob,tabVisibilityIntervals:t,recordingStats:n.recordingStats,encoderAcceleration:n.encoderAcceleration}}pauseRecording(){this.clearRecordingTimer(),this.pauseStartTime===null&&(this.pauseStartTime=this.dependencies.getCurrentTimestamp()),this.tabVisibilityTracker&&this.tabVisibilityTracker.pause(),this.streamProcessor&&this.isRecording()&&this.streamProcessor.pause()}resumeRecording(){if(this.pauseStartTime!==null){let e=this.dependencies.getCurrentTimestamp()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}this.tabVisibilityTracker&&this.tabVisibilityTracker.resume(),this.startRecordingTimer(),this.streamProcessor&&this.isRecording()&&this.streamProcessor.resume()}toggleMute(){zb(this.streamProcessor,`StreamProcessor`).toggleMute()}muteAudio(){this.streamProcessor?(this.streamProcessor.isMutedState()||this.streamProcessor.toggleMute(),this.streamManager.setAudioTracksEnabled(!1)):this.streamManager.getStream()&&(this.streamManager.setAudioTracksEnabled(!1),this.streamManager.emit(`audiomutetoggle`,{muted:!0}))}unmuteAudio(){this.streamProcessor?(this.streamProcessor.isMutedState()&&this.streamProcessor.toggleMute(),this.streamManager.setAudioTracksEnabled(!0)):this.streamManager.getStream()&&(this.streamManager.setAudioTracksEnabled(!0),this.streamManager.emit(`audiomutetoggle`,{muted:!1}))}isMuted(){if(this.streamProcessor)return this.streamProcessor.isMutedState();let e=this.streamManager.getStream();if(e){let t=e.getAudioTracks();return t.length>0&&t.every(e=>!e.enabled)}return!1}async switchVideoSource(e){await zb(this.streamProcessor,`StreamProcessor`).switchVideoSource(e)}getCurrentVideoSource(){return Rb(zb(this.streamProcessor,`StreamProcessor`).getCurrentVideoSource(),`Current video source is not available`)}formatTimeElapsed(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}startRecordingTimer(){this.recordingTimer=window.setInterval(()=>{let e=(this.dependencies.getCurrentTimestamp()-this.recordingStartTime-this.totalPausedTime)/Lx,t=this.formatTimeElapsed(e);this.streamManager.emit(`recordingtimeupdate`,{elapsed:e,formatted:t})},Ix)}clearRecordingTimer(){this.recordingTimer!==null&&(clearInterval(this.recordingTimer),this.recordingTimer=null)}clearBufferSizeInterval(){this.bufferSizeUpdateInterval!==null&&(clearInterval(this.bufferSizeUpdateInterval),this.bufferSizeUpdateInterval=null)}resetRecordingState(){this.recordingStartTime=this.dependencies.getCurrentTimestamp(),this.totalPausedTime=0,this.pauseStartTime=null}async startSafeCaptureRecording(e,t){if(typeof MediaRecorder>`u`)throw Vx({route:`unsupported-with-guidance`,reasonCodes:[`mediarecorder-unavailable`],guidance:{canRetry:!0,message:`This browser cannot safely record on this device. Try a supported browser or upload an existing video file.`}});await this.applySafeCaptureTrackConstraints(e),this.mediaRecorderChunks=[];let n=this.resolvePreferredSafeCaptureMimeType(t),r=n===void 0?void 0:{mimeType:n},i=new MediaRecorder(e,r);this.mediaRecorder=i,this.mediaRecorderStopPromise=new Promise((e,t)=>{this.mediaRecorderStopResolve=e,this.mediaRecorderStopReject=t}),i.ondataavailable=e=>{e.data.size>0&&this.mediaRecorderChunks.push(e.data)},i.onstop=()=>{let e=i.mimeType||this.resolveSafeCaptureMimeType(),t=new Blob(this.mediaRecorderChunks,{type:e});this.mediaRecorderStopResolve?.(t)},i.onerror=()=>{this.mediaRecorderStopReject?.(Error(`Browser recording failed before upload could start`))},i.start()}async applySafeCaptureTrackConstraints(e){let t=this.resolveSafeCaptureVideoConstraints();if(t===null)return;let n=e.getVideoTracks();await Promise.all(n.map(async e=>{try{await e.applyConstraints(t)}catch(e){$.warn(`[StreamRecordingState] Could not apply safe capture video constraints`,e)}}))}resolveSafeCaptureVideoConstraints(){let e=this.activeRouteDecision.reasonCodes;return e.includes(`insufficient-device-memory`)||e.includes(`insufficient-hardware-concurrency`)?zx:e.includes(`android-post-recording-transcode`)?Bx:null}async stopSafeCaptureRecording(){let e=this.mediaRecorder,t=this.mediaRecorderStopPromise;if(!(e&&t))throw Error(`Safe capture recorder was not started`);e.state!==`inactive`&&e.stop();try{return await t}finally{this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.activeRouteDecision=Rx}}resolveSafeCaptureMimeType(){return(this.streamManager.getStream()?.getVideoTracks().length??0)>0?`video/webm`:`audio/webm`}resolvePreferredSafeCaptureMimeType(e){return(e.format===`mp4`?[`video/mp4;codecs=avc1.42E01E,mp4a.40.2`,`video/mp4;codecs=avc1.42001f,mp4a.40.2`,`video/mp4`]:[`video/webm;codecs=vp8,opus`,`video/webm;codecs=vp9,opus`,`video/webm`]).find(e=>typeof MediaRecorder.isTypeSupported==`function`?MediaRecorder.isTypeSupported(e):!1)}resetPauseState(){this.totalPausedTime=0,this.pauseStartTime=null}resolveTabVisibilityOverlayText(e){return e===void 0||e.trim().length===0?`User in another tab`:e}setupVisibilityUpdates(e){if(typeof document>`u`||typeof window>`u`){$.warn(`[StreamRecordingState] Cannot setup visibility updates - document/window not available`);return}if(this.visibilityChangeHandler=()=>{if(typeof document>`u`)return;let t=document.visibilityState===`hidden`,n=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Visibility change`,{isHidden:t,timestamp:n,visibilityState:document.visibilityState}),e.updateTabVisibility(t,n)},this.blurHandler=()=>{let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Window blur`,{timestamp:t}),e.updateTabVisibility(!0,t)},this.focusHandler=()=>{let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Window focus`,{timestamp:t}),e.updateTabVisibility(!1,t)},document.addEventListener(`visibilitychange`,this.visibilityChangeHandler),window.addEventListener(`blur`,this.blurHandler),window.addEventListener(`focus`,this.focusHandler),document.visibilityState===`hidden`){let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Initial state is hidden`,{timestamp:t}),e.updateTabVisibility(!0,t)}else $.debug(`[StreamRecordingState] Initial state is visible`)}cleanupVisibilityUpdates(){this.visibilityChangeHandler&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.visibilityChangeHandler),this.visibilityChangeHandler=null),this.blurHandler&&typeof window<`u`&&(window.removeEventListener(`blur`,this.blurHandler),this.blurHandler=null),this.focusHandler&&typeof window<`u`&&(window.removeEventListener(`focus`,this.focusHandler),this.focusHandler=null)}destroy(){this.mediaRecorder&&this.mediaRecorder.state!==`inactive`&&this.mediaRecorder.stop(),this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.activeRouteDecision=Rx,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.cleanupVisibilityUpdates(),this.tabVisibilityTracker&&=(this.tabVisibilityTracker.cleanup(),null),this.clearRecordingTimer(),this.clearBufferSizeInterval()}},Wx=class{constructor(e={}){this.streamManager=new Cx(e),this.recordingState=new Ux(this.streamManager)}getState(){return this.streamManager.getState()}getStream(){return this.streamManager.getStream()}getAudioStreamForAnalysis(){return this.recordingState.getAudioStreamForAnalysis()}isRecording(){return this.recordingState.isRecording()}isActive(){return this.streamManager.isActive()}on(e,t){return this.streamManager.on(e,t)}off(e,t){this.streamManager.off(e,t)}once(e,t){return this.streamManager.once(e,t)}setAudioDevice(e){this.streamManager.setAudioDevice(e)}setVideoDevice(e){this.streamManager.setVideoDevice(e)}getAudioDevice(){return this.streamManager.getAudioDevice()}getVideoDevice(){return this.streamManager.getVideoDevice()}async getAvailableDevices(){return await this.streamManager.getAvailableDevices()}async startStream(){return await this.streamManager.startStream()}stopStream(){this.streamManager.stopStream()}switchVideoDevice(e){return this.streamManager.switchVideoDevice(e)}switchAudioDevice(e){return this.streamManager.switchAudioDevice(e)}async startRecording(e,t,n,r,i){return await this.recordingState.startRecording(e,t,n,r,i)}async stopRecording(){return await this.recordingState.stopRecording()}pauseRecording(){this.recordingState.pauseRecording()}resumeRecording(){this.recordingState.resumeRecording()}toggleMute(){this.recordingState.toggleMute()}muteAudio(){this.recordingState.muteAudio()}unmuteAudio(){this.recordingState.unmuteAudio()}isMuted(){return this.recordingState.isMuted()}async switchVideoSource(e){return await this.recordingState.switchVideoSource(e)}setMediaStream(e){this.streamManager.setMediaStream(e)}getCurrentVideoSource(){return this.recordingState.getCurrentVideoSource()}getAudioStatus(){return this.streamManager.getAudioStatus()}isAudioReady(){return this.streamManager.isAudioReady()}async waitForAudio(){return await this.streamManager.waitForAudio()}setPreResolvedSupportReport(e){this.recordingState.setPreResolvedSupportReport(e)}destroy(){this.recordingState.destroy(),this.streamManager.destroy()}};let Gx=new Set([`recording.audio-no-chunks`,`recording.audio-silent`,`recording.audio-track-ended`,`recording.no-audio-track`,`recording.no-audio-frames`,`recording.audio-zero-channels`,`recording.audio-invalid-sample-rate`]),Kx=new Set([`recording.codec-unsupported`,`recording.video-codec-unavailable`]),qx=new Set([`recording.post-recording-transcode-fallback`,`transcode.post-recording-fallback`,`route.post-recording-transcode-fallback`]),Jx=new Set([`recording.no-video-frames`,`recording.frame-loss`,`recording.excessive-frame-errors`,`video.first-frame-timeout`]),Yx=new Set([`recording.finalize-timeout`,`recording.finalize-timeout-low-resource`,`stop.pending-writes-timeout`]),Xx=new Set([`recording.not-started`,`recording.state-race`,`recording.not-started-state-race`]),Zx=new Set([`recording.unsupported-with-guidance`,`recording.unsupported-device`]);function Qx(e){return e.startsWith(`recording.`)?Gx.has(e):!1}function $x(e){return e==null?null:i(e)}function eS(e){if(!(e&&typeof e==`object`&&`code`in e))return null;let t=e.code;return typeof t!=`string`||t.length===0?null:t}function tS(e){return e?Kx.has(e)?`recording.codec-unsupported`:qx.has(e)?`recording.post-recording-transcode-fallback`:Jx.has(e)?`recording.no-video-frames`:Yx.has(e)?`recording.finalize-timeout-low-resource`:Xx.has(e)?`recording.not-started-state-race`:Zx.has(e)?`recording.unsupported-device`:null:null}function nS(e,t){return t.some(t=>e.includes(t))}function rS(e){if(!e)return null;let t=e.toLowerCase();return nS(t,[`videoencoder.isconfigsupported`,`unknown codec`,`unsupported codec`,`no encodable video codec`,`video codec unavailable`])?`recording.codec-unsupported`:nS(t,[`input track cannot be ended`,`mediastreamtrackprocessor`,`video track ended`])?`recording.track-ended`:nS(t,[`no video frames`,`zero video frames`,`video.first-frame-timeout`,`failed to yield first frame`,`frame-loss`,`excessive frame errors`])?`recording.no-video-frames`:nS(t,[`finalize timeout`,`stop.pending-writes-timeout`])||t.includes(`pending writes`)&&t.includes(`timeout`)?`recording.finalize-timeout-low-resource`:nS(t,[`cannot finalize before starting`,`processing not active`,`worker not initialized`])?`recording.not-started-state-race`:nS(t,[`recording.unsupported-with-guidance`,`cannot safely record`,`recording is not supported in this browser context`])?`recording.unsupported-device`:null}function iS(e){return tS(e.errorCode??eS(e.error))||rS(e.errorMessage??$x(e.error))}let aS=Object.freeze({visible:!1,variant:`generic`,canRetry:!1,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1});function oS(e){let{errorCode:t,hasAudioFailed:n,error:r}=e,i=iS({errorCode:t,error:r});if(t===`browser.unsupported`)return{visible:!0,variant:`browser`,canRetry:!1,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!0,isPermissionDenied:!1};if(t&&Qx(t))return{visible:!0,variant:`audio`,canRetry:!0,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:!1};if(i)return{visible:!0,variant:`generic`,canRetry:!0,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1,actionableCode:i,isRecordingPipelineError:!0};if(t?.startsWith(`camera.`)){let e=t===`camera.permission-denied`;return{visible:!0,variant:`camera`,canRetry:!e,isCameraError:!0,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:e}}if(n)return{visible:!0,variant:`audio`,canRetry:!0,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:!1};if(t?.startsWith(`audio.`)){let e=t===`audio.permission-denied`;return{visible:!0,variant:`audio`,canRetry:!e,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:e}}return r?{visible:!0,variant:`generic`,canRetry:!0,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1}:aS}let sS=`VIDTREO_INSTALLATION_ID`,cS=`unknown`,lS=/\[([a-z]+(?:[.-][a-z0-9]+)+)\]/i,uS=/\b([a-z]+(?:[.-][a-z0-9]+)+)\b/i;function dS(e){let t=e.storageProvider,n=t?.getItem(sS);if(n)return $.debug(`Using existing installation ID from storage`,{installationId:n}),n;let r=fS(e);return t?.setItem(sS,r),$.debug(`Created new installation ID`,{installationId:r}),r}function fS(e){let t=e.cryptoProvider;if(t?.getRandomValues){let e=new Uint8Array(16);return t.getRandomValues(e),Array.from(e).map(e=>e.toString(16).padStart(2,`0`)).join(``)}let n=e.nowProvider().toString(16),r=e.randomProvider();return`${n}-${Math.floor(r*1e9).toString(16)}`}let pS=[`sdk.init.started`,`sdk.init.succeeded`,`sdk.init.failed`],mS=[`stream.error`],hS={"sdk.init.started":`lifecycle`,"sdk.init.succeeded":`lifecycle`,"sdk.init.failed":`error`,"preview.start.succeeded":`interaction`,"preview.start.failed":`error`,"recording.start.requested":`interaction`,"recording.start.succeeded":`interaction`,"recording.start.failed":`error`,"recording.stop.requested":`interaction`,"recording.stop.succeeded":`interaction`,"recording.stop.failed":`error`,"recording.route.selected":`lifecycle`,"upload.started":`performance`,"upload.succeeded":`performance`,"upload.failed":`error`,"upload.route.selected":`lifecycle`,"transcode.route.selected":`lifecycle`,"source.switch.requested":`interaction`,"source.switch.succeeded":`interaction`,"source.switch.failed":`error`,"stream.error":`error`,"audio.acquisition.fallback":`lifecycle`,"audio.acquisition.retry":`lifecycle`,"audio.acquisition.recovered":`lifecycle`,"audio.acquisition.failed":`error`,"audio.warning":`error`,"recording.audio-missing":`error`,"storage.init.failed":`error`,"storage.write.probe.failed":`error`};var gS=class{constructor(e,t){this.pendingEvents=[],this.flushTimeoutId=null,this.throttledEventTimestamps=new Map,this.retryCountMap=new Map,this.oneTimeEventCache=new Map,this.config=e,this.dependencies=t,this.installationId=dS(this.dependencies),$.debug(`TelemetryClient initialized`,{installationId:this.installationId,backendUrl:e.backendUrl})}triggerTelemetryEvent(e){try{let t=this.dependencies.nowProvider();if(this.shouldSkipEvent(e.name,t))return;let n=hS[e.name],r=this.buildError(e.error),i=this.buildFingerprint(),a=this.buildContext(),o=this.mergeProperties(this.buildBaseProperties(i),e),s={event:e.name,category:n,timestamp:t,installationId:this.installationId,fingerprint:i,sdkVersion:`1.6.2`,context:a,properties:o,error:r};this.markEventTracking(e.name,t),this.enqueueEvent(s)}catch(t){$.error(`Telemetry event failed`,{eventName:e.name,error:i(t)})}}enqueueEvent(e){try{if(this.pendingEvents=[...this.pendingEvents,e],this.pendingEvents.length>=10){this.flushQueue();return}this.scheduleFlush()}catch(e){$.error(`Failed to enqueue telemetry event`,{error:i(e)})}}scheduleFlush(){this.flushTimeoutId||=this.dependencies.setTimeoutFunction(()=>{this.flushQueue()},1e3)}flushQueue(){try{if(this.pendingEvents.length===0){this.clearFlushTimer();return}let e=this.pendingEvents;this.pendingEvents=[],this.clearFlushTimer();let t=this.buildRequestPayload(e);$.debug(`Telemetry batch flush`,{eventsCount:t.events.length}),this.sendPayload(t).then(()=>{this.clearRetryMetadata(e)}).catch(()=>{this.requeueFailedEvents(e)})}catch(e){$.error(`Failed to flush telemetry queue`,{error:i(e)})}}clearFlushTimer(){this.flushTimeoutId&&=(this.dependencies.clearTimeoutFunction(this.flushTimeoutId),null)}buildRequestPayload(e){return{events:[...e]}}shouldSkipEvent(e,t){if(this.isOneTimeEvent(e)){let t=this.getOneTimeCacheKey(e);if(this.oneTimeEventCache.get(t))return $.debug(`Telemetry event skipped (dedupe)`,{event:e}),!0}if(this.isThrottledEvent(e)){let n=this.throttledEventTimestamps.get(e);if(n!==void 0&&t-n<5e3)return $.debug(`Telemetry event skipped (throttle)`,{event:e,lastSent:n}),!0}return!1}markEventTracking(e,t){if(this.isOneTimeEvent(e)){let t=this.getOneTimeCacheKey(e);this.oneTimeEventCache.set(t,!0)}this.isThrottledEvent(e)&&(this.throttledEventTimestamps=this.updateNumberMap(this.throttledEventTimestamps,e,t))}updateNumberMap(e,t,n){let r=new Map(e);return r.set(t,n),r}getOneTimeCacheKey(e){return`${this.installationId}:${e}`}isOneTimeEvent(e){return pS.includes(e)}isThrottledEvent(e){return mS.includes(e)}buildBaseProperties(e){let t={},n=e.userAgent,r=this.getBrowserName(n);return r&&(t={...t,browserName:r}),t}mergeProperties(e,t){let n=this.sanitizeEventProperties(t.properties),r=this.buildErrorProperties(t.error);if(Object.keys(e).length===0&&Object.keys(r).length===0&&!n)return;let i={...e,...r,...n};if(Object.keys(i).length>0)return i}sanitizeEventProperties(e){if(!e)return;let t=this.sanitizeRouteDecision(e.routeDecision);return t===void 0?e:{...e,routeDecision:t}}sanitizeRouteDecision(e){if(!(e&&typeof e==`object`))return;let t=e,n={};typeof t.selectedRoute==`string`&&(n={...n,selectedRoute:t.selectedRoute}),Array.isArray(t.reasonCodes)&&(n={...n,reasonCodes:t.reasonCodes.filter(e=>typeof e==`string`)});let r=this.sanitizeCapabilitySummary(t.capabilitySummary);if(r!==void 0&&(n={...n,capabilitySummary:r}),this.isRouteSourceType(t.sourceType)&&(n={...n,sourceType:t.sourceType}),typeof t.clientTranscodeDeferred==`boolean`&&(n={...n,clientTranscodeDeferred:t.clientTranscodeDeferred}),Object.keys(n).length!==0)return n}sanitizeCapabilitySummary(e){if(!(e&&typeof e==`object`))return;let t={};for(let[n,r]of Object.entries(e))this.isSafeCapabilityValue(r)&&(t={...t,[n]:r});if(Object.keys(t).length!==0)return t}isSafeCapabilityValue(e){return e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`?!0:Array.isArray(e)&&e.every(e=>typeof e==`string`)}isRouteSourceType(e){return e===`live-recorder`||e===`native-camera`||e===`file-upload`}buildErrorProperties(e){if(!e)return{};let t={},n=eS(e),r=i(e),a=n??this.extractNormalizedErrorCode(r),o=iS({errorCode:a,error:e,errorMessage:r});return a&&(t={...t,errorCode:a}),o&&(t={...t,rawErrorClassification:o,recordingPipelineErrorCode:o}),t}buildFingerprint(){let e=this.dependencies.navigatorProvider;if(!e)return{};let t={userAgent:e.userAgent,language:e.language,platform:e.platform};e.hardwareConcurrency&&(t={...t,hardwareConcurrency:e.hardwareConcurrency});let n=this.getDeviceMemory(e);return n!==null&&(t={...t,deviceMemory:n}),t}buildContext(){let e=this.config.pageUrl,t=this.config.referrerUrl;if(!e){let t=this.dependencies.locationProvider;t&&(e=t.href)}if(!t){let e=this.dependencies.documentProvider;if(e){let n=e.referrer;n&&(t=n)}}return{sessionId:this.config.sessionId,userId:this.config.userId,environmentId:this.config.environmentId,appVersion:this.config.appVersion,release:this.config.release,pageUrl:e,referrerUrl:t,sdkLocation:this.config.sdkLocation,clientLocation:this.config.clientLocation}}buildError(e){if(!e)return;let t=i(e),n={message:t},r=eS(e),a=r??this.extractNormalizedErrorCode(t);return a&&(n.normalizedCode=a),r?n.code=r:a&&(n.code=a),e instanceof Error&&(!n.code&&e.name&&(n.code=e.name),e.stack&&(n.stack=e.stack)),n}extractNormalizedErrorCode(e){let t=e.match(lS);if(t?.[1])return t[1];let n=e.match(uS);return n?.[1]?n[1]:null}getBrowserName(e){return e?e.includes(`Edg`)?`edge`:e.includes(`Chrome`)?`chrome`:e.includes(`Firefox`)?`firefox`:e.includes(`Safari`)?`safari`:cS:cS}getDeviceMemory(e){let t=e;return t.deviceMemory?t.deviceMemory:null}async sendPayload(e){let t=this.buildTelemetryEndpoint(),n={method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify(e)};$.debug(`Sending telemetry to endpoint`,{endpoint:t,payloadSize:JSON.stringify(e).length,hasApiKey:!!this.config.apiKey});let r=await this.dependencies.fetchFunction(t,n).catch(e=>{throw $.error(`Failed to send telemetry`,{endpoint:t,error:i(e)}),e});if(r&&!r.ok)throw $.error(`Telemetry endpoint returned error`,{status:r.status}),Error(`Telemetry HTTP ${r.status}`)}requeueFailedEvents(e){let t=e.filter(e=>(this.retryCountMap.get(e)??0)<3);for(let e of t){let t=this.retryCountMap.get(e)??0;this.retryCountMap.set(e,t+1)}let n=e.length-t.length;if(n>0){let r=e.filter(e=>!t.includes(e));this.clearRetryMetadata(r),$.warn(`Dropped ${n} telemetry events after max retries`)}if(t.length===0)return;let r=this.pendingEvents.length,i=Math.max(0,100-r);this.pendingEvents=[...t.slice(0,i),...this.pendingEvents],this.scheduleFlush()}clearRetryMetadata(e){for(let t of e)this.retryCountMap.delete(t)}buildTelemetryEndpoint(){return this.config.endpoint?this.config.endpoint:`${this.config.backendUrl}/api/v1/telemetry`}};function _S(){let e=typeof window<`u`,t=typeof document<`u`,n=fetch,r=null,i=null,a=null,o=null,s=null,c=setTimeout,l=clearTimeout;return e&&(n=window.fetch.bind(window),r=window.crypto,i=window.localStorage,a=window.navigator,o=window.location,c=window.setTimeout.bind(window),l=window.clearTimeout.bind(window)),t&&(s=document),{fetchFunction:n,cryptoProvider:r,storageProvider:i,navigatorProvider:a,locationProvider:o,documentProvider:s,nowProvider:()=>Date.now(),randomProvider:()=>Math.random(),setTimeoutFunction:c,clearTimeoutFunction:l}}function vS(e,t,n){return new gS({apiKey:e,backendUrl:t,endpoint:n?.endpoint,sessionId:n?.sessionId,userId:n?.userId,environmentId:n?.environmentId,appVersion:n?.appVersion,release:n?.release,pageUrl:n?.pageUrl,referrerUrl:n?.referrerUrl,sdkLocation:n?.sdkLocation,clientLocation:n?.clientLocation},_S())}var yS=class{constructor(e,t){this.isProcessing=!1,this.hasRecoveredStaleUploads=!1,this.retryTimeoutId=null,this.callbacks={},this.storageService=e,this.uploadService=t,this.networkOnlineHandler=()=>{this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`network-recovery`,Error(t))})},window.addEventListener(`online`,this.networkOnlineHandler),this.processingIntervalId=window.setInterval(()=>{this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`processing-loop`,Error(t))})},5e3)}destroy(){this.clearTimer(this.processingIntervalId,clearInterval),this.clearTimer(this.retryTimeoutId,clearTimeout),window.removeEventListener(`online`,this.networkOnlineHandler)}setCallbacks(e){this.callbacks=e}async queueUpload(e){let t=await this.storageService.savePendingUpload(e);return this.processQueue().catch(e=>{let n=i(e);this.callbacks.onUploadError?.(t,Error(n))}),t}async processQueue(){if(!this.isProcessing){this.isProcessing=!0;try{if(!this.storageService.isInitialized())throw Error(`Database not initialized`);if(!this.hasRecoveredStaleUploads){let e=await this.storageService.getPendingUploads(`uploading`);await Promise.all(e.map(e=>this.storageService.updateUploadStatus(e.id,{status:`pending`}))),this.hasRecoveredStaleUploads=!0}let e=await this.storageService.getPendingUploads(`pending`);if(e.length>0){let t=this.getOldestUpload(e);await this.processUpload(t),this.isProcessing=!1;return}let t=(await this.storageService.getPendingUploads(`failed`)).filter(e=>e.retryCount<10);if(t.length>0){let e=this.getOldestFailedUpload(t),n=this.calculateRetryDelay(e.retryCount),r=Date.now()-e.updatedAt;if(r>=n)await this.storageService.updateUploadStatus(e.id,{status:`pending`,retryCount:e.retryCount}),await this.processUpload(e);else{let e=n-r;this.scheduleRetry(e)}}this.isProcessing=!1}catch(e){throw this.isProcessing=!1,Error(`Error processing upload queue: ${i(e)}`)}}}getPendingUploads(){return this.storageService.getPendingUploads()}async getStats(){let e=await this.storageService.getPendingUploads(),t={pending:0,uploading:0,failed:0,total:e.length};for(let n of e)n.status===`pending`?t.pending+=1:n.status===`uploading`?t.uploading+=1:n.status===`failed`&&(t.failed+=1);return t}getOldestUpload(e){if(e.length===0)throw Error(`Cannot get oldest upload from empty array`);return e.sort((e,t)=>e.createdAt-t.createdAt)[0]}getOldestFailedUpload(e){if(e.length===0)throw Error(`Cannot get oldest failed upload from empty array`);return e.sort((e,t)=>e.updatedAt-t.updatedAt)[0]}async processUpload(e){try{await this.storageService.updateUploadStatus(e.id,{status:`uploading`});let t=await this.uploadService.uploadVideo(e.blob,{apiKey:e.apiKey,backendUrl:e.backendUrl,filename:e.filename,mimeType:e.mimeType,metadata:e.metadata,userMetadata:e.userMetadata,onProgress:t=>{this.callbacks.onUploadProgress?.(e.id,t)}});await this.storageService.deleteUpload(e.id),this.callbacks.onUploadComplete?.(e.id,t)}catch(t){let n=i(t),r=e.retryCount+1;if(await this.storageService.updateUploadStatus(e.id,{status:`failed`,retryCount:r,lastError:n}),r>=10)this.callbacks.onUploadError?.(e.id,Error(`Upload failed after 10 attempts: ${n}`));else{let e=this.calculateRetryDelay(r);this.scheduleRetry(e)}}}calculateRetryDelay(e){let t=2e3*1.5**(e-1);return Math.min(t,3e5)}scheduleRetry(e){this.clearTimer(this.retryTimeoutId,clearTimeout),this.retryTimeoutId=window.setTimeout(()=>{this.retryTimeoutId=null,this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`scheduled-retry`,Error(t))})},e)}clearTimer(e,t){e!==null&&t(e)}},bS=class{uploadVideo(e,t){if(!t.filename)throw Error(`Filename is required`);if(!e.type||e.type.trim()===``)throw Error(`Blob type is required`);return this.uploadVideoFile(e,t)}uploadVideoFile(e,t){return new Promise((n,r)=>{let i=new XMLHttpRequest,a=this.createUploadBlob(e,t.mimeType);if(t.onProgress){let e=t.onProgress;i.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e(t.loaded/t.total)})}i.addEventListener(`load`,()=>{if(i.status>=200&&i.status<=299){this.parseSuccessResponse(i,n,r);return}this.parseErrorResponse(i,r)}),i.addEventListener(`error`,()=>{r(Error(`Network error during upload`))}),i.addEventListener(`abort`,()=>{r(Error(`Upload was aborted`))});let o=`${t.backendUrl}/api/v1/videos/upload`;i.open(`POST`,o),i.setRequestHeader(`Authorization`,`Bearer ${t.apiKey}`);let s=new FormData;s.append(`file`,a,t.filename);let c={filename:t.filename,mimeType:a.type};t.userMetadata&&(c.userMetadata=t.userMetadata),s.append(`metadata`,JSON.stringify(c)),i.send(s)})}createUploadBlob(e,t){let n=this.resolveUploadMimeType(e,t);return n===e.type?e:new Blob([e],{type:n})}resolveUploadMimeType(e,t){return t&&t.trim().length>0?this.normalizeMimeType(t):this.normalizeMimeType(e.type)}normalizeMimeType(e){let[t]=e.split(`;`);return t===void 0?e.trim().toLowerCase():t.trim().toLowerCase()}parseSuccessResponse(e,t,n){let r=this.safeParseJsonFromXhr(e);if(!r){n(Error(`Failed to parse upload response: invalid JSON`));return}let i=r.data;if(!i){n(Error(`Failed to parse upload response: missing data`));return}t({id:i.id,publicId:i.publicId,filename:i.filename,fileSize:i.fileSize,mimeType:i.mimeType,duration:i.duration,status:i.status,uploadUrl:i.uploadUrl,createdAt:i.createdAt})}parseErrorResponse(e,t){let n=this.safeParseJsonFromXhr(e);if(n&&typeof n==`object`&&`error`in n&&typeof n.error==`string`){t(Error(n.error));return}t(Error(`Upload failed: ${e.status} ${e.statusText}`))}safeParseJsonFromXhr(e){if(!e.responseText||e.responseText.trim()===``)return null;let t=e.responseText.trim();if(!(t.startsWith(`{`)&&t.endsWith(`}`))||t.length<2)return null;let n=JSON.parse(e.responseText);return typeof n==`object`&&n?n:null}};let xS=e=>{},SS=e=>{},CS=e=>{},wS=()=>{},TS=e=>{},ES=(e,t)=>{},DS=e=>{},OS=e=>{},kS=e=>{},AS=()=>{},jS=e=>{};function MS(e){let t={onProgress:xS,onSuccess:SS,onError:CS,onClearStatus:wS};return e.upload&&(t=e.upload),t}let NS=e=>{};function PS(e){let t=jS;return e.onStorageCleanupError&&(t=e.onStorageCleanupError),t}function FS(e){let t=NS;return e.onStorageWriteError&&(t=e.onStorageWriteError),t}function IS(e,t){let n=e.recording,r=TS;n?.onStateChange&&(r=n.onStateChange);let i=ES;n?.onCountdownUpdate&&(i=n.onCountdownUpdate);let a=DS;n?.onTimerUpdate&&(a=n.onTimerUpdate);let o=OS;n?.onError&&(o=n.onError);let s=kS;n?.onRecordingComplete&&(s=n.onRecordingComplete);let c=AS;return n?.onClearUploadStatus&&(c=n.onClearUploadStatus),{onStateChange:r,onCountdownUpdate:i,onTimerUpdate:a,onError:o,onRecordingComplete:s,onClearUploadStatus:c,onStopAudioTracking:t.stopAudioTracking,onGetConfig:t.getConfig,...t.getRouteDecision&&{onGetRouteDecision:t.getRouteDecision},...t.onAudioWarning&&{onAudioWarning:t.onAudioWarning},...t.onAudioRecovered&&{onAudioRecovered:t.onAudioRecovered},...t.onTranscodingProgress&&{onTranscodingProgress:t.onTranscodingProgress}}}function LS(e,t){let n=e.sourceSwitch;return{onSourceChange:n?.onSourceChange,onPreviewUpdate:n?.onPreviewUpdate,onError:n?.onError,onTransitionStart:n?.onTransitionStart,onTransitionEnd:n?.onTransitionEnd,onScreenSelectionStart:()=>{t.isRecording()&&t.updateSourceType(!0)},onScreenSelectionEnd:()=>{t.isRecording()&&t.updateSourceType(!1)},getSelectedCameraDeviceId:t.getSelectedCameraDeviceId,getSelectedMicDeviceId:t.getSelectedMicDeviceId}}var RS=class{constructor(e={}){this.totalChunks=0,this.nonSilentChunks=0,this.lowSignalChunks=0,this.peak=0,this.rms=0,this.inputPeak=0,this.inputRms=0,this.startedAtMs=null,this.lastChunkTimestampMs=null,this.silentStartedAtMs=null,this.lowSignalStartedAtMs=null,this.mutedSpeechStartedAtMs=null,this.mutedStartedAtMs=null,this.mutedDurationMs=0,this.currentMuted=!1,this.hasHealthySignal=!1,this.silenceThreshold=this.resolveNumber(e.silenceThreshold,.001),this.lowSignalThreshold=this.resolveNumber(e.lowSignalThreshold,.05),this.mutedSpeechThreshold=this.resolveNumber(e.mutedSpeechThreshold,this.silenceThreshold),this.silentWarningDurationMs=this.resolveNumber(e.silentWarningDurationMs,2e3),this.lowSignalWarningDurationMs=this.resolveNumber(e.lowSignalWarningDurationMs,2e3),this.mutedSpeechWarningDurationMs=this.resolveNumber(e.mutedSpeechWarningDurationMs,1e4),this.noChunkWarningDurationMs=this.resolveNumber(e.noChunkWarningDurationMs,2e3)}recordChunk(e){this.markStarted(e.timestampMs),this.trackMuteState(e.timestampMs,e.isMuted);let t=this.calculateChunkStats(e.samples),n=this.resolveOptionalNumber(e.inputPeak,t.peak),r=this.resolveOptionalNumber(e.inputRms,t.rms),i=t.peak<=this.silenceThreshold,a=!e.isMuted&&t.peak>this.silenceThreshold&&t.peak<this.lowSignalThreshold,o=e.isMuted&&n>this.mutedSpeechThreshold;return this.totalChunks+=1,this.peak=t.peak,this.rms=t.rms,this.inputPeak=n,this.inputRms=r,i||(this.nonSilentChunks+=1,this.silentStartedAtMs=null),a&&(this.lowSignalChunks+=1),t.peak>=this.lowSignalThreshold&&(this.hasHealthySignal=!0),i&&this.silentStartedAtMs===null&&(this.silentStartedAtMs=e.timestampMs),a&&this.lowSignalStartedAtMs===null&&(this.lowSignalStartedAtMs=e.timestampMs),a||(this.lowSignalStartedAtMs=null),o&&this.mutedSpeechStartedAtMs===null&&(this.mutedSpeechStartedAtMs=e.timestampMs),o||(this.mutedSpeechStartedAtMs=null),this.lastChunkTimestampMs=e.timestampMs,this.snapshot(e.timestampMs,e.isMuted)}inspect(e,t){return this.markStarted(e),this.trackMuteState(e,t),this.snapshot(e,t)}reset(){this.totalChunks=0,this.nonSilentChunks=0,this.lowSignalChunks=0,this.peak=0,this.rms=0,this.inputPeak=0,this.inputRms=0,this.startedAtMs=null,this.lastChunkTimestampMs=null,this.silentStartedAtMs=null,this.lowSignalStartedAtMs=null,this.mutedSpeechStartedAtMs=null,this.mutedStartedAtMs=null,this.mutedDurationMs=0,this.currentMuted=!1,this.hasHealthySignal=!1}snapshot(e,t){let n=this.resolveSilentDuration(e),r=this.resolveLowSignalDuration(e),i=this.resolveMutedSpeechDuration(e),a=this.resolveNoChunkDuration(e),o=this.resolveMutedDuration(e,t);return{classification:this.classify(t,n,r,i,a),totalChunks:this.totalChunks,nonSilentChunks:this.nonSilentChunks,lowSignalChunks:this.lowSignalChunks,peak:this.peak,rms:this.rms,inputPeak:this.inputPeak,inputRms:this.inputRms,consecutiveSilentDurationMs:n,consecutiveLowSignalDurationMs:r,consecutiveMutedSpeechDurationMs:i,noChunkDurationMs:a,mutedDurationMs:o,hasHealthySignal:this.hasHealthySignal}}getFinalSnapshot(e,t){let n=this.resolveMutedDuration(e,t);return{totalChunks:this.totalChunks,nonSilentChunks:this.nonSilentChunks,lowSignalChunks:this.lowSignalChunks,mutedDurationMs:n,hasHealthySignal:this.hasHealthySignal}}classify(e,t,n,r,i){return this.totalChunks===0&&i>=this.noChunkWarningDurationMs?`no-chunks`:e&&r>=this.mutedSpeechWarningDurationMs?`speaking-while-muted`:e&&t>=this.silentWarningDurationMs?`muted-silence-expected`:!e&&t>=this.silentWarningDurationMs?`silent-while-unmuted`:!e&&this.nonSilentChunks>0&&this.peak<this.lowSignalThreshold&&n>=this.lowSignalWarningDurationMs?`low-signal`:`healthy`}calculateChunkStats(e){if(e.length===0)return{peak:0,rms:0};let t=0,n=0;for(let r of e){let e=Math.abs(r);t=Math.max(t,e),n+=r*r}return{peak:t,rms:Math.sqrt(n/e.length)}}resolveSilentDuration(e){return this.silentStartedAtMs===null?0:e-this.silentStartedAtMs}resolveLowSignalDuration(e){return this.lowSignalStartedAtMs===null?0:e-this.lowSignalStartedAtMs}resolveMutedSpeechDuration(e){return this.mutedSpeechStartedAtMs===null?0:e-this.mutedSpeechStartedAtMs}resolveNoChunkDuration(e){return this.lastChunkTimestampMs===null?this.startedAtMs===null?0:e-this.startedAtMs:e-this.lastChunkTimestampMs}markStarted(e){this.startedAtMs===null&&(this.startedAtMs=e)}trackMuteState(e,t){if(t!==this.currentMuted){if(t){this.mutedStartedAtMs=e,this.currentMuted=!0;return}this.mutedStartedAtMs!==null&&(this.mutedDurationMs+=e-this.mutedStartedAtMs),this.mutedStartedAtMs=null,this.currentMuted=!1}}resolveMutedDuration(e,t){return t&&this.mutedStartedAtMs!==null?this.mutedDurationMs+e-this.mutedStartedAtMs:this.mutedDurationMs}resolveNumber(e,t){if(e===void 0)return t;if(!Number.isFinite(e)||e<0)throw Error(`Audio health monitor option must be a non-negative number`);return e}resolveOptionalNumber(e,t){return e===void 0||!Number.isFinite(e)||e<0?t:e}};function zS(e){let t=e.getVideoTracks();if(t.length===0)return!1;let n=t[0];return`displaySurface`in n.getSettings()||n.label.toLowerCase().includes(`screen`)||n.label.toLowerCase().includes(`display`)}Sv();function BS(e){if(e!==void 0)return typeof e==`number`?e:e===lf?`low`:e===uf?`medium`:e===df?`high`:e===ff?`very-high`:`high`}function VS(e){let t=null,n=0;function r(){if(!t){let n=e.createBlob();t=e.createObjectUrl(n)}return n+=1,t}function i(){n!==0&&(--n,n===0&&(t&&=(e.revokeObjectUrl(t),null)))}return{acquire:r,release:i}}let HS=`vidtreo-audio-worklet`,US=`audioChunk`,WS=`setMuted`,GS=`setPaused`,KS=`shutdown`,qS=`
|
|
141
|
-
const AUDIO_WORKLET_MESSAGE_TYPE_AUDIO_CHUNK = "${
|
|
142
|
-
const AUDIO_WORKLET_MESSAGE_TYPE_SET_MUTED = "${
|
|
143
|
-
const AUDIO_WORKLET_MESSAGE_TYPE_SET_PAUSED = "${
|
|
144
|
-
const AUDIO_WORKLET_MESSAGE_TYPE_SHUTDOWN = "${
|
|
140
|
+
};`],{type:`application/javascript`})}function Gy(){let e=Wy();return URL.createObjectURL(e)}function Ky(e){URL.revokeObjectURL(e)}let qy=`probe`,Jy=`probeResult`,Yy=`mediaStreamTrackProcessor`,Xy=`unavailable`,Zy=`unavailable`,Qy=new Map,$y=new Map;function eb(e,t){return typeof e==`boolean`?e:t}function tb(e){return e?`1`:`0`}function nb(e,t){return[`audio`,tb(e),`watermark`,tb(t)].join(`|`)}function rb(){return typeof process>`u`||process.env,!0}function ib(e){return e.probeResult.hasMediaStreamTrackProcessor?`worker-track`:e.hasMainThreadMediaStreamTrackProcessor?`main-thread-stream`:Xy}function ab(e){return e.requiresAudio?e.hasMainThreadMediaStreamTrackProcessor&&e.probeResult.hasAudioData?`main-thread-audio-stream`:e.hasAudioContext&&e.hasAudioWorklet?`audio-worklet-chunks`:Zy:`none-required`}function ob(e,t){return e.includes(t)?e:[...e,t]}function sb(e,t){let n=e;return t.hasWorker||(n=ob(n,`worker`)),t.probeResult.hasVideoFrame||(n=ob(n,`videoFrame`)),t.probeResult.hasOffscreenCanvas||(n=ob(n,`offscreenCanvas`)),t.probeResult.hasReadableStream||(n=ob(n,`readableStream`)),n}function cb(e,t){let n=e;return t.requiresWatermark&&!t.probeResult.hasCreateImageBitmap&&(n=ob(n,`createImageBitmap`)),n}function lb(e,t){let n=e;return t.videoPath===Xy&&(n=ob(n,Yy)),n}function ub(e,t){let n=e;return t.hasMainThreadMediaStreamTrackProcessor&&t.probeResult.hasAudioData?n:(t.hasMainThreadMediaStreamTrackProcessor||(n=ob(n,Yy)),t.hasMainThreadMediaStreamTrackProcessor&&!t.probeResult.hasAudioData&&(n=ob(n,`audioData`)),n)}function db(e,t){let n=e;return t.hasAudioContext&&t.hasAudioWorklet?n:(t.hasAudioContext||(n=ob(n,`audioContext`)),t.hasAudioWorklet||(n=ob(n,`audioWorklet`)),n)}function fb(e,t){let n=e;return t.requiresAudio&&t.audioPath===Zy?(n=ub(n,t),n=db(n,t),n):n}function pb(e){let t=[];return t=sb(t,e),t=cb(t,e),t=lb(t,e),t=fb(t,e),t}function mb(e,t){return!(e===Xy||t===Zy)}function hb(e,t){return!(!e.hasVideoFrame||!e.hasOffscreenCanvas||!e.hasReadableStream||t&&!e.hasCreateImageBitmap)}async function gb(e={},t={}){let n=eb(e.requiresAudio,!0),r=eb(e.requiresWatermark,!1);if(!rb())return await _b(n,r,t);let i=nb(n,r),a=Qy.get(i);if(a)return a;let o=$y.get(i);if(o)return await o;let s=_b(n,r,t).then(e=>(Qy.set(i,e),$y.delete(i),e)).catch(e=>{throw $y.delete(i),e});return $y.set(i,s),await s}async function _b(e,t,n){let r=typeof Worker<`u`,i=a()!==null,o=typeof AudioWorkletNode<`u`,s=typeof MediaStreamTrackProcessor<`u`,c=await vb(r,n),l=ib({probeResult:c,hasMainThreadMediaStreamTrackProcessor:s}),u=ab({requiresAudio:e,hasAudioContext:i,hasAudioWorklet:o,hasMainThreadMediaStreamTrackProcessor:s,probeResult:c}),d=pb({hasWorker:r,hasAudioContext:i,hasAudioWorklet:o,hasMainThreadMediaStreamTrackProcessor:s,probeResult:c,requiresAudio:e,requiresWatermark:t,videoPath:l,audioPath:u}),f=mb(l,u),p=hb(c,t);return{isSupported:r&&f&&p,missing:d,hasWorker:r,hasAudioContext:i,hasAudioWorklet:o,hasMediaStreamTrackProcessor:c.hasMediaStreamTrackProcessor,hasMainThreadMediaStreamTrackProcessor:s,hasVideoFrame:c.hasVideoFrame,hasAudioData:c.hasAudioData,hasOffscreenCanvas:c.hasOffscreenCanvas,hasCreateImageBitmap:c.hasCreateImageBitmap,hasReadableStream:c.hasReadableStream,requiresAudio:e,requiresWatermark:t,videoPath:l,audioPath:u}}async function vb(e,t){if(!e)return bb();let n=await yb().catch(()=>null);return n?await new Promise(e=>{let r=!1,i=t.probeTimeoutMilliseconds??2e3,a=t=>{r||(r=!0,n.terminate(),e(t))},o=setTimeout(()=>{a(bb())},i);n.onmessage=e=>{let t=e.data;t.type===Jy&&(clearTimeout(o),a({hasMediaStreamTrackProcessor:t.hasMediaStreamTrackProcessor===!0,hasVideoFrame:t.hasVideoFrame===!0,hasAudioData:t.hasAudioData===!0,hasOffscreenCanvas:t.hasOffscreenCanvas===!0,hasCreateImageBitmap:t.hasCreateImageBitmap===!0,hasReadableStream:t.hasReadableStream===!0}))},n.onerror=()=>{clearTimeout(o),a(bb())},Promise.resolve().then(()=>{n.postMessage({type:qy})}).catch(()=>{clearTimeout(o),a(bb())})}):bb()}function yb(){return Promise.resolve().then(()=>{let e=Gy();try{let t=new Worker(e,{type:`classic`});return Ky(e),t}catch(t){throw Ky(e),t}})}function bb(){return{hasMediaStreamTrackProcessor:!1,hasVideoFrame:!1,hasAudioData:!1,hasOffscreenCanvas:!1,hasCreateImageBitmap:!1,hasReadableStream:!1}}let xb=`recording.audio-no-chunks`,Sb=`recording.audio-silent`,Cb=`recording.audio-track-ended`,wb=`audio.no-track-at-start`;function Tb(e,t){let n=Error(e);return n.code=e,t&&(n.details=t),n}function Eb(){let e=Error(wb);return e.code=wb,e}function Db(e){if(!(e instanceof Error))return!1;let t=e;return t.code===xb||t.code===Sb||t.code===Cb||t.code===`recording.no-audio-track`||t.code===`recording.no-audio-frames`||t.code===`recording.audio-zero-channels`||t.code===`recording.audio-invalid-sample-rate`}function Ob(e){return e.hadTrackEndedWarning?{ok:!1,code:Cb}:e.totalChunks===0?{ok:!1,code:xb}:e.nonSilentChunks===0&&(e.durationMs>0?e.mutedDurationMs/e.durationMs:0)<.9?{ok:!1,code:Sb}:{ok:!0}}let kb=`vidtreo-recorder`,Ab=`pending-uploads`,jb=`status`,Mb=`createdAt`,Nb=`Failed to prepare upload data for storage. The recorded file could not be read.`,Pb=`__probe__`,Fb=new ArrayBuffer(1);var Ib=class{constructor(e){if(this.db=null,e){this.databaseFactory=e;return}this.databaseFactory=indexedDB}init(){return this.db?Promise.resolve():this.openDatabase(3,!0)}openDatabase(e,t){return new Promise((n,r)=>{let i=this.createOpenRequest(e);i.onerror=()=>{let e=i.error;if(t&&e&&e.name===`VersionError`){this.openDatabase(void 0,!1).then(n).catch(r);return}if(e){r(e);return}r(Error(`Failed to open database`))},i.onsuccess=()=>{if(!i.result){r(Error(`Database result is null`));return}let e=i.result,t=this.validateRequiredSchema(e);if(t){e.close(),r(t);return}this.db=e,n()},i.onupgradeneeded=e=>{let t=e.target.result;if(!t){r(Error(`Database upgrade result is null`));return}this.initializeStoreSchema(t)}})}createOpenRequest(e){return e===void 0?this.databaseFactory.open(kb):this.databaseFactory.open(kb,e)}initializeStoreSchema(e){if(e.objectStoreNames.contains(Ab))return;let t=e.createObjectStore(Ab,{keyPath:`id`});t.createIndex(jb,jb,{unique:!1}),t.createIndex(Mb,Mb,{unique:!1})}validateRequiredSchema(e){if(!e.objectStoreNames.contains(Ab))return Error(`Database schema is missing required object store: pending-uploads`);let t=e.transaction([Ab],`readonly`).objectStore(Ab);return t.indexNames.contains(jb)?t.indexNames.contains(Mb)?null:Error(`Database schema is missing required index: createdAt`):Error(`Database schema is missing required index: status`)}isInitialized(){return this.db!==null}async probeWriteCapability(){if(!this.db)return{ok:!1,reason:`Database not initialized`};try{return await this.executeTransaction(`readwrite`,e=>{let t={id:Pb,blobData:Fb,blobType:`application/octet-stream`,apiKey:``,backendUrl:``,filename:`probe`,status:`pending`,retryCount:0,createdAt:0,updatedAt:0};return new Promise((n,r)=>{let i=e.put(t);i.onsuccess=()=>{let t=e.delete(Pb);t.onsuccess=()=>n(),t.onerror=()=>{if(t.error){r(t.error);return}r(Error(`Probe delete failed`))}},i.onerror=()=>{if(i.error){r(i.error);return}r(Error(`Probe write failed`))}})}),{ok:!0}}catch(e){return{ok:!1,reason:`Storage write probe failed. Browser may be in private browsing mode or IndexedDB writes are restricted. ${e instanceof Error?e.message:String(e)}`}}}async savePendingUpload(e){let t=this.generateUploadId(),n=Date.now(),r={...e,id:t,status:`pending`,retryCount:0,createdAt:n,updatedAt:n,blobData:await this.readBlobData(e.blob),blobType:e.blob.type};return r.blob=void 0,this.executeTransaction(`readwrite`,e=>{let n=e.add(r);return new Promise((e,r)=>{n.onsuccess=()=>e(t),n.onerror=()=>{n.error?n.error.name===`QuotaExceededError`?r(Error(`Storage quota exceeded. Please free up space or delete old uploads.`)):r(n.error):r(Error(`Failed to save upload`))}})})}getPendingUploads(e){return this.executeTransaction(`readonly`,t=>{let n=e?t.index(jb).getAll(e):t.getAll();return new Promise((e,t)=>{n.onsuccess=()=>{if(n.result===void 0){t(Error(`Failed to get uploads: result is undefined`));return}e(n.result.map(e=>this.hydrateUpload(e)))},n.onerror=()=>{n.error?t(n.error):t(Error(`Failed to get uploads`))}})})}async updateUploadStatus(e,t){let n=await this.createStoredUpdates(t);return this.executeTransaction(`readwrite`,r=>{let i=r.get(e);return new Promise((e,a)=>{i.onsuccess=()=>{let o=i.result;if(!o){a(Error(`Upload not found`));return}let s=t.updatedAt===void 0?Date.now():t.updatedAt,c={...o,...n,updatedAt:s},l=r.put(c);l.onsuccess=()=>e(),l.onerror=()=>{if(l.error){a(l.error);return}a(Error(`Failed to update upload`))}},i.onerror=()=>{i.error?a(i.error):a(Error(`Failed to get upload`))}})})}deleteUpload(e){return this.executeTransaction(`readwrite`,t=>{let n=t.delete(e);return new Promise((e,t)=>{n.onsuccess=()=>e(),n.onerror=()=>{n.error?t(n.error):t(Error(`Failed to delete upload`))}})})}async cleanupPermanentlyFailedUploads(e){let t=e===void 0?24:e;if(typeof t!=`number`||t<0)throw Error(`retentionHours must be a non-negative number`);let n=Date.now()-t*36e5,r=(await this.getPendingUploads()).filter(e=>e.status===`failed`&&e.retryCount>=10&&e.updatedAt<n);for(let e of r)await this.deleteUpload(e.id);return r.length}async getTotalStorageSize(){return(await this.getPendingUploads()).reduce((e,t)=>e+t.blob.size,0)}hydrateUpload(e){if(`blobData`in e&&e.blobData){let{blobData:t,blobType:n,...r}=e;return{...r,blob:new Blob([t],{type:n})}}return e}async createStoredUpdates(e){let t={...e};return e.blob&&(t.blobData=await this.readBlobData(e.blob),t.blobType=e.blob.type,t.blob=void 0),t}readBlobData(e){return e.arrayBuffer().catch(e=>{throw e instanceof Error?Error(`${Nb} ${e.message}`):Error(Nb)})}generateUploadId(){return`upload-${Date.now()}-${Math.random().toString(36).substring(2,11)}`}executeTransaction(e,t){if(!this.db)throw Error(`Database not initialized`);let n=this.db.transaction([Ab],e),r=n.objectStore(Ab);return new Promise((e,i)=>{let a,o=!1,s=!1;n.oncomplete=()=>{!o||s||e(a)},n.onerror=()=>{if(n.error){i(n.error);return}i(Error(`Storage transaction failed`))},n.onabort=()=>{if(n.error){i(n.error);return}i(Error(`Storage transaction aborted`))},t(r).then(e=>{a=e,o=!0},e=>{s=!0,i(e)})})}},Lb=class{constructor(){this.storageService=null,this.cleanupIntervalId=null,this.writeProbeResult=null}async initialize(e){this.storageService||=new Ib,this.storageService.isInitialized()||await this.storageService.init(),this.writeProbeResult=await this.storageService.probeWriteCapability(),this.setupCleanupInterval(e)}getWriteProbeResult(){return this.writeProbeResult}setupCleanupInterval(e){this.cleanupIntervalId===null&&(this.cleanupIntervalId=window.setInterval(()=>{this.performCleanup().catch(t=>{e(i(t))})},36e5))}async performCleanup(){if(!this.storageService)throw Error(`StorageService not initialized`);await this.storageService.cleanupPermanentlyFailedUploads(24)}getStorageService(){return this.storageService}isStorageWritable(){return this.writeProbeResult?.ok===!0}destroy(){this.cleanupIntervalId!==null&&(clearInterval(this.cleanupIntervalId),this.cleanupIntervalId=null)}};function Rb(){let e=globalThis;if(e.__VIDTREO_DEBUG__===!0||e.__VIDTREO_DEV__===!0)return!0;let t=typeof process<`u`&&process?.env?`production`:void 0;return t===`development`||t===`test`||typeof localStorage<`u`&&localStorage.getItem(`VIDTREO_DEBUG`)===`true`}let zb=Rb(),Bb={reset:`\x1B[0m`,bright:`\x1B[1m`,dim:`\x1B[2m`,red:`\x1B[31m`,green:`\x1B[32m`,yellow:`\x1B[33m`,blue:`\x1B[34m`,magenta:`\x1B[35m`,cyan:`\x1B[36m`,white:`\x1B[37m`,gray:`\x1B[90m`};function Vb(e,t,n){if(!zb)return``;let r=n?.prefix||`[${e.toUpperCase()}]`;return`${Bb[n?.color||Hb(e)]}${r}${Bb.reset} ${t}`}function Hb(e){switch(e){case`error`:return`red`;case`warn`:return`yellow`;case`info`:return`cyan`;case`debug`:return`gray`;default:return`white`}}function Ub(e,t,...n){if(!zb)return;let r=Vb(e,t);console[e](r,...n)}let $={log:(e,...t)=>{Ub(`log`,e,...t)},info:(e,...t)=>{Ub(`info`,e,...t)},warn:(e,...t)=>{Ub(`warn`,e,...t)},error:(e,...t)=>{Ub(`error`,e,...t)},debug:(e,...t)=>{Ub(`debug`,e,...t)},group:(e,t=`cyan`)=>{if(!zb)return;let n=Bb[t],r=Bb.reset;console.group(`${n}${e}${r}`)},groupEnd:()=>{zb&&console.groupEnd()}};function Wb(e,t){if(e==null)throw Error(t);return e}function Gb(e,t=`StreamProcessor`){if(!e)throw Error(`${t} is required`);return e}function Kb(){if(typeof navigator>`u`||!navigator.mediaDevices?.getUserMedia){let e=typeof window<`u`&&window.isSecureContext===!0?`Camera access is not supported in this browser`:`Camera access requires HTTPS. Please use a secure connection (https://) or localhost.`;throw Error(e)}return navigator.mediaDevices}function qb(e,t){let n={};if(t.originalCameraConstraints){let{deviceId:e,...r}=t.originalCameraConstraints;n={...n,...r}}e&&(n={...n,deviceId:{exact:e}});let r=t.getSelectedCameraDeviceId(),i=!1;return e&&(i=!0),n.deviceId&&(i=!0),!i&&r&&(n={...n,deviceId:{exact:r}}),n}function Jb(e){let t={echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0};return e?{...t,deviceId:{exact:e}}:t}let Yb=`live`;function Xb(e){for(let t of e)t.readyState===Yb&&t.stop()}function Zb(e){Xb(e.getTracks())}function Qb(e){Xb(e.getVideoTracks())}function $b(e){return e?e.readyState===Yb:!1}function ex(e,t){return $b(e)&&$b(t)}function tx(e,t,n){if(!$b(e)){Zb(n);let r=`undefined`;throw e&&(r=e.readyState),Error(`Failed to get live camera ${t} track. ReadyState: ${r}`)}}let nx=`[SourceSwitchManager]`;var rx=class{constructor(e){this.dependencies=e}async createCameraStreamWithOriginalAudio(e){let t=this.dependencies.getOriginalCameraStream(),n;if(t&&(n=t.getAudioTracks()[0]),this.dependencies.logger.debug(`${nx} createCameraStreamWithOriginalAudio`,{hasOriginalCameraStream:!!t,originalCameraStreamId:t?.id,hasOriginalAudioTrack:!!n,originalAudioTrackId:n?.id,originalAudioTrackReadyState:n?.readyState,originalAudioTrackEnabled:n?.enabled,originalAudioTrackMuted:n?.muted,originalAudioTrackLabel:n?.label,isTrackLive:$b(n),cameraDeviceId:e}),!$b(n))return this.dependencies.logger.warn(`${nx} Original audio track is not live, cannot reuse`,{originalAudioTrackId:n?.id,originalAudioTrackReadyState:n?.readyState}),null;let r=qb(e,{originalCameraConstraints:this.dependencies.getOriginalCameraConstraints(),getSelectedCameraDeviceId:this.dependencies.getSelectedCameraDeviceId}),i=Object.keys(r).length>0,a=!0;i&&(a=r);let o={video:a,audio:!1};this.dependencies.logger.debug(`${nx} Requesting new video stream`,{constraints:o,cameraDeviceId:e});let s=await Kb().getUserMedia(o),c=s.getVideoTracks()[0];tx(c,`video`,s),this.dependencies.logger.debug(`${nx} New video stream obtained`,{newStreamId:s.id,videoTrackId:c.id,videoTrackReadyState:c.readyState,newStreamAudioTracksCount:s.getAudioTracks().length});let l=[c];n&&(l=[...l,n]),this.dependencies.logger.debug(`${nx} Creating combined stream with original audio`,{videoTrackId:c.id,audioTrackId:n?.id,audioTrackReadyState:n?.readyState,audioTrackEnabled:n?.enabled,audioTrackMuted:n?.muted,combinedTracksCount:l.length});let u=new MediaStream(l);Xb(s.getAudioTracks());let d=t?.id;return this.dependencies.setOriginalCameraStream(u),this.dependencies.logger.debug(`${nx} Combined stream created and assigned`,{combinedStreamId:u.id,previousOriginalCameraStreamId:d,newOriginalCameraStreamId:u.id,combinedStreamVideoTracksCount:u.getVideoTracks().length,combinedStreamAudioTracksCount:u.getAudioTracks().length,combinedStreamAudioTrackId:u.getAudioTracks()[0]?.id,combinedStreamAudioTrackReadyState:u.getAudioTracks()[0]?.readyState,audioTrackStillSame:u.getAudioTracks()[0]===n}),u}async createCameraStreamWithNewAudio(e){let t=this.dependencies.getSelectedMicDeviceId(),n=qb(e,{originalCameraConstraints:this.dependencies.getOriginalCameraConstraints(),getSelectedCameraDeviceId:this.dependencies.getSelectedCameraDeviceId}),r=Jb(t),i=Object.keys(n).length>0,a=!0;i&&(a=n);let o={video:a,audio:r},s=await Kb().getUserMedia(o),c=s.getVideoTracks()[0],l=s.getAudioTracks()[0];return tx(c,`video`,s),tx(l,`audio`,s),this.dependencies.setOriginalCameraStream(s),s}async createNewCameraStreamForRecording(){let e=this.dependencies.getSelectedCameraDeviceId();return await this.createCameraStreamWithOriginalAudio(e)||this.createCameraStreamWithNewAudio(e)}async getCameraStream(e){let t=this.dependencies.streamManager.isRecording(),n=this.dependencies.getSelectedCameraDeviceId(),r=this.dependencies.getSelectedMicDeviceId();if(this.dependencies.streamManager.setVideoDevice(n),this.dependencies.streamManager.setAudioDevice(r),e.canReuseOriginalStream()){let e=this.dependencies.getOriginalCameraStream();if(!e)throw Error(`Original camera stream is null`);return e}if(e.canReuseManagerStream()){let e=this.dependencies.streamManager.getStream();if(!e)throw Error(`Manager stream is null`);return e}t||this.dependencies.getOriginalCameraStream()&&this.dependencies.setOriginalCameraStream(null);let i=this.dependencies.streamManager.getStream();if(!t&&i&&i!==this.dependencies.getOriginalCameraStream()&&(Zb(i),this.dependencies.streamManager.setMediaStream(null)),t)return this.dependencies.streamManager.setVideoDevice(this.dependencies.getSelectedCameraDeviceId()),this.dependencies.streamManager.setAudioDevice(this.dependencies.getSelectedMicDeviceId()),this.createNewCameraStreamForRecording();let a=await this.dependencies.streamManager.startStream();return this.dependencies.setOriginalCameraStream(a),a}};let ix=`screen`,ax=`No video track found in screen share stream`;async function ox(e,t,n){n.setScreenShareStream(e);let r=e.getVideoTracks()[0];if(!r)throw n.stopStreamTracks(e),Error(ax);let i=n.combineScreenShareWithOriginalAudio(r),a=n.getOriginalCameraStream();t&&t!==a&&n.stopStreamVideoTracks(t);let o=e.getAudioTracks();for(let e of o)e.stop();return n.setCurrentSourceType(ix),n.callbacks.onSourceChange&&await n.callbacks.onSourceChange(n.getCurrentSourceType()),sx(i,n),i}function sx(e,t){let n=e.getVideoTracks()[0];if(!n)throw Error(ax);let r=t.getScreenShareTrackEndHandler();if(r){let e=t.streamManager.getStream();if(e){let t=e.getVideoTracks()[0];t&&t.removeEventListener(`ended`,r)}}let i=()=>{t.getCurrentSourceType()===ix&&t.switchToCamera().catch(e=>{t.handleSwitchError(e)})};t.setScreenShareTrackEndHandler(i),n.addEventListener(`ended`,i)}function cx(e,t){let n=t.getScreenShareTrackEndHandler();if(!(n&&e))return;let r=e.getVideoTracks()[0];r&&r.removeEventListener(`ended`,n),t.setScreenShareTrackEndHandler(null)}function lx(e,t){e.onTransitionStart&&e.onTransitionStart(t)}function ux(e){e.onTransitionEnd&&e.onTransitionEnd()}function dx(e){e.onScreenSelectionStart&&e.onScreenSelectionStart()}function fx(e){e.onScreenSelectionEnd&&e.onScreenSelectionEnd()}function px(e){fx(e),ux(e)}let mx=`Failed to get camera stream`;var hx=class{constructor(e,t={}){this.currentSourceType=`camera`,this.originalCameraStream=null,this.screenShareStream=null,this.screenShareTrackEndHandler=null,this.streamManager=e,this.callbacks=t;let n=null,r=()=>n;this.getOriginalCameraConstraints=r,this.setOriginalCameraConstraints=e=>{n=e},this.cameraStreamBuilder=new rx({streamManager:this.streamManager,logger:{debug:(e,t)=>$.debug(e,t),warn:(e,t)=>$.warn(e,t)},getSelectedCameraDeviceId:()=>this.callbacks.getSelectedCameraDeviceId?this.callbacks.getSelectedCameraDeviceId():this.streamManager.getVideoDevice(),getSelectedMicDeviceId:()=>this.callbacks.getSelectedMicDeviceId?this.callbacks.getSelectedMicDeviceId():this.streamManager.getAudioDevice(),getOriginalCameraStream:()=>this.originalCameraStream,setOriginalCameraStream:e=>{this.originalCameraStream=e},getOriginalCameraConstraints:r})}getCurrentSourceType(){return this.currentSourceType}getOriginalCameraStream(){return this.originalCameraStream}storeOriginalCameraConstraints(e){let t=e.getVideoTracks()[0];if(!t)return;let n=t.getSettings(),r={width:n.width,height:n.height,aspectRatio:n.aspectRatio,frameRate:n.frameRate,deviceId:n.deviceId,facingMode:n.facingMode},i=this.getOriginalCameraConstraints();i&&i.width===r.width&&i.height===r.height&&i.aspectRatio===r.aspectRatio&&i.frameRate===r.frameRate&&i.deviceId===r.deviceId&&i.facingMode===r.facingMode||this.setOriginalCameraConstraints(r)}storeOriginalCameraStream(e){let t=e.getVideoTracks()[0],n=e.getAudioTracks()[0];ex(t,n)?this.originalCameraStream=new MediaStream([t,n]):this.originalCameraStream=e}createError(e){return e instanceof Error?e:Error(i(e))}waitForTracksToEnd(e){return new Promise(t=>{setTimeout(()=>{this.screenShareStream=null,t()},e)})}combineScreenShareWithOriginalAudio(e){let t;this.originalCameraStream&&(t=this.originalCameraStream.getAudioTracks()[0]),$.debug(`[SourceSwitchManager] combineScreenShareWithOriginalAudio`,{hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,hasOriginalAudioTrack:!!t,originalAudioTrackId:t?.id,originalAudioTrackReadyState:t?.readyState,originalAudioTrackEnabled:t?.enabled,originalAudioTrackMuted:t?.muted,originalAudioTrackLabel:t?.label,isTrackLive:$b(t),screenVideoTrackId:e.id,screenVideoTrackReadyState:e.readyState});let n=[e];$b(t)&&t?(n=[...n,t],$.debug(`[SourceSwitchManager] Added original audio track to combined stream`,{audioTrackId:t.id,combinedTracksCount:n.length})):$.warn(`[SourceSwitchManager] Original audio track is not live, not adding to combined stream`,{audioTrackId:t?.id,audioTrackReadyState:t?.readyState,combinedTracksCount:n.length});let r=new MediaStream(n);return $.debug(`[SourceSwitchManager] Combined stream created`,{combinedStreamId:r.id,combinedStreamVideoTracksCount:r.getVideoTracks().length,combinedStreamAudioTracksCount:r.getAudioTracks().length,combinedStreamAudioTrackId:r.getAudioTracks()[0]?.id,combinedStreamAudioTrackReadyState:r.getAudioTracks()[0]?.readyState}),r}isPermissionDeniedError(e){let t=i(e),n=!1;t.includes(`NotAllowedError`)&&(n=!0),t.includes(`AbortError`)&&(n=!0);let r=t.toLowerCase();return r.includes(`permission denied`)&&(n=!0),r.includes(`user denied`)&&(n=!0),n}switchToScreenCapture(){let e=this.streamManager.getStream();return e&&(this.storeOriginalCameraConstraints(e),this.storeOriginalCameraStream(e)),lx(this.callbacks,`Select screen to share...`),dx(this.callbacks),Promise.resolve().then(async()=>{let t=Kb();if(typeof t.getDisplayMedia!=`function`)throw Error(`Screen sharing is not supported on this device`);return ox(await t.getDisplayMedia({video:!0,audio:!0}),e,this.getScreenShareDependencies())}).catch(e=>{if(px(this.callbacks),this.isPermissionDeniedError(e))return null;throw e})}canReuseStream(e,t){if(!e||t&&e!==this.originalCameraStream)return!1;let n=e.getVideoTracks()[0],r=e.getAudioTracks()[0];return!(!ex(n,r)||this.callbacks.getSelectedCameraDeviceId&&this.callbacks.getSelectedCameraDeviceId()!==n.getSettings().deviceId)}canReuseOriginalStream(){return this.canReuseStream(this.originalCameraStream,!1)}canReuseManagerStream(){let e=this.streamManager.getStream();return e&&this.originalCameraStream?this.canReuseStream(e,!0):!1}getScreenShareDependencies(){return{callbacks:this.callbacks,streamManager:this.streamManager,combineScreenShareWithOriginalAudio:e=>this.combineScreenShareWithOriginalAudio(e),stopStreamTracks:e=>Zb(e),stopStreamVideoTracks:e=>Qb(e),getCurrentSourceType:()=>this.currentSourceType,setCurrentSourceType:e=>{this.currentSourceType=e},getOriginalCameraStream:()=>this.originalCameraStream,getScreenShareStream:()=>this.screenShareStream,setScreenShareStream:e=>{this.screenShareStream=e},getScreenShareTrackEndHandler:()=>this.screenShareTrackEndHandler,setScreenShareTrackEndHandler:e=>{this.screenShareTrackEndHandler=e},switchToCamera:()=>this.switchToCamera(),handleSwitchError:e=>{this.callbacks.onError&&this.callbacks.onError(this.createError(e))}}}getCameraStream(){return this.cameraStreamBuilder.getCameraStream({canReuseOriginalStream:()=>this.canReuseOriginalStream(),canReuseManagerStream:()=>this.canReuseManagerStream()})}switchToCamera(){let e=this.streamManager.isRecording();return!e&&this.currentSourceType===`camera`?Promise.resolve():Promise.resolve().then(async()=>{lx(this.callbacks,`Switching to camera...`),await this.handleScreenShareStop();let t=await this.getCameraStream();if(!t)throw Error(mx);await this.applyCameraStream(t,e),ux(this.callbacks)}).catch(e=>{throw ux(this.callbacks),e})}stopScreenShareStreamTracks(e){let t=e.getVideoTracks(),n=e.getAudioTracks();$.debug(`[SourceSwitchManager] stopping screen share tracks`,{videoTracks:t.map(e=>({id:e.id,readyState:e.readyState,displaySurface:e.getSettings().displaySurface,constraints:e.getConstraints()})),audioTracks:n.map(e=>({id:e.id,readyState:e.readyState,constraints:e.getConstraints()}))});for(let e of t)e.stop();for(let e of n)e.stop()}stopDisplayTracks(e){if(e)for(let t of e.getVideoTracks())typeof t.getSettings().displaySurface==`string`&&$b(t)&&($.debug(`[SourceSwitchManager] stopping display track`,{id:t.id,readyState:t.readyState,constraints:t.getConstraints(),settings:t.getSettings()}),t.stop())}async handleScreenShareStop(){if(this.currentSourceType!==`screen`)return;$.debug(`[SourceSwitchManager] handleScreenShareStop invoked`,{currentSourceType:this.currentSourceType,hasScreenShareStream:!!this.screenShareStream,screenShareStreamId:this.screenShareStream?.id,hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id});let e=this.screenShareStream,t=this.streamManager.getStream();if($.debug(`[SourceSwitchManager] Current stream state before stop`,{currentStreamId:t?.id,currentStreamVideoTracksCount:t?.getVideoTracks().length,currentStreamAudioTracksCount:t?.getAudioTracks().length,currentStreamAudioTrackId:t?.getAudioTracks()[0]?.id,currentStreamAudioTrackReadyState:t?.getAudioTracks()[0]?.readyState,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState}),e){let t=e.getAudioTracks();$.debug(`[SourceSwitchManager] Screen share stream audio tracks before stop`,{screenShareStreamId:e.id,screenShareAudioTracksCount:t.length,screenShareAudioTrackIds:t.map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))}),cx(e,this.getScreenShareDependencies()),this.stopScreenShareStreamTracks(e),this.stopDisplayTracks(e),this.screenShareStream=null,await this.waitForTracksToEnd(0),$.debug(`[SourceSwitchManager] Screen share stream stopped`,{screenShareAudioTracksAfterStop:t.map(e=>({id:e.id,readyState:e.readyState}))})}if(t){let e=t.getAudioTracks();$.debug(`[SourceSwitchManager] Current stream audio tracks before video stop`,{currentStreamId:t.id,currentStreamAudioTracksCount:e.length,currentStreamAudioTrackIds:e.map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))}),Qb(t),this.stopDisplayTracks(t),$.debug(`[SourceSwitchManager] Current stream audio tracks after video stop`,{currentStreamId:t.id,currentStreamAudioTracksCount:t.getAudioTracks().length,currentStreamAudioTrackIds:t.getAudioTracks().map(e=>({id:e.id,readyState:e.readyState,enabled:e.enabled}))})}$.debug(`[SourceSwitchManager] Original camera stream state before source change`,{hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,originalCameraStreamAudioTracksCount:this.originalCameraStream?.getAudioTracks().length,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState,originalCameraStreamAudioTrackEnabled:this.originalCameraStream?.getAudioTracks()[0]?.enabled}),this.currentSourceType=`camera`,this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),$.debug(`[SourceSwitchManager] handleScreenShareStop completed`,{hasScreenShareStream:!!this.screenShareStream,currentSourceType:this.currentSourceType,hasOriginalCameraStream:!!this.originalCameraStream,originalCameraStreamId:this.originalCameraStream?.id,originalCameraStreamAudioTracksCount:this.originalCameraStream?.getAudioTracks().length,originalCameraStreamAudioTrackId:this.originalCameraStream?.getAudioTracks()[0]?.id,originalCameraStreamAudioTrackReadyState:this.originalCameraStream?.getAudioTracks()[0]?.readyState})}async applyCameraStream(e,t){this.streamManager.setMediaStream(e);let n=this.currentSourceType!==`camera`;this.currentSourceType=`camera`,n&&this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),t&&await this.streamManager.switchVideoSource(e),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(e)}async toggleSource(){if(!this.streamManager.isRecording())return;let e;e=this.currentSourceType===`camera`?this.switchToScreen():this.switchToCamera(),await e.catch(e=>{this.handleToggleError(e)})}async switchToScreen(){let e=await this.switchToScreenCapture();if(!e){ux(this.callbacks);return}lx(this.callbacks,`Switching to screen...`),await this.streamManager.switchVideoSource(e),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(e),ux(this.callbacks)}handleToggleError(e){ux(this.callbacks);let t=i(e),n=!1;t.includes(`NotAllowedError`)&&(n=!0),t.includes(`AbortError`)&&(n=!0),n&&this.currentSourceType===`screen`&&this.switchToCamera().catch(e=>{this.callbacks.onError&&this.callbacks.onError(this.createError(e))}),!n&&this.callbacks.onError&&this.callbacks.onError(this.createError(e))}async handleRecordingStop(){if(this.currentSourceType!==`screen`){this.cleanup();return}await Promise.resolve().then(async()=>{let e=this.streamManager.getStream();e&&(cx(e,this.getScreenShareDependencies()),Qb(e));let t=await this.getCameraStream();if(!t)throw Error(mx);this.streamManager.setMediaStream(t),this.currentSourceType=`camera`,this.callbacks.onSourceChange&&await this.callbacks.onSourceChange(this.currentSourceType),this.callbacks.onPreviewUpdate&&await this.callbacks.onPreviewUpdate(t)}).catch(e=>{throw this.callbacks.onError&&this.callbacks.onError(this.createError(e)),e}),this.cleanup()}cleanup(){this.screenShareStream&&=(cx(this.screenShareStream,this.getScreenShareDependencies()),this.stopScreenShareStreamTracks(this.screenShareStream),null);let e=this.streamManager.getStream();e&&cx(e,this.getScreenShareDependencies()),this.screenShareTrackEndHandler=null,this.originalCameraStream=null,this.setOriginalCameraConstraints(null)}setCallbacks(e){this.callbacks={...this.callbacks,...e}}};let gx=Object.freeze({width:{ideal:Xt.width||1920},height:{ideal:Xt.height||1080},frameRate:{ideal:Xt.fps||30}}),_x=Object.freeze({video:gx,audio:!0});Object.freeze({mimeType:`video/webm;codecs=vp9,opus`});let vx={NotReadableError:`camera.in-use`,NotFoundError:`camera.not-found`,NotAllowedError:`camera.permission-denied`,OverconstrainedError:`camera.overconstrained`,TimeoutError:`camera.timeout`},yx={NotReadableError:`audio.in-use`,NotFoundError:`audio.not-found`,NotAllowedError:`audio.permission-denied`,OverconstrainedError:`audio.overconstrained`,TimeoutError:`audio.timeout`};function bx(e){return e instanceof DOMException||typeof e==`object`&&e&&`name`in e&&typeof e.name==`string`?e.name:null}function xx(e){return i(e).toLowerCase()}function Sx(e,t){let n=xx(e),r=t===`camera`?`camera`:`audio`;return n.includes(`permission denied`)||n.includes(`permission dismissed`)||n.includes(`not allowed`)?`${r}.permission-denied`:n.includes(`requested device not found`)||n.includes(`device not found`)||n.includes(`no camera`)||n.includes(`no microphone`)?`${r}.not-found`:n.includes(`timeout starting`)||n.includes(`timed out`)||n.includes(`timeout`)?`${r}.timeout`:n.includes(`could not start video source`)||n.includes(`could not start audio source`)||n.includes(`device in use`)?`${r}.in-use`:null}function Cx(e){let t=Sx(e,`camera`);if(t!==null)return t;let n=bx(e);if(n!==null){let e=vx[n];if(e!==void 0)return e}return`camera.unknown`}function wx(e){let t=Sx(e,`audio`);if(t!==null)return t;let n=bx(e);if(n!==null){let e=yx[n];if(e!==void 0)return e}return`audio.unknown`}function Tx(e){let t=i(e),n=Error(t);return n.name=`CameraError`,n.code=Cx(e),n}function Ex(e){let t=i(e),n=Error(t);return n.name=`AudioError`,n.code=wx(e),n}function Dx(e){return bx(e)===`NotReadableError`}function Ox(e){return new Promise(t=>setTimeout(t,e))}var kx=class{constructor(e={},t={}){this.mediaStream=null,this.state=`idle`,this.eventListeners=new Map,this.selectedAudioDeviceId=null,this.selectedVideoDeviceId=null,this.audioStatus=`pending`,this.audioAcquisitionPromise=null,this.pendingAudioError=null,this.acquisitionGeneration=0,this.streamConfig={..._x,...e},this.waitMilliseconds=t.waitMilliseconds??Ox,this.audioRetryDelayMilliseconds=t.audioRetryDelayMilliseconds??300}getAudioStatus(){return this.audioStatus}isAudioReady(){return this.audioStatus===`acquired`}async waitForAudio(){if(this.audioStatus!==`acquired`&&(this.audioStatus===`failed`||(this.audioAcquisitionPromise&&await this.audioAcquisitionPromise,this.getAudioStatus()===`failed`)))throw this.pendingAudioError??Ex(null)}setAudioStatus(e){this.audioStatus!==e&&(this.audioStatus=e,this.emit(`audiostatuschange`,{status:e}))}emitAudioTelemetry(e){this.emit(`audiotelemetry`,{event:e})}getState(){return this.state}getStream(){return this.mediaStream}getAudioStreamForAnalysis(){return this.mediaStream&&this.mediaStream.getAudioTracks().length>0?this.mediaStream:null}isActive(){return this.state===`active`||this.state===`recording`}on(e,t){this.eventListeners.has(e)||this.eventListeners.set(e,new Set);let n=this.eventListeners.get(e);return n&&n.add(t),()=>{this.off(e,t)}}off(e,t){let n=this.eventListeners.get(e);n&&n.delete(t)}once(e,t){let n=(r=>{t(r),this.off(e,n)});return this.on(e,n)}emit(e,t){let n=this.eventListeners.get(e);if(n)for(let e of n)try{e(t)}catch{}}setState(e){if(this.state===e)return;let t=this.state;this.state=e,this.emit(`statechange`,{state:e,previousState:t})}setAudioDevice(e){this.selectedAudioDeviceId=e}setVideoDevice(e){this.selectedVideoDeviceId=e}getAudioDevice(){return this.selectedAudioDeviceId}getVideoDevice(){return this.selectedVideoDeviceId}async getAvailableDevices(){try{let e=await navigator.mediaDevices.enumerateDevices();return{audioinput:e.filter(e=>e.kind===`audioinput`),videoinput:e.filter(e=>e.kind===`videoinput`)}}catch(e){throw Error(`Failed to enumerate devices: ${i(e)}`)}}buildDeviceConstraints(e,t){return e?typeof t==`object`?{...t,deviceId:{exact:e}}:{deviceId:{exact:e}}:t}buildVideoConstraints(e){return this.buildDeviceConstraints(e,this.streamConfig.video)}buildAudioConstraints(e){return this.buildDeviceConstraints(e,this.streamConfig.audio)}async startStream(){if($.debug(`[StreamManager] startStream called`,{hasExistingStream:!!this.mediaStream,selectedVideoDeviceId:this.selectedVideoDeviceId,selectedAudioDeviceId:this.selectedAudioDeviceId}),this.mediaStream){let e=this.mediaStream.getVideoTracks()[0];if(this.selectedVideoDeviceId===null)if(e?.getSettings?.()?.deviceId)$.debug(`[StreamManager] Stopping existing stream to recreate`),this.stopStream();else return $.debug(`[StreamManager] Reusing existing stream`),this.mediaStream;if(e?.getSettings&&e.getSettings().deviceId===this.selectedVideoDeviceId)return $.debug(`[StreamManager] Existing stream matches device, reusing`),this.mediaStream;$.debug(`[StreamManager] Device changed, stopping existing stream`),this.stopStream()}this.setState(`starting`),$.debug(`[StreamManager] State set to 'starting'`);try{return this.mediaStream=await this.acquireVideoAndAudioStream(),$.info(`[StreamManager] Media stream obtained`,{streamId:this.mediaStream.id,videoTracks:this.mediaStream.getVideoTracks().length,audioTracks:this.mediaStream.getAudioTracks().length}),this.setState(`active`),$.debug(`[StreamManager] State set to 'active'`),$.debug(`[StreamManager] Emitting streamstart event`),this.emit(`streamstart`,{stream:this.mediaStream}),this.mediaStream}catch(e){if(e instanceof Error&&`code`in e&&(e.name===`CameraError`||e.name===`AudioError`))throw $.error(`[StreamManager] Failed to start stream`,e),this.setState(`error`),this.emit(`error`,{error:e}),e;let t=Tx(e);throw $.error(`[StreamManager] Failed to start stream`,t),this.setState(`error`),this.emit(`error`,{error:t}),t}}async acquireVideoAndAudioStream(){let e=Kb(),t=this.buildVideoConstraints(this.selectedVideoDeviceId),n=this.buildAudioConstraints(this.selectedAudioDeviceId);this.setAudioStatus(`pending`),this.pendingAudioError=null,$.debug(`[StreamManager] Attempting combined getUserMedia`,{selectedVideoDeviceId:this.selectedVideoDeviceId,selectedAudioDeviceId:this.selectedAudioDeviceId});try{let r=await e.getUserMedia({video:t,audio:n}),i=r.getVideoTracks().length>0,a=r.getAudioTracks().length>0;if(i&&a)return $.debug(`[StreamManager] Combined getUserMedia succeeded with video + audio`),this.setAudioStatus(`acquired`),r;$.warn(`[StreamManager] Combined getUserMedia returned incomplete stream`,{videoTracks:r.getVideoTracks().length,audioTracks:r.getAudioTracks().length}),this.stopStreamTracks(r)}catch(e){let t=bx(e),n=i(e);$.warn(`[StreamManager] Combined getUserMedia failed, falling back to separate acquisition`,{error:n,errorName:t}),this.emitAudioTelemetry({name:`audio.acquisition.fallback`,properties:{reason:`combined_getUserMedia_failed`,originalError:n,originalErrorName:t,selectedAudioDeviceId:this.selectedAudioDeviceId,selectedVideoDeviceId:this.selectedVideoDeviceId}})}let r;try{r=await e.getUserMedia({video:t,audio:!1}),$.debug(`[StreamManager] Video-only stream acquired for preview`)}catch(e){throw this.setAudioStatus(`failed`),Tx(e)}this.mediaStream=r,this.acquisitionGeneration++;let a=this.acquisitionGeneration;return this.audioAcquisitionPromise=this.acquireAudioInBackground(e,n,a),r}async acquireAudioInBackground(e,t,n){try{let r=await this.acquireAudioTrackWithRetry(e,t);if(!this.mediaStream||this.acquisitionGeneration!==n){$.debug(`[StreamManager] Audio acquired but stream was replaced/stopped, discarding track`,{generation:n,currentGeneration:this.acquisitionGeneration}),r.stop();return}this.mediaStream.addTrack(r),$.info(`[StreamManager] Audio track added to stream`,{audioTrackId:r.id,audioTrackLabel:r.label,totalAudioTracks:this.mediaStream.getAudioTracks().length}),this.setAudioStatus(`acquired`)}catch(e){if(this.acquisitionGeneration!==n)return;let t=e instanceof Error&&`code`in e?e:Ex(e);this.pendingAudioError=t,this.setAudioStatus(`failed`),$.error(`[StreamManager] Background audio acquisition failed`,t),this.emitAudioTelemetry({name:`audio.acquisition.failed`,properties:{errorCode:t.code,errorName:t.name,maxRetries:2,retryDelayMs:this.audioRetryDelayMilliseconds,selectedAudioDeviceId:this.selectedAudioDeviceId},error:t}),this.emit(`error`,{error:t})}finally{this.audioAcquisitionPromise=null}}resolveAudioConstraintsForAttempt(e,t){if(t!==2||typeof e!=`object`)return e;let{deviceId:n,...r}=e,i=Object.keys(r).length>0?r:!0;return $.debug(`[StreamManager] Audio retry with relaxed constraints (no deviceId)`,{attempt:t}),i}async acquireAudioTrackWithRetry(e,t){let n=null;for(let r=0;r<=2;r++)try{let n=this.resolveAudioConstraintsForAttempt(t,r),i=await e.getUserMedia({video:!1,audio:n}),a=i.getAudioTracks()[0];if(!a)throw this.stopStreamTracks(i),Error(`getUserMedia returned no audio tracks`);for(let e of i.getVideoTracks())e.stop();return $.debug(`[StreamManager] Audio track acquired`,{attempt:r,trackId:a.id,trackLabel:a.label}),r>0&&this.emitAudioTelemetry({name:`audio.acquisition.recovered`,properties:{successAttempt:r,totalAttempts:r+1,audioTrackLabel:a.label,usedRelaxedConstraints:r===2}}),a}catch(e){n=e;let t=i(e),a=bx(e),o=Dx(e);if($.warn(`[StreamManager] Audio acquisition failed`,{attempt:r,maxRetries:2,error:t,errorName:a,isRetriable:o}),this.emitAudioTelemetry({name:`audio.acquisition.retry`,properties:{attempt:r,maxRetries:2,errorMessage:t,errorName:a??`unknown`,isRetriable:o,usedRelaxedConstraints:r===2,willRetry:r<2&&o}}),!(r<2&&o))break;await this.waitMilliseconds(this.audioRetryDelayMilliseconds)}throw Ex(n)}stopStream(){if(this.mediaStream){for(let e of this.mediaStream.getTracks())e.stop();this.mediaStream=null}this.audioStatus=`pending`,this.pendingAudioError=null,this.audioAcquisitionPromise=null,this.acquisitionGeneration++,this.state!==`idle`&&(this.setState(`idle`),this.emit(`streamstop`,void 0))}stopStreamTracks(e){for(let t of e.getTracks())t.stop()}isTrackLive(e){return e!==void 0&&e.readyState===`live`}async tryReplaceTrack(e,t,n){let r=e.replaceTrack;if(typeof r!=`function`)return!1;try{await r.call(e,t),e.stop();for(let e of n.getTracks())e!==t&&e.stop();return t.stop(),!0}catch{return!1}}recreateStreamWithNewTrack(e,t,n){for(let t of n.getTracks())t!==e&&t.stop();let r=[e];this.isTrackLive(t)&&t&&r.push(t);let i=new MediaStream(r);if(this.mediaStream)for(let e of this.mediaStream.getTracks())e!==t&&e.stop();return i}async switchDeviceTrack(e,t,n){if(!this.mediaStream)throw Error(`No active stream to switch device`);let r=t===`video`?this.mediaStream.getVideoTracks()[0]:this.mediaStream.getAudioTracks()[0],i=t===`video`?this.mediaStream.getAudioTracks()[0]:this.mediaStream.getVideoTracks()[0];if(!r){let e=t===`video`?`video`:`audio`;throw Error(`No ${e} track in current stream`)}let a={[t]:this.buildDeviceConstraints(e,n)},o=await Kb().getUserMedia(a),s=t===`video`?o.getVideoTracks()[0]:o.getAudioTracks()[0];if(!s){this.stopStreamTracks(o);let e=t===`video`?`video`:`audio`;throw Error(`Failed to get new ${e} track`)}return await this.tryReplaceTrack(r,s,o)||(r.stop(),this.mediaStream=this.recreateStreamWithNewTrack(s,i,o)),t===`video`?(this.selectedVideoDeviceId=e,this.emit(`videosourcechange`,{stream:this.mediaStream})):this.selectedAudioDeviceId=e,this.mediaStream}switchVideoDevice(e){return this.switchDeviceTrack(e,`video`,this.streamConfig.video)}switchAudioDevice(e){return this.switchDeviceTrack(e,`audio`,this.streamConfig.audio)}setMediaStream(e){this.mediaStream=e}setAudioTracksEnabled(e){if(!this.mediaStream)return;let t=this.mediaStream.getAudioTracks();for(let n of t)n.enabled=e}destroy(){this.stopStream(),this.eventListeners.clear(),this.setState(`idle`)}};let Ax=`recording.stop-not-ready`,jx=`recording.finalize-not-ready`,Mx=`recording.finalize-timeout`,Nx=`recording.upload-in-progress`;function Px(e,t,n){let r=Error(`${t} [${e}]`);return r.code=e,r.isRecoverable=!0,n!==void 0&&(r.details=n),r}function Fx(e){return!(e instanceof Error)||Ix(e)?e:e.message===`Not currently recording`?Px(Ax,`Recording is not ready to stop`):e.message===`Processing not active`?Px(jx,`Recording is not ready to finalize`):e}function Ix(e){let t=e;return t.code===Ax||t.code===jx||t.code===Mx||t.code===Nx}let Lx=[`Bytes`,`KB`,`MB`,`GB`],Rx=1024;function zx(e){if(e===0)return`0 Bytes`;let t=Math.floor(Math.log(e)/Math.log(Rx));return`${Math.round(e/Rx**t*100)/100} ${Lx[t]}`}function Bx(e){let t=Math.floor(e/3600),n=Math.floor(e%3600/60),r=e%60;return t>0?`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`:`${n.toString().padStart(2,`0`)}:${r.toString().padStart(2,`0`)}`}let Vx={getCurrentTimestamp:()=>performance.now()};var Hx=class{constructor(e){this.recordingStartTime=0,this.totalPausedTime=0,this.pauseStartTime=null,this.intervals=[],this.currentIntervalStart=null,this.isTracking=!1,this.visibilityChangeHandler=this.handleVisibilityChange.bind(this),this.blurHandler=this.handleBlur.bind(this),this.focusHandler=this.handleFocus.bind(this);let t=e?.getCurrentTimestamp;t===void 0?this.getCurrentTimestamp=Vx.getCurrentTimestamp:this.getCurrentTimestamp=t}start(e){this.isTracking||(this.recordingStartTime=e,this.totalPausedTime=0,this.pauseStartTime=null,this.intervals=[],this.currentIntervalStart=null,this.isTracking=!0,typeof document<`u`&&document.addEventListener(`visibilitychange`,this.visibilityChangeHandler),typeof window<`u`&&(window.addEventListener(`blur`,this.blurHandler),window.addEventListener(`focus`,this.focusHandler)),this.checkInitialState())}pause(){!this.isTracking||this.pauseStartTime!==null||(this.pauseStartTime=this.getCurrentTimestamp(),this.endCurrentIntervalIfActive())}resume(){if(!this.isTracking||this.pauseStartTime===null)return;let e=this.getCurrentTimestamp()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}getIntervals(){return this.endCurrentIntervalIfActive(),this.intervals.map(e=>({start:this.normalizeTimestamp(e.start),end:this.normalizeTimestamp(e.end)}))}reset(){this.intervals=[],this.currentIntervalStart=null,this.totalPausedTime=0,this.pauseStartTime=null}cleanup(){this.isTracking=!1,this.endCurrentIntervalIfActive(),typeof document<`u`&&document.removeEventListener(`visibilitychange`,this.visibilityChangeHandler),typeof window<`u`&&(window.removeEventListener(`blur`,this.blurHandler),window.removeEventListener(`focus`,this.focusHandler)),this.reset()}checkInitialState(){typeof document>`u`||document.visibilityState===`hidden`&&this.startInterval()}handleVisibilityChange(){typeof document>`u`||(document.visibilityState===`hidden`?this.startInterval():this.endCurrentIntervalIfActive())}handleBlur(){this.startInterval()}handleFocus(){this.endCurrentIntervalIfActive()}startInterval(){this.currentIntervalStart!==null||!this.isTracking||this.pauseStartTime===null&&(this.currentIntervalStart=this.getCurrentTimestamp())}endCurrentIntervalIfActive(){if(this.currentIntervalStart===null)return;let e=this.getCurrentTimestamp(),t=this.currentIntervalStart;e>t&&this.intervals.push({start:t,end:e}),this.currentIntervalStart=null}normalizeTimestamp(e){let t=(e-this.recordingStartTime-this.totalPausedTime)/1e3;return Math.max(0,t)}};let Ux=1e3,Wx=1e3,Gx={route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`]},Kx={width:{ideal:854,max:854},height:{ideal:480,max:480},frameRate:{ideal:20,max:20}};function qx(e){let t=e.guidance?.message??`This browser or device cannot safely record video. Try a supported browser or upload an existing video file.`,n=Error(t);return n.name=`RecordingUnsupportedError`,n.code=`recording.unsupported-with-guidance`,n.isRecoverable=!0,n}let Jx={checkRecorderSupport:gb,getCurrentTimestamp:()=>performance.now()};var Yx=class{constructor(e,t){this.recordingStartTime=0,this.recordingTimer=null,this.pauseStartTime=null,this.totalPausedTime=0,this.streamProcessor=null,this.bufferSizeUpdateInterval=null,this.tabVisibilityTracker=null,this.visibilityChangeHandler=null,this.blurHandler=null,this.focusHandler=null,this.preResolvedSupportReport=null,this.activeRouteDecision=Gx,this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.streamManager=e;let n=t?.checkRecorderSupport,r;r=n===void 0?Jx.checkRecorderSupport:n;let i=t?.getCurrentTimestamp,a;a=i===void 0?Jx.getCurrentTimestamp:i,this.dependencies={checkRecorderSupport:r,getCurrentTimestamp:a}}setPreResolvedSupportReport(e){this.preResolvedSupportReport=e}isRecording(){return this.streamManager.getState()===`recording`}getStreamProcessor(){return this.streamProcessor}getAudioStreamForAnalysis(){if(this.streamProcessor){let e=this.streamProcessor.getAudioStreamForAnalysis();if(e)return e}return this.streamManager.getAudioStreamForAnalysis()}async startRecording(e,t,n,r,i){this.activeRouteDecision=i??Gx;let a=this.streamManager.getStream(),o=0;if(a!==null&&(o=a.getAudioTracks().length),$.debug(`[StreamRecordingState] startRecording called`,{hasMediaStream:!!a,isRecording:this.isRecording(),hasProcessor:!!e,audioTracks:o}),!a)throw Error(`Stream must be started before recording`);if(this.isRecording())return $.debug(`[StreamRecordingState] Already recording, returning`),Promise.resolve();if(!(a.getAudioTracks().length>0))throw $.error(`[StreamRecordingState] Cannot start recording without audio tracks`),Eb();if(this.activeRouteDecision.route===`unsupported-with-guidance`)throw qx(this.activeRouteDecision);if(this.activeRouteDecision.route===`local-webcodecs`){let e=t.watermark!==void 0,n;if(n=this.preResolvedSupportReport?.isSupported?this.preResolvedSupportReport:await this.dependencies.checkRecorderSupport({requiresAudio:!0,requiresWatermark:e}),!n.isSupported)throw Nt({missingCapabilities:n.missing,resolutionStage:`feature-preflight`})}this.streamProcessor=e,$.debug(`[StreamRecordingState] StreamProcessor assigned, setting callbacks`),e.setOnMuteStateChange(e=>{this.streamManager.emit(`audiomutetoggle`,{muted:e})}),e.setOnSourceChange(e=>{this.streamManager.emit(`videosourcechange`,{stream:e})}),this.bufferSizeUpdateInterval=window.setInterval(()=>{if(!this.streamProcessor)return;let e=this.streamProcessor.getBufferSize(),t=zx(e);this.streamManager.emit(`recordingbufferupdate`,{size:e,formatted:t})},Ux),this.resetRecordingState();let s;n===!0&&(s={enabled:!0,text:this.resolveTabVisibilityOverlayText(r),recordingStartTime:this.recordingStartTime}),$.debug(`[StreamRecordingState] Overlay config`,{enableTabVisibilityOverlay:n,hasOverlayText:!!r,overlayText:r,overlayConfig:s}),this.activeRouteDecision.route===`safe-capture-post-recording-transcode`?(await this.startSafeCaptureRecording(a,t),$.info(`[StreamRecordingState] MediaRecorder capture started for post-recording transcode`)):($.debug(`[StreamRecordingState] Starting processing`),await e.startProcessing(a,t,s),$.info(`[StreamRecordingState] Processing started and worker ready`)),n&&($.debug(`[StreamRecordingState] Setting up tab visibility tracking`,{recordingStartTime:this.recordingStartTime}),this.tabVisibilityTracker=new Hx,this.tabVisibilityTracker.start(this.recordingStartTime),this.setupVisibilityUpdates(e)),this.streamManager.setState(`recording`),this.streamManager.emit(`recordingstart`,{recorder:null}),this.startRecordingTimer()}async stopRecording(){let e=(this.dependencies.getCurrentTimestamp()-this.recordingStartTime-this.totalPausedTime)/Wx;if($.debug(`[StreamRecordingState] stopRecording called`,{hasStreamProcessor:!!this.streamProcessor,isRecording:this.isRecording(),recordingElapsedSeconds:e}),!(this.streamProcessor&&this.isRecording()))throw Px(Ax,`Recording is not ready to stop`,{hasStreamProcessor:!!this.streamProcessor,streamState:this.streamManager.getState()});this.streamManager.setState(`stopping`),this.clearRecordingTimer(),this.clearBufferSizeInterval(),this.resetPauseState(),this.cleanupVisibilityUpdates();let t=[];this.tabVisibilityTracker?(t=this.tabVisibilityTracker.getIntervals(),$.debug(`[StreamRecordingState] Tab visibility intervals collected`,{intervalsCount:t.length,intervals:t}),this.tabVisibilityTracker.cleanup(),this.tabVisibilityTracker=null):$.debug(`[StreamRecordingState] No tab visibility tracker was active`);let n;return this.activeRouteDecision.route===`safe-capture-post-recording-transcode`?($.debug(`[StreamRecordingState] Finalizing MediaRecorder capture`),n={blob:await this.stopSafeCaptureRecording()}):($.debug(`[StreamRecordingState] Finalizing stream processor`),n=await this.streamProcessor.finalize(),$.info(`[StreamRecordingState] Stream processor finalized`,{blobSize:n.blob.size,hasBlob:!!n.blob})),this.streamManager.setState(`active`),this.streamManager.emit(`recordingstop`,{blob:n.blob,mimeType:n.blob.type||`video/mp4`}),{blob:n.blob,tabVisibilityIntervals:t,recordingStats:n.recordingStats,encoderAcceleration:n.encoderAcceleration}}pauseRecording(){this.clearRecordingTimer(),this.pauseStartTime===null&&(this.pauseStartTime=this.dependencies.getCurrentTimestamp()),this.tabVisibilityTracker&&this.tabVisibilityTracker.pause(),this.streamProcessor&&this.isRecording()&&this.streamProcessor.pause()}resumeRecording(){if(this.pauseStartTime!==null){let e=this.dependencies.getCurrentTimestamp()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}this.tabVisibilityTracker&&this.tabVisibilityTracker.resume(),this.startRecordingTimer(),this.streamProcessor&&this.isRecording()&&this.streamProcessor.resume()}toggleMute(){Gb(this.streamProcessor,`StreamProcessor`).toggleMute()}muteAudio(){this.streamProcessor?(this.streamProcessor.isMutedState()||this.streamProcessor.toggleMute(),this.streamManager.setAudioTracksEnabled(!1)):this.streamManager.getStream()&&(this.streamManager.setAudioTracksEnabled(!1),this.streamManager.emit(`audiomutetoggle`,{muted:!0}))}unmuteAudio(){this.streamProcessor?(this.streamProcessor.isMutedState()&&this.streamProcessor.toggleMute(),this.streamManager.setAudioTracksEnabled(!0)):this.streamManager.getStream()&&(this.streamManager.setAudioTracksEnabled(!0),this.streamManager.emit(`audiomutetoggle`,{muted:!1}))}isMuted(){if(this.streamProcessor)return this.streamProcessor.isMutedState();let e=this.streamManager.getStream();if(e){let t=e.getAudioTracks();return t.length>0&&t.every(e=>!e.enabled)}return!1}async switchVideoSource(e){await Gb(this.streamProcessor,`StreamProcessor`).switchVideoSource(e)}getCurrentVideoSource(){return Wb(Gb(this.streamProcessor,`StreamProcessor`).getCurrentVideoSource(),`Current video source is not available`)}formatTimeElapsed(e){let t=Math.floor(e/60),n=Math.floor(e%60);return`${t.toString().padStart(2,`0`)}:${n.toString().padStart(2,`0`)}`}startRecordingTimer(){this.recordingTimer=window.setInterval(()=>{let e=(this.dependencies.getCurrentTimestamp()-this.recordingStartTime-this.totalPausedTime)/Wx,t=this.formatTimeElapsed(e);this.streamManager.emit(`recordingtimeupdate`,{elapsed:e,formatted:t})},Ux)}clearRecordingTimer(){this.recordingTimer!==null&&(clearInterval(this.recordingTimer),this.recordingTimer=null)}clearBufferSizeInterval(){this.bufferSizeUpdateInterval!==null&&(clearInterval(this.bufferSizeUpdateInterval),this.bufferSizeUpdateInterval=null)}resetRecordingState(){this.recordingStartTime=this.dependencies.getCurrentTimestamp(),this.totalPausedTime=0,this.pauseStartTime=null}async startSafeCaptureRecording(e,t){if(typeof MediaRecorder>`u`)throw qx({route:`unsupported-with-guidance`,reasonCodes:[`mediarecorder-unavailable`],guidance:{canRetry:!0,message:`This browser cannot safely record on this device. Try a supported browser or upload an existing video file.`}});await this.applySafeCaptureTrackConstraints(e),this.mediaRecorderChunks=[];let n=this.resolvePreferredSafeCaptureMimeType(t),r=n===void 0?void 0:{mimeType:n},i=new MediaRecorder(e,r);this.mediaRecorder=i,this.mediaRecorderStopPromise=new Promise((e,t)=>{this.mediaRecorderStopResolve=e,this.mediaRecorderStopReject=t}),i.ondataavailable=e=>{e.data.size>0&&this.mediaRecorderChunks.push(e.data)},i.onstop=()=>{let e=i.mimeType||this.resolveSafeCaptureMimeType(),t=new Blob(this.mediaRecorderChunks,{type:e});this.mediaRecorderStopResolve?.(t)},i.onerror=()=>{this.mediaRecorderStopReject?.(Error(`Browser recording failed before upload could start`))},i.start()}async applySafeCaptureTrackConstraints(e){let t=this.resolveSafeCaptureVideoConstraints();if(t===null)return;let n=e.getVideoTracks();await Promise.all(n.map(async e=>{try{await e.applyConstraints(t)}catch(e){$.warn(`[StreamRecordingState] Could not apply safe capture video constraints`,e)}}))}resolveSafeCaptureVideoConstraints(){let e=this.activeRouteDecision.reasonCodes;return e.includes(`insufficient-device-memory`)||e.includes(`insufficient-hardware-concurrency`)||e.includes(`encoding-capability-unsupported`)||e.includes(`encoding-not-smooth`)||e.includes(`encoding-not-power-efficient`)?Kx:null}async stopSafeCaptureRecording(){let e=this.mediaRecorder,t=this.mediaRecorderStopPromise;if(!(e&&t))throw Error(`Safe capture recorder was not started`);e.state!==`inactive`&&e.stop();try{return await t}finally{this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.activeRouteDecision=Gx}}resolveSafeCaptureMimeType(){return(this.streamManager.getStream()?.getVideoTracks().length??0)>0?`video/webm`:`audio/webm`}resolvePreferredSafeCaptureMimeType(e){return(e.format===`mp4`?[`video/mp4;codecs=avc1.42E01E,mp4a.40.2`,`video/mp4;codecs=avc1.42001f,mp4a.40.2`,`video/mp4`]:[`video/webm;codecs=vp8,opus`,`video/webm;codecs=vp9,opus`,`video/webm`]).find(e=>typeof MediaRecorder.isTypeSupported==`function`?MediaRecorder.isTypeSupported(e):!1)}resetPauseState(){this.totalPausedTime=0,this.pauseStartTime=null}resolveTabVisibilityOverlayText(e){return e===void 0||e.trim().length===0?`User in another tab`:e}setupVisibilityUpdates(e){if(typeof document>`u`||typeof window>`u`){$.warn(`[StreamRecordingState] Cannot setup visibility updates - document/window not available`);return}if(this.visibilityChangeHandler=()=>{if(typeof document>`u`)return;let t=document.visibilityState===`hidden`,n=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Visibility change`,{isHidden:t,timestamp:n,visibilityState:document.visibilityState}),e.updateTabVisibility(t,n)},this.blurHandler=()=>{let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Window blur`,{timestamp:t}),e.updateTabVisibility(!0,t)},this.focusHandler=()=>{let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Window focus`,{timestamp:t}),e.updateTabVisibility(!1,t)},document.addEventListener(`visibilitychange`,this.visibilityChangeHandler),window.addEventListener(`blur`,this.blurHandler),window.addEventListener(`focus`,this.focusHandler),document.visibilityState===`hidden`){let t=this.dependencies.getCurrentTimestamp();$.debug(`[StreamRecordingState] Initial state is hidden`,{timestamp:t}),e.updateTabVisibility(!0,t)}else $.debug(`[StreamRecordingState] Initial state is visible`)}cleanupVisibilityUpdates(){this.visibilityChangeHandler&&typeof document<`u`&&(document.removeEventListener(`visibilitychange`,this.visibilityChangeHandler),this.visibilityChangeHandler=null),this.blurHandler&&typeof window<`u`&&(window.removeEventListener(`blur`,this.blurHandler),this.blurHandler=null),this.focusHandler&&typeof window<`u`&&(window.removeEventListener(`focus`,this.focusHandler),this.focusHandler=null)}destroy(){this.mediaRecorder&&this.mediaRecorder.state!==`inactive`&&this.mediaRecorder.stop(),this.mediaRecorder=null,this.mediaRecorderChunks=[],this.mediaRecorderStopPromise=null,this.mediaRecorderStopResolve=null,this.mediaRecorderStopReject=null,this.activeRouteDecision=Gx,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.cleanupVisibilityUpdates(),this.tabVisibilityTracker&&=(this.tabVisibilityTracker.cleanup(),null),this.clearRecordingTimer(),this.clearBufferSizeInterval()}},Xx=class{constructor(e={}){this.streamManager=new kx(e),this.recordingState=new Yx(this.streamManager)}getState(){return this.streamManager.getState()}getStream(){return this.streamManager.getStream()}getAudioStreamForAnalysis(){return this.recordingState.getAudioStreamForAnalysis()}isRecording(){return this.recordingState.isRecording()}isActive(){return this.streamManager.isActive()}on(e,t){return this.streamManager.on(e,t)}off(e,t){this.streamManager.off(e,t)}once(e,t){return this.streamManager.once(e,t)}setAudioDevice(e){this.streamManager.setAudioDevice(e)}setVideoDevice(e){this.streamManager.setVideoDevice(e)}getAudioDevice(){return this.streamManager.getAudioDevice()}getVideoDevice(){return this.streamManager.getVideoDevice()}async getAvailableDevices(){return await this.streamManager.getAvailableDevices()}async startStream(){return await this.streamManager.startStream()}stopStream(){this.streamManager.stopStream()}switchVideoDevice(e){return this.streamManager.switchVideoDevice(e)}switchAudioDevice(e){return this.streamManager.switchAudioDevice(e)}async startRecording(e,t,n,r,i){return await this.recordingState.startRecording(e,t,n,r,i)}async stopRecording(){return await this.recordingState.stopRecording()}pauseRecording(){this.recordingState.pauseRecording()}resumeRecording(){this.recordingState.resumeRecording()}toggleMute(){this.recordingState.toggleMute()}muteAudio(){this.recordingState.muteAudio()}unmuteAudio(){this.recordingState.unmuteAudio()}isMuted(){return this.recordingState.isMuted()}async switchVideoSource(e){return await this.recordingState.switchVideoSource(e)}setMediaStream(e){this.streamManager.setMediaStream(e)}getCurrentVideoSource(){return this.recordingState.getCurrentVideoSource()}getAudioStatus(){return this.streamManager.getAudioStatus()}isAudioReady(){return this.streamManager.isAudioReady()}async waitForAudio(){return await this.streamManager.waitForAudio()}setPreResolvedSupportReport(e){this.recordingState.setPreResolvedSupportReport(e)}destroy(){this.recordingState.destroy(),this.streamManager.destroy()}};let Zx=new Set([`recording.audio-no-chunks`,`recording.audio-silent`,`recording.audio-track-ended`,`recording.no-audio-track`,`recording.no-audio-frames`,`recording.audio-zero-channels`,`recording.audio-invalid-sample-rate`]),Qx=new Set([`recording.codec-unsupported`,`recording.video-codec-unavailable`]),$x=new Set([`recording.post-recording-transcode-fallback`,`transcode.post-recording-fallback`,`route.post-recording-transcode-fallback`]),eS=new Set([`recording.no-video-frames`,`recording.frame-loss`,`recording.excessive-frame-errors`,`video.first-frame-timeout`]),tS=new Set([`recording.finalize-timeout`,`recording.finalize-timeout-low-resource`,`stop.pending-writes-timeout`]),nS=new Set([`recording.not-started`,`recording.state-race`,`recording.not-started-state-race`]),rS=new Set([`recording.unsupported-with-guidance`,`recording.unsupported-device`]);function iS(e){return e.startsWith(`recording.`)?Zx.has(e):!1}function aS(e){return e==null?null:i(e)}function oS(e){if(!(e&&typeof e==`object`&&`code`in e))return null;let t=e.code;return typeof t!=`string`||t.length===0?null:t}function sS(e){return e?Qx.has(e)?`recording.codec-unsupported`:$x.has(e)?`recording.post-recording-transcode-fallback`:eS.has(e)?`recording.no-video-frames`:tS.has(e)?`recording.finalize-timeout-low-resource`:nS.has(e)?`recording.not-started-state-race`:rS.has(e)?`recording.unsupported-device`:null:null}function cS(e,t){return t.some(t=>e.includes(t))}function lS(e){if(!e)return null;let t=e.toLowerCase();return cS(t,[`videoencoder.isconfigsupported`,`unknown codec`,`unsupported codec`,`no encodable video codec`,`video codec unavailable`])?`recording.codec-unsupported`:cS(t,[`input track cannot be ended`,`mediastreamtrackprocessor`,`video track ended`])?`recording.track-ended`:cS(t,[`no video frames`,`zero video frames`,`video.first-frame-timeout`,`failed to yield first frame`,`frame-loss`,`excessive frame errors`])?`recording.no-video-frames`:cS(t,[`finalize timeout`,`stop.pending-writes-timeout`])||t.includes(`pending writes`)&&t.includes(`timeout`)?`recording.finalize-timeout-low-resource`:cS(t,[`cannot finalize before starting`,`processing not active`,`worker not initialized`])?`recording.not-started-state-race`:cS(t,[`recording.unsupported-with-guidance`,`cannot safely record`,`recording is not supported in this browser context`])?`recording.unsupported-device`:null}function uS(e){return sS(e.errorCode??oS(e.error))||lS(e.errorMessage??aS(e.error))}let dS=Object.freeze({visible:!1,variant:`generic`,canRetry:!1,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1});function fS(e){let{errorCode:t,hasAudioFailed:n,error:r}=e,i=uS({errorCode:t,error:r});if(t===`browser.unsupported`)return{visible:!0,variant:`browser`,canRetry:!1,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!0,isPermissionDenied:!1};if(t&&iS(t))return{visible:!0,variant:`audio`,canRetry:!0,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:!1};if(i)return{visible:!0,variant:`generic`,canRetry:!0,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1,actionableCode:i,isRecordingPipelineError:!0};if(t?.startsWith(`camera.`)){let e=t===`camera.permission-denied`;return{visible:!0,variant:`camera`,canRetry:!e,isCameraError:!0,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:e}}if(n)return{visible:!0,variant:`audio`,canRetry:!0,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:!1};if(t?.startsWith(`audio.`)){let e=t===`audio.permission-denied`;return{visible:!0,variant:`audio`,canRetry:!e,isCameraError:!1,isAudioError:!0,isBrowserUnsupported:!1,isPermissionDenied:e}}return r?{visible:!0,variant:`generic`,canRetry:!0,isCameraError:!1,isAudioError:!1,isBrowserUnsupported:!1,isPermissionDenied:!1}:dS}let pS=`VIDTREO_INSTALLATION_ID`,mS=`unknown`,hS=/\[([a-z]+(?:[.-][a-z0-9]+)+)\]/i,gS=/\b([a-z]+(?:[.-][a-z0-9]+)+)\b/i;function _S(e){let t=e.storageProvider,n=t?.getItem(pS);if(n)return $.debug(`Using existing installation ID from storage`,{installationId:n}),n;let r=vS(e);return t?.setItem(pS,r),$.debug(`Created new installation ID`,{installationId:r}),r}function vS(e){let t=e.cryptoProvider;if(t?.getRandomValues){let e=new Uint8Array(16);return t.getRandomValues(e),Array.from(e).map(e=>e.toString(16).padStart(2,`0`)).join(``)}let n=e.nowProvider().toString(16),r=e.randomProvider();return`${n}-${Math.floor(r*1e9).toString(16)}`}let yS=[`sdk.init.started`,`sdk.init.succeeded`,`sdk.init.failed`],bS=[`stream.error`],xS={"sdk.init.started":`lifecycle`,"sdk.init.succeeded":`lifecycle`,"sdk.init.failed":`error`,"preview.start.succeeded":`interaction`,"preview.start.failed":`error`,"recording.start.requested":`interaction`,"recording.start.succeeded":`interaction`,"recording.start.failed":`error`,"recording.stop.requested":`interaction`,"recording.stop.succeeded":`interaction`,"recording.stop.failed":`error`,"recording.route.selected":`lifecycle`,"upload.started":`performance`,"upload.succeeded":`performance`,"upload.failed":`error`,"upload.route.selected":`lifecycle`,"transcode.route.selected":`lifecycle`,"source.switch.requested":`interaction`,"source.switch.succeeded":`interaction`,"source.switch.failed":`error`,"stream.error":`error`,"audio.acquisition.fallback":`lifecycle`,"audio.acquisition.retry":`lifecycle`,"audio.acquisition.recovered":`lifecycle`,"audio.acquisition.failed":`error`,"audio.warning":`performance`,"recording.audio-missing":`error`,"storage.init.failed":`error`,"storage.write.probe.failed":`error`};var SS=class{constructor(e,t){this.pendingEvents=[],this.flushTimeoutId=null,this.throttledEventTimestamps=new Map,this.retryCountMap=new Map,this.oneTimeEventCache=new Map,this.config=e,this.dependencies=t,this.installationId=_S(this.dependencies),$.debug(`TelemetryClient initialized`,{installationId:this.installationId,backendUrl:e.backendUrl})}triggerTelemetryEvent(e){try{let t=this.dependencies.nowProvider();if(this.shouldSkipEvent(e.name,t))return;let n=xS[e.name],r=this.buildError(e.error),i=this.buildFingerprint(),a=this.buildContext(),o=this.mergeProperties(this.buildBaseProperties(i),e),s={event:e.name,category:n,timestamp:t,installationId:this.installationId,fingerprint:i,sdkVersion:`1.6.3`,context:a,properties:o,error:r};this.markEventTracking(e.name,t),this.enqueueEvent(s)}catch(t){$.error(`Telemetry event failed`,{eventName:e.name,error:i(t)})}}enqueueEvent(e){try{if(this.pendingEvents=[...this.pendingEvents,e],this.pendingEvents.length>=10){this.flushQueue();return}this.scheduleFlush()}catch(e){$.error(`Failed to enqueue telemetry event`,{error:i(e)})}}scheduleFlush(){this.flushTimeoutId||=this.dependencies.setTimeoutFunction(()=>{this.flushQueue()},1e3)}flushQueue(){try{if(this.pendingEvents.length===0){this.clearFlushTimer();return}let e=this.pendingEvents;this.pendingEvents=[],this.clearFlushTimer();let t=this.buildRequestPayload(e);$.debug(`Telemetry batch flush`,{eventsCount:t.events.length}),this.sendPayload(t).then(()=>{this.clearRetryMetadata(e)}).catch(()=>{this.requeueFailedEvents(e)})}catch(e){$.error(`Failed to flush telemetry queue`,{error:i(e)})}}clearFlushTimer(){this.flushTimeoutId&&=(this.dependencies.clearTimeoutFunction(this.flushTimeoutId),null)}buildRequestPayload(e){return{events:[...e]}}shouldSkipEvent(e,t){if(this.isOneTimeEvent(e)){let t=this.getOneTimeCacheKey(e);if(this.oneTimeEventCache.get(t))return $.debug(`Telemetry event skipped (dedupe)`,{event:e}),!0}if(this.isThrottledEvent(e)){let n=this.throttledEventTimestamps.get(e);if(n!==void 0&&t-n<5e3)return $.debug(`Telemetry event skipped (throttle)`,{event:e,lastSent:n}),!0}return!1}markEventTracking(e,t){if(this.isOneTimeEvent(e)){let t=this.getOneTimeCacheKey(e);this.oneTimeEventCache.set(t,!0)}this.isThrottledEvent(e)&&(this.throttledEventTimestamps=this.updateNumberMap(this.throttledEventTimestamps,e,t))}updateNumberMap(e,t,n){let r=new Map(e);return r.set(t,n),r}getOneTimeCacheKey(e){return`${this.installationId}:${e}`}isOneTimeEvent(e){return yS.includes(e)}isThrottledEvent(e){return bS.includes(e)}buildBaseProperties(e){let t={},n=e.userAgent,r=this.getBrowserName(n);return r&&(t={...t,browserName:r}),t}mergeProperties(e,t){let n=this.sanitizeEventProperties(t.properties),r=this.buildErrorProperties(t.error);if(Object.keys(e).length===0&&Object.keys(r).length===0&&!n)return;let i={...e,...r,...n};if(Object.keys(i).length>0)return i}sanitizeEventProperties(e){if(!e)return;let t=this.sanitizeRouteDecision(e.routeDecision);return t===void 0?e:{...e,routeDecision:t}}sanitizeRouteDecision(e){if(!(e&&typeof e==`object`))return;let t=e,n={};typeof t.selectedRoute==`string`&&(n={...n,selectedRoute:t.selectedRoute}),Array.isArray(t.reasonCodes)&&(n={...n,reasonCodes:t.reasonCodes.filter(e=>typeof e==`string`)});let r=this.sanitizeCapabilitySummary(t.capabilitySummary);if(r!==void 0&&(n={...n,capabilitySummary:r}),this.isRouteSourceType(t.sourceType)&&(n={...n,sourceType:t.sourceType}),typeof t.clientTranscodeDeferred==`boolean`&&(n={...n,clientTranscodeDeferred:t.clientTranscodeDeferred}),Object.keys(n).length!==0)return n}sanitizeCapabilitySummary(e){if(!(e&&typeof e==`object`))return;let t={};for(let[n,r]of Object.entries(e))this.isSafeCapabilityValue(r)&&(t={...t,[n]:r});if(Object.keys(t).length!==0)return t}isSafeCapabilityValue(e){return e===null||typeof e==`boolean`||typeof e==`number`||typeof e==`string`?!0:Array.isArray(e)&&e.every(e=>typeof e==`string`)}isRouteSourceType(e){return e===`live-recorder`||e===`native-camera`||e===`file-upload`}buildErrorProperties(e){if(!e)return{};let t={},n=oS(e),r=i(e),a=n??this.extractNormalizedErrorCode(r),o=uS({errorCode:a,error:e,errorMessage:r});return a&&(t={...t,errorCode:a}),o&&(t={...t,rawErrorClassification:o,recordingPipelineErrorCode:o}),t}buildFingerprint(){let e=this.dependencies.navigatorProvider;if(!e)return{};let t={userAgent:e.userAgent,language:e.language,platform:e.platform};e.hardwareConcurrency&&(t={...t,hardwareConcurrency:e.hardwareConcurrency});let n=this.getDeviceMemory(e);return n!==null&&(t={...t,deviceMemory:n}),t}buildContext(){let e=this.config.pageUrl,t=this.config.referrerUrl;if(!e){let t=this.dependencies.locationProvider;t&&(e=t.href)}if(!t){let e=this.dependencies.documentProvider;if(e){let n=e.referrer;n&&(t=n)}}return{sessionId:this.config.sessionId,userId:this.config.userId,environmentId:this.config.environmentId,appVersion:this.config.appVersion,release:this.config.release,pageUrl:e,referrerUrl:t,sdkLocation:this.config.sdkLocation,clientLocation:this.config.clientLocation}}buildError(e){if(!e)return;let t=i(e),n={message:t},r=oS(e),a=r??this.extractNormalizedErrorCode(t);return a&&(n.normalizedCode=a),r?n.code=r:a&&(n.code=a),e instanceof Error&&(!n.code&&e.name&&(n.code=e.name),e.stack&&(n.stack=e.stack)),n}extractNormalizedErrorCode(e){let t=e.match(hS);if(t?.[1])return t[1];let n=e.match(gS);return n?.[1]?n[1]:null}getBrowserName(e){return e?e.includes(`Edg`)?`edge`:e.includes(`Chrome`)?`chrome`:e.includes(`Firefox`)?`firefox`:e.includes(`Safari`)?`safari`:mS:mS}getDeviceMemory(e){let t=e;return t.deviceMemory?t.deviceMemory:null}async sendPayload(e){let t=this.buildTelemetryEndpoint(),n={method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify(e)};$.debug(`Sending telemetry to endpoint`,{endpoint:t,payloadSize:JSON.stringify(e).length,hasApiKey:!!this.config.apiKey});let r=await this.dependencies.fetchFunction(t,n).catch(e=>{throw $.error(`Failed to send telemetry`,{endpoint:t,error:i(e)}),e});if(r&&!r.ok)throw $.error(`Telemetry endpoint returned error`,{status:r.status}),Error(`Telemetry HTTP ${r.status}`)}requeueFailedEvents(e){let t=e.filter(e=>(this.retryCountMap.get(e)??0)<3);for(let e of t){let t=this.retryCountMap.get(e)??0;this.retryCountMap.set(e,t+1)}let n=e.length-t.length;if(n>0){let r=e.filter(e=>!t.includes(e));this.clearRetryMetadata(r),$.warn(`Dropped ${n} telemetry events after max retries`)}if(t.length===0)return;let r=this.pendingEvents.length,i=Math.max(0,100-r);this.pendingEvents=[...t.slice(0,i),...this.pendingEvents],this.scheduleFlush()}clearRetryMetadata(e){for(let t of e)this.retryCountMap.delete(t)}buildTelemetryEndpoint(){return this.config.endpoint?this.config.endpoint:`${this.config.backendUrl}/api/v1/telemetry`}};function CS(){let e=typeof window<`u`,t=typeof document<`u`,n=fetch,r=null,i=null,a=null,o=null,s=null,c=setTimeout,l=clearTimeout;return e&&(n=window.fetch.bind(window),r=window.crypto,i=window.localStorage,a=window.navigator,o=window.location,c=window.setTimeout.bind(window),l=window.clearTimeout.bind(window)),t&&(s=document),{fetchFunction:n,cryptoProvider:r,storageProvider:i,navigatorProvider:a,locationProvider:o,documentProvider:s,nowProvider:()=>Date.now(),randomProvider:()=>Math.random(),setTimeoutFunction:c,clearTimeoutFunction:l}}function wS(e,t,n){return new SS({apiKey:e,backendUrl:t,endpoint:n?.endpoint,sessionId:n?.sessionId,userId:n?.userId,environmentId:n?.environmentId,appVersion:n?.appVersion,release:n?.release,pageUrl:n?.pageUrl,referrerUrl:n?.referrerUrl,sdkLocation:n?.sdkLocation,clientLocation:n?.clientLocation},CS())}var TS=class{constructor(e,t){this.isProcessing=!1,this.hasRecoveredStaleUploads=!1,this.retryTimeoutId=null,this.callbacks={},this.storageService=e,this.uploadService=t,this.networkOnlineHandler=()=>{this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`network-recovery`,Error(t))})},window.addEventListener(`online`,this.networkOnlineHandler),this.processingIntervalId=window.setInterval(()=>{this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`processing-loop`,Error(t))})},5e3)}destroy(){this.clearTimer(this.processingIntervalId,clearInterval),this.clearTimer(this.retryTimeoutId,clearTimeout),window.removeEventListener(`online`,this.networkOnlineHandler)}setCallbacks(e){this.callbacks=e}async queueUpload(e){let t=await this.storageService.savePendingUpload(e);return this.processQueue().catch(e=>{let n=i(e);this.callbacks.onUploadError?.(t,Error(n))}),t}async processQueue(){if(!this.isProcessing){this.isProcessing=!0;try{if(!this.storageService.isInitialized())throw Error(`Database not initialized`);if(!this.hasRecoveredStaleUploads){let e=await this.storageService.getPendingUploads(`uploading`);await Promise.all(e.map(e=>this.storageService.updateUploadStatus(e.id,{status:`pending`}))),this.hasRecoveredStaleUploads=!0}let e=await this.storageService.getPendingUploads(`pending`);if(e.length>0){let t=this.getOldestUpload(e);await this.processUpload(t),this.isProcessing=!1;return}let t=(await this.storageService.getPendingUploads(`failed`)).filter(e=>e.retryCount<10);if(t.length>0){let e=this.getOldestFailedUpload(t),n=this.calculateRetryDelay(e.retryCount),r=Date.now()-e.updatedAt;if(r>=n)await this.storageService.updateUploadStatus(e.id,{status:`pending`,retryCount:e.retryCount}),await this.processUpload(e);else{let e=n-r;this.scheduleRetry(e)}}this.isProcessing=!1}catch(e){throw this.isProcessing=!1,Error(`Error processing upload queue: ${i(e)}`)}}}getPendingUploads(){return this.storageService.getPendingUploads()}async getStats(){let e=await this.storageService.getPendingUploads(),t={pending:0,uploading:0,failed:0,total:e.length};for(let n of e)n.status===`pending`?t.pending+=1:n.status===`uploading`?t.uploading+=1:n.status===`failed`&&(t.failed+=1);return t}getOldestUpload(e){if(e.length===0)throw Error(`Cannot get oldest upload from empty array`);return e.sort((e,t)=>e.createdAt-t.createdAt)[0]}getOldestFailedUpload(e){if(e.length===0)throw Error(`Cannot get oldest failed upload from empty array`);return e.sort((e,t)=>e.updatedAt-t.updatedAt)[0]}async processUpload(e){try{await this.storageService.updateUploadStatus(e.id,{status:`uploading`});let t=await this.uploadService.uploadVideo(e.blob,{apiKey:e.apiKey,backendUrl:e.backendUrl,filename:e.filename,mimeType:e.mimeType,metadata:e.metadata,userMetadata:e.userMetadata,onProgress:t=>{this.callbacks.onUploadProgress?.(e.id,t)}});await this.storageService.deleteUpload(e.id),this.callbacks.onUploadComplete?.(e.id,t)}catch(t){let n=i(t),r=e.retryCount+1;if(await this.storageService.updateUploadStatus(e.id,{status:`failed`,retryCount:r,lastError:n}),r>=10)this.callbacks.onUploadError?.(e.id,Error(`Upload failed after 10 attempts: ${n}`));else{let e=this.calculateRetryDelay(r);this.scheduleRetry(e)}}}calculateRetryDelay(e){let t=2e3*1.5**(e-1);return Math.min(t,3e5)}scheduleRetry(e){this.clearTimer(this.retryTimeoutId,clearTimeout),this.retryTimeoutId=window.setTimeout(()=>{this.retryTimeoutId=null,this.processQueue().catch(e=>{let t=i(e);this.callbacks.onUploadError?.(`scheduled-retry`,Error(t))})},e)}clearTimer(e,t){e!==null&&t(e)}},ES=class{uploadVideo(e,t){if(!t.filename)throw Error(`Filename is required`);if(!e.type||e.type.trim()===``)throw Error(`Blob type is required`);return this.uploadVideoFile(e,t)}uploadVideoFile(e,t){return new Promise((n,r)=>{let i=new XMLHttpRequest,a=this.createUploadBlob(e,t.mimeType);if(t.onProgress){let e=t.onProgress;i.upload.addEventListener(`progress`,t=>{t.lengthComputable&&e(t.loaded/t.total)})}i.addEventListener(`load`,()=>{if(i.status>=200&&i.status<=299){this.parseSuccessResponse(i,n,r);return}this.parseErrorResponse(i,r)}),i.addEventListener(`error`,()=>{r(Error(`Network error during upload`))}),i.addEventListener(`abort`,()=>{r(Error(`Upload was aborted`))});let o=`${t.backendUrl}/api/v1/videos/upload`;i.open(`POST`,o),i.setRequestHeader(`Authorization`,`Bearer ${t.apiKey}`);let s=new FormData;s.append(`file`,a,t.filename);let c={filename:t.filename,mimeType:a.type};t.userMetadata&&(c.userMetadata=t.userMetadata),s.append(`metadata`,JSON.stringify(c)),i.send(s)})}createUploadBlob(e,t){let n=this.resolveUploadMimeType(e,t);return n===e.type?e:new Blob([e],{type:n})}resolveUploadMimeType(e,t){return t&&t.trim().length>0?this.normalizeMimeType(t):this.normalizeMimeType(e.type)}normalizeMimeType(e){let[t]=e.split(`;`);return t===void 0?e.trim().toLowerCase():t.trim().toLowerCase()}parseSuccessResponse(e,t,n){let r=this.safeParseJsonFromXhr(e);if(!r){n(Error(`Failed to parse upload response: invalid JSON`));return}let i=r.data;if(!i){n(Error(`Failed to parse upload response: missing data`));return}t({id:i.id,publicId:i.publicId,filename:i.filename,fileSize:i.fileSize,mimeType:i.mimeType,duration:i.duration,status:i.status,uploadUrl:i.uploadUrl,createdAt:i.createdAt})}parseErrorResponse(e,t){let n=this.safeParseJsonFromXhr(e);if(n&&typeof n==`object`&&`error`in n&&typeof n.error==`string`){t(Error(n.error));return}t(Error(`Upload failed: ${e.status} ${e.statusText}`))}safeParseJsonFromXhr(e){if(!e.responseText||e.responseText.trim()===``)return null;let t=e.responseText.trim();if(!(t.startsWith(`{`)&&t.endsWith(`}`))||t.length<2)return null;let n=JSON.parse(e.responseText);return typeof n==`object`&&n?n:null}};let DS=e=>{},OS=e=>{},kS=e=>{},AS=()=>{},jS=e=>{},MS=(e,t)=>{},NS=e=>{},PS=e=>{},FS=e=>{},IS=()=>{},LS=e=>{};function RS(e){let t={onProgress:DS,onSuccess:OS,onError:kS,onClearStatus:AS};return e.upload&&(t=e.upload),t}let zS=e=>{};function BS(e){let t=LS;return e.onStorageCleanupError&&(t=e.onStorageCleanupError),t}function VS(e){let t=zS;return e.onStorageWriteError&&(t=e.onStorageWriteError),t}function HS(e,t){let n=e.recording,r=jS;n?.onStateChange&&(r=n.onStateChange);let i=MS;n?.onCountdownUpdate&&(i=n.onCountdownUpdate);let a=NS;n?.onTimerUpdate&&(a=n.onTimerUpdate);let o=PS;n?.onError&&(o=n.onError);let s=FS;n?.onRecordingComplete&&(s=n.onRecordingComplete);let c=IS;return n?.onClearUploadStatus&&(c=n.onClearUploadStatus),{onStateChange:r,onCountdownUpdate:i,onTimerUpdate:a,onError:o,onRecordingComplete:s,onClearUploadStatus:c,onStopAudioTracking:t.stopAudioTracking,onGetConfig:t.getConfig,...t.getRouteDecision&&{onGetRouteDecision:t.getRouteDecision},...t.onAudioWarning&&{onAudioWarning:t.onAudioWarning},...t.onAudioRecovered&&{onAudioRecovered:t.onAudioRecovered},...t.onTranscodingProgress&&{onTranscodingProgress:t.onTranscodingProgress}}}function US(e,t){let n=e.sourceSwitch;return{onSourceChange:n?.onSourceChange,onPreviewUpdate:n?.onPreviewUpdate,onError:n?.onError,onTransitionStart:n?.onTransitionStart,onTransitionEnd:n?.onTransitionEnd,onScreenSelectionStart:()=>{t.isRecording()&&t.updateSourceType(!0)},onScreenSelectionEnd:()=>{t.isRecording()&&t.updateSourceType(!1)},getSelectedCameraDeviceId:t.getSelectedCameraDeviceId,getSelectedMicDeviceId:t.getSelectedMicDeviceId}}var WS=class{constructor(e={}){this.totalChunks=0,this.nonSilentChunks=0,this.lowSignalChunks=0,this.peak=0,this.rms=0,this.inputPeak=0,this.inputRms=0,this.startedAtMs=null,this.lastChunkTimestampMs=null,this.silentStartedAtMs=null,this.lowSignalStartedAtMs=null,this.mutedSpeechStartedAtMs=null,this.mutedStartedAtMs=null,this.mutedDurationMs=0,this.currentMuted=!1,this.hasHealthySignal=!1,this.silenceThreshold=this.resolveNumber(e.silenceThreshold,.001),this.lowSignalThreshold=this.resolveNumber(e.lowSignalThreshold,.05),this.mutedSpeechThreshold=this.resolveNumber(e.mutedSpeechThreshold,this.silenceThreshold),this.silentWarningDurationMs=this.resolveNumber(e.silentWarningDurationMs,2e3),this.lowSignalWarningDurationMs=this.resolveNumber(e.lowSignalWarningDurationMs,2e3),this.mutedSpeechWarningDurationMs=this.resolveNumber(e.mutedSpeechWarningDurationMs,1e4),this.noChunkWarningDurationMs=this.resolveNumber(e.noChunkWarningDurationMs,2e3)}recordChunk(e){this.markStarted(e.timestampMs),this.trackMuteState(e.timestampMs,e.isMuted);let t=this.calculateChunkStats(e.samples),n=this.resolveOptionalNumber(e.inputPeak,t.peak),r=this.resolveOptionalNumber(e.inputRms,t.rms),i=t.peak<=this.silenceThreshold,a=!e.isMuted&&t.peak>this.silenceThreshold&&t.peak<this.lowSignalThreshold,o=e.isMuted&&n>this.mutedSpeechThreshold;return this.totalChunks+=1,this.peak=t.peak,this.rms=t.rms,this.inputPeak=n,this.inputRms=r,i||(this.nonSilentChunks+=1,this.silentStartedAtMs=null),a&&(this.lowSignalChunks+=1),t.peak>=this.lowSignalThreshold&&(this.hasHealthySignal=!0),i&&this.silentStartedAtMs===null&&(this.silentStartedAtMs=e.timestampMs),a&&this.lowSignalStartedAtMs===null&&(this.lowSignalStartedAtMs=e.timestampMs),a||(this.lowSignalStartedAtMs=null),o&&this.mutedSpeechStartedAtMs===null&&(this.mutedSpeechStartedAtMs=e.timestampMs),o||(this.mutedSpeechStartedAtMs=null),this.lastChunkTimestampMs=e.timestampMs,this.snapshot(e.timestampMs,e.isMuted)}inspect(e,t){return this.markStarted(e),this.trackMuteState(e,t),this.snapshot(e,t)}reset(){this.totalChunks=0,this.nonSilentChunks=0,this.lowSignalChunks=0,this.peak=0,this.rms=0,this.inputPeak=0,this.inputRms=0,this.startedAtMs=null,this.lastChunkTimestampMs=null,this.silentStartedAtMs=null,this.lowSignalStartedAtMs=null,this.mutedSpeechStartedAtMs=null,this.mutedStartedAtMs=null,this.mutedDurationMs=0,this.currentMuted=!1,this.hasHealthySignal=!1}snapshot(e,t){let n=this.resolveSilentDuration(e),r=this.resolveLowSignalDuration(e),i=this.resolveMutedSpeechDuration(e),a=this.resolveNoChunkDuration(e),o=this.resolveMutedDuration(e,t);return{classification:this.classify(t,n,r,i,a),totalChunks:this.totalChunks,nonSilentChunks:this.nonSilentChunks,lowSignalChunks:this.lowSignalChunks,peak:this.peak,rms:this.rms,inputPeak:this.inputPeak,inputRms:this.inputRms,consecutiveSilentDurationMs:n,consecutiveLowSignalDurationMs:r,consecutiveMutedSpeechDurationMs:i,noChunkDurationMs:a,mutedDurationMs:o,hasHealthySignal:this.hasHealthySignal}}getFinalSnapshot(e,t){let n=this.resolveMutedDuration(e,t);return{totalChunks:this.totalChunks,nonSilentChunks:this.nonSilentChunks,lowSignalChunks:this.lowSignalChunks,mutedDurationMs:n,hasHealthySignal:this.hasHealthySignal}}classify(e,t,n,r,i){return this.totalChunks===0&&i>=this.noChunkWarningDurationMs?`no-chunks`:e&&r>=this.mutedSpeechWarningDurationMs?`speaking-while-muted`:e&&t>=this.silentWarningDurationMs?`muted-silence-expected`:!e&&t>=this.silentWarningDurationMs?`silent-while-unmuted`:!e&&this.nonSilentChunks>0&&this.peak<this.lowSignalThreshold&&n>=this.lowSignalWarningDurationMs?`low-signal`:`healthy`}calculateChunkStats(e){if(e.length===0)return{peak:0,rms:0};let t=0,n=0;for(let r of e){let e=Math.abs(r);t=Math.max(t,e),n+=r*r}return{peak:t,rms:Math.sqrt(n/e.length)}}resolveSilentDuration(e){return this.silentStartedAtMs===null?0:e-this.silentStartedAtMs}resolveLowSignalDuration(e){return this.lowSignalStartedAtMs===null?0:e-this.lowSignalStartedAtMs}resolveMutedSpeechDuration(e){return this.mutedSpeechStartedAtMs===null?0:e-this.mutedSpeechStartedAtMs}resolveNoChunkDuration(e){return this.lastChunkTimestampMs===null?this.startedAtMs===null?0:e-this.startedAtMs:e-this.lastChunkTimestampMs}markStarted(e){this.startedAtMs===null&&(this.startedAtMs=e)}trackMuteState(e,t){if(t!==this.currentMuted){if(t){this.mutedStartedAtMs=e,this.currentMuted=!0;return}this.mutedStartedAtMs!==null&&(this.mutedDurationMs+=e-this.mutedStartedAtMs),this.mutedStartedAtMs=null,this.currentMuted=!1}}resolveMutedDuration(e,t){return t&&this.mutedStartedAtMs!==null?this.mutedDurationMs+e-this.mutedStartedAtMs:this.mutedDurationMs}resolveNumber(e,t){if(e===void 0)return t;if(!Number.isFinite(e)||e<0)throw Error(`Audio health monitor option must be a non-negative number`);return e}resolveOptionalNumber(e,t){return e===void 0||!Number.isFinite(e)||e<0?t:e}};function GS(e){let t=e.getVideoTracks();if(t.length===0)return!1;let n=t[0];return`displaySurface`in n.getSettings()||n.label.toLowerCase().includes(`screen`)||n.label.toLowerCase().includes(`display`)}Sv();function KS(e){if(e!==void 0)return typeof e==`number`?e:e===cf?`low`:e===lf?`medium`:e===uf?`high`:e===df?`very-high`:`high`}function qS(e){let t=null,n=0;function r(){if(!t){let n=e.createBlob();t=e.createObjectUrl(n)}return n+=1,t}function i(){n!==0&&(--n,n===0&&(t&&=(e.revokeObjectUrl(t),null)))}return{acquire:r,release:i}}let JS=`vidtreo-audio-worklet`,YS=`audioChunk`,XS=`setMuted`,ZS=`setPaused`,QS=`shutdown`,$S=`
|
|
141
|
+
const AUDIO_WORKLET_MESSAGE_TYPE_AUDIO_CHUNK = "${YS}";
|
|
142
|
+
const AUDIO_WORKLET_MESSAGE_TYPE_SET_MUTED = "${XS}";
|
|
143
|
+
const AUDIO_WORKLET_MESSAGE_TYPE_SET_PAUSED = "${ZS}";
|
|
144
|
+
const AUDIO_WORKLET_MESSAGE_TYPE_SHUTDOWN = "${QS}";
|
|
145
145
|
|
|
146
146
|
class VidtreoAudioWorkletProcessor extends AudioWorkletProcessor {
|
|
147
147
|
constructor() {
|
|
@@ -239,8 +239,8 @@ class VidtreoAudioWorkletProcessor extends AudioWorkletProcessor {
|
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
241
|
|
|
242
|
-
registerProcessor("${
|
|
243
|
-
`;function JS(){if(typeof Blob>`u`||typeof URL>`u`)throw Error(`Blob and URL APIs are required for audio worklet loading`);return new Blob([qS],{type:`application/javascript`})}let YS=VS({createBlob:JS,createObjectUrl:e=>URL.createObjectURL(e),revokeObjectUrl:e=>{URL.revokeObjectURL(e)}});var XS=class{constructor(){this.audioContext=null,this.audioWorkletNode=null,this.audioSourceNode=null,this.audioDestinationNode=null,this.audioConfig=null,this.onAudioChunk=null,this.isMuted=!1,this.isPaused=!1,this.isProcessing=!1,this.hasAudioWorkletUrlLease=!1}async initialize(e,t){if(!e)throw Error(`Audio stream is required`);if(e.getAudioTracks().length===0)throw Error(`Audio stream has no tracks`);let n=a();if(!n)throw Error(`AudioContext is not supported in this browser`);this.onAudioChunk=t;try{let t=YS.acquire();this.hasAudioWorkletUrlLease=!0;let r=new n;this.audioContext=r,r.resume().catch(e=>{$.warn(`[AudioWorkletController] Failed to resume AudioContext`,i(e))}),await r.audioWorklet.addModule(t).catch(e=>{let t=i(e);throw Error(`Failed to load AudioWorklet module: ${t}`)});let a=new AudioWorkletNode(r,HS,{numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1]});a.port.onmessage=this.handleWorkletMessage.bind(this),this.audioWorkletNode=a,this.audioSourceNode=r.createMediaStreamSource(e),this.audioDestinationNode=r.createGain(),this.audioDestinationNode.gain.value=0;let o={sampleRate:r.sampleRate,numberOfChannels:1,format:`f32-planar`};return this.audioConfig=o,this.setMuted(this.isMuted),this.setPaused(this.isPaused),o}catch(e){throw await this.cleanupAfterInitializeFailure(),this.normalizeInitializationError(e)}}async startProcessing(){if(!this.isProcessing){if(!this.audioContext)throw Error(`AudioContext is not initialized`);if(!this.audioWorkletNode)throw Error(`AudioWorklet node is not initialized`);if(!this.audioSourceNode)throw Error(`Audio source node is not initialized`);if(!this.audioDestinationNode)throw Error(`AudioWorklet graph is not initialized`);this.audioSourceNode.connect(this.audioWorkletNode),this.audioWorkletNode.connect(this.audioDestinationNode),this.audioDestinationNode.connect(this.audioContext.destination),await this.audioContext.resume(),this.isProcessing=!0}}setMuted(e){this.isMuted=e,this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:WS,isMuted:e})}setPaused(e){this.isPaused=e,this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:GS,isPaused:e})}close(){this.disconnectAudioNodes(!0),this.closeAudioContext(),this.audioConfig=null,this.onAudioChunk=null,this.isMuted=!1,this.isPaused=!1,this.isProcessing=!1,this.releaseAudioWorkletUrlLease()}getConfig(){return this.audioConfig}handleWorkletMessage(e){let t=e.data;if(!t||t.type!==US)return;let n=this.parseAudioBuffer(t.data);if(!n||!this.onAudioChunk)return;let r={data:n,frames:t.frames,numberOfChannels:t.numberOfChannels,sampleRate:t.sampleRate,timestamp:t.timestamp,inputPeak:t.inputPeak,inputRms:t.inputRms};this.onAudioChunk(r)}parseAudioBuffer(e){return e instanceof Float32Array?e:e instanceof ArrayBuffer?new Float32Array(e):null}async cleanupAfterInitializeFailure(){this.disconnectAudioNodes(!1),await this.closeAudioContext(),this.audioConfig=null,this.onAudioChunk=null,this.releaseAudioWorkletUrlLease()}normalizeInitializationError(e){if(e instanceof Error)return e;let t=i(e);return Error(t)}disconnectAudioNodes(e){this.audioWorkletNode&&=(e&&this.audioWorkletNode.port.postMessage({type:KS}),this.audioWorkletNode.disconnect(),null),this.audioSourceNode&&=(this.audioSourceNode.disconnect(),null),this.audioDestinationNode&&=(this.audioDestinationNode.disconnect(),null)}closeAudioContext(){if(!this.audioContext)return Promise.resolve();let e=this.audioContext;return this.audioContext=null,e.close().catch(e=>{$.warn(`[AudioWorkletController] Failed to close AudioContext`,i(e))})}releaseAudioWorkletUrlLease(){this.hasAudioWorkletUrlLease&&=(YS.release(),!1)}},ZS=class{constructor(e){this.audioWorkletController=null,this.audioWorkletConfig=null,this.onChunk=e.onChunk;let t=()=>new XS;e.createController&&(t=e.createController),this.createController=t}async prepareAudioConfig(e){if(!e)return this.audioWorkletConfig=null,null;this.audioWorkletController||=this.createController();let t=new MediaStream([e]);return this.audioWorkletConfig=await this.audioWorkletController.initialize(t,e=>this.onChunk(e)).catch(e=>{throw this.stop(),e}),this.createWorkerAudioConfig(this.audioWorkletConfig)}async startProcessing(){this.audioWorkletController&&await this.audioWorkletController.startProcessing()}stop(){this.audioWorkletController&&=(this.audioWorkletController.close(),null),this.audioWorkletConfig=null}setMuted(e){this.audioWorkletController&&this.audioWorkletController.setMuted(e)}setPaused(e){this.audioWorkletController&&this.audioWorkletController.setPaused(e)}createWorkerAudioConfig(e){return e?{sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,format:e.format}:null}};let QS=`recording.video-track-ended`;function $S(e={}){let t=Error(`Video track ended before recording could start [${QS}]`);return t.code=QS,t.isRecoverable=!0,t.details=e,t}function eC(e,t={}){if(e.readyState!==`live`)throw $S({...t,trackId:e.id,readyState:e.readyState})}let tC=`video.first-frame-timeout`,nC={createVideoStreamFromTrack:e=>typeof MediaStreamTrackProcessor>`u`?null:(eC(e,{stage:`preflight-stream-create`}),new MediaStreamTrackProcessor({track:e}).readable),setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),performanceNow:()=>performance.now()};async function rC(e,t=3e3,n={}){let r={createVideoStreamFromTrack:n.createVideoStreamFromTrack??nC.createVideoStreamFromTrack,setTimeout:n.setTimeout??nC.setTimeout,clearTimeout:n.clearTimeout??nC.clearTimeout,performanceNow:n.performanceNow??nC.performanceNow},i=r.performanceNow();eC(e,{stage:`preflight-original-track`});let a=iC(e);eC(a,{stage:`preflight-cloned-track`});let o=r.createVideoStreamFromTrack(a);if(!o)return aC(a,e),$.debug(`[VideoFramePreflight] Cannot create stream from track, skipping preflight`),{elapsedMs:r.performanceNow()-i};let s=await oC(o,t,r),c=r.performanceNow()-i;if($.debug(`[VideoFramePreflight] Completed`,{elapsedMs:c,timedOut:s===null}),s===null){await o.cancel().catch(()=>void 0),aC(a,e);let n=Error(`Video stream failed to yield first frame within ${t}ms`);throw n.code=tC,n.elapsedMs=c,n}return s.frame.close(),s.reader.releaseLock(),o.cancel().catch(()=>void 0),aC(a,e),{elapsedMs:c}}function iC(e){return typeof e.clone==`function`?e.clone():e}function aC(e,t){e!==t&&e.stop()}async function oC(e,t,n){let r=e.getReader(),i,a=!1,o=()=>a?!1:(a=!0,i!==void 0&&n.clearTimeout(i),!0),s=new Promise(e=>{i=n.setTimeout(()=>{o()&&e(null)},t)}),c=r.read().then(({value:e,done:t})=>!o()||t||!e?null:{frame:e,reader:r}).catch(()=>(o(),null)),l=await Promise.race([c,s]);return l===null&&(await r.cancel().catch(()=>void 0),r.releaseLock()),l}function sC(e,t){if(e.length===0)return null;t.stopCurrentVideoTrack();let n=e[0];eC(n,{stage:`prepare-original-track`});let r=t.cloneVideoTrack(n);return eC(r,{stage:`prepare-cloned-track`}),t.setCurrentVideoTrack(r),r}function cC(e,t){if(e.length===0)return null;let n=e[0];return t.cloneAudioTrack(n)}function lC(e,t,n){if(!e)return{videoTrack:null,videoStream:null};if(eC(e,{stage:`select-video-input`}),t.hasMediaStreamTrackProcessor)return{videoTrack:e,videoStream:null};let r=n.createVideoStreamFromTrack(e);if(r)return{videoTrack:null,videoStream:r};throw n.createBrowserUnsupportedError()}function uC(e){if(!e||typeof e.getSettings!=`function`)return;let t=e.getSettings(),n={};typeof t.width==`number`&&(n.width=t.width),typeof t.height==`number`&&(n.height=t.height),typeof t.facingMode==`string`&&(n.facingMode=t.facingMode);let r=t;return typeof r.rotation==`number`&&(n.rotation=r.rotation),n}function dC(e){return e.isMobileDevice()}function fC(e,t,n,r){r.logger.debug(`[WorkerProcessor] Track details`,{hasVideoTrack:!!e,hasVideoStream:!!n,videoTrackId:e?.id,videoTrackKind:e?.kind,videoTrackReadyState:e?.readyState,hasAudioTrack:!!t,audioTrackId:t?.id,audioTrackKind:t?.kind,audioTrackReadyState:t?.readyState})}function pC(e,t){if(!e||typeof e.getSettings!=`function`)return;let n=hC(e.getSettings()),r;typeof e.getCapabilities==`function`&&(r=gC(e.getCapabilities())),t.logger.debug(`[WorkerProcessor] Video track settings`,n),r&&t.logger.debug(`[WorkerProcessor] Video track capabilities`,r)}function mC(e){let t=e.getViewportMetadata();t&&e.logger.debug(`[WorkerProcessor] Viewport metadata`,t)}function hC(e){let t=e;return{width:e.width,height:e.height,frameRate:e.frameRate,aspectRatio:e.aspectRatio,facingMode:e.facingMode,resizeMode:t.resizeMode,deviceId:e.deviceId,groupId:e.groupId,rotation:t.rotation}}function gC(e){let t=e;return{width:e.width,height:e.height,frameRate:e.frameRate,aspectRatio:e.aspectRatio,facingMode:e.facingMode,resizeMode:t.resizeMode}}function _C(e){let{createWorker:t,workerUrl:n,onMessage:r,onError:i,logger:a}=e;a.debug(`[WorkerProcessor] Worker URL created`,{urlType:typeof n,isBlobUrl:n.startsWith(`blob:`)});let o=t(n);return a.debug(`[WorkerProcessor] Worker created successfully`),o.onmessage=r,o.onerror=i,a.debug(`[WorkerProcessor] Worker event handlers attached`),o}function vC(e){let{videoTrack:t,videoStream:n,audioStream:r,isMobileDevice:i,videoSettings:a,viewportMetadata:o,audioConfig:s,workerConfig:c,overlayConfig:l}=e;return{type:`start`,videoTrack:t,videoStream:n,audioStream:r,isMobileDevice:i,videoSettings:a,viewportMetadata:o,audioConfig:s,config:c,overlayConfig:l}}function yC(e,t){return{type:`switchSource`,videoTrack:e,videoStream:t}}function bC(e,t,n=null){let r=[];return e&&(r=[...r,e]),t&&(r=[...r,t]),n&&(r=[...r,n]),r}var xC=class{constructor(e){this.workerProbePromise=null,this.workerProbeResolve=null,this.workerProbeTimeoutId=null,this.workerProbeResult=null,this.dependencies=e}handleProbeResult(e){this.finalizeProbeResult(e)}async getProbeResult(e){if(this.workerProbeResult)return this.workerProbeResult;if(this.workerProbePromise)return await this.workerProbePromise;let t=new Promise(e=>{this.workerProbeResolve=e});return this.workerProbePromise=t,this.workerProbeTimeoutId=this.dependencies.setTimeout(()=>{let e=this.getEmptyProbeResult();this.finalizeProbeResult(e)},this.dependencies.timeoutMilliseconds),e.postMessage({type:Vy}),await t}finalizeProbeResult(e){this.workerProbeTimeoutId!==null&&(this.dependencies.clearTimeout(this.workerProbeTimeoutId),this.workerProbeTimeoutId=null),this.workerProbeResult=e,this.workerProbeResolve&&=(this.workerProbeResolve(e),null),this.workerProbePromise=null}getEmptyProbeResult(){return{type:Hy,hasMediaStreamTrackProcessor:!1,hasVideoFrame:!1,hasAudioData:!1,hasOffscreenCanvas:!1,hasCreateImageBitmap:!1,hasReadableStream:!1}}};function SC(){if(typeof Blob>`u`||typeof URL>`u`)throw Error(`Blob and URL APIs are required for worker loading`);return new Blob([`(() => {
|
|
242
|
+
registerProcessor("${JS}", VidtreoAudioWorkletProcessor);
|
|
243
|
+
`;function eC(){if(typeof Blob>`u`||typeof URL>`u`)throw Error(`Blob and URL APIs are required for audio worklet loading`);return new Blob([$S],{type:`application/javascript`})}let tC=qS({createBlob:eC,createObjectUrl:e=>URL.createObjectURL(e),revokeObjectUrl:e=>{URL.revokeObjectURL(e)}});var nC=class{constructor(){this.audioContext=null,this.audioWorkletNode=null,this.audioSourceNode=null,this.audioDestinationNode=null,this.audioConfig=null,this.onAudioChunk=null,this.isMuted=!1,this.isPaused=!1,this.isProcessing=!1,this.hasAudioWorkletUrlLease=!1}async initialize(e,t){if(!e)throw Error(`Audio stream is required`);if(e.getAudioTracks().length===0)throw Error(`Audio stream has no tracks`);let n=a();if(!n)throw Error(`AudioContext is not supported in this browser`);this.onAudioChunk=t;try{let t=tC.acquire();this.hasAudioWorkletUrlLease=!0;let r=new n;this.audioContext=r,r.resume().catch(e=>{$.warn(`[AudioWorkletController] Failed to resume AudioContext`,i(e))}),await r.audioWorklet.addModule(t).catch(e=>{let t=i(e);throw Error(`Failed to load AudioWorklet module: ${t}`)});let a=new AudioWorkletNode(r,JS,{numberOfInputs:1,numberOfOutputs:1,outputChannelCount:[1]});a.port.onmessage=this.handleWorkletMessage.bind(this),this.audioWorkletNode=a,this.audioSourceNode=r.createMediaStreamSource(e),this.audioDestinationNode=r.createGain(),this.audioDestinationNode.gain.value=0;let o={sampleRate:r.sampleRate,numberOfChannels:1,format:`f32-planar`};return this.audioConfig=o,this.setMuted(this.isMuted),this.setPaused(this.isPaused),o}catch(e){throw await this.cleanupAfterInitializeFailure(),this.normalizeInitializationError(e)}}async startProcessing(){if(!this.isProcessing){if(!this.audioContext)throw Error(`AudioContext is not initialized`);if(!this.audioWorkletNode)throw Error(`AudioWorklet node is not initialized`);if(!this.audioSourceNode)throw Error(`Audio source node is not initialized`);if(!this.audioDestinationNode)throw Error(`AudioWorklet graph is not initialized`);this.audioSourceNode.connect(this.audioWorkletNode),this.audioWorkletNode.connect(this.audioDestinationNode),this.audioDestinationNode.connect(this.audioContext.destination),await this.audioContext.resume(),this.isProcessing=!0}}setMuted(e){this.isMuted=e,this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:XS,isMuted:e})}setPaused(e){this.isPaused=e,this.audioWorkletNode&&this.audioWorkletNode.port.postMessage({type:ZS,isPaused:e})}close(){this.disconnectAudioNodes(!0),this.closeAudioContext(),this.audioConfig=null,this.onAudioChunk=null,this.isMuted=!1,this.isPaused=!1,this.isProcessing=!1,this.releaseAudioWorkletUrlLease()}getConfig(){return this.audioConfig}handleWorkletMessage(e){let t=e.data;if(!t||t.type!==YS)return;let n=this.parseAudioBuffer(t.data);if(!n||!this.onAudioChunk)return;let r={data:n,frames:t.frames,numberOfChannels:t.numberOfChannels,sampleRate:t.sampleRate,timestamp:t.timestamp,inputPeak:t.inputPeak,inputRms:t.inputRms};this.onAudioChunk(r)}parseAudioBuffer(e){return e instanceof Float32Array?e:e instanceof ArrayBuffer?new Float32Array(e):null}async cleanupAfterInitializeFailure(){this.disconnectAudioNodes(!1),await this.closeAudioContext(),this.audioConfig=null,this.onAudioChunk=null,this.releaseAudioWorkletUrlLease()}normalizeInitializationError(e){if(e instanceof Error)return e;let t=i(e);return Error(t)}disconnectAudioNodes(e){this.audioWorkletNode&&=(e&&this.audioWorkletNode.port.postMessage({type:QS}),this.audioWorkletNode.disconnect(),null),this.audioSourceNode&&=(this.audioSourceNode.disconnect(),null),this.audioDestinationNode&&=(this.audioDestinationNode.disconnect(),null)}closeAudioContext(){if(!this.audioContext)return Promise.resolve();let e=this.audioContext;return this.audioContext=null,e.close().catch(e=>{$.warn(`[AudioWorkletController] Failed to close AudioContext`,i(e))})}releaseAudioWorkletUrlLease(){this.hasAudioWorkletUrlLease&&=(tC.release(),!1)}},rC=class{constructor(e){this.audioWorkletController=null,this.audioWorkletConfig=null,this.onChunk=e.onChunk;let t=()=>new nC;e.createController&&(t=e.createController),this.createController=t}async prepareAudioConfig(e){if(!e)return this.audioWorkletConfig=null,null;this.audioWorkletController||=this.createController();let t=new MediaStream([e]);return this.audioWorkletConfig=await this.audioWorkletController.initialize(t,e=>this.onChunk(e)).catch(e=>{throw this.stop(),e}),this.createWorkerAudioConfig(this.audioWorkletConfig)}async startProcessing(){this.audioWorkletController&&await this.audioWorkletController.startProcessing()}stop(){this.audioWorkletController&&=(this.audioWorkletController.close(),null),this.audioWorkletConfig=null}setMuted(e){this.audioWorkletController&&this.audioWorkletController.setMuted(e)}setPaused(e){this.audioWorkletController&&this.audioWorkletController.setPaused(e)}createWorkerAudioConfig(e){return e?{sampleRate:e.sampleRate,numberOfChannels:e.numberOfChannels,format:e.format}:null}};let iC=`recording.video-track-ended`;function aC(e={}){let t=Error(`Video track ended before recording could start [${iC}]`);return t.code=iC,t.isRecoverable=!0,t.details=e,t}function oC(e,t={}){if(e.readyState!==`live`)throw aC({...t,trackId:e.id,readyState:e.readyState})}let sC=`video.first-frame-timeout`,cC={createVideoStreamFromTrack:e=>typeof MediaStreamTrackProcessor>`u`?null:(oC(e,{stage:`preflight-stream-create`}),new MediaStreamTrackProcessor({track:e}).readable),setTimeout:(e,t)=>window.setTimeout(e,t),clearTimeout:e=>window.clearTimeout(e),performanceNow:()=>performance.now()};async function lC(e,t=3e3,n={}){let r={createVideoStreamFromTrack:n.createVideoStreamFromTrack??cC.createVideoStreamFromTrack,setTimeout:n.setTimeout??cC.setTimeout,clearTimeout:n.clearTimeout??cC.clearTimeout,performanceNow:n.performanceNow??cC.performanceNow},i=r.performanceNow();oC(e,{stage:`preflight-original-track`});let a=uC(e);oC(a,{stage:`preflight-cloned-track`});let o=r.createVideoStreamFromTrack(a);if(!o)return dC(a,e),$.debug(`[VideoFramePreflight] Cannot create stream from track, skipping preflight`),{elapsedMs:r.performanceNow()-i};let s=await fC(o,t,r),c=r.performanceNow()-i;if($.debug(`[VideoFramePreflight] Completed`,{elapsedMs:c,timedOut:s===null}),s===null){await o.cancel().catch(()=>void 0),dC(a,e);let n=Error(`Video stream failed to yield first frame within ${t}ms`);throw n.code=sC,n.elapsedMs=c,n}return s.frame.close(),s.reader.releaseLock(),o.cancel().catch(()=>void 0),dC(a,e),{elapsedMs:c}}function uC(e){return typeof e.clone==`function`?e.clone():e}function dC(e,t){e!==t&&e.stop()}async function fC(e,t,n){let r=e.getReader(),i,a=!1,o=()=>a?!1:(a=!0,i!==void 0&&n.clearTimeout(i),!0),s=new Promise(e=>{i=n.setTimeout(()=>{o()&&e(null)},t)}),c=r.read().then(({value:e,done:t})=>!o()||t||!e?null:{frame:e,reader:r}).catch(()=>(o(),null)),l=await Promise.race([c,s]);return l===null&&(await r.cancel().catch(()=>void 0),r.releaseLock()),l}function pC(e,t){if(e.length===0)return null;t.stopCurrentVideoTrack();let n=e[0];oC(n,{stage:`prepare-original-track`});let r=t.cloneVideoTrack(n);return oC(r,{stage:`prepare-cloned-track`}),t.setCurrentVideoTrack(r),r}function mC(e,t){if(e.length===0)return null;let n=e[0];return t.cloneAudioTrack(n)}function hC(e,t,n){if(!e)return{videoTrack:null,videoStream:null};if(oC(e,{stage:`select-video-input`}),t.hasMediaStreamTrackProcessor)return{videoTrack:e,videoStream:null};let r=n.createVideoStreamFromTrack(e);if(r)return{videoTrack:null,videoStream:r};throw n.createBrowserUnsupportedError()}function gC(e){if(!e||typeof e.getSettings!=`function`)return;let t=e.getSettings(),n={};typeof t.width==`number`&&(n.width=t.width),typeof t.height==`number`&&(n.height=t.height),typeof t.facingMode==`string`&&(n.facingMode=t.facingMode);let r=t;return typeof r.rotation==`number`&&(n.rotation=r.rotation),n}function _C(e){return e.isMobileDevice()}function vC(e,t,n,r){r.logger.debug(`[WorkerProcessor] Track details`,{hasVideoTrack:!!e,hasVideoStream:!!n,videoTrackId:e?.id,videoTrackKind:e?.kind,videoTrackReadyState:e?.readyState,hasAudioTrack:!!t,audioTrackId:t?.id,audioTrackKind:t?.kind,audioTrackReadyState:t?.readyState})}function yC(e,t){if(!e||typeof e.getSettings!=`function`)return;let n=xC(e.getSettings()),r;typeof e.getCapabilities==`function`&&(r=SC(e.getCapabilities())),t.logger.debug(`[WorkerProcessor] Video track settings`,n),r&&t.logger.debug(`[WorkerProcessor] Video track capabilities`,r)}function bC(e){let t=e.getViewportMetadata();t&&e.logger.debug(`[WorkerProcessor] Viewport metadata`,t)}function xC(e){let t=e;return{width:e.width,height:e.height,frameRate:e.frameRate,aspectRatio:e.aspectRatio,facingMode:e.facingMode,resizeMode:t.resizeMode,deviceId:e.deviceId,groupId:e.groupId,rotation:t.rotation}}function SC(e){let t=e;return{width:e.width,height:e.height,frameRate:e.frameRate,aspectRatio:e.aspectRatio,facingMode:e.facingMode,resizeMode:t.resizeMode}}function CC(e){let{createWorker:t,workerUrl:n,onMessage:r,onError:i,logger:a}=e;a.debug(`[WorkerProcessor] Worker URL created`,{urlType:typeof n,isBlobUrl:n.startsWith(`blob:`)});let o=t(n);return a.debug(`[WorkerProcessor] Worker created successfully`),o.onmessage=r,o.onerror=i,a.debug(`[WorkerProcessor] Worker event handlers attached`),o}function wC(e){let{videoTrack:t,videoStream:n,audioStream:r,isMobileDevice:i,videoSettings:a,viewportMetadata:o,audioConfig:s,workerConfig:c,overlayConfig:l}=e;return{type:`start`,videoTrack:t,videoStream:n,audioStream:r,isMobileDevice:i,videoSettings:a,viewportMetadata:o,audioConfig:s,config:c,overlayConfig:l}}function TC(e,t){return{type:`switchSource`,videoTrack:e,videoStream:t}}function EC(e,t,n=null){let r=[];return e&&(r=[...r,e]),t&&(r=[...r,t]),n&&(r=[...r,n]),r}var DC=class{constructor(e){this.workerProbePromise=null,this.workerProbeResolve=null,this.workerProbeTimeoutId=null,this.workerProbeResult=null,this.dependencies=e}handleProbeResult(e){this.finalizeProbeResult(e)}async getProbeResult(e){if(this.workerProbeResult)return this.workerProbeResult;if(this.workerProbePromise)return await this.workerProbePromise;let t=new Promise(e=>{this.workerProbeResolve=e});return this.workerProbePromise=t,this.workerProbeTimeoutId=this.dependencies.setTimeout(()=>{let e=this.getEmptyProbeResult();this.finalizeProbeResult(e)},this.dependencies.timeoutMilliseconds),e.postMessage({type:qy}),await t}finalizeProbeResult(e){this.workerProbeTimeoutId!==null&&(this.dependencies.clearTimeout(this.workerProbeTimeoutId),this.workerProbeTimeoutId=null),this.workerProbeResult=e,this.workerProbeResolve&&=(this.workerProbeResolve(e),null),this.workerProbePromise=null}getEmptyProbeResult(){return{type:Jy,hasMediaStreamTrackProcessor:!1,hasVideoFrame:!1,hasAudioData:!1,hasOffscreenCanvas:!1,hasCreateImageBitmap:!1,hasReadableStream:!1}}};function OC(){if(typeof Blob>`u`||typeof URL>`u`)throw Error(`Blob and URL APIs are required for worker loading`);return new Blob([`(() => {
|
|
244
244
|
var __create = Object.create;
|
|
245
245
|
var __getProtoOf = Object.getPrototypeOf;
|
|
246
246
|
var __defProp = Object.defineProperty;
|
|
@@ -12826,8 +12826,8 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
12826
12826
|
initializeRecorderWorker();
|
|
12827
12827
|
}
|
|
12828
12828
|
})();
|
|
12829
|
-
`],{type:`application/javascript`})}let CC=VS({createBlob:SC,createObjectUrl:e=>URL.createObjectURL(e),revokeObjectUrl:e=>{URL.revokeObjectURL(e)}});function wC(){return CC.acquire()}function TC(){CC.release()}let EC=1e3,DC=`format`,OC=new Map,kC=new Map;function AC(e){return e===void 0?`undefined`:String(e)}function jC(e){return e.join(`,`)}function MC(e,t){return`${e}=${t}`}function NC(e,t,n){if(e.has(t)&&e.delete(t),e.set(t,n),e.size<=50)return;let r=e.keys().next();r.done||e.delete(r.value)}var PC=class{constructor(e={}){this.worker=null,this.hasWorkerUrlLease=!1,this.chunks=[],this.totalSize=0,this.isActive=!1,this.audioTrackClone=null,this.audioTrackWarningTarget=null,this.isMuted=!1,this.currentVideoTrack=null,this.isPaused=!1,this.overlayConfig=null,this.readyPromiseResolve=null,this.readyPromiseReject=null,this.lastConfigFps=30,this.pendingFatalError=null,this.lastRecordingStats=null,this.audioWasExpected=!1,this.lastEncoderAcceleration=null,this.audioHealthMonitor=new RS,this.audioHealthIntervalId=null,this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=null,this.noFrameWatchdogId=null,this.handleAudioTrackEnded=()=>{this.audioTrackEndedDuringSession=!0,this.emitAudioWarningOnce({code:`audio.track-ended`})},this.handleAudioTrackMuted=()=>{this.emitAudioWarningOnce({code:`audio.track-muted-by-browser`})},this.handleAudioTrackUnmuted=()=>{this.emittedAudioWarnings.delete(`audio.track-muted-by-browser`)&&this.onAudioRecovered&&this.onAudioRecovered()};let t=e=>new Worker(e,{type:`classic`});e.createWorker&&(t=e.createWorker);let n=e=>typeof MediaStreamTrackProcessor>`u`?null:(eC(e,{stage:`main-thread-stream-create`}),new MediaStreamTrackProcessor({track:e}).readable);e.createVideoStreamFromTrack&&(n=e.createVideoStreamFromTrack);let r=()=>on();e.isLinuxPlatform&&(r=e.isLinuxPlatform),this.createVideoStreamFromTrackFn=n,this.isLinuxPlatformFn=r,e.videoFramePreflightDeps?this.videoFramePreflightDeps=e.videoFramePreflightDeps:this.videoFramePreflightDeps={},e.noFrameWatchdogDelayMs===void 0?this.watchdogDelayMs=5e3:this.watchdogDelayMs=e.noFrameWatchdogDelayMs;let i=!!e.createWorker;this.workerProbeManager=new xC({setTimeout:window.setTimeout.bind(window),clearTimeout:window.clearTimeout.bind(window),timeoutMilliseconds:2e3}),this.audioWorkletManager=new ZS({onChunk:this.handleAudioWorkletChunk.bind(this)});let a=e=>{let t=e.data;switch(t.type){case`ready`:this.readyPromiseResolve&&(this.readyPromiseResolve(),this.readyPromiseResolve=null,this.readyPromiseReject=null);break;case Hy:this.workerProbeManager.handleProbeResult(t);break;case`debugLog`:t.payload?$.debug(t.message,t.payload):$.debug(t.message);break;case`error`:if($.error(`[WorkerProcessor] Worker error:`,t.error),this.readyPromiseReject){let e=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,e(Error(t.error));break}this.onError&&this.onError(Error(t.error));break;case`chunk`:this.chunks.push({data:t.data,position:t.position}),this.totalSize=Math.max(this.totalSize,t.position+t.data.length);break;case`bufferUpdate`:this.onBufferUpdate&&this.onBufferUpdate(t.size,t.formatted);break;case`stateChange`:$.debug(`[WorkerProcessor] State changed:`,t.state),this.isPaused=t.state===`paused`;break;case`fatalError`:if(this.readyPromiseReject){let e=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,e(Error(`${t.message} [${t.code}]`));break}this.pendingFatalError=t;break;case`recordingStats`:this.lastRecordingStats=t,this.handleNoFrameWatchdogStats(t);break;case`encoderAcceleration`:this.lastEncoderAcceleration=t.acceleration,$.info(`[WorkerProcessor] Encoder acceleration resolved`,{acceleration:t.acceleration});break;default:$.warn(`[WorkerProcessor] Unknown response type:`,t)}},o=e=>{if($.error(`[WorkerProcessor] Worker error event:`,{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error}),this.readyPromiseReject){let t=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,t(Error(e.message||`Unknown worker error`));return}if(this.onError){let t=e.message;t||=`Unknown worker error`,this.onError(Error(t))}},s=typeof Worker<`u`,c=!1;if(s&&(c=!0),i&&(c=!0),!c)throw $.error(`[WorkerProcessor] Web Workers are not supported`),Error(`Web Workers are not supported`);let l=wC();this.hasWorkerUrlLease=!0;try{this.worker=_C({createWorker:t,workerUrl:l,onMessage:a,onError:o,logger:$})}catch(e){throw this.releaseWorkerUrlLease(),e}}prewarm(){this.worker&&this.workerProbeManager.getProbeResult(this.worker).catch(()=>void 0)}getWorkerProbeResult(){let e=this.getWorkerOrThrow();return this.workerProbeManager.getProbeResult(e)}async startProcessing(e,t,n){this.getWorkerOrThrow(),this.ensureProcessingInactive(),this.resetProcessingState(n),this.stopAudioWorklet(),this.audioWorkletManager=new ZS({onChunk:this.handleAudioWorkletChunk.bind(this)});let r=this.resolveRecordingFormat(t),i=Ht(r,{isLinuxPlatform:this.isLinuxPlatformFn()}),a=this.resolveAudioBitrate(t,r),o=await this.resolveAudioCodecWithCache(t,r,i,a),s=await this.resolveVideoCodecWithCache(t,r,i),c=zS(e);$.debug(`[WorkerProcessor] Starting processing`,{isScreenCapture:c,fps:t.fps,codec:s,bitrate:t.bitrate});let l=this.buildWorkerTranscodeConfig(t,o,a,s,r);typeof t.fps==`number`&&t.fps>0&&(this.lastConfigFps=t.fps);let u=e.getVideoTracks(),d=e.getAudioTracks();$.debug(`[WorkerProcessor] Preparing to start processing`,{videoTracksCount:u.length,audioTracksCount:d.length,hasWorker:!!this.worker});try{let e=this.getVideoInputSelectorDependencies(),t=sC(u,e),n=cC(d,e),r=await this.getWorkerProbeResult();t&&($.debug(`[WorkerProcessor] Running video first-frame preflight`),await rC(t,3e3,this.videoFramePreflightDeps),$.debug(`[WorkerProcessor] Video first-frame preflight passed`));let i=lC(t,r,e),a=dC(e),o=uC(t);pC(t,e),mC(e),fC(t,n,i.videoStream,e);let s=e.getViewportMetadata(),c;s&&(c={orientationAngle:s.orientationAngle,windowOrientation:s.windowOrientation});let{audioConfig:f,audioStream:p,shouldStartAudioWorklet:m}=await this.prepareAudioPipeline(n,r),h=this.buildOverlayConfigToSend(),g=vC({videoTrack:i.videoTrack,videoStream:i.videoStream,audioStream:p,isMobileDevice:a,videoSettings:o,viewportMetadata:c,audioConfig:f,workerConfig:l,overlayConfig:h}),_=bC(i.videoStream,p,i.videoTrack);$.debug(`[WorkerProcessor] Posting message to worker`,{transferablesCount:_.length,messageType:g.type}),await this.postStartMessage(g,_,m),this.startNoFrameWatchdog(),m&&this.startAudioHealthMonitoring()}catch(e){throw this.resetStartProcessingStateAfterFailure(),e}}getWorkerOrThrow(){if(!this.worker)throw Error(`Worker not initialized`);return this.worker}ensureProcessingInactive(){if(this.isActive)throw Error(`Processing already active`)}handleAudioWorkletChunk(e){if(!(this.isWorkerActive()&&this.worker))return;this.recordAudioHealthChunk(e);let t={type:`audioChunk`,data:e.data,frames:e.frames,numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,timestamp:e.timestamp},n=[];e.data.buffer instanceof ArrayBuffer&&n.push(e.data.buffer),this.worker.postMessage(t,n)}resetProcessingState(e){this.isActive=!0,this.isMuted=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0,this.audioWasExpected=!1,this.audioHealthMonitor.reset(),this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=performance.now(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),e?this.overlayConfig=e:this.overlayConfig=null}resetStartProcessingStateAfterFailure(){this.isActive=!1,this.isPaused=!1,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.stopCurrentVideoTrack(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null}recordAudioHealthChunk(e){let t=this.audioHealthMonitor.recordChunk({samples:e.data,timestampMs:performance.now(),isMuted:this.isMuted,inputPeak:e.inputPeak,inputRms:e.inputRms});this.emitAudioWarning(t.classification,{durationMs:Math.max(t.consecutiveSilentDurationMs,t.consecutiveLowSignalDurationMs,t.consecutiveMutedSpeechDurationMs),peak:t.inputPeak,rms:t.inputRms})}startAudioHealthMonitoring(){this.stopAudioHealthMonitoring(),this.audioHealthIntervalId=window.setInterval(()=>{if(!this.isActive)return;let e=this.audioHealthMonitor.inspect(performance.now(),this.isMuted);this.emitAudioWarning(e.classification,{durationMs:Math.max(e.noChunkDurationMs,e.consecutiveSilentDurationMs,e.consecutiveLowSignalDurationMs,e.consecutiveMutedSpeechDurationMs),peak:e.inputPeak,rms:e.inputRms})},1e3)}stopAudioHealthMonitoring(){this.audioHealthIntervalId!==null&&(window.clearInterval(this.audioHealthIntervalId),this.audioHealthIntervalId=null)}startNoFrameWatchdog(){this.stopNoFrameWatchdog(),this.noFrameWatchdogId=window.setTimeout(()=>{this.noFrameWatchdogId=null,this.isWorkerActive()&&this.worker&&this.worker.postMessage({type:`requestStats`})},this.watchdogDelayMs)}stopNoFrameWatchdog(){this.noFrameWatchdogId!==null&&(window.clearTimeout(this.noFrameWatchdogId),this.noFrameWatchdogId=null)}handleNoFrameWatchdogStats(e){if(!this.isActive||e.videoFrameCount>0)return;$.error(`[WorkerProcessor] No video frames received after watchdog delay`,{videoFrameCount:e.videoFrameCount,totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed});let t=Error(`No video frames received after ${this.watchdogDelayMs/EC}s — video stream may be unresponsive [${tC}]`);this.onError&&this.onError(t),this.cancel()}emitAudioWarning(e,t){if(e===`healthy`){let e=this.emittedAudioWarnings.size>0;this.emittedAudioWarnings.clear(),e&&this.onAudioRecovered&&this.onAudioRecovered();return}if(e===`muted-silence-expected`){let e=!1;this.emittedAudioWarnings.delete(`audio.no-signal`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.no-chunks`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.low-signal`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.speaking-while-muted`)&&(e=!0),e&&this.onAudioRecovered&&this.onAudioRecovered();return}let n=this.createAudioWarning(e,t);n&&this.emitAudioWarningOnce(n)}emitAudioWarningOnce(e){this.onAudioWarning&&(this.emittedAudioWarnings.has(e.code)||(this.emittedAudioWarnings.add(e.code),this.onAudioWarning(e)))}createAudioWarning(e,t){return e===`no-chunks`?{code:`audio.no-chunks`,durationMs:t.durationMs}:e===`silent-while-unmuted`?{code:`audio.no-signal`,durationMs:t.durationMs}:e===`low-signal`?{code:`audio.low-signal`,peak:t.peak,rms:t.rms}:e===`speaking-while-muted`?{code:`audio.speaking-while-muted`,durationMs:t.durationMs,peak:t.peak,rms:t.rms}:null}assertRuntimeAudioHealth(){let e=performance.now(),t=this.recordingStartTimestampMs??e,n=Math.max(0,e-t),r=this.audioHealthMonitor.getFinalSnapshot(e,this.isMuted),i=Sb({totalChunks:r.totalChunks,nonSilentChunks:r.nonSilentChunks,mutedDurationMs:r.mutedDurationMs,durationMs:n,hadTrackEndedWarning:this.audioTrackEndedDuringSession});if(!i.ok)throw yb(i.code,{totalChunks:r.totalChunks,nonSilentChunks:r.nonSilentChunks,mutedDurationMs:r.mutedDurationMs,durationMs:n,hadTrackEndedWarning:this.audioTrackEndedDuringSession})}resolveRecordingFormat(e){let t=e.format;return t||=`mp4`,t}resolveAudioBitrate(e,t){return e.audioBitrate===void 0?Kt(t):e.audioBitrate}async resolveAudioCodec(e,t,n,r){return await ny({format:t,overrideCodec:e.audioCodec,policy:n,bitrate:r})}async resolveVideoCodec(e,t,n){return await ty({format:t,overrideCodec:e.codec,policy:n,width:e.width,height:e.height,bitrate:e.bitrate})}async resolveAudioCodecWithCache(e,t,n,r){let i=this.buildAudioCodecCacheKey(e,t,n,r),a=OC.get(i);if(a)return a;let o=await this.resolveAudioCodec(e,t,n,r);return NC(OC,i,o),o}async resolveVideoCodecWithCache(e,t,n){let r=this.buildVideoCodecCacheKey(e,t,n),i=kC.get(r);if(i)return i;let a=await this.resolveVideoCodec(e,t,n);return NC(kC,r,a),a}buildAudioCodecCacheKey(e,t,n,r){let i=AC(e.audioCodec),a=AC(n.preferredAudioCodec),o=jC(n.audioCodecFallbackOrder),s=AC(r);return[MC(DC,AC(t)),MC(`audioOverride`,i),MC(`audioBitrate`,s),MC(`policyPreferredAudio`,a),MC(`policyAudioFallback`,o)].join(`|`)}buildVideoCodecCacheKey(e,t,n){let r=AC(e.codec),i=AC(e.width),a=AC(e.height),o=AC(e.bitrate),s=AC(n.preferredVideoCodec),c=jC(n.videoCodecFallbackOrder);return[MC(DC,AC(t)),MC(`videoOverride`,r),MC(`width`,i),MC(`height`,a),MC(`videoBitrate`,o),MC(`policyPreferredVideo`,s),MC(`policyVideoFallback`,c)].join(`|`)}buildWorkerTranscodeConfig(e,t,n,r,i){return{width:e.width,height:e.height,fps:e.fps,bitrate:BS(e.bitrate),audioCodec:t,audioBitrate:n,codec:r,keyFrameInterval:5,latencyMode:e.latencyMode,format:i,watermark:e.watermark}}async prepareAudioPipeline(e,t){if(!e)return $.debug(`[WorkerProcessor] Audio pipeline disabled (no track)`),{audioConfig:null,audioStream:null,shouldStartAudioWorklet:!1};let n=await this.prepareAudioConfig(e);if(!n)throw this.createBrowserUnsupportedError();return $.debug(`[WorkerProcessor] Audio pipeline selected`,{path:`audio-worklet-chunks`,sampleRate:n.sampleRate,numberOfChannels:n.numberOfChannels}),{audioConfig:n,audioStream:null,shouldStartAudioWorklet:!0}}buildOverlayConfigToSend(){if(this.overlayConfig)return this.overlayConfig}async postStartMessage(e,t,n){let r=this.getWorkerOrThrow(),i=new Promise((e,t)=>{this.readyPromiseResolve=e,this.readyPromiseReject=t});try{r.postMessage(e,t),$.debug(`[WorkerProcessor] Message posted successfully`),await i,$.debug(`[WorkerProcessor] Worker confirmed ready`),n&&(this.audioWasExpected=!0,await this.startAudioWorkletProcessing())}catch(e){throw $.error(`[WorkerProcessor] Failed to post message:`,e),this.readyPromiseResolve=null,this.readyPromiseReject=null,this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.worker&&this.isActive&&this.worker.postMessage({type:`stop`}),this.isActive=!1,e}}pause(){this.worker&&this.isActive&&(this.worker.postMessage({type:`pause`}),this.setAudioWorkletPaused(!0))}resume(){this.isWorkerActive()&&this.worker&&(this.worker.postMessage({type:`resume`}),this.setAudioWorkletPaused(!1))}isWorkerActive(){return!!(this.worker&&this.isActive)}toggleMute(){this.isMuted=!this.isMuted,this.onMuteStateChange&&this.onMuteStateChange(this.isMuted),this.isWorkerActive()&&this.worker&&this.worker.postMessage({type:`toggleMute`}),this.setAudioWorkletMuted(this.isMuted)}async switchVideoSource(e){if(!(this.isWorkerActive()&&this.worker))return $.debug(`[WorkerProcessor] Cannot switch source - worker not active`,{hasWorker:!!this.worker,isActive:this.isActive}),Promise.resolve();let t=e.getVideoTracks();if($.debug(`[WorkerProcessor] Switching video source`,{videoTracksCount:t.length}),t.length===0)return $.warn(`[WorkerProcessor] No video tracks in new stream`),Promise.resolve();let n=zS(e),r=this.lastConfigFps;$.debug(`[WorkerProcessor] Source type detected`,{isScreenCapture:n,targetFps:r});let i={type:`updateFps`,fps:r};this.worker.postMessage(i);let a={type:`updateSourceType`,isScreenCapture:n};this.worker.postMessage(a);let o=this.getVideoInputSelectorDependencies(),s=sC(t,o);if(!s)return $.warn(`[WorkerProcessor] Unable to prepare video track`),Promise.resolve();$.debug(`[WorkerProcessor] New video track details`,{trackId:s.id,trackKind:s.kind,trackReadyState:s.readyState});let c=lC(s,await this.getWorkerProbeResult(),o),l=yC(c.videoTrack,c.videoStream),u=bC(c.videoStream,null,c.videoTrack);try{return $.debug(`[WorkerProcessor] Posting switch source message`),this.worker.postMessage(l,u),$.debug(`[WorkerProcessor] Switch source message posted`),new Promise(e=>{setTimeout(()=>{e()},0)})}catch(e){throw $.error(`[WorkerProcessor] Failed to switch source:`,e),e}}finalize(){if(!this.isWorkerActive())throw Dx(Tx,`Recording is not ready to finalize`,{hasWorker:!!this.worker,isActive:this.isActive});let e=performance.now();return new Promise((t,n)=>{let r=this.worker;if(!r){n(Error(`Worker not initialized`));return}let i=null,a=()=>{i!==null&&(clearTimeout(i),i=null)},o=()=>{r.removeEventListener(`message`,l)},s=!1,c=()=>s?!1:(s=!0,a(),o(),!0),l=r=>{if(s)return;let i=r.data;if(i.type===`fatalError`){this.pendingFatalError=i;return}if(i.type===`recordingStats`){this.lastRecordingStats=i;return}if(i.type===`stateChange`&&i.state===`stopped`){this.handleFinalizeStopped(c,t,n,e);return}i.type===`error`&&this.handleFinalizeError(c,n,i.error,e)};i=setTimeout(()=>{if(!c())return;$.error(`[WorkerProcessor] Finalize timeout reached`,{elapsedSeconds:(performance.now()-e)/EC,recordingStats:this.buildRecordingStatsSummary(this.lastRecordingStats)});let t=this.lastRecordingStats;this.resetFinalizeRuntimeState(),n(Dx(Ex,this.buildFinalizeTimeoutMessage(t),{recordingStats:this.buildRecordingStatsSummary(t)}))},3e4),r.addEventListener(`message`,l),r.postMessage({type:`requestStats`}),r.postMessage({type:`stop`})})}handleFinalizeStopped(e,t,n,r){let i=this.lastRecordingStats,a=this.lastEncoderAcceleration;if(this.pendingFatalError!==null){let t=this.pendingFatalError;if(!e())return;this.resetFinalizeRuntimeState(),n(Error(this.buildFatalFinalizeErrorMessage(t,i)));return}e()&&(this.resetFinalizeRuntimeState(),Promise.resolve().then(()=>this.createBlobFromChunks(i,a)).then(e=>{t(e)},e=>{this.rejectFinalizeBlobCreationError(n,e,r)}))}handleFinalizeError(e,t,n,r){e()&&(this.resetFinalizeRuntimeState(),$.error(`[WorkerProcessor] Finalize failed`,{elapsedSeconds:(performance.now()-r)/EC,error:n}),t(Error(n)))}buildFatalFinalizeErrorMessage(e,t){return t===null?`${e.message} [${e.code}]`:`${e.message} [${e.code}] frames=${t.videoFrameCount} errors=${t.totalFrameErrors}`}buildFinalizeTimeoutMessage(e){return e===null?`Finalize timeout`:`Finalize timeout frames=${e.videoFrameCount} errors=${e.totalFrameErrors} processed=${e.totalFramesProcessed}`}buildRecordingStatsSummary(e){return e===null?null:{videoFrameCount:e.videoFrameCount,totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed}}resetFinalizeRuntimeState(){this.isActive=!1,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null}createBlobFromChunks(e,t){let n=[...this.chunks].sort((e,t)=>e.position-t.position),r=new ArrayBuffer(this.totalSize),i=new Uint8Array(r);for(let e of n)i.set(e.data,e.position);Fy(r),Iy(r),this.audioWasExpected&&(this.assertRuntimeAudioHealth(),Ly(r));let a={blob:new Blob([r],{type:`video/mp4`}),totalSize:this.totalSize};return e!==null&&(a.recordingStats={totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed,videoFrameCount:e.videoFrameCount}),t!==null&&(a.encoderAcceleration=t),a}rejectFinalizeBlobCreationError(e,t,n){if($.error(`[WorkerProcessor] Finalize failed while creating blob`,{elapsedSeconds:(performance.now()-n)/EC,error:i(t)}),t instanceof Error){e(t);return}e(Error(i(t)))}cancel(){return this.worker&&this.isActive&&this.worker.postMessage({type:`stop`}),this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.isActive=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0,this.audioWasExpected=!1,this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=null,this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null,Promise.resolve()}destroy(){this.worker&&=(this.worker.terminate(),null),this.releaseWorkerUrlLease(),this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.isActive=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0}cleanup(){this.destroy()}warmupEncoder(e){if(!this.worker)return;let t=e.format||`mp4`,n=Ht(t),r=e.codec||n.preferredVideoCodec,i=e.audioBitrate===void 0?n.audioBitrate:e.audioBitrate,a=Ht(t,{isLinuxPlatform:this.isLinuxPlatformFn()}),o=this.resolveAudioBitrate(e,t);this.resolveAudioCodecWithCache(e,t,a,o).catch(this.handleWarmupCacheError),this.resolveVideoCodecWithCache(e,t,a).catch(this.handleWarmupCacheError);let s={type:`warmup`,config:this.buildWorkerTranscodeConfig(e,n.preferredAudioCodec,i,r,t)};this.worker.postMessage(s)}getBufferSize(){return this.totalSize}getMutedState(){return this.isMuted}updateTabVisibility(e,t){if(!(this.isWorkerActive()&&this.worker)){$.warn(`[WorkerProcessor] Cannot update visibility - worker not active`,{isActive:this.isActive,hasWorker:!!this.worker});return}$.debug(`[WorkerProcessor] Sending visibility update to worker`,{isHidden:e,timestamp:t,timestampSeconds:t/EC});let n={type:`updateVisibility`,isHidden:e,timestamp:t};this.worker.postMessage(n)}updateSourceType(e){if(!(this.isWorkerActive()&&this.worker)){$.warn(`[WorkerProcessor] Cannot update source type - worker not active`,{isActive:this.isActive,hasWorker:!!this.worker});return}$.debug(`[WorkerProcessor] Sending source type update to worker`,{isScreenCapture:e});let t={type:`updateSourceType`,isScreenCapture:e};this.worker.postMessage(t)}async startAudioWorkletProcessing(){await this.audioWorkletManager.startProcessing()}stopAudioWorklet(){this.audioWorkletManager.stop()}setAudioWorkletMuted(e){this.audioWorkletManager.setMuted(e)}setAudioWorkletPaused(e){this.audioWorkletManager.setPaused(e)}prepareAudioConfig(e){return this.audioWorkletManager.prepareAudioConfig(e)}handleWarmupCacheError(){}createBrowserUnsupportedError(){return Nt({resolutionStage:`feature-preflight`})}getVideoInputSelectorDependencies(){return{stopCurrentVideoTrack:()=>this.stopCurrentVideoTrack(),cloneVideoTrack:e=>this.cloneVideoTrack(e),cloneAudioTrack:e=>this.cloneAudioTrack(e),setCurrentVideoTrack:e=>{this.currentVideoTrack=e},createVideoStreamFromTrack:e=>this.createVideoStreamFromTrackFn(e),createBrowserUnsupportedError:()=>this.createBrowserUnsupportedError(),getViewportMetadata:()=>{if(typeof window>`u`)return null;let e=window.screen,t,n,r,i;return e&&(i=e.orientation),i?.type&&(t=i.type),i&&typeof i.angle==`number`&&(n=i.angle),typeof window.orientation==`number`&&(r=window.orientation),{innerWidth:window.innerWidth,innerHeight:window.innerHeight,orientation:t,orientationAngle:n,windowOrientation:r}},logger:{debug:(e,t)=>$.debug(e,t),warn:(e,t)=>$.warn(e,t)},isMobileDevice:()=>Qt()}}isPausedState(){return this.isPaused}getClonedAudioTrack(){return this.audioTrackClone}getAudioStreamForAnalysis(){return this.audioTrackClone?new MediaStream([this.audioTrackClone]):null}setOnBufferUpdate(e){this.onBufferUpdate=e}setOnError(e){this.onError=e}setOnMuteStateChange(e){this.onMuteStateChange=e}setOnAudioWarning(e){this.onAudioWarning=e}setOnAudioRecovered(e){this.onAudioRecovered=e}cloneVideoTrack(e){if($.debug(`[WorkerProcessor] Original video track:`,{id:e.id,kind:e.kind,readyState:e.readyState,hasClone:typeof e.clone==`function`}),typeof e.clone==`function`)try{let t=e.clone();return $.debug(`[WorkerProcessor] Video track cloned successfully:`,{id:t.id,kind:t.kind,readyState:t.readyState}),t}catch(e){$.error(`[WorkerProcessor] Failed to clone video track:`,e);let t=i(e);throw Error(`Failed to clone video track: ${t}`)}return $.warn(`[WorkerProcessor] Video track clone() not available, using original`),e}attachAudioTrackWarnings(e){this.detachAudioTrackWarnings(),e.addEventListener(`ended`,this.handleAudioTrackEnded),e.addEventListener(`mute`,this.handleAudioTrackMuted),e.addEventListener(`unmute`,this.handleAudioTrackUnmuted),this.audioTrackWarningTarget=e}detachAudioTrackWarnings(){this.audioTrackWarningTarget&&=(this.audioTrackWarningTarget.removeEventListener(`ended`,this.handleAudioTrackEnded),this.audioTrackWarningTarget.removeEventListener(`mute`,this.handleAudioTrackMuted),this.audioTrackWarningTarget.removeEventListener(`unmute`,this.handleAudioTrackUnmuted),null)}cloneAudioTrack(e){if($.debug(`[WorkerProcessor] Original audio track:`,{id:e.id,kind:e.kind,readyState:e.readyState,hasClone:typeof e.clone==`function`}),typeof e.clone==`function`)try{let t=e.clone();return this.audioTrackClone=t,this.attachAudioTrackWarnings(t),$.debug(`[WorkerProcessor] Audio track cloned successfully:`,{id:t.id,kind:t.kind,readyState:t.readyState}),t}catch(e){$.error(`[WorkerProcessor] Failed to clone audio track:`,e);let t=i(e);throw Error(`Failed to clone audio track: ${t}`)}return $.warn(`[WorkerProcessor] Audio track clone() not available, using original`),this.audioTrackClone=e,this.attachAudioTrackWarnings(e),e}stopCurrentVideoTrack(){this.currentVideoTrack&&this.currentVideoTrack.readyState===`live`&&this.currentVideoTrack.stop(),this.currentVideoTrack=null}releaseWorkerUrlLease(){this.hasWorkerUrlLease&&=(TC(),!1)}},FC=class{constructor(e={}){this.currentVideoStream=null;let t=()=>new PC;e.workerProcessorFactory&&(t=e.workerProcessorFactory);try{this.workerProcessor=t(),$.debug(`[StreamProcessor] Using worker-based processing`)}catch(e){let t=i(e);throw Error(`Failed to initialize worker: ${t}`)}}async startProcessing(e,t,n){this.workerProcessor.setOnBufferUpdate((e,t)=>{$.debug(`[StreamProcessor] Buffer update:`,{size:e,formatted:t}),this.onBufferUpdate&&this.onBufferUpdate(e,t)}),this.workerProcessor.setOnError(e=>{$.error(`[StreamProcessor] Worker error:`,e),this.onError&&this.onError(e)}),this.currentVideoStream=e,await this.workerProcessor.startProcessing(e,t,n)}updateTabVisibility(e,t){this.workerProcessor.updateTabVisibility(e,t)}updateSourceType(e){this.workerProcessor.updateSourceType(e)}pause(){this.workerProcessor.pause()}resume(){this.workerProcessor.resume()}isPausedState(){return this.workerProcessor.isPausedState()}async finalize(){return $.debug(`[StreamProcessor] finalize called`),await this.workerProcessor.finalize()}toggleMute(){this.workerProcessor.toggleMute()}isMutedState(){return this.workerProcessor.getMutedState()}getClonedAudioTrack(){return this.workerProcessor.getClonedAudioTrack()}getAudioStreamForAnalysis(){return this.workerProcessor.getAudioStreamForAnalysis()}async switchVideoSource(e){await this.workerProcessor.switchVideoSource(e),this.currentVideoStream=e,this.onSourceChange&&this.onSourceChange(e)}getCurrentVideoSource(){return this.currentVideoStream}getBufferSize(){return this.workerProcessor.getBufferSize()}setOnMuteStateChange(e){this.workerProcessor.setOnMuteStateChange(e)}setOnSourceChange(e){this.onSourceChange=e}setOnBufferUpdate(e){this.onBufferUpdate=e}setOnError(e){this.onError=e}setOnAudioWarning(e){this.workerProcessor.setOnAudioWarning(e)}setOnAudioRecovered(e){this.workerProcessor.setOnAudioRecovered(e)}warmupEncoder(e){this.workerProcessor.warmupEncoder(e)}prewarm(){this.workerProcessor.prewarm()}async cancel(){await this.workerProcessor.cancel(),this.currentVideoStream=null}destroy(){this.workerProcessor.destroy(),this.currentVideoStream=null}};let IC=1e3,LC=`recording`,RC=`idle`,zC={route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`]},BC={transcodeVideo:ly};function VC(e,t){let n=ry(t.format);return e.type.toLowerCase().startsWith(n)}var HC=class{constructor(e,t,n){this.recordingState=RC,this.countdownDuration=5e3,this.countdownRemaining=0,this.countdownTimeoutId=null,this.countdownIntervalId=null,this.countdownStartTime=null,this.isPaused=!1,this.maxRecordingTime=null,this.maxTimeTimer=null,this.recordingStartTime=null,this.maxTimeRemaining=null,this.recordingSeconds=0,this.recordingIntervalId=null,this.pauseStartTime=null,this.totalPausedTime=0,this.streamProcessor=null,this.originalCameraStream=null,this.enableTabVisibilityOverlay=!1,this.startupAborted=!1,this.activeRecordingConfig=null,this.activeRouteDecision=zC,this.streamManager=e,this.callbacks=t,this.dependencies={...BC,...n}}setCountdownDuration(e){this.countdownDuration=e}setMaxRecordingTime(e){this.maxRecordingTime=e}setTabVisibilityOverlayConfig(e,t){this.enableTabVisibilityOverlay=e,this.tabVisibilityOverlayText=t}getRecordingState(){return this.recordingState}isPausedState(){return this.isPaused}getRecordingSeconds(){return this.recordingSeconds}getStreamProcessor(){return this.streamProcessor}updateSourceType(e){this.recordingState!==LC||!this.streamProcessor||this.streamProcessor.updateSourceType(e)}setOriginalCameraStream(e){this.originalCameraStream=e}getOriginalCameraStream(){return this.originalCameraStream}prewarmStreamProcessor(e){let t=this.getOrCreateStreamProcessor();t.prewarm(),e&&t.warmupEncoder(e)}async startRecording(){try{this.callbacks.onClearUploadStatus(),this.countdownDuration>0?this.startCountdown():await this.doStartRecording()}catch(e){this.handleError(e),this.recordingState=RC,this.cancelCountdown()}}startCountdown(){this.recordingState=`countdown`,this.countdownRemaining=Math.ceil(this.countdownDuration/IC),this.countdownStartTime=Date.now(),this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining),this.countdownIntervalId=window.setInterval(()=>{if(!this.countdownStartTime)return;let e=Date.now()-this.countdownStartTime,t=Math.max(0,Math.ceil((this.countdownDuration-e)/IC)),n=this.countdownRemaining;this.countdownRemaining=t,n!==t&&this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining)},100),this.countdownTimeoutId=window.setTimeout(async()=>{await this.doStartRecording().catch(()=>void 0)},this.countdownDuration)}async doStartRecording(){$.debug(`[RecordingManager] doStartRecording called`),this.cancelCountdown(),this.resetRecordingState(),this.startupAborted=!1;let e=this.streamManager.getStream();if($.debug(`[RecordingManager] Current stream:`,{hasStream:!!e,audioTracks:e?.getAudioTracks().length||0,videoTracks:e?.getVideoTracks().length||0}),!e){$.warn(`[RecordingManager] No stream available`),this.handleError(Error(`No stream available for recording`)),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState);return}this.originalCameraStream=e,$.debug(`[RecordingManager] Ensuring stream processor`);let t=this.getOrCreateStreamProcessor();$.debug(`[RecordingManager] StreamProcessor ready:`,!!t);let n=null,r=await this.callbacks.onGetConfig().then(e=>(n=e,null)).catch(e=>e);if(r){this.handleError(r),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState);return}if(!n){this.handleError(Error(`Failed to get recording config`)),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState);return}let i=await this.resolveRouteDecision();if(i instanceof Error){this.handleError(i),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState);return}this.callbacks.onAudioWarning&&t.setOnAudioWarning(this.callbacks.onAudioWarning),this.callbacks.onAudioRecovered&&t.setOnAudioRecovered(this.callbacks.onAudioRecovered),t.setOnError(e=>{this.handleFatalProcessorError(e)}),this.activeRecordingConfig=n,this.activeRouteDecision=i,$.debug(`[RecordingManager] Starting recording with stream manager`);let a=await this.streamManager.startRecording(t,n,this.enableTabVisibilityOverlay,this.tabVisibilityOverlayText,i).then(()=>null).catch(e=>($.error(`[RecordingManager] Error starting recording:`,e),e));if(a){this.activeRecordingConfig=null,this.activeRouteDecision=zC,this.handleError(a),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState);return}if(this.startupAborted){this.startupAborted=!1;return}$.info(`[RecordingManager] Recording started successfully`),this.recordingState=LC,this.callbacks.onStateChange(this.recordingState),this.startRecordingTimer(),this.recordingStartTime=Date.now(),this.maxRecordingTime&&this.maxRecordingTime>0&&(this.maxTimeRemaining=this.maxRecordingTime,this.startMaxTimeTimer())}async stopRecording(){$.debug(`[RecordingManager] stopRecording called`);try{if(this.recordingState!==LC){let e=this.recordingState;throw this.cancelCountdown(),Dx(wx,`Recording is not ready to stop`,{recordingState:e,hasStreamProcessor:!!this.streamProcessor})}this.cancelCountdown(),this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.resetPauseState(),this.callbacks.onStopAudioTracking(),$.debug(`[RecordingManager] Stopping recording in stream manager`);let e=await this.streamManager.stopRecording(),t=await this.resolveFinalRecordingBlob(e.blob);$.info(`[RecordingManager] Recording stopped, blob size:`,t.size),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState),this.recordingSeconds=0,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.callbacks.onRecordingComplete(t);let n={};return e.recordingStats!==void 0&&(n.videoFrameCount=e.recordingStats.videoFrameCount,n.totalFrameErrors=e.recordingStats.totalFrameErrors,n.totalFramesProcessed=e.recordingStats.totalFramesProcessed),e.encoderAcceleration!==void 0&&(n.encoderAcceleration=e.encoderAcceleration),{blob:t,telemetryProperties:n}}catch(e){let t=Ox(e);throw this.handleError(t),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState),t}finally{this.activeRecordingConfig=null,this.activeRouteDecision=zC}}pauseRecording(){if(!(this.recordingState!==LC||this.isPaused)&&(this.streamManager.pauseRecording(),this.isPaused=!0,this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.pauseStartTime=Date.now(),this.maxTimeTimer!==null&&this.recordingStartTime!==null&&this.maxRecordingTime!==null)){let e=Date.now()-this.recordingStartTime-this.totalPausedTime;this.maxTimeRemaining=Math.max(0,this.maxRecordingTime-e),this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null}}resumeRecording(){this.recordingState!==LC||!this.isPaused||(this.streamManager.resumeRecording(),this.isPaused=!1,this.updatePausedDuration(),this.startRecordingTimer(),this.maxTimeRemaining!==null&&this.maxTimeRemaining>0&&this.startMaxTimeTimer())}cancelCountdown(){this.clearTimer(this.countdownTimeoutId,clearTimeout),this.countdownTimeoutId=null,this.clearTimer(this.countdownIntervalId,clearInterval),this.countdownIntervalId=null,this.recordingState=RC,this.countdownRemaining=0,this.countdownStartTime=null,this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining)}cleanup(){this.cancelCountdown(),this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.streamProcessor&&=(this.streamProcessor.destroy(),null)}resetRecordingState(){this.isPaused=!1,this.recordingSeconds=0,this.totalPausedTime=0,this.pauseStartTime=null,this.recordingStartTime=null,this.maxTimeRemaining=null}async resolveFinalRecordingBlob(e){if(this.activeRouteDecision.route!==`safe-capture-post-recording-transcode`)return e;if(!this.activeRecordingConfig)throw Error(`Recording config unavailable for final video processing`);if(VC(e,this.activeRecordingConfig))return e;this.callbacks.onTranscodingProgress?.(0);let t=await this.dependencies.transcodeVideo(e,this.activeRecordingConfig,e=>{this.callbacks.onTranscodingProgress?.(e)});return this.callbacks.onTranscodingProgress?.(1),t.blob}resetPauseState(){this.isPaused=!1,this.pauseStartTime=null,this.totalPausedTime=0}getOrCreateStreamProcessor(){if(this.streamProcessor)return this.streamProcessor;let e=new FC;return this.streamProcessor=e,e}async resolveRouteDecision(){return this.callbacks.onGetRouteDecision?await this.callbacks.onGetRouteDecision().then(e=>e).catch(e=>e instanceof Error?e:Error(i(e))):zC}updatePausedDuration(){if(this.pauseStartTime===null)throw Error(`Pause start time not set`);let e=Date.now()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}startRecordingTimer(){if(this.recordingIntervalId!==null)return;let e=Nx(this.recordingSeconds);this.callbacks.onTimerUpdate(e),this.recordingIntervalId=window.setInterval(()=>{this.recordingSeconds+=1;let e=Nx(this.recordingSeconds);this.callbacks.onTimerUpdate(e)},1e3)}startMaxTimeTimer(){this.maxTimeRemaining===null||this.maxTimeRemaining<=0||(this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=window.setTimeout(async()=>{this.recordingState===LC&&!this.isPaused&&await this.stopRecording()},this.maxTimeRemaining))}clearTimer(e,t){e!==null&&t(e)}handleError(e){let t=e instanceof Error?e:Error(i(e));this.callbacks.onError(t)}handleFatalProcessorError(e){this.recordingState===LC&&(this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.resetPauseState()),!(!this.streamProcessor&&this.recordingState!==LC)&&($.error(`[RecordingManager] Fatal processor error, stopping recording`,e),this.startupAborted=!0,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.recordingState=RC,this.callbacks.onStateChange(this.recordingState),this.recordingSeconds=0,this.callbacks.onError(e))}},UC=class{constructor(e){this.client=null,this.createTelemetryClient=e.createTelemetryClient}initialize(e,t){typeof e==`string`&&e.length>0&&typeof t==`string`&&t.length>0&&(this.client=this.createTelemetryClient(e,t))}sendEvent(e,t,n){if(!this.client)return;let r={name:e};t&&(r={...r,properties:t}),n&&(r={...r,error:n}),this.client.triggerTelemetryEvent(r)}async executeAction(e){e.requestedEvent&&this.sendEvent(e.requestedEvent,e.properties);let t=null;if(await e.action().catch(e=>{t=e}),t)throw this.sendEvent(e.failedEvent,e.properties,t),t;this.sendEvent(e.succeededEvent,e.properties)}async executeActionWithResult(e){e.requestedEvent&&this.sendEvent(e.requestedEvent,e.properties);let t=null,n=null;if(await e.action().then(e=>{n=e}).catch(e=>{t=e}),t)throw this.sendEvent(e.failedEvent,e.properties,t),t;if(n===null)throw Error(`Telemetry action failed to return result`);let r=this.resolveResultTelemetryProperties(n,e.getPropertiesFromResult),i=this.mergeTelemetryProperties(e.properties,r);return this.sendEvent(e.succeededEvent,i),n}resolveResultTelemetryProperties(e,t){if(t!==void 0)return t(e)}mergeTelemetryProperties(e,t){if(!(e===void 0&&t===void 0))return e===void 0?t:t===void 0?e:{...e,...t}}},WC=class{constructor(){this.metadataById=new Map}getMetadata(e){return this.metadataById.get(e)}setMetadata(e,t){let n=new Map(this.metadataById);n.set(e,t),this.metadataById=n}clearMetadata(e){let t=new Map(this.metadataById);t.delete(e),this.metadataById=t}};let GC=`[RecorderController]`;var KC=class{constructor(e={}){this.uploadService=null,this.uploadQueueManager=null,this.isInitialized=!1,this.isDemo=!1,this.isDestroyed=!1,this.enableTabVisibilityOverlay=!1,this.recordingWarmupTimeoutId=null,this.audioTelemetryUnsub=null,this.callbacks=e,this.streamManager=new Wx,this.configManager=new dn,this.storageManager=new jb,this.deviceManager=new fn(this.streamManager,e.device),this.audioLevelAnalyzer=new o,this.uploadService=new bS,this.uploadCallbacks=MS(e),this.telemetryManager=new UC({createTelemetryClient:vS}),this.uploadMetadataManager=new WC;let t=IS(e,{stopAudioTracking:()=>this.audioLevelAnalyzer.stopTracking(),getConfig:()=>Promise.resolve(this.configManager.getConfigForRecording()),getRouteDecision:async()=>await this.resolveRecordingRouteDecision(`live-recorder`),onAudioWarning:e.recording?.onAudioWarning?t=>{this.sendAudioWarningTelemetry(t),e.recording?.onAudioWarning?.(t)}:e=>{this.sendAudioWarningTelemetry(e)},...e.recording?.onAudioRecovered&&{onAudioRecovered:e.recording.onAudioRecovered},...e.recording?.onTranscodingProgress&&{onTranscodingProgress:e.recording.onTranscodingProgress}});this.recordingManager=new HC(this.streamManager,t);let n=LS(e,{isRecording:()=>this.isRecording(),updateSourceType:e=>{this.recordingManager.updateSourceType(e)},getSelectedCameraDeviceId:()=>this.deviceManager.getSelectedCameraDeviceId(),getSelectedMicDeviceId:()=>this.deviceManager.getSelectedMicDeviceId()});this.sourceSwitchManager=new lx(this.streamManager,n);let r=e.stream;r&&(this.streamManager.on(`streamstart`,({stream:e})=>{$.debug(`${GC} streamstart event received, calling callback`),r.onStreamStart&&r.onStreamStart(e)}),this.streamManager.on(`streamstop`,()=>{$.debug(`${GC} streamstop event received, calling callback`),r.onStreamStop&&r.onStreamStop()}),this.streamManager.on(`error`,({error:e})=>{$.error(`${GC} stream error event received, calling callback`,e),this.telemetryManager.sendEvent(`stream.error`,{sourceType:this.getCurrentSourceType()},e),r.onError&&r.onError(e)})),this.audioTelemetryUnsub=this.streamManager.on(`audiotelemetry`,({event:e})=>{let t=this.getBrowserNameForTelemetry();this.telemetryManager.sendEvent(e.name,{...e.properties,browserName:t,sourceType:this.getCurrentSourceType()},e.error)})}async initialize(e){if(this.isInitialized)return;await this.validateRecorderSupport();let t=!1;typeof e.demo==`boolean`&&(t=e.demo),this.isDemo=t;let n=null;typeof e.apiKey==`string`&&e.apiKey.length>0&&(n=e.apiKey);let r=null;typeof e.backendUrl==`string`&&e.backendUrl.length>0&&(r=e.backendUrl),this.telemetryManager.initialize(n,r),await this.telemetryManager.executeAction({requestedEvent:`sdk.init.started`,succeededEvent:`sdk.init.succeeded`,failedEvent:`sdk.init.failed`,action:async()=>{await this.initializeConfig(n,r),this.applyRecordingConfig(e),await this.initializeStorage(),this.isInitialized=!0,this.scheduleRecordingWarmup()}})}async startStream(){let e=this.getCurrentSourceType();await this.telemetryManager.executeAction({succeededEvent:`preview.start.succeeded`,failedEvent:`preview.start.failed`,action:async()=>{$.debug(`${GC} startStream called`),await this.streamManager.startStream(),this.ignorePromiseRejection(this.ensureConfigReady()),this.ignorePromiseRejection(this.configManager.getConfig().then(e=>{this.recordingManager.prewarmStreamProcessor(e)})),this.prewarmSupportCheck(),$.debug(`${GC} startStream completed`)},properties:{sourceType:e}})}async stopStream(){await this.streamManager.stopStream()}switchVideoDevice(e){return this.streamManager.switchVideoDevice(e)}switchAudioDevice(e){return this.streamManager.switchAudioDevice(e)}async startRecording(){let e=this.getCurrentSourceType();await this.telemetryManager.executeAction({requestedEvent:`recording.start.requested`,succeededEvent:`recording.start.succeeded`,failedEvent:`recording.start.failed`,action:async()=>{await this.ensureConfigReady(),await this.streamManager.waitForAudio(),await this.recordingManager.startRecording()},properties:{sourceType:e}})}async stopRecording(){let e=this.getCurrentSourceType();try{return(await this.telemetryManager.executeActionWithResult({requestedEvent:`recording.stop.requested`,succeededEvent:`recording.stop.succeeded`,failedEvent:`recording.stop.failed`,action:async()=>{let e=await this.recordingManager.stopRecording();return await this.sourceSwitchManager.handleRecordingStop().catch(()=>{throw Error(`Source switch cleanup failed`)}),this.streamManager.stopStream(),e},properties:{sourceType:e},getPropertiesFromResult:e=>e.telemetryProperties})).blob}catch(e){throw xb(e)&&this.sendAudioMissingTelemetry(e),e}}sendAudioMissingTelemetry(e){let t={code:e.code,sourceType:this.getCurrentSourceType(),browserName:this.getBrowserNameForTelemetry()};e.details&&(t.durationMs=e.details.durationMs,t.totalChunks=e.details.totalChunks,t.nonSilentChunks=e.details.nonSilentChunks,t.mutedDurationMs=e.details.mutedDurationMs,t.silenceRatio=e.details.durationMs>0?e.details.mutedDurationMs/e.details.durationMs:0,t.hadTrackEndedWarning=e.details.hadTrackEndedWarning),this.telemetryManager.sendEvent(`recording.audio-missing`,t)}getTabVisibilityOverlayConfig(){return{enabled:this.enableTabVisibilityOverlay,text:this.tabVisibilityOverlayText}}pauseRecording(){this.recordingManager.pauseRecording()}resumeRecording(){this.recordingManager.resumeRecording()}async switchSource(e){await this.telemetryManager.executeAction({requestedEvent:`source.switch.requested`,succeededEvent:`source.switch.succeeded`,failedEvent:`source.switch.failed`,action:async()=>{await this.sourceSwitchManager.toggleSource()},properties:{sourceType:e}})}setCameraDevice(e){this.deviceManager.setCameraDevice(e)}setMicDevice(e){this.deviceManager.setMicDevice(e)}getAvailableDevices(){return this.deviceManager.getAvailableDevices()}muteAudio(){this.streamManager.muteAudio()}unmuteAudio(){this.streamManager.unmuteAudio()}toggleMute(){this.streamManager.toggleMute()}getIsMuted(){return this.streamManager.isMuted()}startAudioLevelTracking(e,t){if(!t)throw Error(`Audio level callbacks are required`);return this.audioLevelAnalyzer.startTracking(e,t,()=>this.streamManager.isMuted()),Promise.resolve()}stopAudioLevelTracking(){this.audioLevelAnalyzer.stopTracking()}getAudioLevel(){return this.audioLevelAnalyzer.getAudioLevel()}async uploadVideo(e,t,n,r){this.uploadCallbacks.onClearStatus();let i=await Cv(e),a=this.configManager.getConfigForRecording().format,o=`recording-${Date.now()}.${iy(a)}`,s=ry(a),c=this.getCurrentSourceType(),l;if(Object.keys(r).length>0&&(l=r),this.telemetryManager.sendEvent(`upload.started`,{filename:o,duration:i,sourceType:c}),!this.uploadQueueManager){await this.uploadDirectlyWithoutQueue({blob:e,apiKey:t,backendUrl:n,filename:o,mimeType:s,duration:i,sourceType:c,userMetadata:l});return}let u=await this.uploadQueueManager.queueUpload({blob:e,apiKey:t,backendUrl:n,filename:o,mimeType:s,duration:i,metadata:void 0,userMetadata:l});this.uploadMetadataManager.setMetadata(u,{filename:o,duration:i,sourceType:c})}async uploadDirectlyWithoutQueue(e){if(!this.uploadService){let t=Error(`Upload service not available`);throw this.uploadCallbacks.onError(t),this.telemetryManager.sendEvent(`upload.failed`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType},t),t}try{let t=await this.uploadService.uploadVideo(e.blob,{apiKey:e.apiKey,backendUrl:e.backendUrl,filename:e.filename,mimeType:e.mimeType,metadata:void 0,userMetadata:e.userMetadata,onProgress:this.uploadCallbacks.onProgress});this.uploadCallbacks.onSuccess(t),this.telemetryManager.sendEvent(`upload.succeeded`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType,recordingId:t.id})}catch(t){let n=t instanceof Error?t:Error(i(t));throw this.uploadCallbacks.onError(n),this.telemetryManager.sendEvent(`upload.failed`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType},n),n}}getStream(){return this.streamManager.getStream()}isConfigReady(){return this.configManager.isConfigReady()}ensureConfigReady(){return this.isDemo||this.configManager.isConfigReady()?Promise.resolve():this.configManager.fetchConfig().then(()=>void 0).catch(()=>void 0)}cleanup(){this.isDestroyed=!0,this.recordingWarmupTimeoutId!==null&&(clearTimeout(this.recordingWarmupTimeoutId),this.recordingWarmupTimeoutId=null),this.audioTelemetryUnsub&&=(this.audioTelemetryUnsub(),null),this.uploadQueueManager?.destroy(),this.storageManager.destroy(),this.recordingManager.cleanup(),this.audioLevelAnalyzer.stopTracking(),this.sourceSwitchManager.cleanup()}getRecordingState(){return this.recordingManager.getRecordingState()}isPaused(){return this.recordingManager.isPausedState()}getCurrentSourceType(){return this.sourceSwitchManager.getCurrentSourceType()}getOriginalCameraStream(){return this.sourceSwitchManager.getOriginalCameraStream()}getStreamManager(){return this.streamManager}getAudioStreamForAnalysis(){return this.streamManager.getAudioStreamForAnalysis()}getDeviceManager(){return this.deviceManager}getConfig(){return this.configManager.getConfig()}getUploadService(){return this.uploadService}isRecording(){return this.streamManager.isRecording()}isActive(){return this.streamManager.isActive()}isAudioReady(){return this.streamManager.isAudioReady()}getAudioStatus(){return this.streamManager.getAudioStatus()}sendAudioWarningTelemetry(e){let t={code:e.code,sourceType:this.getCurrentSourceType(),browserName:this.getBrowserNameForTelemetry()};`durationMs`in e&&(t.durationMs=e.durationMs),`peak`in e&&(t.peak=e.peak),`rms`in e&&(t.rms=e.rms),this.telemetryManager.sendEvent(`audio.warning`,t)}getBrowserNameForTelemetry(){try{return Mt()}catch{return`unknown`}}async resolveRecordingRouteDecision(e){let t=this.configManager.getConfigForRecording(),n=this.buildCodecProbeCandidates(t),r=await Lv({codecCandidates:n}),i=Gv({profile:r,targetCodecIds:n.map(e=>e.id)});return this.telemetryManager.sendEvent(`recording.route.selected`,{routeDecision:this.buildRouteTelemetryProperties(i,r,e)}),i}buildCodecProbeCandidates(e){let t=e.width??1280,n=e.height??720,r=typeof e.bitrate==`number`?e.bitrate:25e5,i=e.fps??30;return this.resolveTargetCodecIds(e.codec).map(e=>({id:`${e}-${t}x${n}`,config:{codec:e,width:t,height:n,bitrate:r,framerate:i}}))}resolveTargetCodecIds(e){switch(e){case`avc`:return[`avc1.640028`,`avc1.42001f`];case`vp9`:return[`vp09.00.10.08`];case`vp8`:return[`vp8`];case`av1`:return[`av01.0.08M.08`];case`hevc`:return[`hvc1.1.6.L123.B0`];default:return[`avc1.640028`,`avc1.42001f`,`vp09.00.10.08`,`vp8`]}}buildRouteTelemetryProperties(e,t,n){return{selectedRoute:e.route,reasonCodes:e.reasonCodes,sourceType:n,clientTranscodeDeferred:e.route===`safe-capture-post-recording-transcode`,capabilitySummary:{browserName:t.browser.normalizedName,osName:t.os.name,deviceMemory:t.resources.deviceMemory??null,hardwareConcurrency:t.resources.hardwareConcurrency??null,effectiveType:t.network.effectiveType??null,online:t.network.online??null,isSecureContext:t.features.isSecureContext,hasMediaRecorder:t.features.hasMediaRecorder,hasVideoEncoder:t.features.hasVideoEncoder,supportedCodecIds:t.codecProbeResults.filter(e=>e.supported).map(e=>e.id)}}}async initializeConfig(e,t){let n=!0;e===null&&(n=!1),t===null&&(n=!1),n&&e!==null&&t!==null&&await this.configManager.initialize(e,t)}applyRecordingConfig(e){e.countdownDuration!==void 0&&this.recordingManager.setCountdownDuration(e.countdownDuration),e.maxRecordingTime!==void 0&&this.recordingManager.setMaxRecordingTime(e.maxRecordingTime),e.enableTabVisibilityOverlay!==void 0&&(this.enableTabVisibilityOverlay=e.enableTabVisibilityOverlay),e.tabVisibilityOverlayText!==void 0&&(this.tabVisibilityOverlayText=e.tabVisibilityOverlayText),this.recordingManager.setTabVisibilityOverlayConfig(this.enableTabVisibilityOverlay,this.tabVisibilityOverlayText)}async initializeStorage(){if(this.isDestroyed)return;let e=PS(this.callbacks);try{await this.storageManager.initialize(e)}catch(e){let t=e instanceof Error?e:Error(i(e)),n=i(t);this.telemetryManager.sendEvent(`storage.init.failed`,{reason:n},t),FS(this.callbacks)(n);return}if(this.isDestroyed)return;let t=this.storageManager.getWriteProbeResult();if(!t?.ok){let e=t?.reason??`Storage write probe did not complete`;this.telemetryManager.sendEvent(`storage.write.probe.failed`,{reason:e}),FS(this.callbacks)(e);return}let n=this.storageManager.getStorageService();n&&this.uploadService&&(this.uploadQueueManager=new yS(n,this.uploadService),this.uploadQueueManager.setCallbacks({onUploadProgress:(e,t)=>{this.uploadCallbacks.onProgress(t)},onUploadComplete:(e,t)=>{this.uploadCallbacks.onSuccess(t);let n=this.uploadMetadataManager.getMetadata(e);n&&(this.telemetryManager.sendEvent(`upload.succeeded`,{filename:n.filename,duration:n.duration,sourceType:n.sourceType,recordingId:t.id}),this.uploadMetadataManager.clearMetadata(e))},onUploadError:(e,t)=>{this.uploadCallbacks.onError(t);let n=this.uploadMetadataManager.getMetadata(e);n&&(this.telemetryManager.sendEvent(`upload.failed`,{filename:n.filename,duration:n.duration,sourceType:n.sourceType},t),this.uploadMetadataManager.clearMetadata(e))}}))}async validateRecorderSupport(){Ft();let e=await ub({requiresAudio:!1,requiresWatermark:!1});if(!e.isSupported)throw Nt({missingCapabilities:e.missing,resolutionStage:`feature-preflight`})}scheduleRecordingWarmup(){this.recordingWarmupTimeoutId!==null&&(clearTimeout(this.recordingWarmupTimeoutId),this.recordingWarmupTimeoutId=null),!this.isDestroyed&&(this.recordingWarmupTimeoutId=setTimeout(()=>{this.recordingWarmupTimeoutId=null,!this.isDestroyed&&(this.ignorePromiseRejection(this.ensureConfigReady()),this.ignorePromiseRejection(this.configManager.getConfig().then(e=>{this.recordingManager.prewarmStreamProcessor(e)})))},0))}ignorePromiseRejection(e){e.catch(()=>void 0)}prewarmSupportCheck(){this.ignorePromiseRejection(ub({requiresAudio:!0,requiresWatermark:!0}).then(e=>{this.streamManager.setPreResolvedSupportReport(e)}))}};let qC=/<a\s[^>]*href="(?<href>[^"]+)"[^>]*>(?<text>[^<]+)<\/a>/,JC=/\starget=["'](?<target>[^"']+)["']/,YC=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,XC=`{version}`;function ZC(e,t){return e?e.toLowerCase().includes(t):!1}function QC(e){let t=e.trim();if(!t)return null;let n=t.toLowerCase();return!YC.test(n)||n.startsWith(`http:`)||n.startsWith(`https:`)?t:null}function $C(e,t,n,r){return e===`browser.unsupported`?r.browserUnsupportedDynamic?nw(r.browserUnsupportedDynamic,t,n):ZC(t,`safari`)?r.browserUnsupportedSafari:ZC(t,`firefox`)?r.browserUnsupportedFirefox:r.browserUnsupported:r.browserUnsupported}function ew(e,t){return e===`camera.in-use`?t.cameraInUse:e===`camera.not-found`?t.cameraNotFound:e===`camera.permission-denied`?t.cameraPermissionDenied:e===`camera.timeout`?t.cameraTimeout??t.failedToStartCamera:t.failedToStartCamera}function tw(e,t){return e===`audio.in-use`?t.audioInUse:e===`audio.not-found`?t.audioNotFound:e===`audio.permission-denied`?t.audioPermissionDenied:e===`audio.timeout`?t.audioTimeout??t.failedToStartAudio:t.failedToStartAudio}function nw(e,t,n){let r=`This browser`;t&&t.trim().length>0&&(r=t);let i=e.replace(`{browser}`,r);return n&&n.trim().length>0&&n?(i=i.replace(XC,n),i):(i=i.replace(` ({version})`,``),i=i.replace(XC,``),i)}function rw(e){let t=qC.exec(e);if(!t?.groups)return{prefix:e,linkText:null,linkHref:null,linkTarget:null,suffix:``};let n=t.index,r=n+t[0].length,i=e.slice(0,n),a=e.slice(r),o=QC(t.groups.href);if(!o)return{prefix:i+t.groups.text+a,linkText:null,linkHref:null,linkTarget:null,suffix:``};let s=JC.exec(t[0])?.groups?.target??null;return{prefix:i,linkText:t.groups.text,linkHref:o,linkTarget:s,suffix:a}}function iw(){let e=globalThis.navigator&&typeof globalThis.navigator.userAgent==`string`?globalThis.navigator.userAgent:``,t=new wt(e).getResult(),n=t.device.type,r=n===`mobile`||n===`tablet`;return $.debug(`Mobile detection result`,{userAgent:e,deviceType:n,isMobile:r,device:t.device,os:t.os,browser:t.browser}),r}function aw(){let e=jt(),t=null;e.name.length>0&&(t=e.name);let n=null;return e.version.length>0&&(n=e.version),{browserName:t,browserVersion:n}}function ow(e){let t=t=>{if(!(`code`in t))return;let n=t;if(n.code!==`browser.unsupported`){(n.code?.startsWith(`camera.`)||n.code?.startsWith(`audio.`)||n.code?.startsWith(`recording.`))&&e.updateState({errorCode:n.code,canRetry:!0,browserName:null,browserVersion:null});return}let r=aw(),i=r.browserName;n.browserName&&n.browserName.length>0&&(i=n.browserName);let a=r.browserVersion;n.browserVersion&&n.browserVersion.length>0&&(a=n.browserVersion),e.updateState({errorCode:`browser.unsupported`,canRetry:!1,browserName:i,browserVersion:a})};return{recording:{onStateChange:t=>{e.updateState({recordingState:t}),t===`idle`&&(e.isProcessingBlob=!1)},onCountdownUpdate:(t,n)=>{e.updateState({recordingState:t,countdown:n})},onTimerUpdate:t=>{e.updateState({timer:t})},onError:n=>{t(n),e.updateState({error:i(n),transcodingProgress:null})},onRecordingComplete:t=>{e.updateState({countdown:null}),e.processRecordingBlob(t).catch(t=>{e.updateState({error:i(t)})})},onClearUploadStatus:()=>{e.updateState({uploadProgress:null})},onTranscodingProgress:t=>{e.updateState({transcodingProgress:t})},onAudioWarning:t=>{e.updateState({audioWarning:t}),e.dispatchEvent(new CustomEvent(`vidtreo:audio-warning`,{detail:t}))},onAudioRecovered:()=>{e.updateState({audioWarning:null}),e.dispatchEvent(new CustomEvent(`vidtreo:audio-recovered`))},onStopAudioTracking:()=>void 0,onGetConfig:()=>{if(!e.controller)throw Error(`Controller not initialized`);return e.isDemo?Promise.resolve(Zt(`mp4`)):e.controller.getConfig()}},sourceSwitch:{onSourceChange:e=>Promise.resolve(),onPreviewUpdate:t=>(e.updateState({stream:t}),Promise.resolve()),onError:n=>{t(n),e.updateState({error:i(n)})},onTransitionStart:t=>{e.updateState({transitionMessage:t})},onTransitionEnd:()=>{e.updateState({transitionMessage:null})}},storage:{onUploadProgress:()=>void 0,onUploadComplete:()=>void 0,onUploadError:()=>void 0},onStorageCleanupError:t=>{e.updateState({error:t})}}}function sw(e,t){let n=(e=>e===``||e===`default`?null:e)(t);return e.setCameraDevice(n),e.switchVideoDevice(n)}function cw(e,t){let n=(e=>e===``||e===`default`?null:e)(t);return e.setMicDevice(n),e.switchAudioDevice(n)}async function lw(e,t=`camera`){e.isActive()||await e.startStream(),t!==e.getCurrentSourceType()&&await e.switchSource(t),await e.startRecording()}async function uw(e,t,n,r){return await e.stopRecording()}function dw(e){e.pauseRecording()}function fw(e){e.resumeRecording()}async function pw(e,t){await e.switchSource(t)}let mw=`camera`,hw=`screen`,gw=`recording`,_w=`browser.unsupported`,vw=[.8,1.2,.9];function yw(e,t){let{uploadProgress:n,uploadingLabel:r}=e,{overlay:i,fill:a,text:o}=t;if(!i)return;if(n===null){i.style.display=`none`;return}i.style.display=`block`;let s=Math.round(n*100);a&&(a.style.width=`${s}%`),o&&(o.textContent=`${r} ${s}%`)}function bw(e,t){let{transitionMessage:n}=e,{overlay:r,message:i}=t;if(r){if(!n){r.classList.remove(`vidtreo-active`);return}r.classList.add(`vidtreo-active`),i&&(i.textContent=n)}}let xw=`none`,Sw=`flex`,Cw=`inline-flex`,ww=`checking`,Tw=`blocked`,Ew=`ready`,Dw=`vidtreo-active`,Ow=`vidtreo-permission-flow--fading`,kw=`vidtreo-permission-flow-action--requesting`;function Aw(e){return{container:e.querySelector(`#permissionFlow`),spinner:e.querySelector(`#permissionFlowSpinner`),title:e.querySelector(`#permissionFlowTitle`),subtitle:e.querySelector(`#permissionFlowSubtitle`),actionButton:e.querySelector(`#btnAllowPermission`),buttonIcon:e.querySelector(`#permissionFlowBtnIcon`),buttonSpinner:e.querySelector(`#permissionFlowBtnSpinner`),buttonText:e.querySelector(`#permissionFlowBtnText`),recovery:e.querySelector(`#permissionFlowRecovery`),recoveryTitle:e.querySelector(`#permissionFlowRecoveryTitle`),recoveryText:e.querySelector(`#permissionFlowRecoveryText`),retryButton:e.querySelector(`#btnRetryPermission`),recoveryGuideUrl:e.querySelector(`#recoveryGuideUrl`),recoveryGuidePopoverUrl:e.querySelector(`#recoveryGuidePopoverUrl`)}}function jw(e){return e.permissions.camera===`granted`?`microphone`:`camera`}function Mw(e,t){return t.cameraTitle}function Nw(e,t){return t.cameraLabel}function Pw(e,t){return t.allowCamera}function Fw(e,t,n){let r=e.step,i=!1;(r===ww||r===`awaiting-user`||r===Tw||r===Ew)&&(i=!0);let a=r===Ew,o=r===Tw,s=r===ww,c=jw(e),l=Mw(c,t),u=Nw(c,t),d=Pw(c,t),f=t.recoveryInstructions;return e.recoveryData?.resetInstructions&&(f=e.recoveryData.resetInstructions),{isVisible:i,isFadingOut:n,isSpinnerOnly:a,isBlocked:o,isRequesting:s,titleText:l,subtitleText:u,actionLabel:d,requestingText:t.statusRequesting,recoveryTitleText:t.recoveryTitle,recoveryInstructionsText:f}}function Iw(e,t,n){if(e){if(t){e.style.display=n;return}e.style.display=xw}}function Lw(e,t){if(t.isVisible)e.classList.add(Dw);else return e.classList.remove(Dw),e.classList.remove(Ow),!1;return t.isFadingOut?e.classList.add(Ow):e.classList.remove(Ow),!0}function Rw(e,t,n){Iw(e.actionButton,n,Cw),e.actionButton&&(t.isRequesting?(e.actionButton.classList.add(kw),e.actionButton.disabled=!0):(e.actionButton.classList.remove(kw),e.actionButton.disabled=!1)),Iw(e.buttonIcon,n&&!t.isRequesting,Cw),Iw(e.buttonSpinner,n&&t.isRequesting,Cw),e.buttonText&&(t.isRequesting?e.buttonText.textContent=t.requestingText:e.buttonText.textContent=t.actionLabel)}function zw(){if(globalThis.window===void 0)return`vidtreo.com`;let e=globalThis.window.location.hostname||`vidtreo.com`;return e.length>20?`${e.slice(0,20)}...`:e}function Bw(e,t){if(Iw(e.recovery,t.isBlocked,Sw),e.recoveryTitle&&(e.recoveryTitle.textContent=t.recoveryTitleText),Iw(e.recoveryText,!1,xw),Iw(e.retryButton,!1,xw),t.isBlocked){let t=zw();e.recoveryGuideUrl&&(e.recoveryGuideUrl.textContent=t),e.recoveryGuidePopoverUrl&&(e.recoveryGuidePopoverUrl.textContent=t)}}function Vw(e,t){t&&(e.actionButton&&t.onAllow&&(e.actionButton.onclick=t.onAllow),e.retryButton&&t.onRetry&&(e.retryButton.onclick=t.onRetry))}function Hw(e,t,n){let{container:r}=t;if(!r||!Lw(r,e))return;let i=!e.isSpinnerOnly;Iw(t.spinner,e.isSpinnerOnly,Cw),Iw(t.title,i&&!e.isBlocked,Sw),Iw(t.subtitle,i&&!e.isBlocked,Sw),t.title&&(t.title.textContent=e.titleText),t.subtitle&&(t.subtitle.textContent=e.subtitleText),Rw(t,e,i&&!e.isBlocked),Bw(t,e),Vw(t,n)}function Uw(e,t){e.textContent=``;let n=document.createTextNode(t.prefix);if(e.append(n),t.linkText&&t.linkHref){let n=document.createElement(`a`),r=t.linkTarget;n.href=t.linkHref,r&&(n.target=r),r===`_blank`&&(n.rel=`noopener noreferrer`),n.textContent=t.linkText,e.append(n)}let r=document.createTextNode(t.suffix);e.append(r)}function Ww(e){let{stream:t,transitionMessage:n,isVideoLoaded:r}=e;return{showPreviewSkeleton:!!t&&!r&&!n,showVideoPreview:!!t}}function Gw(e,t){let{previewSkeleton:n,videoPreview:r}=t;n&&(e.showPreviewSkeleton?n.style.display=`block`:n.style.display=`none`),r&&(e.showVideoPreview?r.style.display=`block`:r.style.display=`none`)}function Kw(e,t,n){let{videoPreview:r}=t,{onVideoLoaded:a,onError:o,startAudioAnalysis:s,stopAudioAnalysis:c}=n;if(r){if(!e){r.srcObject=null,c();return}r.srcObject=e,r.onloadeddata=()=>{a()},r.play().catch(e=>o(i(e))),s(e)}}function qw(e){return{startCameraArea:e.querySelector(`#startCameraArea`),startCameraButton:e.querySelector(`#startCameraButton`),cameraIcon:e.querySelector(`#startCameraArea .vidtreo-camera-icon`),cameraText:e.querySelector(`#startCameraArea .vidtreo-camera-text`),cameraHint:e.querySelector(`#startCameraArea .vidtreo-camera-hint`),previewSkeleton:e.querySelector(`#previewSkeleton`),previewSkeletonText:e.querySelector(`#previewSkeleton .vidtreo-skeleton-text`),videoPreview:e.querySelector(`#videoPreview`),countdownOverlay:e.querySelector(`#countdownOverlay`),countdownNumber:e.querySelector(`#countdownNumber`),recordingTimerRow:e.querySelector(`#recordingTimerRow`),recordingTimer:e.querySelector(`#recordingTimer`),recIndicatorTop:e.querySelector(`#recIndicatorTop`),audioLevelBars:e.querySelector(`#audioLevelBars`)}}function Jw(e,t,n,r,i,a){if(e.stream)return{shouldShow:!1,iconClassName:``,browserErrorContent:null,textContent:null,hintText:null,retryButtonLabel:null};let o=oS({errorCode:e.errorCode,hasAudioFailed:!1,error:null}),s=o.isCameraError||o.isAudioError,c=!(o.isBrowserUnsupported||s),l=o.isBrowserUnsupported||s?`ph-fill ph-warning-circle`:`ph-fill ph-camera`,u=null,d=null;o.isBrowserUnsupported&&(u=rw(n)),o.isAudioError&&(d=i),o.isCameraError&&(d=r),c&&(d=t.initializingCamera);let f=c?t.grantPermissions:null,p=s&&!o.isPermissionDenied?a:null;return{shouldShow:!0,iconClassName:l,browserErrorContent:u,textContent:d,hintText:f,retryButtonLabel:p}}function Yw(e,t){let n=!1;return e&&(n=!0),{shouldShow:n,text:t.switchingDevice}}function Xw(e,t,n){let r=!1;return e===`countdown`&&t!==null&&(r=!0),{shouldShow:r,countdown:t,text:n.recordingStartsIn}}function Zw(e,t){return{shouldShow:e,text:t.rec}}function Qw(e,t){return{shouldShow:e,timer:t}}function $w(e){return{shouldShow:e}}function eT(e,t){let{state:n,isVideoLoaded:r,isRecording:i,translations:a}=e;tT(Jw(n,a,$C(n.errorCode,n.browserName,n.browserVersion,{browserUnsupported:a.browserUnsupported,browserUnsupportedDynamic:a.browserUnsupportedDynamic,browserUnsupportedSafari:a.browserUnsupportedSafari,browserUnsupportedFirefox:a.browserUnsupportedFirefox}),ew(n.errorCode??``,{cameraInUse:a.cameraInUse,cameraNotFound:a.cameraNotFound,cameraPermissionDenied:a.cameraPermissionDenied,cameraTimeout:a.cameraTimeout,failedToStartCamera:a.failedToStartCamera}),tw(n.errorCode??``,{audioInUse:a.audioInUse,audioNotFound:a.audioNotFound,audioPermissionDenied:a.audioPermissionDenied,audioTimeout:a.audioTimeout,failedToStartAudio:a.failedToStartAudio}),a.retryCamera),t,e.onRetryCamera),nT(Yw(n.transitionMessage,a),t),Gw(Ww({stream:n.stream,transitionMessage:n.transitionMessage,isVideoLoaded:r}),{previewSkeleton:t.previewSkeleton,videoPreview:t.videoPreview}),rT(Xw(n.recordingState,n.countdown,a),t),iT(Zw(i,a),t),aT(Qw(i,n.timer),t),oT($w(i),t)}function tT(e,t,n){let{startCameraArea:r,startCameraButton:i,cameraIcon:a,cameraText:o,cameraHint:s}=t;if(r){if(!e.shouldShow){r.style.display=`none`;return}r.style.display=`block`,a&&(a.innerHTML=`<i class="${e.iconClassName}" style="font-size: 48px;"></i>`),o&&(e.browserErrorContent&&Uw(o,e.browserErrorContent),e.textContent&&(o.textContent=e.textContent)),s&&(e.hintText?(s.textContent=e.hintText,s.style.display=`block`):s.style.display=`none`),i&&(e.retryButtonLabel?(i.textContent=e.retryButtonLabel,i.hidden=!1,i.className=`vidtreo-error-retry`,i.onclick=e=>{e.preventDefault(),e.stopPropagation(),n&&n()}):(i.hidden=!0,i.onclick=null))}}function nT(e,t){let{previewSkeleton:n,previewSkeletonText:r}=t;n&&(e.shouldShow?n.style.display=`block`:n.style.display=`none`,r&&(r.textContent=e.text))}function rT(e,t){let{countdownOverlay:n,countdownNumber:r}=t;n&&(e.shouldShow?n.classList.add(`vidtreo-active`):n.classList.remove(`vidtreo-active`),r&&e.countdown!==null&&(r.textContent=e.countdown.toString()))}function iT(e,t){let{recIndicatorTop:n}=t;n&&(e.shouldShow?n.style.display=`block`:n.style.display=`none`)}function aT(e,t){let{recordingTimerRow:n,recordingTimer:r}=t;n&&(e.shouldShow?n.style.display=`flex`:n.style.display=`none`,r&&(r.textContent=e.timer))}function oT(e,t){let{audioLevelBars:n}=t;n&&(e.shouldShow?n.style.display=`flex`:n.style.display=`none`)}let sT=`inline-flex`;function cT(e){let{stream:t,buttonVisibility:n,currentSourceType:r,isMuted:i,isAudioReady:a,isStopLocked:o,stopLockedTooltip:s,recordingState:c,buttonTranslations:l}=e,u=!!t,d=c===`idle`&&u,f=d&&!a,p=f?l.microphoneConnecting:``,m=!1;(n.showPauseButton||n.showResumeButton)&&(m=!0);let h=l.pause,g=`ph-fill ph-pause`;n.showResumeButton&&(h=l.resume,g=`ph-fill ph-play`);let _=l.mute,v=`ph-fill ph-microphone`;i&&(_=l.unmute,v=`ph-fill ph-microphone-slash`);let y=`ph-fill ph-monitor`;r!==mw&&(y=`ph-fill ph-camera`);let b=!1;return n.showDownloadButton&&(b=!0),{showRecordingControls:u,showSettingsButton:n.showSettingsButton,showRecordButton:d,isRecordDisabled:f,recordTooltip:p,showMuteButton:n.showMuteButton,showPauseButton:m,showStopButton:n.showStopButton,showSwitchSourceButton:n.showSwitchSourceButton,showDownloadButton:b,pauseTitle:h,pauseIconClassName:g,muteTitle:_,muteIconClassName:v,switchSourceIconClassName:y,isMuted:i,isStopLocked:o,stopLockedTooltip:s,settingsTitle:l.settings,switchSourceTitle:l.switchSource,downloadTitle:l.download,buttonTranslations:l}}function lT(e){return{recordingControls:e.querySelector(`#recordingControls`),settingsButton:e.querySelector(`#btnSettings`),recordButton:e.querySelector(`#btnRecord`),muteButton:e.querySelector(`#btnMute`),muteIcon:e.querySelector(`#iconMute`),pauseButton:e.querySelector(`#btnPause`),pauseIcon:e.querySelector(`#iconPause`),stopButton:e.querySelector(`#btnStop`),switchSourceButton:e.querySelector(`#btnSwitchSource`),switchSourceIcon:e.querySelector(`#iconSwitchSource`),downloadButton:e.querySelector(`#btnDownload`)}}function uT(e,t){let{recordingControls:n,settingsButton:r,recordButton:i,muteButton:a,muteIcon:o,pauseButton:s,pauseIcon:c,stopButton:l,switchSourceButton:u,switchSourceIcon:d,downloadButton:f}=t;fT(n,e),pT(r,e),mT(i,e),hT(a,e),gT(o,e),_T(s,e),vT(c,e),yT(l,e),bT(u,e),xT(d,e),ST(f,e)}function dT(e,t,n){e&&(t?e.style.display=n:e.style.display=`none`)}function fT(e,t){dT(e,t.showRecordingControls,`block`)}function pT(e,t){dT(e,t.showSettingsButton,sT),e&&(e.title=t.settingsTitle)}function mT(e,t){if(dT(e,t.showRecordButton,sT),!e)return;e.disabled=t.isRecordDisabled,e.classList.toggle(`vidtreo-record-button-disabled`,t.isRecordDisabled),e.title=t.recordTooltip,e.setAttribute(`aria-disabled`,String(t.isRecordDisabled));let n=e.querySelector(`i`),r=e.querySelector(`span`);t.isRecordDisabled?(n&&(n.className=`ph-fill ph-microphone vidtreo-mic-connecting-indicator`,n.style.fontSize=`18px`),r&&(r.textContent=t.recordTooltip)):(n&&(n.className=`ph-fill ph-circle`,n.style.fontSize=`24px`),r&&(r.textContent=t.buttonTranslations?.record??`Record`))}function hT(e,t){dT(e,t.showMuteButton,sT),e&&(e.title=t.muteTitle,e.classList.toggle(`vidtreo-muted`,t.isMuted))}function gT(e,t){e&&(e.className=t.muteIconClassName)}function _T(e,t){dT(e,t.showPauseButton,sT),e&&(e.title=t.pauseTitle)}function vT(e,t){e&&(e.className=t.pauseIconClassName)}function yT(e,t){if(dT(e,t.showStopButton,sT),e){if(e.classList.toggle(`vidtreo-stop-button-locked`,t.isStopLocked),e.setAttribute(`aria-disabled`,String(t.isStopLocked)),t.isStopLocked){e.title=t.stopLockedTooltip;return}e.title=``}}function bT(e,t){dT(e,t.showSwitchSourceButton,sT),e&&(e.title=t.switchSourceTitle)}function xT(e,t){e&&(e.className=t.switchSourceIconClassName)}function ST(e,t){dT(e,t.showDownloadButton,sT),e&&(e.title=t.downloadTitle)}function CT(e){let{stream:t,showSettings:n}=e,r=!1;return t&&n&&(r=!0),{shouldShow:r}}function wT(e,t,n){if(t){if(!e.shouldShow){t.classList.remove(`vidtreo-active`);return}t.classList.add(`vidtreo-active`),n()}}function TT(e){return e.toggleMute(),e.getIsMuted()}function ET(e){if(!e)return;let t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`recording-${Date.now()}.mp4`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)}let DT={en:{initializingCamera:`Initializing camera...`,grantPermissions:`Grant camera and microphone permissions when prompted`,browserUnsupported:`This browser is not supported`,browserUnsupportedDynamic:`{browser} ({version}) is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedSafari:`Safari is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedFirefox:`Firefox is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,retryCamera:`Retry Camera`,cameraInUse:`Your camera is being used by another application. Close other apps using the camera (Zoom, Teams, Discord) and try again.`,cameraNotFound:`No camera detected. Connect a camera or check your device settings.`,cameraPermissionDenied:`Camera access was denied. Allow camera access in your browser settings and try again.`,cameraTimeout:`The camera took too long to start. Close other apps using the camera and try again.`,audioInUse:`Your microphone is being used by another application. Close other apps using the microphone (Zoom, Teams, Discord) and try again.`,audioNotFound:`No microphone detected. Connect a microphone or check your device settings.`,audioPermissionDenied:`Microphone access was denied. Allow microphone access in your browser settings and try again.`,audioTimeout:`The microphone took too long to start. Close other apps using the microphone and try again.`,failedToStartAudio:`Failed to start microphone`,audioErrorTitle:`Microphone unavailable`,audioErrorMessage:`We couldn't access your microphone. It may be in use by another app like Zoom, Teams, or Discord. Please close it and try again.`,audioErrorRetry:`Try again`,audioMissingTitle:`Recording has no audio`,audioMissingMessage:`We couldn't capture audio in this recording. Your microphone may have been disconnected or blocked by the browser. Check your microphone and record again.`,audioSilentTitle:`Recording is silent`,audioSilentMessage:`We didn't detect any sound during the recording. Make sure your microphone is working and not muted by your operating system, then record again.`,audioProcessingErrorTitle:`Audio processing error`,audioProcessingErrorMessage:`We couldn't process the audio in this recording. Please record again.`,audioMissingRetry:`Record again`,audioWarningNoSignalTitle:`No microphone signal`,audioWarningNoSignalMessage:`We're not detecting any sound. Check that your microphone is active.`,audioWarningLowSignalTitle:`Audio is very quiet`,audioWarningLowSignalMessage:`Move closer to the microphone or turn up the input volume.`,audioWarningSpeakingMutedTitle:`You're speaking while muted`,audioWarningSpeakingMutedMessage:`Unmute your microphone if you want your voice in the recording.`,audioWarningTrackEndedTitle:`Microphone disconnected`,audioWarningTrackEndedMessage:`The microphone was disconnected. Reconnect it before continuing.`,audioWarningNoChunksTitle:`No microphone input`,audioWarningNoChunksMessage:`We're not receiving audio from the microphone. Check browser permissions.`,audioWarningTrackMutedTitle:`Microphone muted by browser`,audioWarningTrackMutedMessage:`The browser muted your microphone. Check site settings.`,audioWarningDismiss:`Dismiss`,cameraErrorTitle:`Camera unavailable`,cameraErrorMessage:`We couldn't access your camera. It may be in use by another app or permissions may be denied.`,browserErrorTitle:`Browser not supported`,browserErrorMessage:`This browser is not supported. Please use Chrome for the best experience.`,recordingCodecUnsupportedTitle:`Recording format not supported`,recordingCodecUnsupportedMessage:`This device can't use the selected video format. Close other apps, update Chrome if possible, and record again.`,recordingServerTranscodeFallbackTitle:`Finalizing on device`,recordingServerTranscodeFallbackMessage:`We're finishing the video on this device before upload. Keep this tab open.`,recordingTrackEndedTitle:`Camera stopped during recording`,recordingTrackEndedMessage:`The camera feed ended before the recording finished. Check that the camera is still connected and record again.`,recordingFinalizeTimeoutTitle:`Recording took too long to finish`,recordingFinalizeTimeoutMessage:`This device may be low on memory or processing power. Close other apps or browser tabs, then record again.`,recordingStateRaceTitle:`Recording did not start correctly`,recordingStateRaceMessage:`The recording could not be finalized because it did not start cleanly. Please refresh the page and record again.`,recordingNoFramesTitle:`No video was captured`,recordingNoFramesMessage:`We couldn't receive video frames from the camera. Check your camera connection and record again.`,recordingUnsupportedTitle:`Recording not available`,recordingUnsupportedMessage:`This device or browser can't record video reliably right now. Check your connection, update Chrome if possible, or use another device.`,recordingPipelineRetry:`Record again`,genericErrorTitle:`Something went wrong`,genericErrorMessage:`An unexpected error occurred. Please try again.`,errorRetry:`Try again`,switchingDevice:`Switching device...`,recordingStartsIn:`Recording starts in...`,switchingSource:`Switching source...`,rec:`REC`,settings:`Settings`,record:`Record`,stop:`Stop`,pause:`Pause`,resume:`Resume`,mute:`Mute`,unmute:`Unmute`,switchSource:`Switch Source`,camera:`Camera`,microphone:`Microphone`,microphoneConnecting:`Connecting microphone...`,minimumRecordingTimeNotReached:`You have not met the minimum recording time yet`,processVideo:`Process Video`,processing:`Processing...`,finishing:`Finishing...`,uploading:`Uploading...`,switchingCamera:`Switching camera...`,switchingMicrophone:`Switching microphone...`,failedToStartCamera:`Failed to start camera`,userInAnotherTab:`User in another tab`,download:`Download`,nativeCameraSelectVideo:`Select Video from Gallery`,nativeCameraRecordVideo:`Record with Camera`,errorTitle:`Configuration Error`,errorGeneric:`An error occurred while loading the configuration`,mobileOpenCamera:`Open Camera`,mobileOpenCameraTitle:`Record a Video`,mobileOpenCameraDescription:`Tap the button below to start recording`,mobileCloseCamera:`Close`,mobilePermissionDenied:`Camera Access Denied`,mobilePermissionDeniedDescription:`Please allow camera access in your browser settings to record video.`,permissionFlowTitle:`Set Up Your Camera`,permissionFlowCameraTitle:`Camera & Microphone`,permissionFlowMicrophoneTitle:`Camera & Microphone`,permissionFlowCameraLabel:`We need access to your camera and microphone to start recording`,permissionFlowMicrophoneLabel:`We need access to your camera and microphone to start recording`,permissionFlowStatusPending:`Pending`,permissionFlowStatusGranted:`Ready`,permissionFlowStatusDenied:`Blocked`,permissionFlowStatusRequesting:`Click "Allow" in the browser popup above`,permissionFlowAllowCamera:`Allow Access`,permissionFlowAllowMicrophone:`Allow Access`,permissionFlowRetry:`Try Again`,permissionFlowRecoveryTitle:`Allow access to continue`,permissionFlowRecoveryInstructions:`Open your browser settings and allow camera and microphone access, then try again.`,permissionFlowConnecting:`Setting up...`},es:{initializingCamera:`Inicializando cámara...`,grantPermissions:`Otorga permisos de cámara y micrófono cuando se solicite`,browserUnsupported:`Este navegador no es compatible`,browserUnsupportedDynamic:`{browser} ({version}) no es compatible, por favor usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedSafari:`Safari no es compatible, usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedFirefox:`Firefox no es compatible, usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,retryCamera:`Reintentar Cámara`,cameraInUse:`Tu cámara está siendo usada por otra aplicación. Cierra otras apps que usen la cámara (Zoom, Teams, Discord) e intenta de nuevo.`,cameraNotFound:`No se detectó ninguna cámara. Conecta una cámara o revisa la configuración de tu dispositivo.`,cameraPermissionDenied:`Se denegó el acceso a la cámara. Permite el acceso a la cámara en la configuración de tu navegador e intenta de nuevo.`,cameraTimeout:`La cámara tardó demasiado en iniciar. Cierra otras apps que usen la cámara e intenta de nuevo.`,audioInUse:`Tu micrófono está siendo usado por otra aplicación. Cierra otras apps que usen el micrófono (Zoom, Teams, Discord) e intenta de nuevo.`,audioNotFound:`No se detectó ningún micrófono. Conecta un micrófono o revisa la configuración de tu dispositivo.`,audioPermissionDenied:`Se denegó el acceso al micrófono. Permite el acceso al micrófono en la configuración de tu navegador e intenta de nuevo.`,audioTimeout:`El micrófono tardó demasiado en iniciar. Cierra otras apps que usen el micrófono e intenta de nuevo.`,failedToStartAudio:`Error al iniciar el micrófono`,audioErrorTitle:`Micrófono no disponible`,audioErrorMessage:`No pudimos acceder a tu micrófono. Puede estar en uso por otra app como Zoom, Teams o Discord. Ciérrala e inténtalo de nuevo.`,audioErrorRetry:`Intentar de nuevo`,audioMissingTitle:`La grabación no tiene audio`,audioMissingMessage:`No pudimos capturar audio en esta grabación. Es posible que el micrófono se haya desconectado o que el navegador lo haya bloqueado. Verifica tu micrófono y vuelve a grabar.`,audioSilentTitle:`La grabación quedó en silencio`,audioSilentMessage:`No detectamos sonido durante la grabación. Verifica que tu micrófono esté funcionando y no esté silenciado por el sistema, luego vuelve a grabar.`,audioProcessingErrorTitle:`Error al procesar el audio`,audioProcessingErrorMessage:`No pudimos procesar el audio de esta grabación. Por favor vuelve a grabar.`,audioMissingRetry:`Grabar de nuevo`,audioWarningNoSignalTitle:`Sin señal del micrófono`,audioWarningNoSignalMessage:`No estamos detectando sonido. Verifica que tu micrófono esté activo.`,audioWarningLowSignalTitle:`Audio muy bajo`,audioWarningLowSignalMessage:`Acércate al micrófono o sube el volumen de entrada.`,audioWarningSpeakingMutedTitle:`Estás hablando muteado`,audioWarningSpeakingMutedMessage:`Activa el micrófono si quieres que tu voz se escuche en la grabación.`,audioWarningTrackEndedTitle:`Micrófono desconectado`,audioWarningTrackEndedMessage:`Se desconectó el micrófono. Reconéctalo antes de continuar.`,audioWarningNoChunksTitle:`Sin entrada del micrófono`,audioWarningNoChunksMessage:`No estamos recibiendo audio del micrófono. Revisa los permisos del navegador.`,audioWarningTrackMutedTitle:`Micrófono silenciado por el navegador`,audioWarningTrackMutedMessage:`El navegador silenció tu micrófono. Revisa la configuración del sitio.`,audioWarningDismiss:`Cerrar`,cameraErrorTitle:`Cámara no disponible`,cameraErrorMessage:`No pudimos acceder a tu cámara. Puede estar en uso por otra app o los permisos pueden estar denegados.`,browserErrorTitle:`Navegador no compatible`,browserErrorMessage:`Este navegador no es compatible. Por favor usa Chrome para la mejor experiencia.`,recordingCodecUnsupportedTitle:`Formato de grabación no compatible`,recordingCodecUnsupportedMessage:`Este dispositivo no puede usar el formato de video seleccionado. Cierra otras apps, actualiza Chrome si es posible y vuelve a grabar.`,recordingServerTranscodeFallbackTitle:`Finalizando en el dispositivo`,recordingServerTranscodeFallbackMessage:`Estamos finalizando el video en este dispositivo antes de subirlo. Mantén esta pestaña abierta.`,recordingTrackEndedTitle:`La cámara se detuvo durante la grabación`,recordingTrackEndedMessage:`La señal de la cámara terminó antes de finalizar la grabación. Verifica que la cámara siga conectada y vuelve a grabar.`,recordingFinalizeTimeoutTitle:`La grabación tardó demasiado en finalizar`,recordingFinalizeTimeoutMessage:`Es posible que este dispositivo tenga poca memoria o potencia de procesamiento. Cierra otras apps o pestañas del navegador y vuelve a grabar.`,recordingStateRaceTitle:`La grabación no inició correctamente`,recordingStateRaceMessage:`No se pudo finalizar la grabación porque no inició correctamente. Actualiza la página y vuelve a grabar.`,recordingNoFramesTitle:`No se capturó video`,recordingNoFramesMessage:`No pudimos recibir fotogramas de video de la cámara. Verifica la conexión de la cámara y vuelve a grabar.`,recordingUnsupportedTitle:`Grabación no disponible`,recordingUnsupportedMessage:`Este dispositivo o navegador no puede grabar video de forma estable ahora. Revisa tu conexión, actualiza Chrome si es posible o usa otro dispositivo.`,recordingPipelineRetry:`Grabar de nuevo`,genericErrorTitle:`Algo salió mal`,genericErrorMessage:`Ocurrió un error inesperado. Por favor intenta de nuevo.`,errorRetry:`Intentar de nuevo`,switchingDevice:`Cambiando dispositivo...`,recordingStartsIn:`La grabación comienza en...`,switchingSource:`Cambiando fuente...`,rec:`GRAB`,settings:`Configuración`,record:`Grabar`,stop:`Detener`,pause:`Pausar`,resume:`Reanudar`,mute:`Silenciar`,unmute:`Activar sonido`,switchSource:`Cambiar Fuente`,camera:`Cámara`,microphone:`Micrófono`,microphoneConnecting:`Conectando micrófono...`,minimumRecordingTimeNotReached:`Aun no cumples el tiempo minimo de grabacion`,processVideo:`Procesar Video`,processing:`Procesando...`,finishing:`Finalizando...`,uploading:`Subiendo...`,switchingCamera:`Cambiando cámara...`,switchingMicrophone:`Cambiando micrófono...`,failedToStartCamera:`Error al iniciar la cámara`,userInAnotherTab:`Usuario en otra pestaña`,download:`Descargar`,nativeCameraSelectVideo:`Seleccionar Video de la Galería`,nativeCameraRecordVideo:`Grabar con Cámara`,errorTitle:`Error de Configuración`,errorGeneric:`Ocurrió un error al cargar la configuración`,mobileOpenCamera:`Abrir Cámara`,mobileOpenCameraTitle:`Grabar un Video`,mobileOpenCameraDescription:`Toca el botón para comenzar a grabar`,mobileCloseCamera:`Cerrar`,mobilePermissionDenied:`Acceso a Cámara Denegado`,mobilePermissionDeniedDescription:`Por favor permite el acceso a la cámara en la configuración de tu navegador para grabar video.`,permissionFlowTitle:`Configurar tu Cámara`,permissionFlowCameraTitle:`Cámara y Micrófono`,permissionFlowMicrophoneTitle:`Cámara y Micrófono`,permissionFlowCameraLabel:`Necesitamos acceso a tu cámara y micrófono para comenzar a grabar`,permissionFlowMicrophoneLabel:`Necesitamos acceso a tu cámara y micrófono para comenzar a grabar`,permissionFlowStatusPending:`Pendiente`,permissionFlowStatusGranted:`Listo`,permissionFlowStatusDenied:`Bloqueado`,permissionFlowStatusRequesting:`Haz clic en "Permitir" en el aviso del navegador`,permissionFlowAllowCamera:`Permitir Acceso`,permissionFlowAllowMicrophone:`Permitir Acceso`,permissionFlowRetry:`Reintentar`,permissionFlowRecoveryTitle:`Permite el acceso para continuar`,permissionFlowRecoveryInstructions:`Abre la configuración de tu navegador y permite el acceso a la cámara y micrófono, luego intenta de nuevo.`,permissionFlowConnecting:`Preparando...`}};var OT=class{constructor(e=`en`,t={}){this.lang=e,this.customTexts=t}setLang(e){this.lang=e}setCustomTexts(e){this.customTexts=e}t(e){return this.customTexts[e]?this.customTexts[e]:(DT[this.lang]||DT.en)[e]}getAll(){return{...DT[this.lang]||DT.en,...this.customTexts}}};let kT=new Map;function AT(e){e.style.position=`fixed`,e.style.top=`0`,e.style.left=`0`,e.style.width=`100vw`,e.style.height=`100vh`,e.style.height=`100dvh`,e.style.zIndex=`9999`,e.style.pointerEvents=`none`}function jT(e){e.style.pointerEvents=`auto`}function MT(e){e.style.pointerEvents=`none`}var NT=class{constructor(e=`vidtreo-portal-root`){this.portalContainer=null,this.contentWrapper=null,this.isRegistered=!1,this.containerId=e,this.instanceId=`portal-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}get container(){return this.contentWrapper}get isActive(){return this.contentWrapper!==null&&this.portalContainer!==null}open(){let e=document.getElementById(this.containerId);return e||(e=document.createElement(`div`),e.id=this.containerId,AT(e),document.body.appendChild(e)),this.portalContainer=e,this.contentWrapper=document.createElement(`div`),this.contentWrapper.setAttribute(`data-portal-instance`,this.instanceId),this.contentWrapper.style.width=`100%`,this.contentWrapper.style.height=`100%`,this.portalContainer.appendChild(this.contentWrapper),this.registerInstance(),jT(e),this.contentWrapper}render(e){this.contentWrapper&&(this.contentWrapper.innerHTML=e)}querySelector(e){return this.contentWrapper?this.contentWrapper.querySelector(e):null}close(){this.contentWrapper&&=(this.contentWrapper.innerHTML=``,this.contentWrapper.remove(),null),this.unregisterInstance(),this.updatePortalContainerState()}destroy(){this.close(),this.portalContainer=null}registerInstance(){if(this.isRegistered)return;let e=kT.get(this.containerId);e||(e=new Set,kT.set(this.containerId,e)),e.add(this),this.isRegistered=!0}unregisterInstance(){if(!this.isRegistered)return;let e=kT.get(this.containerId);e&&(e.delete(this),e.size===0&&kT.delete(this.containerId)),this.isRegistered=!1}updatePortalContainerState(){if(!this.portalContainer)return;let e=kT.get(this.containerId);e&&e.size>0?jT(this.portalContainer):(MT(this.portalContainer),this.portalContainer.childNodes.length===0&&this.portalContainer.remove())}},PT=class{constructor(e){this.state={isModalOpen:!1,permissionRequested:!1,prevUploading:!1},this.escapeHandler=null,this.initCheckInterval=null,this.callbacks=e,this.portalManager=new NT}get canCloseModal(){let{recordingState:e}=this.callbacks.getState();return!(e===`recording`||e===`countdown`)}get isModalOpen(){return this.state.isModalOpen}get portal(){return this.portalManager}openModal(){this.state.isModalOpen=!0,this.state.permissionRequested=!1,this.portalManager.open(),document.body.style.overflow=`hidden`,this.setupEscapeHandler(),this.callbacks.renderMobile(),this.requestCameraPreview()}closeModal(){this.canCloseModal&&(this.callbacks.stopPreview(),this.state.isModalOpen=!1,this.state.permissionRequested=!1,document.body.style.overflow=``,this.removeEscapeHandler(),this.portalManager.close(),this.callbacks.renderMobile())}checkUploadCompletion(e){let t=this.state.prevUploading,n=e!==null;this.state.prevUploading=n,t&&!n&&this.state.isModalOpen&&this.closeModal()}requestCameraPreview(){if(this.state.permissionRequested)return;let e=()=>{this.callbacks.isInitialized()?(this.state.permissionRequested=!0,this.callbacks.startPreview().catch(()=>{})):this.initCheckInterval=setTimeout(e,100)};e()}setupEscapeHandler(){this.escapeHandler=e=>{e.key===`Escape`&&this.canCloseModal&&this.closeModal()},document.addEventListener(`keydown`,this.escapeHandler)}removeEscapeHandler(){this.escapeHandler&&=(document.removeEventListener(`keydown`,this.escapeHandler),null)}destroy(){this.removeEscapeHandler(),this.portalManager.destroy(),document.body.style.overflow=``,this.initCheckInterval&&=(clearTimeout(this.initCheckInterval),null)}},FT=class{constructor(e,t){this.state={file:null,transcodingProgress:null,uploadProgress:null,isTranscoding:!1,isConfigLoading:!0,error:null,transcodedBlob:null},this.handler=null,this.config=e,this.callbacks=t;let n=e.backendUrl||`https://core.vidtreo.com`,r=null;e.apiKey&&!e.demo&&(r=un.getInstance({apiKey:e.apiKey,backendUrl:n}));let i=new bS;this.handler=new fy({apiKey:e.apiKey,backendUrl:n,maxRecordingTime:e.maxRecordingTime,maxFileSize:e.maxFileSize,userMetadata:e.userMetadata},r,i),e.apiKey&&!e.demo?(this.updateState({isConfigLoading:!0}),this.handler.preloadConfig().then(()=>this.updateState({isConfigLoading:!1})).catch(()=>{this.updateState({isConfigLoading:!1,error:`Failed to load settings`})})):this.updateState({isConfigLoading:!1})}updateState(e){this.state={...this.state,...e},this.callbacks.onStateChange()}getState(){return this.state}async handleFileSelect(e){if(this.updateState({error:null}),!this.handler)throw Error(`Handler not initialized`);try{let t=await this.handler.handleFileSelection(e);return this.updateState({file:t}),t}catch(e){let t=i(e),n=e instanceof Error?e:Error(t);throw this.updateState({error:t}),this.callbacks.onError?.(n),n}}async processAndUpload(e){let t=e||this.state.file;if(!(t&&this.handler))return;let n=this.config.demo;try{if(this.updateState({isTranscoding:!0,transcodingProgress:0,error:null}),n){let e=await uy(t.file,Xt,e=>{this.updateState({transcodingProgress:e}),this.callbacks.onTranscodingProgress?.(e)});this.updateState({transcodedBlob:e.blob,isTranscoding:!1,transcodingProgress:null})}else{let e=await this.handler.processAndUpload(e=>{this.updateState({transcodingProgress:e}),this.callbacks.onTranscodingProgress?.(e)},e=>{this.updateState({uploadProgress:e}),this.callbacks.onUploadProgress?.(e)});this.updateState({file:null,transcodingProgress:null,uploadProgress:null,isTranscoding:!1}),this.callbacks.onUploadComplete?.({recordingId:e.recordingId||``,uploadUrl:e.uploadUrl||``})}}catch(e){let t=i(e),r=e instanceof Error?e:Error(t);this.updateState({error:t,isTranscoding:!1,transcodingProgress:null,uploadProgress:null,transcodedBlob:null}),this.callbacks.onError?.(r),n||this.callbacks.onUploadError?.(r)}}downloadVideo(){if(!this.state.transcodedBlob)return;let e=URL.createObjectURL(this.state.transcodedBlob),t=document.createElement(`a`);t.href=e,t.download=`recording-${Date.now()}.mp4`,document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(e)}reset(){this.updateState({file:null,transcodingProgress:null,uploadProgress:null,error:null,isTranscoding:!1,transcodedBlob:null})}destroy(){this.handler&&this.handler.cancel(),this.handler=null}};function IT(e){return{preview:{initializingCamera:e.initializingCamera,grantPermissions:e.grantPermissions,browserUnsupported:e.browserUnsupported,browserUnsupportedDynamic:e.browserUnsupportedDynamic,browserUnsupportedSafari:e.browserUnsupportedSafari,browserUnsupportedFirefox:e.browserUnsupportedFirefox,retryCamera:e.retryCamera,cameraInUse:e.cameraInUse,cameraNotFound:e.cameraNotFound,cameraPermissionDenied:e.cameraPermissionDenied,cameraTimeout:e.cameraTimeout,failedToStartCamera:e.failedToStartCamera,audioInUse:e.audioInUse,audioNotFound:e.audioNotFound,audioPermissionDenied:e.audioPermissionDenied,audioTimeout:e.audioTimeout,failedToStartAudio:e.failedToStartAudio,switchingDevice:e.switchingDevice,recordingStartsIn:e.recordingStartsIn,rec:e.rec},buttons:{settings:e.settings,record:e.record,stop:e.stop,minimumRecordingTimeNotReached:e.minimumRecordingTimeNotReached,pause:e.pause,resume:e.resume,mute:e.mute,unmute:e.unmute,switchSource:e.switchSource,download:e.download,microphoneConnecting:e.microphoneConnecting},settings:{settings:e.settings,camera:e.camera,microphone:e.microphone}}}var LT=class{constructor(e){if(this.proxyEndpoint=e.proxyEndpoint,this.proxyEndpoint)throw Error(`Proxy mode not yet implemented`);this.service=new bS}uploadVideo(e,t){if(this.proxyEndpoint)throw Error(`Proxy mode not yet implemented`);return this.service.uploadVideo(e,t)}},RT=`:root{--vidtreo-background:0 0% 100%;--vidtreo-foreground:0 0% 3.9%;--vidtreo-card:0 0% 100%;--vidtreo-card-foreground:0 0% 3.9%;--vidtreo-primary:0 0% 9%;--vidtreo-primary-foreground:0 0% 98%;--vidtreo-secondary:0 0% 96.1%;--vidtreo-secondary-foreground:0 0% 9%;--vidtreo-muted:0 0% 96.1%;--vidtreo-muted-foreground:0 0% 45.1%;--vidtreo-accent:0 0% 96.1%;--vidtreo-accent-foreground:0 0% 9%;--vidtreo-destructive:0 84.2% 60.2%;--vidtreo-destructive-foreground:0 0% 98%;--vidtreo-border:0 0% 89.8%;--vidtreo-input:0 0% 89.8%;--vidtreo-ring:0 0% 3.9%;--vidtreo-radius:.5rem;--vidtreo-preview-bg:0 0% 0%;--vidtreo-z-modal-overlay:9999;--vidtreo-z-settings-panel:200;--vidtreo-z-error-overlay:100;--vidtreo-z-countdown-overlay:20;--vidtreo-z-progress-overlay:20;--vidtreo-z-controls:10}.vidtreo-preview-container{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));contain:layout style;will-change:auto;backface-visibility:hidden;isolation:isolate;border:none;border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:visible;transform:translateZ(0)}.vidtreo-preview-container:before{display:none}@media (width>=768px){.vidtreo-preview-container{aspect-ratio:16/9}}.vidtreo-camera-area{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;contain:layout style paint;backface-visibility:hidden;isolation:isolate;will-change:auto;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif;display:none;position:relative;transform:translateZ(0)}.vidtreo-source-transition-overlay{z-index:var(--vidtreo-z-error-overlay);backdrop-filter:blur(4px);contain:layout style paint;backface-visibility:hidden;will-change:opacity;background:#000000b3;border-radius:0;flex-direction:column;justify-content:center;align-items:center;transition:opacity .3s;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-source-transition-overlay.vidtreo-active{animation:.2s vidtreo-fadeIn;display:flex}@keyframes vidtreo-fadeIn{0%{opacity:0}to{opacity:1}}.vidtreo-transition-spinner{border:4px solid #ffffff4d;border-top-color:#667eea;border-radius:50%;width:40px;height:40px;margin-bottom:12px;animation:.8s linear infinite vidtreo-spin}@keyframes vidtreo-spin{to{transform:rotate(360deg)}}.vidtreo-transition-message{color:#fff;text-align:center;font-size:14px;font-weight:500}.vidtreo-camera-area.vidtreo-active{display:block}.vidtreo-preview-skeleton{z-index:var(--vidtreo-z-controls);contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:1rem;display:flex;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-skeleton-spinner{border:4px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:40px;height:40px;animation:.8s linear infinite vidtreo-spin}.vidtreo-skeleton-text{color:#fff;font-size:.875rem;font-weight:500}.vidtreo-video-preview{object-fit:cover;will-change:auto;backface-visibility:hidden;background:#000;border-radius:0;width:100%;height:100%;transition:opacity .3s,transform .3s;display:block;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-video-preview-skeleton{z-index:2;contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border-radius:0;width:100%;height:100%;position:absolute;inset:0;overflow:hidden;transform:translateZ(0)}.vidtreo-skeleton-shimmer{background:linear-gradient(90deg, hsl(var(--vidtreo-muted)) 0%, hsl(var(--vidtreo-muted) / .5) 50%, hsl(var(--vidtreo-muted)) 100%);background-size:200% 100%;animation:1.5s ease-in-out infinite vidtreo-shimmer;position:absolute;inset:0}@keyframes vidtreo-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.vidtreo-video-preview-skeleton.vidtreo-hidden{opacity:0;pointer-events:none;transition:opacity .3s}.vidtreo-video-preview.vidtreo-screen-share{object-fit:cover}.vidtreo-video-preview.vidtreo-transitioning{opacity:.5;transform:scale(.98)}.vidtreo-countdown-overlay{z-index:var(--vidtreo-z-countdown-overlay);contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000000f2;border-radius:0;justify-content:center;align-items:center;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-countdown-overlay.vidtreo-active{display:flex}.vidtreo-countdown-content{flex-direction:column;align-items:center;gap:1rem;display:flex}.vidtreo-countdown-number{color:#fff;font-size:9rem;font-weight:700;animation:.3s vidtreo-zoomIn}@keyframes vidtreo-zoomIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.vidtreo-countdown-text{color:#fff;margin-top:1rem;font-size:.875rem;font-weight:500}.vidtreo-settings-panel{z-index:var(--vidtreo-z-settings-panel);contain:layout style paint;backface-visibility:hidden;background:#0006;border:none;border-radius:.75rem;flex-direction:column;width:90%;margin-left:-47%;padding:.625rem;display:none;overflow:hidden;transform:translateZ(0);position:absolute!important;bottom:4rem!important;left:50%!important}.vidtreo-settings-panel.vidtreo-active{display:flex}.vidtreo-settings-content{will-change:transform;backface-visibility:hidden;flex-direction:column;width:100%;display:flex;transform:translateZ(0)}.vidtreo-settings-content.vidtreo-slide-right{animation:.3s vidtreo-slideRight}.vidtreo-settings-content.vidtreo-slide-left{animation:.3s vidtreo-slideLeft}.vidtreo-settings-content.vidtreo-slide-none{will-change:auto;animation:none}@keyframes vidtreo-slideIn{0%{opacity:0;transform:translateY(1rem)}to{opacity:1;transform:translateY(0)}}@keyframes vidtreo-slideRight{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes vidtreo-slideLeft{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.vidtreo-settings-header{color:#fff;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.75rem;width:100%;margin-bottom:1rem;padding:0;display:flex}.vidtreo-settings-back-icon{color:#fff;flex-shrink:0}.vidtreo-settings-title{color:#fff;margin:0;font-size:.875rem;font-weight:600}.vidtreo-device-options-container{flex-direction:column;gap:.375rem;display:flex}.vidtreo-device-option-nav{cursor:pointer;color:#fff;background:0 0;border:none;border-radius:.5rem;align-items:center;gap:1rem;width:100%;padding:.5rem .75rem;transition:background-color .2s;display:flex}.vidtreo-device-option-nav:hover{background:#fff3}.vidtreo-device-option-nav-content{flex-shrink:0;align-items:center;gap:.75rem;display:flex}.vidtreo-device-option-nav-label{color:#fff;font-size:.875rem;font-weight:500}.vidtreo-device-option-nav-value{flex:1;justify-content:flex-end;align-items:center;gap:.5rem;min-width:0;display:flex}.vidtreo-device-option-nav-value-text{color:#fffc;text-overflow:ellipsis;white-space:nowrap;text-align:right;flex:1;font-size:.875rem;overflow:hidden}.vidtreo-device-option-nav-chevron{color:#fff;font-size:1.25rem;line-height:1}.vidtreo-device-list{flex-direction:column;gap:0;max-height:200px;display:flex;overflow-y:auto}.vidtreo-device-list::-webkit-scrollbar{width:4px}.vidtreo-device-list::-webkit-scrollbar-track{background:0 0}.vidtreo-device-list::-webkit-scrollbar-thumb{background:#fff3;border-radius:2px}.vidtreo-device-list::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.vidtreo-device-option{cursor:pointer;color:#fff;text-align:left;background:0 0;border:none;border-radius:.5rem;align-items:center;gap:.75rem;width:100%;padding:.5rem .75rem;transition:background-color .2s;display:flex}.vidtreo-device-option:hover{background:#fff3}.vidtreo-device-option-check-container{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.vidtreo-device-checkmark-placeholder{flex-shrink:0;width:20px;height:20px}.vidtreo-device-checkmark{color:#fff;flex-shrink:0}.vidtreo-device-option-label{color:#fff;flex:1;font-size:.875rem}.vidtreo-device-empty{color:#fff9;text-align:center;padding:1rem 0;font-size:.875rem}.vidtreo-audio-level-bars{height:1rem;z-index:var(--vidtreo-z-controls);contain:layout style paint;will-change:auto;backface-visibility:hidden;align-items:center;gap:.125rem;transform:translateZ(0);display:flex!important;position:absolute!important;bottom:.75rem!important;right:.75rem!important}@media (width>=768px){.vidtreo-audio-level-bars{height:1.25rem}}.vidtreo-audio-level-bar{background:#ffffff80;border-radius:9999px;align-self:flex-end;width:.125rem;transition:all .1s}.vidtreo-recording-controls{z-index:var(--vidtreo-z-controls);contain:layout style;will-change:auto;backface-visibility:hidden;position:absolute!important;bottom:12px!important;left:50%!important;transform:translate(-50%)translateZ(0)!important}.vidtreo-recording-controls-row{will-change:auto;justify-content:center;align-items:center;gap:.5rem;display:flex;transform:translateZ(0)}.vidtreo-recording-timer-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.vidtreo-recording-timer-badge{z-index:var(--vidtreo-z-controls);contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;align-items:center;gap:.375rem;padding:.25rem .5rem;transform:translateZ(0);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;display:flex!important;position:absolute!important;top:.75rem!important;right:.75rem!important}.vidtreo-recording-dot-small{background:hsl(var(--vidtreo-destructive));border-radius:50%;width:.375rem;height:.375rem;animation:1.5s ease-in-out infinite vidtreo-pulse}.vidtreo-recording-timer-text{color:#fff;font-family:monospace;font-size:.75rem;font-weight:500}.vidtreo-control-buttons-row{will-change:auto;justify-content:center;align-items:center;gap:.375rem;height:auto;min-height:2rem;display:flex;transform:translateZ(0)}@media (width>=768px){.vidtreo-control-buttons-row{min-height:2.25rem}}.vidtreo-control-button{cursor:pointer;color:#fff;box-sizing:border-box;vertical-align:top;contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;min-height:2rem;max-height:2rem;margin:0;padding:.25rem;transition:background-color .2s;display:inline-flex;position:relative;transform:translateZ(0)}.vidtreo-control-button:before{content:"";z-index:0;border-radius:9999px;transition:background-color .2s;position:absolute;inset:.25rem}.vidtreo-control-button svg{color:inherit;z-index:1;flex-shrink:0;position:relative;width:22px!important;height:22px!important}@media (width>=768px){.vidtreo-control-button svg{width:24px!important;height:24px!important}.vidtreo-control-button{width:2.25rem;height:2.25rem;min-height:2.25rem;max-height:2.25rem}}.vidtreo-control-button:hover:not(:disabled):before{background:#fff3}.vidtreo-control-button:disabled{opacity:.5;cursor:not-allowed}.vidtreo-control-button.vidtreo-muted:before{background:#0000004d}.vidtreo-control-button.vidtreo-muted:hover:not(:disabled):before{background:#fff3}.vidtreo-record-button{background:hsl(var(--vidtreo-destructive));height:2rem;min-height:2rem;max-height:2rem;color:hsl(var(--vidtreo-destructive-foreground));box-sizing:border-box;vertical-align:top;cursor:pointer;border:none;border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;width:auto;margin:0;padding:0 .75rem;font-size:.75rem;font-weight:500;line-height:1;transition:background-color .2s,filter .2s;display:inline-flex}@media (width>=768px){.vidtreo-record-button{height:2.25rem;min-height:2.25rem;max-height:2.25rem;font-size:.875rem}}.vidtreo-record-button:hover:not(:disabled){filter:brightness(.85)}.vidtreo-record-button.vidtreo-stop-button-locked{opacity:.5;cursor:not-allowed;filter:none}.vidtreo-record-button.vidtreo-stop-button-locked:hover{filter:none}#startButton.vidtreo-record-button{animation:2s ease-in-out infinite vidtreo-record-glow-pulse}@keyframes vidtreo-record-glow-pulse{0%,to{box-shadow:0 0 8px 2px #ef444466,0 0 16px 4px #ef444433}50%{box-shadow:0 0 16px 4px #ef444499,0 0 32px 8px #ef44444d}}#startButton.vidtreo-record-button:hover:not(:disabled){animation-play-state:paused;box-shadow:0 0 20px 6px #ef4444b3,0 0 40px 10px #ef444459}.vidtreo-rec-indicator-top{contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;align-items:center;gap:.375rem;padding:.25rem .5rem;transform:translateZ(0);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;display:flex!important;position:absolute!important;top:.75rem!important;left:.75rem!important}.vidtreo-rec-indicator-top span{color:#fff;font-size:.75rem;font-weight:500}.vidtreo-start-camera-area{text-align:center;cursor:pointer;z-index:1;contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border:none;border-radius:0;flex-direction:column;justify-content:center;align-items:center;padding:40px;transition:all .3s;display:flex;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-start-camera-area:hover:not(.vidtreo-loading){background:#000}.vidtreo-start-camera-area.vidtreo-loading{cursor:wait;opacity:.7}.vidtreo-start-camera-area.vidtreo-loading .vidtreo-camera-text{color:#fff;opacity:.7}.vidtreo-camera-icon{color:#fff;justify-content:center;margin-bottom:16px;font-size:48px;display:flex}.vidtreo-camera-text{color:#fff;margin-bottom:8px;font-weight:600}.vidtreo-camera-text a{color:#3b82f6;text-decoration:underline}.vidtreo-camera-text a:hover{color:#2563eb}.vidtreo-camera-hint{color:#fff;opacity:.8;font-size:12px}@keyframes vidtreo-pulse{0%,to{opacity:1}50%{opacity:.3}}.vidtreo-progress{margin-top:20px;display:none}.vidtreo-progress.vidtreo-active{display:block}.vidtreo-progress-bar{background:#e0e0e0;border-radius:4px;width:100%;height:8px;margin-bottom:8px;overflow:hidden}.vidtreo-progress-fill{background:linear-gradient(90deg,#667eea 0%,#764ba2 100%);width:0%;height:100%;transition:width .3s}.vidtreo-progress-text{text-align:center;color:#fff;font-size:14px}.vidtreo-error{color:#fff;text-align:center;z-index:var(--vidtreo-z-error-overlay);word-wrap:break-word;background:#dc2626;border:none;border-radius:.5rem;max-width:90%;padding:1rem 1.25rem;font-size:.875rem;font-weight:500;display:none;position:absolute;top:.75rem;left:50%;transform:translate(-50%);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.vidtreo-error.vidtreo-active{animation:.3s ease-out vidtreo-error-fade-in-slide-down;display:block}@keyframes vidtreo-error-fade-in-slide-down{0%{opacity:0;transform:translate(-50%)translateY(-1rem)}to{opacity:1;transform:translate(-50%)translateY(0)}}.vidtreo-upload-progress{margin-top:20px;display:none}.vidtreo-upload-progress.vidtreo-active{display:block}.vidtreo-preview-container .vidtreo-upload-progress{margin-top:0}.vidtreo-upload-status{border-radius:8px;margin-top:20px;padding:16px;display:none}.vidtreo-upload-status.vidtreo-active{display:block}.vidtreo-upload-status.vidtreo-success{color:#22543d;background:#f0f9ff;border:2px solid #48bb78}.vidtreo-upload-status.vidtreo-error{color:#c33;background:#fee;border:2px solid #fcc}.vidtreo-upload-status-text{font-size:14px;font-weight:500}.vidtreo-preview-error{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));contain:strict;will-change:auto;backface-visibility:hidden;isolation:isolate;border:none;border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden;transform:translateZ(0)}@media (width>=768px){.vidtreo-preview-error{aspect-ratio:16/9}}.vidtreo-error-content{text-align:center;color:#fff;flex-direction:column;justify-content:center;align-items:center;gap:1rem;max-width:400px;padding:2rem;display:flex}.vidtreo-error-icon{font-size:3rem;line-height:1}.vidtreo-error-title{font-size:1.25rem;font-weight:600;line-height:1.2}.vidtreo-error-message{opacity:.9;word-break:break-word;font-size:.875rem;line-height:1.5}.vidtreo-error-config{text-align:left;border-top:1px solid #fff3;width:100%;margin-top:1.5rem;padding-top:1.5rem}.vidtreo-error-config-title{color:#fff;margin-bottom:.75rem;font-size:.875rem;font-weight:600}.vidtreo-error-config-item{color:#ffffffd9;margin-bottom:.5rem;font-size:.8125rem;line-height:1.6}.vidtreo-error-config-item code{color:#fff;background:#ffffff26;border-radius:.25rem;padding:.125rem .375rem;font-family:monospace;font-size:.75rem}.vidtreo-error-retry{background:hsl(var(--vidtreo-destructive));color:hsl(var(--vidtreo-destructive-foreground));cursor:pointer;border:none;border-radius:.375rem;margin-top:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:filter .2s}.vidtreo-error-retry:hover:not(:disabled){filter:brightness(.85)}.vidtreo-error-retry:disabled{opacity:.5;cursor:not-allowed}.vidtreo-error-overlay{background:hsl(var(--vidtreo-preview-bg));z-index:var(--vidtreo-z-error-overlay);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-native-camera-container{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}@media (width>=768px){.vidtreo-native-camera-container{aspect-ratio:16/9}}.vidtreo-native-camera-container:has(.vidtreo-native-camera-preview-container){background:0 0}.vidtreo-config-loading-indicator{z-index:var(--vidtreo-z-controls);position:absolute;top:8px;right:8px}.vidtreo-spinner-small{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin}.vidtreo-native-camera-empty-state{flex-direction:column;justify-content:center;align-items:center;gap:16px;width:100%;height:100%;padding:24px;display:flex;position:relative}.vidtreo-native-camera-buttons{flex-direction:column;gap:12px;width:100%;max-width:300px;display:flex}.vidtreo-native-camera-process-button,.vidtreo-native-camera-download-button{z-index:30;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.vidtreo-native-camera-process-button .vidtreo-btn,.vidtreo-native-camera-download-button .vidtreo-btn{min-width:200px}.vidtreo-btn{border-radius:var(--vidtreo-radius);cursor:pointer;border:none;padding:12px 24px;font-size:1rem;font-weight:500;transition:all .2s}.vidtreo-btn:disabled{opacity:.5;cursor:not-allowed}.vidtreo-btn-primary{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground))}.vidtreo-btn-primary:hover:not(:disabled){filter:brightness(.9)}.vidtreo-btn-secondary{background:hsl(var(--vidtreo-secondary));color:hsl(var(--vidtreo-secondary-foreground));border:1px solid hsl(var(--vidtreo-border))}.vidtreo-btn-secondary:hover:not(:disabled){background:hsl(var(--vidtreo-accent))}.vidtreo-transcoding-progress{width:100%;max-width:400px;padding:16px}.vidtreo-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-fill{background:hsl(var(--vidtreo-primary));height:100%;transition:width .3s}.vidtreo-progress-text{text-align:center;color:hsl(var(--vidtreo-foreground));margin-top:8px;font-size:.875rem}.vidtreo-native-camera-preview-container{background:0 0;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:relative}.vidtreo-native-camera-preview-image{object-fit:contain;width:100%;height:100%;display:block}.vidtreo-progress-overlay{backdrop-filter:blur(4px);width:100%;height:100%;z-index:var(--vidtreo-z-progress-overlay);pointer-events:none;background:#000000b3;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-progress-overlay .vidtreo-transcoding-progress,.vidtreo-progress-overlay .vidtreo-upload-progress{pointer-events:auto;background:0 0;flex-direction:column;align-items:center;gap:12px;width:90%;max-width:400px;padding:0;display:flex;position:relative}.vidtreo-progress-overlay .vidtreo-progress-bar,.vidtreo-progress-overlay .vidtreo-upload-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-overlay .vidtreo-progress-fill{background:#fff;height:100%;transition:width .3s}.vidtreo-progress-overlay .vidtreo-progress-text,.vidtreo-progress-overlay .vidtreo-upload-progress-text{text-align:center;color:#fff;margin-top:0;font-size:.875rem;font-weight:500}.vidtreo-progress-overlay .vidtreo-upload-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-overlay .vidtreo-upload-progress-fill{background:#fff;height:100%;transition:width .3s}.vidtreo-progress-overlay .vidtreo-progress-indeterminate{background:linear-gradient(90deg,#0000 0%,#fff 50%,#0000 100%) 0 0/200% 100%;width:100%;animation:1.5s ease-in-out infinite vidtreo-progress-indeterminate}@keyframes vidtreo-progress-indeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}.vidtreo-mobile-web-recorder{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif}.vidtreo-camera-area button,.vidtreo-camera-area input,.vidtreo-camera-area select,.vidtreo-camera-area textarea,.vidtreo-mobile-web-recorder button,.vidtreo-mobile-web-recorder input,.vidtreo-mobile-web-recorder select,.vidtreo-mobile-web-recorder textarea,.vidtreo-permission-flow button{font-family:inherit}.vidtreo-mobile-landing-container{aspect-ratio:4/3;background:hsl(var(--vidtreo-preview-bg));border-radius:0;justify-content:center;align-items:center;width:100%;min-height:100%;max-height:100%;display:flex;position:relative;overflow:hidden}.vidtreo-mobile-landing-content{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1.25rem;padding:2rem;display:flex}.vidtreo-mobile-landing-title{color:#fff;margin:0;font-size:1.25rem;font-weight:600;line-height:1.3}.vidtreo-mobile-landing-description{color:#ffffffbf;max-width:280px;margin:0;font-size:.875rem;line-height:1.5}.vidtreo-mobile-open-camera-btn{border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;margin-top:.5rem;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}@keyframes vidtreo-btn-glow-pulse{0%,to{box-shadow:0 0 8px 2px #ffffff4d,0 0 16px 4px #ffffff26}50%{box-shadow:0 0 16px 4px #ffffff80,0 0 32px 8px #ffffff40}}.vidtreo-mobile-open-camera-btn:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-mobile-open-camera-btn:active:not(:disabled){transform:scale(.98)}.vidtreo-mobile-open-camera-btn:disabled{box-shadow:none;animation:none}#vidtreo-portal-root{z-index:9999;pointer-events:none;width:100vw;height:100dvh;position:fixed;top:0;left:0}#vidtreo-portal-root>*{pointer-events:auto}.vidtreo-mobile-modal-overlay{--vidtreo-safe-top:0px;--vidtreo-safe-bottom:0px;--vidtreo-safe-left:0px;--vidtreo-safe-right:0px;width:100vw;height:100dvh;z-index:var(--vidtreo-z-modal-overlay);background:#000;flex-direction:column;height:-webkit-fill-available;animation:.3s ease-out vidtreo-modal-fade-in;display:flex;position:fixed;inset:0}@keyframes vidtreo-modal-fade-in{0%{opacity:0}to{opacity:1}}.vidtreo-mobile-modal-header{padding:.75rem;padding-top:calc(.75rem + var(--vidtreo-safe-top,0px));z-index:var(--vidtreo-z-error-overlay);pointer-events:none;justify-content:center;display:flex;position:absolute;top:0;left:0;right:0}.vidtreo-mobile-modal-close-btn{color:#ffffffe6;cursor:pointer;pointer-events:auto;backdrop-filter:blur(4px);background:#00000080;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.375rem;height:2rem;padding:0 .75rem;font-size:.75rem;font-weight:500;transition:all .2s;display:flex}.vidtreo-mobile-modal-close-btn:hover:not(:disabled){background:#000000b3}.vidtreo-mobile-modal-close-btn:disabled{opacity:.3;cursor:not-allowed}.vidtreo-mobile-modal-content{width:100%;height:100%;padding-top:var(--vidtreo-safe-top,0px);padding-bottom:var(--vidtreo-safe-bottom,0px);padding-left:var(--vidtreo-safe-left,0px);padding-right:var(--vidtreo-safe-right,0px);flex-direction:column;flex:1;display:flex;position:relative}.vidtreo-mobile-recorder-content{--vidtreo-safe-top:0px;--vidtreo-safe-bottom:0px;--vidtreo-safe-left:0px;--vidtreo-safe-right:0px;flex-direction:column;width:100%;height:100%;display:flex;position:relative}.vidtreo-mobile-recorder-content .vidtreo-preview-container{aspect-ratio:unset;flex:1;width:100%;height:100%}.vidtreo-mobile-recorder-content .vidtreo-video-preview{object-fit:cover}.vidtreo-mobile-preview{flex:1;aspect-ratio:unset!important;height:100%!important}.vidtreo-mobile-recorder-content .vidtreo-recording-controls{bottom:calc(24px + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-audio-level-bars{bottom:calc(12px + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-settings-panel{bottom:calc(7rem + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-rec-indicator-top,.vidtreo-mobile-recorder-content .vidtreo-recording-timer-badge{contain:layout style;height:2rem;padding:0 .75rem;top:calc(.75rem + var(--vidtreo-safe-top,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-recording-timer-text{white-space:nowrap;color:#fff;min-width:3rem;font-size:.875rem;display:inline-block}.vidtreo-mobile-recorder-content .vidtreo-error{top:calc(3.5rem + var(--vidtreo-safe-top,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-control-buttons-row{gap:.75rem;min-height:4rem}.vidtreo-mobile-recorder-content .vidtreo-control-button{width:4rem;height:4rem;min-height:4rem;max-height:4rem}.vidtreo-mobile-recorder-content .vidtreo-control-button svg{width:1.5rem;height:1.5rem}.vidtreo-mobile-recorder-content .vidtreo-record-button{gap:.5rem;height:4rem;min-height:4rem;max-height:4rem;padding:0 1.5rem;font-size:1rem}.vidtreo-mobile-recorder-content .vidtreo-record-button svg{width:1.5rem;height:1.5rem}.vidtreo-permission-flow{z-index:var(--vidtreo-z-modal-overlay);contain:layout style paint;backface-visibility:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#000;flex-direction:column;justify-content:center;align-items:center;gap:1.25rem;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-permission-flow.vidtreo-active{animation:.4s cubic-bezier(.2,0,0,1) vidtreo-fadeIn;display:flex}.vidtreo-permission-flow-title{color:#fff;text-align:center;margin:0;font-size:1.25rem;font-weight:600;line-height:1.3}.vidtreo-permission-flow-subtitle{color:#ffffffbf;text-align:center;letter-spacing:-.005em;max-width:280px;margin:0;font-size:.875rem;line-height:1.5}.vidtreo-permission-flow-action{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground));cursor:pointer;letter-spacing:-.01em;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;margin-top:.5rem;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}.vidtreo-permission-flow-action:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-permission-flow-action:active:not(:disabled){transform:scale(.98)}.vidtreo-permission-flow-action:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;animation:none}.vidtreo-permission-flow-action--requesting{opacity:.55;cursor:wait;box-shadow:none;animation:none}@keyframes vidtreo-spinner-rotate{to{transform:rotate(360deg)}}.vidtreo-permission-flow-spinner{border:2px solid #ffffff4d;border-top-color:hsl(var(--vidtreo-primary-foreground));border-radius:50%;flex-shrink:0;width:1.125rem;height:1.125rem;animation:.8s linear infinite vidtreo-spinner-rotate;display:inline-block}.vidtreo-permission-flow-spinner--large{border-width:3px;width:2.5rem;height:2.5rem}.vidtreo-permission-flow-recovery{text-align:center;flex-direction:column;align-items:center;gap:1.25rem;max-width:280px;display:flex}.vidtreo-permission-flow-recovery-text{color:#fff6;letter-spacing:-.005em;margin:0;font-size:.75rem;line-height:1.6}.vidtreo-permission-flow-retry{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground));cursor:pointer;letter-spacing:-.01em;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}.vidtreo-permission-flow-retry:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-permission-flow-retry:active:not(:disabled){transform:scale(.98)}@keyframes vidtreo-fadeOut{0%{opacity:1}to{opacity:0}}.vidtreo-permission-flow.vidtreo-permission-flow--fading{pointer-events:none;animation:.6s ease-out forwards vidtreo-fadeOut}.vidtreo-recovery-guide{width:100%;max-width:280px;margin:0 auto;position:relative}.vidtreo-recovery-guide:after{content:"";z-index:20;pointer-events:none;background:linear-gradient(#0000 0%,#000 100%);height:60px;position:absolute;bottom:0;left:0;right:0}.vidtreo-recovery-guide:before{content:"";z-index:20;pointer-events:none;background:linear-gradient(90deg,#0000 0%,#000 100%);width:50px;position:absolute;top:0;bottom:0;right:0}.vidtreo-recovery-guide-browser{background:#161616;border-top:1px solid #ffffff1a;border-left:1px solid #ffffff1a;border-radius:10px 0 0;animation:.5s vidtreo-fadeIn;position:relative;overflow:hidden}.vidtreo-recovery-guide-titlebar{z-index:3;background:#1e1e1e;border-bottom:1px solid #ffffff0f;align-items:center;gap:8px;padding:8px 10px;display:flex;position:relative}.vidtreo-recovery-guide-dots{flex-shrink:0;gap:5px;display:flex}.vidtreo-recovery-guide-dot{border-radius:50%;width:8px;height:8px}.vidtreo-recovery-guide-dot--close{background:#ff5f57}.vidtreo-recovery-guide-dot--min{background:#febc2e}.vidtreo-recovery-guide-dot--max{background:#28c840}.vidtreo-recovery-guide-addressbar{background:#2a2a2a;border-radius:5px;flex:1;align-items:center;gap:5px;min-width:0;padding:4px 8px;display:flex}.vidtreo-recovery-guide-lock{color:#ffffff80;flex-shrink:0;align-items:center;animation:7s ease-in-out infinite vidtreo-lock-pulse;display:flex}.vidtreo-recovery-guide-lock-svg{display:block}.vidtreo-recovery-guide-url{color:#ffffff80;white-space:nowrap;text-overflow:ellipsis;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.65rem;overflow:hidden}.vidtreo-recovery-guide-cursor{z-index:40;pointer-events:none;filter:drop-shadow(0 2px 4px #0009);animation:7s ease-in-out infinite vidtreo-cursor-move;position:absolute;top:12px;left:62px}.vidtreo-recovery-guide-cursor-svg{display:block}.vidtreo-recovery-guide-browser-bg{background:#161616;height:110px}.vidtreo-recovery-guide-popover{z-index:30;background:#252525;border:1px solid #ffffff1a;border-radius:10px;padding:8px 12px 12px;animation:7s ease-in-out infinite vidtreo-popover-reveal;position:absolute;top:34px;left:12px;right:12px;box-shadow:0 8px 30px #0009,0 2px 8px #0006,0 0 0 1px #ffffff0f}.vidtreo-recovery-guide-popover-header{color:#ffffffd9;white-space:nowrap;text-overflow:ellipsis;text-align:left;padding-bottom:6px;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.65rem;font-weight:600;overflow:hidden}.vidtreo-recovery-guide-popover-divider{background:#ffffff14;height:1px}.vidtreo-recovery-guide-perm-row{justify-content:space-between;align-items:center;padding:7px 0;display:flex}.vidtreo-recovery-guide-perm-row+.vidtreo-recovery-guide-perm-row{border-top:1px solid #ffffff0f}.vidtreo-recovery-guide-perm-group{align-items:center;gap:8px;display:flex}.vidtreo-recovery-guide-perm-icon{flex-shrink:0;width:14px;height:14px;position:relative}.vidtreo-recovery-guide-icon-off,.vidtreo-recovery-guide-icon-on{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-recovery-guide-icon-off{color:#fff6;animation:7s ease-in-out infinite vidtreo-icon-hide}.vidtreo-recovery-guide-icon-on{color:#34d399;animation:7s ease-in-out infinite vidtreo-icon-show}.vidtreo-recovery-guide-perm-label{color:#ffffffd9;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.7rem}.vidtreo-recovery-guide-switch{flex-shrink:0;width:32px;height:18px;position:relative}.vidtreo-recovery-guide-switch-track{background:#ffffff26;border-radius:9px;animation:7s ease-in-out infinite vidtreo-track-on;position:absolute;inset:0}.vidtreo-recovery-guide-switch-knob{background:#fff;border-radius:50%;width:14px;height:14px;animation:7s ease-in-out infinite vidtreo-knob-slide;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000004d}.vidtreo-recovery-guide-switch--delayed{animation-delay:.85s}@keyframes vidtreo-cursor-move{0%{opacity:0;transform:translate(100px,12px)}8%{opacity:1}22%{transform:translate(0)}26%{transform:translate(0)scale(.75)}30%{opacity:1;transform:translate(0)scale(1)}33%{opacity:1;transform:translate(0)}38%{opacity:1;transform:translate(65px,63px)}42%{transform:translate(65px,63px)scale(.75)}45%{opacity:1;transform:translate(65px,63px)scale(1)}48%{opacity:1;transform:translate(65px,97px)}52%{transform:translate(65px,97px)scale(.75)}55%{opacity:1;transform:translate(65px,97px)scale(1)}60%{opacity:0}to{opacity:0;transform:translate(100px,12px)}}@keyframes vidtreo-popover-reveal{0%,27%{opacity:0;transform:translateY(-6px)scale(.96)}33%,82%{opacity:1;transform:translateY(0)scale(1)}88%,to{opacity:0;transform:translateY(-6px)scale(.96)}}@keyframes vidtreo-track-on{0%,34%{background:#ffffff26}40%,92%{background:#34d399}96%,to{background:#ffffff26}}@keyframes vidtreo-knob-slide{0%,34%{transform:translate(0)}40%,92%{transform:translate(14px)}96%,to{transform:translate(0)}}@keyframes vidtreo-icon-hide{0%,34%{opacity:1}40%,92%{opacity:0}96%,to{opacity:1}}@keyframes vidtreo-icon-show{0%,34%{opacity:0}40%,92%{opacity:1}96%,to{opacity:0}}@keyframes vidtreo-lock-pulse{0%,15%{color:#ffffff80}22%,30%{color:#34d399}38%,to{color:#ffffff80}}.vidtreo-record-button.vidtreo-record-button-disabled,.vidtreo-record-button-disabled{opacity:.6;cursor:not-allowed;pointer-events:none;filter:grayscale(.3)}.vidtreo-mic-connecting-indicator{justify-content:center;align-items:center;animation:1.4s ease-in-out infinite vidtreo-mic-pulse;display:inline-flex}@keyframes vidtreo-mic-pulse{0%,to{opacity:.4}50%{opacity:1}}.vidtreo-audio-error-overlay{z-index:var(--vidtreo-z-error-overlay);text-align:center;background:#000000d9;flex-direction:column;justify-content:center;align-items:center;padding:2rem 1.5rem;animation:.3s ease-out vidtreo-audio-overlay-fade-in;display:flex;position:absolute;inset:0}@supports (backdrop-filter:blur(8px)){.vidtreo-audio-error-overlay{-webkit-backdrop-filter:blur(8px);background:#000000bf}}@keyframes vidtreo-audio-overlay-fade-in{0%{opacity:0}to{opacity:1}}.vidtreo-audio-error-icon{background:#ef444426;border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;margin-bottom:1rem;display:flex}.vidtreo-audio-error-icon svg{color:#ef4444;width:28px;height:28px}.vidtreo-audio-error-title{color:#fff;margin:0 0 .5rem;font-size:1.125rem;font-weight:600;line-height:1.4}.vidtreo-audio-error-message{color:#ffffffb3;max-width:320px;margin:0 0 1.5rem;font-size:.875rem;line-height:1.6}.vidtreo-audio-error-retry{color:#111;cursor:pointer;background:#fff;border:none;border-radius:9999px;align-items:center;gap:.5rem;padding:.75rem 1.5rem;font-family:inherit;font-size:.875rem;font-weight:600;transition:background .15s,transform .1s;display:inline-flex}.vidtreo-audio-error-retry:hover{background:#f0f0f0}.vidtreo-audio-error-retry:active{transform:scale(.97)}.vidtreo-audio-error-retry svg{width:16px;height:16px}.vidtreo-audio-warning-toast{z-index:var(--vidtreo-z-error-overlay);color:#ffffffeb;pointer-events:auto;background:#1111118c;border:1px solid #ffffff14;border-radius:12px;align-items:flex-start;gap:.625rem;max-width:min(420px,100% - 2rem);padding:.625rem .875rem;font-family:inherit;animation:.2s ease-out vidtreo-audio-warning-toast-fade-in;display:flex;position:absolute;top:1rem;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #00000040}@supports (backdrop-filter:blur(10px)){.vidtreo-audio-warning-toast{-webkit-backdrop-filter:blur(10px)saturate(140%);background:#11111173}}.vidtreo-audio-warning-toast--critical{border-color:#ef444473}.vidtreo-audio-warning-toast--critical .vidtreo-audio-warning-toast__icon{color:#ef4444}.vidtreo-audio-warning-toast--soft{border-color:#f59e0b73}.vidtreo-audio-warning-toast--soft .vidtreo-audio-warning-toast__icon{color:#f59e0b}.vidtreo-audio-warning-toast__icon{flex:none;justify-content:center;align-items:center;width:20px;height:20px;margin-top:1px;display:inline-flex}.vidtreo-audio-warning-toast__content{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.vidtreo-audio-warning-toast__title{color:#fff;font-size:.8125rem;font-weight:600;line-height:1.3}.vidtreo-audio-warning-toast__message{color:#ffffffb8;font-size:.75rem;font-weight:400;line-height:1.4}.vidtreo-audio-warning-toast__dismiss{color:#ffffffa6;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:22px;height:22px;margin-left:.25rem;padding:0;font-family:inherit;transition:background .15s,color .15s;display:inline-flex}.vidtreo-audio-warning-toast__dismiss:hover{color:#fffffff2;background:#ffffff1a}@keyframes vidtreo-audio-warning-toast-fade-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}`;function zT(e){return`
|
|
12830
|
-
<style>${
|
|
12829
|
+
`],{type:`application/javascript`})}let kC=qS({createBlob:OC,createObjectUrl:e=>URL.createObjectURL(e),revokeObjectUrl:e=>{URL.revokeObjectURL(e)}});function AC(){return kC.acquire()}function jC(){kC.release()}let MC=1e3,NC=`format`,PC=new Map,FC=new Map;function IC(e){return e===void 0?`undefined`:String(e)}function LC(e){return e.join(`,`)}function RC(e,t){return`${e}=${t}`}function zC(e,t,n){if(e.has(t)&&e.delete(t),e.set(t,n),e.size<=50)return;let r=e.keys().next();r.done||e.delete(r.value)}var BC=class{constructor(e={}){this.worker=null,this.hasWorkerUrlLease=!1,this.chunks=[],this.totalSize=0,this.isActive=!1,this.audioTrackClone=null,this.audioTrackWarningTarget=null,this.isMuted=!1,this.currentVideoTrack=null,this.isPaused=!1,this.overlayConfig=null,this.readyPromiseResolve=null,this.readyPromiseReject=null,this.lastConfigFps=30,this.pendingFatalError=null,this.lastRecordingStats=null,this.audioWasExpected=!1,this.lastEncoderAcceleration=null,this.audioHealthMonitor=new WS,this.audioHealthIntervalId=null,this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=null,this.noFrameWatchdogId=null,this.handleAudioTrackEnded=()=>{this.audioTrackEndedDuringSession=!0,this.emitAudioWarningOnce({code:`audio.track-ended`})},this.handleAudioTrackMuted=()=>{this.emitAudioWarningOnce({code:`audio.track-muted-by-browser`})},this.handleAudioTrackUnmuted=()=>{this.emittedAudioWarnings.delete(`audio.track-muted-by-browser`)&&this.onAudioRecovered&&this.onAudioRecovered()};let t=e=>new Worker(e,{type:`classic`});e.createWorker&&(t=e.createWorker);let n=e=>typeof MediaStreamTrackProcessor>`u`?null:(oC(e,{stage:`main-thread-stream-create`}),new MediaStreamTrackProcessor({track:e}).readable);e.createVideoStreamFromTrack&&(n=e.createVideoStreamFromTrack);let r=()=>on();e.isLinuxPlatform&&(r=e.isLinuxPlatform),this.createVideoStreamFromTrackFn=n,this.isLinuxPlatformFn=r,e.videoFramePreflightDeps?this.videoFramePreflightDeps=e.videoFramePreflightDeps:this.videoFramePreflightDeps={},e.noFrameWatchdogDelayMs===void 0?this.watchdogDelayMs=5e3:this.watchdogDelayMs=e.noFrameWatchdogDelayMs;let i=!!e.createWorker;this.workerProbeManager=new DC({setTimeout:window.setTimeout.bind(window),clearTimeout:window.clearTimeout.bind(window),timeoutMilliseconds:2e3}),this.audioWorkletManager=new rC({onChunk:this.handleAudioWorkletChunk.bind(this)});let a=e=>{let t=e.data;switch(t.type){case`ready`:this.readyPromiseResolve&&(this.readyPromiseResolve(),this.readyPromiseResolve=null,this.readyPromiseReject=null);break;case Jy:this.workerProbeManager.handleProbeResult(t);break;case`debugLog`:t.payload?$.debug(t.message,t.payload):$.debug(t.message);break;case`error`:if($.error(`[WorkerProcessor] Worker error:`,t.error),this.readyPromiseReject){let e=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,e(Error(t.error));break}this.onError&&this.onError(Error(t.error));break;case`chunk`:this.chunks.push({data:t.data,position:t.position}),this.totalSize=Math.max(this.totalSize,t.position+t.data.length);break;case`bufferUpdate`:this.onBufferUpdate&&this.onBufferUpdate(t.size,t.formatted);break;case`stateChange`:$.debug(`[WorkerProcessor] State changed:`,t.state),this.isPaused=t.state===`paused`;break;case`fatalError`:if(this.readyPromiseReject){let e=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,e(Error(`${t.message} [${t.code}]`));break}this.pendingFatalError=t;break;case`recordingStats`:this.lastRecordingStats=t,this.handleNoFrameWatchdogStats(t);break;case`encoderAcceleration`:this.lastEncoderAcceleration=t.acceleration,$.info(`[WorkerProcessor] Encoder acceleration resolved`,{acceleration:t.acceleration});break;default:$.warn(`[WorkerProcessor] Unknown response type:`,t)}},o=e=>{if($.error(`[WorkerProcessor] Worker error event:`,{message:e.message,filename:e.filename,lineno:e.lineno,colno:e.colno,error:e.error}),this.readyPromiseReject){let t=this.readyPromiseReject;this.readyPromiseReject=null,this.readyPromiseResolve=null,t(Error(e.message||`Unknown worker error`));return}if(this.onError){let t=e.message;t||=`Unknown worker error`,this.onError(Error(t))}},s=typeof Worker<`u`,c=!1;if(s&&(c=!0),i&&(c=!0),!c)throw $.error(`[WorkerProcessor] Web Workers are not supported`),Error(`Web Workers are not supported`);let l=AC();this.hasWorkerUrlLease=!0;try{this.worker=CC({createWorker:t,workerUrl:l,onMessage:a,onError:o,logger:$})}catch(e){throw this.releaseWorkerUrlLease(),e}}prewarm(){this.worker&&this.workerProbeManager.getProbeResult(this.worker).catch(()=>void 0)}getWorkerProbeResult(){let e=this.getWorkerOrThrow();return this.workerProbeManager.getProbeResult(e)}async startProcessing(e,t,n){this.getWorkerOrThrow(),this.ensureProcessingInactive(),this.resetProcessingState(n),this.stopAudioWorklet(),this.audioWorkletManager=new rC({onChunk:this.handleAudioWorkletChunk.bind(this)});let r=this.resolveRecordingFormat(t),i=Ht(r,{isLinuxPlatform:this.isLinuxPlatformFn()}),a=this.resolveAudioBitrate(t,r),o=await this.resolveAudioCodecWithCache(t,r,i,a),s=await this.resolveVideoCodecWithCache(t,r,i),c=GS(e);$.debug(`[WorkerProcessor] Starting processing`,{isScreenCapture:c,fps:t.fps,codec:s,bitrate:t.bitrate});let l=this.buildWorkerTranscodeConfig(t,o,a,s,r);typeof t.fps==`number`&&t.fps>0&&(this.lastConfigFps=t.fps);let u=e.getVideoTracks(),d=e.getAudioTracks();$.debug(`[WorkerProcessor] Preparing to start processing`,{videoTracksCount:u.length,audioTracksCount:d.length,hasWorker:!!this.worker});try{let e=this.getVideoInputSelectorDependencies(),t=pC(u,e),n=mC(d,e),r=await this.getWorkerProbeResult();t&&($.debug(`[WorkerProcessor] Running video first-frame preflight`),await lC(t,3e3,this.videoFramePreflightDeps),$.debug(`[WorkerProcessor] Video first-frame preflight passed`));let i=hC(t,r,e),a=_C(e),o=gC(t);yC(t,e),bC(e),vC(t,n,i.videoStream,e);let s=e.getViewportMetadata(),c;s&&(c={orientationAngle:s.orientationAngle,windowOrientation:s.windowOrientation});let{audioConfig:f,audioStream:p,shouldStartAudioWorklet:m}=await this.prepareAudioPipeline(n,r),h=this.buildOverlayConfigToSend(),g=wC({videoTrack:i.videoTrack,videoStream:i.videoStream,audioStream:p,isMobileDevice:a,videoSettings:o,viewportMetadata:c,audioConfig:f,workerConfig:l,overlayConfig:h}),_=EC(i.videoStream,p,i.videoTrack);$.debug(`[WorkerProcessor] Posting message to worker`,{transferablesCount:_.length,messageType:g.type}),await this.postStartMessage(g,_,m),this.startNoFrameWatchdog(),m&&this.startAudioHealthMonitoring()}catch(e){throw this.resetStartProcessingStateAfterFailure(),e}}getWorkerOrThrow(){if(!this.worker)throw Error(`Worker not initialized`);return this.worker}ensureProcessingInactive(){if(this.isActive)throw Error(`Processing already active`)}handleAudioWorkletChunk(e){if(!(this.isWorkerActive()&&this.worker))return;this.recordAudioHealthChunk(e);let t={type:`audioChunk`,data:e.data,frames:e.frames,numberOfChannels:e.numberOfChannels,sampleRate:e.sampleRate,timestamp:e.timestamp},n=[];e.data.buffer instanceof ArrayBuffer&&n.push(e.data.buffer),this.worker.postMessage(t,n)}resetProcessingState(e){this.isActive=!0,this.isMuted=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0,this.audioWasExpected=!1,this.audioHealthMonitor.reset(),this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=performance.now(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),e?this.overlayConfig=e:this.overlayConfig=null}resetStartProcessingStateAfterFailure(){this.isActive=!1,this.isPaused=!1,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.stopCurrentVideoTrack(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null}recordAudioHealthChunk(e){let t=this.audioHealthMonitor.recordChunk({samples:e.data,timestampMs:performance.now(),isMuted:this.isMuted,inputPeak:e.inputPeak,inputRms:e.inputRms});this.emitAudioWarning(t.classification,{durationMs:Math.max(t.consecutiveSilentDurationMs,t.consecutiveLowSignalDurationMs,t.consecutiveMutedSpeechDurationMs),peak:t.inputPeak,rms:t.inputRms})}startAudioHealthMonitoring(){this.stopAudioHealthMonitoring(),this.audioHealthIntervalId=window.setInterval(()=>{if(!this.isActive)return;let e=this.audioHealthMonitor.inspect(performance.now(),this.isMuted);this.emitAudioWarning(e.classification,{durationMs:Math.max(e.noChunkDurationMs,e.consecutiveSilentDurationMs,e.consecutiveLowSignalDurationMs,e.consecutiveMutedSpeechDurationMs),peak:e.inputPeak,rms:e.inputRms})},1e3)}stopAudioHealthMonitoring(){this.audioHealthIntervalId!==null&&(window.clearInterval(this.audioHealthIntervalId),this.audioHealthIntervalId=null)}startNoFrameWatchdog(){this.stopNoFrameWatchdog(),this.noFrameWatchdogId=window.setTimeout(()=>{this.noFrameWatchdogId=null,this.isWorkerActive()&&this.worker&&this.worker.postMessage({type:`requestStats`})},this.watchdogDelayMs)}stopNoFrameWatchdog(){this.noFrameWatchdogId!==null&&(window.clearTimeout(this.noFrameWatchdogId),this.noFrameWatchdogId=null)}handleNoFrameWatchdogStats(e){if(!this.isActive||e.videoFrameCount>0)return;$.error(`[WorkerProcessor] No video frames received after watchdog delay`,{videoFrameCount:e.videoFrameCount,totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed});let t=Error(`No video frames received after ${this.watchdogDelayMs/MC}s — video stream may be unresponsive [${sC}]`);this.onError&&this.onError(t),this.cancel()}emitAudioWarning(e,t){if(e===`healthy`){let e=this.emittedAudioWarnings.size>0;this.emittedAudioWarnings.clear(),e&&this.onAudioRecovered&&this.onAudioRecovered();return}if(e===`muted-silence-expected`){let e=!1;this.emittedAudioWarnings.delete(`audio.no-signal`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.no-chunks`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.low-signal`)&&(e=!0),this.emittedAudioWarnings.delete(`audio.speaking-while-muted`)&&(e=!0),e&&this.onAudioRecovered&&this.onAudioRecovered();return}let n=this.createAudioWarning(e,t);n&&this.emitAudioWarningOnce(n)}emitAudioWarningOnce(e){this.onAudioWarning&&(this.emittedAudioWarnings.has(e.code)||(this.emittedAudioWarnings.add(e.code),this.onAudioWarning(e)))}createAudioWarning(e,t){return e===`no-chunks`?{code:`audio.no-chunks`,durationMs:t.durationMs}:e===`silent-while-unmuted`?{code:`audio.no-signal`,durationMs:t.durationMs}:e===`low-signal`?{code:`audio.low-signal`,peak:t.peak,rms:t.rms}:e===`speaking-while-muted`?{code:`audio.speaking-while-muted`,durationMs:t.durationMs,peak:t.peak,rms:t.rms}:null}assertRuntimeAudioHealth(){let e=performance.now(),t=this.recordingStartTimestampMs??e,n=Math.max(0,e-t),r=this.audioHealthMonitor.getFinalSnapshot(e,this.isMuted),i=Ob({totalChunks:r.totalChunks,nonSilentChunks:r.nonSilentChunks,mutedDurationMs:r.mutedDurationMs,durationMs:n,hadTrackEndedWarning:this.audioTrackEndedDuringSession});if(!i.ok)throw Tb(i.code,{totalChunks:r.totalChunks,nonSilentChunks:r.nonSilentChunks,mutedDurationMs:r.mutedDurationMs,durationMs:n,hadTrackEndedWarning:this.audioTrackEndedDuringSession})}resolveRecordingFormat(e){let t=e.format;return t||=`mp4`,t}resolveAudioBitrate(e,t){return e.audioBitrate===void 0?Kt(t):e.audioBitrate}async resolveAudioCodec(e,t,n,r){return await cy({format:t,overrideCodec:e.audioCodec,policy:n,bitrate:r})}async resolveVideoCodec(e,t,n){return await sy({format:t,overrideCodec:e.codec,policy:n,width:e.width,height:e.height,bitrate:e.bitrate})}async resolveAudioCodecWithCache(e,t,n,r){let i=this.buildAudioCodecCacheKey(e,t,n,r),a=PC.get(i);if(a)return a;let o=await this.resolveAudioCodec(e,t,n,r);return zC(PC,i,o),o}async resolveVideoCodecWithCache(e,t,n){let r=this.buildVideoCodecCacheKey(e,t,n),i=FC.get(r);if(i)return i;let a=await this.resolveVideoCodec(e,t,n);return zC(FC,r,a),a}buildAudioCodecCacheKey(e,t,n,r){let i=IC(e.audioCodec),a=IC(n.preferredAudioCodec),o=LC(n.audioCodecFallbackOrder),s=IC(r);return[RC(NC,IC(t)),RC(`audioOverride`,i),RC(`audioBitrate`,s),RC(`policyPreferredAudio`,a),RC(`policyAudioFallback`,o)].join(`|`)}buildVideoCodecCacheKey(e,t,n){let r=IC(e.codec),i=IC(e.width),a=IC(e.height),o=IC(e.bitrate),s=IC(n.preferredVideoCodec),c=LC(n.videoCodecFallbackOrder);return[RC(NC,IC(t)),RC(`videoOverride`,r),RC(`width`,i),RC(`height`,a),RC(`videoBitrate`,o),RC(`policyPreferredVideo`,s),RC(`policyVideoFallback`,c)].join(`|`)}buildWorkerTranscodeConfig(e,t,n,r,i){return{width:e.width,height:e.height,fps:e.fps,bitrate:KS(e.bitrate),audioCodec:t,audioBitrate:n,codec:r,keyFrameInterval:5,latencyMode:e.latencyMode,format:i,watermark:e.watermark}}async prepareAudioPipeline(e,t){if(!e)return $.debug(`[WorkerProcessor] Audio pipeline disabled (no track)`),{audioConfig:null,audioStream:null,shouldStartAudioWorklet:!1};let n=await this.prepareAudioConfig(e);if(!n)throw this.createBrowserUnsupportedError();return $.debug(`[WorkerProcessor] Audio pipeline selected`,{path:`audio-worklet-chunks`,sampleRate:n.sampleRate,numberOfChannels:n.numberOfChannels}),{audioConfig:n,audioStream:null,shouldStartAudioWorklet:!0}}buildOverlayConfigToSend(){if(this.overlayConfig)return this.overlayConfig}async postStartMessage(e,t,n){let r=this.getWorkerOrThrow(),i=new Promise((e,t)=>{this.readyPromiseResolve=e,this.readyPromiseReject=t});try{r.postMessage(e,t),$.debug(`[WorkerProcessor] Message posted successfully`),await i,$.debug(`[WorkerProcessor] Worker confirmed ready`),n&&(this.audioWasExpected=!0,await this.startAudioWorkletProcessing())}catch(e){throw $.error(`[WorkerProcessor] Failed to post message:`,e),this.readyPromiseResolve=null,this.readyPromiseReject=null,this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.worker&&this.isActive&&this.worker.postMessage({type:`stop`}),this.isActive=!1,e}}pause(){this.worker&&this.isActive&&(this.worker.postMessage({type:`pause`}),this.setAudioWorkletPaused(!0))}resume(){this.isWorkerActive()&&this.worker&&(this.worker.postMessage({type:`resume`}),this.setAudioWorkletPaused(!1))}isWorkerActive(){return!!(this.worker&&this.isActive)}toggleMute(){this.isMuted=!this.isMuted,this.onMuteStateChange&&this.onMuteStateChange(this.isMuted),this.isWorkerActive()&&this.worker&&this.worker.postMessage({type:`toggleMute`}),this.setAudioWorkletMuted(this.isMuted)}async switchVideoSource(e){if(!(this.isWorkerActive()&&this.worker))return $.debug(`[WorkerProcessor] Cannot switch source - worker not active`,{hasWorker:!!this.worker,isActive:this.isActive}),Promise.resolve();let t=e.getVideoTracks();if($.debug(`[WorkerProcessor] Switching video source`,{videoTracksCount:t.length}),t.length===0)return $.warn(`[WorkerProcessor] No video tracks in new stream`),Promise.resolve();let n=GS(e),r=this.lastConfigFps;$.debug(`[WorkerProcessor] Source type detected`,{isScreenCapture:n,targetFps:r});let i={type:`updateFps`,fps:r};this.worker.postMessage(i);let a={type:`updateSourceType`,isScreenCapture:n};this.worker.postMessage(a);let o=this.getVideoInputSelectorDependencies(),s=pC(t,o);if(!s)return $.warn(`[WorkerProcessor] Unable to prepare video track`),Promise.resolve();$.debug(`[WorkerProcessor] New video track details`,{trackId:s.id,trackKind:s.kind,trackReadyState:s.readyState});let c=hC(s,await this.getWorkerProbeResult(),o),l=TC(c.videoTrack,c.videoStream),u=EC(c.videoStream,null,c.videoTrack);try{return $.debug(`[WorkerProcessor] Posting switch source message`),this.worker.postMessage(l,u),$.debug(`[WorkerProcessor] Switch source message posted`),new Promise(e=>{setTimeout(()=>{e()},0)})}catch(e){throw $.error(`[WorkerProcessor] Failed to switch source:`,e),e}}finalize(){if(!this.isWorkerActive())throw Px(jx,`Recording is not ready to finalize`,{hasWorker:!!this.worker,isActive:this.isActive});let e=performance.now();return new Promise((t,n)=>{let r=this.worker;if(!r){n(Error(`Worker not initialized`));return}let i=null,a=()=>{i!==null&&(clearTimeout(i),i=null)},o=()=>{r.removeEventListener(`message`,l)},s=!1,c=()=>s?!1:(s=!0,a(),o(),!0),l=r=>{if(s)return;let i=r.data;if(i.type===`fatalError`){this.pendingFatalError=i;return}if(i.type===`recordingStats`){this.lastRecordingStats=i;return}if(i.type===`stateChange`&&i.state===`stopped`){this.handleFinalizeStopped(c,t,n,e);return}i.type===`error`&&this.handleFinalizeError(c,n,i.error,e)};i=setTimeout(()=>{if(!c())return;$.error(`[WorkerProcessor] Finalize timeout reached`,{elapsedSeconds:(performance.now()-e)/MC,recordingStats:this.buildRecordingStatsSummary(this.lastRecordingStats)});let t=this.lastRecordingStats;this.resetFinalizeRuntimeState(),n(Px(Mx,this.buildFinalizeTimeoutMessage(t),{recordingStats:this.buildRecordingStatsSummary(t)}))},3e4),r.addEventListener(`message`,l),r.postMessage({type:`requestStats`}),r.postMessage({type:`stop`})})}handleFinalizeStopped(e,t,n,r){let i=this.lastRecordingStats,a=this.lastEncoderAcceleration;if(this.pendingFatalError!==null){let t=this.pendingFatalError;if(!e())return;this.resetFinalizeRuntimeState(),n(Error(this.buildFatalFinalizeErrorMessage(t,i)));return}e()&&(this.resetFinalizeRuntimeState(),Promise.resolve().then(()=>this.createBlobFromChunks(i,a)).then(e=>{t(e)},e=>{this.rejectFinalizeBlobCreationError(n,e,r)}))}handleFinalizeError(e,t,n,r){e()&&(this.resetFinalizeRuntimeState(),$.error(`[WorkerProcessor] Finalize failed`,{elapsedSeconds:(performance.now()-r)/MC,error:n}),t(Error(n)))}buildFatalFinalizeErrorMessage(e,t){return t===null?`${e.message} [${e.code}]`:`${e.message} [${e.code}] frames=${t.videoFrameCount} errors=${t.totalFrameErrors}`}buildFinalizeTimeoutMessage(e){return e===null?`Finalize timeout`:`Finalize timeout frames=${e.videoFrameCount} errors=${e.totalFrameErrors} processed=${e.totalFramesProcessed}`}buildRecordingStatsSummary(e){return e===null?null:{videoFrameCount:e.videoFrameCount,totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed}}resetFinalizeRuntimeState(){this.isActive=!1,this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null}createBlobFromChunks(e,t){let n=[...this.chunks].sort((e,t)=>e.position-t.position),r=new ArrayBuffer(this.totalSize),i=new Uint8Array(r);for(let e of n)i.set(e.data,e.position);Vy(r),Hy(r),this.audioWasExpected&&(this.assertRuntimeAudioHealth(),Uy(r));let a={blob:new Blob([r],{type:`video/mp4`}),totalSize:this.totalSize};return e!==null&&(a.recordingStats={totalFrameErrors:e.totalFrameErrors,totalFramesProcessed:e.totalFramesProcessed,videoFrameCount:e.videoFrameCount}),t!==null&&(a.encoderAcceleration=t),a}rejectFinalizeBlobCreationError(e,t,n){if($.error(`[WorkerProcessor] Finalize failed while creating blob`,{elapsedSeconds:(performance.now()-n)/MC,error:i(t)}),t instanceof Error){e(t);return}e(Error(i(t)))}cancel(){return this.worker&&this.isActive&&this.worker.postMessage({type:`stop`}),this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.isActive=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0,this.audioWasExpected=!1,this.emittedAudioWarnings=new Set,this.audioTrackEndedDuringSession=!1,this.recordingStartTimestampMs=null,this.pendingFatalError=null,this.lastRecordingStats=null,this.lastEncoderAcceleration=null,Promise.resolve()}destroy(){this.worker&&=(this.worker.terminate(),null),this.releaseWorkerUrlLease(),this.stopAudioHealthMonitoring(),this.stopNoFrameWatchdog(),this.stopAudioWorklet(),this.detachAudioTrackWarnings(),this.isActive=!1,this.isPaused=!1,this.chunks=[],this.totalSize=0}cleanup(){this.destroy()}warmupEncoder(e){if(!this.worker)return;let t=e.format||`mp4`,n=Ht(t),r=e.codec||n.preferredVideoCodec,i=e.audioBitrate===void 0?n.audioBitrate:e.audioBitrate,a=Ht(t,{isLinuxPlatform:this.isLinuxPlatformFn()}),o=this.resolveAudioBitrate(e,t);this.resolveAudioCodecWithCache(e,t,a,o).catch(this.handleWarmupCacheError),this.resolveVideoCodecWithCache(e,t,a).catch(this.handleWarmupCacheError);let s={type:`warmup`,config:this.buildWorkerTranscodeConfig(e,n.preferredAudioCodec,i,r,t)};this.worker.postMessage(s)}getBufferSize(){return this.totalSize}getMutedState(){return this.isMuted}updateTabVisibility(e,t){if(!(this.isWorkerActive()&&this.worker)){$.warn(`[WorkerProcessor] Cannot update visibility - worker not active`,{isActive:this.isActive,hasWorker:!!this.worker});return}$.debug(`[WorkerProcessor] Sending visibility update to worker`,{isHidden:e,timestamp:t,timestampSeconds:t/MC});let n={type:`updateVisibility`,isHidden:e,timestamp:t};this.worker.postMessage(n)}updateSourceType(e){if(!(this.isWorkerActive()&&this.worker)){$.warn(`[WorkerProcessor] Cannot update source type - worker not active`,{isActive:this.isActive,hasWorker:!!this.worker});return}$.debug(`[WorkerProcessor] Sending source type update to worker`,{isScreenCapture:e});let t={type:`updateSourceType`,isScreenCapture:e};this.worker.postMessage(t)}async startAudioWorkletProcessing(){await this.audioWorkletManager.startProcessing()}stopAudioWorklet(){this.audioWorkletManager.stop()}setAudioWorkletMuted(e){this.audioWorkletManager.setMuted(e)}setAudioWorkletPaused(e){this.audioWorkletManager.setPaused(e)}prepareAudioConfig(e){return this.audioWorkletManager.prepareAudioConfig(e)}handleWarmupCacheError(){}createBrowserUnsupportedError(){return Nt({resolutionStage:`feature-preflight`})}getVideoInputSelectorDependencies(){return{stopCurrentVideoTrack:()=>this.stopCurrentVideoTrack(),cloneVideoTrack:e=>this.cloneVideoTrack(e),cloneAudioTrack:e=>this.cloneAudioTrack(e),setCurrentVideoTrack:e=>{this.currentVideoTrack=e},createVideoStreamFromTrack:e=>this.createVideoStreamFromTrackFn(e),createBrowserUnsupportedError:()=>this.createBrowserUnsupportedError(),getViewportMetadata:()=>{if(typeof window>`u`)return null;let e=window.screen,t,n,r,i;return e&&(i=e.orientation),i?.type&&(t=i.type),i&&typeof i.angle==`number`&&(n=i.angle),typeof window.orientation==`number`&&(r=window.orientation),{innerWidth:window.innerWidth,innerHeight:window.innerHeight,orientation:t,orientationAngle:n,windowOrientation:r}},logger:{debug:(e,t)=>$.debug(e,t),warn:(e,t)=>$.warn(e,t)},isMobileDevice:()=>Qt()}}isPausedState(){return this.isPaused}getClonedAudioTrack(){return this.audioTrackClone}getAudioStreamForAnalysis(){return this.audioTrackClone?new MediaStream([this.audioTrackClone]):null}setOnBufferUpdate(e){this.onBufferUpdate=e}setOnError(e){this.onError=e}setOnMuteStateChange(e){this.onMuteStateChange=e}setOnAudioWarning(e){this.onAudioWarning=e}setOnAudioRecovered(e){this.onAudioRecovered=e}cloneVideoTrack(e){if($.debug(`[WorkerProcessor] Original video track:`,{id:e.id,kind:e.kind,readyState:e.readyState,hasClone:typeof e.clone==`function`}),typeof e.clone==`function`)try{let t=e.clone();return $.debug(`[WorkerProcessor] Video track cloned successfully:`,{id:t.id,kind:t.kind,readyState:t.readyState}),t}catch(e){$.error(`[WorkerProcessor] Failed to clone video track:`,e);let t=i(e);throw Error(`Failed to clone video track: ${t}`)}return $.warn(`[WorkerProcessor] Video track clone() not available, using original`),e}attachAudioTrackWarnings(e){this.detachAudioTrackWarnings(),e.addEventListener(`ended`,this.handleAudioTrackEnded),e.addEventListener(`mute`,this.handleAudioTrackMuted),e.addEventListener(`unmute`,this.handleAudioTrackUnmuted),this.audioTrackWarningTarget=e}detachAudioTrackWarnings(){this.audioTrackWarningTarget&&=(this.audioTrackWarningTarget.removeEventListener(`ended`,this.handleAudioTrackEnded),this.audioTrackWarningTarget.removeEventListener(`mute`,this.handleAudioTrackMuted),this.audioTrackWarningTarget.removeEventListener(`unmute`,this.handleAudioTrackUnmuted),null)}cloneAudioTrack(e){if($.debug(`[WorkerProcessor] Original audio track:`,{id:e.id,kind:e.kind,readyState:e.readyState,hasClone:typeof e.clone==`function`}),typeof e.clone==`function`)try{let t=e.clone();return this.audioTrackClone=t,this.attachAudioTrackWarnings(t),$.debug(`[WorkerProcessor] Audio track cloned successfully:`,{id:t.id,kind:t.kind,readyState:t.readyState}),t}catch(e){$.error(`[WorkerProcessor] Failed to clone audio track:`,e);let t=i(e);throw Error(`Failed to clone audio track: ${t}`)}return $.warn(`[WorkerProcessor] Audio track clone() not available, using original`),this.audioTrackClone=e,this.attachAudioTrackWarnings(e),e}stopCurrentVideoTrack(){this.currentVideoTrack&&this.currentVideoTrack.readyState===`live`&&this.currentVideoTrack.stop(),this.currentVideoTrack=null}releaseWorkerUrlLease(){this.hasWorkerUrlLease&&=(jC(),!1)}},VC=class{constructor(e={}){this.currentVideoStream=null;let t=()=>new BC;e.workerProcessorFactory&&(t=e.workerProcessorFactory);try{this.workerProcessor=t(),$.debug(`[StreamProcessor] Using worker-based processing`)}catch(e){let t=i(e);throw Error(`Failed to initialize worker: ${t}`)}}async startProcessing(e,t,n){this.workerProcessor.setOnBufferUpdate((e,t)=>{$.debug(`[StreamProcessor] Buffer update:`,{size:e,formatted:t}),this.onBufferUpdate&&this.onBufferUpdate(e,t)}),this.workerProcessor.setOnError(e=>{$.error(`[StreamProcessor] Worker error:`,e),this.onError&&this.onError(e)}),this.currentVideoStream=e,await this.workerProcessor.startProcessing(e,t,n)}updateTabVisibility(e,t){this.workerProcessor.updateTabVisibility(e,t)}updateSourceType(e){this.workerProcessor.updateSourceType(e)}pause(){this.workerProcessor.pause()}resume(){this.workerProcessor.resume()}isPausedState(){return this.workerProcessor.isPausedState()}async finalize(){return $.debug(`[StreamProcessor] finalize called`),await this.workerProcessor.finalize()}toggleMute(){this.workerProcessor.toggleMute()}isMutedState(){return this.workerProcessor.getMutedState()}getClonedAudioTrack(){return this.workerProcessor.getClonedAudioTrack()}getAudioStreamForAnalysis(){return this.workerProcessor.getAudioStreamForAnalysis()}async switchVideoSource(e){await this.workerProcessor.switchVideoSource(e),this.currentVideoStream=e,this.onSourceChange&&this.onSourceChange(e)}getCurrentVideoSource(){return this.currentVideoStream}getBufferSize(){return this.workerProcessor.getBufferSize()}setOnMuteStateChange(e){this.workerProcessor.setOnMuteStateChange(e)}setOnSourceChange(e){this.onSourceChange=e}setOnBufferUpdate(e){this.onBufferUpdate=e}setOnError(e){this.onError=e}setOnAudioWarning(e){this.workerProcessor.setOnAudioWarning(e)}setOnAudioRecovered(e){this.workerProcessor.setOnAudioRecovered(e)}warmupEncoder(e){this.workerProcessor.warmupEncoder(e)}prewarm(){this.workerProcessor.prewarm()}async cancel(){await this.workerProcessor.cancel(),this.currentVideoStream=null}destroy(){this.workerProcessor.destroy(),this.currentVideoStream=null}};let HC=1e3,UC=`recording`,WC=`idle`,GC={route:`local-webcodecs`,reasonCodes:[`webcodecs-supported`,`target-codec-supported`]},KC={transcodeVideo:hy};function qC(e,t){let n=ly(t.format);return e.type.toLowerCase().startsWith(n)}var JC=class{constructor(e,t,n){this.recordingState=WC,this.countdownDuration=5e3,this.countdownRemaining=0,this.countdownTimeoutId=null,this.countdownIntervalId=null,this.countdownStartTime=null,this.isPaused=!1,this.maxRecordingTime=null,this.maxTimeTimer=null,this.recordingStartTime=null,this.maxTimeRemaining=null,this.recordingSeconds=0,this.recordingIntervalId=null,this.pauseStartTime=null,this.totalPausedTime=0,this.streamProcessor=null,this.originalCameraStream=null,this.enableTabVisibilityOverlay=!1,this.startupAborted=!1,this.activeRecordingConfig=null,this.activeRouteDecision=GC,this.streamManager=e,this.callbacks=t,this.dependencies={...KC,...n}}setCountdownDuration(e){this.countdownDuration=e}setMaxRecordingTime(e){this.maxRecordingTime=e}setTabVisibilityOverlayConfig(e,t){this.enableTabVisibilityOverlay=e,this.tabVisibilityOverlayText=t}getRecordingState(){return this.recordingState}isPausedState(){return this.isPaused}getRecordingSeconds(){return this.recordingSeconds}getStreamProcessor(){return this.streamProcessor}updateSourceType(e){this.recordingState!==UC||!this.streamProcessor||this.streamProcessor.updateSourceType(e)}setOriginalCameraStream(e){this.originalCameraStream=e}getOriginalCameraStream(){return this.originalCameraStream}prewarmStreamProcessor(e){let t=this.getOrCreateStreamProcessor();t.prewarm(),e&&t.warmupEncoder(e)}async startRecording(){try{this.callbacks.onClearUploadStatus(),this.countdownDuration>0?this.startCountdown():await this.doStartRecording()}catch(e){this.handleError(e),this.recordingState=WC,this.cancelCountdown()}}startCountdown(){this.recordingState=`countdown`,this.countdownRemaining=Math.ceil(this.countdownDuration/HC),this.countdownStartTime=Date.now(),this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining),this.countdownIntervalId=window.setInterval(()=>{if(!this.countdownStartTime)return;let e=Date.now()-this.countdownStartTime,t=Math.max(0,Math.ceil((this.countdownDuration-e)/HC)),n=this.countdownRemaining;this.countdownRemaining=t,n!==t&&this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining)},100),this.countdownTimeoutId=window.setTimeout(async()=>{await this.doStartRecording().catch(()=>void 0)},this.countdownDuration)}async doStartRecording(){$.debug(`[RecordingManager] doStartRecording called`),this.cancelCountdown(),this.resetRecordingState(),this.startupAborted=!1;let e=this.streamManager.getStream();if($.debug(`[RecordingManager] Current stream:`,{hasStream:!!e,audioTracks:e?.getAudioTracks().length||0,videoTracks:e?.getVideoTracks().length||0}),!e){$.warn(`[RecordingManager] No stream available`),this.handleError(Error(`No stream available for recording`)),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState);return}this.originalCameraStream=e,$.debug(`[RecordingManager] Ensuring stream processor`);let t=this.getOrCreateStreamProcessor();$.debug(`[RecordingManager] StreamProcessor ready:`,!!t);let n=null,r=await this.callbacks.onGetConfig().then(e=>(n=e,null)).catch(e=>e);if(r){this.handleError(r),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState);return}if(!n){this.handleError(Error(`Failed to get recording config`)),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState);return}let i=await this.resolveRouteDecision();if(i instanceof Error){this.handleError(i),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState);return}this.callbacks.onAudioWarning&&t.setOnAudioWarning(this.callbacks.onAudioWarning),this.callbacks.onAudioRecovered&&t.setOnAudioRecovered(this.callbacks.onAudioRecovered),t.setOnError(e=>{this.handleFatalProcessorError(e)}),this.activeRecordingConfig=n,this.activeRouteDecision=i,$.debug(`[RecordingManager] Starting recording with stream manager`);let a=await this.streamManager.startRecording(t,n,this.enableTabVisibilityOverlay,this.tabVisibilityOverlayText,i).then(()=>null).catch(e=>($.error(`[RecordingManager] Error starting recording:`,e),e));if(a){this.activeRecordingConfig=null,this.activeRouteDecision=GC,this.handleError(a),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState);return}if(this.startupAborted){this.startupAborted=!1;return}$.info(`[RecordingManager] Recording started successfully`),this.recordingState=UC,this.callbacks.onStateChange(this.recordingState),this.startRecordingTimer(),this.recordingStartTime=Date.now(),this.maxRecordingTime&&this.maxRecordingTime>0&&(this.maxTimeRemaining=this.maxRecordingTime,this.startMaxTimeTimer())}async stopRecording(){$.debug(`[RecordingManager] stopRecording called`);try{if(this.recordingState!==UC){let e=this.recordingState;throw this.cancelCountdown(),Px(Ax,`Recording is not ready to stop`,{recordingState:e,hasStreamProcessor:!!this.streamProcessor})}this.cancelCountdown(),this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.resetPauseState(),this.callbacks.onStopAudioTracking(),$.debug(`[RecordingManager] Stopping recording in stream manager`);let e=await this.streamManager.stopRecording(),t=await this.resolveFinalRecordingBlob(e.blob);$.info(`[RecordingManager] Recording stopped, blob size:`,t.size),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState),this.recordingSeconds=0,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.callbacks.onRecordingComplete(t);let n={};return e.recordingStats!==void 0&&(n.videoFrameCount=e.recordingStats.videoFrameCount,n.totalFrameErrors=e.recordingStats.totalFrameErrors,n.totalFramesProcessed=e.recordingStats.totalFramesProcessed),e.encoderAcceleration!==void 0&&(n.encoderAcceleration=e.encoderAcceleration),{blob:t,telemetryProperties:n}}catch(e){let t=Fx(e);throw this.handleError(t),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState),t}finally{this.activeRecordingConfig=null,this.activeRouteDecision=GC}}pauseRecording(){if(!(this.recordingState!==UC||this.isPaused)&&(this.streamManager.pauseRecording(),this.isPaused=!0,this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.pauseStartTime=Date.now(),this.maxTimeTimer!==null&&this.recordingStartTime!==null&&this.maxRecordingTime!==null)){let e=Date.now()-this.recordingStartTime-this.totalPausedTime;this.maxTimeRemaining=Math.max(0,this.maxRecordingTime-e),this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null}}resumeRecording(){this.recordingState!==UC||!this.isPaused||(this.streamManager.resumeRecording(),this.isPaused=!1,this.updatePausedDuration(),this.startRecordingTimer(),this.maxTimeRemaining!==null&&this.maxTimeRemaining>0&&this.startMaxTimeTimer())}cancelCountdown(){this.clearTimer(this.countdownTimeoutId,clearTimeout),this.countdownTimeoutId=null,this.clearTimer(this.countdownIntervalId,clearInterval),this.countdownIntervalId=null,this.recordingState=WC,this.countdownRemaining=0,this.countdownStartTime=null,this.callbacks.onCountdownUpdate(this.recordingState,this.countdownRemaining)}cleanup(){this.cancelCountdown(),this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.streamProcessor&&=(this.streamProcessor.destroy(),null)}resetRecordingState(){this.isPaused=!1,this.recordingSeconds=0,this.totalPausedTime=0,this.pauseStartTime=null,this.recordingStartTime=null,this.maxTimeRemaining=null}async resolveFinalRecordingBlob(e){if(this.activeRouteDecision.route!==`safe-capture-post-recording-transcode`)return e;if(!this.activeRecordingConfig)throw Error(`Recording config unavailable for final video processing`);if(qC(e,this.activeRecordingConfig))return e;this.callbacks.onTranscodingProgress?.(0);let t=await this.dependencies.transcodeVideo(e,this.activeRecordingConfig,e=>{this.callbacks.onTranscodingProgress?.(e)});return this.callbacks.onTranscodingProgress?.(1),t.blob}resetPauseState(){this.isPaused=!1,this.pauseStartTime=null,this.totalPausedTime=0}getOrCreateStreamProcessor(){if(this.streamProcessor)return this.streamProcessor;let e=new VC;return this.streamProcessor=e,e}async resolveRouteDecision(){return this.callbacks.onGetRouteDecision?await this.callbacks.onGetRouteDecision().then(e=>e).catch(e=>e instanceof Error?e:Error(i(e))):GC}updatePausedDuration(){if(this.pauseStartTime===null)throw Error(`Pause start time not set`);let e=Date.now()-this.pauseStartTime;this.totalPausedTime+=e,this.pauseStartTime=null}startRecordingTimer(){if(this.recordingIntervalId!==null)return;let e=Bx(this.recordingSeconds);this.callbacks.onTimerUpdate(e),this.recordingIntervalId=window.setInterval(()=>{this.recordingSeconds+=1;let e=Bx(this.recordingSeconds);this.callbacks.onTimerUpdate(e)},1e3)}startMaxTimeTimer(){this.maxTimeRemaining===null||this.maxTimeRemaining<=0||(this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=window.setTimeout(async()=>{this.recordingState===UC&&!this.isPaused&&await this.stopRecording()},this.maxTimeRemaining))}clearTimer(e,t){e!==null&&t(e)}handleError(e){let t=e instanceof Error?e:Error(i(e));this.callbacks.onError(t)}handleFatalProcessorError(e){this.recordingState===UC&&(this.clearTimer(this.recordingIntervalId,clearInterval),this.recordingIntervalId=null,this.clearTimer(this.maxTimeTimer,clearTimeout),this.maxTimeTimer=null,this.resetPauseState()),!(!this.streamProcessor&&this.recordingState!==UC)&&($.error(`[RecordingManager] Fatal processor error, stopping recording`,e),this.startupAborted=!0,this.streamProcessor&&=(this.streamProcessor.destroy(),null),this.recordingState=WC,this.callbacks.onStateChange(this.recordingState),this.recordingSeconds=0,this.callbacks.onError(e))}},YC=class{constructor(e){this.client=null,this.createTelemetryClient=e.createTelemetryClient}initialize(e,t){typeof e==`string`&&e.length>0&&typeof t==`string`&&t.length>0&&(this.client=this.createTelemetryClient(e,t))}sendEvent(e,t,n){if(!this.client)return;let r={name:e};t&&(r={...r,properties:t}),n&&(r={...r,error:n}),this.client.triggerTelemetryEvent(r)}async executeAction(e){e.requestedEvent&&this.sendEvent(e.requestedEvent,e.properties);let t=null;if(await e.action().catch(e=>{t=e}),t)throw this.sendEvent(e.failedEvent,e.properties,t),t;this.sendEvent(e.succeededEvent,e.properties)}async executeActionWithResult(e){e.requestedEvent&&this.sendEvent(e.requestedEvent,e.properties);let t=null,n=null;if(await e.action().then(e=>{n=e}).catch(e=>{t=e}),t)throw this.sendEvent(e.failedEvent,e.properties,t),t;if(n===null)throw Error(`Telemetry action failed to return result`);let r=this.resolveResultTelemetryProperties(n,e.getPropertiesFromResult),i=this.mergeTelemetryProperties(e.properties,r);return this.sendEvent(e.succeededEvent,i),n}resolveResultTelemetryProperties(e,t){if(t!==void 0)return t(e)}mergeTelemetryProperties(e,t){if(!(e===void 0&&t===void 0))return e===void 0?t:t===void 0?e:{...e,...t}}},XC=class{constructor(){this.metadataById=new Map}getMetadata(e){return this.metadataById.get(e)}setMetadata(e,t){let n=new Map(this.metadataById);n.set(e,t),this.metadataById=n}clearMetadata(e){let t=new Map(this.metadataById);t.delete(e),this.metadataById=t}};let ZC=`[RecorderController]`;var QC=class{constructor(e={}){this.uploadService=null,this.uploadQueueManager=null,this.isInitialized=!1,this.isDemo=!1,this.isDestroyed=!1,this.enableTabVisibilityOverlay=!1,this.isUploadInProgress=!1,this.recordingWarmupTimeoutId=null,this.audioTelemetryUnsub=null,this.callbacks=e,this.streamManager=new Xx,this.configManager=new dn,this.storageManager=new Lb,this.deviceManager=new fn(this.streamManager,e.device),this.audioLevelAnalyzer=new o,this.uploadService=new ES,this.uploadCallbacks=RS(e),this.telemetryManager=new YC({createTelemetryClient:wS}),this.uploadMetadataManager=new XC;let t=HS(e,{stopAudioTracking:()=>this.audioLevelAnalyzer.stopTracking(),getConfig:()=>Promise.resolve(this.configManager.getConfigForRecording()),getRouteDecision:async()=>await this.resolveRecordingRouteDecision(`live-recorder`),onAudioWarning:e.recording?.onAudioWarning?t=>{this.sendAudioWarningTelemetry(t),e.recording?.onAudioWarning?.(t)}:e=>{this.sendAudioWarningTelemetry(e)},...e.recording?.onAudioRecovered&&{onAudioRecovered:e.recording.onAudioRecovered},...e.recording?.onTranscodingProgress&&{onTranscodingProgress:e.recording.onTranscodingProgress}});this.recordingManager=new JC(this.streamManager,t);let n=US(e,{isRecording:()=>this.isRecording(),updateSourceType:e=>{this.recordingManager.updateSourceType(e)},getSelectedCameraDeviceId:()=>this.deviceManager.getSelectedCameraDeviceId(),getSelectedMicDeviceId:()=>this.deviceManager.getSelectedMicDeviceId()});this.sourceSwitchManager=new hx(this.streamManager,n);let r=e.stream;r&&(this.streamManager.on(`streamstart`,({stream:e})=>{$.debug(`${ZC} streamstart event received, calling callback`),r.onStreamStart&&r.onStreamStart(e)}),this.streamManager.on(`streamstop`,()=>{$.debug(`${ZC} streamstop event received, calling callback`),r.onStreamStop&&r.onStreamStop()}),this.streamManager.on(`error`,({error:e})=>{$.error(`${ZC} stream error event received, calling callback`,e),this.telemetryManager.sendEvent(`stream.error`,{sourceType:this.getCurrentSourceType()},e),r.onError&&r.onError(e)})),this.audioTelemetryUnsub=this.streamManager.on(`audiotelemetry`,({event:e})=>{let t=this.getBrowserNameForTelemetry();this.telemetryManager.sendEvent(e.name,{...e.properties,browserName:t,sourceType:this.getCurrentSourceType()},e.error)})}async initialize(e){if(this.isInitialized)return;await this.validateRecorderSupport();let t=!1;typeof e.demo==`boolean`&&(t=e.demo),this.isDemo=t;let n=null;typeof e.apiKey==`string`&&e.apiKey.length>0&&(n=e.apiKey);let r=null;typeof e.backendUrl==`string`&&e.backendUrl.length>0&&(r=e.backendUrl),this.telemetryManager.initialize(n,r),await this.telemetryManager.executeAction({requestedEvent:`sdk.init.started`,succeededEvent:`sdk.init.succeeded`,failedEvent:`sdk.init.failed`,action:async()=>{await this.initializeConfig(n,r),this.applyRecordingConfig(e),await this.initializeStorage(),this.isInitialized=!0,this.scheduleRecordingWarmup()}})}async startStream(){let e=this.getCurrentSourceType();await this.telemetryManager.executeAction({succeededEvent:`preview.start.succeeded`,failedEvent:`preview.start.failed`,action:async()=>{$.debug(`${ZC} startStream called`),await this.streamManager.startStream(),this.ignorePromiseRejection(this.ensureConfigReady()),this.ignorePromiseRejection(this.configManager.getConfig().then(e=>{this.recordingManager.prewarmStreamProcessor(e)})),this.prewarmSupportCheck(),$.debug(`${ZC} startStream completed`)},properties:{sourceType:e}})}async stopStream(){await this.streamManager.stopStream()}switchVideoDevice(e){return this.streamManager.switchVideoDevice(e)}switchAudioDevice(e){return this.streamManager.switchAudioDevice(e)}async startRecording(){let e=this.getCurrentSourceType();await this.telemetryManager.executeAction({requestedEvent:`recording.start.requested`,succeededEvent:`recording.start.succeeded`,failedEvent:`recording.start.failed`,action:async()=>{if(this.isUploading())throw Px(Nx,`Previous recording is still being uploaded`);await this.ensureConfigReady(),await this.streamManager.waitForAudio(),await this.recordingManager.startRecording()},properties:{sourceType:e}})}async stopRecording(){let e=this.getCurrentSourceType();try{return(await this.telemetryManager.executeActionWithResult({requestedEvent:`recording.stop.requested`,succeededEvent:`recording.stop.succeeded`,failedEvent:`recording.stop.failed`,action:async()=>{let e=await this.recordingManager.stopRecording();return await this.sourceSwitchManager.handleRecordingStop().catch(()=>{throw Error(`Source switch cleanup failed`)}),this.streamManager.stopStream(),e},properties:{sourceType:e},getPropertiesFromResult:e=>e.telemetryProperties})).blob}catch(e){throw Db(e)&&this.sendAudioMissingTelemetry(e),e}}sendAudioMissingTelemetry(e){let t={code:e.code,sourceType:this.getCurrentSourceType(),browserName:this.getBrowserNameForTelemetry()};e.details&&(t.durationMs=e.details.durationMs,t.totalChunks=e.details.totalChunks,t.nonSilentChunks=e.details.nonSilentChunks,t.mutedDurationMs=e.details.mutedDurationMs,t.silenceRatio=e.details.durationMs>0?e.details.mutedDurationMs/e.details.durationMs:0,t.hadTrackEndedWarning=e.details.hadTrackEndedWarning),this.telemetryManager.sendEvent(`recording.audio-missing`,t,e)}getTabVisibilityOverlayConfig(){return{enabled:this.enableTabVisibilityOverlay,text:this.tabVisibilityOverlayText}}pauseRecording(){this.recordingManager.pauseRecording()}resumeRecording(){this.recordingManager.resumeRecording()}async switchSource(e){await this.telemetryManager.executeAction({requestedEvent:`source.switch.requested`,succeededEvent:`source.switch.succeeded`,failedEvent:`source.switch.failed`,action:async()=>{await this.sourceSwitchManager.toggleSource()},properties:{sourceType:e}})}setCameraDevice(e){this.deviceManager.setCameraDevice(e)}setMicDevice(e){this.deviceManager.setMicDevice(e)}getAvailableDevices(){return this.deviceManager.getAvailableDevices()}muteAudio(){this.streamManager.muteAudio()}unmuteAudio(){this.streamManager.unmuteAudio()}toggleMute(){this.streamManager.toggleMute()}getIsMuted(){return this.streamManager.isMuted()}startAudioLevelTracking(e,t){if(!t)throw Error(`Audio level callbacks are required`);return this.audioLevelAnalyzer.startTracking(e,t,()=>this.streamManager.isMuted()),Promise.resolve()}stopAudioLevelTracking(){this.audioLevelAnalyzer.stopTracking()}getAudioLevel(){return this.audioLevelAnalyzer.getAudioLevel()}uploadVideo(e,t,n,r){return this.uploadCallbacks.onClearStatus(),this.isUploadInProgress=!0,this.uploadVideoAfterStatusClear(e,t,n,r).catch(e=>{throw this.isUploadInProgress=!1,e})}async uploadVideoAfterStatusClear(e,t,n,r){let i=await Cv(e),a=this.configManager.getConfigForRecording().format,o=`recording-${Date.now()}.${uy(a)}`,s=ly(a),c=this.getCurrentSourceType(),l;if(Object.keys(r).length>0&&(l=r),this.telemetryManager.sendEvent(`upload.started`,{filename:o,duration:i,sourceType:c}),!this.uploadQueueManager){await this.uploadDirectlyWithoutQueue({blob:e,apiKey:t,backendUrl:n,filename:o,mimeType:s,duration:i,sourceType:c,userMetadata:l});return}let u=await this.uploadQueueManager.queueUpload({blob:e,apiKey:t,backendUrl:n,filename:o,mimeType:s,duration:i,metadata:void 0,userMetadata:l});this.uploadMetadataManager.setMetadata(u,{filename:o,duration:i,sourceType:c})}async uploadDirectlyWithoutQueue(e){if(!this.uploadService){let t=Error(`Upload service not available`);throw this.uploadCallbacks.onError(t),this.telemetryManager.sendEvent(`upload.failed`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType},t),t}try{let t=await this.uploadService.uploadVideo(e.blob,{apiKey:e.apiKey,backendUrl:e.backendUrl,filename:e.filename,mimeType:e.mimeType,metadata:void 0,userMetadata:e.userMetadata,onProgress:this.uploadCallbacks.onProgress});this.uploadCallbacks.onSuccess(t),this.telemetryManager.sendEvent(`upload.succeeded`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType,recordingId:t.id})}catch(t){let n=t instanceof Error?t:Error(i(t));throw this.uploadCallbacks.onError(n),this.telemetryManager.sendEvent(`upload.failed`,{filename:e.filename,duration:e.duration,sourceType:e.sourceType},n),n}finally{this.isUploadInProgress=!1}}getStream(){return this.streamManager.getStream()}isConfigReady(){return this.configManager.isConfigReady()}ensureConfigReady(){return this.isDemo||this.configManager.isConfigReady()?Promise.resolve():this.configManager.fetchConfig().then(()=>void 0).catch(()=>void 0)}cleanup(){this.isDestroyed=!0,this.isUploadInProgress=!1,this.recordingWarmupTimeoutId!==null&&(clearTimeout(this.recordingWarmupTimeoutId),this.recordingWarmupTimeoutId=null),this.audioTelemetryUnsub&&=(this.audioTelemetryUnsub(),null),this.uploadQueueManager?.destroy(),this.storageManager.destroy(),this.recordingManager.cleanup(),this.audioLevelAnalyzer.stopTracking(),this.sourceSwitchManager.cleanup()}getRecordingState(){return this.recordingManager.getRecordingState()}isPaused(){return this.recordingManager.isPausedState()}getCurrentSourceType(){return this.sourceSwitchManager.getCurrentSourceType()}getOriginalCameraStream(){return this.sourceSwitchManager.getOriginalCameraStream()}getStreamManager(){return this.streamManager}getAudioStreamForAnalysis(){return this.streamManager.getAudioStreamForAnalysis()}getDeviceManager(){return this.deviceManager}getConfig(){return this.configManager.getConfig()}getUploadService(){return this.uploadService}isUploading(){return this.isUploadInProgress}isRecording(){return this.streamManager.isRecording()}isActive(){return this.streamManager.isActive()}isAudioReady(){return this.streamManager.isAudioReady()}getAudioStatus(){return this.streamManager.getAudioStatus()}sendAudioWarningTelemetry(e){let t={code:e.code,sourceType:this.getCurrentSourceType(),browserName:this.getBrowserNameForTelemetry()};`durationMs`in e&&(t.durationMs=e.durationMs),`peak`in e&&(t.peak=e.peak),`rms`in e&&(t.rms=e.rms),this.telemetryManager.sendEvent(`audio.warning`,t)}getBrowserNameForTelemetry(){try{return Mt()}catch{return`unknown`}}async resolveRecordingRouteDecision(e){let t=this.configManager.getConfigForRecording(),n=this.buildCodecProbeCandidates(t),r=await Vv({codecCandidates:n}),i=Zv({profile:r,targetCodecIds:n.map(e=>e.id)});return this.telemetryManager.sendEvent(`recording.route.selected`,{routeDecision:this.buildRouteTelemetryProperties(i,r,e)}),i}buildCodecProbeCandidates(e){let t=e.width??1280,n=e.height??720,r=typeof e.bitrate==`number`?e.bitrate:25e5,i=e.fps??30;return this.resolveTargetCodecIds(e.codec).map(e=>({id:`${e}-${t}x${n}`,config:{codec:e,width:t,height:n,bitrate:r,framerate:i}}))}resolveTargetCodecIds(e){switch(e){case`avc`:return[`avc1.640028`,`avc1.42001f`];case`vp9`:return[`vp09.00.10.08`];case`vp8`:return[`vp8`];case`av1`:return[`av01.0.08M.08`];case`hevc`:return[`hvc1.1.6.L123.B0`];default:return[`avc1.640028`,`avc1.42001f`,`vp09.00.10.08`,`vp8`]}}buildRouteTelemetryProperties(e,t,n){return{selectedRoute:e.route,reasonCodes:e.reasonCodes,sourceType:n,clientTranscodeDeferred:e.route===`safe-capture-post-recording-transcode`,capabilitySummary:{browserName:t.browser.normalizedName,osName:t.os.name,deviceMemory:t.resources.deviceMemory??null,hardwareConcurrency:t.resources.hardwareConcurrency??null,effectiveType:t.network.effectiveType??null,online:t.network.online??null,isSecureContext:t.features.isSecureContext,hasMediaRecorder:t.features.hasMediaRecorder,hasVideoEncoder:t.features.hasVideoEncoder,supportedCodecIds:t.codecProbeResults.filter(e=>e.supported).map(e=>e.id),supportedEncodingCodecIds:t.codecProbeResults.filter(e=>e.encodingCapability?.supported===!0).map(e=>e.id),smoothEncodingCodecIds:t.codecProbeResults.filter(e=>e.encodingCapability?.smooth===!0).map(e=>e.id),powerEfficientEncodingCodecIds:t.codecProbeResults.filter(e=>e.encodingCapability?.powerEfficient===!0).map(e=>e.id)}}}async initializeConfig(e,t){let n=!0;e===null&&(n=!1),t===null&&(n=!1),n&&e!==null&&t!==null&&await this.configManager.initialize(e,t)}applyRecordingConfig(e){e.countdownDuration!==void 0&&this.recordingManager.setCountdownDuration(e.countdownDuration),e.maxRecordingTime!==void 0&&this.recordingManager.setMaxRecordingTime(e.maxRecordingTime),e.enableTabVisibilityOverlay!==void 0&&(this.enableTabVisibilityOverlay=e.enableTabVisibilityOverlay),e.tabVisibilityOverlayText!==void 0&&(this.tabVisibilityOverlayText=e.tabVisibilityOverlayText),this.recordingManager.setTabVisibilityOverlayConfig(this.enableTabVisibilityOverlay,this.tabVisibilityOverlayText)}async initializeStorage(){if(this.isDestroyed)return;let e=BS(this.callbacks);try{await this.storageManager.initialize(e)}catch(e){let t=e instanceof Error?e:Error(i(e)),n=i(t);this.telemetryManager.sendEvent(`storage.init.failed`,{reason:n},t),VS(this.callbacks)(n);return}if(this.isDestroyed)return;let t=this.storageManager.getWriteProbeResult();if(!t?.ok){let e=t?.reason??`Storage write probe did not complete`,n=Error(e);this.telemetryManager.sendEvent(`storage.write.probe.failed`,{reason:e},n),VS(this.callbacks)(e);return}let n=this.storageManager.getStorageService();n&&this.uploadService&&(this.uploadQueueManager=new TS(n,this.uploadService),this.uploadQueueManager.setCallbacks({onUploadProgress:(e,t)=>{this.uploadCallbacks.onProgress(t)},onUploadComplete:(e,t)=>{this.isUploadInProgress=!1,this.uploadCallbacks.onSuccess(t);let n=this.uploadMetadataManager.getMetadata(e);n&&(this.telemetryManager.sendEvent(`upload.succeeded`,{filename:n.filename,duration:n.duration,sourceType:n.sourceType,recordingId:t.id}),this.uploadMetadataManager.clearMetadata(e))},onUploadError:(e,t)=>{this.isUploadInProgress=!1,this.uploadCallbacks.onError(t);let n=this.uploadMetadataManager.getMetadata(e);n&&(this.telemetryManager.sendEvent(`upload.failed`,{filename:n.filename,duration:n.duration,sourceType:n.sourceType},t),this.uploadMetadataManager.clearMetadata(e))}}))}async validateRecorderSupport(){Ft();let e=await gb({requiresAudio:!1,requiresWatermark:!1});if(!e.isSupported)throw Nt({missingCapabilities:e.missing,resolutionStage:`feature-preflight`})}scheduleRecordingWarmup(){this.recordingWarmupTimeoutId!==null&&(clearTimeout(this.recordingWarmupTimeoutId),this.recordingWarmupTimeoutId=null),!this.isDestroyed&&(this.recordingWarmupTimeoutId=setTimeout(()=>{this.recordingWarmupTimeoutId=null,!this.isDestroyed&&(this.ignorePromiseRejection(this.ensureConfigReady()),this.ignorePromiseRejection(this.configManager.getConfig().then(e=>{this.recordingManager.prewarmStreamProcessor(e)})))},0))}ignorePromiseRejection(e){e.catch(()=>void 0)}prewarmSupportCheck(){this.ignorePromiseRejection(gb({requiresAudio:!0,requiresWatermark:!0}).then(e=>{this.streamManager.setPreResolvedSupportReport(e)}))}};let $C=/<a\s[^>]*href="(?<href>[^"]+)"[^>]*>(?<text>[^<]+)<\/a>/,ew=/\starget=["'](?<target>[^"']+)["']/,tw=/^[a-zA-Z][a-zA-Z\d+\-.]*:/,nw=`{version}`;function rw(e,t){return e?e.toLowerCase().includes(t):!1}function iw(e){let t=e.trim();if(!t)return null;let n=t.toLowerCase();return!tw.test(n)||n.startsWith(`http:`)||n.startsWith(`https:`)?t:null}function aw(e,t,n,r){return e===`browser.unsupported`?r.browserUnsupportedDynamic?cw(r.browserUnsupportedDynamic,t,n):rw(t,`safari`)?r.browserUnsupportedSafari:rw(t,`firefox`)?r.browserUnsupportedFirefox:r.browserUnsupported:r.browserUnsupported}function ow(e,t){return e===`camera.in-use`?t.cameraInUse:e===`camera.not-found`?t.cameraNotFound:e===`camera.permission-denied`?t.cameraPermissionDenied:e===`camera.timeout`?t.cameraTimeout??t.failedToStartCamera:t.failedToStartCamera}function sw(e,t){return e===`audio.in-use`?t.audioInUse:e===`audio.not-found`?t.audioNotFound:e===`audio.permission-denied`?t.audioPermissionDenied:e===`audio.timeout`?t.audioTimeout??t.failedToStartAudio:t.failedToStartAudio}function cw(e,t,n){let r=`This browser`;t&&t.trim().length>0&&(r=t);let i=e.replace(`{browser}`,r);return n&&n.trim().length>0&&n?(i=i.replace(nw,n),i):(i=i.replace(` ({version})`,``),i=i.replace(nw,``),i)}function lw(e){let t=$C.exec(e);if(!t?.groups)return{prefix:e,linkText:null,linkHref:null,linkTarget:null,suffix:``};let n=t.index,r=n+t[0].length,i=e.slice(0,n),a=e.slice(r),o=iw(t.groups.href);if(!o)return{prefix:i+t.groups.text+a,linkText:null,linkHref:null,linkTarget:null,suffix:``};let s=ew.exec(t[0])?.groups?.target??null;return{prefix:i,linkText:t.groups.text,linkHref:o,linkTarget:s,suffix:a}}function uw(){let e=globalThis.navigator&&typeof globalThis.navigator.userAgent==`string`?globalThis.navigator.userAgent:``,t=new wt(e).getResult(),n=t.device.type,r=n===`mobile`||n===`tablet`;return $.debug(`Mobile detection result`,{userAgent:e,deviceType:n,isMobile:r,device:t.device,os:t.os,browser:t.browser}),r}function dw(){let e=jt(),t=null;e.name.length>0&&(t=e.name);let n=null;return e.version.length>0&&(n=e.version),{browserName:t,browserVersion:n}}function fw(e){let t=t=>{if(!(`code`in t))return;let n=t;if(n.code!==`browser.unsupported`){(n.code?.startsWith(`camera.`)||n.code?.startsWith(`audio.`)||n.code?.startsWith(`recording.`))&&e.updateState({errorCode:n.code,canRetry:!0,browserName:null,browserVersion:null});return}let r=dw(),i=r.browserName;n.browserName&&n.browserName.length>0&&(i=n.browserName);let a=r.browserVersion;n.browserVersion&&n.browserVersion.length>0&&(a=n.browserVersion),e.updateState({errorCode:`browser.unsupported`,canRetry:!1,browserName:i,browserVersion:a})};return{recording:{onStateChange:t=>{e.updateState({recordingState:t})},onCountdownUpdate:(t,n)=>{e.updateState({recordingState:t,countdown:n})},onTimerUpdate:t=>{e.updateState({timer:t})},onError:n=>{t(n),e.updateState({error:i(n),transcodingProgress:null})},onRecordingComplete:t=>{e.updateState({countdown:null}),e.processRecordingBlob(t).catch(t=>{e.updateState({error:i(t)})})},onClearUploadStatus:()=>{e.updateState({uploadProgress:null})},onTranscodingProgress:t=>{e.updateState({transcodingProgress:t})},onAudioWarning:t=>{e.updateState({audioWarning:t}),e.dispatchEvent(new CustomEvent(`vidtreo:audio-warning`,{detail:t}))},onAudioRecovered:()=>{e.updateState({audioWarning:null}),e.dispatchEvent(new CustomEvent(`vidtreo:audio-recovered`))},onStopAudioTracking:()=>void 0,onGetConfig:()=>{if(!e.controller)throw Error(`Controller not initialized`);return e.isDemo?Promise.resolve(Zt(`mp4`)):e.controller.getConfig()}},sourceSwitch:{onSourceChange:e=>Promise.resolve(),onPreviewUpdate:t=>(e.updateState({stream:t}),Promise.resolve()),onError:n=>{t(n),e.updateState({error:i(n)})},onTransitionStart:t=>{e.updateState({transitionMessage:t})},onTransitionEnd:()=>{e.updateState({transitionMessage:null})}},storage:{onUploadProgress:()=>void 0,onUploadComplete:()=>void 0,onUploadError:()=>void 0},onStorageCleanupError:t=>{e.updateState({error:t})}}}function pw(e,t){let n=(e=>e===``||e===`default`?null:e)(t);return e.setCameraDevice(n),e.switchVideoDevice(n)}function mw(e,t){let n=(e=>e===``||e===`default`?null:e)(t);return e.setMicDevice(n),e.switchAudioDevice(n)}async function hw(e,t=`camera`){e.isActive()||await e.startStream(),t!==e.getCurrentSourceType()&&await e.switchSource(t),await e.startRecording()}async function gw(e,t,n,r){return await e.stopRecording()}function _w(e){e.pauseRecording()}function vw(e){e.resumeRecording()}async function yw(e,t){await e.switchSource(t)}let bw=`camera`,xw=`screen`,Sw=`recording`,Cw=`browser.unsupported`,ww=[.8,1.2,.9];function Tw(e,t){let{uploadProgress:n,uploadingLabel:r}=e,{overlay:i,fill:a,text:o}=t;if(!i)return;if(n===null){i.style.display=`none`;return}i.style.display=`block`;let s=Math.round(n*100);a&&(a.style.width=`${s}%`),o&&(o.textContent=`${r} ${s}%`)}function Ew(e,t){let{transitionMessage:n}=e,{overlay:r,message:i}=t;if(r){if(!n){r.classList.remove(`vidtreo-active`);return}r.classList.add(`vidtreo-active`),i&&(i.textContent=n)}}let Dw=`none`,Ow=`flex`,kw=`inline-flex`,Aw=`checking`,jw=`blocked`,Mw=`ready`,Nw=`vidtreo-active`,Pw=`vidtreo-permission-flow--fading`,Fw=`vidtreo-permission-flow-action--requesting`;function Iw(e){return{container:e.querySelector(`#permissionFlow`),spinner:e.querySelector(`#permissionFlowSpinner`),title:e.querySelector(`#permissionFlowTitle`),subtitle:e.querySelector(`#permissionFlowSubtitle`),actionButton:e.querySelector(`#btnAllowPermission`),buttonIcon:e.querySelector(`#permissionFlowBtnIcon`),buttonSpinner:e.querySelector(`#permissionFlowBtnSpinner`),buttonText:e.querySelector(`#permissionFlowBtnText`),recovery:e.querySelector(`#permissionFlowRecovery`),recoveryTitle:e.querySelector(`#permissionFlowRecoveryTitle`),recoveryText:e.querySelector(`#permissionFlowRecoveryText`),retryButton:e.querySelector(`#btnRetryPermission`),recoveryGuideUrl:e.querySelector(`#recoveryGuideUrl`),recoveryGuidePopoverUrl:e.querySelector(`#recoveryGuidePopoverUrl`)}}function Lw(e){return e.permissions.camera===`granted`?`microphone`:`camera`}function Rw(e,t){return t.cameraTitle}function zw(e,t){return t.cameraLabel}function Bw(e,t){return t.allowCamera}function Vw(e,t,n){let r=e.step,i=!1;(r===Aw||r===`awaiting-user`||r===jw||r===Mw)&&(i=!0);let a=r===Mw,o=r===jw,s=r===Aw,c=Lw(e),l=Rw(c,t),u=zw(c,t),d=Bw(c,t),f=t.recoveryInstructions;return e.recoveryData?.resetInstructions&&(f=e.recoveryData.resetInstructions),{isVisible:i,isFadingOut:n,isSpinnerOnly:a,isBlocked:o,isRequesting:s,titleText:l,subtitleText:u,actionLabel:d,requestingText:t.statusRequesting,recoveryTitleText:t.recoveryTitle,recoveryInstructionsText:f}}function Hw(e,t,n){if(e){if(t){e.style.display=n;return}e.style.display=Dw}}function Uw(e,t){if(t.isVisible)e.classList.add(Nw);else return e.classList.remove(Nw),e.classList.remove(Pw),!1;return t.isFadingOut?e.classList.add(Pw):e.classList.remove(Pw),!0}function Ww(e,t,n){Hw(e.actionButton,n,kw),e.actionButton&&(t.isRequesting?(e.actionButton.classList.add(Fw),e.actionButton.disabled=!0):(e.actionButton.classList.remove(Fw),e.actionButton.disabled=!1)),Hw(e.buttonIcon,n&&!t.isRequesting,kw),Hw(e.buttonSpinner,n&&t.isRequesting,kw),e.buttonText&&(t.isRequesting?e.buttonText.textContent=t.requestingText:e.buttonText.textContent=t.actionLabel)}function Gw(){if(globalThis.window===void 0)return`vidtreo.com`;let e=globalThis.window.location.hostname||`vidtreo.com`;return e.length>20?`${e.slice(0,20)}...`:e}function Kw(e,t){if(Hw(e.recovery,t.isBlocked,Ow),e.recoveryTitle&&(e.recoveryTitle.textContent=t.recoveryTitleText),Hw(e.recoveryText,!1,Dw),Hw(e.retryButton,!1,Dw),t.isBlocked){let t=Gw();e.recoveryGuideUrl&&(e.recoveryGuideUrl.textContent=t),e.recoveryGuidePopoverUrl&&(e.recoveryGuidePopoverUrl.textContent=t)}}function qw(e,t){t&&(e.actionButton&&t.onAllow&&(e.actionButton.onclick=t.onAllow),e.retryButton&&t.onRetry&&(e.retryButton.onclick=t.onRetry))}function Jw(e,t,n){let{container:r}=t;if(!r||!Uw(r,e))return;let i=!e.isSpinnerOnly;Hw(t.spinner,e.isSpinnerOnly,kw),Hw(t.title,i&&!e.isBlocked,Ow),Hw(t.subtitle,i&&!e.isBlocked,Ow),t.title&&(t.title.textContent=e.titleText),t.subtitle&&(t.subtitle.textContent=e.subtitleText),Ww(t,e,i&&!e.isBlocked),Kw(t,e),qw(t,n)}function Yw(e,t){e.textContent=``;let n=document.createTextNode(t.prefix);if(e.append(n),t.linkText&&t.linkHref){let n=document.createElement(`a`),r=t.linkTarget;n.href=t.linkHref,r&&(n.target=r),r===`_blank`&&(n.rel=`noopener noreferrer`),n.textContent=t.linkText,e.append(n)}let r=document.createTextNode(t.suffix);e.append(r)}function Xw(e){let{stream:t,transitionMessage:n,isVideoLoaded:r}=e;return{showPreviewSkeleton:!!t&&!r&&!n,showVideoPreview:!!t}}function Zw(e,t){let{previewSkeleton:n,videoPreview:r}=t;n&&(e.showPreviewSkeleton?n.style.display=`block`:n.style.display=`none`),r&&(e.showVideoPreview?r.style.display=`block`:r.style.display=`none`)}function Qw(e,t,n){let{videoPreview:r}=t,{onVideoLoaded:a,onError:o,startAudioAnalysis:s,stopAudioAnalysis:c}=n;if(r){if(!e){r.srcObject=null,c();return}r.srcObject=e,r.onloadeddata=()=>{a()},r.play().catch(e=>o(i(e))),s(e)}}function $w(e){return{startCameraArea:e.querySelector(`#startCameraArea`),startCameraButton:e.querySelector(`#startCameraButton`),cameraIcon:e.querySelector(`#startCameraArea .vidtreo-camera-icon`),cameraText:e.querySelector(`#startCameraArea .vidtreo-camera-text`),cameraHint:e.querySelector(`#startCameraArea .vidtreo-camera-hint`),previewSkeleton:e.querySelector(`#previewSkeleton`),previewSkeletonText:e.querySelector(`#previewSkeleton .vidtreo-skeleton-text`),videoPreview:e.querySelector(`#videoPreview`),countdownOverlay:e.querySelector(`#countdownOverlay`),countdownNumber:e.querySelector(`#countdownNumber`),recordingTimerRow:e.querySelector(`#recordingTimerRow`),recordingTimer:e.querySelector(`#recordingTimer`),recIndicatorTop:e.querySelector(`#recIndicatorTop`),audioLevelBars:e.querySelector(`#audioLevelBars`)}}function eT(e,t,n,r,i,a){if(e.stream)return{shouldShow:!1,iconClassName:``,browserErrorContent:null,textContent:null,hintText:null,retryButtonLabel:null};let o=fS({errorCode:e.errorCode,hasAudioFailed:!1,error:null}),s=o.isCameraError||o.isAudioError,c=!(o.isBrowserUnsupported||s),l=o.isBrowserUnsupported||s?`ph-fill ph-warning-circle`:`ph-fill ph-camera`,u=null,d=null;o.isBrowserUnsupported&&(u=lw(n)),o.isAudioError&&(d=i),o.isCameraError&&(d=r),c&&(d=t.initializingCamera);let f=c?t.grantPermissions:null,p=s&&!o.isPermissionDenied?a:null;return{shouldShow:!0,iconClassName:l,browserErrorContent:u,textContent:d,hintText:f,retryButtonLabel:p}}function tT(e,t){let n=!1;return e&&(n=!0),{shouldShow:n,text:t.switchingDevice}}function nT(e,t,n){let r=!1;return e===`countdown`&&t!==null&&(r=!0),{shouldShow:r,countdown:t,text:n.recordingStartsIn}}function rT(e,t){return{shouldShow:e,text:t.rec}}function iT(e,t){return{shouldShow:e,timer:t}}function aT(e){return{shouldShow:e}}function oT(e,t){let{state:n,isVideoLoaded:r,isRecording:i,translations:a}=e;sT(eT(n,a,aw(n.errorCode,n.browserName,n.browserVersion,{browserUnsupported:a.browserUnsupported,browserUnsupportedDynamic:a.browserUnsupportedDynamic,browserUnsupportedSafari:a.browserUnsupportedSafari,browserUnsupportedFirefox:a.browserUnsupportedFirefox}),ow(n.errorCode??``,{cameraInUse:a.cameraInUse,cameraNotFound:a.cameraNotFound,cameraPermissionDenied:a.cameraPermissionDenied,cameraTimeout:a.cameraTimeout,failedToStartCamera:a.failedToStartCamera}),sw(n.errorCode??``,{audioInUse:a.audioInUse,audioNotFound:a.audioNotFound,audioPermissionDenied:a.audioPermissionDenied,audioTimeout:a.audioTimeout,failedToStartAudio:a.failedToStartAudio}),a.retryCamera),t,e.onRetryCamera),cT(tT(n.transitionMessage,a),t),Zw(Xw({stream:n.stream,transitionMessage:n.transitionMessage,isVideoLoaded:r}),{previewSkeleton:t.previewSkeleton,videoPreview:t.videoPreview}),lT(nT(n.recordingState,n.countdown,a),t),uT(rT(i,a),t),dT(iT(i,n.timer),t),fT(aT(i),t)}function sT(e,t,n){let{startCameraArea:r,startCameraButton:i,cameraIcon:a,cameraText:o,cameraHint:s}=t;if(r){if(!e.shouldShow){r.style.display=`none`;return}r.style.display=`block`,a&&(a.innerHTML=`<i class="${e.iconClassName}" style="font-size: 48px;"></i>`),o&&(e.browserErrorContent&&Yw(o,e.browserErrorContent),e.textContent&&(o.textContent=e.textContent)),s&&(e.hintText?(s.textContent=e.hintText,s.style.display=`block`):s.style.display=`none`),i&&(e.retryButtonLabel?(i.textContent=e.retryButtonLabel,i.hidden=!1,i.className=`vidtreo-error-retry`,i.onclick=e=>{e.preventDefault(),e.stopPropagation(),n&&n()}):(i.hidden=!0,i.onclick=null))}}function cT(e,t){let{previewSkeleton:n,previewSkeletonText:r}=t;n&&(e.shouldShow?n.style.display=`block`:n.style.display=`none`,r&&(r.textContent=e.text))}function lT(e,t){let{countdownOverlay:n,countdownNumber:r}=t;n&&(e.shouldShow?n.classList.add(`vidtreo-active`):n.classList.remove(`vidtreo-active`),r&&e.countdown!==null&&(r.textContent=e.countdown.toString()))}function uT(e,t){let{recIndicatorTop:n}=t;n&&(e.shouldShow?n.style.display=`block`:n.style.display=`none`)}function dT(e,t){let{recordingTimerRow:n,recordingTimer:r}=t;n&&(e.shouldShow?n.style.display=`flex`:n.style.display=`none`,r&&(r.textContent=e.timer))}function fT(e,t){let{audioLevelBars:n}=t;n&&(e.shouldShow?n.style.display=`flex`:n.style.display=`none`)}let pT=`inline-flex`;function mT(e){let{stream:t,buttonVisibility:n,currentSourceType:r,isMuted:i,isAudioReady:a,isProcessingRecording:o,isStopLocked:s,stopLockedTooltip:c,recordingState:l,buttonTranslations:u}=e,d=!!t,f=l===`idle`&&d&&!o,p=f&&!a,m=p?u.microphoneConnecting:``,h=!1;(n.showPauseButton||n.showResumeButton)&&(h=!0);let g=u.pause,_=`ph-fill ph-pause`;n.showResumeButton&&(g=u.resume,_=`ph-fill ph-play`);let v=u.mute,y=`ph-fill ph-microphone`;i&&(v=u.unmute,y=`ph-fill ph-microphone-slash`);let b=`ph-fill ph-monitor`;r!==bw&&(b=`ph-fill ph-camera`);let x=!1;return n.showDownloadButton&&(x=!0),{showRecordingControls:d,showSettingsButton:n.showSettingsButton,showRecordButton:f,isRecordDisabled:p,recordTooltip:m,showMuteButton:n.showMuteButton,showPauseButton:h,showStopButton:n.showStopButton,showSwitchSourceButton:n.showSwitchSourceButton,showDownloadButton:x,pauseTitle:g,pauseIconClassName:_,muteTitle:v,muteIconClassName:y,switchSourceIconClassName:b,isMuted:i,isStopLocked:s,stopLockedTooltip:c,settingsTitle:u.settings,switchSourceTitle:u.switchSource,downloadTitle:u.download,buttonTranslations:u}}function hT(e){return{recordingControls:e.querySelector(`#recordingControls`),settingsButton:e.querySelector(`#btnSettings`),recordButton:e.querySelector(`#btnRecord`),muteButton:e.querySelector(`#btnMute`),muteIcon:e.querySelector(`#iconMute`),pauseButton:e.querySelector(`#btnPause`),pauseIcon:e.querySelector(`#iconPause`),stopButton:e.querySelector(`#btnStop`),switchSourceButton:e.querySelector(`#btnSwitchSource`),switchSourceIcon:e.querySelector(`#iconSwitchSource`),downloadButton:e.querySelector(`#btnDownload`)}}function gT(e,t){let{recordingControls:n,settingsButton:r,recordButton:i,muteButton:a,muteIcon:o,pauseButton:s,pauseIcon:c,stopButton:l,switchSourceButton:u,switchSourceIcon:d,downloadButton:f}=t;vT(n,e),yT(r,e),bT(i,e),xT(a,e),ST(o,e),CT(s,e),wT(c,e),TT(l,e),ET(u,e),DT(d,e),OT(f,e)}function _T(e,t,n){e&&(t?e.style.display=n:e.style.display=`none`)}function vT(e,t){_T(e,t.showRecordingControls,`block`)}function yT(e,t){_T(e,t.showSettingsButton,pT),e&&(e.title=t.settingsTitle)}function bT(e,t){if(_T(e,t.showRecordButton,pT),!e)return;e.disabled=t.isRecordDisabled,e.classList.toggle(`vidtreo-record-button-disabled`,t.isRecordDisabled),e.title=t.recordTooltip,e.setAttribute(`aria-disabled`,String(t.isRecordDisabled));let n=e.querySelector(`i`),r=e.querySelector(`span`);t.isRecordDisabled?(n&&(n.className=`ph-fill ph-microphone vidtreo-mic-connecting-indicator`,n.style.fontSize=`18px`),r&&(r.textContent=t.recordTooltip)):(n&&(n.className=`ph-fill ph-circle`,n.style.fontSize=`24px`),r&&(r.textContent=t.buttonTranslations?.record??`Record`))}function xT(e,t){_T(e,t.showMuteButton,pT),e&&(e.title=t.muteTitle,e.classList.toggle(`vidtreo-muted`,t.isMuted))}function ST(e,t){e&&(e.className=t.muteIconClassName)}function CT(e,t){_T(e,t.showPauseButton,pT),e&&(e.title=t.pauseTitle)}function wT(e,t){e&&(e.className=t.pauseIconClassName)}function TT(e,t){if(_T(e,t.showStopButton,pT),e){if(e.classList.toggle(`vidtreo-stop-button-locked`,t.isStopLocked),e.setAttribute(`aria-disabled`,String(t.isStopLocked)),t.isStopLocked){e.title=t.stopLockedTooltip;return}e.title=``}}function ET(e,t){_T(e,t.showSwitchSourceButton,pT),e&&(e.title=t.switchSourceTitle)}function DT(e,t){e&&(e.className=t.switchSourceIconClassName)}function OT(e,t){_T(e,t.showDownloadButton,pT),e&&(e.title=t.downloadTitle)}function kT(e){let{stream:t,showSettings:n}=e,r=!1;return t&&n&&(r=!0),{shouldShow:r}}function AT(e,t,n){if(t){if(!e.shouldShow){t.classList.remove(`vidtreo-active`);return}t.classList.add(`vidtreo-active`),n()}}function jT(e){return e.toggleMute(),e.getIsMuted()}function MT(e){if(!e)return;let t=URL.createObjectURL(e),n=document.createElement(`a`);n.href=t,n.download=`recording-${Date.now()}.mp4`,document.body.appendChild(n),n.click(),document.body.removeChild(n),URL.revokeObjectURL(t)}let NT={en:{initializingCamera:`Initializing camera...`,grantPermissions:`Grant camera and microphone permissions when prompted`,browserUnsupported:`This browser is not supported`,browserUnsupportedDynamic:`{browser} ({version}) is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedSafari:`Safari is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedFirefox:`Firefox is not supported, please use <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,retryCamera:`Retry Camera`,cameraInUse:`Your camera is being used by another application. Close other apps using the camera (Zoom, Teams, Discord) and try again.`,cameraNotFound:`No camera detected. Connect a camera or check your device settings.`,cameraPermissionDenied:`Camera access was denied. Allow camera access in your browser settings and try again.`,cameraTimeout:`The camera took too long to start. Close other apps using the camera and try again.`,audioInUse:`Your microphone is being used by another application. Close other apps using the microphone (Zoom, Teams, Discord) and try again.`,audioNotFound:`No microphone detected. Connect a microphone or check your device settings.`,audioPermissionDenied:`Microphone access was denied. Allow microphone access in your browser settings and try again.`,audioTimeout:`The microphone took too long to start. Close other apps using the microphone and try again.`,failedToStartAudio:`Failed to start microphone`,audioErrorTitle:`Microphone unavailable`,audioErrorMessage:`We couldn't access your microphone. It may be in use by another app like Zoom, Teams, or Discord. Please close it and try again.`,audioErrorRetry:`Try again`,audioMissingTitle:`Recording has no audio`,audioMissingMessage:`We couldn't capture audio in this recording. Your microphone may have been disconnected or blocked by the browser. Check your microphone and record again.`,audioSilentTitle:`Recording is silent`,audioSilentMessage:`We didn't detect any sound during the recording. Make sure your microphone is working and not muted by your operating system, then record again.`,audioProcessingErrorTitle:`Audio processing error`,audioProcessingErrorMessage:`We couldn't process the audio in this recording. Please record again.`,audioMissingRetry:`Record again`,audioWarningNoSignalTitle:`No microphone signal`,audioWarningNoSignalMessage:`We're not detecting any sound. Check that your microphone is active.`,audioWarningLowSignalTitle:`Audio is very quiet`,audioWarningLowSignalMessage:`Move closer to the microphone or turn up the input volume.`,audioWarningSpeakingMutedTitle:`You're speaking while muted`,audioWarningSpeakingMutedMessage:`Unmute your microphone if you want your voice in the recording.`,audioWarningTrackEndedTitle:`Microphone disconnected`,audioWarningTrackEndedMessage:`The microphone was disconnected. Reconnect it before continuing.`,audioWarningNoChunksTitle:`No microphone input`,audioWarningNoChunksMessage:`We're not receiving audio from the microphone. Check browser permissions.`,audioWarningTrackMutedTitle:`Microphone muted by browser`,audioWarningTrackMutedMessage:`The browser muted your microphone. Check site settings.`,audioWarningDismiss:`Dismiss`,cameraErrorTitle:`Camera unavailable`,cameraErrorMessage:`We couldn't access your camera. It may be in use by another app or permissions may be denied.`,browserErrorTitle:`Browser not supported`,browserErrorMessage:`This browser is not supported. Please use Chrome for the best experience.`,recordingCodecUnsupportedTitle:`Recording format not supported`,recordingCodecUnsupportedMessage:`This device can't use the selected video format. Close other apps, update Chrome if possible, and record again.`,recordingServerTranscodeFallbackTitle:`Finalizing on device`,recordingServerTranscodeFallbackMessage:`We're finishing the video on this device before upload. Keep this tab open.`,recordingTrackEndedTitle:`Camera stopped during recording`,recordingTrackEndedMessage:`The camera feed ended before the recording finished. Check that the camera is still connected and record again.`,recordingFinalizeTimeoutTitle:`Recording took too long to finish`,recordingFinalizeTimeoutMessage:`This device may be low on memory or processing power. Close other apps or browser tabs, then record again.`,recordingStateRaceTitle:`Recording did not start correctly`,recordingStateRaceMessage:`The recording could not be finalized because it did not start cleanly. Please refresh the page and record again.`,recordingNoFramesTitle:`No video was captured`,recordingNoFramesMessage:`We couldn't receive video frames from the camera. Check your camera connection and record again.`,recordingUnsupportedTitle:`Recording not available`,recordingUnsupportedMessage:`This device or browser can't record video reliably right now. Check your connection, update Chrome if possible, or use another device.`,recordingPipelineRetry:`Record again`,genericErrorTitle:`Something went wrong`,genericErrorMessage:`An unexpected error occurred. Please try again.`,errorRetry:`Try again`,switchingDevice:`Switching device...`,recordingStartsIn:`Recording starts in...`,switchingSource:`Switching source...`,rec:`REC`,settings:`Settings`,record:`Record`,stop:`Stop`,pause:`Pause`,resume:`Resume`,mute:`Mute`,unmute:`Unmute`,switchSource:`Switch Source`,camera:`Camera`,microphone:`Microphone`,microphoneConnecting:`Connecting microphone...`,minimumRecordingTimeNotReached:`You have not met the minimum recording time yet`,processVideo:`Process Video`,processing:`Processing...`,finishing:`Finishing...`,uploading:`Uploading...`,switchingCamera:`Switching camera...`,switchingMicrophone:`Switching microphone...`,failedToStartCamera:`Failed to start camera`,userInAnotherTab:`User in another tab`,download:`Download`,nativeCameraSelectVideo:`Select Video from Gallery`,nativeCameraRecordVideo:`Record with Camera`,errorTitle:`Configuration Error`,errorGeneric:`An error occurred while loading the configuration`,mobileOpenCamera:`Open Camera`,mobileOpenCameraTitle:`Record a Video`,mobileOpenCameraDescription:`Tap the button below to start recording`,mobileCloseCamera:`Close`,mobilePermissionDenied:`Camera Access Denied`,mobilePermissionDeniedDescription:`Please allow camera access in your browser settings to record video.`,permissionFlowTitle:`Set Up Your Camera`,permissionFlowCameraTitle:`Camera & Microphone`,permissionFlowMicrophoneTitle:`Camera & Microphone`,permissionFlowCameraLabel:`We need access to your camera and microphone to start recording`,permissionFlowMicrophoneLabel:`We need access to your camera and microphone to start recording`,permissionFlowStatusPending:`Pending`,permissionFlowStatusGranted:`Ready`,permissionFlowStatusDenied:`Blocked`,permissionFlowStatusRequesting:`Click "Allow" in the browser popup above`,permissionFlowAllowCamera:`Allow Access`,permissionFlowAllowMicrophone:`Allow Access`,permissionFlowRetry:`Try Again`,permissionFlowRecoveryTitle:`Allow access to continue`,permissionFlowRecoveryInstructions:`Open your browser settings and allow camera and microphone access, then try again.`,permissionFlowConnecting:`Setting up...`},es:{initializingCamera:`Inicializando cámara...`,grantPermissions:`Otorga permisos de cámara y micrófono cuando se solicite`,browserUnsupported:`Este navegador no es compatible`,browserUnsupportedDynamic:`{browser} ({version}) no es compatible, por favor usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedSafari:`Safari no es compatible, usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,browserUnsupportedFirefox:`Firefox no es compatible, usa <a href="https://www.google.com/chrome/" target="_blank">Chrome</a>`,retryCamera:`Reintentar Cámara`,cameraInUse:`Tu cámara está siendo usada por otra aplicación. Cierra otras apps que usen la cámara (Zoom, Teams, Discord) e intenta de nuevo.`,cameraNotFound:`No se detectó ninguna cámara. Conecta una cámara o revisa la configuración de tu dispositivo.`,cameraPermissionDenied:`Se denegó el acceso a la cámara. Permite el acceso a la cámara en la configuración de tu navegador e intenta de nuevo.`,cameraTimeout:`La cámara tardó demasiado en iniciar. Cierra otras apps que usen la cámara e intenta de nuevo.`,audioInUse:`Tu micrófono está siendo usado por otra aplicación. Cierra otras apps que usen el micrófono (Zoom, Teams, Discord) e intenta de nuevo.`,audioNotFound:`No se detectó ningún micrófono. Conecta un micrófono o revisa la configuración de tu dispositivo.`,audioPermissionDenied:`Se denegó el acceso al micrófono. Permite el acceso al micrófono en la configuración de tu navegador e intenta de nuevo.`,audioTimeout:`El micrófono tardó demasiado en iniciar. Cierra otras apps que usen el micrófono e intenta de nuevo.`,failedToStartAudio:`Error al iniciar el micrófono`,audioErrorTitle:`Micrófono no disponible`,audioErrorMessage:`No pudimos acceder a tu micrófono. Puede estar en uso por otra app como Zoom, Teams o Discord. Ciérrala e inténtalo de nuevo.`,audioErrorRetry:`Intentar de nuevo`,audioMissingTitle:`La grabación no tiene audio`,audioMissingMessage:`No pudimos capturar audio en esta grabación. Es posible que el micrófono se haya desconectado o que el navegador lo haya bloqueado. Verifica tu micrófono y vuelve a grabar.`,audioSilentTitle:`La grabación quedó en silencio`,audioSilentMessage:`No detectamos sonido durante la grabación. Verifica que tu micrófono esté funcionando y no esté silenciado por el sistema, luego vuelve a grabar.`,audioProcessingErrorTitle:`Error al procesar el audio`,audioProcessingErrorMessage:`No pudimos procesar el audio de esta grabación. Por favor vuelve a grabar.`,audioMissingRetry:`Grabar de nuevo`,audioWarningNoSignalTitle:`Sin señal del micrófono`,audioWarningNoSignalMessage:`No estamos detectando sonido. Verifica que tu micrófono esté activo.`,audioWarningLowSignalTitle:`Audio muy bajo`,audioWarningLowSignalMessage:`Acércate al micrófono o sube el volumen de entrada.`,audioWarningSpeakingMutedTitle:`Estás hablando muteado`,audioWarningSpeakingMutedMessage:`Activa el micrófono si quieres que tu voz se escuche en la grabación.`,audioWarningTrackEndedTitle:`Micrófono desconectado`,audioWarningTrackEndedMessage:`Se desconectó el micrófono. Reconéctalo antes de continuar.`,audioWarningNoChunksTitle:`Sin entrada del micrófono`,audioWarningNoChunksMessage:`No estamos recibiendo audio del micrófono. Revisa los permisos del navegador.`,audioWarningTrackMutedTitle:`Micrófono silenciado por el navegador`,audioWarningTrackMutedMessage:`El navegador silenció tu micrófono. Revisa la configuración del sitio.`,audioWarningDismiss:`Cerrar`,cameraErrorTitle:`Cámara no disponible`,cameraErrorMessage:`No pudimos acceder a tu cámara. Puede estar en uso por otra app o los permisos pueden estar denegados.`,browserErrorTitle:`Navegador no compatible`,browserErrorMessage:`Este navegador no es compatible. Por favor usa Chrome para la mejor experiencia.`,recordingCodecUnsupportedTitle:`Formato de grabación no compatible`,recordingCodecUnsupportedMessage:`Este dispositivo no puede usar el formato de video seleccionado. Cierra otras apps, actualiza Chrome si es posible y vuelve a grabar.`,recordingServerTranscodeFallbackTitle:`Finalizando en el dispositivo`,recordingServerTranscodeFallbackMessage:`Estamos finalizando el video en este dispositivo antes de subirlo. Mantén esta pestaña abierta.`,recordingTrackEndedTitle:`La cámara se detuvo durante la grabación`,recordingTrackEndedMessage:`La señal de la cámara terminó antes de finalizar la grabación. Verifica que la cámara siga conectada y vuelve a grabar.`,recordingFinalizeTimeoutTitle:`La grabación tardó demasiado en finalizar`,recordingFinalizeTimeoutMessage:`Es posible que este dispositivo tenga poca memoria o potencia de procesamiento. Cierra otras apps o pestañas del navegador y vuelve a grabar.`,recordingStateRaceTitle:`La grabación no inició correctamente`,recordingStateRaceMessage:`No se pudo finalizar la grabación porque no inició correctamente. Actualiza la página y vuelve a grabar.`,recordingNoFramesTitle:`No se capturó video`,recordingNoFramesMessage:`No pudimos recibir fotogramas de video de la cámara. Verifica la conexión de la cámara y vuelve a grabar.`,recordingUnsupportedTitle:`Grabación no disponible`,recordingUnsupportedMessage:`Este dispositivo o navegador no puede grabar video de forma estable ahora. Revisa tu conexión, actualiza Chrome si es posible o usa otro dispositivo.`,recordingPipelineRetry:`Grabar de nuevo`,genericErrorTitle:`Algo salió mal`,genericErrorMessage:`Ocurrió un error inesperado. Por favor intenta de nuevo.`,errorRetry:`Intentar de nuevo`,switchingDevice:`Cambiando dispositivo...`,recordingStartsIn:`La grabación comienza en...`,switchingSource:`Cambiando fuente...`,rec:`GRAB`,settings:`Configuración`,record:`Grabar`,stop:`Detener`,pause:`Pausar`,resume:`Reanudar`,mute:`Silenciar`,unmute:`Activar sonido`,switchSource:`Cambiar Fuente`,camera:`Cámara`,microphone:`Micrófono`,microphoneConnecting:`Conectando micrófono...`,minimumRecordingTimeNotReached:`Aun no cumples el tiempo minimo de grabacion`,processVideo:`Procesar Video`,processing:`Procesando...`,finishing:`Finalizando...`,uploading:`Subiendo...`,switchingCamera:`Cambiando cámara...`,switchingMicrophone:`Cambiando micrófono...`,failedToStartCamera:`Error al iniciar la cámara`,userInAnotherTab:`Usuario en otra pestaña`,download:`Descargar`,nativeCameraSelectVideo:`Seleccionar Video de la Galería`,nativeCameraRecordVideo:`Grabar con Cámara`,errorTitle:`Error de Configuración`,errorGeneric:`Ocurrió un error al cargar la configuración`,mobileOpenCamera:`Abrir Cámara`,mobileOpenCameraTitle:`Grabar un Video`,mobileOpenCameraDescription:`Toca el botón para comenzar a grabar`,mobileCloseCamera:`Cerrar`,mobilePermissionDenied:`Acceso a Cámara Denegado`,mobilePermissionDeniedDescription:`Por favor permite el acceso a la cámara en la configuración de tu navegador para grabar video.`,permissionFlowTitle:`Configurar tu Cámara`,permissionFlowCameraTitle:`Cámara y Micrófono`,permissionFlowMicrophoneTitle:`Cámara y Micrófono`,permissionFlowCameraLabel:`Necesitamos acceso a tu cámara y micrófono para comenzar a grabar`,permissionFlowMicrophoneLabel:`Necesitamos acceso a tu cámara y micrófono para comenzar a grabar`,permissionFlowStatusPending:`Pendiente`,permissionFlowStatusGranted:`Listo`,permissionFlowStatusDenied:`Bloqueado`,permissionFlowStatusRequesting:`Haz clic en "Permitir" en el aviso del navegador`,permissionFlowAllowCamera:`Permitir Acceso`,permissionFlowAllowMicrophone:`Permitir Acceso`,permissionFlowRetry:`Reintentar`,permissionFlowRecoveryTitle:`Permite el acceso para continuar`,permissionFlowRecoveryInstructions:`Abre la configuración de tu navegador y permite el acceso a la cámara y micrófono, luego intenta de nuevo.`,permissionFlowConnecting:`Preparando...`}};var PT=class{constructor(e=`en`,t={}){this.lang=e,this.customTexts=t}setLang(e){this.lang=e}setCustomTexts(e){this.customTexts=e}t(e){return this.customTexts[e]?this.customTexts[e]:(NT[this.lang]||NT.en)[e]}getAll(){return{...NT[this.lang]||NT.en,...this.customTexts}}};let FT=new Map;function IT(e){e.style.position=`fixed`,e.style.top=`0`,e.style.left=`0`,e.style.width=`100vw`,e.style.height=`100vh`,e.style.height=`100dvh`,e.style.zIndex=`9999`,e.style.pointerEvents=`none`}function LT(e){e.style.pointerEvents=`auto`}function RT(e){e.style.pointerEvents=`none`}var zT=class{constructor(e=`vidtreo-portal-root`){this.portalContainer=null,this.contentWrapper=null,this.isRegistered=!1,this.containerId=e,this.instanceId=`portal-${Date.now()}-${Math.random().toString(36).slice(2,9)}`}get container(){return this.contentWrapper}get isActive(){return this.contentWrapper!==null&&this.portalContainer!==null}open(){let e=document.getElementById(this.containerId);return e||(e=document.createElement(`div`),e.id=this.containerId,IT(e),document.body.appendChild(e)),this.portalContainer=e,this.contentWrapper=document.createElement(`div`),this.contentWrapper.setAttribute(`data-portal-instance`,this.instanceId),this.contentWrapper.style.width=`100%`,this.contentWrapper.style.height=`100%`,this.portalContainer.appendChild(this.contentWrapper),this.registerInstance(),LT(e),this.contentWrapper}render(e){this.contentWrapper&&(this.contentWrapper.innerHTML=e)}querySelector(e){return this.contentWrapper?this.contentWrapper.querySelector(e):null}close(){this.contentWrapper&&=(this.contentWrapper.innerHTML=``,this.contentWrapper.remove(),null),this.unregisterInstance(),this.updatePortalContainerState()}destroy(){this.close(),this.portalContainer=null}registerInstance(){if(this.isRegistered)return;let e=FT.get(this.containerId);e||(e=new Set,FT.set(this.containerId,e)),e.add(this),this.isRegistered=!0}unregisterInstance(){if(!this.isRegistered)return;let e=FT.get(this.containerId);e&&(e.delete(this),e.size===0&&FT.delete(this.containerId)),this.isRegistered=!1}updatePortalContainerState(){if(!this.portalContainer)return;let e=FT.get(this.containerId);e&&e.size>0?LT(this.portalContainer):(RT(this.portalContainer),this.portalContainer.childNodes.length===0&&this.portalContainer.remove())}},BT=class{constructor(e){this.state={isModalOpen:!1,permissionRequested:!1,prevUploading:!1},this.escapeHandler=null,this.initCheckInterval=null,this.callbacks=e,this.portalManager=new zT}get canCloseModal(){let{recordingState:e,uploadProgress:t,transcodingProgress:n}=this.callbacks.getState();return!(e===`recording`||e===`countdown`||t!==null||n!==null)}get isModalOpen(){return this.state.isModalOpen}get portal(){return this.portalManager}openModal(){this.state.isModalOpen=!0,this.state.permissionRequested=!1,this.portalManager.open(),document.body.style.overflow=`hidden`,this.setupEscapeHandler(),this.callbacks.renderMobile(),this.requestCameraPreview()}closeModal(){this.canCloseModal&&(this.callbacks.stopPreview(),this.state.isModalOpen=!1,this.state.permissionRequested=!1,document.body.style.overflow=``,this.removeEscapeHandler(),this.portalManager.close(),this.callbacks.renderMobile())}checkUploadCompletion(e){let t=this.state.prevUploading,n=e!==null;this.state.prevUploading=n,t&&!n&&this.state.isModalOpen&&this.closeModal()}requestCameraPreview(){if(this.state.permissionRequested)return;let e=()=>{this.callbacks.isInitialized()?(this.state.permissionRequested=!0,this.callbacks.startPreview().catch(()=>{})):this.initCheckInterval=setTimeout(e,100)};e()}setupEscapeHandler(){this.escapeHandler=e=>{e.key===`Escape`&&this.canCloseModal&&this.closeModal()},document.addEventListener(`keydown`,this.escapeHandler)}removeEscapeHandler(){this.escapeHandler&&=(document.removeEventListener(`keydown`,this.escapeHandler),null)}destroy(){this.removeEscapeHandler(),this.portalManager.destroy(),document.body.style.overflow=``,this.initCheckInterval&&=(clearTimeout(this.initCheckInterval),null)}},VT=class{constructor(e,t){this.state={file:null,transcodingProgress:null,uploadProgress:null,isTranscoding:!1,isConfigLoading:!0,error:null,transcodedBlob:null},this.handler=null,this.config=e,this.callbacks=t;let n=e.backendUrl||`https://core.vidtreo.com`,r=null;e.apiKey&&!e.demo&&(r=un.getInstance({apiKey:e.apiKey,backendUrl:n}));let i=new ES;this.handler=new vy({apiKey:e.apiKey,backendUrl:n,maxRecordingTime:e.maxRecordingTime,maxFileSize:e.maxFileSize,userMetadata:e.userMetadata},r,i),e.apiKey&&!e.demo?(this.updateState({isConfigLoading:!0}),this.handler.preloadConfig().then(()=>this.updateState({isConfigLoading:!1})).catch(()=>{this.updateState({isConfigLoading:!1,error:`Failed to load settings`})})):this.updateState({isConfigLoading:!1})}updateState(e){this.state={...this.state,...e},this.callbacks.onStateChange()}getState(){return this.state}async handleFileSelect(e){if(this.updateState({error:null}),!this.handler)throw Error(`Handler not initialized`);try{let t=await this.handler.handleFileSelection(e);return this.updateState({file:t}),t}catch(e){let t=i(e),n=e instanceof Error?e:Error(t);throw this.updateState({error:t}),this.callbacks.onError?.(n),n}}async processAndUpload(e){let t=e||this.state.file;if(!(t&&this.handler))return;let n=this.config.demo;try{if(this.updateState({isTranscoding:!0,transcodingProgress:0,error:null}),n){let e=await gy(t.file,Xt,e=>{this.updateState({transcodingProgress:e}),this.callbacks.onTranscodingProgress?.(e)});this.updateState({transcodedBlob:e.blob,isTranscoding:!1,transcodingProgress:null})}else{let e=await this.handler.processAndUpload(e=>{this.updateState({transcodingProgress:e}),this.callbacks.onTranscodingProgress?.(e)},e=>{this.updateState({uploadProgress:e}),this.callbacks.onUploadProgress?.(e)});this.updateState({file:null,transcodingProgress:null,uploadProgress:null,isTranscoding:!1}),this.callbacks.onUploadComplete?.({recordingId:e.recordingId||``,uploadUrl:e.uploadUrl||``})}}catch(e){let t=i(e),r=e instanceof Error?e:Error(t);this.updateState({error:t,isTranscoding:!1,transcodingProgress:null,uploadProgress:null,transcodedBlob:null}),this.callbacks.onError?.(r),n||this.callbacks.onUploadError?.(r)}}downloadVideo(){if(!this.state.transcodedBlob)return;let e=URL.createObjectURL(this.state.transcodedBlob),t=document.createElement(`a`);t.href=e,t.download=`recording-${Date.now()}.mp4`,document.body.appendChild(t),t.click(),document.body.removeChild(t),URL.revokeObjectURL(e)}reset(){this.updateState({file:null,transcodingProgress:null,uploadProgress:null,error:null,isTranscoding:!1,transcodedBlob:null})}destroy(){this.handler&&this.handler.cancel(),this.handler=null}};function HT(e){return{preview:{initializingCamera:e.initializingCamera,grantPermissions:e.grantPermissions,browserUnsupported:e.browserUnsupported,browserUnsupportedDynamic:e.browserUnsupportedDynamic,browserUnsupportedSafari:e.browserUnsupportedSafari,browserUnsupportedFirefox:e.browserUnsupportedFirefox,retryCamera:e.retryCamera,cameraInUse:e.cameraInUse,cameraNotFound:e.cameraNotFound,cameraPermissionDenied:e.cameraPermissionDenied,cameraTimeout:e.cameraTimeout,failedToStartCamera:e.failedToStartCamera,audioInUse:e.audioInUse,audioNotFound:e.audioNotFound,audioPermissionDenied:e.audioPermissionDenied,audioTimeout:e.audioTimeout,failedToStartAudio:e.failedToStartAudio,switchingDevice:e.switchingDevice,recordingStartsIn:e.recordingStartsIn,rec:e.rec},buttons:{settings:e.settings,record:e.record,stop:e.stop,minimumRecordingTimeNotReached:e.minimumRecordingTimeNotReached,pause:e.pause,resume:e.resume,mute:e.mute,unmute:e.unmute,switchSource:e.switchSource,download:e.download,microphoneConnecting:e.microphoneConnecting},settings:{settings:e.settings,camera:e.camera,microphone:e.microphone}}}var UT=class{constructor(e){if(this.proxyEndpoint=e.proxyEndpoint,this.proxyEndpoint)throw Error(`Proxy mode not yet implemented`);this.service=new ES}uploadVideo(e,t){if(this.proxyEndpoint)throw Error(`Proxy mode not yet implemented`);return this.service.uploadVideo(e,t)}},WT=`:root{--vidtreo-background:0 0% 100%;--vidtreo-foreground:0 0% 3.9%;--vidtreo-card:0 0% 100%;--vidtreo-card-foreground:0 0% 3.9%;--vidtreo-primary:0 0% 9%;--vidtreo-primary-foreground:0 0% 98%;--vidtreo-secondary:0 0% 96.1%;--vidtreo-secondary-foreground:0 0% 9%;--vidtreo-muted:0 0% 96.1%;--vidtreo-muted-foreground:0 0% 45.1%;--vidtreo-accent:0 0% 96.1%;--vidtreo-accent-foreground:0 0% 9%;--vidtreo-destructive:0 84.2% 60.2%;--vidtreo-destructive-foreground:0 0% 98%;--vidtreo-border:0 0% 89.8%;--vidtreo-input:0 0% 89.8%;--vidtreo-ring:0 0% 3.9%;--vidtreo-radius:.5rem;--vidtreo-preview-bg:0 0% 0%;--vidtreo-z-modal-overlay:9999;--vidtreo-z-settings-panel:200;--vidtreo-z-error-overlay:100;--vidtreo-z-countdown-overlay:20;--vidtreo-z-progress-overlay:20;--vidtreo-z-controls:10}.vidtreo-preview-container{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));contain:layout style;will-change:auto;backface-visibility:hidden;isolation:isolate;border:none;border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:visible;transform:translateZ(0)}.vidtreo-preview-container:before{display:none}@media (width>=768px){.vidtreo-preview-container{aspect-ratio:16/9}}.vidtreo-camera-area{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;contain:layout style paint;backface-visibility:hidden;isolation:isolate;will-change:auto;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif;display:none;position:relative;transform:translateZ(0)}.vidtreo-source-transition-overlay{z-index:var(--vidtreo-z-error-overlay);backdrop-filter:blur(4px);contain:layout style paint;backface-visibility:hidden;will-change:opacity;background:#000000b3;border-radius:0;flex-direction:column;justify-content:center;align-items:center;transition:opacity .3s;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-source-transition-overlay.vidtreo-active{animation:.2s vidtreo-fadeIn;display:flex}@keyframes vidtreo-fadeIn{0%{opacity:0}to{opacity:1}}.vidtreo-transition-spinner{border:4px solid #ffffff4d;border-top-color:#667eea;border-radius:50%;width:40px;height:40px;margin-bottom:12px;animation:.8s linear infinite vidtreo-spin}@keyframes vidtreo-spin{to{transform:rotate(360deg)}}.vidtreo-transition-message{color:#fff;text-align:center;font-size:14px;font-weight:500}.vidtreo-camera-area.vidtreo-active{display:block}.vidtreo-preview-skeleton{z-index:var(--vidtreo-z-controls);contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border-radius:0;flex-direction:column;justify-content:center;align-items:center;gap:1rem;display:flex;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-skeleton-spinner{border:4px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:40px;height:40px;animation:.8s linear infinite vidtreo-spin}.vidtreo-skeleton-text{color:#fff;font-size:.875rem;font-weight:500}.vidtreo-video-preview{object-fit:cover;will-change:auto;backface-visibility:hidden;background:#000;border-radius:0;width:100%;height:100%;transition:opacity .3s,transform .3s;display:block;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-video-preview-skeleton{z-index:2;contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border-radius:0;width:100%;height:100%;position:absolute;inset:0;overflow:hidden;transform:translateZ(0)}.vidtreo-skeleton-shimmer{background:linear-gradient(90deg, hsl(var(--vidtreo-muted)) 0%, hsl(var(--vidtreo-muted) / .5) 50%, hsl(var(--vidtreo-muted)) 100%);background-size:200% 100%;animation:1.5s ease-in-out infinite vidtreo-shimmer;position:absolute;inset:0}@keyframes vidtreo-shimmer{0%{background-position:-200% 0}to{background-position:200% 0}}.vidtreo-video-preview-skeleton.vidtreo-hidden{opacity:0;pointer-events:none;transition:opacity .3s}.vidtreo-video-preview.vidtreo-screen-share{object-fit:cover}.vidtreo-video-preview.vidtreo-transitioning{opacity:.5;transform:scale(.98)}.vidtreo-countdown-overlay{z-index:var(--vidtreo-z-countdown-overlay);contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000000f2;border-radius:0;justify-content:center;align-items:center;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-countdown-overlay.vidtreo-active{display:flex}.vidtreo-countdown-content{flex-direction:column;align-items:center;gap:1rem;display:flex}.vidtreo-countdown-number{color:#fff;font-size:9rem;font-weight:700;animation:.3s vidtreo-zoomIn}@keyframes vidtreo-zoomIn{0%{opacity:0;transform:scale(.5)}to{opacity:1;transform:scale(1)}}.vidtreo-countdown-text{color:#fff;margin-top:1rem;font-size:.875rem;font-weight:500}.vidtreo-settings-panel{z-index:var(--vidtreo-z-settings-panel);contain:layout style paint;backface-visibility:hidden;background:#0006;border:none;border-radius:.75rem;flex-direction:column;width:90%;margin-left:-47%;padding:.625rem;display:none;overflow:hidden;transform:translateZ(0);position:absolute!important;bottom:4rem!important;left:50%!important}.vidtreo-settings-panel.vidtreo-active{display:flex}.vidtreo-settings-content{will-change:transform;backface-visibility:hidden;flex-direction:column;width:100%;display:flex;transform:translateZ(0)}.vidtreo-settings-content.vidtreo-slide-right{animation:.3s vidtreo-slideRight}.vidtreo-settings-content.vidtreo-slide-left{animation:.3s vidtreo-slideLeft}.vidtreo-settings-content.vidtreo-slide-none{will-change:auto;animation:none}@keyframes vidtreo-slideIn{0%{opacity:0;transform:translateY(1rem)}to{opacity:1;transform:translateY(0)}}@keyframes vidtreo-slideRight{0%{opacity:0;transform:translate(-100%)}to{opacity:1;transform:translate(0)}}@keyframes vidtreo-slideLeft{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}.vidtreo-settings-header{color:#fff;cursor:pointer;text-align:left;background:0 0;border:none;align-items:center;gap:.75rem;width:100%;margin-bottom:1rem;padding:0;display:flex}.vidtreo-settings-back-icon{color:#fff;flex-shrink:0}.vidtreo-settings-title{color:#fff;margin:0;font-size:.875rem;font-weight:600}.vidtreo-device-options-container{flex-direction:column;gap:.375rem;display:flex}.vidtreo-device-option-nav{cursor:pointer;color:#fff;background:0 0;border:none;border-radius:.5rem;align-items:center;gap:1rem;width:100%;padding:.5rem .75rem;transition:background-color .2s;display:flex}.vidtreo-device-option-nav:hover{background:#fff3}.vidtreo-device-option-nav-content{flex-shrink:0;align-items:center;gap:.75rem;display:flex}.vidtreo-device-option-nav-label{color:#fff;font-size:.875rem;font-weight:500}.vidtreo-device-option-nav-value{flex:1;justify-content:flex-end;align-items:center;gap:.5rem;min-width:0;display:flex}.vidtreo-device-option-nav-value-text{color:#fffc;text-overflow:ellipsis;white-space:nowrap;text-align:right;flex:1;font-size:.875rem;overflow:hidden}.vidtreo-device-option-nav-chevron{color:#fff;font-size:1.25rem;line-height:1}.vidtreo-device-list{flex-direction:column;gap:0;max-height:200px;display:flex;overflow-y:auto}.vidtreo-device-list::-webkit-scrollbar{width:4px}.vidtreo-device-list::-webkit-scrollbar-track{background:0 0}.vidtreo-device-list::-webkit-scrollbar-thumb{background:#fff3;border-radius:2px}.vidtreo-device-list::-webkit-scrollbar-thumb:hover{background:#ffffff4d}.vidtreo-device-option{cursor:pointer;color:#fff;text-align:left;background:0 0;border:none;border-radius:.5rem;align-items:center;gap:.75rem;width:100%;padding:.5rem .75rem;transition:background-color .2s;display:flex}.vidtreo-device-option:hover{background:#fff3}.vidtreo-device-option-check-container{flex-shrink:0;justify-content:center;align-items:center;width:20px;height:20px;display:flex}.vidtreo-device-checkmark-placeholder{flex-shrink:0;width:20px;height:20px}.vidtreo-device-checkmark{color:#fff;flex-shrink:0}.vidtreo-device-option-label{color:#fff;flex:1;font-size:.875rem}.vidtreo-device-empty{color:#fff9;text-align:center;padding:1rem 0;font-size:.875rem}.vidtreo-audio-level-bars{height:1rem;z-index:var(--vidtreo-z-controls);contain:layout style paint;will-change:auto;backface-visibility:hidden;align-items:center;gap:.125rem;transform:translateZ(0);display:flex!important;position:absolute!important;bottom:.75rem!important;right:.75rem!important}@media (width>=768px){.vidtreo-audio-level-bars{height:1.25rem}}.vidtreo-audio-level-bar{background:#ffffff80;border-radius:9999px;align-self:flex-end;width:.125rem;transition:all .1s}.vidtreo-recording-controls{z-index:var(--vidtreo-z-controls);contain:layout style;will-change:auto;backface-visibility:hidden;position:absolute!important;bottom:12px!important;left:50%!important;transform:translate(-50%)translateZ(0)!important}.vidtreo-recording-controls-row{will-change:auto;justify-content:center;align-items:center;gap:.5rem;display:flex;transform:translateZ(0)}.vidtreo-recording-timer-row{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.vidtreo-recording-timer-badge{z-index:var(--vidtreo-z-controls);contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;align-items:center;gap:.375rem;padding:.25rem .5rem;transform:translateZ(0);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;display:flex!important;position:absolute!important;top:.75rem!important;right:.75rem!important}.vidtreo-recording-dot-small{background:hsl(var(--vidtreo-destructive));border-radius:50%;width:.375rem;height:.375rem;animation:1.5s ease-in-out infinite vidtreo-pulse}.vidtreo-recording-timer-text{color:#fff;font-family:monospace;font-size:.75rem;font-weight:500}.vidtreo-control-buttons-row{will-change:auto;justify-content:center;align-items:center;gap:.375rem;height:auto;min-height:2rem;display:flex;transform:translateZ(0)}@media (width>=768px){.vidtreo-control-buttons-row{min-height:2.25rem}}.vidtreo-control-button{cursor:pointer;color:#fff;box-sizing:border-box;vertical-align:top;contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;width:2rem;height:2rem;min-height:2rem;max-height:2rem;margin:0;padding:.25rem;transition:background-color .2s;display:inline-flex;position:relative;transform:translateZ(0)}.vidtreo-control-button:before{content:"";z-index:0;border-radius:9999px;transition:background-color .2s;position:absolute;inset:.25rem}.vidtreo-control-button svg{color:inherit;z-index:1;flex-shrink:0;position:relative;width:22px!important;height:22px!important}@media (width>=768px){.vidtreo-control-button svg{width:24px!important;height:24px!important}.vidtreo-control-button{width:2.25rem;height:2.25rem;min-height:2.25rem;max-height:2.25rem}}.vidtreo-control-button:hover:not(:disabled):before{background:#fff3}.vidtreo-control-button:disabled{opacity:.5;cursor:not-allowed}.vidtreo-control-button.vidtreo-muted:before{background:#0000004d}.vidtreo-control-button.vidtreo-muted:hover:not(:disabled):before{background:#fff3}.vidtreo-record-button{background:hsl(var(--vidtreo-destructive));height:2rem;min-height:2rem;max-height:2rem;color:hsl(var(--vidtreo-destructive-foreground));box-sizing:border-box;vertical-align:top;cursor:pointer;border:none;border-radius:9999px;flex-shrink:0;justify-content:center;align-items:center;gap:.375rem;width:auto;margin:0;padding:0 .75rem;font-size:.75rem;font-weight:500;line-height:1;transition:background-color .2s,filter .2s;display:inline-flex}@media (width>=768px){.vidtreo-record-button{height:2.25rem;min-height:2.25rem;max-height:2.25rem;font-size:.875rem}}.vidtreo-record-button:hover:not(:disabled){filter:brightness(.85)}.vidtreo-record-button.vidtreo-stop-button-locked{opacity:.5;cursor:not-allowed;filter:none}.vidtreo-record-button.vidtreo-stop-button-locked:hover{filter:none}#startButton.vidtreo-record-button{animation:2s ease-in-out infinite vidtreo-record-glow-pulse}@keyframes vidtreo-record-glow-pulse{0%,to{box-shadow:0 0 8px 2px #ef444466,0 0 16px 4px #ef444433}50%{box-shadow:0 0 16px 4px #ef444499,0 0 32px 8px #ef44444d}}#startButton.vidtreo-record-button:hover:not(:disabled){animation-play-state:paused;box-shadow:0 0 20px 6px #ef4444b3,0 0 40px 10px #ef444459}.vidtreo-rec-indicator-top{contain:layout style paint;will-change:auto;backface-visibility:hidden;background:#0000004d;border:none;border-radius:9999px;align-items:center;gap:.375rem;padding:.25rem .5rem;transform:translateZ(0);box-shadow:0 1px 3px #0000001a,0 1px 2px -1px #0000001a;display:flex!important;position:absolute!important;top:.75rem!important;left:.75rem!important}.vidtreo-rec-indicator-top span{color:#fff;font-size:.75rem;font-weight:500}.vidtreo-start-camera-area{text-align:center;cursor:pointer;z-index:1;contain:layout style paint;backface-visibility:hidden;will-change:auto;background:#000;border:none;border-radius:0;flex-direction:column;justify-content:center;align-items:center;padding:40px;transition:all .3s;display:flex;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-start-camera-area:hover:not(.vidtreo-loading){background:#000}.vidtreo-start-camera-area.vidtreo-loading{cursor:wait;opacity:.7}.vidtreo-start-camera-area.vidtreo-loading .vidtreo-camera-text{color:#fff;opacity:.7}.vidtreo-camera-icon{color:#fff;justify-content:center;margin-bottom:16px;font-size:48px;display:flex}.vidtreo-camera-text{color:#fff;margin-bottom:8px;font-weight:600}.vidtreo-camera-text a{color:#3b82f6;text-decoration:underline}.vidtreo-camera-text a:hover{color:#2563eb}.vidtreo-camera-hint{color:#fff;opacity:.8;font-size:12px}@keyframes vidtreo-pulse{0%,to{opacity:1}50%{opacity:.3}}.vidtreo-progress{margin-top:20px;display:none}.vidtreo-progress.vidtreo-active{display:block}.vidtreo-progress-bar{background:#e0e0e0;border-radius:4px;width:100%;height:8px;margin-bottom:8px;overflow:hidden}.vidtreo-progress-fill{background:linear-gradient(90deg,#667eea 0%,#764ba2 100%);width:0%;height:100%;transition:width .3s}.vidtreo-progress-text{text-align:center;color:#fff;font-size:14px}.vidtreo-error{color:#fff;text-align:center;z-index:var(--vidtreo-z-error-overlay);word-wrap:break-word;background:#dc2626;border:none;border-radius:.5rem;max-width:90%;padding:1rem 1.25rem;font-size:.875rem;font-weight:500;display:none;position:absolute;top:.75rem;left:50%;transform:translate(-50%);box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a}.vidtreo-error.vidtreo-active{animation:.3s ease-out vidtreo-error-fade-in-slide-down;display:block}@keyframes vidtreo-error-fade-in-slide-down{0%{opacity:0;transform:translate(-50%)translateY(-1rem)}to{opacity:1;transform:translate(-50%)translateY(0)}}.vidtreo-upload-progress{margin-top:20px;display:none}.vidtreo-upload-progress.vidtreo-active{display:block}.vidtreo-preview-container .vidtreo-upload-progress{margin-top:0}.vidtreo-upload-status{border-radius:8px;margin-top:20px;padding:16px;display:none}.vidtreo-upload-status.vidtreo-active{display:block}.vidtreo-upload-status.vidtreo-success{color:#22543d;background:#f0f9ff;border:2px solid #48bb78}.vidtreo-upload-status.vidtreo-error{color:#c33;background:#fee;border:2px solid #fcc}.vidtreo-upload-status-text{font-size:14px;font-weight:500}.vidtreo-preview-error{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));contain:strict;will-change:auto;backface-visibility:hidden;isolation:isolate;border:none;border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden;transform:translateZ(0)}@media (width>=768px){.vidtreo-preview-error{aspect-ratio:16/9}}.vidtreo-error-content{text-align:center;color:#fff;flex-direction:column;justify-content:center;align-items:center;gap:1rem;max-width:400px;padding:2rem;display:flex}.vidtreo-error-icon{font-size:3rem;line-height:1}.vidtreo-error-title{font-size:1.25rem;font-weight:600;line-height:1.2}.vidtreo-error-message{opacity:.9;word-break:break-word;font-size:.875rem;line-height:1.5}.vidtreo-error-config{text-align:left;border-top:1px solid #fff3;width:100%;margin-top:1.5rem;padding-top:1.5rem}.vidtreo-error-config-title{color:#fff;margin-bottom:.75rem;font-size:.875rem;font-weight:600}.vidtreo-error-config-item{color:#ffffffd9;margin-bottom:.5rem;font-size:.8125rem;line-height:1.6}.vidtreo-error-config-item code{color:#fff;background:#ffffff26;border-radius:.25rem;padding:.125rem .375rem;font-family:monospace;font-size:.75rem}.vidtreo-error-retry{background:hsl(var(--vidtreo-destructive));color:hsl(var(--vidtreo-destructive-foreground));cursor:pointer;border:none;border-radius:.375rem;margin-top:.5rem;padding:.5rem 1rem;font-size:.875rem;font-weight:500;transition:filter .2s}.vidtreo-error-retry:hover:not(:disabled){filter:brightness(.85)}.vidtreo-error-retry:disabled{opacity:.5;cursor:not-allowed}.vidtreo-error-overlay{background:hsl(var(--vidtreo-preview-bg));z-index:var(--vidtreo-z-error-overlay);justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-native-camera-container{aspect-ratio:9/16;background:hsl(var(--vidtreo-preview-bg));border-radius:0;justify-content:center;align-items:center;width:100%;display:flex;position:relative;overflow:hidden}@media (width>=768px){.vidtreo-native-camera-container{aspect-ratio:16/9}}.vidtreo-native-camera-container:has(.vidtreo-native-camera-preview-container){background:0 0}.vidtreo-config-loading-indicator{z-index:var(--vidtreo-z-controls);position:absolute;top:8px;right:8px}.vidtreo-spinner-small{border:2px solid #ffffff4d;border-top-color:#fff;border-radius:50%;width:16px;height:16px;animation:.6s linear infinite spin}.vidtreo-native-camera-empty-state{flex-direction:column;justify-content:center;align-items:center;gap:16px;width:100%;height:100%;padding:24px;display:flex;position:relative}.vidtreo-native-camera-buttons{flex-direction:column;gap:12px;width:100%;max-width:300px;display:flex}.vidtreo-native-camera-process-button,.vidtreo-native-camera-download-button{z-index:30;position:absolute;bottom:24px;left:50%;transform:translate(-50%)}.vidtreo-native-camera-process-button .vidtreo-btn,.vidtreo-native-camera-download-button .vidtreo-btn{min-width:200px}.vidtreo-btn{border-radius:var(--vidtreo-radius);cursor:pointer;border:none;padding:12px 24px;font-size:1rem;font-weight:500;transition:all .2s}.vidtreo-btn:disabled{opacity:.5;cursor:not-allowed}.vidtreo-btn-primary{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground))}.vidtreo-btn-primary:hover:not(:disabled){filter:brightness(.9)}.vidtreo-btn-secondary{background:hsl(var(--vidtreo-secondary));color:hsl(var(--vidtreo-secondary-foreground));border:1px solid hsl(var(--vidtreo-border))}.vidtreo-btn-secondary:hover:not(:disabled){background:hsl(var(--vidtreo-accent))}.vidtreo-transcoding-progress{width:100%;max-width:400px;padding:16px}.vidtreo-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-fill{background:hsl(var(--vidtreo-primary));height:100%;transition:width .3s}.vidtreo-progress-text{text-align:center;color:hsl(var(--vidtreo-foreground));margin-top:8px;font-size:.875rem}.vidtreo-native-camera-preview-container{background:0 0;justify-content:center;align-items:center;width:100%;height:100%;display:flex;position:relative}.vidtreo-native-camera-preview-image{object-fit:contain;width:100%;height:100%;display:block}.vidtreo-progress-overlay{backdrop-filter:blur(4px);width:100%;height:100%;z-index:var(--vidtreo-z-progress-overlay);pointer-events:auto;background:#000000b3;flex-direction:column;justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-progress-overlay .vidtreo-transcoding-progress,.vidtreo-progress-overlay .vidtreo-upload-progress{pointer-events:auto;background:0 0;flex-direction:column;align-items:center;gap:12px;width:90%;max-width:400px;padding:0;display:flex;position:relative}.vidtreo-progress-overlay .vidtreo-progress-bar,.vidtreo-progress-overlay .vidtreo-upload-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-overlay .vidtreo-progress-fill{background:#fff;height:100%;transition:width .3s}.vidtreo-progress-overlay .vidtreo-progress-text,.vidtreo-progress-overlay .vidtreo-upload-progress-text{text-align:center;color:#fff;margin-top:0;font-size:.875rem;font-weight:500}.vidtreo-progress-overlay .vidtreo-upload-progress-bar{background:#fff3;border-radius:4px;width:100%;height:8px;overflow:hidden}.vidtreo-progress-overlay .vidtreo-upload-progress-fill{background:#fff;height:100%;transition:width .3s}.vidtreo-progress-overlay .vidtreo-progress-indeterminate{background:linear-gradient(90deg,#0000 0%,#fff 50%,#0000 100%) 0 0/200% 100%;width:100%;animation:1.5s ease-in-out infinite vidtreo-progress-indeterminate}@keyframes vidtreo-progress-indeterminate{0%{background-position:200% 0}to{background-position:-200% 0}}.vidtreo-mobile-web-recorder{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:100%;height:100%;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif}.vidtreo-camera-area button,.vidtreo-camera-area input,.vidtreo-camera-area select,.vidtreo-camera-area textarea,.vidtreo-mobile-web-recorder button,.vidtreo-mobile-web-recorder input,.vidtreo-mobile-web-recorder select,.vidtreo-mobile-web-recorder textarea,.vidtreo-permission-flow button{font-family:inherit}.vidtreo-mobile-landing-container{aspect-ratio:4/3;background:hsl(var(--vidtreo-preview-bg));border-radius:0;justify-content:center;align-items:center;width:100%;min-height:100%;max-height:100%;display:flex;position:relative;overflow:hidden}.vidtreo-mobile-landing-content{text-align:center;flex-direction:column;justify-content:center;align-items:center;gap:1.25rem;padding:2rem;display:flex}.vidtreo-mobile-landing-title{color:#fff;margin:0;font-size:1.25rem;font-weight:600;line-height:1.3}.vidtreo-mobile-landing-description{color:#ffffffbf;max-width:280px;margin:0;font-size:.875rem;line-height:1.5}.vidtreo-mobile-open-camera-btn{border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;margin-top:.5rem;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}@keyframes vidtreo-btn-glow-pulse{0%,to{box-shadow:0 0 8px 2px #ffffff4d,0 0 16px 4px #ffffff26}50%{box-shadow:0 0 16px 4px #ffffff80,0 0 32px 8px #ffffff40}}.vidtreo-mobile-open-camera-btn:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-mobile-open-camera-btn:active:not(:disabled){transform:scale(.98)}.vidtreo-mobile-open-camera-btn:disabled{box-shadow:none;animation:none}#vidtreo-portal-root{z-index:9999;pointer-events:none;width:100vw;height:100dvh;position:fixed;top:0;left:0}#vidtreo-portal-root>*{pointer-events:auto}.vidtreo-mobile-modal-overlay{--vidtreo-safe-top:0px;--vidtreo-safe-bottom:0px;--vidtreo-safe-left:0px;--vidtreo-safe-right:0px;width:100vw;height:100dvh;z-index:var(--vidtreo-z-modal-overlay);background:#000;flex-direction:column;height:-webkit-fill-available;animation:.3s ease-out vidtreo-modal-fade-in;display:flex;position:fixed;inset:0}@keyframes vidtreo-modal-fade-in{0%{opacity:0}to{opacity:1}}.vidtreo-mobile-modal-header{padding:.75rem;padding-top:calc(.75rem + var(--vidtreo-safe-top,0px));z-index:var(--vidtreo-z-error-overlay);pointer-events:none;justify-content:center;display:flex;position:absolute;top:0;left:0;right:0}.vidtreo-mobile-modal-close-btn{color:#ffffffe6;cursor:pointer;pointer-events:auto;backdrop-filter:blur(4px);background:#00000080;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.375rem;height:2rem;padding:0 .75rem;font-size:.75rem;font-weight:500;transition:all .2s;display:flex}.vidtreo-mobile-modal-close-btn:hover:not(:disabled){background:#000000b3}.vidtreo-mobile-modal-close-btn:disabled{opacity:.3;cursor:not-allowed}.vidtreo-mobile-modal-content{width:100%;height:100%;padding-top:var(--vidtreo-safe-top,0px);padding-bottom:var(--vidtreo-safe-bottom,0px);padding-left:var(--vidtreo-safe-left,0px);padding-right:var(--vidtreo-safe-right,0px);flex-direction:column;flex:1;display:flex;position:relative}.vidtreo-mobile-recorder-content{--vidtreo-safe-top:0px;--vidtreo-safe-bottom:0px;--vidtreo-safe-left:0px;--vidtreo-safe-right:0px;flex-direction:column;width:100%;height:100%;display:flex;position:relative}.vidtreo-mobile-recorder-content .vidtreo-preview-container{aspect-ratio:unset;flex:1;width:100%;height:100%}.vidtreo-mobile-recorder-content .vidtreo-video-preview{object-fit:cover}.vidtreo-mobile-preview{flex:1;aspect-ratio:unset!important;height:100%!important}.vidtreo-mobile-recorder-content .vidtreo-recording-controls{bottom:calc(24px + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-audio-level-bars{bottom:calc(12px + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-settings-panel{bottom:calc(7rem + var(--vidtreo-safe-bottom,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-rec-indicator-top,.vidtreo-mobile-recorder-content .vidtreo-recording-timer-badge{contain:layout style;height:2rem;padding:0 .75rem;top:calc(.75rem + var(--vidtreo-safe-top,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-recording-timer-text{white-space:nowrap;color:#fff;min-width:3rem;font-size:.875rem;display:inline-block}.vidtreo-mobile-recorder-content .vidtreo-error{top:calc(3.5rem + var(--vidtreo-safe-top,0px))!important}.vidtreo-mobile-recorder-content .vidtreo-control-buttons-row{gap:.75rem;min-height:4rem}.vidtreo-mobile-recorder-content .vidtreo-control-button{width:4rem;height:4rem;min-height:4rem;max-height:4rem}.vidtreo-mobile-recorder-content .vidtreo-control-button svg{width:1.5rem;height:1.5rem}.vidtreo-mobile-recorder-content .vidtreo-record-button{gap:.5rem;height:4rem;min-height:4rem;max-height:4rem;padding:0 1.5rem;font-size:1rem}.vidtreo-mobile-recorder-content .vidtreo-record-button svg{width:1.5rem;height:1.5rem}.vidtreo-permission-flow{z-index:var(--vidtreo-z-modal-overlay);contain:layout style paint;backface-visibility:hidden;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#000;flex-direction:column;justify-content:center;align-items:center;gap:1.25rem;font-family:-apple-system,BlinkMacSystemFont,SF Pro Display,SF Pro Text,system-ui,sans-serif;display:none;position:absolute;inset:0;transform:translateZ(0)}.vidtreo-permission-flow.vidtreo-active{animation:.4s cubic-bezier(.2,0,0,1) vidtreo-fadeIn;display:flex}.vidtreo-permission-flow-title{color:#fff;text-align:center;margin:0;font-size:1.25rem;font-weight:600;line-height:1.3}.vidtreo-permission-flow-subtitle{color:#ffffffbf;text-align:center;letter-spacing:-.005em;max-width:280px;margin:0;font-size:.875rem;line-height:1.5}.vidtreo-permission-flow-action{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground));cursor:pointer;letter-spacing:-.01em;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;margin-top:.5rem;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}.vidtreo-permission-flow-action:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-permission-flow-action:active:not(:disabled){transform:scale(.98)}.vidtreo-permission-flow-action:disabled{opacity:.5;cursor:not-allowed;box-shadow:none;animation:none}.vidtreo-permission-flow-action--requesting{opacity:.55;cursor:wait;box-shadow:none;animation:none}@keyframes vidtreo-spinner-rotate{to{transform:rotate(360deg)}}.vidtreo-permission-flow-spinner{border:2px solid #ffffff4d;border-top-color:hsl(var(--vidtreo-primary-foreground));border-radius:50%;flex-shrink:0;width:1.125rem;height:1.125rem;animation:.8s linear infinite vidtreo-spinner-rotate;display:inline-block}.vidtreo-permission-flow-spinner--large{border-width:3px;width:2.5rem;height:2.5rem}.vidtreo-permission-flow-recovery{text-align:center;flex-direction:column;align-items:center;gap:1.25rem;max-width:280px;display:flex}.vidtreo-permission-flow-recovery-text{color:#fff6;letter-spacing:-.005em;margin:0;font-size:.75rem;line-height:1.6}.vidtreo-permission-flow-retry{background:hsl(var(--vidtreo-primary));color:hsl(var(--vidtreo-primary-foreground));cursor:pointer;letter-spacing:-.01em;border:none;border-radius:9999px;justify-content:center;align-items:center;gap:.625rem;min-width:200px;padding:.875rem 1.75rem;font-size:1rem;font-weight:600;transition:all .2s;animation:2s ease-in-out infinite vidtreo-btn-glow-pulse;display:inline-flex}.vidtreo-permission-flow-retry:hover:not(:disabled){animation-play-state:paused;transform:scale(1.02);box-shadow:0 0 20px 6px #fff9,0 0 40px 10px #ffffff4d}.vidtreo-permission-flow-retry:active:not(:disabled){transform:scale(.98)}@keyframes vidtreo-fadeOut{0%{opacity:1}to{opacity:0}}.vidtreo-permission-flow.vidtreo-permission-flow--fading{pointer-events:none;animation:.6s ease-out forwards vidtreo-fadeOut}.vidtreo-recovery-guide{width:100%;max-width:280px;margin:0 auto;position:relative}.vidtreo-recovery-guide:after{content:"";z-index:20;pointer-events:none;background:linear-gradient(#0000 0%,#000 100%);height:60px;position:absolute;bottom:0;left:0;right:0}.vidtreo-recovery-guide:before{content:"";z-index:20;pointer-events:none;background:linear-gradient(90deg,#0000 0%,#000 100%);width:50px;position:absolute;top:0;bottom:0;right:0}.vidtreo-recovery-guide-browser{background:#161616;border-top:1px solid #ffffff1a;border-left:1px solid #ffffff1a;border-radius:10px 0 0;animation:.5s vidtreo-fadeIn;position:relative;overflow:hidden}.vidtreo-recovery-guide-titlebar{z-index:3;background:#1e1e1e;border-bottom:1px solid #ffffff0f;align-items:center;gap:8px;padding:8px 10px;display:flex;position:relative}.vidtreo-recovery-guide-dots{flex-shrink:0;gap:5px;display:flex}.vidtreo-recovery-guide-dot{border-radius:50%;width:8px;height:8px}.vidtreo-recovery-guide-dot--close{background:#ff5f57}.vidtreo-recovery-guide-dot--min{background:#febc2e}.vidtreo-recovery-guide-dot--max{background:#28c840}.vidtreo-recovery-guide-addressbar{background:#2a2a2a;border-radius:5px;flex:1;align-items:center;gap:5px;min-width:0;padding:4px 8px;display:flex}.vidtreo-recovery-guide-lock{color:#ffffff80;flex-shrink:0;align-items:center;animation:7s ease-in-out infinite vidtreo-lock-pulse;display:flex}.vidtreo-recovery-guide-lock-svg{display:block}.vidtreo-recovery-guide-url{color:#ffffff80;white-space:nowrap;text-overflow:ellipsis;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.65rem;overflow:hidden}.vidtreo-recovery-guide-cursor{z-index:40;pointer-events:none;filter:drop-shadow(0 2px 4px #0009);animation:7s ease-in-out infinite vidtreo-cursor-move;position:absolute;top:12px;left:62px}.vidtreo-recovery-guide-cursor-svg{display:block}.vidtreo-recovery-guide-browser-bg{background:#161616;height:110px}.vidtreo-recovery-guide-popover{z-index:30;background:#252525;border:1px solid #ffffff1a;border-radius:10px;padding:8px 12px 12px;animation:7s ease-in-out infinite vidtreo-popover-reveal;position:absolute;top:34px;left:12px;right:12px;box-shadow:0 8px 30px #0009,0 2px 8px #0006,0 0 0 1px #ffffff0f}.vidtreo-recovery-guide-popover-header{color:#ffffffd9;white-space:nowrap;text-overflow:ellipsis;text-align:left;padding-bottom:6px;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.65rem;font-weight:600;overflow:hidden}.vidtreo-recovery-guide-popover-divider{background:#ffffff14;height:1px}.vidtreo-recovery-guide-perm-row{justify-content:space-between;align-items:center;padding:7px 0;display:flex}.vidtreo-recovery-guide-perm-row+.vidtreo-recovery-guide-perm-row{border-top:1px solid #ffffff0f}.vidtreo-recovery-guide-perm-group{align-items:center;gap:8px;display:flex}.vidtreo-recovery-guide-perm-icon{flex-shrink:0;width:14px;height:14px;position:relative}.vidtreo-recovery-guide-icon-off,.vidtreo-recovery-guide-icon-on{justify-content:center;align-items:center;display:flex;position:absolute;inset:0}.vidtreo-recovery-guide-icon-off{color:#fff6;animation:7s ease-in-out infinite vidtreo-icon-hide}.vidtreo-recovery-guide-icon-on{color:#34d399;animation:7s ease-in-out infinite vidtreo-icon-show}.vidtreo-recovery-guide-perm-label{color:#ffffffd9;font-family:-apple-system,BlinkMacSystemFont,system-ui,sans-serif;font-size:.7rem}.vidtreo-recovery-guide-switch{flex-shrink:0;width:32px;height:18px;position:relative}.vidtreo-recovery-guide-switch-track{background:#ffffff26;border-radius:9px;animation:7s ease-in-out infinite vidtreo-track-on;position:absolute;inset:0}.vidtreo-recovery-guide-switch-knob{background:#fff;border-radius:50%;width:14px;height:14px;animation:7s ease-in-out infinite vidtreo-knob-slide;position:absolute;top:2px;left:2px;box-shadow:0 1px 3px #0000004d}.vidtreo-recovery-guide-switch--delayed{animation-delay:.85s}@keyframes vidtreo-cursor-move{0%{opacity:0;transform:translate(100px,12px)}8%{opacity:1}22%{transform:translate(0)}26%{transform:translate(0)scale(.75)}30%{opacity:1;transform:translate(0)scale(1)}33%{opacity:1;transform:translate(0)}38%{opacity:1;transform:translate(65px,63px)}42%{transform:translate(65px,63px)scale(.75)}45%{opacity:1;transform:translate(65px,63px)scale(1)}48%{opacity:1;transform:translate(65px,97px)}52%{transform:translate(65px,97px)scale(.75)}55%{opacity:1;transform:translate(65px,97px)scale(1)}60%{opacity:0}to{opacity:0;transform:translate(100px,12px)}}@keyframes vidtreo-popover-reveal{0%,27%{opacity:0;transform:translateY(-6px)scale(.96)}33%,82%{opacity:1;transform:translateY(0)scale(1)}88%,to{opacity:0;transform:translateY(-6px)scale(.96)}}@keyframes vidtreo-track-on{0%,34%{background:#ffffff26}40%,92%{background:#34d399}96%,to{background:#ffffff26}}@keyframes vidtreo-knob-slide{0%,34%{transform:translate(0)}40%,92%{transform:translate(14px)}96%,to{transform:translate(0)}}@keyframes vidtreo-icon-hide{0%,34%{opacity:1}40%,92%{opacity:0}96%,to{opacity:1}}@keyframes vidtreo-icon-show{0%,34%{opacity:0}40%,92%{opacity:1}96%,to{opacity:0}}@keyframes vidtreo-lock-pulse{0%,15%{color:#ffffff80}22%,30%{color:#34d399}38%,to{color:#ffffff80}}.vidtreo-record-button.vidtreo-record-button-disabled,.vidtreo-record-button-disabled{opacity:.6;cursor:not-allowed;pointer-events:none;filter:grayscale(.3)}.vidtreo-mic-connecting-indicator{justify-content:center;align-items:center;animation:1.4s ease-in-out infinite vidtreo-mic-pulse;display:inline-flex}@keyframes vidtreo-mic-pulse{0%,to{opacity:.4}50%{opacity:1}}.vidtreo-audio-error-overlay{z-index:var(--vidtreo-z-error-overlay);text-align:center;background:#000000d9;flex-direction:column;justify-content:center;align-items:center;padding:2rem 1.5rem;animation:.3s ease-out vidtreo-audio-overlay-fade-in;display:flex;position:absolute;inset:0}@supports (backdrop-filter:blur(8px)){.vidtreo-audio-error-overlay{-webkit-backdrop-filter:blur(8px);background:#000000bf}}@keyframes vidtreo-audio-overlay-fade-in{0%{opacity:0}to{opacity:1}}.vidtreo-audio-error-icon{background:#ef444426;border-radius:50%;justify-content:center;align-items:center;width:56px;height:56px;margin-bottom:1rem;display:flex}.vidtreo-audio-error-icon svg{color:#ef4444;width:28px;height:28px}.vidtreo-audio-error-title{color:#fff;margin:0 0 .5rem;font-size:1.125rem;font-weight:600;line-height:1.4}.vidtreo-audio-error-message{color:#ffffffb3;max-width:320px;margin:0 0 1.5rem;font-size:.875rem;line-height:1.6}.vidtreo-audio-error-retry{color:#111;cursor:pointer;background:#fff;border:none;border-radius:9999px;align-items:center;gap:.5rem;padding:.75rem 1.5rem;font-family:inherit;font-size:.875rem;font-weight:600;transition:background .15s,transform .1s;display:inline-flex}.vidtreo-audio-error-retry:hover{background:#f0f0f0}.vidtreo-audio-error-retry:active{transform:scale(.97)}.vidtreo-audio-error-retry svg{width:16px;height:16px}.vidtreo-audio-warning-toast{z-index:var(--vidtreo-z-error-overlay);color:#ffffffeb;pointer-events:auto;background:#1111118c;border:1px solid #ffffff14;border-radius:12px;align-items:flex-start;gap:.625rem;max-width:min(420px,100% - 2rem);padding:.625rem .875rem;font-family:inherit;animation:.2s ease-out vidtreo-audio-warning-toast-fade-in;display:flex;position:absolute;top:1rem;left:50%;transform:translate(-50%);box-shadow:0 4px 16px #00000040}@supports (backdrop-filter:blur(10px)){.vidtreo-audio-warning-toast{-webkit-backdrop-filter:blur(10px)saturate(140%);background:#11111173}}.vidtreo-audio-warning-toast--critical{border-color:#ef444473}.vidtreo-audio-warning-toast--critical .vidtreo-audio-warning-toast__icon{color:#ef4444}.vidtreo-audio-warning-toast--soft{border-color:#f59e0b73}.vidtreo-audio-warning-toast--soft .vidtreo-audio-warning-toast__icon{color:#f59e0b}.vidtreo-audio-warning-toast__icon{flex:none;justify-content:center;align-items:center;width:20px;height:20px;margin-top:1px;display:inline-flex}.vidtreo-audio-warning-toast__content{flex-direction:column;flex:auto;gap:2px;min-width:0;display:flex}.vidtreo-audio-warning-toast__title{color:#fff;font-size:.8125rem;font-weight:600;line-height:1.3}.vidtreo-audio-warning-toast__message{color:#ffffffb8;font-size:.75rem;font-weight:400;line-height:1.4}.vidtreo-audio-warning-toast__dismiss{color:#ffffffa6;cursor:pointer;background:0 0;border:none;border-radius:6px;flex:none;justify-content:center;align-items:center;width:22px;height:22px;margin-left:.25rem;padding:0;font-family:inherit;transition:background .15s,color .15s;display:inline-flex}.vidtreo-audio-warning-toast__dismiss:hover{color:#fffffff2;background:#ffffff1a}@keyframes vidtreo-audio-warning-toast-fade-in{0%{opacity:0;transform:translate(-50%,-8px)}to{opacity:1;transform:translate(-50%)}}`;function GT(e){return`
|
|
12830
|
+
<style>${WT}</style>
|
|
12831
12831
|
<div class="vidtreo-mobile-landing-container">
|
|
12832
12832
|
<div class="vidtreo-mobile-landing-content">
|
|
12833
12833
|
<h2 class="vidtreo-mobile-landing-title">
|
|
@@ -12845,8 +12845,8 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
12845
12845
|
</button>
|
|
12846
12846
|
</div>
|
|
12847
12847
|
</div>
|
|
12848
|
-
`}function
|
|
12849
|
-
<style>${
|
|
12848
|
+
`}function KT(e,t,n){return`
|
|
12849
|
+
<style>${WT}</style>
|
|
12850
12850
|
<div class="vidtreo-mobile-modal-overlay" role="dialog" aria-modal="true" aria-label="${e.t(`mobileOpenCameraTitle`)}">
|
|
12851
12851
|
<div class="vidtreo-mobile-modal-header">
|
|
12852
12852
|
<!-- Left: Recording Indicator -->
|
|
@@ -12881,8 +12881,8 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
12881
12881
|
${n}
|
|
12882
12882
|
</div>
|
|
12883
12883
|
</div>
|
|
12884
|
-
`}function
|
|
12885
|
-
<style>${
|
|
12884
|
+
`}function qT(e){return`
|
|
12885
|
+
<style>${WT}</style>
|
|
12886
12886
|
<div class="vidtreo-native-camera-container">
|
|
12887
12887
|
<input
|
|
12888
12888
|
type="file"
|
|
@@ -12941,7 +12941,7 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
12941
12941
|
</div>
|
|
12942
12942
|
|
|
12943
12943
|
</div>
|
|
12944
|
-
`}function
|
|
12944
|
+
`}function JT(e){return`
|
|
12945
12945
|
<div class="vidtreo-mobile-recorder-content">
|
|
12946
12946
|
<div class="vidtreo-preview-container vidtreo-mobile-preview">
|
|
12947
12947
|
|
|
@@ -13100,8 +13100,8 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
13100
13100
|
|
|
13101
13101
|
</div>
|
|
13102
13102
|
</div>
|
|
13103
|
-
`}let
|
|
13104
|
-
<style>${
|
|
13103
|
+
`}let YT=()=>`
|
|
13104
|
+
<style>${WT}</style>
|
|
13105
13105
|
<div class="vidtreo-camera-area vidtreo-active" id="cameraArea">
|
|
13106
13106
|
<!-- Error Boundary / Preview Container -->
|
|
13107
13107
|
<div class="vidtreo-preview-container">
|
|
@@ -13381,9 +13381,9 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
13381
13381
|
</div>
|
|
13382
13382
|
|
|
13383
13383
|
</div>
|
|
13384
|
-
`;function WT(e,t,n,r){return{showSettingsButton:!e&&r.enableDeviceChange!==!1,showMuteButton:e&&r.enableMute!==!1,showPauseButton:e&&r.enablePause!==!1&&t===`recording`&&!n,showResumeButton:e&&r.enablePause!==!1&&n,showStopButton:e,showSwitchSourceButton:e&&r.enableSourceSwitching!==!1}}let GT=/^https?:\/\//i;function KT(e){return e?GT.test(e)?e:`https://${e}`:`https://core.vidtreo.com`}function qT(e,t,n){let r=e.getAttribute(t);return r===null?n:r!==`false`}function JT(e,t){let n=e.getAttribute(t);if(!n)return;let r=Number.parseInt(n,10);if(!Number.isNaN(r))return r}function YT(e,t){let n=e.getAttribute(t);if(n!==null)return n}function XT(e){return{apiKey:e.getAttribute(`api-key`)||``,backendUrl:KT(e.getAttribute(`backend-url`)),demo:qT(e,`demo`,!1),enableSourceSwitching:qT(e,`enable-source-switching`,!0),enableMute:qT(e,`enable-mute`,!0),enablePause:qT(e,`enable-pause`,!0),enableDeviceChange:qT(e,`enable-device-change`,!0),enableTabVisibilityOverlay:qT(e,`enable-tab-visibility-overlay`,!1)}}function ZT(e){let t={},n=JT(e,`countdown-duration`);n!==void 0&&(t.countdownDuration=n);let r=JT(e,`max-recording-time`);r!==void 0&&(t.maxRecordingTime=r);let i=JT(e,`min-time-record`);return i!==void 0&&(t.minTimeRecord=i),t}function QT(e,t,n){return e?t!==void 0&&t.trim().length>0?t:n!==void 0&&n.trim().length>0?n:void 0:t}function $T(e,t){let n=e.getAttribute(`user-metadata`);if(n)try{let e=JSON.parse(n);return{...t,...e}}catch(e){throw Error(`Invalid user-metadata JSON: ${i(e)}`)}}function eE(e,t,n){let r=XT(e),i=ZT(e),a=YT(e,`tab-visibility-overlay-text`),o=QT(r.enableTabVisibilityOverlay===!0,a,n),s=$T(e,t),c={...r,...i};return o!==void 0&&(c={...c,tabVisibilityOverlayText:o}),s!==void 0&&(c={...c,userMetadata:s}),c}function tE(){if(typeof document>`u`||document.querySelector(`script[src*="@phosphor-icons/web"]`))return;let e=document.createElement(`script`);e.src=`https://unpkg.com/@phosphor-icons/web`,e.async=!0,document.head.appendChild(e)}let nE=1e3,rE=/^\d+$/;function iE(e){return rE.test(e)}function aE(e){let t=e.trim();if(t.length===0)return 0;let n=t.split(`:`);if(n.length!==2&&n.length!==3)return 0;for(let e of n)if(!iE(e))return 0;if(n.length===2){let e=Number.parseInt(n[0],10),t=Number.parseInt(n[1],10);return(e*60+t)*nE}let r=Number.parseInt(n[0],10),i=Number.parseInt(n[1],10),a=Number.parseInt(n[2],10);return((r*60+i)*60+a)*nE}function oE(e,t,n){return!n||e==null||Number.isFinite(e)===!1||e<=0?!1:aE(t)<e}function sE(){let e=Error(`Minimum recording time has not been reached yet`);return e.code=`recording.minimum-time-not-reached`,e}let cE={requiresAudio:!1,requiresWatermark:!1},lE={step:`idle`,permissions:{camera:`unknown`,microphone:`unknown`},denialType:`none`,isSecureContext:!0,isComplete:!1,canRetry:!0,shouldProbeUnknown:!0},uE={recordingState:`idle`,stream:null,isVideoLoaded:!1,isMuted:!1,isPaused:!1,isAudioReady:!1,hasAudioFailed:!1,showSettings:!1,error:null,errorCode:null,canRetry:!1,browserName:null,browserVersion:null,countdown:null,timer:`00:00`,uploadProgress:null,transcodingProgress:null,transitionMessage:null,recordedBlob:null,audioWarning:null,devices:{cameras:[],microphones:[],selectedCamera:null,selectedMic:null},configError:null};var dE=class extends HTMLElement{constructor(...e){super(...e),this.controller=null,this.audioStatusUnsub=null,this.uploadService=null,this.state={...uE},this.config={},this.isMounted=!1,this.connectionGeneration=0,this.initialized=!1,this.isInitializing=!1,this.isProcessingBlob=!1,this.audioBarsContainer=null,this.previewContentElements=null,this.recordingControlsElements=null,this.videoPreviewElements=null,this.permissionFlowElements=null,this.overlayElements=null,this.settingsPanelElement=null,this.audioWarningAutoDismissId=null,this.audioContext=null,this.analyser=null,this.animationFrameId=null,this.mobileManager=null,this.nativeCameraManager=null,this.permissionFlowOrchestrator=null,this.permissionFlowSnapshot=lE,this.overlayPhase=`hidden`,this.overlayFadeTimeoutId=null,this.isStartingPreview=!1,this.i18n=new OT,this.settingsView=`main`,this.slideDirection=`none`}static{this.observedAttributes=[`api-key`,`backend-url`,`countdown-duration`,`min-time-record`,`max-recording-time`,`user-metadata`,`enable-source-switching`,`enable-mute`,`enable-pause`,`enable-device-change`,`enable-tab-visibility-overlay`,`tab-visibility-overlay-text`,`demo`,`mobile-mode`,`lang`]}get isDemo(){return this.hasAttribute(`demo`)&&this.getAttribute(`demo`)!==`false`}get lang(){return this.getAttribute(`lang`)||`en`}async connectedCallback(){this.connectionGeneration+=1;let e=this.connectionGeneration;this.i18n.setLang(this.lang);let t=this.shouldProbeWebRecorderSupport();if(await this.probeWebRecorderSupport(t,e),this.shouldAbortConnection(e))return;let n=this.getEffectiveMobileMode();this.initializeRecorderForMobileMode(n)}disconnectedCallback(){this.connectionGeneration+=1,this.isMounted=!1,this.mobileManager?.destroy(),this.nativeCameraManager?.destroy(),this.cleanup()}async probeWebRecorderSupport(e,t){this.isMounted||(this.isMounted=!0,e&&await ub(cE).then(e=>{if(!this.shouldAbortConnection(t)){if(!e.isSupported){this.updateUnsupportedBrowserState();return}this.updateState({errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}}).catch(()=>{this.shouldAbortConnection(t)||this.updateUnsupportedBrowserState()}))}updateUnsupportedBrowserState(){let e=aw();this.updateState({errorCode:_w,canRetry:!1,browserName:e.browserName,browserVersion:e.browserVersion})}clearBrowserUnsupportedState(){this.updateState({errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}applyBrowserUnsupportedStateFromError(e){if(!(e&&typeof e==`object`&&`code`in e))return;let t=e;if(t.code?.startsWith(`camera.`)||t.code?.startsWith(`audio.`)||t.code?.startsWith(`recording.`)){this.updateState({errorCode:t.code,canRetry:!0,browserName:null,browserVersion:null});return}if(t.code!==_w)return;let n=aw(),r=n.browserName;t.browserName&&t.browserName.length>0&&(r=t.browserName);let i=n.browserVersion;t.browserVersion&&t.browserVersion.length>0&&(i=t.browserVersion),this.updateState({errorCode:_w,canRetry:!1,browserName:r,browserVersion:i})}resolveBrowserErrorState(){let e=this.state.errorCode,t=this.state.browserName,n=this.state.browserVersion;if(e===_w&&t===null){let e=aw();t=e.browserName,n===null&&(n=e.browserVersion)}return{errorCode:e,browserName:t,browserVersion:n}}shouldAbortConnection(e){return!this.isConnected||e!==this.connectionGeneration}initializeRecorderForMobileMode(e){if(!iw()){this.innerHTML=UT(),this.init();return}if(e===`native`){this.initNativeCamera();return}if(e===`overlay`){this.mobileManager=new PT({getState:()=>({recordingState:this.state.recordingState,uploadProgress:this.state.uploadProgress}),isInitialized:()=>this.initialized,startPreview:()=>this.startPreview(),stopPreview:()=>this.stopPreview(),renderMobile:()=>this.renderMobile()}),this.renderMobile(),this.init();return}this.innerHTML=UT(),this.init()}getRequestedMobileMode(){let e=this.getAttribute(`mobile-mode`);return e===null?null:e===`embed`?`embed`:e===`native`?`native`:`overlay`}shouldProbeWebRecorderSupport(){return this.getRequestedMobileMode()!==`native`}getEffectiveMobileMode(){let e=this.getRequestedMobileMode();return e===null?`overlay`:e}initNativeCamera(){this.config=this.resolveRecorderComponentConfig({}),this.nativeCameraManager=new FT({apiKey:this.config.apiKey,backendUrl:this.config.backendUrl,maxRecordingTime:this.config.maxRecordingTime,userMetadata:this.config.userMetadata,demo:this.isDemo},{onStateChange:()=>this.renderNativeCamera(),onUploadComplete:e=>{this.dispatchEvent(new CustomEvent(`recording-complete`,{detail:e,bubbles:!0,composed:!0}))},onError:e=>{this.dispatchEvent(new CustomEvent(`error`,{detail:{error:e.message},bubbles:!0,composed:!0}))}}),this.renderNativeCamera(),tE()}renderNativeCamera(){if(!this.nativeCameraManager)return;let e=this.nativeCameraManager.getState();this.innerHTML=VT(this.i18n);let t=e.file!==null,n=!(t||e.isTranscoding)&&e.uploadProgress===null&&!e.transcodedBlob;this.setElementDisplay(`#nativeCameraEmptyState`,n),this.setElementDisplay(`#nativePreviewContainer`,t||!!e.transcodedBlob),this.setElementDisplay(`#nativeProgressOverlay`,e.isTranscoding||e.uploadProgress!==null),this.updateNativeCameraProgress(e),this.updateNativeCameraPreview(e,t);let r=this.isDemo&&!!e.transcodedBlob&&!e.isTranscoding&&e.uploadProgress===null;this.setElementDisplay(`#nativeActions`,r),this.updateNativeCameraError(e),this.setupNativeCameraListeners()}setElementDisplay(e,t){let n=this.querySelector(e);n instanceof HTMLElement&&(t&&(n.style.display=``),t||(n.style.display=`none`))}updateNativeCameraProgress(e){let t=this.querySelector(`#nativeUploadProgressFill`),n=this.querySelector(`#nativeUploadProgressText`),r=null;t instanceof HTMLElement&&(r=t);let i=e.uploadProgress!==null,a=e.isTranscoding&&!i,o=0;e.uploadProgress!==null&&(o=e.uploadProgress);let s=0;e.transcodingProgress!==null&&(s=e.transcodingProgress),i&&this.setElementDisplay(`#nativeUploadProgress`,!0),r&&i&&(r.style.width=`${o}%`),n&&i&&(n.textContent=`${this.i18n.t(`uploading`)} ${Math.round(o)}%`),a&&this.setElementDisplay(`#nativeUploadProgress`,!0),r&&a&&(r.style.width=`${s}%`),n&&a&&(n.textContent=`${this.i18n.t(`finishing`)} ${Math.round(s)}%`)}updateNativeCameraPreview(e,t){let n=this.querySelector(`#nativeVideoPreview`);if(n){if(t&&e.file){n.src=URL.createObjectURL(e.file.file);return}e.transcodedBlob&&(n.src=URL.createObjectURL(e.transcodedBlob))}}updateNativeCameraError(e){let t=this.querySelector(`.vidtreo-native-camera-container`);if(!t)return;let n=t.querySelector(`.vidtreo-audio-error-overlay`);if(!e.error){n&&n.remove();return}let r=`generic|${e.error}`;if(n&&n.dataset.signature===r)return;n&&n.remove();let i=this.getDeviceErrorIcon(`generic`),a=this.i18n.t(`genericErrorTitle`),o=this.i18n.t(`errorRetry`);n=document.createElement(`div`),n.className=`vidtreo-audio-error-overlay`,n.dataset.variant=`generic`,n.dataset.signature=r;let s=document.createElement(`div`);s.className=`vidtreo-audio-error-icon`,s.innerHTML=i,n.appendChild(s);let c=document.createElement(`h3`);c.className=`vidtreo-audio-error-title`,c.textContent=a,n.appendChild(c);let l=document.createElement(`p`);l.className=`vidtreo-audio-error-message`,l.textContent=e.error,n.appendChild(l);let u=document.createElement(`button`);u.className=`vidtreo-audio-error-retry`,u.type=`button`,u.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256">
|
|
13384
|
+
`;function XT(e,t,n,r){return{showSettingsButton:!e&&r.enableDeviceChange!==!1,showMuteButton:e&&r.enableMute!==!1,showPauseButton:e&&r.enablePause!==!1&&t===`recording`&&!n,showResumeButton:e&&r.enablePause!==!1&&n,showStopButton:e,showSwitchSourceButton:e&&r.enableSourceSwitching!==!1}}let ZT=/^https?:\/\//i;function QT(e){return e?ZT.test(e)?e:`https://${e}`:`https://core.vidtreo.com`}function $T(e,t,n){let r=e.getAttribute(t);return r===null?n:r!==`false`}function eE(e,t){let n=e.getAttribute(t);if(!n)return;let r=Number.parseInt(n,10);if(!Number.isNaN(r))return r}function tE(e,t){let n=e.getAttribute(t);if(n!==null)return n}function nE(e){return{apiKey:e.getAttribute(`api-key`)||``,backendUrl:QT(e.getAttribute(`backend-url`)),demo:$T(e,`demo`,!1),enableSourceSwitching:$T(e,`enable-source-switching`,!0),enableMute:$T(e,`enable-mute`,!0),enablePause:$T(e,`enable-pause`,!0),enableDeviceChange:$T(e,`enable-device-change`,!0),enableTabVisibilityOverlay:$T(e,`enable-tab-visibility-overlay`,!1)}}function rE(e){let t={},n=eE(e,`countdown-duration`);n!==void 0&&(t.countdownDuration=n);let r=eE(e,`max-recording-time`);r!==void 0&&(t.maxRecordingTime=r);let i=eE(e,`min-time-record`);return i!==void 0&&(t.minTimeRecord=i),t}function iE(e,t,n){return e?t!==void 0&&t.trim().length>0?t:n!==void 0&&n.trim().length>0?n:void 0:t}function aE(e,t){let n=e.getAttribute(`user-metadata`);if(n)try{let e=JSON.parse(n);return{...t,...e}}catch(e){throw Error(`Invalid user-metadata JSON: ${i(e)}`)}}function oE(e,t,n){let r=nE(e),i=rE(e),a=tE(e,`tab-visibility-overlay-text`),o=iE(r.enableTabVisibilityOverlay===!0,a,n),s=aE(e,t),c={...r,...i};return o!==void 0&&(c={...c,tabVisibilityOverlayText:o}),s!==void 0&&(c={...c,userMetadata:s}),c}function sE(){if(typeof document>`u`||document.querySelector(`script[src*="@phosphor-icons/web"]`))return;let e=document.createElement(`script`);e.src=`https://unpkg.com/@phosphor-icons/web`,e.async=!0,document.head.appendChild(e)}let cE=1e3,lE=/^\d+$/;function uE(e){return lE.test(e)}function dE(e){let t=e.trim();if(t.length===0)return 0;let n=t.split(`:`);if(n.length!==2&&n.length!==3)return 0;for(let e of n)if(!uE(e))return 0;if(n.length===2){let e=Number.parseInt(n[0],10),t=Number.parseInt(n[1],10);return(e*60+t)*cE}let r=Number.parseInt(n[0],10),i=Number.parseInt(n[1],10),a=Number.parseInt(n[2],10);return((r*60+i)*60+a)*cE}function fE(e,t,n){return!n||e==null||Number.isFinite(e)===!1||e<=0?!1:dE(t)<e}function pE(){let e=Error(`Minimum recording time has not been reached yet`);return e.code=`recording.minimum-time-not-reached`,e}let mE={requiresAudio:!1,requiresWatermark:!1},hE={step:`idle`,permissions:{camera:`unknown`,microphone:`unknown`},denialType:`none`,isSecureContext:!0,isComplete:!1,canRetry:!0,shouldProbeUnknown:!0},gE={recordingState:`idle`,stream:null,isVideoLoaded:!1,isMuted:!1,isPaused:!1,isAudioReady:!1,hasAudioFailed:!1,showSettings:!1,error:null,errorCode:null,canRetry:!1,browserName:null,browserVersion:null,countdown:null,timer:`00:00`,uploadProgress:null,transcodingProgress:null,transitionMessage:null,recordedBlob:null,audioWarning:null,devices:{cameras:[],microphones:[],selectedCamera:null,selectedMic:null},configError:null};var _E=class extends HTMLElement{constructor(...e){super(...e),this.controller=null,this.audioStatusUnsub=null,this.uploadService=null,this.state={...gE},this.config={},this.isMounted=!1,this.connectionGeneration=0,this.initialized=!1,this.isInitializing=!1,this.isProcessingBlob=!1,this.audioBarsContainer=null,this.previewContentElements=null,this.recordingControlsElements=null,this.videoPreviewElements=null,this.permissionFlowElements=null,this.overlayElements=null,this.settingsPanelElement=null,this.audioWarningAutoDismissId=null,this.audioContext=null,this.analyser=null,this.animationFrameId=null,this.mobileManager=null,this.nativeCameraManager=null,this.permissionFlowOrchestrator=null,this.permissionFlowSnapshot=hE,this.overlayPhase=`hidden`,this.overlayFadeTimeoutId=null,this.isStartingPreview=!1,this.i18n=new PT,this.settingsView=`main`,this.slideDirection=`none`}static{this.observedAttributes=[`api-key`,`backend-url`,`countdown-duration`,`min-time-record`,`max-recording-time`,`user-metadata`,`enable-source-switching`,`enable-mute`,`enable-pause`,`enable-device-change`,`enable-tab-visibility-overlay`,`tab-visibility-overlay-text`,`demo`,`mobile-mode`,`lang`]}get isDemo(){return this.hasAttribute(`demo`)&&this.getAttribute(`demo`)!==`false`}get lang(){return this.getAttribute(`lang`)||`en`}async connectedCallback(){this.connectionGeneration+=1;let e=this.connectionGeneration;this.i18n.setLang(this.lang);let t=this.shouldProbeWebRecorderSupport();if(await this.probeWebRecorderSupport(t,e),this.shouldAbortConnection(e))return;let n=this.getEffectiveMobileMode();this.initializeRecorderForMobileMode(n)}disconnectedCallback(){this.connectionGeneration+=1,this.isMounted=!1,this.mobileManager?.destroy(),this.nativeCameraManager?.destroy(),this.cleanup()}async probeWebRecorderSupport(e,t){this.isMounted||(this.isMounted=!0,e&&await gb(mE).then(e=>{if(!this.shouldAbortConnection(t)){if(!e.isSupported){this.updateUnsupportedBrowserState();return}this.updateState({errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}}).catch(()=>{this.shouldAbortConnection(t)||this.updateUnsupportedBrowserState()}))}updateUnsupportedBrowserState(){let e=dw();this.updateState({errorCode:Cw,canRetry:!1,browserName:e.browserName,browserVersion:e.browserVersion})}clearBrowserUnsupportedState(){this.updateState({errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}applyBrowserUnsupportedStateFromError(e){if(!(e&&typeof e==`object`&&`code`in e))return;let t=e;if(t.code?.startsWith(`camera.`)||t.code?.startsWith(`audio.`)||t.code?.startsWith(`recording.`)){this.updateState({errorCode:t.code,canRetry:!0,browserName:null,browserVersion:null});return}if(t.code!==Cw)return;let n=dw(),r=n.browserName;t.browserName&&t.browserName.length>0&&(r=t.browserName);let i=n.browserVersion;t.browserVersion&&t.browserVersion.length>0&&(i=t.browserVersion),this.updateState({errorCode:Cw,canRetry:!1,browserName:r,browserVersion:i})}resolveBrowserErrorState(){let e=this.state.errorCode,t=this.state.browserName,n=this.state.browserVersion;if(e===Cw&&t===null){let e=dw();t=e.browserName,n===null&&(n=e.browserVersion)}return{errorCode:e,browserName:t,browserVersion:n}}shouldAbortConnection(e){return!this.isConnected||e!==this.connectionGeneration}initializeRecorderForMobileMode(e){if(!uw()){this.innerHTML=YT(),this.init();return}if(e===`native`){this.initNativeCamera();return}if(e===`overlay`){this.mobileManager=new BT({getState:()=>({recordingState:this.state.recordingState,uploadProgress:this.state.uploadProgress,transcodingProgress:this.state.transcodingProgress}),isInitialized:()=>this.initialized,startPreview:()=>this.startPreview(),stopPreview:()=>this.stopPreview(),renderMobile:()=>this.renderMobile()}),this.renderMobile(),this.init();return}this.innerHTML=YT(),this.init()}getRequestedMobileMode(){let e=this.getAttribute(`mobile-mode`);return e===null?null:e===`embed`?`embed`:e===`native`?`native`:`overlay`}shouldProbeWebRecorderSupport(){return this.getRequestedMobileMode()!==`native`}getEffectiveMobileMode(){let e=this.getRequestedMobileMode();return e===null?`overlay`:e}initNativeCamera(){this.config=this.resolveRecorderComponentConfig({}),this.nativeCameraManager=new VT({apiKey:this.config.apiKey,backendUrl:this.config.backendUrl,maxRecordingTime:this.config.maxRecordingTime,userMetadata:this.config.userMetadata,demo:this.isDemo},{onStateChange:()=>this.renderNativeCamera(),onUploadComplete:e=>{this.dispatchEvent(new CustomEvent(`recording-complete`,{detail:e,bubbles:!0,composed:!0}))},onError:e=>{this.dispatchEvent(new CustomEvent(`error`,{detail:{error:e.message},bubbles:!0,composed:!0}))}}),this.renderNativeCamera(),sE()}renderNativeCamera(){if(!this.nativeCameraManager)return;let e=this.nativeCameraManager.getState();this.innerHTML=qT(this.i18n);let t=e.file!==null,n=!(t||e.isTranscoding)&&e.uploadProgress===null&&!e.transcodedBlob;this.setElementDisplay(`#nativeCameraEmptyState`,n),this.setElementDisplay(`#nativePreviewContainer`,t||!!e.transcodedBlob),this.setElementDisplay(`#nativeProgressOverlay`,e.isTranscoding||e.uploadProgress!==null),this.updateNativeCameraProgress(e),this.updateNativeCameraPreview(e,t);let r=this.isDemo&&!!e.transcodedBlob&&!e.isTranscoding&&e.uploadProgress===null;this.setElementDisplay(`#nativeActions`,r),this.updateNativeCameraError(e),this.setupNativeCameraListeners()}setElementDisplay(e,t){let n=this.querySelector(e);n instanceof HTMLElement&&(t&&(n.style.display=``),t||(n.style.display=`none`))}updateNativeCameraProgress(e){let t=this.querySelector(`#nativeUploadProgressFill`),n=this.querySelector(`#nativeUploadProgressText`),r=null;t instanceof HTMLElement&&(r=t);let i=e.uploadProgress!==null,a=e.isTranscoding&&!i,o=0;e.uploadProgress!==null&&(o=e.uploadProgress);let s=0;e.transcodingProgress!==null&&(s=e.transcodingProgress),i&&this.setElementDisplay(`#nativeUploadProgress`,!0),r&&i&&(r.style.width=`${o}%`),n&&i&&(n.textContent=`${this.i18n.t(`uploading`)} ${Math.round(o)}%`),a&&this.setElementDisplay(`#nativeUploadProgress`,!0),r&&a&&(r.style.width=`${s}%`),n&&a&&(n.textContent=`${this.i18n.t(`finishing`)} ${Math.round(s)}%`)}updateNativeCameraPreview(e,t){let n=this.querySelector(`#nativeVideoPreview`);if(n){if(t&&e.file){n.src=URL.createObjectURL(e.file.file);return}e.transcodedBlob&&(n.src=URL.createObjectURL(e.transcodedBlob))}}updateNativeCameraError(e){let t=this.querySelector(`.vidtreo-native-camera-container`);if(!t)return;let n=t.querySelector(`.vidtreo-audio-error-overlay`);if(!e.error){n&&n.remove();return}let r=`generic|${e.error}`;if(n&&n.dataset.signature===r)return;n&&n.remove();let i=this.getDeviceErrorIcon(`generic`),a=this.i18n.t(`genericErrorTitle`),o=this.i18n.t(`errorRetry`);n=document.createElement(`div`),n.className=`vidtreo-audio-error-overlay`,n.dataset.variant=`generic`,n.dataset.signature=r;let s=document.createElement(`div`);s.className=`vidtreo-audio-error-icon`,s.innerHTML=i,n.appendChild(s);let c=document.createElement(`h3`);c.className=`vidtreo-audio-error-title`,c.textContent=a,n.appendChild(c);let l=document.createElement(`p`);l.className=`vidtreo-audio-error-message`,l.textContent=e.error,n.appendChild(l);let u=document.createElement(`button`);u.className=`vidtreo-audio-error-retry`,u.type=`button`,u.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256">
|
|
13385
13385
|
<path d="M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16h28.69L187.8,71.11A88,88,0,0,0,40.36,98.72,8,8,0,1,1,24.64,93.28,104,104,0,0,1,198.13,60.87L224,86.75V56a8,8,0,0,1,16,0ZM215.36,157.28a88,88,0,0,1-147.44,27.61L43.31,160H72a8,8,0,0,0,0-16H24a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V169.25l25.87,25.88A104,104,0,0,0,231.36,162.72a8,8,0,0,1-16,5.44Z"/>
|
|
13386
|
-
</svg>`;let d=document.createElement(`span`);d.textContent=o,u.appendChild(d),u.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),this.nativeCameraManager?.reset()}),n.appendChild(u),t.appendChild(n)}setupNativeCameraListeners(){let e=this.querySelector(`#btnSelectVideo`),t=this.querySelector(`#btnRecordVideo`),n=this.querySelector(`#btnNativeRetake`),r=this.querySelector(`#nativeCameraInput`);e?.addEventListener(`click`,()=>{r&&(r.accept=`video/*`,r.removeAttribute(`capture`),r.click())}),t?.addEventListener(`click`,()=>{r&&(r.accept=`video/*`,r.setAttribute(`capture`,`environment`),r.click())}),n?.addEventListener(`click`,()=>{this.nativeCameraManager?.reset()}),r?.addEventListener(`change`,async e=>{let t=e.target,n=t.files?.[0];if(n&&this.nativeCameraManager)try{let e=await this.nativeCameraManager.handleFileSelect(n);await this.nativeCameraManager.processAndUpload(e)}catch{}t.value=``})}attributeChangedCallback(e,t,n){if(t!==n){if(e===`min-time-record`){let e=eE(this,{});this.config={...this.config,minTimeRecord:e.minTimeRecord},this.render();return}[`api-key`,`backend-url`,`demo`].includes(e)&&(this.initialized&&this.cleanup(),this.init())}}async init(){if(!this.isInitializing){this.isInitializing=!0;try{this.initialized&&this.cleanup(),this.config=this.resolveRecorderComponentConfig({});let e=this.config.apiKey||``,t=this.config.backendUrl||``;if(!(this.isDemo||e)){this.updateState({configError:Error(`apiKey is required. Provide it as an attribute or ensure demo mode is enabled.`)}),this.isInitializing=!1;return}this.isDemo||(this.uploadService=new LT({apiKey:e,backendUrl:t})),this.controller=new KC(ow(this));let n={...this.config};if(await this.controller.initialize(n),await this.initializePermissionFlow(),this.initialized=!0,this.updateState({configError:null}),this.clearBrowserUnsupportedState(),this.mobileManager){tE();return}this.cacheUiElements(),this.renderPermissionFlow(),this.setupEventListeners(),tE(),this.getCanStartStreamFromPermissionFlow(this.permissionFlowSnapshot)&&setTimeout(()=>this.startPreview(),100)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}finally{this.isInitializing=!1}}}renderConfigError(){let e=this.state,t=!!e.configError;if(this.toggleDisplay(`#configErrorOverlay`,t),t&&e.configError){let t=e.configError.message.includes(`apiKey is required`);this.toggleDisplay(`#configErrorMessageDefault`,!t),this.toggleDisplay(`#configErrorDetails`,t),t||this.setText(`#configErrorMessageDefault`,e.configError.message)}}resolveRecorderComponentConfig(e){return eE(this,e,this.i18n.t(`userInAnotherTab`))}cleanup(){this.audioStatusUnsub&&=(this.audioStatusUnsub(),null),this.cleanupPermissionFlow(),this.controller&&=(this.controller.cleanup(),null),this.stopAudioAnalysis(),this.initialized=!1,this.state={...uE},this.permissionFlowElements=null}updateState(e){let t={...this.state,...e};e.stream!==void 0&&(t={...t,isVideoLoaded:!1}),e.recordingState!==void 0&&t.showSettings&&t.recordingState===gw&&(t={...t,showSettings:!1}),this.state=t,this.mobileManager&&e.uploadProgress!==void 0&&this.mobileManager.checkUploadCompletion(this.state.uploadProgress),this.render(),e.stream!==void 0&&this.handleStreamUpdate(this.state.stream),this.state.devices.cameras.length===0&&this.state.stream&&this.updateDevices()}async updateDevices(){if(!this.controller)return;let e=this.controller.getDeviceManager(),t=await e.getAvailableDevices();this.updateState({devices:{cameras:t.videoinput,microphones:t.audioinput,selectedCamera:e.getSelectedCameraDeviceId(),selectedMic:e.getSelectedMicDeviceId()}})}handleStreamUpdate(e){this.videoPreviewElements||this.cacheUiElements(),this.videoPreviewElements&&Kw(e,this.videoPreviewElements,{onVideoLoaded:()=>{this.updateState({isVideoLoaded:!0}),this.updateOverlayPhase()},onError:e=>{this.updateState({error:e})},startAudioAnalysis:e=>this.startAudioAnalysis(e),stopAudioAnalysis:()=>this.stopAudioAnalysis()})}startAudioAnalysis(e){if(this.stopAudioAnalysis(),e.getAudioTracks().length!==0)try{this.audioContext=new AudioContext;let t=this.audioContext.createMediaStreamSource(e);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=64,t.connect(this.analyser);let n=new Uint8Array(this.analyser.frequencyBinCount),r=()=>{if(!this.analyser)return;this.analyser.getByteFrequencyData(n);let e=0;for(let t of n)e+=t;let t=e/n.length,i=Math.min(1,t/128);this.renderAudioBars(i),this.animationFrameId=requestAnimationFrame(r)};r()}catch(e){this.updateState({error:i(e)})}}stopAudioAnalysis(){this.animationFrameId&&=(cancelAnimationFrame(this.animationFrameId),null),this.audioContext&&=(this.audioContext.close(),null)}renderAudioBars(e){if(!this.audioBarsContainer)return;let t=vw,n=``;if(!this.state.isMuted)for(let r of t){let t=Math.max(4,e*24*r);n+=`<div class="vidtreo-audio-level-bar" style="height: ${t}px;"></div>`}this.audioBarsContainer.innerHTML=n}render(){if(this.mobileManager&&!this.mobileManager.isModalOpen||(this.previewContentElements&&this.recordingControlsElements&&this.overlayElements&&this.videoPreviewElements||this.cacheUiElements(),!(this.previewContentElements&&this.recordingControlsElements&&this.overlayElements&&this.videoPreviewElements)))return;let e=this.i18n.getAll(),t=IT(e),n=this.state.recordingState===gw||this.state.isPaused,r=oE(this.config.minTimeRecord,this.state.timer,n),a={enableDeviceChange:this.config.enableDeviceChange,enableMute:this.config.enableMute,enablePause:this.config.enablePause,enableSourceSwitching:this.config.enableSourceSwitching},o=WT(n,this.state.recordingState,this.state.isPaused,a),s=!1;this.isDemo&&!n&&this.state.recordingState===`idle`&&this.state.recordedBlob!==null&&(s=!0);let c={...o,showDownloadButton:s},l=mw;this.controller&&(l=this.controller.getCurrentSourceType());let{errorCode:u,browserName:d,browserVersion:f}=this.resolveBrowserErrorState();eT({state:{stream:this.state.stream,transitionMessage:this.state.transitionMessage,recordingState:this.state.recordingState,countdown:this.state.countdown,timer:this.state.timer,isMuted:this.state.isMuted,isPaused:this.state.isPaused,errorCode:u,browserName:d,browserVersion:f},isVideoLoaded:this.state.isVideoLoaded,isRecording:n,controller:this.controller,audioLevel:0,buttonVisibility:c,currentSourceType:l,onStartRecording:()=>this.handleRecord(),onStopRecording:()=>this.handleStop(),onSwitchSource:()=>this.handleSwitch(),onToggleSettings:()=>this.updateState({showSettings:!this.state.showSettings}),onToggleMute:()=>this.handleMute(),onPause:()=>this.handlePauseToggle(),onResume:()=>this.handlePauseToggle(),onRetryCamera:()=>{this.startPreview().catch(e=>{let t;t=e instanceof Error?e:Error(i(e)),this.dispatchEvent(new CustomEvent(`error`,{detail:{error:t.message},bubbles:!0,composed:!0}))})},onLoadedChange:()=>this.updateState({isVideoLoaded:!0}),onDownload:()=>this.handleDownload(),translations:t.preview,buttonTranslations:t.buttons},this.previewContentElements),uT(cT({stream:this.state.stream,buttonVisibility:c,currentSourceType:l,isMuted:this.state.isMuted,isAudioReady:this.state.isAudioReady,onDownload:()=>this.handleDownload(),onPause:()=>this.handlePauseToggle(),onResume:()=>this.handlePauseToggle(),onStartRecording:()=>this.handleRecord(),onStopRecording:()=>this.handleStop(),onSwitchSource:()=>this.handleSwitch(),onToggleMute:()=>this.handleMute(),onToggleSettings:()=>this.updateState({showSettings:!this.state.showSettings}),recordingState:this.state.recordingState,isStopLocked:r,stopLockedTooltip:t.buttons.minimumRecordingTimeNotReached,buttonTranslations:t.buttons}),this.recordingControlsElements),yw({uploadProgress:this.state.transcodingProgress??this.state.uploadProgress,uploadingLabel:this.state.transcodingProgress===null?e.uploading:e.finishing},{overlay:this.overlayElements.uploadOverlay,fill:this.overlayElements.uploadFill,text:this.overlayElements.uploadText}),bw({transitionMessage:this.state.transitionMessage},{overlay:this.overlayElements.transitionOverlay,message:this.overlayElements.transitionMessage}),wT(CT({stream:this.state.stream,showSettings:this.state.showSettings,devices:this.state.devices,onCameraChange:e=>this.handleCameraChange(e),onMicChange:e=>this.handleMicChange(e),translations:t.settings}),this.settingsPanelElement,()=>this.renderSettings()),this.renderDeviceErrorOverlay(),this.renderAudioWarningToast(n),this.renderPermissionFlow(),this.renderMobileIndicators(n),this.renderConfigError()}renderAudioWarningToast(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.vidtreo-audio-warning-toast`),r=this.state.audioWarning;if(!(e&&r!==null)){n&&(n.remove(),this.clearAudioWarningAutoDismiss());return}if(r===null)return;let i=this.resolveAudioWarningSeverity(r.code),a=this.resolveAudioWarningCopy(r.code),o=`${r.code}|${i}`;if(n&&n.dataset.signature===o)return;n&&n.remove(),this.clearAudioWarningAutoDismiss();let s=t.querySelector(`.vidtreo-preview-container`);if(!s)return;let c=document.createElement(`div`);c.className=`vidtreo-audio-warning-toast vidtreo-audio-warning-toast--${i}`,c.dataset.signature=o,c.setAttribute(`role`,`status`),c.setAttribute(`aria-live`,`polite`);let l=document.createElement(`span`);l.className=`vidtreo-audio-warning-toast__icon`,l.innerHTML=this.getAudioWarningIcon(i),c.appendChild(l);let u=document.createElement(`span`);u.className=`vidtreo-audio-warning-toast__content`;let d=document.createElement(`span`);d.className=`vidtreo-audio-warning-toast__title`,d.textContent=a.title;let f=document.createElement(`span`);if(f.className=`vidtreo-audio-warning-toast__message`,f.textContent=a.message,u.appendChild(d),u.appendChild(f),c.appendChild(u),i===`critical`||r.code===`audio.no-signal`){let e=document.createElement(`button`);e.className=`vidtreo-audio-warning-toast__dismiss`,e.type=`button`,e.setAttribute(`aria-label`,this.i18n.t(`audioWarningDismiss`)),e.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/></svg>`,e.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),this.updateState({audioWarning:null})}),c.appendChild(e)}r.code===`audio.low-signal`&&(this.audioWarningAutoDismissId=window.setTimeout(()=>{this.audioWarningAutoDismissId=null,this.updateState({audioWarning:null})},6e3)),s.appendChild(c)}clearAudioWarningAutoDismiss(){this.audioWarningAutoDismissId!==null&&(window.clearTimeout(this.audioWarningAutoDismissId),this.audioWarningAutoDismissId=null)}resolveAudioWarningSeverity(e){return e===`audio.track-ended`||e===`audio.track-muted-by-browser`||e===`audio.no-chunks`?`critical`:`soft`}resolveAudioWarningCopy(e){switch(e){case`audio.no-signal`:return{title:this.i18n.t(`audioWarningNoSignalTitle`),message:this.i18n.t(`audioWarningNoSignalMessage`)};case`audio.low-signal`:return{title:this.i18n.t(`audioWarningLowSignalTitle`),message:this.i18n.t(`audioWarningLowSignalMessage`)};case`audio.speaking-while-muted`:return{title:this.i18n.t(`audioWarningSpeakingMutedTitle`),message:this.i18n.t(`audioWarningSpeakingMutedMessage`)};case`audio.track-ended`:return{title:this.i18n.t(`audioWarningTrackEndedTitle`),message:this.i18n.t(`audioWarningTrackEndedMessage`)};case`audio.no-chunks`:return{title:this.i18n.t(`audioWarningNoChunksTitle`),message:this.i18n.t(`audioWarningNoChunksMessage`)};case`audio.track-muted-by-browser`:return{title:this.i18n.t(`audioWarningTrackMutedTitle`),message:this.i18n.t(`audioWarningTrackMutedMessage`)};default:return{title:``,message:``}}}getAudioWarningIcon(e){return e===`critical`?`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256"><path d="M213.92,210.62a8,8,0,1,1-11.84,10.76L176,193.63V200a48,48,0,0,1-83.43,32.45A47.84,47.84,0,0,1,80,200V176a8,8,0,0,1,16,0v24a32,32,0,0,0,55.12,22.13L120,188.68V200a8,8,0,0,1-16,0V172.67l-16-17.6V200a8,8,0,0,1-16,0V138.27l-16-17.6V144a8,8,0,0,1-16,0V104.67L42.08,45.38A8,8,0,1,1,53.92,34.62ZM176,152V80A48,48,0,0,0,82.33,60.89l13.73,15.1A32,32,0,0,1,160,80v56.67Z"/></svg>`:`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,80V80a8,8,0,0,1,16,0v24a8,8,0,0,1-16,0Zm20,52a12,12,0,1,1-12-12A12,12,0,0,1,140,156Z"/></svg>`}renderDeviceErrorOverlay(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`.vidtreo-audio-error-overlay`),n=oS({errorCode:this.state.errorCode,hasAudioFailed:this.state.hasAudioFailed,error:this.state.error}),r=n.variant===`generic`;if(!(n.visible&&(r||this.state.recordingState===`idle`))){t&&t.remove();return}let i=r&&!n.actionableCode&&this.state.error?this.state.error:null,a=`${n.variant}|${n.actionableCode||``}|${i||``}`;if(t&&t.dataset.signature===a)return;t&&t.remove();let o=e.querySelector(`.vidtreo-preview-container`);if(!o)return;let s=this.getDeviceErrorIcon(n.variant),c=n.variant===`audio`?this.resolveAudioOverlayCopy(this.state.errorCode):null,l=n.variant===`camera`?this.resolveCameraOverlayCopy(this.state.errorCode):null,u=n.actionableCode?this.resolveRecordingOverlayCopy(n.actionableCode):null,d=this.resolveDeviceErrorOverlayCopy(n.variant,i,c,l,u);t=document.createElement(`div`),t.className=`vidtreo-audio-error-overlay`,t.dataset.variant=n.variant,t.dataset.signature=a;let f=document.createElement(`div`);f.className=`vidtreo-audio-error-icon`,f.innerHTML=s,t.appendChild(f);let p=document.createElement(`h3`);p.className=`vidtreo-audio-error-title`,p.textContent=d.title,t.appendChild(p);let m=document.createElement(`p`);m.className=`vidtreo-audio-error-message`,m.textContent=d.message,t.appendChild(m);let h=null;if(n.canRetry){h=document.createElement(`button`),h.className=`vidtreo-audio-error-retry`,h.type=`button`,h.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256">
|
|
13386
|
+
</svg>`;let d=document.createElement(`span`);d.textContent=o,u.appendChild(d),u.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),this.nativeCameraManager?.reset()}),n.appendChild(u),t.appendChild(n)}setupNativeCameraListeners(){let e=this.querySelector(`#btnSelectVideo`),t=this.querySelector(`#btnRecordVideo`),n=this.querySelector(`#btnNativeRetake`),r=this.querySelector(`#nativeCameraInput`);e?.addEventListener(`click`,()=>{r&&(r.accept=`video/*`,r.removeAttribute(`capture`),r.click())}),t?.addEventListener(`click`,()=>{r&&(r.accept=`video/*`,r.setAttribute(`capture`,`environment`),r.click())}),n?.addEventListener(`click`,()=>{this.nativeCameraManager?.reset()}),r?.addEventListener(`change`,async e=>{let t=e.target,n=t.files?.[0];if(n&&this.nativeCameraManager)try{let e=await this.nativeCameraManager.handleFileSelect(n);await this.nativeCameraManager.processAndUpload(e)}catch{}t.value=``})}attributeChangedCallback(e,t,n){if(t!==n){if(e===`min-time-record`){let e=oE(this,{});this.config={...this.config,minTimeRecord:e.minTimeRecord},this.render();return}[`api-key`,`backend-url`,`demo`].includes(e)&&(this.initialized&&this.cleanup(),this.init())}}async init(){if(!this.isInitializing){this.isInitializing=!0;try{this.initialized&&this.cleanup(),this.config=this.resolveRecorderComponentConfig({});let e=this.config.apiKey||``,t=this.config.backendUrl||``;if(!(this.isDemo||e)){this.updateState({configError:Error(`apiKey is required. Provide it as an attribute or ensure demo mode is enabled.`)}),this.isInitializing=!1;return}this.isDemo||(this.uploadService=new UT({apiKey:e,backendUrl:t})),this.controller=new QC(fw(this));let n={...this.config};if(await this.controller.initialize(n),await this.initializePermissionFlow(),this.initialized=!0,this.updateState({configError:null}),this.clearBrowserUnsupportedState(),this.mobileManager){sE();return}this.cacheUiElements(),this.renderPermissionFlow(),this.setupEventListeners(),sE(),this.getCanStartStreamFromPermissionFlow(this.permissionFlowSnapshot)&&setTimeout(()=>this.startPreview(),100)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}finally{this.isInitializing=!1}}}renderConfigError(){let e=this.state,t=!!e.configError;if(this.toggleDisplay(`#configErrorOverlay`,t),t&&e.configError){let t=e.configError.message.includes(`apiKey is required`);this.toggleDisplay(`#configErrorMessageDefault`,!t),this.toggleDisplay(`#configErrorDetails`,t),t||this.setText(`#configErrorMessageDefault`,e.configError.message)}}resolveRecorderComponentConfig(e){return oE(this,e,this.i18n.t(`userInAnotherTab`))}cleanup(){this.audioStatusUnsub&&=(this.audioStatusUnsub(),null),this.cleanupPermissionFlow(),this.controller&&=(this.controller.cleanup(),null),this.stopAudioAnalysis(),this.initialized=!1,this.state={...gE},this.permissionFlowElements=null}updateState(e){let t={...this.state,...e};e.stream!==void 0&&(t={...t,isVideoLoaded:!1}),e.recordingState!==void 0&&t.showSettings&&t.recordingState===Sw&&(t={...t,showSettings:!1}),this.state=t,this.mobileManager&&e.uploadProgress!==void 0&&this.mobileManager.checkUploadCompletion(this.state.uploadProgress),this.render(),e.stream!==void 0&&this.handleStreamUpdate(this.state.stream),this.state.devices.cameras.length===0&&this.state.stream&&this.updateDevices()}async updateDevices(){if(!this.controller)return;let e=this.controller.getDeviceManager(),t=await e.getAvailableDevices();this.updateState({devices:{cameras:t.videoinput,microphones:t.audioinput,selectedCamera:e.getSelectedCameraDeviceId(),selectedMic:e.getSelectedMicDeviceId()}})}handleStreamUpdate(e){this.videoPreviewElements||this.cacheUiElements(),this.videoPreviewElements&&Qw(e,this.videoPreviewElements,{onVideoLoaded:()=>{this.updateState({isVideoLoaded:!0}),this.updateOverlayPhase()},onError:e=>{this.updateState({error:e})},startAudioAnalysis:e=>this.startAudioAnalysis(e),stopAudioAnalysis:()=>this.stopAudioAnalysis()})}startAudioAnalysis(e){if(this.stopAudioAnalysis(),e.getAudioTracks().length!==0)try{this.audioContext=new AudioContext;let t=this.audioContext.createMediaStreamSource(e);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=64,t.connect(this.analyser);let n=new Uint8Array(this.analyser.frequencyBinCount),r=()=>{if(!this.analyser)return;this.analyser.getByteFrequencyData(n);let e=0;for(let t of n)e+=t;let t=e/n.length,i=Math.min(1,t/128);this.renderAudioBars(i),this.animationFrameId=requestAnimationFrame(r)};r()}catch(e){this.updateState({error:i(e)})}}stopAudioAnalysis(){this.animationFrameId&&=(cancelAnimationFrame(this.animationFrameId),null),this.audioContext&&=(this.audioContext.close(),null)}renderAudioBars(e){if(!this.audioBarsContainer)return;let t=ww,n=``;if(!this.state.isMuted)for(let r of t){let t=Math.max(4,e*24*r);n+=`<div class="vidtreo-audio-level-bar" style="height: ${t}px;"></div>`}this.audioBarsContainer.innerHTML=n}render(){if(this.mobileManager&&!this.mobileManager.isModalOpen||(this.previewContentElements&&this.recordingControlsElements&&this.overlayElements&&this.videoPreviewElements||this.cacheUiElements(),!(this.previewContentElements&&this.recordingControlsElements&&this.overlayElements&&this.videoPreviewElements)))return;let e=this.i18n.getAll(),t=HT(e),n=this.state.recordingState===Sw||this.state.isPaused,r=this.isProcessingRecording(),a=fE(this.config.minTimeRecord,this.state.timer,n),o={enableDeviceChange:this.config.enableDeviceChange,enableMute:this.config.enableMute,enablePause:this.config.enablePause,enableSourceSwitching:this.config.enableSourceSwitching},s=XT(n,this.state.recordingState,this.state.isPaused,o),c=!1;this.isDemo&&!n&&!r&&this.state.recordingState===`idle`&&this.state.recordedBlob!==null&&(c=!0);let l={...s,showDownloadButton:c},u=bw;this.controller&&(u=this.controller.getCurrentSourceType());let{errorCode:d,browserName:f,browserVersion:p}=this.resolveBrowserErrorState();oT({state:{stream:this.state.stream,transitionMessage:this.state.transitionMessage,recordingState:this.state.recordingState,countdown:this.state.countdown,timer:this.state.timer,isMuted:this.state.isMuted,isPaused:this.state.isPaused,errorCode:d,browserName:f,browserVersion:p},isVideoLoaded:this.state.isVideoLoaded,isRecording:n,controller:this.controller,audioLevel:0,buttonVisibility:l,currentSourceType:u,onStartRecording:()=>this.handleRecord(),onStopRecording:()=>this.handleStop(),onSwitchSource:()=>this.handleSwitch(),onToggleSettings:()=>this.updateState({showSettings:!this.state.showSettings}),onToggleMute:()=>this.handleMute(),onPause:()=>this.handlePauseToggle(),onResume:()=>this.handlePauseToggle(),onRetryCamera:()=>{this.startPreview().catch(e=>{let t;t=e instanceof Error?e:Error(i(e)),this.dispatchEvent(new CustomEvent(`error`,{detail:{error:t.message},bubbles:!0,composed:!0}))})},onLoadedChange:()=>this.updateState({isVideoLoaded:!0}),onDownload:()=>this.handleDownload(),translations:t.preview,buttonTranslations:t.buttons},this.previewContentElements),gT(mT({stream:this.state.stream,buttonVisibility:l,currentSourceType:u,isMuted:this.state.isMuted,isAudioReady:this.state.isAudioReady,isProcessingRecording:r,onDownload:()=>this.handleDownload(),onPause:()=>this.handlePauseToggle(),onResume:()=>this.handlePauseToggle(),onStartRecording:()=>this.handleRecord(),onStopRecording:()=>this.handleStop(),onSwitchSource:()=>this.handleSwitch(),onToggleMute:()=>this.handleMute(),onToggleSettings:()=>this.updateState({showSettings:!this.state.showSettings}),recordingState:this.state.recordingState,isStopLocked:a,stopLockedTooltip:t.buttons.minimumRecordingTimeNotReached,buttonTranslations:t.buttons}),this.recordingControlsElements),Tw({uploadProgress:this.state.transcodingProgress??this.state.uploadProgress,uploadingLabel:this.state.transcodingProgress===null?e.uploading:e.finishing},{overlay:this.overlayElements.uploadOverlay,fill:this.overlayElements.uploadFill,text:this.overlayElements.uploadText}),Ew({transitionMessage:this.state.transitionMessage},{overlay:this.overlayElements.transitionOverlay,message:this.overlayElements.transitionMessage}),AT(kT({stream:this.state.stream,showSettings:this.state.showSettings,devices:this.state.devices,onCameraChange:e=>this.handleCameraChange(e),onMicChange:e=>this.handleMicChange(e),translations:t.settings}),this.settingsPanelElement,()=>this.renderSettings()),this.renderDeviceErrorOverlay(),this.renderAudioWarningToast(n),this.renderPermissionFlow(),this.renderMobileIndicators(n),this.renderConfigError()}renderAudioWarningToast(e){let t=this.shadowRoot;if(!t)return;let n=t.querySelector(`.vidtreo-audio-warning-toast`),r=this.state.audioWarning;if(!(e&&r!==null)){n&&(n.remove(),this.clearAudioWarningAutoDismiss());return}if(r===null)return;let i=this.resolveAudioWarningSeverity(r.code),a=this.resolveAudioWarningCopy(r.code),o=`${r.code}|${i}`;if(n&&n.dataset.signature===o)return;n&&n.remove(),this.clearAudioWarningAutoDismiss();let s=t.querySelector(`.vidtreo-preview-container`);if(!s)return;let c=document.createElement(`div`);c.className=`vidtreo-audio-warning-toast vidtreo-audio-warning-toast--${i}`,c.dataset.signature=o,c.setAttribute(`role`,`status`),c.setAttribute(`aria-live`,`polite`);let l=document.createElement(`span`);l.className=`vidtreo-audio-warning-toast__icon`,l.innerHTML=this.getAudioWarningIcon(i),c.appendChild(l);let u=document.createElement(`span`);u.className=`vidtreo-audio-warning-toast__content`;let d=document.createElement(`span`);d.className=`vidtreo-audio-warning-toast__title`,d.textContent=a.title;let f=document.createElement(`span`);if(f.className=`vidtreo-audio-warning-toast__message`,f.textContent=a.message,u.appendChild(d),u.appendChild(f),c.appendChild(u),i===`critical`||r.code===`audio.no-signal`){let e=document.createElement(`button`);e.className=`vidtreo-audio-warning-toast__dismiss`,e.type=`button`,e.setAttribute(`aria-label`,this.i18n.t(`audioWarningDismiss`)),e.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" fill="currentColor" viewBox="0 0 256 256"><path d="M205.66,194.34a8,8,0,0,1-11.32,11.32L128,139.31,61.66,205.66a8,8,0,0,1-11.32-11.32L116.69,128,50.34,61.66A8,8,0,0,1,61.66,50.34L128,116.69l66.34-66.35a8,8,0,0,1,11.32,11.32L139.31,128Z"/></svg>`,e.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),this.updateState({audioWarning:null})}),c.appendChild(e)}r.code===`audio.low-signal`&&(this.audioWarningAutoDismissId=window.setTimeout(()=>{this.audioWarningAutoDismissId=null,this.updateState({audioWarning:null})},6e3)),s.appendChild(c)}clearAudioWarningAutoDismiss(){this.audioWarningAutoDismissId!==null&&(window.clearTimeout(this.audioWarningAutoDismissId),this.audioWarningAutoDismissId=null)}resolveAudioWarningSeverity(e){return e===`audio.track-ended`||e===`audio.track-muted-by-browser`||e===`audio.no-chunks`?`critical`:`soft`}resolveAudioWarningCopy(e){switch(e){case`audio.no-signal`:return{title:this.i18n.t(`audioWarningNoSignalTitle`),message:this.i18n.t(`audioWarningNoSignalMessage`)};case`audio.low-signal`:return{title:this.i18n.t(`audioWarningLowSignalTitle`),message:this.i18n.t(`audioWarningLowSignalMessage`)};case`audio.speaking-while-muted`:return{title:this.i18n.t(`audioWarningSpeakingMutedTitle`),message:this.i18n.t(`audioWarningSpeakingMutedMessage`)};case`audio.track-ended`:return{title:this.i18n.t(`audioWarningTrackEndedTitle`),message:this.i18n.t(`audioWarningTrackEndedMessage`)};case`audio.no-chunks`:return{title:this.i18n.t(`audioWarningNoChunksTitle`),message:this.i18n.t(`audioWarningNoChunksMessage`)};case`audio.track-muted-by-browser`:return{title:this.i18n.t(`audioWarningTrackMutedTitle`),message:this.i18n.t(`audioWarningTrackMutedMessage`)};default:return{title:``,message:``}}}getAudioWarningIcon(e){return e===`critical`?`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256"><path d="M213.92,210.62a8,8,0,1,1-11.84,10.76L176,193.63V200a48,48,0,0,1-83.43,32.45A47.84,47.84,0,0,1,80,200V176a8,8,0,0,1,16,0v24a32,32,0,0,0,55.12,22.13L120,188.68V200a8,8,0,0,1-16,0V172.67l-16-17.6V200a8,8,0,0,1-16,0V138.27l-16-17.6V144a8,8,0,0,1-16,0V104.67L42.08,45.38A8,8,0,1,1,53.92,34.62ZM176,152V80A48,48,0,0,0,82.33,60.89l13.73,15.1A32,32,0,0,1,160,80v56.67Z"/></svg>`:`<svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256"><path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm-8,80V80a8,8,0,0,1,16,0v24a8,8,0,0,1-16,0Zm20,52a12,12,0,1,1-12-12A12,12,0,0,1,140,156Z"/></svg>`}renderDeviceErrorOverlay(){let e=this.shadowRoot;if(!e)return;let t=e.querySelector(`.vidtreo-audio-error-overlay`),n=fS({errorCode:this.state.errorCode,hasAudioFailed:this.state.hasAudioFailed,error:this.state.error}),r=n.variant===`generic`;if(!(n.visible&&!this.isProcessingRecording()&&(r||this.state.recordingState===`idle`))){t&&t.remove();return}let i=r&&!n.actionableCode&&this.state.error?this.state.error:null,a=`${n.variant}|${n.actionableCode||``}|${i||``}`;if(t&&t.dataset.signature===a)return;t&&t.remove();let o=e.querySelector(`.vidtreo-preview-container`);if(!o)return;let s=this.getDeviceErrorIcon(n.variant),c=n.variant===`audio`?this.resolveAudioOverlayCopy(this.state.errorCode):null,l=n.variant===`camera`?this.resolveCameraOverlayCopy(this.state.errorCode):null,u=n.actionableCode?this.resolveRecordingOverlayCopy(n.actionableCode):null,d=this.resolveDeviceErrorOverlayCopy(n.variant,i,c,l,u);t=document.createElement(`div`),t.className=`vidtreo-audio-error-overlay`,t.dataset.variant=n.variant,t.dataset.signature=a;let f=document.createElement(`div`);f.className=`vidtreo-audio-error-icon`,f.innerHTML=s,t.appendChild(f);let p=document.createElement(`h3`);p.className=`vidtreo-audio-error-title`,p.textContent=d.title,t.appendChild(p);let m=document.createElement(`p`);m.className=`vidtreo-audio-error-message`,m.textContent=d.message,t.appendChild(m);let h=null;if(n.canRetry){h=document.createElement(`button`),h.className=`vidtreo-audio-error-retry`,h.type=`button`,h.innerHTML=`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" viewBox="0 0 256 256">
|
|
13387
13387
|
<path d="M240,56v48a8,8,0,0,1-8,8H184a8,8,0,0,1,0-16h28.69L187.8,71.11A88,88,0,0,0,40.36,98.72,8,8,0,1,1,24.64,93.28,104,104,0,0,1,198.13,60.87L224,86.75V56a8,8,0,0,1,16,0ZM215.36,157.28a88,88,0,0,1-147.44,27.61L43.31,160H72a8,8,0,0,0,0-16H24a8,8,0,0,0-8,8v48a8,8,0,0,0,16,0V169.25l25.87,25.88A104,104,0,0,0,231.36,162.72a8,8,0,0,1-16,5.44Z"/>
|
|
13388
13388
|
</svg>`;let e=document.createElement(`span`);e.textContent=d.retryLabel,h.appendChild(e),t.appendChild(h)}h&&h.addEventListener(`click`,e=>{e.preventDefault(),e.stopPropagation(),t?.remove(),this.updateState({hasAudioFailed:!1,errorCode:null,error:null}),this.startPreview().catch(e=>{})}),o.appendChild(t)}resolveDeviceErrorOverlayCopy(e,t,n,r,i){return n||r||i||{title:this.getDeviceErrorTitle(e),message:t||this.getDeviceErrorMessage(e),retryLabel:this.i18n.t(`errorRetry`)}}getDeviceErrorIcon(e){switch(e){case`audio`:return`<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor" viewBox="0 0 256 256">
|
|
13389
13389
|
<path d="M213.92,210.62a8,8,0,1,1-11.84,10.76L176,193.63V200a48,48,0,0,1-83.43,32.45A47.84,47.84,0,0,1,80,200V176a8,8,0,0,1,16,0v24a32,32,0,0,0,55.12,22.13L120,188.68V200a8,8,0,0,1-16,0V172.67l-16-17.6V200a8,8,0,0,1-16,0V138.27l-16-17.6V144a8,8,0,0,1-16,0V104.67L42.08,45.38A8,8,0,1,1,53.92,34.62ZM176,152V80A48,48,0,0,0,82.33,60.89l13.73,15.1A32,32,0,0,1,160,80v56.67Z"/>
|
|
@@ -13391,7 +13391,7 @@ Mediabunny was loaded twice.\` + " This will likely cause Mediabunny not to work
|
|
|
13391
13391
|
<path d="M251.77,73a8,8,0,0,0-8.21.39L208,97.05V72a16,16,0,0,0-16-16H32A16,16,0,0,0,16,72V184a16,16,0,0,0,16,16H192a16,16,0,0,0,16-16V159l35.56,23.71A8,8,0,0,0,256,176V80A8,8,0,0,0,251.77,73ZM192,184H32V72H192V184Zm48-22.95-32-21.33V116.28l32-21.33Z"/>
|
|
13392
13392
|
</svg>`;default:return`<svg xmlns="http://www.w3.org/2000/svg" width="28" height="28" fill="currentColor" viewBox="0 0 256 256">
|
|
13393
13393
|
<path d="M128,24A104,104,0,1,0,232,128,104.11,104.11,0,0,0,128,24Zm0,192a88,88,0,1,1,88-88A88.1,88.1,0,0,1,128,216Zm-8-80V80a8,8,0,0,1,16,0v56a8,8,0,0,1-16,0Zm20,36a12,12,0,1,1-12-12A12,12,0,0,1,140,172Z"/>
|
|
13394
|
-
</svg>`}}getDeviceErrorTitle(e){switch(e){case`audio`:return this.i18n.t(`audioErrorTitle`);case`camera`:return this.i18n.t(`cameraErrorTitle`);case`browser`:return this.i18n.t(`browserErrorTitle`);default:return this.i18n.t(`genericErrorTitle`)}}getDeviceErrorMessage(e){switch(e){case`audio`:return this.i18n.t(`audioErrorMessage`);case`camera`:return this.i18n.t(`cameraErrorMessage`);case`browser`:return this.i18n.t(`browserErrorMessage`);default:return this.i18n.t(`genericErrorMessage`)}}resolveAudioOverlayCopy(e){switch(e){case`audio.in-use`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioInUse`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.not-found`:case`audio.overconstrained`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioNotFound`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.permission-denied`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioPermissionDenied`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.timeout`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioTimeout`),retryLabel:this.i18n.t(`audioErrorRetry`)};default:break}let t=new Set([`recording.audio-no-chunks`,`recording.audio-track-ended`,`recording.no-audio-track`,`recording.no-audio-frames`]),n=new Set([`recording.audio-silent`]),r=new Set([`recording.audio-zero-channels`,`recording.audio-invalid-sample-rate`]);return e&&t.has(e)?{title:this.i18n.t(`audioMissingTitle`),message:this.i18n.t(`audioMissingMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:e&&n.has(e)?{title:this.i18n.t(`audioSilentTitle`),message:this.i18n.t(`audioSilentMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:e&&r.has(e)?{title:this.i18n.t(`audioProcessingErrorTitle`),message:this.i18n.t(`audioProcessingErrorMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioErrorMessage`),retryLabel:this.i18n.t(`audioErrorRetry`)}}resolveCameraOverlayCopy(e){switch(e){case`camera.in-use`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraInUse`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.not-found`:case`camera.overconstrained`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraNotFound`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.permission-denied`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraPermissionDenied`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.timeout`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraTimeout`),retryLabel:this.i18n.t(`errorRetry`)};default:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraErrorMessage`),retryLabel:this.i18n.t(`errorRetry`)}}}resolveRecordingOverlayCopy(e){switch(e){case`recording.codec-unsupported`:return{title:this.i18n.t(`recordingCodecUnsupportedTitle`),message:this.i18n.t(`recordingCodecUnsupportedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.post-recording-transcode-fallback`:return{title:this.i18n.t(`recordingServerTranscodeFallbackTitle`),message:this.i18n.t(`recordingServerTranscodeFallbackMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.track-ended`:return{title:this.i18n.t(`recordingTrackEndedTitle`),message:this.i18n.t(`recordingTrackEndedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.finalize-timeout-low-resource`:return{title:this.i18n.t(`recordingFinalizeTimeoutTitle`),message:this.i18n.t(`recordingFinalizeTimeoutMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.not-started-state-race`:return{title:this.i18n.t(`recordingStateRaceTitle`),message:this.i18n.t(`recordingStateRaceMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.no-video-frames`:return{title:this.i18n.t(`recordingNoFramesTitle`),message:this.i18n.t(`recordingNoFramesMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.unsupported-device`:return{title:this.i18n.t(`recordingUnsupportedTitle`),message:this.i18n.t(`recordingUnsupportedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};default:return{title:this.i18n.t(`genericErrorTitle`),message:this.i18n.t(`genericErrorMessage`),retryLabel:this.i18n.t(`errorRetry`)}}}renderMobileIndicators(e){this.mobileManager?.isModalOpen&&(this.toggleDisplay(`#mobileRecIndicator`,e),this.toggleDisplay(`#mobileTimerBadge`,e),this.setText(`#mobileTimer`,this.state.timer))}toggleDisplay(e,t){let n=this.queryMobileElement(e);if(!n)return;if(!t){n.style.display=`none`;return}let r=n.tagName===`BUTTON`,i=e.includes(`row`)||e.includes(`controls`)||e.includes(`Overlay`)||e.includes(`Indicator`)||e.includes(`Timer`)||e.includes(`Bars`),a=`block`;r&&(a=`inline-flex`),!r&&i&&(a=`flex`),n.style.display=a}setText(e,t){let n=this.queryMobileElement(e);n&&(n.textContent=t)}async startPreview(){if(this.controller&&!this.isStartingPreview){this.isStartingPreview=!0;try{if(!await this.resolveCanStartStreamFromPermissionFlow())return;await this.controller.startStream(),this.updateState({stream:this.controller.getStream(),isAudioReady:this.controller.isAudioReady()}),this.clearBrowserUnsupportedState(),this.audioStatusUnsub&&=(this.audioStatusUnsub(),null),this.audioStatusUnsub=this.controller.getStreamManager().on(`audiostatuschange`,({status:e})=>{this.updateState({isAudioReady:e===`acquired`,hasAudioFailed:e===`failed`})})}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)}),this.overlayPhase=`hidden`,this.renderPermissionFlow()}finally{this.isStartingPreview=!1}}}getPermissionFlowTranslations(){return{title:this.i18n.t(`permissionFlowTitle`),cameraTitle:this.i18n.t(`permissionFlowCameraTitle`),microphoneTitle:this.i18n.t(`permissionFlowMicrophoneTitle`),cameraLabel:this.i18n.t(`permissionFlowCameraLabel`),microphoneLabel:this.i18n.t(`permissionFlowMicrophoneLabel`),statusPending:this.i18n.t(`permissionFlowStatusPending`),statusGranted:this.i18n.t(`permissionFlowStatusGranted`),statusDenied:this.i18n.t(`permissionFlowStatusDenied`),statusRequesting:this.i18n.t(`permissionFlowStatusRequesting`),allowCamera:this.i18n.t(`permissionFlowAllowCamera`),allowMicrophone:this.i18n.t(`permissionFlowAllowMicrophone`),retry:this.i18n.t(`permissionFlowRetry`),recoveryTitle:this.i18n.t(`permissionFlowRecoveryTitle`),recoveryInstructions:this.i18n.t(`permissionFlowRecoveryInstructions`),connecting:this.i18n.t(`permissionFlowConnecting`)}}updatePermissionFlowSnapshot(e){this.permissionFlowSnapshot=e,this.updateOverlayPhase(),this.renderPermissionFlow(),this.getCanStartStreamFromPermissionFlow(e)&&!this.state.stream&&!this.isStartingPreview&&!this.mobileManager&&setTimeout(()=>this.startPreview(),100)}updateOverlayPhase(){let e=this.permissionFlowSnapshot;if(e.step===`checking`||e.step===`awaiting-user`||e.step===`blocked`){this.overlayPhase=`active`;return}if(e.step===`ready`||e.isComplete){if(this.overlayPhase===`active`){this.state.isVideoLoaded?this.startOverlayFadeOut():this.overlayPhase=`loading`;return}this.overlayPhase===`loading`&&this.state.isVideoLoaded&&this.startOverlayFadeOut()}}startOverlayFadeOut(){this.overlayPhase=`fading`,this.renderPermissionFlow(),this.overlayFadeTimeoutId!==null&&clearTimeout(this.overlayFadeTimeoutId),this.overlayFadeTimeoutId=setTimeout(()=>{this.overlayPhase=`hidden`,this.overlayFadeTimeoutId=null,this.renderPermissionFlow()},600)}async initializePermissionFlow(){this.cleanupPermissionFlow();let e=`en`;this.lang===`es`&&(e=`es`),this.permissionFlowOrchestrator=new zn(Rn(),{callbacks:{onChange:e=>{this.updatePermissionFlowSnapshot(e)},onComplete:e=>{this.updatePermissionFlowSnapshot(e)}},language:e});let t=await this.permissionFlowOrchestrator.initialize();this.updatePermissionFlowSnapshot(t)}cleanupPermissionFlow(){this.overlayFadeTimeoutId!==null&&(clearTimeout(this.overlayFadeTimeoutId),this.overlayFadeTimeoutId=null),this.overlayPhase=`hidden`;let e=Fw(lE,this.getPermissionFlowTranslations(),!1);this.permissionFlowElements&&Hw(e,this.permissionFlowElements),this.permissionFlowOrchestrator&&=(this.permissionFlowOrchestrator.destroy(),null),this.permissionFlowSnapshot=lE,this.isStartingPreview=!1}async requestPermissionCurrentStep(){if(!this.permissionFlowOrchestrator)return;let e=await this.permissionFlowOrchestrator.requestCurrentStep();this.updatePermissionFlowSnapshot(e)}async retryPermissionCurrentStep(){if(!this.permissionFlowOrchestrator)return;let e=await this.permissionFlowOrchestrator.retryCurrentStep();this.updatePermissionFlowSnapshot(e)}getCanStartStreamFromPermissionFlow(e){return!(!e.isComplete||e.step!==`ready`)}async resolveCanStartStreamFromPermissionFlow(){if(this.permissionFlowOrchestrator||await this.initializePermissionFlow(),!this.permissionFlowOrchestrator)return!1;if(this.getCanStartStreamFromPermissionFlow(this.permissionFlowSnapshot))return!0;let e=await this.permissionFlowOrchestrator.requestCurrentStep();return this.updatePermissionFlowSnapshot(e),this.getCanStartStreamFromPermissionFlow(e)}renderPermissionFlow(){if(!this.permissionFlowElements)return;let e=this.overlayPhase===`fading`,t=Fw(this.permissionFlowSnapshot,this.getPermissionFlowTranslations(),e);this.overlayPhase===`hidden`&&(t.isVisible=!1),Hw(t,this.permissionFlowElements,{onAllow:()=>{this.requestPermissionCurrentStep().catch(e=>{this.updateState({error:i(e)})})},onRetry:()=>{this.retryPermissionCurrentStep().catch(e=>{this.updateState({error:i(e)})})}})}stopPreview(){if(!this.controller)return;this.stopAudioAnalysis();let e=this.controller.getStream();if(e)for(let t of e.getTracks())t.stop();this.controller.getStreamManager().stopStream(),this.updateState({stream:null,error:null,errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}renderMobile(){if(!this.mobileManager)return;let e=this.mobileManager.portal;if(!this.mobileManager.isModalOpen){this.innerHTML=zT(this.i18n),this.setupMobileLandingListeners(),tE();return}let t=HT(this.i18n),n=BT(this.i18n,this.mobileManager.canCloseModal,t);e.render(n),this.setupMobileModalListeners(),this.setupEventListeners(),this.cacheUiElements(),this.handleStreamUpdate(this.state.stream),this.render(),tE()}queryMobileElement(e){return this.mobileManager?.isModalOpen&&this.mobileManager.portal.isActive?this.mobileManager.portal.querySelector(e):this.querySelector(e)}getQueryRoot(){return this.mobileManager?.isModalOpen&&this.mobileManager.portal.isActive?this.mobileManager.portal:this}cacheUiElements(){let e=this.getQueryRoot();this.previewContentElements=qw(e),this.recordingControlsElements=lT(e),this.videoPreviewElements={previewSkeleton:this.previewContentElements.previewSkeleton,videoPreview:this.previewContentElements.videoPreview},this.audioBarsContainer=this.previewContentElements.audioLevelBars,this.overlayElements={uploadOverlay:e.querySelector(`#uploadProgressOverlay`),uploadFill:e.querySelector(`#uploadProgressFill`),uploadText:e.querySelector(`#uploadProgressText`),transitionOverlay:e.querySelector(`#sourceTransitionOverlay`),transitionMessage:e.querySelector(`#transitionMessage`)},this.settingsPanelElement=e.querySelector(`#settingsPanel`),this.permissionFlowElements=Aw(e)}setupMobileLandingListeners(){this.querySelector(`#btnMobileOpenCamera`)?.addEventListener(`click`,()=>this.mobileManager?.openModal())}setupMobileModalListeners(){this.queryMobileElement(`#btnMobileCloseModal`)?.addEventListener(`click`,()=>this.mobileManager?.closeModal())}handleCameraChange(e){return this.handleDeviceChange(e,`camera`)}handleMicChange(e){return this.handleDeviceChange(e,`mic`)}async handleDeviceChange(e,t){if(!this.controller)return;let n=sw(this.controller,e);t===`mic`&&(n=cw(this.controller,e)),await n.then(e=>{this.updateState({stream:e})}).catch(e=>{this.updateState({error:i(e)})});let r=this.state.devices;t===`camera`&&(r={...this.state.devices,selectedCamera:e}),t===`mic`&&(r={...this.state.devices,selectedMic:e}),this.updateState({devices:r})}async handleRecord(){if(this.controller)try{this.updateState({configError:null,audioWarning:null}),this.clearAudioWarningAutoDismiss(),await lw(this.controller,mw)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({configError:Error(i(e)),error:i(e)})}}async processRecordingBlob(e){if(!this.isProcessingBlob){this.isProcessingBlob=!0;try{if(this.isDemo){this.updateState({recordedBlob:e});return}if(!this.uploadService)throw Error(`Upload service not ready`);let t=`recording-${Date.now()}.mp4`;this.updateState({transcodingProgress:null,uploadProgress:0});try{let n=await this.uploadService.uploadVideo(e,{apiKey:this.config.apiKey||``,backendUrl:this.config.backendUrl||``,filename:t,userMetadata:this.config.userMetadata,onProgress:e=>{this.updateState({uploadProgress:e})}});this.updateState({uploadProgress:null,transcodingProgress:null}),this.dispatchEvent(new CustomEvent(`upload-complete`,{detail:n}))}catch(e){throw this.updateState({uploadProgress:null,transcodingProgress:null}),e}}finally{this.isProcessingBlob=!1}}}isStopBlockedByMinimumTime(){let e=this.state.recordingState===gw||this.state.isPaused;return oE(this.config.minTimeRecord,this.state.timer,e)}async stopRecording(){if(!this.controller)return null;if(this.isStopBlockedByMinimumTime())throw sE();let e=await uw(this.controller,this.isDemo,()=>{},()=>{});return e&&await this.processRecordingBlob(e),e}async handleStop(){if(!this.isStopBlockedByMinimumTime())try{await this.stopRecording()}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}}handlePauseToggle(){this.controller&&(this.state.isPaused&&fw(this.controller),this.state.isPaused||dw(this.controller),this.updateState({isPaused:this.controller.isPaused()}))}handleDownload(){this.state.recordedBlob&&ET(this.state.recordedBlob)}handleMute(){this.controller&&(TT(this.controller),this.updateState({isMuted:this.controller.getIsMuted()}))}async handleSwitch(){if(!this.controller)return;let e=this.controller.getCurrentSourceType(),t=mw;e===mw&&(t=hw),e===hw&&(t=mw);try{await pw(this.controller,t)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}}setupEventListeners(){let e=(e,t)=>{let n=this.queryMobileElement(e);n&&n.addEventListener(`click`,t)};e(`#btnRecord`,()=>this.handleRecord()),e(`#btnStop`,()=>this.handleStop()),e(`#btnPause`,()=>this.handlePauseToggle()),e(`#btnDownload`,()=>this.handleDownload()),e(`#btnMute`,()=>this.handleMute()),e(`#btnSwitchSource`,()=>this.handleSwitch());let t=this.queryMobileElement(`#startCameraArea`);t&&t.addEventListener(`click`,()=>this.startPreview());let n=this.queryMobileElement(`#btnSettings`),r=this.queryMobileElement(`#settingsPanel`);n&&r&&n.addEventListener(`click`,()=>{let e=!this.state.showSettings;this.updateState({showSettings:e}),e&&this.populateSettings()});let i=this.queryMobileElement(`#btnSettingsBack`);i&&r&&i.addEventListener(`click`,()=>{}),this.setupSettingsListeners()}setupSettingsListeners(){let e=this.queryMobileElement(`#btnCameraMenu`);e&&e.addEventListener(`click`,()=>this.navigateSettings(`camera`));let t=this.queryMobileElement(`#btnMicMenu`);t&&t.addEventListener(`click`,()=>this.navigateSettings(`microphone`));let n=this.queryMobileElement(`#btnSettingsBack`);n&&n.addEventListener(`click`,e=>{e.stopPropagation(),this.settingsView!==`main`&&this.navigateSettings(`main`)})}navigateSettings(e){e===`main`?this.slideDirection=`left`:this.slideDirection=`right`,this.settingsView=e,this.renderSettings(),setTimeout(()=>{this.slideDirection=`none`,this.renderSettings()},300)}renderSettings(){this.updateSettingsContent(),this.renderSettingsView()}updateSettingsContent(){let e=this.queryMobileElement(`#settingsContent`);e&&(e.classList.remove(`vidtreo-slide-left`,`vidtreo-slide-right`,`vidtreo-slide-none`),this.slideDirection!==`none`&&e.classList.add(`vidtreo-slide-${this.slideDirection}`))}renderSettingsView(){let e=this.queryMobileElement(`#settingsMain`),t=this.queryMobileElement(`#cameraList`),n=this.queryMobileElement(`#micList`),r=this.queryMobileElement(`#btnSettingsBack`);e&&(e.style.display=`none`),t&&(t.style.display=`none`),n&&(n.style.display=`none`),r&&(r.style.display=`none`),this.settingsView===`main`&&this.renderSettingsMain(e,r),this.settingsView===`camera`&&this.renderSettingsCamera(t,r),this.settingsView===`microphone`&&this.renderSettingsMicrophone(n,r)}renderSettingsMain(e,t){e&&(e.style.display=`flex`),t&&(t.style.display=`none`),this.updateCurrentDeviceLabels()}updateCurrentDeviceLabels(){let e=this.state.devices.cameras.filter(e=>e.deviceId&&e.deviceId.trim()!==``),t=this.state.devices.microphones.filter(e=>e.deviceId&&e.deviceId.trim()!==``),n=e.find(e=>e.deviceId===this.state.devices.selectedCamera),r=t.find(e=>e.deviceId===this.state.devices.selectedMic),i=n?.label||e[0]?.label||`Camera`,a=r?.label||t[0]?.label||`Microphone`;this.setText(`#currentCameraName`,i),this.setText(`#currentMicName`,a)}renderSettingsCamera(e,t){e&&(e.style.display=`flex`,this.renderDeviceList(e,this.state.devices.cameras,this.state.devices.selectedCamera,`camera`));let n=this.queryMobileElement(`.vidtreo-settings-title`),r=this.queryMobileElement(`.vidtreo-settings-back-icon`);t&&(t.style.display=`flex`,t.style.cursor=`pointer`,t.onclick=()=>this.navigateSettings(`main`)),n&&(n.textContent=`Camera`),r&&(r.style.display=`flex`)}renderSettingsMicrophone(e,t){e&&(e.style.display=`flex`,this.renderDeviceList(e,this.state.devices.microphones,this.state.devices.selectedMic,`mic`));let n=this.queryMobileElement(`.vidtreo-settings-title`),r=this.queryMobileElement(`.vidtreo-settings-back-icon`);t&&(t.style.display=`flex`,t.style.cursor=`pointer`,t.onclick=()=>this.navigateSettings(`main`)),n&&(n.textContent=`Microphone`),r&&(r.style.display=`flex`)}renderDeviceList(e,t,n,r){if(!t||t.length===0){e.innerHTML=`<div class="vidtreo-device-empty">No devices found</div>`;return}e.innerHTML=``;for(let i of t){let t=document.createElement(`button`);t.className=`vidtreo-device-option`;let a=i.deviceId===n,o=`<span class="vidtreo-device-checkmark-placeholder"></span>`;a&&(o=`<i class="ph-fill ph-check vidtreo-device-checkmark" style="display: flex; font-size: 20px;"></i>`);let s=i.label;s||=`Device ${i.deviceId.slice(0,8)}`,t.innerHTML=`
|
|
13394
|
+
</svg>`}}getDeviceErrorTitle(e){switch(e){case`audio`:return this.i18n.t(`audioErrorTitle`);case`camera`:return this.i18n.t(`cameraErrorTitle`);case`browser`:return this.i18n.t(`browserErrorTitle`);default:return this.i18n.t(`genericErrorTitle`)}}getDeviceErrorMessage(e){switch(e){case`audio`:return this.i18n.t(`audioErrorMessage`);case`camera`:return this.i18n.t(`cameraErrorMessage`);case`browser`:return this.i18n.t(`browserErrorMessage`);default:return this.i18n.t(`genericErrorMessage`)}}resolveAudioOverlayCopy(e){switch(e){case`audio.in-use`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioInUse`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.not-found`:case`audio.overconstrained`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioNotFound`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.permission-denied`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioPermissionDenied`),retryLabel:this.i18n.t(`audioErrorRetry`)};case`audio.timeout`:return{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioTimeout`),retryLabel:this.i18n.t(`audioErrorRetry`)};default:break}let t=new Set([`recording.audio-no-chunks`,`recording.audio-track-ended`,`recording.no-audio-track`,`recording.no-audio-frames`]),n=new Set([`recording.audio-silent`]),r=new Set([`recording.audio-zero-channels`,`recording.audio-invalid-sample-rate`]);return e&&t.has(e)?{title:this.i18n.t(`audioMissingTitle`),message:this.i18n.t(`audioMissingMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:e&&n.has(e)?{title:this.i18n.t(`audioSilentTitle`),message:this.i18n.t(`audioSilentMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:e&&r.has(e)?{title:this.i18n.t(`audioProcessingErrorTitle`),message:this.i18n.t(`audioProcessingErrorMessage`),retryLabel:this.i18n.t(`audioMissingRetry`)}:{title:this.i18n.t(`audioErrorTitle`),message:this.i18n.t(`audioErrorMessage`),retryLabel:this.i18n.t(`audioErrorRetry`)}}resolveCameraOverlayCopy(e){switch(e){case`camera.in-use`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraInUse`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.not-found`:case`camera.overconstrained`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraNotFound`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.permission-denied`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraPermissionDenied`),retryLabel:this.i18n.t(`errorRetry`)};case`camera.timeout`:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraTimeout`),retryLabel:this.i18n.t(`errorRetry`)};default:return{title:this.i18n.t(`cameraErrorTitle`),message:this.i18n.t(`cameraErrorMessage`),retryLabel:this.i18n.t(`errorRetry`)}}}resolveRecordingOverlayCopy(e){switch(e){case`recording.codec-unsupported`:return{title:this.i18n.t(`recordingCodecUnsupportedTitle`),message:this.i18n.t(`recordingCodecUnsupportedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.post-recording-transcode-fallback`:return{title:this.i18n.t(`recordingServerTranscodeFallbackTitle`),message:this.i18n.t(`recordingServerTranscodeFallbackMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.track-ended`:return{title:this.i18n.t(`recordingTrackEndedTitle`),message:this.i18n.t(`recordingTrackEndedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.finalize-timeout-low-resource`:return{title:this.i18n.t(`recordingFinalizeTimeoutTitle`),message:this.i18n.t(`recordingFinalizeTimeoutMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.not-started-state-race`:return{title:this.i18n.t(`recordingStateRaceTitle`),message:this.i18n.t(`recordingStateRaceMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.no-video-frames`:return{title:this.i18n.t(`recordingNoFramesTitle`),message:this.i18n.t(`recordingNoFramesMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};case`recording.unsupported-device`:return{title:this.i18n.t(`recordingUnsupportedTitle`),message:this.i18n.t(`recordingUnsupportedMessage`),retryLabel:this.i18n.t(`recordingPipelineRetry`)};default:return{title:this.i18n.t(`genericErrorTitle`),message:this.i18n.t(`genericErrorMessage`),retryLabel:this.i18n.t(`errorRetry`)}}}renderMobileIndicators(e){this.mobileManager?.isModalOpen&&(this.toggleDisplay(`#mobileRecIndicator`,e),this.toggleDisplay(`#mobileTimerBadge`,e),this.setText(`#mobileTimer`,this.state.timer))}toggleDisplay(e,t){let n=this.queryMobileElement(e);if(!n)return;if(!t){n.style.display=`none`;return}let r=n.tagName===`BUTTON`,i=e.includes(`row`)||e.includes(`controls`)||e.includes(`Overlay`)||e.includes(`Indicator`)||e.includes(`Timer`)||e.includes(`Bars`),a=`block`;r&&(a=`inline-flex`),!r&&i&&(a=`flex`),n.style.display=a}setText(e,t){let n=this.queryMobileElement(e);n&&(n.textContent=t)}async startPreview(){if(this.controller&&!this.isStartingPreview){this.isStartingPreview=!0;try{if(!await this.resolveCanStartStreamFromPermissionFlow())return;await this.controller.startStream(),this.updateState({stream:this.controller.getStream(),isAudioReady:this.controller.isAudioReady()}),this.clearBrowserUnsupportedState(),this.audioStatusUnsub&&=(this.audioStatusUnsub(),null),this.audioStatusUnsub=this.controller.getStreamManager().on(`audiostatuschange`,({status:e})=>{this.updateState({isAudioReady:e===`acquired`,hasAudioFailed:e===`failed`})})}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)}),this.overlayPhase=`hidden`,this.renderPermissionFlow()}finally{this.isStartingPreview=!1}}}getPermissionFlowTranslations(){return{title:this.i18n.t(`permissionFlowTitle`),cameraTitle:this.i18n.t(`permissionFlowCameraTitle`),microphoneTitle:this.i18n.t(`permissionFlowMicrophoneTitle`),cameraLabel:this.i18n.t(`permissionFlowCameraLabel`),microphoneLabel:this.i18n.t(`permissionFlowMicrophoneLabel`),statusPending:this.i18n.t(`permissionFlowStatusPending`),statusGranted:this.i18n.t(`permissionFlowStatusGranted`),statusDenied:this.i18n.t(`permissionFlowStatusDenied`),statusRequesting:this.i18n.t(`permissionFlowStatusRequesting`),allowCamera:this.i18n.t(`permissionFlowAllowCamera`),allowMicrophone:this.i18n.t(`permissionFlowAllowMicrophone`),retry:this.i18n.t(`permissionFlowRetry`),recoveryTitle:this.i18n.t(`permissionFlowRecoveryTitle`),recoveryInstructions:this.i18n.t(`permissionFlowRecoveryInstructions`),connecting:this.i18n.t(`permissionFlowConnecting`)}}updatePermissionFlowSnapshot(e){this.permissionFlowSnapshot=e,this.updateOverlayPhase(),this.renderPermissionFlow(),this.getCanStartStreamFromPermissionFlow(e)&&!this.state.stream&&!this.isStartingPreview&&!this.mobileManager&&setTimeout(()=>this.startPreview(),100)}updateOverlayPhase(){let e=this.permissionFlowSnapshot;if(e.step===`checking`||e.step===`awaiting-user`||e.step===`blocked`){this.overlayPhase=`active`;return}if(e.step===`ready`||e.isComplete){if(this.overlayPhase===`active`){this.state.isVideoLoaded?this.startOverlayFadeOut():this.overlayPhase=`loading`;return}this.overlayPhase===`loading`&&this.state.isVideoLoaded&&this.startOverlayFadeOut()}}startOverlayFadeOut(){this.overlayPhase=`fading`,this.renderPermissionFlow(),this.overlayFadeTimeoutId!==null&&clearTimeout(this.overlayFadeTimeoutId),this.overlayFadeTimeoutId=setTimeout(()=>{this.overlayPhase=`hidden`,this.overlayFadeTimeoutId=null,this.renderPermissionFlow()},600)}async initializePermissionFlow(){this.cleanupPermissionFlow();let e=`en`;this.lang===`es`&&(e=`es`),this.permissionFlowOrchestrator=new zn(Rn(),{callbacks:{onChange:e=>{this.updatePermissionFlowSnapshot(e)},onComplete:e=>{this.updatePermissionFlowSnapshot(e)}},language:e});let t=await this.permissionFlowOrchestrator.initialize();this.updatePermissionFlowSnapshot(t)}cleanupPermissionFlow(){this.overlayFadeTimeoutId!==null&&(clearTimeout(this.overlayFadeTimeoutId),this.overlayFadeTimeoutId=null),this.overlayPhase=`hidden`;let e=Vw(hE,this.getPermissionFlowTranslations(),!1);this.permissionFlowElements&&Jw(e,this.permissionFlowElements),this.permissionFlowOrchestrator&&=(this.permissionFlowOrchestrator.destroy(),null),this.permissionFlowSnapshot=hE,this.isStartingPreview=!1}async requestPermissionCurrentStep(){if(!this.permissionFlowOrchestrator)return;let e=await this.permissionFlowOrchestrator.requestCurrentStep();this.updatePermissionFlowSnapshot(e)}async retryPermissionCurrentStep(){if(!this.permissionFlowOrchestrator)return;let e=await this.permissionFlowOrchestrator.retryCurrentStep();this.updatePermissionFlowSnapshot(e)}getCanStartStreamFromPermissionFlow(e){return!(!e.isComplete||e.step!==`ready`)}async resolveCanStartStreamFromPermissionFlow(){if(this.permissionFlowOrchestrator||await this.initializePermissionFlow(),!this.permissionFlowOrchestrator)return!1;if(this.getCanStartStreamFromPermissionFlow(this.permissionFlowSnapshot))return!0;let e=await this.permissionFlowOrchestrator.requestCurrentStep();return this.updatePermissionFlowSnapshot(e),this.getCanStartStreamFromPermissionFlow(e)}renderPermissionFlow(){if(!this.permissionFlowElements)return;let e=this.overlayPhase===`fading`,t=Vw(this.permissionFlowSnapshot,this.getPermissionFlowTranslations(),e);this.overlayPhase===`hidden`&&(t.isVisible=!1),Jw(t,this.permissionFlowElements,{onAllow:()=>{this.requestPermissionCurrentStep().catch(e=>{this.updateState({error:i(e)})})},onRetry:()=>{this.retryPermissionCurrentStep().catch(e=>{this.updateState({error:i(e)})})}})}stopPreview(){if(!this.controller)return;this.stopAudioAnalysis();let e=this.controller.getStream();if(e)for(let t of e.getTracks())t.stop();this.controller.getStreamManager().stopStream(),this.updateState({stream:null,error:null,errorCode:null,canRetry:!1,browserName:null,browserVersion:null})}renderMobile(){if(!this.mobileManager)return;let e=this.mobileManager.portal;if(!this.mobileManager.isModalOpen){this.innerHTML=GT(this.i18n),this.setupMobileLandingListeners(),sE();return}let t=JT(this.i18n),n=KT(this.i18n,this.mobileManager.canCloseModal,t);e.render(n),this.setupMobileModalListeners(),this.setupEventListeners(),this.cacheUiElements(),this.handleStreamUpdate(this.state.stream),this.render(),sE()}queryMobileElement(e){return this.mobileManager?.isModalOpen&&this.mobileManager.portal.isActive?this.mobileManager.portal.querySelector(e):this.querySelector(e)}getQueryRoot(){return this.mobileManager?.isModalOpen&&this.mobileManager.portal.isActive?this.mobileManager.portal:this}cacheUiElements(){let e=this.getQueryRoot();this.previewContentElements=$w(e),this.recordingControlsElements=hT(e),this.videoPreviewElements={previewSkeleton:this.previewContentElements.previewSkeleton,videoPreview:this.previewContentElements.videoPreview},this.audioBarsContainer=this.previewContentElements.audioLevelBars,this.overlayElements={uploadOverlay:e.querySelector(`#uploadProgressOverlay`),uploadFill:e.querySelector(`#uploadProgressFill`),uploadText:e.querySelector(`#uploadProgressText`),transitionOverlay:e.querySelector(`#sourceTransitionOverlay`),transitionMessage:e.querySelector(`#transitionMessage`)},this.settingsPanelElement=e.querySelector(`#settingsPanel`),this.permissionFlowElements=Iw(e)}setupMobileLandingListeners(){this.querySelector(`#btnMobileOpenCamera`)?.addEventListener(`click`,()=>this.mobileManager?.openModal())}setupMobileModalListeners(){this.queryMobileElement(`#btnMobileCloseModal`)?.addEventListener(`click`,()=>this.mobileManager?.closeModal())}handleCameraChange(e){return this.handleDeviceChange(e,`camera`)}handleMicChange(e){return this.handleDeviceChange(e,`mic`)}async handleDeviceChange(e,t){if(!this.controller)return;let n=pw(this.controller,e);t===`mic`&&(n=mw(this.controller,e)),await n.then(e=>{this.updateState({stream:e})}).catch(e=>{this.updateState({error:i(e)})});let r=this.state.devices;t===`camera`&&(r={...this.state.devices,selectedCamera:e}),t===`mic`&&(r={...this.state.devices,selectedMic:e}),this.updateState({devices:r})}async handleRecord(){if(this.controller&&!this.isProcessingRecording())try{this.updateState({configError:null,audioWarning:null}),this.clearAudioWarningAutoDismiss(),await hw(this.controller,bw)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({configError:Error(i(e)),error:i(e)})}}async processRecordingBlob(e){if(!this.isProcessingBlob){this.isProcessingBlob=!0;try{if(this.isDemo){this.updateState({recordedBlob:e});return}if(!this.uploadService)throw Error(`Upload service not ready`);let t=`recording-${Date.now()}.mp4`;this.updateState({transcodingProgress:null,uploadProgress:0});try{let n=await this.uploadService.uploadVideo(e,{apiKey:this.config.apiKey||``,backendUrl:this.config.backendUrl||``,filename:t,userMetadata:this.config.userMetadata,onProgress:e=>{this.updateState({uploadProgress:e})}});this.updateState({uploadProgress:null,transcodingProgress:null}),this.dispatchEvent(new CustomEvent(`upload-complete`,{detail:n}))}catch(e){throw this.updateState({uploadProgress:null,transcodingProgress:null}),e}}finally{this.isProcessingBlob=!1}}}isProcessingRecording(){return this.isProcessingBlob||this.state.uploadProgress!==null||this.state.transcodingProgress!==null}isStopBlockedByMinimumTime(){let e=this.state.recordingState===Sw||this.state.isPaused;return fE(this.config.minTimeRecord,this.state.timer,e)}async stopRecording(){if(!this.controller)return null;if(this.isStopBlockedByMinimumTime())throw pE();let e=await gw(this.controller,this.isDemo,()=>{},()=>{});return e&&await this.processRecordingBlob(e),e}async handleStop(){if(!this.isStopBlockedByMinimumTime())try{await this.stopRecording()}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}}handlePauseToggle(){this.controller&&(this.state.isPaused&&vw(this.controller),this.state.isPaused||_w(this.controller),this.updateState({isPaused:this.controller.isPaused()}))}handleDownload(){this.state.recordedBlob&&MT(this.state.recordedBlob)}handleMute(){this.controller&&(jT(this.controller),this.updateState({isMuted:this.controller.getIsMuted()}))}async handleSwitch(){if(!this.controller)return;let e=this.controller.getCurrentSourceType(),t=bw;e===bw&&(t=xw),e===xw&&(t=bw);try{await yw(this.controller,t)}catch(e){this.applyBrowserUnsupportedStateFromError(e),this.updateState({error:i(e)})}}setupEventListeners(){let e=(e,t)=>{let n=this.queryMobileElement(e);n&&n.addEventListener(`click`,t)};e(`#btnRecord`,()=>this.handleRecord()),e(`#btnStop`,()=>this.handleStop()),e(`#btnPause`,()=>this.handlePauseToggle()),e(`#btnDownload`,()=>this.handleDownload()),e(`#btnMute`,()=>this.handleMute()),e(`#btnSwitchSource`,()=>this.handleSwitch());let t=this.queryMobileElement(`#startCameraArea`);t&&t.addEventListener(`click`,()=>this.startPreview());let n=this.queryMobileElement(`#btnSettings`),r=this.queryMobileElement(`#settingsPanel`);n&&r&&n.addEventListener(`click`,()=>{let e=!this.state.showSettings;this.updateState({showSettings:e}),e&&this.populateSettings()});let i=this.queryMobileElement(`#btnSettingsBack`);i&&r&&i.addEventListener(`click`,()=>{}),this.setupSettingsListeners()}setupSettingsListeners(){let e=this.queryMobileElement(`#btnCameraMenu`);e&&e.addEventListener(`click`,()=>this.navigateSettings(`camera`));let t=this.queryMobileElement(`#btnMicMenu`);t&&t.addEventListener(`click`,()=>this.navigateSettings(`microphone`));let n=this.queryMobileElement(`#btnSettingsBack`);n&&n.addEventListener(`click`,e=>{e.stopPropagation(),this.settingsView!==`main`&&this.navigateSettings(`main`)})}navigateSettings(e){e===`main`?this.slideDirection=`left`:this.slideDirection=`right`,this.settingsView=e,this.renderSettings(),setTimeout(()=>{this.slideDirection=`none`,this.renderSettings()},300)}renderSettings(){this.updateSettingsContent(),this.renderSettingsView()}updateSettingsContent(){let e=this.queryMobileElement(`#settingsContent`);e&&(e.classList.remove(`vidtreo-slide-left`,`vidtreo-slide-right`,`vidtreo-slide-none`),this.slideDirection!==`none`&&e.classList.add(`vidtreo-slide-${this.slideDirection}`))}renderSettingsView(){let e=this.queryMobileElement(`#settingsMain`),t=this.queryMobileElement(`#cameraList`),n=this.queryMobileElement(`#micList`),r=this.queryMobileElement(`#btnSettingsBack`);e&&(e.style.display=`none`),t&&(t.style.display=`none`),n&&(n.style.display=`none`),r&&(r.style.display=`none`),this.settingsView===`main`&&this.renderSettingsMain(e,r),this.settingsView===`camera`&&this.renderSettingsCamera(t,r),this.settingsView===`microphone`&&this.renderSettingsMicrophone(n,r)}renderSettingsMain(e,t){e&&(e.style.display=`flex`),t&&(t.style.display=`none`),this.updateCurrentDeviceLabels()}updateCurrentDeviceLabels(){let e=this.state.devices.cameras.filter(e=>e.deviceId&&e.deviceId.trim()!==``),t=this.state.devices.microphones.filter(e=>e.deviceId&&e.deviceId.trim()!==``),n=e.find(e=>e.deviceId===this.state.devices.selectedCamera),r=t.find(e=>e.deviceId===this.state.devices.selectedMic),i=n?.label||e[0]?.label||`Camera`,a=r?.label||t[0]?.label||`Microphone`;this.setText(`#currentCameraName`,i),this.setText(`#currentMicName`,a)}renderSettingsCamera(e,t){e&&(e.style.display=`flex`,this.renderDeviceList(e,this.state.devices.cameras,this.state.devices.selectedCamera,`camera`));let n=this.queryMobileElement(`.vidtreo-settings-title`),r=this.queryMobileElement(`.vidtreo-settings-back-icon`);t&&(t.style.display=`flex`,t.style.cursor=`pointer`,t.onclick=()=>this.navigateSettings(`main`)),n&&(n.textContent=`Camera`),r&&(r.style.display=`flex`)}renderSettingsMicrophone(e,t){e&&(e.style.display=`flex`,this.renderDeviceList(e,this.state.devices.microphones,this.state.devices.selectedMic,`mic`));let n=this.queryMobileElement(`.vidtreo-settings-title`),r=this.queryMobileElement(`.vidtreo-settings-back-icon`);t&&(t.style.display=`flex`,t.style.cursor=`pointer`,t.onclick=()=>this.navigateSettings(`main`)),n&&(n.textContent=`Microphone`),r&&(r.style.display=`flex`)}renderDeviceList(e,t,n,r){if(!t||t.length===0){e.innerHTML=`<div class="vidtreo-device-empty">No devices found</div>`;return}e.innerHTML=``;for(let i of t){let t=document.createElement(`button`);t.className=`vidtreo-device-option`;let a=i.deviceId===n,o=`<span class="vidtreo-device-checkmark-placeholder"></span>`;a&&(o=`<i class="ph-fill ph-check vidtreo-device-checkmark" style="display: flex; font-size: 20px;"></i>`);let s=i.label;s||=`Device ${i.deviceId.slice(0,8)}`,t.innerHTML=`
|
|
13395
13395
|
<div class="vidtreo-device-option-check-container">${o}</div>
|
|
13396
13396
|
<span class="vidtreo-device-option-label">${s}</span>
|
|
13397
|
-
`,t.onclick=()=>{r===`camera`&&this.handleCameraChange(i.deviceId),r===`mic`&&this.handleMicChange(i.deviceId),this.navigateSettings(`main`)},e.appendChild(t)}}populateSettings(){this.settingsView=`main`,this.slideDirection=`none`,this.renderSettings()}};return customElements.get(`vidtreo-recorder`)||customElements.define(`vidtreo-recorder`,
|
|
13397
|
+
`,t.onclick=()=>{r===`camera`&&this.handleCameraChange(i.deviceId),r===`mic`&&this.handleMicChange(i.deviceId),this.navigateSettings(`main`)},e.appendChild(t)}}populateSettings(){this.settingsView=`main`,this.slideDirection=`none`,this.renderSettings()}};return customElements.get(`vidtreo-recorder`)||customElements.define(`vidtreo-recorder`,_E),e.VidtreoRecorder=_E,e})({});
|