@give-tech/ec-player 0.0.1-beta.8 → 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
|
|
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":"AAAA;;;;GAIG;AA8CH,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qBAAqB,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,OAAO;IACtB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,mBAAmB,EAAE,MAAM,CAAA;CAC5B;AAED,MAAM,WAAW,OAAO;IACtB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,OAAO,EAAE,UAAU,EAAE,CAAA;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,IAAI,CAAC,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,OAAO,EAAE,CAAA;CACjB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,CAAC,EAAE;QAAE,cAAc,EAAE,MAAM,CAAA;KAAE,CAAA;IACjC,KAAK,EAAE,OAAO,EAAE,CAAA;IAChB,UAAU,EAAE,MAAM,CAAA;IAClB,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,UAAU,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;IACX,GAAG,EAAE,MAAM,CAAA;IACX,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,OAAO,CAAA;CAChB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,IAAI,CAAC,EAAE,UAAU,CAAA;IACjB,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB;AAMD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAO;IACxB,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,IAAI,CAA0B;IACtC,OAAO,CAAC,MAAM,CAAQ;IAEtB;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,UAAU,GAAG,WAAW,GAAG,IAAI;IAyBtD;;OAEG;IACH,OAAO,CAAC,SAAS;IAkBjB;;OAEG;IACH,OAAO,CAAC,SAAS;
|
|
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 === "
|
|
470
|
-
|
|
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
|
-
|
|
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 === "
|
|
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;
|