@mediabunny/server 1.48.0 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +34 -0
- package/dist/bundles/mediabunny-server.cjs +90 -5
- package/dist/bundles/mediabunny-server.min.cjs +2 -2
- package/dist/bundles/mediabunny-server.min.mjs +2 -2
- package/dist/bundles/mediabunny-server.mjs +91 -5
- package/dist/modules/src/index.d.ts.map +1 -1
- package/dist/modules/src/index.js +1 -1
- package/dist/modules/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/index.ts +2 -1
package/README.md
CHANGED
|
@@ -279,6 +279,40 @@ return new VideoSample(pixels, {
|
|
|
279
279
|
});
|
|
280
280
|
```
|
|
281
281
|
|
|
282
|
+
## Controlling logging
|
|
283
|
+
|
|
284
|
+
Especially in command-line applications you usually don't want Mediabunny interfering with your stdout and stderr output. Mediabunny provides ways to control its console output:
|
|
285
|
+
```ts
|
|
286
|
+
import { Logging, LogLevel } from 'mediabunny';
|
|
287
|
+
|
|
288
|
+
// The default: Mediabunny can log errors, warnings, and information messages.
|
|
289
|
+
Logging.level = LogLevel.Info;
|
|
290
|
+
|
|
291
|
+
// Only log warnings and errors.
|
|
292
|
+
Logging.level = LogLevel.Warnings;
|
|
293
|
+
|
|
294
|
+
// Only log errors.
|
|
295
|
+
Logging.level = LogLevel.Errors;
|
|
296
|
+
|
|
297
|
+
// Don't log anything at all.
|
|
298
|
+
Logging.level = LogLevel.None;
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
You can also hook into log events:
|
|
302
|
+
```ts
|
|
303
|
+
Logging.on('error', (args: unknown[]) => {
|
|
304
|
+
// Handle error message
|
|
305
|
+
});
|
|
306
|
+
|
|
307
|
+
Logging.on('warn', (args: unknown[]) => {
|
|
308
|
+
// Handle warning message
|
|
309
|
+
});
|
|
310
|
+
|
|
311
|
+
Logging.on('info', (args: unknown[]) => {
|
|
312
|
+
// Handle info message
|
|
313
|
+
});
|
|
314
|
+
```
|
|
315
|
+
|
|
282
316
|
## Implementation details
|
|
283
317
|
|
|
284
318
|
`@mediabunny/server` uses [NodeAV](https://github.com/seydx/node-av) under the hood which provides N-API C bindings to FFmpeg's C API. Using NodeAV, this package implements [custom decoders and encoders](https://mediabunny.dev/guide/supported-formats-and-codecs#custom-coders) by directly using the APIs provided by `libavcodec`.
|
|
@@ -380,6 +380,56 @@ var MediabunnyServer = (() => {
|
|
|
380
380
|
}
|
|
381
381
|
};
|
|
382
382
|
|
|
383
|
+
// src/logging.ts
|
|
384
|
+
var _Logging = class _Logging {
|
|
385
|
+
constructor() {
|
|
386
|
+
}
|
|
387
|
+
/** The current log level. Defaults to {@link LogLevel.Info}. */
|
|
388
|
+
static get level() {
|
|
389
|
+
return _Logging._level;
|
|
390
|
+
}
|
|
391
|
+
static set level(value) {
|
|
392
|
+
if (value !== 0 /* Silent */ && value !== 1 /* Errors */ && value !== 2 /* Warnings */ && value !== 3 /* Info */) {
|
|
393
|
+
throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");
|
|
394
|
+
}
|
|
395
|
+
_Logging._level = value;
|
|
396
|
+
}
|
|
397
|
+
/** @internal */
|
|
398
|
+
static get _emitter() {
|
|
399
|
+
return _Logging._emitterInstance ??= new EventEmitter();
|
|
400
|
+
}
|
|
401
|
+
/** Registers a listener for a log event. Returns a function that, when called, removes the listener again. */
|
|
402
|
+
static on(event, listener, options) {
|
|
403
|
+
return _Logging._emitter.on(event, listener, options);
|
|
404
|
+
}
|
|
405
|
+
/** @internal */
|
|
406
|
+
static _error(...args) {
|
|
407
|
+
_Logging._emitter._emit("error", args);
|
|
408
|
+
if (_Logging._level >= 1 /* Errors */) {
|
|
409
|
+
console.error(...args);
|
|
410
|
+
}
|
|
411
|
+
}
|
|
412
|
+
/** @internal */
|
|
413
|
+
static _warn(...args) {
|
|
414
|
+
_Logging._emitter._emit("warn", args);
|
|
415
|
+
if (_Logging._level >= 2 /* Warnings */) {
|
|
416
|
+
console.warn(...args);
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
/** @internal */
|
|
420
|
+
static _info(...args) {
|
|
421
|
+
_Logging._emitter._emit("info", args);
|
|
422
|
+
if (_Logging._level >= 3 /* Info */) {
|
|
423
|
+
console.info(...args);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
};
|
|
427
|
+
/** @internal */
|
|
428
|
+
_Logging._level = 3 /* Info */;
|
|
429
|
+
/** @internal */
|
|
430
|
+
_Logging._emitterInstance = null;
|
|
431
|
+
var Logging = _Logging;
|
|
432
|
+
|
|
383
433
|
// src/misc.ts
|
|
384
434
|
function assert(x) {
|
|
385
435
|
if (!x) {
|
|
@@ -505,6 +555,41 @@ var MediabunnyServer = (() => {
|
|
|
505
555
|
den: rational.den / gcd
|
|
506
556
|
};
|
|
507
557
|
};
|
|
558
|
+
var EventEmitter = class {
|
|
559
|
+
constructor() {
|
|
560
|
+
/** @internal */
|
|
561
|
+
this._listeners = /* @__PURE__ */ new Map();
|
|
562
|
+
}
|
|
563
|
+
/** Registers a listener for the given event. Returns a function that, when called, removes the listener again. */
|
|
564
|
+
on(event, listener, options) {
|
|
565
|
+
if (!this._listeners.has(event)) {
|
|
566
|
+
this._listeners.set(event, /* @__PURE__ */ new Set());
|
|
567
|
+
}
|
|
568
|
+
const entry = { fn: listener, once: options?.once ?? false };
|
|
569
|
+
this._listeners.get(event).add(entry);
|
|
570
|
+
return () => {
|
|
571
|
+
this._listeners.get(event)?.delete(entry);
|
|
572
|
+
};
|
|
573
|
+
}
|
|
574
|
+
/** @internal */
|
|
575
|
+
_emit(...args) {
|
|
576
|
+
const [event, data] = args;
|
|
577
|
+
const listeners = this._listeners.get(event);
|
|
578
|
+
if (!listeners) {
|
|
579
|
+
return;
|
|
580
|
+
}
|
|
581
|
+
for (const entry of listeners) {
|
|
582
|
+
try {
|
|
583
|
+
entry.fn(data);
|
|
584
|
+
} catch (error) {
|
|
585
|
+
console.error(error);
|
|
586
|
+
}
|
|
587
|
+
if (entry.once) {
|
|
588
|
+
listeners.delete(entry);
|
|
589
|
+
}
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
};
|
|
508
593
|
|
|
509
594
|
// packages/server/src/video-sample.ts
|
|
510
595
|
var import_mediabunny = __require("mediabunny");
|
|
@@ -1320,7 +1405,7 @@ var MediabunnyServer = (() => {
|
|
|
1320
1405
|
sequenceParameterSetExt: hasExtendedData ? spsExtUnits : null
|
|
1321
1406
|
};
|
|
1322
1407
|
} catch (error) {
|
|
1323
|
-
|
|
1408
|
+
Logging._error("Error building AVC Decoder Configuration Record:", error);
|
|
1324
1409
|
return null;
|
|
1325
1410
|
}
|
|
1326
1411
|
};
|
|
@@ -1594,7 +1679,7 @@ var MediabunnyServer = (() => {
|
|
|
1594
1679
|
maxDecFrameBuffering
|
|
1595
1680
|
};
|
|
1596
1681
|
} catch (error) {
|
|
1597
|
-
|
|
1682
|
+
Logging._error("Error parsing AVC SPS:", error);
|
|
1598
1683
|
return null;
|
|
1599
1684
|
}
|
|
1600
1685
|
};
|
|
@@ -1738,7 +1823,7 @@ var MediabunnyServer = (() => {
|
|
|
1738
1823
|
minSpatialSegmentationIdc
|
|
1739
1824
|
};
|
|
1740
1825
|
} catch (error) {
|
|
1741
|
-
|
|
1826
|
+
Logging._error("Error parsing HEVC SPS:", error);
|
|
1742
1827
|
return null;
|
|
1743
1828
|
}
|
|
1744
1829
|
};
|
|
@@ -1849,7 +1934,7 @@ var MediabunnyServer = (() => {
|
|
|
1849
1934
|
};
|
|
1850
1935
|
return record;
|
|
1851
1936
|
} catch (error) {
|
|
1852
|
-
|
|
1937
|
+
Logging._error("Error building HEVC Decoder Configuration Record:", error);
|
|
1853
1938
|
return null;
|
|
1854
1939
|
}
|
|
1855
1940
|
};
|
|
@@ -3350,7 +3435,7 @@ var MediabunnyServer = (() => {
|
|
|
3350
3435
|
// packages/server/src/index.ts
|
|
3351
3436
|
var SERVER_LOADED_SYMBOL = Symbol.for("@mediabunny/server loaded");
|
|
3352
3437
|
if (globalThis[SERVER_LOADED_SYMBOL]) {
|
|
3353
|
-
|
|
3438
|
+
import_mediabunny7.Logging._error(
|
|
3354
3439
|
"[WARNING]\n@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."
|
|
3355
3440
|
);
|
|
3356
3441
|
}
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
6
6
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
7
7
|
*/
|
|
8
|
-
"use strict";var MediabunnyServer=(()=>{var ht=Object.create;var Ae=Object.defineProperty;var gt=Object.getOwnPropertyDescriptor;var Ct=Object.getOwnPropertyNames;var bt=Object.getPrototypeOf,xt=Object.prototype.hasOwnProperty;var M=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var vt=(t,e)=>{for(var r in e)Ae(t,r,{get:e[r],enumerable:!0})},Ue=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Ct(e))!xt.call(t,o)&&o!==r&&Ae(t,o,{get:()=>e[o],enumerable:!(i=gt(e,o))||i.enumerable});return t};var j=(t,e,r)=>(r=t!=null?ht(bt(t)):{},Ue(e||!t||!t.__esModule?Ae(r,"default",{value:t,enumerable:!0}):r,t)),yt=t=>Ue(Ae({},"__esModule",{value:!0}),t);var zt={};vt(zt,{AvFrameAudioSampleResource:()=>K,AvFrameVideoSampleResource:()=>z,_serverOptions:()=>X,registerMediabunnyServer:()=>Ot,toAvFrame:()=>Ht});var L=M("mediabunny"),W=j(M("node-av"));var ge=M("mediabunny"),b=j(M("node-av"));var n=j(M("node-av"));var Q={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},_e,Le=()=>X.hardwareContext!==void 0&&typeof X.hardwareContext!="function"?X.hardwareContext:(_e===void 0&&(_e=n.HardwareContext.auto()),_e),De=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.")},we=new Map,Oe=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return De(e),e?.getDecoderCodec(t)??null}if(!we.has(t)){let e=Le();we.set(t,e?.getDecoderCodec(t)??null)}return we.get(t)},Ie=new Map,He=async t=>{if(typeof X.hardwareContext=="function"){let e=await X.hardwareContext(t);return De(e),e?.getEncoderCodec(t)??null}if(!Ie.has(t)){let e=Le();Ie.set(t,e?.getEncoderCodec(t)??null)}return Ie.get(t)},ze=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},ue=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},qe=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},me=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},We=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},fe=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},Ge=t=>{switch(t){case n.AV_PIX_FMT_YUV420P:return"I420";case n.AV_PIX_FMT_YUVJ420P:return"I420";case n.AV_PIX_FMT_YUV420P10LE:return"I420P10";case n.AV_PIX_FMT_YUV420P12LE:return"I420P12";case n.AV_PIX_FMT_YUVA420P:return"I420A";case n.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case n.AV_PIX_FMT_YUV422P:return"I422";case n.AV_PIX_FMT_YUVJ422P:return"I422";case n.AV_PIX_FMT_YUV422P10LE:return"I422P10";case n.AV_PIX_FMT_YUV422P12LE:return"I422P12";case n.AV_PIX_FMT_YUVA422P:return"I422A";case n.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case n.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case n.AV_PIX_FMT_YUV444P:return"I444";case n.AV_PIX_FMT_YUVJ444P:return"I444";case n.AV_PIX_FMT_YUV444P10LE:return"I444P10";case n.AV_PIX_FMT_YUV444P12LE:return"I444P12";case n.AV_PIX_FMT_YUVA444P:return"I444A";case n.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case n.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case n.AV_PIX_FMT_NV12:return"NV12";case n.AV_PIX_FMT_RGBA:return"RGBA";case n.AV_PIX_FMT_RGB0:return"RGBX";case n.AV_PIX_FMT_BGRA:return"BGRA";case n.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},Be=t=>{switch(t){case"I420":return n.AV_PIX_FMT_YUV420P;case"I420P10":return n.AV_PIX_FMT_YUV420P10LE;case"I420P12":return n.AV_PIX_FMT_YUV420P12LE;case"I420A":return n.AV_PIX_FMT_YUVA420P;case"I420AP10":return n.AV_PIX_FMT_YUVA420P10LE;case"I422":return n.AV_PIX_FMT_YUV422P;case"I422P10":return n.AV_PIX_FMT_YUV422P10LE;case"I422P12":return n.AV_PIX_FMT_YUV422P12LE;case"I422A":return n.AV_PIX_FMT_YUVA422P;case"I422AP10":return n.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return n.AV_PIX_FMT_YUVA422P12LE;case"I444":return n.AV_PIX_FMT_YUV444P;case"I444P10":return n.AV_PIX_FMT_YUV444P10LE;case"I444P12":return n.AV_PIX_FMT_YUV444P12LE;case"I444A":return n.AV_PIX_FMT_YUVA444P;case"I444AP10":return n.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return n.AV_PIX_FMT_YUVA444P12LE;case"NV12":return n.AV_PIX_FMT_NV12;case"RGBA":return n.AV_PIX_FMT_RGBA;case"RGBX":return n.AV_PIX_FMT_RGB0;case"BGRA":return n.AV_PIX_FMT_BGRA;case"BGRX":return n.AV_PIX_FMT_BGR0;default:return n.AV_PIX_FMT_NONE}},Xe=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}},Ye=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}},$=t=>{switch(t){case 1:return n.AV_CHANNEL_LAYOUT_MONO;case 2:return n.AV_CHANNEL_LAYOUT_STEREO;case 4:return n.AV_CHANNEL_LAYOUT_QUAD;case 6:return n.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return n.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:n.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};function p(t){if(!t)throw new Error("Assertion failed.")}var re=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)},Y=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),Te=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Ke={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 Je={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Pe=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Fe=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 ie=(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 Xt=1e6*(1+Number.EPSILON);var pe=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 ee=M("mediabunny"),f=j(M("node-av"));var St=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 ee.VideoSampleResource{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 Ge(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 ee.VideoSampleColorSpace({primaries:ue(this.frame.colorPrimaries),transfer:me(this.frame.colorTrc),matrix:fe(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||St.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=Be("RGBA");s.getContext(i,o,a,i,o,A,f.SWS_BILINEAR);let u=new f.Frame;u.width=i,u.height=o,u.format=A,u.alloc(),u.allocBuffer();let d=this.frame;try{await s.scaleFrame(u,d)}finally{s.freeContext()}return u.sampleAspectRatio=d.sampleAspectRatio,new ee.VideoSample(new t(u),e)}},ce=async(t,e,r)=>{p(t.format!==null),e.format=Be(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=ze(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=We(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=qe(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},je=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 ce(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new f.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,A=s.createFilter(f.Filter.getByName("buffer"),"src",a),u=s.createFilter(f.Filter.getByName("buffersink"),"sink");p(A&&u);let d=f.FilterInOut.createList([{name:"in",filterCtx:A,padIdx:0}]),c=f.FilterInOut.createList([{name:"out",filterCtx:u,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,c,d);f.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let E=await s.config();f.FFmpegError.throwIfError(E,"FilterGraph.config");let _=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(_,"buffersrcAddFrame"),await A.buffersrcAddFrame(null);let g=new f.Frame;g.alloc();let x=await u.buffersinkGetFrame(g);return f.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new ee.VideoSample(new z(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var he=class extends ge.CustomVideoDecoder{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=Q[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 Oe(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=pe({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=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=ie(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=ie(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 ge.VideoSample(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()}};var ne=M("mediabunny"),m=j(M("node-av"));var q=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 $e=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Et=[-1,1,2,3,4,5,6,8],Ze=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new q(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<$e.length&&(o=$e[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=Et[s]),{objectType:r,frequencyIndex:i,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var et=t=>{let e=new Uint8Array(7),r=new q(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 wt=["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"],It=["aac","opus","mp3","vorbis","flac","ac3","eac3"],fr=[...It,...wt];var Re=[{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 te=[{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 tt=".01.01.01.01.00",rt=".0.110.01.01.01.0";var le=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}.${Pe(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}.${Pe(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,E,_;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=Fe(s.generalProfileCompatibilityFlags),h=s.generalTierFlag,E=s.generalLevelIdc,_=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let x=Te(r),C=x.getUint8(1);u=C>>6&3,d=C&31,c=Fe(x.getUint32(2)),h=C>>5&1,E=x.getUint8(12),_=[];for(let T=0;T<6;T++)_.push(x.getUint8(6+T))}let g="hev1.";for(g+=["","A","B","C"][u]+d,g+=".",g+=c.toString(16).toUpperCase(),g+=".",g+=h===0?"L":"H",g+=E;_.length>0&&_[_.length-1]===0;)_.pop();return _.length>0&&(g+=".",g+=_.map(x=>x.toString(16).toUpperCase()).join(".")),g}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,y=re(te).level;for(let P of te)if(T<=P.maxPictureSize){y=P.level;break}return`vp09.00.${y.toString().padStart(2,"0")}.08`}let u=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),c=a.bitDepth.toString().padStart(2,"0"),h=a.chromaSubsampling.toString().padStart(2,"0"),E=a.colourPrimaries.toString().padStart(2,"0"),_=a.transferCharacteristics.toString().padStart(2,"0"),g=a.matrixCoefficients.toString().padStart(2,"0"),x=a.videoFullRangeFlag.toString().padStart(2,"0"),C=`vp09.${u}.${d}.${c}.${h}`;return C+=`.${E}.${_}.${g}.${x}`,C.endsWith(tt)&&(C=C.slice(0,-tt.length)),C}else if(e==="av1"){if(!A){let P=t.width*t.height,V=re(te).level;for(let w of te)if(P<=w.maxPictureSize){V=w.level;break}return`av01.0.${V.toString().padStart(2,"0")}M.08`}let u=A.profile,d=A.level.toString().padStart(2,"0"),c=A.tier?"H":"M",h=A.bitDepth.toString().padStart(2,"0"),E=A.monochrome?"1":"0",_=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),g=i?.primaries?Ke[i.primaries]:1,x=i?.transfer?Qe[i.transfer]:1,C=i?.matrix?Je[i.matrix]:1,T=i?.fullRange?1:0,y=`av01.${u}.${d}${c}.${h}`;return y+=`.${E}.${_.toString().padStart(3,"0")}`,y+=`.${g.toString().padStart(2,"0")}`,y+=`.${x.toString().padStart(2,"0")}`,y+=`.${C.toString().padStart(2,"0")}`,y+=`.${T}`,y.endsWith(rt)&&(y=y.slice(0,-rt.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var be=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 Ve=t=>t&31,Ne=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)},Pr=new Uint8Array([0,0,0,1]);var ot=t=>{try{let e=[],r=[],i=[];for(let A of be(t)){let u=t.subarray(A.offset,A.offset+A.length),d=Ve(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=Bt(o);p(s!==null);let a=s.profileIdc===100||s.profileIdc===110||s.profileIdc===122||s.profileIdc===144;return{configurationVersion:1,avcProfileIndication:s.profileIdc,profileCompatibility:s.constraintFlags,avcLevelIndication:s.levelIdc,lengthSizeMinusOne:3,sequenceParameterSets:e,pictureParameterSets:r,chromaFormat:a?s.chromaFormatIdc:null,bitDepthLumaMinus8:a?s.bitDepthLumaMinus8:null,bitDepthChromaMinus8:a?s.bitDepthChromaMinus8:null,sequenceParameterSetExt:a?i:null}}catch(e){return console.error("Error building AVC Decoder Configuration Record:",e),null}},st=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 at={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}},Bt=t=>{try{let e=new q(Ne(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();l(e);let a=1,A=0,u=0,d=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(a=l(e),a===3&&(d=e.readBits(1)),A=l(e),u=l(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let J=S<6?16:64,O=8,R=8;for(let H=0;H<J;H++){if(R!==0){let Z=Y(e);R=(O+Z+256)%256}O=R===0?O:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),Y(e),Y(e);let U=l(e);for(let S=0;S<U;S++)Y(e)}l(e),e.skipBits(1);let h=l(e),E=l(e),_=16*(h+1),g=16*(E+1),x=_,C=g,T=e.readBits(1);if(T||e.skipBits(1),e.skipBits(1),e.readBits(1)){let U=l(e),S=l(e),G=l(e),J=l(e),O,R;if((d===0?a:0)===0)O=1,R=2-T;else{let Z=a===3?1:2,ae=a===1?2:1;O=Z,R=ae*(2-T)}x-=O*(U+S),C-=R*(G+J)}let P=2,V=2,w=2,B=0,N={num:1,den:1},F=null,D=null;if(e.readBits(1)){if(e.readBits(1)){let ae=e.readBits(8);if(ae===255)N={num:e.readBits(16),den:e.readBits(16)};else{let ke=at[ae];ke&&(N=ke)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),B=e.readBits(1),e.readBits(1)&&(P=e.readBits(8),V=e.readBits(8),w=e.readBits(8))),e.readBits(1)&&(l(e),l(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let R=e.readBits(1);R&&it(e);let H=e.readBits(1);H&&it(e),(R||H)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),D=l(e))}if(F===null){p(D===null);let U=o&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&U)F=0,D=0;else{let S=h+1,G=E+1,J=(2-T)*G,O=Re.find(H=>H.level>=s)??re(Re),R=Math.min(Math.floor(O.maxDpbMbs/(S*J)),16);F=R,D=R}}return p(D!==null),{profileIdc:i,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:T,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:u,codedWidth:_,codedHeight:g,displayWidth:x,displayHeight:C,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:w,transferCharacteristics:V,fullRangeFlag:B,numReorderFrames:F,maxDecFrameBuffering:D}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},it=t=>{let e=l(t);t.skipBits(4),t.skipBits(4);for(let r=0;r<=e;r++)l(t),l(t),t.skipBits(1);t.skipBits(5),t.skipBits(5),t.skipBits(5),t.skipBits(5)};var Ce=t=>t>>1&63,Tt=t=>{try{let e=new q(Ne(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}=Pt(e,r);l(e);let c=l(e),h=0;c===3&&(h=e.readBits(1));let E=l(e),_=l(e),g=E,x=_;if(e.readBits(1)){let S=l(e),G=l(e),J=l(e),O=l(e),R=1,H=1,Z=h===0?c:0;Z===1?(R=2,H=2):Z===2&&(R=2,H=1),g-=(S+G)*R,x-=(J+O)*H}let C=l(e),T=l(e);l(e);let P=e.readBits(1)?0:r,V=0;for(let S=P;S<=r;S++)l(e),V=l(e),l(e);l(e),l(e),l(e),l(e),l(e),l(e),e.readBits(1)&&e.readBits(1)&&Ft(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),l(e),l(e),e.skipBits(1));let w=l(e);if(Rt(e,w),e.readBits(1)){let S=l(e);for(let G=0;G<S;G++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,N=2,F=2,D=0,de=0,U={num:1,den:1};if(e.readBits(1)){let S=Nt(e,r);U=S.pixelAspectRatio,B=S.colourPrimaries,N=S.transferCharacteristics,F=S.matrixCoefficients,D=S.fullRangeFlag,de=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:U,colourPrimaries:B,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:D,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:de}}catch(e){return console.error("Error parsing HEVC SPS:",e),null}},ct=t=>{try{let e=[],r=[],i=[],o=[];for(let d of be(t)){let c=t.subarray(d.offset,d.offset+d.length),h=Ce(c[0]);h===32?e.push(c):h===33?r.push(c):h===34?i.push(c):(h===39||h===40)&&o.push(c)}if(r.length===0||i.length===0)return null;let s=Tt(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new q(Ne(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),Y(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),Y(c),Y(c),c.skipBits(1),c.skipBits(1),c.skipBits(1),c.skipBits(1);let h=c.readBits(1),E=c.readBits(1);!h&&!E?a=0:h&&!E?a=2:!h&&E?a=3:a=0}let A=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:i}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:Ce(o[0][0]),nalUnits:o}]:[]];return{configurationVersion:1,generalProfileSpace:s.generalProfileSpace,generalTierFlag:s.generalTierFlag,generalProfileIdc:s.generalProfileIdc,generalProfileCompatibilityFlags:s.generalProfileCompatibilityFlags,generalConstraintIndicatorFlags:s.generalConstraintIndicatorFlags,generalLevelIdc:s.generalLevelIdc,minSpatialSegmentationIdc:s.minSpatialSegmentationIdc,parallelismType:a,chromaFormatIdc:s.chromaFormatIdc,bitDepthLumaMinus8:s.bitDepthLumaMinus8,bitDepthChromaMinus8:s.bitDepthChromaMinus8,avgFrameRate:0,constantFrameRate:0,numTemporalLayers:s.spsMaxSubLayersMinus1+1,temporalIdNested:s.spsTemporalIdNestingFlag,lengthSizeMinusOne:3,arrays:A}}catch(e){return console.error("Error building HEVC Decoder Configuration Record:",e),null}},Pt=(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}},Ft=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&&Y(t);for(let s=0;s<o;s++)Y(t)}},Rt=(t,e)=>{let r=[];for(let i=0;i<e;i++)r[i]=Vt(t,i,e,r)},Vt=(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},Nt=(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=at[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)&&Mt(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}},Mt=(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&&nt(t,c,s),o&&nt(t,c,s)}},nt=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},lt=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 dt=t=>{let e=new q(t);if(e.readBits(2)!==2)return null;let i=e.readBits(1),s=(e.readBits(1)<<1)+i;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let d=8;s>=2&&(d=e.readBits(1)?12:10);let c=e.readBits(3),h=0,E=0;if(c!==7)if(E=e.readBits(1),s===1||s===3){let N=e.readBits(1),F=e.readBits(1);h=!N&&!F?3:N&&!F?2:1,e.skipBits(1)}else h=1;else h=3,E=1;let _=e.readBits(16),g=e.readBits(16),x=_+1,C=g+1,T=x*C,y=re(te).level;for(let B of te)if(T<=B.maxPictureSize){y=B.level;break}return{profile:s,level:y,bitDepth:d,chromaSubsampling:h,videoFullRangeFlag:E,colourPrimaries:c===2?1:c===1?6:2,transferCharacteristics:c===2?1:c===1?6:2,matrixCoefficients:c===7?0:c===2?1:c===1?6:2}},kt=function*(t){let e=new q(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)}},At=t=>{for(let{type:e,data:r}of kt(t)){if(e!==1)continue;let i=new q(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 D=i.readBits(5);if(F===0&&(A=D),D>7){let U=i.readBits(1);F===0&&(u=U)}if(B&&i.readBits(1)){let S=d+1;i.skipBits(S),i.skipBits(S),i.skipBits(1)}i.readBits(1)&&i.skipBits(4)}}let c=i.readBits(4),h=i.readBits(4),E=c+1;i.skipBits(E);let _=h+1;i.skipBits(_);let g=0;if(a?g=0:g=i.readBits(1),g&&(i.skipBits(4),i.skipBits(3)),i.skipBits(1),i.skipBits(1),i.skipBits(1),!a){i.skipBits(1),i.skipBits(1),i.skipBits(1),i.skipBits(1);let w=i.readBits(1);w&&(i.skipBits(1),i.skipBits(1));let B=i.readBits(1),N=0;B?N=2:N=i.readBits(1),N>0&&(i.readBits(1)||i.skipBits(1)),w&&i.skipBits(3)}i.skipBits(1),i.skipBits(1),i.skipBits(1);let x=i.readBits(1),C=8;o===2&&x?C=i.readBits(1)?12:10:o<=2&&(C=x?10:8);let T=0;o!==1&&(T=i.readBits(1));let y=1,P=1,V=0;return T||(o===0?(y=1,P=1):o===1?(y=0,P=0):C===12&&(y=i.readBits(1),y&&(P=i.readBits(1))),y&&P&&(V=i.readBits(2))),{profile:o,level:A,tier:u,bitDepth:C,monochrome:T,chromaSubsamplingX:y,chromaSubsamplingY:P,chromaSamplePosition:V}}return null};var Fr=[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 Rr=new Uint8Array([5,4,65,67,45,51]),Vr=new Uint8Array([5,4,69,65,67,51]);var xe=class extends ne.CustomVideoEncoder{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=Q[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 He(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=pe({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??ne.QUALITY_MEDIUM._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 ce(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=ie(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=ie(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=ot(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=st(C)}else{let C=ct(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=lt(C)}d=le({width:this.config.width,height:this.config.height,codec:this.codec,codecDescription:x,colorSpace:null,avcType:1,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:null}),g||(c=x)}if(!g){let C=[];for(let w of be(i))if(this.codec==="avc"){let B=Ve(i[w.offset]);B!==7&&B!==8&&B!==13&&C.push(w)}else{let B=Ce(i[w.offset]);B!==33&&B!==34&&B!==32&&C.push(w)}let T=0;for(let w of C)T+=4+w.length;let y=new Uint8Array(T),P=new DataView(y.buffer),V=0;for(let w of C){let B=w.length;P.setUint32(V,B,!1),V+=4,y.set(i.subarray(w.offset,w.offset+w.length),V),V+=w.length}i=y}}else if(this.codec==="vp8")this.packetEmitted||(d=le({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=dt(i);d=le({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=At(i);d=le({width:this.config.width,height:this.config.height,codec:"av1",codecDescription:null,colorSpace:null,avcType:null,avcCodecInfo:null,hevcCodecInfo:null,vp9CodecInfo:null,av1CodecInfo:g})}}else throw new Error("Unreachable.");let h={},E=this.packet.getSideData(m.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);E&&(h.alpha=k(E).subarray(8));let _=new ne.EncodedPacket(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:ue(this.codecContext.colorPrimaries),matrix:fe(this.codecContext.colorSpace),transfer:me(this.codecContext.colorTrc),fullRange:this.codecContext.colorRange===m.AVCOL_RANGE_JPEG?!0:this.codecContext.colorRange===m.AVCOL_RANGE_MPEG?!1:void 0}}),this.packetEmitted=!0,this.onPacket(_,u)}async flush(){if(this.codecContext){let r=await this.codecContext.sendFrame(null);for(m.FFmpegError.throwIfError(r,"Send frame");;){let i=await this.codecContext.receivePacket(this.packet);if(i===m.AVERROR_EAGAIN||i===m.AVERROR_EOF)break;this.receivePacket(i)}this.codecContext.freeContext(),this.codecContext=null}this.packetEmitted=!1}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free(),this.scaler?.freeContext(),this.dstFrame?.free()}};var Se=M("mediabunny"),I=j(M("node-av"));var ut=M("mediabunny"),oe=j(M("node-av"));var K=class extends ut.AudioSampleResource{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=Xe(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])}},ve=(t,e)=>{e.format=Ye(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=$(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ye=class extends Se.CustomAudioDecoder{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=Q[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=$(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 Se.AudioSample(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()}};var se=M("mediabunny"),v=j(M("node-av"));var Ut=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Lt=[8e3,12e3,16e3,24e3,48e3],Dt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],mt=[32e3,44100,48e3],Me=1024,Ee=class extends se.CustomAudioEncoder{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(r,i){let{numberOfChannels:o,sampleRate:s}=i;return r==="aac"&&o>=1&&o<=48&&Ut.includes(s)||r==="opus"&&o>=1&&o<=255&&Lt.includes(s)||r==="mp3"&&o>=1&&o<=2&&Dt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&mt.includes(s)||r==="eac3"&&o>=1&&o<=16&&mt.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=Q[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=$(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=Q[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??se.QUALITY_MEDIUM._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)):ve(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=$(this.codecContext.channels),A=$(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||Me,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||Me;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=Ze(d);this.adtsHeaderTemplate=et(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 se.EncodedPacket(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||Me;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 pt=Symbol.for("@mediabunny/server loaded");globalThis[pt]&&console.error(`[WARNING]
|
|
9
|
-
@mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[
|
|
8
|
+
"use strict";var MediabunnyServer=(()=>{var bt=Object.create;var me=Object.defineProperty;var xt=Object.getOwnPropertyDescriptor;var vt=Object.getOwnPropertyNames;var yt=Object.getPrototypeOf,Et=Object.prototype.hasOwnProperty;var M=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(e,r)=>(typeof require<"u"?require:e)[r]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+t+'" is not supported')});var _t=(t,e)=>{for(var r in e)me(t,r,{get:e[r],enumerable:!0})},Oe=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of vt(e))!Et.call(t,n)&&n!==r&&me(t,n,{get:()=>e[n],enumerable:!(i=xt(e,n))||i.enumerable});return t};var $=(t,e,r)=>(r=t!=null?bt(yt(t)):{},Oe(e||!t||!t.__esModule?me(r,"default",{value:t,enumerable:!0}):r,t)),wt=t=>Oe(me({},"__esModule",{value:!0}),t);var Gt={};_t(Gt,{AvFrameAudioSampleResource:()=>Q,AvFrameVideoSampleResource:()=>q,_serverOptions:()=>Y,registerMediabunnyServer:()=>qt,toAvFrame:()=>Wt});var k=M("mediabunny"),G=$(M("node-av"));var xe=M("mediabunny"),b=$(M("node-av"));var o=$(M("node-av"));var J={avc:o.AV_CODEC_ID_H264,hevc:o.AV_CODEC_ID_HEVC,vp8:o.AV_CODEC_ID_VP8,vp9:o.AV_CODEC_ID_VP9,av1:o.AV_CODEC_ID_AV1,aac:o.AV_CODEC_ID_AAC,opus:o.AV_CODEC_ID_OPUS,mp3:o.AV_CODEC_ID_MP3,vorbis:o.AV_CODEC_ID_VORBIS,flac:o.AV_CODEC_ID_FLAC,ac3:o.AV_CODEC_ID_AC3,eac3:o.AV_CODEC_ID_EAC3},Be,He=()=>Y.hardwareContext!==void 0&&typeof Y.hardwareContext!="function"?Y.hardwareContext:(Be===void 0&&(Be=o.HardwareContext.auto()),Be),ze=t=>{if(t!==null&&!(t instanceof o.HardwareContext))throw new TypeError("When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null.")},Te=new Map,qe=async t=>{if(typeof Y.hardwareContext=="function"){let e=await Y.hardwareContext(t);return ze(e),e?.getDecoderCodec(t)??null}if(!Te.has(t)){let e=He();Te.set(t,e?.getDecoderCodec(t)??null)}return Te.get(t)},Pe=new Map,We=async t=>{if(typeof Y.hardwareContext=="function"){let e=await Y.hardwareContext(t);return ze(e),e?.getEncoderCodec(t)??null}if(!Pe.has(t)){let e=He();Pe.set(t,e?.getEncoderCodec(t)??null)}return Pe.get(t)},Ge=t=>{switch(t){case"bt709":return o.AVCOL_PRI_BT709;case"bt470bg":return o.AVCOL_PRI_BT470BG;case"smpte170m":return o.AVCOL_PRI_SMPTE170M;case"bt2020":return o.AVCOL_PRI_BT2020;case"smpte432":return o.AVCOL_PRI_SMPTE432}return null},fe=t=>{switch(t){case o.AVCOL_PRI_BT709:return"bt709";case o.AVCOL_PRI_BT470BG:return"bt470bg";case o.AVCOL_PRI_SMPTE170M:return"smpte170m";case o.AVCOL_PRI_BT2020:return"bt2020";case o.AVCOL_PRI_SMPTE432:return"smpte432"}return null},Xe=t=>{switch(t){case"bt709":return o.AVCOL_TRC_BT709;case"smpte170m":return o.AVCOL_TRC_SMPTE170M;case"iec61966-2-1":return o.AVCOL_TRC_IEC61966_2_1;case"linear":return o.AVCOL_TRC_LINEAR;case"pq":return o.AVCOL_TRC_SMPTE2084;case"hlg":return o.AVCOL_TRC_ARIB_STD_B67}return null},pe=t=>{switch(t){case o.AVCOL_TRC_BT709:return"bt709";case o.AVCOL_TRC_SMPTE170M:return"smpte170m";case o.AVCOL_TRC_IEC61966_2_1:return"iec61966-2-1";case o.AVCOL_TRC_LINEAR:return"linear";case o.AVCOL_TRC_SMPTE2084:return"pq";case o.AVCOL_TRC_ARIB_STD_B67:return"hlg"}return null},Ye=t=>{switch(t){case"rgb":return o.AVCOL_SPC_RGB;case"bt709":return o.AVCOL_SPC_BT709;case"bt470bg":return o.AVCOL_SPC_BT470BG;case"smpte170m":return o.AVCOL_SPC_SMPTE170M;case"bt2020-ncl":return o.AVCOL_SPC_BT2020_NCL}return null},he=t=>{switch(t){case o.AVCOL_SPC_RGB:return"rgb";case o.AVCOL_SPC_BT709:return"bt709";case o.AVCOL_SPC_BT470BG:return"bt470bg";case o.AVCOL_SPC_SMPTE170M:return"smpte170m";case o.AVCOL_SPC_BT2020_NCL:return"bt2020-ncl"}return null},Ke=t=>{switch(t){case o.AV_PIX_FMT_YUV420P:return"I420";case o.AV_PIX_FMT_YUVJ420P:return"I420";case o.AV_PIX_FMT_YUV420P10LE:return"I420P10";case o.AV_PIX_FMT_YUV420P12LE:return"I420P12";case o.AV_PIX_FMT_YUVA420P:return"I420A";case o.AV_PIX_FMT_YUVA420P10LE:return"I420AP10";case o.AV_PIX_FMT_YUV422P:return"I422";case o.AV_PIX_FMT_YUVJ422P:return"I422";case o.AV_PIX_FMT_YUV422P10LE:return"I422P10";case o.AV_PIX_FMT_YUV422P12LE:return"I422P12";case o.AV_PIX_FMT_YUVA422P:return"I422A";case o.AV_PIX_FMT_YUVA422P10LE:return"I422AP10";case o.AV_PIX_FMT_YUVA422P12LE:return"I422AP12";case o.AV_PIX_FMT_YUV444P:return"I444";case o.AV_PIX_FMT_YUVJ444P:return"I444";case o.AV_PIX_FMT_YUV444P10LE:return"I444P10";case o.AV_PIX_FMT_YUV444P12LE:return"I444P12";case o.AV_PIX_FMT_YUVA444P:return"I444A";case o.AV_PIX_FMT_YUVA444P10LE:return"I444AP10";case o.AV_PIX_FMT_YUVA444P12LE:return"I444AP12";case o.AV_PIX_FMT_NV12:return"NV12";case o.AV_PIX_FMT_RGBA:return"RGBA";case o.AV_PIX_FMT_RGB0:return"RGBX";case o.AV_PIX_FMT_BGRA:return"BGRA";case o.AV_PIX_FMT_BGR0:return"BGRX";default:return null}},Fe=t=>{switch(t){case"I420":return o.AV_PIX_FMT_YUV420P;case"I420P10":return o.AV_PIX_FMT_YUV420P10LE;case"I420P12":return o.AV_PIX_FMT_YUV420P12LE;case"I420A":return o.AV_PIX_FMT_YUVA420P;case"I420AP10":return o.AV_PIX_FMT_YUVA420P10LE;case"I422":return o.AV_PIX_FMT_YUV422P;case"I422P10":return o.AV_PIX_FMT_YUV422P10LE;case"I422P12":return o.AV_PIX_FMT_YUV422P12LE;case"I422A":return o.AV_PIX_FMT_YUVA422P;case"I422AP10":return o.AV_PIX_FMT_YUVA422P10LE;case"I422AP12":return o.AV_PIX_FMT_YUVA422P12LE;case"I444":return o.AV_PIX_FMT_YUV444P;case"I444P10":return o.AV_PIX_FMT_YUV444P10LE;case"I444P12":return o.AV_PIX_FMT_YUV444P12LE;case"I444A":return o.AV_PIX_FMT_YUVA444P;case"I444AP10":return o.AV_PIX_FMT_YUVA444P10LE;case"I444AP12":return o.AV_PIX_FMT_YUVA444P12LE;case"NV12":return o.AV_PIX_FMT_NV12;case"RGBA":return o.AV_PIX_FMT_RGBA;case"RGBX":return o.AV_PIX_FMT_RGB0;case"BGRA":return o.AV_PIX_FMT_BGRA;case"BGRX":return o.AV_PIX_FMT_BGR0;default:return o.AV_PIX_FMT_NONE}},Qe=t=>{switch(t){case o.AV_SAMPLE_FMT_U8:return"u8";case o.AV_SAMPLE_FMT_S16:return"s16";case o.AV_SAMPLE_FMT_S32:return"s32";case o.AV_SAMPLE_FMT_FLT:return"f32";case o.AV_SAMPLE_FMT_U8P:return"u8-planar";case o.AV_SAMPLE_FMT_S16P:return"s16-planar";case o.AV_SAMPLE_FMT_S32P:return"s32-planar";case o.AV_SAMPLE_FMT_FLTP:return"f32-planar";default:return null}},Je=t=>{switch(t){case"u8":return o.AV_SAMPLE_FMT_U8;case"s16":return o.AV_SAMPLE_FMT_S16;case"s32":return o.AV_SAMPLE_FMT_S32;case"f32":return o.AV_SAMPLE_FMT_FLT;case"u8-planar":return o.AV_SAMPLE_FMT_U8P;case"s16-planar":return o.AV_SAMPLE_FMT_S16P;case"s32-planar":return o.AV_SAMPLE_FMT_S32P;case"f32-planar":return o.AV_SAMPLE_FMT_FLTP;default:return o.AV_SAMPLE_FMT_NONE}},Z=t=>{switch(t){case 1:return o.AV_CHANNEL_LAYOUT_MONO;case 2:return o.AV_CHANNEL_LAYOUT_STEREO;case 4:return o.AV_CHANNEL_LAYOUT_QUAD;case 6:return o.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return o.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:o.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};var U=class U{constructor(){}static get level(){return U._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.");U._level=e}static get _emitter(){return U._emitterInstance??=new ge}static on(e,r,i){return U._emitter.on(e,r,i)}static _error(...e){U._emitter._emit("error",e),U._level>=1&&console.error(...e)}static _warn(...e){U._emitter._emit("warn",e),U._level>=2&&console.warn(...e)}static _info(...e){U._emitter._emit("info",e),U._level>=3&&console.info(...e)}};U._level=3,U._emitterInstance=null;var te=U;function p(t){if(!t)throw new Error("Assertion failed.")}var ne=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)},K=t=>{let e=l(t);return(e&1)===0?-(e>>1):e+1>>1};var L=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),Re=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var je={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var $e={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Ze={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Ve=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Ne=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 oe=(t,e,r)=>{let i=0,n=t.length-1,s=-1;for(;i<=n;){let a=i+(n-i+1)/2|0;r(t[a])<=e?(s=a,i=a+1):n=a-1}return s};var jt=1e6*(1+Number.EPSILON);var Ce=t=>{p(Number.isInteger(t.num)),p(Number.isInteger(t.den)),p(t.den!==0);let e=Math.abs(t.num),r=Math.abs(t.den);for(;r!==0;){let n=e%r;e=r,r=n}let i=e||1;return{num:t.num/i,den:t.den/i}};var ge=class{constructor(){this._listeners=new Map}on(e,r,i){this._listeners.has(e)||this._listeners.set(e,new Set);let n={fn:r,once:i?.once??!1};return this._listeners.get(e).add(n),()=>{this._listeners.get(e)?.delete(n)}}_emit(...e){let[r,i]=e,n=this._listeners.get(r);if(n)for(let s of n){try{s.fn(i)}catch(a){console.error(a)}s.once&&n.delete(s)}}};var re=M("mediabunny"),f=$(M("node-av"));var St=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]),q=class t extends re.VideoSampleResource{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 Ke(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 re.VideoSampleColorSpace({primaries:fe(this.frame.colorPrimaries),transfer:pe(this.frame.colorTrc),matrix:he(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||St.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:L(e),stride:this.frame.linesize[r]}))}async toRgbSample(e,r){let i=this.frame.width,n=this.frame.height,s=new f.SoftwareScaleContext,a=this.frame.format,A=Fe("RGBA");s.getContext(i,n,a,i,n,A,f.SWS_BILINEAR);let u=new f.Frame;u.width=i,u.height=n,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 re.VideoSample(new t(u),e)}},de=async(t,e,r)=>{p(t.format!==null),e.format=Fe(t.format),e.width=t.codedWidth,e.height=t.codedHeight,e.sampleAspectRatio=new f.Rational(t.pixelAspectRatio.num,t.pixelAspectRatio.den),e.colorPrimaries=Ge(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=Ye(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=Xe(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},et=async(t,e)=>{let r,i=!1;if(t._data instanceof q)r=t._data.frame;else{if(t.format===null)return null;r=new f.Frame,r.alloc(),i=!0,await de(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),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]${n.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 re.VideoSample(new q(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var be=class extends xe.CustomVideoDecoder{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=J[this.codec];p(i!==void 0);let n;if(this.codec==="vp9"&&r.sideData.alpha?n=b.Codec.findDecoderByName(b.FF_DECODER_LIBVPX_VP9)??b.Codec.findDecoder(i):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?n=b.Codec.findDecoder(i):n=await qe(i)??b.Codec.findDecoder(i),!n)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new b.CodecContext;s.allocContext3(n),this.pixelAspectRatio=Ce({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=b.AVMEDIA_TYPE_VIDEO,s.codecId=i,s.extraData=this.config.description?Buffer.from(L(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=oe(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),n=i!==-1?this.preciseTimings[i]:null;n&&n.microsecondTimestamp===r.microsecondTimestamp?(n.timestamp!==r.timestamp&&(n.timestampIsValid=!1),n.duration!==r.duration&&(n.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,n=Number(this.frame.duration)/1e6,s=oe(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&&(n=a.duration));let A=this.frame.clone();if(!A)throw new Error("Frame clone allocation failed.");this.onSample(new xe.VideoSample(new q(A),{timestamp:i,duration:n}))}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()}};var se=M("mediabunny"),m=$(M("node-av"));var W=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),n=(r&1<<i)>>i;return this.pos++,n}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 n=this.pos;n<i;n++){let s=Math.floor(n/8),a=this.bytes[s],A=7-(n&7);a&=~(1<<A),a|=(r&1<<i-n-1)>>i-n-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 tt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],It=[-1,1,2,3,4,5,6,8],rt=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new W(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let i=e.readBits(4),n=null;i===15?n=e.readBits(24):i<tt.length&&(n=tt[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=It[s]),{objectType:r,frequencyIndex:i,sampleRate:n,channelConfiguration:s,numberOfChannels:a}};var it=t=>{let e=new Uint8Array(7),r=new W(e),{objectType:i,frequencyIndex:n,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,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 Tt=["pcm-s16","pcm-s16be","pcm-s24","pcm-s24be","pcm-s32","pcm-s32be","pcm-f32","pcm-f32be","pcm-f64","pcm-f64be","pcm-u8","pcm-s8","ulaw","alaw"],Pt=["aac","opus","mp3","vorbis","flac","ac3","eac3"],br=[...Pt,...Tt];var Me=[{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 ie=[{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 nt=".01.01.01.01.00",ot=".0.110.01.01.01.0";var Ae=t=>{let{codec:e,codecDescription:r,colorSpace:i,avcCodecInfo:n,hevcCodecInfo:s,vp9CodecInfo:a,av1CodecInfo:A}=t;if(e==="avc"){if(p(t.avcType!==null),n){let u=new Uint8Array([n.avcProfileIndication,n.profileCompatibility,n.avcLevelIndication]);return`avc${t.avcType}.${Ve(u)}`}if(!r||r.byteLength<4)throw new TypeError("AVC decoder description is not provided or is not at least 4 bytes long.");return`avc${t.avcType}.${Ve(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,_,w;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=Ne(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=Re(r),C=x.getUint8(1);u=C>>6&3,d=C&31,c=Ne(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=ne(ie).level;for(let P of ie)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(nt)&&(C=C.slice(0,-nt.length)),C}else if(e==="av1"){if(!A){let P=t.width*t.height,V=ne(ie).level;for(let S of ie)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?je[i.primaries]:1,x=i?.transfer?$e[i.transfer]:1,C=i?.matrix?Ze[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(ot)&&(y=y.slice(0,-ot.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var ye=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 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 ke=t=>t&31,Ue=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 ct=t=>{try{let e=[],r=[],i=[];for(let A of ye(t)){let u=t.subarray(A.offset,A.offset+A.length),d=ke(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 n=e[0],s=Ft(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?i:null}}catch(e){return te._error("Error building AVC Decoder Configuration Record:",e),null}},lt=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 n=0;n<i;n++)e.push(r[n])}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 n=0;n<i;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 i=r.byteLength;e.push(i>>8),e.push(i&255);for(let n=0;n<i;n++)e.push(r[n])}}return new Uint8Array(e)};var dt={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}},Ft=t=>{try{let e=new W(Ue(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),n=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 j=E<6?16:64,H=8,R=8;for(let z=0;z<j;z++){if(R!==0){let ee=K(e);R=(H+ee+256)%256}H=R===0?H:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),K(e),K(e);let D=l(e);for(let E=0;E<D;E++)K(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 D=l(e),E=l(e),X=l(e),j=l(e),H,R;if((d===0?a:0)===0)H=1,R=2-T;else{let ee=a===3?1:2,le=a===1?2:1;H=ee,R=le*(2-T)}x-=H*(D+E),C-=R*(X+j)}let P=2,V=2,S=2,B=0,N={num:1,den:1},F=null,O=null;if(e.readBits(1)){if(e.readBits(1)){let le=e.readBits(8);if(le===255)N={num:e.readBits(16),den:e.readBits(16)};else{let De=dt[le];De&&(N=De)}}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&&st(e);let z=e.readBits(1);z&&st(e),(R||z)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),O=l(e))}if(F===null){p(O===null);let D=n&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&D)F=0,O=0;else{let E=h+1,X=_+1,j=(2-T)*X,H=Me.find(z=>z.level>=s)??ne(Me),R=Math.min(Math.floor(H.maxDpbMbs/(E*j)),16);F=R,O=R}}return p(O!==null),{profileIdc:i,constraintFlags:n,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:O}}catch(e){return te._error("Error parsing AVC SPS:",e),null}},st=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 ve=t=>t>>1&63,Rt=t=>{try{let e=new W(Ue(t));e.skipBits(16),e.readBits(4);let r=e.readBits(3),i=e.readBits(1),{general_profile_space:n,general_tier_flag:s,general_profile_idc:a,general_profile_compatibility_flags:A,general_constraint_indicator_flags:u,general_level_idc:d}=Vt(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),X=l(e),j=l(e),H=l(e),R=1,z=1,ee=h===0?c:0;ee===1?(R=2,z=2):ee===2&&(R=2,z=1),g-=(E+X)*R,x-=(j+H)*z}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)&&Nt(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(Mt(e,S),e.readBits(1)){let E=l(e);for(let X=0;X<E;X++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let B=2,N=2,F=2,O=0,ue=0,D={num:1,den:1};if(e.readBits(1)){let E=Ut(e,r);D=E.pixelAspectRatio,B=E.colourPrimaries,N=E.transferCharacteristics,F=E.matrixCoefficients,O=E.fullRangeFlag,ue=E.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:D,colourPrimaries:B,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:O,maxDecFrameBuffering:V+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:i,generalProfileSpace:n,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:A,generalConstraintIndicatorFlags:u,generalLevelIdc:d,chromaFormatIdc:c,bitDepthLumaMinus8:C,bitDepthChromaMinus8:T,minSpatialSegmentationIdc:ue}}catch(e){return te._error("Error parsing HEVC SPS:",e),null}},At=t=>{try{let e=[],r=[],i=[],n=[];for(let d of ye(t)){let c=t.subarray(d.offset,d.offset+d.length),h=ve(c[0]);h===32?e.push(c):h===33?r.push(c):h===34?i.push(c):(h===39||h===40)&&n.push(c)}if(r.length===0||i.length===0)return null;let s=Rt(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new W(Ue(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),K(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),K(c),K(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}]:[],...n.length?[{arrayCompleteness:1,nalUnitType:ve(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 te._error("Error building HEVC Decoder Configuration Record:",e),null}},Vt=(t,e)=>{let r=t.readBits(2),i=t.readBits(1),n=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:n,general_profile_compatibility_flags:s,general_constraint_indicator_flags:a,general_level_idc:A}},Nt=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 n=Math.min(64,1<<4+(e<<1));e>1&&K(t);for(let s=0;s<n;s++)K(t)}},Mt=(t,e)=>{let r=[];for(let i=0;i<e;i++)r[i]=kt(t,i,e,r)},kt=(t,e,r,i)=>{let n=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);n=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);n=A+u}return n},Ut=(t,e)=>{let r=2,i=2,n=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=dt[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),n=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)&&Lt(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:n,fullRangeFlag:s,minSpatialSegmentationIdc:a}},Lt=(t,e,r)=>{let i=!1,n=!1,s=!1;e&&(i=t.readBits(1)===1,n=t.readBits(1)===1,(i||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,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&&at(t,c,s),n&&at(t,c,s)}},at=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},ut=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 n=0;n<i.length;n++)e.push(i[n])}}return new Uint8Array(e)};var mt=t=>{let e=new W(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=ne(ie).level;for(let B of ie)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}},Dt=function*(t){let e=new W(t),r=()=>{let i=0;for(let n=0;n<8;n++){let s=e.readAlignedByte();if(i|=(s&127)<<n*7,!(s&128))break;if(n===7&&s&128)return null}return i>=2**32-1?null:i};for(;e.getBitsLeft()>=8;){e.skipBits(1);let i=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:i,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},ft=t=>{for(let{type:e,data:r}of Dt(t)){if(e!==1)continue;let i=new W(r),n=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 O=i.readBits(5);if(F===0&&(A=O),O>7){let D=i.readBits(1);F===0&&(u=D)}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;n===2&&x?C=i.readBits(1)?12:10:n<=2&&(C=x?10:8);let T=0;n!==1&&(T=i.readBits(1));let y=1,P=1,V=0;return T||(n===0?(y=1,P=1):n===1?(y=0,P=0):C===12&&(y=i.readBits(1),y&&(P=i.readBits(1))),y&&P&&(V=i.readBits(2))),{profile:n,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 Ee=class extends se.CustomVideoEncoder{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=J[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 We(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 n=Ce({num:(this.config.displayWidth??this.config.width)*this.config.height,den:(this.config.displayHeight??this.config.height)*this.config.width});r.width=this.config.width,r.height=this.config.height,r.pixelFormat=i,r.timeBase=new m.Rational(1,1e6),r.gopSize=60,r.framerate=new m.Rational(Math.round(this.config.framerate??0)||30,1),r.bitRate=BigInt(this.config.bitrate??se.QUALITY_MEDIUM._toVideoBitrate(this.codec,this.config.width,this.config.height)),r.sampleAspectRatio=new m.Rational(n.num,n.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 q)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 de(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 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),n=this.dstFrame}n.pts=BigInt(r.microsecondTimestamp),n.duration=BigInt(r.microsecondDuration),n.timeBase=new m.Rational(1,1e6),n.pictType=i?.keyFrame?m.AV_PICTURE_TYPE_I:m.AV_PICTURE_TYPE_NONE,n.keyFrame=i?.keyFrame?1:0;let a=oe(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(n);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=L(this.packet.data),n=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=oe(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 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=ct(this.packet.data);if(!C)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=lt(C)}else{let C=At(this.packet.data);if(!C)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=ut(C)}d=Ae({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 ye(i))if(this.codec==="avc"){let B=ke(i[S.offset]);B!==7&&B!==8&&B!==13&&C.push(S)}else{let B=ve(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=Ae({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=mt(i);d=Ae({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=ft(i);d=Ae({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=L(_).subarray(8));let w=new se.EncodedPacket(i,this.packet.isKeyframe?"key":"delta",n,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:fe(this.codecContext.colorPrimaries),matrix:he(this.codecContext.colorSpace),transfer:pe(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()}};var Se=M("mediabunny"),I=$(M("node-av"));var pt=M("mediabunny"),ae=$(M("node-av"));var Q=class extends pt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),!(e instanceof ae.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(e.getMediaType()!==ae.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=Qe(this.frame.format);if(e===null){let r=ae.avGetSampleFmtName(this.frame.format);throw new TypeError(`Unsupported audio sample format: ${r} (${this.frame.format})`)}return e}getSampleRate(){return this.frame.sampleRate}getNumberOfChannels(){return this.frame.channels}getNumberOfFrames(){return this.frame.nbSamples}getTimestamp(){return Number(this.frame.pts)/this.frame.timeBase.den}close(){this.frame.free(),this._frame=null}getDataPlane(e){return p(this.frame.data&&e<this.frame.data.length),L(this.frame.data[e])}},_e=(t,e)=>{e.format=Je(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=Z(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var we=class extends Se.CustomAudioDecoder{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=J[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 n=new I.CodecContext;n.allocContext3(i),n.sampleRate=this.config.sampleRate,n.channelLayout=Z(this.config.numberOfChannels),n.timeBase=new I.Rational(1,this.config.sampleRate),n.codecType=I.AVMEDIA_TYPE_AUDIO,n.codecId=r,n.extraData=this.config.description?Buffer.from(L(this.config.description)):null;let s=await n.open2();I.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=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 n=await this.codecContext.receiveFrame(this.frame);if(n===I.AVERROR_EAGAIN||n===I.AVERROR_EOF)break;this.receiveFrame(n)}}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 Se.AudioSample(new Q(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()}};var ce=M("mediabunny"),v=$(M("node-av"));var Ot=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ht=[8e3,12e3,16e3,24e3,48e3],zt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],ht=[32e3,44100,48e3],Le=1024,Ie=class extends ce.CustomAudioEncoder{constructor(){super(...arguments);this.codecContext=null;this.resampler=null;this.dstFrame=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(r,i){let{numberOfChannels:n,sampleRate:s}=i;return r==="aac"&&n>=1&&n<=48&&Ot.includes(s)||r==="opus"&&n>=1&&n<=255&&Ht.includes(s)||r==="mp3"&&n>=1&&n<=2&&zt.includes(s)||r==="vorbis"&&n>=1&&n<=255&&s<=2e5||r==="flac"&&n>=1&&n<=8&&s<=655350||r==="ac3"&&n>=1&&n<=6&&ht.includes(s)||r==="eac3"&&n>=1&&n<=16&&ht.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=J[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=Z(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=J[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??ce.QUALITY_MEDIUM._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 Q?(this.frame.unref(),this.frame.ref(r._data.frame)):_e(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=Z(this.codecContext.channels),A=Z(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||Le,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||Le;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 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 i=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-i,0);let u=this.config.codec,d=this.codecContext.extraData?L(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=rt(d);this.adtsHeaderTemplate=it(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 ce.EncodedPacket(s,"key",i,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 i=this.codecContext.frameSize||Le;p(r<i);let n=Math.ceil((i-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()}};var Ct=Symbol.for("@mediabunny/server loaded");globalThis[Ct]&&k.Logging._error(`[WARNING]
|
|
9
|
+
@mediabunny/server was loaded twice. This will likely cause the package not to work correctly. Check if multiple dependencies are importing different versions of @mediabunny/server, or if something is being bundled incorrectly.`);globalThis[Ct]=!0;var gt=!1,Y={},qt=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof G.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");gt||(gt=!0,Y=t,G.Log.setLevel(G.AV_LOG_ERROR),(0,k.registerDecoder)(be),(0,k.registerEncoder)(Ee),(0,k.registerDecoder)(we),(0,k.registerEncoder)(Ie),(0,k.registerVideoSampleTransformer)(et))},Wt=async(t,e)=>{if(!(t instanceof k.VideoSample)&&!(t instanceof k.AudioSample))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof G.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof k.VideoSample){if(t._data instanceof q)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await de(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new G.Rational(1,1e6)}else t._data instanceof Q?(e.unref(),e.ref(t._data.frame)):_e(t,e),e.timeBase=new G.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};return wt(Gt);})();
|
|
10
10
|
if (typeof module === "object" && typeof module.exports === "object") Object.assign(module.exports, MediabunnyServer)
|