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 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
- break;
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
- this.metadataReader.pos = dataStartPos + size;
14568
- if (!clusterEncountered) {
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
- break;
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;