@give-tech/ec-player 0.0.1-beta.11 → 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/index.js CHANGED
@@ -1552,6 +1552,8 @@ class HLSPlayer extends BasePlayer {
1552
1552
  this._sampleQueue = [];
1553
1553
  this.prefetcher = null;
1554
1554
  this.lastRenderTime = 0;
1555
+ this.playStartTime = 0;
1556
+ this.firstFramePts = null;
1555
1557
  this.renderLoop = (timestamp = 0) => {
1556
1558
  if (!this.isPlaying) return;
1557
1559
  const downloaded = this.isFMP4 ? this.sampleQueue.length : this.nalQueue.length;
@@ -1565,17 +1567,24 @@ class HLSPlayer extends BasePlayer {
1565
1567
  totalSegments
1566
1568
  });
1567
1569
  if (this.frameBuffer.length > 0 && this.renderer) {
1568
- const frame = this.frameBuffer.shift();
1569
- this.renderer.render(frame);
1570
- if (this.lastRenderTime > 0) {
1571
- const elapsed = timestamp - this.lastRenderTime;
1572
- this.setCurrentTime(this._currentTime + elapsed);
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);
1573
1587
  }
1574
- this.lastRenderTime = timestamp;
1575
- this.updateState({ resolution: `${frame.width}x${frame.height}` });
1576
- const fps = this.renderer.updateFps();
1577
- this.updateState({ fps });
1578
- this.callbacks.onFrameRender?.(frame);
1579
1588
  } else {
1580
1589
  this.lastRenderTime = 0;
1581
1590
  }
@@ -1655,6 +1664,8 @@ class HLSPlayer extends BasePlayer {
1655
1664
  this.isPlaying = true;
1656
1665
  this.decodeLoopAbort = false;
1657
1666
  this.lastRenderTime = 0;
1667
+ this.playStartTime = 0;
1668
+ this.firstFramePts = null;
1658
1669
  this.updateState({ isPlaying: true });
1659
1670
  if (!this.prefetcher) {
1660
1671
  this.initPrefetcher();
@@ -2200,6 +2211,10 @@ class HLSPlayer extends BasePlayer {
2200
2211
  data: annexBData,
2201
2212
  size: annexBData.length
2202
2213
  });
2214
+ if (frame) {
2215
+ frame.pts = sample.pts;
2216
+ frame.dts = sample.dts;
2217
+ }
2203
2218
  return frame;
2204
2219
  }
2205
2220
  /**