@give-tech/ec-player 0.0.1-beta.7 → 0.0.1-beta.9

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.
@@ -72,9 +72,9 @@ export declare class fMP4Demuxer {
72
72
  */
73
73
  private parseTrak;
74
74
  /**
75
- * 解析 mdia box
75
+ * 解析 mdia box 并检查是否为视频轨道
76
76
  */
77
- private parseMdia;
77
+ private parseMdiaAndCheckVideo;
78
78
  /**
79
79
  * 解析 mdhd box 获取 timescale
80
80
  */
@@ -121,6 +121,7 @@ export declare class fMP4Demuxer {
121
121
  private parseTrun;
122
122
  /**
123
123
  * 从 moof + mdat 提取视频样本
124
+ * 只提取视频轨道(trackId 匹配)的数据
124
125
  */
125
126
  extractSamples(moof: MoofBox, mdatData: Uint8Array, mdatOffset: number): VideoSample[];
126
127
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"fMP4Demuxer.d.ts","sourceRoot":"","sources":["../../src/demuxer/fMP4Demuxer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fMP4Demuxer.d.ts","sourceRoot":"","sources":["../../src/demuxer/fMP4Demuxer.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -462,33 +462,51 @@ class fMP4Demuxer {
462
462
  parseTrak(data, trakOffset, trakSize) {
463
463
  let offset = trakOffset + 8;
464
464
  const endOffset = trakOffset + trakSize;
465
+ let currentTrackId = null;
466
+ let isVideoTrack = false;
465
467
  while (offset < endOffset - 8) {
466
468
  const boxSize = readUint32$1(data, offset);
467
469
  const boxType = readFourCC(data, offset + 4);
468
470
  if (boxSize < 8) break;
469
- if (boxType === "mdia") {
470
- this.parseMdia(data, offset, boxSize);
471
+ if (boxType === "tkhd") {
472
+ const version = data[offset + 8];
473
+ if (version === 1) {
474
+ currentTrackId = readUint32$1(data, offset + 8 + 16 + 4);
475
+ } else {
476
+ currentTrackId = readUint32$1(data, offset + 8 + 8 + 4);
477
+ }
478
+ } else if (boxType === "mdia") {
479
+ isVideoTrack = this.parseMdiaAndCheckVideo(data, offset, boxSize);
480
+ if (isVideoTrack && currentTrackId !== null) {
481
+ this.trackId = currentTrackId;
482
+ console.log("[fMP4Demuxer] Found video track, trackId:", currentTrackId);
483
+ }
471
484
  }
472
485
  offset += boxSize;
473
486
  }
474
487
  }
475
488
  /**
476
- * 解析 mdia box
489
+ * 解析 mdia box 并检查是否为视频轨道
477
490
  */
478
- parseMdia(data, mdiaOffset, mdiaSize) {
491
+ parseMdiaAndCheckVideo(data, mdiaOffset, mdiaSize) {
479
492
  let offset = mdiaOffset + 8;
480
493
  const endOffset = mdiaOffset + mdiaSize;
494
+ let isVideo = false;
481
495
  while (offset < endOffset - 8) {
482
496
  const boxSize = readUint32$1(data, offset);
483
497
  const boxType = readFourCC(data, offset + 4);
484
498
  if (boxSize < 8) break;
485
499
  if (boxType === "mdhd") {
486
500
  this.parseMdhd(data, offset + 8);
487
- } else if (boxType === "minf") {
501
+ } else if (boxType === "hdlr") {
502
+ const handlerType = readFourCC(data, offset + 8 + 8);
503
+ isVideo = handlerType === "vide";
504
+ } else if (boxType === "minf" && isVideo) {
488
505
  this.parseMinf(data, offset, boxSize);
489
506
  }
490
507
  offset += boxSize;
491
508
  }
509
+ return isVideo;
492
510
  }
493
511
  /**
494
512
  * 解析 mdhd box 获取 timescale
@@ -741,11 +759,16 @@ class fMP4Demuxer {
741
759
  }
742
760
  /**
743
761
  * 从 moof + mdat 提取视频样本
762
+ * 只提取视频轨道(trackId 匹配)的数据
744
763
  */
745
764
  extractSamples(moof, mdatData, mdatOffset) {
746
765
  const samples = [];
747
766
  for (const traf of moof.trafs) {
748
767
  if (!traf.tfhd || !traf.tfdt) continue;
768
+ if (traf.tfhd.trackId !== this.trackId) {
769
+ console.log(`[fMP4Demuxer] Skipping track ${traf.tfhd.trackId} (expected video track ${this.trackId})`);
770
+ continue;
771
+ }
749
772
  let baseDts = traf.tfdt.baseMediaDecodeTime;
750
773
  for (const trun of traf.truns) {
751
774
  let dataOffset = 0;
@@ -1759,33 +1782,46 @@ class HLSPlayer extends BasePlayer {
1759
1782
  * 解析 fMP4 数据
1760
1783
  */
1761
1784
  parseFMP4Data(data) {
1762
- let moofOffset = -1;
1763
- let mdatOffset = -1;
1764
- let mdatSize = 0;
1785
+ let totalSampleCount = 0;
1765
1786
  let offset = 0;
1766
1787
  while (offset < data.length - 8) {
1767
- const boxSize = this.readBoxSize(data, offset);
1768
- const boxType = this.readBoxType(data, offset + 4);
1769
- if (boxType === "moof") {
1770
- moofOffset = offset;
1771
- } else if (boxType === "mdat") {
1772
- mdatOffset = offset;
1773
- mdatSize = boxSize;
1774
- break;
1788
+ let moofOffset = -1;
1789
+ let mdatOffset = -1;
1790
+ let mdatSize = 0;
1791
+ while (offset < data.length - 8) {
1792
+ const boxSize = this.readBoxSize(data, offset);
1793
+ const boxType = this.readBoxType(data, offset + 4);
1794
+ if (boxSize < 8) break;
1795
+ if (boxType === "moof") {
1796
+ moofOffset = offset;
1797
+ offset += boxSize;
1798
+ break;
1799
+ }
1800
+ offset += boxSize;
1801
+ }
1802
+ if (moofOffset < 0) break;
1803
+ while (offset < data.length - 8) {
1804
+ const boxSize = this.readBoxSize(data, offset);
1805
+ const boxType = this.readBoxType(data, offset + 4);
1806
+ if (boxSize < 8) break;
1807
+ if (boxType === "mdat") {
1808
+ mdatOffset = offset;
1809
+ mdatSize = boxSize;
1810
+ offset += boxSize;
1811
+ break;
1812
+ }
1813
+ offset += boxSize;
1775
1814
  }
1776
- offset += boxSize;
1777
- }
1778
- let sampleCount = 0;
1779
- if (moofOffset >= 0 && mdatOffset >= 0) {
1815
+ if (mdatOffset < 0) break;
1780
1816
  const moof = this.fmp4Demuxer.parseMoof(data, moofOffset);
1781
1817
  const mdatData = data.slice(mdatOffset + 8, mdatOffset + mdatSize);
1782
1818
  const samples = this.fmp4Demuxer.extractSamples(moof, mdatData, mdatOffset);
1783
1819
  for (const sample of samples) {
1784
1820
  this._sampleQueue.push({ sample });
1785
1821
  }
1786
- sampleCount = samples.length;
1822
+ totalSampleCount += samples.length;
1787
1823
  }
1788
- return sampleCount;
1824
+ return totalSampleCount;
1789
1825
  }
1790
1826
  /**
1791
1827
  * 解析 TS 数据