From b8c2004e0203b002fb3ea6fec740a53d48d74b33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Velad=20Galv=C3=A1n?= Date: Mon, 12 Jun 2023 19:33:36 +0200 Subject: [PATCH] fix(HLS): Avoid HLS resync when there is a gap in the stream (#5284) --- lib/media/streaming_engine.js | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/lib/media/streaming_engine.js b/lib/media/streaming_engine.js index ead1d24937..b706251a89 100644 --- a/lib/media/streaming_engine.js +++ b/lib/media/streaming_engine.js @@ -671,10 +671,15 @@ shaka.media.StreamingEngine = class { const mediaState = this.mediaStates_.get(type); const logPrefix = shaka.media.StreamingEngine.logPrefix_(mediaState); - // Always clear the iterator since we need to start streaming from the - // new time. This also happens in clearBuffer_, but if we don't clear, - // we still want to reset the iterator. - mediaState.segmentIterator = null; + let segment = null; + if (mediaState.segmentIterator) { + segment = mediaState.segmentIterator.current(); + } + // Only reset the iterator if we seek outside the current segment. + if (!segment || segment.startTime > presentationTime || + segment.endTime < presentationTime) { + mediaState.segmentIterator = null; + } if (!newTimeIsBuffered(type)) { const bufferEnd =