@give-tech/ec-player 0.0.1-beta.10 → 0.0.1-beta.12
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/demuxer/fMP4Demuxer.d.ts +1 -1
- package/dist/demuxer/fMP4Demuxer.d.ts.map +1 -1
- package/dist/index.js +33 -14
- package/dist/index.js.map +1 -1
- package/dist/player/HLSPlayer.d.ts +2 -0
- package/dist/player/HLSPlayer.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -123,7 +123,7 @@ export declare class fMP4Demuxer {
|
|
|
123
123
|
* 从 moof + mdat 提取视频样本
|
|
124
124
|
* 只提取视频轨道(trackId 匹配)的数据
|
|
125
125
|
*/
|
|
126
|
-
extractSamples(moof: MoofBox, mdatData: Uint8Array, mdatOffset: number): VideoSample[];
|
|
126
|
+
extractSamples(moof: MoofBox, mdatData: Uint8Array, moofOffset: number, mdatOffset: number): VideoSample[];
|
|
127
127
|
/**
|
|
128
128
|
* 获取 timescale
|
|
129
129
|
*/
|
|
@@ -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
|
@@ -464,6 +464,7 @@ class fMP4Demuxer {
|
|
|
464
464
|
const endOffset = trakOffset + trakSize;
|
|
465
465
|
let currentTrackId = null;
|
|
466
466
|
let isVideoTrack = false;
|
|
467
|
+
console.log("[fMP4Demuxer] parseTrak called, size:", trakSize);
|
|
467
468
|
while (offset < endOffset - 8) {
|
|
468
469
|
const boxSize = readUint32$1(data, offset);
|
|
469
470
|
const boxType = readFourCC(data, offset + 4);
|
|
@@ -763,19 +764,22 @@ class fMP4Demuxer {
|
|
|
763
764
|
* 从 moof + mdat 提取视频样本
|
|
764
765
|
* 只提取视频轨道(trackId 匹配)的数据
|
|
765
766
|
*/
|
|
766
|
-
extractSamples(moof, mdatData, mdatOffset) {
|
|
767
|
+
extractSamples(moof, mdatData, moofOffset, mdatOffset) {
|
|
767
768
|
const samples = [];
|
|
768
769
|
for (const traf of moof.trafs) {
|
|
769
770
|
if (!traf.tfhd || !traf.tfdt) continue;
|
|
771
|
+
console.log(`[fMP4Demuxer] extractSamples: traf.trackId=${traf.tfhd.trackId}, videoTrackId=${this.trackId}`);
|
|
770
772
|
if (traf.tfhd.trackId !== this.trackId) {
|
|
771
|
-
console.log(`[fMP4Demuxer] Skipping track ${traf.tfhd.trackId}
|
|
773
|
+
console.log(`[fMP4Demuxer] Skipping track ${traf.tfhd.trackId}`);
|
|
772
774
|
continue;
|
|
773
775
|
}
|
|
774
776
|
let baseDts = traf.tfdt.baseMediaDecodeTime;
|
|
777
|
+
const baseDataOffset = traf.tfhd.baseDataOffset ?? moofOffset;
|
|
775
778
|
for (const trun of traf.truns) {
|
|
776
779
|
let dataOffset = 0;
|
|
777
780
|
if (trun.dataOffset !== void 0) {
|
|
778
|
-
|
|
781
|
+
const absoluteOffset = baseDataOffset + trun.dataOffset;
|
|
782
|
+
dataOffset = absoluteOffset - mdatOffset - 8;
|
|
779
783
|
}
|
|
780
784
|
for (const sample of trun.samples) {
|
|
781
785
|
if (sample.size === void 0 || sample.size <= 0) continue;
|
|
@@ -1548,6 +1552,8 @@ class HLSPlayer extends BasePlayer {
|
|
|
1548
1552
|
this._sampleQueue = [];
|
|
1549
1553
|
this.prefetcher = null;
|
|
1550
1554
|
this.lastRenderTime = 0;
|
|
1555
|
+
this.playStartTime = 0;
|
|
1556
|
+
this.firstFramePts = null;
|
|
1551
1557
|
this.renderLoop = (timestamp = 0) => {
|
|
1552
1558
|
if (!this.isPlaying) return;
|
|
1553
1559
|
const downloaded = this.isFMP4 ? this.sampleQueue.length : this.nalQueue.length;
|
|
@@ -1561,17 +1567,24 @@ class HLSPlayer extends BasePlayer {
|
|
|
1561
1567
|
totalSegments
|
|
1562
1568
|
});
|
|
1563
1569
|
if (this.frameBuffer.length > 0 && this.renderer) {
|
|
1564
|
-
const frame = this.frameBuffer
|
|
1565
|
-
this.
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1570
|
+
const frame = this.frameBuffer[0];
|
|
1571
|
+
if (this.playStartTime === 0 || this.firstFramePts === null) {
|
|
1572
|
+
this.playStartTime = performance.now();
|
|
1573
|
+
this.firstFramePts = frame.pts ?? 0;
|
|
1574
|
+
}
|
|
1575
|
+
const elapsedMs = performance.now() - this.playStartTime;
|
|
1576
|
+
const timescale = this.fmp4Demuxer.getTimescale();
|
|
1577
|
+
const currentTargetPts = this.firstFramePts + elapsedMs * timescale / 1e3;
|
|
1578
|
+
const framePts = frame.pts ?? 0;
|
|
1579
|
+
if (framePts <= currentTargetPts) {
|
|
1580
|
+
this.frameBuffer.shift();
|
|
1581
|
+
this.renderer.render(frame);
|
|
1582
|
+
this.setCurrentTime(framePts / timescale);
|
|
1583
|
+
this.updateState({ resolution: `${frame.width}x${frame.height}` });
|
|
1584
|
+
const fps = this.renderer.updateFps();
|
|
1585
|
+
this.updateState({ fps });
|
|
1586
|
+
this.callbacks.onFrameRender?.(frame);
|
|
1569
1587
|
}
|
|
1570
|
-
this.lastRenderTime = timestamp;
|
|
1571
|
-
this.updateState({ resolution: `${frame.width}x${frame.height}` });
|
|
1572
|
-
const fps = this.renderer.updateFps();
|
|
1573
|
-
this.updateState({ fps });
|
|
1574
|
-
this.callbacks.onFrameRender?.(frame);
|
|
1575
1588
|
} else {
|
|
1576
1589
|
this.lastRenderTime = 0;
|
|
1577
1590
|
}
|
|
@@ -1651,6 +1664,8 @@ class HLSPlayer extends BasePlayer {
|
|
|
1651
1664
|
this.isPlaying = true;
|
|
1652
1665
|
this.decodeLoopAbort = false;
|
|
1653
1666
|
this.lastRenderTime = 0;
|
|
1667
|
+
this.playStartTime = 0;
|
|
1668
|
+
this.firstFramePts = null;
|
|
1654
1669
|
this.updateState({ isPlaying: true });
|
|
1655
1670
|
if (!this.prefetcher) {
|
|
1656
1671
|
this.initPrefetcher();
|
|
@@ -1817,7 +1832,7 @@ class HLSPlayer extends BasePlayer {
|
|
|
1817
1832
|
if (mdatOffset < 0) break;
|
|
1818
1833
|
const moof = this.fmp4Demuxer.parseMoof(data, moofOffset);
|
|
1819
1834
|
const mdatData = data.slice(mdatOffset + 8, mdatOffset + mdatSize);
|
|
1820
|
-
const samples = this.fmp4Demuxer.extractSamples(moof, mdatData, mdatOffset);
|
|
1835
|
+
const samples = this.fmp4Demuxer.extractSamples(moof, mdatData, moofOffset, mdatOffset);
|
|
1821
1836
|
for (const sample of samples) {
|
|
1822
1837
|
this._sampleQueue.push({ sample });
|
|
1823
1838
|
}
|
|
@@ -2196,6 +2211,10 @@ class HLSPlayer extends BasePlayer {
|
|
|
2196
2211
|
data: annexBData,
|
|
2197
2212
|
size: annexBData.length
|
|
2198
2213
|
});
|
|
2214
|
+
if (frame) {
|
|
2215
|
+
frame.pts = sample.pts;
|
|
2216
|
+
frame.dts = sample.dts;
|
|
2217
|
+
}
|
|
2199
2218
|
return frame;
|
|
2200
2219
|
}
|
|
2201
2220
|
/**
|