From 9cfd533a03aa462bffb6095eb66c3473b80bf182 Mon Sep 17 00:00:00 2001 From: Jibben Nee Date: Thu, 11 Mar 2021 01:54:28 +0000 Subject: [PATCH 1/4] fix: support timeshift dash manifests without startNumber attribute --- src/dash-playlist-loader.js | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/dash-playlist-loader.js b/src/dash-playlist-loader.js index 1c96825dd..586cddacd 100644 --- a/src/dash-playlist-loader.js +++ b/src/dash-playlist-loader.js @@ -24,6 +24,20 @@ import logger from './util/logger'; const { EventTarget, mergeOptions } = videojs; const dashPlaylistUnchanged = function(a, b) { + // derive media sequence for timeshift manifests without startNumber attribute + if ( + b.mediaSequence === 1 && + a.segments && + b.segments && + a.segments.length && + b.segments.length + ) { + const seqDelta = a.segments.findIndex((s) => s.uri === b.segments[0].uri); + + b.mediaSequence = + a.mediaSequence + (seqDelta === -1 ? a.segments.length : seqDelta); + } + if (!isPlaylistUnchanged(a, b)) { return false; } From 6967321301ad9a539d4e92ee78b31df6a7f156f3 Mon Sep 17 00:00:00 2001 From: Jibben Nee Date: Thu, 11 Mar 2021 10:25:51 +0000 Subject: [PATCH 2/4] fix: dash group changes should not stop playlist loader --- src/media-groups.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/media-groups.js b/src/media-groups.js index 63de67aec..22bf6a961 100644 --- a/src/media-groups.js +++ b/src/media-groups.js @@ -71,6 +71,7 @@ export const startLoaders = (playlistLoader, mediaType) => { */ export const onGroupChanged = (type, settings) => () => { const { + sourceType, segmentLoaders: { [type]: segmentLoader, main: mainSegmentLoader @@ -81,6 +82,11 @@ export const onGroupChanged = (type, settings) => () => { const activeGroup = mediaType.activeGroup(activeTrack); const previousActiveLoader = mediaType.activePlaylistLoader; + if (sourceType === 'dash') { + // only one playlist loader for dash. do not stop. + return; + } + stopLoaders(segmentLoader, mediaType); if (!activeGroup) { From b0dcefdbd2813473e7b7e5d0d9e99526a942c3ed Mon Sep 17 00:00:00 2001 From: Jibben Nee Date: Tue, 30 Mar 2021 04:17:48 +0000 Subject: [PATCH 3/4] add additional condition should allow tests to pass now --- src/dash-playlist-loader.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/dash-playlist-loader.js b/src/dash-playlist-loader.js index bd52b1015..7ec7f0a2c 100644 --- a/src/dash-playlist-loader.js +++ b/src/dash-playlist-loader.js @@ -28,6 +28,7 @@ const dashPlaylistUnchanged = function(a, b) { // derive media sequence for timeshift manifests without startNumber attribute if ( b.mediaSequence === 1 && + b.mediaSequence <= a.mediaSequence && a.segments && b.segments && a.segments.length && From b8480063d1b49cfd6dea477a235e36ef63ac7637 Mon Sep 17 00:00:00 2001 From: Jibben Nee Date: Tue, 6 Apr 2021 22:29:16 +0000 Subject: [PATCH 4/4] only prevent stopLoaders for dash (fix for recent updates) --- src/media-groups.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/src/media-groups.js b/src/media-groups.js index fcefa039e..b0cd8760f 100644 --- a/src/media-groups.js +++ b/src/media-groups.js @@ -93,13 +93,11 @@ export const onGroupChanged = (type, settings) => () => { mediaType.lastGroup_ = activeGroup; mediaType.lastTrack_ = activeTrack; - if (sourceType === 'dash') { - // only one playlist loader for dash. do not stop. - return; + if (sourceType !== 'dash') { + // only one playlist for dash. do not stop. + stopLoaders(segmentLoader, mediaType); } - stopLoaders(segmentLoader, mediaType); - if (!activeGroup || activeGroup.isMasterPlaylist) { // there is no group active or active group is a main playlist and won't change return;