From c4431adb02c044ce6cc0cac321d14f03e04d70ad Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=CC=81lvaro=20Velad=20Galva=CC=81n?= Date: Wed, 23 Oct 2024 16:47:17 +0200 Subject: [PATCH 1/2] fix(Ads): Limit interstitial duration to actual duration if available --- lib/ads/interstitial_ad_manager.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/lib/ads/interstitial_ad_manager.js b/lib/ads/interstitial_ad_manager.js index bd47755a18..322ffe88e9 100644 --- a/lib/ads/interstitial_ad_manager.js +++ b/lib/ads/interstitial_ad_manager.js @@ -675,11 +675,25 @@ shaka.ads.InterstitialAdManager = class { }); try { this.updatePlayerConfig_(); + // playRangeEnd in src= causes the ended event not to be fired when that + // position is reached. + const loadMode = this.basePlayer_.getLoadMode(); + if (loadMode == shaka.Player.LoadMode.MEDIA_SOURCE && + interstitial.startTime && interstitial.endTime && + interstitial.endTime != Infinity && + interstitial.startTime != interstitial.endTime) { + const duration = interstitial.endTime - interstitial.startTime; + if (duration > 0) { + this.player_.configure('playRangeEnd', duration); + } + } if (interstitial.playoutLimit) { playoutLimitTimer = new shaka.util.Timer(() => { ad.skip(); }).tickAfter(interstitial.playoutLimit); - this.player_.configure('playRangeEnd', interstitial.playoutLimit); + if (loadMode == shaka.Player.LoadMode.MEDIA_SOURCE) { + this.player_.configure('playRangeEnd', interstitial.playoutLimit); + } } await this.player_.attach(this.video_); if (this.preloadManagerInterstitials_.has(interstitial)) { From 923c2ebde84da3e0b190acc9e19efec4ef4c6443 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=CC=81lvaro=20Velad=20Galva=CC=81n?= Date: Wed, 23 Oct 2024 20:56:37 +0200 Subject: [PATCH 2/2] Update comment --- lib/ads/interstitial_ad_manager.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/lib/ads/interstitial_ad_manager.js b/lib/ads/interstitial_ad_manager.js index 322ffe88e9..f2bb407580 100644 --- a/lib/ads/interstitial_ad_manager.js +++ b/lib/ads/interstitial_ad_manager.js @@ -676,7 +676,8 @@ shaka.ads.InterstitialAdManager = class { try { this.updatePlayerConfig_(); // playRangeEnd in src= causes the ended event not to be fired when that - // position is reached. + // position is reached. So we don't use it because we would never go back + // to the main stream. const loadMode = this.basePlayer_.getLoadMode(); if (loadMode == shaka.Player.LoadMode.MEDIA_SOURCE && interstitial.startTime && interstitial.endTime &&