@mediabunny/server 1.49.0 → 1.50.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -1
- package/dist/bundles/mediabunny-server.cjs +93 -10
- package/dist/bundles/mediabunny-server.min.cjs +2 -2
- package/dist/bundles/mediabunny-server.min.mjs +2 -2
- package/dist/bundles/mediabunny-server.mjs +93 -10
- package/dist/modules/src/index.d.ts.map +1 -1
- package/dist/modules/src/index.js +2 -0
- package/dist/modules/src/misc.d.ts.map +1 -1
- package/dist/modules/src/misc.js +1 -0
- package/dist/modules/src/video-encoder.d.ts.map +1 -1
- package/dist/modules/src/video-encoder.js +58 -6
- package/dist/modules/tsconfig.tsbuildinfo +1 -1
- package/package.json +3 -2
- package/src/index.ts +2 -0
- package/src/misc.ts +1 -0
- package/src/video-encoder.ts +67 -7
|
@@ -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{AudioSample as zt,Logging as qt,registerDecoder as at,registerEncoder as ct,registerVideoSampleTransformer as Wt,VideoSample as lt}from"mediabunny";import*as q from"node-av";import{CustomVideoDecoder as pt,VideoSample as ht}from"mediabunny";import*as b from"node-av";import*as n from"node-av";var Y={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},be,Fe=()=>X.hardwareContext!==void 0&&typeof X.hardwareContext!="function"?X.hardwareContext:(be===void 0&&(be=n.HardwareContext.auto()),be),Re=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.")},xe=new Map,Ve=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return Re(e),e?.getDecoderCodec(t)??null}if(!xe.has(t)){let e=Fe();xe.set(t,e?.getDecoderCodec(t)??null)}return xe.get(t)},ve=new Map,Ne=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return Re(e),e?.getEncoderCodec(t)??null}if(!ve.has(t)){let e=Fe();ve.set(t,e?.getEncoderCodec(t)??null)}return ve.get(t)},Me=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},ae=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},ke=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},ce=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},Ue=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},le=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},Le=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}},ye=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}},De=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}},Oe=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}},J=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}}};var M=class M{constructor(){}static get level(){return M._level}static set level(e){if(e!==0&&e!==1&&e!==2&&e!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");M._level=e}static get _emitter(){return M._emitterInstance??=new de}static on(e,r,i){return M._emitter.on(e,r,i)}static _error(...e){M._emitter._emit("error",e),M._level>=1&&console.error(...e)}static _warn(...e){M._emitter._emit("warn",e),M._level>=2&&console.warn(...e)}static _info(...e){M._emitter._emit("info",e),M._level>=3&&console.info(...e)}};M._level=3,M._emitterInstance=null;var $=M;function p(t){if(!t)throw new Error("Assertion failed.")}var ee=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)},G=t=>{let e=l(t);return(e&1)===0?-(e>>1):e+1>>1};var k=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Ee=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var He={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var ze={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var qe={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var _e=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var we=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 te=(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 Ae=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}};var de=class{constructor(){this._listeners=new Map}on(e,r,i){this._listeners.has(e)||this._listeners.set(e,new Set);let o={fn:r,once:i?.once??!1};return this._listeners.get(e).add(o),()=>{this._listeners.get(e)?.delete(o)}}_emit(...e){let[r,i]=e,o=this._listeners.get(r);if(o)for(let s of o){try{s.fn(i)}catch(a){console.error(a)}s.once&&o.delete(s)}}};import{VideoSampleResource as ut,VideoSampleColorSpace as mt,VideoSample as We}from"mediabunny";import*as f from"node-av";var ft=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 ut{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 Le(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 mt({primaries:ae(this.frame.colorPrimaries),transfer:ce(this.frame.colorTrc),matrix:le(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||ft.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:k(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=ye("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 We(new t(u),e)}},ne=async(t,e,r)=>{p(t.format!==null),e.format=ye(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Me(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Ue(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=ke(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},Ge=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 ne(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 _=await s.config();f.FFmpegError.throwIfError(_,"FilterGraph.config");let w=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(w,"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 We(new z(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var ue=class extends pt{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=Y[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 Ve(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=Ae({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(k(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=te(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=te(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 ht(new z(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 Pt,QUALITY_MEDIUM as Ft,EncodedPacket as Rt}from"mediabunny";import*as m from"node-av";var H=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 Xe=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],gt=[-1,1,2,3,4,5,6,8],Ye=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new H(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<Xe.length&&(o=Xe[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=gt[s]),{objectType:r,frequencyIndex:i,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var Ke=t=>{let e=new Uint8Array(7),r=new H(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 bt=["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"],xt=["aac","opus","mp3","vorbis","flac","ac3","eac3"],br=[...xt,...bt];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 Z=[{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 Qe=".01.01.01.01.00",Je=".0.110.01.01.01.0";var oe=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}.${_e(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}.${_e(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,_,w;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=we(s.generalProfileCompatibilityFlags),h=s.generalTierFlag,_=s.generalLevelIdc,w=[...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=Ee(r),C=x.getUint8(1);u=C>>6&3,d=C&31,c=we(x.getUint32(2)),h=C>>5&1,_=x.getUint8(12),w=[];for(let T=0;T<6;T++)w.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+=_;w.length>0&&w[w.length-1]===0;)w.pop();return w.length>0&&(g+=".",g+=w.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=ee(Z).level;for(let P of Z)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"),_=a.colourPrimaries.toString().padStart(2,"0"),w=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+=`.${_}.${w}.${g}.${x}`,C.endsWith(Qe)&&(C=C.slice(0,-Qe.length)),C}else if(e==="av1"){if(!A){let P=t.width*t.height,V=ee(Z).level;for(let S of Z)if(P<=S.maxPictureSize){V=S.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"),_=A.monochrome?"1":"0",w=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),g=i?.primaries?He[i.primaries]:1,x=i?.transfer?ze[i.transfer]:1,C=i?.matrix?qe[i.matrix]:1,T=i?.fullRange?1:0,y=`av01.${u}.${d}${c}.${h}`;return y+=`.${_}.${w.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(Je)&&(y=y.slice(0,-Je.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var fe=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 Ie=t=>t&31,Be=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)},kr=new Uint8Array([0,0,0,1]);var Ze=t=>{try{let e=[],r=[],i=[];for(let A of fe(t)){let u=t.subarray(A.offset,A.offset+A.length),d=Ie(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=vt(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 $._error("Error building AVC Decoder Configuration Record:",e),null}},et=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 tt={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}},vt=t=>{try{let e=new H(Be(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 E=0;E<(a!==3?8:12);E++)if(e.readBits(1)){let Q=E<6?16:64,D=8,R=8;for(let O=0;O<Q;O++){if(R!==0){let j=G(e);R=(D+j+256)%256}D=R===0?D:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),G(e),G(e);let U=l(e);for(let E=0;E<U;E++)G(e)}l(e),e.skipBits(1);let h=l(e),_=l(e),w=16*(h+1),g=16*(_+1),x=w,C=g,T=e.readBits(1);if(T||e.skipBits(1),e.skipBits(1),e.readBits(1)){let U=l(e),E=l(e),W=l(e),Q=l(e),D,R;if((d===0?a:0)===0)D=1,R=2-T;else{let j=a===3?1:2,ie=a===1?2:1;D=j,R=ie*(2-T)}x-=D*(U+E),C-=R*(W+Q)}let P=2,V=2,S=2,B=0,N={num:1,den:1},F=null,L=null;if(e.readBits(1)){if(e.readBits(1)){let ie=e.readBits(8);if(ie===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Pe=tt[ie];Pe&&(N=Pe)}}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),S=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&&je(e);let O=e.readBits(1);O&&je(e),(R||O)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),L=l(e))}if(F===null){p(L===null);let U=o&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&U)F=0,L=0;else{let E=h+1,W=_+1,Q=(2-T)*W,D=Se.find(O=>O.level>=s)??ee(Se),R=Math.min(Math.floor(D.maxDpbMbs/(E*Q)),16);F=R,L=R}}return p(L!==null),{profileIdc:i,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:T,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:u,codedWidth:w,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:S,transferCharacteristics:V,fullRangeFlag:B,numReorderFrames:F,maxDecFrameBuffering:L}}catch(e){return $._error("Error parsing AVC SPS:",e),null}},je=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 me=t=>t>>1&63,yt=t=>{try{let e=new H(Be(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}=Et(e,r);l(e);let c=l(e),h=0;c===3&&(h=e.readBits(1));let _=l(e),w=l(e),g=_,x=w;if(e.readBits(1)){let E=l(e),W=l(e),Q=l(e),D=l(e),R=1,O=1,j=h===0?c:0;j===1?(R=2,O=2):j===2&&(R=2,O=1),g-=(E+W)*R,x-=(Q+D)*O}let C=l(e),T=l(e);l(e);let P=e.readBits(1)?0:r,V=0;for(let E=P;E<=r;E++)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)&&_t(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),l(e),l(e),e.skipBits(1));let S=l(e);if(wt(e,S),e.readBits(1)){let E=l(e);for(let W=0;W<E;W++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,N=2,F=2,L=0,se=0,U={num:1,den:1};if(e.readBits(1)){let E=It(e,r);U=E.pixelAspectRatio,B=E.colourPrimaries,N=E.transferCharacteristics,F=E.matrixCoefficients,L=E.fullRangeFlag,se=E.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:U,colourPrimaries:B,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:L,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:se}}catch(e){return $._error("Error parsing HEVC SPS:",e),null}},rt=t=>{try{let e=[],r=[],i=[],o=[];for(let d of fe(t)){let c=t.subarray(d.offset,d.offset+d.length),h=me(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=yt(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new H(Be(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),G(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),G(c),G(c),c.skipBits(1),c.skipBits(1),c.skipBits(1),c.skipBits(1);let h=c.readBits(1),_=c.readBits(1);!h&&!_?a=0:h&&!_?a=2:!h&&_?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:me(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 $._error("Error building HEVC Decoder Configuration Record:",e),null}},Et=(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}},_t=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&&G(t);for(let s=0;s<o;s++)G(t)}},wt=(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},It=(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=tt[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)&&Bt(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}},Bt=(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&&$e(t,c,s),o&&$e(t,c,s)}},$e=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},it=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 nt=t=>{let e=new H(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,_=0;if(c!==7)if(_=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,_=1;let w=e.readBits(16),g=e.readBits(16),x=w+1,C=g+1,T=x*C,y=ee(Z).level;for(let B of Z)if(T<=B.maxPictureSize){y=B.level;break}return{profile:s,level:y,bitDepth:d,chromaSubsampling:h,videoFullRangeFlag:_,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}},Tt=function*(t){let e=new H(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)}},ot=t=>{for(let{type:e,data:r}of Tt(t)){if(e!==1)continue;let i=new H(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 L=i.readBits(5);if(F===0&&(A=L),L>7){let U=i.readBits(1);F===0&&(u=U)}if(B&&i.readBits(1)){let E=d+1;i.skipBits(E),i.skipBits(E),i.skipBits(1)}i.readBits(1)&&i.skipBits(4)}}let c=i.readBits(4),h=i.readBits(4),_=c+1;i.skipBits(_);let w=h+1;i.skipBits(w);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 S=i.readBits(1);S&&(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)),S&&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 Ur=[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 Lr=new Uint8Array([5,4,65,67,45,51]),Dr=new Uint8Array([5,4,69,65,67,51]);var pe=class extends Pt{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=Y[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 Ne(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=Ae({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??Ft._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.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 ne(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=te(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=k(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=te(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=Ze(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=et(C)}else{let C=rt(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=it(C)}d=oe({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 S of fe(i))if(this.codec==="avc"){let B=Ie(i[S.offset]);B!==7&&B!==8&&B!==13&&C.push(S)}else{let B=me(i[S.offset]);B!==33&&B!==34&&B!==32&&C.push(S)}let T=0;for(let S of C)T+=4+S.length;let y=new Uint8Array(T),P=new DataView(y.buffer),V=0;for(let S of C){let B=S.length;P.setUint32(V,B,!1),V+=4,y.set(i.subarray(S.offset,S.offset+S.length),V),V+=S.length}i=y}}else if(this.codec==="vp8")this.packetEmitted||(d=oe({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=nt(i);d=oe({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=ot(i);d=oe({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={},_=this.packet.getSideData(m.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);_&&(h.alpha=k(_).subarray(8));let w=new Rt(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:ae(this.codecContext.colorPrimaries),matrix:le(this.codecContext.colorSpace),transfer:ce(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(w,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 Nt,CustomAudioDecoder as Mt}from"mediabunny";import*as I from"node-av";import{AudioSampleResource as Vt}from"mediabunny";import*as re from"node-av";var K=class extends Vt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof re.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==re.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=De(this.frame.format);if(e===null){let r=re.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),k(this.frame.data[e])}},he=(t,e)=>{e.format=Oe(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=J(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ge=class extends Mt{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=Y[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=J(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(k(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 Nt(new K(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 kt,QUALITY_MEDIUM as Ut,EncodedPacket as Lt}from"mediabunny";import*as v from"node-av";var Dt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ot=[8e3,12e3,16e3,24e3,48e3],Ht=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],st=[32e3,44100,48e3],Te=1024,Ce=class extends kt{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&&Dt.includes(s)||r==="opus"&&o>=1&&o<=255&&Ot.includes(s)||r==="mp3"&&o>=1&&o<=2&&Ht.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&st.includes(s)||r==="eac3"&&o>=1&&o<=16&&st.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=Y[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=J(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=Y[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??Ut._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 K?(this.frame.unref(),this.frame.ref(r._data.frame)):he(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=J(this.codecContext.channels),A=J(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||Te,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||Te;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?k(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=Ye(d);this.adtsHeaderTemplate=Ke(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 Lt(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||Te;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 At=Symbol.for("@mediabunny/server loaded");globalThis[At]&&qt._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[
|
|
8
|
+
import{AudioSample as Gt,Logging as Xt,registerDecoder as ct,registerEncoder as lt,registerVideoSampleTransformer as Yt,VideoSample as dt}from"mediabunny";import*as q from"node-av";import{CustomVideoDecoder as ht,VideoSample as gt}from"mediabunny";import*as b from"node-av";import*as i from"node-av";var Y={avc:i.AV_CODEC_ID_H264,hevc:i.AV_CODEC_ID_HEVC,vp8:i.AV_CODEC_ID_VP8,vp9:i.AV_CODEC_ID_VP9,av1:i.AV_CODEC_ID_AV1,prores:i.AV_CODEC_ID_PRORES,aac:i.AV_CODEC_ID_AAC,opus:i.AV_CODEC_ID_OPUS,mp3:i.AV_CODEC_ID_MP3,vorbis:i.AV_CODEC_ID_VORBIS,flac:i.AV_CODEC_ID_FLAC,ac3:i.AV_CODEC_ID_AC3,eac3:i.AV_CODEC_ID_EAC3},be,Re=()=>X.hardwareContext!==void 0&&typeof X.hardwareContext!="function"?X.hardwareContext:(be===void 0&&(be=i.HardwareContext.auto()),be),Ve=t=>{if(t!==null&&!(t instanceof i.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},xe=new Map,Ne=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return Ve(e),e?.getDecoderCodec(t)??null}if(!xe.has(t)){let e=Re();xe.set(t,e?.getDecoderCodec(t)??null)}return xe.get(t)},ve=new Map,Me=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return Ve(e),e?.getEncoderCodec(t)??null}if(!ve.has(t)){let e=Re();ve.set(t,e?.getEncoderCodec(t)??null)}return ve.get(t)},ke=t=>{switch(t){case"bt709":return i.AVCOL_PRI_BT709;case"bt470bg":return i.AVCOL_PRI_BT470BG;case"smpte170m":return i.AVCOL_PRI_SMPTE170M;case"bt2020":return i.AVCOL_PRI_BT2020;case"smpte432":return i.AVCOL_PRI_SMPTE432}return null},ae=t=>{switch(t){case i.AVCOL_PRI_BT709:return"bt709";case i.AVCOL_PRI_BT470BG:return"bt470bg";case i.AVCOL_PRI_SMPTE170M:return"smpte170m";case i.AVCOL_PRI_BT2020:return"bt2020";case i.AVCOL_PRI_SMPTE432:return"smpte432"}return null},Ue=t=>{switch(t){case"bt709":return i.AVCOL_TRC_BT709;case"smpte170m":return i.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return i.AVCOL_TRC_IEC61966_2_1;case"linear":return i.AVCOL_TRC_LINEAR;case"pq":return i.AVCOL_TRC_SMPTE2084;case"hlg":return i.AVCOL_TRC_ARIB_STD_B67}return null},ce=t=>{switch(t){case i.AVCOL_TRC_BT709:return"bt709";case i.AVCOL_TRC_SMPTE170M:return"smpte170m";case i.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case i.AVCOL_TRC_LINEAR:return"linear";case i.AVCOL_TRC_SMPTE2084:return"pq";case i.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Le=t=>{switch(t){case"rgb":return i.AVCOL_SPC_RGB;case"bt709":return i.AVCOL_SPC_BT709;case"bt470bg":return i.AVCOL_SPC_BT470BG;case"smpte170m":return i.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return i.AVCOL_SPC_BT2020_NCL}return null},le=t=>{switch(t){case i.AVCOL_SPC_RGB:return"rgb";case i.AVCOL_SPC_BT709:return"bt709";case i.AVCOL_SPC_BT470BG:return"bt470bg";case i.AVCOL_SPC_SMPTE170M:return"smpte170m";case i.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},Oe=t=>{switch(t){case i.AV_PIX_FMT_YUV420P:return"I420";case i.AV_PIX_FMT_YUVJ420P:return"I420";case i.AV_PIX_FMT_YUV420P10LE:return"I420P10";case i.AV_PIX_FMT_YUV420P12LE:return"I420P12";case i.AV_PIX_FMT_YUVA420P:return"I420A";case i.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case i.AV_PIX_FMT_YUV422P:return"I422";case i.AV_PIX_FMT_YUVJ422P:return"I422";case i.AV_PIX_FMT_YUV422P10LE:return"I422P10";case i.AV_PIX_FMT_YUV422P12LE:return"I422P12";case i.AV_PIX_FMT_YUVA422P:return"I422A";case i.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case i.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case i.AV_PIX_FMT_YUV444P:return"I444";case i.AV_PIX_FMT_YUVJ444P:return"I444";case i.AV_PIX_FMT_YUV444P10LE:return"I444P10";case i.AV_PIX_FMT_YUV444P12LE:return"I444P12";case i.AV_PIX_FMT_YUVA444P:return"I444A";case i.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case i.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case i.AV_PIX_FMT_NV12:return"NV12";case i.AV_PIX_FMT_RGBA:return"RGBA";case i.AV_PIX_FMT_RGB0:return"RGBX";case i.AV_PIX_FMT_BGRA:return"BGRA";case i.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},_e=t=>{switch(t){case"I420":return i.AV_PIX_FMT_YUV420P;case"I420P10":return i.AV_PIX_FMT_YUV420P10LE;case"I420P12":return i.AV_PIX_FMT_YUV420P12LE;case"I420A":return i.AV_PIX_FMT_YUVA420P;case"I420AP10":return i.AV_PIX_FMT_YUVA420P10LE;case"I422":return i.AV_PIX_FMT_YUV422P;case"I422P10":return i.AV_PIX_FMT_YUV422P10LE;case"I422P12":return i.AV_PIX_FMT_YUV422P12LE;case"I422A":return i.AV_PIX_FMT_YUVA422P;case"I422AP10":return i.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return i.AV_PIX_FMT_YUVA422P12LE;case"I444":return i.AV_PIX_FMT_YUV444P;case"I444P10":return i.AV_PIX_FMT_YUV444P10LE;case"I444P12":return i.AV_PIX_FMT_YUV444P12LE;case"I444A":return i.AV_PIX_FMT_YUVA444P;case"I444AP10":return i.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return i.AV_PIX_FMT_YUVA444P12LE;case"NV12":return i.AV_PIX_FMT_NV12;case"RGBA":return i.AV_PIX_FMT_RGBA;case"RGBX":return i.AV_PIX_FMT_RGB0;case"BGRA":return i.AV_PIX_FMT_BGRA;case"BGRX":return i.AV_PIX_FMT_BGR0;default:return i.AV_PIX_FMT_NONE}},De=t=>{switch(t){case i.AV_SAMPLE_FMT_U8:return"u8";case i.AV_SAMPLE_FMT_S16:return"s16";case i.AV_SAMPLE_FMT_S32:return"s32";case i.AV_SAMPLE_FMT_FLT:return"f32";case i.AV_SAMPLE_FMT_U8P:return"u8-planar";case i.AV_SAMPLE_FMT_S16P:return"s16-planar";case i.AV_SAMPLE_FMT_S32P:return"s32-planar";case i.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},He=t=>{switch(t){case"u8":return i.AV_SAMPLE_FMT_U8;case"s16":return i.AV_SAMPLE_FMT_S16;case"s32":return i.AV_SAMPLE_FMT_S32;case"f32":return i.AV_SAMPLE_FMT_FLT;case"u8-planar":return i.AV_SAMPLE_FMT_U8P;case"s16-planar":return i.AV_SAMPLE_FMT_S16P;case"s32-planar":return i.AV_SAMPLE_FMT_S32P;case"f32-planar":return i.AV_SAMPLE_FMT_FLTP;default:return i.AV_SAMPLE_FMT_NONE}},J=t=>{switch(t){case 1:return i.AV_CHANNEL_LAYOUT_MONO;case 2:return i.AV_CHANNEL_LAYOUT_STEREO;case 4:return i.AV_CHANNEL_LAYOUT_QUAD;case 6:return i.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return i.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:i.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var M=class M{constructor(){}static get level(){return M._level}static set level(e){if(e!==0&&e!==1&&e!==2&&e!==3)throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");M._level=e}static get _emitter(){return M._emitterInstance??=new de}static on(e,r,o){return M._emitter.on(e,r,o)}static _error(...e){M._emitter._emit("error",e),M._level>=1&&console.error(...e)}static _warn(...e){M._emitter._emit("warn",e),M._level>=2&&console.warn(...e)}static _info(...e){M._emitter._emit("info",e),M._level>=3&&console.info(...e)}};M._level=3,M._emitterInstance=null;var $=M;function p(t){if(!t)throw new Error("Assertion failed.")}var ee=t=>t&&t[t.length-1];var d=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)},G=t=>{let e=d(t);return(e&1)===0?-(e>>1):e+1>>1};var k=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),ye=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var ze={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var qe={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var We={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Ee=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Se=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 te=(t,e,r)=>{let o=0,n=t.length-1,s=-1;for(;o<=n;){let a=o+(n-o+1)/2|0;r(t[a])<=e?(s=a,o=a+1):n=a-1}return s};var Ie=t=>{throw new Error(`Unexpected value: ${t}`)};var Zt=1e6*(1+Number.EPSILON);var Ae=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 n=e%r;e=r,r=n}let o=e||1;return{num:t.num/o,den:t.den/o}};var de=class{constructor(){this._listeners=new Map}on(e,r,o){this._listeners.has(e)||this._listeners.set(e,new Set);let n={fn:r,once:o?.once??!1};return this._listeners.get(e).add(n),()=>{this._listeners.get(e)?.delete(n)}}_emit(...e){let[r,o]=e,n=this._listeners.get(r);if(n)for(let s of n){try{s.fn(o)}catch(a){console.error(a)}s.once&&n.delete(s)}}};import{VideoSampleResource as mt,VideoSampleColorSpace as ft,VideoSample as Ge}from"mediabunny";import*as f from"node-av";var pt=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 mt{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 Oe(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 ft({primaries:ae(this.frame.colorPrimaries),transfer:ce(this.frame.colorTrc),matrix:le(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||pt.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:k(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let o=this.frame.width,n=this.frame.height,s=new f.SoftwareScaleContext,a=this.frame.format,A=_e("RGBA");s.getContext(o,n,a,o,n,A,f.SWS_BILINEAR);let m=new f.Frame;m.width=o,m.height=n,m.format=A,m.alloc(),m.allocBuffer();let c=this.frame;try{await s.scaleFrame(m,c)}finally{s.freeContext()}return m.sampleAspectRatio=c.sampleAspectRatio,new Ge(new t(m),e)}},ie=async(t,e,r)=>{p(t.format!==null),e.format=_e(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=ke(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Le(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Ue(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 o=t.allocationSize();return(!r||r.byteLength!==o)&&(r=Buffer.from({length:o})),await t.copyTo(r),e.fromBuffer(r),r},Xe=async(t,e)=>{let r,o=!1;if(t._data instanceof z)r=t._data.frame;else{if(t.format===null)return null;r=new f.Frame,r.alloc(),o=!0,await ie(t,r,null)}let n=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(n.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),n.push("setsar=1")),e.rotation===90?n.push("transpose=1"):e.rotation===180?n.push("transpose=1,transpose=1"):e.rotation===270&&n.push("transpose=2"),n.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"?n.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(n.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),n.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(n.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),n.push(`crop=${e.width}:${e.height}`)),n.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),m=s.createFilter(f.Filter.getByName("buffersink"),"sink");p(A&&m);let c=f.FilterInOut.createList([{name:"in",filterCtx:A,padIdx:0}]),l=f.FilterInOut.createList([{name:"out",filterCtx:m,padIdx:0}]),h=s.parsePtr(`[in]${n.join(",")}[out]`,l,c);f.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let S=await s.config();f.FFmpegError.throwIfError(S,"FilterGraph.config");let T=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(T,"buffersrcAddFrame"),await A.buffersrcAddFrame(null);let g=new f.Frame;g.alloc();let x=await m.buffersinkGetFrame(g);return f.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new Ge(new z(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),o&&r.free()}};var ue=class extends ht{constructor(){super(...arguments);this.codecContext=null;this.preciseTimings=[]}static supports(r,o){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 o=Y[this.codec];p(o!==void 0);let n;if(this.codec==="vp9"&&r.sideData.alpha?n=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(o):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?n=b.Codec.findDecoder(o):n=await Ne(o)??b.Codec.findDecoder(o),!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new b.CodecContext;s.allocContext3(n),this.pixelAspectRatio=Ae({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=o,s.extraData=this.config.description?Buffer.from(k(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 o=te(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),n=o!==-1?this.preciseTimings[o]:null;n&&n.microsecondTimestamp===r.microsecondTimestamp?(n.timestamp!==r.timestamp&&(n.timestampIsValid=!1),n.duration!==r.duration&&(n.durationIsValid=!1)):(this.preciseTimings.splice(o+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 o=Number(this.frame.pts)/1e6,n=Number(this.frame.duration)/1e6,s=te(this.preciseTimings,Number(this.frame.pts),m=>m.microsecondTimestamp),a=s!==-1?this.preciseTimings[s]:null;a&&a.microsecondTimestamp===Number(this.frame.pts)&&(a.timestampIsValid&&(o=a.timestamp),a.durationIsValid&&(n=a.duration));let A=this.frame.clone();if(!A)throw new Error("Frame clone allocation failed.");this.onSample(new gt(new z(A),{timestamp:o,duration:n}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(b.FFmpegError.throwIfError(r,"Flush decoder");;){let o=await this.codecContext.receiveFrame(this.frame);if(o===b.AVERROR_EAGAIN||o===b.AVERROR_EOF)break;this.receiveFrame(o)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomVideoEncoder as Rt,QUALITY_MEDIUM as Vt,EncodedPacket as Nt}from"mediabunny";import*as u from"node-av";var H=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,o=7-(this.pos&7),n=(r&1<<o)>>o;return this.pos++,n}readBits(e){if(e===1)return this.readBit();let r=0;for(let o=0;o<e;o++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let o=this.pos+e;for(let n=this.pos;n<o;n++){let s=Math.floor(n/8),a=this.bytes[s],A=7-(n&7);a&=~(1<<A),a|=(r&1<<o-n-1)>>o-n-1<<A,this.bytes[s]=a}this.pos=o}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 Ye=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ct=[-1,1,2,3,4,5,6,8],Ke=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new H(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let o=e.readBits(4),n=null;o===15?n=e.readBits(24):o<Ye.length&&(n=Ye[o]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=Ct[s]),{objectType:r,frequencyIndex:o,sampleRate:n,channelConfiguration:s,numberOfChannels:a}};var Qe=t=>{let e=new Uint8Array(7),r=new H(e),{objectType:o,frequencyIndex:n,channelConfiguration:s}=t,a=o-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,n),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 xt=["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"],vt=["aac","opus","mp3","vorbis","flac","ac3","eac3"],yr=[...vt,...xt];var we=[{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 Z=[{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 Je=".01.01.01.01.00",je=".0.110.01.01.01.0",_t=["ap4x","ap4h","apch","apcn","apcs","apco"];var re=t=>{let{codec:e,codecDescription:r,colorSpace:o,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:A,proresFormat:m}=t;if(e==="avc"){if(p(t.avcType!==null),n){let c=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${t.avcType}.${Ee(c)}`}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}.${Ee(r.subarray(1,4))}`}else if(e==="hevc"){let c,l,h,S,T,g;if(s)c=s.generalProfileSpace,l=s.generalProfileIdc,h=Se(s.generalProfileCompatibilityFlags),S=s.generalTierFlag,T=s.generalLevelIdc,g=[...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 C=ye(r),_=C.getUint8(1);c=_>>6&3,l=_&31,h=Se(C.getUint32(2)),S=_>>5&1,T=C.getUint8(12),g=[];for(let P=0;P<6;P++)g.push(C.getUint8(6+P))}let x="hev1.";for(x+=["","A","B","C"][c]+l,x+=".",x+=h.toString(16).toUpperCase(),x+=".",x+=S===0?"L":"H",x+=T;g.length>0&&g[g.length-1]===0;)g.pop();return g.length>0&&(x+=".",x+=g.map(C=>C.toString(16).toUpperCase()).join(".")),x}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let P=t.width*t.height,I=ee(Z).level;for(let F of Z)if(P<=F.maxPictureSize){I=F.level;break}return`vp09.00.${I.toString().padStart(2,"0")}.08`}let c=a.profile.toString().padStart(2,"0"),l=a.level.toString().padStart(2,"0"),h=a.bitDepth.toString().padStart(2,"0"),S=a.chromaSubsampling.toString().padStart(2,"0"),T=a.colourPrimaries.toString().padStart(2,"0"),g=a.transferCharacteristics.toString().padStart(2,"0"),x=a.matrixCoefficients.toString().padStart(2,"0"),C=a.videoFullRangeFlag.toString().padStart(2,"0"),_=`vp09.${c}.${l}.${h}.${S}`;return _+=`.${T}.${g}.${x}.${C}`,_.endsWith(Je)&&(_=_.slice(0,-Je.length)),_}else if(e==="av1"){if(!A){let F=t.width*t.height,w=ee(Z).level;for(let y of Z)if(F<=y.maxPictureSize){w=y.level;break}return`av01.0.${w.toString().padStart(2,"0")}M.08`}let c=A.profile,l=A.level.toString().padStart(2,"0"),h=A.tier?"H":"M",S=A.bitDepth.toString().padStart(2,"0"),T=A.monochrome?"1":"0",g=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),x=o?.primaries?ze[o.primaries]:1,C=o?.transfer?qe[o.transfer]:1,_=o?.matrix?We[o.matrix]:1,P=o?.fullRange?1:0,I=`av01.${c}.${l}${h}.${S}`;return I+=`.${T}.${g.toString().padStart(3,"0")}`,I+=`.${x.toString().padStart(2,"0")}`,I+=`.${C.toString().padStart(2,"0")}`,I+=`.${_.toString().padStart(2,"0")}`,I+=`.${P}`,I.endsWith(je)&&(I=I.slice(0,-je.length)),I}else{if(e==="prores")return m??"apch";e!==null&&Ie(e)}}throw new TypeError(`Unhandled codec '${e}'.`)};var Er=["avc1","avc3","hev1","hvc1","vp8","vp09","av01",..._t];var fe=function*(t){let e=0,r=-1;for(;e<t.length-2;){let o=t.indexOf(0,e);if(o===-1||o>=t.length-2)break;e=o;let n=0;if(e+3<t.length&&t[e+1]===0&&t[e+2]===0&&t[e+3]===1?n=4:t[e+1]===0&&t[e+2]===1&&(n=3),n===0){e++;continue}r!==-1&&e>r&&(yield{offset:r,length:e-r}),r=e+n,e=r}r!==-1&&r<t.length&&(yield{offset:r,length:t.length-r})};var Be=t=>t&31,Pe=t=>{let e=[],r=t.length;for(let o=0;o<r;o++)o+2<r&&t[o]===0&&t[o+1]===0&&t[o+2]===3?(e.push(0,0),o+=2):e.push(t[o]);return new Uint8Array(e)},Dr=new Uint8Array([0,0,0,1]);var et=t=>{try{let e=[],r=[],o=[];for(let A of fe(t)){let m=t.subarray(A.offset,A.offset+A.length),c=Be(m[0]);c===7?e.push(m):c===8?r.push(m):c===13&&o.push(m)}if(e.length===0||r.length===0)return null;let n=e[0],s=yt(n);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?o:null}}catch(e){return $._error("Error building AVC Decoder Configuration Record:",e),null}},tt=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 o=r.byteLength;e.push(o>>8),e.push(o&255);for(let n=0;n<o;n++)e.push(r[n])}e.push(t.pictureParameterSets.length);for(let r of t.pictureParameterSets){let o=r.byteLength;e.push(o>>8),e.push(o&255);for(let n=0;n<o;n++)e.push(r[n])}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 o=r.byteLength;e.push(o>>8),e.push(o&255);for(let n=0;n<o;n++)e.push(r[n])}}return new Uint8Array(e)};var rt={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}},yt=t=>{try{let e=new H(Pe(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let o=e.readAlignedByte(),n=e.readAlignedByte(),s=e.readAlignedByte();d(e);let a=1,A=0,m=0,c=0;if((o===100||o===110||o===122||o===244||o===44||o===83||o===86||o===118||o===128)&&(a=d(e),a===3&&(c=e.readBits(1)),A=d(e),m=d(e),e.skipBits(1),e.readBits(1))){for(let E=0;E<(a!==3?8:12);E++)if(e.readBits(1)){let Q=E<6?16:64,O=8,V=8;for(let D=0;D<Q;D++){if(V!==0){let j=G(e);V=(O+j+256)%256}O=V===0?O:V}}}d(e);let l=d(e);if(l===0)d(e);else if(l===1){e.skipBits(1),G(e),G(e);let U=d(e);for(let E=0;E<U;E++)G(e)}d(e),e.skipBits(1);let h=d(e),S=d(e),T=16*(h+1),g=16*(S+1),x=T,C=g,_=e.readBits(1);if(_||e.skipBits(1),e.skipBits(1),e.readBits(1)){let U=d(e),E=d(e),W=d(e),Q=d(e),O,V;if((c===0?a:0)===0)O=1,V=2-_;else{let j=a===3?1:2,ne=a===1?2:1;O=j,V=ne*(2-_)}x-=O*(U+E),C-=V*(W+Q)}let I=2,F=2,w=2,y=0,N={num:1,den:1},R=null,L=null;if(e.readBits(1)){if(e.readBits(1)){let ne=e.readBits(8);if(ne===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Fe=rt[ne];Fe&&(N=Fe)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),y=e.readBits(1),e.readBits(1)&&(I=e.readBits(8),F=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(d(e),d(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let V=e.readBits(1);V&&$e(e);let D=e.readBits(1);D&&$e(e),(V||D)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),d(e),d(e),d(e),d(e),R=d(e),L=d(e))}if(R===null){p(L===null);let U=n&16;if((o===44||o===86||o===100||o===110||o===122||o===244)&&U)R=0,L=0;else{let E=h+1,W=S+1,Q=(2-_)*W,O=we.find(D=>D.level>=s)??ee(we),V=Math.min(Math.floor(O.maxDpbMbs/(E*Q)),16);R=V,L=V}}return p(L!==null),{profileIdc:o,constraintFlags:n,levelIdc:s,frameMbsOnlyFlag:_,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:m,codedWidth:T,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:N,colourPrimaries:I,matrixCoefficients:w,transferCharacteristics:F,fullRangeFlag:y,numReorderFrames:R,maxDecFrameBuffering:L}}catch(e){return $._error("Error parsing AVC SPS:",e),null}},$e=t=>{let e=d(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)d(t),d(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var me=t=>t>>1&63,Et=t=>{try{let e=new H(Pe(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),o=e.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:A,general_constraint_indicator_flags:m,general_level_idc:c}=St(e,r);d(e);let l=d(e),h=0;l===3&&(h=e.readBits(1));let S=d(e),T=d(e),g=S,x=T;if(e.readBits(1)){let E=d(e),W=d(e),Q=d(e),O=d(e),V=1,D=1,j=h===0?l:0;j===1?(V=2,D=2):j===2&&(V=2,D=1),g-=(E+W)*V,x-=(Q+O)*D}let C=d(e),_=d(e);d(e);let I=e.readBits(1)?0:r,F=0;for(let E=I;E<=r;E++)d(e),F=d(e),d(e);d(e),d(e),d(e),d(e),d(e),d(e),e.readBits(1)&&e.readBits(1)&&It(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),d(e),d(e),e.skipBits(1));let w=d(e);if(wt(e,w),e.readBits(1)){let E=d(e);for(let W=0;W<E;W++)d(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let y=2,N=2,R=2,L=0,se=0,U={num:1,den:1};if(e.readBits(1)){let E=Pt(e,r);U=E.pixelAspectRatio,y=E.colourPrimaries,N=E.transferCharacteristics,R=E.matrixCoefficients,L=E.fullRangeFlag,se=E.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:U,colourPrimaries:y,transferCharacteristics:N,matrixCoefficients:R,fullRangeFlag:L,maxDecFrameBuffering:F+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:o,generalProfileSpace:n,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:A,generalConstraintIndicatorFlags:m,generalLevelIdc:c,chromaFormatIdc:l,bitDepthLumaMinus8:C,bitDepthChromaMinus8:_,minSpatialSegmentationIdc:se}}catch(e){return $._error("Error parsing HEVC SPS:",e),null}},ot=t=>{try{let e=[],r=[],o=[],n=[];for(let c of fe(t)){let l=t.subarray(c.offset,c.offset+c.length),h=me(l[0]);h===32?e.push(l):h===33?r.push(l):h===34?o.push(l):(h===39||h===40)&&n.push(l)}if(r.length===0||o.length===0)return null;let s=Et(r[0]);if(!s)return null;let a=0;if(o.length>0){let c=o[0],l=new H(Pe(c));l.skipBits(16),d(l),d(l),l.skipBits(1),l.skipBits(1),l.skipBits(3),l.skipBits(1),l.skipBits(1),d(l),d(l),G(l),l.skipBits(1),l.skipBits(1),l.readBits(1)&&d(l),G(l),G(l),l.skipBits(1),l.skipBits(1),l.skipBits(1),l.skipBits(1);let h=l.readBits(1),S=l.readBits(1);!h&&!S?a=0:h&&!S?a=2:!h&&S?a=3:a=0}let A=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:o}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:me(n[0][0]),nalUnits:n}]:[]];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 $._error("Error building HEVC Decoder Configuration Record:",e),null}},St=(t,e)=>{let r=t.readBits(2),o=t.readBits(1),n=t.readBits(5),s=0;for(let l=0;l<32;l++)s=s<<1|t.readBits(1);let a=new Uint8Array(6);for(let l=0;l<6;l++)a[l]=t.readBits(8);let A=t.readBits(8),m=[],c=[];for(let l=0;l<e;l++)m.push(t.readBits(1)),c.push(t.readBits(1));if(e>0)for(let l=e;l<8;l++)t.skipBits(2);for(let l=0;l<e;l++)m[l]&&t.skipBits(88),c[l]&&t.skipBits(8);return{general_profile_space:r,general_tier_flag:o,general_profile_idc:n,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:A}},It=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))d(t);else{let n=Math.min(64,1<<4+(e<<1));e>1&&G(t);for(let s=0;s<n;s++)G(t)}},wt=(t,e)=>{let r=[];for(let o=0;o<e;o++)r[o]=Bt(t,o,e,r)},Bt=(t,e,r,o)=>{let n=0,s=0,a=0;if(e!==0&&(s=t.readBits(1)),s){if(e===r){let m=d(t);a=e-(m+1)}else a=e-1;t.readBits(1),d(t);let A=o[a]??0;for(let m=0;m<=A;m++)t.readBits(1)||t.readBits(1);n=o[a]}else{let A=d(t),m=d(t);for(let c=0;c<A;c++)d(t),t.readBits(1);for(let c=0;c<m;c++)d(t),t.readBits(1);n=A+m}return n},Pt=(t,e)=>{let r=2,o=2,n=2,s=0,a=0,A={num:1,den:1};if(t.readBits(1)){let m=t.readBits(8);if(m===255)A={num:t.readBits(16),den:t.readBits(16)};else{let c=rt[m];c&&(A=c)}}return t.readBits(1)&&t.readBits(1),t.readBits(1)&&(t.readBits(3),s=t.readBits(1),t.readBits(1)&&(r=t.readBits(8),o=t.readBits(8),n=t.readBits(8))),t.readBits(1)&&(d(t),d(t)),t.readBits(1),t.readBits(1),t.readBits(1),t.readBits(1)&&(d(t),d(t),d(t),d(t)),t.readBits(1)&&(t.readBits(32),t.readBits(32),t.readBits(1)&&d(t),t.readBits(1)&&Tt(t,!0,e)),t.readBits(1)&&(t.readBits(1),t.readBits(1),t.readBits(1),a=d(t),d(t),d(t),d(t),d(t)),{pixelAspectRatio:A,colourPrimaries:r,transferCharacteristics:o,matrixCoefficients:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Tt=(t,e,r)=>{let o=!1,n=!1,s=!1;e&&(o=t.readBits(1)===1,n=t.readBits(1)===1,(o||n)&&(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,m=!0;A||(m=t.readBits(1)===1);let c=!1;m?d(t):c=t.readBits(1)===1;let l=1;c||(l=d(t)+1),o&&Ze(t,l,s),n&&Ze(t,l,s)}},Ze=(t,e,r)=>{for(let o=0;o<e;o++)d(t),d(t),r&&(d(t),d(t)),t.readBits(1)},nt=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 o of r.nalUnits){e.push(o.length>>8&255),e.push(o.length&255);for(let n=0;n<o.length;n++)e.push(o[n])}}return new Uint8Array(e)};var it=t=>{let e=new H(t);if(e.readBits(2)!==2)return null;let o=e.readBits(1),s=(e.readBits(1)<<1)+o;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let c=8;s>=2&&(c=e.readBits(1)?12:10);let l=e.readBits(3),h=0,S=0;if(l!==7)if(S=e.readBits(1),s===1||s===3){let N=e.readBits(1),R=e.readBits(1);h=!N&&!R?3:N&&!R?2:1,e.skipBits(1)}else h=1;else h=3,S=1;let T=e.readBits(16),g=e.readBits(16),x=T+1,C=g+1,_=x*C,P=ee(Z).level;for(let y of Z)if(_<=y.maxPictureSize){P=y.level;break}return{profile:s,level:P,bitDepth:c,chromaSubsampling:h,videoFullRangeFlag:S,colourPrimaries:l===2?1:l===1?6:2,transferCharacteristics:l===2?1:l===1?6:2,matrixCoefficients:l===7?0:l===2?1:l===1?6:2}},Ft=function*(t){let e=new H(t),r=()=>{let o=0;for(let n=0;n<8;n++){let s=e.readAlignedByte();if(o|=(s&127)<<n*7,!(s&128))break;if(n===7&&s&128)return null}return o>=2**32-1?null:o};for(;e.getBitsLeft()>=8;){e.skipBits(1);let o=e.readBits(4),n=e.readBits(1),s=e.readBits(1);e.skipBits(1),n&&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:o,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},st=t=>{for(let{type:e,data:r}of Ft(t)){if(e!==1)continue;let o=new H(r),n=o.readBits(3),s=o.readBits(1),a=o.readBits(1),A=0,m=0,c=0;if(a)A=o.readBits(5);else{if(o.readBits(1)&&(o.skipBits(32),o.skipBits(32),o.readBits(1)))return null;let y=o.readBits(1);y&&(c=o.readBits(5),o.skipBits(32),o.skipBits(5),o.skipBits(5));let N=o.readBits(5);for(let R=0;R<=N;R++){o.skipBits(12);let L=o.readBits(5);if(R===0&&(A=L),L>7){let U=o.readBits(1);R===0&&(m=U)}if(y&&o.readBits(1)){let E=c+1;o.skipBits(E),o.skipBits(E),o.skipBits(1)}o.readBits(1)&&o.skipBits(4)}}let l=o.readBits(4),h=o.readBits(4),S=l+1;o.skipBits(S);let T=h+1;o.skipBits(T);let g=0;if(a?g=0:g=o.readBits(1),g&&(o.skipBits(4),o.skipBits(3)),o.skipBits(1),o.skipBits(1),o.skipBits(1),!a){o.skipBits(1),o.skipBits(1),o.skipBits(1),o.skipBits(1);let w=o.readBits(1);w&&(o.skipBits(1),o.skipBits(1));let y=o.readBits(1),N=0;y?N=2:N=o.readBits(1),N>0&&(o.readBits(1)||o.skipBits(1)),w&&o.skipBits(3)}o.skipBits(1),o.skipBits(1),o.skipBits(1);let x=o.readBits(1),C=8;n===2&&x?C=o.readBits(1)?12:10:n<=2&&(C=x?10:8);let _=0;n!==1&&(_=o.readBits(1));let P=1,I=1,F=0;return _||(n===0?(P=1,I=1):n===1?(P=0,I=0):C===12&&(P=o.readBits(1),P&&(I=o.readBits(1))),P&&I&&(F=o.readBits(2))),{profile:n,level:A,tier:m,bitDepth:C,monochrome:_,chromaSubsamplingX:P,chromaSubsamplingY:I,chromaSamplePosition:F}}return null};var Hr=[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 zr=new Uint8Array([5,4,65,67,45,51]),qr=new Uint8Array([5,4,69,65,67,51]);var Mt={apco:u.AV_PROFILE_PRORES_PROXY,apcs:u.AV_PROFILE_PRORES_LT,apcn:u.AV_PROFILE_PRORES_STANDARD,apch:u.AV_PROFILE_PRORES_HQ,ap4h:u.AV_PROFILE_PRORES_4444,ap4x:u.AV_PROFILE_PRORES_XQ},pe=class extends Rt{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,o){return(r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1"||r==="prores")&&o.bitrateMode!=="quantizer"}async init(){this.frame=new u.Frame,this.frame.alloc(),this.frame.timeBase=new u.Rational(1,1e6),this.packet=new u.Packet,this.packet.alloc();let r=Y[this.codec];p(r!==void 0);let o=()=>{if(this.codec==="prores"){let s=u.Codec.findEncoderByName(u.FF_ENCODER_PRORES_KS);if(s)return s}return u.Codec.findEncoder(r)},n=null;if(this.codec==="vp9"&&this.config.alpha==="keep"?n=u.Codec.findEncoderByName(u.FF_ENCODER_LIBVPX_VP9)??u.Codec.findEncoder(r):this.config.hardwareAcceleration==="prefer-software"?n=o():n=await Me(r)??o(),!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=n,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new u.CodecContext;r.allocContext3(this.avCodec);let o=u.AV_PIX_FMT_YUV420P;this.avCodec.pixelFormats&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUV420P)||(o=this.avCodec.pixelFormats[0]),this.config.alpha==="keep"&&(this.avCodec.pixelFormats.includes(u.AV_PIX_FMT_YUVA420P)?o=u.AV_PIX_FMT_YUVA420P:o=u.avcodecFindBestPixFmtOfList(this.avCodec.pixelFormats,u.AV_PIX_FMT_YUVA444P12LE)));let n=Ae({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=o,r.timeBase=new u.Rational(1,1e6),r.gopSize=60,r.framerate=new u.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=BigInt(this.config.bitrate??Vt._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new u.Rational(n.num,n.den),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let s=this.config.latencyMode==="realtime";if(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")),this.codec==="prores"){let A=Mt[this.config.codec];p(A!==void 0),r.setOption("profile",String(A))}let a=await r.open2();u.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=r}async encode(r,o){if(this.codecContext===null&&await this.createCodecContext(),p(this.codecContext),r._data instanceof z)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 ie(r,this.frame,this.lastBuffer)}let n=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 u.SoftwareScaleContext);let c=`${this.frame.width}x${this.frame.height}:${this.frame.format}`;if(c!==this.lastScalerKey){this.scaler.getContext(this.frame.width,this.frame.height,this.frame.format,this.codecContext.width,this.codecContext.height,this.codecContext.pixelFormat,u.SWS_FAST_BILINEAR),this.lastScalerKey=c;let h=this.scaler.initContext();u.FFmpegError.throwIfError(h,"initContext")}this.dstFrame||(this.dstFrame=new u.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),n=this.dstFrame}n.pts=BigInt(r.microsecondTimestamp),n.duration=BigInt(r.microsecondDuration),n.timeBase=new u.Rational(1,1e6),n.pictType=o?.keyFrame?u.AV_PICTURE_TYPE_I:u.AV_PICTURE_TYPE_NONE,n.keyFrame=o?.keyFrame?1:0;let a=te(this.preciseTimings,r.microsecondTimestamp,c=>c.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 m=await this.codecContext.sendFrame(n);for(u.FFmpegError.throwIfError(m,"Send frame");;){let c=await this.codecContext.receivePacket(this.packet);if(c===u.AVERROR_EAGAIN||c===u.AVERROR_EOF)break;this.receivePacket(c)}}receivePacket(r){if(p(this.codecContext),u.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let o=k(this.packet.data),n=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=te(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&&(n=A.timestamp),A.durationIsValid&&(s=A.duration));let m={},c=null,l=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=et(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=tt(C)}else{let C=ot(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=nt(C)}c=re({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,proresFormat:null}),g||(l=x)}if(!g){let C=[];for(let w of fe(o))if(this.codec==="avc"){let y=Be(o[w.offset]);y!==7&&y!==8&&y!==13&&C.push(w)}else{let y=me(o[w.offset]);y!==33&&y!==34&&y!==32&&C.push(w)}let _=0;for(let w of C)_+=4+w.length;let P=new Uint8Array(_),I=new DataView(P.buffer),F=0;for(let w of C){let y=w.length;I.setUint32(F,y,!1),F+=4,P.set(o.subarray(w.offset,w.offset+w.length),F),F+=w.length}o=P}}else if(this.codec==="vp8")this.packetEmitted||(c=re({width:this.config.width,height:this.config.height,codec:"vp8",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:null}));else if(this.codec==="vp9"){if(!this.packetEmitted){let g=it(o);c=re({width:this.config.width,height:this.config.height,codec:"vp9",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:g,av1CodecInfo:null,proresFormat:null})}}else if(this.codec==="av1"){if(!this.packetEmitted){let g=st(o);c=re({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g,proresFormat:null})}}else if(this.codec==="prores")this.packetEmitted||(c=re({width:this.config.width,height:this.config.height,codec:"prores",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null,proresFormat:this.config.codec}));else throw new Error("Unreachable.");let h={},S=this.packet.getSideData(u.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);S&&(h.alpha=k(S).subarray(8));let T=new Nt(o,this.packet.isKeyframe?"key":"delta",n,s,void 0,void 0,h);c!==null&&(m.decoderConfig={codec:c,codedWidth:this.codecContext.width,codedHeight:this.codecContext.height,displayAspectWidth:this.config.displayWidth??this.codecContext.width,displayAspectHeight:this.config.displayHeight??this.codecContext.height,description:l??void 0,colorSpace:{primaries:ae(this.codecContext.colorPrimaries),matrix:le(this.codecContext.colorSpace),transfer:ce(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===u.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===u.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(T,m)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(u.FFmpegError.throwIfError(r,"Send frame");;){let o=await this.codecContext.receivePacket(this.packet);if(o===u.AVERROR_EAGAIN||o===u.AVERROR_EOF)break;this.receivePacket(o)}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 Ut,CustomAudioDecoder as Lt}from"mediabunny";import*as B from"node-av";import{AudioSampleResource as kt}from"mediabunny";import*as oe from"node-av";var K=class extends kt{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof oe.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==oe.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=De(this.frame.format);if(e===null){let r=oe.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),k(this.frame.data[e])}},he=(t,e)=>{e.format=He(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=J(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ge=class extends Lt{constructor(){super(...arguments);this.codecContext=null}static supports(r,o){return r==="aac"||r==="opus"||r==="mp3"||r==="vorbis"||r==="flac"||r==="ac3"||r==="eac3"}async init(){this.frame=new B.Frame,this.frame.alloc(),this.packet=new B.Packet,this.packet.alloc();let r=Y[this.codec];p(r!==void 0);let o=B.Codec.findDecoder(r);if(o===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let n=new B.CodecContext;n.allocContext3(o),n.sampleRate=this.config.sampleRate,n.channelLayout=J(this.config.numberOfChannels),n.timeBase=new B.Rational(1,this.config.sampleRate),n.codecType=B.AVMEDIA_TYPE_AUDIO,n.codecId=r,n.extraData=this.config.description?Buffer.from(k(this.config.description)):null;let s=await n.open2();B.FFmpegError.throwIfError(s,"Open codec context"),this.codecContext=n}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=B.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(r.duration*this.config.sampleRate));let o=await this.codecContext.sendPacket(this.packet);for(B.FFmpegError.throwIfError(o,"Send packet"),this.packet.unref();;){let n=await this.codecContext.receiveFrame(this.frame);if(n===B.AVERROR_EAGAIN||n===B.AVERROR_EOF)break;this.receiveFrame(n)}}receiveFrame(r){B.FFmpegError.throwIfError(r,"Receive frame");let o=this.frame.clone();if(!o)throw new Error("Allocation failure during frame clone.");o.timeBase=new B.Rational(1,this.config.sampleRate),this.onSample(new Ut(new K(o)))}async flush(){p(this.codecContext);let r=await this.codecContext.sendPacket(null);for(B.FFmpegError.throwIfError(r,"Flush decoder");;){let o=await this.codecContext.receiveFrame(this.frame);if(o===B.AVERROR_EAGAIN||o===B.AVERROR_EOF)break;this.receiveFrame(o)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};import{CustomAudioEncoder as Ot,QUALITY_MEDIUM as Dt,EncodedPacket as Ht}from"mediabunny";import*as v from"node-av";var zt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],qt=[8e3,12e3,16e3,24e3,48e3],Wt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],at=[32e3,44100,48e3],Te=1024,Ce=class extends Ot{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,o){let{numberOfChannels:n,sampleRate:s}=o;return r==="aac"&&n>=1&&n<=48&&zt.includes(s)||r==="opus"&&n>=1&&n<=255&&qt.includes(s)||r==="mp3"&&n>=1&&n<=2&&Wt.includes(s)||r==="vorbis"&&n>=1&&n<=255&&s<=2e5||r==="flac"&&n>=1&&n<=8&&s<=655350||r==="ac3"&&n>=1&&n<=6&&at.includes(s)||r==="eac3"&&n>=1&&n<=16&&at.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=Y[this.codec];p(r!==void 0);let o=v.Codec.findEncoder(r);if(!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=o,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new v.CodecContext;r.allocContext3(this.avCodec);let o=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(o=this.avCodec.sampleFormats[0]),r.sampleRate=this.config.sampleRate,r.channelLayout=J(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=Y[this.codec],r.sampleFormat=o,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??Dt._toAudioBitrate(this.codec)??0),this.config.bitrateMode==="constant"&&(r.rcMinRate=r.bitRate,r.rcMaxRate=r.bitRate);let n=await r.open2();v.FFmpegError.throwIfError(n,"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 K?(this.frame.unref(),this.frame.ref(r._data.frame)):he(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 o=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==o)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=o,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=J(this.codecContext.channels),A=J(this.frame.channels),m=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,A,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(m,"allocSetOpts2");let c=this.resampler.init();v.FFmpegError.throwIfError(c,"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||Te,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||Te;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 o=await this.codecContext.sendFrame(r);for(v.FFmpegError.throwIfError(o,"Send frame");;){let n=await this.codecContext.receivePacket(this.packet);if(n===v.AVERROR_EAGAIN||n===v.AVERROR_EOF)break;this.receivePacket(n)}}receivePacket(r){if(p(this.codecContext),p(this.firstExpectedTimestamp!==null),v.FFmpegError.throwIfError(r,"Receive packet"),!this.packet.data)return;let o=Number(this.packet.pts)/this.codecContext.sampleRate,n=Number(this.packet.duration)/this.codecContext.sampleRate,s=this.packet.data,a;if(this.packetEmitted)a={};else{this.outputTimestampOffset=Math.max(this.firstExpectedTimestamp-o,0);let m=this.config.codec,c=this.codecContext.extraData?k(this.codecContext.extraData):void 0;if(this.codec==="aac"){if(!c)throw new Error("Extradata expected for AAC.");if(this.config.aac?.format==="adts"){let h=Ke(c);this.adtsHeaderTemplate=Qe(h),c=void 0}}else if(this.codec==="opus"){if(!c)throw new Error("Extradata expected for Opus.")}else if(this.codec==="vorbis"){if(!c)throw new Error("Extradata expected for Vorbis.")}else if(this.codec==="flac"){if(!c)throw new Error("Extradata expected for FLAC.");c=new Uint8Array([102,76,97,67,128,0,0,c.byteLength,...c])}a={decoderConfig:{codec:m,sampleRate:this.codecContext.sampleRate,numberOfChannels:this.codecContext.channels,description:c}}}if(this.adtsHeaderTemplate){let m=s.byteLength+this.adtsHeaderTemplate.header.byteLength;this.adtsHeaderTemplate.bitstream.pos=30,this.adtsHeaderTemplate.bitstream.writeBits(13,m);let c=new Uint8Array(this.adtsHeaderTemplate.header.byteLength+s.byteLength);c.set(this.adtsHeaderTemplate.header,0),c.set(s,this.adtsHeaderTemplate.header.byteLength),s=c}o+=this.outputTimestampOffset;let A=new Ht(s,"key",o,n);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 o=this.codecContext.frameSize||Te;p(r<o);let n=Math.ceil((o-r)/this.codecContext.sampleRate*this.resamplerInputSampleRate);this.resampler.injectSilence(n),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()}};import{registerProresDecoder as Kt}from"@mediabunny/prores";var ut=Symbol.for("@mediabunny/server loaded");globalThis[ut]&&Xt._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[ut]=!0;var At=!1,X={},ko=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof q.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");At||(At=!0,X=t,q.Log.setLevel(q.AV_LOG_ERROR),ct(ue),Kt(),lt(pe),ct(ge),lt(Ce),Yt(Xe))},Uo=async(t,e)=>{if(!(t instanceof dt)&&!(t instanceof Gt))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof q.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof dt){if(t._data instanceof z)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await ie(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new q.Rational(1,1e6)}else t._data instanceof K?(e.unref(),e.ref(t._data.frame)):he(t,e),e.timeBase=new q.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};export{K as AvFrameAudioSampleResource,z as AvFrameVideoSampleResource,X as _serverOptions,ko as registerMediabunnyServer,Uo as toAvFrame};
|
|
@@ -29,6 +29,7 @@ var CODEC_TO_CODEC_ID = {
|
|
|
29
29
|
vp8: NodeAv.AV_CODEC_ID_VP8,
|
|
30
30
|
vp9: NodeAv.AV_CODEC_ID_VP9,
|
|
31
31
|
av1: NodeAv.AV_CODEC_ID_AV1,
|
|
32
|
+
prores: NodeAv.AV_CODEC_ID_PRORES,
|
|
32
33
|
aac: NodeAv.AV_CODEC_ID_AAC,
|
|
33
34
|
opus: NodeAv.AV_CODEC_ID_OPUS,
|
|
34
35
|
mp3: NodeAv.AV_CODEC_ID_MP3,
|
|
@@ -501,6 +502,9 @@ var binarySearchLessOrEqual = (arr, key, valueGetter) => {
|
|
|
501
502
|
}
|
|
502
503
|
return ans;
|
|
503
504
|
};
|
|
505
|
+
var assertNever = (x) => {
|
|
506
|
+
throw new Error(`Unexpected value: ${x}`);
|
|
507
|
+
};
|
|
504
508
|
var SECOND_TO_MICROSECOND_FACTOR = 1e6 * (1 + Number.EPSILON);
|
|
505
509
|
var simplifyRational = (rational) => {
|
|
506
510
|
assert(Number.isInteger(rational.num));
|
|
@@ -1158,8 +1162,31 @@ var VP9_LEVEL_TABLE = [
|
|
|
1158
1162
|
];
|
|
1159
1163
|
var VP9_DEFAULT_SUFFIX = ".01.01.01.01.00";
|
|
1160
1164
|
var AV1_DEFAULT_SUFFIX = ".0.110.01.01.01.0";
|
|
1165
|
+
var PRORES_FOURCCS = [
|
|
1166
|
+
"ap4x",
|
|
1167
|
+
// ProRes 4444 XQ
|
|
1168
|
+
"ap4h",
|
|
1169
|
+
// ProRes 4444
|
|
1170
|
+
"apch",
|
|
1171
|
+
// ProRes 422 High Quality
|
|
1172
|
+
"apcn",
|
|
1173
|
+
// ProRes 422 Standard Definition
|
|
1174
|
+
"apcs",
|
|
1175
|
+
// ProRes 422 LT
|
|
1176
|
+
"apco"
|
|
1177
|
+
// ProRes 422 Proxy
|
|
1178
|
+
];
|
|
1161
1179
|
var extractVideoCodecString = (trackInfo) => {
|
|
1162
|
-
const {
|
|
1180
|
+
const {
|
|
1181
|
+
codec,
|
|
1182
|
+
codecDescription,
|
|
1183
|
+
colorSpace,
|
|
1184
|
+
avcCodecInfo,
|
|
1185
|
+
hevcCodecInfo,
|
|
1186
|
+
vp9CodecInfo,
|
|
1187
|
+
av1CodecInfo,
|
|
1188
|
+
proresFormat
|
|
1189
|
+
} = trackInfo;
|
|
1163
1190
|
if (codec === "avc") {
|
|
1164
1191
|
assert(trackInfo.avcType !== null);
|
|
1165
1192
|
if (avcCodecInfo) {
|
|
@@ -1279,9 +1306,14 @@ var extractVideoCodecString = (trackInfo) => {
|
|
|
1279
1306
|
string = string.slice(0, -AV1_DEFAULT_SUFFIX.length);
|
|
1280
1307
|
}
|
|
1281
1308
|
return string;
|
|
1309
|
+
} else if (codec === "prores") {
|
|
1310
|
+
return proresFormat ?? "apch";
|
|
1311
|
+
} else if (codec !== null) {
|
|
1312
|
+
assertNever(codec);
|
|
1282
1313
|
}
|
|
1283
1314
|
throw new TypeError(`Unhandled codec '${codec}'.`);
|
|
1284
1315
|
};
|
|
1316
|
+
var VALID_VIDEO_CODEC_STRING_PREFIXES = ["avc1", "avc3", "hev1", "hvc1", "vp8", "vp09", "av01", ...PRORES_FOURCCS];
|
|
1285
1317
|
|
|
1286
1318
|
// src/codec-data.ts
|
|
1287
1319
|
var iterateNalUnitsInAnnexB = function* (packetData) {
|
|
@@ -2580,6 +2612,14 @@ var AC3_REGISTRATION_DESCRIPTOR = new Uint8Array([5, 4, 65, 67, 45, 51]);
|
|
|
2580
2612
|
var EAC3_REGISTRATION_DESCRIPTOR = new Uint8Array([5, 4, 69, 65, 67, 51]);
|
|
2581
2613
|
|
|
2582
2614
|
// packages/server/src/video-encoder.ts
|
|
2615
|
+
var PRORES_FOURCC_TO_PROFILE = {
|
|
2616
|
+
apco: NodeAv4.AV_PROFILE_PRORES_PROXY,
|
|
2617
|
+
apcs: NodeAv4.AV_PROFILE_PRORES_LT,
|
|
2618
|
+
apcn: NodeAv4.AV_PROFILE_PRORES_STANDARD,
|
|
2619
|
+
apch: NodeAv4.AV_PROFILE_PRORES_HQ,
|
|
2620
|
+
ap4h: NodeAv4.AV_PROFILE_PRORES_4444,
|
|
2621
|
+
ap4x: NodeAv4.AV_PROFILE_PRORES_XQ
|
|
2622
|
+
};
|
|
2583
2623
|
var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
2584
2624
|
constructor() {
|
|
2585
2625
|
super(...arguments);
|
|
@@ -2593,7 +2633,7 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2593
2633
|
this.preciseTimings = [];
|
|
2594
2634
|
}
|
|
2595
2635
|
static supports(codec, config) {
|
|
2596
|
-
return (codec === "avc" || codec === "hevc" || codec === "vp8" || codec === "vp9" || codec === "av1") && config.bitrateMode !== "quantizer";
|
|
2636
|
+
return (codec === "avc" || codec === "hevc" || codec === "vp8" || codec === "vp9" || codec === "av1" || codec === "prores") && config.bitrateMode !== "quantizer";
|
|
2597
2637
|
}
|
|
2598
2638
|
async init() {
|
|
2599
2639
|
this.frame = new NodeAv4.Frame();
|
|
@@ -2603,13 +2643,22 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2603
2643
|
this.packet.alloc();
|
|
2604
2644
|
const codecId = CODEC_TO_CODEC_ID[this.codec];
|
|
2605
2645
|
assert(codecId !== void 0);
|
|
2646
|
+
const getSoftwareCodec = () => {
|
|
2647
|
+
if (this.codec === "prores") {
|
|
2648
|
+
const proresKs = NodeAv4.Codec.findEncoderByName(NodeAv4.FF_ENCODER_PRORES_KS);
|
|
2649
|
+
if (proresKs) {
|
|
2650
|
+
return proresKs;
|
|
2651
|
+
}
|
|
2652
|
+
}
|
|
2653
|
+
return NodeAv4.Codec.findEncoder(codecId);
|
|
2654
|
+
};
|
|
2606
2655
|
let codec = null;
|
|
2607
2656
|
if (this.codec === "vp9" && this.config.alpha === "keep") {
|
|
2608
2657
|
codec = NodeAv4.Codec.findEncoderByName(NodeAv4.FF_ENCODER_LIBVPX_VP9) ?? NodeAv4.Codec.findEncoder(codecId);
|
|
2609
2658
|
} else if (this.config.hardwareAcceleration === "prefer-software") {
|
|
2610
|
-
codec =
|
|
2659
|
+
codec = getSoftwareCodec();
|
|
2611
2660
|
} else {
|
|
2612
|
-
codec = await getHardwareEncoderCodec(codecId) ??
|
|
2661
|
+
codec = await getHardwareEncoderCodec(codecId) ?? getSoftwareCodec();
|
|
2613
2662
|
}
|
|
2614
2663
|
if (!codec) {
|
|
2615
2664
|
throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);
|
|
@@ -2626,8 +2675,15 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2626
2675
|
if (!this.avCodec.pixelFormats.includes(NodeAv4.AV_PIX_FMT_YUV420P)) {
|
|
2627
2676
|
pixelFormat = this.avCodec.pixelFormats[0];
|
|
2628
2677
|
}
|
|
2629
|
-
if (this.config.alpha === "keep"
|
|
2630
|
-
|
|
2678
|
+
if (this.config.alpha === "keep") {
|
|
2679
|
+
if (this.avCodec.pixelFormats.includes(NodeAv4.AV_PIX_FMT_YUVA420P)) {
|
|
2680
|
+
pixelFormat = NodeAv4.AV_PIX_FMT_YUVA420P;
|
|
2681
|
+
} else {
|
|
2682
|
+
pixelFormat = NodeAv4.avcodecFindBestPixFmtOfList(
|
|
2683
|
+
this.avCodec.pixelFormats,
|
|
2684
|
+
NodeAv4.AV_PIX_FMT_YUVA444P12LE
|
|
2685
|
+
);
|
|
2686
|
+
}
|
|
2631
2687
|
}
|
|
2632
2688
|
}
|
|
2633
2689
|
const pixelAspectRatio = simplifyRational({
|
|
@@ -2680,6 +2736,11 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2680
2736
|
codecContext.setOption("preset", "12");
|
|
2681
2737
|
}
|
|
2682
2738
|
}
|
|
2739
|
+
if (this.codec === "prores") {
|
|
2740
|
+
const profile = PRORES_FOURCC_TO_PROFILE[this.config.codec];
|
|
2741
|
+
assert(profile !== void 0);
|
|
2742
|
+
codecContext.setOption("profile", String(profile));
|
|
2743
|
+
}
|
|
2683
2744
|
const ret = await codecContext.open2();
|
|
2684
2745
|
NodeAv4.FFmpegError.throwIfError(ret, "Open codec context");
|
|
2685
2746
|
this.codecContext = codecContext;
|
|
@@ -2830,7 +2891,8 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2830
2891
|
avcCodecInfo: null,
|
|
2831
2892
|
hevcCodecInfo: null,
|
|
2832
2893
|
vp9CodecInfo: null,
|
|
2833
|
-
av1CodecInfo: null
|
|
2894
|
+
av1CodecInfo: null,
|
|
2895
|
+
proresFormat: null
|
|
2834
2896
|
});
|
|
2835
2897
|
if (!expectsAnnexB) {
|
|
2836
2898
|
decoderConfigDescription = serializedRecord;
|
|
@@ -2883,7 +2945,8 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2883
2945
|
avcCodecInfo: null,
|
|
2884
2946
|
hevcCodecInfo: null,
|
|
2885
2947
|
vp9CodecInfo: null,
|
|
2886
|
-
av1CodecInfo: null
|
|
2948
|
+
av1CodecInfo: null,
|
|
2949
|
+
proresFormat: null
|
|
2887
2950
|
});
|
|
2888
2951
|
}
|
|
2889
2952
|
} else if (this.codec === "vp9") {
|
|
@@ -2899,7 +2962,8 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2899
2962
|
avcCodecInfo: null,
|
|
2900
2963
|
hevcCodecInfo: null,
|
|
2901
2964
|
vp9CodecInfo,
|
|
2902
|
-
av1CodecInfo: null
|
|
2965
|
+
av1CodecInfo: null,
|
|
2966
|
+
proresFormat: null
|
|
2903
2967
|
});
|
|
2904
2968
|
}
|
|
2905
2969
|
} else if (this.codec === "av1") {
|
|
@@ -2915,7 +2979,24 @@ var NodeAvVideoEncoder = class extends CustomVideoEncoder {
|
|
|
2915
2979
|
avcCodecInfo: null,
|
|
2916
2980
|
hevcCodecInfo: null,
|
|
2917
2981
|
vp9CodecInfo: null,
|
|
2918
|
-
av1CodecInfo
|
|
2982
|
+
av1CodecInfo,
|
|
2983
|
+
proresFormat: null
|
|
2984
|
+
});
|
|
2985
|
+
}
|
|
2986
|
+
} else if (this.codec === "prores") {
|
|
2987
|
+
if (!this.packetEmitted) {
|
|
2988
|
+
decoderConfigCodecString = extractVideoCodecString({
|
|
2989
|
+
width: this.config.width,
|
|
2990
|
+
height: this.config.height,
|
|
2991
|
+
codec: "prores",
|
|
2992
|
+
codecDescription: null,
|
|
2993
|
+
colorSpace: null,
|
|
2994
|
+
avcType: null,
|
|
2995
|
+
avcCodecInfo: null,
|
|
2996
|
+
hevcCodecInfo: null,
|
|
2997
|
+
vp9CodecInfo: null,
|
|
2998
|
+
av1CodecInfo: null,
|
|
2999
|
+
proresFormat: this.config.codec
|
|
2919
3000
|
});
|
|
2920
3001
|
}
|
|
2921
3002
|
} else {
|
|
@@ -3409,6 +3490,7 @@ var NodeAvAudioEncoder = class extends CustomAudioEncoder {
|
|
|
3409
3490
|
};
|
|
3410
3491
|
|
|
3411
3492
|
// packages/server/src/index.ts
|
|
3493
|
+
import { registerProresDecoder } from "@mediabunny/prores";
|
|
3412
3494
|
var SERVER_LOADED_SYMBOL = Symbol.for("@mediabunny/server loaded");
|
|
3413
3495
|
if (globalThis[SERVER_LOADED_SYMBOL]) {
|
|
3414
3496
|
Logging2._error(
|
|
@@ -3434,6 +3516,7 @@ var registerMediabunnyServer = (options = {}) => {
|
|
|
3434
3516
|
_serverOptions = options;
|
|
3435
3517
|
NodeAv8.Log.setLevel(NodeAv8.AV_LOG_ERROR);
|
|
3436
3518
|
registerDecoder(NodeAvVideoDecoder);
|
|
3519
|
+
registerProresDecoder();
|
|
3437
3520
|
registerEncoder(NodeAvVideoEncoder);
|
|
3438
3521
|
registerDecoder(NodeAvAudioDecoder);
|
|
3439
3522
|
registerEncoder(NodeAvAudioEncoder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,WAAW,EAEX,YAAY,EAIZ,WAAW,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,WAAW,EAEX,YAAY,EAIZ,WAAW,EACX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAsBlC;;;;GAIG;AACH,KAAK,uBAAuB,GAAG;IAC9B;;;;;;;OAOG;IACH,eAAe,CAAC,EACb,MAAM,CAAC,eAAe,GACtB,IAAI,GACJ,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,KAAK,YAAY,CAAC,MAAM,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,CAAC;CAChF,CAAC;AAKF;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,wBAAwB,GAAI,UAAS,uBAA4B,SAkC7E,CAAC;AAEF,YAAY,EAAE,uBAAuB,EAAE,CAAC;AAExC,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,gBAAgB,CAAC;AAE5D;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,SAAS,GAAU,QAAQ,WAAW,GAAG,WAAW,EAAE,OAAO,MAAM,CAAC,KAAK,kBAqCrF,CAAC"}
|
|
@@ -49,6 +49,7 @@ const audio_decoder_1 = require("./audio-decoder");
|
|
|
49
49
|
const audio_encoder_1 = require("./audio-encoder");
|
|
50
50
|
const video_sample_1 = require("./video-sample");
|
|
51
51
|
const audio_sample_1 = require("./audio-sample");
|
|
52
|
+
const prores_1 = require("@mediabunny/prores");
|
|
52
53
|
const SERVER_LOADED_SYMBOL = Symbol.for('@mediabunny/server loaded');
|
|
53
54
|
if (globalThis[SERVER_LOADED_SYMBOL]) {
|
|
54
55
|
mediabunny_1.Logging._error('[WARNING]\n@mediabunny/server was loaded twice.'
|
|
@@ -91,6 +92,7 @@ const registerMediabunnyServer = (options = {}) => {
|
|
|
91
92
|
NodeAv.Log.setLevel(NodeAv.AV_LOG_ERROR);
|
|
92
93
|
// Video
|
|
93
94
|
(0, mediabunny_1.registerDecoder)(video_decoder_1.NodeAvVideoDecoder);
|
|
95
|
+
(0, prores_1.registerProresDecoder)(); // Faster than FFmpeg, so we use it
|
|
94
96
|
(0, mediabunny_1.registerEncoder)(video_encoder_1.NodeAvVideoEncoder);
|
|
95
97
|
// Audio
|
|
96
98
|
(0, mediabunny_1.registerDecoder)(audio_decoder_1.NodeAvAudioDecoder);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAGlC,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,
|
|
1
|
+
{"version":3,"file":"misc.d.ts","sourceRoot":"","sources":["../../../src/misc.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,sBAAsB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAChE,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAGlC,eAAO,MAAM,iBAAiB,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,CAAC,CAe3E,CAAC;AAGF,eAAO,MAAM,kBAAkB,QAAO,MAAM,CAAC,eAAe,GAAG,IAU9D,CAAC;AAYF,eAAO,MAAM,uBAAuB,GAAU,SAAS,MAAM,CAAC,SAAS,KAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAapG,CAAC;AAGF,eAAO,MAAM,uBAAuB,GAAU,SAAS,MAAM,CAAC,SAAS,KAAG,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAapG,CAAC;AAEF,eAAO,MAAM,iBAAiB,GAAI,WAAW,MAAM,mCAUlD,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,WAAW,MAAM,qEAUpD,CAAC;AAEF,eAAO,MAAM,0BAA0B,GAAI,UAAU,MAAM,gDAW1D,CAAC;AAEF,eAAO,MAAM,4BAA4B,GAAI,UAAU,MAAM,4EAW5D,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,QAAQ,MAAM,+BAUnD,CAAC;AAEF,eAAO,MAAM,uBAAuB,GAAI,QAAQ,MAAM,oEAUrD,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,mBAAmB,MAAM,CAAC,aAAa,KAAG,sBAAsB,GAAG,IAqChG,CAAC;AAEF,eAAO,MAAM,eAAe,GAAI,aAAa,sBAAsB,yBA+BlE,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAAI,oBAAoB,MAAM,CAAC,cAAc,KAAG,iBAAiB,GAAG,IAanG,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAAI,cAAc,iBAAiB,KAAG,MAAM,CAAC,cAa9E,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,aAAa,MAAM,KAAG,MAAM,CAAC,aAS7D,CAAC"}
|
package/dist/modules/src/misc.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"video-encoder.d.ts","sourceRoot":"","sources":["../../../src/video-encoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,kBAAkB,EAClB,KAAK,YAAY,EAEjB,UAAU,EACV,WAAW,EAGX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"video-encoder.d.ts","sourceRoot":"","sources":["../../../src/video-encoder.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACN,kBAAkB,EAClB,KAAK,YAAY,EAEjB,UAAU,EACV,WAAW,EAGX,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,MAAM,MAAM,SAAS,CAAC;AAmClC,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;IAChD,MAAM,EAAE,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAQ;IAClD,QAAQ,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,CAAQ;IACrC,OAAO,EAAG,MAAM,CAAC,KAAK,CAAC;IACvB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAQ;IACjC,aAAa,UAAS;IACtB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAGpC,cAAc,EAAE;QACf,oBAAoB,EAAE,MAAM,CAAC;QAC7B,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,gBAAgB,EAAE,OAAO,CAAC;QAC1B,eAAe,EAAE,OAAO,CAAC;KACzB,EAAE,CAAM;WAEO,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,kBAAkB,GAAG,OAAO;IAO1E,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAyCrB,kBAAkB;IAqGlB,MAAM,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,yBAAyB,GAAG,OAAO,CAAC,IAAI,CAAC;IAwHzF,aAAa,CAAC,GAAG,EAAE,MAAM;IA8PnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAyB5B,KAAK,IAAI,YAAY,CAAC,IAAI,CAAC;CAO3B"}
|