@mediabunny/server 1.45.4 → 1.46.0

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.
Files changed (37) hide show
  1. package/README.md +16 -0
  2. package/dist/bundles/mediabunny-server.cjs +67 -12
  3. package/dist/bundles/mediabunny-server.min.cjs +2 -2
  4. package/dist/bundles/mediabunny-server.min.mjs +2 -2
  5. package/dist/bundles/mediabunny-server.mjs +74 -13
  6. package/dist/mediabunny-server.d.ts +20 -1
  7. package/dist/modules/src/audio-decoder.d.ts +1 -1
  8. package/dist/modules/src/audio-decoder.d.ts.map +1 -1
  9. package/dist/modules/src/audio-decoder.js +8 -1
  10. package/dist/modules/src/audio-encoder.d.ts +3 -3
  11. package/dist/modules/src/audio-encoder.d.ts.map +1 -1
  12. package/dist/modules/src/audio-encoder.js +6 -2
  13. package/dist/modules/src/audio-sample.d.ts.map +1 -1
  14. package/dist/modules/src/audio-sample.js +3 -0
  15. package/dist/modules/src/index.d.ts +21 -2
  16. package/dist/modules/src/index.d.ts.map +1 -1
  17. package/dist/modules/src/index.js +24 -2
  18. package/dist/modules/src/misc.d.ts +2 -2
  19. package/dist/modules/src/misc.d.ts.map +1 -1
  20. package/dist/modules/src/misc.js +23 -2
  21. package/dist/modules/src/video-decoder.d.ts.map +1 -1
  22. package/dist/modules/src/video-decoder.js +3 -2
  23. package/dist/modules/src/video-encoder.d.ts +3 -3
  24. package/dist/modules/src/video-encoder.d.ts.map +1 -1
  25. package/dist/modules/src/video-encoder.js +8 -4
  26. package/dist/modules/src/video-sample.d.ts.map +1 -1
  27. package/dist/modules/src/video-sample.js +3 -0
  28. package/dist/modules/tsconfig.tsbuildinfo +1 -1
  29. package/package.json +1 -1
  30. package/src/audio-decoder.ts +8 -2
  31. package/src/audio-encoder.ts +7 -3
  32. package/src/audio-sample.ts +3 -0
  33. package/src/index.ts +63 -2
  34. package/src/misc.ts +31 -2
  35. package/src/video-decoder.ts +5 -2
  36. package/src/video-encoder.ts +12 -11
  37. package/src/video-sample.ts +3 -0
@@ -5,5 +5,5 @@
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
- import{registerDecoder as rt,registerEncoder as it,registerVideoSampleTransformer as Ut,VideoSample as kt}from"mediabunny";import*as J from"node-av";import{CustomVideoDecoder as lt,VideoSample as dt}from"mediabunny";import*as C from"node-av";import*as n from"node-av";var W={avc:n.AV_CODEC_ID_H264,hevc:n.AV_CODEC_ID_HEVC,vp8:n.AV_CODEC_ID_VP8,vp9:n.AV_CODEC_ID_VP9,av1:n.AV_CODEC_ID_AV1,aac:n.AV_CODEC_ID_AAC,opus:n.AV_CODEC_ID_OPUS,mp3:n.AV_CODEC_ID_MP3,vorbis:n.AV_CODEC_ID_VORBIS,flac:n.AV_CODEC_ID_FLAC,ac3:n.AV_CODEC_ID_AC3,eac3:n.AV_CODEC_ID_EAC3},pe,Be=()=>(pe===void 0&&(pe=n.HardwareContext.auto()),pe),he=new Map,we=t=>{if(!he.has(t)){let e=Be();he.set(t,e?.getDecoderCodec(t)??null)}return he.get(t)},ge=new Map,Te=t=>{if(!ge.has(t)){let e=Be();ge.set(t,e?.getEncoderCodec(t)??null)}return ge.get(t)},Pe=t=>{switch(t){case"bt709":return n.AVCOL_PRI_BT709;case"bt470bg":return n.AVCOL_PRI_BT470BG;case"smpte170m":return n.AVCOL_PRI_SMPTE170M;case"bt2020":return n.AVCOL_PRI_BT2020;case"smpte432":return n.AVCOL_PRI_SMPTE432}return null},ie=t=>{switch(t){case n.AVCOL_PRI_BT709:return"bt709";case n.AVCOL_PRI_BT470BG:return"bt470bg";case n.AVCOL_PRI_SMPTE170M:return"smpte170m";case n.AVCOL_PRI_BT2020:return"bt2020";case n.AVCOL_PRI_SMPTE432:return"smpte432"}return null},Fe=t=>{switch(t){case"bt709":return n.AVCOL_TRC_BT709;case"smpte170m":return n.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return n.AVCOL_TRC_IEC61966_2_1;case"linear":return n.AVCOL_TRC_LINEAR;case"pq":return n.AVCOL_TRC_SMPTE2084;case"hlg":return n.AVCOL_TRC_ARIB_STD_B67}return null},ne=t=>{switch(t){case n.AVCOL_TRC_BT709:return"bt709";case n.AVCOL_TRC_SMPTE170M:return"smpte170m";case n.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case n.AVCOL_TRC_LINEAR:return"linear";case n.AVCOL_TRC_SMPTE2084:return"pq";case n.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Re=t=>{switch(t){case"rgb":return n.AVCOL_SPC_RGB;case"bt709":return n.AVCOL_SPC_BT709;case"bt470bg":return n.AVCOL_SPC_BT470BG;case"smpte170m":return n.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return n.AVCOL_SPC_BT2020_NCL}return null},oe=t=>{switch(t){case n.AVCOL_SPC_RGB:return"rgb";case n.AVCOL_SPC_BT709:return"bt709";case n.AVCOL_SPC_BT470BG:return"bt470bg";case n.AVCOL_SPC_SMPTE170M:return"smpte170m";case n.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},Ve=t=>{switch(t){case n.AV_PIX_FMT_YUV420P:return"I420";case n.AV_PIX_FMT_YUVJ420P:return"I420";case n.AV_PIX_FMT_YUV420P10LE:return"I420P10";case n.AV_PIX_FMT_YUV420P12LE:return"I420P12";case n.AV_PIX_FMT_YUVA420P:return"I420A";case n.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case n.AV_PIX_FMT_YUV422P:return"I422";case n.AV_PIX_FMT_YUVJ422P:return"I422";case n.AV_PIX_FMT_YUV422P10LE:return"I422P10";case n.AV_PIX_FMT_YUV422P12LE:return"I422P12";case n.AV_PIX_FMT_YUVA422P:return"I422A";case n.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case n.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case n.AV_PIX_FMT_YUV444P:return"I444";case n.AV_PIX_FMT_YUVJ444P:return"I444";case n.AV_PIX_FMT_YUV444P10LE:return"I444P10";case n.AV_PIX_FMT_YUV444P12LE:return"I444P12";case n.AV_PIX_FMT_YUVA444P:return"I444A";case n.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case n.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case n.AV_PIX_FMT_NV12:return"NV12";case n.AV_PIX_FMT_RGBA:return"RGBA";case n.AV_PIX_FMT_RGB0:return"RGBX";case n.AV_PIX_FMT_BGRA:return"BGRA";case n.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},be=t=>{switch(t){case"I420":return n.AV_PIX_FMT_YUV420P;case"I420P10":return n.AV_PIX_FMT_YUV420P10LE;case"I420P12":return n.AV_PIX_FMT_YUV420P12LE;case"I420A":return n.AV_PIX_FMT_YUVA420P;case"I420AP10":return n.AV_PIX_FMT_YUVA420P10LE;case"I422":return n.AV_PIX_FMT_YUV422P;case"I422P10":return n.AV_PIX_FMT_YUV422P10LE;case"I422P12":return n.AV_PIX_FMT_YUV422P12LE;case"I422A":return n.AV_PIX_FMT_YUVA422P;case"I422AP10":return n.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return n.AV_PIX_FMT_YUVA422P12LE;case"I444":return n.AV_PIX_FMT_YUV444P;case"I444P10":return n.AV_PIX_FMT_YUV444P10LE;case"I444P12":return n.AV_PIX_FMT_YUV444P12LE;case"I444A":return n.AV_PIX_FMT_YUVA444P;case"I444AP10":return n.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return n.AV_PIX_FMT_YUVA444P12LE;case"NV12":return n.AV_PIX_FMT_NV12;case"RGBA":return n.AV_PIX_FMT_RGBA;case"RGBX":return n.AV_PIX_FMT_RGB0;case"BGRA":return n.AV_PIX_FMT_BGRA;case"BGRX":return n.AV_PIX_FMT_BGR0;default:return n.AV_PIX_FMT_NONE}},Ne=t=>{switch(t){case n.AV_SAMPLE_FMT_U8:return"u8";case n.AV_SAMPLE_FMT_S16:return"s16";case n.AV_SAMPLE_FMT_S32:return"s32";case n.AV_SAMPLE_FMT_FLT:return"f32";case n.AV_SAMPLE_FMT_U8P:return"u8-planar";case n.AV_SAMPLE_FMT_S16P:return"s16-planar";case n.AV_SAMPLE_FMT_S32P:return"s32-planar";case n.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Me=t=>{switch(t){case"u8":return n.AV_SAMPLE_FMT_U8;case"s16":return n.AV_SAMPLE_FMT_S16;case"s32":return n.AV_SAMPLE_FMT_S32;case"f32":return n.AV_SAMPLE_FMT_FLT;case"u8-planar":return n.AV_SAMPLE_FMT_U8P;case"s16-planar":return n.AV_SAMPLE_FMT_S16P;case"s32-planar":return n.AV_SAMPLE_FMT_S32P;case"f32-planar":return n.AV_SAMPLE_FMT_FLTP;default:return n.AV_SAMPLE_FMT_NONE}},Y=t=>{switch(t){case 1:return n.AV_CHANNEL_LAYOUT_MONO;case 2:return n.AV_CHANNEL_LAYOUT_STEREO;case 4:return n.AV_CHANNEL_LAYOUT_QUAD;case 6:return n.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return n.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:n.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};function p(t){if(!t)throw new Error("Assertion failed.")}var $=t=>t&&t[t.length-1];var l=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},q=t=>{let e=l(t);return(e&1)===0?-(e>>1):e+1>>1};var M=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ce=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Ue={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var ke={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Le={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var xe=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var ve=t=>(t=t>>1&1431655765|(t&1431655765)<<1,t=t>>2&858993459|(t&858993459)<<2,t=t>>4&252645135|(t&252645135)<<4,t=t>>8&16711935|(t&16711935)<<8,t=t>>16&65535|(t&65535)<<16,t>>>0);var j=(t,e,r)=>{let i=0,o=t.length-1,s=-1;for(;i<=o;){let a=i+(o-i+1)/2|0;r(t[a])<=e?(s=a,i=a+1):o=a-1}return s};var Dt=1e6*(1+Number.EPSILON);var se=t=>{p(Number.isInteger(t.num)),p(Number.isInteger(t.den)),p(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let o=e%r;e=r,r=o}let i=e||1;return{num:t.num/i,den:t.den/i}};import{VideoSampleResource as st,VideoSampleColorSpace as at,VideoSample as De}from"mediabunny";import*as f from"node-av";var ct=new Set([f.AV_PIX_FMT_YUVJ411P,f.AV_PIX_FMT_YUVJ420P,f.AV_PIX_FMT_YUVJ422P,f.AV_PIX_FMT_YUVJ440P,f.AV_PIX_FMT_YUVJ444P]),z=class t extends st{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(e){if(super(),e.getMediaType()!==f.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=e}getFormat(){return Ve(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 at({primaries:ie(this.frame.colorPrimaries),transfer:ne(this.frame.colorTrc),matrix:oe(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||ct.has(this.frame.format)?!0:this.frame.colorRange===f.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return p(this.frame.data),this.frame.data.map((e,r)=>({data:M(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let i=this.frame.width,o=this.frame.height,s=new f.SoftwareScaleContext,a=this.frame.format,A=be("RGBA");s.getContext(i,o,a,i,o,A,f.SWS_BILINEAR);let u=new f.Frame;u.width=i,u.height=o,u.format=A,u.alloc(),u.allocBuffer();let d=this.frame;try{await s.scaleFrame(u,d)}finally{s.freeContext()}return u.sampleAspectRatio=d.sampleAspectRatio,new De(new t(u),e)}},ee=async(t,e,r)=>{p(t.format!==null),e.format=be(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Pe(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Re(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Fe(t.colorSpace.transfer??"unknown")??f.AVCOL_TRC_UNSPECIFIED,e.colorRange=t.colorSpace.fullRange===!1?f.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?f.AVCOL_RANGE_JPEG:f.AVCOL_RANGE_UNSPECIFIED;let i=t.allocationSize();return(!r||r.byteLength!==i)&&(r=Buffer.from({length:i})),await t.copyTo(r),e.fromBuffer(r),r},Oe=async(t,e)=>{let r,i=!1;if(t._data instanceof z)r=t._data.frame;else{if(t.format===null)return null;r=new f.Frame,r.alloc(),i=!0,await ee(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new f.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,A=s.createFilter(f.Filter.getByName("buffer"),"src",a),u=s.createFilter(f.Filter.getByName("buffersink"),"sink");p(A&&u);let d=f.FilterInOut.createList([{name:"in",filterCtx:A,padIdx:0}]),c=f.FilterInOut.createList([{name:"out",filterCtx:u,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,c,d);f.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let I=await s.config();f.FFmpegError.throwIfError(I,"FilterGraph.config");let _=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(_,"buffersrcAddFrame"),await A.buffersrcAddFrame(null);let g=new f.Frame;g.alloc();let x=await u.buffersinkGetFrame(g);return f.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new De(new z(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var ae=class extends lt{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,i){return r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"}async init(){this.frame=new C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(r){p(this.codecContext===null);let i=W[this.codec];p(i!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(i):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=C.Codec.findDecoder(i):o=we(i)??C.Codec.findDecoder(i),!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(o),this.pixelAspectRatio=se({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=i,s.extraData=this.config.description?Buffer.from(M(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();C.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&(await this.initCodecContext(r),p(this.codecContext)),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let i=j(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),o=i!==-1?this.preciseTimings[i]:null;o&&o.microsecondTimestamp===r.microsecondTimestamp?(o.timestamp!==r.timestamp&&(o.timestampIsValid=!1),o.duration!==r.duration&&(o.durationIsValid=!1)):(this.preciseTimings.splice(i+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.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");;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(r){C.FFmpegError.throwIfError(r,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let i=Number(this.frame.pts)/1e6,o=Number(this.frame.duration)/1e6,s=j(this.preciseTimings,Number(this.frame.pts),u=>u.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(i=a.timestamp),a.durationIsValid&&(o=a.duration));let A=this.frame.clone();if(!A)throw new Error("Frame clone allocation failed.");this.onSample(new dt(new z(A),{timestamp:i,duration:o}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(r,"Flush decoder");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===C.AVERROR_EAGAIN||i===C.AVERROR_EOF)break;this.receiveFrame(i)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as It,QUALITY_MEDIUM as _t,EncodedPacket as Et}from"mediabunny";import*as m from"node-av";var O=class t{constructor(e){this.bytes=e;this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),r=this.bytes[e]??0,i=7-(this.pos&7),o=(r&1<<i)>>i;return this.pos++,o}readBits(e){if(e===1)return this.readBit();let r=0;for(let i=0;i<e;i++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let i=this.pos+e;for(let o=this.pos;o<i;o++){let s=Math.floor(o/8),a=this.bytes[s],A=7-(o&7);a&=~(1<<A),a|=(r&1<<i-o-1)>>i-o-1<<A,this.bytes[s]=a}this.pos=i}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,r=this.bytes[e]??0;return this.pos+=8,r}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new t(this.bytes);return e.pos=this.pos,e}};var ze=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],At=[-1,1,2,3,4,5,6,8],He=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new O(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let i=e.readBits(4),o=null;i===15?o=e.readBits(24):i<ze.length&&(o=ze[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=At[s]),{objectType:r,frequencyIndex:i,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var qe=t=>{let e=new Uint8Array(7),r=new O(e),{objectType:i,frequencyIndex:o,channelConfiguration:s}=t,a=i-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var mt=["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"],ft=["aac","opus","mp3","vorbis","flac","ac3","eac3"],lr=[...ft,...mt];var ye=[{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 Q=[{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 We=".01.01.01.01.00",Ge=".0.110.01.01.01.0";var te=t=>{let{codec:e,codecDescription:r,colorSpace:i,avcCodecInfo:o,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:A}=t;if(e==="avc"){if(p(t.avcType!==null),o){let u=new Uint8Array([o.avcProfileIndication,o.profileCompatibility,o.avcLevelIndication]);return`avc${t.avcType}.${xe(u)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${xe(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,I,_;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=ve(s.generalProfileCompatibilityFlags),h=s.generalTierFlag,I=s.generalLevelIdc,_=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let x=Ce(r),b=x.getUint8(1);u=b>>6&3,d=b&31,c=ve(x.getUint32(2)),h=b>>5&1,I=x.getUint8(12),_=[];for(let T=0;T<6;T++)_.push(x.getUint8(6+T))}let g="hev1.";for(g+=["","A","B","C"][u]+d,g+=".",g+=c.toString(16).toUpperCase(),g+=".",g+=h===0?"L":"H",g+=I;_.length>0&&_[_.length-1]===0;)_.pop();return _.length>0&&(g+=".",g+=_.map(x=>x.toString(16).toUpperCase()).join(".")),g}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,y=$(Q).level;for(let P of Q)if(T<=P.maxPictureSize){y=P.level;break}return`vp09.00.${y.toString().padStart(2,"0")}.08`}let u=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),c=a.bitDepth.toString().padStart(2,"0"),h=a.chromaSubsampling.toString().padStart(2,"0"),I=a.colourPrimaries.toString().padStart(2,"0"),_=a.transferCharacteristics.toString().padStart(2,"0"),g=a.matrixCoefficients.toString().padStart(2,"0"),x=a.videoFullRangeFlag.toString().padStart(2,"0"),b=`vp09.${u}.${d}.${c}.${h}`;return b+=`.${I}.${_}.${g}.${x}`,b.endsWith(We)&&(b=b.slice(0,-We.length)),b}else if(e==="av1"){if(!A){let P=t.width*t.height,V=$(Q).level;for(let E of Q)if(P<=E.maxPictureSize){V=E.level;break}return`av01.0.${V.toString().padStart(2,"0")}M.08`}let u=A.profile,d=A.level.toString().padStart(2,"0"),c=A.tier?"H":"M",h=A.bitDepth.toString().padStart(2,"0"),I=A.monochrome?"1":"0",_=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),g=i?.primaries?Ue[i.primaries]:1,x=i?.transfer?ke[i.transfer]:1,b=i?.matrix?Le[i.matrix]:1,T=i?.fullRange?1:0,y=`av01.${u}.${d}${c}.${h}`;return y+=`.${I}.${_.toString().padStart(3,"0")}`,y+=`.${g.toString().padStart(2,"0")}`,y+=`.${x.toString().padStart(2,"0")}`,y+=`.${b.toString().padStart(2,"0")}`,y+=`.${T}`,y.endsWith(Ge)&&(y=y.slice(0,-Ge.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var le=function*(t){let e=0,r=-1;for(;e<t.length-2;){let i=t.indexOf(0,e);if(i===-1||i>=t.length-2)break;e=i;let o=0;if(e+3<t.length&&t[e+1]===0&&t[e+2]===0&&t[e+3]===1?o=4:t[e+1]===0&&t[e+2]===1&&(o=3),o===0){e++;continue}r!==-1&&e>r&&(yield{offset:r,length:e-r}),r=e+o,e=r}r!==-1&&r<t.length&&(yield{offset:r,length:t.length-r})};var Se=t=>t&31,Ie=t=>{let e=[],r=t.length;for(let i=0;i<r;i++)i+2<r&&t[i]===0&&t[i+1]===0&&t[i+2]===3?(e.push(0,0),i+=2):e.push(t[i]);return new Uint8Array(e)},_r=new Uint8Array([0,0,0,1]);var Ke=t=>{try{let e=[],r=[],i=[];for(let A of le(t)){let u=t.subarray(A.offset,A.offset+A.length),d=Se(u[0]);d===7?e.push(u):d===8?r.push(u):d===13&&i.push(u)}if(e.length===0||r.length===0)return null;let o=e[0],s=pt(o);p(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:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?i:null}}catch(e){return console.error("Error building AVC Decoder Configuration Record:",e),null}},Qe=t=>{let e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(let r of t.sequenceParameterSets){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){p(t.chromaFormat!==null),p(t.bitDepthLumaMinus8!==null),p(t.bitDepthChromaMinus8!==null),p(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(let r of t.sequenceParameterSetExt){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}}return new Uint8Array(e)};var Je={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}},pt=t=>{try{let e=new O(Ie(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();l(e);let a=1,A=0,u=0,d=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(a=l(e),a===3&&(d=e.readBits(1)),A=l(e),u=l(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let X=S<6?16:64,L=8,R=8;for(let D=0;D<X;D++){if(R!==0){let K=q(e);R=(L+K+256)%256}L=R===0?L:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),q(e),q(e);let U=l(e);for(let S=0;S<U;S++)q(e)}l(e),e.skipBits(1);let h=l(e),I=l(e),_=16*(h+1),g=16*(I+1),x=_,b=g,T=e.readBits(1);if(T||e.skipBits(1),e.skipBits(1),e.readBits(1)){let U=l(e),S=l(e),H=l(e),X=l(e),L,R;if((d===0?a:0)===0)L=1,R=2-T;else{let K=a===3?1:2,Z=a===1?2:1;L=K,R=Z*(2-T)}x-=L*(U+S),b-=R*(H+X)}let P=2,V=2,E=2,w=0,N={num:1,den:1},F=null,k=null;if(e.readBits(1)){if(e.readBits(1)){let Z=e.readBits(8);if(Z===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Ee=Je[Z];Ee&&(N=Ee)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),w=e.readBits(1),e.readBits(1)&&(P=e.readBits(8),V=e.readBits(8),E=e.readBits(8))),e.readBits(1)&&(l(e),l(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let R=e.readBits(1);R&&Xe(e);let D=e.readBits(1);D&&Xe(e),(R||D)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),k=l(e))}if(F===null){p(k===null);let U=o&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&U)F=0,k=0;else{let S=h+1,H=I+1,X=(2-T)*H,L=ye.find(D=>D.level>=s)??$(ye),R=Math.min(Math.floor(L.maxDpbMbs/(S*X)),16);F=R,k=R}}return p(k!==null),{profileIdc:i,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:T,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:u,codedWidth:_,codedHeight:g,displayWidth:x,displayHeight:b,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:E,transferCharacteristics:V,fullRangeFlag:w,numReorderFrames:F,maxDecFrameBuffering:k}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},Xe=t=>{let e=l(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)l(t),l(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var ce=t=>t>>1&63,ht=t=>{try{let e=new O(Ie(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),i=e.readBits(1),{general_profile_space:o,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:A,general_constraint_indicator_flags:u,general_level_idc:d}=gt(e,r);l(e);let c=l(e),h=0;c===3&&(h=e.readBits(1));let I=l(e),_=l(e),g=I,x=_;if(e.readBits(1)){let S=l(e),H=l(e),X=l(e),L=l(e),R=1,D=1,K=h===0?c:0;K===1?(R=2,D=2):K===2&&(R=2,D=1),g-=(S+H)*R,x-=(X+L)*D}let b=l(e),T=l(e);l(e);let P=e.readBits(1)?0:r,V=0;for(let S=P;S<=r;S++)l(e),V=l(e),l(e);l(e),l(e),l(e),l(e),l(e),l(e),e.readBits(1)&&e.readBits(1)&&bt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),l(e),l(e),e.skipBits(1));let E=l(e);if(Ct(e,E),e.readBits(1)){let S=l(e);for(let H=0;H<S;H++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let w=2,N=2,F=2,k=0,re=0,U={num:1,den:1};if(e.readBits(1)){let S=vt(e,r);U=S.pixelAspectRatio,w=S.colourPrimaries,N=S.transferCharacteristics,F=S.matrixCoefficients,k=S.fullRangeFlag,re=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:U,colourPrimaries:w,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:k,maxDecFrameBuffering:V+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:i,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:A,generalConstraintIndicatorFlags:u,generalLevelIdc:d,chromaFormatIdc:c,bitDepthLumaMinus8:b,bitDepthChromaMinus8:T,minSpatialSegmentationIdc:re}}catch(e){return console.error("Error parsing HEVC SPS:",e),null}},$e=t=>{try{let e=[],r=[],i=[],o=[];for(let d of le(t)){let c=t.subarray(d.offset,d.offset+d.length),h=ce(c[0]);h===32?e.push(c):h===33?r.push(c):h===34?i.push(c):(h===39||h===40)&&o.push(c)}if(r.length===0||i.length===0)return null;let s=ht(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new O(Ie(d));c.skipBits(16),l(c),l(c),c.skipBits(1),c.skipBits(1),c.skipBits(3),c.skipBits(1),c.skipBits(1),l(c),l(c),q(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),q(c),q(c),c.skipBits(1),c.skipBits(1),c.skipBits(1),c.skipBits(1);let h=c.readBits(1),I=c.readBits(1);!h&&!I?a=0:h&&!I?a=2:!h&&I?a=3:a=0}let A=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:i}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:ce(o[0][0]),nalUnits:o}]:[]];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:A}}catch(e){return console.error("Error building HEVC Decoder Configuration Record:",e),null}},gt=(t,e)=>{let r=t.readBits(2),i=t.readBits(1),o=t.readBits(5),s=0;for(let c=0;c<32;c++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let c=0;c<6;c++)a[c]=t.readBits(8);let A=t.readBits(8),u=[],d=[];for(let c=0;c<e;c++)u.push(t.readBits(1)),d.push(t.readBits(1));if(e>0)for(let c=e;c<8;c++)t.skipBits(2);for(let c=0;c<e;c++)u[c]&&t.skipBits(88),d[c]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:i,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:A}},bt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))l(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&q(t);for(let s=0;s<o;s++)q(t)}},Ct=(t,e)=>{let r=[];for(let i=0;i<e;i++)r[i]=xt(t,i,e,r)},xt=(t,e,r,i)=>{let o=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let u=l(t);a=e-(u+1)}else a=e-1;t.readBits(1),l(t);let A=i[a]??0;for(let u=0;u<=A;u++)t.readBits(1)||t.readBits(1);o=i[a]}else{let A=l(t),u=l(t);for(let d=0;d<A;d++)l(t),t.readBits(1);for(let d=0;d<u;d++)l(t),t.readBits(1);o=A+u}return o},vt=(t,e)=>{let r=2,i=2,o=2,s=0,a=0,A={num:1,den:1};if(t.readBits(1)){let u=t.readBits(8);if(u===255)A={num:t.readBits(16),den:t.readBits(16)};else{let d=Je[u];d&&(A=d)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),i=t.readBits(8),o=t.readBits(8))),t.readBits(1)&&(l(t),l(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(l(t),l(t),l(t),l(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&l(t),t.readBits(1)&&yt(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=l(t),l(t),l(t),l(t),l(t)),{pixelAspectRatio:A,colourPrimaries:r,transferCharacteristics:i,matrixCoefficients:o,fullRangeFlag:s,minSpatialSegmentationIdc:a}},yt=(t,e,r)=>{let i=!1,o=!1,s=!1;e&&(i=t.readBits(1)===1,o=t.readBits(1)===1,(i||o)&&(s=t.readBits(1)===1,s&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5)));for(let a=0;a<=r;a++){let A=t.readBits(1)===1,u=!0;A||(u=t.readBits(1)===1);let d=!1;u?l(t):d=t.readBits(1)===1;let c=1;d||(c=l(t)+1),i&&Ye(t,c,s),o&&Ye(t,c,s)}},Ye=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},je=t=>{let e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(let r of t.arrays){e.push((r.arrayCompleteness&1)<<7|0|r.nalUnitType&63),e.push(r.nalUnits.length>>8&255),e.push(r.nalUnits.length&255);for(let i of r.nalUnits){e.push(i.length>>8&255),e.push(i.length&255);for(let o=0;o<i.length;o++)e.push(i[o])}}return new Uint8Array(e)};var Ze=t=>{let e=new O(t);if(e.readBits(2)!==2)return null;let i=e.readBits(1),s=(e.readBits(1)<<1)+i;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let d=8;s>=2&&(d=e.readBits(1)?12:10);let c=e.readBits(3),h=0,I=0;if(c!==7)if(I=e.readBits(1),s===1||s===3){let N=e.readBits(1),F=e.readBits(1);h=!N&&!F?3:N&&!F?2:1,e.skipBits(1)}else h=1;else h=3,I=1;let _=e.readBits(16),g=e.readBits(16),x=_+1,b=g+1,T=x*b,y=$(Q).level;for(let w of Q)if(T<=w.maxPictureSize){y=w.level;break}return{profile:s,level:y,bitDepth:d,chromaSubsampling:h,videoFullRangeFlag:I,colourPrimaries:c===2?1:c===1?6:2,transferCharacteristics:c===2?1:c===1?6:2,matrixCoefficients:c===7?0:c===2?1:c===1?6:2}},St=function*(t){let e=new O(t),r=()=>{let i=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(i|=(s&127)<<o*7,!(s&128))break;if(o===7&&s&128)return null}return i>=2**32-1?null:i};for(;e.getBitsLeft()>=8;){e.skipBits(1);let i=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let A=r();if(A===null)return;a=A}else a=Math.floor(e.getBitsLeft()/8);p(e.pos%8===0),yield{type:i,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},et=t=>{for(let{type:e,data:r}of St(t)){if(e!==1)continue;let i=new O(r),o=i.readBits(3),s=i.readBits(1),a=i.readBits(1),A=0,u=0,d=0;if(a)A=i.readBits(5);else{if(i.readBits(1)&&(i.skipBits(32),i.skipBits(32),i.readBits(1)))return null;let w=i.readBits(1);w&&(d=i.readBits(5),i.skipBits(32),i.skipBits(5),i.skipBits(5));let N=i.readBits(5);for(let F=0;F<=N;F++){i.skipBits(12);let k=i.readBits(5);if(F===0&&(A=k),k>7){let U=i.readBits(1);F===0&&(u=U)}if(w&&i.readBits(1)){let S=d+1;i.skipBits(S),i.skipBits(S),i.skipBits(1)}i.readBits(1)&&i.skipBits(4)}}let c=i.readBits(4),h=i.readBits(4),I=c+1;i.skipBits(I);let _=h+1;i.skipBits(_);let g=0;if(a?g=0:g=i.readBits(1),g&&(i.skipBits(4),i.skipBits(3)),i.skipBits(1),i.skipBits(1),i.skipBits(1),!a){i.skipBits(1),i.skipBits(1),i.skipBits(1),i.skipBits(1);let E=i.readBits(1);E&&(i.skipBits(1),i.skipBits(1));let w=i.readBits(1),N=0;w?N=2:N=i.readBits(1),N>0&&(i.readBits(1)||i.skipBits(1)),E&&i.skipBits(3)}i.skipBits(1),i.skipBits(1),i.skipBits(1);let x=i.readBits(1),b=8;o===2&&x?b=i.readBits(1)?12:10:o<=2&&(b=x?10:8);let T=0;o!==1&&(T=i.readBits(1));let y=1,P=1,V=0;return T||(o===0?(y=1,P=1):o===1?(y=0,P=0):b===12&&(y=i.readBits(1),y&&(P=i.readBits(1))),y&&P&&(V=i.readBits(2))),{profile:o,level:A,tier:u,bitDepth:b,monochrome:T,chromaSubsamplingX:y,chromaSubsamplingY:P,chromaSamplePosition:V}}return null};var Er=[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 Br=new Uint8Array([5,4,65,67,45,51]),wr=new Uint8Array([5,4,69,65,67,51]);var de=class extends It{constructor(){super(...arguments);this.codecContext=null;this.lastBuffer=null;this.packetEmitted=!1;this.scaler=null;this.lastScalerKey=null;this.dstFrame=null;this.preciseTimings=[]}static supports(r,i){return(r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1")&&i.bitrateMode!=="quantizer"}async init(){this.frame=new m.Frame,this.frame.alloc(),this.frame.timeBase=new m.Rational(1,1e6),this.packet=new m.Packet,this.packet.alloc();let r=W[this.codec];p(r!==void 0);let i=null;if(this.codec==="vp9"&&this.config.alpha==="keep"?i=m.Codec.findEncoderByName(m.FF_ENCODER_LIBVPX_VP9)??m.Codec.findEncoder(r):this.config.hardwareAcceleration==="prefer-software"?i=m.Codec.findEncoder(r):i=Te(r)??m.Codec.findEncoder(r),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new m.CodecContext;r.allocContext3(this.avCodec);let i=m.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(m.AV_PIX_FMT_YUV420P)||(i=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&this.avCodec.pixelFormats.includes(m.AV_PIX_FMT_YUVA420P)&&(i=m.AV_PIX_FMT_YUVA420P));let o=se({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=i,r.timeBase=new m.Rational(1,1e6),r.gopSize=60,r.framerate=new m.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=BigInt(this.config.bitrate??_t._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new m.Rational(o.num,o.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";this.avCodec.name==="libx264"?s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(r.setOption("x265-params","log-level=error"),s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&r.setOption("deadline","realtime"),r.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(r.setOption("deadline","realtime"),s?r.setOption("cpu-used","8"):r.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"&&(process.env.SVT_LOG="1",s&&r.setOption("preset","12"));let a=await r.open2();m.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,i){if(this.codecContext===null&&(await this.createCodecContext(),p(this.codecContext)),r._data instanceof z)this.frame.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await ee(r,this.frame,this.lastBuffer)}let o=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 m.SoftwareScaleContext);let d=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(d!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,m.SWS_FAST_BILINEAR),this.lastScalerKey=d;let h=this.scaler.initContext();m.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new m.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),o=this.dstFrame}o.pts=BigInt(r.microsecondTimestamp),o.duration=BigInt(r.microsecondDuration),o.timeBase=new m.Rational(1,1e6),o.pictType=i?.keyFrame?m.AV_PICTURE_TYPE_I:m.AV_PICTURE_TYPE_NONE,o.keyFrame=i?.keyFrame?1:0;let a=j(this.preciseTimings,r.microsecondTimestamp,d=>d.microsecondTimestamp),A=a!==-1?this.preciseTimings[a]:null;A&&A.microsecondTimestamp===r.microsecondTimestamp?(A.timestamp!==r.timestamp&&(A.timestampIsValid=!1),A.duration!==r.duration&&(A.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let u=await this.codecContext.sendFrame(o);for(m.FFmpegError.throwIfError(u,"Send frame");;){let d=await this.codecContext.receivePacket(this.packet);if(d===m.AVERROR_EAGAIN||d===m.AVERROR_EOF)break;this.receivePacket(d)}}receivePacket(r){if(p(this.codecContext),m.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let i=M(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=j(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),A=a!==-1?this.preciseTimings[a]:null;A&&A.microsecondTimestamp===Number(this.packet.pts)&&(A.timestampIsValid&&(o=A.timestamp),A.durationIsValid&&(s=A.duration));let u={},d=null,c=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=Ke(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=Qe(b)}else{let b=$e(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=je(b)}d=te({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}),g||(c=x)}if(!g){let b=[];for(let E of le(i))if(this.codec==="avc"){let w=Se(i[E.offset]);w!==7&&w!==8&&w!==13&&b.push(E)}else{let w=ce(i[E.offset]);w!==33&&w!==34&&w!==32&&b.push(E)}let T=0;for(let E of b)T+=4+E.length;let y=new Uint8Array(T),P=new DataView(y.buffer),V=0;for(let E of b){let w=E.length;P.setUint32(V,w,!1),V+=4,y.set(i.subarray(E.offset,E.offset+E.length),V),V+=E.length}i=y}}else if(this.codec==="vp8")this.packetEmitted||(d=te({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=Ze(i);d=te({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=et(i);d=te({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g})}}else throw new Error("Unreachable.");let h={},I=this.packet.getSideData(m.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);I&&(h.alpha=M(I).subarray(8));let _=new Et(i,this.packet.isKeyframe?"key":"delta",o,s,void 0,void 0,h);d!==null&&(u.decoderConfig={codec:d,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:c??void 0,colorSpace:{primaries:ie(this.codecContext.colorPrimaries),matrix:oe(this.codecContext.colorSpace),transfer:ne(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===m.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===m.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(_,u)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(m.FFmpegError.throwIfError(r,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===m.AVERROR_EAGAIN||i===m.AVERROR_EOF)break;this.receivePacket(i)}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()}};import{AudioSample as wt,CustomAudioDecoder as Tt}from"mediabunny";import*as B from"node-av";import{AudioSampleResource as Bt}from"mediabunny";import*as Ae from"node-av";var G=class extends Bt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),e.getMediaType()!==Ae.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=Ne(this.frame.format);if(e===null){let r=Ae.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}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(e){return p(this.frame.data&&e<this.frame.data.length),M(this.frame.data[e])}},ue=(t,e)=>{e.format=Me(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=Y(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var me=class extends Tt{static supports(e,r){return e==="aac"||e==="opus"||e==="mp3"||e==="vorbis"||e==="flac"||e==="ac3"||e==="eac3"}async init(){this.frame=new B.Frame,this.frame.alloc(),this.packet=new B.Packet,this.packet.alloc();let e=W[this.codec];p(e!==void 0);let r=B.Codec.findDecoder(e);if(r===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new B.CodecContext;i.allocContext3(r),i.sampleRate=this.config.sampleRate,i.channelLayout=Y(this.config.numberOfChannels),i.timeBase=new B.Rational(1,this.config.sampleRate),i.codecType=B.AVMEDIA_TYPE_AUDIO,i.codecId=e,i.extraData=this.config.description?Buffer.from(M(this.config.description)):null;let o=await i.open2();B.FFmpegError.throwIfError(o,"Open codec context"),this.codecContext=i}async decode(e){this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.packet.dts=B.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(e.duration*this.config.sampleRate));let r=await this.codecContext.sendPacket(this.packet);for(B.FFmpegError.throwIfError(r,"Send packet");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===B.AVERROR_EAGAIN||i===B.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(e){B.FFmpegError.throwIfError(e,"Receive frame");let r=this.frame.clone();if(!r)throw new Error("Allocation failure during frame clone.");r.timeBase=new B.Rational(1,this.config.sampleRate),this.onSample(new wt(new G(r)))}async flush(){let e=await this.codecContext.sendPacket(null);for(B.FFmpegError.throwIfError(e,"Flush decoder");;){let r=await this.codecContext.receiveFrame(this.frame);if(r===B.AVERROR_EAGAIN||r===B.AVERROR_EOF)break;this.receiveFrame(r)}this.codecContext.flushBuffers()}close(){this.codecContext.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Pt,QUALITY_MEDIUM as Ft,EncodedPacket as Rt}from"mediabunny";import*as v from"node-av";var Vt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Nt=[8e3,12e3,16e3,24e3,48e3],Mt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],tt=[32e3,44100,48e3],_e=1024,fe=class extends Pt{constructor(){super(...arguments);this.codecContext=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.resampler=null;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.dstFrame=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(r,i){let{numberOfChannels:o,sampleRate:s}=i;return r==="aac"&&o>=1&&o<=48&&Vt.includes(s)||r==="opus"&&o>=1&&o<=255&&Nt.includes(s)||r==="mp3"&&o>=1&&o<=2&&Mt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&tt.includes(s)||r==="eac3"&&o>=1&&o<=16&&tt.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=W[this.codec];p(r!==void 0);let i=v.Codec.findEncoder(r);if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new v.CodecContext;r.allocContext3(this.avCodec);let i=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(i=this.avCodec.sampleFormats[0]),r.sampleRate=this.config.sampleRate,r.channelLayout=Y(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=W[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??Ft._toAudioBitrate(this.codec)??0),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let o=await r.open2();v.FFmpegError.throwIfError(o,"Open codec context"),this.codecContext=r}async encode(r){this.codecContext===null&&(await this.createCodecContext(),p(this.codecContext)),this.firstExpectedTimestamp??=r.timestamp,r._data instanceof G?this.frame.ref(r._data.frame):ue(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let i=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==i)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=i,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=Y(this.codecContext.channels),A=Y(this.frame.channels),u=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,A,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(u,"allocSetOpts2");let d=this.resampler.init();v.FFmpegError.throwIfError(d,"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||_e,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(){p(this.codecContext),p(this.resampler),p(this.dstFrame),p(this.nextResamplerPts!==null);let r=this.codecContext.frameSize||_e;for(;!(this.resampler.getOutSamples(0)<r);)await this.resampler.convert(this.dstFrame.data,r,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(r)}async sendFrameAndReceivePackets(r){p(this.codecContext);let i=await this.codecContext.sendFrame(r);for(v.FFmpegError.throwIfError(i,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===v.AVERROR_EAGAIN||o===v.AVERROR_EOF)break;this.receivePacket(o)}}receivePacket(r){if(p(this.codecContext),p(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let i=Number(this.packet.pts)/this.codecContext.sampleRate,o=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-i,0);let u=this.config.codec,d=this.codecContext.extraData?M(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!d)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=He(d);this.adtsHeaderTemplate=qe(h),d=void 0}}else if(this.codec==="opus"){if(!d)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!d)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!d)throw new Error("Extradata expected for FLAC.");d=new Uint8Array([102,76,97,67,128,0,0,d.byteLength,...d])}a={decoderConfig:{codec:u,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:d}}}if(this.adtsHeaderTemplate){let u=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,u);let d=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);d.set(this.adtsHeaderTemplate.header,0),d.set(s,this.adtsHeaderTemplate.header.byteLength),s=d}i+=this.outputTimestampOffset;let A=new Rt(s,"key",i,o);this.packetEmitted=!0,this.onPacket(A,a)}async flush(){if(this.codecContext){e:if(this.resampler){p(this.resamplerInputSampleRate!==null);let r=this.resampler.getOutSamples(0);if(r===0)break e;let i=this.codecContext.frameSize||_e;p(r<i);let o=Math.ceil((i-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(o),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()}};var ot=Symbol.for("@mediabunny/server loaded");globalThis[ot]&&console.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[ot]=!0;var nt=!1,bi=()=>{nt||(nt=!0,J.Log.setLevel(J.AV_LOG_ERROR),rt(ae),it(de),rt(me),it(fe),Ut(Oe))},Ci=async(t,e)=>{if(t instanceof kt){if(t._data instanceof z)e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await ee(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new J.Rational(1,1e6)}else t._data instanceof G?e.ref(t._data.frame):ue(t,e),e.timeBase=new J.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};export{G as AvFrameAudioSampleResource,z as AvFrameVideoSampleResource,bi as registerMediabunnyServer,Ci as toAvFrame};
8
+ import{AudioSample as Dt,registerDecoder as nt,registerEncoder as ot,registerVideoSampleTransformer as Ot,VideoSample as st}from"mediabunny";import*as z from"node-av";import{CustomVideoDecoder as ut,VideoSample as mt}from"mediabunny";import*as b from"node-av";import*as n from"node-av";var X={avc:n.AV_CODEC_ID_H264,hevc:n.AV_CODEC_ID_HEVC,vp8:n.AV_CODEC_ID_VP8,vp9:n.AV_CODEC_ID_VP9,av1:n.AV_CODEC_ID_AV1,aac:n.AV_CODEC_ID_AAC,opus:n.AV_CODEC_ID_OPUS,mp3:n.AV_CODEC_ID_MP3,vorbis:n.AV_CODEC_ID_VORBIS,flac:n.AV_CODEC_ID_FLAC,ac3:n.AV_CODEC_ID_AC3,eac3:n.AV_CODEC_ID_EAC3},he,Be=()=>G.hardwareContext!==void 0&&typeof G.hardwareContext!="function"?G.hardwareContext:(he===void 0&&(he=n.HardwareContext.auto()),he),Te=t=>{if(t!==null&&!(t instanceof n.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},ge=new Map,Pe=async t=>{if(typeof G.hardwareContext=="function"){let e=await G.hardwareContext(t);return Te(e),e?.getDecoderCodec(t)??null}if(!ge.has(t)){let e=Be();ge.set(t,e?.getDecoderCodec(t)??null)}return ge.get(t)},Ce=new Map,Fe=async t=>{if(typeof G.hardwareContext=="function"){let e=await G.hardwareContext(t);return Te(e),e?.getEncoderCodec(t)??null}if(!Ce.has(t)){let e=Be();Ce.set(t,e?.getEncoderCodec(t)??null)}return Ce.get(t)},Re=t=>{switch(t){case"bt709":return n.AVCOL_PRI_BT709;case"bt470bg":return n.AVCOL_PRI_BT470BG;case"smpte170m":return n.AVCOL_PRI_SMPTE170M;case"bt2020":return n.AVCOL_PRI_BT2020;case"smpte432":return n.AVCOL_PRI_SMPTE432}return null},oe=t=>{switch(t){case n.AVCOL_PRI_BT709:return"bt709";case n.AVCOL_PRI_BT470BG:return"bt470bg";case n.AVCOL_PRI_SMPTE170M:return"smpte170m";case n.AVCOL_PRI_BT2020:return"bt2020";case n.AVCOL_PRI_SMPTE432:return"smpte432"}return null},Ve=t=>{switch(t){case"bt709":return n.AVCOL_TRC_BT709;case"smpte170m":return n.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return n.AVCOL_TRC_IEC61966_2_1;case"linear":return n.AVCOL_TRC_LINEAR;case"pq":return n.AVCOL_TRC_SMPTE2084;case"hlg":return n.AVCOL_TRC_ARIB_STD_B67}return null},se=t=>{switch(t){case n.AVCOL_TRC_BT709:return"bt709";case n.AVCOL_TRC_SMPTE170M:return"smpte170m";case n.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case n.AVCOL_TRC_LINEAR:return"linear";case n.AVCOL_TRC_SMPTE2084:return"pq";case n.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Ne=t=>{switch(t){case"rgb":return n.AVCOL_SPC_RGB;case"bt709":return n.AVCOL_SPC_BT709;case"bt470bg":return n.AVCOL_SPC_BT470BG;case"smpte170m":return n.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return n.AVCOL_SPC_BT2020_NCL}return null},ae=t=>{switch(t){case n.AVCOL_SPC_RGB:return"rgb";case n.AVCOL_SPC_BT709:return"bt709";case n.AVCOL_SPC_BT470BG:return"bt470bg";case n.AVCOL_SPC_SMPTE170M:return"smpte170m";case n.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},Me=t=>{switch(t){case n.AV_PIX_FMT_YUV420P:return"I420";case n.AV_PIX_FMT_YUVJ420P:return"I420";case n.AV_PIX_FMT_YUV420P10LE:return"I420P10";case n.AV_PIX_FMT_YUV420P12LE:return"I420P12";case n.AV_PIX_FMT_YUVA420P:return"I420A";case n.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case n.AV_PIX_FMT_YUV422P:return"I422";case n.AV_PIX_FMT_YUVJ422P:return"I422";case n.AV_PIX_FMT_YUV422P10LE:return"I422P10";case n.AV_PIX_FMT_YUV422P12LE:return"I422P12";case n.AV_PIX_FMT_YUVA422P:return"I422A";case n.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case n.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case n.AV_PIX_FMT_YUV444P:return"I444";case n.AV_PIX_FMT_YUVJ444P:return"I444";case n.AV_PIX_FMT_YUV444P10LE:return"I444P10";case n.AV_PIX_FMT_YUV444P12LE:return"I444P12";case n.AV_PIX_FMT_YUVA444P:return"I444A";case n.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case n.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case n.AV_PIX_FMT_NV12:return"NV12";case n.AV_PIX_FMT_RGBA:return"RGBA";case n.AV_PIX_FMT_RGB0:return"RGBX";case n.AV_PIX_FMT_BGRA:return"BGRA";case n.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},be=t=>{switch(t){case"I420":return n.AV_PIX_FMT_YUV420P;case"I420P10":return n.AV_PIX_FMT_YUV420P10LE;case"I420P12":return n.AV_PIX_FMT_YUV420P12LE;case"I420A":return n.AV_PIX_FMT_YUVA420P;case"I420AP10":return n.AV_PIX_FMT_YUVA420P10LE;case"I422":return n.AV_PIX_FMT_YUV422P;case"I422P10":return n.AV_PIX_FMT_YUV422P10LE;case"I422P12":return n.AV_PIX_FMT_YUV422P12LE;case"I422A":return n.AV_PIX_FMT_YUVA422P;case"I422AP10":return n.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return n.AV_PIX_FMT_YUVA422P12LE;case"I444":return n.AV_PIX_FMT_YUV444P;case"I444P10":return n.AV_PIX_FMT_YUV444P10LE;case"I444P12":return n.AV_PIX_FMT_YUV444P12LE;case"I444A":return n.AV_PIX_FMT_YUVA444P;case"I444AP10":return n.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return n.AV_PIX_FMT_YUVA444P12LE;case"NV12":return n.AV_PIX_FMT_NV12;case"RGBA":return n.AV_PIX_FMT_RGBA;case"RGBX":return n.AV_PIX_FMT_RGB0;case"BGRA":return n.AV_PIX_FMT_BGRA;case"BGRX":return n.AV_PIX_FMT_BGR0;default:return n.AV_PIX_FMT_NONE}},ke=t=>{switch(t){case n.AV_SAMPLE_FMT_U8:return"u8";case n.AV_SAMPLE_FMT_S16:return"s16";case n.AV_SAMPLE_FMT_S32:return"s32";case n.AV_SAMPLE_FMT_FLT:return"f32";case n.AV_SAMPLE_FMT_U8P:return"u8-planar";case n.AV_SAMPLE_FMT_S16P:return"s16-planar";case n.AV_SAMPLE_FMT_S32P:return"s32-planar";case n.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Ue=t=>{switch(t){case"u8":return n.AV_SAMPLE_FMT_U8;case"s16":return n.AV_SAMPLE_FMT_S16;case"s32":return n.AV_SAMPLE_FMT_S32;case"f32":return n.AV_SAMPLE_FMT_FLT;case"u8-planar":return n.AV_SAMPLE_FMT_U8P;case"s16-planar":return n.AV_SAMPLE_FMT_S16P;case"s32-planar":return n.AV_SAMPLE_FMT_S32P;case"f32-planar":return n.AV_SAMPLE_FMT_FLTP;default:return n.AV_SAMPLE_FMT_NONE}},Q=t=>{switch(t){case 1:return n.AV_CHANNEL_LAYOUT_MONO;case 2:return n.AV_CHANNEL_LAYOUT_STEREO;case 4:return n.AV_CHANNEL_LAYOUT_QUAD;case 6:return n.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return n.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:n.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};function p(t){if(!t)throw new Error("Assertion failed.")}var $=t=>t&&t[t.length-1];var l=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},W=t=>{let e=l(t);return(e&1)===0?-(e>>1):e+1>>1};var M=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),xe=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Le={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var De={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Oe={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var ve=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var ye=t=>(t=t>>1&1431655765|(t&1431655765)<<1,t=t>>2&858993459|(t&858993459)<<2,t=t>>4&252645135|(t&252645135)<<4,t=t>>8&16711935|(t&16711935)<<8,t=t>>16&65535|(t&65535)<<16,t>>>0);var Z=(t,e,r)=>{let i=0,o=t.length-1,s=-1;for(;i<=o;){let a=i+(o-i+1)/2|0;r(t[a])<=e?(s=a,i=a+1):o=a-1}return s};var qt=1e6*(1+Number.EPSILON);var ce=t=>{p(Number.isInteger(t.num)),p(Number.isInteger(t.den)),p(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let o=e%r;e=r,r=o}let i=e||1;return{num:t.num/i,den:t.den/i}};import{VideoSampleResource as lt,VideoSampleColorSpace as dt,VideoSample as He}from"mediabunny";import*as f from"node-av";var At=new Set([f.AV_PIX_FMT_YUVJ411P,f.AV_PIX_FMT_YUVJ420P,f.AV_PIX_FMT_YUVJ422P,f.AV_PIX_FMT_YUVJ440P,f.AV_PIX_FMT_YUVJ444P]),H=class t extends lt{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof f.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==f.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=e}getFormat(){return Me(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 dt({primaries:oe(this.frame.colorPrimaries),transfer:se(this.frame.colorTrc),matrix:ae(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||At.has(this.frame.format)?!0:this.frame.colorRange===f.AVCOL_RANGE_MPEG?!1:null})}close(){this.frame.free(),this._frame=null}getDataPlanes(){return p(this.frame.data),this.frame.data.map((e,r)=>({data:M(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let i=this.frame.width,o=this.frame.height,s=new f.SoftwareScaleContext,a=this.frame.format,A=be("RGBA");s.getContext(i,o,a,i,o,A,f.SWS_BILINEAR);let u=new f.Frame;u.width=i,u.height=o,u.format=A,u.alloc(),u.allocBuffer();let d=this.frame;try{await s.scaleFrame(u,d)}finally{s.freeContext()}return u.sampleAspectRatio=d.sampleAspectRatio,new He(new t(u),e)}},re=async(t,e,r)=>{p(t.format!==null),e.format=be(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Re(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Ne(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Ve(t.colorSpace.transfer??"unknown")??f.AVCOL_TRC_UNSPECIFIED,e.colorRange=t.colorSpace.fullRange===!1?f.AVCOL_RANGE_MPEG:t.colorSpace.fullRange===!0?f.AVCOL_RANGE_JPEG:f.AVCOL_RANGE_UNSPECIFIED;let i=t.allocationSize();return(!r||r.byteLength!==i)&&(r=Buffer.from({length:i})),await t.copyTo(r),e.fromBuffer(r),r},ze=async(t,e)=>{let r,i=!1;if(t._data instanceof H)r=t._data.frame;else{if(t.format===null)return null;r=new f.Frame,r.alloc(),i=!0,await re(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new f.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,A=s.createFilter(f.Filter.getByName("buffer"),"src",a),u=s.createFilter(f.Filter.getByName("buffersink"),"sink");p(A&&u);let d=f.FilterInOut.createList([{name:"in",filterCtx:A,padIdx:0}]),c=f.FilterInOut.createList([{name:"out",filterCtx:u,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,c,d);f.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let E=await s.config();f.FFmpegError.throwIfError(E,"FilterGraph.config");let _=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(_,"buffersrcAddFrame"),await A.buffersrcAddFrame(null);let g=new f.Frame;g.alloc();let x=await u.buffersinkGetFrame(g);return f.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new He(new H(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var le=class extends ut{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,i){return r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"}async init(){this.frame=new b.Frame,this.frame.alloc(),this.packet=new b.Packet,this.packet.alloc()}async initCodecContext(r){p(this.codecContext===null);let i=X[this.codec];p(i!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(i):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=b.Codec.findDecoder(i):o=await Pe(i)??b.Codec.findDecoder(i),!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new b.CodecContext;s.allocContext3(o),this.pixelAspectRatio=ce({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=b.AVMEDIA_TYPE_VIDEO,s.codecId=i,s.extraData=this.config.description?Buffer.from(M(this.config.description)):null,s.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();b.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&await this.initCodecContext(r),p(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=b.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(b.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let i=Z(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),o=i!==-1?this.preciseTimings[i]:null;o&&o.microsecondTimestamp===r.microsecondTimestamp?(o.timestamp!==r.timestamp&&(o.timestampIsValid=!1),o.duration!==r.duration&&(o.durationIsValid=!1)):(this.preciseTimings.splice(i+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(b.FFmpegError.throwIfError(s,"Send packet"),this.packet.unref();;){let a=await this.codecContext.receiveFrame(this.frame);if(a===b.AVERROR_EAGAIN||a===b.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(r){b.FFmpegError.throwIfError(r,"Receive frame"),this.frame.sampleAspectRatio=new b.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let i=Number(this.frame.pts)/1e6,o=Number(this.frame.duration)/1e6,s=Z(this.preciseTimings,Number(this.frame.pts),u=>u.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(i=a.timestamp),a.durationIsValid&&(o=a.duration));let A=this.frame.clone();if(!A)throw new Error("Frame clone allocation failed.");this.onSample(new mt(new H(A),{timestamp:i,duration:o}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(b.FFmpegError.throwIfError(r,"Flush decoder");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===b.AVERROR_EAGAIN||i===b.AVERROR_EOF)break;this.receiveFrame(i)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as It,QUALITY_MEDIUM as Bt,EncodedPacket as Tt}from"mediabunny";import*as m from"node-av";var O=class t{constructor(e){this.bytes=e;this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),r=this.bytes[e]??0,i=7-(this.pos&7),o=(r&1<<i)>>i;return this.pos++,o}readBits(e){if(e===1)return this.readBit();let r=0;for(let i=0;i<e;i++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let i=this.pos+e;for(let o=this.pos;o<i;o++){let s=Math.floor(o/8),a=this.bytes[s],A=7-(o&7);a&=~(1<<A),a|=(r&1<<i-o-1)>>i-o-1<<A,this.bytes[s]=a}this.pos=i}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,r=this.bytes[e]??0;return this.pos+=8,r}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new t(this.bytes);return e.pos=this.pos,e}};var qe=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],ft=[-1,1,2,3,4,5,6,8],We=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new O(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let i=e.readBits(4),o=null;i===15?o=e.readBits(24):i<qe.length&&(o=qe[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=ft[s]),{objectType:r,frequencyIndex:i,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var Ge=t=>{let e=new Uint8Array(7),r=new O(e),{objectType:i,frequencyIndex:o,channelConfiguration:s}=t,a=i-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var ht=["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"],gt=["aac","opus","mp3","vorbis","flac","ac3","eac3"],mr=[...gt,...ht];var Se=[{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 j=[{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 Xe=".01.01.01.01.00",Ye=".0.110.01.01.01.0";var ie=t=>{let{codec:e,codecDescription:r,colorSpace:i,avcCodecInfo:o,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:A}=t;if(e==="avc"){if(p(t.avcType!==null),o){let u=new Uint8Array([o.avcProfileIndication,o.profileCompatibility,o.avcLevelIndication]);return`avc${t.avcType}.${ve(u)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${ve(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,E,_;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=ye(s.generalProfileCompatibilityFlags),h=s.generalTierFlag,E=s.generalLevelIdc,_=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let x=xe(r),C=x.getUint8(1);u=C>>6&3,d=C&31,c=ye(x.getUint32(2)),h=C>>5&1,E=x.getUint8(12),_=[];for(let T=0;T<6;T++)_.push(x.getUint8(6+T))}let g="hev1.";for(g+=["","A","B","C"][u]+d,g+=".",g+=c.toString(16).toUpperCase(),g+=".",g+=h===0?"L":"H",g+=E;_.length>0&&_[_.length-1]===0;)_.pop();return _.length>0&&(g+=".",g+=_.map(x=>x.toString(16).toUpperCase()).join(".")),g}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,y=$(j).level;for(let P of j)if(T<=P.maxPictureSize){y=P.level;break}return`vp09.00.${y.toString().padStart(2,"0")}.08`}let u=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),c=a.bitDepth.toString().padStart(2,"0"),h=a.chromaSubsampling.toString().padStart(2,"0"),E=a.colourPrimaries.toString().padStart(2,"0"),_=a.transferCharacteristics.toString().padStart(2,"0"),g=a.matrixCoefficients.toString().padStart(2,"0"),x=a.videoFullRangeFlag.toString().padStart(2,"0"),C=`vp09.${u}.${d}.${c}.${h}`;return C+=`.${E}.${_}.${g}.${x}`,C.endsWith(Xe)&&(C=C.slice(0,-Xe.length)),C}else if(e==="av1"){if(!A){let P=t.width*t.height,V=$(j).level;for(let w of j)if(P<=w.maxPictureSize){V=w.level;break}return`av01.0.${V.toString().padStart(2,"0")}M.08`}let u=A.profile,d=A.level.toString().padStart(2,"0"),c=A.tier?"H":"M",h=A.bitDepth.toString().padStart(2,"0"),E=A.monochrome?"1":"0",_=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),g=i?.primaries?Le[i.primaries]:1,x=i?.transfer?De[i.transfer]:1,C=i?.matrix?Oe[i.matrix]:1,T=i?.fullRange?1:0,y=`av01.${u}.${d}${c}.${h}`;return y+=`.${E}.${_.toString().padStart(3,"0")}`,y+=`.${g.toString().padStart(2,"0")}`,y+=`.${x.toString().padStart(2,"0")}`,y+=`.${C.toString().padStart(2,"0")}`,y+=`.${T}`,y.endsWith(Ye)&&(y=y.slice(0,-Ye.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var Ae=function*(t){let e=0,r=-1;for(;e<t.length-2;){let i=t.indexOf(0,e);if(i===-1||i>=t.length-2)break;e=i;let o=0;if(e+3<t.length&&t[e+1]===0&&t[e+2]===0&&t[e+3]===1?o=4:t[e+1]===0&&t[e+2]===1&&(o=3),o===0){e++;continue}r!==-1&&e>r&&(yield{offset:r,length:e-r}),r=e+o,e=r}r!==-1&&r<t.length&&(yield{offset:r,length:t.length-r})};var Ee=t=>t&31,_e=t=>{let e=[],r=t.length;for(let i=0;i<r;i++)i+2<r&&t[i]===0&&t[i+1]===0&&t[i+2]===3?(e.push(0,0),i+=2):e.push(t[i]);return new Uint8Array(e)},Tr=new Uint8Array([0,0,0,1]);var Je=t=>{try{let e=[],r=[],i=[];for(let A of Ae(t)){let u=t.subarray(A.offset,A.offset+A.length),d=Ee(u[0]);d===7?e.push(u):d===8?r.push(u):d===13&&i.push(u)}if(e.length===0||r.length===0)return null;let o=e[0],s=Ct(o);p(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:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?i:null}}catch(e){return console.error("Error building AVC Decoder Configuration Record:",e),null}},je=t=>{let e=[];e.push(t.configurationVersion),e.push(t.avcProfileIndication),e.push(t.profileCompatibility),e.push(t.avcLevelIndication),e.push(252|t.lengthSizeMinusOne&3),e.push(224|t.sequenceParameterSets.length&31);for(let r of t.sequenceParameterSets){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}if(t.avcProfileIndication===100||t.avcProfileIndication===110||t.avcProfileIndication===122||t.avcProfileIndication===144){p(t.chromaFormat!==null),p(t.bitDepthLumaMinus8!==null),p(t.bitDepthChromaMinus8!==null),p(t.sequenceParameterSetExt!==null),e.push(252|t.chromaFormat&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.sequenceParameterSetExt.length);for(let r of t.sequenceParameterSetExt){let i=r.byteLength;e.push(i>>8),e.push(i&255);for(let o=0;o<i;o++)e.push(r[o])}}return new Uint8Array(e)};var $e={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}},Ct=t=>{try{let e=new O(_e(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();l(e);let a=1,A=0,u=0,d=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(a=l(e),a===3&&(d=e.readBits(1)),A=l(e),u=l(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let K=S<6?16:64,L=8,R=8;for(let D=0;D<K;D++){if(R!==0){let J=W(e);R=(L+J+256)%256}L=R===0?L:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),W(e),W(e);let k=l(e);for(let S=0;S<k;S++)W(e)}l(e),e.skipBits(1);let h=l(e),E=l(e),_=16*(h+1),g=16*(E+1),x=_,C=g,T=e.readBits(1);if(T||e.skipBits(1),e.skipBits(1),e.readBits(1)){let k=l(e),S=l(e),q=l(e),K=l(e),L,R;if((d===0?a:0)===0)L=1,R=2-T;else{let J=a===3?1:2,te=a===1?2:1;L=J,R=te*(2-T)}x-=L*(k+S),C-=R*(q+K)}let P=2,V=2,w=2,B=0,N={num:1,den:1},F=null,U=null;if(e.readBits(1)){if(e.readBits(1)){let te=e.readBits(8);if(te===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Ie=$e[te];Ie&&(N=Ie)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),B=e.readBits(1),e.readBits(1)&&(P=e.readBits(8),V=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(l(e),l(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let R=e.readBits(1);R&&Ke(e);let D=e.readBits(1);D&&Ke(e),(R||D)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),U=l(e))}if(F===null){p(U===null);let k=o&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&k)F=0,U=0;else{let S=h+1,q=E+1,K=(2-T)*q,L=Se.find(D=>D.level>=s)??$(Se),R=Math.min(Math.floor(L.maxDpbMbs/(S*K)),16);F=R,U=R}}return p(U!==null),{profileIdc:i,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:T,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:u,codedWidth:_,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:w,transferCharacteristics:V,fullRangeFlag:B,numReorderFrames:F,maxDecFrameBuffering:U}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},Ke=t=>{let e=l(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)l(t),l(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var de=t=>t>>1&63,bt=t=>{try{let e=new O(_e(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),i=e.readBits(1),{general_profile_space:o,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:A,general_constraint_indicator_flags:u,general_level_idc:d}=xt(e,r);l(e);let c=l(e),h=0;c===3&&(h=e.readBits(1));let E=l(e),_=l(e),g=E,x=_;if(e.readBits(1)){let S=l(e),q=l(e),K=l(e),L=l(e),R=1,D=1,J=h===0?c:0;J===1?(R=2,D=2):J===2&&(R=2,D=1),g-=(S+q)*R,x-=(K+L)*D}let C=l(e),T=l(e);l(e);let P=e.readBits(1)?0:r,V=0;for(let S=P;S<=r;S++)l(e),V=l(e),l(e);l(e),l(e),l(e),l(e),l(e),l(e),e.readBits(1)&&e.readBits(1)&&vt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),l(e),l(e),e.skipBits(1));let w=l(e);if(yt(e,w),e.readBits(1)){let S=l(e);for(let q=0;q<S;q++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,N=2,F=2,U=0,ne=0,k={num:1,den:1};if(e.readBits(1)){let S=Et(e,r);k=S.pixelAspectRatio,B=S.colourPrimaries,N=S.transferCharacteristics,F=S.matrixCoefficients,U=S.fullRangeFlag,ne=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:k,colourPrimaries:B,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:U,maxDecFrameBuffering:V+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:i,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:A,generalConstraintIndicatorFlags:u,generalLevelIdc:d,chromaFormatIdc:c,bitDepthLumaMinus8:C,bitDepthChromaMinus8:T,minSpatialSegmentationIdc:ne}}catch(e){return console.error("Error parsing HEVC SPS:",e),null}},Ze=t=>{try{let e=[],r=[],i=[],o=[];for(let d of Ae(t)){let c=t.subarray(d.offset,d.offset+d.length),h=de(c[0]);h===32?e.push(c):h===33?r.push(c):h===34?i.push(c):(h===39||h===40)&&o.push(c)}if(r.length===0||i.length===0)return null;let s=bt(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new O(_e(d));c.skipBits(16),l(c),l(c),c.skipBits(1),c.skipBits(1),c.skipBits(3),c.skipBits(1),c.skipBits(1),l(c),l(c),W(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),W(c),W(c),c.skipBits(1),c.skipBits(1),c.skipBits(1),c.skipBits(1);let h=c.readBits(1),E=c.readBits(1);!h&&!E?a=0:h&&!E?a=2:!h&&E?a=3:a=0}let A=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:i}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:de(o[0][0]),nalUnits:o}]:[]];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:A}}catch(e){return console.error("Error building HEVC Decoder Configuration Record:",e),null}},xt=(t,e)=>{let r=t.readBits(2),i=t.readBits(1),o=t.readBits(5),s=0;for(let c=0;c<32;c++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let c=0;c<6;c++)a[c]=t.readBits(8);let A=t.readBits(8),u=[],d=[];for(let c=0;c<e;c++)u.push(t.readBits(1)),d.push(t.readBits(1));if(e>0)for(let c=e;c<8;c++)t.skipBits(2);for(let c=0;c<e;c++)u[c]&&t.skipBits(88),d[c]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:i,general_profile_idc:o,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:A}},vt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))l(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&W(t);for(let s=0;s<o;s++)W(t)}},yt=(t,e)=>{let r=[];for(let i=0;i<e;i++)r[i]=St(t,i,e,r)},St=(t,e,r,i)=>{let o=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let u=l(t);a=e-(u+1)}else a=e-1;t.readBits(1),l(t);let A=i[a]??0;for(let u=0;u<=A;u++)t.readBits(1)||t.readBits(1);o=i[a]}else{let A=l(t),u=l(t);for(let d=0;d<A;d++)l(t),t.readBits(1);for(let d=0;d<u;d++)l(t),t.readBits(1);o=A+u}return o},Et=(t,e)=>{let r=2,i=2,o=2,s=0,a=0,A={num:1,den:1};if(t.readBits(1)){let u=t.readBits(8);if(u===255)A={num:t.readBits(16),den:t.readBits(16)};else{let d=$e[u];d&&(A=d)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),i=t.readBits(8),o=t.readBits(8))),t.readBits(1)&&(l(t),l(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(l(t),l(t),l(t),l(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&l(t),t.readBits(1)&&_t(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=l(t),l(t),l(t),l(t),l(t)),{pixelAspectRatio:A,colourPrimaries:r,transferCharacteristics:i,matrixCoefficients:o,fullRangeFlag:s,minSpatialSegmentationIdc:a}},_t=(t,e,r)=>{let i=!1,o=!1,s=!1;e&&(i=t.readBits(1)===1,o=t.readBits(1)===1,(i||o)&&(s=t.readBits(1)===1,s&&(t.readBits(8),t.readBits(5),t.readBits(1),t.readBits(5)),t.readBits(4),t.readBits(4),s&&t.readBits(4),t.readBits(5),t.readBits(5),t.readBits(5)));for(let a=0;a<=r;a++){let A=t.readBits(1)===1,u=!0;A||(u=t.readBits(1)===1);let d=!1;u?l(t):d=t.readBits(1)===1;let c=1;d||(c=l(t)+1),i&&Qe(t,c,s),o&&Qe(t,c,s)}},Qe=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},et=t=>{let e=[];e.push(t.configurationVersion),e.push((t.generalProfileSpace&3)<<6|(t.generalTierFlag&1)<<5|t.generalProfileIdc&31),e.push(t.generalProfileCompatibilityFlags>>>24&255),e.push(t.generalProfileCompatibilityFlags>>>16&255),e.push(t.generalProfileCompatibilityFlags>>>8&255),e.push(t.generalProfileCompatibilityFlags&255),e.push(...t.generalConstraintIndicatorFlags),e.push(t.generalLevelIdc&255),e.push(240|t.minSpatialSegmentationIdc>>8&15),e.push(t.minSpatialSegmentationIdc&255),e.push(252|t.parallelismType&3),e.push(252|t.chromaFormatIdc&3),e.push(248|t.bitDepthLumaMinus8&7),e.push(248|t.bitDepthChromaMinus8&7),e.push(t.avgFrameRate>>8&255),e.push(t.avgFrameRate&255),e.push((t.constantFrameRate&3)<<6|(t.numTemporalLayers&7)<<3|(t.temporalIdNested&1)<<2|t.lengthSizeMinusOne&3),e.push(t.arrays.length&255);for(let r of t.arrays){e.push((r.arrayCompleteness&1)<<7|0|r.nalUnitType&63),e.push(r.nalUnits.length>>8&255),e.push(r.nalUnits.length&255);for(let i of r.nalUnits){e.push(i.length>>8&255),e.push(i.length&255);for(let o=0;o<i.length;o++)e.push(i[o])}}return new Uint8Array(e)};var tt=t=>{let e=new O(t);if(e.readBits(2)!==2)return null;let i=e.readBits(1),s=(e.readBits(1)<<1)+i;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let d=8;s>=2&&(d=e.readBits(1)?12:10);let c=e.readBits(3),h=0,E=0;if(c!==7)if(E=e.readBits(1),s===1||s===3){let N=e.readBits(1),F=e.readBits(1);h=!N&&!F?3:N&&!F?2:1,e.skipBits(1)}else h=1;else h=3,E=1;let _=e.readBits(16),g=e.readBits(16),x=_+1,C=g+1,T=x*C,y=$(j).level;for(let B of j)if(T<=B.maxPictureSize){y=B.level;break}return{profile:s,level:y,bitDepth:d,chromaSubsampling:h,videoFullRangeFlag:E,colourPrimaries:c===2?1:c===1?6:2,transferCharacteristics:c===2?1:c===1?6:2,matrixCoefficients:c===7?0:c===2?1:c===1?6:2}},wt=function*(t){let e=new O(t),r=()=>{let i=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(i|=(s&127)<<o*7,!(s&128))break;if(o===7&&s&128)return null}return i>=2**32-1?null:i};for(;e.getBitsLeft()>=8;){e.skipBits(1);let i=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let A=r();if(A===null)return;a=A}else a=Math.floor(e.getBitsLeft()/8);p(e.pos%8===0),yield{type:i,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},rt=t=>{for(let{type:e,data:r}of wt(t)){if(e!==1)continue;let i=new O(r),o=i.readBits(3),s=i.readBits(1),a=i.readBits(1),A=0,u=0,d=0;if(a)A=i.readBits(5);else{if(i.readBits(1)&&(i.skipBits(32),i.skipBits(32),i.readBits(1)))return null;let B=i.readBits(1);B&&(d=i.readBits(5),i.skipBits(32),i.skipBits(5),i.skipBits(5));let N=i.readBits(5);for(let F=0;F<=N;F++){i.skipBits(12);let U=i.readBits(5);if(F===0&&(A=U),U>7){let k=i.readBits(1);F===0&&(u=k)}if(B&&i.readBits(1)){let S=d+1;i.skipBits(S),i.skipBits(S),i.skipBits(1)}i.readBits(1)&&i.skipBits(4)}}let c=i.readBits(4),h=i.readBits(4),E=c+1;i.skipBits(E);let _=h+1;i.skipBits(_);let g=0;if(a?g=0:g=i.readBits(1),g&&(i.skipBits(4),i.skipBits(3)),i.skipBits(1),i.skipBits(1),i.skipBits(1),!a){i.skipBits(1),i.skipBits(1),i.skipBits(1),i.skipBits(1);let w=i.readBits(1);w&&(i.skipBits(1),i.skipBits(1));let B=i.readBits(1),N=0;B?N=2:N=i.readBits(1),N>0&&(i.readBits(1)||i.skipBits(1)),w&&i.skipBits(3)}i.skipBits(1),i.skipBits(1),i.skipBits(1);let x=i.readBits(1),C=8;o===2&&x?C=i.readBits(1)?12:10:o<=2&&(C=x?10:8);let T=0;o!==1&&(T=i.readBits(1));let y=1,P=1,V=0;return T||(o===0?(y=1,P=1):o===1?(y=0,P=0):C===12&&(y=i.readBits(1),y&&(P=i.readBits(1))),y&&P&&(V=i.readBits(2))),{profile:o,level:A,tier:u,bitDepth:C,monochrome:T,chromaSubsamplingX:y,chromaSubsamplingY:P,chromaSamplePosition:V}}return null};var Pr=[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 Fr=new Uint8Array([5,4,65,67,45,51]),Rr=new Uint8Array([5,4,69,65,67,51]);var ue=class extends It{constructor(){super(...arguments);this.codecContext=null;this.scaler=null;this.dstFrame=null;this.lastBuffer=null;this.packetEmitted=!1;this.lastScalerKey=null;this.preciseTimings=[]}static supports(r,i){return(r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1")&&i.bitrateMode!=="quantizer"}async init(){this.frame=new m.Frame,this.frame.alloc(),this.frame.timeBase=new m.Rational(1,1e6),this.packet=new m.Packet,this.packet.alloc();let r=X[this.codec];p(r!==void 0);let i=null;if(this.codec==="vp9"&&this.config.alpha==="keep"?i=m.Codec.findEncoderByName(m.FF_ENCODER_LIBVPX_VP9)??m.Codec.findEncoder(r):this.config.hardwareAcceleration==="prefer-software"?i=m.Codec.findEncoder(r):i=await Fe(r)??m.Codec.findEncoder(r),!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new m.CodecContext;r.allocContext3(this.avCodec);let i=m.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(m.AV_PIX_FMT_YUV420P)||(i=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&this.avCodec.pixelFormats.includes(m.AV_PIX_FMT_YUVA420P)&&(i=m.AV_PIX_FMT_YUVA420P));let o=ce({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=i,r.timeBase=new m.Rational(1,1e6),r.gopSize=60,r.framerate=new m.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=BigInt(this.config.bitrate??Bt._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new m.Rational(o.num,o.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";this.avCodec.name==="libx264"?s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast")):this.avCodec.name==="libx265"?(r.setOption("x265-params","log-level=error"),s&&(r.setOption("tune","zerolatency"),r.setOption("preset","ultrafast"))):this.avCodec.name==="libvpx"?(s&&r.setOption("deadline","realtime"),r.setOption("cpu-used","8")):this.avCodec.name==="libvpx-vp9"?(r.setOption("deadline","realtime"),s?r.setOption("cpu-used","8"):r.setOption("cpu-used","5")):this.avCodec.name==="libsvtav1"&&(process.env.SVT_LOG="1",s&&r.setOption("preset","12"));let a=await r.open2();m.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,i){if(this.codecContext===null&&await this.createCodecContext(),p(this.codecContext),r._data instanceof H)this.frame.unref(),this.frame.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await re(r,this.frame,this.lastBuffer)}let o=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 m.SoftwareScaleContext);let d=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(d!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,m.SWS_FAST_BILINEAR),this.lastScalerKey=d;let h=this.scaler.initContext();m.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new m.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),o=this.dstFrame}o.pts=BigInt(r.microsecondTimestamp),o.duration=BigInt(r.microsecondDuration),o.timeBase=new m.Rational(1,1e6),o.pictType=i?.keyFrame?m.AV_PICTURE_TYPE_I:m.AV_PICTURE_TYPE_NONE,o.keyFrame=i?.keyFrame?1:0;let a=Z(this.preciseTimings,r.microsecondTimestamp,d=>d.microsecondTimestamp),A=a!==-1?this.preciseTimings[a]:null;A&&A.microsecondTimestamp===r.microsecondTimestamp?(A.timestamp!==r.timestamp&&(A.timestampIsValid=!1),A.duration!==r.duration&&(A.durationIsValid=!1)):(this.preciseTimings.splice(a+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let u=await this.codecContext.sendFrame(o);for(m.FFmpegError.throwIfError(u,"Send frame");;){let d=await this.codecContext.receivePacket(this.packet);if(d===m.AVERROR_EAGAIN||d===m.AVERROR_EOF)break;this.receivePacket(d)}}receivePacket(r){if(p(this.codecContext),m.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let i=M(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=Z(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),A=a!==-1?this.preciseTimings[a]:null;A&&A.microsecondTimestamp===Number(this.packet.pts)&&(A.timestampIsValid&&(o=A.timestamp),A.durationIsValid&&(s=A.duration));let u={},d=null,c=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 C=Je(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=je(C)}else{let C=Ze(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=et(C)}d=ie({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}),g||(c=x)}if(!g){let C=[];for(let w of Ae(i))if(this.codec==="avc"){let B=Ee(i[w.offset]);B!==7&&B!==8&&B!==13&&C.push(w)}else{let B=de(i[w.offset]);B!==33&&B!==34&&B!==32&&C.push(w)}let T=0;for(let w of C)T+=4+w.length;let y=new Uint8Array(T),P=new DataView(y.buffer),V=0;for(let w of C){let B=w.length;P.setUint32(V,B,!1),V+=4,y.set(i.subarray(w.offset,w.offset+w.length),V),V+=w.length}i=y}}else if(this.codec==="vp8")this.packetEmitted||(d=ie({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=tt(i);d=ie({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=rt(i);d=ie({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g})}}else throw new Error("Unreachable.");let h={},E=this.packet.getSideData(m.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);E&&(h.alpha=M(E).subarray(8));let _=new Tt(i,this.packet.isKeyframe?"key":"delta",o,s,void 0,void 0,h);d!==null&&(u.decoderConfig={codec:d,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:c??void 0,colorSpace:{primaries:oe(this.codecContext.colorPrimaries),matrix:ae(this.codecContext.colorSpace),transfer:se(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===m.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===m.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(_,u)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(m.FFmpegError.throwIfError(r,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===m.AVERROR_EAGAIN||i===m.AVERROR_EOF)break;this.receivePacket(i)}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()}};import{AudioSample as Ft,CustomAudioDecoder as Rt}from"mediabunny";import*as I from"node-av";import{AudioSampleResource as Pt}from"mediabunny";import*as ee from"node-av";var Y=class extends Pt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof ee.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==ee.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=ke(this.frame.format);if(e===null){let r=ee.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}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(e){return p(this.frame.data&&e<this.frame.data.length),M(this.frame.data[e])}},me=(t,e)=>{e.format=Ue(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=Q(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var fe=class extends Rt{constructor(){super(...arguments);this.codecContext=null}static supports(r,i){return r==="aac"||r==="opus"||r==="mp3"||r==="vorbis"||r==="flac"||r==="ac3"||r==="eac3"}async init(){this.frame=new I.Frame,this.frame.alloc(),this.packet=new I.Packet,this.packet.alloc();let r=X[this.codec];p(r!==void 0);let i=I.Codec.findDecoder(r);if(i===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let o=new I.CodecContext;o.allocContext3(i),o.sampleRate=this.config.sampleRate,o.channelLayout=Q(this.config.numberOfChannels),o.timeBase=new I.Rational(1,this.config.sampleRate),o.codecType=I.AVMEDIA_TYPE_AUDIO,o.codecId=r,o.extraData=this.config.description?Buffer.from(M(this.config.description)):null;let s=await o.open2();I.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=o}async decode(r){p(this.codecContext),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.packet.dts=I.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(r.duration*this.config.sampleRate));let i=await this.codecContext.sendPacket(this.packet);for(I.FFmpegError.throwIfError(i,"Send packet"),this.packet.unref();;){let o=await this.codecContext.receiveFrame(this.frame);if(o===I.AVERROR_EAGAIN||o===I.AVERROR_EOF)break;this.receiveFrame(o)}}receiveFrame(r){I.FFmpegError.throwIfError(r,"Receive frame");let i=this.frame.clone();if(!i)throw new Error("Allocation failure during frame clone.");i.timeBase=new I.Rational(1,this.config.sampleRate),this.onSample(new Ft(new Y(i)))}async flush(){p(this.codecContext);let r=await this.codecContext.sendPacket(null);for(I.FFmpegError.throwIfError(r,"Flush decoder");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===I.AVERROR_EAGAIN||i===I.AVERROR_EOF)break;this.receiveFrame(i)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Vt,QUALITY_MEDIUM as Nt,EncodedPacket as Mt}from"mediabunny";import*as v from"node-av";var kt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ut=[8e3,12e3,16e3,24e3,48e3],Lt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],it=[32e3,44100,48e3],we=1024,pe=class extends Vt{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(r,i){let{numberOfChannels:o,sampleRate:s}=i;return r==="aac"&&o>=1&&o<=48&&kt.includes(s)||r==="opus"&&o>=1&&o<=255&&Ut.includes(s)||r==="mp3"&&o>=1&&o<=2&&Lt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&it.includes(s)||r==="eac3"&&o>=1&&o<=16&&it.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=X[this.codec];p(r!==void 0);let i=v.Codec.findEncoder(r);if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new v.CodecContext;r.allocContext3(this.avCodec);let i=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(i=this.avCodec.sampleFormats[0]),r.sampleRate=this.config.sampleRate,r.channelLayout=Q(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=X[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??Nt._toAudioBitrate(this.codec)??0),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let o=await r.open2();v.FFmpegError.throwIfError(o,"Open codec context"),this.codecContext=r}async encode(r){this.codecContext===null&&(await this.createCodecContext(),p(this.codecContext)),this.firstExpectedTimestamp??=r.timestamp,r._data instanceof Y?(this.frame.unref(),this.frame.ref(r._data.frame)):me(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let i=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==i)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=i,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=Q(this.codecContext.channels),A=Q(this.frame.channels),u=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,A,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(u,"allocSetOpts2");let d=this.resampler.init();v.FFmpegError.throwIfError(d,"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||we,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(){p(this.codecContext),p(this.resampler),p(this.dstFrame),p(this.nextResamplerPts!==null);let r=this.codecContext.frameSize||we;for(;!(this.resampler.getOutSamples(0)<r);)await this.resampler.convert(this.dstFrame.data,r,null,0),this.dstFrame.pts=this.nextResamplerPts,await this.sendFrameAndReceivePackets(this.dstFrame),this.nextResamplerPts+=BigInt(r)}async sendFrameAndReceivePackets(r){p(this.codecContext);let i=await this.codecContext.sendFrame(r);for(v.FFmpegError.throwIfError(i,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===v.AVERROR_EAGAIN||o===v.AVERROR_EOF)break;this.receivePacket(o)}}receivePacket(r){if(p(this.codecContext),p(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let i=Number(this.packet.pts)/this.codecContext.sampleRate,o=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-i,0);let u=this.config.codec,d=this.codecContext.extraData?M(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!d)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=We(d);this.adtsHeaderTemplate=Ge(h),d=void 0}}else if(this.codec==="opus"){if(!d)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!d)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!d)throw new Error("Extradata expected for FLAC.");d=new Uint8Array([102,76,97,67,128,0,0,d.byteLength,...d])}a={decoderConfig:{codec:u,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:d}}}if(this.adtsHeaderTemplate){let u=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,u);let d=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);d.set(this.adtsHeaderTemplate.header,0),d.set(s,this.adtsHeaderTemplate.header.byteLength),s=d}i+=this.outputTimestampOffset;let A=new Mt(s,"key",i,o);this.packetEmitted=!0,this.onPacket(A,a)}async flush(){if(this.codecContext){e:if(this.resampler){p(this.resamplerInputSampleRate!==null);let r=this.resampler.getOutSamples(0);if(r===0)break e;let i=this.codecContext.frameSize||we;p(r<i);let o=Math.ceil((i-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(o),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()}};var ct=Symbol.for("@mediabunny/server loaded");globalThis[ct]&&console.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[ct]=!0;var at=!1,G={},yi=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof z.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");at||(at=!0,G=t,z.Log.setLevel(z.AV_LOG_ERROR),nt(le),ot(ue),nt(fe),ot(pe),Ot(ze))},Si=async(t,e)=>{if(!(t instanceof st)&&!(t instanceof Dt))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof z.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof st){if(t._data instanceof H)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await re(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new z.Rational(1,1e6)}else t._data instanceof Y?(e.unref(),e.ref(t._data.frame)):me(t,e),e.timeBase=new z.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};export{Y as AvFrameAudioSampleResource,H as AvFrameVideoSampleResource,G as _serverOptions,yi as registerMediabunnyServer,Si as toAvFrame};
@@ -7,7 +7,13 @@
7
7
  */
8
8
 
9
9
  // packages/server/src/index.ts
10
- import { registerDecoder, registerEncoder, registerVideoSampleTransformer, VideoSample as VideoSample4 } from "mediabunny";
10
+ import {
11
+ AudioSample as AudioSample4,
12
+ registerDecoder,
13
+ registerEncoder,
14
+ registerVideoSampleTransformer,
15
+ VideoSample as VideoSample4
16
+ } from "mediabunny";
11
17
  import * as NodeAv8 from "node-av";
12
18
 
13
19
  // packages/server/src/video-decoder.ts
@@ -32,13 +38,28 @@ var CODEC_TO_CODEC_ID = {
32
38
  };
33
39
  var cachedHardwareContext = void 0;
34
40
  var getHardwareContext = () => {
41
+ if (_serverOptions.hardwareContext !== void 0 && typeof _serverOptions.hardwareContext !== "function") {
42
+ return _serverOptions.hardwareContext;
43
+ }
35
44
  if (cachedHardwareContext === void 0) {
36
45
  cachedHardwareContext = NodeAv.HardwareContext.auto();
37
46
  }
38
47
  return cachedHardwareContext;
39
48
  };
49
+ var validateHwContext = (hw) => {
50
+ if (hw !== null && !(hw instanceof NodeAv.HardwareContext)) {
51
+ throw new TypeError(
52
+ "When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null."
53
+ );
54
+ }
55
+ };
40
56
  var hardwareDecoderCodecCache = /* @__PURE__ */ new Map();
41
- var getHardwareDecoderCodec = (codecId) => {
57
+ var getHardwareDecoderCodec = async (codecId) => {
58
+ if (typeof _serverOptions.hardwareContext === "function") {
59
+ const hw = await _serverOptions.hardwareContext(codecId);
60
+ validateHwContext(hw);
61
+ return hw?.getDecoderCodec(codecId) ?? null;
62
+ }
42
63
  if (!hardwareDecoderCodecCache.has(codecId)) {
43
64
  const hw = getHardwareContext();
44
65
  hardwareDecoderCodecCache.set(codecId, hw?.getDecoderCodec(codecId) ?? null);
@@ -46,7 +67,12 @@ var getHardwareDecoderCodec = (codecId) => {
46
67
  return hardwareDecoderCodecCache.get(codecId);
47
68
  };
48
69
  var hardwareEncoderCodecCache = /* @__PURE__ */ new Map();
49
- var getHardwareEncoderCodec = (codecId) => {
70
+ var getHardwareEncoderCodec = async (codecId) => {
71
+ if (typeof _serverOptions.hardwareContext === "function") {
72
+ const hw = await _serverOptions.hardwareContext(codecId);
73
+ validateHwContext(hw);
74
+ return hw?.getEncoderCodec(codecId) ?? null;
75
+ }
50
76
  if (!hardwareEncoderCodecCache.has(codecId)) {
51
77
  const hw = getHardwareContext();
52
78
  hardwareEncoderCodecCache.set(codecId, hw?.getEncoderCodec(codecId) ?? null);
@@ -470,6 +496,9 @@ var AvFrameVideoSampleResource = class _AvFrameVideoSampleResource extends Video
470
496
  }
471
497
  constructor(frame) {
472
498
  super();
499
+ if (!(frame instanceof NodeAv2.Frame)) {
500
+ throw new TypeError("frame must be a NodeAv.Frame.");
501
+ }
473
502
  if (frame.getMediaType() !== NodeAv2.AVMEDIA_TYPE_VIDEO) {
474
503
  throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");
475
504
  }
@@ -674,7 +703,7 @@ var NodeAvVideoDecoder = class extends CustomVideoDecoder {
674
703
  ) {
675
704
  codec = NodeAv3.Codec.findDecoder(codecId);
676
705
  } else {
677
- codec = getHardwareDecoderCodec(codecId) ?? NodeAv3.Codec.findDecoder(codecId);
706
+ codec = await getHardwareDecoderCodec(codecId) ?? NodeAv3.Codec.findDecoder(codecId);
678
707
  }
679
708
  if (!codec) {
680
709
  throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);
@@ -698,8 +727,8 @@ var NodeAvVideoDecoder = class extends CustomVideoDecoder {
698
727
  async decode(packet) {
699
728
  if (this.codecContext === null) {
700
729
  await this.initCodecContext(packet);
701
- assert(this.codecContext);
702
730
  }
731
+ assert(this.codecContext);
703
732
  this.packet.isKeyframe = packet.type === "key";
704
733
  this.packet.data = Buffer.from(packet.data);
705
734
  this.packet.timeBase = { num: 1, den: 1e6 };
@@ -739,6 +768,7 @@ var NodeAvVideoDecoder = class extends CustomVideoDecoder {
739
768
  }
740
769
  const ret = await this.codecContext.sendPacket(this.packet);
741
770
  NodeAv3.FFmpegError.throwIfError(ret, "Send packet");
771
+ this.packet.unref();
742
772
  while (true) {
743
773
  const receiveRet = await this.codecContext.receiveFrame(this.frame);
744
774
  if (receiveRet === NodeAv3.AVERROR_EAGAIN || receiveRet === NodeAv3.AVERROR_EOF) {
@@ -2468,11 +2498,11 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
2468
2498
  constructor() {
2469
2499
  super(...arguments);
2470
2500
  this.codecContext = null;
2501
+ this.scaler = null;
2502
+ this.dstFrame = null;
2471
2503
  this.lastBuffer = null;
2472
2504
  this.packetEmitted = false;
2473
- this.scaler = null;
2474
2505
  this.lastScalerKey = null;
2475
- this.dstFrame = null;
2476
2506
  // Bookkeeping to restore the original timing information
2477
2507
  this.preciseTimings = [];
2478
2508
  }
@@ -2493,7 +2523,7 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
2493
2523
  } else if (this.config.hardwareAcceleration === "prefer-software") {
2494
2524
  codec = NodeAv4.Codec.findEncoder(codecId);
2495
2525
  } else {
2496
- codec = getHardwareEncoderCodec(codecId) ?? NodeAv4.Codec.findEncoder(codecId);
2526
+ codec = await getHardwareEncoderCodec(codecId) ?? NodeAv4.Codec.findEncoder(codecId);
2497
2527
  }
2498
2528
  if (!codec) {
2499
2529
  throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);
@@ -2571,9 +2601,10 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
2571
2601
  async encode(videoSample, options) {
2572
2602
  if (this.codecContext === null) {
2573
2603
  await this.createCodecContext();
2574
- assert(this.codecContext);
2575
2604
  }
2605
+ assert(this.codecContext);
2576
2606
  if (videoSample._data instanceof AvFrameVideoSampleResource) {
2607
+ this.frame.unref();
2577
2608
  this.frame.ref(videoSample._data.frame);
2578
2609
  } else {
2579
2610
  if (videoSample.format === null) {
@@ -2882,6 +2913,9 @@ var AvFrameAudioSampleResource = class extends AudioSampleResource {
2882
2913
  }
2883
2914
  constructor(frame) {
2884
2915
  super();
2916
+ if (!(frame instanceof NodeAv5.Frame)) {
2917
+ throw new TypeError("frame must be a NodeAv.Frame.");
2918
+ }
2885
2919
  if (frame.getMediaType() !== NodeAv5.AVMEDIA_TYPE_AUDIO) {
2886
2920
  throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");
2887
2921
  }
@@ -2930,6 +2964,10 @@ var copyAudioSampleToAvFrame = (sample, frame) => {
2930
2964
 
2931
2965
  // packages/server/src/audio-decoder.ts
2932
2966
  var NodeAvAudioDecoder = class extends CustomAudioDecoder {
2967
+ constructor() {
2968
+ super(...arguments);
2969
+ this.codecContext = null;
2970
+ }
2933
2971
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
2934
2972
  static supports(codec, config) {
2935
2973
  return codec === "aac" || codec === "opus" || codec === "mp3" || codec === "vorbis" || codec === "flac" || codec === "ac3" || codec === "eac3";
@@ -2958,6 +2996,7 @@ var NodeAvAudioDecoder = class extends CustomAudioDecoder {
2958
2996
  this.codecContext = codecContext;
2959
2997
  }
2960
2998
  async decode(packet) {
2999
+ assert(this.codecContext);
2961
3000
  this.packet.isKeyframe = packet.type === "key";
2962
3001
  this.packet.data = Buffer.from(packet.data);
2963
3002
  this.packet.timeBase = { num: 1, den: this.config.sampleRate };
@@ -2966,6 +3005,7 @@ var NodeAvAudioDecoder = class extends CustomAudioDecoder {
2966
3005
  this.packet.duration = BigInt(Math.round(packet.duration * this.config.sampleRate));
2967
3006
  const ret = await this.codecContext.sendPacket(this.packet);
2968
3007
  NodeAv6.FFmpegError.throwIfError(ret, "Send packet");
3008
+ this.packet.unref();
2969
3009
  while (true) {
2970
3010
  const receiveRet = await this.codecContext.receiveFrame(this.frame);
2971
3011
  if (receiveRet === NodeAv6.AVERROR_EAGAIN || receiveRet === NodeAv6.AVERROR_EOF) {
@@ -2984,6 +3024,7 @@ var NodeAvAudioDecoder = class extends CustomAudioDecoder {
2984
3024
  this.onSample(new AudioSample2(new AvFrameAudioSampleResource(clone)));
2985
3025
  }
2986
3026
  async flush() {
3027
+ assert(this.codecContext);
2987
3028
  const ret = await this.codecContext.sendPacket(null);
2988
3029
  NodeAv6.FFmpegError.throwIfError(ret, "Flush decoder");
2989
3030
  while (true) {
@@ -2996,7 +3037,7 @@ var NodeAvAudioDecoder = class extends CustomAudioDecoder {
2996
3037
  this.codecContext.flushBuffers();
2997
3038
  }
2998
3039
  close() {
2999
- this.codecContext.freeContext();
3040
+ this.codecContext?.freeContext();
3000
3041
  this.frame.free();
3001
3042
  this.packet.free();
3002
3043
  }
@@ -3018,13 +3059,13 @@ var NodeAvAudioEncoder = class extends CustomAudioEncoder {
3018
3059
  constructor() {
3019
3060
  super(...arguments);
3020
3061
  this.codecContext = null;
3062
+ this.resampler = null;
3063
+ this.dstFrame = null;
3021
3064
  this.firstExpectedTimestamp = null;
3022
3065
  this.outputTimestampOffset = 0;
3023
- this.resampler = null;
3024
3066
  this.inputParametersKey = null;
3025
3067
  this.resamplerInputSampleRate = null;
3026
3068
  this.nextResamplerPts = null;
3027
- this.dstFrame = null;
3028
3069
  this.packetEmitted = false;
3029
3070
  this.adtsHeaderTemplate = null;
3030
3071
  }
@@ -3076,6 +3117,7 @@ var NodeAvAudioEncoder = class extends CustomAudioEncoder {
3076
3117
  }
3077
3118
  this.firstExpectedTimestamp ??= audioSample.timestamp;
3078
3119
  if (audioSample._data instanceof AvFrameAudioSampleResource) {
3120
+ this.frame.unref();
3079
3121
  this.frame.ref(audioSample._data.frame);
3080
3122
  } else {
3081
3123
  copyAudioSampleToAvFrame(audioSample, this.frame);
@@ -3289,11 +3331,21 @@ if (globalThis[SERVER_LOADED_SYMBOL]) {
3289
3331
  }
3290
3332
  globalThis[SERVER_LOADED_SYMBOL] = true;
3291
3333
  var registered = false;
3292
- var registerMediabunnyServer = () => {
3334
+ var _serverOptions = {};
3335
+ var registerMediabunnyServer = (options = {}) => {
3336
+ if (typeof options !== "object" || !options) {
3337
+ throw new TypeError("options must be an object.");
3338
+ }
3339
+ if (options.hardwareContext != null && !(options.hardwareContext instanceof NodeAv8.HardwareContext || typeof options.hardwareContext === "function")) {
3340
+ throw new TypeError(
3341
+ "options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null."
3342
+ );
3343
+ }
3293
3344
  if (registered) {
3294
3345
  return;
3295
3346
  }
3296
3347
  registered = true;
3348
+ _serverOptions = options;
3297
3349
  NodeAv8.Log.setLevel(NodeAv8.AV_LOG_ERROR);
3298
3350
  registerDecoder(NodeAvVideoDecoder);
3299
3351
  registerEncoder(NodeAvVideoEncoder);
@@ -3302,8 +3354,15 @@ var registerMediabunnyServer = () => {
3302
3354
  registerVideoSampleTransformer(transformVideoSample);
3303
3355
  };
3304
3356
  var toAvFrame = async (sample, frame) => {
3357
+ if (!(sample instanceof VideoSample4) && !(sample instanceof AudioSample4)) {
3358
+ throw new TypeError("sample must be a VideoSample or an AudioSample.");
3359
+ }
3360
+ if (!(frame instanceof NodeAv8.Frame)) {
3361
+ throw new TypeError("frame must be a NodeAv.Frame.");
3362
+ }
3305
3363
  if (sample instanceof VideoSample4) {
3306
3364
  if (sample._data instanceof AvFrameVideoSampleResource) {
3365
+ frame.unref();
3307
3366
  frame.ref(sample._data.frame);
3308
3367
  } else {
3309
3368
  if (sample.format === null) {
@@ -3316,6 +3375,7 @@ var toAvFrame = async (sample, frame) => {
3316
3375
  frame.timeBase = new NodeAv8.Rational(1, 1e6);
3317
3376
  } else {
3318
3377
  if (sample._data instanceof AvFrameAudioSampleResource) {
3378
+ frame.unref();
3319
3379
  frame.ref(sample._data.frame);
3320
3380
  } else {
3321
3381
  copyAudioSampleToAvFrame(sample, frame);
@@ -3328,6 +3388,7 @@ var toAvFrame = async (sample, frame) => {
3328
3388
  export {
3329
3389
  AvFrameAudioSampleResource,
3330
3390
  AvFrameVideoSampleResource,
3391
+ _serverOptions,
3331
3392
  registerMediabunnyServer,
3332
3393
  toAvFrame
3333
3394
  };
@@ -72,6 +72,23 @@ export declare class AvFrameVideoSampleResource extends VideoSampleResource {
72
72
  toRgbSample(init: SetRequired<VideoSampleInit, 'timestamp'>, colorSpace: PredefinedColorSpace): Promise<VideoSample>;
73
73
  }
74
74
 
75
+ /**
76
+ * Options for configuring Mediabunny's server-side polyfills.
77
+ * @group \@mediabunny/server
78
+ * @public
79
+ */
80
+ export declare type MediabunnyServerOptions = {
81
+ /**
82
+ * The hardware context to use for hardware-accelerated decoding and encoding. When set to a
83
+ * `NodeAv.HardwareContext`, that context is used directly. When set to a function, the function is invoked (with
84
+ * no caching) every time a hardware decoder or encoder codec is resolved, receiving the codec ID and returning the
85
+ * context to use for it (or `null` for no hardware acceleration).
86
+ *
87
+ * When not set, a context is automatically detected on first use and then cached.
88
+ */
89
+ hardwareContext?: NodeAv.HardwareContext | null | ((codecId: NodeAv.AVCodecID) => MaybePromise<NodeAv.HardwareContext | null>);
90
+ };
91
+
75
92
  /**
76
93
  * Registers video and audio decoders and encoders for all codecs, using FFmpeg's libavcodec under the hood.
77
94
  * Additionally, a custom `VideoSample` transformer based on libavfilter is registered to enable resizing, rotation and
@@ -82,10 +99,12 @@ export declare class AvFrameVideoSampleResource extends VideoSampleResource {
82
99
  * The decoders and encoders will automatically detect hardware acceleration support for each codec and platform and
83
100
  * make use of it if applicable.
84
101
  *
102
+ * You can pass optional {@link MediabunnyServerOptions} for additional configuration.
103
+ *
85
104
  * @group \@mediabunny/server
86
105
  * @public
87
106
  */
88
- export declare const registerMediabunnyServer: () => void;
107
+ export declare const registerMediabunnyServer: (options?: MediabunnyServerOptions) => void;
89
108
 
90
109
  /**
91
110
  * Copies a `VideoSample` or `AudioSample` into the given NodeAV
@@ -10,7 +10,7 @@ import * as NodeAv from 'node-av';
10
10
  export declare class NodeAvAudioDecoder extends CustomAudioDecoder {
11
11
  frame: NodeAv.Frame;
12
12
  packet: NodeAv.Packet;
13
- codecContext: NodeAv.CodecContext;
13
+ codecContext: NodeAv.CodecContext | null;
14
14
  static supports(codec: AudioCodec, config: AudioDecoderConfig): boolean;
15
15
  init(): Promise<void>;
16
16
  decode(packet: EncodedPacket): Promise<void>;
@@ -1 +1 @@
1
- {"version":3,"file":"audio-decoder.d.ts","sourceRoot":"","sources":["../../../src/audio-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAe,kBAAkB,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAKlC,qBAAa,kBAAmB,SAAQ,kBAAkB;IACzD,KAAK,EAAG,MAAM,CAAC,KAAK,CAAC;IACrB,MAAM,EAAG,MAAM,CAAC,MAAM,CAAC;IACvB,YAAY,EAAG,MAAM,CAAC,YAAY,CAAC;WAGnB,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAU1E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBlD,YAAY,CAAC,GAAG,EAAE,MAAM;IAYlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAmB5B,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;CAK3B"}
1
+ {"version":3,"file":"audio-decoder.d.ts","sourceRoot":"","sources":["../../../src/audio-decoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAe,kBAAkB,EAAE,aAAa,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAC3G,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAKlC,qBAAa,kBAAmB,SAAQ,kBAAkB;IACzD,KAAK,EAAG,MAAM,CAAC,KAAK,CAAC;IACrB,MAAM,EAAG,MAAM,CAAC,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC,YAAY,GAAG,IAAI,CAAQ;WAGhC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAU1E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAgCrB,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;IAyBlD,YAAY,CAAC,GAAG,EAAE,MAAM;IAYlB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB5B,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;CAK3B"}