diff --git a/src/controller/audio-stream-controller.ts b/src/controller/audio-stream-controller.ts index 2668a54aba6..56e7e74c99b 100644 --- a/src/controller/audio-stream-controller.ts +++ b/src/controller/audio-stream-controller.ts @@ -648,12 +648,7 @@ class AudioStreamController 'Buffer full error also media.currentTime is not buffered, flush audio buffer' ); this.fragCurrent = null; - // flush everything - this.hls.trigger(Events.BUFFER_FLUSHING, { - startOffset: 0, - endOffset: Number.POSITIVE_INFINITY, - type: 'audio', - }); + super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio'); } } break; @@ -824,11 +819,7 @@ class AudioStreamController const { hls, media, trackId } = this; if (media) { this.log('Switching audio track : flushing all audio'); - hls.trigger(Events.BUFFER_FLUSHING, { - startOffset: 0, - endOffset: Number.POSITIVE_INFINITY, - type: 'audio', - }); + super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio'); } this.audioSwitch = false; hls.trigger(Events.AUDIO_TRACK_SWITCHED, { id: trackId }); diff --git a/src/controller/base-stream-controller.ts b/src/controller/base-stream-controller.ts index faaf3710dea..d3e67afbaec 100644 --- a/src/controller/base-stream-controller.ts +++ b/src/controller/base-stream-controller.ts @@ -1185,6 +1185,9 @@ export default class BaseStreamController // (so that we will check against video.buffered ranges in case of alt audio track) const bufferedTimeRanges = BufferHelper.getBuffered(media); this.fragmentTracker.detectEvictedFragments(type, bufferedTimeRanges); + if (this.state === State.ENDED) { + this.state = State.IDLE; + } } protected resetLiveStartWhenNotLoaded(level: number): boolean {