From 0021cfd151d841ebbd571df424a56e1dc4141cb4 Mon Sep 17 00:00:00 2001 From: Rob Walch Date: Wed, 31 Jul 2024 12:09:58 -0700 Subject: [PATCH] Skip Interstitial events that do not reset MediaSource using `interstitialsManager.skip()` (cherry picked from commit 928064edb0d802d1e6513bd509e65ef5c584f2e9) --- src/controller/interstitials-controller.ts | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/controller/interstitials-controller.ts b/src/controller/interstitials-controller.ts index 34620f30f68..e1b58d34dbe 100644 --- a/src/controller/interstitials-controller.ts +++ b/src/controller/interstitials-controller.ts @@ -338,7 +338,11 @@ export default class InterstitialsController const targetItem = c.schedule.items?.[targetIndex]; // playingAsset player - if (playingItem && c.itemsMatch(playingItem, targetItem)) { + if ( + playingItem && + (c.itemsMatch(playingItem, targetItem) || + playingItem.event?.appendInPlace) + ) { // seek in item const assetPlayer = getAssetPlayer(c.playingAsset); const media = assetPlayer?.media || c.hls.media; @@ -354,8 +358,10 @@ export default class InterstitialsController 'currentTime', ); const diff = time - currentTime; - media.currentTime += diff; - return; + if (media.currentTime + diff <= media.duration) { + media.currentTime += diff; + return; + } } } // seek out of item or asset @@ -481,10 +487,10 @@ export default class InterstitialsController const event = item?.event; if (event && !event.restrictions.skip) { const index = c.schedule.findItemIndex(item); - if (!event.appendInPlace) { - c.advanceAfterAssetEnded(event, index, Infinity); + if (event.appendInPlace) { + seekTo(item.playout.end, 'playout'); } else { - // TODO: seek to start of next item + c.advanceAfterAssetEnded(event, index, Infinity); } } },