stormcloud-video-player 0.8.46 → 0.8.48

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -438,15 +438,19 @@ var import_react2 = require("react");
438
438
  var import_hls = __toESM(require("hls.js"), 1);
439
439
  var MAX_VAST_WRAPPER_DEPTH = 5;
440
440
  function createHlsAdPlayer(contentVideo, options) {
441
+ var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
441
442
  var adPlaying = false;
442
443
  var originalMutedState = false;
443
444
  var originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));
444
445
  var listeners = /* @__PURE__ */ new Map();
445
446
  var licenseKey = options === null || options === void 0 ? void 0 : options.licenseKey;
446
447
  var mainHlsInstance = options === null || options === void 0 ? void 0 : options.mainHlsInstance;
447
- var adVideoElement;
448
+ var AD_CONTAINER_PROP = "__stormcloudAdContainer";
449
+ var AD_VIDEO_PROP = "__stormcloudAdVideo";
450
+ var adVideoElement = (_contentVideo_AD_VIDEO_PROP = contentVideo[AD_VIDEO_PROP]) !== null && _contentVideo_AD_VIDEO_PROP !== void 0 ? _contentVideo_AD_VIDEO_PROP : void 0;
448
451
  var adHls;
449
- var adContainerEl;
452
+ var adContainerEl = (_contentVideo_AD_CONTAINER_PROP = contentVideo[AD_CONTAINER_PROP]) !== null && _contentVideo_AD_CONTAINER_PROP !== void 0 ? _contentVideo_AD_CONTAINER_PROP : void 0;
453
+ var adEventHandlers = [];
450
454
  var currentAd;
451
455
  var podAds = [];
452
456
  var podIndex = 0;
@@ -601,6 +605,56 @@ function createHlsAdPlayer(contentVideo, options) {
601
605
  var url = mediaFile.url.toLowerCase();
602
606
  return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
603
607
  }
608
+ function isAudioMediaFile(mediaFile) {
609
+ var type = mediaFile.type.toLowerCase();
610
+ var url = (mediaFile.url.toLowerCase().split("?")[0] || "").trim();
611
+ return type.startsWith("audio/") || url.endsWith(".mp3") || url.endsWith(".aac") || url.endsWith(".m4a") || url.endsWith(".ogg") || url.endsWith(".oga") || url.endsWith(".opus") || url.endsWith(".wav") || url.endsWith(".weba");
612
+ }
613
+ function collectVideoMediaFiles(scope, verbose) {
614
+ var mediaFileElements = scope.querySelectorAll("MediaFile");
615
+ var mediaFiles = [];
616
+ if (verbose) {
617
+ console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
618
+ }
619
+ mediaFileElements.forEach(function(mf, index) {
620
+ var _mf_textContent;
621
+ var type = mf.getAttribute("type") || "";
622
+ var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
623
+ var width = mf.getAttribute("width") || "";
624
+ var height = mf.getAttribute("height") || "";
625
+ if (verbose) {
626
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
627
+ }
628
+ if (!url) {
629
+ if (verbose) {
630
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
631
+ }
632
+ return;
633
+ }
634
+ var bitrateAttr = mf.getAttribute("bitrate");
635
+ var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
636
+ var mediaFile = {
637
+ url: url,
638
+ type: type,
639
+ width: parseInt(width || "1920", 10),
640
+ height: parseInt(height || "1080", 10),
641
+ bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
642
+ };
643
+ if (isAudioMediaFile(mediaFile)) {
644
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, ' skipped (audio-only, type="').concat(type, '") — audio ads are not played to avoid a black screen'));
645
+ return;
646
+ }
647
+ if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
648
+ mediaFiles.push(mediaFile);
649
+ if (verbose) {
650
+ console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
651
+ }
652
+ } else if (verbose) {
653
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
654
+ }
655
+ });
656
+ return mediaFiles;
657
+ }
604
658
  function createEmptyTrackingUrls() {
605
659
  return {
606
660
  impression: [],
@@ -688,37 +742,7 @@ function createHlsAdPlayer(contentVideo, options) {
688
742
  var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
689
743
  var durationParts = durationText.split(":");
690
744
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
691
- var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
692
- var mediaFiles = [];
693
- console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
694
- mediaFileElements.forEach(function(mf, index) {
695
- var _mf_textContent;
696
- var type = mf.getAttribute("type") || "";
697
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
698
- var width = mf.getAttribute("width") || "";
699
- var height = mf.getAttribute("height") || "";
700
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
701
- var mediaFile = {
702
- url: url,
703
- type: type,
704
- width: parseInt(width || "1920", 10),
705
- height: parseInt(height || "1080", 10),
706
- bitrate: void 0
707
- };
708
- if (!url) {
709
- console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
710
- return;
711
- }
712
- var bitrateAttr = mf.getAttribute("bitrate");
713
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
714
- mediaFile.bitrate = bitrateValue && bitrateValue > 0 ? bitrateValue : void 0;
715
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
716
- mediaFiles.push(mediaFile);
717
- console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
718
- } else {
719
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
720
- }
721
- });
745
+ var mediaFiles = collectVideoMediaFiles(xmlDoc, true);
722
746
  if (mediaFiles.length === 0) {
723
747
  if (isNoAdAvailable) {
724
748
  console.warn("[HlsAdPlayer] No ads available (VAST response indicates no ads)");
@@ -766,28 +790,7 @@ function createHlsAdPlayer(contentVideo, options) {
766
790
  var durationText = ((_adElement_querySelector3 = adElement.querySelector("Duration")) === null || _adElement_querySelector3 === void 0 ? void 0 : _adElement_querySelector3.textContent) || "00:00:30";
767
791
  var durationParts = durationText.split(":");
768
792
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
769
- var mediaFileElements = adElement.querySelectorAll("MediaFile");
770
- var mediaFiles = [];
771
- mediaFileElements.forEach(function(mf) {
772
- var _mf_textContent;
773
- var type = mf.getAttribute("type") || "";
774
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
775
- var width = mf.getAttribute("width") || "";
776
- var height = mf.getAttribute("height") || "";
777
- if (!url) return;
778
- var bitrateAttr = mf.getAttribute("bitrate");
779
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
780
- var mediaFile = {
781
- url: url,
782
- type: type,
783
- width: parseInt(width || "1920", 10),
784
- height: parseInt(height || "1080", 10),
785
- bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
786
- };
787
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
788
- mediaFiles.push(mediaFile);
789
- }
790
- });
793
+ var mediaFiles = collectVideoMediaFiles(adElement, false);
791
794
  if (mediaFiles.length === 0) {
792
795
  if (isNoAdAvailable) {
793
796
  console.warn("[HlsAdPlayer] Pod <Ad> indicates no ad available");
@@ -1090,7 +1093,8 @@ function createHlsAdPlayer(contentVideo, options) {
1090
1093
  }
1091
1094
  function setupAdEventListeners() {
1092
1095
  if (!adVideoElement || !currentAd) return;
1093
- adVideoElement.addEventListener("timeupdate", function() {
1096
+ if (adEventHandlers.length > 0) return;
1097
+ var onTimeUpdate = function onTimeUpdate() {
1094
1098
  if (!currentAd || !adVideoElement) return;
1095
1099
  noteAdProgress();
1096
1100
  var progress = adVideoElement.currentTime / currentAd.duration;
@@ -1106,15 +1110,15 @@ function createHlsAdPlayer(contentVideo, options) {
1106
1110
  trackingFired.thirdQuartile = true;
1107
1111
  fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);
1108
1112
  }
1109
- });
1110
- adVideoElement.addEventListener("playing", function() {
1113
+ };
1114
+ var onPlaying = function onPlaying() {
1111
1115
  startStallWatchdog();
1112
1116
  if (!currentAd || trackingFired.start) return;
1113
1117
  trackingFired.start = true;
1114
1118
  fireTrackingPixels(currentAd.trackingUrls.start);
1115
1119
  console.log("[HlsAdPlayer] Ad started playing");
1116
- });
1117
- adVideoElement.addEventListener("ended", function() {
1120
+ };
1121
+ var onEnded = function onEnded() {
1118
1122
  if (!currentAd || trackingFired.complete) return;
1119
1123
  trackingFired.complete = true;
1120
1124
  fireTrackingPixels(currentAd.trackingUrls.complete);
@@ -1123,8 +1127,8 @@ function createHlsAdPlayer(contentVideo, options) {
1123
1127
  return;
1124
1128
  }
1125
1129
  handleAdComplete();
1126
- });
1127
- adVideoElement.addEventListener("error", function(e) {
1130
+ };
1131
+ var onError = function onError(e) {
1128
1132
  if (!adPlaying) return;
1129
1133
  console.error("[HlsAdPlayer] Ad video error:", e);
1130
1134
  if (currentAd) {
@@ -1134,25 +1138,100 @@ function createHlsAdPlayer(contentVideo, options) {
1134
1138
  return;
1135
1139
  }
1136
1140
  handleAdError();
1137
- });
1138
- adVideoElement.addEventListener("volumechange", function() {
1139
- if (!currentAd) return;
1141
+ };
1142
+ var onVolumeChange = function onVolumeChange() {
1143
+ if (!currentAd || !adVideoElement) return;
1140
1144
  if (adVideoElement.muted) {
1141
1145
  fireTrackingPixels(currentAd.trackingUrls.mute);
1142
1146
  } else {
1143
1147
  fireTrackingPixels(currentAd.trackingUrls.unmute);
1144
1148
  }
1145
- });
1146
- adVideoElement.addEventListener("pause", function() {
1147
- if (currentAd && !adVideoElement.ended) {
1149
+ };
1150
+ var onPause = function onPause() {
1151
+ if (currentAd && adVideoElement && !adVideoElement.ended) {
1148
1152
  fireTrackingPixels(currentAd.trackingUrls.pause);
1149
1153
  }
1150
- });
1151
- adVideoElement.addEventListener("play", function() {
1152
- if (currentAd && adVideoElement.currentTime > 0) {
1154
+ };
1155
+ var onPlay = function onPlay() {
1156
+ if (currentAd && adVideoElement && adVideoElement.currentTime > 0) {
1153
1157
  fireTrackingPixels(currentAd.trackingUrls.resume);
1154
1158
  }
1155
- });
1159
+ };
1160
+ adEventHandlers = [
1161
+ {
1162
+ type: "timeupdate",
1163
+ handler: onTimeUpdate
1164
+ },
1165
+ {
1166
+ type: "playing",
1167
+ handler: onPlaying
1168
+ },
1169
+ {
1170
+ type: "ended",
1171
+ handler: onEnded
1172
+ },
1173
+ {
1174
+ type: "error",
1175
+ handler: onError
1176
+ },
1177
+ {
1178
+ type: "volumechange",
1179
+ handler: onVolumeChange
1180
+ },
1181
+ {
1182
+ type: "pause",
1183
+ handler: onPause
1184
+ },
1185
+ {
1186
+ type: "play",
1187
+ handler: onPlay
1188
+ }
1189
+ ];
1190
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1191
+ try {
1192
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1193
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1194
+ adVideoElement.addEventListener(type, handler);
1195
+ }
1196
+ } catch (err) {
1197
+ _didIteratorError = true;
1198
+ _iteratorError = err;
1199
+ } finally{
1200
+ try {
1201
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1202
+ _iterator.return();
1203
+ }
1204
+ } finally{
1205
+ if (_didIteratorError) {
1206
+ throw _iteratorError;
1207
+ }
1208
+ }
1209
+ }
1210
+ }
1211
+ function teardownAdEventListeners() {
1212
+ if (adVideoElement) {
1213
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1214
+ try {
1215
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1216
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1217
+ adVideoElement.removeEventListener(type, handler);
1218
+ }
1219
+ } catch (err) {
1220
+ _didIteratorError = true;
1221
+ _iteratorError = err;
1222
+ } finally{
1223
+ try {
1224
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1225
+ _iterator.return();
1226
+ }
1227
+ } finally{
1228
+ if (_didIteratorError) {
1229
+ throw _iteratorError;
1230
+ }
1231
+ }
1232
+ }
1233
+ }
1234
+ adEventHandlers = [];
1156
1235
  }
1157
1236
  function setAdPlayingFlag(isPlaying) {
1158
1237
  if (isPlaying) {
@@ -1298,15 +1377,13 @@ function createHlsAdPlayer(contentVideo, options) {
1298
1377
  adHls = void 0;
1299
1378
  }
1300
1379
  if (adVideoElement) {
1301
- adVideoElement.pause();
1302
- adVideoElement.removeAttribute("src");
1303
1380
  try {
1381
+ adVideoElement.pause();
1382
+ adVideoElement.removeAttribute("src");
1304
1383
  adVideoElement.load();
1305
1384
  } catch (error) {
1306
- console.warn("[HlsAdPlayer] adVideoElement.load() threw after src removal:", error);
1385
+ console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
1307
1386
  }
1308
- adVideoElement.remove();
1309
- adVideoElement = void 0;
1310
1387
  }
1311
1388
  if (adContainerEl) {
1312
1389
  adContainerEl.style.display = "none";
@@ -1369,6 +1446,7 @@ function createHlsAdPlayer(contentVideo, options) {
1369
1446
  (_contentVideo_parentElement = contentVideo.parentElement) === null || _contentVideo_parentElement === void 0 ? void 0 : _contentVideo_parentElement.appendChild(container);
1370
1447
  adContainerEl = container;
1371
1448
  }
1449
+ contentVideo[AD_CONTAINER_PROP] = adContainerEl;
1372
1450
  },
1373
1451
  requestAds: function requestAds(vastTagUrl) {
1374
1452
  return _async_to_generator(function() {
@@ -1471,8 +1549,9 @@ function createHlsAdPlayer(contentVideo, options) {
1471
1549
  if (!adVideoElement) {
1472
1550
  adVideoElement = createAdVideoElement();
1473
1551
  adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
1474
- setupAdEventListeners();
1552
+ contentVideo[AD_VIDEO_PROP] = adVideoElement;
1475
1553
  }
1554
+ setupAdEventListeners();
1476
1555
  resetQuartileTracking(true);
1477
1556
  contentVolume = contentVideo.volume;
1478
1557
  originalVolume = Math.max(0, Math.min(1, contentVolume || originalVolume));
@@ -1600,11 +1679,8 @@ function createHlsAdPlayer(contentVideo, options) {
1600
1679
  setAdPlayingFlag(false);
1601
1680
  contentVideo.muted = originalMutedState;
1602
1681
  contentVideo.volume = Math.max(0, Math.min(1, originalVolume));
1682
+ teardownAdEventListeners();
1603
1683
  releaseAdDecoder();
1604
- if (adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.parentElement) {
1605
- adContainerEl.parentElement.removeChild(adContainerEl);
1606
- }
1607
- adContainerEl = void 0;
1608
1684
  currentAd = void 0;
1609
1685
  podAds = [];
1610
1686
  podIndex = 0;
@@ -4017,6 +4093,11 @@ function detectBrowser() {
4017
4093
  chromeVersion: chromeVersionNum
4018
4094
  };
4019
4095
  }
4096
+ function requiresMediaPipelineResetAfterAds() {
4097
+ var _browser_tizenVersion;
4098
+ var browser = detectBrowser();
4099
+ return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
4100
+ }
4020
4101
  function getBrowserConfigOverrides() {
4021
4102
  var browser = detectBrowser();
4022
4103
  var overrides = {};
@@ -6778,30 +6859,49 @@ var HlsEngine = /*#__PURE__*/ function() {
6778
6859
  {
6779
6860
  key: "reloadLiveStream",
6780
6861
  value: function reloadLiveStream() {
6862
+ var _this = this;
6781
6863
  var hls = this.hls;
6782
6864
  if (!hls) {
6783
6865
  return;
6784
6866
  }
6785
6867
  if (this.debug) {
6786
- console.log("[StormcloudVideoPlayer] Hard-reloading live stream (detach \u2192 reset video \u2192 re-attach)");
6868
+ console.log("[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \u2192 reset video \u2192 fresh setupHls)");
6787
6869
  }
6788
6870
  try {
6789
6871
  this.reloadingLiveStream = true;
6790
6872
  hls.stopLoad();
6791
6873
  hls.detachMedia();
6874
+ hls.destroy();
6875
+ this.hls = void 0;
6792
6876
  try {
6793
6877
  this.video.removeAttribute("src");
6794
6878
  this.video.load();
6795
6879
  } catch (error) {
6796
6880
  console.warn("[StormcloudVideoPlayer] video.load() threw after src removal:", error);
6797
6881
  }
6798
- hls.attachMedia(this.video);
6799
6882
  } catch (error) {
6800
6883
  this.reloadingLiveStream = false;
6884
+ this.hls = void 0;
6801
6885
  if (this.debug) {
6802
- console.warn("[StormcloudVideoPlayer] Failed to hard-reload live stream:", error);
6886
+ console.warn("[StormcloudVideoPlayer] Failed to tear down during hard-reload:", error);
6803
6887
  }
6888
+ return;
6804
6889
  }
6890
+ var recreateDelayMs = 600;
6891
+ window.setTimeout(function() {
6892
+ if (_this.hls) {
6893
+ _this.reloadingLiveStream = false;
6894
+ return;
6895
+ }
6896
+ try {
6897
+ _this.setupHls();
6898
+ } catch (error) {
6899
+ _this.reloadingLiveStream = false;
6900
+ if (_this.debug) {
6901
+ console.warn("[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:", error);
6902
+ }
6903
+ }
6904
+ }, recreateDelayMs);
6805
6905
  }
6806
6906
  },
6807
6907
  {
@@ -8114,6 +8214,14 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8114
8214
  this.host.video.style.visibility = "visible";
8115
8215
  this.host.video.style.opacity = "1";
8116
8216
  if (this.host.isLiveStream()) {
8217
+ if (this.host.requiresMediaPipelineResetAfterAds()) {
8218
+ if (this.debug) {
8219
+ console.log("[StormcloudVideoPlayer] Live break end \u2014 hard-reloading stream to reacquire decoder (single-decoder platform)");
8220
+ }
8221
+ this.host.reloadLiveStream();
8222
+ this.monitorLiveResumeStall(this.host.video.currentTime);
8223
+ return;
8224
+ }
8117
8225
  var liveSyncPos = this.host.getLiveSyncPosition();
8118
8226
  if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {
8119
8227
  if (this.debug) {
@@ -8175,9 +8283,10 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8175
8283
  key: "monitorLiveResumeStall",
8176
8284
  value: function monitorLiveResumeStall(resumeBaseline) {
8177
8285
  var _this = this;
8286
+ var needsReset = this.host.requiresMediaPipelineResetAfterAds();
8178
8287
  var pollIntervalMs = 1e3;
8179
- var graceMs = 5e3;
8180
- var recoveryCooldownMs = 5e3;
8288
+ var graceMs = needsReset ? 8e3 : 5e3;
8289
+ var recoveryCooldownMs = needsReset ? 7e3 : 5e3;
8181
8290
  var maxRecoveries = 3;
8182
8291
  var maxMonitorMs = 45e3;
8183
8292
  var startTime = Date.now();
@@ -8291,7 +8400,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8291
8400
  if (canRecover) {
8292
8401
  recoveries++;
8293
8402
  lastRecoveryAt = Date.now();
8294
- if (recoveries === 1) {
8403
+ if (needsReset) {
8404
+ if (_this.debug) {
8405
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8406
+ }
8407
+ _this.host.reloadLiveStream();
8408
+ } else if (recoveries === 1) {
8295
8409
  if (_this.debug) {
8296
8410
  console.warn("[StormcloudVideoPlayer] Content wedged after ad break — calling recoverMediaError() (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8297
8411
  }
@@ -8504,6 +8618,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8504
8618
  recoverMediaError: function recoverMediaError() {
8505
8619
  return _this.hlsEngine.recoverMediaError();
8506
8620
  },
8621
+ requiresMediaPipelineResetAfterAds: function requiresMediaPipelineResetAfterAds1() {
8622
+ return requiresMediaPipelineResetAfterAds();
8623
+ },
8507
8624
  generatePodVastUrl: function generatePodVastUrl(base, breakDurationMs) {
8508
8625
  return _this.generatePodVastUrl(base, breakDurationMs);
8509
8626
  }