diff --git a/src/streaming/controllers/BufferController.js b/src/streaming/controllers/BufferController.js index 821b218cc9..b126beb623 100644 --- a/src/streaming/controllers/BufferController.js +++ b/src/streaming/controllers/BufferController.js @@ -80,7 +80,8 @@ function BufferController(config) { isAppendingInProgress, isPruningInProgress, initCache, - seekStartTime; + seekStartTime, + seekClearedBufferingCompleted; function setup() { log = Debug(context).getInstance().log.bind(instance); @@ -237,8 +238,11 @@ function BufferController(config) { // START Buffer Level, State & Sufficiency Handling. //********************************************************************** function onPlaybackSeeking() { - lastIndex = Number.POSITIVE_INFINITY; - isBufferingCompleted = false; + if (isBufferingCompleted) { + seekClearedBufferingCompleted = true; + isBufferingCompleted = false; + maxAppendedIndex = 0; + } seekStartTime = undefined; onPlaybackProgression(); } @@ -289,6 +293,12 @@ function BufferController(config) { // No need to check buffer if type is not audio or video (for example if several errors occur during text parsing, so that the buffer cannot be filled, no error must occur on video playback) if (type !== 'audio' && type !== 'video') return; + if (seekClearedBufferingCompleted && !isBufferingCompleted && playbackController && playbackController.getTimeToStreamEnd() - bufferLevel < STALL_THRESHOLD) { + seekClearedBufferingCompleted = false; + isBufferingCompleted = true; + eventBus.trigger(Events.BUFFERING_COMPLETED, {sender: instance, streamInfo: streamProcessor.getStreamInfo()}); + } + if (bufferLevel < STALL_THRESHOLD && !isBufferingCompleted) { notifyBufferStateChanged(BUFFER_EMPTY); } else { @@ -488,6 +498,7 @@ function BufferController(config) { isBufferingCompleted = false; isAppendingInProgress = false; isPruningInProgress = false; + seekClearedBufferingCompleted = false; bufferLevel = 0; wallclockTicked = 0;