@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.
Files changed (65) hide show
  1. package/dist/index.js +37 -30
  2. package/dist/index.js.map +1 -1
  3. package/package.json +4 -1
  4. package/dist/decoder/H264Decoder.d.ts +0 -14
  5. package/dist/decoder/H264Decoder.d.ts.map +0 -1
  6. package/dist/decoder/HEVCDecoder.d.ts +0 -21
  7. package/dist/decoder/HEVCDecoder.d.ts.map +0 -1
  8. package/dist/decoder/WASMLoader.d.ts +0 -10
  9. package/dist/decoder/WASMLoader.d.ts.map +0 -1
  10. package/dist/decoder/index.d.ts +0 -4
  11. package/dist/decoder/index.d.ts.map +0 -1
  12. package/dist/demuxer/DemuxerFactory.d.ts +0 -24
  13. package/dist/demuxer/DemuxerFactory.d.ts.map +0 -1
  14. package/dist/demuxer/FLVDemuxer.d.ts +0 -132
  15. package/dist/demuxer/FLVDemuxer.d.ts.map +0 -1
  16. package/dist/demuxer/FormatDetector.d.ts +0 -21
  17. package/dist/demuxer/FormatDetector.d.ts.map +0 -1
  18. package/dist/demuxer/PESExtractor.d.ts +0 -11
  19. package/dist/demuxer/PESExtractor.d.ts.map +0 -1
  20. package/dist/demuxer/TSDemuxer.d.ts +0 -17
  21. package/dist/demuxer/TSDemuxer.d.ts.map +0 -1
  22. package/dist/demuxer/fMP4Demuxer.d.ts +0 -148
  23. package/dist/demuxer/fMP4Demuxer.d.ts.map +0 -1
  24. package/dist/demuxer/index.d.ts +0 -7
  25. package/dist/demuxer/index.d.ts.map +0 -1
  26. package/dist/env/EnvDetector.d.ts +0 -167
  27. package/dist/env/EnvDetector.d.ts.map +0 -1
  28. package/dist/env/index.d.ts +0 -5
  29. package/dist/env/index.d.ts.map +0 -1
  30. package/dist/index.d.ts +0 -11
  31. package/dist/index.d.ts.map +0 -1
  32. package/dist/parser/NALParser.d.ts +0 -21
  33. package/dist/parser/NALParser.d.ts.map +0 -1
  34. package/dist/parser/index.d.ts +0 -2
  35. package/dist/parser/index.d.ts.map +0 -1
  36. package/dist/player/BasePlayer.d.ts +0 -118
  37. package/dist/player/BasePlayer.d.ts.map +0 -1
  38. package/dist/player/EcPlayerCore.d.ts +0 -77
  39. package/dist/player/EcPlayerCore.d.ts.map +0 -1
  40. package/dist/player/FLVPlayer.d.ts +0 -134
  41. package/dist/player/FLVPlayer.d.ts.map +0 -1
  42. package/dist/player/HLSPlayer.d.ts +0 -128
  43. package/dist/player/HLSPlayer.d.ts.map +0 -1
  44. package/dist/player/index.d.ts +0 -3
  45. package/dist/player/index.d.ts.map +0 -1
  46. package/dist/prefetch/BasePrefetcher.d.ts +0 -99
  47. package/dist/prefetch/BasePrefetcher.d.ts.map +0 -1
  48. package/dist/prefetch/SegmentPrefetcher.d.ts +0 -123
  49. package/dist/prefetch/SegmentPrefetcher.d.ts.map +0 -1
  50. package/dist/prefetch/StreamPrefetcher.d.ts +0 -113
  51. package/dist/prefetch/StreamPrefetcher.d.ts.map +0 -1
  52. package/dist/prefetch/index.d.ts +0 -13
  53. package/dist/prefetch/index.d.ts.map +0 -1
  54. package/dist/prefetch/types.d.ts +0 -93
  55. package/dist/prefetch/types.d.ts.map +0 -1
  56. package/dist/renderer/Canvas2DRenderer.d.ts +0 -16
  57. package/dist/renderer/Canvas2DRenderer.d.ts.map +0 -1
  58. package/dist/renderer/index.d.ts +0 -2
  59. package/dist/renderer/index.d.ts.map +0 -1
  60. package/dist/types/index.d.ts +0 -121
  61. package/dist/types/index.d.ts.map +0 -1
  62. package/dist/utils/index.d.ts +0 -2
  63. package/dist/utils/index.d.ts.map +0 -1
  64. package/dist/utils/logger.d.ts +0 -36
  65. 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 isVideoTrack = false;
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
- isVideoTrack = this.parseMdiaAndCheckVideo(data, offset, boxSize);
483
- if (isVideoTrack && currentTrackId !== null) {
484
- this.trackId = currentTrackId;
485
- console.log("[fMP4Demuxer] Found video track, trackId:", currentTrackId);
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
- parseMdiaAndCheckVideo(data, mdiaOffset, mdiaSize) {
498
+ parseMdiaAndGetHandlerType(data, mdiaOffset, mdiaSize) {
495
499
  let offset = mdiaOffset + 8;
496
500
  const endOffset = mdiaOffset + mdiaSize;
497
- let isVideo = false;
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
- const handlerType = readFourCC(data, offset + 8 + 8);
506
- isVideo = handlerType === "vide";
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 isVideo;
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
- if (traf.tfhd.trackId !== this.trackId) {
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
- try {
1527
- const response = await fetch(url, { headers });
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
- let offset = 22;
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;