diff --git a/src/engines/html5/media-source/adapters/native-adapter.js b/src/engines/html5/media-source/adapters/native-adapter.js index 9a34d9cc6..35c0424b8 100644 --- a/src/engines/html5/media-source/adapters/native-adapter.js +++ b/src/engines/html5/media-source/adapters/native-adapter.js @@ -1118,7 +1118,7 @@ export default class NativeAdapter extends BaseMediaSourceAdapter { } get liveDuration() { - return this._getLiveEdge() + this.getSegmentDuration(); + return this._getLiveEdge(); } /** @@ -1157,16 +1157,33 @@ export default class NativeAdapter extends BaseMediaSourceAdapter { */ _handleLiveDurationChange(): void { this._liveDurationChangeInterval = setInterval(() => { + this._calculateSegmentDuration(); const liveEdge = this._getLiveEdge(); if (this._liveEdge !== liveEdge) { this._liveEdge = liveEdge; this._videoElement.dispatchEvent(new window.Event(Html5EventType.DURATION_CHANGE)); } + }, LIVE_DURATION_INTERVAL_MS); + } + + /** + * Calculate the segment duration + * @function _calculateSegmentDuration + * @returns {void} + * @private + */ + _calculateSegmentDuration() { + if (this._videoElement.seekable.start(0) === 0) { const {buffered, seekable} = this._videoElement; if (buffered.length && seekable.length) { this._segmentDuration = (buffered.end(buffered.length - 1) - seekable.end(seekable.length - 1)) / SAFARI_BUFFERED_SEGMENTS_COUNT; } - }, LIVE_DURATION_INTERVAL_MS); + } else { + const liveEdge = this._getLiveEdge(); + if (this._liveEdge !== liveEdge) { + this._segmentDuration = liveEdge - this._liveEdge; + } + } } /**