From 82244ea8770147afa5fe66d6f799bf9b6c245810 Mon Sep 17 00:00:00 2001 From: Rob Walch Date: Fri, 16 Apr 2021 13:06:34 -0400 Subject: [PATCH] Fix blocking playlist requests with `lowLatencyMode` is set to `false` Resolves #3566 --- src/controller/base-playlist-controller.ts | 29 ++++++++++++++-------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/src/controller/base-playlist-controller.ts b/src/controller/base-playlist-controller.ts index 3ec854fedbf..4028a9d37d4 100644 --- a/src/controller/base-playlist-controller.ts +++ b/src/controller/base-playlist-controller.ts @@ -133,6 +133,7 @@ export default class BasePlaylistController implements NetworkComponentAPI { if (!this.canLoad || !details.live) { return; } + let deliveryDirectives: HlsUrlParameters; let msn: number | undefined = undefined; let part: number | undefined = undefined; if (details.canBlockReload && details.endSN && details.advanced) { @@ -186,25 +187,31 @@ export default class BasePlaylistController implements NetworkComponentAPI { } details.tuneInGoal = currentGoal; } - const deliveryDirectives = this.getDeliveryDirectives( + deliveryDirectives = this.getDeliveryDirectives( details, data.deliveryDirectives, msn, part ); - this.loadPlaylist(deliveryDirectives); - return; + if (lowLatencyMode || !lastPart) { + this.loadPlaylist(deliveryDirectives); + return; + } + } else { + deliveryDirectives = this.getDeliveryDirectives( + details, + data.deliveryDirectives, + msn, + part + ); + } + let reloadInterval = computeReloadInterval(details, stats); + if (msn !== undefined && details.canBlockReload) { + reloadInterval -= details.partTarget || 1; } - const reloadInterval = computeReloadInterval(details, stats); this.log( `reload live playlist ${index} in ${Math.round(reloadInterval)} ms` ); - const deliveryDirectives = this.getDeliveryDirectives( - details, - data.deliveryDirectives, - msn, - part - ); this.timer = self.setTimeout( () => this.loadPlaylist(deliveryDirectives), reloadInterval @@ -219,7 +226,7 @@ export default class BasePlaylistController implements NetworkComponentAPI { previousDeliveryDirectives: HlsUrlParameters | null, msn?: number, part?: number - ) { + ): HlsUrlParameters { let skip = getSkipValue(details, msn); if (previousDeliveryDirectives?.skip && details.deltaUpdateFailed) { msn = previousDeliveryDirectives.msn;