From 07ec82c2c0f7baefe78b334787456e721b0266e0 Mon Sep 17 00:00:00 2001 From: Frans de Jonge Date: Sat, 21 May 2022 01:53:18 +0200 Subject: [PATCH] Retry aligning audio playlist with main playlist if levelloaded came too early (#4600) * Retry align audio playlist with main playlist if levelloaded came too early Fixes #4288. * Revert "Retry align audio playlist with main playlist if levelloaded came too early" This reverts commit b1a2d827b4d181d43c97103d9e5d192313bd7d4f. * Emit AUDIO_TRACK_LOADED event if LEVEL_LOADED came too early Fixes #4288. * Mock mainDetails in test --- src/controller/audio-stream-controller.ts | 9 +++++++++ tests/unit/controller/audio-stream-controller.js | 1 + 2 files changed, 10 insertions(+) diff --git a/src/controller/audio-stream-controller.ts b/src/controller/audio-stream-controller.ts index e9fa2d1c34a..3a4044e1963 100644 --- a/src/controller/audio-stream-controller.ts +++ b/src/controller/audio-stream-controller.ts @@ -55,6 +55,7 @@ class AudioStreamController private waitingData: WaitingForPTSData | null = null; private mainDetails: LevelDetails | null = null; private bufferFlushed: boolean = false; + private cachedTrackLoadedData: TrackLoadedData | null = null; constructor(hls: Hls, fragmentTracker: FragmentTracker) { super(hls, fragmentTracker, '[audio-stream-controller]'); @@ -413,9 +414,17 @@ class AudioStreamController onLevelLoaded(event: Events.LEVEL_LOADED, data: LevelLoadedData) { this.mainDetails = data.details; + if (this.cachedTrackLoadedData !== null) { + this.hls.trigger(Events.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData); + this.cachedTrackLoadedData = null; + } } onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: TrackLoadedData) { + if (this.mainDetails == null) { + this.cachedTrackLoadedData = data; + return; + } const { levels } = this; const { details: newDetails, id: trackId } = data; if (!levels) { diff --git a/tests/unit/controller/audio-stream-controller.js b/tests/unit/controller/audio-stream-controller.js index f357093c850..ddc10858ca5 100644 --- a/tests/unit/controller/audio-stream-controller.js +++ b/tests/unit/controller/audio-stream-controller.js @@ -61,6 +61,7 @@ describe('AudioStreamController', function () { }; audioStreamController.levels = tracks; + audioStreamController.mainDetails = details; audioStreamController.tick = () => {}; audioStreamController.onAudioTrackLoaded(Events.AUDIO_TRACK_LOADED, {