Skip to content

Commit

Permalink
Retry align audio playlist with main playlist if levelloaded came too…
Browse files Browse the repository at this point in the history
… early

Fixes video-dev#4288.
  • Loading branch information
Frenzie committed Mar 14, 2022
1 parent 5039b23 commit ee4ff6a
Showing 1 changed file with 24 additions and 1 deletion.
25 changes: 24 additions & 1 deletion src/controller/audio-stream-controller.ts
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,8 @@ class AudioStreamController
private waitingData: WaitingForPTSData | null = null;
private mainDetails: LevelDetails | null = null;
private bufferFlushed: boolean = false;
private retryCount: number = 0;
private timer: number = 0;

constructor(hls: Hls, fragmentTracker: FragmentTracker) {
super(hls, fragmentTracker, '[audio-stream-controller]');
Expand Down Expand Up @@ -416,6 +418,7 @@ class AudioStreamController
}

onAudioTrackLoaded(event: Events.AUDIO_TRACK_LOADED, data: TrackLoadedData) {
const { config } = this.hls;
const { levels } = this;
const { details: newDetails, id: trackId } = data;
if (!levels) {
Expand All @@ -430,12 +433,32 @@ class AudioStreamController
let sliding = 0;
if (newDetails.live || track.details?.live) {
const mainDetails = this.mainDetails;
const retry = this.retryCount < config.levelLoadingMaxRetry;
if (!newDetails.fragments[0]) {
newDetails.deltaUpdateFailed = true;
}
if (newDetails.deltaUpdateFailed || !mainDetails) {
if (newDetails.deltaUpdateFailed || (!mainDetails && !retry)) {
return;
}
if (!mainDetails) {
// If this event occurred just before onLevelLoaded, don't wait around for
// the full segment length.
const delay = Math.min(
Math.pow(2, this.retryCount) * config.levelLoadingRetryDelay,
config.levelLoadingMaxRetryTimeout
);
// Schedule level/track reload
this.timer = self.setTimeout(
() => this.hls.trigger(Events.AUDIO_TRACK_LOADED, data),
delay
);
this.warn(
`retry audiotrack loading #${this.retryCount} in ${delay} ms`
);
this.retryCount++;
return;
}
this.retryCount = 0;
if (
!track.details &&
newDetails.hasProgramDateTime &&
Expand Down

0 comments on commit ee4ff6a

Please sign in to comment.