@mediabunny/server 1.45.4 → 1.46.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +16 -0
- package/dist/bundles/mediabunny-server.cjs +67 -12
- package/dist/bundles/mediabunny-server.min.cjs +2 -2
- package/dist/bundles/mediabunny-server.min.mjs +2 -2
- package/dist/bundles/mediabunny-server.mjs +74 -13
- package/dist/mediabunny-server.d.ts +20 -1
- package/dist/modules/src/audio-decoder.d.ts +1 -1
- package/dist/modules/src/audio-decoder.d.ts.map +1 -1
- package/dist/modules/src/audio-decoder.js +8 -1
- package/dist/modules/src/audio-encoder.d.ts +3 -3
- package/dist/modules/src/audio-encoder.d.ts.map +1 -1
- package/dist/modules/src/audio-encoder.js +6 -2
- package/dist/modules/src/audio-sample.d.ts.map +1 -1
- package/dist/modules/src/audio-sample.js +3 -0
- package/dist/modules/src/index.d.ts +21 -2
- package/dist/modules/src/index.d.ts.map +1 -1
- package/dist/modules/src/index.js +24 -2
- package/dist/modules/src/misc.d.ts +2 -2
- package/dist/modules/src/misc.d.ts.map +1 -1
- package/dist/modules/src/misc.js +23 -2
- package/dist/modules/src/video-decoder.d.ts.map +1 -1
- package/dist/modules/src/video-decoder.js +3 -2
- package/dist/modules/src/video-encoder.d.ts +3 -3
- package/dist/modules/src/video-encoder.d.ts.map +1 -1
- package/dist/modules/src/video-encoder.js +8 -4
- package/dist/modules/src/video-sample.d.ts.map +1 -1
- package/dist/modules/src/video-sample.js +3 -0
- package/dist/modules/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/audio-decoder.ts +8 -2
- package/src/audio-encoder.ts +7 -3
- package/src/audio-sample.ts +3 -0
- package/src/index.ts +63 -2
- package/src/misc.ts +31 -2
- package/src/video-decoder.ts +5 -2
- package/src/video-encoder.ts +12 -11
- package/src/video-sample.ts +3 -0
package/README.md
CHANGED
|
@@ -39,6 +39,22 @@ registerMediabunnyServer();
|
|
|
39
39
|
|
|
40
40
|
That's it - you now have access to the full Mediabunny feature set on the server.
|
|
41
41
|
|
|
42
|
+
---
|
|
43
|
+
|
|
44
|
+
An optional `options` parameter is available for further configuration:
|
|
45
|
+
```ts
|
|
46
|
+
import { registerMediabunnyServer } from '@mediabunny/server';
|
|
47
|
+
import * as NodeAv from 'node-av';
|
|
48
|
+
|
|
49
|
+
registerMediabunnyServer({
|
|
50
|
+
// Use a specific hardware rendering device:
|
|
51
|
+
hardwareContext: NodeAv.HardwareContext.create(
|
|
52
|
+
NodeAv.AV_HWDEVICE_TYPE_VAAPI,
|
|
53
|
+
'/dev/dri/renderD128',
|
|
54
|
+
),
|
|
55
|
+
});
|
|
56
|
+
```
|
|
57
|
+
|
|
42
58
|
## Upload media compression example
|
|
43
59
|
|
|
44
60
|
Here, we set up a simple media compression server in Node.js. The client's request body is streamed to Mediabunny, the media gets processed, and the output is streamed directly to the disk. Memory usage is O(1) due to pipelining, and an overly fast uploader is automatically slowed down due to stream backpressure.
|
|
@@ -46,6 +46,7 @@ var MediabunnyServer = (() => {
|
|
|
46
46
|
__export(index_exports, {
|
|
47
47
|
AvFrameAudioSampleResource: () => AvFrameAudioSampleResource,
|
|
48
48
|
AvFrameVideoSampleResource: () => AvFrameVideoSampleResource,
|
|
49
|
+
_serverOptions: () => _serverOptions,
|
|
49
50
|
registerMediabunnyServer: () => registerMediabunnyServer,
|
|
50
51
|
toAvFrame: () => toAvFrame
|
|
51
52
|
});
|
|
@@ -74,13 +75,28 @@ var MediabunnyServer = (() => {
|
|
|
74
75
|
};
|
|
75
76
|
var cachedHardwareContext = void 0;
|
|
76
77
|
var getHardwareContext = () => {
|
|
78
|
+
if (_serverOptions.hardwareContext !== void 0 && typeof _serverOptions.hardwareContext !== "function") {
|
|
79
|
+
return _serverOptions.hardwareContext;
|
|
80
|
+
}
|
|
77
81
|
if (cachedHardwareContext === void 0) {
|
|
78
82
|
cachedHardwareContext = NodeAv.HardwareContext.auto();
|
|
79
83
|
}
|
|
80
84
|
return cachedHardwareContext;
|
|
81
85
|
};
|
|
86
|
+
var validateHwContext = (hw) => {
|
|
87
|
+
if (hw !== null && !(hw instanceof NodeAv.HardwareContext)) {
|
|
88
|
+
throw new TypeError(
|
|
89
|
+
"When serverOptions.hardwareContext is a function, it must return or resolve to a NodeAv.HardwareContext or null."
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
};
|
|
82
93
|
var hardwareDecoderCodecCache = /* @__PURE__ */ new Map();
|
|
83
|
-
var getHardwareDecoderCodec = (codecId) => {
|
|
94
|
+
var getHardwareDecoderCodec = async (codecId) => {
|
|
95
|
+
if (typeof _serverOptions.hardwareContext === "function") {
|
|
96
|
+
const hw = await _serverOptions.hardwareContext(codecId);
|
|
97
|
+
validateHwContext(hw);
|
|
98
|
+
return hw?.getDecoderCodec(codecId) ?? null;
|
|
99
|
+
}
|
|
84
100
|
if (!hardwareDecoderCodecCache.has(codecId)) {
|
|
85
101
|
const hw = getHardwareContext();
|
|
86
102
|
hardwareDecoderCodecCache.set(codecId, hw?.getDecoderCodec(codecId) ?? null);
|
|
@@ -88,7 +104,12 @@ var MediabunnyServer = (() => {
|
|
|
88
104
|
return hardwareDecoderCodecCache.get(codecId);
|
|
89
105
|
};
|
|
90
106
|
var hardwareEncoderCodecCache = /* @__PURE__ */ new Map();
|
|
91
|
-
var getHardwareEncoderCodec = (codecId) => {
|
|
107
|
+
var getHardwareEncoderCodec = async (codecId) => {
|
|
108
|
+
if (typeof _serverOptions.hardwareContext === "function") {
|
|
109
|
+
const hw = await _serverOptions.hardwareContext(codecId);
|
|
110
|
+
validateHwContext(hw);
|
|
111
|
+
return hw?.getEncoderCodec(codecId) ?? null;
|
|
112
|
+
}
|
|
92
113
|
if (!hardwareEncoderCodecCache.has(codecId)) {
|
|
93
114
|
const hw = getHardwareContext();
|
|
94
115
|
hardwareEncoderCodecCache.set(codecId, hw?.getEncoderCodec(codecId) ?? null);
|
|
@@ -508,6 +529,9 @@ var MediabunnyServer = (() => {
|
|
|
508
529
|
}
|
|
509
530
|
constructor(frame) {
|
|
510
531
|
super();
|
|
532
|
+
if (!(frame instanceof NodeAv2.Frame)) {
|
|
533
|
+
throw new TypeError("frame must be a NodeAv.Frame.");
|
|
534
|
+
}
|
|
511
535
|
if (frame.getMediaType() !== NodeAv2.AVMEDIA_TYPE_VIDEO) {
|
|
512
536
|
throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");
|
|
513
537
|
}
|
|
@@ -712,7 +736,7 @@ var MediabunnyServer = (() => {
|
|
|
712
736
|
) {
|
|
713
737
|
codec = NodeAv3.Codec.findDecoder(codecId);
|
|
714
738
|
} else {
|
|
715
|
-
codec = getHardwareDecoderCodec(codecId) ?? NodeAv3.Codec.findDecoder(codecId);
|
|
739
|
+
codec = await getHardwareDecoderCodec(codecId) ?? NodeAv3.Codec.findDecoder(codecId);
|
|
716
740
|
}
|
|
717
741
|
if (!codec) {
|
|
718
742
|
throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);
|
|
@@ -736,8 +760,8 @@ var MediabunnyServer = (() => {
|
|
|
736
760
|
async decode(packet) {
|
|
737
761
|
if (this.codecContext === null) {
|
|
738
762
|
await this.initCodecContext(packet);
|
|
739
|
-
assert(this.codecContext);
|
|
740
763
|
}
|
|
764
|
+
assert(this.codecContext);
|
|
741
765
|
this.packet.isKeyframe = packet.type === "key";
|
|
742
766
|
this.packet.data = Buffer.from(packet.data);
|
|
743
767
|
this.packet.timeBase = { num: 1, den: 1e6 };
|
|
@@ -777,6 +801,7 @@ var MediabunnyServer = (() => {
|
|
|
777
801
|
}
|
|
778
802
|
const ret = await this.codecContext.sendPacket(this.packet);
|
|
779
803
|
NodeAv3.FFmpegError.throwIfError(ret, "Send packet");
|
|
804
|
+
this.packet.unref();
|
|
780
805
|
while (true) {
|
|
781
806
|
const receiveRet = await this.codecContext.receiveFrame(this.frame);
|
|
782
807
|
if (receiveRet === NodeAv3.AVERROR_EAGAIN || receiveRet === NodeAv3.AVERROR_EOF) {
|
|
@@ -2502,11 +2527,11 @@ var MediabunnyServer = (() => {
|
|
|
2502
2527
|
constructor() {
|
|
2503
2528
|
super(...arguments);
|
|
2504
2529
|
this.codecContext = null;
|
|
2530
|
+
this.scaler = null;
|
|
2531
|
+
this.dstFrame = null;
|
|
2505
2532
|
this.lastBuffer = null;
|
|
2506
2533
|
this.packetEmitted = false;
|
|
2507
|
-
this.scaler = null;
|
|
2508
2534
|
this.lastScalerKey = null;
|
|
2509
|
-
this.dstFrame = null;
|
|
2510
2535
|
// Bookkeeping to restore the original timing information
|
|
2511
2536
|
this.preciseTimings = [];
|
|
2512
2537
|
}
|
|
@@ -2527,7 +2552,7 @@ var MediabunnyServer = (() => {
|
|
|
2527
2552
|
} else if (this.config.hardwareAcceleration === "prefer-software") {
|
|
2528
2553
|
codec = NodeAv4.Codec.findEncoder(codecId);
|
|
2529
2554
|
} else {
|
|
2530
|
-
codec = getHardwareEncoderCodec(codecId) ?? NodeAv4.Codec.findEncoder(codecId);
|
|
2555
|
+
codec = await getHardwareEncoderCodec(codecId) ?? NodeAv4.Codec.findEncoder(codecId);
|
|
2531
2556
|
}
|
|
2532
2557
|
if (!codec) {
|
|
2533
2558
|
throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);
|
|
@@ -2605,9 +2630,10 @@ var MediabunnyServer = (() => {
|
|
|
2605
2630
|
async encode(videoSample, options) {
|
|
2606
2631
|
if (this.codecContext === null) {
|
|
2607
2632
|
await this.createCodecContext();
|
|
2608
|
-
assert(this.codecContext);
|
|
2609
2633
|
}
|
|
2634
|
+
assert(this.codecContext);
|
|
2610
2635
|
if (videoSample._data instanceof AvFrameVideoSampleResource) {
|
|
2636
|
+
this.frame.unref();
|
|
2611
2637
|
this.frame.ref(videoSample._data.frame);
|
|
2612
2638
|
} else {
|
|
2613
2639
|
if (videoSample.format === null) {
|
|
@@ -2916,6 +2942,9 @@ var MediabunnyServer = (() => {
|
|
|
2916
2942
|
}
|
|
2917
2943
|
constructor(frame) {
|
|
2918
2944
|
super();
|
|
2945
|
+
if (!(frame instanceof NodeAv5.Frame)) {
|
|
2946
|
+
throw new TypeError("frame must be a NodeAv.Frame.");
|
|
2947
|
+
}
|
|
2919
2948
|
if (frame.getMediaType() !== NodeAv5.AVMEDIA_TYPE_AUDIO) {
|
|
2920
2949
|
throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");
|
|
2921
2950
|
}
|
|
@@ -2964,6 +2993,10 @@ var MediabunnyServer = (() => {
|
|
|
2964
2993
|
|
|
2965
2994
|
// packages/server/src/audio-decoder.ts
|
|
2966
2995
|
var NodeAvAudioDecoder = class extends import_mediabunny5.CustomAudioDecoder {
|
|
2996
|
+
constructor() {
|
|
2997
|
+
super(...arguments);
|
|
2998
|
+
this.codecContext = null;
|
|
2999
|
+
}
|
|
2967
3000
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
2968
3001
|
static supports(codec, config) {
|
|
2969
3002
|
return codec === "aac" || codec === "opus" || codec === "mp3" || codec === "vorbis" || codec === "flac" || codec === "ac3" || codec === "eac3";
|
|
@@ -2992,6 +3025,7 @@ var MediabunnyServer = (() => {
|
|
|
2992
3025
|
this.codecContext = codecContext;
|
|
2993
3026
|
}
|
|
2994
3027
|
async decode(packet) {
|
|
3028
|
+
assert(this.codecContext);
|
|
2995
3029
|
this.packet.isKeyframe = packet.type === "key";
|
|
2996
3030
|
this.packet.data = Buffer.from(packet.data);
|
|
2997
3031
|
this.packet.timeBase = { num: 1, den: this.config.sampleRate };
|
|
@@ -3000,6 +3034,7 @@ var MediabunnyServer = (() => {
|
|
|
3000
3034
|
this.packet.duration = BigInt(Math.round(packet.duration * this.config.sampleRate));
|
|
3001
3035
|
const ret = await this.codecContext.sendPacket(this.packet);
|
|
3002
3036
|
NodeAv6.FFmpegError.throwIfError(ret, "Send packet");
|
|
3037
|
+
this.packet.unref();
|
|
3003
3038
|
while (true) {
|
|
3004
3039
|
const receiveRet = await this.codecContext.receiveFrame(this.frame);
|
|
3005
3040
|
if (receiveRet === NodeAv6.AVERROR_EAGAIN || receiveRet === NodeAv6.AVERROR_EOF) {
|
|
@@ -3018,6 +3053,7 @@ var MediabunnyServer = (() => {
|
|
|
3018
3053
|
this.onSample(new import_mediabunny5.AudioSample(new AvFrameAudioSampleResource(clone)));
|
|
3019
3054
|
}
|
|
3020
3055
|
async flush() {
|
|
3056
|
+
assert(this.codecContext);
|
|
3021
3057
|
const ret = await this.codecContext.sendPacket(null);
|
|
3022
3058
|
NodeAv6.FFmpegError.throwIfError(ret, "Flush decoder");
|
|
3023
3059
|
while (true) {
|
|
@@ -3030,7 +3066,7 @@ var MediabunnyServer = (() => {
|
|
|
3030
3066
|
this.codecContext.flushBuffers();
|
|
3031
3067
|
}
|
|
3032
3068
|
close() {
|
|
3033
|
-
this.codecContext
|
|
3069
|
+
this.codecContext?.freeContext();
|
|
3034
3070
|
this.frame.free();
|
|
3035
3071
|
this.packet.free();
|
|
3036
3072
|
}
|
|
@@ -3048,13 +3084,13 @@ var MediabunnyServer = (() => {
|
|
|
3048
3084
|
constructor() {
|
|
3049
3085
|
super(...arguments);
|
|
3050
3086
|
this.codecContext = null;
|
|
3087
|
+
this.resampler = null;
|
|
3088
|
+
this.dstFrame = null;
|
|
3051
3089
|
this.firstExpectedTimestamp = null;
|
|
3052
3090
|
this.outputTimestampOffset = 0;
|
|
3053
|
-
this.resampler = null;
|
|
3054
3091
|
this.inputParametersKey = null;
|
|
3055
3092
|
this.resamplerInputSampleRate = null;
|
|
3056
3093
|
this.nextResamplerPts = null;
|
|
3057
|
-
this.dstFrame = null;
|
|
3058
3094
|
this.packetEmitted = false;
|
|
3059
3095
|
this.adtsHeaderTemplate = null;
|
|
3060
3096
|
}
|
|
@@ -3106,6 +3142,7 @@ var MediabunnyServer = (() => {
|
|
|
3106
3142
|
}
|
|
3107
3143
|
this.firstExpectedTimestamp ??= audioSample.timestamp;
|
|
3108
3144
|
if (audioSample._data instanceof AvFrameAudioSampleResource) {
|
|
3145
|
+
this.frame.unref();
|
|
3109
3146
|
this.frame.ref(audioSample._data.frame);
|
|
3110
3147
|
} else {
|
|
3111
3148
|
copyAudioSampleToAvFrame(audioSample, this.frame);
|
|
@@ -3319,11 +3356,21 @@ var MediabunnyServer = (() => {
|
|
|
3319
3356
|
}
|
|
3320
3357
|
globalThis[SERVER_LOADED_SYMBOL] = true;
|
|
3321
3358
|
var registered = false;
|
|
3322
|
-
var
|
|
3359
|
+
var _serverOptions = {};
|
|
3360
|
+
var registerMediabunnyServer = (options = {}) => {
|
|
3361
|
+
if (typeof options !== "object" || !options) {
|
|
3362
|
+
throw new TypeError("options must be an object.");
|
|
3363
|
+
}
|
|
3364
|
+
if (options.hardwareContext != null && !(options.hardwareContext instanceof NodeAv8.HardwareContext || typeof options.hardwareContext === "function")) {
|
|
3365
|
+
throw new TypeError(
|
|
3366
|
+
"options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null."
|
|
3367
|
+
);
|
|
3368
|
+
}
|
|
3323
3369
|
if (registered) {
|
|
3324
3370
|
return;
|
|
3325
3371
|
}
|
|
3326
3372
|
registered = true;
|
|
3373
|
+
_serverOptions = options;
|
|
3327
3374
|
NodeAv8.Log.setLevel(NodeAv8.AV_LOG_ERROR);
|
|
3328
3375
|
(0, import_mediabunny7.registerDecoder)(NodeAvVideoDecoder);
|
|
3329
3376
|
(0, import_mediabunny7.registerEncoder)(NodeAvVideoEncoder);
|
|
@@ -3332,8 +3379,15 @@ var MediabunnyServer = (() => {
|
|
|
3332
3379
|
(0, import_mediabunny7.registerVideoSampleTransformer)(transformVideoSample);
|
|
3333
3380
|
};
|
|
3334
3381
|
var toAvFrame = async (sample, frame) => {
|
|
3382
|
+
if (!(sample instanceof import_mediabunny7.VideoSample) && !(sample instanceof import_mediabunny7.AudioSample)) {
|
|
3383
|
+
throw new TypeError("sample must be a VideoSample or an AudioSample.");
|
|
3384
|
+
}
|
|
3385
|
+
if (!(frame instanceof NodeAv8.Frame)) {
|
|
3386
|
+
throw new TypeError("frame must be a NodeAv.Frame.");
|
|
3387
|
+
}
|
|
3335
3388
|
if (sample instanceof import_mediabunny7.VideoSample) {
|
|
3336
3389
|
if (sample._data instanceof AvFrameVideoSampleResource) {
|
|
3390
|
+
frame.unref();
|
|
3337
3391
|
frame.ref(sample._data.frame);
|
|
3338
3392
|
} else {
|
|
3339
3393
|
if (sample.format === null) {
|
|
@@ -3346,6 +3400,7 @@ var MediabunnyServer = (() => {
|
|
|
3346
3400
|
frame.timeBase = new NodeAv8.Rational(1, 1e6);
|
|
3347
3401
|
} else {
|
|
3348
3402
|
if (sample._data instanceof AvFrameAudioSampleResource) {
|
|
3403
|
+
frame.unref();
|
|
3349
3404
|
frame.ref(sample._data.frame);
|
|
3350
3405
|
} else {
|
|
3351
3406
|
copyAudioSampleToAvFrame(sample, frame);
|
|
@@ -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 ft=Object.create;var le=Object.defineProperty;var pt=Object.getOwnPropertyDescriptor;var ht=Object.getOwnPropertyNames;var gt=Object.getPrototypeOf,bt=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 Ct=(t,e)=>{for(var r in e)le(t,r,{get:e[r],enumerable:!0})},Ue=(t,e,r,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of ht(e))!bt.call(t,o)&&o!==r&&le(t,o,{get:()=>e[o],enumerable:!(i=pt(e,o))||i.enumerable});return t};var Q=(t,e,r)=>(r=t!=null?ft(gt(t)):{},Ue(e||!t||!t.__esModule?le(r,"default",{value:t,enumerable:!0}):r,t)),xt=t=>Ue(le({},"__esModule",{value:!0}),t);var Ot={};Ct(Ot,{AvFrameAudioSampleResource:()=>G,AvFrameVideoSampleResource:()=>z,registerMediabunnyServer:()=>Lt,toAvFrame:()=>Dt});var X=M("mediabunny"),ee=Q(M("node-av"));var pe=M("mediabunny"),C=Q(M("node-av"));var n=Q(M("node-av"));var Y={avc:n.AV_CODEC_ID_H264,hevc:n.AV_CODEC_ID_HEVC,vp8:n.AV_CODEC_ID_VP8,vp9:n.AV_CODEC_ID_VP9,av1:n.AV_CODEC_ID_AV1,aac:n.AV_CODEC_ID_AAC,opus:n.AV_CODEC_ID_OPUS,mp3:n.AV_CODEC_ID_MP3,vorbis:n.AV_CODEC_ID_VORBIS,flac:n.AV_CODEC_ID_FLAC,ac3:n.AV_CODEC_ID_AC3,eac3:n.AV_CODEC_ID_EAC3},Ie,ke=()=>(Ie===void 0&&(Ie=n.HardwareContext.auto()),Ie),_e=new Map,Le=t=>{if(!_e.has(t)){let e=ke();_e.set(t,e?.getDecoderCodec(t)??null)}return _e.get(t)},Ee=new Map,De=t=>{if(!Ee.has(t)){let e=ke();Ee.set(t,e?.getEncoderCodec(t)??null)}return Ee.get(t)},Oe=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},de=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},ze=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},Ae=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},He=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},ue=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},qe=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}},We=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}},Ge=t=>{switch(t){case"u8":return n.AV_SAMPLE_FMT_U8;case"s16":return n.AV_SAMPLE_FMT_S16;case"s32":return n.AV_SAMPLE_FMT_S32;case"f32":return n.AV_SAMPLE_FMT_FLT;case"u8-planar":return n.AV_SAMPLE_FMT_U8P;case"s16-planar":return n.AV_SAMPLE_FMT_S16P;case"s32-planar":return n.AV_SAMPLE_FMT_S32P;case"f32-planar":return n.AV_SAMPLE_FMT_FLTP;default:return n.AV_SAMPLE_FMT_NONE}},J=t=>{switch(t){case 1:return n.AV_CHANNEL_LAYOUT_MONO;case 2:return n.AV_CHANNEL_LAYOUT_STEREO;case 4:return n.AV_CHANNEL_LAYOUT_QUAD;case 6:return n.AV_CHANNEL_LAYOUT_5POINT1_BACK;case 8:return n.AV_CHANNEL_LAYOUT_7POINT1;default:return{nbChannels:t,order:n.AV_CHANNEL_ORDER_UNSPEC,mask:0n}}};function p(t){if(!t)throw new Error("Assertion failed.")}var te=t=>t&&t[t.length-1];var l=t=>{let e=0;for(;t.readBits(1)===0&&e<32;)e++;if(e>=32)throw new Error("Invalid exponential-Golomb code.");return(1<<e)-1+t.readBits(e)},W=t=>{let e=l(t);return(e&1)===0?-(e>>1):e+1>>1};var U=t=>t.constructor===Uint8Array?t:ArrayBuffer.isView(t)?new Uint8Array(t.buffer,t.byteOffset,t.byteLength):new Uint8Array(t),we=t=>t.constructor===DataView?t:ArrayBuffer.isView(t)?new DataView(t.buffer,t.byteOffset,t.byteLength):new DataView(t);var Xe={bt709:1,bt470bg:5,smpte170m:6,bt2020:9,smpte432:12};var Ye={bt709:1,smpte170m:6,linear:8,"iec61966-2-1":13,pq:16,hlg:18};var Ke={rgb:0,bt709:1,bt470bg:5,smpte170m:6,"bt2020-ncl":9};var Te=t=>[...t].map(e=>e.toString(16).padStart(2,"0")).join("");var Pe=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 re=(t,e,r)=>{let i=0,o=t.length-1,s=-1;for(;i<=o;){let a=i+(o-i+1)/2|0;r(t[a])<=e?(s=a,i=a+1):o=a-1}return s};var qt=1e6*(1+Number.EPSILON);var me=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 j=M("mediabunny"),f=Q(M("node-av"));var vt=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 j.VideoSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameVideoSampleResource has been closed.");return this._frame}constructor(e){if(super(),e.getMediaType()!==f.AVMEDIA_TYPE_VIDEO)throw new Error("AvFrameVideoSampleResource must be initialized with a video frame.");this._frame=e}getFormat(){return qe(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 j.VideoSampleColorSpace({primaries:de(this.frame.colorPrimaries),transfer:Ae(this.frame.colorTrc),matrix:ue(this.frame.colorSpace),fullRange:this.frame.colorRange===f.AVCOL_RANGE_JPEG||vt.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:U(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 j.VideoSample(new t(u),e)}},se=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=Oe(t.colorSpace.primaries??"unknown")??f.AVCOL_PRI_UNSPECIFIED,e.colorSpace=He(t.colorSpace.matrix??"unknown")??f.AVCOL_SPC_UNSPECIFIED,e.colorTrc=ze(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},Qe=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 se(t,r,null)}let o=[];(t.squarePixelWidth!==t.codedWidth||t.squarePixelHeight!==t.codedHeight)&&(o.push(`scale=${t.squarePixelWidth}:${t.squarePixelHeight}`),o.push("setsar=1")),e.rotation===90?o.push("transpose=1"):e.rotation===180?o.push("transpose=1,transpose=1"):e.rotation===270&&o.push("transpose=2"),o.push(`crop=${Math.round(e.crop.width)}:${Math.round(e.crop.height)}:${Math.round(e.crop.left)}:${Math.round(e.crop.top)}`),e.fit==="fill"?o.push(`scale=${e.width}:${e.height}`):e.fit==="contain"?(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=decrease`),o.push(`pad=${e.width}:${e.height}:(ow-iw)/2:(oh-ih)/2:color=black@0`)):e.fit==="cover"&&(o.push(`scale=${e.width}:${e.height}:force_original_aspect_ratio=increase`),o.push(`crop=${e.width}:${e.height}`)),o.push("setsar=1");let s=new f.FilterGraph;s.alloc();try{let a=`video_size=${r.width}x${r.height}:pix_fmt=${r.format}:time_base=1/1000000:pixel_aspect=${t.pixelAspectRatio.num}/${t.pixelAspectRatio.den}`,A=s.createFilter(f.Filter.getByName("buffer"),"src",a),u=s.createFilter(f.Filter.getByName("buffersink"),"sink");p(A&&u);let d=f.FilterInOut.createList([{name:"in",filterCtx:A,padIdx:0}]),c=f.FilterInOut.createList([{name:"out",filterCtx:u,padIdx:0}]),h=s.parsePtr(`[in]${o.join(",")}[out]`,c,d);f.FFmpegError.throwIfError(h,"FilterGraph.parsePtr");let I=await s.config();f.FFmpegError.throwIfError(I,"FilterGraph.config");let _=await A.buffersrcAddFrame(r);f.FFmpegError.throwIfError(_,"buffersrcAddFrame"),await A.buffersrcAddFrame(null);let g=new f.Frame;g.alloc();let x=await u.buffersinkGetFrame(g);return f.FFmpegError.throwIfError(x,"buffersinkGetFrame"),new j.VideoSample(new z(g),{timestamp:t.timestamp,duration:t.duration,rotation:0})}finally{s.free(),i&&r.free()}};var fe=class extends pe.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 C.Frame,this.frame.alloc(),this.packet=new C.Packet,this.packet.alloc()}async initCodecContext(r){p(this.codecContext===null);let i=Y[this.codec];p(i!==void 0);let o;if(this.codec==="vp9"&&r.sideData.alpha?o=C.Codec.findDecoderByName(C.FF_DECODER_LIBVPX_VP9)??C.Codec.findDecoder(i):this.config.hardwareAcceleration==="prefer-software"||this.codec==="av1"?o=C.Codec.findDecoder(i):o=Le(i)??C.Codec.findDecoder(i),!o)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let s=new C.CodecContext;s.allocContext3(o),this.pixelAspectRatio=me({num:(this.config.displayAspectWidth??this.config.codedWidth??0)*(this.config.codedHeight??0),den:(this.config.displayAspectHeight??this.config.codedHeight??0)*(this.config.codedWidth??0)||1}),s.width=this.config.codedWidth??0,s.height=this.config.codedHeight??0,s.codecType=C.AVMEDIA_TYPE_VIDEO,s.codecId=i,s.extraData=this.config.description?Buffer.from(U(this.config.description)):null,s.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let a=await s.open2();C.FFmpegError.throwIfError(a,"Open codec context"),this.codecContext=s}async decode(r){if(this.codecContext===null&&(await this.initCodecContext(r),p(this.codecContext)),this.packet.isKeyframe=r.type==="key",this.packet.data=Buffer.from(r.data),this.packet.timeBase={num:1,den:1e6},this.packet.pts=BigInt(r.microsecondTimestamp),this.packet.dts=C.AV_NOPTS_VALUE,this.packet.duration=BigInt(r.microsecondDuration),r.sideData.alpha){let a=Buffer.alloc(8+r.sideData.alpha.byteLength);a[7]=1,a.set(r.sideData.alpha,8),this.packet.addSideData(C.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL,a)}let i=re(this.preciseTimings,r.microsecondTimestamp,a=>a.microsecondTimestamp),o=i!==-1?this.preciseTimings[i]:null;o&&o.microsecondTimestamp===r.microsecondTimestamp?(o.timestamp!==r.timestamp&&(o.timestampIsValid=!1),o.duration!==r.duration&&(o.durationIsValid=!1)):(this.preciseTimings.splice(i+1,0,{microsecondTimestamp:r.microsecondTimestamp,timestamp:r.timestamp,duration:r.duration,timestampIsValid:!0,durationIsValid:!0}),this.preciseTimings.length>128&&this.preciseTimings.shift());let s=await this.codecContext.sendPacket(this.packet);for(C.FFmpegError.throwIfError(s,"Send packet");;){let a=await this.codecContext.receiveFrame(this.frame);if(a===C.AVERROR_EAGAIN||a===C.AVERROR_EOF)break;this.receiveFrame(a)}}receiveFrame(r){C.FFmpegError.throwIfError(r,"Receive frame"),this.frame.sampleAspectRatio=new C.Rational(this.pixelAspectRatio.num,this.pixelAspectRatio.den);let i=Number(this.frame.pts)/1e6,o=Number(this.frame.duration)/1e6,s=re(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 pe.VideoSample(new z(A),{timestamp:i,duration:o}))}async flush(){if(!this.codecContext)return;let r=await this.codecContext.sendPacket(null);for(C.FFmpegError.throwIfError(r,"Flush decoder");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===C.AVERROR_EAGAIN||i===C.AVERROR_EOF)break;this.receiveFrame(i)}this.codecContext.flushBuffers()}close(){this.codecContext?.freeContext(),this.frame.free(),this.packet.free()}};var ie=M("mediabunny"),m=Q(M("node-av"));var H=class t{constructor(e){this.bytes=e;this.pos=0}seekToByte(e){this.pos=8*e}readBit(){let e=Math.floor(this.pos/8),r=this.bytes[e]??0,i=7-(this.pos&7),o=(r&1<<i)>>i;return this.pos++,o}readBits(e){if(e===1)return this.readBit();let r=0;for(let i=0;i<e;i++)r<<=1,r|=this.readBit();return r}writeBits(e,r){let i=this.pos+e;for(let o=this.pos;o<i;o++){let s=Math.floor(o/8),a=this.bytes[s],A=7-(o&7);a&=~(1<<A),a|=(r&1<<i-o-1)>>i-o-1<<A,this.bytes[s]=a}this.pos=i}readAlignedByte(){if(this.pos%8!==0)throw new Error("Bitstream is not byte-aligned.");let e=this.pos/8,r=this.bytes[e]??0;return this.pos+=8,r}skipBits(e){this.pos+=e}getBitsLeft(){return this.bytes.length*8-this.pos}clone(){let e=new t(this.bytes);return e.pos=this.pos,e}};var Je=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],yt=[-1,1,2,3,4,5,6,8],$e=t=>{if(!t||t.byteLength<2)throw new TypeError("AAC description must be at least 2 bytes long.");let e=new H(t),r=e.readBits(5);r===31&&(r=32+e.readBits(6));let i=e.readBits(4),o=null;i===15?o=e.readBits(24):i<Je.length&&(o=Je[i]);let s=e.readBits(4),a=null;return s>=1&&s<=7&&(a=yt[s]),{objectType:r,frequencyIndex:i,sampleRate:o,channelConfiguration:s,numberOfChannels:a}};var je=t=>{let e=new Uint8Array(7),r=new H(e),{objectType:i,frequencyIndex:o,channelConfiguration:s}=t,a=i-1;return r.writeBits(12,4095),r.writeBits(1,0),r.writeBits(2,0),r.writeBits(1,1),r.writeBits(2,a),r.writeBits(4,o),r.writeBits(1,0),r.writeBits(3,s),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.writeBits(1,0),r.skipBits(13),r.writeBits(11,2047),r.writeBits(2,0),{header:e,bitstream:r}};var It=["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"],_t=["aac","opus","mp3","vorbis","flac","ac3","eac3"],Ar=[..._t,...It];var Fe=[{maxMacroblocks:99,maxBitrate:64e3,maxDpbMbs:396,level:10},{maxMacroblocks:396,maxBitrate:192e3,maxDpbMbs:900,level:11},{maxMacroblocks:396,maxBitrate:384e3,maxDpbMbs:2376,level:12},{maxMacroblocks:396,maxBitrate:768e3,maxDpbMbs:2376,level:13},{maxMacroblocks:396,maxBitrate:2e6,maxDpbMbs:2376,level:20},{maxMacroblocks:792,maxBitrate:4e6,maxDpbMbs:4752,level:21},{maxMacroblocks:1620,maxBitrate:4e6,maxDpbMbs:8100,level:22},{maxMacroblocks:1620,maxBitrate:1e7,maxDpbMbs:8100,level:30},{maxMacroblocks:3600,maxBitrate:14e6,maxDpbMbs:18e3,level:31},{maxMacroblocks:5120,maxBitrate:2e7,maxDpbMbs:20480,level:32},{maxMacroblocks:8192,maxBitrate:2e7,maxDpbMbs:32768,level:40},{maxMacroblocks:8192,maxBitrate:5e7,maxDpbMbs:32768,level:41},{maxMacroblocks:8704,maxBitrate:5e7,maxDpbMbs:34816,level:42},{maxMacroblocks:22080,maxBitrate:135e6,maxDpbMbs:110400,level:50},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:51},{maxMacroblocks:36864,maxBitrate:24e7,maxDpbMbs:184320,level:52},{maxMacroblocks:139264,maxBitrate:24e7,maxDpbMbs:696320,level:60},{maxMacroblocks:139264,maxBitrate:48e7,maxDpbMbs:696320,level:61},{maxMacroblocks:139264,maxBitrate:8e8,maxDpbMbs:696320,level:62}];var Z=[{maxPictureSize:36864,maxBitrate:2e5,level:10},{maxPictureSize:73728,maxBitrate:8e5,level:11},{maxPictureSize:122880,maxBitrate:18e5,level:20},{maxPictureSize:245760,maxBitrate:36e5,level:21},{maxPictureSize:552960,maxBitrate:72e5,level:30},{maxPictureSize:983040,maxBitrate:12e6,level:31},{maxPictureSize:2228224,maxBitrate:18e6,level:40},{maxPictureSize:2228224,maxBitrate:3e7,level:41},{maxPictureSize:8912896,maxBitrate:6e7,level:50},{maxPictureSize:8912896,maxBitrate:12e7,level:51},{maxPictureSize:8912896,maxBitrate:18e7,level:52},{maxPictureSize:35651584,maxBitrate:18e7,level:60},{maxPictureSize:35651584,maxBitrate:24e7,level:61},{maxPictureSize:35651584,maxBitrate:48e7,level:62}];var Ze=".01.01.01.01.00",et=".0.110.01.01.01.0";var ae=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}.${Te(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}.${Te(r.subarray(1,4))}`}else if(e==="hevc"){let u,d,c,h,I,_;if(s)u=s.generalProfileSpace,d=s.generalProfileIdc,c=Pe(s.generalProfileCompatibilityFlags),h=s.generalTierFlag,I=s.generalLevelIdc,_=[...s.generalConstraintIndicatorFlags];else{if(!r||r.byteLength<23)throw new TypeError("HEVC decoder description is not provided or is not at least 23 bytes long.");let x=we(r),b=x.getUint8(1);u=b>>6&3,d=b&31,c=Pe(x.getUint32(2)),h=b>>5&1,I=x.getUint8(12),_=[];for(let T=0;T<6;T++)_.push(x.getUint8(6+T))}let g="hev1.";for(g+=["","A","B","C"][u]+d,g+=".",g+=c.toString(16).toUpperCase(),g+=".",g+=h===0?"L":"H",g+=I;_.length>0&&_[_.length-1]===0;)_.pop();return _.length>0&&(g+=".",g+=_.map(x=>x.toString(16).toUpperCase()).join(".")),g}else{if(e==="vp8")return"vp8";if(e==="vp9"){if(!a){let T=t.width*t.height,y=te(Z).level;for(let P of Z)if(T<=P.maxPictureSize){y=P.level;break}return`vp09.00.${y.toString().padStart(2,"0")}.08`}let u=a.profile.toString().padStart(2,"0"),d=a.level.toString().padStart(2,"0"),c=a.bitDepth.toString().padStart(2,"0"),h=a.chromaSubsampling.toString().padStart(2,"0"),I=a.colourPrimaries.toString().padStart(2,"0"),_=a.transferCharacteristics.toString().padStart(2,"0"),g=a.matrixCoefficients.toString().padStart(2,"0"),x=a.videoFullRangeFlag.toString().padStart(2,"0"),b=`vp09.${u}.${d}.${c}.${h}`;return b+=`.${I}.${_}.${g}.${x}`,b.endsWith(Ze)&&(b=b.slice(0,-Ze.length)),b}else if(e==="av1"){if(!A){let P=t.width*t.height,V=te(Z).level;for(let E of Z)if(P<=E.maxPictureSize){V=E.level;break}return`av01.0.${V.toString().padStart(2,"0")}M.08`}let u=A.profile,d=A.level.toString().padStart(2,"0"),c=A.tier?"H":"M",h=A.bitDepth.toString().padStart(2,"0"),I=A.monochrome?"1":"0",_=100*A.chromaSubsamplingX+10*A.chromaSubsamplingY+1*(A.chromaSubsamplingX&&A.chromaSubsamplingY?A.chromaSamplePosition:0),g=i?.primaries?Xe[i.primaries]:1,x=i?.transfer?Ye[i.transfer]:1,b=i?.matrix?Ke[i.matrix]:1,T=i?.fullRange?1:0,y=`av01.${u}.${d}${c}.${h}`;return y+=`.${I}.${_.toString().padStart(3,"0")}`,y+=`.${g.toString().padStart(2,"0")}`,y+=`.${x.toString().padStart(2,"0")}`,y+=`.${b.toString().padStart(2,"0")}`,y+=`.${T}`,y.endsWith(et)&&(y=y.slice(0,-et.length)),y}}throw new TypeError(`Unhandled codec '${e}'.`)};var ge=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 Re=t=>t&31,Ve=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)},Br=new Uint8Array([0,0,0,1]);var it=t=>{try{let e=[],r=[],i=[];for(let A of ge(t)){let u=t.subarray(A.offset,A.offset+A.length),d=Re(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=Et(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}},nt=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 ot={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}},Et=t=>{try{let e=new H(Ve(t));if(e.skipBits(1),e.skipBits(2),e.readBits(5)!==7)return null;let i=e.readAlignedByte(),o=e.readAlignedByte(),s=e.readAlignedByte();l(e);let a=1,A=0,u=0,d=0;if((i===100||i===110||i===122||i===244||i===44||i===83||i===86||i===118||i===128)&&(a=l(e),a===3&&(d=e.readBits(1)),A=l(e),u=l(e),e.skipBits(1),e.readBits(1))){for(let S=0;S<(a!==3?8:12);S++)if(e.readBits(1)){let K=S<6?16:64,D=8,R=8;for(let O=0;O<K;O++){if(R!==0){let $=W(e);R=(D+$+256)%256}D=R===0?D:R}}}l(e);let c=l(e);if(c===0)l(e);else if(c===1){e.skipBits(1),W(e),W(e);let k=l(e);for(let S=0;S<k;S++)W(e)}l(e),e.skipBits(1);let h=l(e),I=l(e),_=16*(h+1),g=16*(I+1),x=_,b=g,T=e.readBits(1);if(T||e.skipBits(1),e.skipBits(1),e.readBits(1)){let k=l(e),S=l(e),q=l(e),K=l(e),D,R;if((d===0?a:0)===0)D=1,R=2-T;else{let $=a===3?1:2,oe=a===1?2:1;D=$,R=oe*(2-T)}x-=D*(k+S),b-=R*(q+K)}let P=2,V=2,E=2,w=0,N={num:1,den:1},F=null,L=null;if(e.readBits(1)){if(e.readBits(1)){let oe=e.readBits(8);if(oe===255)N={num:e.readBits(16),den:e.readBits(16)};else{let Me=ot[oe];Me&&(N=Me)}}e.readBits(1)&&e.skipBits(1),e.readBits(1)&&(e.skipBits(3),w=e.readBits(1),e.readBits(1)&&(P=e.readBits(8),V=e.readBits(8),E=e.readBits(8))),e.readBits(1)&&(l(e),l(e)),e.readBits(1)&&(e.skipBits(32),e.skipBits(32),e.skipBits(1));let R=e.readBits(1);R&&tt(e);let O=e.readBits(1);O&&tt(e),(R||O)&&e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(1),l(e),l(e),l(e),l(e),F=l(e),L=l(e))}if(F===null){p(L===null);let k=o&16;if((i===44||i===86||i===100||i===110||i===122||i===244)&&k)F=0,L=0;else{let S=h+1,q=I+1,K=(2-T)*q,D=Fe.find(O=>O.level>=s)??te(Fe),R=Math.min(Math.floor(D.maxDpbMbs/(S*K)),16);F=R,L=R}}return p(L!==null),{profileIdc:i,constraintFlags:o,levelIdc:s,frameMbsOnlyFlag:T,chromaFormatIdc:a,bitDepthLumaMinus8:A,bitDepthChromaMinus8:u,codedWidth:_,codedHeight:g,displayWidth:x,displayHeight:b,pixelAspectRatio:N,colourPrimaries:P,matrixCoefficients:E,transferCharacteristics:V,fullRangeFlag:w,numReorderFrames:F,maxDecFrameBuffering:L}}catch(e){return console.error("Error parsing AVC SPS:",e),null}},tt=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 he=t=>t>>1&63,Bt=t=>{try{let e=new H(Ve(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}=wt(e,r);l(e);let c=l(e),h=0;c===3&&(h=e.readBits(1));let I=l(e),_=l(e),g=I,x=_;if(e.readBits(1)){let S=l(e),q=l(e),K=l(e),D=l(e),R=1,O=1,$=h===0?c:0;$===1?(R=2,O=2):$===2&&(R=2,O=1),g-=(S+q)*R,x-=(K+D)*O}let b=l(e),T=l(e);l(e);let P=e.readBits(1)?0:r,V=0;for(let S=P;S<=r;S++)l(e),V=l(e),l(e);l(e),l(e),l(e),l(e),l(e),l(e),e.readBits(1)&&e.readBits(1)&&Tt(e),e.skipBits(1),e.skipBits(1),e.readBits(1)&&(e.skipBits(4),e.skipBits(4),l(e),l(e),e.skipBits(1));let E=l(e);if(Pt(e,E),e.readBits(1)){let S=l(e);for(let q=0;q<S;q++)l(e),e.skipBits(1)}e.skipBits(1),e.skipBits(1);let w=2,N=2,F=2,L=0,ce=0,k={num:1,den:1};if(e.readBits(1)){let S=Rt(e,r);k=S.pixelAspectRatio,w=S.colourPrimaries,N=S.transferCharacteristics,F=S.matrixCoefficients,L=S.fullRangeFlag,ce=S.minSpatialSegmentationIdc}return{displayWidth:g,displayHeight:x,pixelAspectRatio:k,colourPrimaries:w,transferCharacteristics:N,matrixCoefficients:F,fullRangeFlag:L,maxDecFrameBuffering:V+1,spsMaxSubLayersMinus1:r,spsTemporalIdNestingFlag:i,generalProfileSpace:o,generalTierFlag:s,generalProfileIdc:a,generalProfileCompatibilityFlags:A,generalConstraintIndicatorFlags:u,generalLevelIdc:d,chromaFormatIdc:c,bitDepthLumaMinus8:b,bitDepthChromaMinus8:T,minSpatialSegmentationIdc:ce}}catch(e){return console.error("Error parsing HEVC SPS:",e),null}},st=t=>{try{let e=[],r=[],i=[],o=[];for(let d of ge(t)){let c=t.subarray(d.offset,d.offset+d.length),h=he(c[0]);h===32?e.push(c):h===33?r.push(c):h===34?i.push(c):(h===39||h===40)&&o.push(c)}if(r.length===0||i.length===0)return null;let s=Bt(r[0]);if(!s)return null;let a=0;if(i.length>0){let d=i[0],c=new H(Ve(d));c.skipBits(16),l(c),l(c),c.skipBits(1),c.skipBits(1),c.skipBits(3),c.skipBits(1),c.skipBits(1),l(c),l(c),W(c),c.skipBits(1),c.skipBits(1),c.readBits(1)&&l(c),W(c),W(c),c.skipBits(1),c.skipBits(1),c.skipBits(1),c.skipBits(1);let h=c.readBits(1),I=c.readBits(1);!h&&!I?a=0:h&&!I?a=2:!h&&I?a=3:a=0}let A=[...e.length?[{arrayCompleteness:1,nalUnitType:32,nalUnits:e}]:[],...r.length?[{arrayCompleteness:1,nalUnitType:33,nalUnits:r}]:[],...i.length?[{arrayCompleteness:1,nalUnitType:34,nalUnits:i}]:[],...o.length?[{arrayCompleteness:1,nalUnitType:he(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}},wt=(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}},Tt=t=>{for(let e=0;e<4;e++)for(let r=0;r<(e===3?2:6);r++)if(!t.readBits(1))l(t);else{let o=Math.min(64,1<<4+(e<<1));e>1&&W(t);for(let s=0;s<o;s++)W(t)}},Pt=(t,e)=>{let r=[];for(let i=0;i<e;i++)r[i]=Ft(t,i,e,r)},Ft=(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},Rt=(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=ot[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)&&Vt(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}},Vt=(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&&rt(t,c,s),o&&rt(t,c,s)}},rt=(t,e,r)=>{for(let i=0;i<e;i++)l(t),l(t),r&&(l(t),l(t)),t.readBits(1)},at=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 ct=t=>{let e=new H(t);if(e.readBits(2)!==2)return null;let i=e.readBits(1),s=(e.readBits(1)<<1)+i;if(s===3&&e.skipBits(1),e.readBits(1)===1||e.readBits(1)!==0||(e.skipBits(2),e.readBits(24)!==4817730))return null;let d=8;s>=2&&(d=e.readBits(1)?12:10);let c=e.readBits(3),h=0,I=0;if(c!==7)if(I=e.readBits(1),s===1||s===3){let N=e.readBits(1),F=e.readBits(1);h=!N&&!F?3:N&&!F?2:1,e.skipBits(1)}else h=1;else h=3,I=1;let _=e.readBits(16),g=e.readBits(16),x=_+1,b=g+1,T=x*b,y=te(Z).level;for(let w of Z)if(T<=w.maxPictureSize){y=w.level;break}return{profile:s,level:y,bitDepth:d,chromaSubsampling:h,videoFullRangeFlag:I,colourPrimaries:c===2?1:c===1?6:2,transferCharacteristics:c===2?1:c===1?6:2,matrixCoefficients:c===7?0:c===2?1:c===1?6:2}},Nt=function*(t){let e=new H(t),r=()=>{let i=0;for(let o=0;o<8;o++){let s=e.readAlignedByte();if(i|=(s&127)<<o*7,!(s&128))break;if(o===7&&s&128)return null}return i>=2**32-1?null:i};for(;e.getBitsLeft()>=8;){e.skipBits(1);let i=e.readBits(4),o=e.readBits(1),s=e.readBits(1);e.skipBits(1),o&&e.skipBits(8);let a;if(s){let A=r();if(A===null)return;a=A}else a=Math.floor(e.getBitsLeft()/8);p(e.pos%8===0),yield{type:i,data:t.subarray(e.pos/8,e.pos/8+a)},e.skipBits(a*8)}},lt=t=>{for(let{type:e,data:r}of Nt(t)){if(e!==1)continue;let i=new H(r),o=i.readBits(3),s=i.readBits(1),a=i.readBits(1),A=0,u=0,d=0;if(a)A=i.readBits(5);else{if(i.readBits(1)&&(i.skipBits(32),i.skipBits(32),i.readBits(1)))return null;let w=i.readBits(1);w&&(d=i.readBits(5),i.skipBits(32),i.skipBits(5),i.skipBits(5));let N=i.readBits(5);for(let F=0;F<=N;F++){i.skipBits(12);let L=i.readBits(5);if(F===0&&(A=L),L>7){let k=i.readBits(1);F===0&&(u=k)}if(w&&i.readBits(1)){let S=d+1;i.skipBits(S),i.skipBits(S),i.skipBits(1)}i.readBits(1)&&i.skipBits(4)}}let c=i.readBits(4),h=i.readBits(4),I=c+1;i.skipBits(I);let _=h+1;i.skipBits(_);let g=0;if(a?g=0:g=i.readBits(1),g&&(i.skipBits(4),i.skipBits(3)),i.skipBits(1),i.skipBits(1),i.skipBits(1),!a){i.skipBits(1),i.skipBits(1),i.skipBits(1),i.skipBits(1);let E=i.readBits(1);E&&(i.skipBits(1),i.skipBits(1));let w=i.readBits(1),N=0;w?N=2:N=i.readBits(1),N>0&&(i.readBits(1)||i.skipBits(1)),E&&i.skipBits(3)}i.skipBits(1),i.skipBits(1),i.skipBits(1);let x=i.readBits(1),b=8;o===2&&x?b=i.readBits(1)?12:10:o<=2&&(b=x?10:8);let T=0;o!==1&&(T=i.readBits(1));let y=1,P=1,V=0;return T||(o===0?(y=1,P=1):o===1?(y=0,P=0):b===12&&(y=i.readBits(1),y&&(P=i.readBits(1))),y&&P&&(V=i.readBits(2))),{profile:o,level:A,tier:u,bitDepth:b,monochrome:T,chromaSubsamplingX:y,chromaSubsamplingY:P,chromaSamplePosition:V}}return null};var wr=[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 Tr=new Uint8Array([5,4,65,67,45,51]),Pr=new Uint8Array([5,4,69,65,67,51]);var be=class extends ie.CustomVideoEncoder{constructor(){super(...arguments);this.codecContext=null;this.lastBuffer=null;this.packetEmitted=!1;this.scaler=null;this.lastScalerKey=null;this.dstFrame=null;this.preciseTimings=[]}static supports(r,i){return(r==="avc"||r==="hevc"||r==="vp8"||r==="vp9"||r==="av1")&&i.bitrateMode!=="quantizer"}async init(){this.frame=new m.Frame,this.frame.alloc(),this.frame.timeBase=new m.Rational(1,1e6),this.packet=new m.Packet,this.packet.alloc();let r=Y[this.codec];p(r!==void 0);let i=null;if(this.codec==="vp9"&&this.config.alpha==="keep"?i=m.Codec.findEncoderByName(m.FF_ENCODER_LIBVPX_VP9)??m.Codec.findEncoder(r):this.config.hardwareAcceleration==="prefer-software"?i=m.Codec.findEncoder(r):i=De(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=me({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??ie.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.ref(r._data.frame);else{if(r.format===null)throw new Error("Cannot encode foreign VideoSample with unknown (null) format.");this.lastBuffer=await se(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=re(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=U(this.packet.data),o=Number(this.packet.pts)/1e6,s=Number(this.packet.duration)/1e6,a=re(this.preciseTimings,Number(this.packet.pts),g=>g.microsecondTimestamp),A=a!==-1?this.preciseTimings[a]:null;A&&A.microsecondTimestamp===Number(this.packet.pts)&&(A.timestampIsValid&&(o=A.timestamp),A.durationIsValid&&(s=A.duration));let u={},d=null,c=null;if(this.codec==="avc"||this.codec==="hevc"){let g=!1;if(this.codec==="avc"?g=this.config.avc?.format==="annexb":g=this.config.hevc?.format==="annexb",!this.packetEmitted){let x;if(this.codec==="avc"){let b=it(this.packet.data);if(!b)throw new Error("Invalid AVC data, could not extract decoder configuration record.");x=nt(b)}else{let b=st(this.packet.data);if(!b)throw new Error("Invalid HEVC data, could not extract decoder configuration record.");x=at(b)}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 b=[];for(let E of ge(i))if(this.codec==="avc"){let w=Re(i[E.offset]);w!==7&&w!==8&&w!==13&&b.push(E)}else{let w=he(i[E.offset]);w!==33&&w!==34&&w!==32&&b.push(E)}let T=0;for(let E of b)T+=4+E.length;let y=new Uint8Array(T),P=new DataView(y.buffer),V=0;for(let E of b){let w=E.length;P.setUint32(V,w,!1),V+=4,y.set(i.subarray(E.offset,E.offset+E.length),V),V+=E.length}i=y}}else if(this.codec==="vp8")this.packetEmitted||(d=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=ct(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=lt(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={},I=this.packet.getSideData(m.AV_PKT_DATA_MATROSKA_BLOCKADDITIONAL);I&&(h.alpha=U(I).subarray(8));let _=new ie.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:de(this.codecContext.colorPrimaries),matrix:ue(this.codecContext.colorSpace),transfer:Ae(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 ye=M("mediabunny"),B=Q(M("node-av"));var dt=M("mediabunny"),Ce=Q(M("node-av"));var G=class extends dt.AudioSampleResource{get frame(){if(!this._frame)throw new Error("AvFrameAudioSampleResource has been closed.");return this._frame}constructor(e){if(super(),e.getMediaType()!==Ce.AVMEDIA_TYPE_AUDIO)throw new Error("AvFrameAudioSampleResource must be initialized with an audio frame.");this._frame=e}getFormat(){let e=We(this.frame.format);if(e===null){let r=Ce.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),U(this.frame.data[e])}},xe=(t,e)=>{e.format=Ge(t.format),e.nbSamples=t.numberOfFrames,e.sampleRate=t.sampleRate,e.channelLayout=J(t.numberOfChannels),e.allocBuffer(),p(e.data);for(let r=0;r<e.data.length;r++)t.copyTo(e.data[r],{planeIndex:r})};var ve=class extends ye.CustomAudioDecoder{static supports(e,r){return e==="aac"||e==="opus"||e==="mp3"||e==="vorbis"||e==="flac"||e==="ac3"||e==="eac3"}async init(){this.frame=new B.Frame,this.frame.alloc(),this.packet=new B.Packet,this.packet.alloc();let e=Y[this.codec];p(e!==void 0);let r=B.Codec.findDecoder(e);if(r===null)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);let i=new B.CodecContext;i.allocContext3(r),i.sampleRate=this.config.sampleRate,i.channelLayout=J(this.config.numberOfChannels),i.timeBase=new B.Rational(1,this.config.sampleRate),i.codecType=B.AVMEDIA_TYPE_AUDIO,i.codecId=e,i.extraData=this.config.description?Buffer.from(U(this.config.description)):null;let o=await i.open2();B.FFmpegError.throwIfError(o,"Open codec context"),this.codecContext=i}async decode(e){this.packet.isKeyframe=e.type==="key",this.packet.data=Buffer.from(e.data),this.packet.timeBase={num:1,den:this.config.sampleRate},this.packet.pts=BigInt(Math.round(e.timestamp*this.config.sampleRate)),this.packet.dts=B.AV_NOPTS_VALUE,this.packet.duration=BigInt(Math.round(e.duration*this.config.sampleRate));let r=await this.codecContext.sendPacket(this.packet);for(B.FFmpegError.throwIfError(r,"Send packet");;){let i=await this.codecContext.receiveFrame(this.frame);if(i===B.AVERROR_EAGAIN||i===B.AVERROR_EOF)break;this.receiveFrame(i)}}receiveFrame(e){B.FFmpegError.throwIfError(e,"Receive frame");let r=this.frame.clone();if(!r)throw new Error("Allocation failure during frame clone.");r.timeBase=new B.Rational(1,this.config.sampleRate),this.onSample(new ye.AudioSample(new G(r)))}async flush(){let e=await this.codecContext.sendPacket(null);for(B.FFmpegError.throwIfError(e,"Flush decoder");;){let r=await this.codecContext.receiveFrame(this.frame);if(r===B.AVERROR_EAGAIN||r===B.AVERROR_EOF)break;this.receiveFrame(r)}this.codecContext.flushBuffers()}close(){this.codecContext.freeContext(),this.frame.free(),this.packet.free()}};var ne=M("mediabunny"),v=Q(M("node-av"));var Mt=[96e3,88200,64e3,48e3,44100,32e3,24e3,22050,16e3,12e3,11025,8e3,7350],Ut=[8e3,12e3,16e3,24e3,48e3],kt=[8e3,11025,12e3,16e3,22050,24e3,32e3,44100,48e3],At=[32e3,44100,48e3],Ne=1024,Se=class extends ne.CustomAudioEncoder{constructor(){super(...arguments);this.codecContext=null;this.firstExpectedTimestamp=null;this.outputTimestampOffset=0;this.resampler=null;this.inputParametersKey=null;this.resamplerInputSampleRate=null;this.nextResamplerPts=null;this.dstFrame=null;this.packetEmitted=!1;this.adtsHeaderTemplate=null}static supports(r,i){let{numberOfChannels:o,sampleRate:s}=i;return r==="aac"&&o>=1&&o<=48&&Mt.includes(s)||r==="opus"&&o>=1&&o<=255&&Ut.includes(s)||r==="mp3"&&o>=1&&o<=2&&kt.includes(s)||r==="vorbis"&&o>=1&&o<=255&&s<=2e5||r==="flac"&&o>=1&&o<=8&&s<=655350||r==="ac3"&&o>=1&&o<=6&&At.includes(s)||r==="eac3"&&o>=1&&o<=16&&At.includes(s)}async init(){this.frame=new v.Frame,this.frame.alloc(),this.packet=new v.Packet,this.packet.alloc();let r=Y[this.codec];p(r!==void 0);let i=v.Codec.findEncoder(r);if(!i)throw new Error(`Unable to obtain libav codec for '${this.codec}'.`);this.avCodec=i,await this.createCodecContext()}async createCodecContext(){p(this.codecContext===null);let r=new v.CodecContext;r.allocContext3(this.avCodec);let i=v.AV_SAMPLE_FMT_FLTP;this.avCodec.sampleFormats&&!this.avCodec.sampleFormats.includes(v.AV_SAMPLE_FMT_FLTP)&&(i=this.avCodec.sampleFormats[0]),r.sampleRate=this.config.sampleRate,r.channelLayout=J(this.config.numberOfChannels),r.codecType=v.AVMEDIA_TYPE_AUDIO,r.codecId=Y[this.codec],r.sampleFormat=i,r.timeBase=new v.Rational(1,this.config.sampleRate),r.bitRate=BigInt(this.config.bitrate??ne.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 G?this.frame.ref(r._data.frame):xe(r,this.frame),this.frame.pts=BigInt(Math.round(r.timestamp*this.config.sampleRate)),this.frame.duration=BigInt(Math.round(r.duration*this.config.sampleRate)),this.frame.timeBase=new v.Rational(1,this.config.sampleRate);let i=`${this.frame.sampleRate}:${this.frame.channels}:${this.frame.format}`;if(this.inputParametersKey!==null&&this.inputParametersKey!==i)throw new Error("Input audio parameters changed. For this audio encoder, you cannot change the input audio parameters over time.");if(this.inputParametersKey=i,this.codecContext.frameSize>0||this.codecContext.sampleFormat!==this.frame.format||this.codecContext.sampleRate!==this.frame.sampleRate||this.codecContext.channels!==this.frame.channels){if(!this.resampler){this.resampler=new v.SoftwareResampleContext,this.resamplerInputSampleRate=this.frame.sampleRate;let a=J(this.codecContext.channels),A=J(this.frame.channels),u=this.resampler.allocSetOpts2(a,this.codecContext.sampleFormat,this.codecContext.sampleRate,A,this.frame.format,this.frame.sampleRate);v.FFmpegError.throwIfError(u,"allocSetOpts2");let d=this.resampler.init();v.FFmpegError.throwIfError(d,"init"),this.dstFrame=new v.Frame,this.dstFrame.alloc(),this.dstFrame.channelLayout=a,this.dstFrame.sampleRate=this.codecContext.sampleRate,this.dstFrame.format=this.codecContext.sampleFormat,this.dstFrame.nbSamples=this.codecContext.frameSize||Ne,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||Ne;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?U(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=$e(d);this.adtsHeaderTemplate=je(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 ne.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||Ne;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 mt=Symbol.for("@mediabunny/server loaded");globalThis[mt]&&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 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[pt]=!0;var ft=!1,X={},Ot=(t={})=>{if(typeof t!="object"||!t)throw new TypeError("options must be an object.");if(t.hardwareContext!=null&&!(t.hardwareContext instanceof W.HardwareContext||typeof t.hardwareContext=="function"))throw new TypeError("options.hardwareContext, when provided, must be a NodeAv.HardwareContext, a function, or null.");ft||(ft=!0,X=t,W.Log.setLevel(W.AV_LOG_ERROR),(0,L.registerDecoder)(he),(0,L.registerEncoder)(xe),(0,L.registerDecoder)(ye),(0,L.registerEncoder)(Ee),(0,L.registerVideoSampleTransformer)(je))},Ht=async(t,e)=>{if(!(t instanceof L.VideoSample)&&!(t instanceof L.AudioSample))throw new TypeError("sample must be a VideoSample or an AudioSample.");if(!(e instanceof W.Frame))throw new TypeError("frame must be a NodeAv.Frame.");if(t instanceof L.VideoSample){if(t._data instanceof z)e.unref(),e.ref(t._data.frame);else{if(t.format===null)throw new Error("Cannot convert foreign VideoSample with unknown (null) format.");await ce(t,e,null)}e.pts=BigInt(t.microsecondTimestamp),e.duration=BigInt(t.microsecondDuration),e.timeBase=new W.Rational(1,1e6)}else t._data instanceof K?(e.unref(),e.ref(t._data.frame)):ve(t,e),e.timeBase=new W.Rational(1,t.sampleRate),e.pts=BigInt(Math.round(t.timestamp*t.sampleRate)),e.duration=BigInt(t.numberOfFrames)};return yt(zt);})();
|
|
10
10
|
if (typeof module === "object" && typeof module.exports === "object") Object.assign(module.exports, MediabunnyServer)
|