mediabunny 1.9.0 → 1.9.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -0
- package/dist/bundles/mediabunny.cjs +51 -8
- package/dist/bundles/mediabunny.min.cjs +4 -4
- package/dist/bundles/mediabunny.min.mjs +4 -4
- package/dist/bundles/mediabunny.mjs +51 -8
- package/dist/modules/src/matroska/ebml.d.ts +2 -0
- package/dist/modules/src/matroska/ebml.d.ts.map +1 -1
- package/dist/modules/src/matroska/ebml.js +18 -2
- package/dist/modules/src/matroska/matroska-demuxer.d.ts.map +1 -1
- package/dist/modules/src/matroska/matroska-demuxer.js +36 -7
- package/dist/modules/src/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/src/matroska/ebml.ts +23 -2
- package/src/matroska/matroska-demuxer.ts +47 -6
package/README.md
CHANGED
|
@@ -28,6 +28,14 @@ Mediabunny is a JavaScript library for reading, writing, and converting media fi
|
|
|
28
28
|
</a>
|
|
29
29
|
</div>
|
|
30
30
|
|
|
31
|
+
### Bronze sponsors
|
|
32
|
+
|
|
33
|
+
<div align="center">
|
|
34
|
+
<a href="https://www.reactvideoeditor.com/" target="_blank">
|
|
35
|
+
<img src="./docs/public/sponsors/rve.svg" width="40" height="40" alt="React Video Editor">
|
|
36
|
+
</a>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
31
39
|
[Sponsor Mediabunny's development](https://github.com/sponsors/Vanilagy)
|
|
32
40
|
|
|
33
41
|
## Features
|
|
@@ -5462,8 +5462,6 @@ var Mediabunny = (() => {
|
|
|
5462
5462
|
408125543 /* Segment */
|
|
5463
5463
|
];
|
|
5464
5464
|
var LEVEL_1_EBML_IDS = [
|
|
5465
|
-
17138 /* EBMLMaxIDLength */,
|
|
5466
|
-
17139 /* EBMLMaxSizeLength */,
|
|
5467
5465
|
290298740 /* SeekHead */,
|
|
5468
5466
|
357149030 /* Info */,
|
|
5469
5467
|
524531317 /* Cluster */,
|
|
@@ -5827,6 +5825,23 @@ var Mediabunny = (() => {
|
|
|
5827
5825
|
}
|
|
5828
5826
|
return null;
|
|
5829
5827
|
}
|
|
5828
|
+
/** Searches for the next occurrence of an element ID using a naive byte-wise search. */
|
|
5829
|
+
async resync(ids, until) {
|
|
5830
|
+
const loadChunkSize = 2 ** 20;
|
|
5831
|
+
const idsSet = new Set(ids);
|
|
5832
|
+
while (this.pos <= until - MIN_HEADER_SIZE) {
|
|
5833
|
+
if (!this.reader.rangeIsLoaded(this.pos, Math.min(this.pos + MAX_HEADER_SIZE, until))) {
|
|
5834
|
+
await this.reader.loadRange(this.pos, Math.min(this.pos + loadChunkSize, until));
|
|
5835
|
+
}
|
|
5836
|
+
const elementStartPos = this.pos;
|
|
5837
|
+
const elementId = this.readElementId();
|
|
5838
|
+
if (elementId !== null && idsSet.has(elementId)) {
|
|
5839
|
+
return elementStartPos;
|
|
5840
|
+
}
|
|
5841
|
+
this.pos = elementStartPos + 1;
|
|
5842
|
+
}
|
|
5843
|
+
return null;
|
|
5844
|
+
}
|
|
5830
5845
|
};
|
|
5831
5846
|
var CODEC_STRING_MAP = {
|
|
5832
5847
|
"avc": "V_MPEG4/ISO/AVC",
|
|
@@ -14414,6 +14429,7 @@ ${cue.notes ?? ""}`;
|
|
|
14414
14429
|
{ id: 374648427 /* Tracks */, flag: "tracksSeen" },
|
|
14415
14430
|
{ id: 475249515 /* Cues */, flag: "cuesSeen" }
|
|
14416
14431
|
];
|
|
14432
|
+
var MAX_RESYNC_LENGTH = 10 * 2 ** 20;
|
|
14417
14433
|
var MatroskaDemuxer = class extends Demuxer {
|
|
14418
14434
|
constructor(input) {
|
|
14419
14435
|
super(input);
|
|
@@ -14523,8 +14539,18 @@ ${cue.notes ?? ""}`;
|
|
|
14523
14539
|
);
|
|
14524
14540
|
const elementStartPos = this.metadataReader.pos;
|
|
14525
14541
|
const header = this.metadataReader.readElementHeader();
|
|
14526
|
-
if (!header) {
|
|
14527
|
-
|
|
14542
|
+
if (!header || !LEVEL_1_EBML_IDS.includes(header.id)) {
|
|
14543
|
+
this.metadataReader.pos = elementStartPos;
|
|
14544
|
+
const nextPos = await this.metadataReader.resync(
|
|
14545
|
+
LEVEL_1_EBML_IDS,
|
|
14546
|
+
Math.min(this.currentSegment.elementEndPos, this.metadataReader.pos + MAX_RESYNC_LENGTH)
|
|
14547
|
+
);
|
|
14548
|
+
if (nextPos) {
|
|
14549
|
+
this.metadataReader.pos = nextPos;
|
|
14550
|
+
continue;
|
|
14551
|
+
} else {
|
|
14552
|
+
break;
|
|
14553
|
+
}
|
|
14528
14554
|
}
|
|
14529
14555
|
const { id, size } = header;
|
|
14530
14556
|
const dataStartPos = this.metadataReader.pos;
|
|
@@ -14541,6 +14567,9 @@ ${cue.notes ?? ""}`;
|
|
|
14541
14567
|
this.currentSegment.clusterSeekStartPos = elementStartPos;
|
|
14542
14568
|
}
|
|
14543
14569
|
}
|
|
14570
|
+
if (size !== null) {
|
|
14571
|
+
this.metadataReader.pos = dataStartPos + size;
|
|
14572
|
+
}
|
|
14544
14573
|
if (this.currentSegment.infoSeen && this.currentSegment.tracksSeen && this.currentSegment.cuesSeen) {
|
|
14545
14574
|
break;
|
|
14546
14575
|
}
|
|
@@ -14564,8 +14593,12 @@ ${cue.notes ?? ""}`;
|
|
|
14564
14593
|
if (size === null) {
|
|
14565
14594
|
break;
|
|
14566
14595
|
}
|
|
14567
|
-
|
|
14568
|
-
|
|
14596
|
+
}
|
|
14597
|
+
if (!clusterEncountered) {
|
|
14598
|
+
const seekEntry = this.currentSegment.seekEntries.find((entry) => entry.id === 524531317 /* Cluster */);
|
|
14599
|
+
if (seekEntry) {
|
|
14600
|
+
this.currentSegment.clusterSeekStartPos = segmentDataStart + seekEntry.segmentPosition;
|
|
14601
|
+
} else {
|
|
14569
14602
|
this.currentSegment.clusterSeekStartPos = this.metadataReader.pos;
|
|
14570
14603
|
}
|
|
14571
14604
|
}
|
|
@@ -15613,8 +15646,18 @@ ${cue.notes ?? ""}`;
|
|
|
15613
15646
|
await metadataReader.reader.loadRange(metadataReader.pos, metadataReader.pos + MAX_HEADER_SIZE);
|
|
15614
15647
|
const elementStartPos = metadataReader.pos;
|
|
15615
15648
|
const elementHeader = metadataReader.readElementHeader();
|
|
15616
|
-
if (!elementHeader) {
|
|
15617
|
-
|
|
15649
|
+
if (!elementHeader || !LEVEL_1_EBML_IDS.includes(elementHeader.id)) {
|
|
15650
|
+
metadataReader.pos = elementStartPos;
|
|
15651
|
+
const nextPos = await metadataReader.resync(
|
|
15652
|
+
LEVEL_1_EBML_IDS,
|
|
15653
|
+
Math.min(segment.elementEndPos, metadataReader.pos + MAX_RESYNC_LENGTH)
|
|
15654
|
+
);
|
|
15655
|
+
if (nextPos) {
|
|
15656
|
+
metadataReader.pos = nextPos;
|
|
15657
|
+
continue;
|
|
15658
|
+
} else {
|
|
15659
|
+
break;
|
|
15660
|
+
}
|
|
15618
15661
|
}
|
|
15619
15662
|
const id = elementHeader.id;
|
|
15620
15663
|
let size = elementHeader.size;
|