@ahmedrowaihi/mediabunny-server 1.56.2-beta.84 → 1.56.2-beta.85

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -2899,6 +2899,13 @@ var MediabunnyServer = (() => {
2899
2899
  }
2900
2900
  return NodeAv4.Codec.findEncoder(codecId);
2901
2901
  };
2902
+ var toFramerateRational = (framerate) => {
2903
+ const ntscNum = Math.round(framerate * 1001);
2904
+ if (ntscNum % 1e3 === 0 && Math.abs(ntscNum / 1001 - framerate) < 1e-4 && !Number.isInteger(framerate)) {
2905
+ return { num: ntscNum, den: 1001 };
2906
+ }
2907
+ return simplifyRational({ num: Math.round(framerate * 1e3), den: 1e3 });
2908
+ };
2902
2909
  var NodeAvVideoEncoder = class extends import_mediabunny3.CustomVideoEncoder {
2903
2910
  constructor() {
2904
2911
  super(...arguments);
@@ -2980,8 +2987,9 @@ var MediabunnyServer = (() => {
2980
2987
  codecContext.height = this.config.height;
2981
2988
  codecContext.pixelFormat = pixelFormat;
2982
2989
  codecContext.timeBase = new NodeAv4.Rational(1, 1e6);
2983
- codecContext.gopSize = 60;
2984
- codecContext.framerate = new NodeAv4.Rational(Math.round(this.config.framerate ?? 0) || 30, 1);
2990
+ codecContext.gopSize = 2 ** 30;
2991
+ const framerate = toFramerateRational(this.config.framerate || 30);
2992
+ codecContext.framerate = new NodeAv4.Rational(framerate.num, framerate.den);
2985
2993
  codecContext.bitRate = this.config.bitrateMode === "quantizer" ? 0n : BigInt(
2986
2994
  this.config.bitrate ?? new import_mediabunny3.Quality("medium")._toVideoBitrate(this.codec, this.config.width, this.config.height)
2987
2995
  );
@@ -2998,12 +3006,14 @@ var MediabunnyServer = (() => {
2998
3006
  }
2999
3007
  const isRealtime = this.config.latencyMode === "realtime";
3000
3008
  if (this.avCodec.name === "libx264") {
3009
+ codecContext.setOption("x264-params", "scenecut=0");
3001
3010
  if (isRealtime) {
3002
3011
  codecContext.setOption("tune", "zerolatency");
3003
3012
  codecContext.setOption("preset", "ultrafast");
3004
3013
  }
3005
3014
  } else if (this.avCodec.name === "libx265") {
3006
- codecContext.setOption("x265-params", "log-level=error");
3015
+ codecContext.setOption("x265-params", "log-level=error:scenecut=0:open-gop=0");
3016
+ codecContext.setOption("forced-idr", "1");
3007
3017
  if (isRealtime) {
3008
3018
  codecContext.setOption("tune", "zerolatency");
3009
3019
  codecContext.setOption("preset", "ultrafast");
@@ -5,6 +5,6 @@
5
5
  * License, v. 2.0. If a copy of the MPL was not distributed with this
6
6
  * file, You can obtain one at https://mozilla.org/MPL/2.0/.
7
7
  */
8
- "use strict";var MediabunnyServer=(()=>{var Dt=Object.create;var ge=Object.defineProperty;var Ot=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var zt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var k=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Xt=(e,r)=>{for(var t in r)ge(e,t,{get:r[t],enumerable:!0})},je=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ht(r))!qt.call(e,i)&&i!==t&&ge(e,i,{get:()=>r[i],enumerable:!(n=Ot(r,i))||n.enumerable});return e};var ne=(e,r,t)=>(t=e!=null?Dt(zt(e)):{},je(r||!e||!e.__esModule?ge(t,"default",{value:e,enumerable:!0}):t,e)),Wt=e=>je(ge({},"__esModule",{value:!0}),e);var Cr={};Xt(Cr,{AvFrameAudioSampleResource:()=>J,AvFrameVideoSampleResource:()=>X,_serverOptions:()=>K,registerMediabunnyServer:()=>hr,toAvFrame:()=>gr});var L=k("mediabunny"),G=ne(k("node-av"));var Ee=k("mediabunny"),C=ne(k("node-av"));var o=ne(k("node-av"));var j={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,prores:o.AV_CODEC_ID_PRORES,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3,dts:o.AV_CODEC_ID_DTS},Ve,Qe=()=>K.hardwareContext!==void 0&&typeof K.hardwareContext!="function"?K.hardwareContext:(Ve===void 0&&(Ve=o.HardwareContext.auto()),Ve),Je=e=>{if(e!==null&&!(e instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},Ne=new Map,Ze=async e=>{if(typeof K.hardwareContext=="function"){let r=await K.hardwareContext(e);return Je(r),r?.getDecoderCodec(e)??null}if(!Ne.has(e)){let r=Qe();Ne.set(e,r?.getDecoderCodec(e)??null)}return Ne.get(e)},Me=new Map,et=async e=>{if(typeof K.hardwareContext=="function"){let r=await K.hardwareContext(e);return Je(r),r?.getEncoderCodec(e)??null}if(!Me.has(e)){let r=Qe();Me.set(e,r?.getEncoderCodec(e)??null)}return Me.get(e)},tt=e=>{switch(e){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},Ce=e=>{switch(e){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},rt=e=>{switch(e){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},be=e=>{switch(e){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},nt=e=>{switch(e){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},xe=e=>{switch(e){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},it=e=>{switch(e){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},ke=e=>{switch(e){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},ot=e=>{switch(e){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},st=e=>{switch(e){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},se=e=>{switch(e){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:e,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},Yt=0x603n,at=e=>{switch(e){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:o.AV_CHANNEL_ORDER_NATIVE,mask:Yt};case 5:return o.AV_CHANNEL_LAYOUT_5POINT0;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:e,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var H=class H{constructor(){}static get level(){return H._level}static set level(r){if(r!==0&&r!==1&&r!==2&&r!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");H._level=r}static get _emitter(){return H._emitterInstance??=new ve}static on(r,t,n){return H._emitter.on(r,t,n)}static _error(...r){H._emitter._emit("error",r),H._level>=1&&console.error(...r)}static _warn(...r){H._emitter._emit("warn",r),H._level>=2&&console.warn(...r)}static _info(...r){H._emitter._emit("info",r),H._level>=3&&console.info(...r)}};H._level=3,H._emitterInstance=null;var ae=H;function m(e){if(!e)throw new Error("Assertion failed.")}var de=e=>e&&e[e.length-1];var u=e=>{let r=0;for(;e.readBits(1)===0&&r<32;)r++;if(r>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<r)-1+e.readBits(r)};var Q=e=>{let r=u(e);return(r&1)===0?-(r>>1):r+1>>1};var z=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),Ue=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e);var ct={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var lt={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var dt={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Le=e=>[...e].map(r=>r.toString(16).padStart(2,"0")).join("");var De=e=>(e=e>>1&1431655765|(e&1431655765)<<1,e=e>>2&858993459|(e&858993459)<<2,e=e>>4&252645135|(e&252645135)<<4,e=e>>8&16711935|(e&16711935)<<8,e=e>>16&65535|(e&65535)<<16,e>>>0);var ue=(e,r,t)=>{let n=0,i=e.length-1,s=-1;for(;n<=i;){let a=n+(i-n+1)/2|0;t(e[a])<=r?(s=a,n=a+1):i=a-1}return s};var Oe=e=>{throw new Error(`Unexpected value: ${e}`)};var Er=1e6*(1+Number.EPSILON);var Sr=(async()=>{})().constructor;var _e=e=>{m(Number.isInteger(e.num)),m(Number.isInteger(e.den)),m(e.den!==0);let r=Math.abs(e.num),t=Math.abs(e.den);for(;t!==0;){let i=r%t;r=t,t=i}let n=r||1;return{num:e.num/n,den:e.den/n}};var ve=class{constructor(){this._listeners=new Map}on(r,t,n){this._listeners.has(r)||this._listeners.set(r,new Set);let i={fn:t,once:n?.once??!1};return this._listeners.get(r).add(i),()=>{this._listeners.get(r)?.delete(i)}}_emit(...r){let[t,n]=r,i=this._listeners.get(t);if(i)for(let s of i){try{s.fn(n)}catch(a){console.error(a)}s.once&&i.delete(s)}}};var ce=k("mediabunny"),p=ne(k("node-av"));var Gt=new Set([p.AV_PIX_FMT_YUVJ411P,p.AV_PIX_FMT_YUVJ420P,p.AV_PIX_FMT_YUVJ422P,p.AV_PIX_FMT_YUVJ440P,p.AV_PIX_FMT_YUVJ444P]),X=class e extends ce.VideoSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof p.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==p.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=r}getFormat(){return it(this.frame.format)}getCodedWidth(){return this.frame.width}getCodedHeight(){return this.frame.height}getSquarePixelWidth(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?Math.round(this.frame.width*this.frame.sampleAspectRatio.num/this.frame.sampleAspectRatio.den):this.frame.width}getSquarePixelHeight(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?this.frame.height:Math.round(this.frame.height*this.frame.sampleAspectRatio.den/this.frame.sampleAspectRatio.num)}getColorSpace(){return new ce.VideoSampleColorSpace({primaries:Ce(this.frame.colorPrimaries),transfer:be(this.frame.colorTrc),matrix:xe(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||Gt.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return m(this.frame.data),this.frame.data.map((r,t)=>({data:z(r),stride:this.frame.linesize[t]}))}async toRgbSample(r,t){let n=this.frame.width,i=this.frame.height,s=new p.SoftwareScaleContext,a=this.frame.format,d=ke("RGBA");s.getContext(n,i,a,n,i,d,p.SWS_BILINEAR);let f=new p.Frame;f.width=n,f.height=i,f.format=d,f.alloc(),f.allocBuffer();let l=this.frame;try{await s.scaleFrame(f,l)}finally{s.freeContext()}return f.sampleAspectRatio=l.sampleAspectRatio,new ce.VideoSample(new e(f),r)}},He=(e,r)=>{r.colorPrimaries=tt(e.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,r.colorSpace=nt(e.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,r.colorTrc=rt(e.colorSpace.transfer??"unknown")??p.AVCOL_TRC_UNSPECIFIED,r.colorRange=e.colorSpace.fullRange===!1?p.AVCOL_RANGE_MPEG:e.colorSpace.fullRange===!0?p.AVCOL_RANGE_JPEG:p.AVCOL_RANGE_UNSPECIFIED},pe=async(e,r,t)=>{m(e.format!==null),r.format=ke(e.format),r.width=e.codedWidth,r.height=e.codedHeight,r.sampleAspectRatio=new p.Rational(e.pixelAspectRatio.num,e.pixelAspectRatio.den),He(e,r);let n=e.allocationSize();return(!t||t.byteLength!==n)&&(t=Buffer.from({length:n})),await e.copyTo(t),r.fromBuffer(t),t},ut=async(e,r)=>{let t,n=!1;if(e._data instanceof X)t=e._data.frame;else{if(e.format===null)return null;t=new p.Frame,t.alloc(),n=!0,await pe(e,t,null)}let i=[];(e.squarePixelWidth!==e.codedWidth||e.squarePixelHeight!==e.codedHeight)&&(i.push(`scale=${e.squarePixelWidth}:${e.squarePixelHeight}`),i.push("setsar=1")),r.rotation===90?i.push("transpose=1"):r.rotation===180?i.push("transpose=1,transpose=1"):r.rotation===270&&i.push("transpose=2"),i.push(`crop=${Math.round(r.crop.width)}:${Math.round(r.crop.height)}:${Math.round(r.crop.left)}:${Math.round(r.crop.top)}`),r.fit==="fill"?i.push(`scale=${r.width}:${r.height}`):r.fit==="contain"?(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=decrease`),i.push(`pad=${r.width}:${r.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):r.fit==="cover"&&(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=increase`),i.push(`crop=${r.width}:${r.height}`)),i.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${t.width}x${t.height}:pix_fmt=${t.format}:time_base=1/1000000:pixel_aspect=${e.pixelAspectRatio.num}/${e.pixelAspectRatio.den}:colorspace=${t.colorSpace}:range=${t.colorRange}`,d=s.createFilter(p.Filter.getByName("buffer"),"src",a),f=s.createFilter(p.Filter.getByName("buffersink"),"sink");m(d&&f);let l=p.FilterInOut.createList([{name:"in",filterCtx:d,padIdx:0}]),A=p.FilterInOut.createList([{name:"out",filterCtx:f,padIdx:0}]),h=s.parsePtr(`[in]${i.join(",")}[out]`,A,l);p.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let _=await s.config();p.FFmpegError.throwIfError(_,"FilterGraph.config");let F=await d.buffersrcAddFrame(t);p.FFmpegError.throwIfError(F,"buffersrcAddFrame"),await d.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let x=await f.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new ce.VideoSample(new X(g),{timestamp:e.timestamp,duration:e.duration,rotation:0})}finally{s.free(),n&&t.free()}};var ye=class extends Ee.CustomVideoDecoder{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(t,n){return t==="avc"||t==="hevc"||t==="vp8"||t==="vp9"||t==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(t){m(this.codecContext===null);let n=j[this.codec];m(n!==void 0);let i;if(this.codec==="vp9"&&t.sideData.alpha?i=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?i=C.Codec.findDecoder(n):i=await Ze(n)??C.Codec.findDecoder(n),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(i),this.pixelAspectRatio=_e({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(z(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=C.Dictionary.fromObject({strict:C.FF_COMPLIANCE_STRICT}),d=await s.open2(i,a);C.FFmpegError.throwIfError(d,"Open codec context"),this.codecContext=s}async decode(t){if(this.codecContext===null&&await this.initCodecContext(t),m(this.codecContext),this.packet.isKeyframe=t.type==="key",this.packet.data=Buffer.from(t.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(t.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(t.microsecondDuration),t.sideData.alpha){let a=Buffer.alloc(8+t.sideData.alpha.byteLength);a[7]=1,a.set(t.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=ue(this.preciseTimings,t.microsecondTimestamp,a=>a.microsecondTimestamp),i=n!==-1?this.preciseTimings[n]:null;i&&i.microsecondTimestamp===t.microsecondTimestamp?(i.timestamp!==t.timestamp&&(i.timestampIsValid=!1),i.duration!==t.duration&&(i.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:t.microsecondTimestamp,timestamp:t.timestamp,duration:t.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(t){C.FFmpegError.throwIfError(t,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,i=Number(this.frame.duration)/1e6,s=ue(this.preciseTimings,Number(this.frame.pts),f=>f.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(i=a.duration));let d=this.frame.clone();if(!d)throw new Error("Frame clone allocation failed.");this.onSample(new Ee.VideoSample(new X(d),{timestamp:n,duration:i}))}async flush(){if(!this.codecContext)return;let t=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(t,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===C.AVERROR_EAGAIN||n===C.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var ie=k("mediabunny"),c=ne(k("node-av"));var W=class e{constructor(r){this.bytes=r;this.pos=0}seekToByte(r){this.pos=8*r}readBit(){let r=Math.floor(this.pos/8),t=this.bytes[r]??0,n=7-(this.pos&7),i=(t&1<<n)>>n;return this.pos++,i}readBits(r){if(r===1)return this.readBit();let t=0;for(let n=0;n<r;n++)t<<=1,t|=this.readBit();return t}writeBits(r,t){let n=this.pos+r;for(let i=this.pos;i<n;i++){let s=Math.floor(i/8),a=this.bytes[s],d=7-(i&7);a&=~(1<<d),a|=(t&1<<n-i-1)>>n-i-1<<d,this.bytes[s]=a}this.pos=n}copyBits(r,t){let n=0;for(n;n<r-7;n+=8)this.writeBits(8,t.readBits(8));let i=r-n;i>0&&this.writeBits(i,t.readBits(i))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let r=this.pos/8,t=this.bytes[r]??0;return this.pos+=8,t}skipBits(r){this.pos+=r}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let r=new e(this.bytes);return r.pos=this.pos,r}};var At=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],$t=[-1,1,2,3,4,5,6,8],ft=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let r=new W(e),t=ze(r),{frequencyIndex:n,sampleRate:i}=qe(r),s=r.readBits(4),a=null;s>=1&&s<=7&&(a=$t[s]);let d=t,f=!1,l=i;if(t===5||t===29)f=t===29,l=qe(r).sampleRate,d=ze(r),d===22&&r.skipBits(4);else for(;r.getBitsLeft()>15;){let A=r.pos;if(r.readBits(11)!==695){r.pos=A+1;continue}ze(r)===5&&r.readBits(1)&&(l=qe(r).sampleRate,r.getBitsLeft()>11&&r.readBits(11)===1352&&(f=!!r.readBits(1)));break}return a!==null&&a>1&&(f=!1),{objectType:t,coreObjectType:d,frequencyIndex:n,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:f&&a===1?2:a}},ze=e=>{let r=e.readBits(5);return r===31?32+e.readBits(6):r},qe=e=>{let r=e.readBits(4);return r===15?{frequencyIndex:r,sampleRate:e.readBits(24)}:{frequencyIndex:r,sampleRate:r<At.length?At[r]:null}};var mt=e=>{let r=new Uint8Array(7),t=new W(r),{coreObjectType:n,frequencyIndex:i,channelConfiguration:s}=e,a=n-1;return t.writeBits(12,4095),t.writeBits(1,0),t.writeBits(2,0),t.writeBits(1,1),t.writeBits(2,a),t.writeBits(4,i),t.writeBits(1,0),t.writeBits(3,s),t.writeBits(1,0),t.writeBits(1,0),t.writeBits(1,0),t.writeBits(1,0),t.skipBits(13),t.writeBits(11,2047),t.writeBits(2,0),{header:r,bitstream:t}};var jt=["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"],Qt=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Qr=[...Qt,...jt];var Xe=[{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}];var le=[{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}];var pt=".01.01.01.01.00",ht=".0.110.01.01.01.0",Jt=["ap4x","ap4h","apch","apcn","apcs","apco"];var gt=[8,10,12];var Ae=e=>{let{codec:r,codecDescription:t,colorSpace:n,avcCodecInfo:i,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:d,proresFormat:f}=e;if(r==="avc"){if(m(e.avcType!==null),i){let l=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${e.avcType}.${Le(l)}`}if(!t||t.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Le(t.subarray(1,4))}`}else if(r==="hevc"){m(e.hevcType!==null);let l,A,h,_,F,g;if(s)l=s.generalProfileSpace,A=s.generalProfileIdc,h=De(s.generalProfileCompatibilityFlags),_=s.generalTierFlag,F=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!t||t.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=Ue(t),E=b.getUint8(1);l=E>>6&3,A=E&31,h=De(b.getUint32(2)),_=E>>5&1,F=b.getUint8(12),g=[];for(let S=0;S<6;S++)g.push(b.getUint8(6+S))}let x=`${e.hevcType}.`;for(x+=["","A","B","C"][l]+A,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=_===0?"L":"H",x+=F;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(b=>b.toString(16).toUpperCase()).join(".")),x}else{if(r==="vp8")return"vp8";if(r==="vp9"){if(!a){let S=e.width*e.height,B=de(le).level;for(let T of le)if(S<=T.maxPictureSize){B=T.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),A=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),_=a.chromaSubsampling.toString().padStart(2,"0"),F=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),b=a.videoFullRangeFlag.toString().padStart(2,"0"),E=`vp09.${l}.${A}.${h}.${_}`;return E+=`.${F}.${g}.${x}.${b}`,E.endsWith(pt)&&(E=E.slice(0,-pt.length)),E}else if(r==="av1"){if(!d){let T=e.width*e.height,I=de(le).level;for(let w of le)if(T<=w.maxPictureSize){I=w.level;break}return`av01.0.${I.toString().padStart(2,"0")}M.08`}let l=d.profile,A=d.level.toString().padStart(2,"0"),h=d.tier?"H":"M",_=d.bitDepth.toString().padStart(2,"0"),F=d.monochrome?"1":"0",g=100*d.chromaSubsamplingX+10*d.chromaSubsamplingY+1*(d.chromaSubsamplingX&&d.chromaSubsamplingY?d.chromaSamplePosition:0),x=n?.primaries?ct[n.primaries]:1,b=n?.transfer?lt[n.transfer]:1,E=n?.matrix?dt[n.matrix]:1,S=n?.fullRange?1:0,B=`av01.${l}.${A}${h}.${_}`;return B+=`.${F}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${b.toString().padStart(2,"0")}`,B+=`.${E.toString().padStart(2,"0")}`,B+=`.${S}`,B.endsWith(ht)&&(B=B.slice(0,-ht.length)),B}else{if(r==="prores")return f??"apch";r!==null&&Oe(r)}}throw new TypeError(`Unhandled codec '${r}'.`)};var Se=e=>{if(e.startsWith("avc1")||e.startsWith("avc3")){let r=Number.parseInt(e.slice(5,7),16);return[110,122,244].includes(r)?10:8}else{if(e.startsWith("hev1")||e.startsWith("hvc1"))return Number(e.split(".")[1]?.replace(/^[ABC]/,""))===2?10:8;if(e.startsWith("vp09")||e.startsWith("av01")){let r=Number(e.split(".")[3]);return r===10||r===12?r:8}}return null};var Jr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Jt];var we=function*(e){let r=0,t=-1;for(;r<e.length-2;){let n=e.indexOf(0,r);if(n===-1||n>=e.length-2)break;r=n;let i=0;if(r+3<e.length&&e[r+1]===0&&e[r+2]===0&&e[r+3]===1?i=4:e[r+1]===0&&e[r+2]===1&&(i=3),i===0){r++;continue}t!==-1&&r>t&&(yield{offset:t,length:r-t}),t=r+i,r=t}t!==-1&&t<e.length&&(yield{offset:t,length:e.length-t})};var We=e=>e&31,Ye=e=>{let r=[],t=e.length;for(let n=0;n<t;n++)n+2<t&&e[n]===0&&e[n+1]===0&&e[n+2]===3?(r.push(0,0),n+=2):r.push(e[n]);return new Uint8Array(r)};var gn=new Uint8Array([0,0,0,1]);var xt=e=>{try{let r=[],t=[],n=[];for(let d of we(e)){let f=e.subarray(d.offset,d.offset+d.length),l=We(f[0]);l===7?r.push(f):l===8?t.push(f):l===13&&n.push(f)}if(r.length===0||t.length===0)return null;let i=r[0],s=Zt(i);m(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:r,pictureParameterSets:t,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(r){return ae._error("Error building AVC Decoder Configuration Record:",r),null}},vt=e=>{let r=[];r.push(e.configurationVersion),r.push(e.avcProfileIndication),r.push(e.profileCompatibility),r.push(e.avcLevelIndication),r.push(252|e.lengthSizeMinusOne&3),r.push(224|e.sequenceParameterSets.length&31);for(let t of e.sequenceParameterSets){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}r.push(e.pictureParameterSets.length);for(let t of e.pictureParameterSets){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}if((e.avcProfileIndication===100||e.avcProfileIndication===110||e.avcProfileIndication===122||e.avcProfileIndication===144)&&e.chromaFormat!==null){m(e.bitDepthLumaMinus8!==null),m(e.bitDepthChromaMinus8!==null),m(e.sequenceParameterSetExt!==null),r.push(252|e.chromaFormat&3),r.push(248|e.bitDepthLumaMinus8&7),r.push(248|e.bitDepthChromaMinus8&7),r.push(e.sequenceParameterSetExt.length);for(let t of e.sequenceParameterSetExt){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}}return new Uint8Array(r)};var _t={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Zt=e=>{try{let r=Ye(e),t=new W(r);if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let i=t.readAlignedByte(),s=t.readAlignedByte(),a=t.readAlignedByte();u(t);let d=1,f=0,l=0,A=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(d=u(t),d===3&&(A=t.readBits(1)),f=u(t),l=u(t),t.skipBits(1),t.readBits(1))){for(let V=0;V<(d!==3?8:12);V++)if(t.readBits(1)){let ee=V<6?16:64,$=8,O=8;for(let re=0;re<ee;re++){if(O!==0){let oe=Q(t);O=($+oe+256)%256}$=O===0?$:O}}}u(t);let h=u(t);if(h===0)u(t);else if(h===1){t.skipBits(1),Q(t),Q(t);let M=u(t);for(let V=0;V<M;V++)Q(t)}u(t),t.skipBits(1);let _=u(t),F=u(t),g=16*(_+1),x=16*(F+1),b=g,E=x,S=t.readBits(1);if(S||t.skipBits(1),t.skipBits(1),t.readBits(1)){let M=u(t),V=u(t),q=u(t),ee=u(t),$,O;if((A===0?d:0)===0)$=1,O=2-S;else{let oe=d===3?1:2,he=d===1?2:1;$=oe,O=he*(2-S)}b-=$*(M+V),E-=O*(q+ee)}let T=2,I=2,w=2,R=0,N={num:1,den:1},D=null,U=null,Y=null,P=null,Z=t.pos;if(t.readBits(1)){if(t.readBits(1)){let oe=t.readBits(8);if(oe===255)N={num:t.readBits(16),den:t.readBits(16)};else{let he=_t[oe];he&&(N=he)}}t.readBits(1)&&t.skipBits(1),t.readBits(1)&&(t.skipBits(3),R=t.readBits(1),t.readBits(1)&&(T=t.readBits(8),I=t.readBits(8),w=t.readBits(8))),t.readBits(1)&&(u(t),u(t)),t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));let O=t.readBits(1);O&&Ct(t);let re=t.readBits(1);re&&Ct(t),(O||re)&&t.skipBits(1),t.skipBits(1),Y=t.pos,P=t.readBits(1),P&&(t.skipBits(1),u(t),u(t),u(t),u(t),D=u(t),U=u(t))}if(D===null){m(U===null);let M=s&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&M)D=0,U=0;else{let V=_+1,q=F+1,ee=(2-S)*q,$=Xe.find(re=>re.level>=a)??de(Xe),O=Math.min(Math.floor($.maxDpbMbs/(V*ee)),16);D=O,U=O}}return m(U!==null),{emulationUnpreventedBytes:r,profileIdc:i,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:S,chromaFormatIdc:d,bitDepthLumaMinus8:f,bitDepthChromaMinus8:l,codedWidth:g,codedHeight:x,displayWidth:b,displayHeight:E,pixelAspectRatio:N,colourPrimaries:T,matrixCoefficients:w,transferCharacteristics:I,fullRangeFlag:R,numReorderFrames:D,maxDecFrameBuffering:U,vuiParametersFlagBitOffset:Z,bitstreamRestrictionFlagBitOffset:Y,bitstreamRestrictionFlag:P}}catch(r){return ae._error("Error parsing AVC SPS:",r),null}},Ct=e=>{let r=u(e);e.skipBits(4),e.skipBits(4);for(let t=0;t<=r;t++)u(e),u(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)};var Be=e=>e>>1&63,er=e=>{try{let r=new W(Ye(e));r.skipBits(16),r.readBits(4);let t=r.readBits(3),n=r.readBits(1),{general_profile_space:i,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:d,general_constraint_indicator_flags:f,general_level_idc:l}=tr(r,t);u(r);let A=u(r),h=0;A===3&&(h=r.readBits(1));let _=u(r),F=u(r),g=_,x=F;if(r.readBits(1)){let P=u(r),Z=u(r),te=u(r),M=u(r),V=1,q=1,ee=h===0?A:0;ee===1?(V=2,q=2):ee===2&&(V=2,q=1),g-=(P+Z)*V,x-=(te+M)*q}let b=u(r),E=u(r);u(r);let B=r.readBits(1)?0:t,T=0;for(let P=B;P<=t;P++)u(r),T=u(r),u(r);u(r),u(r),u(r),u(r),u(r),u(r),r.readBits(1)&&r.readBits(1)&&rr(r),r.skipBits(1),r.skipBits(1),r.readBits(1)&&(r.skipBits(4),r.skipBits(4),u(r),u(r),r.skipBits(1));let I=u(r);if(nr(r,I),r.readBits(1)){let P=u(r);for(let Z=0;Z<P;Z++)u(r),r.skipBits(1)}r.skipBits(1),r.skipBits(1);let w=2,R=2,N=2,D=0,U=0,Y={num:1,den:1};if(r.readBits(1)){let P=or(r,t);Y=P.pixelAspectRatio,w=P.colourPrimaries,R=P.transferCharacteristics,N=P.matrixCoefficients,D=P.fullRangeFlag,U=P.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:Y,colourPrimaries:w,transferCharacteristics:R,matrixCoefficients:N,fullRangeFlag:D,maxDecFrameBuffering:T+1,spsMaxSubLayersMinus1:t,spsTemporalIdNestingFlag:n,generalProfileSpace:i,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:d,generalConstraintIndicatorFlags:f,generalLevelIdc:l,chromaFormatIdc:A,bitDepthLumaMinus8:b,bitDepthChromaMinus8:E,minSpatialSegmentationIdc:U}}catch(r){return ae._error("Error parsing HEVC SPS:",r),null}},yt=e=>{try{let r=[],t=[],n=[],i=[];for(let l of we(e)){let A=e.subarray(l.offset,l.offset+l.length),h=Be(A[0]);h===32?r.push(A):h===33?t.push(A):h===34?n.push(A):(h===39||h===40)&&i.push(A)}if(t.length===0||n.length===0)return null;let s=er(t[0]);if(!s)return null;let a=0;if(n.length>0){let l=n[0],A=new W(Ye(l));A.skipBits(16),u(A),u(A),A.skipBits(1),A.skipBits(1),A.skipBits(3),A.skipBits(1),A.skipBits(1),u(A),u(A),Q(A),A.skipBits(1),A.skipBits(1),A.readBits(1)&&u(A),Q(A),Q(A),A.skipBits(1),A.skipBits(1),A.skipBits(1),A.skipBits(1);let h=A.readBits(1),_=A.readBits(1);!h&&!_?a=0:h&&!_?a=2:!h&&_?a=3:a=0}let d=[...r.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:r}]:[],...t.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:t}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Be(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:d}}catch(r){return ae._error("Error building HEVC Decoder Configuration Record:",r),null}},tr=(e,r)=>{let t=e.readBits(2),n=e.readBits(1),i=e.readBits(5),s=0;for(let A=0;A<32;A++)s=s<<1|e.readBits(1);let a=new Uint8Array(6);for(let A=0;A<6;A++)a[A]=e.readBits(8);let d=e.readBits(8),f=[],l=[];for(let A=0;A<r;A++)f.push(e.readBits(1)),l.push(e.readBits(1));if(r>0)for(let A=r;A<8;A++)e.skipBits(2);for(let A=0;A<r;A++)f[A]&&e.skipBits(88),l[A]&&e.skipBits(8);return{general_profile_space:t,general_tier_flag:n,general_profile_idc:i,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:d}},rr=e=>{for(let r=0;r<4;r++)for(let t=0;t<(r===3?2:6);t++)if(!e.readBits(1))u(e);else{let i=Math.min(64,1<<4+(r<<1));r>1&&Q(e);for(let s=0;s<i;s++)Q(e)}},nr=(e,r)=>{let t=[];for(let n=0;n<r;n++)t[n]=ir(e,n,r,t)},ir=(e,r,t,n)=>{let i=0,s=0,a=0;if(r!==0&&(s=e.readBits(1)),s){if(r===t){let f=u(e);a=r-(f+1)}else a=r-1;e.readBits(1),u(e);let d=n[a]??0;for(let f=0;f<=d;f++)e.readBits(1)||e.readBits(1);i=n[a]}else{let d=u(e),f=u(e);for(let l=0;l<d;l++)u(e),e.readBits(1);for(let l=0;l<f;l++)u(e),e.readBits(1);i=d+f}return i},or=(e,r)=>{let t=2,n=2,i=2,s=0,a=0,d={num:1,den:1};if(e.readBits(1)){let f=e.readBits(8);if(f===255)d={num:e.readBits(16),den:e.readBits(16)};else{let l=_t[f];l&&(d=l)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(t=e.readBits(8),n=e.readBits(8),i=e.readBits(8))),e.readBits(1)&&(u(e),u(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(u(e),u(e),u(e),u(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&u(e),e.readBits(1)&&sr(e,!0,r)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=u(e),u(e),u(e),u(e),u(e)),{pixelAspectRatio:d,colourPrimaries:t,transferCharacteristics:n,matrixCoefficients:i,fullRangeFlag:s,minSpatialSegmentationIdc:a}},sr=(e,r,t)=>{let n=!1,i=!1,s=!1;r&&(n=e.readBits(1)===1,i=e.readBits(1)===1,(n||i)&&(s=e.readBits(1)===1,s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5)));for(let a=0;a<=t;a++){let d=e.readBits(1)===1,f=!0;d||(f=e.readBits(1)===1);let l=!1;f?u(e):l=e.readBits(1)===1;let A=1;l||(A=u(e)+1),n&&bt(e,A,s),i&&bt(e,A,s)}},bt=(e,r,t)=>{for(let n=0;n<r;n++)u(e),u(e),t&&(u(e),u(e)),e.readBits(1)},Et=e=>{let r=[];r.push(e.configurationVersion),r.push((e.generalProfileSpace&3)<<6|(e.generalTierFlag&1)<<5|e.generalProfileIdc&31),r.push(e.generalProfileCompatibilityFlags>>>24&255),r.push(e.generalProfileCompatibilityFlags>>>16&255),r.push(e.generalProfileCompatibilityFlags>>>8&255),r.push(e.generalProfileCompatibilityFlags&255),r.push(...e.generalConstraintIndicatorFlags),r.push(e.generalLevelIdc&255),r.push(240|e.minSpatialSegmentationIdc>>8&15),r.push(e.minSpatialSegmentationIdc&255),r.push(252|e.parallelismType&3),r.push(252|e.chromaFormatIdc&3),r.push(248|e.bitDepthLumaMinus8&7),r.push(248|e.bitDepthChromaMinus8&7),r.push(e.avgFrameRate>>8&255),r.push(e.avgFrameRate&255),r.push((e.constantFrameRate&3)<<6|(e.numTemporalLayers&7)<<3|(e.temporalIdNested&1)<<2|e.lengthSizeMinusOne&3),r.push(e.arrays.length&255);for(let t of e.arrays){r.push((t.arrayCompleteness&1)<<7|0|t.nalUnitType&63),r.push(t.nalUnits.length>>8&255),r.push(t.nalUnits.length&255);for(let n of t.nalUnits){r.push(n.length>>8&255),r.push(n.length&255);for(let i=0;i<n.length;i++)r.push(n[i])}}return new Uint8Array(r)};var ar={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},St=e=>{let r=new W(e);if(r.readBits(2)!==2)return null;let n=r.readBits(1),s=(r.readBits(1)<<1)+n;if(s===3&&r.skipBits(1),r.readBits(1)===1||r.readBits(1)!==0||(r.skipBits(2),r.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=r.readBits(1)?12:10);let A=r.readBits(3),h=0,_=0;if(A!==7)if(_=r.readBits(1),s===1||s===3){let N=r.readBits(1),D=r.readBits(1);h=!N&&!D?3:N&&!D?2:1,r.skipBits(1)}else h=1;else h=3,_=1;let F=r.readBits(16),g=r.readBits(16),x=F+1,b=g+1,E=x*b,S=de(le).level;for(let R of le)if(E<=R.maxPictureSize){S=R.level;break}let B=ar[A],T=B?.colourPrimaries??2,I=B?.transferCharacteristics??2,w=B?.matrixCoefficients??2;return{profile:s,level:S,bitDepth:l,chromaSubsampling:h,videoFullRangeFlag:_,colourPrimaries:T,transferCharacteristics:I,matrixCoefficients:w}};var cr=function*(e){let r=new W(e),t=()=>{let n=0;for(let i=0;i<8;i++){let s=r.readAlignedByte();if(n+=(s&127)*2**(i*7),!(s&128))break;if(i===7&&s&128)return null}return n>2**32-1?null:n};for(;r.getBitsLeft()>=8;){r.skipBits(1);let n=r.readBits(4),i=r.readBits(1),s=r.readBits(1);r.skipBits(1),i&&r.skipBits(8);let a;if(s){let d=t();if(d===null)return;a=d}else a=Math.floor(r.getBitsLeft()/8);m(r.pos%8===0),yield{type:n,data:e.subarray(r.pos/8,r.pos/8+a)},r.skipBits(a*8)}},Bt=e=>{for(let{type:r,data:t}of cr(e)){if(r!==1)continue;let n=new W(t),i=n.readBits(3),s=n.readBits(1),a=n.readBits(1),d=0,f=0,l=0;if(a)d=n.readBits(5);else{let U=n.readBits(1),Y=0;if(U){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let M=0;for(;M<32&&!n.readBits(1);)M++;M<32&&n.skipBits(M)}Y=n.readBits(1),Y&&(l=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let P=n.readBits(1),Z=n.readBits(5);for(let te=0;te<=Z;te++){n.skipBits(12);let M=n.readBits(5);if(te===0&&(d=M),M>7){let V=n.readBits(1);te===0&&(f=V)}if(Y&&n.readBits(1)){let q=l+1;n.skipBits(q),n.skipBits(q),n.skipBits(1)}P&&n.readBits(1)&&n.skipBits(4)}}let A=n.readBits(4),h=n.readBits(4),_=A+1;n.skipBits(_);let F=h+1;n.skipBits(F);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let U=n.readBits(1);U&&(n.skipBits(1),n.skipBits(1));let Y=n.readBits(1),P=0;Y?P=2:P=n.readBits(1),P>0&&(n.readBits(1)||n.skipBits(1)),U&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),b=8;i===2&&x?b=n.readBits(1)?12:10:i<=2&&(b=x?10:8);let E=0;i!==1&&(E=n.readBits(1));let S=2,B=2,T=2;n.readBits(1)&&(S=n.readBits(8),B=n.readBits(8),T=n.readBits(8));let w=0,R=1,N=1,D=0;return E?w=n.readBits(1):S===1&&B===13&&T===0?(w=1,R=0,N=0):(w=n.readBits(1),i===0?(R=1,N=1):i===1?(R=0,N=0):b===12?(R=n.readBits(1),N=R?n.readBits(1):0):(R=1,N=0),R&&N&&(D=n.readBits(2))),{profile:i,level:d,tier:f,bitDepth:b,monochrome:E,chromaSubsamplingX:R,chromaSubsamplingY:N,chromaSamplePosition:D,videoFullRangeFlag:w,colourPrimaries:S,transferCharacteristics:B,matrixCoefficients:T}}return null};var Cn=[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];var bn=new Uint8Array([5,4,65,67,45,51]),xn=new Uint8Array([5,4,69,65,67,51]);var lr={apco:c.AV_PROFILE_PRORES_PROXY,apcs:c.AV_PROFILE_PRORES_LT,apcn:c.AV_PROFILE_PRORES_STANDARD,apch:c.AV_PROFILE_PRORES_HQ,ap4h:c.AV_PROFILE_PRORES_4444,ap4x:c.AV_PROFILE_PRORES_XQ},It={8:[c.AV_PIX_FMT_YUV420P,c.AV_PIX_FMT_NV12,c.AV_PIX_FMT_YUV422P,c.AV_PIX_FMT_YUV444P],10:[c.AV_PIX_FMT_YUV420P10LE,c.AV_PIX_FMT_P010LE,c.AV_PIX_FMT_YUV422P10LE,c.AV_PIX_FMT_YUV444P10LE],12:[c.AV_PIX_FMT_YUV420P12LE,c.AV_PIX_FMT_YUV422P12LE,c.AV_PIX_FMT_YUV444P12LE]},Pt={8:[c.AV_PIX_FMT_YUVA420P,c.AV_PIX_FMT_YUVA422P,c.AV_PIX_FMT_YUVA444P],10:[c.AV_PIX_FMT_YUVA420P10LE,c.AV_PIX_FMT_YUVA422P10LE,c.AV_PIX_FMT_YUVA444P10LE],12:[c.AV_PIX_FMT_YUVA422P12LE,c.AV_PIX_FMT_YUVA444P12LE]},$e=(e,r,t)=>{let n=t?Pt[r]:It[r];return e?n.find(i=>e.includes(i))??null:n[0]},wt=e=>{for(let r of gt)if(It[r].includes(e)||Pt[r].includes(e))return r;return null},dr=(e,r)=>!(e===c.AVCOL_TRC_SMPTE2084||e===c.AVCOL_TRC_ARIB_STD_B67)||r===null||r>=10?e:(ie.Logging._warn(`Encoding ${r}-bit output from frames labelled '${e===c.AVCOL_TRC_SMPTE2084?"pq":"hlg"}'. That transfer function needs at least 10 bits, so the output states no transfer instead of claiming one its samples cannot carry.`),c.AVCOL_TRC_UNSPECIFIED),ur=e=>{let{codecName:r,supportedPixelFormats:t,requestedBitDepth:n,incomingBitDepth:i,wantsAlpha:s}=e,a=n??i;if(a!==null){let f=$e(t,a,s);if(f!==null)return f;if(n!==null)throw new Error(`Encoder '${r??"unknown"}' cannot encode ${n}-bit video${s?" with alpha":""}, which the requested codec profile demands.`)}let d=c.AV_PIX_FMT_YUV420P;return t&&(t.includes(c.AV_PIX_FMT_YUV420P)||(d=t[0]),s&&(t.includes(c.AV_PIX_FMT_YUVA420P)?d=c.AV_PIX_FMT_YUVA420P:d=c.avcodecFindBestPixFmtOfList(t,c.AV_PIX_FMT_YUVA444P12LE))),d},Ge=(e,r)=>{if(e==="prores"){let t=c.Codec.findEncoderByName(c.FF_ENCODER_PRORES_KS);if(t)return t}return c.Codec.findEncoder(r)},Ie=class extends ie.CustomVideoEncoder{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(t,n){if(!(n.bitrateMode==="quantizer"?t==="avc"||t==="hevc"||t==="vp9"||t==="av1":t==="avc"||t==="hevc"||t==="vp8"||t==="vp9"||t==="av1"||t==="prores"))return!1;let s=Se(n.codec);if(s===null)return!0;let a=j[t];m(a!==void 0);let d=Ge(t,a);return!!d&&$e(d.pixelFormats,s,n.alpha==="keep")!==null}async init(){this.frame=new c.Frame,this.frame.alloc(),this.frame.timeBase=new c.Rational(1,1e6),this.packet=new c.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=this.config.alpha==="keep",i=Se(this.config.codec),s=null;if(this.codec==="vp9"&&n)s=c.Codec.findEncoderByName(c.FF_ENCODER_LIBVPX_VP9)??c.Codec.findEncoder(t);else if(this.config.hardwareAcceleration==="prefer-software")s=Ge(this.codec,t);else{let a=await et(t);a&&this.config.bitrateMode==="quantizer"&&!a.name?.endsWith("_nvenc")&&(a=null),a&&i!==null&&$e(a.pixelFormats,i,n)===null&&(a=null),s=a??Ge(this.codec,t)}if(!s)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=s}async createCodecContext(){m(this.codecContext===null);let t=new c.CodecContext;t.allocContext3(this.avCodec);let n=wt(this.frame.format),i=ur({codecName:this.avCodec.name,supportedPixelFormats:this.avCodec.pixelFormats,requestedBitDepth:Se(this.config.codec),incomingBitDepth:n,wantsAlpha:this.config.alpha==="keep"}),s=_e({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});t.width=this.config.width,t.height=this.config.height,t.pixelFormat=i,t.timeBase=new c.Rational(1,1e6),t.gopSize=60,t.framerate=new c.Rational(Math.round(this.config.framerate??0)||30,1),t.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new ie.Quality("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),t.sampleAspectRatio=new c.Rational(s.num,s.den),n!==null&&(t.colorPrimaries=this.frame.colorPrimaries,t.colorTrc=dr(this.frame.colorTrc,wt(i)),t.colorSpace=this.frame.colorSpace,t.colorRange=this.frame.colorRange),this.config.bitrateMode==="constant"&&(t.rcMinRate=t.bitRate,t.rcMaxRate=t.bitRate);let a=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?a&&(t.setOption("tune","zerolatency"),t.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(t.setOption("x265-params","log-level=error"),a&&(t.setOption("tune","zerolatency"),t.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(a&&t.setOption("deadline","realtime"),t.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(t.setOption("deadline","realtime"),a?t.setOption("cpu-used","8"):t.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",a&&t.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&t.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){m(this.quantizer!==null);let f;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?f=Math.round(this.quantizer/4):f=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")t.setOption("qp",String(f));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")t.setOption("crf",String(f));else if(this.avCodec.name==="libsvtav1")t.setOption("qp",String(f));else if(this.avCodec.name==="librav1e")t.setOption("qp",String(f));else if(this.avCodec.name?.endsWith("_nvenc"))t.setOption("rc","constqp"),t.setOption("qp",String(f));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);t.qMin=f,t.qMax=f}if(this.codec==="prores"){let f=lr[this.config.codec];m(f!==void 0),t.setOption("profile",String(f))}let d=await t.open2();c.FFmpegError.throwIfError(d,"Open codec context"),this.codecContext=t}async encode(t,n){if(this.config.bitrateMode==="quantizer"){let l;if(this.codec==="avc"?l=n.avc?.quantizer:this.codec==="hevc"?l=n.hevc?.quantizer:this.codec==="vp9"?l=n.vp9?.quantizer:l=n.av1?.quantizer,m(l!=null),this.codecContext!==null&&l!==this.quantizer){let A=await this.codecContext.sendFrame(null);for(c.FFmpegError.throwIfError(A,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===c.AVERROR_EAGAIN||h===c.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=l}if(t._data instanceof X)this.frame.unref(),this.frame.ref(t._data.frame),He(t,this.frame);else{if(t.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await pe(t,this.frame,this.lastBuffer)}this.codecContext===null&&await this.createCodecContext(),m(this.codecContext);let i=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new c.SoftwareScaleContext);let l=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(l!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,c.SWS_FAST_BILINEAR),this.lastScalerKey=l;let h=this.scaler.initContext();c.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new c.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),i=this.dstFrame}i.pts=BigInt(t.microsecondTimestamp),i.duration=BigInt(t.microsecondDuration),i.timeBase=new c.Rational(1,1e6),i.pictType=n?.keyFrame?c.AV_PICTURE_TYPE_I:c.AV_PICTURE_TYPE_NONE,i.keyFrame=n?.keyFrame?1:0;let a=ue(this.preciseTimings,t.microsecondTimestamp,l=>l.microsecondTimestamp),d=a!==-1?this.preciseTimings[a]:null;d&&d.microsecondTimestamp===t.microsecondTimestamp?(d.timestamp!==t.timestamp&&(d.timestampIsValid=!1),d.duration!==t.duration&&(d.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:t.microsecondTimestamp,timestamp:t.timestamp,duration:t.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let f=await this.codecContext.sendFrame(i);for(c.FFmpegError.throwIfError(f,"Send frame");;){let l=await this.codecContext.receivePacket(this.packet);if(l===c.AVERROR_EAGAIN||l===c.AVERROR_EOF)break;this.receivePacket(l)}}receivePacket(t){if(m(this.codecContext),c.FFmpegError.throwIfError(t,"Receive packet"),!this.packet.data)return;let n=z(this.packet.data),i=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=ue(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),d=a!==-1?this.preciseTimings[a]:null;d&&d.microsecondTimestamp===Number(this.packet.pts)&&(d.timestampIsValid&&(i=d.timestamp),d.durationIsValid&&(s=d.duration));let f={},l=null,A=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let b=xt(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=vt(b)}else{let b=yt(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=Et(b)}l=Ae({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:g?3:1,hevcType:g?"hev1":"hvc1",avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(A=x)}if(!g){let b=[];for(let I of we(n))if(this.codec==="avc"){let w=We(n[I.offset]);w!==7&&w!==8&&w!==13&&b.push(I)}else{let w=Be(n[I.offset]);w!==33&&w!==34&&w!==32&&b.push(I)}let E=0;for(let I of b)E+=4+I.length;let S=new Uint8Array(E),B=new DataView(S.buffer),T=0;for(let I of b){let w=I.length;B.setUint32(T,w,!1),T+=4,S.set(n.subarray(I.offset,I.offset+I.length),T),T+=I.length}n=S}}else if(this.codec==="vp8")this.packetEmitted||(l=Ae({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=St(n);l=Ae({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=Bt(n);l=Ae({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(l=Ae({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},_=this.packet.getSideData(c.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);_&&(h.alpha=z(_).subarray(8));let F=new ie.EncodedPacket(n,this.packet.isKeyframe?"key":"delta",i,s,void 0,void 0,h);l!==null&&(f.decoderConfig={codec:l,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:A??void 0,colorSpace:{primaries:Ce(this.codecContext.colorPrimaries),matrix:xe(this.codecContext.colorSpace),transfer:be(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===c.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===c.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(F,f)}async flush(){if(this.codecContext){let t=await this.codecContext.sendFrame(null);for(c.FFmpegError.throwIfError(t,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===c.AVERROR_EAGAIN||n===c.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};var Fe=k("mediabunny"),y=ne(k("node-av"));var Tt=k("mediabunny"),fe=ne(k("node-av"));var J=class extends Tt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof fe.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==fe.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=r}getFormat(){let r=ot(this.frame.format);if(r===null){let t=fe.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${t} (${this.frame.format})`)}return r}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(r){return m(this.frame.data&&r<this.frame.data.length),z(this.frame.data[r])}},Pe=(e,r)=>{r.format=st(e.format),r.nbSamples=e.numberOfFrames,r.sampleRate=e.sampleRate,r.channelLayout=se(e.numberOfChannels),r.allocBuffer(),m(r.data);for(let t=0;t<r.data.length;t++)e.copyTo(r.data[t],{planeIndex:t})};var Te=class extends Fe.CustomAudioDecoder{constructor(){super(...arguments);this.codecContext=null}static supports(t,n){return t==="aac"||t==="opus"||t==="mp3"||t==="vorbis"||t==="flac"||t==="ac3"||t==="eac3"||t==="dts"}async init(){this.frame=new y.Frame,this.frame.alloc(),this.packet=new y.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=y.Codec.findDecoder(t);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new y.CodecContext;i.allocContext3(n),i.sampleRate=this.config.sampleRate,i.channelLayout=se(this.config.numberOfChannels),i.timeBase=new y.Rational(1,this.config.sampleRate),i.codecType=y.AVMEDIA_TYPE_AUDIO,i.codecId=t,i.extraData=this.config.description?Buffer.from(z(this.config.description)):null;let s=await i.open2();y.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=i}async decode(t){m(this.codecContext),this.packet.isKeyframe=t.type==="key",this.packet.data=Buffer.from(t.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(t.timestamp*this.config.sampleRate)),this.packet.dts=y.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(t.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(y.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let i=await this.codecContext.receiveFrame(this.frame);if(i===y.AVERROR_EAGAIN||i===y.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(t){y.FFmpegError.throwIfError(t,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new y.Rational(1,this.config.sampleRate),this.onSample(new Fe.AudioSample(new J(n)))}async flush(){m(this.codecContext);let t=await this.codecContext.sendPacket(null);for(y.FFmpegError.throwIfError(t,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===y.AVERROR_EAGAIN||n===y.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var me=k("mediabunny"),v=ne(k("node-av"));var Ft=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],Rt=[1,2,4,5,6],Ar=16384,Vt=(e,r,t)=>{if(e<32e3||e>384e4)return!1;let n=t===6,i=t-(n?1:0),s=32*Math.ceil(Math.ceil(e*512/r)/32),a=132+(493+28*32)*i+(n?72:0);return s>=a&&s<=8*Ar};var fr=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],mr=[8e3,12e3,16e3,24e3,48e3],pr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],Nt=[32e3,44100,48e3],Ke=1024,Re=class extends me.CustomAudioEncoder{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(t,n){let{numberOfChannels:i,sampleRate:s}=n;return t==="aac"&&i>=1&&i<=48&&fr.includes(s)||t==="opus"&&i>=1&&i<=255&&mr.includes(s)||t==="mp3"&&i>=1&&i<=2&&pr.includes(s)||t==="vorbis"&&i>=1&&i<=255&&s<=2e5||t==="flac"&&i>=1&&i<=8&&s<=655350||t==="ac3"&&i>=1&&i<=6&&Nt.includes(s)||t==="eac3"&&i>=1&&i<=16&&Nt.includes(s)||t==="dts"&&Rt.includes(i)&&Ft.includes(s)&&Vt(Mt(n,t),s,i)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=v.Codec.findEncoder(t);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){m(this.codecContext===null);let t=new v.CodecContext;t.allocContext3(this.avCodec);let n=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),t.sampleRate=this.config.sampleRate,t.channelLayout=this.codec==="dts"?at(this.config.numberOfChannels):se(this.config.numberOfChannels),t.codecType=v.AVMEDIA_TYPE_AUDIO,t.codecId=j[this.codec],t.sampleFormat=n,t.timeBase=new v.Rational(1,this.config.sampleRate),t.bitRate=BigInt(Mt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(t.rcMinRate=t.bitRate,t.rcMaxRate=t.bitRate);let i=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await t.open2(this.avCodec,i);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=t}async encode(t){this.codecContext===null&&(await this.createCodecContext(),m(this.codecContext)),this.firstExpectedTimestamp??=t.timestamp,t._data instanceof J?(this.frame.unref(),this.frame.ref(t._data.frame)):Pe(t,this.frame),this.frame.pts=BigInt(Math.round(t.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(t.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,d=se(this.frame.channels),f=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,d,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(f,"allocSetOpts2");let l=this.resampler.init();v.FFmpegError.throwIfError(l,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||Ke,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){m(this.codecContext),m(this.resampler),m(this.dstFrame),m(this.nextResamplerPts!==null);let t=this.codecContext.frameSize||Ke;for(;!(this.resampler.getOutSamples(0)<t);)await this.resampler.convert(this.dstFrame.data,t,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(t)}async sendFrameAndReceivePackets(t){m(this.codecContext);let n=await this.codecContext.sendFrame(t);for(v.FFmpegError.throwIfError(n,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===v.AVERROR_EAGAIN||i===v.AVERROR_EOF)break;this.receivePacket(i)}}receivePacket(t){if(m(this.codecContext),m(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(t,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,i=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let f=this.config.codec,l=this.codecContext.extraData?z(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!l)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=ft(l);this.adtsHeaderTemplate=mt(h),l=void 0}}else if(this.codec==="opus"){if(!l)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!l)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!l)throw new Error("Extradata expected for FLAC.");l=new Uint8Array([102,76,97,67,128,0,0,l.byteLength,...l])}a={decoderConfig:{codec:f,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:l}}}if(this.adtsHeaderTemplate){let f=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,f);let l=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);l.set(this.adtsHeaderTemplate.header,0),l.set(s,this.adtsHeaderTemplate.header.byteLength),s=l}n+=this.outputTimestampOffset;let d=new me.EncodedPacket(s,"key",n,i);this.packetEmitted=!0,this.onPacket(d,a)}async flush(){if(this.codecContext){e:if(this.resampler){m(this.resamplerInputSampleRate!==null);let t=this.resampler.getOutSamples(0);if(t===0)break e;let n=this.codecContext.frameSize||Ke;m(t<n);let i=Math.ceil((n-t)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(i),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},Mt=(e,r)=>e.bitrate??new me.Quality("medium")._toAudioBitrate(r)??0;var Ut=k("@mediabunny/prores");var Lt=Symbol.for("@mediabunny/server loaded");globalThis[Lt]&&L.Logging._error(`[WARNING]
9
- @mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[Lt]=!0;var kt=!1,K={},hr=(e={})=>{if(typeof e!="object"||!e)throw new TypeError("options must be an object.");if(e.hardwareContext!=null&&!(e.hardwareContext instanceof G.HardwareContext||typeof e.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");kt||(kt=!0,K=e,G.Log.setLevel(G.AV_LOG_ERROR),(0,L.registerDecoder)(ye),(0,Ut.registerProresDecoder)(),(0,L.registerEncoder)(Ie),(0,L.registerDecoder)(Te),(0,L.registerEncoder)(Re),(0,L.registerVideoSampleTransformer)(ut))},gr=async(e,r)=>{if(!(e instanceof L.VideoSample)&&!(e instanceof L.AudioSample))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(r instanceof G.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e instanceof L.VideoSample){if(e._data instanceof X)r.unref(),r.ref(e._data.frame);else{if(e.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await pe(e,r,null)}r.pts=BigInt(e.microsecondTimestamp),r.duration=BigInt(e.microsecondDuration),r.timeBase=new G.Rational(1,1e6)}else e._data instanceof J?(r.unref(),r.ref(e._data.frame)):Pe(e,r),r.timeBase=new G.Rational(1,e.sampleRate),r.pts=BigInt(Math.round(e.timestamp*e.sampleRate)),r.duration=BigInt(e.numberOfFrames)};return Wt(Cr);})();
8
+ "use strict";var MediabunnyServer=(()=>{var Ut=Object.create;var Ce=Object.defineProperty;var Ot=Object.getOwnPropertyDescriptor;var Ht=Object.getOwnPropertyNames;var zt=Object.getPrototypeOf,qt=Object.prototype.hasOwnProperty;var k=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(r,t)=>(typeof require<"u"?require:r)[t]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Xt=(e,r)=>{for(var t in r)Ce(e,t,{get:r[t],enumerable:!0})},je=(e,r,t,n)=>{if(r&&typeof r=="object"||typeof r=="function")for(let i of Ht(r))!qt.call(e,i)&&i!==t&&Ce(e,i,{get:()=>r[i],enumerable:!(n=Ot(r,i))||n.enumerable});return e};var ne=(e,r,t)=>(t=e!=null?Ut(zt(e)):{},je(r||!e||!e.__esModule?Ce(t,"default",{value:e,enumerable:!0}):t,e)),Wt=e=>je(Ce({},"__esModule",{value:!0}),e);var br={};Xt(br,{AvFrameAudioSampleResource:()=>J,AvFrameVideoSampleResource:()=>X,_serverOptions:()=>K,registerMediabunnyServer:()=>gr,toAvFrame:()=>Cr});var L=k("mediabunny"),G=ne(k("node-av"));var Ee=k("mediabunny"),C=ne(k("node-av"));var o=ne(k("node-av"));var j={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,prores:o.AV_CODEC_ID_PRORES,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3,dts:o.AV_CODEC_ID_DTS},Ve,Qe=()=>K.hardwareContext!==void 0&&typeof K.hardwareContext!="function"?K.hardwareContext:(Ve===void 0&&(Ve=o.HardwareContext.auto()),Ve),Je=e=>{if(e!==null&&!(e instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},Ne=new Map,Ze=async e=>{if(typeof K.hardwareContext=="function"){let r=await K.hardwareContext(e);return Je(r),r?.getDecoderCodec(e)??null}if(!Ne.has(e)){let r=Qe();Ne.set(e,r?.getDecoderCodec(e)??null)}return Ne.get(e)},Me=new Map,et=async e=>{if(typeof K.hardwareContext=="function"){let r=await K.hardwareContext(e);return Je(r),r?.getEncoderCodec(e)??null}if(!Me.has(e)){let r=Qe();Me.set(e,r?.getEncoderCodec(e)??null)}return Me.get(e)},tt=e=>{switch(e){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},be=e=>{switch(e){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},rt=e=>{switch(e){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},xe=e=>{switch(e){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},nt=e=>{switch(e){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},ve=e=>{switch(e){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},it=e=>{switch(e){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},ke=e=>{switch(e){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},ot=e=>{switch(e){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},st=e=>{switch(e){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},se=e=>{switch(e){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:e,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}},Yt=0x603n,at=e=>{switch(e){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return{nbChannels:4,order:o.AV_CHANNEL_ORDER_NATIVE,mask:Yt};case 5:return o.AV_CHANNEL_LAYOUT_5POINT0;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1;default:return{nbChannels:e,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var H=class H{constructor(){}static get level(){return H._level}static set level(r){if(r!==0&&r!==1&&r!==2&&r!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");H._level=r}static get _emitter(){return H._emitterInstance??=new _e}static on(r,t,n){return H._emitter.on(r,t,n)}static _error(...r){H._emitter._emit("error",r),H._level>=1&&console.error(...r)}static _warn(...r){H._emitter._emit("warn",r),H._level>=2&&console.warn(...r)}static _info(...r){H._emitter._emit("info",r),H._level>=3&&console.info(...r)}};H._level=3,H._emitterInstance=null;var ae=H;function m(e){if(!e)throw new Error("Assertion failed.")}var de=e=>e&&e[e.length-1];var u=e=>{let r=0;for(;e.readBits(1)===0&&r<32;)r++;if(r>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<r)-1+e.readBits(r)};var Q=e=>{let r=u(e);return(r&1)===0?-(r>>1):r+1>>1};var z=e=>e.constructor===Uint8Array?e:ArrayBuffer.isView(e)?new Uint8Array(e.buffer,e.byteOffset,e.byteLength):new Uint8Array(e),De=e=>e.constructor===DataView?e:ArrayBuffer.isView(e)?new DataView(e.buffer,e.byteOffset,e.byteLength):new DataView(e);var ct={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var lt={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var dt={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Le=e=>[...e].map(r=>r.toString(16).padStart(2,"0")).join("");var Ue=e=>(e=e>>1&1431655765|(e&1431655765)<<1,e=e>>2&858993459|(e&858993459)<<2,e=e>>4&252645135|(e&252645135)<<4,e=e>>8&16711935|(e&16711935)<<8,e=e>>16&65535|(e&65535)<<16,e>>>0);var ue=(e,r,t)=>{let n=0,i=e.length-1,s=-1;for(;n<=i;){let a=n+(i-n+1)/2|0;t(e[a])<=r?(s=a,n=a+1):i=a-1}return s};var Oe=e=>{throw new Error(`Unexpected value: ${e}`)};var Sr=1e6*(1+Number.EPSILON);var Br=(async()=>{})().constructor;var pe=e=>{m(Number.isInteger(e.num)),m(Number.isInteger(e.den)),m(e.den!==0);let r=Math.abs(e.num),t=Math.abs(e.den);for(;t!==0;){let i=r%t;r=t,t=i}let n=r||1;return{num:e.num/n,den:e.den/n}};var _e=class{constructor(){this._listeners=new Map}on(r,t,n){this._listeners.has(r)||this._listeners.set(r,new Set);let i={fn:t,once:n?.once??!1};return this._listeners.get(r).add(i),()=>{this._listeners.get(r)?.delete(i)}}_emit(...r){let[t,n]=r,i=this._listeners.get(t);if(i)for(let s of i){try{s.fn(n)}catch(a){console.error(a)}s.once&&i.delete(s)}}};var ce=k("mediabunny"),p=ne(k("node-av"));var Gt=new Set([p.AV_PIX_FMT_YUVJ411P,p.AV_PIX_FMT_YUVJ420P,p.AV_PIX_FMT_YUVJ422P,p.AV_PIX_FMT_YUVJ440P,p.AV_PIX_FMT_YUVJ444P]),X=class e extends ce.VideoSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof p.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==p.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=r}getFormat(){return it(this.frame.format)}getCodedWidth(){return this.frame.width}getCodedHeight(){return this.frame.height}getSquarePixelWidth(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?Math.round(this.frame.width*this.frame.sampleAspectRatio.num/this.frame.sampleAspectRatio.den):this.frame.width}getSquarePixelHeight(){return this.frame.sampleAspectRatio.num>this.frame.sampleAspectRatio.den?this.frame.height:Math.round(this.frame.height*this.frame.sampleAspectRatio.den/this.frame.sampleAspectRatio.num)}getColorSpace(){return new ce.VideoSampleColorSpace({primaries:be(this.frame.colorPrimaries),transfer:xe(this.frame.colorTrc),matrix:ve(this.frame.colorSpace),fullRange:this.frame.colorRange===p.AVCOL_RANGE_JPEG||Gt.has(this.frame.format)?!0:this.frame.colorRange===p.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return m(this.frame.data),this.frame.data.map((r,t)=>({data:z(r),stride:this.frame.linesize[t]}))}async toRgbSample(r,t){let n=this.frame.width,i=this.frame.height,s=new p.SoftwareScaleContext,a=this.frame.format,d=ke("RGBA");s.getContext(n,i,a,n,i,d,p.SWS_BILINEAR);let f=new p.Frame;f.width=n,f.height=i,f.format=d,f.alloc(),f.allocBuffer();let l=this.frame;try{await s.scaleFrame(f,l)}finally{s.freeContext()}return f.sampleAspectRatio=l.sampleAspectRatio,new ce.VideoSample(new e(f),r)}},He=(e,r)=>{r.colorPrimaries=tt(e.colorSpace.primaries??"unknown")??p.AVCOL_PRI_UNSPECIFIED,r.colorSpace=nt(e.colorSpace.matrix??"unknown")??p.AVCOL_SPC_UNSPECIFIED,r.colorTrc=rt(e.colorSpace.transfer??"unknown")??p.AVCOL_TRC_UNSPECIFIED,r.colorRange=e.colorSpace.fullRange===!1?p.AVCOL_RANGE_MPEG:e.colorSpace.fullRange===!0?p.AVCOL_RANGE_JPEG:p.AVCOL_RANGE_UNSPECIFIED},he=async(e,r,t)=>{m(e.format!==null),r.format=ke(e.format),r.width=e.codedWidth,r.height=e.codedHeight,r.sampleAspectRatio=new p.Rational(e.pixelAspectRatio.num,e.pixelAspectRatio.den),He(e,r);let n=e.allocationSize();return(!t||t.byteLength!==n)&&(t=Buffer.from({length:n})),await e.copyTo(t),r.fromBuffer(t),t},ut=async(e,r)=>{let t,n=!1;if(e._data instanceof X)t=e._data.frame;else{if(e.format===null)return null;t=new p.Frame,t.alloc(),n=!0,await he(e,t,null)}let i=[];(e.squarePixelWidth!==e.codedWidth||e.squarePixelHeight!==e.codedHeight)&&(i.push(`scale=${e.squarePixelWidth}:${e.squarePixelHeight}`),i.push("setsar=1")),r.rotation===90?i.push("transpose=1"):r.rotation===180?i.push("transpose=1,transpose=1"):r.rotation===270&&i.push("transpose=2"),i.push(`crop=${Math.round(r.crop.width)}:${Math.round(r.crop.height)}:${Math.round(r.crop.left)}:${Math.round(r.crop.top)}`),r.fit==="fill"?i.push(`scale=${r.width}:${r.height}`):r.fit==="contain"?(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=decrease`),i.push(`pad=${r.width}:${r.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):r.fit==="cover"&&(i.push(`scale=${r.width}:${r.height}:force_original_aspect_ratio=increase`),i.push(`crop=${r.width}:${r.height}`)),i.push("setsar=1");let s=new p.FilterGraph;s.alloc();try{let a=`video_size=${t.width}x${t.height}:pix_fmt=${t.format}:time_base=1/1000000:pixel_aspect=${e.pixelAspectRatio.num}/${e.pixelAspectRatio.den}:colorspace=${t.colorSpace}:range=${t.colorRange}`,d=s.createFilter(p.Filter.getByName("buffer"),"src",a),f=s.createFilter(p.Filter.getByName("buffersink"),"sink");m(d&&f);let l=p.FilterInOut.createList([{name:"in",filterCtx:d,padIdx:0}]),A=p.FilterInOut.createList([{name:"out",filterCtx:f,padIdx:0}]),h=s.parsePtr(`[in]${i.join(",")}[out]`,A,l);p.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let _=await s.config();p.FFmpegError.throwIfError(_,"FilterGraph.config");let F=await d.buffersrcAddFrame(t);p.FFmpegError.throwIfError(F,"buffersrcAddFrame"),await d.buffersrcAddFrame(null);let g=new p.Frame;g.alloc();let x=await f.buffersinkGetFrame(g);return p.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new ce.VideoSample(new X(g),{timestamp:e.timestamp,duration:e.duration,rotation:0})}finally{s.free(),n&&t.free()}};var ye=class extends Ee.CustomVideoDecoder{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(t,n){return t==="avc"||t==="hevc"||t==="vp8"||t==="vp9"||t==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(t){m(this.codecContext===null);let n=j[this.codec];m(n!==void 0);let i;if(this.codec==="vp9"&&t.sideData.alpha?i=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(n):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?i=C.Codec.findDecoder(n):i=await Ze(n)??C.Codec.findDecoder(n),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(i),this.pixelAspectRatio=pe({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=n,s.extraData=this.config.description?Buffer.from(z(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=C.Dictionary.fromObject({strict:C.FF_COMPLIANCE_STRICT}),d=await s.open2(i,a);C.FFmpegError.throwIfError(d,"Open codec context"),this.codecContext=s}async decode(t){if(this.codecContext===null&&await this.initCodecContext(t),m(this.codecContext),this.packet.isKeyframe=t.type==="key",this.packet.data=Buffer.from(t.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(t.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(t.microsecondDuration),t.sideData.alpha){let a=Buffer.alloc(8+t.sideData.alpha.byteLength);a[7]=1,a.set(t.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let n=ue(this.preciseTimings,t.microsecondTimestamp,a=>a.microsecondTimestamp),i=n!==-1?this.preciseTimings[n]:null;i&&i.microsecondTimestamp===t.microsecondTimestamp?(i.timestamp!==t.timestamp&&(i.timestampIsValid=!1),i.duration!==t.duration&&(i.durationIsValid=!1)):(this.preciseTimings.splice(n+1,0,{microsecondTimestamp:t.microsecondTimestamp,timestamp:t.timestamp,duration:t.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(t){C.FFmpegError.throwIfError(t,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let n=Number(this.frame.pts)/1e6,i=Number(this.frame.duration)/1e6,s=ue(this.preciseTimings,Number(this.frame.pts),f=>f.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(n=a.timestamp),a.durationIsValid&&(i=a.duration));let d=this.frame.clone();if(!d)throw new Error("Frame clone allocation failed.");this.onSample(new Ee.VideoSample(new X(d),{timestamp:n,duration:i}))}async flush(){if(!this.codecContext)return;let t=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(t,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===C.AVERROR_EAGAIN||n===C.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var ie=k("mediabunny"),c=ne(k("node-av"));var W=class e{constructor(r){this.bytes=r;this.pos=0}seekToByte(r){this.pos=8*r}readBit(){let r=Math.floor(this.pos/8),t=this.bytes[r]??0,n=7-(this.pos&7),i=(t&1<<n)>>n;return this.pos++,i}readBits(r){if(r===1)return this.readBit();let t=0;for(let n=0;n<r;n++)t<<=1,t|=this.readBit();return t}writeBits(r,t){let n=this.pos+r;for(let i=this.pos;i<n;i++){let s=Math.floor(i/8),a=this.bytes[s],d=7-(i&7);a&=~(1<<d),a|=(t&1<<n-i-1)>>n-i-1<<d,this.bytes[s]=a}this.pos=n}copyBits(r,t){let n=0;for(n;n<r-7;n+=8)this.writeBits(8,t.readBits(8));let i=r-n;i>0&&this.writeBits(i,t.readBits(i))}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let r=this.pos/8,t=this.bytes[r]??0;return this.pos+=8,t}skipBits(r){this.pos+=r}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let r=new e(this.bytes);return r.pos=this.pos,r}};var At=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],$t=[-1,1,2,3,4,5,6,8],ft=e=>{if(!e||e.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let r=new W(e),t=ze(r),{frequencyIndex:n,sampleRate:i}=qe(r),s=r.readBits(4),a=null;s>=1&&s<=7&&(a=$t[s]);let d=t,f=!1,l=i;if(t===5||t===29)f=t===29,l=qe(r).sampleRate,d=ze(r),d===22&&r.skipBits(4);else for(;r.getBitsLeft()>15;){let A=r.pos;if(r.readBits(11)!==695){r.pos=A+1;continue}ze(r)===5&&r.readBits(1)&&(l=qe(r).sampleRate,r.getBitsLeft()>11&&r.readBits(11)===1352&&(f=!!r.readBits(1)));break}return a!==null&&a>1&&(f=!1),{objectType:t,coreObjectType:d,frequencyIndex:n,channelConfiguration:s,outputSampleRate:l,outputNumberOfChannels:f&&a===1?2:a}},ze=e=>{let r=e.readBits(5);return r===31?32+e.readBits(6):r},qe=e=>{let r=e.readBits(4);return r===15?{frequencyIndex:r,sampleRate:e.readBits(24)}:{frequencyIndex:r,sampleRate:r<At.length?At[r]:null}};var mt=e=>{let r=new Uint8Array(7),t=new W(r),{coreObjectType:n,frequencyIndex:i,channelConfiguration:s}=e,a=n-1;return t.writeBits(12,4095),t.writeBits(1,0),t.writeBits(2,0),t.writeBits(1,1),t.writeBits(2,a),t.writeBits(4,i),t.writeBits(1,0),t.writeBits(3,s),t.writeBits(1,0),t.writeBits(1,0),t.writeBits(1,0),t.writeBits(1,0),t.skipBits(13),t.writeBits(11,2047),t.writeBits(2,0),{header:r,bitstream:t}};var jt=["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"],Qt=["aac","opus","mp3","vorbis","flac","ac3","eac3","dts"],Jr=[...Qt,...jt];var Xe=[{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}];var le=[{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}];var pt=".01.01.01.01.00",ht=".0.110.01.01.01.0",Jt=["ap4x","ap4h","apch","apcn","apcs","apco"];var gt=[8,10,12];var Ae=e=>{let{codec:r,codecDescription:t,colorSpace:n,avcCodecInfo:i,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:d,proresFormat:f}=e;if(r==="avc"){if(m(e.avcType!==null),i){let l=new Uint8Array([i.avcProfileIndication,i.profileCompatibility,i.avcLevelIndication]);return`avc${e.avcType}.${Le(l)}`}if(!t||t.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${e.avcType}.${Le(t.subarray(1,4))}`}else if(r==="hevc"){m(e.hevcType!==null);let l,A,h,_,F,g;if(s)l=s.generalProfileSpace,A=s.generalProfileIdc,h=Ue(s.generalProfileCompatibilityFlags),_=s.generalTierFlag,F=s.generalLevelIdc,g=[...s.generalConstraintIndicatorFlags];else{if(!t||t.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let b=De(t),E=b.getUint8(1);l=E>>6&3,A=E&31,h=Ue(b.getUint32(2)),_=E>>5&1,F=b.getUint8(12),g=[];for(let S=0;S<6;S++)g.push(b.getUint8(6+S))}let x=`${e.hevcType}.`;for(x+=["","A","B","C"][l]+A,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=_===0?"L":"H",x+=F;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(b=>b.toString(16).toUpperCase()).join(".")),x}else{if(r==="vp8")return"vp8";if(r==="vp9"){if(!a){let S=e.width*e.height,B=de(le).level;for(let T of le)if(S<=T.maxPictureSize){B=T.level;break}return`vp09.00.${B.toString().padStart(2,"0")}.08`}let l=a.profile.toString().padStart(2,"0"),A=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),_=a.chromaSubsampling.toString().padStart(2,"0"),F=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),b=a.videoFullRangeFlag.toString().padStart(2,"0"),E=`vp09.${l}.${A}.${h}.${_}`;return E+=`.${F}.${g}.${x}.${b}`,E.endsWith(pt)&&(E=E.slice(0,-pt.length)),E}else if(r==="av1"){if(!d){let T=e.width*e.height,I=de(le).level;for(let w of le)if(T<=w.maxPictureSize){I=w.level;break}return`av01.0.${I.toString().padStart(2,"0")}M.08`}let l=d.profile,A=d.level.toString().padStart(2,"0"),h=d.tier?"H":"M",_=d.bitDepth.toString().padStart(2,"0"),F=d.monochrome?"1":"0",g=100*d.chromaSubsamplingX+10*d.chromaSubsamplingY+1*(d.chromaSubsamplingX&&d.chromaSubsamplingY?d.chromaSamplePosition:0),x=n?.primaries?ct[n.primaries]:1,b=n?.transfer?lt[n.transfer]:1,E=n?.matrix?dt[n.matrix]:1,S=n?.fullRange?1:0,B=`av01.${l}.${A}${h}.${_}`;return B+=`.${F}.${g.toString().padStart(3,"0")}`,B+=`.${x.toString().padStart(2,"0")}`,B+=`.${b.toString().padStart(2,"0")}`,B+=`.${E.toString().padStart(2,"0")}`,B+=`.${S}`,B.endsWith(ht)&&(B=B.slice(0,-ht.length)),B}else{if(r==="prores")return f??"apch";r!==null&&Oe(r)}}throw new TypeError(`Unhandled codec '${r}'.`)};var Se=e=>{if(e.startsWith("avc1")||e.startsWith("avc3")){let r=Number.parseInt(e.slice(5,7),16);return[110,122,244].includes(r)?10:8}else{if(e.startsWith("hev1")||e.startsWith("hvc1"))return Number(e.split(".")[1]?.replace(/^[ABC]/,""))===2?10:8;if(e.startsWith("vp09")||e.startsWith("av01")){let r=Number(e.split(".")[3]);return r===10||r===12?r:8}}return null};var Zr=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",...Jt];var we=function*(e){let r=0,t=-1;for(;r<e.length-2;){let n=e.indexOf(0,r);if(n===-1||n>=e.length-2)break;r=n;let i=0;if(r+3<e.length&&e[r+1]===0&&e[r+2]===0&&e[r+3]===1?i=4:e[r+1]===0&&e[r+2]===1&&(i=3),i===0){r++;continue}t!==-1&&r>t&&(yield{offset:t,length:r-t}),t=r+i,r=t}t!==-1&&t<e.length&&(yield{offset:t,length:e.length-t})};var We=e=>e&31,Ye=e=>{let r=[],t=e.length;for(let n=0;n<t;n++)n+2<t&&e[n]===0&&e[n+1]===0&&e[n+2]===3?(r.push(0,0),n+=2):r.push(e[n]);return new Uint8Array(r)};var Cn=new Uint8Array([0,0,0,1]);var xt=e=>{try{let r=[],t=[],n=[];for(let d of we(e)){let f=e.subarray(d.offset,d.offset+d.length),l=We(f[0]);l===7?r.push(f):l===8?t.push(f):l===13&&n.push(f)}if(r.length===0||t.length===0)return null;let i=r[0],s=Zt(i);m(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:r,pictureParameterSets:t,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?n:null}}catch(r){return ae._error("Error building AVC Decoder Configuration Record:",r),null}},vt=e=>{let r=[];r.push(e.configurationVersion),r.push(e.avcProfileIndication),r.push(e.profileCompatibility),r.push(e.avcLevelIndication),r.push(252|e.lengthSizeMinusOne&3),r.push(224|e.sequenceParameterSets.length&31);for(let t of e.sequenceParameterSets){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}r.push(e.pictureParameterSets.length);for(let t of e.pictureParameterSets){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}if((e.avcProfileIndication===100||e.avcProfileIndication===110||e.avcProfileIndication===122||e.avcProfileIndication===144)&&e.chromaFormat!==null){m(e.bitDepthLumaMinus8!==null),m(e.bitDepthChromaMinus8!==null),m(e.sequenceParameterSetExt!==null),r.push(252|e.chromaFormat&3),r.push(248|e.bitDepthLumaMinus8&7),r.push(248|e.bitDepthChromaMinus8&7),r.push(e.sequenceParameterSetExt.length);for(let t of e.sequenceParameterSetExt){let n=t.byteLength;r.push(n>>8),r.push(n&255);for(let i=0;i<n;i++)r.push(t[i])}}return new Uint8Array(r)};var _t={1:{num:1,den:1},2:{num:12,den:11},3:{num:10,den:11},4:{num:16,den:11},5:{num:40,den:33},6:{num:24,den:11},7:{num:20,den:11},8:{num:32,den:11},9:{num:80,den:33},10:{num:18,den:11},11:{num:15,den:11},12:{num:64,den:33},13:{num:160,den:99},14:{num:4,den:3},15:{num:3,den:2},16:{num:2,den:1}},Zt=e=>{try{let r=Ye(e),t=new W(r);if(t.skipBits(1),t.skipBits(2),t.readBits(5)!==7)return null;let i=t.readAlignedByte(),s=t.readAlignedByte(),a=t.readAlignedByte();u(t);let d=1,f=0,l=0,A=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(d=u(t),d===3&&(A=t.readBits(1)),f=u(t),l=u(t),t.skipBits(1),t.readBits(1))){for(let V=0;V<(d!==3?8:12);V++)if(t.readBits(1)){let ee=V<6?16:64,$=8,O=8;for(let re=0;re<ee;re++){if(O!==0){let oe=Q(t);O=($+oe+256)%256}$=O===0?$:O}}}u(t);let h=u(t);if(h===0)u(t);else if(h===1){t.skipBits(1),Q(t),Q(t);let M=u(t);for(let V=0;V<M;V++)Q(t)}u(t),t.skipBits(1);let _=u(t),F=u(t),g=16*(_+1),x=16*(F+1),b=g,E=x,S=t.readBits(1);if(S||t.skipBits(1),t.skipBits(1),t.readBits(1)){let M=u(t),V=u(t),q=u(t),ee=u(t),$,O;if((A===0?d:0)===0)$=1,O=2-S;else{let oe=d===3?1:2,ge=d===1?2:1;$=oe,O=ge*(2-S)}b-=$*(M+V),E-=O*(q+ee)}let T=2,I=2,w=2,R=0,N={num:1,den:1},U=null,D=null,Y=null,P=null,Z=t.pos;if(t.readBits(1)){if(t.readBits(1)){let oe=t.readBits(8);if(oe===255)N={num:t.readBits(16),den:t.readBits(16)};else{let ge=_t[oe];ge&&(N=ge)}}t.readBits(1)&&t.skipBits(1),t.readBits(1)&&(t.skipBits(3),R=t.readBits(1),t.readBits(1)&&(T=t.readBits(8),I=t.readBits(8),w=t.readBits(8))),t.readBits(1)&&(u(t),u(t)),t.readBits(1)&&(t.skipBits(32),t.skipBits(32),t.skipBits(1));let O=t.readBits(1);O&&Ct(t);let re=t.readBits(1);re&&Ct(t),(O||re)&&t.skipBits(1),t.skipBits(1),Y=t.pos,P=t.readBits(1),P&&(t.skipBits(1),u(t),u(t),u(t),u(t),U=u(t),D=u(t))}if(U===null){m(D===null);let M=s&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&M)U=0,D=0;else{let V=_+1,q=F+1,ee=(2-S)*q,$=Xe.find(re=>re.level>=a)??de(Xe),O=Math.min(Math.floor($.maxDpbMbs/(V*ee)),16);U=O,D=O}}return m(D!==null),{emulationUnpreventedBytes:r,profileIdc:i,constraintFlags:s,levelIdc:a,frameMbsOnlyFlag:S,chromaFormatIdc:d,bitDepthLumaMinus8:f,bitDepthChromaMinus8:l,codedWidth:g,codedHeight:x,displayWidth:b,displayHeight:E,pixelAspectRatio:N,colourPrimaries:T,matrixCoefficients:w,transferCharacteristics:I,fullRangeFlag:R,numReorderFrames:U,maxDecFrameBuffering:D,vuiParametersFlagBitOffset:Z,bitstreamRestrictionFlagBitOffset:Y,bitstreamRestrictionFlag:P}}catch(r){return ae._error("Error parsing AVC SPS:",r),null}},Ct=e=>{let r=u(e);e.skipBits(4),e.skipBits(4);for(let t=0;t<=r;t++)u(e),u(e),e.skipBits(1);e.skipBits(5),e.skipBits(5),e.skipBits(5),e.skipBits(5)};var Be=e=>e>>1&63,er=e=>{try{let r=new W(Ye(e));r.skipBits(16),r.readBits(4);let t=r.readBits(3),n=r.readBits(1),{general_profile_space:i,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:d,general_constraint_indicator_flags:f,general_level_idc:l}=tr(r,t);u(r);let A=u(r),h=0;A===3&&(h=r.readBits(1));let _=u(r),F=u(r),g=_,x=F;if(r.readBits(1)){let P=u(r),Z=u(r),te=u(r),M=u(r),V=1,q=1,ee=h===0?A:0;ee===1?(V=2,q=2):ee===2&&(V=2,q=1),g-=(P+Z)*V,x-=(te+M)*q}let b=u(r),E=u(r);u(r);let B=r.readBits(1)?0:t,T=0;for(let P=B;P<=t;P++)u(r),T=u(r),u(r);u(r),u(r),u(r),u(r),u(r),u(r),r.readBits(1)&&r.readBits(1)&&rr(r),r.skipBits(1),r.skipBits(1),r.readBits(1)&&(r.skipBits(4),r.skipBits(4),u(r),u(r),r.skipBits(1));let I=u(r);if(nr(r,I),r.readBits(1)){let P=u(r);for(let Z=0;Z<P;Z++)u(r),r.skipBits(1)}r.skipBits(1),r.skipBits(1);let w=2,R=2,N=2,U=0,D=0,Y={num:1,den:1};if(r.readBits(1)){let P=or(r,t);Y=P.pixelAspectRatio,w=P.colourPrimaries,R=P.transferCharacteristics,N=P.matrixCoefficients,U=P.fullRangeFlag,D=P.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:Y,colourPrimaries:w,transferCharacteristics:R,matrixCoefficients:N,fullRangeFlag:U,maxDecFrameBuffering:T+1,spsMaxSubLayersMinus1:t,spsTemporalIdNestingFlag:n,generalProfileSpace:i,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:d,generalConstraintIndicatorFlags:f,generalLevelIdc:l,chromaFormatIdc:A,bitDepthLumaMinus8:b,bitDepthChromaMinus8:E,minSpatialSegmentationIdc:D}}catch(r){return ae._error("Error parsing HEVC SPS:",r),null}},yt=e=>{try{let r=[],t=[],n=[],i=[];for(let l of we(e)){let A=e.subarray(l.offset,l.offset+l.length),h=Be(A[0]);h===32?r.push(A):h===33?t.push(A):h===34?n.push(A):(h===39||h===40)&&i.push(A)}if(t.length===0||n.length===0)return null;let s=er(t[0]);if(!s)return null;let a=0;if(n.length>0){let l=n[0],A=new W(Ye(l));A.skipBits(16),u(A),u(A),A.skipBits(1),A.skipBits(1),A.skipBits(3),A.skipBits(1),A.skipBits(1),u(A),u(A),Q(A),A.skipBits(1),A.skipBits(1),A.readBits(1)&&u(A),Q(A),Q(A),A.skipBits(1),A.skipBits(1),A.skipBits(1),A.skipBits(1);let h=A.readBits(1),_=A.readBits(1);!h&&!_?a=0:h&&!_?a=2:!h&&_?a=3:a=0}let d=[...r.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:r}]:[],...t.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:t}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:n}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:Be(i[0][0]),nalUnits:i}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:d}}catch(r){return ae._error("Error building HEVC Decoder Configuration Record:",r),null}},tr=(e,r)=>{let t=e.readBits(2),n=e.readBits(1),i=e.readBits(5),s=0;for(let A=0;A<32;A++)s=s<<1|e.readBits(1);let a=new Uint8Array(6);for(let A=0;A<6;A++)a[A]=e.readBits(8);let d=e.readBits(8),f=[],l=[];for(let A=0;A<r;A++)f.push(e.readBits(1)),l.push(e.readBits(1));if(r>0)for(let A=r;A<8;A++)e.skipBits(2);for(let A=0;A<r;A++)f[A]&&e.skipBits(88),l[A]&&e.skipBits(8);return{general_profile_space:t,general_tier_flag:n,general_profile_idc:i,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:d}},rr=e=>{for(let r=0;r<4;r++)for(let t=0;t<(r===3?2:6);t++)if(!e.readBits(1))u(e);else{let i=Math.min(64,1<<4+(r<<1));r>1&&Q(e);for(let s=0;s<i;s++)Q(e)}},nr=(e,r)=>{let t=[];for(let n=0;n<r;n++)t[n]=ir(e,n,r,t)},ir=(e,r,t,n)=>{let i=0,s=0,a=0;if(r!==0&&(s=e.readBits(1)),s){if(r===t){let f=u(e);a=r-(f+1)}else a=r-1;e.readBits(1),u(e);let d=n[a]??0;for(let f=0;f<=d;f++)e.readBits(1)||e.readBits(1);i=n[a]}else{let d=u(e),f=u(e);for(let l=0;l<d;l++)u(e),e.readBits(1);for(let l=0;l<f;l++)u(e),e.readBits(1);i=d+f}return i},or=(e,r)=>{let t=2,n=2,i=2,s=0,a=0,d={num:1,den:1};if(e.readBits(1)){let f=e.readBits(8);if(f===255)d={num:e.readBits(16),den:e.readBits(16)};else{let l=_t[f];l&&(d=l)}}return e.readBits(1)&&e.readBits(1),e.readBits(1)&&(e.readBits(3),s=e.readBits(1),e.readBits(1)&&(t=e.readBits(8),n=e.readBits(8),i=e.readBits(8))),e.readBits(1)&&(u(e),u(e)),e.readBits(1),e.readBits(1),e.readBits(1),e.readBits(1)&&(u(e),u(e),u(e),u(e)),e.readBits(1)&&(e.readBits(32),e.readBits(32),e.readBits(1)&&u(e),e.readBits(1)&&sr(e,!0,r)),e.readBits(1)&&(e.readBits(1),e.readBits(1),e.readBits(1),a=u(e),u(e),u(e),u(e),u(e)),{pixelAspectRatio:d,colourPrimaries:t,transferCharacteristics:n,matrixCoefficients:i,fullRangeFlag:s,minSpatialSegmentationIdc:a}},sr=(e,r,t)=>{let n=!1,i=!1,s=!1;r&&(n=e.readBits(1)===1,i=e.readBits(1)===1,(n||i)&&(s=e.readBits(1)===1,s&&(e.readBits(8),e.readBits(5),e.readBits(1),e.readBits(5)),e.readBits(4),e.readBits(4),s&&e.readBits(4),e.readBits(5),e.readBits(5),e.readBits(5)));for(let a=0;a<=t;a++){let d=e.readBits(1)===1,f=!0;d||(f=e.readBits(1)===1);let l=!1;f?u(e):l=e.readBits(1)===1;let A=1;l||(A=u(e)+1),n&&bt(e,A,s),i&&bt(e,A,s)}},bt=(e,r,t)=>{for(let n=0;n<r;n++)u(e),u(e),t&&(u(e),u(e)),e.readBits(1)},Et=e=>{let r=[];r.push(e.configurationVersion),r.push((e.generalProfileSpace&3)<<6|(e.generalTierFlag&1)<<5|e.generalProfileIdc&31),r.push(e.generalProfileCompatibilityFlags>>>24&255),r.push(e.generalProfileCompatibilityFlags>>>16&255),r.push(e.generalProfileCompatibilityFlags>>>8&255),r.push(e.generalProfileCompatibilityFlags&255),r.push(...e.generalConstraintIndicatorFlags),r.push(e.generalLevelIdc&255),r.push(240|e.minSpatialSegmentationIdc>>8&15),r.push(e.minSpatialSegmentationIdc&255),r.push(252|e.parallelismType&3),r.push(252|e.chromaFormatIdc&3),r.push(248|e.bitDepthLumaMinus8&7),r.push(248|e.bitDepthChromaMinus8&7),r.push(e.avgFrameRate>>8&255),r.push(e.avgFrameRate&255),r.push((e.constantFrameRate&3)<<6|(e.numTemporalLayers&7)<<3|(e.temporalIdNested&1)<<2|e.lengthSizeMinusOne&3),r.push(e.arrays.length&255);for(let t of e.arrays){r.push((t.arrayCompleteness&1)<<7|0|t.nalUnitType&63),r.push(t.nalUnits.length>>8&255),r.push(t.nalUnits.length&255);for(let n of t.nalUnits){r.push(n.length>>8&255),r.push(n.length&255);for(let i=0;i<n.length;i++)r.push(n[i])}}return new Uint8Array(r)};var ar={1:{colourPrimaries:5,transferCharacteristics:6,matrixCoefficients:5},2:{colourPrimaries:1,transferCharacteristics:1,matrixCoefficients:1},3:{colourPrimaries:6,transferCharacteristics:6,matrixCoefficients:6},4:{colourPrimaries:7,transferCharacteristics:7,matrixCoefficients:7},5:{colourPrimaries:9,transferCharacteristics:14,matrixCoefficients:9},7:{colourPrimaries:1,transferCharacteristics:13,matrixCoefficients:0}},St=e=>{let r=new W(e);if(r.readBits(2)!==2)return null;let n=r.readBits(1),s=(r.readBits(1)<<1)+n;if(s===3&&r.skipBits(1),r.readBits(1)===1||r.readBits(1)!==0||(r.skipBits(2),r.readBits(24)!==4817730))return null;let l=8;s>=2&&(l=r.readBits(1)?12:10);let A=r.readBits(3),h=0,_=0;if(A!==7)if(_=r.readBits(1),s===1||s===3){let N=r.readBits(1),U=r.readBits(1);h=!N&&!U?3:N&&!U?2:1,r.skipBits(1)}else h=1;else h=3,_=1;let F=r.readBits(16),g=r.readBits(16),x=F+1,b=g+1,E=x*b,S=de(le).level;for(let R of le)if(E<=R.maxPictureSize){S=R.level;break}let B=ar[A],T=B?.colourPrimaries??2,I=B?.transferCharacteristics??2,w=B?.matrixCoefficients??2;return{profile:s,level:S,bitDepth:l,chromaSubsampling:h,videoFullRangeFlag:_,colourPrimaries:T,transferCharacteristics:I,matrixCoefficients:w}};var cr=function*(e){let r=new W(e),t=()=>{let n=0;for(let i=0;i<8;i++){let s=r.readAlignedByte();if(n+=(s&127)*2**(i*7),!(s&128))break;if(i===7&&s&128)return null}return n>2**32-1?null:n};for(;r.getBitsLeft()>=8;){r.skipBits(1);let n=r.readBits(4),i=r.readBits(1),s=r.readBits(1);r.skipBits(1),i&&r.skipBits(8);let a;if(s){let d=t();if(d===null)return;a=d}else a=Math.floor(r.getBitsLeft()/8);m(r.pos%8===0),yield{type:n,data:e.subarray(r.pos/8,r.pos/8+a)},r.skipBits(a*8)}},Bt=e=>{for(let{type:r,data:t}of cr(e)){if(r!==1)continue;let n=new W(t),i=n.readBits(3),s=n.readBits(1),a=n.readBits(1),d=0,f=0,l=0;if(a)d=n.readBits(5);else{let D=n.readBits(1),Y=0;if(D){if(n.skipBits(32),n.skipBits(32),n.readBits(1)){let M=0;for(;M<32&&!n.readBits(1);)M++;M<32&&n.skipBits(M)}Y=n.readBits(1),Y&&(l=n.readBits(5),n.skipBits(32),n.skipBits(5),n.skipBits(5))}let P=n.readBits(1),Z=n.readBits(5);for(let te=0;te<=Z;te++){n.skipBits(12);let M=n.readBits(5);if(te===0&&(d=M),M>7){let V=n.readBits(1);te===0&&(f=V)}if(Y&&n.readBits(1)){let q=l+1;n.skipBits(q),n.skipBits(q),n.skipBits(1)}P&&n.readBits(1)&&n.skipBits(4)}}let A=n.readBits(4),h=n.readBits(4),_=A+1;n.skipBits(_);let F=h+1;n.skipBits(F);let g=0;if(a?g=0:g=n.readBits(1),g&&(n.skipBits(4),n.skipBits(3)),n.skipBits(1),n.skipBits(1),n.skipBits(1),!a){n.skipBits(1),n.skipBits(1),n.skipBits(1),n.skipBits(1);let D=n.readBits(1);D&&(n.skipBits(1),n.skipBits(1));let Y=n.readBits(1),P=0;Y?P=2:P=n.readBits(1),P>0&&(n.readBits(1)||n.skipBits(1)),D&&n.skipBits(3)}n.skipBits(1),n.skipBits(1),n.skipBits(1);let x=n.readBits(1),b=8;i===2&&x?b=n.readBits(1)?12:10:i<=2&&(b=x?10:8);let E=0;i!==1&&(E=n.readBits(1));let S=2,B=2,T=2;n.readBits(1)&&(S=n.readBits(8),B=n.readBits(8),T=n.readBits(8));let w=0,R=1,N=1,U=0;return E?w=n.readBits(1):S===1&&B===13&&T===0?(w=1,R=0,N=0):(w=n.readBits(1),i===0?(R=1,N=1):i===1?(R=0,N=0):b===12?(R=n.readBits(1),N=R?n.readBits(1):0):(R=1,N=0),R&&N&&(U=n.readBits(2))),{profile:i,level:d,tier:f,bitDepth:b,monochrome:E,chromaSubsamplingX:R,chromaSubsamplingY:N,chromaSamplePosition:U,videoFullRangeFlag:w,colourPrimaries:S,transferCharacteristics:B,matrixCoefficients:T}}return null};var bn=[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];var xn=new Uint8Array([5,4,65,67,45,51]),vn=new Uint8Array([5,4,69,65,67,51]);var lr={apco:c.AV_PROFILE_PRORES_PROXY,apcs:c.AV_PROFILE_PRORES_LT,apcn:c.AV_PROFILE_PRORES_STANDARD,apch:c.AV_PROFILE_PRORES_HQ,ap4h:c.AV_PROFILE_PRORES_4444,ap4x:c.AV_PROFILE_PRORES_XQ},It={8:[c.AV_PIX_FMT_YUV420P,c.AV_PIX_FMT_NV12,c.AV_PIX_FMT_YUV422P,c.AV_PIX_FMT_YUV444P],10:[c.AV_PIX_FMT_YUV420P10LE,c.AV_PIX_FMT_P010LE,c.AV_PIX_FMT_YUV422P10LE,c.AV_PIX_FMT_YUV444P10LE],12:[c.AV_PIX_FMT_YUV420P12LE,c.AV_PIX_FMT_YUV422P12LE,c.AV_PIX_FMT_YUV444P12LE]},Pt={8:[c.AV_PIX_FMT_YUVA420P,c.AV_PIX_FMT_YUVA422P,c.AV_PIX_FMT_YUVA444P],10:[c.AV_PIX_FMT_YUVA420P10LE,c.AV_PIX_FMT_YUVA422P10LE,c.AV_PIX_FMT_YUVA444P10LE],12:[c.AV_PIX_FMT_YUVA422P12LE,c.AV_PIX_FMT_YUVA444P12LE]},$e=(e,r,t)=>{let n=t?Pt[r]:It[r];return e?n.find(i=>e.includes(i))??null:n[0]},wt=e=>{for(let r of gt)if(It[r].includes(e)||Pt[r].includes(e))return r;return null},dr=(e,r)=>!(e===c.AVCOL_TRC_SMPTE2084||e===c.AVCOL_TRC_ARIB_STD_B67)||r===null||r>=10?e:(ie.Logging._warn(`Encoding ${r}-bit output from frames labelled '${e===c.AVCOL_TRC_SMPTE2084?"pq":"hlg"}'. That transfer function needs at least 10 bits, so the output states no transfer instead of claiming one its samples cannot carry.`),c.AVCOL_TRC_UNSPECIFIED),ur=e=>{let{codecName:r,supportedPixelFormats:t,requestedBitDepth:n,incomingBitDepth:i,wantsAlpha:s}=e,a=n??i;if(a!==null){let f=$e(t,a,s);if(f!==null)return f;if(n!==null)throw new Error(`Encoder '${r??"unknown"}' cannot encode ${n}-bit video${s?" with alpha":""}, which the requested codec profile demands.`)}let d=c.AV_PIX_FMT_YUV420P;return t&&(t.includes(c.AV_PIX_FMT_YUV420P)||(d=t[0]),s&&(t.includes(c.AV_PIX_FMT_YUVA420P)?d=c.AV_PIX_FMT_YUVA420P:d=c.avcodecFindBestPixFmtOfList(t,c.AV_PIX_FMT_YUVA444P12LE))),d},Ge=(e,r)=>{if(e==="prores"){let t=c.Codec.findEncoderByName(c.FF_ENCODER_PRORES_KS);if(t)return t}return c.Codec.findEncoder(r)},Ar=e=>{let r=Math.round(e*1001);return r%1e3===0&&Math.abs(r/1001-e)<1e-4&&!Number.isInteger(e)?{num:r,den:1001}:pe({num:Math.round(e*1e3),den:1e3})},Ie=class extends ie.CustomVideoEncoder{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.quantizer=null;this.preciseTimings=[]}static supports(t,n){if(!(n.bitrateMode==="quantizer"?t==="avc"||t==="hevc"||t==="vp9"||t==="av1":t==="avc"||t==="hevc"||t==="vp8"||t==="vp9"||t==="av1"||t==="prores"))return!1;let s=Se(n.codec);if(s===null)return!0;let a=j[t];m(a!==void 0);let d=Ge(t,a);return!!d&&$e(d.pixelFormats,s,n.alpha==="keep")!==null}async init(){this.frame=new c.Frame,this.frame.alloc(),this.frame.timeBase=new c.Rational(1,1e6),this.packet=new c.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=this.config.alpha==="keep",i=Se(this.config.codec),s=null;if(this.codec==="vp9"&&n)s=c.Codec.findEncoderByName(c.FF_ENCODER_LIBVPX_VP9)??c.Codec.findEncoder(t);else if(this.config.hardwareAcceleration==="prefer-software")s=Ge(this.codec,t);else{let a=await et(t);a&&this.config.bitrateMode==="quantizer"&&!a.name?.endsWith("_nvenc")&&(a=null),a&&i!==null&&$e(a.pixelFormats,i,n)===null&&(a=null),s=a??Ge(this.codec,t)}if(!s)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=s}async createCodecContext(){m(this.codecContext===null);let t=new c.CodecContext;t.allocContext3(this.avCodec);let n=wt(this.frame.format),i=ur({codecName:this.avCodec.name,supportedPixelFormats:this.avCodec.pixelFormats,requestedBitDepth:Se(this.config.codec),incomingBitDepth:n,wantsAlpha:this.config.alpha==="keep"}),s=pe({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});t.width=this.config.width,t.height=this.config.height,t.pixelFormat=i,t.timeBase=new c.Rational(1,1e6),t.gopSize=2**30;let a=Ar(this.config.framerate||30);t.framerate=new c.Rational(a.num,a.den),t.bitRate=this.config.bitrateMode==="quantizer"?0n:BigInt(this.config.bitrate??new ie.Quality("medium")._toVideoBitrate(this.codec,this.config.width,this.config.height)),t.sampleAspectRatio=new c.Rational(s.num,s.den),n!==null&&(t.colorPrimaries=this.frame.colorPrimaries,t.colorTrc=dr(this.frame.colorTrc,wt(i)),t.colorSpace=this.frame.colorSpace,t.colorRange=this.frame.colorRange),this.config.bitrateMode==="constant"&&(t.rcMinRate=t.bitRate,t.rcMaxRate=t.bitRate);let d=this.config.latencyMode==="realtime";if(this.avCodec.name==="libx264"?(t.setOption("x264-params","scenecut=0"),d&&(t.setOption("tune","zerolatency"),t.setOption("preset","ultrafast"))):this.avCodec.name==="libx265"?(t.setOption("x265-params","log-level=error:scenecut=0:open-gop=0"),t.setOption("forced-idr","1"),d&&(t.setOption("tune","zerolatency"),t.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(d&&t.setOption("deadline","realtime"),t.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(t.setOption("deadline","realtime"),d?t.setOption("cpu-used","8"):t.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"?(process.env.SVT_LOG="1",d&&t.setOption("preset","12")):(this.avCodec.name==="h264_nvenc"||this.avCodec.name==="hevc_nvenc")&&t.setOption("forced-idr","1"),this.config.bitrateMode==="quantizer"){m(this.quantizer!==null);let l;if(this.avCodec.name==="libaom-av1"||this.avCodec.name==="libsvtav1"?l=Math.round(this.quantizer/4):l=this.quantizer,this.avCodec.name==="libx264"||this.avCodec.name==="libx265")t.setOption("qp",String(l));else if(this.avCodec.name==="libvpx-vp9"||this.avCodec.name==="libaom-av1")t.setOption("crf",String(l));else if(this.avCodec.name==="libsvtav1")t.setOption("qp",String(l));else if(this.avCodec.name==="librav1e")t.setOption("qp",String(l));else if(this.avCodec.name?.endsWith("_nvenc"))t.setOption("rc","constqp"),t.setOption("qp",String(l));else throw new Error(`Encoder '${this.avCodec.name}' cannot be used for quantizer-based encoding.`);t.qMin=l,t.qMax=l}if(this.codec==="prores"){let l=lr[this.config.codec];m(l!==void 0),t.setOption("profile",String(l))}let f=await t.open2();c.FFmpegError.throwIfError(f,"Open codec context"),this.codecContext=t}async encode(t,n){if(this.config.bitrateMode==="quantizer"){let l;if(this.codec==="avc"?l=n.avc?.quantizer:this.codec==="hevc"?l=n.hevc?.quantizer:this.codec==="vp9"?l=n.vp9?.quantizer:l=n.av1?.quantizer,m(l!=null),this.codecContext!==null&&l!==this.quantizer){let A=await this.codecContext.sendFrame(null);for(c.FFmpegError.throwIfError(A,"Send frame");;){let h=await this.codecContext.receivePacket(this.packet);if(h===c.AVERROR_EAGAIN||h===c.AVERROR_EOF)break;this.receivePacket(h)}this.codecContext.freeContext(),this.codecContext=null}this.quantizer=l}if(t._data instanceof X)this.frame.unref(),this.frame.ref(t._data.frame),He(t,this.frame);else{if(t.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await he(t,this.frame,this.lastBuffer)}this.codecContext===null&&await this.createCodecContext(),m(this.codecContext);let i=this.frame;if(this.codecContext.pixelFormat!==this.frame.format||this.codecContext.width!==this.frame.width||this.codecContext.height!==this.frame.height){this.scaler||(this.scaler=new c.SoftwareScaleContext);let l=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(l!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,c.SWS_FAST_BILINEAR),this.lastScalerKey=l;let h=this.scaler.initContext();c.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new c.Frame,this.dstFrame.alloc(),this.dstFrame.width=this.codecContext.width,this.dstFrame.height=this.codecContext.height,this.dstFrame.format=this.codecContext.pixelFormat,this.dstFrame.allocBuffer()),await this.scaler.scaleFrame(this.dstFrame,this.frame),this.dstFrame.copyProps(this.frame),i=this.dstFrame}i.pts=BigInt(t.microsecondTimestamp),i.duration=BigInt(t.microsecondDuration),i.timeBase=new c.Rational(1,1e6),i.pictType=n?.keyFrame?c.AV_PICTURE_TYPE_I:c.AV_PICTURE_TYPE_NONE,i.keyFrame=n?.keyFrame?1:0;let a=ue(this.preciseTimings,t.microsecondTimestamp,l=>l.microsecondTimestamp),d=a!==-1?this.preciseTimings[a]:null;d&&d.microsecondTimestamp===t.microsecondTimestamp?(d.timestamp!==t.timestamp&&(d.timestampIsValid=!1),d.duration!==t.duration&&(d.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:t.microsecondTimestamp,timestamp:t.timestamp,duration:t.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let f=await this.codecContext.sendFrame(i);for(c.FFmpegError.throwIfError(f,"Send frame");;){let l=await this.codecContext.receivePacket(this.packet);if(l===c.AVERROR_EAGAIN||l===c.AVERROR_EOF)break;this.receivePacket(l)}}receivePacket(t){if(m(this.codecContext),c.FFmpegError.throwIfError(t,"Receive packet"),!this.packet.data)return;let n=z(this.packet.data),i=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=ue(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),d=a!==-1?this.preciseTimings[a]:null;d&&d.microsecondTimestamp===Number(this.packet.pts)&&(d.timestampIsValid&&(i=d.timestamp),d.durationIsValid&&(s=d.duration));let f={},l=null,A=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let b=xt(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=vt(b)}else{let b=yt(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=Et(b)}l=Ae({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:g?3:1,hevcType:g?"hev1":"hvc1",avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}),g||(A=x)}if(!g){let b=[];for(let I of we(n))if(this.codec==="avc"){let w=We(n[I.offset]);w!==7&&w!==8&&w!==13&&b.push(I)}else{let w=Be(n[I.offset]);w!==33&&w!==34&&w!==32&&b.push(I)}let E=0;for(let I of b)E+=4+I.length;let S=new Uint8Array(E),B=new DataView(S.buffer),T=0;for(let I of b){let w=I.length;B.setUint32(T,w,!1),T+=4,S.set(n.subarray(I.offset,I.offset+I.length),T),T+=I.length}n=S}}else if(this.codec==="vp8")this.packetEmitted||(l=Ae({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=St(n);l=Ae({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=Bt(n);l=Ae({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(l=Ae({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,hevcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},_=this.packet.getSideData(c.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);_&&(h.alpha=z(_).subarray(8));let F=new ie.EncodedPacket(n,this.packet.isKeyframe?"key":"delta",i,s,void 0,void 0,h);l!==null&&(f.decoderConfig={codec:l,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:A??void 0,colorSpace:{primaries:be(this.codecContext.colorPrimaries),matrix:ve(this.codecContext.colorSpace),transfer:xe(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===c.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===c.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(F,f)}async flush(){if(this.codecContext){let t=await this.codecContext.sendFrame(null);for(c.FFmpegError.throwIfError(t,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===c.AVERROR_EAGAIN||n===c.AVERROR_EOF)break;this.receivePacket(n)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};var Fe=k("mediabunny"),y=ne(k("node-av"));var Tt=k("mediabunny"),fe=ne(k("node-av"));var J=class extends Tt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(r){if(super(),!(r instanceof fe.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(r.getMediaType()!==fe.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=r}getFormat(){let r=ot(this.frame.format);if(r===null){let t=fe.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${t} (${this.frame.format})`)}return r}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(r){return m(this.frame.data&&r<this.frame.data.length),z(this.frame.data[r])}},Pe=(e,r)=>{r.format=st(e.format),r.nbSamples=e.numberOfFrames,r.sampleRate=e.sampleRate,r.channelLayout=se(e.numberOfChannels),r.allocBuffer(),m(r.data);for(let t=0;t<r.data.length;t++)e.copyTo(r.data[t],{planeIndex:t})};var Te=class extends Fe.CustomAudioDecoder{constructor(){super(...arguments);this.codecContext=null}static supports(t,n){return t==="aac"||t==="opus"||t==="mp3"||t==="vorbis"||t==="flac"||t==="ac3"||t==="eac3"||t==="dts"}async init(){this.frame=new y.Frame,this.frame.alloc(),this.packet=new y.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=y.Codec.findDecoder(t);if(n===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new y.CodecContext;i.allocContext3(n),i.sampleRate=this.config.sampleRate,i.channelLayout=se(this.config.numberOfChannels),i.timeBase=new y.Rational(1,this.config.sampleRate),i.codecType=y.AVMEDIA_TYPE_AUDIO,i.codecId=t,i.extraData=this.config.description?Buffer.from(z(this.config.description)):null;let s=await i.open2();y.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=i}async decode(t){m(this.codecContext),this.packet.isKeyframe=t.type==="key",this.packet.data=Buffer.from(t.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(t.timestamp*this.config.sampleRate)),this.packet.dts=y.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(t.duration*this.config.sampleRate));let n=await this.codecContext.sendPacket(this.packet);for(y.FFmpegError.throwIfError(n,"Send packet"),this.packet.unref();;){let i=await this.codecContext.receiveFrame(this.frame);if(i===y.AVERROR_EAGAIN||i===y.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(t){y.FFmpegError.throwIfError(t,"Receive frame");let n=this.frame.clone();if(!n)throw new Error("Allocation failure during frame clone.");n.timeBase=new y.Rational(1,this.config.sampleRate),this.onSample(new Fe.AudioSample(new J(n)))}async flush(){m(this.codecContext);let t=await this.codecContext.sendPacket(null);for(y.FFmpegError.throwIfError(t,"Flush decoder");;){let n=await this.codecContext.receiveFrame(this.frame);if(n===y.AVERROR_EAGAIN||n===y.AVERROR_EOF)break;this.receiveFrame(n)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var me=k("mediabunny"),v=ne(k("node-av"));var Ft=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],Rt=[1,2,4,5,6],fr=16384,Vt=(e,r,t)=>{if(e<32e3||e>384e4)return!1;let n=t===6,i=t-(n?1:0),s=32*Math.ceil(Math.ceil(e*512/r)/32),a=132+(493+28*32)*i+(n?72:0);return s>=a&&s<=8*fr};var mr=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],pr=[8e3,12e3,16e3,24e3,48e3],hr=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],Nt=[32e3,44100,48e3],Ke=1024,Re=class extends me.CustomAudioEncoder{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(t,n){let{numberOfChannels:i,sampleRate:s}=n;return t==="aac"&&i>=1&&i<=48&&mr.includes(s)||t==="opus"&&i>=1&&i<=255&&pr.includes(s)||t==="mp3"&&i>=1&&i<=2&&hr.includes(s)||t==="vorbis"&&i>=1&&i<=255&&s<=2e5||t==="flac"&&i>=1&&i<=8&&s<=655350||t==="ac3"&&i>=1&&i<=6&&Nt.includes(s)||t==="eac3"&&i>=1&&i<=16&&Nt.includes(s)||t==="dts"&&Rt.includes(i)&&Ft.includes(s)&&Vt(Mt(n,t),s,i)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let t=j[this.codec];m(t!==void 0);let n=v.Codec.findEncoder(t);if(!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){m(this.codecContext===null);let t=new v.CodecContext;t.allocContext3(this.avCodec);let n=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(n=this.avCodec.sampleFormats[0]),t.sampleRate=this.config.sampleRate,t.channelLayout=this.codec==="dts"?at(this.config.numberOfChannels):se(this.config.numberOfChannels),t.codecType=v.AVMEDIA_TYPE_AUDIO,t.codecId=j[this.codec],t.sampleFormat=n,t.timeBase=new v.Rational(1,this.config.sampleRate),t.bitRate=BigInt(Mt(this.config,this.codec)),this.config.bitrateMode==="constant"&&(t.rcMinRate=t.bitRate,t.rcMaxRate=t.bitRate);let i=this.codec==="dts"?v.Dictionary.fromObject({strict:-2}):null,s=await t.open2(this.avCodec,i);v.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=t}async encode(t){this.codecContext===null&&(await this.createCodecContext(),m(this.codecContext)),this.firstExpectedTimestamp??=t.timestamp,t._data instanceof J?(this.frame.unref(),this.frame.ref(t._data.frame)):Pe(t,this.frame),this.frame.pts=BigInt(Math.round(t.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(t.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let n=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==n)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=n,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=this.codecContext.channelLayout,d=se(this.frame.channels),f=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,d,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(f,"allocSetOpts2");let l=this.resampler.init();v.FFmpegError.throwIfError(l,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||Ke,this.dstFrame.duration=BigInt(this.dstFrame.nbSamples),this.dstFrame.allocBuffer(),this.nextResamplerPts=this.frame.pts}let s=this.frame.data;if(!s)throw new DOMException("Frame has no data","EncodingError");await this.resampler.convert(null,0,s,this.frame.nbSamples),await this.pullResampledFrames()}else await this.sendFrameAndReceivePackets(this.frame)}async pullResampledFrames(){m(this.codecContext),m(this.resampler),m(this.dstFrame),m(this.nextResamplerPts!==null);let t=this.codecContext.frameSize||Ke;for(;!(this.resampler.getOutSamples(0)<t);)await this.resampler.convert(this.dstFrame.data,t,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(t)}async sendFrameAndReceivePackets(t){m(this.codecContext);let n=await this.codecContext.sendFrame(t);for(v.FFmpegError.throwIfError(n,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===v.AVERROR_EAGAIN||i===v.AVERROR_EOF)break;this.receivePacket(i)}}receivePacket(t){if(m(this.codecContext),m(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(t,"Receive packet"),!this.packet.data)return;let n=Number(this.packet.pts)/this.codecContext.sampleRate,i=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-n,0);let f=this.config.codec,l=this.codecContext.extraData?z(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!l)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=ft(l);this.adtsHeaderTemplate=mt(h),l=void 0}}else if(this.codec==="opus"){if(!l)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!l)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!l)throw new Error("Extradata expected for FLAC.");l=new Uint8Array([102,76,97,67,128,0,0,l.byteLength,...l])}a={decoderConfig:{codec:f,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:l}}}if(this.adtsHeaderTemplate){let f=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,f);let l=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);l.set(this.adtsHeaderTemplate.header,0),l.set(s,this.adtsHeaderTemplate.header.byteLength),s=l}n+=this.outputTimestampOffset;let d=new me.EncodedPacket(s,"key",n,i);this.packetEmitted=!0,this.onPacket(d,a)}async flush(){if(this.codecContext){e:if(this.resampler){m(this.resamplerInputSampleRate!==null);let t=this.resampler.getOutSamples(0);if(t===0)break e;let n=this.codecContext.frameSize||Ke;m(t<n);let i=Math.ceil((n-t)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(i),await this.pullResampledFrames()}await this.sendFrameAndReceivePackets(null),this.codecContext.freeContext(),this.codecContext=null,this.packetEmitted=!1,this.firstExpectedTimestamp=null,this.outputTimestampOffset=0,this.adtsHeaderTemplate=null,this.resampler?.free(),this.resampler=null,this.inputParametersKey=null,this.resamplerInputSampleRate=null,this.nextResamplerPts=null,this.dstFrame?.free(),this.dstFrame=null}}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.dstFrame?.free(),this.resampler?.free()}},Mt=(e,r)=>e.bitrate??new me.Quality("medium")._toAudioBitrate(r)??0;var Dt=k("@mediabunny/prores");var Lt=Symbol.for("@mediabunny/server loaded");globalThis[Lt]&&L.Logging._error(`[WARNING]
9
+ @mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[Lt]=!0;var kt=!1,K={},gr=(e={})=>{if(typeof e!="object"||!e)throw new TypeError("options must be an object.");if(e.hardwareContext!=null&&!(e.hardwareContext instanceof G.HardwareContext||typeof e.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");kt||(kt=!0,K=e,G.Log.setLevel(G.AV_LOG_ERROR),(0,L.registerDecoder)(ye),(0,Dt.registerProresDecoder)(),(0,L.registerEncoder)(Ie),(0,L.registerDecoder)(Te),(0,L.registerEncoder)(Re),(0,L.registerVideoSampleTransformer)(ut))},Cr=async(e,r)=>{if(!(e instanceof L.VideoSample)&&!(e instanceof L.AudioSample))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(r instanceof G.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e instanceof L.VideoSample){if(e._data instanceof X)r.unref(),r.ref(e._data.frame);else{if(e.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await he(e,r,null)}r.pts=BigInt(e.microsecondTimestamp),r.duration=BigInt(e.microsecondDuration),r.timeBase=new G.Rational(1,1e6)}else e._data instanceof J?(r.unref(),r.ref(e._data.frame)):Pe(e,r),r.timeBase=new G.Rational(1,e.sampleRate),r.pts=BigInt(Math.round(e.timestamp*e.sampleRate)),r.duration=BigInt(e.numberOfFrames)};return Wt(br);})();
10
10
  if (typeof module === "object" && typeof module.exports === "object") Object.assign(module.exports, MediabunnyServer)