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.
@@ -388,15 +388,19 @@ var import_react = __toESM(require("react"), 1);
388
388
  var import_hls = __toESM(require("hls.js"), 1);
389
389
  var MAX_VAST_WRAPPER_DEPTH = 5;
390
390
  function createHlsAdPlayer(contentVideo, options) {
391
+ var _contentVideo_AD_VIDEO_PROP, _contentVideo_AD_CONTAINER_PROP;
391
392
  var adPlaying = false;
392
393
  var originalMutedState = false;
393
394
  var originalVolume = Math.max(0, Math.min(1, contentVideo.volume || 1));
394
395
  var listeners = /* @__PURE__ */ new Map();
395
396
  var licenseKey = options === null || options === void 0 ? void 0 : options.licenseKey;
396
397
  var mainHlsInstance = options === null || options === void 0 ? void 0 : options.mainHlsInstance;
397
- var adVideoElement;
398
+ var AD_CONTAINER_PROP = "__stormcloudAdContainer";
399
+ var AD_VIDEO_PROP = "__stormcloudAdVideo";
400
+ var adVideoElement = (_contentVideo_AD_VIDEO_PROP = contentVideo[AD_VIDEO_PROP]) !== null && _contentVideo_AD_VIDEO_PROP !== void 0 ? _contentVideo_AD_VIDEO_PROP : void 0;
398
401
  var adHls;
399
- var adContainerEl;
402
+ var adContainerEl = (_contentVideo_AD_CONTAINER_PROP = contentVideo[AD_CONTAINER_PROP]) !== null && _contentVideo_AD_CONTAINER_PROP !== void 0 ? _contentVideo_AD_CONTAINER_PROP : void 0;
403
+ var adEventHandlers = [];
400
404
  var currentAd;
401
405
  var podAds = [];
402
406
  var podIndex = 0;
@@ -551,6 +555,56 @@ function createHlsAdPlayer(contentVideo, options) {
551
555
  var url = mediaFile.url.toLowerCase();
552
556
  return type.startsWith("video/") || url.endsWith(".mp4") || url.includes(".mp4?");
553
557
  }
558
+ function isAudioMediaFile(mediaFile) {
559
+ var type = mediaFile.type.toLowerCase();
560
+ var url = (mediaFile.url.toLowerCase().split("?")[0] || "").trim();
561
+ 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");
562
+ }
563
+ function collectVideoMediaFiles(scope, verbose) {
564
+ var mediaFileElements = scope.querySelectorAll("MediaFile");
565
+ var mediaFiles = [];
566
+ if (verbose) {
567
+ console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
568
+ }
569
+ mediaFileElements.forEach(function(mf, index) {
570
+ var _mf_textContent;
571
+ var type = mf.getAttribute("type") || "";
572
+ var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
573
+ var width = mf.getAttribute("width") || "";
574
+ var height = mf.getAttribute("height") || "";
575
+ if (verbose) {
576
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
577
+ }
578
+ if (!url) {
579
+ if (verbose) {
580
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
581
+ }
582
+ return;
583
+ }
584
+ var bitrateAttr = mf.getAttribute("bitrate");
585
+ var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
586
+ var mediaFile = {
587
+ url: url,
588
+ type: type,
589
+ width: parseInt(width || "1920", 10),
590
+ height: parseInt(height || "1080", 10),
591
+ bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
592
+ };
593
+ if (isAudioMediaFile(mediaFile)) {
594
+ console.warn("[HlsAdPlayer] MediaFile ".concat(index, ' skipped (audio-only, type="').concat(type, '") — audio ads are not played to avoid a black screen'));
595
+ return;
596
+ }
597
+ if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
598
+ mediaFiles.push(mediaFile);
599
+ if (verbose) {
600
+ console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
601
+ }
602
+ } else if (verbose) {
603
+ console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
604
+ }
605
+ });
606
+ return mediaFiles;
607
+ }
554
608
  function createEmptyTrackingUrls() {
555
609
  return {
556
610
  impression: [],
@@ -638,37 +692,7 @@ function createHlsAdPlayer(contentVideo, options) {
638
692
  var durationText = ((_xmlDoc_querySelector3 = xmlDoc.querySelector("Duration")) === null || _xmlDoc_querySelector3 === void 0 ? void 0 : _xmlDoc_querySelector3.textContent) || "00:00:30";
639
693
  var durationParts = durationText.split(":");
640
694
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
641
- var mediaFileElements = xmlDoc.querySelectorAll("MediaFile");
642
- var mediaFiles = [];
643
- console.log("[HlsAdPlayer] Found ".concat(mediaFileElements.length, " MediaFile element(s) in VAST XML"));
644
- mediaFileElements.forEach(function(mf, index) {
645
- var _mf_textContent;
646
- var type = mf.getAttribute("type") || "";
647
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
648
- var width = mf.getAttribute("width") || "";
649
- var height = mf.getAttribute("height") || "";
650
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ': type="').concat(type, '", url="').concat(url, '", width="').concat(width, '", height="').concat(height, '"'));
651
- var mediaFile = {
652
- url: url,
653
- type: type,
654
- width: parseInt(width || "1920", 10),
655
- height: parseInt(height || "1080", 10),
656
- bitrate: void 0
657
- };
658
- if (!url) {
659
- console.warn("[HlsAdPlayer] MediaFile ".concat(index, " has empty URL"));
660
- return;
661
- }
662
- var bitrateAttr = mf.getAttribute("bitrate");
663
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
664
- mediaFile.bitrate = bitrateValue && bitrateValue > 0 ? bitrateValue : void 0;
665
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
666
- mediaFiles.push(mediaFile);
667
- console.log("[HlsAdPlayer] Added ".concat(isHlsMediaFile(mediaFile) ? "HLS" : "progressive", " MediaFile: ").concat(url));
668
- } else {
669
- console.log("[HlsAdPlayer] MediaFile ".concat(index, ' ignored (type="').concat(type, '" is not supported)'));
670
- }
671
- });
695
+ var mediaFiles = collectVideoMediaFiles(xmlDoc, true);
672
696
  if (mediaFiles.length === 0) {
673
697
  if (isNoAdAvailable) {
674
698
  console.warn("[HlsAdPlayer] No ads available (VAST response indicates no ads)");
@@ -716,28 +740,7 @@ function createHlsAdPlayer(contentVideo, options) {
716
740
  var durationText = ((_adElement_querySelector3 = adElement.querySelector("Duration")) === null || _adElement_querySelector3 === void 0 ? void 0 : _adElement_querySelector3.textContent) || "00:00:30";
717
741
  var durationParts = durationText.split(":");
718
742
  var duration = parseInt(durationParts[0] || "0", 10) * 3600 + parseInt(durationParts[1] || "0", 10) * 60 + parseInt(durationParts[2] || "0", 10);
719
- var mediaFileElements = adElement.querySelectorAll("MediaFile");
720
- var mediaFiles = [];
721
- mediaFileElements.forEach(function(mf) {
722
- var _mf_textContent;
723
- var type = mf.getAttribute("type") || "";
724
- var url = ((_mf_textContent = mf.textContent) === null || _mf_textContent === void 0 ? void 0 : _mf_textContent.trim()) || "";
725
- var width = mf.getAttribute("width") || "";
726
- var height = mf.getAttribute("height") || "";
727
- if (!url) return;
728
- var bitrateAttr = mf.getAttribute("bitrate");
729
- var bitrateValue = bitrateAttr ? parseInt(bitrateAttr, 10) : void 0;
730
- var mediaFile = {
731
- url: url,
732
- type: type,
733
- width: parseInt(width || "1920", 10),
734
- height: parseInt(height || "1080", 10),
735
- bitrate: bitrateValue && bitrateValue > 0 ? bitrateValue : void 0
736
- };
737
- if (isHlsMediaFile(mediaFile) || isProgressiveMediaFile(mediaFile)) {
738
- mediaFiles.push(mediaFile);
739
- }
740
- });
743
+ var mediaFiles = collectVideoMediaFiles(adElement, false);
741
744
  if (mediaFiles.length === 0) {
742
745
  if (isNoAdAvailable) {
743
746
  console.warn("[HlsAdPlayer] Pod <Ad> indicates no ad available");
@@ -1040,7 +1043,8 @@ function createHlsAdPlayer(contentVideo, options) {
1040
1043
  }
1041
1044
  function setupAdEventListeners() {
1042
1045
  if (!adVideoElement || !currentAd) return;
1043
- adVideoElement.addEventListener("timeupdate", function() {
1046
+ if (adEventHandlers.length > 0) return;
1047
+ var onTimeUpdate = function onTimeUpdate() {
1044
1048
  if (!currentAd || !adVideoElement) return;
1045
1049
  noteAdProgress();
1046
1050
  var progress = adVideoElement.currentTime / currentAd.duration;
@@ -1056,15 +1060,15 @@ function createHlsAdPlayer(contentVideo, options) {
1056
1060
  trackingFired.thirdQuartile = true;
1057
1061
  fireTrackingPixels(currentAd.trackingUrls.thirdQuartile);
1058
1062
  }
1059
- });
1060
- adVideoElement.addEventListener("playing", function() {
1063
+ };
1064
+ var onPlaying = function onPlaying() {
1061
1065
  startStallWatchdog();
1062
1066
  if (!currentAd || trackingFired.start) return;
1063
1067
  trackingFired.start = true;
1064
1068
  fireTrackingPixels(currentAd.trackingUrls.start);
1065
1069
  console.log("[HlsAdPlayer] Ad started playing");
1066
- });
1067
- adVideoElement.addEventListener("ended", function() {
1070
+ };
1071
+ var onEnded = function onEnded() {
1068
1072
  if (!currentAd || trackingFired.complete) return;
1069
1073
  trackingFired.complete = true;
1070
1074
  fireTrackingPixels(currentAd.trackingUrls.complete);
@@ -1073,8 +1077,8 @@ function createHlsAdPlayer(contentVideo, options) {
1073
1077
  return;
1074
1078
  }
1075
1079
  handleAdComplete();
1076
- });
1077
- adVideoElement.addEventListener("error", function(e) {
1080
+ };
1081
+ var onError = function onError(e) {
1078
1082
  if (!adPlaying) return;
1079
1083
  console.error("[HlsAdPlayer] Ad video error:", e);
1080
1084
  if (currentAd) {
@@ -1084,25 +1088,100 @@ function createHlsAdPlayer(contentVideo, options) {
1084
1088
  return;
1085
1089
  }
1086
1090
  handleAdError();
1087
- });
1088
- adVideoElement.addEventListener("volumechange", function() {
1089
- if (!currentAd) return;
1091
+ };
1092
+ var onVolumeChange = function onVolumeChange() {
1093
+ if (!currentAd || !adVideoElement) return;
1090
1094
  if (adVideoElement.muted) {
1091
1095
  fireTrackingPixels(currentAd.trackingUrls.mute);
1092
1096
  } else {
1093
1097
  fireTrackingPixels(currentAd.trackingUrls.unmute);
1094
1098
  }
1095
- });
1096
- adVideoElement.addEventListener("pause", function() {
1097
- if (currentAd && !adVideoElement.ended) {
1099
+ };
1100
+ var onPause = function onPause() {
1101
+ if (currentAd && adVideoElement && !adVideoElement.ended) {
1098
1102
  fireTrackingPixels(currentAd.trackingUrls.pause);
1099
1103
  }
1100
- });
1101
- adVideoElement.addEventListener("play", function() {
1102
- if (currentAd && adVideoElement.currentTime > 0) {
1104
+ };
1105
+ var onPlay = function onPlay() {
1106
+ if (currentAd && adVideoElement && adVideoElement.currentTime > 0) {
1103
1107
  fireTrackingPixels(currentAd.trackingUrls.resume);
1104
1108
  }
1105
- });
1109
+ };
1110
+ adEventHandlers = [
1111
+ {
1112
+ type: "timeupdate",
1113
+ handler: onTimeUpdate
1114
+ },
1115
+ {
1116
+ type: "playing",
1117
+ handler: onPlaying
1118
+ },
1119
+ {
1120
+ type: "ended",
1121
+ handler: onEnded
1122
+ },
1123
+ {
1124
+ type: "error",
1125
+ handler: onError
1126
+ },
1127
+ {
1128
+ type: "volumechange",
1129
+ handler: onVolumeChange
1130
+ },
1131
+ {
1132
+ type: "pause",
1133
+ handler: onPause
1134
+ },
1135
+ {
1136
+ type: "play",
1137
+ handler: onPlay
1138
+ }
1139
+ ];
1140
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1141
+ try {
1142
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1143
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1144
+ adVideoElement.addEventListener(type, handler);
1145
+ }
1146
+ } catch (err) {
1147
+ _didIteratorError = true;
1148
+ _iteratorError = err;
1149
+ } finally{
1150
+ try {
1151
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1152
+ _iterator.return();
1153
+ }
1154
+ } finally{
1155
+ if (_didIteratorError) {
1156
+ throw _iteratorError;
1157
+ }
1158
+ }
1159
+ }
1160
+ }
1161
+ function teardownAdEventListeners() {
1162
+ if (adVideoElement) {
1163
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
1164
+ try {
1165
+ for(var _iterator = adEventHandlers[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
1166
+ var _step_value = _step.value, type = _step_value.type, handler = _step_value.handler;
1167
+ adVideoElement.removeEventListener(type, handler);
1168
+ }
1169
+ } catch (err) {
1170
+ _didIteratorError = true;
1171
+ _iteratorError = err;
1172
+ } finally{
1173
+ try {
1174
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
1175
+ _iterator.return();
1176
+ }
1177
+ } finally{
1178
+ if (_didIteratorError) {
1179
+ throw _iteratorError;
1180
+ }
1181
+ }
1182
+ }
1183
+ }
1184
+ adEventHandlers = [];
1106
1185
  }
1107
1186
  function setAdPlayingFlag(isPlaying) {
1108
1187
  if (isPlaying) {
@@ -1248,15 +1327,13 @@ function createHlsAdPlayer(contentVideo, options) {
1248
1327
  adHls = void 0;
1249
1328
  }
1250
1329
  if (adVideoElement) {
1251
- adVideoElement.pause();
1252
- adVideoElement.removeAttribute("src");
1253
1330
  try {
1331
+ adVideoElement.pause();
1332
+ adVideoElement.removeAttribute("src");
1254
1333
  adVideoElement.load();
1255
1334
  } catch (error) {
1256
- console.warn("[HlsAdPlayer] adVideoElement.load() threw after src removal:", error);
1335
+ console.warn("[HlsAdPlayer] Error releasing ad decoder:", error);
1257
1336
  }
1258
- adVideoElement.remove();
1259
- adVideoElement = void 0;
1260
1337
  }
1261
1338
  if (adContainerEl) {
1262
1339
  adContainerEl.style.display = "none";
@@ -1319,6 +1396,7 @@ function createHlsAdPlayer(contentVideo, options) {
1319
1396
  (_contentVideo_parentElement = contentVideo.parentElement) === null || _contentVideo_parentElement === void 0 ? void 0 : _contentVideo_parentElement.appendChild(container);
1320
1397
  adContainerEl = container;
1321
1398
  }
1399
+ contentVideo[AD_CONTAINER_PROP] = adContainerEl;
1322
1400
  },
1323
1401
  requestAds: function requestAds(vastTagUrl) {
1324
1402
  return _async_to_generator(function() {
@@ -1421,8 +1499,9 @@ function createHlsAdPlayer(contentVideo, options) {
1421
1499
  if (!adVideoElement) {
1422
1500
  adVideoElement = createAdVideoElement();
1423
1501
  adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.appendChild(adVideoElement);
1424
- setupAdEventListeners();
1502
+ contentVideo[AD_VIDEO_PROP] = adVideoElement;
1425
1503
  }
1504
+ setupAdEventListeners();
1426
1505
  resetQuartileTracking(true);
1427
1506
  contentVolume = contentVideo.volume;
1428
1507
  originalVolume = Math.max(0, Math.min(1, contentVolume || originalVolume));
@@ -1550,11 +1629,8 @@ function createHlsAdPlayer(contentVideo, options) {
1550
1629
  setAdPlayingFlag(false);
1551
1630
  contentVideo.muted = originalMutedState;
1552
1631
  contentVideo.volume = Math.max(0, Math.min(1, originalVolume));
1632
+ teardownAdEventListeners();
1553
1633
  releaseAdDecoder();
1554
- if (adContainerEl === null || adContainerEl === void 0 ? void 0 : adContainerEl.parentElement) {
1555
- adContainerEl.parentElement.removeChild(adContainerEl);
1556
- }
1557
- adContainerEl = void 0;
1558
1634
  currentAd = void 0;
1559
1635
  podAds = [];
1560
1636
  podIndex = 0;
@@ -3967,6 +4043,11 @@ function detectBrowser() {
3967
4043
  chromeVersion: chromeVersionNum
3968
4044
  };
3969
4045
  }
4046
+ function requiresMediaPipelineResetAfterAds() {
4047
+ var _browser_tizenVersion;
4048
+ var browser = detectBrowser();
4049
+ return browser.name === "Samsung Tizen" && ((_browser_tizenVersion = browser.tizenVersion) !== null && _browser_tizenVersion !== void 0 ? _browser_tizenVersion : 0) >= 5;
4050
+ }
3970
4051
  function getBrowserConfigOverrides() {
3971
4052
  var browser = detectBrowser();
3972
4053
  var overrides = {};
@@ -6728,30 +6809,49 @@ var HlsEngine = /*#__PURE__*/ function() {
6728
6809
  {
6729
6810
  key: "reloadLiveStream",
6730
6811
  value: function reloadLiveStream() {
6812
+ var _this = this;
6731
6813
  var hls = this.hls;
6732
6814
  if (!hls) {
6733
6815
  return;
6734
6816
  }
6735
6817
  if (this.debug) {
6736
- console.log("[StormcloudVideoPlayer] Hard-reloading live stream (detach \u2192 reset video \u2192 re-attach)");
6818
+ console.log("[StormcloudVideoPlayer] Hard-reloading live stream (destroy hls \u2192 reset video \u2192 fresh setupHls)");
6737
6819
  }
6738
6820
  try {
6739
6821
  this.reloadingLiveStream = true;
6740
6822
  hls.stopLoad();
6741
6823
  hls.detachMedia();
6824
+ hls.destroy();
6825
+ this.hls = void 0;
6742
6826
  try {
6743
6827
  this.video.removeAttribute("src");
6744
6828
  this.video.load();
6745
6829
  } catch (error) {
6746
6830
  console.warn("[StormcloudVideoPlayer] video.load() threw after src removal:", error);
6747
6831
  }
6748
- hls.attachMedia(this.video);
6749
6832
  } catch (error) {
6750
6833
  this.reloadingLiveStream = false;
6834
+ this.hls = void 0;
6751
6835
  if (this.debug) {
6752
- console.warn("[StormcloudVideoPlayer] Failed to hard-reload live stream:", error);
6836
+ console.warn("[StormcloudVideoPlayer] Failed to tear down during hard-reload:", error);
6753
6837
  }
6838
+ return;
6754
6839
  }
6840
+ var recreateDelayMs = 600;
6841
+ window.setTimeout(function() {
6842
+ if (_this.hls) {
6843
+ _this.reloadingLiveStream = false;
6844
+ return;
6845
+ }
6846
+ try {
6847
+ _this.setupHls();
6848
+ } catch (error) {
6849
+ _this.reloadingLiveStream = false;
6850
+ if (_this.debug) {
6851
+ console.warn("[StormcloudVideoPlayer] Failed to rebuild pipeline during hard-reload:", error);
6852
+ }
6853
+ }
6854
+ }, recreateDelayMs);
6755
6855
  }
6756
6856
  },
6757
6857
  {
@@ -8064,6 +8164,14 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8064
8164
  this.host.video.style.visibility = "visible";
8065
8165
  this.host.video.style.opacity = "1";
8066
8166
  if (this.host.isLiveStream()) {
8167
+ if (this.host.requiresMediaPipelineResetAfterAds()) {
8168
+ if (this.debug) {
8169
+ console.log("[StormcloudVideoPlayer] Live break end \u2014 hard-reloading stream to reacquire decoder (single-decoder platform)");
8170
+ }
8171
+ this.host.reloadLiveStream();
8172
+ this.monitorLiveResumeStall(this.host.video.currentTime);
8173
+ return;
8174
+ }
8067
8175
  var liveSyncPos = this.host.getLiveSyncPosition();
8068
8176
  if (liveSyncPos != null && liveSyncPos > this.host.video.currentTime) {
8069
8177
  if (this.debug) {
@@ -8125,9 +8233,10 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8125
8233
  key: "monitorLiveResumeStall",
8126
8234
  value: function monitorLiveResumeStall(resumeBaseline) {
8127
8235
  var _this = this;
8236
+ var needsReset = this.host.requiresMediaPipelineResetAfterAds();
8128
8237
  var pollIntervalMs = 1e3;
8129
- var graceMs = 5e3;
8130
- var recoveryCooldownMs = 5e3;
8238
+ var graceMs = needsReset ? 8e3 : 5e3;
8239
+ var recoveryCooldownMs = needsReset ? 7e3 : 5e3;
8131
8240
  var maxRecoveries = 3;
8132
8241
  var maxMonitorMs = 45e3;
8133
8242
  var startTime = Date.now();
@@ -8241,7 +8350,12 @@ var AdBreakOrchestrator = /*#__PURE__*/ function() {
8241
8350
  if (canRecover) {
8242
8351
  recoveries++;
8243
8352
  lastRecoveryAt = Date.now();
8244
- if (recoveries === 1) {
8353
+ if (needsReset) {
8354
+ if (_this.debug) {
8355
+ console.warn("[StormcloudVideoPlayer] Content still wedged after ad break — hard-reloading live stream (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8356
+ }
8357
+ _this.host.reloadLiveStream();
8358
+ } else if (recoveries === 1) {
8245
8359
  if (_this.debug) {
8246
8360
  console.warn("[StormcloudVideoPlayer] Content wedged after ad break — calling recoverMediaError() (recovery ".concat(recoveries, "/").concat(maxRecoveries, ") — ").concat(_this.describeVideoState()));
8247
8361
  }
@@ -8454,6 +8568,9 @@ var StormcloudVideoPlayer = /*#__PURE__*/ function() {
8454
8568
  recoverMediaError: function recoverMediaError() {
8455
8569
  return _this.hlsEngine.recoverMediaError();
8456
8570
  },
8571
+ requiresMediaPipelineResetAfterAds: function requiresMediaPipelineResetAfterAds1() {
8572
+ return requiresMediaPipelineResetAfterAds();
8573
+ },
8457
8574
  generatePodVastUrl: function generatePodVastUrl(base, breakDurationMs) {
8458
8575
  return _this.generatePodVastUrl(base, breakDurationMs);
8459
8576
  }