mediabunny 1.7.2 → 1.7.4
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 +68 -29
- package/dist/bundles/mediabunny.min.cjs +4 -4
- package/dist/bundles/mediabunny.min.mjs +5 -5
- package/dist/bundles/mediabunny.mjs +68 -29
- package/dist/modules/src/input-format.d.ts.map +1 -1
- package/dist/modules/src/input-format.js +13 -3
- package/dist/modules/src/matroska/ebml.d.ts +4 -4
- package/dist/modules/src/matroska/ebml.d.ts.map +1 -1
- package/dist/modules/src/matroska/ebml.js +20 -5
- package/dist/modules/src/matroska/matroska-demuxer.d.ts +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.js +32 -6
- package/dist/modules/src/media-source.js +18 -20
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/input-format.ts +16 -3
- package/src/matroska/ebml.ts +25 -6
- package/src/matroska/matroska-demuxer.ts +38 -7
- package/src/media-source.ts +22 -22
|
@@ -5607,7 +5607,7 @@ var Mediabunny = (() => {
|
|
|
5607
5607
|
};
|
|
5608
5608
|
var MAX_VAR_INT_SIZE = 8;
|
|
5609
5609
|
var MIN_HEADER_SIZE = 2;
|
|
5610
|
-
var MAX_HEADER_SIZE =
|
|
5610
|
+
var MAX_HEADER_SIZE = 2 * MAX_VAR_INT_SIZE;
|
|
5611
5611
|
var EBMLReader = class {
|
|
5612
5612
|
constructor(reader) {
|
|
5613
5613
|
this.reader = reader;
|
|
@@ -5631,9 +5631,12 @@ var Mediabunny = (() => {
|
|
|
5631
5631
|
readVarIntSize() {
|
|
5632
5632
|
const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
|
|
5633
5633
|
const firstByte = view2.getUint8(offset);
|
|
5634
|
+
if (firstByte === 0) {
|
|
5635
|
+
return null;
|
|
5636
|
+
}
|
|
5634
5637
|
let width = 1;
|
|
5635
5638
|
let mask = 128;
|
|
5636
|
-
while ((firstByte & mask) === 0
|
|
5639
|
+
while ((firstByte & mask) === 0) {
|
|
5637
5640
|
width++;
|
|
5638
5641
|
mask >>= 1;
|
|
5639
5642
|
}
|
|
@@ -5642,9 +5645,12 @@ var Mediabunny = (() => {
|
|
|
5642
5645
|
readVarInt() {
|
|
5643
5646
|
const { view: view2, offset } = this.reader.getViewAndOffset(this.pos, this.pos + 1);
|
|
5644
5647
|
const firstByte = view2.getUint8(offset);
|
|
5648
|
+
if (firstByte === 0) {
|
|
5649
|
+
return null;
|
|
5650
|
+
}
|
|
5645
5651
|
let width = 1;
|
|
5646
5652
|
let mask = 1 << 7;
|
|
5647
|
-
while ((firstByte & mask) === 0
|
|
5653
|
+
while ((firstByte & mask) === 0) {
|
|
5648
5654
|
width++;
|
|
5649
5655
|
mask >>= 1;
|
|
5650
5656
|
}
|
|
@@ -5700,6 +5706,9 @@ var Mediabunny = (() => {
|
|
|
5700
5706
|
}
|
|
5701
5707
|
readElementId() {
|
|
5702
5708
|
const size = this.readVarIntSize();
|
|
5709
|
+
if (size === null) {
|
|
5710
|
+
return null;
|
|
5711
|
+
}
|
|
5703
5712
|
const id = this.readUnsignedInt(size);
|
|
5704
5713
|
return id;
|
|
5705
5714
|
}
|
|
@@ -5718,6 +5727,9 @@ var Mediabunny = (() => {
|
|
|
5718
5727
|
}
|
|
5719
5728
|
readElementHeader() {
|
|
5720
5729
|
const id = this.readElementId();
|
|
5730
|
+
if (id === null) {
|
|
5731
|
+
return null;
|
|
5732
|
+
}
|
|
5721
5733
|
const size = this.readElementSize();
|
|
5722
5734
|
return { id, size };
|
|
5723
5735
|
}
|
|
@@ -5725,12 +5737,15 @@ var Mediabunny = (() => {
|
|
|
5725
5737
|
async searchForNextElementId(ids, until) {
|
|
5726
5738
|
const loadChunkSize = 2 ** 20;
|
|
5727
5739
|
const idsSet = new Set(ids);
|
|
5728
|
-
while (this.pos
|
|
5729
|
-
if (!this.reader.rangeIsLoaded(this.pos, this.pos + MAX_HEADER_SIZE)) {
|
|
5740
|
+
while (this.pos <= until - MIN_HEADER_SIZE) {
|
|
5741
|
+
if (!this.reader.rangeIsLoaded(this.pos, Math.min(this.pos + MAX_HEADER_SIZE, until))) {
|
|
5730
5742
|
await this.reader.loadRange(this.pos, Math.min(this.pos + loadChunkSize, until));
|
|
5731
5743
|
}
|
|
5732
5744
|
const elementStartPos = this.pos;
|
|
5733
5745
|
const elementHeader = this.readElementHeader();
|
|
5746
|
+
if (!elementHeader) {
|
|
5747
|
+
break;
|
|
5748
|
+
}
|
|
5734
5749
|
if (idsSet.has(elementHeader.id)) {
|
|
5735
5750
|
return elementStartPos;
|
|
5736
5751
|
}
|
|
@@ -10774,13 +10789,9 @@ ${cue.notes ?? ""}`;
|
|
|
10774
10789
|
this.lastMultipleOfKeyFrameInterval = multipleOfKeyFrameInterval;
|
|
10775
10790
|
if (this.customEncoder) {
|
|
10776
10791
|
this.customEncoderQueueSize++;
|
|
10777
|
-
const
|
|
10778
|
-
|
|
10779
|
-
|
|
10780
|
-
videoSample.close();
|
|
10781
|
-
}
|
|
10782
|
-
}).catch((error) => {
|
|
10783
|
-
this.encoderError ??= error;
|
|
10792
|
+
const clonedSample = videoSample.clone();
|
|
10793
|
+
const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(clonedSample, finalEncodeOptions)).then(() => this.customEncoderQueueSize--).catch((error) => this.encoderError ??= error).finally(() => {
|
|
10794
|
+
clonedSample.close();
|
|
10784
10795
|
});
|
|
10785
10796
|
if (this.customEncoderQueueSize >= 4) {
|
|
10786
10797
|
await promise;
|
|
@@ -10863,6 +10874,7 @@ ${cue.notes ?? ""}`;
|
|
|
10863
10874
|
void this.muxer.addEncodedVideoPacket(this.source._connectedTrack, packet, meta);
|
|
10864
10875
|
},
|
|
10865
10876
|
error: (error) => {
|
|
10877
|
+
error.stack = new Error().stack;
|
|
10866
10878
|
this.encoderError ??= error;
|
|
10867
10879
|
}
|
|
10868
10880
|
});
|
|
@@ -10897,7 +10909,6 @@ ${cue.notes ?? ""}`;
|
|
|
10897
10909
|
}
|
|
10898
10910
|
checkForEncoderError() {
|
|
10899
10911
|
if (this.encoderError) {
|
|
10900
|
-
this.encoderError.stack = new Error().stack;
|
|
10901
10912
|
throw this.encoderError;
|
|
10902
10913
|
}
|
|
10903
10914
|
}
|
|
@@ -11203,13 +11214,9 @@ ${cue.notes ?? ""}`;
|
|
|
11203
11214
|
assert(this.encoderInitialized);
|
|
11204
11215
|
if (this.customEncoder) {
|
|
11205
11216
|
this.customEncoderQueueSize++;
|
|
11206
|
-
const
|
|
11207
|
-
|
|
11208
|
-
|
|
11209
|
-
audioSample.close();
|
|
11210
|
-
}
|
|
11211
|
-
}).catch((error) => {
|
|
11212
|
-
this.encoderError ??= error;
|
|
11217
|
+
const clonedSample = audioSample.clone();
|
|
11218
|
+
const promise = this.customEncoderCallSerializer.call(() => this.customEncoder.encode(clonedSample)).then(() => this.customEncoderQueueSize--).catch((error) => this.encoderError ??= error).finally(() => {
|
|
11219
|
+
clonedSample.close();
|
|
11213
11220
|
});
|
|
11214
11221
|
if (this.customEncoderQueueSize >= 4) {
|
|
11215
11222
|
await promise;
|
|
@@ -11345,6 +11352,7 @@ ${cue.notes ?? ""}`;
|
|
|
11345
11352
|
void this.muxer.addEncodedAudioPacket(this.source._connectedTrack, packet, meta);
|
|
11346
11353
|
},
|
|
11347
11354
|
error: (error) => {
|
|
11355
|
+
error.stack = new Error().stack;
|
|
11348
11356
|
this.encoderError ??= error;
|
|
11349
11357
|
}
|
|
11350
11358
|
});
|
|
@@ -11476,7 +11484,6 @@ ${cue.notes ?? ""}`;
|
|
|
11476
11484
|
}
|
|
11477
11485
|
checkForEncoderError() {
|
|
11478
11486
|
if (this.encoderError) {
|
|
11479
|
-
this.encoderError.stack = new Error().stack;
|
|
11480
11487
|
throw this.encoderError;
|
|
11481
11488
|
}
|
|
11482
11489
|
}
|
|
@@ -14300,6 +14307,9 @@ ${cue.notes ?? ""}`;
|
|
|
14300
14307
|
this.metadataReader.pos + MAX_HEADER_SIZE
|
|
14301
14308
|
);
|
|
14302
14309
|
const header = this.metadataReader.readElementHeader();
|
|
14310
|
+
if (!header) {
|
|
14311
|
+
break;
|
|
14312
|
+
}
|
|
14303
14313
|
const id = header.id;
|
|
14304
14314
|
let size = header.size;
|
|
14305
14315
|
const startPos = this.metadataReader.pos;
|
|
@@ -14355,13 +14365,17 @@ ${cue.notes ?? ""}`;
|
|
|
14355
14365
|
this.metadataReader.pos + 2 ** 14
|
|
14356
14366
|
);
|
|
14357
14367
|
let clusterEncountered = false;
|
|
14358
|
-
while (this.metadataReader.pos
|
|
14368
|
+
while (this.metadataReader.pos <= this.currentSegment.elementEndPos - MIN_HEADER_SIZE) {
|
|
14359
14369
|
await this.metadataReader.reader.loadRange(
|
|
14360
14370
|
this.metadataReader.pos,
|
|
14361
14371
|
this.metadataReader.pos + MAX_HEADER_SIZE
|
|
14362
14372
|
);
|
|
14363
14373
|
const elementStartPos = this.metadataReader.pos;
|
|
14364
|
-
const
|
|
14374
|
+
const header = this.metadataReader.readElementHeader();
|
|
14375
|
+
if (!header) {
|
|
14376
|
+
break;
|
|
14377
|
+
}
|
|
14378
|
+
const { id, size } = header;
|
|
14365
14379
|
const dataStartPos = this.metadataReader.pos;
|
|
14366
14380
|
const metadataElementIndex = METADATA_ELEMENTS.findIndex((x) => x.id === id);
|
|
14367
14381
|
if (metadataElementIndex !== -1) {
|
|
@@ -14414,7 +14428,9 @@ ${cue.notes ?? ""}`;
|
|
|
14414
14428
|
this.metadataReader.pos + 2 ** 12
|
|
14415
14429
|
// Load a larger range, assuming the correct element will be there
|
|
14416
14430
|
);
|
|
14417
|
-
const
|
|
14431
|
+
const header = this.metadataReader.readElementHeader();
|
|
14432
|
+
if (!header) continue;
|
|
14433
|
+
const { id, size } = header;
|
|
14418
14434
|
if (id !== target.id) continue;
|
|
14419
14435
|
assertDefinedSize(size);
|
|
14420
14436
|
this.currentSegment[target.flag] = true;
|
|
@@ -14465,6 +14481,7 @@ ${cue.notes ?? ""}`;
|
|
|
14465
14481
|
await this.metadataReader.reader.loadRange(this.metadataReader.pos, this.metadataReader.pos + MAX_HEADER_SIZE);
|
|
14466
14482
|
const elementStartPos = this.metadataReader.pos;
|
|
14467
14483
|
const elementHeader = this.metadataReader.readElementHeader();
|
|
14484
|
+
assert(elementHeader);
|
|
14468
14485
|
const id = elementHeader.id;
|
|
14469
14486
|
let size = elementHeader.size;
|
|
14470
14487
|
const dataStartPos = this.metadataReader.pos;
|
|
@@ -14649,11 +14666,18 @@ ${cue.notes ?? ""}`;
|
|
|
14649
14666
|
readContiguousElements(reader, totalSize) {
|
|
14650
14667
|
const startIndex = reader.pos;
|
|
14651
14668
|
while (reader.pos - startIndex <= totalSize - MIN_HEADER_SIZE) {
|
|
14652
|
-
this.traverseElement(reader);
|
|
14669
|
+
const foundElement = this.traverseElement(reader);
|
|
14670
|
+
if (!foundElement) {
|
|
14671
|
+
break;
|
|
14672
|
+
}
|
|
14653
14673
|
}
|
|
14654
14674
|
}
|
|
14655
14675
|
traverseElement(reader) {
|
|
14656
|
-
const
|
|
14676
|
+
const header = reader.readElementHeader();
|
|
14677
|
+
if (!header) {
|
|
14678
|
+
return false;
|
|
14679
|
+
}
|
|
14680
|
+
const { id, size } = header;
|
|
14657
14681
|
const dataStartPos = reader.pos;
|
|
14658
14682
|
assertDefinedSize(size);
|
|
14659
14683
|
switch (id) {
|
|
@@ -15050,6 +15074,7 @@ ${cue.notes ?? ""}`;
|
|
|
15050
15074
|
{
|
|
15051
15075
|
if (!this.currentCluster) break;
|
|
15052
15076
|
const trackNumber = reader.readVarInt();
|
|
15077
|
+
if (trackNumber === null) break;
|
|
15053
15078
|
const relativeTimestamp = reader.readS16();
|
|
15054
15079
|
const flags = reader.readU8();
|
|
15055
15080
|
const isKeyFrame = !!(flags & 128);
|
|
@@ -15085,6 +15110,7 @@ ${cue.notes ?? ""}`;
|
|
|
15085
15110
|
{
|
|
15086
15111
|
if (!this.currentCluster) break;
|
|
15087
15112
|
const trackNumber = reader.readVarInt();
|
|
15113
|
+
if (trackNumber === null) break;
|
|
15088
15114
|
const relativeTimestamp = reader.readS16();
|
|
15089
15115
|
const flags = reader.readU8();
|
|
15090
15116
|
const lacing = flags >> 1 & 3;
|
|
@@ -15121,6 +15147,7 @@ ${cue.notes ?? ""}`;
|
|
|
15121
15147
|
break;
|
|
15122
15148
|
}
|
|
15123
15149
|
reader.pos = dataStartPos + size;
|
|
15150
|
+
return true;
|
|
15124
15151
|
}
|
|
15125
15152
|
};
|
|
15126
15153
|
var MatroskaTrackBacking = class {
|
|
@@ -15420,7 +15447,7 @@ ${cue.notes ?? ""}`;
|
|
|
15420
15447
|
metadataReader.pos = cuePoint.clusterPosition;
|
|
15421
15448
|
}
|
|
15422
15449
|
}
|
|
15423
|
-
while (metadataReader.pos
|
|
15450
|
+
while (metadataReader.pos <= segment.elementEndPos - MIN_HEADER_SIZE) {
|
|
15424
15451
|
if (prevCluster) {
|
|
15425
15452
|
const trackData = prevCluster.trackData.get(this.internalTrack.id);
|
|
15426
15453
|
if (trackData && trackData.startTimestamp > latestTimestamp) {
|
|
@@ -15435,6 +15462,9 @@ ${cue.notes ?? ""}`;
|
|
|
15435
15462
|
await metadataReader.reader.loadRange(metadataReader.pos, metadataReader.pos + MAX_HEADER_SIZE);
|
|
15436
15463
|
const elementStartPos = metadataReader.pos;
|
|
15437
15464
|
const elementHeader = metadataReader.readElementHeader();
|
|
15465
|
+
if (!elementHeader) {
|
|
15466
|
+
break;
|
|
15467
|
+
}
|
|
15438
15468
|
const id = elementHeader.id;
|
|
15439
15469
|
let size = elementHeader.size;
|
|
15440
15470
|
const dataStartPos = metadataReader.pos;
|
|
@@ -16640,6 +16670,9 @@ ${cue.notes ?? ""}`;
|
|
|
16640
16670
|
return "video/quicktime";
|
|
16641
16671
|
}
|
|
16642
16672
|
};
|
|
16673
|
+
function foo() {
|
|
16674
|
+
return 5;
|
|
16675
|
+
}
|
|
16643
16676
|
var MatroskaInputFormat = class extends InputFormat {
|
|
16644
16677
|
/** @internal */
|
|
16645
16678
|
async isSupportedEBMLOfDocType(input, desiredDocType) {
|
|
@@ -16649,6 +16682,10 @@ ${cue.notes ?? ""}`;
|
|
|
16649
16682
|
}
|
|
16650
16683
|
const ebmlReader = new EBMLReader(input._mainReader);
|
|
16651
16684
|
const varIntSize = ebmlReader.readVarIntSize();
|
|
16685
|
+
if (varIntSize === null) {
|
|
16686
|
+
return false;
|
|
16687
|
+
}
|
|
16688
|
+
foo();
|
|
16652
16689
|
if (varIntSize < 1 || varIntSize > 8) {
|
|
16653
16690
|
return false;
|
|
16654
16691
|
}
|
|
@@ -16661,8 +16698,10 @@ ${cue.notes ?? ""}`;
|
|
|
16661
16698
|
return false;
|
|
16662
16699
|
}
|
|
16663
16700
|
const startPos = ebmlReader.pos;
|
|
16664
|
-
while (ebmlReader.pos
|
|
16665
|
-
const
|
|
16701
|
+
while (ebmlReader.pos <= startPos + dataSize - MIN_HEADER_SIZE) {
|
|
16702
|
+
const header = ebmlReader.readElementHeader();
|
|
16703
|
+
if (!header) break;
|
|
16704
|
+
const { id: id2, size } = header;
|
|
16666
16705
|
const dataStartPos = ebmlReader.pos;
|
|
16667
16706
|
if (size === null) return false;
|
|
16668
16707
|
switch (id2) {
|