/*! * Copyright (c) 2026-present, Vanilagy and contributors * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ var Tu=Object.create;var so=Object.defineProperty;var Su=Object.getOwnPropertyDescriptor;var xu=Object.getOwnPropertyNames;var Cu=Object.getPrototypeOf,Pu=Object.prototype.hasOwnProperty;var Au=(i,t)=>()=>(t||i((t={exports:{}}).exports,t),t.exports);var Iu=(i,t,e,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of xu(t))!Pu.call(i,n)&&n!==e&&so(i,n,{get:()=>t[n],enumerable:!(r=Su(t,n))||r.enumerable});return i};var oo=(i,t,e)=>(e=i!=null?Tu(Cu(i)):{},Iu(t||!i||!i.__esModule?so(e,"default",{value:i,enumerable:!0}):e,i));var Ts=Au(()=>{});function p(i){if(!i)throw new Error("Assertion failed.")}var _t=i=>{let t=(i%360+360)%360;if(t===0||t===90||t===180||t===270)return t;throw new Error(`Invalid rotation ${i}.`)},K=i=>i&&i[i.length-1],Kt=i=>i>=0&&i<2**32,V=class i{constructor(t){this.bytes=t;this.pos=0}seekToByte(t){this.pos=8*t}readBit(){let t=Math.floor(this.pos/8),e=this.bytes[t]??0,r=7-(this.pos&7),n=(e&1<>r;return this.pos++,n}readBits(t){if(t===1)return this.readBit();let e=0;for(let r=0;r>r-n-1<{let t=0;for(;i.readBits(1)===0&&t<32;)t++;if(t>=32)throw new Error("Invalid exponential-Golomb code.");return(1<{let t=I(i);return(t&1)===0?-(t>>1):t+1>>1},uo=(i,t,e,r)=>{for(let n=t;n>e-n-1<i.constructor===Uint8Array?i:ArrayBuffer.isView(i)?new Uint8Array(i.buffer,i.byteOffset,i.byteLength):new Uint8Array(i),D=i=>i.constructor===DataView?i:ArrayBuffer.isView(i)?new DataView(i.buffer,i.byteOffset,i.byteLength):new DataView(i),me=new TextDecoder,X=new TextEncoder,Ft=i=>{for(let t=0;t255)return!1;return!0},Ma=i=>Object.fromEntries(Object.entries(i).map(([t,e])=>[e,t])),st={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12},Gt=Ma(st),ot={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18},Qt=Ma(ot),ct={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9},$t=Ma(ct),Hi=i=>!!i&&!!i.primaries&&!!i.transfer&&!!i.matrix&&i.fullRange!==void 0,hr=i=>i instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&i instanceof SharedArrayBuffer||ArrayBuffer.isView(i),Pe=class{constructor(){this.currentPromise=Promise.resolve();this.pending=0}async acquire(){let t,e=new Promise(n=>{let a=!1;t=()=>{a||(n(),this.pending--,a=!0)}}),r=this.currentPromise;return this.currentPromise=e,this.pending++,await r,t}},Ra=i=>[...i].map(t=>t.toString(16).padStart(2,"0")).join(""),Ba=i=>(i=i>>1&1431655765|(i&1431655765)<<1,i=i>>2&858993459|(i&858993459)<<2,i=i>>4&252645135|(i&252645135)<<4,i=i>>8&16711935|(i&16711935)<<8,i=i>>16&65535|(i&65535)<<16,i>>>0),ut=(i,t,e)=>{let r=0,n=i.length-1,a=-1;for(;r<=n;){let s=r+n>>1,o=e(i[s]);o===t?(a=s,n=s-1):o{let r=0,n=i.length-1,a=-1;for(;r<=n;){let s=r+(n-r+1)/2|0;e(i[s])<=t?(a=s,r=s+1):n=s-1}return a},Da=(i,t,e)=>{let r=N(i,e(t),e);i.splice(r+1,0,t)},Y=()=>{let i,t;return{promise:new Promise((r,n)=>{i=r,t=n}),resolve:i,reject:t}};var Oa=(i,t)=>{for(let e=i.length-1;e>=0;e--)if(t(i[e]))return i[e]},gr=(i,t)=>{for(let e=i.length-1;e>=0;e--)if(t(i[e]))return e;return-1},lo=async function*(i){Symbol.iterator in i?yield*i[Symbol.iterator]():yield*i[Symbol.asyncIterator]()},mo=i=>{if(!(Symbol.iterator in i)&&!(Symbol.asyncIterator in i))throw new TypeError("Argument must be an iterable or async iterable.")},J=i=>{throw new Error(`Unexpected value: ${i}`)},Xt=(i,t,e)=>{let r=i.getUint8(t),n=i.getUint8(t+1),a=i.getUint8(t+2);return e?r|n<<8|a<<16:r<<16|n<<8|a},fo=(i,t,e)=>Xt(i,t,e)<<8>>8,Yt=(i,t,e,r)=>{e=e>>>0,e=e&16777215,r?(i.setUint8(t,e&255),i.setUint8(t+1,e>>>8&255),i.setUint8(t+2,e>>>16&255)):(i.setUint8(t,e>>>16&255),i.setUint8(t+1,e>>>8&255),i.setUint8(t+2,e&255))},po=(i,t,e,r)=>{e=ae(e,-8388608,8388607),e<0&&(e=e+16777216&16777215),Yt(i,t,e,r)},ho=(i,t,e,r)=>{r?(i.setUint32(t+0,e,!0),i.setInt32(t+4,Math.floor(e/2**32),!0)):(i.setInt32(t+0,Math.floor(e/2**32),!0),i.setUint32(t+4,e,!0))},Yr=(i,t)=>({async next(){let e=await i.next();return e.done?{value:void 0,done:!0}:{value:t(e.value),done:!1}},return(){return i.return()},throw(e){return i.throw(e)},[Symbol.asyncIterator](){return this}}),ae=(i,t,e)=>Math.max(t,Math.min(e,i)),ee="und",dt=i=>{let t=Math.round(i);return Math.abs(i/t-1)<10*Number.EPSILON?t:i},Zr=(i,t)=>Math.round(i/t)*t,qi=(i,t)=>Math.floor(i/t)*t,go=i=>{let t=0;for(;i;)t++,i>>=1;return t},vu=/^[a-z]{3}$/,lt=i=>vu.test(i),Ye=1e6*(1+Number.EPSILON),Ua=(i,t)=>{let e={...i,...t};if(i.headers||t.headers){let r=i.headers?co(i.headers):{},n=t.headers?co(t.headers):{},a={...r};Object.entries(n).forEach(([s,o])=>{let c=Object.keys(a).find(u=>u.toLowerCase()===s.toLowerCase());c&&delete a[c],a[s]=o}),e.headers=a}return e},co=i=>{if(i instanceof Headers){let t={};return i.forEach((e,r)=>{t[r]=e}),t}if(Array.isArray(i)){let t={};return i.forEach(([e,r])=>{t[e]=r}),t}return i},Va=async(i,t,e,r,n)=>{let a=0;for(;;)try{return await i(t,e)}catch(s){if(n())throw s;a++;let o=r(a,s,t);if(o===null)throw s;if(console.error("Retrying failed fetch. Error:",s),!Number.isFinite(o)||o<0)throw new TypeError("Retry delay must be a non-negative finite number.");if(o>0&&await new Promise(c=>setTimeout(c,1e3*o)),n())throw s}},bo=(i,t)=>{let e=i<0?-1:1;i=Math.abs(i);let r=0,n=1,a=1,s=0,o=i;for(;;){let c=Math.floor(o),u=c*a+r,d=c*s+n;if(d>t)return{numerator:e*a,denominator:s};if(r=a,n=s,a=u,s=d,o=1/(o-c),!isFinite(o))break}return{numerator:e*a,denominator:s}},Et=class{constructor(){this.currentPromise=Promise.resolve()}call(t){return this.currentPromise=this.currentPromise.then(t)}},va=null,Mt=()=>va!==null?va:va=!!(typeof navigator<"u"&&(navigator.vendor?.match(/apple/i)||/AppleWebKit/.test(navigator.userAgent)&&!/Chrome/.test(navigator.userAgent)||/\b(iPad|iPhone|iPod)\b/.test(navigator.userAgent))),Ea=null,Ze=()=>Ea!==null?Ea:Ea=typeof navigator<"u"&&navigator.userAgent?.includes("Firefox"),_a=null,Jr=()=>_a!==null?_a:_a=!!(typeof navigator<"u"&&(navigator.vendor?.includes("Google Inc")||/Chrome/.test(navigator.userAgent))),Fa=null,ko=()=>{if(Fa!==null)return Fa;if(typeof navigator>"u")return null;let i=/\bChrome\/(\d+)/.exec(navigator.userAgent);return i?Fa=Number(i[1]):null},Zt=(i,t)=>i!==-1?i:t,ji=(i,t,e,r)=>i<=r&&e<=t,ze=function*(i){for(let t in i){let e=i[t];e!==void 0&&(yield{key:t,value:e})}},yo=i=>{switch(i.toLowerCase()){case"image/jpeg":case"image/jpg":return".jpg";case"image/png":return".png";case"image/gif":return".gif";case"image/webp":return".webp";case"image/bmp":return".bmp";case"image/svg+xml":return".svg";case"image/tiff":return".tiff";case"image/avif":return".avif";case"image/x-icon":case"image/vnd.microsoft.icon":return".ico";default:return null}},wo=i=>{let t=atob(i),e=new Uint8Array(t.length);for(let r=0;r{let t="";for(let e=0;e{if(i.length!==t.length)return!1;for(let e=0;e{Symbol.dispose??=Symbol("Symbol.dispose")},Rt=i=>typeof i=="number"&&!Number.isNaN(i);var Oe=class{constructor(t,e){this.data=t;this.mimeType=e;if(!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(typeof e!="string")throw new TypeError("mimeType must be a string.")}},Bt=class{constructor(t,e,r,n){this.data=t;this.mimeType=e;this.name=r;this.description=n;if(!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(e!==void 0&&typeof e!="string")throw new TypeError("mimeType, when provided, must be a string.");if(r!==void 0&&typeof r!="string")throw new TypeError("name, when provided, must be a string.");if(n!==void 0&&typeof n!="string")throw new TypeError("description, when provided, must be a string.")}},ei=i=>{if(!i||typeof i!="object")throw new TypeError("tags must be an object.");if(i.title!==void 0&&typeof i.title!="string")throw new TypeError("tags.title, when provided, must be a string.");if(i.description!==void 0&&typeof i.description!="string")throw new TypeError("tags.description, when provided, must be a string.");if(i.artist!==void 0&&typeof i.artist!="string")throw new TypeError("tags.artist, when provided, must be a string.");if(i.album!==void 0&&typeof i.album!="string")throw new TypeError("tags.album, when provided, must be a string.");if(i.albumArtist!==void 0&&typeof i.albumArtist!="string")throw new TypeError("tags.albumArtist, when provided, must be a string.");if(i.trackNumber!==void 0&&(!Number.isInteger(i.trackNumber)||i.trackNumber<=0))throw new TypeError("tags.trackNumber, when provided, must be a positive integer.");if(i.tracksTotal!==void 0&&(!Number.isInteger(i.tracksTotal)||i.tracksTotal<=0))throw new TypeError("tags.tracksTotal, when provided, must be a positive integer.");if(i.discNumber!==void 0&&(!Number.isInteger(i.discNumber)||i.discNumber<=0))throw new TypeError("tags.discNumber, when provided, must be a positive integer.");if(i.discsTotal!==void 0&&(!Number.isInteger(i.discsTotal)||i.discsTotal<=0))throw new TypeError("tags.discsTotal, when provided, must be a positive integer.");if(i.genre!==void 0&&typeof i.genre!="string")throw new TypeError("tags.genre, when provided, must be a string.");if(i.date!==void 0&&(!(i.date instanceof Date)||Number.isNaN(i.date.getTime())))throw new TypeError("tags.date, when provided, must be a valid Date.");if(i.lyrics!==void 0&&typeof i.lyrics!="string")throw new TypeError("tags.lyrics, when provided, must be a string.");if(i.images!==void 0){if(!Array.isArray(i.images))throw new TypeError("tags.images, when provided, must be an array.");for(let t of i.images){if(!t||typeof t!="object")throw new TypeError("Each image in tags.images must be an object.");if(!(t.data instanceof Uint8Array))throw new TypeError("Each image.data must be a Uint8Array.");if(typeof t.mimeType!="string")throw new TypeError("Each image.mimeType must be a string.");if(!["coverFront","coverBack","unknown"].includes(t.kind))throw new TypeError("Each image.kind must be 'coverFront', 'coverBack', or 'unknown'.")}}if(i.comment!==void 0&&typeof i.comment!="string")throw new TypeError("tags.comment, when provided, must be a string.");if(i.raw!==void 0){if(!i.raw||typeof i.raw!="object")throw new TypeError("tags.raw, when provided, must be an object.");for(let t of Object.values(i.raw))if(t!==null&&typeof t!="string"&&!(t instanceof Uint8Array)&&!(t instanceof Oe)&&!(t instanceof Bt))throw new TypeError("Each value in tags.raw must be a string, Uint8Array, RichImageData, AttachedFile, or null.")}},mt=i=>i.title===void 0&&i.description===void 0&&i.artist===void 0&&i.album===void 0&&i.albumArtist===void 0&&i.trackNumber===void 0&&i.tracksTotal===void 0&&i.discNumber===void 0&&i.discsTotal===void 0&&i.genre===void 0&&i.date===void 0&&i.lyrics===void 0&&(!i.images||i.images.length===0)&&i.comment===void 0&&(i.raw===void 0||Object.keys(i.raw).length===0),we={default:!0,forced:!1,original:!1,commentary:!1,hearingImpaired:!1,visuallyImpaired:!1},xo=i=>{if(!i||typeof i!="object")throw new TypeError("disposition must be an object.");if(i.default!==void 0&&typeof i.default!="boolean")throw new TypeError("disposition.default must be a boolean.");if(i.forced!==void 0&&typeof i.forced!="boolean")throw new TypeError("disposition.forced must be a boolean.");if(i.original!==void 0&&typeof i.original!="boolean")throw new TypeError("disposition.original must be a boolean.");if(i.commentary!==void 0&&typeof i.commentary!="boolean")throw new TypeError("disposition.commentary must be a boolean.");if(i.hearingImpaired!==void 0&&typeof i.hearingImpaired!="boolean")throw new TypeError("disposition.hearingImpaired must be a boolean.");if(i.visuallyImpaired!==void 0&&typeof i.visuallyImpaired!="boolean")throw new TypeError("disposition.visuallyImpaired must be a boolean.")};var ce=["avc","hevc","vp9","av1","vp8"],Z=["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"],pt=["aac","opus","mp3","vorbis","flac","ac3","eac3"],ue=[...pt,...Z],_e=["webvtt"],ti=[{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}],Co=[{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}],ft=[{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}],Po=[{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}],Ao=".01.01.01.01.00",Io=".0.110.01.01.01.0",vo=(i,t,e,r)=>{if(i==="avc"){let a=Math.ceil(t/16)*Math.ceil(e/16),s=ti.find(l=>a<=l.maxMacroblocks&&r<=l.maxBitrate)??K(ti),o=s?s.level:0,c="64".padStart(2,"0"),u="00",d=o.toString(16).padStart(2,"0");return`avc1.${c}${u}${d}`}else if(i==="hevc"){let n="",s="6",o=t*e,c=Co.find(d=>o<=d.maxPictureSize&&r<=d.maxBitrate)??K(Co);return`hev1.${n}1.${s}.${c.tier}${c.level}.B0`}else{if(i==="vp8")return"vp8";if(i==="vp9"){let n="00",a=t*e,s=ft.find(c=>a<=c.maxPictureSize&&r<=c.maxBitrate)??K(ft);return`vp09.${n}.${s.level.toString().padStart(2,"0")}.08`}else if(i==="av1"){let a=t*e,s=Po.find(u=>a<=u.maxPictureSize&&r<=u.maxBitrate)??K(Po);return`av01.0.${s.level.toString().padStart(2,"0")}${s.tier}.08`}}throw new TypeError(`Unhandled codec '${i}'.`)},Eo=i=>{let t=i.split("."),e=Number(t[1]),r=Number(t[2]),n=Number(t[3]),a=t[4]?Number(t[4]):1;return[1,1,e,2,1,r,3,1,n,4,1,a]},Gi=i=>{let t=i.split("."),n=(1<<7)+1,a=Number(t[1]),s=t[2],o=Number(s.slice(0,-1)),c=(a<<5)+o,u=s.slice(-1)==="H"?1:0,l=Number(t[3])===8?0:1,m=0,f=t[4]?Number(t[4]):0,g=t[5]?Number(t[5][0]):1,b=t[5]?Number(t[5][1]):1,h=t[5]?Number(t[5][2]):0,y=(u<<7)+(l<<6)+(m<<5)+(f<<4)+(g<<3)+(b<<2)+h;return[n,c,y,0]},br=i=>{let{codec:t,codecDescription:e,colorSpace:r,avcCodecInfo:n,hevcCodecInfo:a,vp9CodecInfo:s,av1CodecInfo:o}=i;if(t==="avc"){if(p(i.avcType!==null),n){let c=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${i.avcType}.${Ra(c)}`}if(!e||e.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${i.avcType}.${Ra(e.subarray(1,4))}`}else if(t==="hevc"){let c,u,d,l,m,f;if(a)c=a.generalProfileSpace,u=a.generalProfileIdc,d=Ba(a.generalProfileCompatibilityFlags),l=a.generalTierFlag,m=a.generalLevelIdc,f=[...a.generalConstraintIndicatorFlags];else{if(!e||e.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=D(e),h=b.getUint8(1);c=h>>6&3,u=h&31,d=Ba(b.getUint32(2)),l=h>>5&1,m=b.getUint8(12),f=[];for(let y=0;y<6;y++)f.push(b.getUint8(6+y))}let g="hev1.";for(g+=["","A","B","C"][c]+u,g+=".",g+=d.toString(16).toUpperCase(),g+=".",g+=l===0?"L":"H",g+=m;f.length>0&&f[f.length-1]===0;)f.pop();return f.length>0&&(g+=".",g+=f.map(b=>b.toString(16).toUpperCase()).join(".")),g}else{if(t==="vp8")return"vp8";if(t==="vp9"){if(!s){let y=i.width*i.height,k=K(ft).level;for(let w of ft)if(y<=w.maxPictureSize){k=w.level;break}return`vp09.00.${k.toString().padStart(2,"0")}.08`}let c=s.profile.toString().padStart(2,"0"),u=s.level.toString().padStart(2,"0"),d=s.bitDepth.toString().padStart(2,"0"),l=s.chromaSubsampling.toString().padStart(2,"0"),m=s.colourPrimaries.toString().padStart(2,"0"),f=s.transferCharacteristics.toString().padStart(2,"0"),g=s.matrixCoefficients.toString().padStart(2,"0"),b=s.videoFullRangeFlag.toString().padStart(2,"0"),h=`vp09.${c}.${u}.${d}.${l}`;return h+=`.${m}.${f}.${g}.${b}`,h.endsWith(Ao)&&(h=h.slice(0,-Ao.length)),h}else if(t==="av1"){if(!o){let w=i.width*i.height,S=K(ft).level;for(let T of ft)if(w<=T.maxPictureSize){S=T.level;break}return`av01.0.${S.toString().padStart(2,"0")}M.08`}let c=o.profile,u=o.level.toString().padStart(2,"0"),d=o.tier?"H":"M",l=o.bitDepth.toString().padStart(2,"0"),m=o.monochrome?"1":"0",f=100*o.chromaSubsamplingX+10*o.chromaSubsamplingY+1*(o.chromaSubsamplingX&&o.chromaSubsamplingY?o.chromaSamplePosition:0),g=r?.primaries?st[r.primaries]:1,b=r?.transfer?ot[r.transfer]:1,h=r?.matrix?ct[r.matrix]:1,y=r?.fullRange?1:0,k=`av01.${c}.${u}${d}.${l}`;return k+=`.${m}.${f.toString().padStart(3,"0")}`,k+=`.${g.toString().padStart(2,"0")}`,k+=`.${b.toString().padStart(2,"0")}`,k+=`.${h.toString().padStart(2,"0")}`,k+=`.${y}`,k.endsWith(Io)&&(k=k.slice(0,-Io.length)),k}}throw new TypeError(`Unhandled codec '${t}'.`)},_o=(i,t,e)=>{if(i==="aac")return t>=2&&e<=24e3?"mp4a.40.29":e<=24e3?"mp4a.40.5":"mp4a.40.2";if(i==="mp3")return"mp3";if(i==="opus")return"opus";if(i==="vorbis")return"vorbis";if(i==="flac")return"flac";if(i==="ac3")return"ac-3";if(i==="eac3")return"ec-3";if(Z.includes(i))return i;throw new TypeError(`Unhandled codec '${i}'.`)},kr=i=>{let{codec:t,codecDescription:e,aacCodecInfo:r}=i;if(t==="aac"){if(!r)throw new TypeError("AAC codec info must be provided.");if(r.isMpeg2)return"mp4a.67";{let n;return r.objectType!==null?n=r.objectType:n=ht(e).objectType,`mp4a.40.${n}`}}else{if(t==="mp3")return"mp3";if(t==="opus")return"opus";if(t==="vorbis")return"vorbis";if(t==="flac")return"flac";if(t==="ac3")return"ac-3";if(t==="eac3")return"ec-3";if(t&&Z.includes(t))return t}throw new TypeError(`Unhandled codec '${t}'.`)},Ue=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Je=[-1,1,2,3,4,5,6,8],ht=i=>{if(!i||i.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let t=new V(i),e=t.readBits(5);e===31&&(e=32+t.readBits(6));let r=t.readBits(4),n=null;r===15?n=t.readBits(24):r=1&&a<=7&&(s=Je[a]),{objectType:e,frequencyIndex:r,sampleRate:n,channelConfiguration:a,numberOfChannels:s}},yr=i=>{let t=Ue.indexOf(i.sampleRate),e=null;t===-1&&(t=15,e=i.sampleRate);let r=Je.indexOf(i.numberOfChannels);if(r===-1)throw new TypeError(`Unsupported number of channels: ${i.numberOfChannels}`);let n=13;i.objectType>=32&&(n+=6),t===15&&(n+=24);let a=Math.ceil(n/8),s=new Uint8Array(a),o=new V(s);return i.objectType<32?o.writeBits(5,i.objectType):(o.writeBits(5,31),o.writeBits(6,i.objectType-32)),o.writeBits(4,t),t===15&&o.writeBits(24,e),o.writeBits(4,r),s},Ne=48e3,Fo=/^pcm-([usf])(\d+)+(be)?$/,be=i=>{if(p(Z.includes(i)),i==="ulaw")return{dataType:"ulaw",sampleSize:1,littleEndian:!0,silentValue:255};if(i==="alaw")return{dataType:"alaw",sampleSize:1,littleEndian:!0,silentValue:213};let t=Fo.exec(i);p(t);let e;t[1]==="u"?e="unsigned":t[1]==="s"?e="signed":e="float";let r=Number(t[2])/8,n=t[3]!=="be",a=i==="pcm-u8"?2**7:0;return{dataType:e,sampleSize:r,littleEndian:n,silentValue:a}},za=i=>i.startsWith("avc1")||i.startsWith("avc3")?"avc":i.startsWith("hev1")||i.startsWith("hvc1")?"hevc":i==="vp8"?"vp8":i.startsWith("vp09")?"vp9":i.startsWith("av01")?"av1":i.startsWith("mp4a.40")||i==="mp4a.67"?"aac":i==="mp3"||i==="mp4a.69"||i==="mp4a.6B"||i==="mp4a.6b"?"mp3":i==="opus"?"opus":i==="vorbis"?"vorbis":i==="flac"?"flac":i==="ac-3"||i==="ac3"?"ac3":i==="ec-3"||i==="eac3"?"eac3":i==="ulaw"?"ulaw":i==="alaw"?"alaw":Fo.test(i)?i:i==="webvtt"?"webvtt":null,Mo=i=>i==="avc"?{avc:{format:"avc"}}:i==="hevc"?{hevc:{format:"hevc"}}:{},Ro=i=>i==="aac"?{aac:{format:"aac"}}:i==="opus"?{opus:{format:"opus"}}:{},Eu=["avc1","avc3","hev1","hvc1","vp8","vp09","av01"],_u=/^(avc1|avc3)\.[0-9a-fA-F]{6}$/,Fu=/^(hev1|hvc1)\.(?:[ABC]?\d+)\.[0-9a-fA-F]{1,8}\.[LH]\d+(?:\.[0-9a-fA-F]{1,2}){0,6}$/,Mu=/^vp09(?:\.\d{2}){3}(?:(?:\.\d{2}){5})?$/,Ru=/^av01\.\d\.\d{2}[MH]\.\d{2}(?:\.\d\.\d{3}\.\d{2}\.\d{2}\.\d{2}\.\d)?$/,wr=i=>{if(!i)throw new TypeError("Video chunk metadata must be provided.");if(typeof i!="object")throw new TypeError("Video chunk metadata must be an object.");if(!i.decoderConfig)throw new TypeError("Video chunk metadata must include a decoder configuration.");if(typeof i.decoderConfig!="object")throw new TypeError("Video chunk metadata decoder configuration must be an object.");if(typeof i.decoderConfig.codec!="string")throw new TypeError("Video chunk metadata decoder configuration must specify a codec string.");if(!Eu.some(t=>i.decoderConfig.codec.startsWith(t)))throw new TypeError("Video chunk metadata decoder configuration codec string must be a valid video codec string as specified in the Mediabunny Codec Registry.");if(!Number.isInteger(i.decoderConfig.codedWidth)||i.decoderConfig.codedWidth<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedWidth (positive integer).");if(!Number.isInteger(i.decoderConfig.codedHeight)||i.decoderConfig.codedHeight<=0)throw new TypeError("Video chunk metadata decoder configuration must specify a valid codedHeight (positive integer).");if(i.decoderConfig.description!==void 0&&!hr(i.decoderConfig.description))throw new TypeError("Video chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(i.decoderConfig.colorSpace!==void 0){let{colorSpace:t}=i.decoderConfig;if(typeof t!="object")throw new TypeError("Video chunk metadata decoder configuration colorSpace, when provided, must be an object.");let e=Object.keys(st);if(t.primaries!=null&&!e.includes(t.primaries))throw new TypeError(`Video chunk metadata decoder configuration colorSpace primaries, when defined, must be one of ${e.join(", ")}.`);let r=Object.keys(ot);if(t.transfer!=null&&!r.includes(t.transfer))throw new TypeError(`Video chunk metadata decoder configuration colorSpace transfer, when defined, must be one of ${r.join(", ")}.`);let n=Object.keys(ct);if(t.matrix!=null&&!n.includes(t.matrix))throw new TypeError(`Video chunk metadata decoder configuration colorSpace matrix, when defined, must be one of ${n.join(", ")}.`);if(t.fullRange!=null&&typeof t.fullRange!="boolean")throw new TypeError("Video chunk metadata decoder configuration colorSpace fullRange, when defined, must be a boolean.")}if(i.decoderConfig.codec.startsWith("avc1")||i.decoderConfig.codec.startsWith("avc3")){if(!_u.test(i.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for AVC must be a valid AVC codec string as specified in Section 3.4 of RFC 6381.")}else if(i.decoderConfig.codec.startsWith("hev1")||i.decoderConfig.codec.startsWith("hvc1")){if(!Fu.test(i.decoderConfig.codec))throw new TypeError("Video chunk metadata decoder configuration codec string for HEVC must be a valid HEVC codec string as specified in Section E.3 of ISO 14496-15.")}else if(i.decoderConfig.codec.startsWith("vp8")){if(i.decoderConfig.codec!=="vp8")throw new TypeError('Video chunk metadata decoder configuration codec string for VP8 must be "vp8".')}else if(i.decoderConfig.codec.startsWith("vp09")){if(!Mu.test(i.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for VP9 must be a valid VP9 codec string as specified in Section "Codecs Parameter String" of https://www.webmproject.org/vp9/mp4/.')}else if(i.decoderConfig.codec.startsWith("av01")&&!Ru.test(i.decoderConfig.codec))throw new TypeError('Video chunk metadata decoder configuration codec string for AV1 must be a valid AV1 codec string as specified in Section "Codecs Parameter String" of https://aomediacodec.github.io/av1-isobmff/.')},Bu=["mp4a","mp3","opus","vorbis","flac","ulaw","alaw","pcm","ac-3","ec-3"],Ae=i=>{if(!i)throw new TypeError("Audio chunk metadata must be provided.");if(typeof i!="object")throw new TypeError("Audio chunk metadata must be an object.");if(!i.decoderConfig)throw new TypeError("Audio chunk metadata must include a decoder configuration.");if(typeof i.decoderConfig!="object")throw new TypeError("Audio chunk metadata decoder configuration must be an object.");if(typeof i.decoderConfig.codec!="string")throw new TypeError("Audio chunk metadata decoder configuration must specify a codec string.");if(!Bu.some(t=>i.decoderConfig.codec.startsWith(t)))throw new TypeError("Audio chunk metadata decoder configuration codec string must be a valid audio codec string as specified in the Mediabunny Codec Registry.");if(!Number.isInteger(i.decoderConfig.sampleRate)||i.decoderConfig.sampleRate<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid sampleRate (positive integer).");if(!Number.isInteger(i.decoderConfig.numberOfChannels)||i.decoderConfig.numberOfChannels<=0)throw new TypeError("Audio chunk metadata decoder configuration must specify a valid numberOfChannels (positive integer).");if(i.decoderConfig.description!==void 0&&!hr(i.decoderConfig.description))throw new TypeError("Audio chunk metadata decoder configuration description, when defined, must be an ArrayBuffer or an ArrayBuffer view.");if(i.decoderConfig.codec.startsWith("mp4a")&&i.decoderConfig.codec!=="mp4a.69"&&i.decoderConfig.codec!=="mp4a.6B"&&i.decoderConfig.codec!=="mp4a.6b"){if(!["mp4a.40.2","mp4a.40.02","mp4a.40.5","mp4a.40.05","mp4a.40.29","mp4a.67"].includes(i.decoderConfig.codec))throw new TypeError("Audio chunk metadata decoder configuration codec string for AAC must be a valid AAC codec string as specified in https://www.w3.org/TR/webcodecs-aac-codec-registration/.")}else if(i.decoderConfig.codec.startsWith("mp3")||i.decoderConfig.codec.startsWith("mp4a")){if(i.decoderConfig.codec!=="mp3"&&i.decoderConfig.codec!=="mp4a.69"&&i.decoderConfig.codec!=="mp4a.6B"&&i.decoderConfig.codec!=="mp4a.6b")throw new TypeError('Audio chunk metadata decoder configuration codec string for MP3 must be "mp3", "mp4a.69" or "mp4a.6B".')}else if(i.decoderConfig.codec.startsWith("opus")){if(i.decoderConfig.codec!=="opus")throw new TypeError('Audio chunk metadata decoder configuration codec string for Opus must be "opus".');if(i.decoderConfig.description&&i.decoderConfig.description.byteLength<18)throw new TypeError("Audio chunk metadata decoder configuration description, when specified, is expected to be an Identification Header as specified in Section 5.1 of RFC 7845.")}else if(i.decoderConfig.codec.startsWith("vorbis")){if(i.decoderConfig.codec!=="vorbis")throw new TypeError('Audio chunk metadata decoder configuration codec string for Vorbis must be "vorbis".');if(!i.decoderConfig.description)throw new TypeError("Audio chunk metadata decoder configuration for Vorbis must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-vorbis-codec-registration/.")}else if(i.decoderConfig.codec.startsWith("flac")){if(i.decoderConfig.codec!=="flac")throw new TypeError('Audio chunk metadata decoder configuration codec string for FLAC must be "flac".');if(!i.decoderConfig.description||i.decoderConfig.description.byteLength<42)throw new TypeError("Audio chunk metadata decoder configuration for FLAC must include a description, which is expected to adhere to the format described in https://www.w3.org/TR/webcodecs-flac-codec-registration/.")}else if(i.decoderConfig.codec.startsWith("ac-3")||i.decoderConfig.codec.startsWith("ac3")){if(i.decoderConfig.codec!=="ac-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for AC-3 must be "ac-3".')}else if(i.decoderConfig.codec.startsWith("ec-3")||i.decoderConfig.codec.startsWith("eac3")){if(i.decoderConfig.codec!=="ec-3")throw new TypeError('Audio chunk metadata decoder configuration codec string for EC-3 must be "ec-3".')}else if((i.decoderConfig.codec.startsWith("pcm")||i.decoderConfig.codec.startsWith("ulaw")||i.decoderConfig.codec.startsWith("alaw"))&&!Z.includes(i.decoderConfig.codec))throw new TypeError(`Audio chunk metadata decoder configuration codec string for PCM must be one of the supported PCM codecs (${Z.join(", ")}).`)},Qi=i=>{if(!i)throw new TypeError("Subtitle metadata must be provided.");if(typeof i!="object")throw new TypeError("Subtitle metadata must be an object.");if(!i.config)throw new TypeError("Subtitle metadata must include a config object.");if(typeof i.config!="object")throw new TypeError("Subtitle metadata config must be an object.");if(typeof i.config.description!="string")throw new TypeError("Subtitle metadata config description must be a string.")};var Du=[44100,48e3,32e3],$i=[-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],Dt=1483304551,Tr=1231971951,Xi=(i,t,e,r,n)=>t===0?0:t===1?Math.floor(144*e/(r<i===3?t===3?21:36:t===3?13:21,Jt=(i,t)=>{let e=i>>>24,r=i>>>16&255,n=i>>>8&255,a=i&255;if(e!==255&&r!==255&&n!==255&&a!==255)return{header:null,bytesAdvanced:4};if(e!==255)return{header:null,bytesAdvanced:1};if((r&224)!==224)return{header:null,bytesAdvanced:1};let s=0,o=0;r&16?s=r&8?0:1:(s=1,o=1);let c=r>>3&3,u=r>>1&3,d=n>>4&15,l=(n>>2&3)%3,m=n>>1&1,f=a>>6&3,g=a>>4&3,b=a>>3&1,h=a>>2&1,y=a&3,k=$i[s*16*4+u*16+d];if(k===-1)return{header:null,bytesAdvanced:1};let w=k*1e3,S=Du[l]>>s+o,T=Xi(s,u,w,S,m);if(t!==null&&t{let t=127,e=0,r=i;for(;(t^2147483647)!==0;)e=r&~t,e<<=1,e|=r&t,t=(t+1<<8)-1,r=e;return e},Yi=i=>{let t=2130706432,e=0;for(;t!==0;)e>>=1,e|=i&t,t>>=8;return e};var er=[48e3,44100,32e3],Na=[24e3,22050,16e3];var Ut=function*(i){let t=0,e=-1;for(;t=i.length-2)break;t=r;let n=0;if(t+3e&&(yield{offset:e,length:t-e}),e=t+n,t=e}e!==-1&&e{if(t.description){let n=(H(t.description)[4]&3)+1;return Zi(i,n)}else return Ut(i)},gt=i=>i&31,Ji=i=>{let t=[],e=i.length;for(let r=0;r{let t=i.reduce((n,a)=>n+La.byteLength+a.byteLength,0),e=new Uint8Array(t),r=0;for(let n of i)e.set(La,r),r+=La.byteLength,e.set(n,r),r+=n.byteLength;return e},Ha=(i,t)=>{let e=i.reduce((a,s)=>a+t+s.byteLength,0),r=new Uint8Array(e),n=0;for(let a of i){let s=new DataView(r.buffer,r.byteOffset,r.byteLength);switch(t){case 1:s.setUint8(n,a.byteLength);break;case 2:s.setUint16(n,a.byteLength,!1);break;case 3:Yt(s,n,a.byteLength,!1);break;case 4:s.setUint32(n,a.byteLength,!1);break}n+=t,r.set(a,n),n+=a.byteLength}return r},Uo=(i,t)=>{if(t.description){let n=(H(t.description)[4]&3)+1;return Ha(i,n)}else return en(i)},Sr=i=>{try{let t=[],e=[],r=[];for(let o of Ut(i)){let c=i.subarray(o.offset,o.offset+o.length),u=gt(c[0]);u===7?t.push(c):u===8?e.push(c):u===13&&r.push(c)}if(t.length===0||e.length===0)return null;let n=t[0],a=ri(n);p(a!==null);let s=a.profileIdc===100||a.profileIdc===110||a.profileIdc===122||a.profileIdc===144;return{configurationVersion:1,avcProfileIndication:a.profileIdc,profileCompatibility:a.constraintFlags,avcLevelIndication:a.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:t,pictureParameterSets:e,chromaFormat:s?a.chromaFormatIdc:null,bitDepthLumaMinus8:s?a.bitDepthLumaMinus8:null,bitDepthChromaMinus8:s?a.bitDepthChromaMinus8:null,sequenceParameterSetExt:s?r:null}}catch(t){return console.error("Error building AVC Decoder Configuration Record:",t),null}},Vo=i=>{let t=[];t.push(i.configurationVersion),t.push(i.avcProfileIndication),t.push(i.profileCompatibility),t.push(i.avcLevelIndication),t.push(252|i.lengthSizeMinusOne&3),t.push(224|i.sequenceParameterSets.length&31);for(let e of i.sequenceParameterSets){let r=e.byteLength;t.push(r>>8),t.push(r&255);for(let n=0;n>8),t.push(r&255);for(let n=0;n>8),t.push(r&255);for(let n=0;n{try{let t=D(i),e=0,r=t.getUint8(e++),n=t.getUint8(e++),a=t.getUint8(e++),s=t.getUint8(e++),o=t.getUint8(e++)&3,c=t.getUint8(e++)&31,u=[];for(let f=0;f{try{let t=new V(Ji(i));if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let r=t.readAlignedByte(),n=t.readAlignedByte(),a=t.readAlignedByte();I(t);let s=1,o=0,c=0,u=0;if((r===100||r===110||r===122||r===244||r===44||r===83||r===86||r===118||r===128)&&(s=I(t),s===3&&(u=t.readBits(1)),o=I(t),c=I(t),t.skipBits(1),t.readBits(1))){for(let E=0;E<(s!==3?8:12);E++)if(t.readBits(1)){let z=E<6?16:64,j=8,G=8;for(let $=0;$$.level>=a)??K(ti),G=Math.min(Math.floor(j.maxDpbMbs/(E*z)),16);P=G,C=G}}return p(C!==null),{profileIdc:r,constraintFlags:n,levelIdc:a,frameMbsOnlyFlag:y,chromaFormatIdc:s,bitDepthLumaMinus8:o,bitDepthChromaMinus8:c,codedWidth:f,codedHeight:g,displayWidth:b,displayHeight:h,colourPrimaries:w,matrixCoefficients:T,transferCharacteristics:S,fullRangeFlag:x,numReorderFrames:P,maxDecFrameBuffering:C}}catch(t){return console.error("Error parsing AVC SPS:",t),null}},Do=i=>{let t=I(i);i.skipBits(4),i.skipBits(4);for(let e=0;e<=t;e++)I(i),I(i),i.skipBits(1);i.skipBits(5),i.skipBits(5),i.skipBits(5),i.skipBits(5)},qa=(i,t)=>{if(t.description){let n=(H(t.description)[21]&3)+1;return Zi(i,n)}else return Ut(i)},et=i=>i>>1&63,ja=i=>{try{let t=new V(Ji(i));t.skipBits(16),t.readBits(4);let e=t.readBits(3),r=t.readBits(1),{general_profile_space:n,general_tier_flag:a,general_profile_idc:s,general_profile_compatibility_flags:o,general_constraint_indicator_flags:c,general_level_idc:u}=Ou(t,e);I(t);let d=I(t),l=0;d===3&&(l=t.readBits(1));let m=I(t),f=I(t),g=m,b=f;if(t.readBits(1)){let E=I(t),F=I(t),z=I(t),j=I(t),G=1,$=1,ne=l===0?d:0;ne===1?(G=2,$=2):ne===2&&(G=2,$=1),g-=(E+F)*G,b-=(z+j)*$}let h=I(t),y=I(t);I(t);let w=t.readBits(1)?0:e,S=0;for(let E=w;E<=e;E++)I(t),S=I(t),I(t);I(t),I(t),I(t),I(t),I(t),I(t),t.readBits(1)&&t.readBits(1)&&Uu(t),t.skipBits(1),t.skipBits(1),t.readBits(1)&&(t.skipBits(4),t.skipBits(4),I(t),I(t),t.skipBits(1));let T=I(t);if(Vu(t,T),t.readBits(1)){let E=I(t);for(let F=0;F{try{let t=[],e=[],r=[],n=[];for(let u of Ut(i)){let d=i.subarray(u.offset,u.offset+u.length),l=et(d[0]);l===32?t.push(d):l===33?e.push(d):l===34?r.push(d):(l===39||l===40)&&n.push(d)}if(e.length===0||r.length===0)return null;let a=ja(e[0]);if(!a)return null;let s=0;if(r.length>0){let u=r[0],d=new V(Ji(u));d.skipBits(16),I(d),I(d),d.skipBits(1),d.skipBits(1),d.skipBits(3),d.skipBits(1),d.skipBits(1),I(d),I(d),Xe(d),d.skipBits(1),d.skipBits(1),d.readBits(1)&&I(d),Xe(d),Xe(d),d.skipBits(1),d.skipBits(1),d.skipBits(1),d.skipBits(1);let l=d.readBits(1),m=d.readBits(1);!l&&!m?s=0:l&&!m?s=2:!l&&m?s=3:s=0}let o=[...t.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:t}]:[],...e.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:r}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:et(n[0][0]),nalUnits:n}]:[]];return{configurationVersion:1,generalProfileSpace:a.generalProfileSpace,generalTierFlag:a.generalTierFlag,generalProfileIdc:a.generalProfileIdc,generalProfileCompatibilityFlags:a.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:a.generalConstraintIndicatorFlags,generalLevelIdc:a.generalLevelIdc,minSpatialSegmentationIdc:a.minSpatialSegmentationIdc,parallelismType:s,chromaFormatIdc:a.chromaFormatIdc,bitDepthLumaMinus8:a.bitDepthLumaMinus8,bitDepthChromaMinus8:a.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:a.spsMaxSubLayersMinus1+1,temporalIdNested:a.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:o}}catch(t){return console.error("Error building HEVC Decoder Configuration Record:",t),null}},Ou=(i,t)=>{let e=i.readBits(2),r=i.readBits(1),n=i.readBits(5),a=0;for(let d=0;d<32;d++)a=a<<1|i.readBits(1);let s=new Uint8Array(6);for(let d=0;d<6;d++)s[d]=i.readBits(8);let o=i.readBits(8),c=[],u=[];for(let d=0;d0)for(let d=t;d<8;d++)i.skipBits(2);for(let d=0;d{for(let t=0;t<4;t++)for(let e=0;e<(t===3?2:6);e++)if(!i.readBits(1))I(i);else{let n=Math.min(64,1<<4+(t<<1));t>1&&Xe(i);for(let a=0;a{let e=[];for(let r=0;r{let n=0,a=0,s=0;if(t!==0&&(a=i.readBits(1)),a){if(t===e){let c=I(i);s=t-(c+1)}else s=t-1;i.readBits(1),I(i);let o=r[s]??0;for(let c=0;c<=o;c++)i.readBits(1)||i.readBits(1);n=r[s]}else{let o=I(i),c=I(i);for(let u=0;u{let e=2,r=2,n=2,a=0,s=0;return i.readBits(1)&&i.readBits(8)===255&&(i.readBits(16),i.readBits(16)),i.readBits(1)&&i.readBits(1),i.readBits(1)&&(i.readBits(3),a=i.readBits(1),i.readBits(1)&&(e=i.readBits(8),r=i.readBits(8),n=i.readBits(8))),i.readBits(1)&&(I(i),I(i)),i.readBits(1),i.readBits(1),i.readBits(1),i.readBits(1)&&(I(i),I(i),I(i),I(i)),i.readBits(1)&&(i.readBits(32),i.readBits(32),i.readBits(1)&&I(i),i.readBits(1)&&Lu(i,!0,t)),i.readBits(1)&&(i.readBits(1),i.readBits(1),i.readBits(1),s=I(i),I(i),I(i),I(i),I(i)),{colourPrimaries:e,transferCharacteristics:r,matrixCoefficients:n,fullRangeFlag:a,minSpatialSegmentationIdc:s}},Lu=(i,t,e)=>{let r=!1,n=!1,a=!1;t&&(r=i.readBits(1)===1,n=i.readBits(1)===1,(r||n)&&(a=i.readBits(1)===1,a&&(i.readBits(8),i.readBits(5),i.readBits(1),i.readBits(5)),i.readBits(4),i.readBits(4),a&&i.readBits(4),i.readBits(5),i.readBits(5),i.readBits(5)));for(let s=0;s<=e;s++){let o=i.readBits(1)===1,c=!0;o||(c=i.readBits(1)===1);let u=!1;c?I(i):u=i.readBits(1)===1;let d=1;u||(d=I(i)+1),r&&Oo(i,d,a),n&&Oo(i,d,a)}},Oo=(i,t,e)=>{for(let r=0;r{let t=[];t.push(i.configurationVersion),t.push((i.generalProfileSpace&3)<<6|(i.generalTierFlag&1)<<5|i.generalProfileIdc&31),t.push(i.generalProfileCompatibilityFlags>>>24&255),t.push(i.generalProfileCompatibilityFlags>>>16&255),t.push(i.generalProfileCompatibilityFlags>>>8&255),t.push(i.generalProfileCompatibilityFlags&255),t.push(...i.generalConstraintIndicatorFlags),t.push(i.generalLevelIdc&255),t.push(240|i.minSpatialSegmentationIdc>>8&15),t.push(i.minSpatialSegmentationIdc&255),t.push(252|i.parallelismType&3),t.push(252|i.chromaFormatIdc&3),t.push(248|i.bitDepthLumaMinus8&7),t.push(248|i.bitDepthChromaMinus8&7),t.push(i.avgFrameRate>>8&255),t.push(i.avgFrameRate&255),t.push((i.constantFrameRate&3)<<6|(i.numTemporalLayers&7)<<3|(i.temporalIdNested&1)<<2|i.lengthSizeMinusOne&3),t.push(i.arrays.length&255);for(let e of i.arrays){t.push((e.arrayCompleteness&1)<<7|0|e.nalUnitType&63),t.push(e.nalUnits.length>>8&255),t.push(e.nalUnits.length&255);for(let r of e.nalUnits){t.push(r.length>>8&255),t.push(r.length&255);for(let n=0;n{try{let t=D(i),e=0,r=t.getUint8(e++),n=t.getUint8(e++),a=n>>6&3,s=n>>5&1,o=n&31,c=t.getUint32(e,!1);e+=4;let u=i.subarray(e,e+6);e+=6;let d=t.getUint8(e++),l=(t.getUint8(e++)&15)<<8|t.getUint8(e++),m=t.getUint8(e++)&3,f=t.getUint8(e++)&3,g=t.getUint8(e++)&7,b=t.getUint8(e++)&7,h=t.getUint16(e,!1);e+=2;let y=t.getUint8(e++),k=y>>6&3,w=y>>3&7,S=y>>2&1,T=y&3,x=t.getUint8(e++),P=[];for(let C=0;C>7&1,E=_&63,F=t.getUint16(e,!1);e+=2;let z=[];for(let j=0;j{let t=new V(i);if(t.readBits(2)!==2)return null;let r=t.readBits(1),a=(t.readBits(1)<<1)+r;if(a===3&&t.skipBits(1),t.readBits(1)===1||t.readBits(1)!==0||(t.skipBits(2),t.readBits(24)!==4817730))return null;let u=8;a>=2&&(u=t.readBits(1)?12:10);let d=t.readBits(3),l=0,m=0;if(d!==7)if(m=t.readBits(1),a===1||a===3){let P=t.readBits(1),C=t.readBits(1);l=!P&&!C?3:P&&!C?2:1,t.skipBits(1)}else l=1;else l=3,m=1;let f=t.readBits(16),g=t.readBits(16),b=f+1,h=g+1,y=b*h,k=K(ft).level;for(let x of ft)if(y<=x.maxPictureSize){k=x.level;break}return{profile:a,level:k,bitDepth:u,chromaSubsampling:l,videoFullRangeFlag:m,colourPrimaries:d===2?1:d===1?6:2,transferCharacteristics:d===2?1:d===1?6:2,matrixCoefficients:d===7?0:d===2?1:d===1?6:2}},Lo=function*(i){let t=new V(i),e=()=>{let r=0;for(let n=0;n<8;n++){let a=t.readAlignedByte();if(r|=(a&127)<=2**32-1?null:r};for(;t.getBitsLeft()>=8;){t.skipBits(1);let r=t.readBits(4),n=t.readBits(1),a=t.readBits(1);t.skipBits(1),n&&t.skipBits(8);let s;if(a){let o=e();if(o===null)return;s=o}else s=Math.floor(t.getBitsLeft()/8);p(t.pos%8===0),yield{type:r,data:i.subarray(t.pos/8,t.pos/8+s)},t.skipBits(s*8)}},nn=i=>{for(let{type:t,data:e}of Lo(i)){if(t!==1)continue;let r=new V(e),n=r.readBits(3),a=r.readBits(1),s=r.readBits(1),o=0,c=0,u=0;if(s)o=r.readBits(5);else{if(r.readBits(1)&&(r.skipBits(32),r.skipBits(32),r.readBits(1)))return null;let x=r.readBits(1);x&&(u=r.readBits(5),r.skipBits(32),r.skipBits(5),r.skipBits(5));let P=r.readBits(5);for(let C=0;C<=P;C++){r.skipBits(12);let _=r.readBits(5);if(C===0&&(o=_),_>7){let E=r.readBits(1);C===0&&(c=E)}if(x&&r.readBits(1)){let F=u+1;r.skipBits(F),r.skipBits(F),r.skipBits(1)}r.readBits(1)&&r.skipBits(4)}}let d=r.readBits(4),l=r.readBits(4),m=d+1;r.skipBits(m);let f=l+1;r.skipBits(f);let g=0;if(s?g=0:g=r.readBits(1),g&&(r.skipBits(4),r.skipBits(3)),r.skipBits(1),r.skipBits(1),r.skipBits(1),!s){r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);let T=r.readBits(1);T&&(r.skipBits(1),r.skipBits(1));let x=r.readBits(1),P=0;x?P=2:P=r.readBits(1),P>0&&(r.readBits(1)||r.skipBits(1)),T&&r.skipBits(3)}r.skipBits(1),r.skipBits(1),r.skipBits(1);let b=r.readBits(1),h=8;n===2&&b?h=r.readBits(1)?12:10:n<=2&&(h=b?10:8);let y=0;n!==1&&(y=r.readBits(1));let k=1,w=1,S=0;return y||(n===0?(k=1,w=1):n===1?(k=0,w=0):h===12&&(k=r.readBits(1),k&&(w=r.readBits(1))),k&&w&&(S=r.readBits(2))),{profile:n,level:o,tier:c,bitDepth:h,monochrome:y,chromaSubsamplingX:k,chromaSubsamplingY:w,chromaSamplePosition:S}}return null},Vt=i=>{let t=D(i),e=t.getUint8(9),r=t.getUint16(10,!0),n=t.getUint32(12,!0),a=t.getInt16(16,!0),s=t.getUint8(18),o=null;return s&&(o=i.subarray(19,21+e)),{outputChannelCount:e,preSkip:r,inputSampleRate:n,outputGain:a,channelMappingFamily:s,channelMappingTable:o}},Wu=[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],Wo=i=>{let t=i[0]>>3;return{durationInSamples:Wu[t]}},an=i=>{if(i.length<7)throw new Error("Setup header is too short.");if(i[0]!==5)throw new Error("Wrong packet type in Setup header.");if(String.fromCharCode(...i.slice(1,7))!=="vorbis")throw new Error("Invalid packet signature in Setup header.");let e=i.length,r=new Uint8Array(e);for(let l=0;l97;)if(n.readBits(1)===1){a=n.pos;break}if(a===0)throw new Error("Invalid Setup header: framing bit not found.");let s=0,o=!1,c=0;for(;n.getBitsLeft()>=97;){let l=n.pos,m=n.readBits(8),f=n.readBits(16),g=n.readBits(16);if(m>63||f!==0||g!==0){n.pos=l;break}if(n.skipBits(1),s++,s>64)break;n.clone().readBits(6)+1===s&&(o=!0,c=s)}if(!o)throw new Error("Invalid Setup header: mode header not found.");if(c>63)throw new Error(`Unsupported mode count: ${c}.`);let u=c;n.pos=0,n.skipBits(a);let d=Array(u).fill(0);for(let l=u-1;l>=0;l--)n.skipBits(40),d[l]=n.readBits(1);return{modeBlockflags:d}},sn=(i,t,e)=>{switch(i){case"avc":{for(let r of Wa(e,t)){let n=e[r.offset],a=gt(n);if(a>=1&&a<=4)return"delta";if(a===5)return"key";if(a===6&&(!Jr()||ko()>=144)){let s=e.subarray(r.offset,r.offset+r.length),o=Ji(s),c=1;do{let u=0;for(;;){let m=o[c++];if(m===void 0||(u+=m,m<255))break}let d=0;for(;;){let m=o[c++];if(m===void 0||(d+=m,m<255))break}if(u===6){let m=new V(o);m.pos=8*c;let f=I(m),g=m.readBits(1);if(f===0&&g===1)return"key"}c+=d}while(c{let e=D(i),r=0,n=e.getUint32(r,!0);r+=4;let a=me.decode(i.subarray(r,r+n));r+=n,n>0&&(t.raw??={},t.raw.vendor??=a);let s=e.getUint32(r,!0);r+=4;for(let o=0;o0&&(t.trackNumber??=g),b&&Number.isInteger(b)&&b>0&&(t.tracksTotal??=b)}break;case"TRACKTOTAL":{let f=Number.parseInt(m,10);Number.isInteger(f)&&f>0&&(t.tracksTotal??=f)}break;case"DISCNUMBER":{let f=m.split("/"),g=Number.parseInt(f[0],10),b=f[1]&&Number.parseInt(f[1],10);Number.isInteger(g)&&g>0&&(t.discNumber??=g),b&&Number.isInteger(b)&&b>0&&(t.discsTotal??=b)}break;case"DISCTOTAL":{let f=Number.parseInt(m,10);Number.isInteger(f)&&f>0&&(t.discsTotal??=f)}break;case"DATE":{let f=new Date(m);Number.isNaN(f.getTime())||(t.date??=f)}break;case"GENRE":t.genre??=m;break;case"METADATA_BLOCK_PICTURE":{let f=wo(m),g=D(f),b=g.getUint32(0,!1),h=g.getUint32(4,!1),y=String.fromCharCode(...f.subarray(8,8+h)),k=g.getUint32(8+h,!1),w=me.decode(f.subarray(12+h,12+h+k)),S=g.getUint32(h+k+28),T=f.subarray(h+k+32,h+k+32+S);t.images??=[],t.images.push({data:T,mimeType:y,kind:b===3?"coverFront":b===4?"coverBack":"unknown",name:void 0,description:w||void 0})}break}}},ni=(i,t,e)=>{let r=[i],a=X.encode("Mediabunny"),s=new Uint8Array(4+a.length),o=new DataView(s.buffer);o.setUint32(0,a.length,!0),s.set(a,4),r.push(s);let c=new Set,u=(g,b)=>{let h=`${g}=${b}`,y=X.encode(h);s=new Uint8Array(4+y.length),o=new DataView(s.buffer),o.setUint32(0,y.length,!0),s.set(y,4),r.push(s),c.add(g)};for(let{key:g,value:b}of ze(t))switch(g){case"title":u("TITLE",b);break;case"description":u("DESCRIPTION",b);break;case"artist":u("ARTIST",b);break;case"album":u("ALBUM",b);break;case"albumArtist":u("ALBUMARTIST",b);break;case"genre":u("GENRE",b);break;case"date":{let h=t.raw?.DATE??t.raw?.date;h&&typeof h=="string"?u("DATE",h):u("DATE",b.toISOString().slice(0,10))}break;case"comment":u("COMMENT",b);break;case"lyrics":u("LYRICS",b);break;case"trackNumber":u("TRACKNUMBER",b.toString());break;case"tracksTotal":u("TRACKTOTAL",b.toString());break;case"discNumber":u("DISCNUMBER",b.toString());break;case"discsTotal":u("DISCTOTAL",b.toString());break;case"images":{if(!e)break;for(let h of b){let y=h.kind==="coverFront"?3:h.kind==="coverBack"?4:0,k=new Uint8Array(h.mimeType.length);for(let P=0;Pg+b.length,0),m=new Uint8Array(l),f=0;for(let g of r)m.set(g,f),f+=g.length;return m},ai=[2,1,2,3,3,4,4,5],on=i=>{if(i.length<7||i[0]!==11||i[1]!==119)return null;let t=new V(i);t.skipBits(16),t.skipBits(16);let e=t.readBits(2);if(e===3)return null;let r=t.readBits(6),n=t.readBits(5);if(n>8)return null;let a=t.readBits(3),s=t.readBits(3);(s&1)!==0&&s!==1&&t.skipBits(2),(s&4)!==0&&t.skipBits(2),s===2&&t.skipBits(2);let o=t.readBits(1),c=Math.floor(r/2);return{fscod:e,bsid:n,bsmod:a,acmod:s,lfeon:o,bitRateCode:c}},Ho=[64*2,69*2,96*2,64*2,70*2,96*2,80*2,87*2,120*2,80*2,88*2,120*2,96*2,104*2,144*2,96*2,105*2,144*2,112*2,121*2,168*2,112*2,122*2,168*2,128*2,139*2,192*2,128*2,140*2,192*2,160*2,174*2,240*2,160*2,175*2,240*2,192*2,208*2,288*2,192*2,209*2,288*2,224*2,243*2,336*2,224*2,244*2,336*2,256*2,278*2,384*2,256*2,279*2,384*2,320*2,348*2,480*2,320*2,349*2,480*2,384*2,417*2,576*2,384*2,418*2,576*2,448*2,487*2,672*2,448*2,488*2,672*2,512*2,557*2,768*2,512*2,558*2,768*2,640*2,696*2,960*2,640*2,697*2,960*2,768*2,835*2,1152*2,768*2,836*2,1152*2,896*2,975*2,1344*2,896*2,976*2,1344*2,1024*2,1114*2,1536*2,1024*2,1115*2,1536*2,1152*2,1253*2,1728*2,1152*2,1254*2,1728*2,1280*2,1393*2,1920*2,1280*2,1394*2,1920*2],qo=1536,si=new Uint8Array([5,4,65,67,45,51]),oi=new Uint8Array([5,4,69,65,67,51]),Ka=[1,2,3,6],cn=i=>{if(i.length<6||i[0]!==11||i[1]!==119)return null;let t=new V(i);t.skipBits(16);let e=t.readBits(2);if(t.skipBits(3),e!==0&&e!==2)return null;let r=t.readBits(11),n=t.readBits(2),a=0,s;n===3?(a=t.readBits(2),s=3):s=t.readBits(2);let o=t.readBits(3),c=t.readBits(1),u=t.readBits(5);if(u<11||u>16)return null;let d=Ka[s],l;return n<3?l=er[n]/1e3:l=Na[a]/1e3,{dataRate:Math.round((r+1)*l/(d*16)),substreams:[{fscod:n,fscod2:a,bsid:u,bsmod:0,acmod:o,lfeon:c,numDepSub:0,chanLoc:0}]}},jo=i=>{if(i.length<2)return null;let t=new V(i),e=t.readBits(13),r=t.readBits(3),n=[];for(let a=0;a<=r&&!(Math.ceil(t.pos/8)+3>i.length);a++){let s=t.readBits(2),o=t.readBits(5);t.skipBits(1),t.skipBits(1);let c=t.readBits(3),u=t.readBits(3),d=t.readBits(1);t.skipBits(3);let l=t.readBits(4),m=0;l>0?m=t.readBits(9):t.skipBits(1),n.push({fscod:s,fscod2:null,bsid:o,bsmod:c,acmod:u,lfeon:d,numDepSub:l,chanLoc:m})}return n.length===0?null:{dataRate:e,substreams:n}},un=i=>{let t=i.substreams[0];return p(t),t.fscod<3?er[t.fscod]:t.fscod2!==null&&t.fscod2<3?Na[t.fscod2]:null},dn=i=>{let t=i.substreams[0];p(t);let e=ai[t.acmod]+t.lfeon;if(t.numDepSub>0){let r=[2,2,1,1,2,2,2,1,1];for(let n=0;n<9;n++)t.chanLoc&1<<8-n&&(e+=r[n])}return e};var fe=class{constructor(t){this.input=t}};var ln=class{static supports(t,e){return!1}},mn=class{static supports(t,e){return!1}},fn=class{static supports(t,e){return!1}},pn=class{static supports(t,e){return!1}},Cr=[],Pr=[],tr=[],rr=[],Hu=i=>{if(i.prototype instanceof ln){let t=i;if(Cr.includes(t)){console.warn("Video decoder already registered.");return}Cr.push(t)}else if(i.prototype instanceof mn){let t=i;if(Pr.includes(t)){console.warn("Audio decoder already registered.");return}Pr.push(t)}else throw new TypeError("Decoder must be a CustomVideoDecoder or CustomAudioDecoder.")},qu=i=>{if(i.prototype instanceof fn){let t=i;if(tr.includes(t)){console.warn("Video encoder already registered.");return}tr.push(t)}else if(i.prototype instanceof pn){let t=i;if(rr.includes(t)){console.warn("Audio encoder already registered.");return}rr.push(t)}else throw new TypeError("Encoder must be a CustomVideoEncoder or CustomAudioEncoder.")};var se=new Uint8Array(0),W=class i{constructor(t,e,r,n,a=-1,s,o){this.data=t;this.type=e;this.timestamp=r;this.duration=n;this.sequenceNumber=a;if(t===se&&s===void 0)throw new Error("Internal error: byteLength must be explicitly provided when constructing metadata-only packets.");if(s===void 0&&(s=t.byteLength),!(t instanceof Uint8Array))throw new TypeError("data must be a Uint8Array.");if(e!=="key"&&e!=="delta")throw new TypeError('type must be either "key" or "delta".');if(!Number.isFinite(r))throw new TypeError("timestamp must be a number.");if(!Number.isFinite(n)||n<0)throw new TypeError("duration must be a non-negative number.");if(!Number.isFinite(a))throw new TypeError("sequenceNumber must be a number.");if(!Number.isInteger(s)||s<0)throw new TypeError("byteLength must be a non-negative integer.");if(o!==void 0&&(typeof o!="object"||!o))throw new TypeError("sideData, when provided, must be an object.");if(o?.alpha!==void 0&&!(o.alpha instanceof Uint8Array))throw new TypeError("sideData.alpha, when provided, must be a Uint8Array.");if(o?.alphaByteLength!==void 0&&(!Number.isInteger(o.alphaByteLength)||o.alphaByteLength<0))throw new TypeError("sideData.alphaByteLength, when provided, must be a non-negative integer.");this.byteLength=s,this.sideData=o??{},this.sideData.alpha&&this.sideData.alphaByteLength===void 0&&(this.sideData.alphaByteLength=this.sideData.alpha.byteLength)}get isMetadataOnly(){return this.data===se}get microsecondTimestamp(){return Math.trunc(Ye*this.timestamp)}get microsecondDuration(){return Math.trunc(Ye*this.duration)}toEncodedVideoChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("Your browser does not support EncodedVideoChunk.");return new EncodedVideoChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}alphaToEncodedVideoChunk(t=this.type){if(!this.sideData.alpha)throw new TypeError("This packet does not contain alpha side data.");if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to a video chunk.");if(typeof EncodedVideoChunk>"u")throw new Error("Your browser does not support EncodedVideoChunk.");return new EncodedVideoChunk({data:this.sideData.alpha,type:t,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}toEncodedAudioChunk(){if(this.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be converted to an audio chunk.");if(typeof EncodedAudioChunk>"u")throw new Error("Your browser does not support EncodedAudioChunk.");return new EncodedAudioChunk({data:this.data,type:this.type,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration})}static fromEncodedChunk(t,e){if(!(t instanceof EncodedVideoChunk||t instanceof EncodedAudioChunk))throw new TypeError("chunk must be an EncodedVideoChunk or EncodedAudioChunk.");let r=new Uint8Array(t.byteLength);return t.copyTo(r),new i(r,t.type,t.timestamp/1e6,(t.duration??0)/1e6,void 0,void 0,e)}clone(t){if(t!==void 0&&(typeof t!="object"||t===null))throw new TypeError("options, when provided, must be an object.");if(t?.data!==void 0&&!(t.data instanceof Uint8Array))throw new TypeError("options.data, when provided, must be a Uint8Array.");if(t?.type!==void 0&&t.type!=="key"&&t.type!=="delta")throw new TypeError('options.type, when provided, must be either "key" or "delta".');if(t?.timestamp!==void 0&&!Number.isFinite(t.timestamp))throw new TypeError("options.timestamp, when provided, must be a number.");if(t?.duration!==void 0&&!Number.isFinite(t.duration))throw new TypeError("options.duration, when provided, must be a number.");if(t?.sequenceNumber!==void 0&&!Number.isFinite(t.sequenceNumber))throw new TypeError("options.sequenceNumber, when provided, must be a number.");if(t?.sideData!==void 0&&(typeof t.sideData!="object"||t.sideData===null))throw new TypeError("options.sideData, when provided, must be an object.");return new i(t?.data??this.data,t?.type??this.type,t?.timestamp??this.timestamp,t?.duration??this.duration,t?.sequenceNumber??this.sequenceNumber,this.byteLength,t?.sideData??this.sideData)}};var Ko=i=>{let r=i,n=4096,a=0,s=12,o=0;for(r<0&&(r=-r,a=128),r+=33,r>8191&&(r=8191);(r&n)!==n&&s>=5;)n>>=1,s--;return o=r>>s-4&15,~(a|s-5<<4|o)&255},Go=i=>{let e=0,r=0,n=~i;n&128&&(n&=-129,e=-1),r=((n&240)>>4)+5;let a=(1<{let e=2048,r=0,n=11,a=0,s=i;for(s<0&&(s=-s,r=128),s>4095&&(s=4095);(s&e)!==e&&n>=5;)e>>=1,n--;return a=s>>(n===4?1:n-4)&15,(r|n-4<<4|a)^85},$o=i=>{let t=0,e=0,r=i^85;r&128&&(r&=-129,t=-1),e=((r&240)>>4)+4;let n=0;return e!==4?n=1<{let t=Date.now();i.type==="video"?(t-Xo>=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."),Xo=t),typeof VideoFrame<"u"&&i.data instanceof VideoFrame&&i.data.close()):(t-Yo>=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."),Yo=t),typeof AudioData<"u"&&i.data instanceof AudioData&&i.data.close())}));var Qa=["I420","I420P10","I420P12","I420A","I420AP10","I420AP12","I422","I422P10","I422P12","I422A","I422AP10","I422AP12","I444","I444P10","I444P12","I444A","I444AP10","I444AP12","NV12","RGBA","RGBX","BGRA","BGRX"],ju=new Set(Qa),pe=class i{constructor(t,e){this._closed=!1;if(t instanceof ArrayBuffer||typeof SharedArrayBuffer<"u"&&t instanceof SharedArrayBuffer||ArrayBuffer.isView(t)){if(!e||typeof e!="object")throw new TypeError("init must be an object.");if(e.format===void 0||!ju.has(e.format))throw new TypeError("init.format must be one of: "+Qa.join(", "));if(!Number.isInteger(e.codedWidth)||e.codedWidth<=0)throw new TypeError("init.codedWidth must be a positive integer.");if(!Number.isInteger(e.codedHeight)||e.codedHeight<=0)throw new TypeError("init.codedHeight must be a positive integer.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(e.timestamp))throw new TypeError("init.timestamp must be a number.");if(e.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");this._data=H(t).slice(),this._layout=e.layout??Ku(e.format,e.codedWidth,e.codedHeight),this.format=e.format,this.codedWidth=e.codedWidth,this.codedHeight=e.codedHeight,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=new Ir(e.colorSpace)}else if(typeof VideoFrame<"u"&&t instanceof VideoFrame){if(e?.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(e?.timestamp!==void 0&&!Number.isFinite(e?.timestamp))throw new TypeError("init.timestamp, when provided, must be a number.");if(e?.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");this._data=t,this._layout=null,this.format=t.format,this.codedWidth=t.displayWidth,this.codedHeight=t.displayHeight,this.rotation=e?.rotation??0,this.timestamp=e?.timestamp??t.timestamp/1e6,this.duration=e?.duration??(t.duration??0)/1e6,this.colorSpace=new Ir(t.colorSpace)}else if(typeof HTMLImageElement<"u"&&t instanceof HTMLImageElement||typeof SVGImageElement<"u"&&t instanceof SVGImageElement||typeof ImageBitmap<"u"&&t instanceof ImageBitmap||typeof HTMLVideoElement<"u"&&t instanceof HTMLVideoElement||typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement||typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas){if(!e||typeof e!="object")throw new TypeError("init must be an object.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("init.rotation, when provided, must be 0, 90, 180, or 270.");if(!Number.isFinite(e.timestamp))throw new TypeError("init.timestamp must be a number.");if(e.duration!==void 0&&(!Number.isFinite(e.duration)||e.duration<0))throw new TypeError("init.duration, when provided, must be a non-negative number.");if(typeof VideoFrame<"u")return new i(new VideoFrame(t,{timestamp:Math.trunc(e.timestamp*Ye),duration:Math.trunc((e.duration??0)*Ye)||void 0}),e);let r=0,n=0;if("naturalWidth"in t?(r=t.naturalWidth,n=t.naturalHeight):"videoWidth"in t?(r=t.videoWidth,n=t.videoHeight):"width"in t&&(r=Number(t.width),n=Number(t.height)),!r||!n)throw new TypeError("Could not determine dimensions.");let a=new OffscreenCanvas(r,n),s=a.getContext("2d",{alpha:Ze(),willReadFrequently:!0});p(s),s.drawImage(t,0,0),this._data=a,this._layout=null,this.format="RGBX",this.codedWidth=r,this.codedHeight=n,this.rotation=e.rotation??0,this.timestamp=e.timestamp,this.duration=e.duration??0,this.colorSpace=new Ir({matrix:"rgb",primaries:"bt709",transfer:"iec61966-2-1",fullRange:!0})}else throw new TypeError("Invalid data type: Must be a BufferSource or CanvasImageSource.");ui?.register(this,{type:"video",data:this._data},this)}get displayWidth(){return this.rotation%180===0?this.codedWidth:this.codedHeight}get displayHeight(){return this.rotation%180===0?this.codedHeight:this.codedWidth}get microsecondTimestamp(){return Math.trunc(Ye*this.timestamp)}get microsecondDuration(){return Math.trunc(Ye*this.duration)}get hasAlpha(){return this.format&&this.format.includes("A")}clone(){if(this._closed)throw new Error("VideoSample is closed.");return p(this._data!==null),ir(this._data)?new i(this._data.clone(),{timestamp:this.timestamp,duration:this.duration,rotation:this.rotation}):this._data instanceof Uint8Array?(p(this._layout),new i(this._data,{format:this.format,layout:this._layout,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation})):new i(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.timestamp,duration:this.duration,colorSpace:this.colorSpace,rotation:this.rotation})}close(){this._closed||(ui?.unregister(this),ir(this._data)?this._data.close():this._data=null,this._closed=!0)}allocationSize(t={}){if(Zo(t),this._closed)throw new Error("VideoSample is closed.");if(this.format===null)throw new Error("Cannot get allocation size when format is null. Sorry!");if(p(this._data!==null),!ir(this._data)&&(t.colorSpace||t.format&&t.format!==this.format||t.layout||t.rect)){let e=this.toVideoFrame(),r=e.allocationSize(t);return e.close(),r}return ir(this._data)?this._data.allocationSize(t):this._data instanceof Uint8Array?this._data.byteLength:this.codedWidth*this.codedHeight*4}async copyTo(t,e={}){if(!hr(t))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(Zo(e),this._closed)throw new Error("VideoSample is closed.");if(this.format===null)throw new Error("Cannot copy video sample data when format is null. Sorry!");if(p(this._data!==null),!ir(this._data)&&(e.colorSpace||e.format&&e.format!==this.format||e.layout||e.rect)){let r=this.toVideoFrame(),n=await r.copyTo(t,e);return r.close(),n}if(ir(this._data))return this._data.copyTo(t,e);if(this._data instanceof Uint8Array)return p(this._layout),H(t).set(this._data),this._layout;{let n=this._data.getContext("2d");p(n);let a=n.getImageData(0,0,this.codedWidth,this.codedHeight);return H(t).set(a.data),[{offset:0,stride:4*this.codedWidth}]}}toVideoFrame(){if(this._closed)throw new Error("VideoSample is closed.");return p(this._data!==null),ir(this._data)?new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0}):this._data instanceof Uint8Array?new VideoFrame(this._data,{format:this.format,codedWidth:this.codedWidth,codedHeight:this.codedHeight,timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0,colorSpace:this.colorSpace}):new VideoFrame(this._data,{timestamp:this.microsecondTimestamp,duration:this.microsecondDuration||void 0})}draw(t,e,r,n,a,s,o,c,u){let d=0,l=0,m=this.displayWidth,f=this.displayHeight,g=0,b=0,h=this.displayWidth,y=this.displayHeight;if(s!==void 0?(d=e,l=r,m=n,f=a,g=s,b=o,c!==void 0?(h=c,y=u):(h=m,y=f)):(g=e,b=r,n!==void 0&&(h=n,y=a)),!(typeof CanvasRenderingContext2D<"u"&&t instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<"u"&&t instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!Number.isFinite(d))throw new TypeError("sx must be a number.");if(!Number.isFinite(l))throw new TypeError("sy must be a number.");if(!Number.isFinite(m)||m<0)throw new TypeError("sWidth must be a non-negative number.");if(!Number.isFinite(f)||f<0)throw new TypeError("sHeight must be a non-negative number.");if(!Number.isFinite(g))throw new TypeError("dx must be a number.");if(!Number.isFinite(b))throw new TypeError("dy must be a number.");if(!Number.isFinite(h)||h<0)throw new TypeError("dWidth must be a non-negative number.");if(!Number.isFinite(y)||y<0)throw new TypeError("dHeight must be a non-negative number.");if(this._closed)throw new Error("VideoSample is closed.");({sx:d,sy:l,sWidth:m,sHeight:f}=this._rotateSourceRegion(d,l,m,f,this.rotation));let k=this.toCanvasImageSource();t.save();let w=g+h/2,S=b+y/2;t.translate(w,S),t.rotate(this.rotation*Math.PI/180);let T=this.rotation%180===0?1:h/y;t.scale(1/T,T),t.drawImage(k,d,l,m,f,-h/2,-y/2,h,y),t.restore()}drawWithFit(t,e){if(!(typeof CanvasRenderingContext2D<"u"&&t instanceof CanvasRenderingContext2D||typeof OffscreenCanvasRenderingContext2D<"u"&&t instanceof OffscreenCanvasRenderingContext2D))throw new TypeError("context must be a CanvasRenderingContext2D or OffscreenCanvasRenderingContext2D.");if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(!["fill","contain","cover"].includes(e.fit))throw new TypeError("options.fit must be 'fill', 'contain', or 'cover'.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180, or 270.");e.crop!==void 0&&li(e.crop,"options.");let r=t.canvas.width,n=t.canvas.height,a=e.rotation??this.rotation,[s,o]=a%180===0?[this.codedWidth,this.codedHeight]:[this.codedHeight,this.codedWidth];e.crop&&di(e.crop,s,o);let c,u,d,l,{sx:m,sy:f,sWidth:g,sHeight:b}=this._rotateSourceRegion(e.crop?.left??0,e.crop?.top??0,e.crop?.width??s,e.crop?.height??o,a);if(e.fit==="fill")c=0,u=0,d=r,l=n;else{let[y,k]=e.crop?[e.crop.width,e.crop.height]:[s,o],w=e.fit==="contain"?Math.min(r/y,n/k):Math.max(r/y,n/k);d=y*w,l=k*w,c=(r-d)/2,u=(n-l)/2}t.save();let h=a%180===0?1:d/l;t.translate(r/2,n/2),t.rotate(a*Math.PI/180),t.scale(1/h,h),t.translate(-r/2,-n/2),t.drawImage(this.toCanvasImageSource(),m,f,g,b,c,u,d,l),t.restore()}_rotateSourceRegion(t,e,r,n,a){return a===90?[t,e,r,n]=[e,this.codedHeight-t-r,n,r]:a===180?[t,e]=[this.codedWidth-t-r,this.codedHeight-e-n]:a===270&&([t,e,r,n]=[this.codedWidth-e-n,t,n,r]),{sx:t,sy:e,sWidth:r,sHeight:n}}toCanvasImageSource(){if(this._closed)throw new Error("VideoSample is closed.");if(p(this._data!==null),this._data instanceof Uint8Array){let t=this.toVideoFrame();return queueMicrotask(()=>t.close()),t}else return this._data}setRotation(t){if(![0,90,180,270].includes(t))throw new TypeError("newRotation must be 0, 90, 180, or 270.");this.rotation=t}setTimestamp(t){if(!Number.isFinite(t))throw new TypeError("newTimestamp must be a number.");this.timestamp=t}setDuration(t){if(!Number.isFinite(t)||t<0)throw new TypeError("newDuration must be a non-negative number.");this.duration=t}[Symbol.dispose](){this.close()}},Ir=class{constructor(t){this.primaries=t?.primaries??null,this.transfer=t?.transfer??null,this.matrix=t?.matrix??null,this.fullRange=t?.fullRange??null}toJSON(){return{primaries:this.primaries,transfer:this.transfer,matrix:this.matrix,fullRange:this.fullRange}}},ir=i=>typeof VideoFrame<"u"&&i instanceof VideoFrame,di=(i,t,e)=>{i.left=Math.min(i.left,t),i.top=Math.min(i.top,e),i.width=Math.min(i.width,t-i.left),i.height=Math.min(i.height,e-i.top),p(i.width>=0),p(i.height>=0)},li=(i,t)=>{if(!i||typeof i!="object")throw new TypeError(t+"crop, when provided, must be an object.");if(!Number.isInteger(i.left)||i.left<0)throw new TypeError(t+"crop.left must be a non-negative integer.");if(!Number.isInteger(i.top)||i.top<0)throw new TypeError(t+"crop.top must be a non-negative integer.");if(!Number.isInteger(i.width)||i.width<0)throw new TypeError(t+"crop.width must be a non-negative integer.");if(!Number.isInteger(i.height)||i.height<0)throw new TypeError(t+"crop.height must be a non-negative integer.")},Zo=i=>{if(!i||typeof i!="object")throw new TypeError("options must be an object.");if(i.colorSpace!==void 0&&!["display-p3","srgb"].includes(i.colorSpace))throw new TypeError("options.colorSpace, when provided, must be 'display-p3' or 'srgb'.");if(i.format!==void 0&&typeof i.format!="string")throw new TypeError("options.format, when provided, must be a string.");if(i.layout!==void 0){if(!Array.isArray(i.layout))throw new TypeError("options.layout, when provided, must be an array.");for(let t of i.layout){if(!t||typeof t!="object")throw new TypeError("Each entry in options.layout must be an object.");if(!Number.isInteger(t.offset)||t.offset<0)throw new TypeError("plane.offset must be a non-negative integer.");if(!Number.isInteger(t.stride)||t.stride<0)throw new TypeError("plane.stride must be a non-negative integer.")}}if(i.rect!==void 0){if(!i.rect||typeof i.rect!="object")throw new TypeError("options.rect, when provided, must be an object.");if(i.rect.x!==void 0&&(!Number.isInteger(i.rect.x)||i.rect.x<0))throw new TypeError("options.rect.x, when provided, must be a non-negative integer.");if(i.rect.y!==void 0&&(!Number.isInteger(i.rect.y)||i.rect.y<0))throw new TypeError("options.rect.y, when provided, must be a non-negative integer.");if(i.rect.width!==void 0&&(!Number.isInteger(i.rect.width)||i.rect.width<0))throw new TypeError("options.rect.width, when provided, must be a non-negative integer.");if(i.rect.height!==void 0&&(!Number.isInteger(i.rect.height)||i.rect.height<0))throw new TypeError("options.rect.height, when provided, must be a non-negative integer.")}},Ku=(i,t,e)=>{let r=Gu(i),n=[],a=0;for(let s of r){let o=Math.ceil(t/s.widthDivisor),c=Math.ceil(e/s.heightDivisor),u=o*s.sampleBytes,d=u*c;n.push({offset:a,stride:u}),a+=d}return n},Gu=i=>{let t=(e,r,n,a,s)=>{let o=[{sampleBytes:e,widthDivisor:1,heightDivisor:1},{sampleBytes:r,widthDivisor:n,heightDivisor:a},{sampleBytes:r,widthDivisor:n,heightDivisor:a}];return s&&o.push({sampleBytes:e,widthDivisor:1,heightDivisor:1}),o};switch(i){case"I420":return t(1,1,2,2,!1);case"I420P10":case"I420P12":return t(2,2,2,2,!1);case"I420A":return t(1,1,2,2,!0);case"I420AP10":case"I420AP12":return t(2,2,2,2,!0);case"I422":return t(1,1,2,1,!1);case"I422P10":case"I422P12":return t(2,2,2,1,!1);case"I422A":return t(1,1,2,1,!0);case"I422AP10":case"I422AP12":return t(2,2,2,1,!0);case"I444":return t(1,1,1,1,!1);case"I444P10":case"I444P12":return t(2,2,1,1,!1);case"I444A":return t(1,1,1,1,!0);case"I444AP10":case"I444AP12":return t(2,2,1,1,!0);case"NV12":return[{sampleBytes:1,widthDivisor:1,heightDivisor:1},{sampleBytes:2,widthDivisor:2,heightDivisor:2}];case"RGBA":case"RGBX":case"BGRA":case"BGRX":return[{sampleBytes:4,widthDivisor:1,heightDivisor:1}];default:J(i),p(!1)}},Ga=new Set(["f32","f32-planar","s16","s16-planar","s32","s32-planar","u8","u8-planar"]),Te=class i{constructor(t){this._closed=!1;if(ci(t)){if(t.format===null)throw new TypeError("AudioData with null format is not supported.");this._data=t,this.format=t.format,this.sampleRate=t.sampleRate,this.numberOfFrames=t.numberOfFrames,this.numberOfChannels=t.numberOfChannels,this.timestamp=t.timestamp/1e6,this.duration=t.numberOfFrames/t.sampleRate}else{if(!t||typeof t!="object")throw new TypeError("Invalid AudioDataInit: must be an object.");if(!Ga.has(t.format))throw new TypeError("Invalid AudioDataInit: invalid format.");if(!Number.isFinite(t.sampleRate)||t.sampleRate<=0)throw new TypeError("Invalid AudioDataInit: sampleRate must be > 0.");if(!Number.isInteger(t.numberOfChannels)||t.numberOfChannels===0)throw new TypeError("Invalid AudioDataInit: numberOfChannels must be an integer > 0.");if(!Number.isFinite(t?.timestamp))throw new TypeError("init.timestamp must be a number.");let e=t.data.byteLength/(nr(t.format)*t.numberOfChannels);if(!Number.isInteger(e))throw new TypeError("Invalid AudioDataInit: data size is not a multiple of frame size.");this.format=t.format,this.sampleRate=t.sampleRate,this.numberOfFrames=e,this.numberOfChannels=t.numberOfChannels,this.timestamp=t.timestamp,this.duration=e/t.sampleRate;let r;if(t.data instanceof ArrayBuffer)r=new Uint8Array(t.data);else if(ArrayBuffer.isView(t.data))r=new Uint8Array(t.data.buffer,t.data.byteOffset,t.data.byteLength);else throw new TypeError("Invalid AudioDataInit: data is not a BufferSource.");let n=this.numberOfFrames*this.numberOfChannels*nr(this.format);if(r.byteLength=this.numberOfFrames)throw new RangeError("frameOffset out of range");let n=t.frameCount!==void 0?t.frameCount:this.numberOfFrames-r;if(n>this.numberOfFrames-r)throw new RangeError("frameCount out of range");let a=nr(e),s=Ar(e);if(s&&t.planeIndex>=this.numberOfChannels)throw new RangeError("planeIndex out of range");if(!s&&t.planeIndex!==0)throw new RangeError("planeIndex out of range");return(s?n:n*this.numberOfChannels)*a}copyTo(t,e){if(!hr(t))throw new TypeError("destination must be an ArrayBuffer or an ArrayBuffer view.");if(!e||typeof e!="object")throw new TypeError("options must be an object.");if(!Number.isInteger(e.planeIndex)||e.planeIndex<0)throw new TypeError("planeIndex must be a non-negative integer.");if(e.format!==void 0&&!Ga.has(e.format))throw new TypeError("Invalid format.");if(e.frameOffset!==void 0&&(!Number.isInteger(e.frameOffset)||e.frameOffset<0))throw new TypeError("frameOffset must be a non-negative integer.");if(e.frameCount!==void 0&&(!Number.isInteger(e.frameCount)||e.frameCount<0))throw new TypeError("frameCount must be a non-negative integer.");if(this._closed)throw new Error("AudioSample is closed.");let{planeIndex:r,format:n,frameCount:a,frameOffset:s}=e,o=this.format,c=n??this.format;if(!c)throw new Error("Destination format not determined");let u=this.numberOfFrames,d=this.numberOfChannels,l=s??0;if(l>=u)throw new RangeError("frameOffset out of range");let m=a!==void 0?a:u-l;if(m>u-l)throw new RangeError("frameCount out of range");let f=nr(c),g=Ar(c);if(g&&r>=d)throw new RangeError("planeIndex out of range");if(!g&&r!==0)throw new RangeError("planeIndex out of range");let h=(g?m:m*d)*f;if(t.byteLength2&&c!==o?Qu(this._data,y,o,c,d,r,l,m):this._data.copyTo(t,{planeIndex:r,frameOffset:l,frameCount:m,format:c});else{let w=this._data,S=D(w),T=Jo(o),x=nr(o),P=Ar(o);for(let C=0;C0;){let d=Math.min(o,u),l=new Float32Array(n*d);for(let m=0;m0;){let l=Math.min(o,u),m=new Float32Array(n*l);for(let g=0;g{switch(i){case"u8":case"u8-planar":return 1;case"s16":case"s16-planar":return 2;case"s32":case"s32-planar":return 4;case"f32":case"f32-planar":return 4;default:throw new Error("Unknown AudioSampleFormat")}},Ar=i=>{switch(i){case"u8-planar":case"s16-planar":case"s32-planar":case"f32-planar":return!0;default:return!1}},Jo=i=>{switch(i){case"u8":case"u8-planar":return(t,e)=>(t.getUint8(e)-128)/128;case"s16":case"s16-planar":return(t,e)=>t.getInt16(e,!0)/32768;case"s32":case"s32-planar":return(t,e)=>t.getInt32(e,!0)/2147483648;case"f32":case"f32-planar":return(t,e)=>t.getFloat32(e,!0)}},ec=i=>{switch(i){case"u8":case"u8-planar":return(t,e,r)=>t.setUint8(e,ae((r+1)*127.5,0,255));case"s16":case"s16-planar":return(t,e,r)=>t.setInt16(e,ae(Math.round(r*32767),-32768,32767),!0);case"s32":case"s32-planar":return(t,e,r)=>t.setInt32(e,ae(Math.round(r*2147483647),-2147483648,2147483647),!0);case"f32":case"f32-planar":return(t,e,r)=>t.setFloat32(e,r,!0)}},ci=i=>typeof AudioData<"u"&&i instanceof AudioData,Qu=(i,t,e,r,n,a,s,o)=>{let c=Jo(e),u=ec(r),d=nr(e),l=nr(r),m=Ar(e);if(Ar(r))if(m){let g=new ArrayBuffer(o*d),b=D(g);i.copyTo(g,{planeIndex:a,frameOffset:s,frameCount:o,format:e});for(let h=0;h{if(!i||typeof i!="object")throw new TypeError("options must be an object.");if(i.metadataOnly!==void 0&&typeof i.metadataOnly!="boolean")throw new TypeError("options.metadataOnly, when defined, must be a boolean.");if(i.verifyKeyPackets!==void 0&&typeof i.verifyKeyPackets!="boolean")throw new TypeError("options.verifyKeyPackets, when defined, must be a boolean.");if(i.verifyKeyPackets&&i.metadataOnly)throw new TypeError("options.verifyKeyPackets and options.metadataOnly cannot be enabled together.")},bt=i=>{if(!Rt(i))throw new TypeError("timestamp must be a number.")},$a=(i,t,e)=>e.verifyKeyPackets?t.then(async r=>{if(!r||r.type==="delta")return r;let n=await i.determinePacketType(r);return n&&(r.type=n),r}):t,tt=class{constructor(t){if(!(t instanceof or))throw new TypeError("track must be an InputTrack.");this._track=t}getFirstPacket(t={}){if(vr(t),this._track.input._disposed)throw new de;return $a(this._track,this._track._backing.getFirstPacket(t),t)}getPacket(t,e={}){if(bt(t),vr(e),this._track.input._disposed)throw new de;return $a(this._track,this._track._backing.getPacket(t,e),e)}getNextPacket(t,e={}){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");if(vr(e),this._track.input._disposed)throw new de;return $a(this._track,this._track._backing.getNextPacket(t,e),e)}async getKeyPacket(t,e={}){if(bt(t),vr(e),this._track.input._disposed)throw new de;if(!e.verifyKeyPackets)return this._track._backing.getKeyPacket(t,e);let r=await this._track._backing.getKeyPacket(t,e);return r&&(p(r.type==="key"),await this._track.determinePacketType(r)==="delta"?this.getKeyPacket(r.timestamp-1/this._track.timeResolution,e):r)}async getNextKeyPacket(t,e={}){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");if(vr(e),this._track.input._disposed)throw new de;if(!e.verifyKeyPackets)return this._track._backing.getNextKeyPacket(t,e);let r=await this._track._backing.getNextKeyPacket(t,e);return r&&(p(r.type==="key"),await this._track.determinePacketType(r)==="delta"?this.getNextKeyPacket(r,e):r)}packets(t,e,r={}){if(t!==void 0&&!(t instanceof W))throw new TypeError("startPacket must be an EncodedPacket.");if(t!==void 0&&t.isMetadataOnly&&!r?.metadataOnly)throw new TypeError("startPacket can only be metadata-only if options.metadataOnly is enabled.");if(e!==void 0&&!(e instanceof W))throw new TypeError("endPacket must be an EncodedPacket.");if(vr(r),this._track.input._disposed)throw new de;let n=[],{promise:a,resolve:s}=Y(),{promise:o,resolve:c}=Y(),u=!1,d=!1,l=null,m=[],f=()=>Math.max(2,m.length);(async()=>{let b=t??await this.getFirstPacket(r);for(;b&&!d&&!this._track.input._disposed&&!(e&&b.sequenceNumber>=e?.sequenceNumber);){if(n.length>f()){({promise:o,resolve:c}=Y()),await o;continue}n.push(b),s(),{promise:a,resolve:s}=Y(),b=await this.getNextPacket(b,r)}u=!0,s()})().catch(b=>{l||(l=b,s())});let g=this._track;return{async next(){for(;;){if(g.input._disposed)throw new de;if(d)return{value:void 0,done:!0};if(l)throw l;if(n.length>0){let b=n.shift(),h=performance.now();for(m.push(h);m.length>0&&h-m[0]>=1e3;)m.shift();return c(),{value:b,done:!1}}else{if(u)return{value:void 0,done:!0};await a}}},async return(){return d=!0,c(),s(),{value:void 0,done:!0}},async throw(b){throw b},[Symbol.asyncIterator](){return this}}}},mi=class{constructor(t,e){this.onSample=t;this.onError=e}},fi=class{mediaSamplesInRange(t=0,e=1/0){bt(t),bt(e);let r=[],n=!1,a=null,{promise:s,resolve:o}=Y(),{promise:c,resolve:u}=Y(),d=!1,l=!1,m=!1,f=null;(async()=>{let h=await this._createDecoder(x=>{if(u(),x.timestamp>=e&&(l=!0),l){x.close();return}a&&(x.timestamp>t?(r.push(a),n=!0):a.close()),x.timestamp>=t&&(r.push(x),n=!0),a=n?null:x,r.length>0&&(o(),{promise:s,resolve:o}=Y())},x=>{f||(f=x,o())}),y=this._createPacketSink(),k=await y.getKeyPacket(t,{verifyKeyPackets:!0})??await y.getFirstPacket(),w=k,T=y.packets(k??void 0,void 0);for(await T.next();w&&!l&&!this._track.input._disposed;){let x=tc(r.length);if(r.length+h.getDecodeQueueSize()>x){({promise:c,resolve:u}=Y()),await c;continue}h.decode(w);let P=await T.next();if(P.done)break;w=P.value}await T.return(),!m&&!this._track.input._disposed&&await h.flush(),h.close(),!n&&a&&r.push(a),d=!0,o()})().catch(h=>{f||(f=h,o())});let g=this._track,b=()=>{a?.close();for(let h of r)h.close()};return{async next(){for(;;){if(g.input._disposed)throw b(),new de;if(m)return{value:void 0,done:!0};if(f)throw b(),f;if(r.length>0){let h=r.shift();return u(),{value:h,done:!1}}else if(!d)await s;else return{value:void 0,done:!0}}},async return(){return m=!0,l=!0,u(),o(),b(),{value:void 0,done:!0}},async throw(h){throw h},[Symbol.asyncIterator](){return this}}}mediaSamplesAtTimestamps(t){mo(t);let e=lo(t),r=[],n=[],{promise:a,resolve:s}=Y(),{promise:o,resolve:c}=Y(),u=!1,d=!1,l=null,m=b=>{n.push(b),s(),{promise:a,resolve:s}=Y()};(async()=>{let b=await this._createDecoder(x=>{if(c(),d){x.close();return}let P=0;for(;r.length>0&&x.timestamp-r[0]>-1e-10;)P++,r.shift();if(P>0)for(let C=0;C{l||(l=x,s())}),h=this._createPacketSink(),y=null,k=null,w=-1,S=async()=>{p(k);let x=k;for(b.decode(x);x.sequenceNumberP&&!d;)({promise:o,resolve:c}=Y()),await o;if(d)break;let C=await h.getNextPacket(x);p(C),b.decode(C),x=C}w=-1},T=async()=>{await b.flush();for(let x=0;x{l||(l=b,s())});let f=this._track,g=()=>{for(let b of n)b?.close()};return{async next(){for(;;){if(f.input._disposed)throw g(),new de;if(d)return{value:void 0,done:!0};if(l)throw g(),l;if(n.length>0){let b=n.shift();return p(b!==void 0),c(),{value:b,done:!1}}else if(!u)await a;else return{value:void 0,done:!0}}},async return(){return d=!0,c(),s(),g(),{value:void 0,done:!0}},async throw(b){throw b},[Symbol.asyncIterator](){return this}}}},tc=i=>i===0?40:8,Xa=class extends mi{constructor(e,r,n,a,s,o){super(e,r);this.codec=n;this.decoderConfig=a;this.rotation=s;this.timeResolution=o;this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new Et;this.customDecoderQueueSize=0;this.inputTimestamps=[];this.sampleQueue=[];this.currentPacketIndex=0;this.raslSkipped=!1;this.alphaDecoder=null;this.alphaHadKeyframe=!1;this.colorQueue=[];this.alphaQueue=[];this.merger=null;this.mergerCreationFailed=!1;this.decodedAlphaChunkCount=0;this.alphaDecoderQueueSize=0;this.nullAlphaFrameQueue=[];this.currentAlphaPacketIndex=0;this.alphaRaslSkipped=!1;let c=Cr.find(u=>u.supports(n,a));if(c)this.customDecoder=new c,this.customDecoder.codec=n,this.customDecoder.config=a,this.customDecoder.onSample=u=>{if(!(u instanceof pe))throw new TypeError("The argument passed to onSample must be a VideoSample.");this.finalizeAndEmitSample(u)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let u=l=>{if(this.alphaQueue.length>0){let m=this.alphaQueue.shift();p(m!==void 0),this.mergeAlpha(l,m)}else this.colorQueue.push(l)};if(n==="avc"&&this.decoderConfig.description&&Jr()){let l=tn(H(this.decoderConfig.description));if(l&&l.sequenceParameterSets.length>0){let m=ri(l.sequenceParameterSets[0]);m&&m.frameMbsOnlyFlag===0&&(this.decoderConfig={...this.decoderConfig,hardwareAcceleration:"prefer-software"})}}let d=new Error("Decoding error").stack;this.decoder=new VideoDecoder({output:l=>{try{u(l)}catch(m){this.onError(m)}},error:l=>{l.stack=d,this.onError(l)}}),this.decoder.configure(this.decoderConfig)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(p(this.decoder),Math.max(this.decoder.decodeQueueSize,this.alphaDecoder?.decodeQueueSize??0))}decode(e){if(this.codec==="hevc"&&this.currentPacketIndex>0&&!this.raslSkipped){if(this.hasHevcRaslPicture(e.data))return;this.raslSkipped=!0}if(this.customDecoder)this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--);else{if(p(this.decoder),Mt()||Da(this.inputTimestamps,e.timestamp,r=>r),Jr()&&this.currentPacketIndex===0&&this.codec==="avc"){let r=[];for(let a of Wa(e.data,this.decoderConfig)){let s=gt(e.data[a.offset]);s>=20&&s<=31||r.push(e.data.subarray(a.offset,a.offset+a.length))}let n=Uo(r,this.decoderConfig);e=new W(n,e.type,e.timestamp,e.duration)}this.decoder.decode(e.toEncodedVideoChunk()),this.decodeAlphaData(e)}this.currentPacketIndex++}decodeAlphaData(e){if(!e.sideData.alpha||this.mergerCreationFailed){this.pushNullAlphaFrame();return}if(!this.merger)try{this.merger=new Ya}catch(n){console.error("Due to an error, only color data will be decoded.",n),this.mergerCreationFailed=!0,this.decodeAlphaData(e);return}if(!this.alphaDecoder){let n=s=>{if(this.alphaDecoderQueueSize--,this.colorQueue.length>0){let o=this.colorQueue.shift();p(o!==void 0),this.mergeAlpha(o,s)}else this.alphaQueue.push(s);for(this.decodedAlphaChunkCount++;this.nullAlphaFrameQueue.length>0&&this.nullAlphaFrameQueue[0]===this.decodedAlphaChunkCount;)if(this.nullAlphaFrameQueue.shift(),this.colorQueue.length>0){let o=this.colorQueue.shift();p(o!==void 0),this.mergeAlpha(o,null)}else this.alphaQueue.push(null)},a=new Error("Decoding error").stack;this.alphaDecoder=new VideoDecoder({output:s=>{try{n(s)}catch(o){this.onError(o)}},error:s=>{s.stack=a,this.onError(s)}}),this.alphaDecoder.configure(this.decoderConfig)}let r=sn(this.codec,this.decoderConfig,e.sideData.alpha);if(this.alphaHadKeyframe||(this.alphaHadKeyframe=r==="key"),this.alphaHadKeyframe){if(this.codec==="hevc"&&this.currentAlphaPacketIndex>0&&!this.alphaRaslSkipped){if(this.hasHevcRaslPicture(e.sideData.alpha)){this.pushNullAlphaFrame();return}this.alphaRaslSkipped=!0}this.currentAlphaPacketIndex++,this.alphaDecoder.decode(e.alphaToEncodedVideoChunk(r??e.type)),this.alphaDecoderQueueSize++}else this.pushNullAlphaFrame()}pushNullAlphaFrame(){this.alphaDecoderQueueSize===0?this.alphaQueue.push(null):this.nullAlphaFrameQueue.push(this.decodedAlphaChunkCount+this.alphaDecoderQueueSize)}hasHevcRaslPicture(e){for(let r of qa(e,this.decoderConfig)){let n=et(e[r.offset]);if(n===8||n===9)return!0}return!1}sampleHandler(e){if(Mt()){if(this.sampleQueue.length>0&&e.timestamp>=K(this.sampleQueue).timestamp){for(let r of this.sampleQueue)this.finalizeAndEmitSample(r);this.sampleQueue.length=0}Da(this.sampleQueue,e,r=>r.timestamp)}else{let r=this.inputTimestamps.shift();p(r!==void 0),e.setTimestamp(r),this.finalizeAndEmitSample(e)}}finalizeAndEmitSample(e){e.setTimestamp(Math.round(e.timestamp*this.timeResolution)/this.timeResolution),e.setDuration(Math.round(e.duration*this.timeResolution)/this.timeResolution),e.setRotation(this.rotation),this.onSample(e)}mergeAlpha(e,r){if(!r){let s=new pe(e);this.sampleHandler(s);return}p(this.merger),this.merger.update(e,r),e.close(),r.close();let n=new VideoFrame(this.merger.canvas,{timestamp:e.timestamp,duration:e.duration??void 0}),a=new pe(n);this.sampleHandler(a)}async flush(){if(this.customDecoder?await this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(p(this.decoder),await Promise.all([this.decoder.flush(),this.alphaDecoder?.flush()]),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.alphaHadKeyframe=!1,this.decodedAlphaChunkCount=0,this.alphaDecoderQueueSize=0,this.nullAlphaFrameQueue.length=0,this.currentAlphaPacketIndex=0,this.alphaRaslSkipped=!1),Mt()){for(let e of this.sampleQueue)this.finalizeAndEmitSample(e);this.sampleQueue.length=0}this.currentPacketIndex=0,this.raslSkipped=!1}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(p(this.decoder),this.decoder.close(),this.alphaDecoder?.close(),this.colorQueue.forEach(e=>e.close()),this.colorQueue.length=0,this.alphaQueue.forEach(e=>e?.close()),this.alphaQueue.length=0,this.merger?.close());for(let e of this.sampleQueue)e.close();this.sampleQueue.length=0}},Ya=class{constructor(){typeof OffscreenCanvas<"u"?this.canvas=new OffscreenCanvas(300,150):this.canvas=document.createElement("canvas");let t=this.canvas.getContext("webgl2",{premultipliedAlpha:!1});if(!t)throw new Error("Couldn't acquire WebGL 2 context.");this.gl=t,this.program=this.createProgram(),this.vao=this.createVAO(),this.colorTexture=this.createTexture(),this.alphaTexture=this.createTexture(),this.gl.useProgram(this.program),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_colorTexture"),0),this.gl.uniform1i(this.gl.getUniformLocation(this.program,"u_alphaTexture"),1)}createProgram(){let t=this.createShader(this.gl.VERTEX_SHADER,`#version 300 es in vec2 a_position; in vec2 a_texCoord; out vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; } `),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_colorTexture; uniform sampler2D u_alphaTexture; in vec2 v_texCoord; out vec4 fragColor; void main() { vec3 color = texture(u_colorTexture, v_texCoord).rgb; float alpha = texture(u_alphaTexture, v_texCoord).r; fragColor = vec4(color, alpha); } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createShader(t,e){let r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),r}createVAO(){let t=this.gl.createVertexArray();this.gl.bindVertexArray(t);let e=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),r=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,r),this.gl.bufferData(this.gl.ARRAY_BUFFER,e,this.gl.STATIC_DRAW);let n=this.gl.getAttribLocation(this.program,"a_position"),a=this.gl.getAttribLocation(this.program,"a_texCoord");return this.gl.enableVertexAttribArray(n),this.gl.vertexAttribPointer(n,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(a),this.gl.vertexAttribPointer(a,2,this.gl.FLOAT,!1,16,8),t}createTexture(){let t=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),t}update(t,e){(t.displayWidth!==this.canvas.width||t.displayHeight!==this.canvas.height)&&(this.canvas.width=t.displayWidth,this.canvas.height=t.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.colorTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.gl.activeTexture(this.gl.TEXTURE1),this.gl.bindTexture(this.gl.TEXTURE_2D,this.alphaTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,e),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4)}close(){this.gl.getExtension("WEBGL_lose_context")?.loseContext(),this.gl=null}},ar=class extends fi{constructor(t){if(!(t instanceof Fe))throw new TypeError("videoTrack must be an InputVideoTrack.");super(),this._track=t}async _createDecoder(t,e){if(!await this._track.canDecode())throw new Error("This video track cannot be decoded by this browser. Make sure to check decodability before using a track.");let r=this._track.codec,n=this._track.rotation,a=await this._track.getDecoderConfig(),s=this._track.timeResolution;return p(r&&a),new Xa(t,e,r,a,n,s)}_createPacketSink(){return new tt(this._track)}async getSample(t){bt(t);for await(let e of this.mediaSamplesAtTimestamps([t]))return e;throw new Error("Internal error: Iterator returned nothing.")}samples(t=0,e=1/0){return this.mediaSamplesInRange(t,e)}samplesAtTimestamps(t){return this.mediaSamplesAtTimestamps(t)}},pi=class{constructor(t,e={}){this._nextCanvasIndex=0;if(!(t instanceof Fe))throw new TypeError("videoTrack must be an InputVideoTrack.");if(e&&typeof e!="object")throw new TypeError("options must be an object.");if(e.alpha!==void 0&&typeof e.alpha!="boolean")throw new TypeError("options.alpha, when provided, must be a boolean.");if(e.width!==void 0&&(!Number.isInteger(e.width)||e.width<=0))throw new TypeError("options.width, when defined, must be a positive integer.");if(e.height!==void 0&&(!Number.isInteger(e.height)||e.height<=0))throw new TypeError("options.height, when defined, must be a positive integer.");if(e.fit!==void 0&&!["fill","contain","cover"].includes(e.fit))throw new TypeError('options.fit, when provided, must be one of "fill", "contain", or "cover".');if(e.width!==void 0&&e.height!==void 0&&e.fit===void 0)throw new TypeError("When both options.width and options.height are provided, options.fit must also be provided.");if(e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError("options.rotation, when provided, must be 0, 90, 180 or 270.");if(e.crop!==void 0&&li(e.crop,"options."),e.poolSize!==void 0&&(typeof e.poolSize!="number"||!Number.isInteger(e.poolSize)||e.poolSize<0))throw new TypeError("poolSize must be a non-negative integer.");let r=e.rotation??t.rotation,[n,a]=r%180===0?[t.codedWidth,t.codedHeight]:[t.codedHeight,t.codedWidth],s=e.crop;s&&di(s,n,a);let[o,c]=s?[s.width,s.height]:[n,a],u=o/c;e.width!==void 0&&e.height===void 0?(o=e.width,c=Math.round(o/u)):e.width===void 0&&e.height!==void 0?(c=e.height,o=Math.round(c*u)):e.width!==void 0&&e.height!==void 0&&(o=e.width,c=e.height),this._videoTrack=t,this._alpha=e.alpha??!1,this._width=o,this._height=c,this._rotation=r,this._crop=s,this._fit=e.fit??"fill",this._videoSampleSink=new ar(t),this._canvasPool=Array.from({length:e.poolSize??0},()=>null)}_videoSampleToWrappedCanvas(t){let e=this._canvasPool[this._nextCanvasIndex],r=!1;e||(typeof document<"u"?(e=document.createElement("canvas"),e.width=this._width,e.height=this._height):e=new OffscreenCanvas(this._width,this._height),this._canvasPool.length>0&&(this._canvasPool[this._nextCanvasIndex]=e),r=!0),this._canvasPool.length>0&&(this._nextCanvasIndex=(this._nextCanvasIndex+1)%this._canvasPool.length);let n=e.getContext("2d",{alpha:this._alpha||Ze()});p(n),n.resetTransform(),r||(!this._alpha&&Ze()?(n.fillStyle="black",n.fillRect(0,0,this._width,this._height)):n.clearRect(0,0,this._width,this._height)),t.drawWithFit(n,{fit:this._fit,rotation:this._rotation,crop:this._crop});let a={canvas:e,timestamp:t.timestamp,duration:t.duration};return t.close(),a}async getCanvas(t){bt(t);let e=await this._videoSampleSink.getSample(t);return e&&this._videoSampleToWrappedCanvas(e)}canvases(t=0,e=1/0){return Yr(this._videoSampleSink.samples(t,e),r=>this._videoSampleToWrappedCanvas(r))}canvasesAtTimestamps(t){return Yr(this._videoSampleSink.samplesAtTimestamps(t),e=>e&&this._videoSampleToWrappedCanvas(e))}},Za=class extends mi{constructor(e,r,n,a){super(e,r);this.decoder=null;this.customDecoder=null;this.customDecoderCallSerializer=new Et;this.customDecoderQueueSize=0;this.currentTimestamp=null;let s=c=>{(this.currentTimestamp===null||Math.abs(c.timestamp-this.currentTimestamp)>=c.duration)&&(this.currentTimestamp=c.timestamp);let u=this.currentTimestamp;if(this.currentTimestamp+=c.duration,c.numberOfFrames===0){c.close();return}let d=a.sampleRate;c.setTimestamp(Math.round(u*d)/d),e(c)},o=Pr.find(c=>c.supports(n,a));if(o)this.customDecoder=new o,this.customDecoder.codec=n,this.customDecoder.config=a,this.customDecoder.onSample=c=>{if(!(c instanceof Te))throw new TypeError("The argument passed to onSample must be an AudioSample.");s(c)},this.customDecoderCallSerializer.call(()=>this.customDecoder.init());else{let c=new Error("Decoding error").stack;this.decoder=new AudioDecoder({output:u=>{try{s(new Te(u))}catch(d){this.onError(d)}},error:u=>{u.stack=c,this.onError(u)}}),this.decoder.configure(a)}}getDecodeQueueSize(){return this.customDecoder?this.customDecoderQueueSize:(p(this.decoder),this.decoder.decodeQueueSize)}decode(e){this.customDecoder?(this.customDecoderQueueSize++,this.customDecoderCallSerializer.call(()=>this.customDecoder.decode(e)).then(()=>this.customDecoderQueueSize--)):(p(this.decoder),this.decoder.decode(e.toEncodedAudioChunk()))}flush(){return this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.flush()):(p(this.decoder),this.decoder.flush())}close(){this.customDecoder?this.customDecoderCallSerializer.call(()=>this.customDecoder.close()):(p(this.decoder),this.decoder.close())}},Ja=class extends mi{constructor(e,r,n){super(e,r);this.decoderConfig=n;this.currentTimestamp=null;p(Z.includes(n.codec)),this.codec=n.codec;let{dataType:a,sampleSize:s,littleEndian:o}=be(this.codec);switch(this.inputSampleSize=s,s){case 1:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint8(u)-2**7:a==="signed"?this.readInputValue=(c,u)=>c.getInt8(u):a==="ulaw"?this.readInputValue=(c,u)=>Go(c.getUint8(u)):a==="alaw"?this.readInputValue=(c,u)=>$o(c.getUint8(u)):p(!1);break;case 2:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint16(u,o)-2**15:a==="signed"?this.readInputValue=(c,u)=>c.getInt16(u,o):p(!1);break;case 3:a==="unsigned"?this.readInputValue=(c,u)=>Xt(c,u,o)-2**23:a==="signed"?this.readInputValue=(c,u)=>fo(c,u,o):p(!1);break;case 4:a==="unsigned"?this.readInputValue=(c,u)=>c.getUint32(u,o)-2**31:a==="signed"?this.readInputValue=(c,u)=>c.getInt32(u,o):a==="float"?this.readInputValue=(c,u)=>c.getFloat32(u,o):p(!1);break;case 8:a==="float"?this.readInputValue=(c,u)=>c.getFloat64(u,o):p(!1);break;default:J(s),p(!1)}switch(s){case 1:a==="ulaw"||a==="alaw"?(this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(c,u,d)=>c.setInt16(u,d,!0)):(this.outputSampleSize=1,this.outputFormat="u8",this.writeOutputValue=(c,u,d)=>c.setUint8(u,d+2**7));break;case 2:this.outputSampleSize=2,this.outputFormat="s16",this.writeOutputValue=(c,u,d)=>c.setInt16(u,d,!0);break;case 3:this.outputSampleSize=4,this.outputFormat="s32",this.writeOutputValue=(c,u,d)=>c.setInt32(u,d<<8,!0);break;case 4:this.outputSampleSize=4,a==="float"?(this.outputFormat="f32",this.writeOutputValue=(c,u,d)=>c.setFloat32(u,d,!0)):(this.outputFormat="s32",this.writeOutputValue=(c,u,d)=>c.setInt32(u,d,!0));break;case 8:this.outputSampleSize=4,this.outputFormat="f32",this.writeOutputValue=(c,u,d)=>c.setFloat32(u,d,!0);break;default:J(s),p(!1)}}getDecodeQueueSize(){return 0}decode(e){let r=D(e.data),n=e.byteLength/this.decoderConfig.numberOfChannels/this.inputSampleSize,a=n*this.decoderConfig.numberOfChannels*this.outputSampleSize,s=new ArrayBuffer(a),o=new DataView(s);for(let l=0;l=c)&&(this.currentTimestamp=e.timestamp);let u=this.currentTimestamp;this.currentTimestamp+=c;let d=new Te({format:this.outputFormat,data:s,numberOfChannels:this.decoderConfig.numberOfChannels,sampleRate:this.decoderConfig.sampleRate,numberOfFrames:n,timestamp:u});this.onSample(d)}async flush(){}close(){}},sr=class extends fi{constructor(t){if(!(t instanceof te))throw new TypeError("audioTrack must be an InputAudioTrack.");super(),this._track=t}async _createDecoder(t,e){if(!await this._track.canDecode())throw new Error("This audio track cannot be decoded by this browser. Make sure to check decodability before using a track.");let r=this._track.codec,n=await this._track.getDecoderConfig();return p(r&&n),Z.includes(n.codec)?new Ja(t,e,n):new Za(t,e,r,n)}_createPacketSink(){return new tt(this._track)}async getSample(t){bt(t);for await(let e of this.mediaSamplesAtTimestamps([t]))return e;throw new Error("Internal error: Iterator returned nothing.")}samples(t=0,e=1/0){return this.mediaSamplesInRange(t,e)}samplesAtTimestamps(t){return this.mediaSamplesAtTimestamps(t)}},es=class{constructor(t){if(!(t instanceof te))throw new TypeError("audioTrack must be an InputAudioTrack.");this._audioSampleSink=new sr(t)}_audioSampleToWrappedArrayBuffer(t){let e={buffer:t.toAudioBuffer(),timestamp:t.timestamp,duration:t.duration};return t.close(),e}async getBuffer(t){bt(t);let e=await this._audioSampleSink.getSample(t);return e&&this._audioSampleToWrappedArrayBuffer(e)}buffers(t=0,e=1/0){return Yr(this._audioSampleSink.samples(t,e),r=>this._audioSampleToWrappedArrayBuffer(r))}buffersAtTimestamps(t){return Yr(this._audioSampleSink.samplesAtTimestamps(t),e=>e&&this._audioSampleToWrappedArrayBuffer(e))}};var or=class{constructor(t,e){this.input=t,this._backing=e}isVideoTrack(){return this instanceof Fe}isAudioTrack(){return this instanceof te}get id(){return this._backing.getId()}get number(){return this._backing.getNumber()}get internalCodecId(){return this._backing.getInternalCodecId()}get languageCode(){return this._backing.getLanguageCode()}get name(){return this._backing.getName()}get timeResolution(){return this._backing.getTimeResolution()}get disposition(){return this._backing.getDisposition()}getFirstTimestamp(){return this._backing.getFirstTimestamp()}computeDuration(){return this._backing.computeDuration()}async computePacketStats(t=1/0){let e=new tt(this),r=1/0,n=-1/0,a=0,s=0;for await(let o of e.packets(void 0,void 0,{metadataOnly:!0})){if(a>=t&&o.timestamp>=n)break;r=Math.min(r,o.timestamp),n=Math.max(n,o.timestamp+o.duration),a++,s+=o.byteLength}return{packetCount:a,averagePacketRate:a?Number((a/(n-r)).toPrecision(16)):0,averageBitrate:a?Number((8*s/(n-r)).toPrecision(16)):0}}},Fe=class extends or{constructor(t,e){super(t,e),this._backing=e}get type(){return"video"}get codec(){return this._backing.getCodec()}get codedWidth(){return this._backing.getCodedWidth()}get codedHeight(){return this._backing.getCodedHeight()}get rotation(){return this._backing.getRotation()}get displayWidth(){return this._backing.getRotation()%180===0?this._backing.getCodedWidth():this._backing.getCodedHeight()}get displayHeight(){return this._backing.getRotation()%180===0?this._backing.getCodedHeight():this._backing.getCodedWidth()}getColorSpace(){return this._backing.getColorSpace()}async hasHighDynamicRange(){let t=await this._backing.getColorSpace();return t.primaries==="bt2020"||t.primaries==="smpte432"||t.transfer==="pg"||t.transfer==="hlg"||t.matrix==="bt2020-ncl"}canBeTransparent(){return this._backing.canBeTransparent()}getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let t=await this._backing.getDecoderConfig();if(!t)return!1;let e=this._backing.getCodec();return p(e!==null),Cr.some(n=>n.supports(e,t))?!0:typeof VideoDecoder>"u"?!1:(await VideoDecoder.isConfigSupported(t)).supported===!0}catch(t){return console.error("Error during decodability check:",t),!1}}async determinePacketType(t){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("packet must not be metadata-only to determine its type.");if(this.codec===null)return null;let e=await this.getDecoderConfig();return p(e),sn(this.codec,e,t.data)}},te=class extends or{constructor(t,e){super(t,e),this._backing=e}get type(){return"audio"}get codec(){return this._backing.getCodec()}get numberOfChannels(){return this._backing.getNumberOfChannels()}get sampleRate(){return this._backing.getSampleRate()}getDecoderConfig(){return this._backing.getDecoderConfig()}async getCodecParameterString(){return(await this._backing.getDecoderConfig())?.codec??null}async canDecode(){try{let t=await this._backing.getDecoderConfig();if(!t)return!1;let e=this._backing.getCodec();return p(e!==null),Pr.some(r=>r.supports(e,t))||t.codec.startsWith("pcm-")?!0:typeof AudioDecoder>"u"?!1:(await AudioDecoder.isConfigSupported(t)).supported===!0}catch(t){return console.error("Error during decodability check:",t),!1}}async determinePacketType(t){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");return this.codec===null?null:"key"}};var hn=i=>{let e=(i.hasVideo?"video/":i.hasAudio?"audio/":"application/")+(i.isQuickTime?"quicktime":"mp4");if(i.codecStrings.length>0){let r=[...new Set(i.codecStrings)];e+=`; codecs="${r.join(", ")}"`}return e};var Le=8,kt=16,yt=i=>{let t=A(i),e=re(i,4),r=8;t===1&&(t=Me(i),r=16);let a=t-r;return a<0?null:{name:e,totalSize:t,headerSize:r,contentSize:a}},zt=i=>wt(i)/65536,gn=i=>wt(i)/1073741824,bn=i=>{let t=0;for(let e=0;e<4;e++){t<<=7;let r=R(i);if(t|=r&127,(r&128)===0)break}return t},We=i=>{let t=oe(i);return i.skip(2),t=Math.min(t,i.remainingLength),me.decode(M(i,t))},ic=i=>{let t=yt(i);if(!t||t.name!=="data"||i.remainingLength<8)return null;let e=A(i);i.skip(4);let r=M(i,t.contentSize-8);switch(e){case 1:return me.decode(r);case 2:return new TextDecoder("utf-16be").decode(r);case 13:return new Oe(r,"image/jpeg");case 14:return new Oe(r,"image/png");case 27:return new Oe(r,"image/bmp");default:return r}};var kn=class extends fe{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.currentFragment=null;this.lastReadFragment=null;this.reader=e._reader}async computeDuration(){let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.computeDuration()));return Math.max(0,...r)}async getTracks(){return await this.readMetadata(),this.tracks.map(e=>e.inputTrack)}async getMimeType(){await this.readMetadata();let e=await Promise.all(this.tracks.map(r=>r.inputTrack.getCodecParameterString()));return hn({isQuickTime:this.isQuickTime,hasVideo:this.tracks.some(r=>r.info?.type==="video"),hasAudio:this.tracks.some(r=>r.info?.type==="audio"),codecStrings:e.filter(Boolean)})}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}readMetadata(){return this.metadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSliceRange(e,Le,kt);if(r instanceof Promise&&(r=await r),!r)break;let n=e,a=yt(r);if(!a)break;if(a.name==="ftyp"){let s=re(r,4);this.isQuickTime=s==="qt "}else if(a.name==="moov"){let s=this.reader.requestSlice(r.filePos,a.contentSize);if(s instanceof Promise&&(s=await s),!s)break;this.moovSlice=s,this.readContiguousBoxes(this.moovSlice),this.tracks.sort((o,c)=>Number(c.disposition.default)-Number(o.disposition.default));for(let o of this.tracks){let c=o.editListPreviousSegmentDurations/this.movieTimescale;o.editListOffset-=Math.round(c*o.timescale)}break}e=n+a.totalSize}if(this.isFragmented&&this.reader.fileSize!==null){let r=this.reader.requestSlice(this.reader.fileSize-4,4);r instanceof Promise&&(r=await r),p(r);let n=A(r),a=this.reader.fileSize-n;if(a>=0&&a<=this.reader.fileSize-kt){let s=this.reader.requestSliceRange(a,Le,kt);if(s instanceof Promise&&(s=await s),s){let o=yt(s);if(o&&o.name==="mfra"){let c=this.reader.requestSlice(s.filePos,o.contentSize);c instanceof Promise&&(c=await c),c&&this.readContiguousBoxes(c)}}}}})()}getSampleTableForTrack(e){if(e.sampleTable)return e.sampleTable;let r={sampleTimingEntries:[],sampleCompositionTimeOffsets:[],sampleSizes:[],keySampleIndices:null,chunkOffsets:[],sampleToChunk:[],presentationTimestamps:null,presentationTimestampIndexMap:null};e.sampleTable=r,p(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&&Z.includes(e.info.codec)&&r.sampleCompositionTimeOffsets.length===0){p(e.info?.type==="audio");let s=be(e.info.codec),o=[],c=[];for(let u=0;u_.startIndex),y=r.sampleTimingEntries[h],k=N(r.sampleTimingEntries,b,_=>_.startIndex),w=r.sampleTimingEntries[k],S=y.startDecodeTimestamp+(g-y.startIndex)*y.delta,x=w.startDecodeTimestamp+(b-w.startIndex)*w.delta-S,P=K(o);P&&P.delta===x?P.count++:o.push({startIndex:d.startChunkIndex+f,startDecodeTimestamp:S,count:1,delta:x});let C=d.samplesPerChunk*s.sampleSize*e.info.numberOfChannels;c.push(C)}d.startSampleIndex=d.startChunkIndex,d.samplesPerChunk=1}r.sampleTimingEntries=o,r.sampleSizes=c}if(r.sampleCompositionTimeOffsets.length>0){r.presentationTimestamps=[];for(let s of r.sampleTimingEntries)for(let o=0;os.presentationTimestamp-o.presentationTimestamp),r.presentationTimestampIndexMap=Array(r.presentationTimestamps.length).fill(-1);for(let s=0;sm.moofOffset===s.moofOffset);if(l)ts(o,l.timestamp);else{let m=N(u,s.moofOffset-1,f=>f.moofOffset);if(m!==-1){let f=u[m];ts(o,f.endTimestamp)}}o.startTimestampIsFinal=!0}let d=N(u,o.startTimestamp,l=>l.startTimestamp);(d===-1||u[d].moofOffset!==s.moofOffset)&&u.splice(d+1,0,{moofOffset:s.moofOffset,startTimestamp:o.startTimestamp,endTimestamp:o.endTimestamp})}return s}readContiguousBoxes(e){let r=e.filePos;for(;e.filePos-r<=e.length-Le&&this.traverseBox(e););}*iterateContiguousBoxes(e){let r=e.filePos;for(;e.filePos-r<=e.length-Le;){let n=e.filePos,a=yt(e);if(!a)break;yield{boxInfo:a,slice:e},e.filePos=n+a.totalSize}}traverseBox(e){let r=e.filePos,n=yt(e);if(!n)return!1;let a=e.filePos,s=r+n.totalSize;switch(n.name){case"mdia":case"minf":case"dinf":case"mfra":case"edts":this.readContiguousBoxes(e.slice(a,n.contentSize));break;case"mvhd":{let o=R(e);e.skip(3),o===1?(e.skip(16),this.movieTimescale=A(e),this.movieDurationInTimescale=Me(e)):(e.skip(8),this.movieTimescale=A(e),this.movieDurationInTimescale=A(e))}break;case"trak":{let o={id:-1,demuxer:this,inputTrack:null,disposition:{...we},info:null,timescale:-1,durationInMovieTimescale:-1,durationInMediaTimescale:-1,rotation:0,internalCodecId:null,name:null,languageCode:ee,sampleTableByteOffset:-1,sampleTable:null,fragmentLookupTable:[],currentFragmentState:null,fragmentPositionCache:[],editListPreviousSegmentDurations:0,editListOffset:0};if(this.currentTrack=o,this.readContiguousBoxes(e.slice(a,n.contentSize)),o.id!==-1&&o.timescale!==-1&&o.info!==null){if(o.info.type==="video"&&o.info.width!==-1){let c=o;o.inputTrack=new Fe(this.input,new rs(c)),this.tracks.push(o)}else if(o.info.type==="audio"&&o.info.numberOfChannels!==-1){let c=o;o.inputTrack=new te(this.input,new is(c)),this.tracks.push(o)}}this.currentTrack=null}break;case"tkhd":{let o=this.currentTrack;if(!o)break;let c=R(e),d=!!(Nt(e)&1);if(o.disposition.default=d,c===0)e.skip(8),o.id=A(e),e.skip(4),o.durationInMovieTimescale=A(e);else if(c===1)e.skip(16),o.id=A(e),e.skip(4),o.durationInMovieTimescale=Me(e);else throw new Error(`Incorrect track header version ${c}.`);e.skip(2*4+2+2+2+2);let l=[zt(e),zt(e),gn(e),zt(e),zt(e),gn(e),zt(e),zt(e),gn(e)],m=_t(Zr(Zu(l),90));p(m===0||m===90||m===180||m===270),o.rotation=m}break;case"elst":{let o=this.currentTrack;if(!o)break;let c=R(e);e.skip(3);let u=!1,d=0,l=A(e);for(let m=0;m0){o.languageCode="";for(let d=0;d<3;d++)o.languageCode=String.fromCharCode(96+(u&31))+o.languageCode,u>>=5;lt(o.languageCode)||(o.languageCode=ee)}}break;case"hdlr":{let o=this.currentTrack;if(!o)break;e.skip(8);let c=re(e,4);c==="vide"?o.info={type:"video",width:-1,height:-1,codec:null,codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}:c==="soun"&&(o.info={type:"audio",numberOfChannels:-1,sampleRate:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case"stbl":{let o=this.currentTrack;if(!o)break;o.sampleTableByteOffset=r,this.readContiguousBoxes(e.slice(a,n.contentSize))}break;case"stsd":{let o=this.currentTrack;if(!o||o.info===null||o.sampleTable)break;let c=R(e);e.skip(3);let u=A(e);for(let d=0;d0){if(g===1)e.skip(4),h=8*A(e),e.skip(2*4);else if(g===2){e.skip(4),y=wn(e),b=A(e),e.skip(4),h=A(e);let k=A(e);if(e.skip(2*4),f==="lpcm"){let w=h+7>>3,S=!!(k&1),T=!!(k&2),x=k&4?-1:0;h>0&&h<=64&&(S?h===32&&(o.info.codec=T?"pcm-f32be":"pcm-f32"):x&1<>4,m=d>>1&7,f=d&1,g=R(e),b=R(e),h=R(e);o.info.vp9CodecInfo={profile:c,level:u,bitDepth:l,chromaSubsampling:m,videoFullRangeFlag:f,colourPrimaries:g,transferCharacteristics:b,matrixCoefficients:h}}break;case"av1C":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="video"),e.skip(1);let c=R(e),u=c>>5,d=c&31,l=R(e),m=l>>7,f=l>>6&1,g=l>>5&1,b=l>>4&1,h=l>>3&1,y=l>>2&1,k=l&3,w=u===2&&f?g?12:10:f?10:8;o.info.av1CodecInfo={profile:u,level:d,tier:m,bitDepth:w,monochrome:b,chromaSubsamplingX:h,chromaSubsamplingY:y,chromaSamplePosition:k}}break;case"colr":{let o=this.currentTrack;if(!o||(p(o.info?.type==="video"),re(e,4)!=="nclx"))break;let u=oe(e),d=oe(e),l=oe(e),m=!!(R(e)&128);o.info.colorSpace={primaries:Gt[u],transfer:Qt[d],matrix:$t[l],fullRange:m}}break;case"wave":this.readContiguousBoxes(e.slice(a,n.contentSize));break;case"esds":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let c=R(e);p(c===3),bn(e),e.skip(2);let u=R(e),d=(u&128)!==0,l=(u&64)!==0,m=(u&32)!==0;if(d&&e.skip(2),l){let y=R(e);e.skip(y)}m&&e.skip(2);let f=R(e);p(f===4);let g=bn(e),b=e.filePos,h=R(e);if(h===64||h===103?(o.info.codec="aac",o.info.aacCodecInfo={isMpeg2:h===103,objectType:null}):h===105||h===107?o.info.codec="mp3":h===221?o.info.codec="vorbis":console.warn(`Unsupported audio codec (objectTypeIndication ${h}) - discarding track.`),e.skip(12),g>e.filePos-b){let y=R(e);p(y===5);let k=bn(e);if(o.info.codecDescription=M(e,k),o.info.codec==="aac"){let w=ht(o.info.codecDescription);w.numberOfChannels!==null&&(o.info.numberOfChannels=w.numberOfChannels),w.sampleRate!==null&&(o.info.sampleRate=w.sampleRate)}}}break;case"enda":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),oe(e)&255&&(o.info.codec==="pcm-s16be"?o.info.codec="pcm-s16":o.info.codec==="pcm-s24be"?o.info.codec="pcm-s24":o.info.codec==="pcm-s32be"?o.info.codec="pcm-s32":o.info.codec==="pcm-f32be"?o.info.codec="pcm-f32":o.info.codec==="pcm-f64be"&&(o.info.codec="pcm-f64"))}break;case"pcmC":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let u=!!(R(e)&1),d=R(e);o.info.codec==="pcm-s16be"?u?d===16?o.info.codec="pcm-s16":d===24?o.info.codec="pcm-s24":d===32?o.info.codec="pcm-s32":(console.warn(`Invalid ipcm sample size ${d}.`),o.info.codec=null):d===16?o.info.codec="pcm-s16be":d===24?o.info.codec="pcm-s24be":d===32?o.info.codec="pcm-s32be":(console.warn(`Invalid ipcm sample size ${d}.`),o.info.codec=null):o.info.codec==="pcm-f32be"&&(u?d===32?o.info.codec="pcm-f32":d===64?o.info.codec="pcm-f64":(console.warn(`Invalid fpcm sample size ${d}.`),o.info.codec=null):d===32?o.info.codec="pcm-f32be":d===64?o.info.codec="pcm-f64be":(console.warn(`Invalid fpcm sample size ${d}.`),o.info.codec=null));break}case"dOps":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(1);let c=R(e),u=oe(e),d=A(e),l=hi(e),m=R(e),f;m!==0?f=M(e,2+c):f=new Uint8Array(0);let g=new Uint8Array(19+f.byteLength),b=new DataView(g.buffer);b.setUint32(0,1332770163,!1),b.setUint32(4,1214603620,!1),b.setUint8(8,1),b.setUint8(9,c),b.setUint16(10,u,!0),b.setUint32(12,d,!0),b.setInt16(16,l,!0),b.setUint8(18,m),g.set(f,19),o.info.codecDescription=g,o.info.numberOfChannels=c}break;case"dfLa":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio"),e.skip(4);let c=127,u=128,d=e.filePos;for(;e.filePos>>12,S=(k>>9&7)+1;o.info.sampleRate=w,o.info.numberOfChannels=S,e.skip(20)}else e.skip(h);if(b&u)break}let l=e.filePos;e.filePos=d;let m=M(e,l-d),f=new Uint8Array(4+m.byteLength);new DataView(f.buffer).setUint32(0,1716281667,!1),f.set(m,4),o.info.codecDescription=f}break;case"dac3":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio");let c=M(e,3),u=new V(c),d=u.readBits(2);u.skipBits(8);let l=u.readBits(3),m=u.readBits(1);d<3&&(o.info.sampleRate=er[d]),o.info.numberOfChannels=ai[l]+m}break;case"dec3":{let o=this.currentTrack;if(!o)break;p(o.info?.type==="audio");let c=M(e,n.contentSize),u=jo(c);if(!u){console.warn("Invalid dec3 box contents, ignoring.");break}let d=un(u);d!==null&&(o.info.sampleRate=d),o.info.numberOfChannels=dn(u)}break;case"stts":{let o=this.currentTrack;if(!o||!o.sampleTable)break;e.skip(4);let c=A(e),u=0,d=0;for(let l=0;lw.id===c);if(!u)break;let d=A(e),l=(d&48)>>4,m=(d&12)>>2,f=d&3,g=[R,oe,Nt,A],b=g[l],h=g[m],y=g[f],k=A(e);for(let w=0;ww.timestamp-S.timestamp);for(let w=0;wk.id===b);if(!h)break;let y=this.fragmentTrackDefaults.find(k=>k.trackId===b);this.currentTrack=h,h.currentFragmentState={baseDataOffset:this.currentFragment.implicitBaseDataOffset,sampleDescriptionIndex:y?.defaultSampleDescriptionIndex??null,defaultSampleDuration:y?.defaultSampleDuration??null,defaultSampleSize:y?.defaultSampleSize??null,defaultSampleFlags:y?.defaultSampleFlags??null,startTimestamp:null},c?h.currentFragmentState.baseDataOffset=Me(e):g&&(h.currentFragmentState.baseDataOffset=this.currentFragment.moofOffset),u&&(h.currentFragmentState.sampleDescriptionIndex=A(e)),d&&(h.currentFragmentState.defaultSampleDuration=A(e)),l&&(h.currentFragmentState.defaultSampleSize=A(e)),m&&(h.currentFragmentState.defaultSampleFlags=A(e)),f&&(h.currentFragmentState.defaultSampleDuration=0)}break;case"tfdt":{let o=this.currentTrack;if(!o)break;p(o.currentFragmentState);let c=R(e);e.skip(3);let u=c===0?A(e):Me(e);o.currentFragmentState.startTimestamp=u}break;case"trun":{let o=this.currentTrack;if(!o)break;if(p(this.currentFragment),p(o.currentFragmentState),this.currentFragment.trackData.has(o.id)){console.warn("Can't have two trun boxes for the same track in one fragment. Ignoring...");break}let c=R(e),u=Nt(e),d=!!(u&1),l=!!(u&4),m=!!(u&256),f=!!(u&512),g=!!(u&1024),b=!!(u&2048),h=A(e),y=o.currentFragmentState.baseDataOffset;d&&(y+=wt(e));let k=null;l&&(k=A(e));let w=y;if(h===0){this.currentFragment.implicitBaseDataOffset=w;break}let S=0,T={track:o,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,samples:[],presentationTimestamps:[],startTimestampIsFinal:!1};this.currentFragment.trackData.set(o.id,T);for(let C=0;C({presentationTimestamp:C.presentationTimestamp,sampleIndex:_})).sort((C,_)=>C.presentationTimestamp-_.presentationTimestamp);for(let C=0;C0&&(this.metadataTags.trackNumber??=g),b&&Number.isInteger(b)&&b>0&&(this.metadataTags.tracksTotal??=b)}break;case"trkn":if(m instanceof Uint8Array&&m.length>=6){let f=D(m),g=f.getUint16(2,!1),b=f.getUint16(4,!1);g>0&&(this.metadataTags.trackNumber??=g),b>0&&(this.metadataTags.tracksTotal??=b)}break;case"disc":case"disk":if(m instanceof Uint8Array&&m.length>=6){let f=D(m),g=f.getUint16(2,!1),b=f.getUint16(4,!1);g>0&&(this.metadataTags.discNumber??=g),b>0&&(this.metadataTags.discsTotal??=b)}break}}}break}return e.filePos=s,!0}},yn=class{constructor(t){this.internalTrack=t;this.packetToSampleIndex=new WeakMap;this.packetToFragmentLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let t=this.internalTrack.demuxer,r=this.internalTrack.inputTrack.type,n=0;for(let a of t.tracks)if(a.inputTrack.type===r&&n++,a===this.internalTrack)break;return n}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.internalCodecId}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}getTimeResolution(){return this.internalTrack.timescale}getDisposition(){return this.internalTrack.disposition}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}async getFirstTimestamp(){return(await this.getFirstPacket({metadataOnly:!0}))?.timestamp??0}async getFirstPacket(t){let e=await this.fetchPacketForSampleIndex(0,t);return e||!this.internalTrack.demuxer.isFragmented?e:this.performFragmentedLookup(null,r=>r.trackData.get(this.internalTrack.id)?{sampleIndex:0,correctSampleFound:!0}:{sampleIndex:-1,correctSampleFound:!1},-1/0,1/0,t)}mapTimestampIntoTimescale(t){return dt(t*this.internalTrack.timescale)+this.internalTrack.editListOffset}async getPacket(t,e){let r=this.mapTimestampIntoTimescale(t),n=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),a=ns(n,r),s=await this.fetchPacketForSampleIndex(a,e);return!nc(n)||!this.internalTrack.demuxer.isFragmented?s:this.performFragmentedLookup(null,o=>{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let u=N(c.presentationTimestamps,r,m=>m.presentationTimestamp),d=u!==-1?c.presentationTimestamps[u].sampleIndex:-1,l=u!==-1&&r{if(a===n.fragment){let s=a.trackData.get(this.internalTrack.id);if(n.sampleIndex+1{let c=o.trackData.get(this.internalTrack.id);if(!c)return{sampleIndex:-1,correctSampleFound:!1};let u=gr(c.presentationTimestamps,m=>c.samples[m.sampleIndex].isKeyFrame&&m.presentationTimestamp<=r),d=u!==-1?c.presentationTimestamps[u].sampleIndex:-1,l=u!==-1&&r{if(a===n.fragment){let o=a.trackData.get(this.internalTrack.id).samples.findIndex((c,u)=>c.isKeyFrame&&u>n.sampleIndex);if(o!==-1)return{sampleIndex:o,correctSampleFound:!0}}else{let s=a.trackData.get(this.internalTrack.id);if(s&&s.firstKeyFrameTimestamp!==null){let o=s.samples.findIndex(c=>c.isKeyFrame);return p(o!==-1),{sampleIndex:o,correctSampleFound:!0}}}return{sampleIndex:-1,correctSampleFound:!1}},-1/0,1/0,e)}async fetchPacketForSampleIndex(t,e){if(t===-1)return null;let r=this.internalTrack.demuxer.getSampleTableForTrack(this.internalTrack),n=Xu(r,t);if(!n)return null;let a;if(e.metadataOnly)a=se;else{let u=this.internalTrack.demuxer.reader.requestSlice(n.sampleOffset,n.sampleSize);u instanceof Promise&&(u=await u),p(u),a=M(u,n.sampleSize)}let s=(n.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,o=n.duration/this.internalTrack.timescale,c=new W(a,n.isKeyFrame?"key":"delta",s,o,t,n.sampleSize);return this.packetToSampleIndex.set(c,t),c}async fetchPacketInFragment(t,e,r){if(e===-1)return null;let a=t.trackData.get(this.internalTrack.id).samples[e];p(a);let s;if(r.metadataOnly)s=se;else{let d=this.internalTrack.demuxer.reader.requestSlice(a.byteOffset,a.byteSize);d instanceof Promise&&(d=await d),p(d),s=M(d,a.byteSize)}let o=(a.presentationTimestamp-this.internalTrack.editListOffset)/this.internalTrack.timescale,c=a.duration/this.internalTrack.timescale,u=new W(s,a.isKeyFrame?"key":"delta",o,c,t.moofOffset+e,a.byteSize);return this.packetToFragmentLocation.set(u,{fragment:t,sampleIndex:e}),u}async performFragmentedLookup(t,e,r,n,a){let s=this.internalTrack.demuxer,o=null,c=null,u=-1;if(t){let{sampleIndex:h,correctSampleFound:y}=e(t);if(y)return this.fetchPacketInFragment(t,h,a);h!==-1&&(c=t,u=h)}let d=N(this.internalTrack.fragmentLookupTable,r,h=>h.timestamp),l=d!==-1?this.internalTrack.fragmentLookupTable[d]:null,m=N(this.internalTrack.fragmentPositionCache,r,h=>h.startTimestamp),f=m!==-1?this.internalTrack.fragmentPositionCache[m]:null,g=Math.max(l?.moofOffset??0,f?.moofOffset??0)||null,b;for(t?g===null||t.moofOffset>=g?(b=t.moofOffset+t.moofSize,o=t):b=g:b=g??0;;){if(o){let w=o.trackData.get(this.internalTrack.id);if(w&&w.startTimestamp>n)break}let h=s.reader.requestSliceRange(b,Le,kt);if(h instanceof Promise&&(h=await h),!h)break;let y=b,k=yt(h);if(!k)break;if(k.name==="moof"){o=await s.readFragment(y);let{sampleIndex:w,correctSampleFound:S}=e(o);if(S)return this.fetchPacketInFragment(o,w,a);w!==-1&&(c=o,u=w)}b=y+k.totalSize}if(l&&(!c||c.moofOffset{if(this.internalTrack.info.codec==="vp9"&&!this.internalTrack.info.vp9CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.vp9CodecInfo=e&&rn(e.data)}else if(this.internalTrack.info.codec==="av1"&&!this.internalTrack.info.av1CodecInfo){let e=await this.getFirstPacket({});this.internalTrack.info.av1CodecInfo=e&&nn(e.data)}return{codec:br(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}})():null}},is=class extends yn{constructor(e){super(e);this.decoderConfig=null;this.internalTrack=e}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:kr(this.internalTrack.info),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}:null}},ns=(i,t)=>{if(i.presentationTimestamps){let e=N(i.presentationTimestamps,t,r=>r.presentationTimestamp);return e===-1?-1:i.presentationTimestamps[e].sampleIndex}else{let e=N(i.sampleTimingEntries,t,n=>n.startDecodeTimestamp);if(e===-1)return-1;let r=i.sampleTimingEntries[e];return r.startIndex+Math.min(Math.floor((t-r.startDecodeTimestamp)/r.delta),r.count-1)}},$u=(i,t)=>{if(!i.keySampleIndices)return ns(i,t);if(i.presentationTimestamps){let e=N(i.presentationTimestamps,t,r=>r.presentationTimestamp);if(e===-1)return-1;for(let r=e;r>=0;r--){let n=i.presentationTimestamps[r].sampleIndex;if(ut(i.keySampleIndices,n,s=>s)!==-1)return n}return-1}else{let e=ns(i,t),r=N(i.keySampleIndices,e,n=>n);return i.keySampleIndices[r]??-1}},Xu=(i,t)=>{let e=N(i.sampleTimingEntries,t,y=>y.startIndex),r=i.sampleTimingEntries[e];if(!r||r.startIndex+r.count<=t)return null;let a=r.startDecodeTimestamp+(t-r.startIndex)*r.delta,s=N(i.sampleCompositionTimeOffsets,t,y=>y.startIndex),o=i.sampleCompositionTimeOffsets[s];o&&t-o.startIndexy.startSampleIndex),d=i.sampleToChunk[u];p(d);let l=d.startChunkIndex+Math.floor((t-d.startSampleIndex)/d.samplesPerChunk),m=i.chunkOffsets[l],f=d.startSampleIndex+(l-d.startChunkIndex)*d.samplesPerChunk,g=0,b=m;if(i.sampleSizes.length===1)b+=c*(t-f),g+=c*d.samplesPerChunk;else for(let y=f;yy)!==-1:!0}},Yu=(i,t)=>{if(!i.keySampleIndices)return t+1;let e=N(i.keySampleIndices,t,r=>r);return i.keySampleIndices[e+1]??-1},ts=(i,t)=>{i.startTimestamp+=t,i.endTimestamp+=t;for(let e of i.samples)e.presentationTimestamp+=t;for(let e of i.presentationTimestamps)e.presentationTimestamp+=t},Zu=i=>{let[t,,,e]=i,r=Math.hypot(t,e),n=t/r,a=e/r,s=-Math.atan2(a,n)*(180/Math.PI);return Number.isFinite(s)?s:0},nc=i=>i.sampleSizes.length===0;var Er=class{constructor(t){this.value=t}},_r=class{constructor(t){this.value=t}},gi=class{constructor(t){this.value=t}},He=class{constructor(t){this.value=t}};var Ju=[440786851,408125543],Fr=[290298740,357149030,524531317,374648427,475249515,423732329,272869232,307544935],bi=[...Ju,...Fr],oc=i=>i<256?1:i<65536?2:i<1<<24?3:i<2**32?4:i<2**40?5:6,cc=i=>i<1n<<8n?1:i<1n<<16n?2:i<1n<<24n?3:i<1n<<32n?4:i<1n<<40n?5:i<1n<<48n?6:i<1n<<56n?7:8,uc=i=>i>=-64&&i<64?1:i>=-8192&&i<8192?2:i>=-(1<<20)&&i<1<<20?3:i>=-(1<<27)&&i<1<<27?4:i>=-(2**34)&&i<2**34?5:6,ed=i=>{if(i<127)return 1;if(i<16383)return 2;if(i<(1<<21)-1)return 3;if(i<(1<<28)-1)return 4;if(i<2**35-1)return 5;if(i<2**42-1)return 6;throw new Error("EBML varint size not supported "+i)},Tn=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer);this.offsets=new WeakMap;this.dataOffsets=new WeakMap}writeByte(t){this.helperView.setUint8(0,t),this.writer.write(this.helper.subarray(0,1))}writeFloat32(t){this.helperView.setFloat32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeFloat64(t){this.helperView.setFloat64(0,t,!1),this.writer.write(this.helper)}writeUnsignedInt(t,e=oc(t)){let r=0;switch(e){case 6:this.helperView.setUint8(r++,t/2**40|0);case 5:this.helperView.setUint8(r++,t/2**32|0);case 4:this.helperView.setUint8(r++,t>>24);case 3:this.helperView.setUint8(r++,t>>16);case 2:this.helperView.setUint8(r++,t>>8);case 1:this.helperView.setUint8(r++,t);break;default:throw new Error("Bad unsigned int size "+e)}this.writer.write(this.helper.subarray(0,r))}writeUnsignedBigInt(t,e=cc(t)){let r=0;for(let n=e-1;n>=0;n--)this.helperView.setUint8(r++,Number(t>>BigInt(n*8)&0xffn));this.writer.write(this.helper.subarray(0,r))}writeSignedInt(t,e=uc(t)){t<0&&(t+=2**(e*8)),this.writeUnsignedInt(t,e)}writeVarInt(t,e=ed(t)){let r=0;switch(e){case 1:this.helperView.setUint8(r++,128|t);break;case 2:this.helperView.setUint8(r++,64|t>>8),this.helperView.setUint8(r++,t);break;case 3:this.helperView.setUint8(r++,32|t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 4:this.helperView.setUint8(r++,16|t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 5:this.helperView.setUint8(r++,8|t/2**32&7),this.helperView.setUint8(r++,t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;case 6:this.helperView.setUint8(r++,4|t/2**40&3),this.helperView.setUint8(r++,t/2**32|0),this.helperView.setUint8(r++,t>>24),this.helperView.setUint8(r++,t>>16),this.helperView.setUint8(r++,t>>8),this.helperView.setUint8(r++,t);break;default:throw new Error("Bad EBML varint size "+e)}this.writer.write(this.helper.subarray(0,r))}writeAsciiString(t){this.writer.write(new Uint8Array(t.split("").map(e=>e.charCodeAt(0))))}writeEBML(t){if(t!==null)if(t instanceof Uint8Array)this.writer.write(t);else if(Array.isArray(t))for(let e of t)this.writeEBML(e);else if(this.offsets.set(t,this.writer.getPos()),this.writeUnsignedInt(t.id),Array.isArray(t.data)){let e=this.writer.getPos(),r=t.size===-1?1:t.size??4;t.size===-1?this.writeByte(255):this.writer.seek(this.writer.getPos()+r);let n=this.writer.getPos();if(this.dataOffsets.set(t,n),this.writeEBML(t.data),t.size!==-1){let a=this.writer.getPos()-n,s=this.writer.getPos();this.writer.seek(e),this.writeVarInt(a,r),this.writer.seek(s)}}else if(typeof t.data=="number"){let e=t.size??oc(t.data);this.writeVarInt(e),this.writeUnsignedInt(t.data,e)}else if(typeof t.data=="bigint"){let e=t.size??cc(t.data);this.writeVarInt(e),this.writeUnsignedBigInt(t.data,e)}else if(typeof t.data=="string")this.writeVarInt(t.data.length),this.writeAsciiString(t.data);else if(t.data instanceof Uint8Array)this.writeVarInt(t.data.byteLength,t.size),this.writer.write(t.data);else if(t.data instanceof Er)this.writeVarInt(4),this.writeFloat32(t.data.value);else if(t.data instanceof _r)this.writeVarInt(8),this.writeFloat64(t.data.value);else if(t.data instanceof gi){let e=t.size??uc(t.data.value);this.writeVarInt(e),this.writeSignedInt(t.data.value,e)}else if(t.data instanceof He){let e=X.encode(t.data.value);this.writeVarInt(e.length),this.writer.write(e)}else J(t.data)}},as=8,Ie=2,qe=2*as,ss=i=>{if(i.remainingLength<1)return null;let t=R(i);if(i.skip(-1),t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;return i.remainingLength{if(i.remainingLength<1)return null;let t=R(i);if(t===0)return null;let e=1,r=128;for(;(t&r)===0;)e++,r>>=1;if(i.remainingLength{if(t<1||t>8)throw new Error("Bad unsigned int size "+t);let e=0;for(let r=0;r{if(t<1)throw new Error("Bad unsigned int size "+t);let e=0n;for(let r=0;r{let t=ss(i);return t===null||i.remainingLength{if(i.remainingLength<1)return null;if(R(i)===255)return;i.skip(-1);let e=Mr(i);if(e===null)return null;if(e!==72057594037927940)return e},je=i=>{p(i.remainingLength>=Ie);let t=Sn(i);if(t===null)return null;let e=os(i);return e===null?null:{id:t,size:e}},Lt=(i,t)=>{let e=M(i,t),r=0;for(;r{let e=M(i,t),r=0;for(;r{if(t===0)return 0;if(t!==4&&t!==8)throw new Error("Bad float size "+t);return t===4?lc(i):wn(i)},Cn=async(i,t,e,r)=>{let n=new Set(e),a=t;for(;r===null||aa?r:a,found:!1}},cs=async(i,t,e,r)=>{let a=new Set(e),s=t;for(;s{let e=(i.hasVideo?"video/":i.hasAudio?"audio/":"application/")+(i.isWebM?"webm":"x-matroska");if(i.codecStrings.length>0){let r=[...new Set(i.codecStrings.filter(Boolean))];e+=`; codecs="${r.join(", ")}"`}return e};var us=[{id:290298740,flag:"seekHeadSeen"},{id:357149030,flag:"infoSeen"},{id:374648427,flag:"tracksSeen"},{id:475249515,flag:"cuesSeen"}],fc=10*2**20,An=class extends fe{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 computeDuration(){let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.computeDuration()));return Math.max(0,...r)}async getTracks(){return await this.readMetadata(),this.segments.flatMap(e=>e.tracks.map(r=>r.inputTrack))}async getMimeType(){await this.readMetadata();let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.getCodecParameterString()));return Pn({isWebM:this.isWebM,hasVideo:this.segments.some(n=>n.tracks.some(a=>a.info?.type==="video")),hasAudio:this.segments.some(n=>n.tracks.some(a=>a.info?.type==="audio")),codecStrings:r.filter(Boolean)})}async getMetadataTags(){await this.readMetadata();for(let r of this.segments)r.metadataTagsCollected||(this.reader.fileSize!==null&&await this.loadSegmentMetadata(r),r.metadataTagsCollected=!0);let e={};for(let r of this.segments)e={...e,...r.metadataTags};return e}readMetadata(){return this.readMetadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSliceRange(e,Ie,qe);if(r instanceof Promise&&(r=await r),!r)break;let n=je(r);if(!n)break;let a=n.id,s=n.size,o=r.filePos;if(a===440786851){Tt(s);let c=this.reader.requestSlice(o,s);if(c instanceof Promise&&(c=await c),!c)break;this.readContiguousElements(c)}else if(a===408125543){if(await this.readSegment(o,s),s===void 0||this.reader.fileSize===null)break}else if(a===524531317){if(this.reader.fileSize===null)break;s===void 0&&(s=(await Cn(this.reader,o,bi,this.reader.fileSize)).pos-o);let c=K(this.segments);c&&(c.elementEndPos=o+s)}Tt(s),e=o+s}})()}async readSegment(e,r){this.currentSegment={seekHeadSeen:!1,infoSeen:!1,tracksSeen:!1,cuesSeen:!1,tagsSeen:!1,attachmentsSeen:!1,timestampScale:-1,timestampFactor:-1,duration:-1,seekEntries:[],tracks:[],cuePoints:[],dataStartPos:e,elementEndPos:r===void 0?null:e+r,clusterSeekStartPos:e,lastReadCluster:null,metadataTags:{},metadataTagsCollected:!1},this.segments.push(this.currentSegment);let n=e;for(;this.currentSegment.elementEndPos===null||nb.id===l);if(g!==-1){let b=us[g].flag;this.currentSegment[b]=!0,Tt(m);let h=this.reader.requestSlice(f,m);h instanceof Promise&&(h=await h),h&&this.readContiguousElements(h)}else if(l===307544935||l===423732329){l===307544935?this.currentSegment.tagsSeen=!0:this.currentSegment.attachmentsSeen=!0,Tt(m);let b=this.reader.requestSlice(f,m);b instanceof Promise&&(b=await b),b&&this.readContiguousElements(b)}else if(l===524531317){this.currentSegment.clusterSeekStartPos=u;break}if(m===void 0)break;n=f+m}if(this.currentSegment.seekEntries.sort((c,u)=>c.segmentPosition-u.segmentPosition),this.reader.fileSize!==null)for(let c of this.currentSegment.seekEntries){let u=us.find(b=>b.id===c.id);if(!u||this.currentSegment[u.flag])continue;let d=this.reader.requestSliceRange(e+c.segmentPosition,Ie,qe);if(d instanceof Promise&&(d=await d),!d)continue;let l=je(d);if(!l)continue;let{id:m,size:f}=l;if(m!==u.id)continue;Tt(f),this.currentSegment[u.flag]=!0;let g=this.reader.requestSlice(d.filePos,f);g instanceof Promise&&(g=await g),g&&this.readContiguousElements(g)}this.currentSegment.timestampScale===-1&&(this.currentSegment.timestampScale=1e6,this.currentSegment.timestampFactor=1e9/1e6);for(let c of this.currentSegment.tracks)c.defaultDurationNs!==null&&(c.defaultDuration=this.currentSegment.timestampFactor*c.defaultDurationNs/1e9);this.currentSegment.tracks.sort((c,u)=>Number(u.disposition.default)-Number(c.disposition.default));let a=new Map(this.currentSegment.tracks.map(c=>[c.id,c]));for(let c of this.currentSegment.cuePoints){let u=a.get(c.trackId);u&&u.cuePoints.push(c)}for(let c of this.currentSegment.tracks){c.cuePoints.sort((u,d)=>u.time-d.time);for(let u=0;uo&&(o=c.cuePoints.length,s=c);for(let c of this.currentSegment.tracks)c.cuePoints.length===0&&(c.cuePoints=s.cuePoints);this.currentSegment=null}async readCluster(e,r){if(r.lastReadCluster?.elementStartPos===e)return r.lastReadCluster;let n=this.reader.requestSliceRange(e,Ie,qe);n instanceof Promise&&(n=await n),p(n);let a=e,s=je(n);p(s);let o=s.id;p(o===524531317);let c=s.size,u=n.filePos;c===void 0&&(c=(await Cn(this.reader,u,bi,r.elementEndPos)).pos-u);let d=this.reader.requestSlice(u,c);d instanceof Promise&&(d=await d);let l={segment:r,elementStartPos:a,elementEndPos:u+c,dataStartPos:u,timestamp:-1,trackData:new Map};if(this.currentCluster=l,d){let m=this.readContiguousElements(d,bi);l.elementEndPos=m}for(let[,m]of l.trackData){let f=m.track;p(m.blocks.length>0);let g=!1;for(let k=0;k({timestamp:k.timestamp,blockIndex:w})).sort((k,w)=>k.timestamp-w.timestamp);for(let k=0;k({timestamp:k.timestamp,blockIndex:w})).sort((k,w)=>k.timestamp-w.timestamp));let b=m.blocks[m.presentationTimestamps[0].blockIndex],h=m.blocks[K(m.presentationTimestamps).blockIndex];m.startTimestamp=b.timestamp,m.endTimestamp=h.timestamp+h.duration;let y=N(f.clusterPositionCache,m.startTimestamp,k=>k.startTimestamp);(y===-1||f.clusterPositionCache[y].elementStartPos!==a)&&f.clusterPositionCache.splice(y+1,0,{elementStartPos:l.elementStartPos,startTimestamp:m.startTimestamp})}return r.lastReadCluster=l,l}getTrackDataInCluster(e,r){let n=e.trackData.get(r);if(!n){let a=e.segment.tracks.find(s=>s.id===r);if(!a)return null;n={track:a,startTimestamp:0,endTimestamp:0,firstKeyFrameTimestamp:null,blocks:[],presentationTimestamps:[]},e.trackData.set(r,n)}return n}expandLacedBlocks(e,r){for(let n=0;n=Ie;){let n=e.filePos;if(!this.traverseElement(e,r))return n}return e.filePos}traverseElement(e,r){let n=je(e);if(!n||r&&r.includes(n.id))return!1;let{id:a,size:s}=n,o=e.filePos;switch(Tt(s),a){case 17026:this.isWebM=Lt(e,s)==="webm";break;case 19899:{if(!this.currentSegment)break;let c={id:-1,segmentPosition:-1};this.currentSegment.seekEntries.push(c),this.readContiguousElements(e.slice(o,s)),(c.id===-1||c.segmentPosition===-1)&&this.currentSegment.seekEntries.pop()}break;case 21419:{let c=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!c)break;c.id=L(e,s)}break;case 21420:{let c=this.currentSegment?.seekEntries[this.currentSegment.seekEntries.length-1];if(!c)break;c.segmentPosition=L(e,s)}break;case 2807729:{if(!this.currentSegment)break;this.currentSegment.timestampScale=L(e,s),this.currentSegment.timestampFactor=1e9/this.currentSegment.timestampScale}break;case 17545:{if(!this.currentSegment)break;this.currentSegment.duration=xn(e,s)}break;case 174:{if(!this.currentSegment||(this.currentTrack={id:-1,segment:this.currentSegment,demuxer:this,clusterPositionCache:[],cuePoints:[],disposition:{...we},inputTrack:null,codecId:null,codecPrivate:null,defaultDuration:null,defaultDurationNs:null,name:null,languageCode:ee,decodingInstructions:[],info:null},this.readContiguousElements(e.slice(o,s)),!this.currentTrack))break;if(this.currentTrack.decodingInstructions.some(c=>c.data?.type!=="decompress"||c.scope!==1||c.data.algorithm!==3)&&(console.warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`),this.currentTrack=null),this.currentTrack&&this.currentTrack.id!==-1&&this.currentTrack.codecId&&this.currentTrack.info){let c=this.currentTrack.codecId.indexOf("/"),u=c===-1?this.currentTrack.codecId:this.currentTrack.codecId.slice(0,c);if(this.currentTrack.info.type==="video"&&this.currentTrack.info.width!==-1&&this.currentTrack.info.height!==-1){this.currentTrack.codecId===Ce.avc?(this.currentTrack.info.codec="avc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):this.currentTrack.codecId===Ce.hevc?(this.currentTrack.info.codec="hevc",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Ce.vp8?this.currentTrack.info.codec="vp8":u===Ce.vp9?this.currentTrack.info.codec="vp9":u===Ce.av1&&(this.currentTrack.info.codec="av1");let d=this.currentTrack,l=new Fe(this.input,new ds(d));this.currentTrack.inputTrack=l,this.currentSegment.tracks.push(this.currentTrack)}else if(this.currentTrack.info.type==="audio"&&this.currentTrack.info.numberOfChannels!==-1&&this.currentTrack.info.sampleRate!==-1){u===Ce.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===Ce.mp3?this.currentTrack.info.codec="mp3":u===Ce.opus?(this.currentTrack.info.codec="opus",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate,this.currentTrack.info.sampleRate=Ne):u===Ce.vorbis?(this.currentTrack.info.codec="vorbis",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Ce.flac?(this.currentTrack.info.codec="flac",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Ce.ac3?(this.currentTrack.info.codec="ac3",this.currentTrack.info.codecDescription=this.currentTrack.codecPrivate):u===Ce.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 d=this.currentTrack,l=new te(this.input,new ls(d));this.currentTrack.inputTrack=l,this.currentSegment.tracks.push(this.currentTrack)}}this.currentTrack=null}break;case 215:{if(!this.currentTrack)break;this.currentTrack.id=L(e,s)}break;case 131:{if(!this.currentTrack)break;let c=L(e,s);c===1?this.currentTrack.info={type:"video",width:-1,height:-1,rotation:0,codec:null,codecDescription:null,colorSpace:null,alphaMode:!1}:c===2&&(this.currentTrack.info={type:"audio",numberOfChannels:-1,sampleRate:-1,bitDepth:-1,codec:null,codecDescription:null,aacCodecInfo:null})}break;case 185:{if(!this.currentTrack)break;L(e,s)||(this.currentTrack=null)}break;case 136:{if(!this.currentTrack)break;this.currentTrack.disposition.default=!!L(e,s)}break;case 21930:{if(!this.currentTrack)break;this.currentTrack.disposition.forced=!!L(e,s)}break;case 21934:{if(!this.currentTrack)break;this.currentTrack.disposition.original=!!L(e,s)}break;case 21931:{if(!this.currentTrack)break;this.currentTrack.disposition.hearingImpaired=!!L(e,s)}break;case 21932:{if(!this.currentTrack)break;this.currentTrack.disposition.visuallyImpaired=!!L(e,s)}break;case 21935:{if(!this.currentTrack)break;this.currentTrack.disposition.commentary=!!L(e,s)}break;case 134:{if(!this.currentTrack)break;this.currentTrack.codecId=Lt(e,s)}break;case 25506:{if(!this.currentTrack)break;this.currentTrack.codecPrivate=M(e,s)}break;case 2352003:{if(!this.currentTrack)break;this.currentTrack.defaultDurationNs=L(e,s)}break;case 21358:{if(!this.currentTrack)break;this.currentTrack.name=Rr(e,s)}break;case 2274716:{if(!this.currentTrack||this.currentTrack.languageCode!==ee)break;this.currentTrack.languageCode=Lt(e,s),lt(this.currentTrack.languageCode)||(this.currentTrack.languageCode=ee)}break;case 2274717:{if(!this.currentTrack)break;let u=Lt(e,s).split("-")[0];u?this.currentTrack.languageCode=u:this.currentTrack.languageCode=ee}break;case 224:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(o,s))}break;case 176:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.width=L(e,s)}break;case 186:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.height=L(e,s)}break;case 21440:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.alphaMode=L(e,s)===1}break;case 21936:{if(this.currentTrack?.info?.type!=="video")break;this.currentTrack.info.colorSpace={},this.readContiguousElements(e.slice(o,s))}break;case 21937:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=L(e,s),u=$t[c]??null;this.currentTrack.info.colorSpace.matrix=u}break;case 21945:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;this.currentTrack.info.colorSpace.fullRange=L(e,s)===2}break;case 21946:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=L(e,s),u=Qt[c]??null;this.currentTrack.info.colorSpace.transfer=u}break;case 21947:{if(this.currentTrack?.info?.type!=="video"||!this.currentTrack.info.colorSpace)break;let c=L(e,s),u=Gt[c]??null;this.currentTrack.info.colorSpace.primaries=u}break;case 30320:{if(this.currentTrack?.info?.type!=="video")break;this.readContiguousElements(e.slice(o,s))}break;case 30325:{if(this.currentTrack?.info?.type!=="video")break;let u=-xn(e,s);try{this.currentTrack.info.rotation=_t(u)}catch{}}break;case 225:{if(this.currentTrack?.info?.type!=="audio")break;this.readContiguousElements(e.slice(o,s))}break;case 181:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.sampleRate=xn(e,s)}break;case 159:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.numberOfChannels=L(e,s)}break;case 25188:{if(this.currentTrack?.info?.type!=="audio")break;this.currentTrack.info.bitDepth=L(e,s)}break;case 187:{if(!this.currentSegment)break;this.readContiguousElements(e.slice(o,s)),this.currentCueTime=null}break;case 179:this.currentCueTime=L(e,s);break;case 183:{if(this.currentCueTime===null)break;p(this.currentSegment);let c={time:this.currentCueTime,trackId:-1,clusterPosition:-1};this.currentSegment.cuePoints.push(c),this.readContiguousElements(e.slice(o,s)),(c.trackId===-1||c.clusterPosition===-1)&&this.currentSegment.cuePoints.pop()}break;case 247:{let c=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!c)break;c.trackId=L(e,s)}break;case 241:{let c=this.currentSegment?.cuePoints[this.currentSegment.cuePoints.length-1];if(!c)break;p(this.currentSegment),c.clusterPosition=this.currentSegment.dataStartPos+L(e,s)}break;case 231:{if(!this.currentCluster)break;this.currentCluster.timestamp=L(e,s)}break;case 163:{if(!this.currentCluster)break;let c=Mr(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let d=hi(e),l=R(e),m=l>>1&3,f=!!(l&128);u.track.info?.type==="audio"&&u.track.info.codec&&(f=!0);let g=M(e,s-(e.filePos-o)),b=u.track.decodingInstructions.length>0;u.blocks.push({timestamp:d,duration:0,isKeyFrame:f,data:g,lacing:m,decoded:!b,mainAdditional:null})}break;case 160:{if(!this.currentCluster)break;this.readContiguousElements(e.slice(o,s)),this.currentBlock=null}break;case 161:{if(!this.currentCluster)break;let c=Mr(e);if(c===null)break;let u=this.getTrackDataInCluster(this.currentCluster,c);if(!u)break;let d=hi(e),m=R(e)>>1&3,f=M(e,s-(e.filePos-o)),g=u.track.decodingInstructions.length>0;this.currentBlock={timestamp:d,duration:0,isKeyFrame:!0,data:f,lacing:m,decoded:!g,mainAdditional:null},u.blocks.push(this.currentBlock)}break;case 30113:this.readContiguousElements(e.slice(o,s));break;case 166:{if(!this.currentBlock)break;this.currentBlockAdditional={addId:1,data:null},this.readContiguousElements(e.slice(o,s)),this.currentBlockAdditional.data&&this.currentBlockAdditional.addId===1&&(this.currentBlock.mainAdditional=this.currentBlockAdditional.data),this.currentBlockAdditional=null}break;case 165:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.data=M(e,s)}break;case 238:{if(!this.currentBlockAdditional)break;this.currentBlockAdditional.addId=L(e,s)}break;case 155:{if(!this.currentBlock)break;this.currentBlock.duration=L(e,s)}break;case 251:{if(!this.currentBlock)break;this.currentBlock.isKeyFrame=!1}break;case 29555:this.currentTagTargetIsMovie=!0,this.readContiguousElements(e.slice(o,s));break;case 25536:this.readContiguousElements(e.slice(o,s));break;case 26826:L(e,s)!==50&&(this.currentTagTargetIsMovie=!1);break;case 25541:case 25545:case 25540:case 25542:this.currentTagTargetIsMovie=!1;break;case 26568:{if(!this.currentTagTargetIsMovie)break;this.currentSimpleTagName=null,this.readContiguousElements(e.slice(o,s))}break;case 17827:this.currentSimpleTagName=Rr(e,s);break;case 17543:{if(!this.currentSimpleTagName)break;let c=Rr(e,s);this.processTagValue(this.currentSimpleTagName,c)}break;case 17541:{if(!this.currentSimpleTagName)break;let c=M(e,s);this.processTagValue(this.currentSimpleTagName,c)}break;case 24999:{if(!this.currentSegment)break;this.currentAttachedFile={fileUid:null,fileName:null,fileMediaType:null,fileData:null,fileDescription:null},this.readContiguousElements(e.slice(o,s));let c=this.currentSegment.metadataTags;if(this.currentAttachedFile.fileUid&&this.currentAttachedFile.fileData&&(c.raw??={},c.raw[this.currentAttachedFile.fileUid.toString()]=new Bt(this.currentAttachedFile.fileData,this.currentAttachedFile.fileMediaType??void 0,this.currentAttachedFile.fileName??void 0,this.currentAttachedFile.fileDescription??void 0)),this.currentAttachedFile.fileMediaType?.startsWith("image/")&&this.currentAttachedFile.fileData){let u=this.currentAttachedFile.fileName,d="unknown";if(u){let l=u.toLowerCase();l.startsWith("cover.")?d="coverFront":l.startsWith("back.")&&(d="coverBack")}c.images??=[],c.images.push({data:this.currentAttachedFile.fileData,mimeType:this.currentAttachedFile.fileMediaType,kind:d,name:this.currentAttachedFile.fileName??void 0,description:this.currentAttachedFile.fileDescription??void 0})}this.currentAttachedFile=null}break;case 18094:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileUid=dc(e,s)}break;case 18030:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileName=Rr(e,s)}break;case 18016:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileMediaType=Lt(e,s)}break;case 18012:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileData=M(e,s)}break;case 18046:{if(!this.currentAttachedFile)break;this.currentAttachedFile.fileDescription=Rr(e,s)}break;case 28032:{if(!this.currentTrack)break;this.readContiguousElements(e.slice(o,s)),this.currentTrack.decodingInstructions.sort((c,u)=>u.order-c.order)}break;case 25152:this.currentDecodingInstruction={order:0,scope:1,data:null},this.readContiguousElements(e.slice(o,s)),this.currentDecodingInstruction.data&&this.currentTrack.decodingInstructions.push(this.currentDecodingInstruction),this.currentDecodingInstruction=null;break;case 20529:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.order=L(e,s)}break;case 20530:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.scope=L(e,s)}break;case 20532:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decompress",algorithm:0,settings:null},this.readContiguousElements(e.slice(o,s))}break;case 16980:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.algorithm=L(e,s)}break;case 16981:{if(this.currentDecodingInstruction?.data?.type!=="decompress")break;this.currentDecodingInstruction.data.settings=M(e,s)}break;case 20533:{if(!this.currentDecodingInstruction)break;this.currentDecodingInstruction.data={type:"decrypt"}}break}return e.filePos=o+s,!0}decodeBlockData(e,r){p(e.decodingInstructions.length>0);let n=r;for(let a of e.decodingInstructions)switch(p(a.data),a.data.type){case"decompress":switch(a.data.algorithm){case 3:if(a.data.settings&&a.data.settings.length>0){let s=a.data.settings,o=new Uint8Array(s.length+n.length);o.set(s,0),o.set(n,s.length),n=o}break;default:}break;default:}return n}processTagValue(e,r){if(!this.currentSegment?.metadataTags)return;let n=this.currentSegment.metadataTags;if(n.raw??={},n.raw[e]??=r,typeof r=="string")switch(e.toLowerCase()){case"title":n.title??=r;break;case"description":n.description??=r;break;case"artist":n.artist??=r;break;case"album":n.album??=r;break;case"album_artist":n.albumArtist??=r;break;case"genre":n.genre??=r;break;case"comment":n.comment??=r;break;case"lyrics":n.lyrics??=r;break;case"date":{let a=new Date(r);Number.isNaN(a.getTime())||(n.date??=a)}break;case"track_number":case"part_number":{let a=r.split("/"),s=Number.parseInt(a[0],10),o=a[1]&&Number.parseInt(a[1],10);Number.isInteger(s)&&s>0&&(n.trackNumber??=s),o&&Number.isInteger(o)&&o>0&&(n.tracksTotal??=o)}break;case"disc_number":case"disc":{let a=r.split("/"),s=Number.parseInt(a[0],10),o=a[1]&&Number.parseInt(a[1],10);Number.isInteger(s)&&s>0&&(n.discNumber??=s),o&&Number.isInteger(o)&&o>0&&(n.discsTotal??=o)}break}}},In=class{constructor(t){this.internalTrack=t;this.packetToClusterLocation=new WeakMap}getId(){return this.internalTrack.id}getNumber(){let t=this.internalTrack.demuxer,r=this.internalTrack.inputTrack.type,n=0;for(let a of t.segments)for(let s of a.tracks)if(s.inputTrack.type===r&&n++,s===this.internalTrack)break;return n}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.internalTrack.codecId}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}getName(){return this.internalTrack.name}getLanguageCode(){return this.internalTrack.languageCode}async getFirstTimestamp(){return(await this.getFirstPacket({metadataOnly:!0}))?.timestamp??0}getTimeResolution(){return this.internalTrack.segment.timestampFactor}getDisposition(){return this.internalTrack.disposition}async getFirstPacket(t){return this.performClusterLookup(null,e=>e.trackData.get(this.internalTrack.id)?{blockIndex:0,correctBlockFound:!0}:{blockIndex:-1,correctBlockFound:!1},-1/0,1/0,t)}intoTimescale(t){return dt(t*this.internalTrack.segment.timestampFactor)}async getPacket(t,e){let r=this.intoTimescale(t);return this.performClusterLookup(null,n=>{let a=n.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=N(a.presentationTimestamps,r,u=>u.timestamp),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(n===r.cluster){let a=n.trackData.get(this.internalTrack.id);if(r.blockIndex+1{let a=n.trackData.get(this.internalTrack.id);if(!a)return{blockIndex:-1,correctBlockFound:!1};let s=gr(a.presentationTimestamps,u=>a.blocks[u.blockIndex].isKeyFrame&&u.timestamp<=r),o=s!==-1?a.presentationTimestamps[s].blockIndex:-1,c=s!==-1&&r{if(n===r.cluster){let s=n.trackData.get(this.internalTrack.id).blocks.findIndex((o,c)=>o.isKeyFrame&&c>r.blockIndex);if(s!==-1)return{blockIndex:s,correctBlockFound:!0}}else{let a=n.trackData.get(this.internalTrack.id);if(a&&a.firstKeyFrameTimestamp!==null){let s=a.blocks.findIndex(o=>o.isKeyFrame);return p(s!==-1),{blockIndex:s,correctBlockFound:!0}}}return{blockIndex:-1,correctBlockFound:!1}},-1/0,1/0,e)}async fetchPacketInCluster(t,e,r){if(e===-1)return null;let a=t.trackData.get(this.internalTrack.id).blocks[e];p(a),a.decoded||(a.data=this.internalTrack.demuxer.decodeBlockData(this.internalTrack,a.data),a.decoded=!0);let s=r.metadataOnly?se:a.data,o=a.timestamp/this.internalTrack.segment.timestampFactor,c=a.duration/this.internalTrack.segment.timestampFactor,u={};a.mainAdditional&&this.internalTrack.info?.type==="video"&&this.internalTrack.info.alphaMode&&(u.alpha=r.metadataOnly?se:a.mainAdditional,u.alphaByteLength=a.mainAdditional.byteLength);let d=new W(s,a.isKeyFrame?"key":"delta",o,c,t.dataStartPos+e,a.data.byteLength,u);return this.packetToClusterLocation.set(d,{cluster:t,blockIndex:e}),d}async performClusterLookup(t,e,r,n,a){let{demuxer:s,segment:o}=this.internalTrack,c=null,u=null,d=-1;if(t){let{blockIndex:y,correctBlockFound:k}=e(t);if(k)return this.fetchPacketInCluster(t,y,a);y!==-1&&(u=t,d=y)}let l=N(this.internalTrack.cuePoints,r,y=>y.time),m=l!==-1?this.internalTrack.cuePoints[l]:null,f=N(this.internalTrack.clusterPositionCache,r,y=>y.startTimestamp),g=f!==-1?this.internalTrack.clusterPositionCache[f]:null,b=Math.max(m?.clusterPosition??0,g?.elementStartPos??0)||null,h;for(t?b===null||t.elementStartPos>=b?(h=t.elementEndPos,c=t):h=b:h=b??o.clusterSeekStartPos;o.elementEndPos===null||h<=o.elementEndPos-Ie;){if(c){let C=c.trackData.get(this.internalTrack.id);if(C&&C.startTimestamp>n)break}let y=s.reader.requestSliceRange(h,Ie,qe);if(y instanceof Promise&&(y=await y),!y)break;let k=h,w=je(y);if(!w||!Fr.includes(w.id)&&w.id!==236){let C=await cs(s.reader,k,Fr,Math.min(o.elementEndPos??1/0,k+fc));if(C){h=C;continue}else break}let S=w.id,T=w.size,x=y.filePos;if(S===524531317){c=await s.readCluster(k,o),T=c.elementEndPos-x;let{blockIndex:C,correctBlockFound:_}=e(c);if(_)return this.fetchPacketInCluster(c,C,a);C!==-1&&(u=c,d=C)}T===void 0&&(p(S!==524531317),T=(await Cn(s.reader,x,bi,o.elementEndPos)).pos-x);let P=x+T;if(o.elementEndPos===null){let C=s.reader.requestSliceRange(P,Ie,qe);if(C instanceof Promise&&(C=await C),!C)break;if(Sn(C)===408125543){o.elementEndPos=P;break}}h=P}if(m&&(!u||u.elementStartPos{let e=null;return(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({})),{codec:br({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?Sr(e.data):null,hevcCodecInfo:this.internalTrack.info.codec==="hevc"&&e?xr(e.data):null,vp9CodecInfo:this.internalTrack.info.codec==="vp9"&&e?rn(e.data):null,av1CodecInfo:this.internalTrack.info.codec==="av1"&&e?nn(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}})():null}},ls=class extends In{constructor(e){super(e);this.decoderConfig=null;this.internalTrack=e}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:kr({codec:this.internalTrack.info.codec,codecDescription:this.internalTrack.info.codecDescription,aacCodecInfo:this.internalTrack.info.aacCodecInfo}),numberOfChannels:this.internalTrack.info.numberOfChannels,sampleRate:this.internalTrack.info.sampleRate,description:this.internalTrack.info.codecDescription??void 0}:null}};var ki=async(i,t,e)=>{let r=t;for(;e===null||r{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();if(!this.firstFrameHeader)throw new Error("No valid MP3 frame found.");this.tracks=[new te(this.input,new ms(this))]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let c=this.reader.requestSlice(this.lastLoadedPos,rt);if(c instanceof Promise&&(c=await c),!c){this.lastSampleLoaded=!0;return}let u=Ke(c);if(!u)break;this.lastLoadedPos=c.filePos+u.size}let e=await ki(this.reader,this.lastLoadedPos,this.reader.fileSize);if(!e){this.lastSampleLoaded=!0;return}let r=e.header;this.lastLoadedPos=e.startPos+r.totalSize-1;let n=Ot(r.mpegVersionId,r.channel),a=this.reader.requestSlice(e.startPos+n,4);if(a instanceof Promise&&(a=await a),a){let c=A(a);if(c===Dt||c===Tr)return}this.firstFrameHeader||(this.firstFrameHeader=r),r.sampleRate!==this.firstFrameHeader.sampleRate&&console.warn(`MP3 changed sample rate mid-file: ${this.firstFrameHeader.sampleRate} Hz to ${r.sampleRate} Hz. Might be a bug, so please report this file.`);let s=r.audioSamplesInFrame/this.firstFrameHeader.sampleRate,o={timestamp:this.nextTimestampInSamples/this.firstFrameHeader.sampleRate,duration:s,dataStart:e.startPos,dataSize:r.totalSize};this.loadedSamples.push(o),this.nextTimestampInSamples+=r.audioSamplesInFrame}async getMimeType(){return"audio/mpeg"}async getTracks(){return await this.readMetadata(),this.tracks}async computeDuration(){await this.readMetadata();let e=this.tracks[0];return p(e),e.computeDuration()}async getMetadataTags(){let e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let r=0,n=!1;for(;;){let a=this.reader.requestSlice(r,rt);if(a instanceof Promise&&(a=await a),!a)break;let s=Ke(a);if(!s)break;n=!0;let o=this.reader.requestSlice(a.filePos,s.size);if(o instanceof Promise&&(o=await o),!o)break;Br(o,s,this.metadataTags),r=a.filePos+s.size}if(!n&&this.reader.fileSize!==null&&this.reader.fileSize>=yi){let a=this.reader.requestSlice(this.reader.fileSize-yi,yi);a instanceof Promise&&(a=await a),p(a),re(a,3)==="TAG"&&pc(a,this.metadataTags)}return this.metadataTags}finally{e()}}},ms=class{constructor(t){this.demuxer=t}getId(){return 1}getNumber(){return 1}async getFirstTimestamp(){return 0}getTimeResolution(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate/this.demuxer.firstFrameHeader.audioSamplesInFrame}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}getName(){return null}getLanguageCode(){return ee}getCodec(){return"mp3"}getInternalCodecId(){return null}getNumberOfChannels(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.channel===3?1:2}getSampleRate(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.sampleRate}getDisposition(){return{...we}}async getDecoderConfig(){return p(this.demuxer.firstFrameHeader),{codec:"mp3",numberOfChannels:this.demuxer.firstFrameHeader.channel===3?1:2,sampleRate:this.demuxer.firstFrameHeader.sampleRate}}async getPacketAtIndex(t,e){if(t===-1)return null;let r=this.demuxer.loadedSamples[t];if(!r)return null;let n;if(e.metadataOnly)n=se;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;n=M(a,r.dataSize)}return new W(n,"key",r.timestamp,r.duration,t,r.dataSize)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let n=ut(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(n===-1)throw new Error("Packet was not created from this track.");let a=n+1;for(;a>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(a,e)}finally{r()}}async getPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,t,a=>a.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(n,e);if(n>=0&&n+1>>0&4294967295}var En=i=>{let t=D(i),e=t.getUint32(22,!0);t.setUint32(22,0,!0);let r=0;for(let n=0;n>>24^a])>>>0}return t.setUint32(22,e,!0),r},_n=(i,t,e)=>{let r=0,n=null;if(i.length>0)if(t.codec==="vorbis"){p(t.vorbisInfo);let a=t.vorbisInfo.modeBlockflags.length,o=(1<>1;if(c>=t.vorbisInfo.modeBlockflags.length)throw new Error("Invalid mode number.");let u=e,d=t.vorbisInfo.modeBlockflags[c];if(n=t.vorbisInfo.blocksizes[d],d===1){let l=(o|1)+1,m=i[0]&l?1:0;u=t.vorbisInfo.blocksizes[m]}r=u!==null?u+n>>2:0}else t.codec==="opus"&&(r=Wo(i).durationInSamples);return{durationInSamples:r,vorbisBlockSize:n}},Fn=i=>{let t="audio/ogg";if(i.codecStrings){let e=[...new Set(i.codecStrings)];t+=`; codecs="${e.join(", ")}"`}return t};var Wt=27,dr=282,Mn=dr+255*255,Dr=i=>{let t=i.filePos;if(ur(i)!==wi)return null;i.skip(1);let r=R(i),n=bc(i),a=ur(i),s=ur(i),o=ur(i),c=R(i),u=new Uint8Array(c);for(let f=0;ff+g,0),m=d+l;return{headerStartPos:t,totalSize:m,dataStartPos:t+d,dataSize:l,headerType:r,granulePosition:n,serialNumber:a,sequenceNumber:s,checksum:o,lacingValues:u}},gc=(i,t)=>{for(;i.filePos>>8&255,a=e>>>16&255,s=e>>>24&255,o=79;if(!(r!==o&&n!==o&&a!==o&&s!==o)){if(i.skip(-4),e===wi)return!0;i.skip(1)}}return!1};var Rn=class extends fe{constructor(e){super(e);this.metadataPromise=null;this.bitstreams=[];this.tracks=[];this.metadataTags={};this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=0;for(;;){let r=this.reader.requestSliceRange(e,Wt,dr);if(r instanceof Promise&&(r=await r),!r)break;let n=Dr(r);if(!n||!!!(n.headerType&2))break;this.bitstreams.push({serialNumber:n.serialNumber,bosPage:n,description:null,numberOfChannels:-1,sampleRate:-1,codecInfo:{codec:null,vorbisInfo:null,opusInfo:null},lastMetadataPacket:null}),e=n.headerStartPos+n.totalSize}for(let r of this.bitstreams){let n=await this.readPacket(r.bosPage,0);n&&(n.data.byteLength>=7&&n.data[0]===1&&n.data[1]===118&&n.data[2]===111&&n.data[3]===114&&n.data[4]===98&&n.data[5]===105&&n.data[6]===115?await this.readVorbisMetadata(n,r):n.data.byteLength>=8&&n.data[0]===79&&n.data[1]===112&&n.data[2]===117&&n.data[3]===115&&n.data[4]===72&&n.data[5]===101&&n.data[6]===97&&n.data[7]===100&&await this.readOpusMetadata(n,r),r.codecInfo.codec!==null&&this.tracks.push(new te(this.input,new fs(r,this))))}})()}async readVorbisMetadata(e,r){let n=await this.findNextPacketStart(e);if(!n)return;let a=await this.readPacket(n.startPage,n.startSegmentIndex);if(!a||(n=await this.findNextPacketStart(a),!n))return;let s=await this.readPacket(n.startPage,n.startSegmentIndex);if(!s||a.data[0]!==3||s.data[0]!==5)return;let o=[],c=m=>{for(;o.push(Math.min(255,m)),!(m<255);)m-=255};c(e.data.length),c(a.data.length);let u=new Uint8Array(1+o.length+e.data.length+a.data.length+s.data.length);u[0]=2,u.set(o,1),u.set(e.data,1+o.length),u.set(a.data,1+o.length+e.data.length),u.set(s.data,1+o.length+e.data.length+a.data.length),r.codecInfo.codec="vorbis",r.description=u,r.lastMetadataPacket=s;let d=D(e.data);r.numberOfChannels=d.getUint8(11),r.sampleRate=d.getUint32(12,!0);let l=d.getUint8(28);r.codecInfo.vorbisInfo={blocksizes:[1<<(l&15),1<<(l>>4)],modeBlockflags:an(s.data).modeBlockflags},ii(a.data.subarray(7),this.metadataTags)}async readOpusMetadata(e,r){let n=await this.findNextPacketStart(e);if(!n)return;let a=await this.readPacket(n.startPage,n.startSegmentIndex);if(!a)return;r.codecInfo.codec="opus",r.description=e.data,r.lastMetadataPacket=a;let s=Vt(e.data);r.numberOfChannels=s.outputChannelCount,r.sampleRate=Ne,r.codecInfo.opusInfo={preSkip:s.preSkip},ii(a.data.subarray(8),this.metadataTags)}async readPacket(e,r){p(rm+f.length,0);if(u===0)return null;let d=new Uint8Array(u),l=0;for(let m=0;mr.getCodecParameterString()));return Fn({codecStrings:e.filter(Boolean)})}async getTracks(){return await this.readMetadata(),this.tracks}async computeDuration(){let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.computeDuration()));return Math.max(0,...r)}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},fs=class{constructor(t,e){this.bitstream=t;this.demuxer=e;this.encodedPacketToMetadata=new WeakMap;this.sequentialScanCache=[];this.sequentialScanMutex=new Pe;this.internalSampleRate=t.codecInfo.codec==="opus"?Ne:t.sampleRate}getId(){return this.bitstream.serialNumber}getNumber(){let t=this.demuxer.tracks.findIndex(e=>e._backing.bitstream===this.bitstream);return p(t!==-1),t+1}getNumberOfChannels(){return this.bitstream.numberOfChannels}getSampleRate(){return this.bitstream.sampleRate}getTimeResolution(){return this.bitstream.sampleRate}getCodec(){return this.bitstream.codecInfo.codec}getInternalCodecId(){return null}async getDecoderConfig(){return p(this.bitstream.codecInfo.codec),{codec:this.bitstream.codecInfo.codec,numberOfChannels:this.bitstream.numberOfChannels,sampleRate:this.bitstream.sampleRate,description:this.bitstream.description??void 0}}getName(){return null}getLanguageCode(){return ee}getDisposition(){return{...we}}async getFirstTimestamp(){return 0}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}granulePositionToTimestampInSamples(t){return this.bitstream.codecInfo.codec==="opus"?(p(this.bitstream.codecInfo.opusInfo),t-this.bitstream.codecInfo.opusInfo.preSkip):t}createEncodedPacketFromOggPacket(t,e,r){if(!t)return null;let{durationInSamples:n,vorbisBlockSize:a}=_n(t.data,this.bitstream.codecInfo,e.vorbisLastBlocksize),s=new W(r.metadataOnly?se:t.data,"key",Math.max(0,e.timestampInSamples)/this.internalSampleRate,n/this.internalSampleRate,t.endPage.headerStartPos+t.endSegmentIndex,t.data.byteLength);return this.encodedPacketToMetadata.set(s,{packet:t,timestampInSamples:e.timestampInSamples,durationInSamples:n,vorbisLastBlockSize:e.vorbisLastBlocksize,vorbisBlockSize:a}),s}async getFirstPacket(t){p(this.bitstream.lastMetadataPacket);let e=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!e)return null;let r=0;this.bitstream.codecInfo.codec==="opus"&&(p(this.bitstream.codecInfo.opusInfo),r-=this.bitstream.codecInfo.opusInfo.preSkip);let n=await this.demuxer.readPacket(e.startPage,e.startSegmentIndex);return this.createEncodedPacketFromOggPacket(n,{timestampInSamples:r,vorbisLastBlocksize:null},t)}async getNextPacket(t,e){let r=this.encodedPacketToMetadata.get(t);if(!r)throw new Error("Packet was not created from this track.");let n=await this.demuxer.findNextPacketStart(r.packet);if(!n)return null;let a=r.timestampInSamples+r.durationInSamples,s=await this.demuxer.readPacket(n.startPage,n.startSegmentIndex);return this.createEncodedPacketFromOggPacket(s,{timestampInSamples:a,vorbisLastBlocksize:r.vorbisBlockSize},e)}async getPacket(t,e){if(this.demuxer.reader.fileSize===null)return this.getPacketSequential(t,e);let r=dt(t*this.internalSampleRate);if(r===0)return this.getFirstPacket(e);if(r<0)return null;p(this.bitstream.lastMetadataPacket);let n=await this.demuxer.findNextPacketStart(this.bitstream.lastMetadataPacket);if(!n)return null;let a=n.startPage,s=this.demuxer.reader.fileSize,o=[a];e:for(;a.headerStartPos+a.totalSizer?s=_.headerStartPos:(a=_,o.push(_));continue e}}let c=n.startPage;for(let k of o){if(k.granulePosition===a.granulePosition)break;(!c||k.headerStartPos>c.headerStartPos)&&(c=k)}let u=c,d=[u];for(;!(u.serialNumber===this.bitstream.serialNumber&&u.granulePosition===a.granulePosition);){let k=u.headerStartPos+u.totalSize,w=this.demuxer.reader.requestSliceRange(k,Wt,dr);w instanceof Promise&&(w=await w),p(w);let S=Dr(w);p(S),u=S,u.serialNumber===this.bitstream.serialNumber&&d.push(u)}p(u.granulePosition!==-1);let l=null,m,f,g=u,b=0;if(u.headerStartPos===n.startPage.headerStartPos)m=this.granulePositionToTimestampInSamples(0),f=!0,l=0;else{m=0,f=!1;for(let S=u.lacingValues.length-1;S>=0;S--)if(u.lacingValues[S]<255){l=S+1;break}if(l===null)throw new Error("Invalid page with granule position: no packets end on this page.");b=l-1;let k={data:se,endPage:g,endSegmentIndex:b};if(await this.demuxer.findNextPacketStart(k)){let S=yc(d,u,l);p(S);let T=kc(d,S.page,S.segmentIndex);T&&(u=T.page,l=T.segmentIndex)}else for(;;){let S=yc(d,u,l);if(!S)break;let T=kc(d,S.page,S.segmentIndex);if(!T)break;if(u=T.page,l=T.segmentIndex,S.page.headerStartPos!==g.headerStartPos){g=S.page,b=S.segmentIndex;break}}}let h=null,y=null;for(;u!==null;){p(l!==null);let k=await this.demuxer.readPacket(u,l);if(!k)break;if(!(u.headerStartPos===n.startPage.headerStartPos&&lr||Math.max(x.timestampInSamples,0)===r))break}let S=await this.demuxer.findNextPacketStart(k);if(!S)break;u=S.startPage,l=S.startSegmentIndex}return h}async getPacketSequential(t,e){let r=await this.sequentialScanMutex.acquire();try{let n=dt(t*this.internalSampleRate);t=n/this.internalSampleRate;let a=N(this.sequentialScanCache,n,c=>c.timestampInSamples),s;if(a!==-1){let c=this.sequentialScanCache[a];s=this.createEncodedPacketFromOggPacket(c.packet,{timestampInSamples:c.timestampInSamples,vorbisLastBlocksize:c.vorbisLastBlockSize},e)}else s=await this.getFirstPacket(e);let o=0;for(;s&&s.timestampt)break;if(s=c,o++,o===100){o=0;let u=this.encodedPacketToMetadata.get(s);p(u),this.sequentialScanCache.length>0&&p(K(this.sequentialScanCache).timestampInSamples<=u.timestampInSamples),this.sequentialScanCache.push(u)}}return s}finally{r()}}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}},kc=(i,t,e)=>{let r=t,n=e;e:for(;;){for(n--,n;n>=0;n--)if(r.lacingValues[n]<255){n++;break e}if(p(n===-1),!(r.headerType&1)){n=0;break}let s=Oa(i,o=>o.headerStartPos{if(e>0)return{page:t,segmentIndex:e-1};let r=Oa(i,n=>n.headerStartPos{let e=this.reader.requestSlice(0,12);e instanceof Promise&&(e=await e),p(e);let r=re(e,4),n=r!=="RIFX",a=r==="RF64",s=St(e,n),o=a?this.reader.fileSize:Math.min(s+8,this.reader.fileSize??1/0);if(re(e,4)!=="WAVE")throw new Error("Invalid WAVE file - wrong format");let u=0,d=null,l=e.filePos;for(;o===null||l=18&&s!==357){let l=Ur(a,n),m=r-18;if(Math.min(m,l)>=22&&s===65534){a.skip(6);let g=M(a,16);s=g[0]|g[1]<<8}}(s===7||s===6)&&(d=8),this.audioInfo={format:s,numberOfChannels:o,sampleRate:c,sampleSizeInBytes:Math.ceil(d/8),blockSizeInBytes:u}}async parseListChunk(e,r,n){let a=this.reader.requestSlice(e,r);if(a instanceof Promise&&(a=await a),!a)return;let s=re(a,4);if(s!=="INFO"&&s!=="INF0")return;let o=a.filePos;for(;o<=e+r-8;){a.filePos=o;let c=re(a,4),u=St(a,n),d=M(a,u),l=0;for(let f=0;f0&&(this.metadataTags.trackNumber??=g),b&&Number.isInteger(b)&&b>0&&(this.metadataTags.tracksTotal??=b)}break;case"ICRD":case"IDIT":{let f=new Date(m);Number.isNaN(f.getTime())||(this.metadataTags.date??=f)}break;case"YEAR":{let f=Number.parseInt(m,10);Number.isInteger(f)&&f>0&&(this.metadataTags.date??=new Date(f,0,1))}break;case"IGNR":case"GENR":this.metadataTags.genre??=m;break;case"ICMT":case"CMNT":case"COMM":this.metadataTags.comment??=m;break}o+=8+u+(u&1)}}async parseId3Chunk(e,r){let n=this.reader.requestSlice(e,r);if(n instanceof Promise&&(n=await n),!n)return;let a=Ke(n);if(a){let s=n.slice(e+10,a.size);Br(s,a,this.metadataTags)}}getCodec(){if(p(this.audioInfo),this.audioInfo.format===7)return"ulaw";if(this.audioInfo.format===6)return"alaw";if(this.audioInfo.format===1){if(this.audioInfo.sampleSizeInBytes===1)return"pcm-u8";if(this.audioInfo.sampleSizeInBytes===2)return"pcm-s16";if(this.audioInfo.sampleSizeInBytes===3)return"pcm-s24";if(this.audioInfo.sampleSizeInBytes===4)return"pcm-s32"}return this.audioInfo.format===3&&this.audioInfo.sampleSizeInBytes===4?"pcm-f32":null}async getMimeType(){return"audio/wav"}async computeDuration(){await this.readMetadata();let e=this.tracks[0];return p(e),e.computeDuration()}async getTracks(){return await this.readMetadata(),this.tracks}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}},Or=2048,ps=class{constructor(t){this.demuxer=t}getId(){return 1}getNumber(){return 1}getCodec(){return this.demuxer.getCodec()}getInternalCodecId(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.format}async getDecoderConfig(){let t=this.demuxer.getCodec();return t?(p(this.demuxer.audioInfo),{codec:t,numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate}):null}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}getNumberOfChannels(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}getSampleRate(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getTimeResolution(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ee}getDisposition(){return{...we}}async getFirstTimestamp(){return 0}async getPacketAtIndex(t,e){p(t>=0),p(this.demuxer.audioInfo);let r=t*Or*this.demuxer.audioInfo.blockSizeInBytes;if(r>=this.demuxer.dataSize)return null;let n=Math.min(Or*this.demuxer.audioInfo.blockSizeInBytes,this.demuxer.dataSize-r);if(this.demuxer.reader.fileSize===null){let c=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,n);if(c instanceof Promise&&(c=await c),!c)return null}let a;if(e.metadataOnly)a=se;else{let c=this.demuxer.reader.requestSlice(this.demuxer.dataStart+r,n);c instanceof Promise&&(c=await c),p(c),a=M(c,n)}let s=t*Or/this.demuxer.audioInfo.sampleRate,o=n/this.demuxer.audioInfo.blockSizeInBytes/this.demuxer.audioInfo.sampleRate;return this.demuxer.lastKnownPacketIndex=Math.max(t,this.demuxer.lastKnownPacketIndex),new W(a,"key",s,o,t,n)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getPacket(t,e){p(this.demuxer.audioInfo);let r=Math.floor(Math.min(t*this.demuxer.audioInfo.sampleRate/Or,(this.demuxer.dataSize-1)/(Or*this.demuxer.audioInfo.blockSizeInBytes)));if(r<0)return null;let n=await this.getPacketAtIndex(r,e);if(n)return n;if(r===0)return null;p(this.demuxer.reader.fileSize===null);let a=await this.getPacketAtIndex(this.demuxer.lastKnownPacketIndex,e);for(;a;){let s=await this.getNextPacket(a,e);if(!s)break;a=s}return a}getNextPacket(t,e){p(this.demuxer.audioInfo);let r=Math.round(t.timestamp*this.demuxer.audioInfo.sampleRate/Or);return this.getPacketAtIndex(r+1,e)}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}};var xt=7,Re=9,ve=i=>{let t=i.filePos,e=M(i,9),r=new V(e);if(r.readBits(12)!==4095||(r.skipBits(1),r.readBits(2)!==0))return null;let s=r.readBits(1),o=r.readBits(2)+1,c=r.readBits(4);if(c===15)return null;r.skipBits(1);let u=r.readBits(3);if(u===0)throw new Error("ADTS frames with channel configuration 0 are not supported.");r.skipBits(1),r.skipBits(1),r.skipBits(1),r.skipBits(1);let d=r.readBits(13);r.skipBits(11);let l=r.readBits(2)+1;if(l!==1)throw new Error("ADTS frames with more than one AAC frame are not supported.");let m=null;return s===1?i.filePos-=2:m=r.readBits(16),{objectType:o,samplingFrequencyIndex:c,channelConfiguration:u,frameLength:d,numberOfAacFrames:l,crcCheck:m,startPos:t}};var Ti=1024,Dn=class extends fe{constructor(e){super(e);this.metadataPromise=null;this.firstFrameHeader=null;this.loadedSamples=[];this.metadataTags=null;this.tracks=[];this.readingMutex=new Pe;this.lastSampleLoaded=!1;this.lastLoadedPos=0;this.nextTimestampInSamples=0;this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{for(;!this.firstFrameHeader&&!this.lastSampleLoaded;)await this.advanceReader();p(this.firstFrameHeader),this.tracks=[new te(this.input,new gs(this))]})()}async advanceReader(){if(this.lastLoadedPos===0)for(;;){let o=this.reader.requestSlice(this.lastLoadedPos,rt);if(o instanceof Promise&&(o=await o),!o){this.lastSampleLoaded=!0;return}let c=Ke(o);if(!c)break;this.lastLoadedPos=o.filePos+c.size}let e=this.reader.requestSliceRange(this.lastLoadedPos,xt,Re);if(e instanceof Promise&&(e=await e),!e){this.lastSampleLoaded=!0;return}let r=ve(e);if(!r){this.lastSampleLoaded=!0;return}if(this.reader.fileSize!==null&&r.startPos+r.frameLength>this.reader.fileSize){this.lastSampleLoaded=!0;return}this.firstFrameHeader||(this.firstFrameHeader=r);let n=Ue[r.samplingFrequencyIndex];p(n!==void 0);let a=Ti/n,s={timestamp:this.nextTimestampInSamples/n,duration:a,dataStart:r.startPos,dataSize:r.frameLength};this.loadedSamples.push(s),this.nextTimestampInSamples+=Ti,this.lastLoadedPos=r.startPos+r.frameLength}async getMimeType(){return"audio/aac"}async getTracks(){return await this.readMetadata(),this.tracks}async computeDuration(){await this.readMetadata();let e=this.tracks[0];return p(e),e.computeDuration()}async getMetadataTags(){let e=await this.readingMutex.acquire();try{if(await this.readMetadata(),this.metadataTags)return this.metadataTags;this.metadataTags={};let r=0;for(;;){let n=this.reader.requestSlice(r,rt);if(n instanceof Promise&&(n=await n),!n)break;let a=Ke(n);if(!a)break;let s=this.reader.requestSlice(n.filePos,a.size);if(s instanceof Promise&&(s=await s),!s)break;Br(s,a,this.metadataTags),r=n.filePos+a.size}return this.metadataTags}finally{e()}}},gs=class{constructor(t){this.demuxer=t}getId(){return 1}getNumber(){return 1}async getFirstTimestamp(){return 0}getTimeResolution(){return this.getSampleRate()/Ti}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}getName(){return null}getLanguageCode(){return ee}getCodec(){return"aac"}getInternalCodecId(){return p(this.demuxer.firstFrameHeader),this.demuxer.firstFrameHeader.objectType}getNumberOfChannels(){p(this.demuxer.firstFrameHeader);let t=Je[this.demuxer.firstFrameHeader.channelConfiguration];return p(t!==void 0),t}getSampleRate(){p(this.demuxer.firstFrameHeader);let t=Ue[this.demuxer.firstFrameHeader.samplingFrequencyIndex];return p(t!==void 0),t}getDisposition(){return{...we}}async getDecoderConfig(){return p(this.demuxer.firstFrameHeader),{codec:`mp4a.40.${this.demuxer.firstFrameHeader.objectType}`,numberOfChannels:this.getNumberOfChannels(),sampleRate:this.getSampleRate()}}async getPacketAtIndex(t,e){if(t===-1)return null;let r=this.demuxer.loadedSamples[t];if(!r)return null;let n;if(e.metadataOnly)n=se;else{let a=this.demuxer.reader.requestSlice(r.dataStart,r.dataSize);if(a instanceof Promise&&(a=await a),!a)return null;n=M(a,r.dataSize)}return new W(n,"key",r.timestamp,r.duration,t,r.dataSize)}getFirstPacket(t){return this.getPacketAtIndex(0,t)}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let n=ut(this.demuxer.loadedSamples,t.timestamp,s=>s.timestamp);if(n===-1)throw new Error("Packet was not created from this track.");let a=n+1;for(;a>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(a,e)}finally{r()}}async getPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,t,a=>a.timestamp);if(n===-1&&this.demuxer.loadedSamples.length>0)return null;if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(n,e);if(n>=0&&n+1i===0?null:i===1?192:i>=2&&i<=5?144*2**i:i===6?"uncommon-u8":i===7?"uncommon-u16":i>=8&&i<=15?2**i:null,wc=(i,t)=>{switch(i){case 0:return t;case 1:return 88200;case 2:return 176400;case 3:return 192e3;case 4:return 8e3;case 5:return 16e3;case 6:return 22050;case 7:return 24e3;case 8:return 32e3;case 9:return 44100;case 10:return 48e3;case 11:return 96e3;case 12:return"uncommon-u8";case 13:return"uncommon-u16";case 14:return"uncommon-u16-10";default:return null}},Un=i=>{let t=0,e=new V(M(i,1));for(;e.readBits(1)===1;)t++;if(t===0)return e.readBits(7);let r=[],n=t-1,a=new V(M(i,n)),s=8-t-1;for(let c=0;cc|u<{if(t==="uncommon-u16")return oe(i)+1;if(t==="uncommon-u8")return R(i)+1;if(typeof t=="number")return t;J(t),p(!1)},Tc=(i,t)=>t==="uncommon-u16"?oe(i):t==="uncommon-u16-10"?oe(i)*10:t==="uncommon-u8"?R(i):typeof t=="number"?t:null,Sc=i=>{let e=0;for(let r of i){e^=r;for(let n=0;n<8;n++)(e&128)!==0?e=e<<1^7:e<<=1,e&=255}return e};var zn=class extends fe{constructor(e){super(e);this.loadedSamples=[];this.metadataPromise=null;this.track=null;this.metadataTags={};this.audioInfo=null;this.lastLoadedPos=null;this.blockingBit=null;this.readingMutex=new Pe;this.lastSampleLoaded=!1;this.reader=e._reader}async computeDuration(){return await this.readMetadata(),p(this.track),this.track.computeDuration()}async getMetadataTags(){return await this.readMetadata(),this.metadataTags}async getTracks(){return await this.readMetadata(),p(this.track),[this.track]}async getMimeType(){return"audio/flac"}async readMetadata(){let e=4;return this.metadataPromise??=(async()=>{for(;this.reader.fileSize===null||eo.end-n)return{num:c.num,blockSize:c.blockSize,sampleRate:c.sampleRate,size:o.end-e,isLastFrame:!0};if(R(o)===255){let d=o.filePos,l=R(o),m=this.blockingBit===1?249:248;if(l!==m){o.filePos=d;continue}o.skip(-2);let f=o.filePos-e,g=this.readFlacFrameHeader({slice:o,isFirstPacket:!1});if(!g){o.filePos=d;continue}if(this.blockingBit===0){if(g.num-c.num!==1){o.filePos=d;continue}}else if(g.num-c.num!==c.blockSize){o.filePos=d;continue}return{num:c.num,blockSize:c.blockSize,sampleRate:c.sampleRate,size:f,isLastFrame:!1}}}}readFlacFrameHeader({slice:e,isFirstPacket:r}){let n=e.filePos,a=M(e,4),s=new V(a);if(s.readBits(15)!==32764)return null;if(this.blockingBit===null){p(r);let y=s.readBits(1);this.blockingBit=y}else if(this.blockingBit===1){if(p(!r),s.readBits(1)!==1)return null}else if(this.blockingBit===0){if(p(!r),s.readBits(1)!==0)return null}else throw new Error("Invalid blocking bit");let c=On(s.readBits(4));if(!c)return null;p(this.audioInfo);let u=wc(s.readBits(4),this.audioInfo.sampleRate);if(!u||(s.readBits(4),s.readBits(3),s.readBits(1)!==0))return null;let l=Un(e),m=Vn(e,c),f=Tc(e,u);if(f===null||f!==this.audioInfo.sampleRate)return null;let g=e.filePos-n,b=R(e);e.skip(-g),e.skip(-1);let h=Sc(M(e,g));return b!==h?null:{num:l,blockSize:m,sampleRate:f}}async advanceReader(){await this.readMetadata(),p(this.lastLoadedPos!==null),p(this.audioInfo);let e=this.lastLoadedPos,r=await this.readNextFlacFrame({startPos:e,isFirstPacket:this.loadedSamples.length===0});if(!r){this.lastSampleLoaded=!0;return}let n=this.loadedSamples[this.loadedSamples.length-1],s={blockOffset:n?n.blockOffset+n.blockSize:0,blockSize:r.blockSize,byteOffset:e,byteSize:r.size};if(this.lastLoadedPos=this.lastLoadedPos+r.size,this.loadedSamples.push(s),r.isLastFrame){this.lastSampleLoaded=!0;return}}},bs=class{constructor(t){this.demuxer=t}getId(){return 1}getNumber(){return 1}getCodec(){return"flac"}getInternalCodecId(){return null}getNumberOfChannels(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.numberOfChannels}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}getSampleRate(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getName(){return null}getLanguageCode(){return ee}getTimeResolution(){return p(this.demuxer.audioInfo),this.demuxer.audioInfo.sampleRate}getDisposition(){return{...we}}async getFirstTimestamp(){return 0}async getDecoderConfig(){return p(this.demuxer.audioInfo),{codec:"flac",numberOfChannels:this.demuxer.audioInfo.numberOfChannels,sampleRate:this.demuxer.audioInfo.sampleRate,description:this.demuxer.audioInfo.description}}async getPacket(t,e){if(p(this.demuxer.audioInfo),t<0)throw new Error("Timestamp cannot be negative");let r=await this.demuxer.readingMutex.acquire();try{for(;;){let n=N(this.demuxer.loadedSamples,t,c=>c.blockOffset/this.demuxer.audioInfo.sampleRate);if(n===-1){await this.demuxer.advanceReader();continue}let a=this.demuxer.loadedSamples[n],s=a.blockOffset/this.demuxer.audioInfo.sampleRate,o=a.blockSize/this.demuxer.audioInfo.sampleRate;if(s+o<=t){if(this.demuxer.lastSampleLoaded)return this.getPacketAtIndex(this.demuxer.loadedSamples.length-1,e);await this.demuxer.advanceReader();continue}return this.getPacketAtIndex(n,e)}}finally{r()}}async getNextPacket(t,e){let r=await this.demuxer.readingMutex.acquire();try{let n=t.sequenceNumber+1;if(this.demuxer.lastSampleLoaded&&n>=this.demuxer.loadedSamples.length)return null;for(;n>=this.demuxer.loadedSamples.length&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(n,e)}finally{r()}}getKeyPacket(t,e){return this.getPacket(t,e)}getNextKeyPacket(t,e){return this.getNextPacket(t,e)}async getPacketAtIndex(t,e){let r=this.demuxer.loadedSamples[t];if(!r)return null;let n;if(e.metadataOnly)n=se;else{let o=this.demuxer.reader.requestSlice(r.byteOffset,r.byteSize);if(o instanceof Promise&&(o=await o),!o)return null;n=M(o,r.byteSize)}p(this.demuxer.audioInfo);let a=r.blockOffset/this.demuxer.audioInfo.sampleRate,s=r.blockSize/this.demuxer.audioInfo.sampleRate;return new W(n,"key",a,s,t,r.byteSize)}async getFirstPacket(t){for(;this.demuxer.loadedSamples.length===0&&!this.demuxer.lastSampleLoaded;)await this.demuxer.advanceReader();return this.getPacketAtIndex(0,t)}};var Nn=i=>{let t="video/MP2T",e=[...new Set(i.filter(Boolean))];return e.length>0&&(t+=`; codecs="${e.join(", ")}"`),t};var Ln=class extends fe{constructor(e){super(e);this.metadataPromise=null;this.elementaryStreams=[];this.tracks=[];this.packetOffset=0;this.packetStride=-1;this.sectionEndPositions=[];this.seekChunkSize=5*1024*1024;this.minReferencePointByteDistance=-1;this.reader=e._reader}async readMetadata(){return this.metadataPromise??=(async()=>{let e=205,r=this.reader.requestSlice(0,e);r instanceof Promise&&(r=await r),p(r);let n=M(r,e);if(n[0]===71&&n[188]===71)this.packetOffset=0,this.packetStride=188;else if(n[0]===71&&n[204]===71)this.packetOffset=0,this.packetStride=204;else if(n[4]===71&&n[192]===71)this.packetOffset=4,this.packetStride=188;else throw new Error("Unreachable.");let a=256;this.minReferencePointByteDistance=a*this.packetStride;let s=this.packetOffset,o=null,c=!1,u=!1;for(;;){let d=await this.readPacketHeader(s);if(!d)break;if(d.payloadUnitStartIndicator===0){s+=this.packetStride;continue}let l=await this.readSection(s,!0,!u);if(!l)break;let m=3,f=32,g=!1;if(!u&&l.pid!==0&&!(l.payload[0]===0&&l.payload[1]===0&&l.payload[2]===1)){let y=new V(l.payload),k=y.readAlignedByte();y.skipBits(8*k),g=y.readBits(8)===2}if(l.pid===0&&!c){let h=new V(l.payload),y=h.readAlignedByte();h.skipBits(8*y),h.skipBits(14);let k=h.readBits(10);for(h.skipBits(40);8*(k+m)-h.pos>f;){let w=h.readBits(16);if(h.skipBits(3),w!==0){if(o!==null)throw new Error("Only files with a single program are supported.");o=h.readBits(13)}}if(o===null)throw new Error("Program Association Table must link to a Program Map Table.");c=!0}else if((l.pid===o||g)&&!u){let h=new V(l.payload),y=h.readAlignedByte();h.skipBits(8*y),h.skipBits(12);let k=h.readBits(12);h.skipBits(43);let w=h.readBits(13);h.skipBits(6);let S=h.readBits(10);for(h.skipBits(8*S);8*(k+m)-h.pos>f;){let T=h.readBits(8);h.skipBits(3);let x=h.readBits(13);h.skipBits(6);let P=h.readBits(10),C=h.pos+8*P,_=!1,B=!1;for(;h.posy.pid===l.pid);if(h&&!h.initialized){let y=Si(l);if(!y)throw new Error(`Couldn't read first PES packet for Elementary Stream with PID ${h.pid}`);if(h.firstSection=l,h.info.type==="video")if(h.info.codec==="avc"){if(h.info.avcCodecInfo=Sr(y.data),!h.info.avcCodecInfo)throw new Error("Invalid AVC video stream; could not extract AVCDecoderConfigurationRecord from first packet.");let k=h.info.avcCodecInfo.sequenceParameterSets[0];p(k);let w=ri(k);h.info.width=w.displayWidth,h.info.height=w.displayHeight,h.info.colorSpace={primaries:Gt[w.colourPrimaries],transfer:Qt[w.transferCharacteristics],matrix:$t[w.matrixCoefficients],fullRange:!!w.fullRangeFlag},h.info.reorderSize=w.maxDecFrameBuffering,h.initialized=!0}else if(h.info.codec==="hevc"){if(h.info.hevcCodecInfo=xr(y.data),!h.info.hevcCodecInfo)throw new Error("Invalid HEVC video stream; could not extract HVCDecoderConfigurationRecord from first packet.");let w=h.info.hevcCodecInfo.arrays.find(T=>T.nalUnitType===33).nalUnits[0];p(w);let S=ja(w);h.info.width=S.displayWidth,h.info.height=S.displayHeight,h.info.colorSpace={primaries:Gt[S.colourPrimaries],transfer:Qt[S.transferCharacteristics],matrix:$t[S.matrixCoefficients],fullRange:!!S.fullRangeFlag},h.info.reorderSize=S.maxDecFrameBuffering,h.initialized=!0}else throw new Error("Unhandled.");else if(h.info.codec==="aac"){let k=he.tempFromBytes(y.data),w=ve(k);if(!w)throw new Error("Invalid AAC audio stream; could not read ADTS frame header from first packet.");h.info.aacCodecInfo={isMpeg2:!1,objectType:w.objectType},h.info.numberOfChannels=Je[w.channelConfiguration],h.info.sampleRate=Ue[w.samplingFrequencyIndex],h.initialized=!0}else if(h.info.codec==="mp3"){let k=A(he.tempFromBytes(y.data)),w=Jt(k,y.data.byteLength);if(!w.header)throw new Error("Invalid MP3 audio stream; could not read frame header from first packet.");h.info.numberOfChannels=w.header.channel===3?1:2,h.info.sampleRate=w.header.sampleRate,h.initialized=!0}else if(h.info.codec==="ac3"){let k=on(y.data);if(!k)throw new Error("Invalid AC-3 audio stream; could not read sync frame from first packet.");if(k.fscod===3)throw new Error("Invalid AC-3 audio stream; reserved sample rate code found in first packet.");h.info.numberOfChannels=ai[k.acmod]+k.lfeon,h.info.sampleRate=er[k.fscod],h.initialized=!0}else if(h.info.codec==="eac3"){let k=cn(y.data);if(!k)throw new Error("Invalid E-AC-3 audio stream; could not read sync frame from first packet.");let w=un(k);if(w===null)throw new Error("Invalid E-AC-3 audio stream; reserved sample rate code found in first packet.");h.info.numberOfChannels=dn(k),h.info.sampleRate=w,h.initialized=!0}else throw new Error("Unhandled.")}}if(u&&this.elementaryStreams.every(h=>h.initialized))break;s+=this.packetStride}if(!u)throw c?new Error("No Program Map Table found in the file."):new Error("No Program Association Table found in the file.");for(let d of this.elementaryStreams)d.info.type==="video"?this.tracks.push(new Fe(this.input,new ks(d))):this.tracks.push(new te(this.input,new ys(d)))})()}async getTracks(){return await this.readMetadata(),this.tracks}async getMetadataTags(){return{}}async computeDuration(){let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.computeDuration()));return Math.max(0,...r)}async getMimeType(){await this.readMetadata();let e=await this.getTracks(),r=await Promise.all(e.map(n=>n.getCodecParameterString()));return Nn(r)}async readSection(e,r,n=!1){let a=e,s=e,o=[],c=0,u=null,d=!0,l=0;for(;;){let f=await this.readPacket(s);if(s+=this.packetStride,!f)break;if(u){if(f.pid!==u.pid){if(n)break;continue}if(f.payloadUnitStartIndicator===1)break}else{if(f.payloadUnitStartIndicator===0)break;u=f}let g=!!(f.adaptationFieldControl&2),b=!!(f.adaptationFieldControl&1),h=0;if(g&&(h=1+f.body[0],f===u&&h>1&&(l=f.body[1]>>6&1)),b&&(h===0?(o.push(f.body),c+=f.body.byteLength):(o.push(f.body.subarray(h)),c+=f.body.byteLength-h)),a=s,!r&&c>=64){d=!1;break}if(ut(this.sectionEndPositions,a,k=>k)!==-1){d=!1;break}}if(d){let f=N(this.sectionEndPositions,a,g=>g);this.sectionEndPositions.splice(f+1,0,a)}if(!u)return null;let m;if(o.length===1)m=o[0];else{let f=o.reduce((b,h)=>b+h.length,0);m=new Uint8Array(f);let g=0;for(let b of o)m.set(b,g),g+=b.length}return{startPos:e,endPos:r?a:null,pid:u.pid,payload:m,randomAccessIndicator:l}}async readPacketHeader(e){let r=this.reader.requestSlice(e,4);if(r instanceof Promise&&(r=await r),!r)return null;if(R(r)!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let a=oe(r),s=a>>15,o=a>>14&1,c=a>>13&1,u=a&8191,d=R(r),l=d>>6,m=d>>4&3,f=d&15;return{payloadUnitStartIndicator:o,pid:u,adaptationFieldControl:m}}async readPacket(e){let r=this.reader.requestSlice(e,188);if(r instanceof Promise&&(r=await r),!r)return null;let n=M(r,188);if(n[0]!==71)throw new Error("Invalid TS packet sync byte. Likely an internal bug, please report this file.");let s=(n[1]<<8)+n[2],o=s>>15,c=s>>14&1,u=s>>13&1,d=s&8191,l=n[3],m=l>>6,f=l>>4&3,g=l&15;return{payloadUnitStartIndicator:c,pid:d,adaptationFieldControl:f,body:n.subarray(4)}}},lr=i=>{if(i.payload.byteLength<3)return null;let t=new V(i.payload);if(t.readBits(24)!==1)return null;let r=t.readBits(8);if(t.skipBits(16),r===188||r===190||r===191||r===240||r===241||r===255||r===242||r===248)return null;t.skipBits(8);let n=t.readBits(2);t.skipBits(14);let a=0;if(n===2||n===3)t.skipBits(4),a+=t.readBits(3)*(1<<30),t.skipBits(1),a+=t.readBits(15)*32768,t.skipBits(1),a+=t.readBits(15);else throw new Error("PES packets without PTS are not currently supported. If you think this file should be supported, please report it.");return{sectionStartPos:i.startPos,sectionEndPos:i.endPos,pts:a,randomAccessIndicator:i.randomAccessIndicator}},Si=i=>{p(i.endPos!==null);let t=lr(i);if(!t)return null;let e=new V(i.payload);e.skipBits(32);let r=e.readBits(16),n=6;e.skipBits(16);let a=e.readBits(8),s=e.pos+8*a;e.pos=s;let o=s/8;p(Number.isInteger(o));let c=i.payload.subarray(o,r>0?n+r:i.payload.byteLength);return{...t,data:c}},Wn=class i{constructor(t){this.elementaryStream=t;this.packetBuffers=new WeakMap;this.packetSectionStarts=new WeakMap}getId(){return this.elementaryStream.pid}getNumber(){let t=this.elementaryStream.demuxer,e=this.elementaryStream.info.type,r=0;for(let n of t.tracks)if(n.type===e&&r++,p(n._backing instanceof i),n._backing.elementaryStream===this.elementaryStream)break;return r}getCodec(){throw new Error("Not implemented on base class.")}getInternalCodecId(){return this.elementaryStream.streamType}getName(){return null}getLanguageCode(){return ee}getDisposition(){return we}getTimeResolution(){return 9e4}async computeDuration(){let t=await this.getPacket(1/0,{metadataOnly:!0});return(t?.timestamp??0)+(t?.duration??0)}async getFirstTimestamp(){return(await this.getFirstPacket({metadataOnly:!0}))?.timestamp??0}createEncodedPacket(t,e,r){let n;return this.allPacketsAreKeyPackets()?n="key":n=t.randomAccessIndicator===1?"key":"delta",new W(r.metadataOnly?se:t.data,n,t.pts/9e4,Math.max(e/9e4,0),t.sequenceNumber,t.data.byteLength)}async getFirstPacket(t){let e=this.elementaryStream.firstSection;p(e);let r=Si(e);p(r);let n=new xi(this.elementaryStream,r),a=new Ci(this,n),s=await a.readNext();if(!s)return null;let o=this.createEncodedPacket(s.packet,s.duration,t);return this.packetBuffers.set(o,a),this.packetSectionStarts.set(o,s.packet.sectionStartPos),o}async getNextPacket(t,e){let r=this.packetBuffers.get(t);if(r){let d=await r.readNext();if(!d)return null;this.packetBuffers.delete(t);let l=this.createEncodedPacket(d.packet,d.duration,e);return this.packetBuffers.set(l,r),this.packetSectionStarts.set(l,d.packet.sectionStartPos),l}let n=this.packetSectionStarts.get(t);if(n===void 0)throw new Error("Packet was not created from this track.");let s=await this.elementaryStream.demuxer.readSection(n,!0);p(s);let o=Si(s);p(o);let c=new xi(this.elementaryStream,o);r=new Ci(this,c);let u=t.sequenceNumber;for(;;){let d=await r.readNext();if(!d)return null;if(d.packet.sequenceNumber>u){let l=this.createEncodedPacket(d.packet,d.duration,e);return this.packetBuffers.set(l,r),this.packetSectionStarts.set(l,d.packet.sectionStartPos),l}}}async getNextKeyPacket(t,e){let r=t;for(;;){if(r=await this.getNextPacket(r,e),!r)return null;if(r.type==="key")return r}}getPacket(t,e){return this.doPacketLookup(t,!1,e)}getKeyPacket(t,e){return this.doPacketLookup(t,!0,e)}async doPacketLookup(t,e,r){let n=dt(t*9e4),a=this.elementaryStream.demuxer,{reader:s,seekChunkSize:o}=a,c=this.elementaryStream.pid,u=async(w,S)=>{let T=w;for(;Tw.pts),b=g!==-1?f[g]:null;if(b&&n-b.pts<9e4/2)m=b.sectionStartPos;else{let w=0;if(s.fileSize!==null){let S=Math.ceil(s.fileSize/o);if(S>1){let T=0,x=S-1;for(w=T;T<=x;){let P=Math.floor((T+x)/2),C=qi(P*o,a.packetStride)+l.sectionStartPos,_=C+o,B=await u(C,_);if(!B){x=P-1;continue}B.pts<=n?(w=P,T=P+1):x=P-1}}}m=qi(w*o,a.packetStride)+l.sectionStartPos}let h=await u(m,s.fileSize??1/0);h||(h=l);let y=this.getReorderSize(),k=async(w,S)=>{let T=await a.readSection(w,!0);p(T);let x=Si(T);p(x);let P=new xi(this.elementaryStream,x),C=new Ci(this,P);for(;!((K(C.presentationOrderPackets)?.pts??-1/0)>=n||!await C.readNextPacket()););let _=gr(C.presentationOrderPackets,S);if(_===-1)return null;let B=C.presentationOrderPackets[_],E=_===0?0:B.pts-C.presentationOrderPackets[_-1].pts;for(;C.decodeOrderPackets[0]!==B;)C.decodeOrderPackets.shift();C.lastDuration=E;let F=await C.readNext();p(F);let z=this.createEncodedPacket(F.packet,F.duration,r);return this.packetBuffers.set(z,C),this.packetSectionStarts.set(z,F.packet.sectionStartPos),z};if(!e||this.allPacketsAreKeyPackets()){e:for(;;){let w=h.sectionStartPos+a.packetStride;for(;;){let S=await a.readPacketHeader(w);if(!S)break e;if(S.pid===c&&S.payloadUnitStartIndicator===1){let T=await a.readSection(w,!1);if(T){let x=lr(T);if(x){if(x.pts>n)break e;h=x,ws(this.elementaryStream,x);break}}}w+=a.packetStride}}e:for(let w=0;w=a.packetOffset;){let T=await a.readPacketHeader(S);if(!T)break e;if(T.pid===c&&T.payloadUnitStartIndicator===1){let x=await a.readSection(S,!1);if(x){let P=lr(x);if(P){h=P;break}}}S-=a.packetStride}}return k(h.sectionStartPos,w=>w.pts<=n)}else{let w=m,S=null;for(;;){let T=null,x=w<=l.sectionStartPos,P;x?(P=l,T=l):P=await u(w,s.fileSize??1/0);let C=!1,_=0;e:for(;P&&!(S!==null&&P.sectionStartPos>=S||(P.randomAccessIndicator===1&&P.pts<=n&&(T=P),P.pts>n&&(C=!0),C&&(_++,_>=y)));){let E=P.sectionStartPos+a.packetStride;for(;;){let F=await a.readPacketHeader(E);if(!F)break e;if(F.pid===c&&F.payloadUnitStartIndicator===1){let z=await a.readSection(E,!1);if(z&&(P=lr(z),P)){ws(this.elementaryStream,P);break}}E+=a.packetStride}}if(T){let B=T;if(_===0)e:for(let F=0;F=a.packetOffset;){let j=await a.readPacketHeader(z);if(!j)break e;if(j.pid===c&&j.payloadUnitStartIndicator===1){let G=await a.readSection(z,!1);if(G){let $=lr(G);if($){B=$;break}}}z-=a.packetStride}}let E=await k(B.sectionStartPos,F=>F.pts<=n&&F.randomAccessIndicator===1);return p(E),E}p(!x),S=w,w=Math.max(qi(w-l.sectionStartPos-o,a.packetStride)+l.sectionStartPos,l.sectionStartPos)}}}},ks=class extends Wn{constructor(t){super(t),this.elementaryStream=t,this.decoderConfig={codec:br({width:this.elementaryStream.info.width,height:this.elementaryStream.info.height,codec:this.elementaryStream.info.codec,codecDescription:null,colorSpace:this.elementaryStream.info.colorSpace,avcType:1,avcCodecInfo:this.elementaryStream.info.avcCodecInfo,hevcCodecInfo:this.elementaryStream.info.hevcCodecInfo,vp9CodecInfo:null,av1CodecInfo:null}),codedWidth:this.elementaryStream.info.width,codedHeight:this.elementaryStream.info.height,colorSpace:this.elementaryStream.info.colorSpace}}getCodec(){return this.elementaryStream.info.codec}getCodedWidth(){return this.elementaryStream.info.width}getCodedHeight(){return this.elementaryStream.info.height}getRotation(){return 0}async getColorSpace(){return this.elementaryStream.info.colorSpace}async canBeTransparent(){return!1}async getDecoderConfig(){return this.decoderConfig}allPacketsAreKeyPackets(){return!1}getReorderSize(){return this.elementaryStream.info.reorderSize}},ys=class extends Wn{constructor(t){super(t),this.elementaryStream=t}getCodec(){return this.elementaryStream.info.codec}getNumberOfChannels(){return this.elementaryStream.info.numberOfChannels}getSampleRate(){return this.elementaryStream.info.sampleRate}async getDecoderConfig(){return{codec:kr({codec:this.elementaryStream.info.codec,codecDescription:null,aacCodecInfo:this.elementaryStream.info.aacCodecInfo}),numberOfChannels:this.elementaryStream.info.numberOfChannels,sampleRate:this.elementaryStream.info.sampleRate}}allPacketsAreKeyPackets(){return!0}getReorderSize(){return 1}},ws=(i,t)=>{let e=i.referencePesPackets,r=N(e,t.sectionStartPos,n=>n.sectionStartPos);if(r>=0){let n=e[r];if(t.pts<=n.pts)return!1;let a=i.demuxer.minReferencePointByteDistance;if(t.sectionStartPos-n.sectionStartPos{p(!i.suppliedPacket);let t=i.elementaryStream;if(t.info.type==="video"){let e=t.info.codec,r=1024;if(e!=="avc"&&e!=="hevc")throw new Error("Unhandled.");let n=null;for(;;){let a=i.ensureBuffered(r);if(a instanceof Promise&&(a=await a),a===0)break;let s=i.currentPos,o=i.readBytes(a),c=o.byteLength,u=0;for(;u=c)break;u=d;let l=s+u;if(u+4>=c){i.seekTo(l);break}let m=o[u+1],f=o[u+2],g=o[u+3],b=0,h=null;if(m===0&&f===0&&g===1?(b=4,h=o[u+4]):m===0&&f===1&&(b=3,h=g),b===0){u++;continue}let y=l;if(n===null){n=y,u+=b;continue}if(h!==null){let k=e==="avc"?gt(h):et(h);if(e==="avc"?k===9:k===35){let S=y-n;return i.seekTo(n),i.supplyPacket(S,0)}}u+=b}if(a>6,l=u[4]&63;if(d===3||l>37){i.seekTo(o+1);continue}let m=Ho[3*l+d];p(m!==void 0),i.seekTo(o),c=i.ensureBuffered(m),c instanceof Promise&&(c=await c);let f=Math.round(qo*9e4/t.info.sampleRate);return i.supplyPacket(c,f)}else if(e==="eac3"){if(s!==11)continue;i.skip(-1);let o=i.currentPos,c=i.ensureBuffered(5);if(c instanceof Promise&&(c=await c),c<5)return;let u=i.readBytes(5);if(u[0]!==11||u[1]!==119){i.seekTo(o+1);continue}let l=(((u[2]&7)<<8|u[3])+1)*2,f=u[4]>>6===3?3:u[4]>>4&3,g=Ka[f];i.seekTo(o),c=i.ensureBuffered(l),c instanceof Promise&&(c=await c);let b=g*256,h=Math.round(b*9e4/t.info.sampleRate);return i.supplyPacket(c,h)}else throw new Error("Unhandled.")}if(n=t?t:this.bufferData(t-e).then(()=>Math.min(this.endPos-this.currentPos,t))}getCurrentPesPacket(){let t=this.pesPackets[this.currentPesPacketIndex];return p(t),t}async bufferData(t){let e=this.endPos+t;for(;this.endPos=0)}async readNext(){if(this.decodeOrderPackets.length===0&&!await this.readNextPacket())return null;await this.ensureCurrentPacketHasNext();let t=this.decodeOrderPackets[0],e=this.presentationOrderPackets.indexOf(t);p(e!==-1);let r;for(e===this.presentationOrderPackets.length-1?r=this.lastDuration:(r=this.presentationOrderPackets[e+1].pts-t.pts,this.lastDuration=r),this.decodeOrderPackets.shift();this.presentationOrderPackets.length>0;){let n=this.presentationOrderPackets[0];if(this.decodeOrderPackets.includes(n))break;this.presentationOrderPackets.shift()}return{packet:t,duration:r}}async readNextPacket(){if(this.reachedEnd)return!1;let t;return this.context.suppliedPacket?t=this.context.suppliedPacket:(await nd(this.context),t=this.context.suppliedPacket),this.context.suppliedPacket=null,t?(this.decodeOrderPackets.push(t),this.processPacketThroughReorderBuffer(t),!0):(this.reachedEnd=!0,this.flushReorderBuffer(),!1)}async ensureCurrentPacketHasNext(){let t=this.decodeOrderPackets[0];for(p(t);;){let e=this.presentationOrderPackets.indexOf(t);if(e!==-1&&e<=this.presentationOrderPackets.length-2||!await this.readNextPacket())break}}processPacketThroughReorderBuffer(t){if(this.reorderBuffer.push(t),this.reorderBuffer.length>=this.reorderSize){let e=0;for(let n=1;nt.pts-e.pts),this.presentationOrderPackets.push(...this.reorderBuffer),this.reorderBuffer.length=0}};var Be=class{},Pi=class extends Be{async _getMajorBrand(t){let e=t._reader.requestSlice(0,12);return e instanceof Promise&&(e=await e),!e||(e.skip(4),re(e,4)!=="ftyp")?null:re(e,4)}_createDemuxer(t){return new kn(t)}},Hn=class extends Pi{async _canReadInput(t){let e=await this._getMajorBrand(t);return!!e&&e!=="qt "}get name(){return"MP4"}get mimeType(){return"video/mp4"}},qn=class extends Pi{async _canReadInput(t){return await this._getMajorBrand(t)==="qt "}get name(){return"QuickTime File Format"}get mimeType(){return"video/quicktime"}},Ai=class extends Be{async isSupportedEBMLOfDocType(t,e){let r=t._reader.requestSlice(0,qe);if(r instanceof Promise&&(r=await r),!r)return!1;let n=ss(r);if(n===null||n<1||n>8||L(r,n)!==440786851)return!1;let s=os(r);if(typeof s!="number")return!1;let o=t._reader.requestSlice(r.filePos,s);if(o instanceof Promise&&(o=await o),!o)return!1;let c=r.filePos;for(;o.filePos<=c+s-Ie;){let u=je(o);if(!u)break;let{id:d,size:l}=u,m=o.filePos;if(l===void 0)return!1;switch(d){case 17030:if(L(o,l)!==1)return!1;break;case 17143:if(L(o,l)!==1)return!1;break;case 17026:if(Lt(o,l)!==e)return!1;break;case 17031:if(L(o,l)>4)return!1;break}o.filePos=m+l}return!0}_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"matroska")}_createDemuxer(t){return new An(t)}get name(){return"Matroska"}get mimeType(){return"video/x-matroska"}},jn=class extends Ai{_canReadInput(t){return this.isSupportedEBMLOfDocType(t,"webm")}get name(){return"WebM"}get mimeType(){return"video/webm"}},Kn=class extends Be{async _canReadInput(t){let e=0;for(;;){let l=t._reader.requestSlice(e,rt);if(l instanceof Promise&&(l=await l),!l)break;let m=Ke(l);if(!m)break;e=l.filePos+m.size}let r=await ki(t._reader,e,e+4096);if(!r)return!1;let n=r.header,a=Ot(n.mpegVersionId,n.channel),s=t._reader.requestSlice(r.startPos+a,4);if(s instanceof Promise&&(s=await s),!s)return!1;let o=A(s);if(o===Dt||o===Tr)return!0;e=r.startPos+r.header.totalSize;let u=await ki(t._reader,e,e+4);if(!u)return!1;let d=u.header;return!(n.channel!==d.channel||n.sampleRate!==d.sampleRate)}_createDemuxer(t){return new vn(t)}get name(){return"MP3"}get mimeType(){return"audio/mpeg"}},Gn=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,12);if(e instanceof Promise&&(e=await e),!e)return!1;let r=re(e,4);return r!=="RIFF"&&r!=="RIFX"&&r!=="RF64"?!1:(e.skip(4),re(e,4)==="WAVE")}_createDemuxer(t){return new Bn(t)}get name(){return"WAVE"}get mimeType(){return"audio/wav"}},Qn=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,4);return e instanceof Promise&&(e=await e),e?re(e,4)==="OggS":!1}_createDemuxer(t){return new Rn(t)}get name(){return"Ogg"}get mimeType(){return"application/ogg"}},$n=class extends Be{async _canReadInput(t){let e=t._reader.requestSlice(0,4);return e instanceof Promise&&(e=await e),e?re(e,4)==="fLaC":!1}get name(){return"FLAC"}get mimeType(){return"audio/flac"}_createDemuxer(t){return new zn(t)}},Xn=class extends Be{async _canReadInput(t){let e=0;for(;;){let s=t._reader.requestSlice(e,rt);if(s instanceof Promise&&(s=await s),!s)break;let o=Ke(s);if(!o)break;e=s.filePos+o.size}let r=t._reader.requestSliceRange(e,xt,Re);if(r instanceof Promise&&(r=await r),!r)return!1;let n=ve(r);if(!n||(e+=n.frameLength,r=t._reader.requestSliceRange(e,xt,Re),r instanceof Promise&&(r=await r),!r))return!1;let a=ve(r);return a?n.objectType===a.objectType&&n.samplingFrequencyIndex===a.samplingFrequencyIndex&&n.channelConfiguration===a.channelConfiguration:!1}_createDemuxer(t){return new Dn(t)}get name(){return"ADTS"}get mimeType(){return"audio/aac"}},Yn=class extends Be{async _canReadInput(t){let e=205,r=t._reader.requestSlice(0,e);if(r instanceof Promise&&(r=await r),!r)return!1;let n=M(r,e);return n[0]===71&&n[188]===71||n[0]===71&&n[204]===71?!0:n[4]===71&&n[192]===71}_createDemuxer(t){return new Ln(t)}get name(){return"MPEG Transport Stream"}get mimeType(){return"video/MP2T"}},xc=new Hn,Cc=new qn,Pc=new Ai,Ac=new jn,Ic=new Kn,vc=new Gn,Ec=new Qn,_c=new Xn,Fc=new $n,Mc=new Yn,ad=[xc,Cc,Pc,Ac,vc,Ec,Fc,Ic,_c,Mc];var Rc=oo(Ts(),1);var sd=typeof Rc<"u"?Rc:void 0,Qe=class{constructor(){this._disposed=!1;this._sizePromise=null;this.onread=null}async getSizeOrNull(){if(this._disposed)throw new de;return this._sizePromise??=Promise.resolve(this._retrieveSize())}async getSize(){if(this._disposed)throw new de;let t=await this.getSizeOrNull();if(t===null)throw new Error("Cannot determine the size of an unsized source.");return t}},Ss=class extends Qe{constructor(e){if(!(e instanceof ArrayBuffer)&&!(typeof SharedArrayBuffer<"u"&&e instanceof SharedArrayBuffer)&&!ArrayBuffer.isView(e))throw new TypeError("buffer must be an ArrayBuffer, SharedArrayBuffer, or ArrayBufferView.");super();this._onreadCalled=!1;this._bytes=H(e),this._view=D(e)}_retrieveSize(){return this._bytes.byteLength}_read(){return this._onreadCalled||(this.onread?.(0,this._bytes.byteLength),this._onreadCalled=!0),{bytes:this._bytes,view:this._view,offset:0}}_dispose(){}},xs=class extends Qe{constructor(e,r={}){if(!(e instanceof Blob))throw new TypeError("blob must be a Blob.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.maxCacheSize!==void 0&&(!Rt(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");super();this._readers=new WeakMap;this._blob=e,this._orchestrator=new Ii({maxCacheSize:r.maxCacheSize??8*2**20,maxWorkerCount:4,runWorker:this._runWorker.bind(this),prefetchProfile:Is.fileSystem})}_retrieveSize(){let e=this._blob.size;return this._orchestrator.fileSize=e,e}_read(e,r){return this._orchestrator.read(e,r)}async _runWorker(e){let r=this._readers.get(e);for(r===void 0&&("stream"in this._blob&&!Mt()?r=this._blob.slice(e.currentPos).stream().getReader():r=null,this._readers.set(e,r));e.currentPos{if(t instanceof Error&&(t.message.includes("Failed to fetch")||t.message.includes("Load failed")||t.message.includes("NetworkError when attempting to fetch resource"))){let n=null;try{typeof window<"u"&&typeof window.location<"u"&&(n=new URL(e instanceof Request?e.url:e,window.location.href).origin)}catch{}if((typeof navigator<"u"&&typeof navigator.onLine=="boolean"?navigator.onLine:!0)&&n!==null&&n!==window.location.origin)return 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**(i-2),16)},Cs=class extends Qe{constructor(e,r={}){if(typeof e!="string"&&!(e instanceof URL)&&!(typeof Request<"u"&&e instanceof Request))throw new TypeError("url must be a string, URL or Request.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.requestInit!==void 0&&(!r.requestInit||typeof r.requestInit!="object"))throw new TypeError("options.requestInit, when provided, must be an object.");if(r.getRetryDelay!==void 0&&typeof r.getRetryDelay!="function")throw new TypeError("options.getRetryDelay, when provided, must be a function.");if(r.maxCacheSize!==void 0&&(!Rt(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(r.parallelism!==void 0&&(!Number.isInteger(r.parallelism)||r.parallelism<1))throw new TypeError("options.parallelism, when provided, must be a positive number.");if(r.fetchFn!==void 0&&typeof r.fetchFn!="function")throw new TypeError("options.fetchFn, when provided, must be a function.");super();this._existingResponses=new WeakMap;this._url=e,this._options=r,this._getRetryDelay=r.getRetryDelay??od;let n=2;this._orchestrator=new Ii({maxCacheSize:r.maxCacheSize??64*2**20,maxWorkerCount:r.parallelism??n,runWorker:this._runWorker.bind(this),prefetchProfile:Is.network})}async _retrieveSize(){let e=new AbortController,r=await Va(this._options.fetchFn??fetch,this._url,Ua(this._options.requestInit??{},{headers:{Range:"bytes=0-"},signal:e.signal}),this._getRetryDelay,()=>this._disposed);if(!r.ok)throw new Error(`Error fetching ${String(this._url)}: ${r.status} ${r.statusText}`);let n,a;if(r.status===206)a=this._getTotalLengthFromRangeResponse(r),n=this._orchestrator.createWorker(0,Math.min(a,Bc));else{let s=r.headers.get("Content-Length");if(s)a=Number(s),n=this._orchestrator.createWorker(0,a),this._orchestrator.options.maxCacheSize=1/0,console.warn("HTTP server did not respond with 206 Partial Content, meaning the entire remote resource now has to be downloaded. For efficient media file streaming across a network, please make sure your server supports range requests.");else throw new Error(`HTTP response (status ${r.status}) must surface Content-Length header.`)}return this._orchestrator.fileSize=a,this._existingResponses.set(n,{response:r,abortController:e}),this._orchestrator.runWorker(n),a}_read(e,r){return this._orchestrator.read(e,r)}async _runWorker(e){for(;;){let r=this._existingResponses.get(e);this._existingResponses.delete(e);let n=r?.abortController,a=r?.response;if(n||(n=new AbortController,a=await Va(this._options.fetchFn??fetch,this._url,Ua(this._options.requestInit??{},{headers:{Range:`bytes=${e.currentPos}-`},signal:n.signal}),this._getRetryDelay,()=>this._disposed)),p(a),!a.ok)throw new Error(`Error fetching ${String(this._url)}: ${a.status} ${a.statusText}`);if(e.currentPos>0&&a.status!==206)throw new Error("HTTP server did not respond with 206 Partial Content to a range request. To enable efficient media file streaming across a network, please make sure your server supports range requests.");if(!a.body)throw new Error("Missing HTTP response body stream. The used fetch function must provide the response body as a ReadableStream.");let s=a.body.getReader();for(;;){if(e.currentPos>=e.targetPos||e.aborted){n.abort(),e.running=!1;return}let o;try{o=await s.read()}catch(d){if(this._disposed)throw d;let l=this._getRetryDelay(1,d,this._url);if(l!==null){console.error("Error while reading response stream. Attempting to resume.",d),await new Promise(m=>setTimeout(m,1e3*l));break}else throw d}if(e.aborted)continue;let{done:c,value:u}=o;if(c){if(e.currentPos>=e.targetPos){this._orchestrator.forgetWorker(e),e.running=!1;return}break}this.onread?.(e.currentPos,e.currentPos+u.length),this._orchestrator.supplyWorkerData(e,u)}}}_getTotalLengthFromRangeResponse(e){let r=e.headers.get("Content-Range");if(r){let a=/\/(\d+)/.exec(r);if(a)return Number(a[1])}let n=e.headers.get("Content-Length");if(n)return Number(n);throw new Error("Partial HTTP response (status 206) must surface either Content-Range or Content-Length header.")}_dispose(){this._orchestrator.dispose()}},Ps=class extends Qe{constructor(e,r={}){if(typeof e!="string")throw new TypeError("filePath must be a string.");if(!r||typeof r!="object")throw new TypeError("options must be an object.");if(r.maxCacheSize!==void 0&&(!Rt(r.maxCacheSize)||r.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");super();this._fileHandle=null;this._streamSource=new Zn({getSize:async()=>(this._fileHandle=await sd.fs.open(e,"r"),(await this._fileHandle.stat()).size),read:async(n,a)=>{p(this._fileHandle);let s=new Uint8Array(a-n);return await this._fileHandle.read(s,0,a-n,n),s},maxCacheSize:r.maxCacheSize,prefetchProfile:"fileSystem"})}_read(e,r){return this._streamSource._read(e,r)}_retrieveSize(){return this._streamSource._retrieveSize()}_dispose(){this._streamSource._dispose(),this._fileHandle?.close(),this._fileHandle=null}},Zn=class extends Qe{constructor(t){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(typeof t.getSize!="function")throw new TypeError("options.getSize must be a function.");if(typeof t.read!="function")throw new TypeError("options.read must be a function.");if(t.dispose!==void 0&&typeof t.dispose!="function")throw new TypeError("options.dispose, when provided, must be a function.");if(t.maxCacheSize!==void 0&&(!Rt(t.maxCacheSize)||t.maxCacheSize<0))throw new TypeError("options.maxCacheSize, when provided, must be a non-negative number.");if(t.prefetchProfile&&!["none","fileSystem","network"].includes(t.prefetchProfile))throw new TypeError("options.prefetchProfile, when provided, must be one of 'none', 'fileSystem' or 'network'.");super(),this._options=t,this._orchestrator=new Ii({maxCacheSize:t.maxCacheSize??8*2**20,maxWorkerCount:2,prefetchProfile:Is[t.prefetchProfile??"none"],runWorker:this._runWorker.bind(this)})}_retrieveSize(){let t=this._options.getSize();if(t instanceof Promise)return t.then(e=>{if(!Number.isInteger(e)||e<0)throw new TypeError("options.getSize must return or resolve to a non-negative integer.");return this._orchestrator.fileSize=e,e});if(!Number.isInteger(t)||t<0)throw new TypeError("options.getSize must return or resolve to a non-negative integer.");return this._orchestrator.fileSize=t,t}_read(t,e){return this._orchestrator.read(t,e)}async _runWorker(t){for(;t.currentPosthis._endIndex)return null;this._maxRequestedIndex=Math.max(this._maxRequestedIndex,r);let n=N(this._cache,e,l=>l.start),a=n!==-1?this._cache[n]:null;if(a&&a.start<=e&&r<=a.end)return{bytes:a.bytes,view:a.view,offset:a.start};let s=e,o=new Uint8Array(r-e);if(n!==-1)for(let l=n;l=r)break;let f=Math.max(e,m.start);f>s&&this._throwDueToCacheMiss();let g=Math.min(r,m.end);fs&&this._throwDueToCacheMiss();let{promise:c,resolve:u,reject:d}=Y();return this._pendingSlices.push({start:e,end:r,bytes:o,resolve:u,reject:d}),this._targetIndex=Math.max(this._targetIndex,r),this._pulling||(this._pulling=!0,this._pull().catch(l=>{if(this._pulling=!1,this._pendingSlices.length>0)this._pendingSlices.forEach(m=>m.reject(l)),this._pendingSlices.length=0;else throw l})),c}_throwDueToCacheMiss(){throw new Error("Read is before the cached region. With ReadableStreamSource, you must access the data more sequentially or increase the size of its cache.")}async _pull(){for(this._reader??=this._stream.getReader();this._currentIndex0;){let s=this._cache[0];if(this._maxRequestedIndex-s.end<=this._maxCacheSize)break;this._cache.shift()}this._currentIndex+=r.byteLength}this._pulling=!1}_dispose(){this._pendingSlices.length=0,this._cache.length=0}},Is={none:(i,t)=>({start:i,end:t}),fileSystem:(i,t)=>(i=Math.floor((i-65536)/65536)*65536,t=Math.ceil((t+65536)/65536)*65536,{start:i,end:t}),network:(i,t,e)=>{i=Math.max(0,Math.floor((i-65536)/65536)*65536);for(let n of e){let s=Math.max((n.startPos+n.targetPos)/2,n.targetPos-8388608);if(ji(i,t,s,n.targetPos)){let o=n.targetPos-n.startPos,c=Math.ceil((o+1)/8388608)*8388608,u=2**Math.ceil(Math.log2(o+1)),d=Math.min(u,c);t=Math.max(t,n.startPos+d)}}return t=Math.max(t,i+Bc),{start:i,end:t}}},Ii=class{constructor(t){this.options=t;this.fileSize=null;this.nextAge=0;this.workers=[];this.cache=[];this.currentCacheSize=0;this.disposed=!1}read(t,e){p(this.fileSize!==null);let r=this.options.prefetchProfile(t,e,this.workers),n=Math.max(r.start,0),a=Math.min(r.end,this.fileSize);p(n<=t&&e<=a);let s=null,o=N(this.cache,t,k=>k.start),c=o!==-1?this.cache[o]:null;c&&c.start<=t&&e<=c.end&&(c.age=this.nextAge++,s={bytes:c.bytes,view:c.view,offset:c.start});let u=N(this.cache,n,k=>k.start),d=s?null:new Uint8Array(e-t),l=0,m=n,f=[];if(u!==-1){for(let k=u;k=a)break;if(w.end<=n)continue;let S=Math.max(n,w.start),T=Math.min(a,w.end);if(p(S<=T),m=d.length&&(s={bytes:d,view:D(d),offset:t}),f.length===0)return p(s),s;let{promise:g,resolve:b,reject:h}=Y(),y=[];for(let k of f){let w=Math.max(t,k.start),S=Math.min(e,k.end);w===k.start&&S===k.end?y.push(k):w({bytes:k,view:D(k),offset:t}))),s}createWorker(t,e){let r={startPos:t,currentPos:t,targetPos:e,running:!1,aborted:this.disposed,pendingSlices:[],age:this.nextAge++};for(this.workers.push(r);this.workers.length>this.options.maxWorkerCount;){let n=0,a=this.workers[0];for(let s=1;s0)break;a.aborted=!0,this.workers.splice(n,1)}return r}runWorker(t){p(!t.running),p(t.currentPos{if(t.running=!1,t.pendingSlices.length>0)t.pendingSlices.forEach(r=>r.reject(e)),t.pendingSlices.length=0;else throw e})}supplyWorkerData(t,e){p(!t.aborted);let r=t.currentPos,n=r+e.length;this.insertIntoCache({start:r,end:n,bytes:e,view:D(e),age:this.nextAge++}),t.currentPos+=e.length,t.targetPos=Math.max(t.targetPos,t.currentPos);for(let a=0;ad.start&&(d.start=n),d.end<=d.start&&(s.holes.splice(u,1),u--)}s.holes.length===0&&(s.resolve(s.bytes),t.pendingSlices.splice(a,1),a--)}for(let a=0;ar.start)+1;if(e>0){let r=this.cache[e-1];if(r.end>=t.end)return;if(r.end>t.start){let n=new Uint8Array(t.end-r.start);n.set(r.bytes,0),n.set(t.bytes,t.start-r.start),this.currentCacheSize+=t.end-r.end,r.bytes=n,r.view=D(n),r.end=t.end,e--,t=r}else this.cache.splice(e,0,t),this.currentCacheSize+=t.bytes.length}else this.cache.splice(e,0,t),this.currentCacheSize+=t.bytes.length;for(let r=e+1;r=n.end){this.cache.splice(r,1),this.currentCacheSize-=n.bytes.length,r--;continue}let a=new Uint8Array(n.end-t.start);a.set(t.bytes,0),a.set(n.bytes,n.start-t.start),this.currentCacheSize-=t.end-n.start,t.bytes=a,t.view=D(a),t.end=n.end,this.cache.splice(r,1);break}for(;this.currentCacheSize>this.options.maxCacheSize;){let r=0,n=this.cache[0];for(let a=1;a!(e instanceof Be)))throw new TypeError("options.formats must be an array of InputFormat.");if(!(t.source instanceof Qe))throw new TypeError("options.source must be a Source.");if(t.source._disposed)throw new Error("options.source must not be disposed.");this._formats=t.formats,this._source=t.source,this._reader=new Jn(t.source)}get disposed(){return this._disposed}_getDemuxer(){return this._demuxerPromise??=(async()=>{this._reader.fileSize=await this._source.getSizeOrNull();for(let t of this._formats)if(await t._canReadInput(this))return this._format=t,t._createDemuxer(this);throw new Error("Input has an unsupported or unrecognizable format.")})()}get source(){return this._source}async getFormat(){return await this._getDemuxer(),p(this._format),this._format}async computeDuration(){return(await this._getDemuxer()).computeDuration()}async getFirstTimestamp(){let t=await this.getTracks();if(t.length===0)return 0;let e=await Promise.all(t.map(r=>r.getFirstTimestamp()));return Math.min(...e)}async getTracks(){return(await this._getDemuxer()).getTracks()}async getVideoTracks(){return(await this.getTracks()).filter(e=>e.isVideoTrack())}async getAudioTracks(){return(await this.getTracks()).filter(e=>e.isAudioTrack())}async getPrimaryVideoTrack(){return(await this.getTracks()).find(e=>e.isVideoTrack())??null}async getPrimaryAudioTrack(){return(await this.getTracks()).find(e=>e.isAudioTrack())??null}async getMimeType(){return(await this._getDemuxer()).getMimeType()}async getMetadataTags(){return(await this._getDemuxer()).getMetadataTags()}dispose(){this._disposed||(this._disposed=!0,this._source._disposed=!0,this._source._dispose())}[Symbol.dispose](){this.dispose()}},de=class extends Error{constructor(t="Input has been disposed."){super(t),this.name="InputDisposedError"}};var Jn=class{constructor(t){this.source=t}requestSlice(t,e){if(this.source._disposed)throw new de;if(t<0||this.fileSize!==null&&t+e>this.fileSize)return null;let r=t+e,n=this.source._read(t,r);return n instanceof Promise?n.then(a=>a?new he(a.bytes,a.view,a.offset,t,r):null):n?new he(n.bytes,n.view,n.offset,t,r):null}requestSliceRange(t,e,r){if(this.source._disposed)throw new de;if(t<0)return null;if(this.fileSize!==null)return this.requestSlice(t,ae(this.fileSize-t,e,r));{let n=this.requestSlice(t,r),a=s=>{if(s)return s;let o=u=>(p(u!==null),this.requestSlice(t,ae(u-t,e,r))),c=this.source._retrieveSize();return c instanceof Promise?c.then(o):o(c)};return n instanceof Promise?n.then(a):a(n)}}},he=class i{constructor(t,e,r,n,a){this.bytes=t;this.view=e;this.offset=r;this.start=n;this.end=a;this.bufferPos=n-r}static tempFromBytes(t){return new i(t,D(t),0,0,t.length)}get length(){return this.end-this.start}get filePos(){return this.offset+this.bufferPos}set filePos(t){this.bufferPos=t-this.offset}get remainingLength(){return Math.max(this.end-this.filePos,0)}skip(t){this.bufferPos+=t}slice(t,e=this.end-t){if(tthis.end)throw new RangeError("Slicing outside of original slice.");return new i(this.bytes,this.view,this.offset,t,t+e)}},Ee=(i,t)=>{if(i.filePosi.end)throw new RangeError(`Tried reading [${i.filePos}, ${i.filePos+t}), but slice is [${i.start}, ${i.end}). This is likely an internal error, please report it alongside the file that caused it.`)},M=(i,t)=>{Ee(i,t);let e=i.bytes.subarray(i.bufferPos,i.bufferPos+t);return i.bufferPos+=t,e},R=i=>(Ee(i,1),i.view.getUint8(i.bufferPos++)),Ur=(i,t)=>{Ee(i,2);let e=i.view.getUint16(i.bufferPos,t);return i.bufferPos+=2,e},oe=i=>{Ee(i,2);let t=i.view.getUint16(i.bufferPos,!1);return i.bufferPos+=2,t},Nt=i=>{Ee(i,3);let t=Xt(i.view,i.bufferPos,!1);return i.bufferPos+=3,t},hi=i=>{Ee(i,2);let t=i.view.getInt16(i.bufferPos,!1);return i.bufferPos+=2,t},St=(i,t)=>{Ee(i,4);let e=i.view.getUint32(i.bufferPos,t);return i.bufferPos+=4,e},A=i=>{Ee(i,4);let t=i.view.getUint32(i.bufferPos,!1);return i.bufferPos+=4,t},ur=i=>{Ee(i,4);let t=i.view.getUint32(i.bufferPos,!0);return i.bufferPos+=4,t},wt=i=>{Ee(i,4);let t=i.view.getInt32(i.bufferPos,!1);return i.bufferPos+=4,t},cd=i=>{Ee(i,4);let t=i.view.getInt32(i.bufferPos,!0);return i.bufferPos+=4,t},hs=(i,t)=>{let e,r;return t?(e=St(i,!0),r=St(i,!0)):(r=St(i,!1),e=St(i,!1)),r*4294967296+e},Me=i=>{let t=A(i),e=A(i);return t*4294967296+e},sc=i=>{let t=wt(i),e=A(i);return t*4294967296+e},bc=i=>{let t=ur(i);return cd(i)*4294967296+t},lc=i=>{Ee(i,4);let t=i.view.getFloat32(i.bufferPos,!1);return i.bufferPos+=4,t},wn=i=>{Ee(i,8);let t=i.view.getFloat64(i.bufferPos,!1);return i.bufferPos+=8,t},re=(i,t)=>{Ee(i,t);let e="";for(let r=0;r{let e=i.filePos;t.raw??={},t.raw.TAG??=M(i,yi-3),i.filePos=e;let r=Vr(i,30);r&&(t.title??=r);let n=Vr(i,30);n&&(t.artist??=n);let a=Vr(i,30);a&&(t.album??=a);let s=Vr(i,4),o=Number.parseInt(s,10);Number.isInteger(o)&&o>0&&(t.date??=new Date(o,0,1));let c=M(i,30),u;if(c[28]===0&&c[29]!==0){let l=c[29];l>0&&(t.trackNumber??=l),i.skip(-30),u=Vr(i,28),i.skip(2)}else i.skip(-30),u=Vr(i,30);u&&(t.comment??=u);let d=R(i);d{let e=M(i,t),r=Zt(e.indexOf(0),e.length),n=e.subarray(0,r),a="";for(let s=0;s{let t=i.filePos,e=re(i,3),r=R(i),n=R(i),a=R(i),s=A(i);if(e!=="ID3"||r===255||n===255||(s&2155905152)!==0)return i.filePos=t,null;let o=Yi(s);return{majorVersion:r,revision:n,flags:a,size:o}},Br=(i,t,e)=>{if(![2,3,4].includes(t.majorVersion)){console.warn(`Unsupported ID3v2 major version: ${t.majorVersion}`);return}let r=M(i,t.size),n=new vs(t,r);if(t.flags&16&&n.removeFooter(),t.flags&128&&t.majorVersion===3&&n.ununsynchronizeAll(),t.flags&64){let a=n.readU32();t.majorVersion===3?n.pos+=a:n.pos+=a-4}for(;n.pos<=n.bytes.length-n.frameHeaderSize();){let a=n.readId3V2Frame();if(!a)break;let s=n.pos,o=n.pos+a.size,c=!1,u=!1,d=!1;if(t.majorVersion===3?(c=!!(a.flags&64),u=!!(a.flags&128)):t.majorVersion===4&&(c=!!(a.flags&4),u=!!(a.flags&8),d=!!(a.flags&2)||!!(t.flags&128)),c){console.warn(`Skipping encrypted ID3v2 frame ${a.id}`),n.pos=o;continue}if(u){console.warn(`Skipping compressed ID3v2 frame ${a.id}`),n.pos=o;continue}switch(d&&n.ununsynchronizeRegion(n.pos,o),e.raw??={},a.id[0]==="T"?e.raw[a.id]??=n.readId3V2EncodingAndText(o):e.raw[a.id]??=n.readBytes(a.size),n.pos=s,a.id){case"TIT2":case"TT2":e.title??=n.readId3V2EncodingAndText(o);break;case"TIT3":case"TT3":e.description??=n.readId3V2EncodingAndText(o);break;case"TPE1":case"TP1":e.artist??=n.readId3V2EncodingAndText(o);break;case"TALB":case"TAL":e.album??=n.readId3V2EncodingAndText(o);break;case"TPE2":case"TP2":e.albumArtist??=n.readId3V2EncodingAndText(o);break;case"TRCK":case"TRK":{let m=n.readId3V2EncodingAndText(o).split("/"),f=Number.parseInt(m[0],10),g=m[1]&&Number.parseInt(m[1],10);Number.isInteger(f)&&f>0&&(e.trackNumber??=f),g&&Number.isInteger(g)&&g>0&&(e.tracksTotal??=g)}break;case"TPOS":case"TPA":{let m=n.readId3V2EncodingAndText(o).split("/"),f=Number.parseInt(m[0],10),g=m[1]&&Number.parseInt(m[1],10);Number.isInteger(f)&&f>0&&(e.discNumber??=f),g&&Number.isInteger(g)&&g>0&&(e.discsTotal??=g)}break;case"TCON":case"TCO":{let l=n.readId3V2EncodingAndText(o),m=/^\((\d+)\)/.exec(l);if(m){let f=Number.parseInt(m[1]);if(zr[f]!==void 0){e.genre??=zr[f];break}}if(m=/^\d+$/.exec(l),m){let f=Number.parseInt(m[0]);if(zr[f]!==void 0){e.genre??=zr[f];break}}e.genre??=l}break;case"TDRC":case"TDAT":{let l=n.readId3V2EncodingAndText(o),m=new Date(l);Number.isNaN(m.getTime())||(e.date??=m)}break;case"TYER":case"TYE":{let l=n.readId3V2EncodingAndText(o),m=Number.parseInt(l,10);Number.isInteger(m)&&(e.date??=new Date(m,0,1))}break;case"USLT":case"ULT":{let l=n.readU8();n.pos+=3,n.readId3V2Text(l,o),e.lyrics??=n.readId3V2Text(l,o)}break;case"COMM":case"COM":{let l=n.readU8();n.pos+=3,n.readId3V2Text(l,o),e.comment??=n.readId3V2Text(l,o)}break;case"APIC":case"PIC":{let l=n.readId3V2TextEncoding(),m;if(t.majorVersion===2){let h=n.readAscii(3);m=h==="PNG"?"image/png":h==="JPG"?"image/jpeg":"image/*"}else m=n.readId3V2Text(l,o);let f=n.readU8(),g=n.readId3V2Text(l,o).trimEnd(),b=o-n.pos;if(b>=0){let h=n.readBytes(b);e.images||(e.images=[]),e.images.push({data:h,mimeType:m,kind:f===3?"coverFront":f===4?"coverBack":"unknown",description:g})}}break;default:n.pos+=a.size;break}n.pos=o}},vs=class{constructor(t,e){this.header=t;this.bytes=e;this.pos=0;this.view=new DataView(e.buffer,e.byteOffset,e.byteLength)}frameHeaderSize(){return this.header.majorVersion===2?6:10}ununsynchronizeAll(){let t=[];for(let e=0;e{let c=this.pos+o;if(c>this.bytes.length)return!1;if(c<=this.bytes.length-this.frameHeaderSize()){this.pos+=o;let u=this.readAscii(4);if(u!=="\0\0\0\0"&&!/[0-9A-Z]{4}/.test(u))return!1}return!0};if(!s(r)){let o=this.header.majorVersion===4?e:Yi(e);s(o)&&(r=o)}return this.pos=a,{id:t,size:r,flags:n}}}readId3V2TextEncoding(){let t=this.readU8();if(t>3)throw new Error(`Unsupported text encoding: ${t}`);return t}readId3V2Text(t,e){let r=this.pos,n=this.readBytes(e-this.pos);switch(t){case 0:{let a="";for(let s=0;so===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(2,s))}else if(n[0]===254&&n[1]===255){let a=new TextDecoder("utf-16be"),s=Zt(n.findIndex((o,c)=>o===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(2,s))}else{let a=Zt(n.findIndex(s=>s===0),n.length);return this.pos=r+Math.min(a+1,n.length),me.decode(n.subarray(0,a))}case 2:{let a=new TextDecoder("utf-16be"),s=Zt(n.findIndex((o,c)=>o===0&&n[c+1]===0&&c%2===0),n.length);return this.pos=r+Math.min(s+2,n.length),a.decode(n.subarray(0,s))}case 3:{let a=Zt(n.findIndex(s=>s===0),n.length);return this.pos=r+Math.min(a+1,n.length),me.decode(n.subarray(0,a))}}}readId3V2EncodingAndText(t){if(this.pos>=t)return"";let e=this.readId3V2TextEncoding();return this.readId3V2Text(e,t)}},Ht=class{constructor(t){this.helper=new Uint8Array(8);this.helperView=D(this.helper);this.writer=t}writeId3V2Tag(t){let e=this.writer.getPos();this.writeAscii("ID3"),this.writeU8(4),this.writeU8(0),this.writeU8(0),this.writeSynchsafeU32(0);let r=this.writer.getPos(),n=new Set;for(let{key:o,value:c}of ze(t))switch(o){case"title":this.writeId3V2TextFrame("TIT2",c),n.add("TIT2");break;case"description":this.writeId3V2TextFrame("TIT3",c),n.add("TIT3");break;case"artist":this.writeId3V2TextFrame("TPE1",c),n.add("TPE1");break;case"album":this.writeId3V2TextFrame("TALB",c),n.add("TALB");break;case"albumArtist":this.writeId3V2TextFrame("TPE2",c),n.add("TPE2");break;case"trackNumber":{let u=t.tracksTotal!==void 0?`${c}/${t.tracksTotal}`:c.toString();this.writeId3V2TextFrame("TRCK",u),n.add("TRCK")}break;case"discNumber":{let u=t.discsTotal!==void 0?`${c}/${t.discsTotal}`:c.toString();this.writeId3V2TextFrame("TPOS",u),n.add("TPOS")}break;case"genre":this.writeId3V2TextFrame("TCON",c),n.add("TCON");break;case"date":this.writeId3V2TextFrame("TDRC",c.toISOString().slice(0,10)),n.add("TDRC");break;case"lyrics":this.writeId3V2LyricsFrame(c),n.add("USLT");break;case"comment":this.writeId3V2CommentFrame(c),n.add("COMM");break;case"images":{let u={coverFront:3,coverBack:4,unknown:0};for(let d of c){let l=u[d.kind]??0,m=d.description??"";this.writeId3V2ApicFrame(d.mimeType,l,m,d.data)}}break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:J(o)}if(t.raw)for(let o in t.raw){let c=t.raw[o];if(c==null||o.length!==4||n.has(o))continue;let u;if(typeof c=="string"){let d=X.encode(c);u=new Uint8Array(d.byteLength+2),u[0]=3,u.set(d,1)}else if(c instanceof Uint8Array)u=c;else continue;this.writeAscii(o),this.writeSynchsafeU32(u.byteLength),this.writeU16(0),this.writer.write(u)}let a=this.writer.getPos(),s=a-r;return this.writer.seek(e+6),this.writeSynchsafeU32(s),this.writer.seek(a),s+10}writeU8(t){this.helper[0]=t,this.writer.write(this.helper.subarray(0,1))}writeU16(t){this.helperView.setUint16(0,t,!1),this.writer.write(this.helper.subarray(0,2))}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeAscii(t){for(let e=0;e{let t=new Uint8Array(7),e=new V(t),{objectType:r,frequencyIndex:n,channelConfiguration:a}=i,s=r-1;return e.writeBits(12,4095),e.writeBits(1,0),e.writeBits(2,0),e.writeBits(1,1),e.writeBits(2,s),e.writeBits(4,n),e.writeBits(1,0),e.writeBits(3,a),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.writeBits(1,0),e.skipBits(13),e.writeBits(11,2047),e.writeBits(2,0),{header:t,bitstream:e}},ta=(i,t)=>{i.pos=30,i.writeBits(13,t)};var ra=class extends ge{constructor(e,r){super(e);this.header=null;this.headerBitstream=null;this.inputIsAdts=null;this.format=r,this.writer=e._writer}async start(){mt(this.output._metadataTags)||new Ht(this.writer).writeId3V2Tag(this.output._metadataTags)}async getMimeType(){return"audio/aac"}async addEncodedVideoPacket(){throw new Error("ADTS does not support video.")}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{if(this.validateAndNormalizeTimestamp(e,r.timestamp,r.type==="key"),this.inputIsAdts===null){Ae(n);let s=n?.decoderConfig?.description;if(this.inputIsAdts=!s,!this.inputIsAdts){let o=ht(H(s)),c=ea(o);this.header=c.header,this.headerBitstream=c.bitstream}}if(this.inputIsAdts){let s=this.writer.getPos();this.writer.write(r.data),this.format._options.onFrame&&this.format._options.onFrame(r.data,s)}else{p(this.header);let s=r.data.byteLength+this.header.byteLength;ta(this.headerBitstream,s);let o=this.writer.getPos();if(this.writer.write(this.header),this.writer.write(r.data),this.format._options.onFrame){let c=new Uint8Array(s);c.set(this.header,0),c.set(r.data,this.header.byteLength),this.format._options.onFrame(c,o)}}await this.writer.flush()}finally{a()}}async addSubtitleCue(){throw new Error("ADTS does not support subtitles.")}async finalize(){}};var Dc=new Uint8Array([102,76,97,67]),ud=38,dd=34,ia=class extends ge{constructor(e,r){super(e);this.metadataWritten=!1;this.blockSizes=[];this.frameSizes=[];this.sampleRate=null;this.channels=null;this.bitsPerSample=null;this.writer=e._writer,this.format=r}async start(){this.writer.write(Dc)}writeHeader({bitsPerSample:e,minimumBlockSize:r,maximumBlockSize:n,minimumFrameSize:a,maximumFrameSize:s,sampleRate:o,channels:c,totalSamples:u}){p(this.writer.getPos()===4);let d=!mt(this.output._metadataTags),l=new V(new Uint8Array(4));l.writeBits(1,+!d),l.writeBits(7,0),l.writeBits(24,dd),this.writer.write(l.bytes);let m=new V(new Uint8Array(18));if(m.writeBits(16,r),m.writeBits(16,n),m.writeBits(24,a),m.writeBits(24,s),m.writeBits(20,o),m.writeBits(3,c-1),m.writeBits(5,e-1),u>=2**32)throw new Error("This muxer only supports writing up to 2 ** 32 samples");m.writeBits(4,0),m.writeBits(32,u),this.writer.write(m.bytes),this.writer.write(new Uint8Array(16))}writePictureBlock(e){let r=32+e.mimeType.length+(e.description?.length??0)+e.data.length,n=new Uint8Array(r),a=0,s=D(n);s.setUint32(a,e.kind==="coverFront"?3:e.kind==="coverBack"?4:0),a+=4,s.setUint32(a,e.mimeType.length),a+=4,n.set(X.encode(e.mimeType),8),a+=e.mimeType.length,s.setUint32(a,e.description?.length??0),a+=4,n.set(X.encode(e.description??""),a),a+=e.description?.length??0,a+=16,s.setUint32(a,e.data.length),a+=4,n.set(e.data,a),a+=e.data.length,p(a===r);let o=new V(new Uint8Array(4));o.writeBits(1,0),o.writeBits(7,6),o.writeBits(24,r),this.writer.write(o.bytes),this.writer.write(n)}writeVorbisCommentAndPictureBlock(){if(this.writer.seek(ud+Dc.byteLength),mt(this.output._metadataTags)){this.metadataWritten=!0;return}let e=this.output._metadataTags.images??[];for(let a of e)this.writePictureBlock(a);let r=ni(new Uint8Array(0),this.output._metadataTags,!1),n=new V(new Uint8Array(4));n.writeBits(1,1),n.writeBits(7,4),n.writeBits(24,r.length),this.writer.write(n.bytes),this.writer.write(r),this.metadataWritten=!0}async getMimeType(){return"audio/flac"}async addEncodedVideoPacket(){throw new Error("FLAC does not support video.")}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();Ae(n),p(n),p(n.decoderConfig),p(n.decoderConfig.description);try{if(this.validateAndNormalizeTimestamp(e,r.timestamp,r.type==="key"),this.sampleRate===null&&(this.sampleRate=n.decoderConfig.sampleRate),this.channels===null&&(this.channels=n.decoderConfig.numberOfChannels),this.bitsPerSample===null){let m=new V(H(n.decoderConfig.description));m.skipBits(167);let f=m.readBits(5)+1;this.bitsPerSample=f}this.metadataWritten||this.writeVorbisCommentAndPictureBlock();let s=he.tempFromBytes(r.data);M(s,2);let o=M(s,2),c=new V(o),u=On(c.readBits(4));if(u===null)throw new Error("Invalid FLAC frame: Invalid block size.");Un(s);let d=Vn(s,u);this.blockSizes.push(d),this.frameSizes.push(r.data.length);let l=this.writer.getPos();this.writer.write(r.data),this.format._options.onFrame&&this.format._options.onFrame(r.data,l),await this.writer.flush()}finally{a()}}addSubtitleCue(){throw new Error("FLAC does not support subtitles.")}async finalize(){let e=await this.mutex.acquire(),r=1/0,n=0,a=1/0,s=0,o=0;for(let c=0;c\s+((?:\d{2}:)?\d{2}:\d{2}.\d{3})/g,ld=/^WEBVTT(.|\n)*?\n{2}/,Nr=/<(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})>/g,na=class{constructor(t){this.preambleText=null;this.preambleEmitted=!1;this.options=t}parse(t){t=t.replaceAll(`\r `,` `).replaceAll("\r",` `),Ei.lastIndex=0;let e;if(!this.preambleText){if(!ld.test(t))throw new Error("WebVTT preamble incorrect.");e=Ei.exec(t);let r=t.slice(0,e?.index??t.length).trimEnd();if(!r)throw new Error("No WebVTT preamble provided.");this.preambleText=r,e&&(t=t.slice(e.index),Ei.lastIndex=0)}for(;e=Ei.exec(t);){let r=t.slice(0,e.index),n=e[1],a=e.index+e[0].length,s=t.indexOf(` `,a)+1,o=t.slice(a,s).trim(),c=t.indexOf(` `,a);c===-1&&(c=t.length);let u=aa(e[2]),l=aa(e[3])-u,m=t.slice(s,c).trim();t=t.slice(c).trimStart(),Ei.lastIndex=0;let f={timestamp:u/1e3,duration:l/1e3,text:m,identifier:n,settings:o,notes:r},g={};this.preambleEmitted||(g.config={description:this.preambleText},this.preambleEmitted=!0),this.options.output(f,g)}}},md=/(?:(\d{2}):)?(\d{2}):(\d{2}).(\d{3})/,aa=i=>{let t=md.exec(i);if(!t)throw new Error("Expected match.");return 60*60*1e3*Number(t[1]||"0")+60*1e3*Number(t[2])+1e3*Number(t[3])+Number(t[4])},sa=i=>{let t=Math.floor(i/36e5),e=Math.floor(i%(60*60*1e3)/(60*1e3)),r=Math.floor(i%(60*1e3)/1e3),n=i%1e3;return t.toString().padStart(2,"0")+":"+e.toString().padStart(2,"0")+":"+r.toString().padStart(2,"0")+"."+n.toString().padStart(3,"0")};var _i=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer);this.offsets=new WeakMap}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeU64(t){this.helperView.setUint32(0,Math.floor(t/2**32),!1),this.helperView.setUint32(4,t,!1),this.writer.write(this.helper.subarray(0,8))}writeAscii(t){for(let e=0;e[(i%256+256)%256],O=i=>(at.setUint16(0,i,!1),[q[0],q[1]]),Vc=i=>(at.setInt16(0,i,!1),[q[0],q[1]]),zc=i=>(at.setUint32(0,i,!1),[q[1],q[2],q[3]]),v=i=>(at.setUint32(0,i,!1),[q[0],q[1],q[2],q[3]]),jt=i=>(at.setInt32(0,i,!1),[q[0],q[1],q[2],q[3]]),mr=i=>(at.setUint32(0,Math.floor(i/2**32),!1),at.setUint32(4,i,!1),[q[0],q[1],q[2],q[3],q[4],q[5],q[6],q[7]]),Nc=i=>(at.setInt16(0,2**8*i,!1),[q[0],q[1]]),Ct=i=>(at.setInt32(0,2**16*i,!1),[q[0],q[1],q[2],q[3]]),Es=i=>(at.setInt32(0,2**30*i,!1),[q[0],q[1],q[2],q[3]]),_s=(i,t)=>{let e=[],r=i;do{let n=r&127;r>>=7,e.length>0&&(n|=128),e.push(n),t!==void 0&&t--}while(r>0||t);return e.reverse()},xe=(i,t=!1)=>{let e=Array(i.length).fill(null).map((r,n)=>i.charCodeAt(n));return t&&e.push(0),e},Ms=i=>{let t=null;for(let e of i)(!t||e.timestamp>t.timestamp)&&(t=e);return t},Lc=i=>{let t=i*(Math.PI/180),e=Math.round(Math.cos(t)),r=Math.round(Math.sin(t));return[e,r,0,-r,e,0,0,0,1]},Wc=Lc(0),Hc=i=>[Ct(i[0]),Ct(i[1]),Es(i[2]),Ct(i[3]),Ct(i[4]),Es(i[5]),Ct(i[6]),Ct(i[7]),Es(i[8])],U=(i,t,e)=>({type:i,contents:t&&new Uint8Array(t.flat(10)),children:e}),Q=(i,t,e,r,n)=>U(i,[ie(t),zc(e),r??[]],n),qc=i=>i.isQuickTime?U("ftyp",[xe("qt "),v(512),xe("qt ")]):i.fragmented?U("ftyp",[xe("iso5"),v(512),xe("iso5"),xe("iso6"),xe("mp41")]):U("ftyp",[xe("isom"),v(512),xe("isom"),i.holdsAvc?xe("avc1"):[],xe("mp41")]),Fi=i=>({type:"mdat",largeSize:i}),jc=i=>({type:"free",size:i}),Lr=i=>U("moov",void 0,[fd(i.creationTime,i.trackDatas),...i.trackDatas.map(t=>pd(t,i.creationTime)),i.isFragmented?Yd(i.trackDatas):null,sl(i)]),fd=(i,t)=>{let e=le(Math.max(0,...t.filter(s=>s.samples.length>0).map(s=>{let o=Ms(s.samples);return o.timestamp+o.duration})),oa),r=Math.max(0,...t.map(s=>s.track.id))+1,n=!Kt(i)||!Kt(e),a=n?mr:v;return Q("mvhd",+n,0,[a(i),a(i),v(oa),a(e),Ct(1),Nc(1),Array(10).fill(0),Hc(Wc),Array(24).fill(0),v(r)])},pd=(i,t)=>{let e=eu(i);return U("trak",void 0,[hd(i,t),gd(i,t),e.name!==void 0?U("udta",void 0,[U("name",[...X.encode(e.name)])]):null])},hd=(i,t)=>{let e=Ms(i.samples),r=le(e?e.timestamp+e.duration:0,oa),n=!Kt(t)||!Kt(r),a=n?mr:v,s;if(i.type==="video"){let c=i.track.metadata.rotation;s=Lc(c??0)}else s=Wc;let o=2;return i.track.metadata.disposition?.default!==!1&&(o|=1),Q("tkhd",+n,o,[a(t),a(t),v(i.track.id),v(0),a(r),Array(8).fill(0),O(0),O(i.track.id),Nc(i.type==="audio"?1:0),O(0),Hc(s),Ct(i.type==="video"?i.info.width:0),Ct(i.type==="video"?i.info.height:0)])},gd=(i,t)=>U("mdia",void 0,[bd(i,t),Rs(!0,kd[i.type],yd[i.type]),wd(i)]),bd=(i,t)=>{let e=Ms(i.samples),r=le(e?e.timestamp+e.duration:0,i.timescale),n=!Kt(t)||!Kt(r),a=n?mr:v;return Q("mdhd",+n,0,[a(t),a(t),v(i.timescale),a(r),O(Jc(i.track.metadata.languageCode??ee)),O(0)])},kd={video:"vide",audio:"soun",subtitle:"text"},yd={video:"MediabunnyVideoHandler",audio:"MediabunnySoundHandler",subtitle:"MediabunnyTextHandler"},Rs=(i,t,e,r="\0\0\0\0")=>Q("hdlr",0,0,[i?xe("mhlr"):v(0),xe(t),xe(r),v(0),v(0),xe(e,!0)]),wd=i=>U("minf",void 0,[Cd[i.type](),Pd(),vd(i)]),Td=()=>Q("vmhd",0,1,[O(0),O(0),O(0),O(0)]),Sd=()=>Q("smhd",0,0,[O(0),O(0)]),xd=()=>Q("nmhd",0,0),Cd={video:Td,audio:Sd,subtitle:xd},Pd=()=>U("dinf",void 0,[Ad()]),Ad=()=>Q("dref",0,0,[v(1)],[Id()]),Id=()=>Q("url ",0,1),vd=i=>{let t=i.compositionTimeOffsetTable.length>1||i.compositionTimeOffsetTable.some(e=>e.sampleCompositionTimeOffset!==0);return U("stbl",void 0,[Ed(i),qd(i),t?$d(i):null,t?Xd(i):null,Kd(i),Gd(i),Qd(i),jd(i)])},Ed=i=>{let t;if(i.type==="video")t=_d(dl(i.track.source._codec,i.info.decoderConfig.codec),i);else if(i.type==="audio"){let e=Zc(i.track.source._codec,i.muxer.isQuickTime);p(e),t=Dd(e,i)}else i.type==="subtitle"&&(t=Wd(fl[i.track.source._codec],i));return p(t),Q("stsd",0,0,[v(1)],[t])},_d=(i,t)=>U(i,[Array(6).fill(0),O(1),O(0),O(0),Array(12).fill(0),O(t.info.width),O(t.info.height),v(4718592),v(4718592),v(0),O(1),Array(32).fill(0),O(24),Vc(65535)],[ll[t.track.source._codec](t),Hi(t.info.decoderConfig.colorSpace)?Fd(t):null]),Fd=i=>U("colr",[xe("nclx"),O(st[i.info.decoderConfig.colorSpace.primaries]),O(ot[i.info.decoderConfig.colorSpace.transfer]),O(ct[i.info.decoderConfig.colorSpace.matrix]),ie((i.info.decoderConfig.colorSpace.fullRange?1:0)<<7)]),Md=i=>i.info.decoderConfig&&U("avcC",[...H(i.info.decoderConfig.description)]),Rd=i=>i.info.decoderConfig&&U("hvcC",[...H(i.info.decoderConfig.description)]),Oc=i=>{if(!i.info.decoderConfig)return null;let t=i.info.decoderConfig,e=t.codec.split("."),r=Number(e[1]),n=Number(e[2]),a=Number(e[3]),s=e[4]?Number(e[4]):1,o=e[8]?Number(e[8]):Number(t.colorSpace?.fullRange??0),c=(a<<4)+(s<<1)+o,u=e[5]?Number(e[5]):t.colorSpace?.primaries?st[t.colorSpace.primaries]:2,d=e[6]?Number(e[6]):t.colorSpace?.transfer?ot[t.colorSpace.transfer]:2,l=e[7]?Number(e[7]):t.colorSpace?.matrix?ct[t.colorSpace.matrix]:2;return Q("vpcC",1,0,[ie(r),ie(n),ie(c),ie(u),ie(d),ie(l),O(0)])},Bd=i=>U("av1C",Gi(i.info.decoderConfig.codec)),Dd=(i,t)=>{let e=0,r,n=16;if(Z.includes(t.track.source._codec)){let a=t.track.source._codec,{sampleSize:s}=be(a);n=8*s,n>16&&(e=1)}return e===0?r=[Array(6).fill(0),O(1),O(e),O(0),v(0),O(t.info.numberOfChannels),O(n),O(0),O(0),O(t.info.sampleRate<2**16?t.info.sampleRate:0),O(0)]:r=[Array(6).fill(0),O(1),O(e),O(0),v(0),O(t.info.numberOfChannels),O(Math.min(n,16)),O(0),O(0),O(t.info.sampleRate<2**16?t.info.sampleRate:0),O(0),v(1),v(n/8),v(t.info.numberOfChannels*n/8),v(2)],U(i,r,[ml(t.track.source._codec,t.muxer.isQuickTime)?.(t)??null])},Fs=i=>{let t;switch(i.track.source._codec){case"aac":t=64;break;case"mp3":t=107;break;case"vorbis":t=221;break;default:throw new Error(`Unhandled audio codec: ${i.track.source._codec}`)}let e=[...ie(t),...ie(21),...zc(0),...v(0),...v(0)];if(i.info.decoderConfig.description){let r=H(i.info.decoderConfig.description);e=[...e,...ie(5),..._s(r.byteLength),...r]}return e=[...O(1),...ie(0),...ie(4),..._s(e.length),...e,...ie(6),...ie(1),...ie(2)],e=[...ie(3),..._s(e.length),...e],Q("esds",0,0,e)},qt=i=>U("wave",void 0,[Od(i),Ud(i),U("\0\0\0\0")]),Od=i=>U("frma",[xe(Zc(i.track.source._codec,i.muxer.isQuickTime))]),Ud=i=>{let{littleEndian:t}=be(i.track.source._codec);return U("enda",[O(+t)])},Vd=i=>{let t=i.info.numberOfChannels,e=3840,r=i.info.sampleRate,n=0,a=0,s=new Uint8Array(0),o=i.info.decoderConfig?.description;if(o){p(o.byteLength>=18);let c=H(o),u=Vt(c);t=u.outputChannelCount,e=u.preSkip,r=u.inputSampleRate,n=u.outputGain,a=u.channelMappingFamily,u.channelMappingTable&&(s=u.channelMappingTable)}return U("dOps",[ie(0),ie(t),O(e),v(r),Vc(n),ie(a),...s])},zd=i=>{let t=i.info.decoderConfig?.description;p(t);let e=H(t);return Q("dfLa",0,0,[...e.subarray(4)])},it=i=>{let{littleEndian:t,sampleSize:e}=be(i.track.source._codec),r=+t;return Q("pcmC",0,0,[ie(r),ie(8*e)])},Nd=i=>{let t=on(i.info.firstPacket.data);if(!t)throw new Error("Couldn't extract AC-3 frame info from the audio packet. Ensure the packets contain valid AC-3 sync frames (as specified in ETSI TS 102 366).");let e=new Uint8Array(3),r=new V(e);return r.writeBits(2,t.fscod),r.writeBits(5,t.bsid),r.writeBits(3,t.bsmod),r.writeBits(3,t.acmod),r.writeBits(1,t.lfeon),r.writeBits(5,t.bitRateCode),r.writeBits(5,0),U("dac3",[...e])},Ld=i=>{let t=cn(i.info.firstPacket.data);if(!t)throw new Error("Couldn't extract E-AC-3 frame info from the audio packet. Ensure the packets contain valid E-AC-3 sync frames (as specified in ETSI TS 102 366).");let e=16;for(let s of t.substreams)e+=23,s.numDepSub>0?e+=9:e+=1;let r=Math.ceil(e/8),n=new Uint8Array(r),a=new V(n);a.writeBits(13,t.dataRate),a.writeBits(3,t.substreams.length-1);for(let s of t.substreams)a.writeBits(2,s.fscod),a.writeBits(5,s.bsid),a.writeBits(1,0),a.writeBits(1,0),a.writeBits(3,s.bsmod),a.writeBits(3,s.acmod),a.writeBits(1,s.lfeon),a.writeBits(3,0),a.writeBits(4,s.numDepSub),s.numDepSub>0?a.writeBits(9,s.chanLoc):a.writeBits(1,0);return U("dec3",[...n])},Wd=(i,t)=>U(i,[Array(6).fill(0),O(1)],[pl[t.track.source._codec](t)]),Hd=i=>U("vttC",[...X.encode(i.info.config.description)]);var qd=i=>Q("stts",0,0,[v(i.timeToSampleTable.length),i.timeToSampleTable.map(t=>[v(t.sampleCount),v(t.sampleDelta)])]),jd=i=>{if(i.samples.every(e=>e.type==="key"))return null;let t=[...i.samples.entries()].filter(([,e])=>e.type==="key");return Q("stss",0,0,[v(t.length),t.map(([e])=>v(e+1))])},Kd=i=>Q("stsc",0,0,[v(i.compactlyCodedChunkTable.length),i.compactlyCodedChunkTable.map(t=>[v(t.firstChunk),v(t.samplesPerChunk),v(1)])]),Gd=i=>{if(i.type==="audio"&&i.info.requiresPcmTransformation){let{sampleSize:t}=be(i.track.source._codec);return Q("stsz",0,0,[v(t*i.info.numberOfChannels),v(i.samples.reduce((e,r)=>e+le(r.duration,i.timescale),0))])}return Q("stsz",0,0,[v(0),v(i.samples.length),i.samples.map(t=>v(t.size))])},Qd=i=>i.finalizedChunks.length>0&&K(i.finalizedChunks).offset>=2**32?Q("co64",0,0,[v(i.finalizedChunks.length),i.finalizedChunks.map(t=>mr(t.offset))]):Q("stco",0,0,[v(i.finalizedChunks.length),i.finalizedChunks.map(t=>v(t.offset))]),$d=i=>Q("ctts",1,0,[v(i.compositionTimeOffsetTable.length),i.compositionTimeOffsetTable.map(t=>[v(t.sampleCount),jt(t.sampleCompositionTimeOffset)])]),Xd=i=>{let t=1/0,e=-1/0,r=1/0,n=-1/0;p(i.compositionTimeOffsetTable.length>0),p(i.samples.length>0);for(let s=0;s=2**31?null:Q("cslg",0,0,[jt(a),jt(t),jt(e),jt(r),jt(n)])},Yd=i=>U("mvex",void 0,i.map(Zd)),Zd=i=>Q("trex",0,0,[v(i.track.id),v(1),v(0),v(0),v(0)]),Bs=(i,t)=>U("moof",void 0,[Jd(i),...t.map(el)]),Jd=i=>Q("mfhd",0,0,[v(i)]),Kc=i=>{let t=0,e=0,r=0,n=0,a=i.type==="delta";return e|=+a,a?t|=1:t|=2,t<<24|e<<16|r<<8|n},el=i=>U("traf",void 0,[tl(i),rl(i),il(i)]),tl=i=>{p(i.currentChunk);let t=0;t|=8,t|=16,t|=32,t|=131072;let e=i.currentChunk.samples[1]??i.currentChunk.samples[0],r={duration:e.timescaleUnitsToNextSample,size:e.size,flags:Kc(e)};return Q("tfhd",0,t,[v(i.track.id),v(r.duration),v(r.size),v(r.flags)])},rl=i=>(p(i.currentChunk),Q("tfdt",1,0,[mr(le(i.currentChunk.startTimestamp,i.timescale))])),il=i=>{p(i.currentChunk);let t=i.currentChunk.samples.map(b=>b.timescaleUnitsToNextSample),e=i.currentChunk.samples.map(b=>b.size),r=i.currentChunk.samples.map(Kc),n=i.currentChunk.samples.map(b=>le(b.timestamp-b.decodeTimestamp,i.timescale)),a=new Set(t),s=new Set(e),o=new Set(r),c=new Set(n),u=o.size===2&&r[0]!==r[1],d=a.size>1,l=s.size>1,m=!u&&o.size>1,f=c.size>1||[...c].some(b=>b!==0),g=0;return g|=1,g|=4*+u,g|=256*+d,g|=512*+l,g|=1024*+m,g|=2048*+f,Q("trun",1,g,[v(i.currentChunk.samples.length),v(i.currentChunk.offset-i.currentChunk.moofOffset||0),u?v(r[0]):[],i.currentChunk.samples.map((b,h)=>[d?v(t[h]):[],l?v(e[h]):[],m?v(r[h]):[],f?jt(n[h]):[]])])},Gc=i=>U("mfra",void 0,[...i.map(nl),al()]),nl=(i,t)=>Q("tfra",1,0,[v(i.track.id),v(63),v(i.finalizedChunks.length),i.finalizedChunks.map(r=>[mr(le(r.samples[0].timestamp,i.timescale)),mr(r.moofOffset),v(t+1),v(1),v(1)])]),al=()=>Q("mfro",0,0,[v(0)]),Qc=()=>U("vtte"),$c=(i,t,e,r,n)=>U("vttc",void 0,[n!==null?U("vsid",[jt(n)]):null,e!==null?U("iden",[...X.encode(e)]):null,t!==null?U("ctim",[...X.encode(sa(t))]):null,r!==null?U("sttg",[...X.encode(r)]):null,U("payl",[...X.encode(i)])]),Xc=i=>U("vtta",[...X.encode(i)]),sl=i=>{let t=[],e=i.format._options.metadataFormat??"auto",r=i.output._metadataTags;if(e==="mdir"||e==="auto"&&!i.isQuickTime){let n=cl(r);n&&t.push(n)}else if(e==="mdta"){let n=ul(r);n&&t.push(n)}else(e==="udta"||e==="auto"&&i.isQuickTime)&&ol(t,i.output._metadataTags);return t.length===0?null:U("udta",void 0,t)},ol=(i,t)=>{for(let{key:e,value:r}of ze(t))switch(e){case"title":i.push(nt("\xA9nam",r));break;case"description":i.push(nt("\xA9des",r));break;case"artist":i.push(nt("\xA9ART",r));break;case"album":i.push(nt("\xA9alb",r));break;case"albumArtist":i.push(nt("albr",r));break;case"genre":i.push(nt("\xA9gen",r));break;case"date":i.push(nt("\xA9day",r.toISOString().slice(0,10)));break;case"comment":i.push(nt("\xA9cmt",r));break;case"lyrics":i.push(nt("\xA9lyr",r));break;case"raw":break;case"discNumber":case"discsTotal":case"trackNumber":case"tracksTotal":case"images":break;default:J(e)}if(t.raw)for(let e in t.raw){let r=t.raw[e];r==null||e.length!==4||i.some(n=>n.type===e)||(typeof r=="string"?i.push(nt(e,r)):r instanceof Uint8Array&&i.push(U(e,Array.from(r))))}},nt=(i,t)=>{let e=X.encode(t);return U(i,[O(e.length),O(Jc("und")),Array.from(e)])},Uc={"image/jpeg":13,"image/png":14,"image/bmp":27},Yc=(i,t)=>{let e=[];for(let{key:r,value:n}of ze(i))switch(r){case"title":e.push({key:t?"title":"\xA9nam",value:$e(n)});break;case"description":e.push({key:t?"description":"\xA9des",value:$e(n)});break;case"artist":e.push({key:t?"artist":"\xA9ART",value:$e(n)});break;case"album":e.push({key:t?"album":"\xA9alb",value:$e(n)});break;case"albumArtist":e.push({key:t?"album_artist":"aART",value:$e(n)});break;case"comment":e.push({key:t?"comment":"\xA9cmt",value:$e(n)});break;case"genre":e.push({key:t?"genre":"\xA9gen",value:$e(n)});break;case"lyrics":e.push({key:t?"lyrics":"\xA9lyr",value:$e(n)});break;case"date":e.push({key:t?"date":"\xA9day",value:$e(n.toISOString().slice(0,10))});break;case"images":for(let a of n)a.kind==="coverFront"&&e.push({key:"covr",value:U("data",[v(Uc[a.mimeType]??0),v(0),Array.from(a.data)])});break;case"trackNumber":if(t){let a=i.tracksTotal!==void 0?`${n}/${i.tracksTotal}`:n.toString();e.push({key:"track",value:$e(a)})}else e.push({key:"trkn",value:U("data",[v(0),v(0),O(0),O(n),O(i.tracksTotal??0),O(0)])});break;case"discNumber":t||e.push({key:"disc",value:U("data",[v(0),v(0),O(0),O(n),O(i.discsTotal??0),O(0)])});break;case"tracksTotal":case"discsTotal":break;case"raw":break;default:J(r)}if(i.raw)for(let r in i.raw){let n=i.raw[r];n==null||!t&&r.length!==4||e.some(a=>a.key===r)||(typeof n=="string"?e.push({key:r,value:$e(n)}):n instanceof Uint8Array?e.push({key:r,value:U("data",[v(0),v(0),Array.from(n)])}):n instanceof Oe&&e.push({key:r,value:U("data",[v(Uc[n.mimeType]??0),v(0),Array.from(n.data)])}))}return e},cl=i=>{let t=Yc(i,!1);return t.length===0?null:Q("meta",0,0,void 0,[Rs(!1,"mdir","","appl"),U("ilst",void 0,t.map(e=>U(e.key,void 0,[e.value])))])},ul=i=>{let t=Yc(i,!0);return t.length===0?null:U("meta",void 0,[Rs(!1,"mdta",""),Q("keys",0,0,[v(t.length)],t.map(e=>U("mdta",[...X.encode(e.key)]))),U("ilst",void 0,t.map((e,r)=>{let n=String.fromCharCode(...v(r+1));return U(n,void 0,[e.value])}))])},$e=i=>U("data",[v(1),v(0),...X.encode(i)]),dl=(i,t)=>{switch(i){case"avc":return t.startsWith("avc3")?"avc3":"avc1";case"hevc":return"hvc1";case"vp8":return"vp08";case"vp9":return"vp09";case"av1":return"av01"}},ll={avc:Md,hevc:Rd,vp8:Oc,vp9:Oc,av1:Bd},Zc=(i,t)=>{switch(i){case"aac":return"mp4a";case"mp3":return"mp4a";case"opus":return"Opus";case"vorbis":return"mp4a";case"flac":return"fLaC";case"ulaw":return"ulaw";case"alaw":return"alaw";case"pcm-u8":return"raw ";case"pcm-s8":return"sowt";case"ac3":return"ac-3";case"eac3":return"ec-3"}if(t)switch(i){case"pcm-s16":return"sowt";case"pcm-s16be":return"twos";case"pcm-s24":return"in24";case"pcm-s24be":return"in24";case"pcm-s32":return"in32";case"pcm-s32be":return"in32";case"pcm-f32":return"fl32";case"pcm-f32be":return"fl32";case"pcm-f64":return"fl64";case"pcm-f64be":return"fl64"}else switch(i){case"pcm-s16":return"ipcm";case"pcm-s16be":return"ipcm";case"pcm-s24":return"ipcm";case"pcm-s24be":return"ipcm";case"pcm-s32":return"ipcm";case"pcm-s32be":return"ipcm";case"pcm-f32":return"fpcm";case"pcm-f32be":return"fpcm";case"pcm-f64":return"fpcm";case"pcm-f64be":return"fpcm"}},ml=(i,t)=>{switch(i){case"aac":return Fs;case"mp3":return Fs;case"opus":return Vd;case"vorbis":return Fs;case"flac":return zd;case"ac3":return Nd;case"eac3":return Ld}if(t)switch(i){case"pcm-s24":return qt;case"pcm-s24be":return qt;case"pcm-s32":return qt;case"pcm-s32be":return qt;case"pcm-f32":return qt;case"pcm-f32be":return qt;case"pcm-f64":return qt;case"pcm-f64be":return qt}else switch(i){case"pcm-s16":return it;case"pcm-s16be":return it;case"pcm-s24":return it;case"pcm-s24be":return it;case"pcm-s32":return it;case"pcm-s32be":return it;case"pcm-f32":return it;case"pcm-f32be":return it;case"pcm-f64":return it;case"pcm-f64be":return it}return null},fl={webvtt:"wvtt"},pl={webvtt:Hd},Jc=i=>{p(i.length===3);let t=0;for(let e=0;e<3;e++)t<<=5,t+=i.charCodeAt(e)-96;return t};var Mi=class{constructor(){this.ensureMonotonicity=!1;this.trackedWrites=null;this.trackedStart=-1;this.trackedEnd=-1}start(){}maybeTrackWrites(t){if(!this.trackedWrites)return;let e=this.getPos();if(eOs)throw new Error(`ArrayBuffer exceeded maximum size of ${Os} bytes. Please consider using another target.`);if(this.supportsResize)this.buffer.resize(r);else{let n=new ArrayBuffer(r),a=new Uint8Array(n);a.set(this.bytes,0),this.buffer=n,this.bytes=a}}}write(e){this.maybeTrackWrites(e),this.ensureSize(this.pos+e.byteLength),this.bytes.set(e,this.pos),this.target.onwrite?.(this.pos,this.pos+e.byteLength),this.pos+=e.byteLength,this.maxPos=Math.max(this.maxPos,this.pos)}seek(e){this.pos=e}getPos(){return this.pos}async flush(){}async finalize(){this.ensureSize(this.pos),this.target.buffer=this.buffer.slice(0,Math.max(this.maxPos,this.pos))}async close(){}getSlice(e,r){return this.bytes.slice(e,r)}},hl=2**24,gl=2,ca=class extends Mi{constructor(e){super();this.pos=0;this.sections=[];this.lastWriteEnd=0;this.lastFlushEnd=0;this.writer=null;this.chunks=[];this.target=e,this.chunked=e._options.chunked??!1,this.chunkSize=e._options.chunkSize??hl}start(){this.writer=this.target._writable.getWriter()}write(e){if(this.pos>this.lastWriteEnd){let r=this.pos-this.lastWriteEnd;this.pos=this.lastWriteEnd,this.write(new Uint8Array(r))}this.maybeTrackWrites(e),this.sections.push({data:e.slice(),start:this.pos}),this.target.onwrite?.(this.pos,this.pos+e.byteLength),this.pos+=e.byteLength,this.lastWriteEnd=Math.max(this.lastWriteEnd,this.pos)}seek(e){this.pos=e}getPos(){return this.pos}async flush(){if(this.pos>this.lastWriteEnd){let n=this.pos-this.lastWriteEnd;this.pos=this.lastWriteEnd,this.write(new Uint8Array(n))}if(p(this.writer),this.sections.length===0)return;let e=[],r=[...this.sections].sort((n,a)=>n.start-a.start);e.push({start:r[0].start,size:r[0].data.byteLength});for(let n=1;nu.start<=r&&rgl){for(let u=0;u=e.written[s+1].start;)e.written[s].end=Math.max(e.written[s].end,e.written[s+1].end),e.written.splice(s+1,1)}createChunk(e){let n={start:Math.floor(e/this.chunkSize)*this.chunkSize,data:new Uint8Array(this.chunkSize),written:[],shouldFlush:!1};return this.chunks.push(n),this.chunks.sort((a,s)=>a.start-s.start),this.chunks.indexOf(n)}tryToFlushChunks(e=!1){p(this.writer);for(let r=0;r{this._fileHandle=await bl.fs.open(e,"w")},write:async a=>{p(this._fileHandle),await this._fileHandle.write(a.data,0,a.data.byteLength,a.position)},close:async()=>{this._fileHandle&&(await this._fileHandle.close(),this._fileHandle=null)}});this._streamTarget=new da(n,{chunked:!0,...r}),this._streamTarget._output=this._output}_createWriter(){return this._streamTarget._createWriter()}},Bi=class extends Pt{_createWriter(){return new ua(this)}};var oa=1e3,kl=2082844800,eu=i=>{let t={},e=i.track;return e.metadata.name!==void 0&&(t.name=e.metadata.name),t},le=(i,t,e=!0)=>{let r=i*t;return e?Math.round(r):r},la=class extends ge{constructor(e,r){super(e);this.auxTarget=new Ri;this.auxWriter=this.auxTarget._createWriter();this.auxBoxWriter=new _i(this.auxWriter);this.mdat=null;this.ftypSize=null;this.trackDatas=[];this.allTracksKnown=Y();this.creationTime=Math.floor(Date.now()/1e3)+kl;this.finalizedChunks=[];this.nextFragmentNumber=1;this.maxWrittenTimestamp=-1/0;this.format=r,this.writer=e._writer,this.boxWriter=new _i(this.writer),this.isQuickTime=r instanceof Hr;let n=this.writer instanceof Wr?"in-memory":!1;this.fastStart=r._options.fastStart??n,this.isFragmented=this.fastStart==="fragmented",(this.fastStart==="in-memory"||this.isFragmented)&&(this.writer.ensureMonotonicity=!0),this.minimumFragmentDuration=r._options.minimumFragmentDuration??1}async start(){let e=await this.mutex.acquire(),r=this.output._tracks.some(n=>n.type==="video"&&n.source._codec==="avc");if(this.format._options.onFtyp&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(qc({isQuickTime:this.isQuickTime,holdsAvc:r,fragmented:this.isFragmented})),this.format._options.onFtyp){let{data:n,start:a}=this.writer.stopTrackingWrites();this.format._options.onFtyp(n,a)}if(this.ftypSize=this.writer.getPos(),this.fastStart!=="in-memory")if(this.fastStart==="reserve"){for(let n of this.output._tracks)if(n.metadata.maximumPacketCount===void 0)throw new Error("All tracks must specify maximumPacketCount in their metadata when using fastStart: 'reserve'.")}else this.isFragmented||(this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Fi(!0),this.boxWriter.writeBox(this.mdat));await this.writer.flush(),e()}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(r=>r.type==="video"||r.type==="audio"?r.info.decoderConfig.codec:{webvtt:"wvtt"}[r.track.source._codec]);return hn({isQuickTime:this.isQuickTime,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,n){let a=this.trackDatas.find(d=>d.track===e);if(a)return a;wr(n),p(n),p(n.decoderConfig);let s={...n.decoderConfig};p(s.codedWidth!==void 0),p(s.codedHeight!==void 0);let o=!1;if(e.source._codec==="avc"&&!s.description){let d=Sr(r.data);if(!d)throw new Error("Couldn't extract an AVCDecoderConfigurationRecord from the AVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.264) when not providing a description, or provide a description (must be an AVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in AVCC format.");s.description=Vo(d),o=!0}else if(e.source._codec==="hevc"&&!s.description){let d=xr(r.data);if(!d)throw new Error("Couldn't extract an HEVCDecoderConfigurationRecord from the HEVC packet. Make sure the packets are in Annex B format (as specified in ITU-T-REC-H.265) when not providing a description, or provide a description (must be an HEVCDecoderConfigurationRecord as specified in ISO 14496-15) and ensure the packets are in HEVC format.");s.description=zo(d),o=!0}let c=bo(1/(e.metadata.frameRate??57600),1e6).denominator,u={muxer:this,track:e,type:"video",info:{width:s.codedWidth,height:s.codedHeight,decoderConfig:s,requiresAnnexBTransformation:o},timescale:c,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(u),this.trackDatas.sort((d,l)=>d.track.id-l.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,r,n){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;Ae(n),p(n),p(n.decoderConfig);let s={...n.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=ve(he.tempFromBytes(r.data));if(!u)throw new Error("Couldn't parse ADTS header from the AAC packet. Make sure the packets are in ADTS format (as specified in ISO 13818-7) when not providing a description, or provide a description (must be an AudioSpecificConfig as specified in ISO 14496-3) and ensure the packets are raw AAC data.");let d=Ue[u.samplingFrequencyIndex],l=Je[u.channelConfiguration];if(d===void 0||l===void 0)throw new Error("Invalid ADTS frame header.");s.description=yr({objectType:u.objectType,sampleRate:d,numberOfChannels:l}),o=!0}let c={muxer:this,track:e,type:"audio",info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:s,requiresPcmTransformation:!this.isFragmented&&Z.includes(e.source._codec),requiresAdtsStripping:o,firstPacket:r},timescale:s.sampleRate,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[]};return this.trackDatas.push(c),this.trackDatas.sort((u,d)=>u.track.id-d.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),c}getSubtitleTrackData(e,r){let n=this.trackDatas.find(s=>s.track===e);if(n)return n;Qi(r),p(r),p(r.config);let a={muxer:this,track:e,type:"subtitle",info:{config:r.config},timescale:1e3,samples:[],sampleQueue:[],timestampProcessingQueue:[],timeToSampleTable:[],compositionTimeOffsetTable:[],lastTimescaleUnits:null,lastSample:null,finalizedChunks:[],currentChunk:null,compactlyCodedChunkTable:[],lastCueEndTimestamp:0,cueQueue:[],nextSourceId:0,cueToSourceId:new WeakMap};return this.trackDatas.push(a),this.trackDatas.sort((s,o)=>s.track.id-o.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}async addEncodedVideoPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,n),o=r.data;if(s.info.requiresAnnexBTransformation){let d=[...Ut(o)].map(l=>o.subarray(l.offset,l.offset+l.length));if(d.length===0)throw new Error("Failed to transform packet data. Make sure all packets are provided in Annex B format, as specified in ITU-T-REC-H.264 and ITU-T-REC-H.265.");o=Ha(d,4)}let c=this.validateAndNormalizeTimestamp(s.track,r.timestamp,r.type==="key"),u=this.createSampleForTrack(s,o,c,r.duration,r.type);await this.registerSample(s,u)}finally{a()}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,n),o=r.data;if(s.info.requiresAdtsStripping){let d=ve(he.tempFromBytes(o));if(!d)throw new Error("Expected ADTS frame, didn't get one.");let l=d.crcCheck===null?xt:Re;o=o.subarray(l)}let c=this.validateAndNormalizeTimestamp(s.track,r.timestamp,r.type==="key"),u=this.createSampleForTrack(s,o,c,r.duration,r.type);s.info.requiresPcmTransformation&&await this.maybePadWithSilence(s,c),await this.registerSample(s,u)}finally{a()}}async maybePadWithSilence(e,r){let n=K(e.samples),a=n?n.timestamp+n.duration:0,s=r-a,o=le(s,e.timescale);if(o>0){let{sampleSize:c,silentValue:u}=be(e.info.decoderConfig.codec),d=o*e.info.numberOfChannels,l=new Uint8Array(c*d).fill(u),m=this.createSampleForTrack(e,new Uint8Array(l.buffer),a,s,"key");await this.registerSample(e,m)}}async addSubtitleCue(e,r,n){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,n);this.validateAndNormalizeTimestamp(s.track,r.timestamp,!0),e.source._codec==="webvtt"&&(s.cueQueue.push(r),await this.processWebVTTCues(s,r.timestamp))}finally{a()}}async processWebVTTCues(e,r){for(;e.cueQueue.length>0;){let n=new Set([]);for(let d of e.cueQueue)p(d.timestamp<=r),p(e.lastCueEndTimestamp<=d.timestamp+d.duration),n.add(Math.max(d.timestamp,e.lastCueEndTimestamp)),n.add(d.timestamp+d.duration);let a=[...n].sort((d,l)=>d-l),s=a[0],o=a[1]??s;if(r=o)break;Nr.lastIndex=0;let m=Nr.test(l.text),f=l.timestamp+l.duration,g=e.cueToSourceId.get(l);if(g===void 0&&oa.timestamp).sort((a,s)=>a-s);for(let a=0;a=0),e.lastTimescaleUnits+=d,e.lastSample.timescaleUnitsToNextSample=d,!this.isFragmented){let l=K(e.timeToSampleTable);if(p(l),l.sampleCount===1){l.sampleDelta=d;let f=e.timeToSampleTable[e.timeToSampleTable.length-2];f&&f.sampleDelta===d&&(f.sampleCount++,e.timeToSampleTable.pop(),l=f)}else l.sampleDelta!==d&&(l.sampleCount--,e.timeToSampleTable.push(l={sampleCount:1,sampleDelta:d}));l.sampleDelta===c?l.sampleCount++:e.timeToSampleTable.push({sampleCount:1,sampleDelta:c});let m=K(e.compositionTimeOffsetTable);p(m),m.sampleCompositionTimeOffset===o?m.sampleCount++:e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:o})}}else e.lastTimescaleUnits=le(s.decodeTimestamp,e.timescale,!1),this.isFragmented||(e.timeToSampleTable.push({sampleCount:1,sampleDelta:c}),e.compositionTimeOffsetTable.push({sampleCount:1,sampleCompositionTimeOffset:o}));e.lastSample=s}if(e.timestampProcessingQueue.length=0,p(e.lastSample),p(e.lastTimescaleUnits!==null),r!==void 0&&e.lastSample.timescaleUnitsToNextSample===0){p(r.type==="key");let a=le(r.timestamp,e.timescale,!1),s=Math.round(a-e.lastTimescaleUnits);e.lastSample.timescaleUnitsToNextSample=s}}async registerSample(e,r){r.type==="key"&&this.processTimestamps(e,r),e.timestampProcessingQueue.push(r),this.isFragmented?(e.sampleQueue.push(r),await this.interleaveSamples()):this.fastStart==="reserve"?await this.registerSampleFastStartReserve(e,r):await this.addSampleToTrack(e,r)}async addSampleToTrack(e,r){if(!this.isFragmented&&(e.samples.push(r),this.fastStart==="reserve")){let a=e.track.metadata.maximumPacketCount;if(p(a!==void 0),e.samples.length>a)throw new Error(`Track #${e.track.id} has already reached the maximum packet count (${a}). Either add less packets or increase the maximum packet count.`)}let n=!1;if(!e.currentChunk)n=!0;else{e.currentChunk.startTimestamp=Math.min(e.currentChunk.startTimestamp,r.timestamp);let a=r.timestamp-e.currentChunk.startTimestamp;if(this.isFragmented){let s=this.trackDatas.every(o=>{if(e===o)return r.type==="key";let c=o.sampleQueue[0];return c?c.type==="key":o.track.source._closed});a>=this.minimumFragmentDuration&&s&&r.timestamp>this.maxWrittenTimestamp&&(n=!0,await this.finalizeFragment())}else n=a>=.5}n&&(e.currentChunk&&await this.finalizeCurrentChunk(e),e.currentChunk={startTimestamp:r.timestamp,samples:[],offset:null,moofOffset:null}),p(e.currentChunk),e.currentChunk.samples.push(r),this.isFragmented&&(this.maxWrittenTimestamp=Math.max(this.maxWrittenTimestamp,r.timestamp))}async finalizeCurrentChunk(e){if(p(!this.isFragmented),!e.currentChunk)return;e.finalizedChunks.push(e.currentChunk),this.finalizedChunks.push(e.currentChunk);let r=e.currentChunk.samples.length;if(e.type==="audio"&&e.info.requiresPcmTransformation&&(r=e.currentChunk.samples.reduce((n,a)=>n+le(a.duration,e.timescale),0)),(e.compactlyCodedChunkTable.length===0||K(e.compactlyCodedChunkTable).samplesPerChunk!==r)&&e.compactlyCodedChunkTable.push({firstChunk:e.finalizedChunks.length,samplesPerChunk:r}),this.fastStart==="in-memory"){e.currentChunk.offset=0;return}e.currentChunk.offset=this.writer.getPos();for(let n of e.currentChunk.samples)p(n.data),this.writer.write(n.data),n.data=null;await this.writer.flush()}async interleaveSamples(e=!1){if(p(this.isFragmented),!(!e&&!this.allTracksAreKnown()))e:for(;;){let r=null,n=1/0;for(let s of this.trackDatas){if(!e&&s.sampleQueue.length===0&&!s.track.source._closed)break e;s.sampleQueue.length>0&&s.sampleQueue[0].timestampg.currentChunk),a=Bs(r,n),s=this.writer.getPos(),o=s+this.boxWriter.measureBox(a),c=o+Le,u=1/0;for(let g of n){g.currentChunk.offset=c,g.currentChunk.moofOffset=s;for(let b of g.currentChunk.samples)c+=b.size;u=Math.min(u,g.currentChunk.startTimestamp)}let d=c-o,l=d>=2**32;if(l)for(let g of n)g.currentChunk.offset+=kt-Le;this.format._options.onMoof&&this.writer.startTrackingWrites();let m=Bs(r,n);if(this.boxWriter.writeBox(m),this.format._options.onMoof){let{data:g,start:b}=this.writer.stopTrackingWrites();this.format._options.onMoof(g,b,u)}p(this.writer.getPos()===o),this.format._options.onMdat&&this.writer.startTrackingWrites();let f=Fi(l);f.size=d,this.boxWriter.writeBox(f),this.writer.seek(o+(l?kt:Le));for(let g of n)for(let b of g.currentChunk.samples)this.writer.write(b.data),b.data=null;if(this.format._options.onMdat){let{data:g,start:b}=this.writer.stopTrackingWrites();this.format._options.onMdat(g,b)}for(let g of n)g.finalizedChunks.push(g.currentChunk),this.finalizedChunks.push(g.currentChunk),g.currentChunk=null;e&&await this.writer.flush()}async registerSampleFastStartReserve(e,r){if(this.allTracksAreKnown()){if(!this.mdat){let n=Lr(this),s=this.boxWriter.measureBox(n)+this.computeSampleTableSizeUpperBound()+4096;p(this.ftypSize!==null),this.writer.seek(this.ftypSize+s),this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat=Fi(!0),this.boxWriter.writeBox(this.mdat);for(let o of this.trackDatas){for(let c of o.sampleQueue)await this.addSampleToTrack(o,c);o.sampleQueue.length=0}}await this.addSampleToTrack(e,r)}else e.sampleQueue.push(r)}computeSampleTableSizeUpperBound(){p(this.fastStart==="reserve");let e=0;for(let r of this.trackDatas){let n=r.track.metadata.maximumPacketCount;p(n!==void 0),e+=8*Math.ceil(2/3*n),e+=4*n,e+=8*Math.ceil(2/3*n),e+=12*Math.ceil(2/3*n),e+=4*n,e+=8*n}return e}async onTrackClose(e){let r=await this.mutex.acquire();if(e.type==="subtitle"&&e.source._codec==="webvtt"){let n=this.trackDatas.find(a=>a.track===e);n&&await this.processWebVTTCues(n,1/0)}this.allTracksAreKnown()&&this.allTracksKnown.resolve(),this.isFragmented&&await this.interleaveSamples(),r()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve();for(let r of this.trackDatas)r.type==="subtitle"&&r.track.source._codec==="webvtt"&&await this.processWebVTTCues(r,1/0);if(this.isFragmented){await this.interleaveSamples(!0);for(let r of this.trackDatas)this.processTimestamps(r);await this.finalizeFragment(!1)}else for(let r of this.trackDatas)this.processTimestamps(r),await this.finalizeCurrentChunk(r);if(this.fastStart==="in-memory"){this.mdat=Fi(!1);let r;for(let a=0;a<2;a++){let s=Lr(this),o=this.boxWriter.measureBox(s);r=this.boxWriter.measureBox(this.mdat);let c=this.writer.getPos()+o+r;for(let u of this.finalizedChunks){u.offset=c;for(let{data:d}of u.samples)p(d),c+=d.byteLength,r+=d.byteLength}if(c<2**32)break;r>=2**32&&(this.mdat.largeSize=!0)}this.format._options.onMoov&&this.writer.startTrackingWrites();let n=Lr(this);if(this.boxWriter.writeBox(n),this.format._options.onMoov){let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onMoov(a,s)}this.format._options.onMdat&&this.writer.startTrackingWrites(),this.mdat.size=r,this.boxWriter.writeBox(this.mdat);for(let a of this.finalizedChunks)for(let s of a.samples)p(s.data),this.writer.write(s.data),s.data=null;if(this.format._options.onMdat){let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onMdat(a,s)}}else if(this.isFragmented){let r=this.writer.getPos(),n=Gc(this.trackDatas);this.boxWriter.writeBox(n);let a=this.writer.getPos()-r;this.writer.seek(this.writer.getPos()-4),this.boxWriter.writeU32(a)}else{p(this.mdat);let r=this.boxWriter.offsets.get(this.mdat);p(r!==void 0);let n=this.writer.getPos()-r;if(this.mdat.size=n,this.mdat.largeSize=n>=2**32,this.boxWriter.patchBox(this.mdat),this.format._options.onMdat){let{data:s,start:o}=this.writer.stopTrackingWrites();this.format._options.onMdat(s,o)}let a=Lr(this);if(this.fastStart==="reserve"){p(this.ftypSize!==null),this.writer.seek(this.ftypSize),this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(a);let s=this.boxWriter.offsets.get(this.mdat)-this.writer.getPos();this.boxWriter.writeBox(jc(s))}else this.format._options.onMoov&&this.writer.startTrackingWrites(),this.boxWriter.writeBox(a);if(this.format._options.onMoov){let{data:s,start:o}=this.writer.stopTrackingWrites();this.format._options.onMoov(s,o)}}e()}};var yl=-(2**15),wl=2**15-1,ru="Mediabunny",iu=6,nu=5,Tl={video:1,audio:2,subtitle:17},ma=class extends ge{constructor(e,r){super(e);this.trackDatas=[];this.allTracksKnown=Y();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.duration=0;this.writer=e._writer,this.format=r,this.ebmlWriter=new Tn(this.writer),this.format._options.appendOnly&&(this.writer.ensureMonotonicity=!0)}async start(){let e=await this.mutex.acquire();this.writeEBMLHeader(),this.createSegmentInfo(),this.createCues(),await this.writer.flush(),e()}writeEBMLHeader(){this.format._options.onEbmlHeader&&this.writer.startTrackingWrites();let e={id:440786851,data:[{id:17030,data:1},{id:17143,data:1},{id:17138,data:4},{id:17139,data:8},{id:17026,data:this.format instanceof qr?"webm":"matroska"},{id:17031,data:2},{id:17029,data:2}]};if(this.ebmlWriter.writeEBML(e),this.format._options.onEbmlHeader){let{data:r,start:n}=this.writer.stopTrackingWrites();this.format._options.onEbmlHeader(r,n)}}maybeCreateSeekHead(e){if(this.format._options.appendOnly)return;let r=new Uint8Array([28,83,187,107]),n=new Uint8Array([21,73,169,102]),a=new Uint8Array([22,84,174,107]),s=new Uint8Array([25,65,164,105]),o=new Uint8Array([18,84,195,103]),c={id:290298740,data:[{id:19899,data:[{id:21419,data:r},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.cues)-this.segmentDataOffset:0}]},{id:19899,data:[{id:21419,data:n},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.segmentInfo)-this.segmentDataOffset:0}]},{id:19899,data:[{id:21419,data:a},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.tracksElement)-this.segmentDataOffset:0}]},this.attachmentsElement?{id:19899,data:[{id:21419,data:s},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.attachmentsElement)-this.segmentDataOffset:0}]}:null,this.tagsElement?{id:19899,data:[{id:21419,data:o},{id:21420,size:5,data:e?this.ebmlWriter.offsets.get(this.tagsElement)-this.segmentDataOffset:0}]}:null]};this.seekHead=c}createSegmentInfo(){let e={id:17545,data:new _r(0)};this.segmentDuration=e;let r={id:357149030,data:[{id:2807729,data:1e6},{id:19840,data:ru},{id:22337,data:ru},this.format._options.appendOnly?null:e]};this.segmentInfo=r}createTracks(){let e={id:374648427,data:[]};this.tracksElement=e;for(let r of this.trackDatas){let n=Ce[r.track.source._codec];p(n);let a=0;if(r.type==="audio"&&r.track.source._codec==="opus"){a=1e6*80;let s=r.info.decoderConfig.description;if(s){let o=H(s),c=Vt(o);a=Math.round(1e9*(c.preSkip/Ne))}}e.data.push({id:174,data:[{id:215,data:r.track.id},{id:29637,data:r.track.id},{id:131,data:Tl[r.type]},r.track.metadata.disposition?.default===!1?{id:136,data:0}:null,r.track.metadata.disposition?.forced?{id:21930,data:1}:null,r.track.metadata.disposition?.hearingImpaired?{id:21931,data:1}:null,r.track.metadata.disposition?.visuallyImpaired?{id:21932,data:1}:null,r.track.metadata.disposition?.original?{id:21934,data:1}:null,r.track.metadata.disposition?.commentary?{id:21935,data:1}:null,{id:156,data:0},{id:2274716,data:r.track.metadata.languageCode??ee},{id:134,data:n},{id:22186,data:0},{id:22203,data:a},r.track.metadata.name!==void 0?{id:21358,data:new He(r.track.metadata.name)}:null,r.type==="video"?this.videoSpecificTrackInfo(r):null,r.type==="audio"?this.audioSpecificTrackInfo(r):null,r.type==="subtitle"?this.subtitleSpecificTrackInfo(r):null]})}}videoSpecificTrackInfo(e){let{frameRate:r,rotation:n}=e.track.metadata,a=[e.info.decoderConfig.description?{id:25506,data:H(e.info.decoderConfig.description)}:null,r?{id:2352003,data:1e9/r}:null],s=n?_t(-n):0,o=e.info.decoderConfig.colorSpace,c={id:224,data:[{id:176,data:e.info.width},{id:186,data:e.info.height},e.info.alphaMode?{id:21440,data:1}:null,Hi(o)?{id:21936,data:[{id:21937,data:ct[o.matrix]},{id:21946,data:ot[o.transfer]},{id:21947,data:st[o.primaries]},{id:21945,data:o.fullRange?2:1}]}:null,s?{id:30320,data:[{id:30321,data:0},{id:30325,data:new Er((s+180)%360-180)}]}:null]};return a.push(c),a}audioSpecificTrackInfo(e){let r=Z.includes(e.track.source._codec)?be(e.track.source._codec):null;return[e.info.decoderConfig.description?{id:25506,data:H(e.info.decoderConfig.description)}:null,{id:225,data:[{id:181,data:new Er(e.info.sampleRate)},{id:159,data:e.info.numberOfChannels},r?{id:25188,data:8*r.sampleSize}:null]}]}subtitleSpecificTrackInfo(e){return[{id:25506,data:X.encode(e.info.config.description)}]}maybeCreateTags(){let e=[],r=(s,o)=>{e.push({id:26568,data:[{id:17827,data:new He(s)},typeof o=="string"?{id:17543,data:new He(o)}:{id:17541,data:o}]})},n=this.output._metadataTags,a=new Set;for(let{key:s,value:o}of ze(n))switch(s){case"title":r("TITLE",o),a.add("TITLE");break;case"description":r("DESCRIPTION",o),a.add("DESCRIPTION");break;case"artist":r("ARTIST",o),a.add("ARTIST");break;case"album":r("ALBUM",o),a.add("ALBUM");break;case"albumArtist":r("ALBUM_ARTIST",o),a.add("ALBUM_ARTIST");break;case"genre":r("GENRE",o),a.add("GENRE");break;case"comment":r("COMMENT",o),a.add("COMMENT");break;case"lyrics":r("LYRICS",o),a.add("LYRICS");break;case"date":r("DATE",o.toISOString().slice(0,10)),a.add("DATE");break;case"trackNumber":{let c=n.tracksTotal!==void 0?`${o}/${n.tracksTotal}`:o.toString();r("PART_NUMBER",c),a.add("PART_NUMBER")}break;case"discNumber":{let c=n.discsTotal!==void 0?`${o}/${n.discsTotal}`:o.toString();r("DISC",c),a.add("DISC")}break;case"tracksTotal":case"discsTotal":break;case"images":case"raw":break;default:J(s)}if(n.raw)for(let s in n.raw){let o=n.raw[s];o==null||a.has(s)||(typeof o=="string"||o instanceof Uint8Array)&&r(s,o)}e.length!==0&&(this.tagsElement={id:307544935,data:[{id:29555,data:[{id:25536,data:[{id:26826,data:50},{id:25546,data:"MOVIE"}]},...e]}]})}maybeCreateAttachments(){let e=this.output._metadataTags,r=[],n=new Set,a=e.images??[];for(let s of a){let o=s.name;o===void 0&&(o=(s.kind==="coverFront"?"cover":s.kind==="coverBack"?"back":"image")+(yo(s.mimeType)??""));let c;for(;;){c=0n;for(let u=0;u<8;u++)c<<=8n,c|=BigInt(Math.floor(Math.random()*256));if(c!==0n&&!n.has(c))break}n.add(c),r.push({id:24999,data:[s.description!==void 0?{id:18046,data:new He(s.description)}:null,{id:18030,data:new He(o)},{id:18016,data:s.mimeType},{id:18012,data:s.data},{id:18094,data:c}]})}for(let[s,o]of Object.entries(e.raw??{}))!(o instanceof Bt)||!/^\d+$/.test(s)||a.find(u=>u.mimeType===o.mimeType&&So(u.data,o.data))||r.push({id:24999,data:[o.description!==void 0?{id:18046,data:new He(o.description)}:null,{id:18030,data:new He(o.name??"")},{id:18016,data:o.mimeType??""},{id:18012,data:o.data},{id:18094,data:BigInt(s)}]});r.length!==0&&(this.attachmentsElement={id:423732329,data:r})}createSegment(){this.createTracks(),this.maybeCreateTags(),this.maybeCreateAttachments(),this.maybeCreateSeekHead(!1);let e={id:408125543,size:this.format._options.appendOnly?-1:iu,data:[this.seekHead,this.segmentInfo,this.tracksElement,this.attachmentsElement,this.tagsElement]};if(this.segment=e,this.format._options.onSegmentHeader&&this.writer.startTrackingWrites(),this.ebmlWriter.writeEBML(e),this.format._options.onSegmentHeader){let{data:r,start:n}=this.writer.stopTrackingWrites();this.format._options.onSegmentHeader(r,n)}}createCues(){this.cues={id:475249515,data:[]}}get segmentDataOffset(){return p(this.segment),this.ebmlWriter.dataOffsets.get(this.segment)}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async getMimeType(){await this.allTracksKnown.promise;let e=this.trackDatas.map(r=>r.type==="video"||r.type==="audio"?r.info.decoderConfig.codec:{webvtt:"wvtt"}[r.track.source._codec]);return Pn({isWebM:this.format instanceof qr,hasVideo:this.trackDatas.some(r=>r.type==="video"),hasAudio:this.trackDatas.some(r=>r.type==="audio"),codecStrings:e})}getVideoTrackData(e,r,n){let a=this.trackDatas.find(o=>o.track===e);if(a)return a;wr(n),p(n),p(n.decoderConfig),p(n.decoderConfig.codedWidth!==void 0),p(n.decoderConfig.codedHeight!==void 0);let s={track:e,type:"video",info:{width:n.decoderConfig.codedWidth,height:n.decoderConfig.codedHeight,decoderConfig:n.decoderConfig,alphaMode:!!r.sideData.alpha},chunkQueue:[],lastWrittenMsTimestamp:null};return e.source._codec==="vp9"?s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(Eo(s.info.decoderConfig.codec))}:e.source._codec==="av1"&&(s.info.decoderConfig={...s.info.decoderConfig,description:new Uint8Array(Gi(s.info.decoderConfig.codec))}),this.trackDatas.push(s),this.trackDatas.sort((o,c)=>o.track.id-c.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),s}getAudioTrackData(e,r,n){let a=this.trackDatas.find(u=>u.track===e);if(a)return a;Ae(n),p(n),p(n.decoderConfig);let s={...n.decoderConfig},o=!1;if(e.source._codec==="aac"&&!s.description){let u=ve(he.tempFromBytes(r.data));if(!u)throw new Error("Couldn't parse ADTS header from the AAC packet. Make sure the packets are in ADTS format (as specified in ISO 13818-7) when not providing a description, or provide a description (must be an AudioSpecificConfig as specified in ISO 14496-3) and ensure the packets are raw AAC data.");let d=Ue[u.samplingFrequencyIndex],l=Je[u.channelConfiguration];if(d===void 0||l===void 0)throw new Error("Invalid ADTS frame header.");s.description=yr({objectType:u.objectType,sampleRate:d,numberOfChannels:l}),o=!0}let c={track:e,type:"audio",info:{numberOfChannels:n.decoderConfig.numberOfChannels,sampleRate:n.decoderConfig.sampleRate,decoderConfig:s,requiresAdtsStripping:o},chunkQueue:[],lastWrittenMsTimestamp:null};return this.trackDatas.push(c),this.trackDatas.sort((u,d)=>u.track.id-d.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),c}getSubtitleTrackData(e,r){let n=this.trackDatas.find(s=>s.track===e);if(n)return n;Qi(r),p(r),p(r.config);let a={track:e,type:"subtitle",info:{config:r.config},chunkQueue:[],lastWrittenMsTimestamp:null};return this.trackDatas.push(a),this.trackDatas.sort((s,o)=>s.track.id-o.track.id),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),a}async addEncodedVideoPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,r,n),o=r.type==="key",c=this.validateAndNormalizeTimestamp(s.track,r.timestamp,o),u=r.duration;e.metadata.frameRate!==void 0&&(c=Zr(c,1/e.metadata.frameRate),u=Zr(u,1/e.metadata.frameRate));let d=s.info.alphaMode?r.sideData.alpha??null:null,l=this.createInternalChunk(r.data,c,u,r.type,d);e.source._codec==="vp9"&&this.fixVP9ColorSpace(s,l),s.chunkQueue.push(l),await this.interleaveChunks()}finally{a()}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,r,n),o=r.data;if(s.info.requiresAdtsStripping){let l=ve(he.tempFromBytes(o));if(!l)throw new Error("Expected ADTS frame, didn't get one.");let m=l.crcCheck===null?xt:Re;o=o.subarray(m)}let c=r.type==="key",u=this.validateAndNormalizeTimestamp(s.track,r.timestamp,c),d=this.createInternalChunk(o,u,r.duration,r.type);s.chunkQueue.push(d),await this.interleaveChunks()}finally{a()}}async addSubtitleCue(e,r,n){let a=await this.mutex.acquire();try{let s=this.getSubtitleTrackData(e,n),o=this.validateAndNormalizeTimestamp(s.track,r.timestamp,!0),c=r.text,u=Math.round(o*1e3);Nr.lastIndex=0,c=c.replace(Nr,f=>{let b=aa(f.slice(1,-1))-u;return`<${sa(b)}>`});let d=X.encode(c),l=`${r.settings??""} ${r.identifier??""} ${r.notes??""}`,m=this.createInternalChunk(d,o,r.duration,"key",l.trim()?X.encode(l):null);s.chunkQueue.push(m),await this.interleaveChunks()}finally{a()}}async interleaveChunks(e=!1){if(!(!e&&!this.allTracksAreKnown())){e:for(;;){let r=null,n=1/0;for(let s of this.trackDatas){if(!e&&s.chunkQueue.length===0&&!s.track.source._closed)break e;s.chunkQueue.length>0&&s.chunkQueue[0].timestamp=2&&n.skipBits(1);let l={rgb:7,bt709:2,bt470bg:1,smpte170m:3}[e.info.decoderConfig.colorSpace.matrix];uo(r.data,n.pos,n.pos+3,l)}createInternalChunk(e,r,n,a,s=null){return{data:e,type:a,timestamp:r,duration:n,additions:s}}writeBlock(e,r){this.segment||this.createSegment();let n=Math.round(1e3*r.timestamp),a=this.trackDatas.every(l=>{if(e===l)return r.type==="key";let m=l.chunkQueue[0];return m?m.type==="key":l.track.source._closed}),s=!1;if(!this.currentCluster)s=!0;else{p(this.currentClusterStartMsTimestamp!==null),p(this.currentClusterMaxMsTimestamp!==null);let l=n-this.currentClusterStartMsTimestamp;s=a&&n>this.currentClusterMaxMsTimestamp&&l>=1e3*(this.format._options.minimumClusterDuration??1)||l>wl}s&&this.createNewCluster(n);let o=n-this.currentClusterStartMsTimestamp;if(o0?{id:155,data:d}:null]};this.ebmlWriter.writeEBML(l)}else{u.setUint8(3,+(r.type==="key")<<7);let l={id:163,data:[c,r.data]};this.ebmlWriter.writeEBML(l)}this.duration=Math.max(this.duration,n+d),e.lastWrittenMsTimestamp=n,this.trackDatasInCurrentCluster.has(e)||this.trackDatasInCurrentCluster.set(e,{firstMsTimestamp:n}),this.currentClusterMaxMsTimestamp=Math.max(this.currentClusterMaxMsTimestamp,n)}createNewCluster(e){this.currentCluster&&this.finalizeCurrentCluster(),this.format._options.onCluster&&this.writer.startTrackingWrites(),this.currentCluster={id:524531317,size:this.format._options.appendOnly?-1:nu,data:[{id:231,data:e}]},this.ebmlWriter.writeEBML(this.currentCluster),this.currentClusterStartMsTimestamp=e,this.currentClusterMaxMsTimestamp=e,this.trackDatasInCurrentCluster.clear()}finalizeCurrentCluster(){if(p(this.currentCluster),!this.format._options.appendOnly){let a=this.writer.getPos()-this.ebmlWriter.dataOffsets.get(this.currentCluster),s=this.writer.getPos();this.writer.seek(this.ebmlWriter.offsets.get(this.currentCluster)+4),this.ebmlWriter.writeVarInt(a,nu),this.writer.seek(s)}if(this.format._options.onCluster){p(this.currentClusterStartMsTimestamp!==null);let{data:a,start:s}=this.writer.stopTrackingWrites();this.format._options.onCluster(a,s,this.currentClusterStartMsTimestamp/1e3)}let e=this.ebmlWriter.offsets.get(this.currentCluster)-this.segmentDataOffset,r=new Map;for(let[a,{firstMsTimestamp:s}]of this.trackDatasInCurrentCluster)r.has(s)||r.set(s,[]),r.get(s).push(a);let n=[...r.entries()].sort((a,s)=>a[0]-s[0]);for(let[a,s]of n)p(this.cues),this.cues.data.push({id:187,data:[{id:179,data:a},...s.map(o=>({id:183,data:[{id:247,data:o.track.id},{id:241,data:e}]}))]})}async onTrackClose(){let e=await this.mutex.acquire();this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleaveChunks(),e()}async finalize(){let e=await this.mutex.acquire();if(this.allTracksKnown.resolve(),this.segment||this.createSegment(),await this.interleaveChunks(!0),this.currentCluster&&this.finalizeCurrentCluster(),p(this.cues),this.ebmlWriter.writeEBML(this.cues),!this.format._options.appendOnly){let r=this.writer.getPos(),n=this.writer.getPos()-this.segmentDataOffset;this.writer.seek(this.ebmlWriter.offsets.get(this.segment)+4),this.ebmlWriter.writeVarInt(n,iu),this.segmentDuration.data=new _r(this.duration),this.writer.seek(this.ebmlWriter.offsets.get(this.segmentDuration)),this.ebmlWriter.writeEBML(this.segmentDuration),p(this.seekHead),this.writer.seek(this.ebmlWriter.offsets.get(this.seekHead)),this.maybeCreateSeekHead(!0),this.ebmlWriter.writeEBML(this.seekHead),this.writer.seek(r)}e()}};var fa=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer)}writeU32(t){this.helperView.setUint32(0,t,!1),this.writer.write(this.helper.subarray(0,4))}writeXingFrame(t){let e=this.writer.getPos(),r=255,n=224|t.mpegVersionId<<3|t.layer<<1,a;t.mpegVersionId&2?a=t.mpegVersionId&1?0:1:a=1;let s=0,o=155,c=-1,u=a*16*4+t.layer*16;for(let h=0;h<16;h++){let y=$i[u+h];if(Xi(a,t.layer,1e3*y,t.sampleRate,s)>=o){c=h;break}}if(c===-1)throw new Error("No suitable bitrate found.");let d=c<<4|t.frequencyIndex<<2|s<<1,l=t.channel<<6|t.modeExtension<<4|t.copyright<<3|t.original<<2|t.emphasis;this.helper[0]=r,this.helper[1]=n,this.helper[2]=d,this.helper[3]=l,this.writer.write(this.helper.subarray(0,4));let m=Ot(t.mpegVersionId,t.channel);this.writer.seek(e+m),this.writeU32(Dt);let f=0;t.frameCount!==null&&(f|=1),t.fileSize!==null&&(f|=2),t.toc!==null&&(f|=4),this.writeU32(f),this.writeU32(t.frameCount??0),this.writeU32(t.fileSize??0),this.writer.write(t.toc??new Uint8Array(100));let g=$i[u+c],b=Xi(a,t.layer,1e3*g,t.sampleRate,s);this.writer.seek(e+b)}};var pa=class extends ge{constructor(e,r){super(e);this.xingFrameData=null;this.frameCount=0;this.framePositions=[];this.xingFramePos=null;this.format=r,this.writer=e._writer,this.mp3Writer=new fa(e._writer)}async start(){mt(this.output._metadataTags)||new Ht(this.writer).writeId3V2Tag(this.output._metadataTags)}async getMimeType(){return"audio/mpeg"}async addEncodedVideoPacket(){throw new Error("MP3 does not support video.")}async addEncodedAudioPacket(e,r){let n=await this.mutex.acquire();try{let a=this.format._options.xingHeader!==!1;if(!this.xingFrameData&&a){let s=D(r.data);if(s.byteLength<4)throw new Error("Invalid MP3 header in sample.");let o=s.getUint32(0,!1),c=Jt(o,null).header;if(!c)throw new Error("Invalid MP3 header in sample.");let u=Ot(c.mpegVersionId,c.channel);if(s.byteLength>=u+4){let d=s.getUint32(u,!1);if(d===Dt||d===Tr)return}this.xingFrameData={mpegVersionId:c.mpegVersionId,layer:c.layer,frequencyIndex:c.frequencyIndex,sampleRate:c.sampleRate,channel:c.channel,modeExtension:c.modeExtension,copyright:c.copyright,original:c.original,emphasis:c.emphasis,frameCount:null,fileSize:null,toc:null},this.xingFramePos=this.writer.getPos(),this.mp3Writer.writeXingFrame(this.xingFrameData),this.frameCount++}this.validateAndNormalizeTimestamp(e,r.timestamp,r.type==="key"),this.writer.write(r.data),this.frameCount++,await this.writer.flush(),a&&this.framePositions.push(this.writer.getPos())}finally{n()}}async addSubtitleCue(){throw new Error("MP3 does not support subtitles.")}async finalize(){if(!this.xingFrameData||this.xingFramePos===null)return;let e=await this.mutex.acquire(),r=this.writer.getPos();this.writer.seek(this.xingFramePos);let n=new Uint8Array(100);for(let a=0;a<100;a++){let s=Math.floor(this.framePositions.length*(a/100));p(s!==-1&&se.codecInfo.codec)})}addEncodedVideoPacket(){throw new Error("Video tracks are not supported.")}getTrackData(e,r){let n=this.trackDatas.find(o=>o.track===e);if(n)return n;let a;do a=Math.floor(2**32*Math.random());while(this.trackDatas.some(o=>o.serialNumber===a));p(e.source._codec==="vorbis"||e.source._codec==="opus"),Ae(r),p(r),p(r.decoderConfig);let s={track:e,serialNumber:a,internalSampleRate:e.source._codec==="opus"?Ne:r.decoderConfig.sampleRate,codecInfo:{codec:e.source._codec,vorbisInfo:null,opusInfo:null},vorbisLastBlocksize:null,packetQueue:[],currentTimestampInSamples:0,pagesWritten:0,currentGranulePosition:0,currentLacingValues:[],currentPageData:[],currentPageSize:27,currentPageStartsWithFreshPacket:!0,currentPageStartTimestampInSamples:0};return this.queueHeaderPackets(s,r),this.trackDatas.push(s),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),s}queueHeaderPackets(e,r){if(p(r.decoderConfig),e.track.source._codec==="vorbis"){p(r.decoderConfig.description);let n=H(r.decoderConfig.description);if(n[0]!==2)throw new TypeError("First byte of Vorbis decoder description must be 2.");let a=1,s=()=>{let h=0;for(;;){let y=n[a++];if(y===void 0)throw new TypeError("Vorbis decoder description is too short.");if(h+=y,y<255)return h}},o=s(),c=s();if(n.length-a<=0)throw new TypeError("Vorbis decoder description is too short.");let d=n.subarray(a,a+=o);a+=c;let l=n.subarray(a),m=new Uint8Array(7);m[0]=3,m[1]=118,m[2]=111,m[3]=114,m[4]=98,m[5]=105,m[6]=115;let f=ni(m,this.output._metadataTags,!0);e.packetQueue.push({data:d,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:f,timestampInSamples:0,durationInSamples:0,forcePageFlush:!1},{data:l,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0});let b=D(d).getUint8(28);e.codecInfo.vorbisInfo={blocksizes:[1<<(b&15),1<<(b>>4)],modeBlockflags:an(l).modeBlockflags}}else if(e.track.source._codec==="opus"){if(!r.decoderConfig.description)throw new TypeError("For Ogg, Opus decoder description is required.");let n=H(r.decoderConfig.description),a=new Uint8Array(8),s=D(a);s.setUint32(0,1332770163,!1),s.setUint32(4,1415669619,!1);let o=ni(a,this.output._metadataTags,!0);e.packetQueue.push({data:n,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0},{data:o,timestampInSamples:0,durationInSamples:0,forcePageFlush:!0}),e.codecInfo.opusInfo={preSkip:Vt(n).preSkip}}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getTrackData(e,n);this.validateAndNormalizeTimestamp(s.track,r.timestamp,r.type==="key");let o=s.currentTimestampInSamples,{durationInSamples:c,vorbisBlockSize:u}=_n(r.data,s.codecInfo,s.vorbisLastBlocksize);s.currentTimestampInSamples+=c,s.vorbisLastBlocksize=u,s.packetQueue.push({data:r.data,timestampInSamples:o,durationInSamples:c,forcePageFlush:!1}),await this.interleavePages()}finally{a()}}addSubtitleCue(){throw new Error("Subtitle tracks are not supported.")}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async interleavePages(e=!1){if(!this.bosPagesWritten){if(!this.allTracksAreKnown()&&!e)return;for(let r of this.trackDatas)for(;r.packetQueue.length>0;){let n=r.packetQueue.shift();if(this.writePacket(r,n,!1),n.forcePageFlush)break}this.bosPagesWritten=!0}e:for(;;){let r=null,n=1/0;for(let o of this.trackDatas){if(!e&&o.packetQueue.length<=1&&!o.track.source._closed)break e;o.packetQueue.length>0&&o.packetQueue[0].timestampInSamples0&&a-e.currentPageStartTimestampInSamples>d&&this.writePage(e,!1)}let s=r.data.length,o=0,c=0;for(;;){e.currentLacingValues.length===0&&o>0&&(e.currentPageStartsWithFreshPacket=!1);let d=Math.min(255,s);e.currentLacingValues.push(d),e.currentPageSize++,c+=d;let l=s<255;if(e.currentLacingValues.length===255){let m=r.data.subarray(o,c);if(o=c,e.currentPageData.push(m),e.currentPageSize+=m.length,this.writePage(e,n&&l),l)return}if(l)break;s-=255}let u=r.data.subarray(o);e.currentPageData.push(u),e.currentPageSize+=u.length,e.currentGranulePosition=a,(e.currentPageSize>=Sl||r.forcePageFlush)&&this.writePage(e,n)}writePage(e,r){this.pageView.setUint32(0,wi,!0),this.pageView.setUint8(4,0);let n=0;e.currentPageStartsWithFreshPacket||(n|=1),e.pagesWritten===0&&(n|=2),r&&(n|=4),this.pageView.setUint8(5,n);let a=e.currentLacingValues.every(u=>u===255)?-1:e.currentGranulePosition;ho(this.pageView,6,a,!0),this.pageView.setUint32(14,e.serialNumber,!0),this.pageView.setUint32(18,e.pagesWritten,!0),this.pageView.setUint32(22,0,!0),this.pageView.setUint8(26,e.currentLacingValues.length),this.pageBytes.set(e.currentLacingValues,27);let s=27+e.currentLacingValues.length;for(let u of e.currentPageData)this.pageBytes.set(u,s),s+=u.length;let o=this.pageBytes.subarray(0,s),c=En(o);if(this.pageView.setUint32(22,c,!0),e.pagesWritten++,e.currentLacingValues.length=0,e.currentPageData.length=0,e.currentPageSize=27,e.currentPageStartsWithFreshPacket=!0,e.currentPageStartTimestampInSamples=e.currentGranulePosition,this.format._options.onPage&&this.writer.startTrackingWrites(),this.writer.write(o),this.format._options.onPage){let{data:u,start:d}=this.writer.stopTrackingWrites();this.format._options.onPage(u,d,e.track.source)}}async onTrackClose(){let e=await this.mutex.acquire();this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePages(),e()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve(),await this.interleavePages(!0);for(let r of this.trackDatas)r.currentLacingValues.length>0&&this.writePage(r,!0);e()}};var xl=0,uu=4096,au=256,Cl=224,su=192,ou=new Uint8Array([9,240]),cu=new Uint8Array([70,1]),ga=class extends ge{constructor(e,r){super(e);this.trackDatas=[];this.tablesWritten=!1;this.continuityCounters=new Map;this.packetBuffer=new Uint8Array(188);this.packetView=D(this.packetBuffer);this.allTracksKnown=Y();this.videoTrackIndex=0;this.audioTrackIndex=0;this.pesHeaderBuffer=new Uint8Array(14);this.pesHeaderView=D(this.pesHeaderBuffer);this.ptsBitstream=new V(this.pesHeaderBuffer.subarray(9,14));this.adaptationFieldBuffer=new Uint8Array(184);this.payloadBuffer=new Uint8Array(184);this.format=r,this.writer=e._writer,this.writer.ensureMonotonicity=!0}async start(){}async getMimeType(){return await this.allTracksKnown.promise,Nn(this.trackDatas.map(e=>e.codecString))}getVideoTrackData(e,r){let n=this.trackDatas.find(d=>d.track===e);if(n)return n;wr(r),p(r?.decoderConfig);let a=e.source._codec;p(a==="avc"||a==="hevc");let s=a==="avc"?27:36,o=au+this.trackDatas.length,c=Cl+this.videoTrackIndex++,u={track:e,pid:o,streamType:s,streamId:c,codecString:r.decoderConfig.codec,packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1};return this.trackDatas.push(u),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}getAudioTrackData(e,r){let n=this.trackDatas.find(d=>d.track===e);if(n)return n;Ae(r),p(r?.decoderConfig);let a=e.source._codec;p(a==="aac"||a==="mp3"||a==="ac3"||a==="eac3");let s,o;switch(a){case"aac":s=15,o=su+this.audioTrackIndex++;break;case"mp3":s=3,o=su+this.audioTrackIndex++;break;case"ac3":s=129,o=189;break;case"eac3":s=135,o=189;break}let c=au+this.trackDatas.length,u={track:e,pid:c,streamType:s,streamId:o,codecString:r.decoderConfig.codec,packetQueue:[],inputIsAnnexB:null,inputIsAdts:null,avcDecoderConfig:null,hevcDecoderConfig:null,adtsHeader:null,adtsHeaderBitstream:null,firstPacketWritten:!1};return this.trackDatas.push(u),this.allTracksAreKnown()&&this.allTracksKnown.resolve(),u}async addEncodedVideoPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getVideoTrackData(e,n),o=this.validateAndNormalizeTimestamp(s.track,r.timestamp,r.type==="key"),c=this.prepareVideoPacket(s,r,n);s.packetQueue.push({data:c,timestamp:o,isKeyframe:r.type==="key"}),await this.interleavePackets()}finally{a()}}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{let s=this.getAudioTrackData(e,n),o=this.validateAndNormalizeTimestamp(s.track,r.timestamp,r.type==="key"),c=this.prepareAudioPacket(s,r,n);s.packetQueue.push({data:c,timestamp:o,isKeyframe:r.type==="key"}),await this.interleavePackets()}finally{a()}}async addSubtitleCue(){throw new Error("MPEG-TS does not support subtitles.")}prepareVideoPacket(e,r,n){let a=e.track.source._codec;if(e.inputIsAnnexB===null){let s=n?.decoderConfig?.description;if(e.inputIsAnnexB=!s,!e.inputIsAnnexB){let o=H(s);a==="avc"?e.avcDecoderConfig=tn(o):e.hevcDecoderConfig=No(o)}}return e.inputIsAnnexB?this.prepareAnnexBVideoPacket(r.data,a):this.prepareLengthPrefixedVideoPacket(e,r,a)}prepareAnnexBVideoPacket(e,r){let n=[];for(let s of Ut(e)){let o=e.subarray(s.offset,s.offset+s.length);(r==="avc"?gt(o[0])===9:et(o[0])===35)||n.push(o)}let a=r==="avc"?ou:cu;return n.unshift(a),en(n)}prepareLengthPrefixedVideoPacket(e,r,n){let a=r.data,s=n==="avc"?e.avcDecoderConfig.lengthSizeMinusOne+1:e.hevcDecoderConfig.lengthSizeMinusOne+1,o=[];for(let u of Zi(a,s)){let d=a.subarray(u.offset,u.offset+u.length);(n==="avc"?gt(d[0])===9:et(d[0])===35)||o.push(d)}if(r.type==="key")if(n==="avc"){let u=e.avcDecoderConfig;for(let d of u.pictureParameterSets)o.unshift(d);for(let d of u.sequenceParameterSets)o.unshift(d)}else{let u=e.hevcDecoderConfig;for(let d of u.arrays)if(d.nalUnitType===34)for(let l of d.nalUnits)o.unshift(l);for(let d of u.arrays)if(d.nalUnitType===33)for(let l of d.nalUnits)o.unshift(l);for(let d of u.arrays)if(d.nalUnitType===32)for(let l of d.nalUnits)o.unshift(l)}let c=n==="avc"?ou:cu;return o.unshift(c),en(o)}prepareAudioPacket(e,r,n){let a=e.track.source._codec;if(a==="mp3"||a==="ac3"||a==="eac3")return r.data;if(e.inputIsAdts===null){let u=n?.decoderConfig?.description;if(e.inputIsAdts=!u,!e.inputIsAdts){let d=ht(H(u)),l=ea(d);e.adtsHeader=l.header,e.adtsHeaderBitstream=l.bitstream}}if(e.inputIsAdts)return r.data;p(e.adtsHeader),p(e.adtsHeaderBitstream);let s=e.adtsHeader,o=r.data.byteLength+s.byteLength;ta(e.adtsHeaderBitstream,o);let c=new Uint8Array(o);return c.set(s,0),c.set(r.data,s.byteLength),c}allTracksAreKnown(){for(let e of this.output._tracks)if(!e.source._closed&&!this.trackDatas.some(r=>r.track===e))return!1;return!0}async interleavePackets(e=!1){if(!this.tablesWritten){if(!this.allTracksAreKnown()&&!e)return;this.writeTables()}e:for(;;){let r=null,n=1/0;for(let s of this.trackDatas){if(!e&&s.packetQueue.length===0&&!s.track.source._closed)break e;s.packetQueue.length>0&&s.packetQueue[0].timestamp>>30&7),this.ptsBitstream.writeBits(1,1),this.ptsBitstream.writeBits(15,s>>>15&32767),this.ptsBitstream.writeBits(1,1),this.ptsBitstream.writeBits(15,s&32767),this.ptsBitstream.writeBits(1,1);let o=this.pesHeaderBuffer.length+r.data.length,c=0,u=!0;for(;c0){let x=this.adaptationFieldBuffer;b===1?x[0]=0:(x[0]=b-1,x[1]=Number(f)<<7|Number(m)<<6,x.fill(255,2,b)),h=x.subarray(0,b)}let y=Math.min(184-b,l),k=this.payloadBuffer.subarray(0,y),w=0;if(c0,c=n?o?3:2:o?1:0;this.packetBuffer[0]=71,this.packetView.setUint16(1,(r?16384:0)|e&8191,!1),this.packetBuffer[3]=c<<4|s&15,o&&this.continuityCounters.set(e,s+1&15);let u=4;n&&(this.packetBuffer.set(n,u),u+=n.length),this.packetBuffer.set(a,u),u+=a.length,u<188&&this.packetBuffer.fill(255,u);let d=this.writer.getPos();this.writer.write(this.packetBuffer),this.format._options.onPacket&&this.format._options.onPacket(this.packetBuffer.slice(),d)}async onTrackClose(){let e=await this.mutex.acquire();this.allTracksAreKnown()&&this.allTracksKnown.resolve(),await this.interleavePackets(),e()}async finalize(){let e=await this.mutex.acquire();this.allTracksKnown.resolve(),await this.interleavePackets(!0),e()}},Pl=79764919,du=new Uint32Array(256);for(let i=0;i<256;i++){let t=i<<24;for(let e=0;e<8;e++)t=t&2147483648?t<<1^Pl:t<<1;du[i]=t>>>0&4294967295}var lu=i=>{let t=4294967295;for(let e=0;e>>24^r])>>>0}return t},fr=new Uint8Array(16);{let i=D(fr);fr[0]=0,i.setUint16(1,45069,!1),i.setUint16(3,1,!1),fr[5]=193,fr[6]=0,fr[7]=0,i.setUint16(8,1,!1),i.setUint16(10,57344|uu&8191,!1),i.setUint32(12,lu(fr.subarray(0,12)),!1)}var Al=i=>{let t=0;for(let c of i)t+=5,c.streamType===129?t+=si.length:c.streamType===135&&(t+=oi.length);let e=9+t+4,r=new Uint8Array(3+e-4),n=D(r);r[0]=2,n.setUint16(1,45056|e&4095,!1),n.setUint16(3,1,!1),r[5]=193,r[6]=0,r[7]=0,n.setUint16(8,65535,!1),n.setUint16(10,61440,!1);let a=12;for(let c of i)r[a++]=c.streamType,n.setUint16(a,57344|c.pid&8191,!1),a+=2,c.streamType===129?(n.setUint16(a,61440|si.length,!1),a+=2,r.set(si,a),a+=si.length):c.streamType===135?(n.setUint16(a,61440|oi.length,!1),a+=2,r.set(oi,a),a+=oi.length):(n.setUint16(a,61440,!1),a+=2);let s=lu(r),o=new Uint8Array(r.length+4);return o.set(r,0),D(o).setUint32(r.length,s,!1),o};var ba=class{constructor(t){this.writer=t;this.helper=new Uint8Array(8);this.helperView=new DataView(this.helper.buffer)}writeU16(t){this.helperView.setUint16(0,t,!0),this.writer.write(this.helper.subarray(0,2))}writeU32(t){this.helperView.setUint32(0,t,!0),this.writer.write(this.helper.subarray(0,4))}writeU64(t){this.helperView.setUint32(0,t,!0),this.helperView.setUint32(4,Math.floor(t/2**32),!0),this.writer.write(this.helper)}writeAscii(t){this.writer.write(new TextEncoder().encode(t))}};var ka=class extends ge{constructor(e,r){super(e);this.headerWritten=!1;this.dataSize=0;this.sampleRate=null;this.sampleCount=0;this.riffSizePos=null;this.dataSizePos=null;this.ds64RiffSizePos=null;this.ds64DataSizePos=null;this.ds64SampleCountPos=null;this.format=r,this.writer=e._writer,this.riffWriter=new ba(e._writer),this.isRf64=!!r._options.large}async start(){}async getMimeType(){return"audio/wav"}async addEncodedVideoPacket(){throw new Error("WAVE does not support video.")}async addEncodedAudioPacket(e,r,n){let a=await this.mutex.acquire();try{if(this.headerWritten||(Ae(n),p(n),p(n.decoderConfig),this.writeHeader(e,n.decoderConfig),this.sampleRate=n.decoderConfig.sampleRate,this.headerWritten=!0),this.validateAndNormalizeTimestamp(e,r.timestamp,r.type==="key"),!this.isRf64&&this.writer.getPos()+r.data.byteLength>=2**32)throw new Error("Adding more audio data would exceed the maximum RIFF size of 4 GiB. To write larger files, use RF64 by setting `large: true` in the WavOutputFormatOptions.");this.writer.write(r.data),this.dataSize+=r.data.byteLength,this.sampleCount+=Math.round(r.duration*this.sampleRate),await this.writer.flush()}finally{a()}}async addSubtitleCue(){throw new Error("WAVE does not support subtitles.")}writeHeader(e,r){this.format._options.onHeader&&this.writer.startTrackingWrites();let n,a=e.source._codec,s=be(a);s.dataType==="ulaw"?n=7:s.dataType==="alaw"?n=6:s.dataType==="float"?n=3:n=1;let o=r.numberOfChannels,c=r.sampleRate,u=s.sampleSize*o;if(this.riffWriter.writeAscii(this.isRf64?"RF64":"RIFF"),this.isRf64?this.riffWriter.writeU32(4294967295):(this.riffSizePos=this.writer.getPos(),this.riffWriter.writeU32(0)),this.riffWriter.writeAscii("WAVE"),this.isRf64&&(this.riffWriter.writeAscii("ds64"),this.riffWriter.writeU32(28),this.ds64RiffSizePos=this.writer.getPos(),this.riffWriter.writeU64(0),this.ds64DataSizePos=this.writer.getPos(),this.riffWriter.writeU64(0),this.ds64SampleCountPos=this.writer.getPos(),this.riffWriter.writeU64(0),this.riffWriter.writeU32(0)),this.riffWriter.writeAscii("fmt "),this.riffWriter.writeU32(16),this.riffWriter.writeU16(n),this.riffWriter.writeU16(o),this.riffWriter.writeU32(c),this.riffWriter.writeU32(c*u),this.riffWriter.writeU16(u),this.riffWriter.writeU16(8*s.sampleSize),!mt(this.output._metadataTags)){let d=this.format._options.metadataFormat??"info";d==="info"?this.writeInfoChunk(this.output._metadataTags):d==="id3"?this.writeId3Chunk(this.output._metadataTags):J(d)}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:d,start:l}=this.writer.stopTrackingWrites();this.format._options.onHeader(d,l)}}writeInfoChunk(e){let r=this.writer.getPos();this.riffWriter.writeAscii("LIST"),this.riffWriter.writeU32(0),this.riffWriter.writeAscii("INFO");let n=new Set,a=(c,u)=>{if(!Ft(u)){console.warn(`Didn't write tag '${c}' because '${u}' is not ISO 8859-1-compatible.`);return}let d=u.length+1,l=new Uint8Array(d);for(let m=0;mce.includes(t))}getSupportedAudioCodecs(){return this.getSupportedCodecs().filter(t=>ue.includes(t))}getSupportedSubtitleCodecs(){return this.getSupportedCodecs().filter(t=>_e.includes(t))}_codecUnsupportedHint(t){return""}},Di=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.fastStart!==void 0&&![!1,"in-memory","reserve","fragmented"].includes(t.fastStart))throw new TypeError("options.fastStart, when provided, must be false, 'in-memory', 'reserve', or 'fragmented'.");if(t.minimumFragmentDuration!==void 0&&(!Number.isFinite(t.minimumFragmentDuration)||t.minimumFragmentDuration<0))throw new TypeError("options.minimumFragmentDuration, when provided, must be a non-negative number.");if(t.onFtyp!==void 0&&typeof t.onFtyp!="function")throw new TypeError("options.onFtyp, when provided, must be a function.");if(t.onMoov!==void 0&&typeof t.onMoov!="function")throw new TypeError("options.onMoov, when provided, must be a function.");if(t.onMdat!==void 0&&typeof t.onMdat!="function")throw new TypeError("options.onMdat, when provided, must be a function.");if(t.onMoof!==void 0&&typeof t.onMoof!="function")throw new TypeError("options.onMoof, when provided, must be a function.");if(t.metadataFormat!==void 0&&!["mdir","mdta","udta","auto"].includes(t.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'auto', 'mdir', 'mdta', or 'udta'.");super(),this._options=t}getSupportedTrackCounts(){return{video:{min:0,max:4294967295},audio:{min:0,max:4294967295},subtitle:{min:0,max:4294967295},total:{min:1,max:4294967295}}}get supportsVideoRotationMetadata(){return!0}get supportsTimestampedMediaData(){return!0}_createMuxer(t){return new la(t,this)}},jr=class extends Di{constructor(t){super(t)}get _name(){return"MP4"}get fileExtension(){return".mp4"}get mimeType(){return"video/mp4"}getSupportedCodecs(){return[...ce,...pt,"pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be",..._e]}_codecUnsupportedHint(t){return new Hr().getSupportedCodecs().includes(t)?" Switching to MOV will grant support for this codec.":""}},Hr=class extends Di{constructor(t){super(t)}get _name(){return"MOV"}get fileExtension(){return".mov"}get mimeType(){return"video/quicktime"}getSupportedCodecs(){return[...ce,...ue]}_codecUnsupportedHint(t){return new jr().getSupportedCodecs().includes(t)?" Switching to MP4 will grant support for this codec.":""}},Oi=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.appendOnly!==void 0&&typeof t.appendOnly!="boolean")throw new TypeError("options.appendOnly, when provided, must be a boolean.");if(t.minimumClusterDuration!==void 0&&(!Number.isFinite(t.minimumClusterDuration)||t.minimumClusterDuration<0))throw new TypeError("options.minimumClusterDuration, when provided, must be a non-negative number.");if(t.onEbmlHeader!==void 0&&typeof t.onEbmlHeader!="function")throw new TypeError("options.onEbmlHeader, when provided, must be a function.");if(t.onSegmentHeader!==void 0&&typeof t.onSegmentHeader!="function")throw new TypeError("options.onHeader, when provided, must be a function.");if(t.onCluster!==void 0&&typeof t.onCluster!="function")throw new TypeError("options.onCluster, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new ma(t,this)}get _name(){return"Matroska"}getSupportedTrackCounts(){return{video:{min:0,max:127},audio:{min:0,max:127},subtitle:{min:0,max:127},total:{min:1,max:127}}}get fileExtension(){return".mkv"}get mimeType(){return"video/x-matroska"}getSupportedCodecs(){return[...ce,...pt,...Z.filter(t=>!["pcm-s8","pcm-f32be","pcm-f64be","ulaw","alaw"].includes(t)),..._e]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}},qr=class extends Oi{constructor(t){super(t)}getSupportedCodecs(){return[...ce.filter(t=>["vp8","vp9","av1"].includes(t)),...ue.filter(t=>["opus","vorbis"].includes(t)),..._e]}get _name(){return"WebM"}get fileExtension(){return".webm"}get mimeType(){return"video/webm"}_codecUnsupportedHint(t){return new Oi().getSupportedCodecs().includes(t)?" Switching to MKV will grant support for this codec.":""}},Vs=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.xingHeader!==void 0&&typeof t.xingHeader!="boolean")throw new TypeError("options.xingHeader, when provided, must be a boolean.");if(t.onXingFrame!==void 0&&typeof t.onXingFrame!="function")throw new TypeError("options.onXingFrame, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new pa(t,this)}get _name(){return"MP3"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".mp3"}get mimeType(){return"audio/mpeg"}getSupportedCodecs(){return["mp3"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},zs=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.large!==void 0&&typeof t.large!="boolean")throw new TypeError("options.large, when provided, must be a boolean.");if(t.metadataFormat!==void 0&&!["info","id3"].includes(t.metadataFormat))throw new TypeError("options.metadataFormat, when provided, must be either 'info' or 'id3'.");if(t.onHeader!==void 0&&typeof t.onHeader!="function")throw new TypeError("options.onHeader, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new ka(t,this)}get _name(){return"WAVE"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".wav"}get mimeType(){return"audio/wav"}getSupportedCodecs(){return[...Z.filter(t=>["pcm-s16","pcm-s24","pcm-s32","pcm-f32","pcm-u8","ulaw","alaw"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Ns=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.maximumPageDuration!==void 0&&(!Number.isFinite(t.maximumPageDuration)||t.maximumPageDuration<=0))throw new TypeError("options.maximumPageDuration, when provided, must be a positive number.");if(t.onPage!==void 0&&typeof t.onPage!="function")throw new TypeError("options.onPage, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new ha(t,this)}get _name(){return"Ogg"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:0,max:4294967296},subtitle:{min:0,max:0},total:{min:1,max:4294967296}}}get fileExtension(){return".ogg"}get mimeType(){return"application/ogg"}getSupportedCodecs(){return[...ue.filter(t=>["vorbis","opus"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Ls=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.onFrame!==void 0&&typeof t.onFrame!="function")throw new TypeError("options.onFrame, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new ra(t,this)}get _name(){return"ADTS"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".aac"}get mimeType(){return"audio/aac"}getSupportedCodecs(){return["aac"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Ws=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");super(),this._options=t}_createMuxer(t){return new ia(t,this)}get _name(){return"FLAC"}getSupportedTrackCounts(){return{video:{min:0,max:0},audio:{min:1,max:1},subtitle:{min:0,max:0},total:{min:1,max:1}}}get fileExtension(){return".flac"}get mimeType(){return"audio/flac"}getSupportedCodecs(){return["flac"]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!1}},Hs=class extends De{constructor(t={}){if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(t.onPacket!==void 0&&typeof t.onPacket!="function")throw new TypeError("options.onPacket, when provided, must be a function.");super(),this._options=t}_createMuxer(t){return new ga(t,this)}get _name(){return"MPEG-TS"}getSupportedTrackCounts(){return{video:{min:0,max:16},audio:{min:0,max:32},subtitle:{min:0,max:0},total:{min:1,max:48}}}get fileExtension(){return".ts"}get mimeType(){return"video/MP2T"}getSupportedCodecs(){return[...ce.filter(t=>["avc","hevc"].includes(t)),...ue.filter(t=>["aac","mp3","ac3","eac3"].includes(t))]}get supportsVideoRotationMetadata(){return!1}get supportsTimestampedMediaData(){return!0}};var Ta=i=>{if(!i||typeof i!="object")throw new TypeError("Encoding config must be an object.");if(!ce.includes(i.codec))throw new TypeError(`Invalid video codec '${i.codec}'. Must be one of: ${ce.join(", ")}.`);if(!(i.bitrate instanceof ke)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("config.bitrate must be a positive integer or a quality.");if(i.keyFrameInterval!==void 0&&(!Number.isFinite(i.keyFrameInterval)||i.keyFrameInterval<0))throw new TypeError("config.keyFrameInterval, when provided, must be a non-negative number.");if(i.sizeChangeBehavior!==void 0&&!["deny","passThrough","fill","contain","cover"].includes(i.sizeChangeBehavior))throw new TypeError("config.sizeChangeBehavior, when provided, must be 'deny', 'passThrough', 'fill', 'contain' or 'cover'.");if(i.onEncodedPacket!==void 0&&typeof i.onEncodedPacket!="function")throw new TypeError("config.onEncodedChunk, when provided, must be a function.");if(i.onEncoderConfig!==void 0&&typeof i.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");mu(i.codec,i)},mu=(i,t)=>{if(!t||typeof t!="object")throw new TypeError("Encoding options must be an object.");if(t.alpha!==void 0&&!["discard","keep"].includes(t.alpha))throw new TypeError("options.alpha, when provided, must be 'discard' or 'keep'.");if(t.bitrateMode!==void 0&&!["constant","variable"].includes(t.bitrateMode))throw new TypeError("bitrateMode, when provided, must be 'constant' or 'variable'.");if(t.latencyMode!==void 0&&!["quality","realtime"].includes(t.latencyMode))throw new TypeError("latencyMode, when provided, must be 'quality' or 'realtime'.");if(t.fullCodecString!==void 0&&typeof t.fullCodecString!="string")throw new TypeError("fullCodecString, when provided, must be a string.");if(t.fullCodecString!==void 0&&za(t.fullCodecString)!==i)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${i}).`);if(t.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(t.hardwareAcceleration))throw new TypeError("hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.");if(t.scalabilityMode!==void 0&&typeof t.scalabilityMode!="string")throw new TypeError("scalabilityMode, when provided, must be a string.");if(t.contentHint!==void 0&&typeof t.contentHint!="string")throw new TypeError("contentHint, when provided, must be a string.")},ya=i=>{let t=i.bitrate instanceof ke?i.bitrate._toVideoBitrate(i.codec,i.width,i.height):i.bitrate;return{codec:i.fullCodecString??vo(i.codec,i.width,i.height,t),width:i.width,height:i.height,bitrate:t,bitrateMode:i.bitrateMode,alpha:i.alpha??"discard",framerate:i.framerate,latencyMode:i.latencyMode,hardwareAcceleration:i.hardwareAcceleration,scalabilityMode:i.scalabilityMode,contentHint:i.contentHint,...Mo(i.codec)}},Sa=i=>{if(!i||typeof i!="object")throw new TypeError("Encoding config must be an object.");if(!ue.includes(i.codec))throw new TypeError(`Invalid audio codec '${i.codec}'. Must be one of: ${ue.join(", ")}.`);if(i.bitrate===void 0&&(!Z.includes(i.codec)||i.codec==="flac"))throw new TypeError("config.bitrate must be provided for compressed audio codecs.");if(i.bitrate!==void 0&&!(i.bitrate instanceof ke)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("config.bitrate, when provided, must be a positive integer or a quality.");if(i.onEncodedPacket!==void 0&&typeof i.onEncodedPacket!="function")throw new TypeError("config.onEncodedChunk, when provided, must be a function.");if(i.onEncoderConfig!==void 0&&typeof i.onEncoderConfig!="function")throw new TypeError("config.onEncoderConfig, when provided, must be a function.");fu(i.codec,i)},fu=(i,t)=>{if(!t||typeof t!="object")throw new TypeError("Encoding options must be an object.");if(t.bitrateMode!==void 0&&!["constant","variable"].includes(t.bitrateMode))throw new TypeError("bitrateMode, when provided, must be 'constant' or 'variable'.");if(t.fullCodecString!==void 0&&typeof t.fullCodecString!="string")throw new TypeError("fullCodecString, when provided, must be a string.");if(t.fullCodecString!==void 0&&za(t.fullCodecString)!==i)throw new TypeError(`fullCodecString, when provided, must be a string that matches the specified codec (${i}).`)},wa=i=>{let t=i.bitrate instanceof ke?i.bitrate._toAudioBitrate(i.codec):i.bitrate;return{codec:i.fullCodecString??_o(i.codec,i.numberOfChannels,i.sampleRate),numberOfChannels:i.numberOfChannels,sampleRate:i.sampleRate,bitrate:t,bitrateMode:i.bitrateMode,...Ro(i.codec)}},ke=class{constructor(t){this._factor=t}_toVideoBitrate(t,e,r){let n=e*r,a={avc:1,hevc:.6,vp9:.6,av1:.4,vp8:1.2},s=1920*1080,o=3e6,c=Math.pow(n/s,.95),l=o*c*a[t]*this._factor;return Math.ceil(l/1e3)*1e3}_toAudioBitrate(t){if(Z.includes(t)||t==="flac")return;let r={aac:128e3,opus:64e3,mp3:16e4,vorbis:64e3,ac3:384e3,eac3:192e3}[t];if(!r)throw new Error(`Unhandled codec: ${t}`);let n=r*this._factor;return t==="aac"?n=[96e3,128e3,16e4,192e3].reduce((s,o)=>Math.abs(o-n)Math.abs(o-n){if(ce.includes(i))return Ca(i);if(ue.includes(i))return Pa(i);if(_e.includes(i))return Aa(i);throw new TypeError(`Unknown codec '${i}'.`)},Ca=async(i,t={})=>{let{width:e=1280,height:r=720,bitrate:n=1e6,...a}=t;if(!ce.includes(i))return!1;if(!Number.isInteger(e)||e<=0)throw new TypeError("width must be a positive integer.");if(!Number.isInteger(r)||r<=0)throw new TypeError("height must be a positive integer.");if(!(n instanceof ke)&&(!Number.isInteger(n)||n<=0))throw new TypeError("bitrate must be a positive integer or a quality.");mu(i,a);let s=null;return tr.length>0&&(s??=ya({codec:i,width:e,height:r,bitrate:n,framerate:void 0,...a}),tr.some(u=>u.supports(i,s)))?!0:typeof VideoEncoder>"u"||(e%2===1||r%2===1)&&(i==="avc"||i==="hevc")||(s??=ya({codec:i,width:e,height:r,bitrate:n,framerate:void 0,...a,alpha:"discard"}),!(await VideoEncoder.isConfigSupported(s)).supported)?!1:Ze()?new Promise(async u=>{try{let d=new VideoEncoder({output:()=>{},error:()=>u(!1)});d.configure(s);let l=new Uint8Array(e*r*4),m=new VideoFrame(l,{format:"RGBA",codedWidth:e,codedHeight:r,timestamp:0});d.encode(m),m.close(),await d.flush(),u(!0)}catch{u(!1)}}):!0},Pa=async(i,t={})=>{let{numberOfChannels:e=2,sampleRate:r=48e3,bitrate:n=128e3,...a}=t;if(!ue.includes(i))return!1;if(!Number.isInteger(e)||e<=0)throw new TypeError("numberOfChannels must be a positive integer.");if(!Number.isInteger(r)||r<=0)throw new TypeError("sampleRate must be a positive integer.");if(!(n instanceof ke)&&(!Number.isInteger(n)||n<=0))throw new TypeError("bitrate must be a positive integer.");fu(i,a);let s=null;return rr.length>0&&(s??=wa({codec:i,numberOfChannels:e,sampleRate:r,bitrate:n,...a}),rr.some(c=>c.supports(i,s)))||Z.includes(i)?!0:typeof AudioEncoder>"u"?!1:(s??=wa({codec:i,numberOfChannels:e,sampleRate:r,bitrate:n,...a}),(await AudioEncoder.isConfigSupported(s)).supported===!0)},Aa=async i=>!!_e.includes(i),Ml=async()=>{let[i,t,e]=await Promise.all([pu(),Ui(),hu()]);return[...i,...t,...e]},pu=async(i=ce,t)=>{let e=await Promise.all(i.map(r=>Ca(r,t)));return i.filter((r,n)=>e[n])},Ui=async(i=ue,t)=>{let e=await Promise.all(i.map(r=>Pa(r,t)));return i.filter((r,n)=>e[n])},hu=async(i=_e)=>{let t=await Promise.all(i.map(Aa));return i.filter((e,r)=>t[r])},qs=async(i,t)=>{for(let e of i)if(await Ca(e,t))return e;return null},Rl=async(i,t)=>{for(let e of i)if(await Pa(e,t))return e;return null},Bl=async i=>{for(let t of i)if(await Aa(t))return t;return null};var Kr=class{constructor(){this._connectedTrack=null;this._closingPromise=null;this._closed=!1;this._timestampOffset=0}_ensureValidAdd(){if(!this._connectedTrack)throw new Error("Source is not connected to an output track.");if(this._connectedTrack.output.state==="canceled")throw new Error("Output has been canceled.");if(this._connectedTrack.output.state==="finalizing"||this._connectedTrack.output.state==="finalized")throw new Error("Output has been finalized.");if(this._connectedTrack.output.state==="pending")throw new Error("Output has not started.");if(this._closed)throw new Error("Source is closed.")}async _start(){}async _flushAndClose(t){}close(){if(this._closingPromise)return;let t=this._connectedTrack;if(!t)throw new Error("Cannot call close without connecting the source to an output track.");if(t.output.state==="pending")throw new Error("Cannot call close before output has been started.");this._closingPromise=(async()=>{await this._flushAndClose(!1),this._closed=!0,!(t.output.state==="finalizing"||t.output.state==="finalized")&&t.output._muxer.onTrackClose(t)})()}async _flushOrWaitForOngoingClose(t){return this._closingPromise??=(async()=>{await this._flushAndClose(t),this._closed=!0})()}},At=class extends Kr{constructor(e){super();this._connectedTrack=null;if(!ce.includes(e))throw new TypeError(`Invalid video codec '${e}'. Must be one of: ${ce.join(", ")}.`);this._codec=e}},Vi=class extends At{constructor(t){super(t)}add(t,e){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(e!==void 0&&(!e||typeof e!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedVideoPacket(this._connectedTrack,t,e)}},zi=class{constructor(t,e){this.source=t;this.encodingConfig=e;this.ensureEncoderPromise=null;this.encoderInitialized=!1;this.encoder=null;this.muxer=null;this.lastMultipleOfKeyFrameInterval=-1;this.codedWidth=null;this.codedHeight=null;this.resizeCanvas=null;this.customEncoder=null;this.customEncoderCallSerializer=new Et;this.customEncoderQueueSize=0;this.alphaEncoder=null;this.splitter=null;this.splitterCreationFailed=!1;this.alphaFrameQueue=[];this.error=null}async add(t,e,r){try{if(this.checkForEncoderError(),this.source._ensureValidAdd(),this.codedWidth!==null&&this.codedHeight!==null){if(t.codedWidth!==this.codedWidth||t.codedHeight!==this.codedHeight){let o=this.encodingConfig.sizeChangeBehavior??"deny";if(o!=="passThrough"){if(o==="deny")throw new Error(`Video sample size must remain constant. Expected ${this.codedWidth}x${this.codedHeight}, got ${t.codedWidth}x${t.codedHeight}. To allow the sample size to change over time, set \`sizeChangeBehavior\` to a value other than 'strict' in the encoding options.`);{let c=!1;this.resizeCanvas||(typeof document<"u"?(this.resizeCanvas=document.createElement("canvas"),this.resizeCanvas.width=this.codedWidth,this.resizeCanvas.height=this.codedHeight):this.resizeCanvas=new OffscreenCanvas(this.codedWidth,this.codedHeight),c=!0);let u=this.resizeCanvas.getContext("2d",{alpha:Ze()});p(u),c||(Ze()?(u.fillStyle="black",u.fillRect(0,0,this.codedWidth,this.codedHeight)):u.clearRect(0,0,this.codedWidth,this.codedHeight)),t.drawWithFit(u,{fit:o}),e&&t.close(),t=new pe(this.resizeCanvas,{timestamp:t.timestamp,duration:t.duration,rotation:t.rotation}),e=!0}}}}else this.codedWidth=t.codedWidth,this.codedHeight=t.codedHeight;this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(t),this.encoderInitialized||await this.ensureEncoderPromise),p(this.encoderInitialized);let n=this.encodingConfig.keyFrameInterval??5,a=Math.floor(t.timestamp/n),s={...r,keyFrame:r?.keyFrame||n===0||a!==this.lastMultipleOfKeyFrameInterval};if(this.lastMultipleOfKeyFrameInterval=a,this.customEncoder){this.customEncoderQueueSize++;let o=t.clone(),c=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(o,s)).then(()=>this.customEncoderQueueSize--).catch(u=>this.error??=u).finally(()=>{o.close()});this.customEncoderQueueSize>=4&&await c}else{p(this.encoder);let o=t.toVideoFrame();if(!this.alphaEncoder)this.encoder.encode(o,s),o.close();else if(!!o.format&&!o.format.includes("A")||this.splitterCreationFailed)this.alphaFrameQueue.push(null),this.encoder.encode(o,s),o.close();else{let u=o.displayWidth,d=o.displayHeight;if(!this.splitter)try{this.splitter=new Gs(u,d)}catch(l){console.error("Due to an error, only color data will be encoded.",l),this.splitterCreationFailed=!0,this.alphaFrameQueue.push(null),this.encoder.encode(o,s),o.close()}if(this.splitter){let l=this.splitter.extractColor(o),m=this.splitter.extractAlpha(o);this.alphaFrameQueue.push(m),this.encoder.encode(l,s),l.close(),o.close()}}e&&t.close(),this.encoder.encodeQueueSize>=4&&await new Promise(c=>this.encoder.addEventListener("dequeue",c,{once:!0}))}await this.muxer.mutex.currentPromise}finally{e&&t.close()}}ensureEncoder(t){this.ensureEncoderPromise=(async()=>{let e=ya({width:t.codedWidth,height:t.codedHeight,...this.encodingConfig,framerate:this.source._connectedTrack?.metadata.frameRate});this.encodingConfig.onEncoderConfig?.(e);let r=tr.find(n=>n.supports(this.encodingConfig.codec,e));if(r)this.customEncoder=new r,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=e,this.customEncoder.onPacket=(n,a)=>{if(!(n instanceof W))throw new TypeError("The first argument passed to onPacket must be an EncodedPacket.");if(a!==void 0&&(!a||typeof a!="object"))throw new TypeError("The second argument passed to onPacket must be an object or undefined.");this.encodingConfig.onEncodedPacket?.(n,a),this.muxer.addEncodedVideoPacket(this.source._connectedTrack,n,a).catch(s=>{this.error??=s})},await this.customEncoder.init();else{if(typeof VideoEncoder>"u")throw new Error("VideoEncoder is not supported by this browser.");if(e.alpha="discard",this.encodingConfig.alpha==="keep"&&(e.latencyMode="quality"),(e.width%2===1||e.height%2===1)&&(this.encodingConfig.codec==="avc"||this.encodingConfig.codec==="hevc"))throw new Error(`The dimensions ${e.width}x${e.height} are not supported for codec '${this.encodingConfig.codec}'; both width and height must be even numbers. Make sure to round your dimensions to the nearest even number.`);if(!(await VideoEncoder.isConfigSupported(e)).supported)throw new Error(`This specific encoder configuration (${e.codec}, ${e.bitrate} bps, ${e.width}x${e.height}, hardware acceleration: ${e.hardwareAcceleration??"no-preference"}) is not supported by this browser. Consider using another codec or changing your video parameters.`);let s=[],o=[],c=0,u=0,d=(m,f,g)=>{let b={};if(f){let y=new Uint8Array(f.byteLength);f.copyTo(y),b.alpha=y}let h=W.fromEncodedChunk(m,b);this.encodingConfig.onEncodedPacket?.(h,g),this.muxer.addEncodedVideoPacket(this.source._connectedTrack,h,g).catch(y=>{this.error??=y})},l=new Error("Encoding error").stack;if(this.encoder=new VideoEncoder({output:(m,f)=>{if(!this.alphaEncoder){d(m,null,f);return}let g=this.alphaFrameQueue.shift();p(g!==void 0),g?(this.alphaEncoder.encode(g,{keyFrame:m.type==="key"}),u++,g.close(),s.push({chunk:m,meta:f})):u===0?d(m,null,f):(o.push(c+u),s.push({chunk:m,meta:f}))},error:m=>{m.stack=l,this.error??=m}}),this.encoder.configure(e),this.encodingConfig.alpha==="keep"){let m=new Error("Encoding error").stack;this.alphaEncoder=new VideoEncoder({output:(f,g)=>{u--;let b=s.shift();for(p(b!==void 0),d(b.chunk,f,b.meta),c++;o.length>0&&o[0]===c;){o.shift();let h=s.shift();p(h!==void 0),d(h.chunk,null,h.meta)}},error:f=>{f.stack=m,this.error??=f}}),this.alphaEncoder.configure(e)}}p(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}async flushAndClose(t){t||this.checkForEncoderError(),this.customEncoder?(t||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(t||(await this.encoder.flush(),await this.alphaEncoder?.flush()),this.encoder.state!=="closed"&&this.encoder.close(),this.alphaEncoder&&this.alphaEncoder.state!=="closed"&&this.alphaEncoder.close(),this.alphaFrameQueue.forEach(e=>e?.close()),this.splitter?.close()),t||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},Gs=class{constructor(t,e){this.lastFrame=null;typeof OffscreenCanvas<"u"?this.canvas=new OffscreenCanvas(t,e):(this.canvas=document.createElement("canvas"),this.canvas.width=t,this.canvas.height=e);let r=this.canvas.getContext("webgl2",{alpha:!0});if(!r)throw new Error("Couldn't acquire WebGL 2 context.");this.gl=r,this.colorProgram=this.createColorProgram(),this.alphaProgram=this.createAlphaProgram(),this.vao=this.createVAO(),this.sourceTexture=this.createTexture(),this.alphaResolutionLocation=this.gl.getUniformLocation(this.alphaProgram,"u_resolution"),this.gl.useProgram(this.colorProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.colorProgram,"u_sourceTexture"),0),this.gl.useProgram(this.alphaProgram),this.gl.uniform1i(this.gl.getUniformLocation(this.alphaProgram,"u_sourceTexture"),0)}createVertexShader(){return this.createShader(this.gl.VERTEX_SHADER,`#version 300 es in vec2 a_position; in vec2 a_texCoord; out vec2 v_texCoord; void main() { gl_Position = vec4(a_position, 0.0, 1.0); v_texCoord = a_texCoord; } `)}createColorProgram(){let t=this.createVertexShader(),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_sourceTexture; in vec2 v_texCoord; out vec4 fragColor; void main() { vec4 source = texture(u_sourceTexture, v_texCoord); fragColor = vec4(source.rgb, 1.0); } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createAlphaProgram(){let t=this.createVertexShader(),e=this.createShader(this.gl.FRAGMENT_SHADER,`#version 300 es precision highp float; uniform sampler2D u_sourceTexture; uniform vec2 u_resolution; // The width and height of the canvas in vec2 v_texCoord; out vec4 fragColor; // This function determines the value for a single byte in the YUV stream float getByteValue(float byteOffset) { float width = u_resolution.x; float height = u_resolution.y; float yPlaneSize = width * height; if (byteOffset < yPlaneSize) { // This byte is in the luma plane. Find the corresponding pixel coordinates to sample from float y = floor(byteOffset / width); float x = mod(byteOffset, width); // Add 0.5 to sample the center of the texel vec2 sampleCoord = (vec2(x, y) + 0.5) / u_resolution; // The luma value is the alpha from the source texture return texture(u_sourceTexture, sampleCoord).a; } else { // Write a fixed value for chroma and beyond return 128.0 / 255.0; } } void main() { // Each fragment writes 4 bytes (R, G, B, A) float pixelIndex = floor(gl_FragCoord.y) * u_resolution.x + floor(gl_FragCoord.x); float baseByteOffset = pixelIndex * 4.0; vec4 result; for (int i = 0; i < 4; i++) { float currentByteOffset = baseByteOffset + float(i); result[i] = getByteValue(currentByteOffset); } fragColor = result; } `),r=this.gl.createProgram();return this.gl.attachShader(r,t),this.gl.attachShader(r,e),this.gl.linkProgram(r),r}createShader(t,e){let r=this.gl.createShader(t);return this.gl.shaderSource(r,e),this.gl.compileShader(r),this.gl.getShaderParameter(r,this.gl.COMPILE_STATUS)||console.error("Shader compile error:",this.gl.getShaderInfoLog(r)),r}createVAO(){let t=this.gl.createVertexArray();this.gl.bindVertexArray(t);let e=new Float32Array([-1,-1,0,1,1,-1,1,1,-1,1,0,0,1,1,1,0]),r=this.gl.createBuffer();this.gl.bindBuffer(this.gl.ARRAY_BUFFER,r),this.gl.bufferData(this.gl.ARRAY_BUFFER,e,this.gl.STATIC_DRAW);let n=this.gl.getAttribLocation(this.colorProgram,"a_position"),a=this.gl.getAttribLocation(this.colorProgram,"a_texCoord");return this.gl.enableVertexAttribArray(n),this.gl.vertexAttribPointer(n,2,this.gl.FLOAT,!1,16,0),this.gl.enableVertexAttribArray(a),this.gl.vertexAttribPointer(a,2,this.gl.FLOAT,!1,16,8),t}createTexture(){let t=this.gl.createTexture();return this.gl.bindTexture(this.gl.TEXTURE_2D,t),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,this.gl.CLAMP_TO_EDGE),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MIN_FILTER,this.gl.LINEAR),this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_MAG_FILTER,this.gl.LINEAR),t}updateTexture(t){this.lastFrame!==t&&((t.displayWidth!==this.canvas.width||t.displayHeight!==this.canvas.height)&&(this.canvas.width=t.displayWidth,this.canvas.height=t.displayHeight),this.gl.activeTexture(this.gl.TEXTURE0),this.gl.bindTexture(this.gl.TEXTURE_2D,this.sourceTexture),this.gl.texImage2D(this.gl.TEXTURE_2D,0,this.gl.RGBA,this.gl.RGBA,this.gl.UNSIGNED_BYTE,t),this.lastFrame=t)}extractColor(t){return this.updateTexture(t),this.gl.useProgram(this.colorProgram),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4),new VideoFrame(this.canvas,{timestamp:t.timestamp,duration:t.duration??void 0,alpha:"discard"})}extractAlpha(t){this.updateTexture(t),this.gl.useProgram(this.alphaProgram),this.gl.uniform2f(this.alphaResolutionLocation,this.canvas.width,this.canvas.height),this.gl.viewport(0,0,this.canvas.width,this.canvas.height),this.gl.clear(this.gl.COLOR_BUFFER_BIT),this.gl.bindVertexArray(this.vao),this.gl.drawArrays(this.gl.TRIANGLE_STRIP,0,4);let{width:e,height:r}=this.canvas,n=Math.ceil(e/2)*Math.ceil(r/2),a=e*r+n*2,s=Math.ceil(a/(e*4)),o=new Uint8Array(4*e*s);this.gl.readPixels(0,0,e,s,this.gl.RGBA,this.gl.UNSIGNED_BYTE,o),o=o.subarray(0,a),p(o[e*r]===128),p(o[o.length-1]===128);let c={format:"I420",codedWidth:e,codedHeight:r,timestamp:t.timestamp,duration:t.duration??void 0,transfer:[o.buffer]};return new VideoFrame(o,c)}close(){this.gl.getExtension("WEBGL_lose_context")?.loseContext(),this.gl=null}},Gr=class extends At{constructor(t){Ta(t),super(t.codec),this._encoder=new zi(this,t)}add(t,e){if(!(t instanceof pe))throw new TypeError("videoSample must be a VideoSample.");return this._encoder.add(t,!1,e)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},Qs=class extends At{constructor(t,e){if(!(typeof HTMLCanvasElement<"u"&&t instanceof HTMLCanvasElement)&&!(typeof OffscreenCanvas<"u"&&t instanceof OffscreenCanvas))throw new TypeError("canvas must be an HTMLCanvasElement or OffscreenCanvas.");Ta(e),super(e.codec),this._encoder=new zi(this,e),this._canvas=t}add(t,e=0,r){if(!Number.isFinite(t)||t<0)throw new TypeError("timestamp must be a non-negative number.");if(!Number.isFinite(e)||e<0)throw new TypeError("duration must be a non-negative number.");let n=new pe(this._canvas,{timestamp:t,duration:e});return this._encoder.add(n,!0,r)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},$s=class extends At{constructor(e,r){if(!(e instanceof MediaStreamTrack)||e.kind!=="video")throw new TypeError("track must be a video MediaStreamTrack.");Ta(r),r={...r,latencyMode:"realtime"};super(r.codec);this._abortController=null;this._workerTrackId=null;this._workerListener=null;this._promiseWithResolvers=Y();this._errorPromiseAccessed=!1;this._paused=!1;this._lastSampleTimestamp=null;this._pauseOffset=0;this._encoder=new zi(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly."),this._abortController=new AbortController;let e=null,r=!1,n=a=>{if(r){a.close();return}let s=a.timestamp/1e6;if(this._paused){if(e!==null){if(this._lastSampleTimestamp!==null){let u=s-this._lastSampleTimestamp;this._pauseOffset-=u}this._lastSampleTimestamp=s}a.close();return}if(e===null){e=s;let c=this._connectedTrack.output._muxer;c.firstMediaStreamTimestamp===null?(c.firstMediaStreamTimestamp=performance.now()/1e3,this._timestampOffset=-e):this._timestampOffset=performance.now()/1e3-c.firstMediaStreamTimestamp-e}if(this._lastSampleTimestamp=s,this._encoder.getQueueSize()>=4){a.close();return}let o=new pe(a,{timestamp:s+this._pauseOffset});this._encoder.add(o,!0).catch(c=>{r=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(c),this._workerTrackId!==null&&Ks({type:"stopTrack",trackId:this._workerTrackId})})};if(typeof MediaStreamTrackProcessor<"u"){let a=new MediaStreamTrackProcessor({track:this._track}),s=new WritableStream({write:n});a.readable.pipeTo(s,{signal:this._abortController.signal}).catch(o=>{o instanceof DOMException&&o.name==="AbortError"||this._promiseWithResolvers.reject(o)})}else if(await Vl())this._workerTrackId=Ol++,Ks({type:"videoTrack",trackId:this._workerTrackId,track:this._track}),this._workerListener=s=>{let o=s.data;o.type==="videoFrame"&&o.trackId===this._workerTrackId?n(o.videoFrame):o.type==="error"&&o.trackId===this._workerTrackId&&this._promiseWithResolvers.reject(o.error)},Ve.addEventListener("message",this._workerListener);else throw new Error("MediaStreamTrackProcessor is required but not supported by this browser.")}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&(this._abortController.abort(),this._abortController=null),this._workerTrackId!==null&&(p(this._workerListener),Ks({type:"stopTrack",trackId:this._workerTrackId}),await new Promise(r=>{let n=a=>{let s=a.data;s.type==="trackStopped"&&s.trackId===this._workerTrackId&&(p(this._workerListener),Ve.removeEventListener("message",this._workerListener),Ve.removeEventListener("message",n),r())};Ve.addEventListener("message",n)})),await this._encoder.flushAndClose(e)}},It=class extends Kr{constructor(e){super();this._connectedTrack=null;if(!ue.includes(e))throw new TypeError(`Invalid audio codec '${e}'. Must be one of: ${ue.join(", ")}.`);this._codec=e}},Ni=class extends It{constructor(t){super(t)}add(t,e){if(!(t instanceof W))throw new TypeError("packet must be an EncodedPacket.");if(t.isMetadataOnly)throw new TypeError("Metadata-only packets cannot be added.");if(e!==void 0&&(!e||typeof e!="object"))throw new TypeError("meta, when provided, must be an object.");return this._ensureValidAdd(),this._connectedTrack.output._muxer.addEncodedAudioPacket(this._connectedTrack,t,e)}},Li=class{constructor(t,e){this.source=t;this.encodingConfig=e;this.ensureEncoderPromise=null;this.encoderInitialized=!1;this.encoder=null;this.muxer=null;this.lastNumberOfChannels=null;this.lastSampleRate=null;this.isPcmEncoder=!1;this.outputSampleSize=null;this.writeOutputValue=null;this.customEncoder=null;this.customEncoderCallSerializer=new Et;this.customEncoderQueueSize=0;this.lastEndSampleIndex=null;this.error=null}async add(t,e){try{if(this.checkForEncoderError(),this.source._ensureValidAdd(),this.lastNumberOfChannels!==null&&this.lastSampleRate!==null){if(t.numberOfChannels!==this.lastNumberOfChannels||t.sampleRate!==this.lastSampleRate)throw new Error(`Audio parameters must remain constant. Expected ${this.lastNumberOfChannels} channels at ${this.lastSampleRate} Hz, got ${t.numberOfChannels} channels at ${t.sampleRate} Hz.`)}else this.lastNumberOfChannels=t.numberOfChannels,this.lastSampleRate=t.sampleRate;this.encoderInitialized||(this.ensureEncoderPromise||this.ensureEncoder(t),this.encoderInitialized||await this.ensureEncoderPromise),p(this.encoderInitialized);{let r=Math.round(t.timestamp*t.sampleRate),n=Math.round((t.timestamp+t.duration)*t.sampleRate);if(this.lastEndSampleIndex===null)this.lastEndSampleIndex=n;else{let a=r-this.lastEndSampleIndex;if(a>=64){let s=new Te({data:new Float32Array(a*t.numberOfChannels),format:"f32-planar",sampleRate:t.sampleRate,numberOfChannels:t.numberOfChannels,numberOfFrames:a,timestamp:this.lastEndSampleIndex/t.sampleRate});await this.add(s,!0)}this.lastEndSampleIndex+=t.numberOfFrames}}if(this.customEncoder){this.customEncoderQueueSize++;let r=t.clone(),n=this.customEncoderCallSerializer.call(()=>this.customEncoder.encode(r)).then(()=>this.customEncoderQueueSize--).catch(a=>this.error??=a).finally(()=>{r.close()});this.customEncoderQueueSize>=4&&await n,await this.muxer.mutex.currentPromise}else if(this.isPcmEncoder)await this.doPcmEncoding(t,e);else{p(this.encoder);let r=t.toAudioData();this.encoder.encode(r),r.close(),e&&t.close(),this.encoder.encodeQueueSize>=4&&await new Promise(n=>this.encoder.addEventListener("dequeue",n,{once:!0})),await this.muxer.mutex.currentPromise}}finally{e&&t.close()}}async doPcmEncoding(t,e){p(this.outputSampleSize),p(this.writeOutputValue);let{numberOfChannels:r,numberOfFrames:n,sampleRate:a,timestamp:s}=t,o=2048,c=[];for(let m=0;m{let{numberOfChannels:e,sampleRate:r}=t,n=wa({numberOfChannels:e,sampleRate:r,...this.encodingConfig});this.encodingConfig.onEncoderConfig?.(n);let a=rr.find(s=>s.supports(this.encodingConfig.codec,n));if(a)this.customEncoder=new a,this.customEncoder.codec=this.encodingConfig.codec,this.customEncoder.config=n,this.customEncoder.onPacket=(s,o)=>{if(!(s instanceof W))throw new TypeError("The first argument passed to onPacket must be an EncodedPacket.");if(o!==void 0&&(!o||typeof o!="object"))throw new TypeError("The second argument passed to onPacket must be an object or undefined.");this.encodingConfig.onEncodedPacket?.(s,o),this.muxer.addEncodedAudioPacket(this.source._connectedTrack,s,o).catch(c=>{this.error??=c})},await this.customEncoder.init();else if(Z.includes(this.encodingConfig.codec))this.initPcmEncoder();else{if(typeof AudioEncoder>"u")throw new Error("AudioEncoder is not supported by this browser.");if(!(await AudioEncoder.isConfigSupported(n)).supported)throw new Error(`This specific encoder configuration (${n.codec}, ${n.bitrate} bps, ${n.numberOfChannels} channels, ${n.sampleRate} Hz) is not supported by this browser. Consider using another codec or changing your audio parameters.`);let o=new Error("Encoding error").stack;this.encoder=new AudioEncoder({output:(c,u)=>{if(this.encodingConfig.codec==="aac"&&u?.decoderConfig){let l=!1;if(!u.decoderConfig.description||u.decoderConfig.description.byteLength<2?l=!0:l=ht(H(u.decoderConfig.description)).objectType===0,l){let m=Number(K(n.codec.split(".")));u.decoderConfig.description=yr({objectType:m,numberOfChannels:u.decoderConfig.numberOfChannels,sampleRate:u.decoderConfig.sampleRate})}}let d=W.fromEncodedChunk(c);this.encodingConfig.onEncodedPacket?.(d,u),this.muxer.addEncodedAudioPacket(this.source._connectedTrack,d,u).catch(l=>{this.error??=l})},error:c=>{c.stack=o,this.error??=c}}),this.encoder.configure(n)}p(this.source._connectedTrack),this.muxer=this.source._connectedTrack.output._muxer,this.encoderInitialized=!0})()}initPcmEncoder(){this.isPcmEncoder=!0;let t=this.encodingConfig.codec,{dataType:e,sampleSize:r,littleEndian:n}=be(t);switch(this.outputSampleSize=r,r){case 1:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint8(s,ae((o+1)*127.5,0,255)):e==="signed"?this.writeOutputValue=(a,s,o)=>{a.setInt8(s,ae(Math.round(o*128),-128,127))}:e==="ulaw"?this.writeOutputValue=(a,s,o)=>{let c=ae(Math.floor(o*32767),-32768,32767);a.setUint8(s,Ko(c))}:e==="alaw"?this.writeOutputValue=(a,s,o)=>{let c=ae(Math.floor(o*32767),-32768,32767);a.setUint8(s,Qo(c))}:p(!1);break;case 2:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint16(s,ae((o+1)*32767.5,0,65535),n):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt16(s,ae(Math.round(o*32767),-32768,32767),n):p(!1);break;case 3:e==="unsigned"?this.writeOutputValue=(a,s,o)=>Yt(a,s,ae((o+1)*83886075e-1,0,16777215),n):e==="signed"?this.writeOutputValue=(a,s,o)=>po(a,s,ae(Math.round(o*8388607),-8388608,8388607),n):p(!1);break;case 4:e==="unsigned"?this.writeOutputValue=(a,s,o)=>a.setUint32(s,ae((o+1)*21474836475e-1,0,4294967295),n):e==="signed"?this.writeOutputValue=(a,s,o)=>a.setInt32(s,ae(Math.round(o*2147483647),-2147483648,2147483647),n):e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat32(s,o,n):p(!1);break;case 8:e==="float"?this.writeOutputValue=(a,s,o)=>a.setFloat64(s,o,n):p(!1);break;default:J(r),p(!1)}}async flushAndClose(t){t||this.checkForEncoderError(),this.customEncoder?(t||this.customEncoderCallSerializer.call(()=>this.customEncoder.flush()),await this.customEncoderCallSerializer.call(()=>this.customEncoder.close())):this.encoder&&(t||await this.encoder.flush(),this.encoder.state!=="closed"&&this.encoder.close()),t||this.checkForEncoderError()}getQueueSize(){return this.customEncoder?this.customEncoderQueueSize:this.isPcmEncoder?0:this.encoder?.encodeQueueSize??0}checkForEncoderError(){if(this.error)throw this.error}},Qr=class extends It{constructor(t){Sa(t),super(t.codec),this._encoder=new Li(this,t)}add(t){if(!(t instanceof Te))throw new TypeError("audioSample must be an AudioSample.");return this._encoder.add(t,!1)}_flushAndClose(t){return this._encoder.flushAndClose(t)}},Xs=class extends It{constructor(e){Sa(e);super(e.codec);this._accumulatedTime=0;this._encoder=new Li(this,e)}async add(e){if(!(e instanceof AudioBuffer))throw new TypeError("audioBuffer must be an AudioBuffer.");let r=Te._fromAudioBuffer(e,this._accumulatedTime);this._accumulatedTime+=e.duration;for(let n of r)await this._encoder.add(n,!0)}_flushAndClose(e){return this._encoder.flushAndClose(e)}},Ys=class extends It{constructor(e,r){if(!(e instanceof MediaStreamTrack)||e.kind!=="audio")throw new TypeError("track must be an audio MediaStreamTrack.");Sa(r);super(r.codec);this._abortController=null;this._audioContext=null;this._scriptProcessorNode=null;this._promiseWithResolvers=Y();this._errorPromiseAccessed=!1;this._paused=!1;this._lastSampleTimestamp=null;this._pauseOffset=0;this._encoder=new Li(this,r),this._track=e}get errorPromise(){return this._errorPromiseAccessed=!0,this._promiseWithResolvers.promise}get paused(){return this._paused}async _start(){this._errorPromiseAccessed||console.warn("Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly."),this._abortController=new AbortController;let e=null,r=!1,n=a=>{if(r){a.close();return}let s=a.timestamp;if(this._paused){if(e!==null){if(this._lastSampleTimestamp!==null){let c=s-this._lastSampleTimestamp;this._pauseOffset-=c}this._lastSampleTimestamp=s}a.close();return}if(e===null){e=a.timestamp;let o=this._connectedTrack.output._muxer;o.firstMediaStreamTimestamp===null?(o.firstMediaStreamTimestamp=performance.now()/1e3,this._timestampOffset=-e):this._timestampOffset=performance.now()/1e3-o.firstMediaStreamTimestamp-e}if(this._lastSampleTimestamp=s,this._encoder.getQueueSize()>=4){a.close();return}a.setTimestamp(s+this._pauseOffset),this._encoder.add(a,!0).catch(o=>{r=!0,this._abortController?.abort(),this._promiseWithResolvers.reject(o),this._audioContext?.suspend()})};if(typeof MediaStreamTrackProcessor<"u"){let a=new MediaStreamTrackProcessor({track:this._track}),s=new WritableStream({write:o=>n(new Te(o))});a.readable.pipeTo(s,{signal:this._abortController.signal}).catch(o=>{o instanceof DOMException&&o.name==="AbortError"||this._promiseWithResolvers.reject(o)})}else{let a=window.AudioContext||window.webkitAudioContext;this._audioContext=new a({sampleRate:this._track.getSettings().sampleRate});let s=this._audioContext.createMediaStreamSource(new MediaStream([this._track]));this._scriptProcessorNode=this._audioContext.createScriptProcessor(4096),this._audioContext.state==="suspended"&&await this._audioContext.resume(),s.connect(this._scriptProcessorNode),this._scriptProcessorNode.connect(this._audioContext.destination);let o=0;this._scriptProcessorNode.onaudioprocess=c=>{let u=Te._fromAudioBuffer(c.inputBuffer,o);o+=c.inputBuffer.duration;for(let d of u)n(d)}}}pause(){this._paused=!0}resume(){this._paused=!1}async _flushAndClose(e){this._abortController&&(this._abortController.abort(),this._abortController=null),this._audioContext&&(p(this._scriptProcessorNode),this._scriptProcessorNode.disconnect(),await this._audioContext.suspend()),await this._encoder.flushAndClose(e)}},Dl=()=>{let i=(r,n)=>{n?self.postMessage(r,{transfer:n}):self.postMessage(r)};i({type:"support",supported:typeof MediaStreamTrackProcessor<"u"});let t=new Map,e=new Map;self.addEventListener("message",r=>{let n=r.data;switch(n.type){case"videoTrack":{e.set(n.trackId,n.track);let a=new MediaStreamTrackProcessor({track:n.track}),s=new WritableStream({write:c=>{if(!e.has(n.trackId)){c.close();return}i({type:"videoFrame",trackId:n.trackId,videoFrame:c},[c])}}),o=new AbortController;t.set(n.trackId,o),a.readable.pipeTo(s,{signal:o.signal}).catch(c=>{c instanceof DOMException&&c.name==="AbortError"||i({type:"error",trackId:n.trackId,error:c})})}break;case"stopTrack":{let a=t.get(n.trackId);a&&(a.abort(),t.delete(n.trackId)),e.get(n.trackId)?.stop(),e.delete(n.trackId),i({type:"trackStopped",trackId:n.trackId})}break;default:J(n)}})},Ol=0,Ve=null,Ul=()=>{let i=new Blob([`(${Dl.toString()})()`],{type:"application/javascript"}),t=URL.createObjectURL(i);Ve=new Worker(t)},js=null,Vl=async()=>js!==null?js:(Ve||Ul(),new Promise(i=>{p(Ve);let t=e=>{let r=e.data;r.type==="support"&&(js=r.supported,Ve.removeEventListener("message",t),i(r.supported))};Ve.addEventListener("message",t)})),Ks=(i,t)=>{p(Ve),t?Ve.postMessage(i,t):Ve.postMessage(i)},$r=class extends Kr{constructor(e){super();this._connectedTrack=null;if(!_e.includes(e))throw new TypeError(`Invalid subtitle codec '${e}'. Must be one of: ${_e.join(", ")}.`);this._codec=e}},Zs=class extends $r{constructor(e){super(e);this._error=null;this._parser=new na({codec:e,output:(r,n)=>{this._connectedTrack?.output._muxer.addSubtitleCue(this._connectedTrack,r,n).catch(a=>{this._error??=a})}})}add(e){if(typeof e!="string")throw new TypeError("text must be a string.");return this._checkForError(),this._ensureValidAdd(),this._parser.parse(e),this._connectedTrack.output._muxer.mutex.currentPromise}_checkForError(){if(this._error)throw this._error}async _flushAndClose(e){e||this._checkForError()}};var gu=["video","audio","subtitle"],Js=i=>{if(!i||typeof i!="object")throw new TypeError("metadata must be an object.");if(i.languageCode!==void 0&&!lt(i.languageCode))throw new TypeError("metadata.languageCode, when provided, must be a three-letter, ISO 639-2/T language code.");if(i.name!==void 0&&typeof i.name!="string")throw new TypeError("metadata.name, when provided, must be a string.");if(i.disposition!==void 0&&xo(i.disposition),i.maximumPacketCount!==void 0&&(!Number.isInteger(i.maximumPacketCount)||i.maximumPacketCount<0))throw new TypeError("metadata.maximumPacketCount, when provided, must be a non-negative integer.")},Xr=class{constructor(t){this.state="pending";this._tracks=[];this._startPromise=null;this._cancelPromise=null;this._finalizePromise=null;this._mutex=new Pe;this._metadataTags={};if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.format instanceof De))throw new TypeError("options.format must be an OutputFormat.");if(!(t.target instanceof Pt))throw new TypeError("options.target must be a Target.");if(t.target._output)throw new Error("Target is already used for another output.");t.target._output=this,this.format=t.format,this.target=t.target,this._writer=t.target._createWriter(),this._muxer=t.format._createMuxer(this)}addVideoTrack(t,e={}){if(!(t instanceof At))throw new TypeError("source must be a VideoSource.");if(Js(e),e.rotation!==void 0&&![0,90,180,270].includes(e.rotation))throw new TypeError(`Invalid video rotation: ${e.rotation}. Has to be 0, 90, 180 or 270.`);if(!this.format.supportsVideoRotationMetadata&&e.rotation)throw new Error(`${this.format._name} does not support video rotation metadata.`);if(e.frameRate!==void 0&&(!Number.isFinite(e.frameRate)||e.frameRate<=0))throw new TypeError(`Invalid video frame rate: ${e.frameRate}. Must be a positive number.`);this._addTrack("video",t,e)}addAudioTrack(t,e={}){if(!(t instanceof It))throw new TypeError("source must be an AudioSource.");Js(e),this._addTrack("audio",t,e)}addSubtitleTrack(t,e={}){if(!(t instanceof $r))throw new TypeError("source must be a SubtitleSource.");Js(e),this._addTrack("subtitle",t,e)}setMetadataTags(t){if(ei(t),this.state!=="pending")throw new Error("Cannot set metadata tags after output has been started or canceled.");this._metadataTags=t}_addTrack(t,e,r){if(this.state!=="pending")throw new Error("Cannot add track after output has been started or canceled.");if(e._connectedTrack)throw new Error("Source is already used for a track.");let n=this.format.getSupportedTrackCounts(),a=this._tracks.reduce((u,d)=>u+(d.type===t?1:0),0),s=n[t].max;if(a===s)throw new Error(s===0?`${this.format._name} does not support ${t} tracks.`:`${this.format._name} does not support more than ${s} ${t} track${s===1?"":"s"}.`);let o=n.total.max;if(this._tracks.length===o)throw new Error(`${this.format._name} does not support more than ${o} tracks${o===1?"":"s"} in total.`);let c={id:this._tracks.length+1,output:this,type:t,source:e,metadata:r};if(c.type==="video"){let u=this.format.getSupportedVideoCodecs();if(u.length===0)throw new Error(`${this.format._name} does not support video tracks.`+this.format._codecUnsupportedHint(c.source._codec));if(!u.includes(c.source._codec))throw new Error(`Codec '${c.source._codec}' cannot be contained within ${this.format._name}. Supported video codecs are: ${u.map(d=>`'${d}'`).join(", ")}.`+this.format._codecUnsupportedHint(c.source._codec))}else if(c.type==="audio"){let u=this.format.getSupportedAudioCodecs();if(u.length===0)throw new Error(`${this.format._name} does not support audio tracks.`+this.format._codecUnsupportedHint(c.source._codec));if(!u.includes(c.source._codec))throw new Error(`Codec '${c.source._codec}' cannot be contained within ${this.format._name}. Supported audio codecs are: ${u.map(d=>`'${d}'`).join(", ")}.`+this.format._codecUnsupportedHint(c.source._codec))}else if(c.type==="subtitle"){let u=this.format.getSupportedSubtitleCodecs();if(u.length===0)throw new Error(`${this.format._name} does not support subtitle tracks.`+this.format._codecUnsupportedHint(c.source._codec));if(!u.includes(c.source._codec))throw new Error(`Codec '${c.source._codec}' cannot be contained within ${this.format._name}. Supported subtitle codecs are: ${u.map(d=>`'${d}'`).join(", ")}.`+this.format._codecUnsupportedHint(c.source._codec))}this._tracks.push(c),e._connectedTrack=c}async start(){let t=this.format.getSupportedTrackCounts();for(let r of gu){let n=this._tracks.reduce((s,o)=>s+(o.type===r?1:0),0),a=t[r].min;if(n{this.state="started",this._writer.start();let r=await this._mutex.acquire();await this._muxer.start();let n=this._tracks.map(a=>a.source._start());await Promise.all(n),r()})()}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"){console.warn("Output has already been finalized.");return}return this._cancelPromise=(async()=>{this.state="canceled";let t=await this._mutex.acquire(),e=this._tracks.map(r=>r.source._flushOrWaitForOngoingClose(!0));await Promise.all(e),await this._writer.close(),t()})()}async finalize(){if(this.state==="pending")throw new Error("Cannot finalize before starting.");if(this.state==="canceled")throw new Error("Cannot finalize after canceling.");return this._finalizePromise?(console.warn("Output has already been finalized."),this._finalizePromise):this._finalizePromise=(async()=>{this.state="finalizing";let t=await this._mutex.acquire(),e=this._tracks.map(r=>r.source._flushOrWaitForOngoingClose(!1));await Promise.all(e),await this._muxer.finalize(),await this._writer.flush(),await this._writer.finalize(),this.state="finalized",t()})()}};var bu=i=>{if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("options.video, when provided, must be an object.");if(i?.discard!==void 0&&typeof i.discard!="boolean")throw new TypeError("options.video.discard, when provided, must be a boolean.");if(i?.forceTranscode!==void 0&&typeof i.forceTranscode!="boolean")throw new TypeError("options.video.forceTranscode, when provided, must be a boolean.");if(i?.codec!==void 0&&!ce.includes(i.codec))throw new TypeError(`options.video.codec, when provided, must be one of: ${ce.join(", ")}.`);if(i?.bitrate!==void 0&&!(i.bitrate instanceof ke)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("options.video.bitrate, when provided, must be a positive integer or a quality.");if(i?.width!==void 0&&(!Number.isInteger(i.width)||i.width<=0))throw new TypeError("options.video.width, when provided, must be a positive integer.");if(i?.height!==void 0&&(!Number.isInteger(i.height)||i.height<=0))throw new TypeError("options.video.height, when provided, must be a positive integer.");if(i?.fit!==void 0&&!["fill","contain","cover"].includes(i.fit))throw new TypeError("options.video.fit, when provided, must be one of 'fill', 'contain', or 'cover'.");if(i?.width!==void 0&&i.height!==void 0&&i.fit===void 0)throw new TypeError("When both options.video.width and options.video.height are provided, options.video.fit must also be provided.");if(i?.rotate!==void 0&&![0,90,180,270].includes(i.rotate))throw new TypeError("options.video.rotate, when provided, must be 0, 90, 180 or 270.");if(i?.allowRotationMetadata!==void 0&&typeof i.allowRotationMetadata!="boolean")throw new TypeError("options.video.allowRotationMetadata, when provided, must be a boolean.");if(i?.crop!==void 0&&li(i.crop,"options.video."),i?.frameRate!==void 0&&(!Number.isFinite(i.frameRate)||i.frameRate<=0))throw new TypeError("options.video.frameRate, when provided, must be a finite positive number.");if(i?.alpha!==void 0&&!["discard","keep"].includes(i.alpha))throw new TypeError("options.video.alpha, when provided, must be either 'discard' or 'keep'.");if(i?.keyFrameInterval!==void 0&&(!Number.isFinite(i.keyFrameInterval)||i.keyFrameInterval<0))throw new TypeError("options.video.keyFrameInterval, when provided, must be a non-negative number.");if(i?.process!==void 0&&typeof i.process!="function")throw new TypeError("options.video.process, when provided, must be a function.");if(i?.processedWidth!==void 0&&(!Number.isInteger(i.processedWidth)||i.processedWidth<=0))throw new TypeError("options.video.processedWidth, when provided, must be a positive integer.");if(i?.processedHeight!==void 0&&(!Number.isInteger(i.processedHeight)||i.processedHeight<=0))throw new TypeError("options.video.processedHeight, when provided, must be a positive integer.");if(i?.hardwareAcceleration!==void 0&&!["no-preference","prefer-hardware","prefer-software"].includes(i.hardwareAcceleration))throw new TypeError("options.video.hardwareAcceleration, when provided, must be 'no-preference', 'prefer-hardware' or 'prefer-software'.")},ku=i=>{if(i!==void 0&&(!i||typeof i!="object"))throw new TypeError("options.audio, when provided, must be an object.");if(i?.discard!==void 0&&typeof i.discard!="boolean")throw new TypeError("options.audio.discard, when provided, must be a boolean.");if(i?.forceTranscode!==void 0&&typeof i.forceTranscode!="boolean")throw new TypeError("options.audio.forceTranscode, when provided, must be a boolean.");if(i?.codec!==void 0&&!ue.includes(i.codec))throw new TypeError(`options.audio.codec, when provided, must be one of: ${ue.join(", ")}.`);if(i?.bitrate!==void 0&&!(i.bitrate instanceof ke)&&(!Number.isInteger(i.bitrate)||i.bitrate<=0))throw new TypeError("options.audio.bitrate, when provided, must be a positive integer or a quality.");if(i?.numberOfChannels!==void 0&&(!Number.isInteger(i.numberOfChannels)||i.numberOfChannels<=0))throw new TypeError("options.audio.numberOfChannels, when provided, must be a positive integer.");if(i?.sampleRate!==void 0&&(!Number.isInteger(i.sampleRate)||i.sampleRate<=0))throw new TypeError("options.audio.sampleRate, when provided, must be a positive integer.");if(i?.process!==void 0&&typeof i.process!="function")throw new TypeError("options.audio.process, when provided, must be a function.");if(i?.processedNumberOfChannels!==void 0&&(!Number.isInteger(i.processedNumberOfChannels)||i.processedNumberOfChannels<=0))throw new TypeError("options.audio.processedNumberOfChannels, when provided, must be a positive integer.");if(i?.processedSampleRate!==void 0&&(!Number.isInteger(i.processedSampleRate)||i.processedSampleRate<=0))throw new TypeError("options.audio.processedSampleRate, when provided, must be a positive integer.")},eo=2,to=48e3,ro=class i{constructor(t){this._addedCounts={video:0,audio:0,subtitle:0};this._totalTrackCount=0;this._trackPromises=[];this._executed=!1;this._synchronizer=new io;this._totalDuration=null;this._maxTimestamps=new Map;this._canceled=!1;this.onProgress=void 0;this._computeProgress=!1;this._lastProgress=0;this.isValid=!1;this.utilizedTracks=[];this.discardedTracks=[];if(!t||typeof t!="object")throw new TypeError("options must be an object.");if(!(t.input instanceof vi))throw new TypeError("options.input must be an Input.");if(!(t.output instanceof Xr))throw new TypeError("options.output must be an Output.");if(t.output._tracks.length>0||Object.keys(t.output._metadataTags).length>0||t.output.state!=="pending")throw new TypeError("options.output must be fresh: no tracks or metadata tags added and not started.");if(typeof t.video!="function"&&bu(t.video),typeof t.audio!="function"&&ku(t.audio),t.trim!==void 0&&(!t.trim||typeof t.trim!="object"))throw new TypeError("options.trim, when provided, must be an object.");if(t.trim?.start!==void 0&&!Number.isFinite(t.trim.start))throw new TypeError("options.trim.start, when provided, must be a finite number.");if(t.trim?.end!==void 0&&!Number.isFinite(t.trim.end))throw new TypeError("options.trim.end, when provided, must be a finite number.");if(t.trim?.start!==void 0&&t.trim.end!==void 0&&t.trim.start>=t.trim.end)throw new TypeError("options.trim.start must be less than options.trim.end.");if(t.tags!==void 0&&(typeof t.tags!="object"||!t.tags)&&typeof t.tags!="function")throw new TypeError("options.tags, when provided, must be an object or a function.");if(typeof t.tags=="object"&&ei(t.tags),t.showWarnings!==void 0&&typeof t.showWarnings!="boolean")throw new TypeError("options.showWarnings, when provided, must be a boolean.");this._options=t,this.input=t.input,this.output=t.output;let{promise:e,resolve:r}=Y();this._started=e,this._start=r}static async init(t){let e=new i(t);return await e._init(),e}async _init(){this._startTimestamp=this._options.trim?.start??Math.max(await this.input.getFirstTimestamp(),0),this._endTimestamp=Math.max(this._options.trim?.end??1/0,this._startTimestamp);let t=await this.input.getTracks(),e=this.output.format.getSupportedTrackCounts(),r=1,n=1;for(let u of t){let d;if(u.isVideoTrack()?this._options.video&&(typeof this._options.video=="function"?(d=await this._options.video(u,r),bu(d),r++):d=this._options.video):u.isAudioTrack()?this._options.audio&&(typeof this._options.audio=="function"?(d=await this._options.audio(u,n),ku(d),n++):d=this._options.audio):p(!1),d?.discard){this.discardedTracks.push({track:u,reason:"discarded_by_user"});continue}if(this._totalTrackCount===e.total.max){this.discardedTracks.push({track:u,reason:"max_track_count_reached"});continue}if(this._addedCounts[u.type]===e[u.type].max){this.discardedTracks.push({track:u,reason:"max_track_count_of_type_reached"});continue}u.isVideoTrack()?await this._processVideoTrack(u,d??{}):u.isAudioTrack()&&await this._processAudioTrack(u,d??{})}let a=await this.input.getMetadataTags(),s;if(this._options.tags){let u=typeof this._options.tags=="function"?await this._options.tags(a):this._options.tags;ei(u),s=u}else s=a;let o=(await this.input.getFormat()).mimeType===this.output.format.mimeType,c=a.raw===s.raw;if(a.raw&&c&&!o&&delete s.raw,this.output.setMetadataTags(s),this.isValid=this._totalTrackCount>=e.total.min&&this._addedCounts.video>=e.video.min&&this._addedCounts.audio>=e.audio.min&&this._addedCounts.subtitle>=e.subtitle.min,this._options.showWarnings??!0){let u=[],d=this.discardedTracks.filter(l=>l.reason!=="discarded_by_user");d.length>0&&u.push("Some tracks had to be discarded from the conversion:",d),this.isValid||u.push(` `+this._getInvalidityExplanation().join("")),u.length>0&&console.warn(...u)}}_getInvalidityExplanation(){let t=[];if(this.discardedTracks.length===0)t.push("Due to missing tracks, this conversion cannot be executed.");else{let e=this.discardedTracks.every(r=>r.reason==="discarded_by_user"||r.reason==="no_encodable_target_codec");if(t.push("Due to discarded tracks, this conversion cannot be executed."),e){let r=this.discardedTracks.flatMap(n=>n.reason==="discarded_by_user"?[]:n.track.type==="video"?this.output.format.getSupportedVideoCodecs():n.track.type==="audio"?this.output.format.getSupportedAudioCodecs():this.output.format.getSupportedSubtitleCodecs());r.length===1?t.push(` Tracks were discarded because your environment is not able to encode '${r[0]}'.`):t.push(` Tracks were discarded because your environment is not able to encode any of the following codecs: ${r.map(n=>`'${n}'`).join(", ")}.`),r.includes("mp3")&&t.push(` The @mediabunny/mp3-encoder extension package provides support for encoding MP3.`),(r.includes("ac3")||r.includes("eac3"))&&t.push(` The @mediabunny/ac3 extension package provides support for encoding and decoding AC-3/E-AC-3.`)}else t.push(` Check the discardedTracks field for more info.`)}return t}async execute(){if(!this.isValid)throw new Error(`Cannot execute this conversion because its output configuration is invalid. Make sure to always check the isValid field before executing a conversion. `+this._getInvalidityExplanation().join(""));if(this._executed)throw new Error("Conversion cannot be executed twice.");if(this._executed=!0,this.onProgress){let t=this.utilizedTracks.map(r=>r.computeDuration()),e=Math.max(0,...await Promise.all(t));this._computeProgress=!0,this._totalDuration=Math.min(e-this._startTimestamp,this._endTimestamp-this._startTimestamp);for(let r of this.utilizedTracks)this._maxTimestamps.set(r.id,0);this.onProgress?.(0)}await this.output.start(),this._start();try{await Promise.all(this._trackPromises)}catch(t){throw this._canceled||this.cancel(),t}if(this._canceled)throw new Ia;await this.output.finalize(),this._computeProgress&&this.onProgress?.(1)}async cancel(){if(!(this.output.state==="finalizing"||this.output.state==="finalized")){if(this._canceled){console.warn("Conversion already canceled.");return}this._canceled=!0,await this.output.cancel()}}async _processVideoTrack(t,e){let r=t.codec;if(!r){this.discardedTracks.push({track:t,reason:"unknown_source_codec"});return}let n,a=_t(t.rotation+(e.rotate??0)),s=this.output.format.supportsVideoRotationMetadata&&(e.allowRotationMetadata??!0),[o,c]=a%180===0?[t.codedWidth,t.codedHeight]:[t.codedHeight,t.codedWidth],u=e.crop;u&&di(u,o,c);let[d,l]=u?[u.width,u.height]:[o,c],m=d,f=l,g=m/f,b=T=>Math.ceil(T/2)*2;e.width!==void 0&&e.height===void 0?(m=b(e.width),f=b(Math.round(m/g))):e.width===void 0&&e.height!==void 0?(f=b(e.height),m=b(Math.round(f*g))):e.width!==void 0&&e.height!==void 0&&(m=b(e.width),f=b(e.height));let h=await t.getFirstTimestamp(),y=!!e.forceTranscode||h{await this._started;let x=new tt(t),C={decoderConfig:await t.getDecoderConfig()??void 0},_=Number.isFinite(this._endTimestamp)?await x.getPacket(this._endTimestamp,{metadataOnly:!0})??void 0:void 0;for await(let B of x.packets(void 0,_,{verifyKeyPackets:!0})){if(this._canceled)return;let E=B.clone({timestamp:B.timestamp-this._startTimestamp,sideData:w==="discard"?{}:B.sideData});p(E.timestamp>=0),this._reportProgress(t.id,E.timestamp),await T.add(E,C),this._synchronizer.shouldWait(t.id,E.timestamp)&&await this._synchronizer.wait(E.timestamp)}T.close(),this._synchronizer.closeTrack(t.id)})())}else{if(!await t.canDecode()){this.discardedTracks.push({track:t,reason:"undecodable_source_codec"});return}e.codec&&(S=S.filter(B=>B===e.codec));let x=e.bitrate??xa,P=await qs(S,{width:e.process&&e.processedWidth?e.processedWidth:m,height:e.process&&e.processedHeight?e.processedHeight:f,bitrate:x});if(!P){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec"});return}let C={codec:P,bitrate:x,keyFrameInterval:e.keyFrameInterval,sizeChangeBehavior:e.fit??"passThrough",alpha:w,hardwareAcceleration:e.hardwareAcceleration},_=new Gr(C);if(n=_,!k){let B=new Xr({format:new jr,target:new Bi}),E=new Gr(C);B.addVideoTrack(E),await B.start();let z=await new ar(t).getSample(h);if(z)try{await E.add(z),z.close(),await B.finalize()}catch(j){console.info("Error when probing encoder support. Falling back to rerender path.",j),k=!0,B.cancel()}else await B.cancel()}k?this._trackPromises.push((async()=>{await this._started;let E=new pi(t,{width:m,height:f,fit:e.fit??"fill",rotation:a,crop:e.crop,poolSize:1,alpha:w==="keep"}).canvases(this._startTimestamp,this._endTimestamp),F=e.frameRate,z=null,j=null,G=null,$=async ne=>{p(z),p(F!==void 0);let ye=Math.round((ne-j)*F);for(let pr=1;pr{await this._started;let B=new ar(t),E=e.frameRate,F=null,z=null,j=null,G=async $=>{p(F),p(E!==void 0);let ne=Math.round(($-z)*E);for(let ye=1;yeo instanceof pe?o:typeof VideoFrame<"u"&&o instanceof VideoFrame?new pe(o):new pe(o,{timestamp:n.timestamp,duration:n.duration}))}for(let s of a){if(this._canceled)break;await r.add(s),this._synchronizer.shouldWait(t.id,s.timestamp)&&await this._synchronizer.wait(s.timestamp)}for(let s of a)s!==n&&s.close()}async _processAudioTrack(t,e){let r=t.codec;if(!r){this.discardedTracks.push({track:t,reason:"unknown_source_codec"});return}let n,a=t.numberOfChannels,s=t.sampleRate,o=await t.getFirstTimestamp(),c=e.numberOfChannels??a,u=e.sampleRate??s,d=c!==a||u!==s||othis._startTimestamp&&!this.output.format.supportsTimestampedMediaData,l=this.output.format.getSupportedAudioCodecs();if(!e.forceTranscode&&!e.bitrate&&!d&&l.includes(r)&&(!e.codec||e.codec===r)&&!e.process){let m=new Ni(r);n=m,this._trackPromises.push((async()=>{await this._started;let f=new tt(t),b={decoderConfig:await t.getDecoderConfig()??void 0},h=Number.isFinite(this._endTimestamp)?await f.getPacket(this._endTimestamp,{metadataOnly:!0})??void 0:void 0;for await(let y of f.packets(void 0,h)){if(this._canceled)return;let k=y.clone({timestamp:y.timestamp-this._startTimestamp});p(k.timestamp>=0),this._reportProgress(t.id,k.timestamp),await m.add(k,b),this._synchronizer.shouldWait(t.id,k.timestamp)&&await this._synchronizer.wait(k.timestamp)}m.close(),this._synchronizer.closeTrack(t.id)})())}else{if(!await t.canDecode()){this.discardedTracks.push({track:t,reason:"undecodable_source_codec"});return}let f=null;e.codec&&(l=l.filter(h=>h===e.codec));let g=e.bitrate??xa,b=await Ui(l,{numberOfChannels:e.process&&e.processedNumberOfChannels?e.processedNumberOfChannels:c,sampleRate:e.process&&e.processedSampleRate?e.processedSampleRate:u,bitrate:g});if(!b.some(h=>pt.includes(h))&&l.some(h=>pt.includes(h))&&(c!==eo||u!==to)){let y=(await Ui(l,{numberOfChannels:eo,sampleRate:to,bitrate:g})).find(k=>pt.includes(k));y&&(d=!0,f=y,c=eo,u=to)}else f=b[0]??null;if(f===null){this.discardedTracks.push({track:t,reason:"no_encodable_target_codec"});return}if(d)n=this._resampleAudio(t,e,f,c,u,g);else{let h=new Qr({codec:f,bitrate:g});n=h,this._trackPromises.push((async()=>{await this._started;let y=new sr(t);for await(let k of y.samples(void 0,this._endTimestamp)){if(this._canceled){k.close();return}k.setTimestamp(k.timestamp-this._startTimestamp),await this._registerAudioSample(t,e,h,k),k.close()}h.close(),this._synchronizer.closeTrack(t.id)})())}}this.output.addAudioTrack(n,{languageCode:lt(t.languageCode)?t.languageCode:void 0,name:t.name??void 0,disposition:t.disposition}),this._addedCounts.audio++,this._totalTrackCount++,this.utilizedTracks.push(t)}async _registerAudioSample(t,e,r,n){if(this._canceled)return;this._reportProgress(t.id,n.timestamp);let a;if(!e.process)a=[n];else{let s=e.process(n);if(s instanceof Promise&&(s=await s),Array.isArray(s)||(s=s===null?[]:[s]),!s.every(o=>o instanceof Te))throw new TypeError("The audio process function must return an AudioSample, null, or an array of AudioSamples.");a=s}for(let s of a){if(this._canceled)break;await r.add(s),this._synchronizer.shouldWait(t.id,s.timestamp)&&await this._synchronizer.wait(s.timestamp)}for(let s of a)s!==n&&s.close()}_resampleAudio(t,e,r,n,a,s){let o=new Qr({codec:r,bitrate:s});return this._trackPromises.push((async()=>{await this._started;let c=new no({targetNumberOfChannels:n,targetSampleRate:a,startTime:this._startTimestamp,endTime:this._endTimestamp,onSample:async l=>{await this._registerAudioSample(t,e,o,l),l.close()}}),d=new sr(t).samples(this._startTimestamp,this._endTimestamp);for await(let l of d){if(this._canceled){l.close();return}await c.add(l),l.close()}await c.finalize(),o.close(),this._synchronizer.closeTrack(t.id)})()),o}_reportProgress(t,e){if(!this._computeProgress)return;p(this._totalDuration!==null),this._maxTimestamps.set(t,Math.max(e,this._maxTimestamps.get(t)));let r=Math.min(...this._maxTimestamps.values()),n=ae(r/this._totalDuration,0,1);n!==this._lastProgress&&(this._lastProgress=n,this.onProgress?.(n))}},Ia=class extends Error{constructor(t="Conversion has been canceled."){super(t),this.name="ConversionCanceledError"}},yu=5,io=class{constructor(){this.maxTimestamps=new Map;this.resolvers=[]}computeMinAndMaybeResolve(){let t=1/0;for(let[,e]of this.maxTimestamps)t=Math.min(t,e);for(let e=0;e=yu}wait(t){let{promise:e,resolve:r}=Y();return this.resolvers.push({timestamp:t,resolve:r}),e}closeTrack(t){this.maxTimestamps.delete(t),this.computeMinAndMaybeResolve()}},no=class{constructor(t){this.sourceSampleRate=null;this.sourceNumberOfChannels=null;this.targetSampleRate=t.targetSampleRate,this.targetNumberOfChannels=t.targetNumberOfChannels,this.startTime=t.startTime,this.endTime=t.endTime,this.onSample=t.onSample,this.bufferSizeInFrames=Math.floor(this.targetSampleRate*5),this.bufferSizeInSamples=this.bufferSizeInFrames*this.targetNumberOfChannels,this.outputBuffer=new Float32Array(this.bufferSizeInSamples),this.bufferStartFrame=0,this.maxWrittenFrame=-1}doChannelMixerSetup(){p(this.sourceNumberOfChannels!==null);let t=this.sourceNumberOfChannels,e=this.targetNumberOfChannels;t===1&&e===2?this.channelMixer=(r,n)=>r[n*t]:t===1&&e===4?this.channelMixer=(r,n,a)=>r[n*t]*+(a<2):t===1&&e===6?this.channelMixer=(r,n,a)=>r[n*t]*+(a===2):t===2&&e===1?this.channelMixer=(r,n)=>{let a=n*t;return .5*(r[a]+r[a+1])}:t===2&&e===4?this.channelMixer=(r,n,a)=>r[n*t+a]*+(a<2):t===2&&e===6?this.channelMixer=(r,n,a)=>r[n*t+a]*+(a<2):t===4&&e===1?this.channelMixer=(r,n)=>{let a=n*t;return .25*(r[a]+r[a+1]+r[a+2]+r[a+3])}:t===4&&e===2?this.channelMixer=(r,n,a)=>{let s=n*t;return .5*(r[s+a]+r[s+a+2])}:t===4&&e===6?this.channelMixer=(r,n,a)=>{let s=n*t;return a<2?r[s+a]:a===2||a===3?0:r[s+a-2]}:t===6&&e===1?this.channelMixer=(r,n)=>{let a=n*t;return Math.SQRT1_2*(r[a]+r[a+1])+r[a+2]+.5*(r[a+4]+r[a+5])}:t===6&&e===2?this.channelMixer=(r,n,a)=>{let s=n*t;return r[s+a]+Math.SQRT1_2*(r[s+2]+r[s+a+4])}:t===6&&e===4?this.channelMixer=(r,n,a)=>{let s=n*t;return a<2?r[s+a]+Math.SQRT1_2*r[s+2]:r[s+a+2]}:this.channelMixer=(r,n,a)=>a=this.bufferStartFrame+this.bufferSizeInFrames;)await this.finalizeCurrentBuffer(),this.bufferStartFrame+=this.bufferSizeInFrames;let l=d-this.bufferStartFrame;p(l=0&&b=0&&h