mediabunny 1.48.1 → 1.49.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles/mediabunny.cjs +154 -70
- package/dist/bundles/mediabunny.min.cjs +20 -20
- package/dist/bundles/mediabunny.min.mjs +20 -20
- package/dist/bundles/mediabunny.mjs +154 -70
- package/dist/bundles/mediabunny.node.cjs +154 -70
- package/dist/mediabunny.d.ts +56 -3
- package/dist/modules/src/codec-data.d.ts.map +1 -1
- package/dist/modules/src/codec-data.js +7 -6
- package/dist/modules/src/codec.d.ts +1 -1
- package/dist/modules/src/conversion.d.ts.map +1 -1
- package/dist/modules/src/conversion.js +4 -3
- package/dist/modules/src/custom-coder.d.ts.map +1 -1
- package/dist/modules/src/custom-coder.js +5 -4
- package/dist/modules/src/flac/flac-demuxer.d.ts.map +1 -1
- package/dist/modules/src/flac/flac-demuxer.js +23 -1
- package/dist/modules/src/hls/hls-muxer.d.ts.map +1 -1
- package/dist/modules/src/hls/hls-muxer.js +4 -3
- package/dist/modules/src/id3.d.ts +0 -1
- package/dist/modules/src/id3.d.ts.map +1 -1
- package/dist/modules/src/id3.js +12 -12
- package/dist/modules/src/index.d.ts +1 -0
- package/dist/modules/src/index.d.ts.map +1 -1
- package/dist/modules/src/index.js +3 -1
- package/dist/modules/src/input-format.d.ts.map +1 -1
- package/dist/modules/src/input-format.js +15 -1
- package/dist/modules/src/input-track.d.ts.map +1 -1
- package/dist/modules/src/input-track.js +3 -2
- package/dist/modules/src/isobmff/isobmff-demuxer.d.ts.map +1 -1
- package/dist/modules/src/isobmff/isobmff-demuxer.js +18 -17
- package/dist/modules/src/logging.d.ts +57 -0
- package/dist/modules/src/logging.d.ts.map +1 -0
- package/dist/modules/src/logging.js +84 -0
- package/dist/modules/src/matroska/ebml.d.ts +4 -4
- package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.js +2 -1
- package/dist/modules/src/media-sink.d.ts.map +1 -1
- package/dist/modules/src/media-sink.js +2 -1
- package/dist/modules/src/media-source.d.ts.map +1 -1
- package/dist/modules/src/media-source.js +5 -4
- package/dist/modules/src/metadata.d.ts +4 -2
- package/dist/modules/src/metadata.d.ts.map +1 -1
- package/dist/modules/src/misc.d.ts +1 -1
- package/dist/modules/src/misc.d.ts.map +1 -1
- package/dist/modules/src/misc.js +5 -2
- package/dist/modules/src/mpeg-ts/mpeg-ts-demuxer.d.ts.map +1 -1
- package/dist/modules/src/mpeg-ts/mpeg-ts-demuxer.js +2 -1
- package/dist/modules/src/output.d.ts.map +1 -1
- package/dist/modules/src/output.js +5 -4
- package/dist/modules/src/sample.d.ts.map +1 -1
- package/dist/modules/src/sample.js +3 -2
- package/dist/modules/src/source.d.ts.map +1 -1
- package/dist/modules/src/source.js +4 -4
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/dist/modules/src/wave/wave-muxer.d.ts.map +1 -1
- package/dist/modules/src/wave/wave-muxer.js +2 -1
- package/package.json +1 -1
- package/src/codec-data.ts +7 -6
- package/src/conversion.ts +4 -3
- package/src/custom-coder.ts +5 -4
- package/src/flac/flac-demuxer.ts +28 -2
- package/src/hls/hls-muxer.ts +4 -3
- package/src/id3.ts +14 -14
- package/src/index.ts +8 -1
- package/src/input-format.ts +17 -1
- package/src/input-track.ts +3 -2
- package/src/isobmff/isobmff-demuxer.ts +18 -17
- package/src/logging.ts +120 -0
- package/src/matroska/matroska-demuxer.ts +2 -1
- package/src/media-sink.ts +2 -1
- package/src/media-source.ts +5 -4
- package/src/metadata.ts +4 -2
- package/src/misc.ts +5 -2
- package/src/mpeg-ts/mpeg-ts-demuxer.ts +2 -1
- package/src/output.ts +5 -4
- package/src/sample.ts +3 -2
- package/src/source.ts +4 -4
- package/src/wave/wave-muxer.ts +2 -1
|
@@ -145,6 +145,8 @@ var Mediabunny = (() => {
|
|
|
145
145
|
InputVideoTrack: () => InputVideoTrack,
|
|
146
146
|
IsobmffInputFormat: () => IsobmffInputFormat,
|
|
147
147
|
IsobmffOutputFormat: () => IsobmffOutputFormat2,
|
|
148
|
+
LogLevel: () => LogLevel,
|
|
149
|
+
Logging: () => Logging,
|
|
148
150
|
MATROSKA: () => MATROSKA,
|
|
149
151
|
MP3: () => MP3,
|
|
150
152
|
MP4: () => MP4,
|
|
@@ -640,7 +642,7 @@ var Mediabunny = (() => {
|
|
|
640
642
|
if (retryDelayInSeconds === null) {
|
|
641
643
|
throw error;
|
|
642
644
|
}
|
|
643
|
-
|
|
645
|
+
Logging._error("Retrying failed fetch. Error:", error);
|
|
644
646
|
if (!Number.isFinite(retryDelayInSeconds) || retryDelayInSeconds < 0) {
|
|
645
647
|
throw new TypeError("Retry delay must be a non-negative finite number.");
|
|
646
648
|
}
|
|
@@ -1038,7 +1040,7 @@ var Mediabunny = (() => {
|
|
|
1038
1040
|
/** @internal */
|
|
1039
1041
|
this._listeners = /* @__PURE__ */ new Map();
|
|
1040
1042
|
}
|
|
1041
|
-
/** Registers a listener for the given event. */
|
|
1043
|
+
/** Registers a listener for the given event. Returns a function that, when called, removes the listener again. */
|
|
1042
1044
|
on(event, listener, options) {
|
|
1043
1045
|
if (!this._listeners.has(event)) {
|
|
1044
1046
|
this._listeners.set(event, /* @__PURE__ */ new Set());
|
|
@@ -1112,6 +1114,63 @@ var Mediabunny = (() => {
|
|
|
1112
1114
|
return value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype && Object.values(value).every((x) => typeof x === "string");
|
|
1113
1115
|
};
|
|
1114
1116
|
|
|
1117
|
+
// src/logging.ts
|
|
1118
|
+
var LogLevel = /* @__PURE__ */ ((LogLevel2) => {
|
|
1119
|
+
LogLevel2[LogLevel2["Silent"] = 0] = "Silent";
|
|
1120
|
+
LogLevel2[LogLevel2["Errors"] = 1] = "Errors";
|
|
1121
|
+
LogLevel2[LogLevel2["Warnings"] = 2] = "Warnings";
|
|
1122
|
+
LogLevel2[LogLevel2["Info"] = 3] = "Info";
|
|
1123
|
+
return LogLevel2;
|
|
1124
|
+
})(LogLevel || {});
|
|
1125
|
+
var _Logging = class _Logging {
|
|
1126
|
+
constructor() {
|
|
1127
|
+
}
|
|
1128
|
+
/** The current log level. Defaults to {@link LogLevel.Info}. */
|
|
1129
|
+
static get level() {
|
|
1130
|
+
return _Logging._level;
|
|
1131
|
+
}
|
|
1132
|
+
static set level(value) {
|
|
1133
|
+
if (value !== 0 /* Silent */ && value !== 1 /* Errors */ && value !== 2 /* Warnings */ && value !== 3 /* Info */) {
|
|
1134
|
+
throw new TypeError("Invalid log level. Use one of the values of the LogLevel enum.");
|
|
1135
|
+
}
|
|
1136
|
+
_Logging._level = value;
|
|
1137
|
+
}
|
|
1138
|
+
/** @internal */
|
|
1139
|
+
static get _emitter() {
|
|
1140
|
+
return _Logging._emitterInstance ??= new EventEmitter();
|
|
1141
|
+
}
|
|
1142
|
+
/** Registers a listener for a log event. Returns a function that, when called, removes the listener again. */
|
|
1143
|
+
static on(event, listener, options) {
|
|
1144
|
+
return _Logging._emitter.on(event, listener, options);
|
|
1145
|
+
}
|
|
1146
|
+
/** @internal */
|
|
1147
|
+
static _error(...args) {
|
|
1148
|
+
_Logging._emitter._emit("error", args);
|
|
1149
|
+
if (_Logging._level >= 1 /* Errors */) {
|
|
1150
|
+
console.error(...args);
|
|
1151
|
+
}
|
|
1152
|
+
}
|
|
1153
|
+
/** @internal */
|
|
1154
|
+
static _warn(...args) {
|
|
1155
|
+
_Logging._emitter._emit("warn", args);
|
|
1156
|
+
if (_Logging._level >= 2 /* Warnings */) {
|
|
1157
|
+
console.warn(...args);
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
/** @internal */
|
|
1161
|
+
static _info(...args) {
|
|
1162
|
+
_Logging._emitter._emit("info", args);
|
|
1163
|
+
if (_Logging._level >= 3 /* Info */) {
|
|
1164
|
+
console.info(...args);
|
|
1165
|
+
}
|
|
1166
|
+
}
|
|
1167
|
+
};
|
|
1168
|
+
/** @internal */
|
|
1169
|
+
_Logging._level = 3 /* Info */;
|
|
1170
|
+
/** @internal */
|
|
1171
|
+
_Logging._emitterInstance = null;
|
|
1172
|
+
var Logging = _Logging;
|
|
1173
|
+
|
|
1115
1174
|
// src/metadata.ts
|
|
1116
1175
|
var RichImageData = class {
|
|
1117
1176
|
/** Creates a new {@link RichImageData}. */
|
|
@@ -2735,7 +2794,7 @@ var Mediabunny = (() => {
|
|
|
2735
2794
|
sequenceParameterSetExt: hasExtendedData ? spsExtUnits : null
|
|
2736
2795
|
};
|
|
2737
2796
|
} catch (error) {
|
|
2738
|
-
|
|
2797
|
+
Logging._error("Error building AVC Decoder Configuration Record:", error);
|
|
2739
2798
|
return null;
|
|
2740
2799
|
}
|
|
2741
2800
|
};
|
|
@@ -2841,7 +2900,7 @@ var Mediabunny = (() => {
|
|
|
2841
2900
|
}
|
|
2842
2901
|
return record;
|
|
2843
2902
|
} catch (error) {
|
|
2844
|
-
|
|
2903
|
+
Logging._error("Error deserializing AVC Decoder Configuration Record:", error);
|
|
2845
2904
|
return null;
|
|
2846
2905
|
}
|
|
2847
2906
|
};
|
|
@@ -3070,7 +3129,7 @@ var Mediabunny = (() => {
|
|
|
3070
3129
|
maxDecFrameBuffering
|
|
3071
3130
|
};
|
|
3072
3131
|
} catch (error) {
|
|
3073
|
-
|
|
3132
|
+
Logging._error("Error parsing AVC SPS:", error);
|
|
3074
3133
|
return null;
|
|
3075
3134
|
}
|
|
3076
3135
|
};
|
|
@@ -3234,7 +3293,7 @@ var Mediabunny = (() => {
|
|
|
3234
3293
|
minSpatialSegmentationIdc
|
|
3235
3294
|
};
|
|
3236
3295
|
} catch (error) {
|
|
3237
|
-
|
|
3296
|
+
Logging._error("Error parsing HEVC SPS:", error);
|
|
3238
3297
|
return null;
|
|
3239
3298
|
}
|
|
3240
3299
|
};
|
|
@@ -3345,7 +3404,7 @@ var Mediabunny = (() => {
|
|
|
3345
3404
|
};
|
|
3346
3405
|
return record;
|
|
3347
3406
|
} catch (error) {
|
|
3348
|
-
|
|
3407
|
+
Logging._error("Error building HEVC Decoder Configuration Record:", error);
|
|
3349
3408
|
return null;
|
|
3350
3409
|
}
|
|
3351
3410
|
};
|
|
@@ -3693,7 +3752,7 @@ var Mediabunny = (() => {
|
|
|
3693
3752
|
arrays
|
|
3694
3753
|
};
|
|
3695
3754
|
} catch (error) {
|
|
3696
|
-
|
|
3755
|
+
Logging._error("Error deserializing HEVC Decoder Configuration Record:", error);
|
|
3697
3756
|
return null;
|
|
3698
3757
|
}
|
|
3699
3758
|
};
|
|
@@ -5877,7 +5936,7 @@ var Mediabunny = (() => {
|
|
|
5877
5936
|
continue;
|
|
5878
5937
|
}
|
|
5879
5938
|
if (relevantEntryFound) {
|
|
5880
|
-
|
|
5939
|
+
Logging._warn(
|
|
5881
5940
|
"Unsupported edit list: multiple edits are not currently supported. Only using first edit."
|
|
5882
5941
|
);
|
|
5883
5942
|
break;
|
|
@@ -5887,7 +5946,7 @@ var Mediabunny = (() => {
|
|
|
5887
5946
|
continue;
|
|
5888
5947
|
}
|
|
5889
5948
|
if (mediaRate !== 1) {
|
|
5890
|
-
|
|
5949
|
+
Logging._warn("Unsupported edit list entry: media rate must be 1.");
|
|
5891
5950
|
break;
|
|
5892
5951
|
}
|
|
5893
5952
|
track.editListPreviousSegmentDurations = previousSegmentDurations;
|
|
@@ -6026,9 +6085,9 @@ var Mediabunny = (() => {
|
|
|
6026
6085
|
} else if (codecName === "av01") {
|
|
6027
6086
|
track.info.codec = "av1";
|
|
6028
6087
|
} else if (codecName === null) {
|
|
6029
|
-
|
|
6088
|
+
Logging._warn(`Unknown encrypted video codec due to missing frma box.`);
|
|
6030
6089
|
} else {
|
|
6031
|
-
|
|
6090
|
+
Logging._warn(`Unsupported video codec (sample entry type '${sampleBoxInfo.name}').`);
|
|
6032
6091
|
}
|
|
6033
6092
|
} else {
|
|
6034
6093
|
slice.skip(6 * 1 + 2);
|
|
@@ -6085,7 +6144,7 @@ var Mediabunny = (() => {
|
|
|
6085
6144
|
} else if (sampleSize === 16) {
|
|
6086
6145
|
track.info.codec = track.info.pcmLittleEndian ? "pcm-s16" : "pcm-s16be";
|
|
6087
6146
|
} else {
|
|
6088
|
-
|
|
6147
|
+
Logging._warn(`Unsupported sample size ${sampleSize} for codec 'twos'.`);
|
|
6089
6148
|
track.info.codec = null;
|
|
6090
6149
|
}
|
|
6091
6150
|
} else if (codecName === "sowt") {
|
|
@@ -6094,7 +6153,7 @@ var Mediabunny = (() => {
|
|
|
6094
6153
|
} else if (sampleSize === 16) {
|
|
6095
6154
|
track.info.codec = "pcm-s16";
|
|
6096
6155
|
} else {
|
|
6097
|
-
|
|
6156
|
+
Logging._warn(`Unsupported sample size ${sampleSize} for codec 'sowt'.`);
|
|
6098
6157
|
track.info.codec = null;
|
|
6099
6158
|
}
|
|
6100
6159
|
} else if (codecName === "raw ") {
|
|
@@ -6117,7 +6176,7 @@ var Mediabunny = (() => {
|
|
|
6117
6176
|
} else if (pcmSampleSize === 32) {
|
|
6118
6177
|
track.info.codec = "pcm-s32";
|
|
6119
6178
|
} else {
|
|
6120
|
-
|
|
6179
|
+
Logging._warn(`Invalid ipcm sample size ${pcmSampleSize}.`);
|
|
6121
6180
|
track.info.codec = null;
|
|
6122
6181
|
}
|
|
6123
6182
|
} else {
|
|
@@ -6128,7 +6187,7 @@ var Mediabunny = (() => {
|
|
|
6128
6187
|
} else if (pcmSampleSize === 32) {
|
|
6129
6188
|
track.info.codec = "pcm-s32be";
|
|
6130
6189
|
} else {
|
|
6131
|
-
|
|
6190
|
+
Logging._warn(`Invalid ipcm sample size ${pcmSampleSize}.`);
|
|
6132
6191
|
track.info.codec = null;
|
|
6133
6192
|
}
|
|
6134
6193
|
}
|
|
@@ -6140,7 +6199,7 @@ var Mediabunny = (() => {
|
|
|
6140
6199
|
} else if (pcmSampleSize === 64) {
|
|
6141
6200
|
track.info.codec = "pcm-f64";
|
|
6142
6201
|
} else {
|
|
6143
|
-
|
|
6202
|
+
Logging._warn(`Invalid fpcm sample size ${pcmSampleSize}.`);
|
|
6144
6203
|
track.info.codec = null;
|
|
6145
6204
|
}
|
|
6146
6205
|
} else {
|
|
@@ -6149,7 +6208,7 @@ var Mediabunny = (() => {
|
|
|
6149
6208
|
} else if (pcmSampleSize === 64) {
|
|
6150
6209
|
track.info.codec = "pcm-f64be";
|
|
6151
6210
|
} else {
|
|
6152
|
-
|
|
6211
|
+
Logging._warn(`Invalid fpcm sample size ${pcmSampleSize}.`);
|
|
6153
6212
|
track.info.codec = null;
|
|
6154
6213
|
}
|
|
6155
6214
|
}
|
|
@@ -6182,12 +6241,12 @@ var Mediabunny = (() => {
|
|
|
6182
6241
|
}
|
|
6183
6242
|
}
|
|
6184
6243
|
if (track.info.codec === null) {
|
|
6185
|
-
|
|
6244
|
+
Logging._warn("Unsupported PCM format.");
|
|
6186
6245
|
}
|
|
6187
6246
|
} else if (codecName === null) {
|
|
6188
|
-
|
|
6247
|
+
Logging._warn(`Unknown encrypted audio codec due to missing frma box.`);
|
|
6189
6248
|
} else {
|
|
6190
|
-
|
|
6249
|
+
Logging._warn(`Unsupported audio codec (sample entry type '${sampleBoxInfo.name}').`);
|
|
6191
6250
|
}
|
|
6192
6251
|
}
|
|
6193
6252
|
slice.filePos = sampleBoxStartPos + sampleBoxInfo.totalSize;
|
|
@@ -6226,7 +6285,7 @@ var Mediabunny = (() => {
|
|
|
6226
6285
|
defaultSkipByteBlock: null
|
|
6227
6286
|
};
|
|
6228
6287
|
} else {
|
|
6229
|
-
|
|
6288
|
+
Logging._warn(`Unsupported encryption scheme '${schemeType}'.`);
|
|
6230
6289
|
}
|
|
6231
6290
|
}
|
|
6232
6291
|
;
|
|
@@ -6439,7 +6498,7 @@ var Mediabunny = (() => {
|
|
|
6439
6498
|
} else if (objectTypeIndication === 221) {
|
|
6440
6499
|
track.info.codec = "vorbis";
|
|
6441
6500
|
} else {
|
|
6442
|
-
|
|
6501
|
+
Logging._warn(
|
|
6443
6502
|
`Unsupported audio codec (objectTypeIndication ${objectTypeIndication}) - discarding track.`
|
|
6444
6503
|
);
|
|
6445
6504
|
}
|
|
@@ -6593,7 +6652,7 @@ var Mediabunny = (() => {
|
|
|
6593
6652
|
const bytes2 = readBytes(slice, boxInfo.contentSize);
|
|
6594
6653
|
const config = parseEac3Config(bytes2);
|
|
6595
6654
|
if (!config) {
|
|
6596
|
-
|
|
6655
|
+
Logging._warn("Invalid dec3 box contents, ignoring.");
|
|
6597
6656
|
break;
|
|
6598
6657
|
}
|
|
6599
6658
|
const sampleRate = getEac3SampleRate(config);
|
|
@@ -7152,7 +7211,7 @@ var Mediabunny = (() => {
|
|
|
7152
7211
|
break;
|
|
7153
7212
|
}
|
|
7154
7213
|
if (entryCount > 1) {
|
|
7155
|
-
|
|
7214
|
+
Logging._warn("Multiple saio entries are not supported; using the first offset only.");
|
|
7156
7215
|
}
|
|
7157
7216
|
let offset = version === 0 ? readU32Be(slice) : Number(readU64Be(slice));
|
|
7158
7217
|
if (this.currentFragment) {
|
|
@@ -9509,7 +9568,7 @@ var Mediabunny = (() => {
|
|
|
9509
9568
|
if (this.currentTrack.decodingInstructions.some((instruction) => {
|
|
9510
9569
|
return instruction.data?.type !== "decompress" || instruction.scope !== 1 /* Block */ || instruction.data.algorithm !== 3 /* HeaderStripping */;
|
|
9511
9570
|
})) {
|
|
9512
|
-
|
|
9571
|
+
Logging._warn(`Track #${this.currentTrack.id} has an unsupported content encoding; dropping.`);
|
|
9513
9572
|
this.currentTrack = null;
|
|
9514
9573
|
}
|
|
9515
9574
|
if (this.currentTrack && this.currentTrack.id !== -1 && this.currentTrack.codecId && this.currentTrack.info) {
|
|
@@ -13024,8 +13083,26 @@ var Mediabunny = (() => {
|
|
|
13024
13083
|
return "audio/flac";
|
|
13025
13084
|
}
|
|
13026
13085
|
async readMetadata() {
|
|
13027
|
-
let currentPos = 4;
|
|
13028
13086
|
return this.metadataPromise ??= (async () => {
|
|
13087
|
+
let currentPos = 0;
|
|
13088
|
+
while (true) {
|
|
13089
|
+
let headerSlice = this.reader.requestSlice(currentPos, ID3_V2_HEADER_SIZE);
|
|
13090
|
+
if (headerSlice instanceof Promise) headerSlice = await headerSlice;
|
|
13091
|
+
if (!headerSlice) {
|
|
13092
|
+
this.lastSampleLoaded = true;
|
|
13093
|
+
return;
|
|
13094
|
+
}
|
|
13095
|
+
const id3V2Header = readId3V2Header(headerSlice);
|
|
13096
|
+
if (!id3V2Header) {
|
|
13097
|
+
break;
|
|
13098
|
+
}
|
|
13099
|
+
let contentSlice = this.reader.requestSlice(headerSlice.filePos, id3V2Header.size);
|
|
13100
|
+
if (contentSlice instanceof Promise) contentSlice = await contentSlice;
|
|
13101
|
+
assert(contentSlice);
|
|
13102
|
+
parseId3V2Tag(contentSlice, id3V2Header, this.metadataTags);
|
|
13103
|
+
currentPos = headerSlice.filePos + id3V2Header.size;
|
|
13104
|
+
}
|
|
13105
|
+
currentPos += 4;
|
|
13029
13106
|
while (this.reader.fileSize === null || currentPos < this.reader.fileSize) {
|
|
13030
13107
|
let sizeSlice = this.reader.requestSlice(currentPos, 4);
|
|
13031
13108
|
if (sizeSlice instanceof Promise) sizeSlice = await sizeSlice;
|
|
@@ -13707,7 +13784,7 @@ var Mediabunny = (() => {
|
|
|
13707
13784
|
break;
|
|
13708
13785
|
default: {
|
|
13709
13786
|
if (!ignoredStreamTypes.has(streamType)) {
|
|
13710
|
-
|
|
13787
|
+
Logging._warn(
|
|
13711
13788
|
`Note: MPEG-TS streams with stream_type 0x${streamType.toString(16)} are not currently supported.`
|
|
13712
13789
|
);
|
|
13713
13790
|
ignoredStreamTypes.add(streamType);
|
|
@@ -16026,7 +16103,7 @@ var Mediabunny = (() => {
|
|
|
16026
16103
|
}
|
|
16027
16104
|
const isOnline = typeof navigator !== "undefined" && typeof navigator.onLine === "boolean" ? navigator.onLine : true;
|
|
16028
16105
|
if (isOnline && originOfSrc !== null && originOfSrc !== window.location.origin) {
|
|
16029
|
-
|
|
16106
|
+
Logging._warn(
|
|
16030
16107
|
`Request will not be retried because a CORS error was suspected due to different origins. You can modify this behavior by providing your own function for the 'getRetryDelay' option.`
|
|
16031
16108
|
);
|
|
16032
16109
|
return null;
|
|
@@ -16200,8 +16277,7 @@ var Mediabunny = (() => {
|
|
|
16200
16277
|
);
|
|
16201
16278
|
if (url2.origin !== "null" && !(url2.pathname.endsWith(".m3u8") || url2.pathname.endsWith(".m3u"))) {
|
|
16202
16279
|
if (!warnedOrigins.has(url2.origin)) {
|
|
16203
|
-
|
|
16204
|
-
console.warn(
|
|
16280
|
+
Logging._warn(
|
|
16205
16281
|
`HTTP server (origin ${url2.origin}) did not respond to a range request with 206 Partial Content, meaning the entire resource will now be downloaded. To enable efficient media file streaming across a network, please make sure your server supports range requests.`
|
|
16206
16282
|
);
|
|
16207
16283
|
warnedOrigins.add(url2.origin);
|
|
@@ -16239,7 +16315,7 @@ var Mediabunny = (() => {
|
|
|
16239
16315
|
}
|
|
16240
16316
|
const retryDelayInSeconds = this._getRetryDelay(1, error, this._url);
|
|
16241
16317
|
if (retryDelayInSeconds !== null) {
|
|
16242
|
-
|
|
16318
|
+
Logging._error("Error while reading response stream. Attempting to resume.", error);
|
|
16243
16319
|
await wait(1e3 * retryDelayInSeconds);
|
|
16244
16320
|
break;
|
|
16245
16321
|
} else {
|
|
@@ -18747,7 +18823,18 @@ var Mediabunny = (() => {
|
|
|
18747
18823
|
var FlacInputFormat = class extends InputFormat {
|
|
18748
18824
|
/** @internal */
|
|
18749
18825
|
async _canReadInput(input) {
|
|
18750
|
-
let
|
|
18826
|
+
let currentPos = 0;
|
|
18827
|
+
while (true) {
|
|
18828
|
+
let slice2 = input._reader.requestSlice(currentPos, ID3_V2_HEADER_SIZE);
|
|
18829
|
+
if (slice2 instanceof Promise) slice2 = await slice2;
|
|
18830
|
+
if (!slice2) break;
|
|
18831
|
+
const id3V2Header = readId3V2Header(slice2);
|
|
18832
|
+
if (!id3V2Header) {
|
|
18833
|
+
break;
|
|
18834
|
+
}
|
|
18835
|
+
currentPos = slice2.filePos + id3V2Header.size;
|
|
18836
|
+
}
|
|
18837
|
+
let slice = input._reader.requestSlice(currentPos, 4);
|
|
18751
18838
|
if (slice instanceof Promise) slice = await slice;
|
|
18752
18839
|
if (!slice) return false;
|
|
18753
18840
|
return readAscii(slice, 4) === "fLaC";
|
|
@@ -19063,7 +19150,7 @@ var Mediabunny = (() => {
|
|
|
19063
19150
|
const now = performance.now();
|
|
19064
19151
|
if (value.type === "video") {
|
|
19065
19152
|
if (now - lastVideoGcErrorLog >= 1e3) {
|
|
19066
|
-
|
|
19153
|
+
Logging._error(
|
|
19067
19154
|
`A VideoSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your VideoSamples as soon as you're done using them.`
|
|
19068
19155
|
);
|
|
19069
19156
|
lastVideoGcErrorLog = now;
|
|
@@ -19073,7 +19160,7 @@ var Mediabunny = (() => {
|
|
|
19073
19160
|
}
|
|
19074
19161
|
} else {
|
|
19075
19162
|
if (now - lastAudioGcErrorLog >= 1e3) {
|
|
19076
|
-
|
|
19163
|
+
Logging._error(
|
|
19077
19164
|
`An AudioSample was garbage collected without first being closed. For proper resource management, make sure to call close() on all your AudioSamples as soon as you're done using them.`
|
|
19078
19165
|
);
|
|
19079
19166
|
lastAudioGcErrorLog = now;
|
|
@@ -21621,7 +21708,7 @@ var Mediabunny = (() => {
|
|
|
21621
21708
|
if (decoder.prototype instanceof CustomVideoDecoder) {
|
|
21622
21709
|
const casted = decoder;
|
|
21623
21710
|
if (customVideoDecoders.includes(casted)) {
|
|
21624
|
-
|
|
21711
|
+
Logging._warn("Video decoder already registered.");
|
|
21625
21712
|
return;
|
|
21626
21713
|
}
|
|
21627
21714
|
customVideoDecoders.push(casted);
|
|
@@ -21629,7 +21716,7 @@ var Mediabunny = (() => {
|
|
|
21629
21716
|
} else if (decoder.prototype instanceof CustomAudioDecoder) {
|
|
21630
21717
|
const casted = decoder;
|
|
21631
21718
|
if (customAudioDecoders.includes(casted)) {
|
|
21632
|
-
|
|
21719
|
+
Logging._warn("Audio decoder already registered.");
|
|
21633
21720
|
return;
|
|
21634
21721
|
}
|
|
21635
21722
|
customAudioDecoders.push(casted);
|
|
@@ -21642,7 +21729,7 @@ var Mediabunny = (() => {
|
|
|
21642
21729
|
if (encoder.prototype instanceof CustomVideoEncoder) {
|
|
21643
21730
|
const casted = encoder;
|
|
21644
21731
|
if (customVideoEncoders.includes(casted)) {
|
|
21645
|
-
|
|
21732
|
+
Logging._warn("Video encoder already registered.");
|
|
21646
21733
|
return;
|
|
21647
21734
|
}
|
|
21648
21735
|
customVideoEncoders.push(casted);
|
|
@@ -21650,7 +21737,7 @@ var Mediabunny = (() => {
|
|
|
21650
21737
|
} else if (encoder.prototype instanceof CustomAudioEncoder) {
|
|
21651
21738
|
const casted = encoder;
|
|
21652
21739
|
if (customAudioEncoders.includes(casted)) {
|
|
21653
|
-
|
|
21740
|
+
Logging._warn("Audio encoder already registered.");
|
|
21654
21741
|
return;
|
|
21655
21742
|
}
|
|
21656
21743
|
customAudioEncoders.push(casted);
|
|
@@ -22640,7 +22727,7 @@ var Mediabunny = (() => {
|
|
|
22640
22727
|
this.gl = null;
|
|
22641
22728
|
this.canvas = null;
|
|
22642
22729
|
mergerGpuUnavailable = true;
|
|
22643
|
-
|
|
22730
|
+
Logging._warn("Falling back to CPU for color/alpha merging.", error);
|
|
22644
22731
|
}
|
|
22645
22732
|
}
|
|
22646
22733
|
}
|
|
@@ -24180,7 +24267,7 @@ var Mediabunny = (() => {
|
|
|
24180
24267
|
const support = await VideoDecoder.isConfigSupported(decoderConfig);
|
|
24181
24268
|
return support.supported === true;
|
|
24182
24269
|
} catch (error) {
|
|
24183
|
-
|
|
24270
|
+
Logging._error("Error during decodability check:", error);
|
|
24184
24271
|
return false;
|
|
24185
24272
|
}
|
|
24186
24273
|
}
|
|
@@ -24282,7 +24369,7 @@ var Mediabunny = (() => {
|
|
|
24282
24369
|
return support.supported === true;
|
|
24283
24370
|
}
|
|
24284
24371
|
} catch (error) {
|
|
24285
|
-
|
|
24372
|
+
Logging._error("Error during decodability check:", error);
|
|
24286
24373
|
return false;
|
|
24287
24374
|
}
|
|
24288
24375
|
}
|
|
@@ -25323,19 +25410,20 @@ var Mediabunny = (() => {
|
|
|
25323
25410
|
slice.filePos = startPos;
|
|
25324
25411
|
return null;
|
|
25325
25412
|
}
|
|
25326
|
-
|
|
25413
|
+
let size = decodeSynchsafe(sizeRaw);
|
|
25414
|
+
if (flags & 16 /* Footer */) {
|
|
25415
|
+
size += ID3_V2_HEADER_SIZE;
|
|
25416
|
+
}
|
|
25327
25417
|
return { majorVersion, revision, flags, size };
|
|
25328
25418
|
};
|
|
25329
25419
|
var parseId3V2Tag = (slice, header, tags) => {
|
|
25330
25420
|
if (![2, 3, 4].includes(header.majorVersion)) {
|
|
25331
|
-
|
|
25421
|
+
Logging._warn(`Unsupported ID3v2 major version: ${header.majorVersion}`);
|
|
25332
25422
|
return;
|
|
25333
25423
|
}
|
|
25334
|
-
const
|
|
25424
|
+
const dataSize = header.flags & 16 /* Footer */ ? header.size - ID3_V2_HEADER_SIZE : header.size;
|
|
25425
|
+
const bytes2 = readBytes(slice, dataSize);
|
|
25335
25426
|
const reader = new Id3V2Reader(header, bytes2);
|
|
25336
|
-
if (header.flags & 16 /* Footer */) {
|
|
25337
|
-
reader.removeFooter();
|
|
25338
|
-
}
|
|
25339
25427
|
if (header.flags & 128 /* Unsynchronisation */ && header.majorVersion === 3) {
|
|
25340
25428
|
reader.ununsynchronizeAll();
|
|
25341
25429
|
}
|
|
@@ -25366,12 +25454,12 @@ var Mediabunny = (() => {
|
|
|
25366
25454
|
frameUnsynchronized = !!(frame.flags & 1 << 1) || !!(header.flags & 128 /* Unsynchronisation */);
|
|
25367
25455
|
}
|
|
25368
25456
|
if (frameEncrypted) {
|
|
25369
|
-
|
|
25457
|
+
Logging._warn(`Skipping encrypted ID3v2 frame ${frame.id}`);
|
|
25370
25458
|
reader.pos = frameEndPos;
|
|
25371
25459
|
continue;
|
|
25372
25460
|
}
|
|
25373
25461
|
if (frameCompressed) {
|
|
25374
|
-
|
|
25462
|
+
Logging._warn(`Skipping compressed ID3v2 frame ${frame.id}`);
|
|
25375
25463
|
reader.pos = frameEndPos;
|
|
25376
25464
|
continue;
|
|
25377
25465
|
}
|
|
@@ -25607,10 +25695,6 @@ var Mediabunny = (() => {
|
|
|
25607
25695
|
this.bytes.set(after, before.length + newBytes.length);
|
|
25608
25696
|
this.view = new DataView(this.bytes.buffer);
|
|
25609
25697
|
}
|
|
25610
|
-
removeFooter() {
|
|
25611
|
-
this.bytes = this.bytes.subarray(0, this.bytes.length - ID3_V2_HEADER_SIZE);
|
|
25612
|
-
this.view = new DataView(this.bytes.buffer);
|
|
25613
|
-
}
|
|
25614
25698
|
readBytes(length) {
|
|
25615
25699
|
const slice = this.bytes.subarray(this.pos, this.pos + length);
|
|
25616
25700
|
this.pos += length;
|
|
@@ -32066,7 +32150,7 @@ ${cue.notes ?? ""}`;
|
|
|
32066
32150
|
const writtenTags = /* @__PURE__ */ new Set();
|
|
32067
32151
|
const writeInfoTag = (tag, value) => {
|
|
32068
32152
|
if (!isIso88591Compatible(value)) {
|
|
32069
|
-
|
|
32153
|
+
Logging._warn(`Didn't write tag '${tag}' because '${value}' is not ISO 8859-1-compatible.`);
|
|
32070
32154
|
return;
|
|
32071
32155
|
}
|
|
32072
32156
|
const size = value.length + 1;
|
|
@@ -33030,7 +33114,7 @@ ${cue.notes ?? ""}`;
|
|
|
33030
33114
|
this.gl = null;
|
|
33031
33115
|
this.canvas = null;
|
|
33032
33116
|
splitterGpuUnavailable = true;
|
|
33033
|
-
|
|
33117
|
+
Logging._warn("Falling back to CPU for color/alpha splitting.", error);
|
|
33034
33118
|
}
|
|
33035
33119
|
}
|
|
33036
33120
|
}
|
|
@@ -33150,7 +33234,7 @@ ${cue.notes ?? ""}`;
|
|
|
33150
33234
|
this.gl.shaderSource(shader, source);
|
|
33151
33235
|
this.gl.compileShader(shader);
|
|
33152
33236
|
if (!this.gl.getShaderParameter(shader, this.gl.COMPILE_STATUS)) {
|
|
33153
|
-
|
|
33237
|
+
Logging._error("Shader compile error:", this.gl.getShaderInfoLog(shader));
|
|
33154
33238
|
}
|
|
33155
33239
|
return shader;
|
|
33156
33240
|
}
|
|
@@ -33540,7 +33624,7 @@ ${cue.notes ?? ""}`;
|
|
|
33540
33624
|
/** @internal */
|
|
33541
33625
|
async _start() {
|
|
33542
33626
|
if (!this._errorPromiseAccessed) {
|
|
33543
|
-
|
|
33627
|
+
Logging._warn(
|
|
33544
33628
|
"Make sure not to ignore the `errorPromise` field on MediaStreamVideoTrackSource, so that any internal errors get bubbled up properly."
|
|
33545
33629
|
);
|
|
33546
33630
|
}
|
|
@@ -34357,7 +34441,7 @@ ${cue.notes ?? ""}`;
|
|
|
34357
34441
|
/** @internal */
|
|
34358
34442
|
async _start() {
|
|
34359
34443
|
if (!this._errorPromiseAccessed) {
|
|
34360
|
-
|
|
34444
|
+
Logging._warn(
|
|
34361
34445
|
"Make sure not to ignore the `errorPromise` field on MediaStreamAudioTrackSource, so that any internal errors get bubbled up properly."
|
|
34362
34446
|
);
|
|
34363
34447
|
}
|
|
@@ -34692,7 +34776,7 @@ ${cue.notes ?? ""}`;
|
|
|
34692
34776
|
}
|
|
34693
34777
|
if (track.type === otherTrack.type) {
|
|
34694
34778
|
if (!illegalPairingDetected) {
|
|
34695
|
-
|
|
34779
|
+
Logging._warn(
|
|
34696
34780
|
`Illegal pairing of two ${track.type} tracks detected, which is not possible in HLS; treating them as unpaired.`
|
|
34697
34781
|
);
|
|
34698
34782
|
illegalPairingDetected = true;
|
|
@@ -34701,7 +34785,7 @@ ${cue.notes ?? ""}`;
|
|
|
34701
34785
|
}
|
|
34702
34786
|
if (track.isVideoTrack() && track.metadata.hasOnlyKeyPackets || otherTrack.isVideoTrack() && otherTrack.metadata.hasOnlyKeyPackets) {
|
|
34703
34787
|
if (!keyPacketsOnlyPairingWarned) {
|
|
34704
|
-
|
|
34788
|
+
Logging._warn(
|
|
34705
34789
|
`A key-packets-only video track is pairable with another track, which is not possible in HLS; treating them as unpaired.`
|
|
34706
34790
|
);
|
|
34707
34791
|
keyPacketsOnlyPairingWarned = true;
|
|
@@ -35555,7 +35639,7 @@ ${cue.notes ?? ""}`;
|
|
|
35555
35639
|
groupIdTrackCount++;
|
|
35556
35640
|
masterPlaylistText += `#EXT-X-MEDIA:TYPE=${type.toUpperCase()},GROUP-ID="${decl.groupId}"`;
|
|
35557
35641
|
if (name !== null && /[\n\r"]/.test(name)) {
|
|
35558
|
-
|
|
35642
|
+
Logging._warn(
|
|
35559
35643
|
"Dropping track name since it includes a line feed, carriage return, or double quote character, which are not allowed in HLS playlist attributes."
|
|
35560
35644
|
);
|
|
35561
35645
|
name = null;
|
|
@@ -36789,7 +36873,7 @@ ${cue.notes ?? ""}`;
|
|
|
36789
36873
|
throw new Error("Output has been canceled.");
|
|
36790
36874
|
}
|
|
36791
36875
|
if (this._startPromise) {
|
|
36792
|
-
|
|
36876
|
+
Logging._warn("Output has already been started.");
|
|
36793
36877
|
return this._startPromise;
|
|
36794
36878
|
}
|
|
36795
36879
|
return this._startPromise = (async () => {
|
|
@@ -36820,11 +36904,11 @@ ${cue.notes ?? ""}`;
|
|
|
36820
36904
|
*/
|
|
36821
36905
|
async cancel() {
|
|
36822
36906
|
if (this._cancelPromise) {
|
|
36823
|
-
|
|
36907
|
+
Logging._warn("Output has already been canceled.");
|
|
36824
36908
|
return this._cancelPromise;
|
|
36825
36909
|
} else if (this.state === "finalizing" || this.state === "finalized") {
|
|
36826
36910
|
if (this.state === "finalized") {
|
|
36827
|
-
|
|
36911
|
+
Logging._warn("Output has already been finalized.");
|
|
36828
36912
|
}
|
|
36829
36913
|
return;
|
|
36830
36914
|
}
|
|
@@ -36853,7 +36937,7 @@ ${cue.notes ?? ""}`;
|
|
|
36853
36937
|
throw new Error("Cannot finalize after canceling.");
|
|
36854
36938
|
}
|
|
36855
36939
|
if (this._finalizePromise) {
|
|
36856
|
-
|
|
36940
|
+
Logging._warn("Output has already been finalized.");
|
|
36857
36941
|
return this._finalizePromise;
|
|
36858
36942
|
}
|
|
36859
36943
|
return this._finalizePromise = (async () => {
|
|
@@ -37301,7 +37385,7 @@ ${cue.notes ?? ""}`;
|
|
|
37301
37385
|
warnElements.push(this._getInvalidityExplanation().join(""));
|
|
37302
37386
|
}
|
|
37303
37387
|
if (warnElements.length > 0) {
|
|
37304
|
-
|
|
37388
|
+
Logging._warn(...warnElements);
|
|
37305
37389
|
}
|
|
37306
37390
|
}
|
|
37307
37391
|
}
|
|
@@ -37434,7 +37518,7 @@ The @mediabunny/mp3-encoder extension package provides support for encoding MP3.
|
|
|
37434
37518
|
return;
|
|
37435
37519
|
}
|
|
37436
37520
|
if (this._canceled) {
|
|
37437
|
-
|
|
37521
|
+
Logging._warn("Conversion already canceled.");
|
|
37438
37522
|
return;
|
|
37439
37523
|
}
|
|
37440
37524
|
this._canceled = true;
|
|
@@ -37565,7 +37649,7 @@ The @mediabunny/mp3-encoder extension package provides support for encoding MP3.
|
|
|
37565
37649
|
firstSample.close();
|
|
37566
37650
|
await tempOutput.finalize();
|
|
37567
37651
|
} catch (error) {
|
|
37568
|
-
|
|
37652
|
+
Logging._info("Error when probing encoder support. Falling back to rerender path.", error);
|
|
37569
37653
|
needsRerender = true;
|
|
37570
37654
|
void tempOutput.cancel();
|
|
37571
37655
|
}
|
|
@@ -37897,7 +37981,7 @@ The @mediabunny/mp3-encoder extension package provides support for encoding MP3.
|
|
|
37897
37981
|
// src/index.ts
|
|
37898
37982
|
var MEDIABUNNY_LOADED_SYMBOL = Symbol.for("mediabunny loaded");
|
|
37899
37983
|
if (globalThis[MEDIABUNNY_LOADED_SYMBOL]) {
|
|
37900
|
-
|
|
37984
|
+
Logging._error(
|
|
37901
37985
|
"[WARNING]\nMediabunny was loaded twice. This will likely cause Mediabunny not to work correctly. Check if multiple dependencies are importing different versions of Mediabunny, or if something is being bundled incorrectly."
|
|
37902
37986
|
);
|
|
37903
37987
|
}
|