@give-tech/ec-player 0.0.1-beta.21 → 0.0.1-beta.22
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/index.js +37 -30
- package/dist/index.js.map +1 -1
- package/package.json +4 -1
- package/dist/decoder/H264Decoder.d.ts +0 -14
- package/dist/decoder/H264Decoder.d.ts.map +0 -1
- package/dist/decoder/HEVCDecoder.d.ts +0 -21
- package/dist/decoder/HEVCDecoder.d.ts.map +0 -1
- package/dist/decoder/WASMLoader.d.ts +0 -10
- package/dist/decoder/WASMLoader.d.ts.map +0 -1
- package/dist/decoder/index.d.ts +0 -4
- package/dist/decoder/index.d.ts.map +0 -1
- package/dist/demuxer/DemuxerFactory.d.ts +0 -24
- package/dist/demuxer/DemuxerFactory.d.ts.map +0 -1
- package/dist/demuxer/FLVDemuxer.d.ts +0 -132
- package/dist/demuxer/FLVDemuxer.d.ts.map +0 -1
- package/dist/demuxer/FormatDetector.d.ts +0 -21
- package/dist/demuxer/FormatDetector.d.ts.map +0 -1
- package/dist/demuxer/PESExtractor.d.ts +0 -11
- package/dist/demuxer/PESExtractor.d.ts.map +0 -1
- package/dist/demuxer/TSDemuxer.d.ts +0 -17
- package/dist/demuxer/TSDemuxer.d.ts.map +0 -1
- package/dist/demuxer/fMP4Demuxer.d.ts +0 -148
- package/dist/demuxer/fMP4Demuxer.d.ts.map +0 -1
- package/dist/demuxer/index.d.ts +0 -7
- package/dist/demuxer/index.d.ts.map +0 -1
- package/dist/env/EnvDetector.d.ts +0 -167
- package/dist/env/EnvDetector.d.ts.map +0 -1
- package/dist/env/index.d.ts +0 -5
- package/dist/env/index.d.ts.map +0 -1
- package/dist/index.d.ts +0 -11
- package/dist/index.d.ts.map +0 -1
- package/dist/parser/NALParser.d.ts +0 -21
- package/dist/parser/NALParser.d.ts.map +0 -1
- package/dist/parser/index.d.ts +0 -2
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/player/BasePlayer.d.ts +0 -118
- package/dist/player/BasePlayer.d.ts.map +0 -1
- package/dist/player/EcPlayerCore.d.ts +0 -77
- package/dist/player/EcPlayerCore.d.ts.map +0 -1
- package/dist/player/FLVPlayer.d.ts +0 -134
- package/dist/player/FLVPlayer.d.ts.map +0 -1
- package/dist/player/HLSPlayer.d.ts +0 -128
- package/dist/player/HLSPlayer.d.ts.map +0 -1
- package/dist/player/index.d.ts +0 -3
- package/dist/player/index.d.ts.map +0 -1
- package/dist/prefetch/BasePrefetcher.d.ts +0 -99
- package/dist/prefetch/BasePrefetcher.d.ts.map +0 -1
- package/dist/prefetch/SegmentPrefetcher.d.ts +0 -123
- package/dist/prefetch/SegmentPrefetcher.d.ts.map +0 -1
- package/dist/prefetch/StreamPrefetcher.d.ts +0 -113
- package/dist/prefetch/StreamPrefetcher.d.ts.map +0 -1
- package/dist/prefetch/index.d.ts +0 -13
- package/dist/prefetch/index.d.ts.map +0 -1
- package/dist/prefetch/types.d.ts +0 -93
- package/dist/prefetch/types.d.ts.map +0 -1
- package/dist/renderer/Canvas2DRenderer.d.ts +0 -16
- package/dist/renderer/Canvas2DRenderer.d.ts.map +0 -1
- package/dist/renderer/index.d.ts +0 -2
- package/dist/renderer/index.d.ts.map +0 -1
- package/dist/types/index.d.ts +0 -121
- package/dist/types/index.d.ts.map +0 -1
- package/dist/utils/index.d.ts +0 -2
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/logger.d.ts +0 -36
- package/dist/utils/logger.d.ts.map +0 -1
package/dist/index.js
CHANGED
|
@@ -417,6 +417,7 @@ class fMP4Demuxer {
|
|
|
417
417
|
this.avcC = null;
|
|
418
418
|
this.hvcC = null;
|
|
419
419
|
this.isHevc = false;
|
|
420
|
+
this.trackHandlers = /* @__PURE__ */ new Map();
|
|
420
421
|
}
|
|
421
422
|
/**
|
|
422
423
|
* 解析初始化段 (ftyp + moov)
|
|
@@ -463,7 +464,7 @@ class fMP4Demuxer {
|
|
|
463
464
|
let offset = trakOffset + 8;
|
|
464
465
|
const endOffset = trakOffset + trakSize;
|
|
465
466
|
let currentTrackId = null;
|
|
466
|
-
let
|
|
467
|
+
let handlerType = null;
|
|
467
468
|
console.log("[fMP4Demuxer] parseTrak called, size:", trakSize);
|
|
468
469
|
while (offset < endOffset - 8) {
|
|
469
470
|
const boxSize = readUint32$1(data, offset);
|
|
@@ -479,22 +480,25 @@ class fMP4Demuxer {
|
|
|
479
480
|
}
|
|
480
481
|
console.log("[fMP4Demuxer] tkhd: version=", version, "trackId=", currentTrackId);
|
|
481
482
|
} else if (boxType === "mdia") {
|
|
482
|
-
|
|
483
|
-
if (
|
|
484
|
-
this.
|
|
485
|
-
console.log("[fMP4Demuxer]
|
|
483
|
+
handlerType = this.parseMdiaAndGetHandlerType(data, offset, boxSize);
|
|
484
|
+
if (handlerType && currentTrackId !== null) {
|
|
485
|
+
this.trackHandlers.set(currentTrackId, handlerType);
|
|
486
|
+
console.log("[fMP4Demuxer] Track", currentTrackId, "handler:", handlerType);
|
|
487
|
+
if (handlerType === "vide") {
|
|
488
|
+
this.trackId = currentTrackId;
|
|
489
|
+
}
|
|
486
490
|
}
|
|
487
491
|
}
|
|
488
492
|
offset += boxSize;
|
|
489
493
|
}
|
|
490
494
|
}
|
|
491
495
|
/**
|
|
492
|
-
* 解析 mdia box
|
|
496
|
+
* 解析 mdia box 并返回 handler type
|
|
493
497
|
*/
|
|
494
|
-
|
|
498
|
+
parseMdiaAndGetHandlerType(data, mdiaOffset, mdiaSize) {
|
|
495
499
|
let offset = mdiaOffset + 8;
|
|
496
500
|
const endOffset = mdiaOffset + mdiaSize;
|
|
497
|
-
let
|
|
501
|
+
let handlerType = null;
|
|
498
502
|
while (offset < endOffset - 8) {
|
|
499
503
|
const boxSize = readUint32$1(data, offset);
|
|
500
504
|
const boxType = readFourCC(data, offset + 4);
|
|
@@ -502,14 +506,13 @@ class fMP4Demuxer {
|
|
|
502
506
|
if (boxType === "mdhd") {
|
|
503
507
|
this.parseMdhd(data, offset + 8);
|
|
504
508
|
} else if (boxType === "hdlr") {
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
} else if (boxType === "minf" && isVideo) {
|
|
509
|
+
handlerType = readFourCC(data, offset + 8 + 8);
|
|
510
|
+
} else if (boxType === "minf" && handlerType === "vide") {
|
|
508
511
|
this.parseMinf(data, offset, boxSize);
|
|
509
512
|
}
|
|
510
513
|
offset += boxSize;
|
|
511
514
|
}
|
|
512
|
-
return
|
|
515
|
+
return handlerType;
|
|
513
516
|
}
|
|
514
517
|
/**
|
|
515
518
|
* 解析 mdhd box 获取 timescale
|
|
@@ -770,9 +773,15 @@ class fMP4Demuxer {
|
|
|
770
773
|
if (!traf.tfhd || !traf.tfdt) {
|
|
771
774
|
continue;
|
|
772
775
|
}
|
|
773
|
-
|
|
776
|
+
const trackId = traf.tfhd.trackId;
|
|
777
|
+
const handlerType = this.trackHandlers.get(trackId);
|
|
778
|
+
if (handlerType && handlerType !== "vide") {
|
|
779
|
+
console.log(`[fMP4Demuxer] Skipping non-video track: trackId=${trackId}, handler=${handlerType}`);
|
|
774
780
|
continue;
|
|
775
781
|
}
|
|
782
|
+
if (!handlerType) {
|
|
783
|
+
console.log(`[fMP4Demuxer] Unknown trackId=${trackId}, will filter by sample size`);
|
|
784
|
+
}
|
|
776
785
|
let baseDts = traf.tfdt.baseMediaDecodeTime;
|
|
777
786
|
const baseDataOffset = traf.tfhd.baseDataOffset ?? moofOffset;
|
|
778
787
|
for (const trun of traf.truns) {
|
|
@@ -790,6 +799,11 @@ class fMP4Demuxer {
|
|
|
790
799
|
console.log(`[fMP4Demuxer] Skipping sample: no data available`);
|
|
791
800
|
continue;
|
|
792
801
|
}
|
|
802
|
+
if (!handlerType && sampleSize < 1e3) {
|
|
803
|
+
dataOffset += sampleSize;
|
|
804
|
+
baseDts += sample.duration ?? 0;
|
|
805
|
+
continue;
|
|
806
|
+
}
|
|
793
807
|
const sampleData = mdatData.slice(dataOffset, dataOffset + sampleSize);
|
|
794
808
|
const isSync = (sample.flags ?? 0) & 16777216;
|
|
795
809
|
const cto = sample.compositionTimeOffset ?? 0;
|
|
@@ -1509,7 +1523,6 @@ class HLSSegmentPrefetcher extends SegmentPrefetcher {
|
|
|
1509
1523
|
* 获取分片数据
|
|
1510
1524
|
*/
|
|
1511
1525
|
async fetchSegment(segment, index) {
|
|
1512
|
-
console.log("[HLSSegmentPrefetcher] fetchSegment called, index=", index, "uri=", segment.uri);
|
|
1513
1526
|
if (segment.initSegmentUri && segment.initSegmentUri !== this.currentInitSegmentUri) {
|
|
1514
1527
|
console.log("[HLSSegmentPrefetcher] Init segment changed:", segment.initSegmentUri);
|
|
1515
1528
|
await this.player.loadNewInitSegment(segment.initSegmentUri);
|
|
@@ -1517,22 +1530,13 @@ class HLSSegmentPrefetcher extends SegmentPrefetcher {
|
|
|
1517
1530
|
}
|
|
1518
1531
|
const baseUrl = this.baseUrl;
|
|
1519
1532
|
const url = segment.uri.startsWith("http") ? segment.uri : baseUrl + segment.uri;
|
|
1520
|
-
console.log("[HLSSegmentPrefetcher] Fetching URL:", url);
|
|
1521
1533
|
const headers = {};
|
|
1522
1534
|
if (segment.byteRange) {
|
|
1523
1535
|
const { start, end } = segment.byteRange;
|
|
1524
1536
|
headers["Range"] = `bytes=${start}-${end}`;
|
|
1525
1537
|
}
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
console.log("[HLSSegmentPrefetcher] Fetch response:", response.status, response.ok);
|
|
1529
|
-
const buffer = await response.arrayBuffer();
|
|
1530
|
-
console.log("[HLSSegmentPrefetcher] Fetched data size:", buffer.byteLength);
|
|
1531
|
-
return new Uint8Array(buffer);
|
|
1532
|
-
} catch (error) {
|
|
1533
|
-
console.error("[HLSSegmentPrefetcher] Fetch error:", error);
|
|
1534
|
-
throw error;
|
|
1535
|
-
}
|
|
1538
|
+
const response = await fetch(url, { headers });
|
|
1539
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
1536
1540
|
}
|
|
1537
1541
|
/**
|
|
1538
1542
|
* 解析分片数据
|
|
@@ -1613,7 +1617,7 @@ class HLSPlayer extends BasePlayer {
|
|
|
1613
1617
|
this.frameBuffer.shift();
|
|
1614
1618
|
this.renderer.render(frame);
|
|
1615
1619
|
this.accumulatedMediaTime += frameDurationMs;
|
|
1616
|
-
this.setCurrentTime(this.accumulatedMediaTime);
|
|
1620
|
+
this.setCurrentTime(this.accumulatedMediaTime / 1e3);
|
|
1617
1621
|
this.updateState({ resolution: `${frame.width}x${frame.height}` });
|
|
1618
1622
|
const fps = this.renderer.updateFps();
|
|
1619
1623
|
this.updateState({ fps });
|
|
@@ -1736,8 +1740,6 @@ class HLSPlayer extends BasePlayer {
|
|
|
1736
1740
|
if (this.prefetcher) {
|
|
1737
1741
|
this.prefetcher.setCurrentSegmentIndex(targetIndex);
|
|
1738
1742
|
}
|
|
1739
|
-
this.playStartTime = performance.now();
|
|
1740
|
-
this.accumulatedMediaTime = time;
|
|
1741
1743
|
this.setCurrentTime(time);
|
|
1742
1744
|
console.log("[HLSPlayer] Seek to", time, "ms, segment:", targetIndex);
|
|
1743
1745
|
}
|
|
@@ -1893,7 +1895,9 @@ class HLSPlayer extends BasePlayer {
|
|
|
1893
1895
|
this._sampleQueue.push({ sample });
|
|
1894
1896
|
}
|
|
1895
1897
|
totalSampleCount += samples.length;
|
|
1898
|
+
console.log("[parseFMP4Data] Pushed", samples.length, "samples, totalQueue=", this._sampleQueue.length);
|
|
1896
1899
|
}
|
|
1900
|
+
console.log("[parseFMP4Data] Total samples parsed:", totalSampleCount);
|
|
1897
1901
|
return totalSampleCount;
|
|
1898
1902
|
}
|
|
1899
1903
|
/**
|
|
@@ -2055,10 +2059,13 @@ class HLSPlayer extends BasePlayer {
|
|
|
2055
2059
|
*/
|
|
2056
2060
|
initDecoderFromHvcC(hvcC) {
|
|
2057
2061
|
if (this.decoderInitialized || !this.hevcDecoder) return;
|
|
2058
|
-
|
|
2062
|
+
console.log("[fMP4] hvcC length:", hvcC.length);
|
|
2063
|
+
console.log("[fMP4] hvcC first 8 bytes:", Array.from(hvcC.slice(0, 8)).map((b) => b.toString(16).padStart(2, "0")).join(" "));
|
|
2064
|
+
console.log("[fMP4] hvcC bytes 8-24:", Array.from(hvcC.slice(8, 24)).map((b) => b.toString(16).padStart(2, "0")).join(" "));
|
|
2065
|
+
let offset = 8 + 22;
|
|
2059
2066
|
const numOfArrays = hvcC[offset];
|
|
2067
|
+
console.log("[fMP4] hvcC[30] (numOfArrays):", numOfArrays, "0x" + numOfArrays.toString(16));
|
|
2060
2068
|
offset += 1;
|
|
2061
|
-
console.log(`[fMP4] hvcC: numOfArrays=${numOfArrays}`);
|
|
2062
2069
|
for (let i = 0; i < numOfArrays && offset < hvcC.length - 3; i++) {
|
|
2063
2070
|
const typeCompressed = hvcC[offset];
|
|
2064
2071
|
const arrayType = typeCompressed & 63;
|